UNPKG

merchi_checkout

Version:
495 lines (493 loc) 55.1 kB
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } import { ProductType, Role } from './types'; export var isoCountries = { AF: "Afghanistan", AX: "Aland Islands", AL: "Albania", DZ: "Algeria", AS: "American Samoa", AD: "Andorra", AO: "Angola", AI: "Anguilla", AQ: "Antarctica", AG: "Antigua And Barbuda", AR: "Argentina", AM: "Armenia", AW: "Aruba", AU: "Australia", AT: "Austria", AZ: "Azerbaijan", BS: "Bahamas", BH: "Bahrain", BD: "Bangladesh", BB: "Barbados", BY: "Belarus", BE: "Belgium", BZ: "Belize", BJ: "Benin", BM: "Bermuda", BT: "Bhutan", BO: "Bolivia", BA: "Bosnia And Herzegovina", BW: "Botswana", BV: "Bouvet Island", BR: "Brazil", IO: "British Indian Ocean Territory", BN: "Brunei Darussalam", BG: "Bulgaria", BF: "Burkina Faso", BI: "Burundi", KH: "Cambodia", CM: "Cameroon", CA: "Canada", CV: "Cape Verde", KY: "Cayman Islands", CF: "Central African Republic", TD: "Chad", CL: "Chile", CN: "China", CX: "Christmas Island", CC: "Cocos (Keeling) Islands", CO: "Colombia", KM: "Comoros", CG: "Congo", CD: "Congo, Democratic Republic", CK: "Cook Islands", CR: "Costa Rica", CI: "Cote D'Ivoire", HR: "Croatia", CU: "Cuba", CY: "Cyprus", CZ: "Czech Republic", DK: "Denmark", DJ: "Djibouti", DM: "Dominica", DO: "Dominican Republic", EC: "Ecuador", EG: "Egypt", SV: "El Salvador", GQ: "Equatorial Guinea", ER: "Eritrea", EE: "Estonia", ET: "Ethiopia", FK: "Falkland Islands (Malvinas)", FO: "Faroe Islands", FJ: "Fiji", FI: "Finland", FR: "France", GF: "French Guiana", PF: "French Polynesia", TF: "French Southern Territories", GA: "Gabon", GM: "Gambia", GE: "Georgia", DE: "Germany", GH: "Ghana", GI: "Gibraltar", GR: "Greece", GL: "Greenland", GD: "Grenada", GP: "Guadeloupe", GU: "Guam", GT: "Guatemala", GG: "Guernsey", GN: "Guinea", GW: "Guinea-Bissau", GY: "Guyana", HT: "Haiti", HM: "Heard Island & Mcdonald Islands", VA: "Holy See (Vatican City State)", HN: "Honduras", HK: "Hong Kong", HU: "Hungary", IS: "Iceland", IN: "India", ID: "Indonesia", IR: "Iran, Islamic Republic Of", IQ: "Iraq", IE: "Ireland", IM: "Isle Of Man", IL: "Israel", IT: "Italy", JM: "Jamaica", JP: "Japan", JE: "Jersey", JO: "Jordan", KZ: "Kazakhstan", KE: "Kenya", KI: "Kiribati", KR: "Korea", KW: "Kuwait", KG: "Kyrgyzstan", LA: "Lao People's Democratic Republic", LV: "Latvia", LB: "Lebanon", LS: "Lesotho", LR: "Liberia", LY: "Libyan Arab Jamahiriya", LI: "Liechtenstein", LT: "Lithuania", LU: "Luxembourg", MO: "Macao", MK: "Macedonia", MG: "Madagascar", MW: "Malawi", MY: "Malaysia", MV: "Maldives", ML: "Mali", MT: "Malta", MH: "Marshall Islands", MQ: "Martinique", MR: "Mauritania", MU: "Mauritius", YT: "Mayotte", MX: "Mexico", FM: "Micronesia, Federated States Of", MD: "Moldova", MC: "Monaco", MN: "Mongolia", ME: "Montenegro", MS: "Montserrat", MA: "Morocco", MZ: "Mozambique", MM: "Myanmar", NA: "Namibia", NR: "Nauru", NP: "Nepal", NL: "Netherlands", AN: "Netherlands Antilles", NC: "New Caledonia", NZ: "New Zealand", NI: "Nicaragua", NE: "Niger", NG: "Nigeria", NU: "Niue", NF: "Norfolk Island", MP: "Northern Mariana Islands", NO: "Norway", OM: "Oman", PK: "Pakistan", PW: "Palau", PS: "Palestinian Territory, Occupied", PA: "Panama", PG: "Papua New Guinea", PY: "Paraguay", PE: "Peru", PH: "Philippines", PN: "Pitcairn", PL: "Poland", PT: "Portugal", PR: "Puerto Rico", QA: "Qatar", RE: "Reunion", RO: "Romania", RU: "Russian Federation", RW: "Rwanda", BL: "Saint Barthelemy", SH: "Saint Helena", KN: "Saint Kitts And Nevis", LC: "Saint Lucia", MF: "Saint Martin", PM: "Saint Pierre And Miquelon", VC: "Saint Vincent And Grenadines", WS: "Samoa", SM: "San Marino", ST: "Sao Tome And Principe", SA: "Saudi Arabia", SN: "Senegal", RS: "Serbia", SC: "Seychelles", SL: "Sierra Leone", SG: "Singapore", SK: "Slovakia", SI: "Slovenia", SB: "Solomon Islands", SO: "Somalia", ZA: "South Africa", GS: "South Georgia And Sandwich Isl.", ES: "Spain", LK: "Sri Lanka", SD: "Sudan", SR: "Suriname", SJ: "Svalbard And Jan Mayen", SZ: "Swaziland", SE: "Sweden", CH: "Switzerland", SY: "Syrian Arab Republic", TW: "Taiwan", TJ: "Tajikistan", TZ: "Tanzania", TH: "Thailand", TL: "Timor-Leste", TG: "Togo", TK: "Tokelau", TO: "Tonga", TT: "Trinidad And Tobago", TN: "Tunisia", TR: "Turkey", TM: "Turkmenistan", TC: "Turks And Caicos Islands", TV: "Tuvalu", UG: "Uganda", UA: "Ukraine", AE: "United Arab Emirates", GB: "United Kingdom", US: "United States", UM: "United States Outlying Islands", UY: "Uruguay", UZ: "Uzbekistan", VU: "Vanuatu", VE: "Venezuela", VN: "Viet Nam", VG: "Virgin Islands, British", VI: "Virgin Islands, U.S.", WF: "Wallis And Futuna", EH: "Western Sahara", YE: "Yemen", ZM: "Zambia", ZW: "Zimbabwe" }; export function userDomainsByRoles(user, roles) { var eD = user && user.enrolledDomains ? user.enrolledDomains : []; var domains = []; var i = 0; for (i; i < eD.length; i++) { var e = eD[i]; if (roles.includes(e.role)) { domains.push(e.domain); } } return domains; } export function userAdminDomains(user) { return userDomainsByRoles(user, [Role.ADMIN, Role.MANAGER]); } export function isProductSupplierMOD(product) { var productType = product && product.productType; return product && [String(ProductType.SUPPLIER_MOD), String(ProductType.SUPPLIER_RESELL_MOD)].includes(String(productType)); } export function isUserRegistered(user) { var id = user ? user.id : null; return id !== undefined && id !== null && id > 0; } export function isRegisteredAndHasStore(user) { var id = user ? user.id : null; return id !== undefined && id !== null && id > 0 && user.hasStore; } var supportedNumbers = { AU: 'Australia (+61)', AE: 'United Arab Emirates (+971)', BH: 'Bahrain (+973)', CN: 'China (+86)', DK: 'Denmark (+45)', ES: 'Spain (+34)', FR: 'France (+33)', GB: 'United Kingdom (+44)', HK: 'Hong Kong (+852)', ID: 'Indonesia (+62)', IN: 'India (+91)', IT: 'Italy (+39)', KR: 'South Korea (+82)', NC: 'New Caledonia (+687)', NZ: 'New Zealand (+64)', OM: 'Oman (+968)', PH: 'Philippines (+63)', PT: 'Portugal (+351)', QA: 'Qatar (+974)', SE: 'Sweden (+46)', SG: 'Singapore (+65)', TH: 'Thailand (+66)', US: 'United States (+1)', ZA: 'South Africa (+27)' }; export var phoneOptions = Object.keys(supportedNumbers).map(function (key) { return { value: key, label: supportedNumbers[key] }; }); export var addressComponentsSettingsBackend = { administrative_area_level_1: 'shortName', administrative_area_level_2: 'shortName', country: 'shortName', establishment: 'longName', floor: 'shortName', locality: 'longName', postal_code: 'shortName', premise: 'shortName', room: 'longName', route: 'shortName', street_number: 'shortName', sublocality: 'longName', subpremise: 'shortName' }; export function googlePlacesResultAsNewAddress(placeDetails) { var addressComponents = (placeDetails === null || placeDetails === void 0 ? void 0 : placeDetails.addressComponents) || []; var name = (placeDetails === null || placeDetails === void 0 ? void 0 : placeDetails.name) || ''; var address = { city: '', country: '', lineOne: name ? name : '', lineTwo: '', postcode: '', state: '' }; if (addressComponents && addressComponents.length > 0) { for (var i = 0; i < addressComponents.length; i++) { var addrComponent = addressComponents[i]; var addrTypes = addrComponent.types; // Find the first relevant type that we have a setting for var addrType = null; var componentSetting = null; var _iterator = _createForOfIteratorHelper(addrTypes), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var type = _step.value; if (addressComponentsSettingsBackend[type]) { addrType = type; componentSetting = addressComponentsSettingsBackend[type]; break; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } if (componentSetting && addrType) { var addressVal = addrComponent[componentSetting]; switch (addrType) { case 'establishment': case 'room': case 'floor': case 'street_number': case 'premise': case 'subpremise': case 'route': var oldLineOne = address.lineOne; address.lineOne = oldLineOne.includes(addressVal) ? oldLineOne : "".concat(oldLineOne, " ").concat(addressVal).trim(); break; case 'locality': case 'sublocality': var oldCity = address.city ? "".concat(address.city, " ") : ''; address.city = (oldCity + addressVal).trim(); break; case 'administrative_area_level_1': address.state = addressVal; break; case 'administrative_area_level_2': break; case 'country': address.country = addressVal; break; case 'postal_code': address.postcode = addressVal; break; default: break; } } } // Clean up line one if it's empty and we have a formatted address if (!address.lineOne.trim() && placeDetails !== null && placeDetails !== void 0 && placeDetails.formattedAddress) { // Try to extract street address from formatted address var parts = placeDetails.formattedAddress.split(','); if (parts.length > 0) { address.lineOne = parts[0].trim(); } } return address; } return null; } export function addressInOneLine(address) { var a = address ? address : {}; var city = a.city, country = a.country, lineOne = a.lineOne, lineTwo = a.lineTwo, postcode = a.postcode, state = a.state; var l1 = lineOne ? "".concat(lineOne, " ") : ''; var l2 = lineTwo ? "".concat(lineTwo, " ") : ''; var c = city ? "".concat(city, " ") : ''; var s = state ? "".concat(state, " ") : ''; var p = postcode ? "".concat(postcode, " ") : ''; var countryFull = country ? isoCountries[country] : ''; return l1 + l2 + c + s + p + countryFull; } export var FieldType = /*#__PURE__*/function (FieldType) { FieldType[FieldType["TEXT_INPUT"] = 1] = "TEXT_INPUT"; FieldType[FieldType["SELECT"] = 2] = "SELECT"; FieldType[FieldType["FILE_UPLOAD"] = 3] = "FILE_UPLOAD"; FieldType[FieldType["TEXT_AREA"] = 4] = "TEXT_AREA"; FieldType[FieldType["NUMBER_INPUT"] = 5] = "NUMBER_INPUT"; FieldType[FieldType["CHECKBOX"] = 6] = "CHECKBOX"; FieldType[FieldType["RADIO"] = 7] = "RADIO"; FieldType[FieldType["FIELD_INSTRUCTIONS"] = 8] = "FIELD_INSTRUCTIONS"; FieldType[FieldType["IMAGE_SELECT"] = 9] = "IMAGE_SELECT"; FieldType[FieldType["COLOUR_PICKER"] = 10] = "COLOUR_PICKER"; FieldType[FieldType["COLOUR_SELECT"] = 11] = "COLOUR_SELECT"; return FieldType; }({}); export function isSelectable(fieldType) { return [FieldType.SELECT, FieldType.CHECKBOX, FieldType.RADIO, FieldType.IMAGE_SELECT, FieldType.COLOUR_SELECT].includes(fieldType); } export function isInstructionsType(fieldType) { return String(FieldType.FIELD_INSTRUCTIONS) === String(fieldType); } export var countryDefaultDict = function countryDefaultDict(currency) { return { currency: currency }; }; export var supportedCountryDefaults = { AE: countryDefaultDict('USD'), AU: countryDefaultDict('AUD'), BH: countryDefaultDict('USD'), CH: countryDefaultDict('CNY'), DK: countryDefaultDict('EUR'), ES: countryDefaultDict('EUR'), FR: countryDefaultDict('EUR'), GB: countryDefaultDict('GBP'), HK: countryDefaultDict('HKD'), ID: countryDefaultDict('USD'), IN: countryDefaultDict('INR'), IT: countryDefaultDict('EUR'), KR: countryDefaultDict('USD'), NC: countryDefaultDict('USD'), NZ: countryDefaultDict('NZD'), OM: countryDefaultDict('USD'), PH: countryDefaultDict('USD'), PT: countryDefaultDict('EUR'), QA: countryDefaultDict('USD'), SE: countryDefaultDict('USD'), SG: countryDefaultDict('SGD'), TH: countryDefaultDict('USD'), US: countryDefaultDict('USD'), ZA: countryDefaultDict('USD') }; export var supportedCountryDefaultsWithDefault = function supportedCountryDefaultsWithDefault(countryCode) { var defaultCountryValues = supportedCountryDefaults[countryCode]; return defaultCountryValues ? defaultCountryValues : supportedCountryDefaults.AU; }; export function cleanClientFiles(clientFiles) { return clientFiles.map(function (clientFile) { return clientFile.file; }); } export function appendClientToOwnDraft(job) { var ownDrafts = job.ownDrafts; if (job.ownDrafts && job.ownDrafts.length) { job.ownDrafts[0].designer = job.client; } return job; } export function redirectOnSuccess(url, redirectWithValue, value) { var cleanUrl = url.replace('%27', '').replace('%91', '').replace('%92', '').replace('%93', '').replace('%94', ''); window.location.href = decodeURI(redirectWithValue ? "".concat(cleanUrl, "merchiValue=").concat(value) : cleanUrl); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9kdWN0VHlwZSIsIlJvbGUiLCJpc29Db3VudHJpZXMiLCJBRiIsIkFYIiwiQUwiLCJEWiIsIkFTIiwiQUQiLCJBTyIsIkFJIiwiQVEiLCJBRyIsIkFSIiwiQU0iLCJBVyIsIkFVIiwiQVQiLCJBWiIsIkJTIiwiQkgiLCJCRCIsIkJCIiwiQlkiLCJCRSIsIkJaIiwiQkoiLCJCTSIsIkJUIiwiQk8iLCJCQSIsIkJXIiwiQlYiLCJCUiIsIklPIiwiQk4iLCJCRyIsIkJGIiwiQkkiLCJLSCIsIkNNIiwiQ0EiLCJDViIsIktZIiwiQ0YiLCJURCIsIkNMIiwiQ04iLCJDWCIsIkNDIiwiQ08iLCJLTSIsIkNHIiwiQ0QiLCJDSyIsIkNSIiwiQ0kiLCJIUiIsIkNVIiwiQ1kiLCJDWiIsIkRLIiwiREoiLCJETSIsIkRPIiwiRUMiLCJFRyIsIlNWIiwiR1EiLCJFUiIsIkVFIiwiRVQiLCJGSyIsIkZPIiwiRkoiLCJGSSIsIkZSIiwiR0YiLCJQRiIsIlRGIiwiR0EiLCJHTSIsIkdFIiwiREUiLCJHSCIsIkdJIiwiR1IiLCJHTCIsIkdEIiwiR1AiLCJHVSIsIkdUIiwiR0ciLCJHTiIsIkdXIiwiR1kiLCJIVCIsIkhNIiwiVkEiLCJITiIsIkhLIiwiSFUiLCJJUyIsIklOIiwiSUQiLCJJUiIsIklRIiwiSUUiLCJJTSIsIklMIiwiSVQiLCJKTSIsIkpQIiwiSkUiLCJKTyIsIktaIiwiS0UiLCJLSSIsIktSIiwiS1ciLCJLRyIsIkxBIiwiTFYiLCJMQiIsIkxTIiwiTFIiLCJMWSIsIkxJIiwiTFQiLCJMVSIsIk1PIiwiTUsiLCJNRyIsIk1XIiwiTVkiLCJNViIsIk1MIiwiTVQiLCJNSCIsIk1RIiwiTVIiLCJNVSIsIllUIiwiTVgiLCJGTSIsIk1EIiwiTUMiLCJNTiIsIk1FIiwiTVMiLCJNQSIsIk1aIiwiTU0iLCJOQSIsIk5SIiwiTlAiLCJOTCIsIkFOIiwiTkMiLCJOWiIsIk5JIiwiTkUiLCJORyIsIk5VIiwiTkYiLCJNUCIsIk5PIiwiT00iLCJQSyIsIlBXIiwiUFMiLCJQQSIsIlBHIiwiUFkiLCJQRSIsIlBIIiwiUE4iLCJQTCIsIlBUIiwiUFIiLCJRQSIsIlJFIiwiUk8iLCJSVSIsIlJXIiwiQkwiLCJTSCIsIktOIiwiTEMiLCJNRiIsIlBNIiwiVkMiLCJXUyIsIlNNIiwiU1QiLCJTQSIsIlNOIiwiUlMiLCJTQyIsIlNMIiwiU0ciLCJTSyIsIlNJIiwiU0IiLCJTTyIsIlpBIiwiR1MiLCJFUyIsIkxLIiwiU0QiLCJTUiIsIlNKIiwiU1oiLCJTRSIsIkNIIiwiU1kiLCJUVyIsIlRKIiwiVFoiLCJUSCIsIlRMIiwiVEciLCJUSyIsIlRPIiwiVFQiLCJUTiIsIlRSIiwiVE0iLCJUQyIsIlRWIiwiVUciLCJVQSIsIkFFIiwiR0IiLCJVUyIsIlVNIiwiVVkiLCJVWiIsIlZVIiwiVkUiLCJWTiIsIlZHIiwiVkkiLCJXRiIsIkVIIiwiWUUiLCJaTSIsIlpXIiwidXNlckRvbWFpbnNCeVJvbGVzIiwidXNlciIsInJvbGVzIiwiZUQiLCJlbnJvbGxlZERvbWFpbnMiLCJkb21haW5zIiwiaSIsImxlbmd0aCIsImUiLCJpbmNsdWRlcyIsInJvbGUiLCJwdXNoIiwiZG9tYWluIiwidXNlckFkbWluRG9tYWlucyIsIkFETUlOIiwiTUFOQUdFUiIsImlzUHJvZHVjdFN1cHBsaWVyTU9EIiwicHJvZHVjdCIsInByb2R1Y3RUeXBlIiwiU3RyaW5nIiwiU1VQUExJRVJfTU9EIiwiU1VQUExJRVJfUkVTRUxMX01PRCIsImlzVXNlclJlZ2lzdGVyZWQiLCJpZCIsInVuZGVmaW5lZCIsImlzUmVnaXN0ZXJlZEFuZEhhc1N0b3JlIiwiaGFzU3RvcmUiLCJzdXBwb3J0ZWROdW1iZXJzIiwicGhvbmVPcHRpb25zIiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsImtleSIsInZhbHVlIiwibGFiZWwiLCJhZGRyZXNzQ29tcG9uZW50c1NldHRpbmdzQmFja2VuZCIsImFkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMSIsImFkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMiIsImNvdW50cnkiLCJlc3RhYmxpc2htZW50IiwiZmxvb3IiLCJsb2NhbGl0eSIsInBvc3RhbF9jb2RlIiwicHJlbWlzZSIsInJvb20iLCJyb3V0ZSIsInN0cmVldF9udW1iZXIiLCJzdWJsb2NhbGl0eSIsInN1YnByZW1pc2UiLCJnb29nbGVQbGFjZXNSZXN1bHRBc05ld0FkZHJlc3MiLCJwbGFjZURldGFpbHMiLCJhZGRyZXNzQ29tcG9uZW50cyIsIm5hbWUiLCJhZGRyZXNzIiwiY2l0eSIsImxpbmVPbmUiLCJsaW5lVHdvIiwicG9zdGNvZGUiLCJzdGF0ZSIsImFkZHJDb21wb25lbnQiLCJhZGRyVHlwZXMiLCJ0eXBlcyIsImFkZHJUeXBlIiwiY29tcG9uZW50U2V0dGluZyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ0eXBlIiwiZXJyIiwiZiIsImFkZHJlc3NWYWwiLCJvbGRMaW5lT25lIiwiY29uY2F0IiwidHJpbSIsIm9sZENpdHkiLCJmb3JtYXR0ZWRBZGRyZXNzIiwicGFydHMiLCJzcGxpdCIsImFkZHJlc3NJbk9uZUxpbmUiLCJhIiwibDEiLCJsMiIsImMiLCJwIiwiY291bnRyeUZ1bGwiLCJGaWVsZFR5cGUiLCJpc1NlbGVjdGFibGUiLCJmaWVsZFR5cGUiLCJTRUxFQ1QiLCJDSEVDS0JPWCIsIlJBRElPIiwiSU1BR0VfU0VMRUNUIiwiQ09MT1VSX1NFTEVDVCIsImlzSW5zdHJ1Y3Rpb25zVHlwZSIsIkZJRUxEX0lOU1RSVUNUSU9OUyIsImNvdW50cnlEZWZhdWx0RGljdCIsImN1cnJlbmN5Iiwic3VwcG9ydGVkQ291bnRyeURlZmF1bHRzIiwic3VwcG9ydGVkQ291bnRyeURlZmF1bHRzV2l0aERlZmF1bHQiLCJjb3VudHJ5Q29kZSIsImRlZmF1bHRDb3VudHJ5VmFsdWVzIiwiY2xlYW5DbGllbnRGaWxlcyIsImNsaWVudEZpbGVzIiwiY2xpZW50RmlsZSIsImZpbGUiLCJhcHBlbmRDbGllbnRUb093bkRyYWZ0Iiwiam9iIiwib3duRHJhZnRzIiwiZGVzaWduZXIiLCJjbGllbnQiLCJyZWRpcmVjdE9uU3VjY2VzcyIsInVybCIsInJlZGlyZWN0V2l0aFZhbHVlIiwiY2xlYW5VcmwiLCJyZXBsYWNlIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiZGVjb2RlVVJJIl0sInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2R1Y3RUeXBlLCBSb2xlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpc29Db3VudHJpZXM6IGFueSA9IHtcbiAgQUY6IFwiQWZnaGFuaXN0YW5cIixcbiAgQVg6IFwiQWxhbmQgSXNsYW5kc1wiLFxuICBBTDogXCJBbGJhbmlhXCIsXG4gIERaOiBcIkFsZ2VyaWFcIixcbiAgQVM6IFwiQW1lcmljYW4gU2Ftb2FcIixcbiAgQUQ6IFwiQW5kb3JyYVwiLFxuICBBTzogXCJBbmdvbGFcIixcbiAgQUk6IFwiQW5ndWlsbGFcIixcbiAgQVE6IFwiQW50YXJjdGljYVwiLFxuICBBRzogXCJBbnRpZ3VhIEFuZCBCYXJidWRhXCIsXG4gIEFSOiBcIkFyZ2VudGluYVwiLFxuICBBTTogXCJBcm1lbmlhXCIsXG4gIEFXOiBcIkFydWJhXCIsXG4gIEFVOiBcIkF1c3RyYWxpYVwiLFxuICBBVDogXCJBdXN0cmlhXCIsXG4gIEFaOiBcIkF6ZXJiYWlqYW5cIixcbiAgQlM6IFwiQmFoYW1hc1wiLFxuICBCSDogXCJCYWhyYWluXCIsXG4gIEJEOiBcIkJhbmdsYWRlc2hcIixcbiAgQkI6IFwiQmFyYmFkb3NcIixcbiAgQlk6IFwiQmVsYXJ1c1wiLFxuICBCRTogXCJCZWxnaXVtXCIsXG4gIEJaOiBcIkJlbGl6ZVwiLFxuICBCSjogXCJCZW5pblwiLFxuICBCTTogXCJCZXJtdWRhXCIsXG4gIEJUOiBcIkJodXRhblwiLFxuICBCTzogXCJCb2xpdmlhXCIsXG4gIEJBOiBcIkJvc25pYSBBbmQgSGVyemVnb3ZpbmFcIixcbiAgQlc6IFwiQm90c3dhbmFcIixcbiAgQlY6IFwiQm91dmV0IElzbGFuZFwiLFxuICBCUjogXCJCcmF6aWxcIixcbiAgSU86IFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XCIsXG4gIEJOOiBcIkJydW5laSBEYXJ1c3NhbGFtXCIsXG4gIEJHOiBcIkJ1bGdhcmlhXCIsXG4gIEJGOiBcIkJ1cmtpbmEgRmFzb1wiLFxuICBCSTogXCJCdXJ1bmRpXCIsXG4gIEtIOiBcIkNhbWJvZGlhXCIsXG4gIENNOiBcIkNhbWVyb29uXCIsXG4gIENBOiBcIkNhbmFkYVwiLFxuICBDVjogXCJDYXBlIFZlcmRlXCIsXG4gIEtZOiBcIkNheW1hbiBJc2xhbmRzXCIsXG4gIENGOiBcIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpY1wiLFxuICBURDogXCJDaGFkXCIsXG4gIENMOiBcIkNoaWxlXCIsXG4gIENOOiBcIkNoaW5hXCIsXG4gIENYOiBcIkNocmlzdG1hcyBJc2xhbmRcIixcbiAgQ0M6IFwiQ29jb3MgKEtlZWxpbmcpIElzbGFuZHNcIixcbiAgQ086IFwiQ29sb21iaWFcIixcbiAgS006IFwiQ29tb3Jvc1wiLFxuICBDRzogXCJDb25nb1wiLFxuICBDRDogXCJDb25nbywgRGVtb2NyYXRpYyBSZXB1YmxpY1wiLFxuICBDSzogXCJDb29rIElzbGFuZHNcIixcbiAgQ1I6IFwiQ29zdGEgUmljYVwiLFxuICBDSTogXCJDb3RlIEQnSXZvaXJlXCIsXG4gIEhSOiBcIkNyb2F0aWFcIixcbiAgQ1U6IFwiQ3ViYVwiLFxuICBDWTogXCJDeXBydXNcIixcbiAgQ1o6IFwiQ3plY2ggUmVwdWJsaWNcIixcbiAgREs6IFwiRGVubWFya1wiLFxuICBESjogXCJEamlib3V0aVwiLFxuICBETTogXCJEb21pbmljYVwiLFxuICBETzogXCJEb21pbmljYW4gUmVwdWJsaWNcIixcbiAgRUM6IFwiRWN1YWRvclwiLFxuICBFRzogXCJFZ3lwdFwiLFxuICBTVjogXCJFbCBTYWx2YWRvclwiLFxuICBHUTogXCJFcXVhdG9yaWFsIEd1aW5lYVwiLFxuICBFUjogXCJFcml0cmVhXCIsXG4gIEVFOiBcIkVzdG9uaWFcIixcbiAgRVQ6IFwiRXRoaW9waWFcIixcbiAgRks6IFwiRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpXCIsXG4gIEZPOiBcIkZhcm9lIElzbGFuZHNcIixcbiAgRko6IFwiRmlqaVwiLFxuICBGSTogXCJGaW5sYW5kXCIsXG4gIEZSOiBcIkZyYW5jZVwiLFxuICBHRjogXCJGcmVuY2ggR3VpYW5hXCIsXG4gIFBGOiBcIkZyZW5jaCBQb2x5bmVzaWFcIixcbiAgVEY6IFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXCIsXG4gIEdBOiBcIkdhYm9uXCIsXG4gIEdNOiBcIkdhbWJpYVwiLFxuICBHRTogXCJHZW9yZ2lhXCIsXG4gIERFOiBcIkdlcm1hbnlcIixcbiAgR0g6IFwiR2hhbmFcIixcbiAgR0k6IFwiR2licmFsdGFyXCIsXG4gIEdSOiBcIkdyZWVjZVwiLFxuICBHTDogXCJHcmVlbmxhbmRcIixcbiAgR0Q6IFwiR3JlbmFkYVwiLFxuICBHUDogXCJHdWFkZWxvdXBlXCIsXG4gIEdVOiBcIkd1YW1cIixcbiAgR1Q6IFwiR3VhdGVtYWxhXCIsXG4gIEdHOiBcIkd1ZXJuc2V5XCIsXG4gIEdOOiBcIkd1aW5lYVwiLFxuICBHVzogXCJHdWluZWEtQmlzc2F1XCIsXG4gIEdZOiBcIkd1eWFuYVwiLFxuICBIVDogXCJIYWl0aVwiLFxuICBITTogXCJIZWFyZCBJc2xhbmQgJiBNY2RvbmFsZCBJc2xhbmRzXCIsXG4gIFZBOiBcIkhvbHkgU2VlIChWYXRpY2FuIENpdHkgU3RhdGUpXCIsXG4gIEhOOiBcIkhvbmR1cmFzXCIsXG4gIEhLOiBcIkhvbmcgS29uZ1wiLFxuICBIVTogXCJIdW5nYXJ5XCIsXG4gIElTOiBcIkljZWxhbmRcIixcbiAgSU46IFwiSW5kaWFcIixcbiAgSUQ6IFwiSW5kb25lc2lhXCIsXG4gIElSOiBcIklyYW4sIElzbGFtaWMgUmVwdWJsaWMgT2ZcIixcbiAgSVE6IFwiSXJhcVwiLFxuICBJRTogXCJJcmVsYW5kXCIsXG4gIElNOiBcIklzbGUgT2YgTWFuXCIsXG4gIElMOiBcIklzcmFlbFwiLFxuICBJVDogXCJJdGFseVwiLFxuICBKTTogXCJKYW1haWNhXCIsXG4gIEpQOiBcIkphcGFuXCIsXG4gIEpFOiBcIkplcnNleVwiLFxuICBKTzogXCJKb3JkYW5cIixcbiAgS1o6IFwiS2F6YWtoc3RhblwiLFxuICBLRTogXCJLZW55YVwiLFxuICBLSTogXCJLaXJpYmF0aVwiLFxuICBLUjogXCJLb3JlYVwiLFxuICBLVzogXCJLdXdhaXRcIixcbiAgS0c6IFwiS3lyZ3l6c3RhblwiLFxuICBMQTogXCJMYW8gUGVvcGxlJ3MgRGVtb2NyYXRpYyBSZXB1YmxpY1wiLFxuICBMVjogXCJMYXR2aWFcIixcbiAgTEI6IFwiTGViYW5vblwiLFxuICBMUzogXCJMZXNvdGhvXCIsXG4gIExSOiBcIkxpYmVyaWFcIixcbiAgTFk6IFwiTGlieWFuIEFyYWIgSmFtYWhpcml5YVwiLFxuICBMSTogXCJMaWVjaHRlbnN0ZWluXCIsXG4gIExUOiBcIkxpdGh1YW5pYVwiLFxuICBMVTogXCJMdXhlbWJvdXJnXCIsXG4gIE1POiBcIk1hY2FvXCIsXG4gIE1LOiBcIk1hY2Vkb25pYVwiLFxuICBNRzogXCJNYWRhZ2FzY2FyXCIsXG4gIE1XOiBcIk1hbGF3aVwiLFxuICBNWTogXCJNYWxheXNpYVwiLFxuICBNVjogXCJNYWxkaXZlc1wiLFxuICBNTDogXCJNYWxpXCIsXG4gIE1UOiBcIk1hbHRhXCIsXG4gIE1IOiBcIk1hcnNoYWxsIElzbGFuZHNcIixcbiAgTVE6IFwiTWFydGluaXF1ZVwiLFxuICBNUjogXCJNYXVyaXRhbmlhXCIsXG4gIE1VOiBcIk1hdXJpdGl1c1wiLFxuICBZVDogXCJNYXlvdHRlXCIsXG4gIE1YOiBcIk1leGljb1wiLFxuICBGTTogXCJNaWNyb25lc2lhLCBGZWRlcmF0ZWQgU3RhdGVzIE9mXCIsXG4gIE1EOiBcIk1vbGRvdmFcIixcbiAgTUM6IFwiTW9uYWNvXCIsXG4gIE1OOiBcIk1vbmdvbGlhXCIsXG4gIE1FOiBcIk1vbnRlbmVncm9cIixcbiAgTVM6IFwiTW9udHNlcnJhdFwiLFxuICBNQTogXCJNb3JvY2NvXCIsXG4gIE1aOiBcIk1vemFtYmlxdWVcIixcbiAgTU06IFwiTXlhbm1hclwiLFxuICBOQTogXCJOYW1pYmlhXCIsXG4gIE5SOiBcIk5hdXJ1XCIsXG4gIE5QOiBcIk5lcGFsXCIsXG4gIE5MOiBcIk5ldGhlcmxhbmRzXCIsXG4gIEFOOiBcIk5ldGhlcmxhbmRzIEFudGlsbGVzXCIsXG4gIE5DOiBcIk5ldyBDYWxlZG9uaWFcIixcbiAgTlo6IFwiTmV3IFplYWxhbmRcIixcbiAgTkk6IFwiTmljYXJhZ3VhXCIsXG4gIE5FOiBcIk5pZ2VyXCIsXG4gIE5HOiBcIk5pZ2VyaWFcIixcbiAgTlU6IFwiTml1ZVwiLFxuICBORjogXCJOb3Jmb2xrIElzbGFuZFwiLFxuICBNUDogXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcIixcbiAgTk86IFwiTm9yd2F5XCIsXG4gIE9NOiBcIk9tYW5cIixcbiAgUEs6IFwiUGFraXN0YW5cIixcbiAgUFc6IFwiUGFsYXVcIixcbiAgUFM6IFwiUGFsZXN0aW5pYW4gVGVycml0b3J5LCBPY2N1cGllZFwiLFxuICBQQTogXCJQYW5hbWFcIixcbiAgUEc6IFwiUGFwdWEgTmV3IEd1aW5lYVwiLFxuICBQWTogXCJQYXJhZ3VheVwiLFxuICBQRTogXCJQZXJ1XCIsXG4gIFBIOiBcIlBoaWxpcHBpbmVzXCIsXG4gIFBOOiBcIlBpdGNhaXJuXCIsXG4gIFBMOiBcIlBvbGFuZFwiLFxuICBQVDogXCJQb3J0dWdhbFwiLFxuICBQUjogXCJQdWVydG8gUmljb1wiLFxuICBRQTogXCJRYXRhclwiLFxuICBSRTogXCJSZXVuaW9uXCIsXG4gIFJPOiBcIlJvbWFuaWFcIixcbiAgUlU6IFwiUnVzc2lhbiBGZWRlcmF0aW9uXCIsXG4gIFJXOiBcIlJ3YW5kYVwiLFxuICBCTDogXCJTYWludCBCYXJ0aGVsZW15XCIsXG4gIFNIOiBcIlNhaW50IEhlbGVuYVwiLFxuICBLTjogXCJTYWludCBLaXR0cyBBbmQgTmV2aXNcIixcbiAgTEM6IFwiU2FpbnQgTHVjaWFcIixcbiAgTUY6IFwiU2FpbnQgTWFydGluXCIsXG4gIFBNOiBcIlNhaW50IFBpZXJyZSBBbmQgTWlxdWVsb25cIixcbiAgVkM6IFwiU2FpbnQgVmluY2VudCBBbmQgR3JlbmFkaW5lc1wiLFxuICBXUzogXCJTYW1vYVwiLFxuICBTTTogXCJTYW4gTWFyaW5vXCIsXG4gIFNUOiBcIlNhbyBUb21lIEFuZCBQcmluY2lwZVwiLFxuICBTQTogXCJTYXVkaSBBcmFiaWFcIixcbiAgU046IFwiU2VuZWdhbFwiLFxuICBSUzogXCJTZXJiaWFcIixcbiAgU0M6IFwiU2V5Y2hlbGxlc1wiLFxuICBTTDogXCJTaWVycmEgTGVvbmVcIixcbiAgU0c6IFwiU2luZ2Fwb3JlXCIsXG4gIFNLOiBcIlNsb3Zha2lhXCIsXG4gIFNJOiBcIlNsb3ZlbmlhXCIsXG4gIFNCOiBcIlNvbG9tb24gSXNsYW5kc1wiLFxuICBTTzogXCJTb21hbGlhXCIsXG4gIFpBOiBcIlNvdXRoIEFmcmljYVwiLFxuICBHUzogXCJTb3V0aCBHZW9yZ2lhIEFuZCBTYW5kd2ljaCBJc2wuXCIsXG4gIEVTOiBcIlNwYWluXCIsXG4gIExLOiBcIlNyaSBMYW5rYVwiLFxuICBTRDogXCJTdWRhblwiLFxuICBTUjogXCJTdXJpbmFtZVwiLFxuICBTSjogXCJTdmFsYmFyZCBBbmQgSmFuIE1heWVuXCIsXG4gIFNaOiBcIlN3YXppbGFuZFwiLFxuICBTRTogXCJTd2VkZW5cIixcbiAgQ0g6IFwiU3dpdHplcmxhbmRcIixcbiAgU1k6IFwiU3lyaWFuIEFyYWIgUmVwdWJsaWNcIixcbiAgVFc6IFwiVGFpd2FuXCIsXG4gIFRKOiBcIlRhamlraXN0YW5cIixcbiAgVFo6IFwiVGFuemFuaWFcIixcbiAgVEg6IFwiVGhhaWxhbmRcIixcbiAgVEw6IFwiVGltb3ItTGVzdGVcIixcbiAgVEc6IFwiVG9nb1wiLFxuICBUSzogXCJUb2tlbGF1XCIsXG4gIFRPOiBcIlRvbmdhXCIsXG4gIFRUOiBcIlRyaW5pZGFkIEFuZCBUb2JhZ29cIixcbiAgVE46IFwiVHVuaXNpYVwiLFxuICBUUjogXCJUdXJrZXlcIixcbiAgVE06IFwiVHVya21lbmlzdGFuXCIsXG4gIFRDOiBcIlR1cmtzIEFuZCBDYWljb3MgSXNsYW5kc1wiLFxuICBUVjogXCJUdXZhbHVcIixcbiAgVUc6IFwiVWdhbmRhXCIsXG4gIFVBOiBcIlVrcmFpbmVcIixcbiAgQUU6IFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcIixcbiAgR0I6IFwiVW5pdGVkIEtpbmdkb21cIixcbiAgVVM6IFwiVW5pdGVkIFN0YXRlc1wiLFxuICBVTTogXCJVbml0ZWQgU3RhdGVzIE91dGx5aW5nIElzbGFuZHNcIixcbiAgVVk6IFwiVXJ1Z3VheVwiLFxuICBVWjogXCJVemJla2lzdGFuXCIsXG4gIFZVOiBcIlZhbnVhdHVcIixcbiAgVkU6IFwiVmVuZXp1ZWxhXCIsXG4gIFZOOiBcIlZpZXQgTmFtXCIsXG4gIFZHOiBcIlZpcmdpbiBJc2xhbmRzLCBCcml0aXNoXCIsXG4gIFZJOiBcIlZpcmdpbiBJc2xhbmRzLCBVLlMuXCIsXG4gIFdGOiBcIldhbGxpcyBBbmQgRnV0dW5hXCIsXG4gIEVIOiBcIldlc3Rlcm4gU2FoYXJhXCIsXG4gIFlFOiBcIlllbWVuXCIsXG4gIFpNOiBcIlphbWJpYVwiLFxuICBaVzogXCJaaW1iYWJ3ZVwiXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlckRvbWFpbnNCeVJvbGVzKHVzZXI6IGFueSwgcm9sZXM6IEFycmF5PG51bWJlcj4pIHtcbiAgY29uc3QgZUQgPSB1c2VyICYmIHVzZXIuZW5yb2xsZWREb21haW5zID8gdXNlci5lbnJvbGxlZERvbWFpbnMgOiBbXTtcbiAgY29uc3QgZG9tYWluczogYW55W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuICBmb3IgKGk7IGkgPCBlRC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGUgPSBlRFtpXTtcbiAgICBpZiAocm9sZXMuaW5jbHVkZXMoZS5yb2xlKSkge1xuICAgICAgZG9tYWlucy5wdXNoKChlIGFzIGFueSkuZG9tYWluKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvbWFpbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VyQWRtaW5Eb21haW5zKHVzZXI6IGFueSkge1xuICByZXR1cm4gdXNlckRvbWFpbnNCeVJvbGVzKHVzZXIsIFtSb2xlLkFETUlOLCBSb2xlLk1BTkFHRVJdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvZHVjdFN1cHBsaWVyTU9EKHByb2R1Y3Q6IGFueSkge1xuICBjb25zdCBwcm9kdWN0VHlwZSA9IHByb2R1Y3QgJiYgcHJvZHVjdC5wcm9kdWN0VHlwZVxuICByZXR1cm4gcHJvZHVjdCAmJiBbXG4gICAgU3RyaW5nKFByb2R1Y3RUeXBlLlNVUFBMSUVSX01PRCksXG4gICAgU3RyaW5nKFByb2R1Y3RUeXBlLlNVUFBMSUVSX1JFU0VMTF9NT0QpXG4gIF0uaW5jbHVkZXMoU3RyaW5nKHByb2R1Y3RUeXBlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VzZXJSZWdpc3RlcmVkKHVzZXI6IGFueSkge1xuICBjb25zdCBpZCA9IHVzZXIgPyB1c2VyLmlkIDogbnVsbDtcbiAgcmV0dXJuIGlkICE9PSB1bmRlZmluZWQgJiYgaWQgIT09IG51bGwgJiYgaWQgPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWdpc3RlcmVkQW5kSGFzU3RvcmUodXNlcjogYW55KSB7XG4gIGNvbnN0IGlkID0gdXNlciA/IHVzZXIuaWQgOiBudWxsO1xuICByZXR1cm4gaWQgIT09IHVuZGVmaW5lZCAmJiBpZCAhPT0gbnVsbCAmJiBpZCA+IDAgJiYgdXNlci5oYXNTdG9yZTtcbn1cblxuY29uc3Qgc3VwcG9ydGVkTnVtYmVyczogYW55ID0ge1xuICBBVTogJ0F1c3RyYWxpYSAoKzYxKScsXG4gIEFFOiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMgKCs5NzEpJyxcbiAgQkg6ICdCYWhyYWluICgrOTczKScsXG4gIENOOiAnQ2hpbmEgKCs4NiknLFxuICBESzogJ0Rlbm1hcmsgKCs0NSknLFxuICBFUzogJ1NwYWluICgrMzQpJyxcbiAgRlI6ICdGcmFuY2UgKCszMyknLFxuICBHQjogJ1VuaXRlZCBLaW5nZG9tICgrNDQpJyxcbiAgSEs6ICdIb25nIEtvbmcgKCs4NTIpJyxcbiAgSUQ6ICdJbmRvbmVzaWEgKCs2MiknLFxuICBJTjogJ0luZGlhICgrOTEpJyxcbiAgSVQ6ICdJdGFseSAoKzM5KScsXG4gIEtSOiAnU291dGggS29yZWEgKCs4MiknLFxuICBOQzogJ05ldyBDYWxlZG9uaWEgKCs2ODcpJyxcbiAgTlo6ICdOZXcgWmVhbGFuZCAoKzY0KScsXG4gIE9NOiAnT21hbiAoKzk2OCknLFxuICBQSDogJ1BoaWxpcHBpbmVzICgrNjMpJyxcbiAgUFQ6ICdQb3J0dWdhbCAoKzM1MSknLFxuICBRQTogJ1FhdGFyICgrOTc0KScsXG4gIFNFOiAnU3dlZGVuICgrNDYpJyxcbiAgU0c6ICdTaW5nYXBvcmUgKCs2NSknLFxuICBUSDogJ1RoYWlsYW5kICgrNjYpJyxcbiAgVVM6ICdVbml0ZWQgU3RhdGVzICgrMSknLFxuICBaQTogJ1NvdXRoIEFmcmljYSAoKzI3KScsXG59O1xuXG5leHBvcnQgY29uc3QgcGhvbmVPcHRpb25zID0gT2JqZWN0LmtleXMoc3VwcG9ydGVkTnVtYmVycykubWFwKChrZXkpID0+ICh7XG4gIHZhbHVlOiBrZXksXG4gIGxhYmVsOiBzdXBwb3J0ZWROdW1iZXJzW2tleV0sXG59KSk7XG5cbmV4cG9ydCBjb25zdCBhZGRyZXNzQ29tcG9uZW50c1NldHRpbmdzQmFja2VuZDogYW55ID0ge1xuICBhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzE6ICdzaG9ydE5hbWUnLFxuICBhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzI6ICdzaG9ydE5hbWUnLFxuICBjb3VudHJ5OiAnc2hvcnROYW1lJyxcbiAgZXN0YWJsaXNobWVudDogJ2xvbmdOYW1lJyxcbiAgZmxvb3I6ICdzaG9ydE5hbWUnLFxuICBsb2NhbGl0eTogJ2xvbmdOYW1lJyxcbiAgcG9zdGFsX2NvZGU6ICdzaG9ydE5hbWUnLFxuICBwcmVtaXNlOiAnc2hvcnROYW1lJyxcbiAgcm9vbTogJ2xvbmdOYW1lJyxcbiAgcm91dGU6ICdzaG9ydE5hbWUnLFxuICBzdHJlZXRfbnVtYmVyOiAnc2hvcnROYW1lJyxcbiAgc3VibG9jYWxpdHk6ICdsb25nTmFtZScsXG4gIHN1YnByZW1pc2U6ICdzaG9ydE5hbWUnLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdvb2dsZVBsYWNlc1Jlc3VsdEFzTmV3QWRkcmVzcyhwbGFjZURldGFpbHM6IGFueSkge1xuICBjb25zdCBhZGRyZXNzQ29tcG9uZW50cyA9IHBsYWNlRGV0YWlscz8uYWRkcmVzc0NvbXBvbmVudHMgfHwgW107XG4gIGNvbnN0IG5hbWUgPSBwbGFjZURldGFpbHM/Lm5hbWUgfHwgJyc7XG4gIGNvbnN0IGFkZHJlc3MgPSB7XG4gICAgY2l0eTogJycsXG4gICAgY291bnRyeTogJycsXG4gICAgbGluZU9uZTogbmFtZSA/IG5hbWUgOiAnJyxcbiAgICBsaW5lVHdvOiAnJyxcbiAgICBwb3N0Y29kZTogJycsXG4gICAgc3RhdGU6ICcnLFxuICB9O1xuXG4gIGlmIChhZGRyZXNzQ29tcG9uZW50cyAmJiBhZGRyZXNzQ29tcG9uZW50cy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRyZXNzQ29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYWRkckNvbXBvbmVudCA9IGFkZHJlc3NDb21wb25lbnRzW2ldO1xuICAgICAgY29uc3QgYWRkclR5cGVzID0gYWRkckNvbXBvbmVudC50eXBlcztcbiAgICAgIFxuICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVsZXZhbnQgdHlwZSB0aGF0IHdlIGhhdmUgYSBzZXR0aW5nIGZvclxuICAgICAgbGV0IGFkZHJUeXBlID0gbnVsbDtcbiAgICAgIGxldCBjb21wb25lbnRTZXR0aW5nID0gbnVsbDtcbiAgICAgIFxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIGFkZHJUeXBlcykge1xuICAgICAgICBpZiAoYWRkcmVzc0NvbXBvbmVudHNTZXR0aW5nc0JhY2tlbmRbdHlwZV0pIHtcbiAgICAgICAgICBhZGRyVHlwZSA9IHR5cGU7XG4gICAgICAgICAgY29tcG9uZW50U2V0dGluZyA9IGFkZHJlc3NDb21wb25lbnRzU2V0dGluZ3NCYWNrZW5kW3R5cGVdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnRTZXR0aW5nICYmIGFkZHJUeXBlKSB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NWYWwgPSBhZGRyQ29tcG9uZW50W2NvbXBvbmVudFNldHRpbmddO1xuICAgICAgICBzd2l0Y2ggKGFkZHJUeXBlKSB7XG4gICAgICAgICAgY2FzZSAnZXN0YWJsaXNobWVudCc6XG4gICAgICAgICAgY2FzZSAncm9vbSc6XG4gICAgICAgICAgY2FzZSAnZmxvb3InOlxuICAgICAgICAgIGNhc2UgJ3N0cmVldF9udW1iZXInOlxuICAgICAgICAgIGNhc2UgJ3ByZW1pc2UnOlxuICAgICAgICAgIGNhc2UgJ3N1YnByZW1pc2UnOlxuICAgICAgICAgIGNhc2UgJ3JvdXRlJzpcbiAgICAgICAgICAgIGNvbnN0IG9sZExpbmVPbmUgPSBhZGRyZXNzLmxpbmVPbmU7XG4gICAgICAgICAgICBhZGRyZXNzLmxpbmVPbmUgPSBvbGRMaW5lT25lLmluY2x1ZGVzKGFkZHJlc3NWYWwpID9cbiAgICAgICAgICAgICAgb2xkTGluZU9uZSA6IGAke29sZExpbmVPbmV9ICR7YWRkcmVzc1ZhbH1gLnRyaW0oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2xvY2FsaXR5JzpcbiAgICAgICAgICBjYXNlICdzdWJsb2NhbGl0eSc6XG4gICAgICAgICAgICBjb25zdCBvbGRDaXR5ID0gYWRkcmVzcy5jaXR5ID8gYCR7YWRkcmVzcy5jaXR5fSBgIDogJyc7XG4gICAgICAgICAgICBhZGRyZXNzLmNpdHkgPSAob2xkQ2l0eSArIGFkZHJlc3NWYWwpLnRyaW0oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMSc6XG5cbiAgICAgICAgICAgIGFkZHJlc3Muc3RhdGUgPSBhZGRyZXNzVmFsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8yJzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2NvdW50cnknOlxuXG4gICAgICAgICAgICBhZGRyZXNzLmNvdW50cnkgPSBhZGRyZXNzVmFsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncG9zdGFsX2NvZGUnOlxuICAgICAgICAgICAgYWRkcmVzcy5wb3N0Y29kZSA9IGFkZHJlc3NWYWw7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCBsaW5lIG9uZSBpZiBpdCdzIGVtcHR5IGFuZCB3ZSBoYXZlIGEgZm9ybWF0dGVkIGFkZHJlc3NcbiAgICBpZiAoIWFkZHJlc3MubGluZU9uZS50cmltKCkgJiYgcGxhY2VEZXRhaWxzPy5mb3JtYXR0ZWRBZGRyZXNzKSB7XG4gICAgICAvLyBUcnkgdG8gZXh0cmFjdCBzdHJlZXQgYWRkcmVzcyBmcm9tIGZvcm1hdHRlZCBhZGRyZXNzXG4gICAgICBjb25zdCBwYXJ0cyA9IHBsYWNlRGV0YWlscy5mb3JtYXR0ZWRBZGRyZXNzLnNwbGl0KCcsJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICBhZGRyZXNzLmxpbmVPbmUgPSBwYXJ0c1swXS50cmltKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZHJlc3NJbk9uZUxpbmUoYWRkcmVzczogYW55KSB7XG4gIGNvbnN0IGEgPSBhZGRyZXNzID8gYWRkcmVzcyA6IHt9O1xuICBjb25zdCB7XG4gICAgY2l0eSxcbiAgICBjb3VudHJ5LFxuICAgIGxpbmVPbmUsXG4gICAgbGluZVR3byxcbiAgICBwb3N0Y29kZSxcbiAgICBzdGF0ZVxuICB9ID0gYTtcbiAgY29uc3QgbDEgPSBsaW5lT25lID8gYCR7bGluZU9uZX0gYCA6ICcnO1xuICBjb25zdCBsMiA9IGxpbmVUd28gPyBgJHtsaW5lVHdvfSBgIDogJyc7XG4gIGNvbnN0IGMgPSBjaXR5ID8gYCR7Y2l0eX0gYCA6ICcnO1xuICBjb25zdCBzID0gc3RhdGUgPyBgJHtzdGF0ZX0gYCA6ICcnO1xuICBjb25zdCBwID0gcG9zdGNvZGUgPyBgJHtwb3N0Y29kZX0gYCA6ICcnO1xuICBjb25zdCBjb3VudHJ5RnVsbCA9IGNvdW50cnkgPyBpc29Db3VudHJpZXNbY291bnRyeV0gOiAnJztcbiAgcmV0dXJuIGwxICsgbDIgKyBjICsgcyArIHAgKyBjb3VudHJ5RnVsbDtcbn1cblxuZXhwb3J0IGVudW0gRmllbGRUeXBlIHtcbiAgVEVYVF9JTlBVVCA9IDEsXG4gIFNFTEVDVCA9IDIsXG4gIEZJTEVfVVBMT0FEID0gMyxcbiAgVEVYVF9BUkVBID0gNCxcbiAgTlVNQkVSX0lOUFVUID0gNSxcbiAgQ0hFQ0tCT1ggPSA2LFxuICBSQURJTyA9IDcsXG4gIEZJRUxEX0lOU1RSVUNUSU9OUyA9IDgsXG4gIElNQUdFX1NFTEVDVCA9IDksXG4gIENPTE9VUl9QSUNLRVIgPSAxMCxcbiAgQ09MT1VSX1NFTEVDVCA9IDExLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTZWxlY3RhYmxlKGZpZWxkVHlwZTogbnVtYmVyKSB7XG4gIHJldHVybiBbXG4gICAgRmllbGRUeXBlLlNFTEVDVCxcbiAgICBGaWVsZFR5cGUuQ0hFQ0tCT1gsXG4gICAgRmllbGRUeXBlLlJBRElPLFxuICAgIEZpZWxkVHlwZS5JTUFHRV9TRUxFQ1QsXG4gICAgRmllbGRUeXBlLkNPTE9VUl9TRUxFQ1RcbiAgXS5pbmNsdWRlcyhmaWVsZFR5cGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnN0cnVjdGlvbnNUeXBlKGZpZWxkVHlwZTogbnVtYmVyKSB7XG4gIHJldHVybiBTdHJpbmcoRmllbGRUeXBlLkZJRUxEX0lOU1RSVUNUSU9OUykgPT09IFN0cmluZyhmaWVsZFR5cGUpO1xufVxuXG5leHBvcnQgY29uc3QgY291bnRyeURlZmF1bHREaWN0ID0gKGN1cnJlbmN5OiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIHtjdXJyZW5jeTogY3VycmVuY3l9O1xufTtcbiAgXG5leHBvcnQgY29uc3Qgc3VwcG9ydGVkQ291bnRyeURlZmF1bHRzOiBhbnkgPSB7XG4gIEFFOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBBVTogY291bnRyeURlZmF1bHREaWN0KCdBVUQnKSxcbiAgQkg6IGNvdW50cnlEZWZhdWx0RGljdCgnVVNEJyksXG4gIENIOiBjb3VudHJ5RGVmYXVsdERpY3QoJ0NOWScpLFxuICBESzogY291bnRyeURlZmF1bHREaWN0KCdFVVInKSxcbiAgRVM6IGNvdW50cnlEZWZhdWx0RGljdCgnRVVSJyksXG4gIEZSOiBjb3VudHJ5RGVmYXVsdERpY3QoJ0VVUicpLFxuICBHQjogY291bnRyeURlZmF1bHREaWN0KCdHQlAnKSxcbiAgSEs6IGNvdW50cnlEZWZhdWx0RGljdCgnSEtEJyksXG4gIElEOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBJTjogY291bnRyeURlZmF1bHREaWN0KCdJTlInKSxcbiAgSVQ6IGNvdW50cnlEZWZhdWx0RGljdCgnRVVSJyksXG4gIEtSOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBOQzogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgTlo6IGNvdW50cnlEZWZhdWx0RGljdCgnTlpEJyksXG4gIE9NOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBQSDogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgUFQ6IGNvdW50cnlEZWZhdWx0RGljdCgnRVVSJyksXG4gIFFBOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBTRTogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgU0c6IGNvdW50cnlEZWZhdWx0RGljdCgnU0dEJyksXG4gIFRIOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBVUzogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgWkE6IGNvdW50cnlEZWZhdWx0RGljdCgnVVNEJyksXG59O1xuICBcbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWRDb3VudHJ5RGVmYXVsdHNXaXRoRGVmYXVsdCA9IChjb3VudHJ5Q29kZTogYW55KSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRDb3VudHJ5VmFsdWVzID0gc3VwcG9ydGVkQ291bnRyeURlZmF1bHRzW2NvdW50cnlDb2RlXTtcbiAgcmV0dXJuIGRlZmF1bHRDb3VudHJ5VmFsdWVzID8gZGVmYXVsdENvdW50cnlWYWx1ZXMgOiBzdXBwb3J0ZWRDb3VudHJ5RGVmYXVsdHMuQVU7XG59O1xuXG5pbnRlcmZhY2UgQ2xpZW50RmlsZUFuZE9iamVjdElkIHtcbiAgZmlsZTogYW55O1xuICBvYmplY3RJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5DbGllbnRGaWxlcyhjbGllbnRGaWxlczogQ2xpZW50RmlsZUFuZE9iamVjdElkW10pIHtcbiAgcmV0dXJuIGNsaWVudEZpbGVzLm1hcCgoY2xpZW50RmlsZTogQ2xpZW50RmlsZUFuZE9iamVjdElkKSA9PiBjbGllbnRGaWxlLmZpbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ2xpZW50VG9Pd25EcmFmdChqb2I6IGFueSkge1xuICBjb25zdCB7IG93bkRyYWZ0cyB9ID0gam9iO1xuICBpZiAoam9iLm93bkRyYWZ0cyAmJiBqb2Iub3duRHJhZnRzLmxlbmd0aCkge1xuICAgIGpvYi5vd25EcmFmdHNbMF0uZGVzaWduZXIgPSBqb2IuY2xpZW50O1xuICB9XG4gIHJldHVybiBqb2I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWRpcmVjdE9uU3VjY2VzcyhcbiAgdXJsOiBzdHJpbmcsIHJlZGlyZWN0V2l0aFZhbHVlPzogYm9vbGVhbiwgdmFsdWU/OiBhbnkpIHtcbiAgbGV0IGNsZWFuVXJsID0gdXJsLlxuICAgIHJlcGxhY2UoJyUyNycsICcnKS5cbiAgICByZXBsYWNlKCclOTEnLCAnJykuXG4gICAgcmVwbGFjZSgnJTkyJywgJycpLlxuICAgIHJlcGxhY2UoJyU5MycsICcnKS5cbiAgICByZXBsYWNlKCclOTQnLCAnJyk7XG4gIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZGVjb2RlVVJJKFxuICAgIHJlZGlyZWN0V2l0aFZhbHVlID8gYCR7Y2xlYW5Vcmx9bWVyY2hpVmFsdWU9JHt2YWx1ZX1gIDogY2xlYW5VcmxcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBU0EsV0FBVyxFQUFFQyxJQUFJLFFBQVEsU0FBUztBQUUzQyxPQUFPLElBQU1DLFlBQWlCLEdBQUc7RUFDL0JDLEVBQUUsRUFBRSxhQUFhO0VBQ2pCQyxFQUFFLEVBQUUsZUFBZTtFQUNuQkMsRUFBRSxFQUFFLFNBQVM7RUFDYkMsRUFBRSxFQUFFLFNBQVM7RUFDYkMsRUFBRSxFQUFFLGdCQUFnQjtFQUNwQkMsRUFBRSxFQUFFLFNBQVM7RUFDYkMsRUFBRSxFQUFFLFFBQVE7RUFDWkMsRUFBRSxFQUFFLFVBQVU7RUFDZEMsRUFBRSxFQUFFLFlBQVk7RUFDaEJDLEVBQUUsRUFBRSxxQkFBcUI7RUFDekJDLEVBQUUsRUFBRSxXQUFXO0VBQ2ZDLEVBQUUsRUFBRSxTQUFTO0VBQ2JDLEVBQUUsRUFBRSxPQUFPO0VBQ1hDLEVBQUUsRUFBRSxXQUFXO0VBQ2ZDLEVBQUUsRUFBRSxTQUFTO0VBQ2JDLEVBQUUsRUFBRSxZQUFZO0VBQ2hCQyxFQUFFLEVBQUUsU0FBUztFQUNiQyxFQUFFLEVBQUUsU0FBUztFQUNiQyxFQUFFLEVBQUUsWUFBWTtFQUNoQkMsRUFBRSxFQUFFLFVBQVU7RUFDZEMsRUFBRSxFQUFFLFNBQVM7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