{"version":3,"file":"js/utils.xxxxxxxxxxxxxxxxxxxx.js","mappings":"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","sources":["webpack://zenbusiness.com/./src/client/utils/WebViewUtils.js","webpack://zenbusiness.com/./src/client/utils/LinkableTextUtils.js","webpack://zenbusiness.com/./src/client/utils/ReportingUtils.js","webpack://zenbusiness.com/./src/client/utils/AuthService.js","webpack://zenbusiness.com/./src/client/utils/OrderUtils.js","webpack://zenbusiness.com/./src/client/utils/AddressAutocompleterUtils.js","webpack://zenbusiness.com/./src/client/utils/GoogleUtils.js","webpack://zenbusiness.com/./src/client/utils/UrlUtils.js","webpack://zenbusiness.com/./src/client/utils/ShareASaleService.js","webpack://zenbusiness.com/./src/client/utils/VmaUtils.js","webpack://zenbusiness.com/./src/client/utils/CookieUtils.js","webpack://zenbusiness.com/./src/client/utils/journeysV4.js","webpack://zenbusiness.com/./src/client/utils/ClientLogger.js","webpack://zenbusiness.com/./src/client/utils/OrderDataTrackService.js","webpack://zenbusiness.com/./src/client/utils/selectors.js","webpack://zenbusiness.com/./src/client/utils/RenderUtils.js","webpack://zenbusiness.com/./src/client/utils/StripeService.js","webpack://zenbusiness.com/./src/client/utils/clickstreamDestination.js","webpack://zenbusiness.com/./src/client/utils/SardineService.js","webpack://zenbusiness.com/./src/client/utils/ProductService.js","webpack://zenbusiness.com/./src/client/utils/PricingUtils.js","webpack://zenbusiness.com/./src/client/utils/PlanUtils.js","webpack://zenbusiness.com/./src/client/utils/DataCleaningUtils.js","webpack://zenbusiness.com/./src/client/utils/FormationDateUtils.js","webpack://zenbusiness.com/./src/client/utils/corpStockUtils.js","webpack://zenbusiness.com/./src/client/utils/PrincipalsUtil.js","webpack://zenbusiness.com/./src/client/utils/ThirdPartyTracking.js","webpack://zenbusiness.com/./src/client/utils/Pricing_v2/plans.js","webpack://zenbusiness.com/./src/client/utils/Pricing_v2/standaloneServices.js","webpack://zenbusiness.com/./src/client/utils/Pricing_v2/stateFees.js","webpack://zenbusiness.com/./src/client/utils/Pricing_v2/index.js","webpack://zenbusiness.com/./src/client/utils/Pricing_v2/expediteFees.js","webpack://zenbusiness.com/./src/client/utils/QuickFormationCreate.js","webpack://zenbusiness.com/./src/client/utils/ShareASaleUtils.js","webpack://zenbusiness.com/./src/client/utils/initializationUtils.js","webpack://zenbusiness.com/./src/client/utils/ProgressBar.js","webpack://zenbusiness.com/./src/client/utils/TaxPriorYearDate.js","webpack://zenbusiness.com/./src/client/utils/VisitorCookie.js","webpack://zenbusiness.com/./src/client/utils/ReducerStorage.js","webpack://zenbusiness.com/./src/client/utils/FlowService.js","webpack://zenbusiness.com/./src/client/utils/PaymentUtils.js","webpack://zenbusiness.com/./src/client/utils/AppEntryPoint.js","webpack://zenbusiness.com/./src/client/utils/PlaidService.js","webpack://zenbusiness.com/./src/client/utils/PlanService.js","webpack://zenbusiness.com/./src/client/utils/PartnerUtils.js","webpack://zenbusiness.com/./src/client/utils/pfUtils.js","webpack://zenbusiness.com/./src/client/utils/FreeAccountUtils.js","webpack://zenbusiness.com/./src/client/utils/validators.js","webpack://zenbusiness.com/./src/client/utils/FieldValidator.js","webpack://zenbusiness.com/./src/client/utils/device.js"],"sourcesContent":["import { UAParser } from 'ua-parser-js';\n\nconst webViewBrowsers = [\n  // WebView user-agent with version\n  // e.g. WebView/YYYY.RR[.PP]\n  [/webview\\/(\\d{4}\\.\\d{2}(?:\\.\\d{1,2})?)/i], [UAParser.BROWSER.VERSION, [UAParser.BROWSER.NAME, 'webview']],\n  // WebView user-agent with platform & version\n  // e.g. WebView/ios/YYYY.RR[.PP]\n  [/webview\\/\\w+\\/(\\d{4}\\.\\d{2}(?:\\.\\d{1,2})?)/i], [UAParser.BROWSER.VERSION, [UAParser.BROWSER.NAME, 'webview']]\n];\n\nconst webViewOs = [\n  [/webview\\/(\\w+)\\/\\d{4}\\.\\d{2}(?:\\.\\d{1,2})?/i], [UAParser.OS.NAME]\n];\n\n/**\n * @typedef WebViewAttributes\n * @property {boolean} isWebView\n * @property {string|undefined} appVersion The app version in the format YYYY.RR[.PP]\n * @property {string|undefined} platform The native app platform, e.g. 'ios' or 'android'\n */\n\n/**\n * Parses the provided user agent to a WebView attributes object containing metadata about the\n * ZenBusiness native app client.\n *\n * If the user agent is not recognized as a WebView from our ZenBusiness native apps, `isWebView`\n * will be `false`, and the `appVersion` and `platform` fields will be undefined.\n *\n * @param {string} userAgent\n * @returns {WebViewAttributes}\n */\nexport function getAttributes(userAgent) {\n  const webViewUaParser = new UAParser(\n    userAgent,\n    {\n      browser: webViewBrowsers,\n      os: webViewOs\n    }\n  );\n\n  const {\n    browser: {\n      [UAParser.BROWSER.NAME]: browserName,\n      [UAParser.BROWSER.VERSION]: appVersion\n    },\n    os: {\n      [UAParser.OS.NAME]: platform\n    }\n  } = webViewUaParser.getResult();\n\n  const isWebView = browserName === 'webview';\n\n  return {\n    isWebView,\n    ...(isWebView && { appVersion }),\n    ...(isWebView && platform && { platform: platform.toLowerCase() })\n  };\n}\n\n/**\n * WebViewAttributes for the current viewport containing metadata about the native app client if\n * the user-agent is recognized as a WebView in the ZenBusiness native apps.\n *\n * If the user agent is not recognized as a WebView from our ZenBusiness native apps, `isWebView`\n * will be `false`, and the `appVersion` and `platform` fields will be undefined.\n *\n * @see getAttributes\n * @type {WebViewAttributes}\n */\nconst WebView = getAttributes(navigator.userAgent);\n\n/**\n * @see WebView\n * @type {WebViewAttributes}\n */\nexport default WebView;\n","/* eslint-disable import/prefer-default-export */\nimport React from 'react';\nimport { URLS } from '../constants/website';\n\nconst CONTACT_US_PHRASE = 'contact us';\n\n/**\n * Helper method will look for specific phrases in the text (currently just 'contact us'), and make that text linkable\n * to information specific for the text (e.g. the \"Contact Info\" page).\n *\n * Thus, if replacements are made, the value returned is a react fragment instead of a plain string.\n */\nexport function replaceLinkablePhrases(text) {\n  // if the text string has a \"contact us\"value, replace it with an actual Link to the contact us page.\n  // in the future if we decide to add additional flags we can just update this code to parse out additional links.\n  let textToRender = text;\n  const contactUsIndex = text.indexOf(CONTACT_US_PHRASE);\n  if (contactUsIndex > 0) {\n    textToRender = (\n      <React.Fragment>\n        {text.substring(0, contactUsIndex)}\n        <a href={`/${URLS.CONTACT_US}`}>contact us</a>\n        {text.substring(contactUsIndex + CONTACT_US_PHRASE.length)}\n      </React.Fragment>\n    );\n  }\n\n  return textToRender;\n}\n","\n/**\n * Report an error to sentry\n * @param {Exception} err Exception with stack trace from origination\n * @param {Object} opts sentry options\n * @param {Object} opts.metaData Additional diagnostic information\n * @param {String} opts.severity 'info', 'warning' or 'error'\n * @param {Object} opts.user User information\n */\nexport const reportError = (err, opts) => {\n  if (window.Sentry) {\n    console.log('withScope');\n    window.Sentry.withScope((scope) => {\n      scope.setLevel(opts.severity || 'error');\n      scope.setExtra('metaData', opts.metaData);\n      window.Sentry.captureException(err);\n    });\n  } else {\n    console.groupCollapsed('Sentry: ReportError Args');\n    console.error(err);\n    console.log(JSON.stringify(opts, null, 4));\n    console.groupEnd();\n  }\n};\n\n/**\n * Identify a new user to sentry\n * @param {Object} user sentry user information\n * @Param {String} user.id Indicates internal user Id\n * @Param {String} user.name if exists, user name\n * @Param {string} user.email if exists, user email\n*/\nexport const identifyUser = (user) => {\n  if (window.Sentry) {\n    window.Sentry.configureScope((scope) => {\n      scope.setUser(user);\n    });\n  }\n};\n\nexport default {\n  reportError\n};\n","import _isString from 'lodash/isString';\nimport decode from 'jwt-decode';\nimport auth0 from 'auth0-js';\nimport Promise from 'promise';\nimport Cookies from 'js-cookie';\n\nimport logger from './ClientLogger';\nimport { reportError } from './ReportingUtils';\n\nconst\n  // clientId = 'T42rhgVXFHlB1vEKhBxKo8zsX99WavFL0', // production clientId\n  clientId = 'liinIbvP490BKJxJX1TGmNxlTvBcVRAu', // dev clientId\n  domain = 'login.dev.zenbusiness.com';\nconst audience = 'https://zen-business-core-api';\nconst scope = 'openid profile email';\n\nlet\n  auth = new auth0.WebAuth({\n    clientID: clientId,\n    domain,\n    audience,\n    scope,\n    allowSignUp: false\n  }),\n  accessToken = null,\n  idToken = null,\n  zbClaims = null,\n  loggedIn = false,\n  timeout = null,\n  oboEmail = null,\n  email = null,\n  enableOidc = false,\n  oidcClientId = null,\n  localLoginAppOrigin = null;\nconst isLocal = window.location.hostname.includes('local');\n\nconst getStorageItem = (key) => {\n  let value = '';\n  if (window.sessionStorage) {\n    value = window.sessionStorage.getItem(key) || '';\n  }\n  if (!value && window.localStorage) {\n    value = window.localStorage.getItem(key) || '';\n  }\n  return value;\n};\n\nconst setStorageItem = (key, value) => {\n  if (window.sessionStorage) {\n    window.sessionStorage.setItem(key, value);\n  }\n};\n\nconst removeStorageItem = (key) => {\n  if (window.localStorage) {\n    window.localStorage.removeItem(key);\n  }\n  if (window.sessionStorage) {\n    window.sessionStorage.removeItem(key);\n  }\n};\n\nconst COOKIE_TOKEN_CLAIMS = 'idePrf';\nconst getZbClaims = () => {\n  const cookie = Cookies.get(COOKIE_TOKEN_CLAIMS);\n  if (cookie) {\n    return JSON.parse(decodeURIComponent(cookie));\n  }\n  return null;\n};\n\nconst\n  ID_TOKEN_KEY = 'id_token',\n  ACCESS_TOKEN_KEY = 'access_token',\n  OBO_KEY = 'obo',\n  EMAIL_KEY = 'loggin_in_email',\n  loginAction = 'Auth0: Login',\n  loginActionComplete = 'Auth0: Login Complete',\n  resetAction = 'Auth0: reset password',\n  resetActionComplete = 'Auth0: reset password Complete',\n  storage = window.localStorage,\n  clearTokens = () => {\n    idToken = null;\n    loggedIn = false;\n    accessToken = null;\n    zbClaims = null;\n    oboEmail = null;\n    email = null;\n    if (timeout) {\n      window.clearInterval(timeout);\n      timeout = null;\n    }\n    removeStorageItem(ID_TOKEN_KEY);\n    removeStorageItem(ACCESS_TOKEN_KEY);\n    removeStorageItem(OBO_KEY);\n    removeStorageItem(EMAIL_KEY);\n  },\n    // eslint-disable-next-line max-statements\n  setupLoggedIn = () => {\n    if (timeout) {\n      window.clearInterval(timeout);\n      timeout = null;\n    }\n\n    if (!idToken && !zbClaims) {\n      loggedIn = false;\n      return false;\n    }\n\n    let expireMS;\n    if (zbClaims) {\n      if (!zbClaims.exp) {\n        loggedIn = true;\n        return true;\n      }\n      loggedIn = true;\n      const expireDate = new Date(0);\n\n      expireDate.setUTCSeconds(zbClaims.exp);\n\n      expireMS = expireDate.getTime();\n\n      if (expireMS - new Date().getTime() < 60000) { // 1 minute\n        loggedIn = false;\n        return false;\n      }\n    } else {\n      const token = decode(idToken);\n      if (!token.exp) {\n        loggedIn = true;\n        return true;\n      }\n      loggedIn = true;\n      const expireDate = new Date(0);\n\n      expireDate.setUTCSeconds(token.exp);\n\n      expireMS = expireDate.getTime();\n\n      if (expireMS - new Date().getTime() < 60000) { // 1 minute\n        loggedIn = false;\n        return false;\n      }\n    }\n\n    loggedIn = true;\n    timeout = window.setInterval(() => {\n      if (expireMS - new Date().getTime() < 60000) {\n        clearTokens();\n      }\n    }, 5000); // 5 seconds\n\n    return true;\n  },\n  // Helper function that will allow us to extract the access_token and id_token\n  getParameterByName = (name) => {\n    const match = RegExp(`[#&]${name}=([^&]*)`).exec(window.location.hash);\n    return match && decodeURIComponent(match[1].replace(/\\+/g, ' '));\n  };\n\nexport const init = () => {\n  if (storage) {\n    accessToken = getStorageItem(ACCESS_TOKEN_KEY);\n    accessToken = accessToken && accessToken !== 'null' ? accessToken : null;\n\n    idToken = getStorageItem(ID_TOKEN_KEY);\n    idToken = idToken && idToken !== 'null' ? idToken : null;\n\n    oboEmail = getStorageItem(OBO_KEY);\n    oboEmail = oboEmail && oboEmail !== 'null' ? oboEmail : null;\n\n    email = getStorageItem(EMAIL_KEY);\n    email = email && email !== 'null' ? email : null;\n\n    zbClaims = getZbClaims();\n\n    setupLoggedIn();\n  }\n};\n\nexport const initializeAuth0 = (response) => {\n  const { auth0: { clientID, domain: overrideDomain, enableOidc: eo, oidcClientId: oci, localLoginAppOrigin: llao } } = response;\n  auth = new auth0.WebAuth({\n    clientID,\n    domain: overrideDomain || domain,\n    audience,\n    scope,\n    allowSignUp: false\n  });\n  enableOidc = eo === 'true';\n  oidcClientId = oci;\n  localLoginAppOrigin = llao;\n};\n\nexport const getIdToken = () => {\n  return getStorageItem(ID_TOKEN_KEY);\n};\n\nexport const getAccessToken = () => {\n  return getStorageItem(ACCESS_TOKEN_KEY);\n};\n\nexport const getOBO = () => {\n  return getStorageItem(OBO_KEY);\n};\n\nexport const getLoggedInEmail = () => {\n  if (enableOidc && zbClaims) {\n    const zbEmail = zbClaims['https://www.zenbusiness.com/email'];\n    if (zbEmail) {\n      return zbEmail;\n    }\n  }\n  return getStorageItem(EMAIL_KEY);\n};\n\nexport const isLoggedIn = () => {\n  return loggedIn;\n};\n\nexport const login = (loginData, rt) => {\n  // eslint-disable-next-line max-statements\n  return new Promise((resolve, reject) => {\n    if (enableOidc) {\n      const stateValue = `zen-${Math.floor(Math.random() * 1000000)}`;\n      let redirectUri;\n      const redirectTo = rt;\n      const { email: username, password } = loginData;\n\n      // Set up the expected cookies for the oidc client callback page\n      Cookies.set('state', stateValue, { path: '/' });\n      if (redirectTo) {\n        // If the path is relative, prepend origin of current page\n        let finalRedirectTo = redirectTo;\n        if (redirectTo.startsWith('/')) {\n          finalRedirectTo = window.location.origin + redirectTo;\n        }\n        Cookies.set('redirectUri', finalRedirectTo, { path: '/' });\n      }\n      if (isLocal) {\n        redirectUri = `${localLoginAppOrigin}/oidc/callback`;\n      } else {\n        redirectUri = `${window.location.origin}/oidc/callback`;\n      }\n\n      const authOptions = {\n        state: stateValue,\n        nonce: stateValue,\n        username,\n        responseType: 'code',\n        scope: 'openid profile',\n        clientID: oidcClientId,\n        password,\n        redirectUri\n      };\n\n      auth.login(authOptions, (err) => {\n        if (err) {\n          logger.error(loginActionComplete, err);\n          reject({ success: false, err });\n          return;\n        }\n        logger.logAction(loginActionComplete, { username });\n        resolve({ success: true });\n      });\n      return;\n    }\n\n    const location = document.location,\n      redirectUri = `${location.protocol}//${location.host}/dashboard/callback`,\n      stateValue = `zen-${Math.floor(Math.random() * 1000000)}`,\n      { email: username, password } = loginData,\n      redirectToAfterSuccessfulLogin = rt || '/d/dashboard';\n\n    if (storage) {\n      setStorageItem('auth0StateValue', stateValue);\n    }\n\n    if (redirectToAfterSuccessfulLogin && _isString(redirectToAfterSuccessfulLogin)) {\n      if (storage) {\n        setStorageItem('loginRedirectTo', redirectToAfterSuccessfulLogin);\n      }\n    }\n\n    if (username && password) {\n      logger.logAction(loginAction, { username });\n\n      auth.login({\n        redirectUri,\n        responseType: 'token id_token',\n        state: stateValue,\n        username,\n        password\n      }, (err) => {\n        if (err) {\n          logger.error(loginActionComplete, err);\n          reject({ success: false, err });\n          return;\n        }\n        logger.logAction(loginActionComplete, { username });\n        resolve({ success: true });\n      });\n    }\n  });\n};\n\nexport const resetPassword = (username) => {\n  return new Promise((resolve, reject) => {\n    logger.logAction(resetAction, { username });\n\n    auth.changePassword({\n      email: username,\n      connection: 'Username-Password-Authentication'\n    }, (err) => {\n      if (err) {\n        logger.error(resetActionComplete, err);\n        reject({ success: false, err });\n        return;\n      }\n      logger.logAction(resetActionComplete, { username });\n      resolve({ success: true });\n    });\n  });\n};\n\nexport const loginAndGoToPage = (rt, clearAuthStorage = false) => {\n  let urlForLoginPage = '/dashboard/login';\n\n  if (rt && _isString(rt)) {\n    if (storage) {\n      setStorageItem('loginRedirectTo', rt);\n    }\n    urlForLoginPage += `?redirectTo=${encodeURIComponent(rt)}`;\n  } else if (storage) {\n    removeStorageItem('loginRedirectTo');\n  }\n  if (clearAuthStorage) {\n    window.sessionStorage.clear();\n    clearTokens();\n  }\n\n  document.location = urlForLoginPage;\n};\n\nexport const logout = () => {\n  if (enableOidc) {\n    let logoutUrl;\n    if (isLocal) {\n      logoutUrl = `${localLoginAppOrigin}/oidc/logout?returnTo=${document.location.origin}`;\n    } else {\n      logoutUrl = `/oidc/logout?returnTo=${document.location.origin}`;\n    }\n\n    clearTokens();\n    window.location.assign(logoutUrl);\n    return;\n  }\n  const location = document.location,\n    returnTo = `${location.protocol}//${location.host}`;\n\n  clearTokens();\n  auth.logout({\n    returnTo\n  });\n};\n\nexport const recordLoginInformation = (cb) => {\n  const state = getParameterByName('state');\n\n  accessToken = getParameterByName('access_token');\n  idToken = getParameterByName('id_token');\n  zbClaims = getZbClaims();\n\n  if (storage) {\n    const storageState = getStorageItem('auth0StateValue');\n    if (state !== storageState) {\n      reportError(new Error('State Values did not agree'), {\n        metaData: {\n          accessToken,\n          idToken,\n          state,\n          storageState\n        }\n      });\n      clearTokens();\n      cb({});\n      return {};\n    }\n\n    setStorageItem(ACCESS_TOKEN_KEY, accessToken);\n    setStorageItem(ID_TOKEN_KEY, idToken);\n  }\n\n  setupLoggedIn();\n\n  return auth.client.userInfo(accessToken, (err, user) => {\n    if (err) {\n      logout();\n      return;\n    }\n    email = user.email;\n    if (!user.email) {\n      reportError(new Error('No Login Email returned'), {\n        metaData: {\n          accessToken,\n          idToken,\n          user\n        }\n      });\n    }\n    if (storage) {\n      setStorageItem(EMAIL_KEY, user.email);\n    }\n    cb(user);\n  });\n};\n\nexport const getLoginRedirectTo = () => {\n  return getStorageItem('loginRedirectTo');\n};\n\nexport const removeLoginRedirectTo = () => {\n  removeStorageItem('loginRedirectTo');\n};\n\nexport const getAccountUUID = () => {\n  if (zbClaims) {\n    const accountUuid = zbClaims['https://www.zenbusiness.com/account_uuid'];\n    if (accountUuid) {\n      return accountUuid;\n    }\n  }\n  if (accessToken) {\n    const decodedToken = decode(accessToken);\n    return decodedToken?.['https://www.zenbusiness.com/account_uuid'] || '';\n  }\n  return null;\n};\n\nexport const getUserUUID = () => {\n  if (zbClaims) {\n    const userUuid = zbClaims['https://www.zenbusiness.com/user_uuid'];\n    if (userUuid) {\n      return userUuid;\n    }\n  }\n  if (accessToken) {\n    const decodedToken = decode(accessToken);\n    return decodedToken?.['https://www.zenbusiness.com/user_uuid'] || '';\n  }\n  return null;\n};\n\nexport default {\n  initializeAuth0,\n  getAccountUUID,\n  getUserUUID,\n  getIdToken,\n  getAccessToken,\n  getOBO,\n  getLoggedInEmail,\n  getLoginRedirectTo,\n  isLoggedIn,\n  login,\n  loginAndGoToPage,\n  logout,\n  recordLoginInformation,\n  removeLoginRedirectTo\n};\n","/* eslint-disable camelcase */\nimport _isEmpty from 'lodash/isEmpty';\nimport _find from 'lodash/find';\n\n/**\n * Complete data Order Types\n */\nconst CompleteOrderTypes = {\n  COMPLETED: 'completed',\n  LLC: 'llc',\n  CORP: 'corp',\n  REGISTERED_AGENT: 'registeredAgent',\n  WORRY_FREE: 'worryFree',\n  NY_PUBLICATION: 'nyPublication'\n};\n\n/**\n * Partial data Order Types\n */\nconst PartialOrderTypes = {\n  EIN: 'ein',\n  BUSINESS_LICENSE_REPORT: 'businessLicenseReport',\n  NAME_RESERVATION: 'nameReservation'\n};\n\n// Disable banking products for any customers\n// that it is presented to in FT 10.x\nexport const isBankingDisallowedInFlowtype = new RegExp(/^w1$|^ft10/);\n\n/**\n * Order Types\n * TODO Continue adding in more Order Types as found.\n */\nexport const OrderTypes = Object.assign({}, CompleteOrderTypes, PartialOrderTypes, {\n  INCOMPLETE: 'incomplete'\n});\n\nconst completeOrderTypeValues = Object.values(CompleteOrderTypes);\n\n/**\n * Determine if the order is complete based on the previous `businessOrderType` and what is being ordered.\n * @param {String} businessOrderType - Most recent company business order type.\n * @param {String} ignoreBusinessOrderType - In-progress business order type.\n * @returns {Boolean} `true` or `false`\n */\nexport const isOrderCompleteByType = (businessOrderType, ignoreBusinessOrderType) => {\n  if (!businessOrderType) {\n    return false;\n  }\n  if (businessOrderType === ignoreBusinessOrderType) {\n    return false;\n  }\n  return completeOrderTypeValues.includes(businessOrderType);\n};\n\n/**\n * Infer the order `status` based on the previous `businessOrderType` and what is being ordered.\n * @param {String} businessOrderType - Most recent company business order type.\n * @param {String} ignoreBusinessOrderType - In-progress business order type.\n * @returns {String} `complete` or `incomplete`\n */\nexport const inferOrderStatusByType = (businessOrderType, ignoreBusinessOrderType) => {\n  return isOrderCompleteByType(businessOrderType, ignoreBusinessOrderType) ? 'complete' : 'incomplete';\n};\n\nconst removeServicesWithNullPrice = (order) => {\n  const { order_data: orderData = [], order_items: orderItems = [] } = order;\n  const servicesWithNullPrice = orderItems.reduce((map, { price, service }) => {\n    // API-934: slim order_items may omit `price` entirely; only strip when\n    // price is explicitly null (the legacy \"unpriced service\" signal), not missing\n    if (price === null) {\n      map[service] = service;\n    }\n    return map;\n  }, {});\n\n  if (_isEmpty(servicesWithNullPrice)) {\n    return { ...order };\n  }\n\n  const order_data = orderData.filter(({ service }) => {\n    return !servicesWithNullPrice[service];\n  });\n  const order_items = orderItems.filter(({ service }) => {\n    return !servicesWithNullPrice[service];\n  });\n\n  return { ...order, order_data, order_items };\n};\n\nconst removeServicesThatAreNotInBothArrays = (order) => {\n  const { order_data: orderData = [], order_items: orderItems = [] } = order;\n  // API-934: slim payloads may populate only one of the two arrays — zeroing out the\n  // other side loses data. Short-circuit when either side is empty, preserving\n  // the populated side (and applying [] defaults when both are missing).\n  if (!orderData.length || !orderItems.length) {\n    return { ...order, order_data: orderData, order_items: orderItems };\n  }\n  const order_data = orderData.filter((data) => {\n    return orderItems.find(({ service }) => { return service === data.service; });\n  });\n  const order_items = orderItems.filter((item) => {\n    return orderData.find(({ service }) => { return service === item.service; });\n  });\n\n  return { ...order, order_data, order_items };\n};\n\n/**\n  * Cleans up the order_data and order_items to avoid known issues;\n  * @param {Object} order\n  * @return {Object} a new order object\n*/\nexport const cleanOrderData = (order) => {\n  if (!order) {\n    return order;\n  }\n  const orderWithoutNullPrices = removeServicesWithNullPrice(order);\n  return removeServicesThatAreNotInBothArrays(orderWithoutNullPrices);\n};\n\n/**\n * Checks if the order only has BOF services.\n *\n * @param {Object} order - The order object to check.\n * @returns {boolean} Returns true if the order only has BOF services, false otherwise.\n */\nexport const isBOFOnly = (order) => {\n  // we want to ignore the orders that contain these services\n  // API-934: fall back to order_items if order_data is empty (slim payload scenario)\n  const { order_data: orderData = [], order_items: orderItems = [] } = order || {};\n  const source = orderData.length ? orderData : orderItems;\n\n  // is bof order if all services are bof related\n  const isBofOrder = source.every(({ service }) => {\n    return ['beneficial_ownership_filing', 'ongoing_bof_compliance'].includes(service);\n  });\n\n  return isBofOrder;\n};\n\nexport const isFormation = (order) => {\n  // we want to ignore the orders that contain these services\n  // API-934: fall back to order_items if order_data is empty (slim payload scenario)\n  const { order_data: orderData = [], order_items: orderItems = [] } = order || {};\n  const source = orderData.length ? orderData : orderItems;\n\n  // is a formation order if either an LLC or Corp formation order data.\n  const isForm = source.some(({ service }) => {\n    return ['corp_formation', 'llc_formation'].includes(service);\n  });\n\n  return isForm;\n};\n\n/**\n * Returns the incomplete formation (llc or corp) order first. If one is not\n * found, returns the next incomplete order which is not a BOF only order.\n *\n * @param {Array} orders - The array of orders to search from.\n * @returns {Object|undefined} - The first incomplete order found, or undefined if no incomplete order is found.\n */\nexport const getIncompleteOrder = (orders) => {\n  // API-934: optional chaining so a malformed entry doesn't throw during the scan\n  const formOrder = _find(orders, (order) => {\n    return order?.order_status === 'incomplete' && isFormation(order);\n  });\n  if (formOrder) {\n    return formOrder;\n  }\n  return _find(orders, (order) => {\n    return order?.order_status === 'incomplete' && !isBOFOnly(order);\n  });\n};\n","\nimport _find from 'lodash/find';\nimport _trim from 'lodash/trim';\nimport _indexOf from 'lodash/indexOf';\n\nrequire('cleave.js/dist/addons/cleave-phone.us');\n\nconst\n  getAddressType = (matchedResult, type, isLong) => {\n    const\n      addressComponent = _find(matchedResult.address_components, (comp) => {\n        return _indexOf(comp.types, type) !== -1;\n      });\n\n    if (addressComponent) {\n      return addressComponent[isLong ? 'long_name' : 'short_name'];\n    }\n\n    return '';\n  },\n\n  getStreetNumber = (address, matchedResult) => {\n    const\n      streetNum = getAddressType(matchedResult, 'street_number', false),\n      route = getAddressType(matchedResult, 'route', false);\n\n    if (streetNum) {\n      return streetNum;\n    }\n\n    const idx = address.indexOf(route.split(' ')[0]);\n    if (idx > -1) {\n      return _trim(address.substring(0, idx));\n    }\n    return '';\n  },\n\n  getCity = (address, matchedResult) => {\n    const\n      lcAddress = address.toLowerCase(),\n      addressParts = lcAddress.split(', '),\n      locality = getAddressType(matchedResult, 'locality', true),\n      neighborhood = getAddressType(matchedResult, 'neighborhood', true);\n\n    if (locality && _indexOf(addressParts, locality.toLowerCase()) !== -1) {\n      return locality;\n    }\n    if (neighborhood && _indexOf(addressParts, neighborhood.toLowerCase()) !== -1) {\n      return neighborhood;\n    }\n    // Now, if any locality exists, return it even if it did not match exactly.\n    if (locality) {\n      return locality;\n    }\n\n    const\n      sublocalityLevel1 = getAddressType(matchedResult, 'sublocality_level_1', true),\n      sublocality = getAddressType(matchedResult, 'sublocality', true);\n\n    if (sublocalityLevel1) {\n      return sublocalityLevel1;\n    }\n    if (sublocality) {\n      return sublocality;\n    }\n    if (neighborhood) {\n      return neighborhood;\n    }\n    return '';\n  },\n  getCounty = (address, matchedResult) => {\n    const county = getAddressType(matchedResult, 'administrative_area_level_2');\n\n    if (county) {\n      return county;\n    }\n\n    const\n      state = getAddressType(matchedResult, 'administrative_area_level_1', false),\n      city = getCity(address, matchedResult);\n\n    if (state === 'VA') {\n      return `${city} (city)`;\n    }\n    return '';\n  };\n\nexport const buildAddress = (address, matchedResult, addressLine2) => {\n  const\n    route = getAddressType(matchedResult, 'route', true),\n    streetNumber = getStreetNumber(address, matchedResult),\n    addressLine1 = streetNumber ? _trim([ streetNumber, route ].join(' ')) : route,\n    city = getCity(address, matchedResult),\n    county = getCounty(address, matchedResult, 'administrative_area_level_2'),\n    state = getAddressType(matchedResult, 'administrative_area_level_1', false),\n    stateName = getAddressType(matchedResult, 'administrative_area_level_1', true),\n    zip = getAddressType(matchedResult, 'postal_code', false),\n    zipSuffix = getAddressType(matchedResult, 'postal_code_suffix', false),\n    zipCode = zipSuffix ? [zip, zipSuffix].join('-') : zip,\n    lat = matchedResult.geometry.location.lat(),\n    lng = matchedResult.geometry.location.lng();\n\n  return {\n    addressLine1,\n    addressLine2: addressLine2 || '',\n    city,\n    county,\n    state,\n    stateName,\n    zipCode,\n    lat,\n    lng,\n    addressIsGoogle: true\n  };\n};\n\nexport const validateGeoResult = (matchedResult, origAddress) => {\n  if (!matchedResult || !matchedResult.types) {\n    return false;\n  }\n  if (_indexOf(matchedResult.types, 'premise') < 0 && _indexOf(matchedResult.types, 'subpremise') < 0 && _indexOf(matchedResult.types, 'street_address') < 0) {\n    return false;\n  }\n\n  const\n    matchedStreetNum = getAddressType(matchedResult, 'street_number', false),\n    matchedRoute = getAddressType(matchedResult, 'route', false).split(' ')[0],\n    idx = origAddress.indexOf(matchedRoute),\n    addressStreetNum = _trim(origAddress.substring(0, idx));\n\n  if (matchedStreetNum !== addressStreetNum) {\n    return false;\n  }\n  return true;\n};\n\n\nexport default {\n  buildAddress,\n  validateGeoResult\n};\n","import _get from 'lodash/get';\nimport _isFunction from 'lodash/isFunction';\n\nlet apiKey = window.getInit?.()?.ZENBUSINESS_GOOGLE_MAPS_KEY;\n\nconst\n  loadJS = (callbackName) => {\n    const\n      src = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&libraries=places&callback=${callbackName}`,\n      ref = window.document.getElementsByTagName('script')[0],\n      script = window.document.createElement('script');\n\n    script.src = src;\n    script.async = true;\n    ref.parentNode.insertBefore(script, ref);\n  };\n\nexport const initializeAPIKey = (response) => {\n  apiKey = _get(response, 'maps.googleMaps.apiKey', apiKey);\n};\n\nexport const initializeMaps = (callback) => {\n  const scriptCallback = `initGoogleMap_${Math.round(Math.random() * 1000000)}`,\n    loaded = !!_get(window, 'google.maps.Map', false);\n\n  if (loaded) {\n    if (_isFunction(callback)) {\n      callback();\n    }\n    return;\n  }\n  window[scriptCallback] = () => {\n    if (_isFunction(callback)) {\n      callback();\n    }\n    window[scriptCallback] = () => {};\n  };\n  loadJS(scriptCallback);\n};\n\nexport default {\n  initializeAPIKey,\n  initializeMaps\n};\n","import { reportError } from './ReportingUtils';\n\nexport const getUrlParams = (url) => {\n  const params = {};\n\n  if (url) {\n    const args = url.split('?')[1];\n\n    if (args) {\n      const argList = args.split('&');\n      for (let i = 0; i < argList.length; i += 1) {\n        const argVals = argList[i].split('=');\n        try {\n          params[argVals[0]] = decodeURIComponent(argVals[1]);\n        } catch (err) {\n          // Catch and report invalid query parameters\n          reportError(err, {\n            metaData: {\n              message: 'inbound query parameter parsing failed',\n              url,\n              param: argVals\n            }\n          });\n        }\n      }\n    }\n  }\n\n  return params;\n};\n\nexport const sanitizeRelativeUrl = (url) => {\n  // Only accept root relative URL\n  if (!url.startsWith('/')) { return null; }\n\n  // Don't allow traverasal\n  if (url.split('/').includes('..')) { return null; }\n\n  try {\n    // Parse URL\n    const { origin, pathname, search } = new URL(url, location.origin);\n    if (origin === location.origin) {\n      return encodeURI(`${pathname}${search}`);\n    }\n  } catch (err) {\n    // ignore\n  }\n\n  return null;\n};\n\n\nexport default {\n  getUrlParams\n};\n\n// this regex is used in src/server/index.ejs to redact email addresses from URLs and is duplicated here for testing\nconst emailParameterRegex =  /(\\?|&)email=.*?(?=(&|#|$))/g;\n\nexport const redactEmail = (url) => {\n  const regex = new RegExp(emailParameterRegex);\n  if (regex.test(url)) {\n    return url.replace(regex, '$1email=$email');\n  }\n  return url;\n};\n\nexport const parseUrl = (url, urlBase) => {\n  return url.substring(urlBase.length + 2);\n};\n","import React from 'react';\n\nimport env from '../config';\n\nconst\n  /* eslint-disable */\n  getParameterByName = (e,a) => {a||(a=window.location.href),e=e.replace(/[\\[\\]]/g,\"\\\\$&\");const r=new RegExp(\"[?&]\"+e+\"(=([^&#]*)|&|#|$)\").exec(a);return r?r[2]?decodeURIComponent(r[2].replaceAll(/\\+/g,\" \")):\"\":null},\n  /* eslint-enable */\n  storageKey = 'shareASale',\n  storage = window.localStorage,\n  thirdPartyTrackingCSS = 'color: #4984FA';\n\nlet\n  sscid = '',\n  enabled = false,\n  baseUrl = '',\n  account = '';\n\nconst\n  onPayment = (totalPrice, id, xtype) => {\n    if (!enabled) {\n      if (env.client.debugLogging) {\n        console.groupCollapsed('%c SHAREASALE: track', thirdPartyTrackingCSS);\n        console.log(`totalPrice = ${totalPrice.toFixed(2)}`);\n        console.log(`id = ${id}`);\n        console.log(`xtype = ${xtype || 'not set'}`);\n        console.log(`sscid = ${sscid}`);\n        console.groupEnd();\n      }\n      if (storage) {\n        storage.setItem(storageKey, '');\n      }\n      sscid = '';\n      return null;\n    }\n\n    let pixelURL = `${baseUrl}/sale.cfm?amount=${totalPrice.toFixed(2)}&tracking=${id}&transtype=sale&merchantID=${account}&sscidmode=6&sscid=${sscid}`;\n    if (xtype) {\n      pixelURL = `${pixelURL}&xtype=${xtype}`;\n    }\n    if (storage) {\n      storage.setItem(storageKey, '');\n    }\n    sscid = '';\n    return (\n      <img src={pixelURL} width=\"1\" height=\"1\" alt=\"\" />\n    );\n  },\n  isEnabled = () => {\n    return enabled;\n  };\n\nexport const initialize = (response) => {\n  const { shareASale } = response;\n\n  enabled = shareASale.enabled;\n  baseUrl = shareASale.baseUrl;\n  account = shareASale.account;\n\n  sscid = getParameterByName('sscid');\n  if (!sscid) {\n    if (storage) {\n      sscid = storage.getItem(storageKey) || '';\n    }\n  } else if (storage) {\n    storage.setItem(storageKey, sscid);\n  }\n};\n\nexport default {\n  initialize,\n  isEnabled,\n  onPayment\n};\n","import { isVirtualBusinessAddressEnabled } from './ProductService';\nimport { VMA_ENABLED_STATES } from '../constants/ui';\n\nexport const isVmaJurisdiction = (jurisdiction) => {\n  const hasVmaProduct = isVirtualBusinessAddressEnabled();\n  const isVmaEnabledJurisdiction = VMA_ENABLED_STATES.includes(jurisdiction);\n  return !!hasVmaProduct && !!isVmaEnabledJurisdiction;\n};\n\nexport default {\n  isVmaJurisdiction\n};\n","/* eslint-disable import/prefer-default-export */\n\nexport const getCookie = (cookieName) => {\n  const\n    value = `; ${document.cookie}`,\n    parts = value.split(`; ${cookieName}=`);\n\n  return parts.length === 2 ? decodeURIComponent(parts.pop().split(';').shift()) : '';\n};\n","// Helper for deciding whether to redirect a post-purchase flow to journeys-ui, based on\n// LaunchDarkly flags.\n//\n// journeys-api-v4-services is a multivariate flag shaped as:\n//   { [serviceKey: string]: string[] }\n// e.g. { llc_formation: ['wy'], corp_formation: ['wy'], ein_creation: ['us'] }\n// Only the service key is read; any other keys in the value are ignored. Jurisdictions in the\n// flag are lowercase; this repo stores jurisdiction as an uppercase 2-letter code\n// (registration.business.domesticJurisdiction), so isV4ServiceEnabled normalizes the casing\n// itself - callers can pass the raw redux value.\n//\n// The redirect is also gated behind a redirectEnabledFlagKey chosen by the caller (e.g.\n// journeys-v4-redirection-corp-formation) rather than a single shared flag. This is deliberate:\n// journeys-api-v4-enabled governs journeys-api/journeys-ui behavior itself, so reading it here\n// too would mean turning off this repo's redirect also disables that functionality server-side.\n// A dedicated, repo-owned flag per service lets the redirect be toggled independently.\nexport const V4_SERVICES_FLAG = 'journeys-api-v4-services';\n\nexport const isV4ServiceEnabled = (flags = {}, jurisdiction = '', serviceKey = '', redirectEnabledFlagKey = '') => {\n  if (!flags[redirectEnabledFlagKey]) {\n    return false;\n  }\n  const servicesFlag = flags[V4_SERVICES_FLAG];\n  if (!servicesFlag || typeof servicesFlag !== 'object') {\n    return false;\n  }\n  const wantedService = String(serviceKey || '').toLowerCase();\n  const serviceEntry = Object.keys(servicesFlag).find((key) => { return key.toLowerCase() === wantedService; });\n  const enabledJurisdictions = serviceEntry === undefined ? null : servicesFlag[serviceEntry];\n  if (!Array.isArray(enabledJurisdictions)) {\n    return false;\n  }\n  // jurisdiction can be null (e.g. registration.business.domesticJurisdiction is $set directly\n  // from an API payload in some reducer actions), which the default param above doesn't cover -\n  // String(... || '') guards that instead of throwing.\n  const wantedJurisdiction = String(jurisdiction || '').toLowerCase();\n  return enabledJurisdictions.some((entry) => { return typeof entry === 'string' && entry.toLowerCase() === wantedJurisdiction; });\n};\n\nexport default {\n  V4_SERVICES_FLAG,\n  isV4ServiceEnabled\n};\n","import env from '../config';\n\nconst\n  infoCSS = 'color: #22cc22',\n  errorCSS = 'color: #cc2222';\n\nexport default {\n  logAction: (action, data) => {\n    const title = `%c ${action}`;\n    if (env.client.debugLogging) {\n      if (data) {\n        console.groupCollapsed(title, infoCSS);\n        console.info(JSON.stringify(data, null, 4));\n        console.groupEnd();\n      } else {\n        console.info(title, infoCSS);\n      }\n    }\n  },\n  error: (action, error) => {\n    const title = `%c ${action}`;\n\n    console.groupCollapsed(title, errorCSS);\n    console.log(error);\n    console.groupEnd();\n  }\n};\n","let orderDataSentDuringRegistration = {};\n\n/**\n * reset the dictionary of services sent during registration\n */\nexport const cleanOrderDataSentDuringRegistration = () => {\n  orderDataSentDuringRegistration = {};\n};\n\n/**\n * read the dictionary of services sent during registration\n */\nexport const getOrderDataSentDuringRegistration = () => {\n  return orderDataSentDuringRegistration;\n};\n\n/**\n * Preserve in memory a dictionary with the services that were sent during the registration process.\n * @param {*} orderData\n * @param {*} id\n */\nexport const setOrderDataSentDuringRegistration = (orderData, id) => {\n  if (!orderData || orderData.length === 0 || !Array.isArray(orderData)) {\n    return;\n  }\n  orderDataSentDuringRegistration[id] = orderData.reduce((map, { service }) => {\n    map[service] = service;\n    return map;\n  }, {});\n};\n\n/**\n * When updating an order verify that we're sending the same amount of order_data elements we sent during\n * the registration process.\n * @param {*} orderData\n * @param {*} id\n * @returns a filtered order_data list with the elements sent previously during registration\n */\nexport const validateOrderDataSentDuringRegistration = (orderData, id) => {\n  if (!orderDataSentDuringRegistration[id]) {\n    return [...orderData];\n  }\n  const result = orderData.filter(({ service }) => {\n    return orderDataSentDuringRegistration[id][service];\n  });\n  //in case the filter returns an empty array the best option is to send the entire orderData as it was created.\n  return result.length > 0 ? result : [...orderData];\n};\n","\nexport const getOrder = (state, orderName) => {\n  const {\n      orders,\n      companies: { orders: ordersByCompany, companies: { activeId } }\n    } = state,\n    orderList = ordersByCompany[activeId];\n  return orders[orderName][orderList.find((orderId) => { return orders[orderName][orderId]; })];\n};\n\nconst selectors = {\n  getOrder\n};\n\nexport default selectors;\n","import React from 'react';\nimport Cleave from 'cleave.js/react';\nimport _map from 'lodash/map';\nimport styled from 'styled-components';\n\nimport { replaceLinkablePhrases } from './LinkableTextUtils';\nimport { SUFFIX_IN_NAME } from '../constants/ui';\n\nrequire('cleave.js/dist/addons/cleave-phone.us');\n\nconst AUTOFILL_INPUT_NAMES = (autoComplete) => {\n  return ({\n    'given-name': 'fname',\n    'additional-name': 'mname',\n    'family-name': 'lname',\n    'address-line1': 'address',\n    'address-line2': 'address',\n    'street-address': 'address',\n    'address-level2': 'city',\n    'postal-code': 'zip',\n    'tel-national': 'phone',\n    'cc-number': 'cardnumber',\n    'cc-exp': 'exp-date',\n    email: 'email'\n  })[autoComplete] || null;\n};\n\nconst\n  noPaste = (e) => {\n    e.stopPropagation();\n    e.preventDefault();\n  },\n\n  renderCleaveField = (fieldKey, props, labels, placeholders, className, onChange, refFn, cleaveOptions, autoComplete) => {\n    const\n      key = props[`${fieldKey}Key`],\n      id =  props.sardineId ?? `${fieldKey}`,\n      disabled = props[`${fieldKey}Disabled`] || false,\n      disablePaste = props[`${fieldKey}DisablePaste`] || false,\n      label = labels[fieldKey],\n      noteLabel = labels[`${fieldKey}NoteLabel`] || '',\n      placeholder = placeholders[fieldKey],\n      value = props[fieldKey],\n      error = props[`${fieldKey}Error`],\n      errorClass = error ? 'error-input' : '',\n      errorLabel = error ? props[`${fieldKey}ErrorLabel`] || '' : '',\n      ref = refFn || null,\n      inputMode = props[`${fieldKey}InputMode`] || null,\n      inputProperties = {\n        id,\n        type: cleaveOptions?.inputType || 'text',\n        disabled,\n        placeholder,\n        value,\n        options: cleaveOptions,\n        onChange,\n        ...autoComplete &&\n        {\n          autoComplete,\n          name: AUTOFILL_INPUT_NAMES(autoComplete)\n        },\n        inputMode\n      },\n      isAnimatedFieldClass = label && placeholder ? 'is-animated' : '';\n\n    if (disablePaste) {\n      inputProperties.onPaste = noPaste;\n    }\n\n    return (\n      <StyledDiv className={className || id} key={key}>\n        {label && !placeholder ? <label htmlFor={id} className={`rendered-field-label ${isAnimatedFieldClass}`}>{label}</label> : null}\n        {<Cleave className={`${errorClass} ${isAnimatedFieldClass}`} {...inputProperties} htmlRef={ref} />}\n        {label && placeholder ? <label htmlFor={id} className={`rendered-field-label ${isAnimatedFieldClass}`}>{label}</label> : null}\n        { noteLabel && (\n          <div className=\"note-label\">{noteLabel}</div>\n        )}\n        { errorLabel && (\n          <div className=\"error-message\">{replaceLinkablePhrases(errorLabel)}</div>\n        )}\n      </StyledDiv>\n    );\n  },\n\n  phoneNumberCleaveOptions = {\n    blocks: [ 3, 3, 4 ],\n    delimiter: '-',\n    delimiterLazyShow: false,\n    numericOnly: true,\n    inputType: 'tel'\n  },\n\n  creditCardCleaveOptions =  {\n    creditCard: true,\n    inputType: 'tel' // SSP-2982 specifying tel input type ensures numeric keyboard on mobile devices\n  },\n\n  monthYearCleaveOptions = {\n    date: true,\n    datePattern: ['m', 'Y'],\n    inputType: 'tel'\n  },\n\n  yearMonthDayCleaveOptions = {\n    date: true,\n    datePattern: ['Y', 'm', 'd'],\n    inputType: 'tel'\n  },\n\n  monthDayYearCleaveOptions = {\n    date: true,\n    datePattern: ['m', 'd', 'Y'],\n    inputType: 'tel'\n  },\n\n  dayMonthYearCleaveOptions = {\n    date: true,\n    datePattern: ['d', 'm', 'Y'],\n    inputType: 'tel'\n  },\n\n  cvcCleaveOptions = {\n    blocks: [ 4 ],\n    numericOnly: true,\n    inputType: 'tel'\n  },\n\n  zipCodeCleaveOptions = {\n    blocks: [ 5, 4 ],\n    delimiter: '-',\n    numericOnly: true,\n    delimiterLazyShow: true,\n    inputType: 'tel'\n  },\n\n  currencyCleaveOptions = {\n    numeral: true,\n    numeralDecimalScale: 7,\n    numeralPositiveOnly: true,\n    stripLeadingZeroes: false,\n    prefix: '$'\n  },\n\n  currencyValuePerShareCleaveOptions = {\n    numeral: true,\n    numeralDecimalScale: 5,\n    numeralPositiveOnly: true,\n    stripLeadingZeroes: false,\n    prefix: '$'\n  },\n\n  integerCleaveOptions = {\n    numeral: true,\n    numeralDecimalScale: 0\n  },\n\n  integerCleaveNoGroupOptions = {\n    numeral: true,\n    numeralDecimalScale: 0,\n    numeralThousandsGroupStyle: 'none'\n  },\n\n  floatCleaveOptions = {\n    numeral: true\n  },\n\n  ssnCleaveOptions = {\n    blocks: [ 3, 2, 4 ],\n    delimiter: '-',\n    numericOnly: true,\n    delimiterLazyShow: true,\n    inputType: 'tel'\n  },\n\n  einCleaveOptions = {\n    blocks: [ 2, 7 ],\n    delimiter: '-',\n    numericOnly: true,\n    delimiterLazyShow: true,\n    inputType: 'tel'\n  };\n\nconst StyledDiv = styled.div`\n  position: relative;\n  font-family: 'Lato', sans-serif;\n  font-size: 100%;\n  font-weight: inherit;\n  font-style: inherit;\n  input{\n    border: 2px solid #CCCCCC;\n    border-radius: 4px;\n    outline: none;\n    min-width: 100px;\n    transition: all .3s ease-out;\n    -webkit-transition: all .3s ease-out;\n    -moz-transition: all .3s ease-out;\n    -webkit-appearance:none;\n    color: #000000;\n    height: 52px; // fixes height animation\n  }\n  input:focus{\n    border-color: #28939C;\n  }\n  input.is-animated:focus, \n  input.is-animated:not(:placeholder-shown){\n    padding: 18px 16px 2px 16px;\n  }\n  input::placeholder{\n    color:transparent;\n  }\n  label.is-animated{\n    pointer-events: none;\n    position: absolute;\n    top: 0;\n    left: 0;\n    padding-left: 18px;\n    margin-top: 12px;\n    -webkit-transition:background 0.2s, top 0.2s, right 0.2s;\n    -moz-transition: background 0.2s, top 0.2s, right 0.2s;\n    transition: background 0.2s, top 0.2s, right 0.2s;\n    color: #CCCCCC;\n  }\n  input.is-animated:focus + label.is-animated,\n  input.is-animated:not(:placeholder-shown) + label{\n    font-size: 75%;\n    margin-top: 0;\n  }\n  @media (max-width: 812px) {\n    label.is-animated{\n      font-size: 16px;\n      padding-left: 4px;\n    }\n    input.is-animated:focus, \n    input.is-animated:not(:placeholder-shown){\n      padding: 18px 12px 2px 10px;\n    }\n  }\n`;\n\nexport const renderAnimateTextField = (fieldKey,\n  props,\n  labels,\n  placeholders,\n  className,\n  onChange,\n  type,\n  refFn,\n  inputElementOverlay,\n  autoComplete) => {\n  const\n    key = props[`${fieldKey}Key`],\n    id = props.sardineId ?? `${fieldKey}`,\n    disabled = props[`${fieldKey}Disabled`] || false,\n    disablePaste = props[`${fieldKey}DisablePaste`] || false,\n    label = labels[fieldKey],\n    noteLabel = labels[`${fieldKey}NoteLabel`] || '',\n    placeholder =  placeholders[fieldKey],\n    maxLength = props[`${fieldKey}MaxLength`] || '',\n    value = props[fieldKey],\n    error = props[`${fieldKey}Error`],\n    ref = refFn || null,\n    onKeyPress = props[`${fieldKey}OnKeyPress`] || null,\n    errorClass = error ? 'error-input' : '',\n    errorLabel = error ? props[`${fieldKey}ErrorLabel`] || '' : '',\n    tabIndex = props[`${fieldKey}TabIndex`] || null,\n    inputProperties = {\n      id,\n      type,\n      disabled,\n      placeholder: ' ',\n      value,\n      onChange,\n      onKeyPress,\n      ...autoComplete && { name: AUTOFILL_INPUT_NAMES(autoComplete), autoComplete },\n      tabIndex\n    },\n    isAnimatedFieldClass = label && placeholder ? 'is-animated' : '';\n  if (disablePaste) {\n    inputProperties.onPaste = noPaste;\n  }\n  if (maxLength) {\n    inputProperties.maxLength = maxLength;\n  }\n\n  return (\n    <StyledDiv className={className} key={key}>\n      {label && !placeholder ? <label htmlFor={id} name={AUTOFILL_INPUT_NAMES(autoComplete)} className={`rendered-field-label ${isAnimatedFieldClass}`}>{label}</label> : null}\n      <input className={`${errorClass} ${isAnimatedFieldClass}`} {...inputProperties} ref={ref} />\n      {label && placeholder ? <label htmlFor={id} name={AUTOFILL_INPUT_NAMES(autoComplete)} className={`rendered-field-label ${isAnimatedFieldClass}`}>{label}</label> : null}\n      { inputElementOverlay /* this is used, for example in the ToggleablePasswordField, because it needs to be positioned over the input */ }\n      { noteLabel && (\n        <div className=\"note-label\">{noteLabel}</div>\n      )}\n      { errorLabel && (\n        <div className=\"error-message\">{errorLabel}</div>\n      )}\n    </StyledDiv>\n  );\n};\n\nexport const renderTextField = (fieldKey,\n  props,\n  labels,\n  placeholders,\n  className,\n  onChange,\n  type,\n  refFn,\n  inputElementOverlay,\n  autoComplete) => {\n  const\n    key = props[`${fieldKey}Key`],\n    id = props.sardineId ?? `${fieldKey}`,\n    disabled = props[`${fieldKey}Disabled`] || false,\n    disablePaste = props[`${fieldKey}DisablePaste`] || false,\n    label = labels[fieldKey],\n    noteLabel = labels[`${fieldKey}NoteLabel`] || '',\n    placeholder = placeholders[fieldKey],\n    maxLength = props[`${fieldKey}MaxLength`] || '',\n    value = props[fieldKey],\n    error = props[`${fieldKey}Error`],\n    ref = refFn || null,\n    onKeyPress = props[`${fieldKey}OnKeyPress`] || null,\n    errorClass = error ? 'error-input' : '',\n    errorLabel = error ? props[`${fieldKey}ErrorLabel`] || '' : '',\n    tabIndex = props[`${fieldKey}TabIndex`] || null,\n    inputProperties = {\n      id,\n      type,\n      disabled,\n      placeholder,\n      value,\n      onChange,\n      onKeyPress,\n      ...autoComplete && { name: AUTOFILL_INPUT_NAMES(autoComplete), autoComplete },\n      tabIndex\n    };\n  if (disablePaste) {\n    inputProperties.onPaste = noPaste;\n  }\n  if (maxLength) {\n    inputProperties.maxLength = maxLength;\n  }\n\n  return (\n    <div className={className} key={key}>\n      {label && <label htmlFor={id} name={AUTOFILL_INPUT_NAMES(autoComplete)}>{label}</label>}\n      <input className={errorClass} {...inputProperties} ref={ref} />\n      { inputElementOverlay /* this is used, for example in the ToggleablePasswordField, because it needs to be positioned over the input */ }\n      { noteLabel && (\n        <div className=\"note-label\">{noteLabel}</div>\n      )}\n      { errorLabel && (\n        <div className=\"error-message\">{errorLabel}</div>\n      )}\n    </div>\n  );\n};\n\nexport const renderAnimateField = (fieldKey, props, labels, placeholders, className, onChange, refFn, autoComplete) => {\n  return renderAnimateTextField(fieldKey, props, labels, placeholders, className, onChange, 'text', refFn, null, autoComplete);\n};\n\nexport const renderField = (fieldKey, props, labels, placeholders, className, onChange, refFn, autoComplete) => {\n  return renderTextField(fieldKey, props, labels, placeholders, className, onChange, 'text', refFn, null, autoComplete);\n};\n\nexport const renderEmailField = (fieldKey, props, labels, placeholders, className, onChange, refFn, autoComplete = 'email') => {\n  return renderAnimateTextField(fieldKey, props, labels, placeholders, className, onChange, 'email', refFn, null, autoComplete);\n};\n\nexport const renderPasswordField = (fieldKey, props, labels, placeholders, className, onChange, refFn, autoComplete = 'no') => {\n  return renderAnimateTextField(fieldKey, props, labels, placeholders, className, onChange, 'password', refFn, null, autoComplete);\n};\n\nexport const renderTextArea = (fieldKey, props, labels, placeholders, className, rows, cols, onChange, refFn, autoComplete) => {\n  const\n    key = props[`${fieldKey}Key`],\n    id = props.sardineId ?? `${fieldKey}`,\n    disabled = props[`${fieldKey}Disabled`] || false,\n    disablePaste = props[`${fieldKey}DisablePaste`] || false,\n    label = labels[fieldKey],\n    noteLabel = labels[`${fieldKey}NoteLabel`] || '',\n    placeholder = placeholders[fieldKey],\n    value = props[fieldKey],\n    error = props[`${fieldKey}Error`],\n    errorClass = error ? 'error-input' : '',\n    errorLabel = error ? props[`${fieldKey}ErrorLabel`] || '' : '',\n    ref = refFn || null,\n    inputProperties = {\n      id,\n      type: 'text',\n      disabled,\n      placeholder,\n      value,\n      onChange,\n      ...autoComplete && { autoComplete },\n      ...autoComplete && { name: AUTOFILL_INPUT_NAMES(autoComplete) }\n    };\n\n  if (disablePaste) {\n    inputProperties.onPaste = noPaste;\n  }\n  if (rows) {\n    inputProperties.rows = rows;\n  }\n  if (cols) {\n    inputProperties.cols = cols;\n  }\n  return (\n    <div className={className} key={key}>\n      { label && (\n        <label htmlFor={id} name={inputProperties.name}>{label}</label>\n      ) }\n      <textarea className={errorClass} {...inputProperties} ref={ref} />\n      { noteLabel && (\n        <div className=\"note-label\">{noteLabel}</div>\n      )}\n      { errorLabel && (\n        <div className=\"error-message\">{errorLabel}</div>\n      )}\n    </div>\n  );\n};\n\nexport const renderPhoneNumberField = (fieldKey, props, labels, placeholders, className, onChange, refFn, autoComplete) => {\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, phoneNumberCleaveOptions, autoComplete);\n};\n\nexport const renderCreditCardField = (fieldKey, props, labels, placeholders, className, onChange, refFn) => {\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, creditCardCleaveOptions, 'cc-number');\n};\n\nexport const renderMonthYearField = (fieldKey, props, labels, placeholders, className, onChange, refFn) => {\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, monthYearCleaveOptions, 'cc-exp');\n};\n\nexport const renderDayMonthYearField = (fieldKey, props, labels, placeholders, className, onChange, refFn) => {\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, dayMonthYearCleaveOptions);\n};\n\nexport const renderMonthDayYearField = (fieldKey, props, labels, placeholders, className, onChange, refFn) => {\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, monthDayYearCleaveOptions);\n};\n\nexport const renderYearMonthDayField = (fieldKey, props, labels, placeholders, className, onChange, refFn) => {\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, yearMonthDayCleaveOptions);\n};\n\nexport const renderCVCField = (fieldKey, props, labels, placeholders, className, onChange, refFn) => {\n  // for security reasons autocomplete should always be off for cvc fields\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, cvcCleaveOptions, 'off');\n};\n\nexport const renderZipCodeField = (fieldKey, props, labels, placeholders, className, onChange, refFn, autoComplete) => {\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, zipCodeCleaveOptions, autoComplete);\n};\n\nexport const renderCurrencyField = (fieldKey, props, labels, placeholders, className, onChange, refFn) => {\n  if (fieldKey === 'valuePerShare') {\n    return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, currencyValuePerShareCleaveOptions);\n  }\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, currencyCleaveOptions);\n};\n\nexport const renderIntegerField = (fieldKey, props, labels, placeholders, className, onChange, refFn) => {\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, props.noDelimiter ? integerCleaveNoGroupOptions : integerCleaveOptions);\n};\n\nexport const renderFloatField = (fieldKey, props, labels, placeholders, className, onChange, refFn) => {\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, floatCleaveOptions);\n};\n\nexport const renderSSNField = (fieldKey, props, labels, placeholders, className, onChange, refFn) => {\n  const fsHideClassName = className ? `${className} fs-hide` : 'fs-hide';\n  return renderCleaveField(fieldKey, props, labels, placeholders, fsHideClassName, onChange, refFn, ssnCleaveOptions);\n};\n\nexport const renderEINField = (fieldKey, props, labels, placeholders, className, onChange, refFn) => {\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, einCleaveOptions);\n};\n\nexport const renderCustomCleaveField = (fieldKey, props, labels, placeholders, className, onChange, refFn, cleaveOptions) => {\n  return renderCleaveField(fieldKey, props, labels, placeholders, className, onChange, refFn, cleaveOptions);\n};\n\nexport const renderAddressColumnValue = (addressLine1, addressLine2, city, state, zipCode, country, clzName = 'column-value') => {\n  const cityState = state ? `${city}, ${state}` : city,\n    isUS = !country || country === 'United States of America';\n\n  return (\n    <div className={clzName}>\n      {addressLine1}\n      { !!addressLine2 && (\n        <br />\n      )}\n      { addressLine2 }\n      <br />\n      {cityState} {zipCode}\n      { !isUS && (\n        <br />\n      )}\n      { !isUS && country }\n    </div>\n  );\n};\n\nexport const renderNameColumnValue = (firstName, middleName, lastName, suffix = '', companyName, postFix, clzName = 'column-value') => {\n  let name = companyName;\n  if (!name) {\n    if (middleName) {\n      name = `${firstName} ${middleName} ${lastName}`;\n    } else {\n      name = `${firstName} ${lastName}`;\n    }\n    if (suffix) {\n      name = `${name} ${SUFFIX_IN_NAME[suffix]}`;\n    }\n  }\n\n  return (\n    <div className={clzName}>{name}{ postFix ? ` ${postFix}` : '' }</div>\n  );\n};\n\nexport const renderBreakLines = (length, key = '') => {\n  return _map(Array(length), (_, index) => { return (<br key={`br-${key}${index}`} />); } );\n};\n\nexport default {\n  renderField,\n  renderEmailField,\n  renderPasswordField,\n  renderTextArea,\n  renderPhoneNumberField,\n  renderCreditCardField,\n  renderMonthYearField,\n  renderDayMonthYearField,\n  renderMonthDayYearField,\n  renderYearMonthDayField,\n  renderCVCField,\n  renderZipCodeField,\n  renderCurrencyField,\n  renderIntegerField,\n  renderFloatField,\n  renderSSNField,\n  renderEINField,\n  renderCustomCleaveField,\n  renderAddressColumnValue,\n  renderNameColumnValue,\n  renderBreakLines\n};\n","import _get from 'lodash/get';\n\nconst apiKey = 'pk_test_4YFr8fzylUZM7cWCUDDPDwL5'; // Default to test key\n\nexport const initializeAPIKey = (response) => {\n  const ret = _get(response, 'stripe.key', apiKey);\n  return ret;\n};\n\nexport default {\n  initializeAPIKey\n};\n","/**\n * Clickstream Destination Adapter\n *\n * This module creates a RudderStack destination for clickstream tracking,\n * using @rudderstack/analytics-js directly (same as application-commons-clickstream internally).\n */\nimport { RudderAnalytics } from '@rudderstack/analytics-js';\nimport { sha256 } from 'js-sha256';\nimport { isRunningInMobile, getMobileDeviceType } from './device';\n\nconst rudderAnalytics = new RudderAnalytics();\n\n// PII fields that should be hashed before sending\nconst PII_FIELDS_TO_HASH = ['email', 'phone', 'firstname', 'lastname'];\n\n// Default integrations for RudderStack destinations (same as clickstream package)\nconst defaultIntegrations = {\n  All: true,\n  'Bing Ads': true,\n  'Facebook Pixel': { hashed: true },\n  'Google Ads': true,\n  'Google Analytics 4': { sendUserID: false },\n  'Linkedin Insight Tag': true,\n  'Microsoft Clarity': true,\n  Mixpanel: true,\n  Snowflake: true\n};\n\n// Configuration state\nlet isReady = false;\nlet hasDestination = false;\nlet noopMode = false;\nlet rudderstackApiKey = null;\nlet rudderstackDataplaneUrl = null;\n\n/**\n * Hash a single value using SHA256\n */\nconst sha256Hash = (value) => {\n  if (!value) return value;\n  return sha256(String(value).toLowerCase().trim());\n};\n\n/**\n * Hash specified fields in an object\n */\nconst hashFields = (fields, obj) => {\n  if (!obj) return obj;\n  const result = { ...obj };\n  fields.forEach((field) => {\n    if (result[field]) {\n      result[field] = sha256Hash(result[field]);\n    }\n  });\n  return result;\n};\n\n/**\n * Get marketing IDs from localStorage\n */\nconst getMarketingIds = () => {\n  const ids = {};\n  try {\n    const gclid = window.localStorage?.getItem('gclid');\n    if (gclid) ids.gclid = gclid;\n    const msclkid = window.localStorage?.getItem('msclkid');\n    if (msclkid) ids.msclkid = msclkid;\n  } catch (e) {\n    // localStorage not available\n  }\n  return ids;\n};\n\n/**\n * Get integrations config\n */\nconst getIntegrations = () => {\n  return { ...defaultIntegrations };\n};\n\n/**\n * Set RudderStack API configuration\n */\nexport const setRudderStackConfig = (initData) => {\n  rudderstackApiKey = initData?.rudderstack?.apiKey || initData?.rudderstackApiKey;\n  rudderstackDataplaneUrl = initData?.rudderstack?.url || initData?.rudderstack?.dataPlaneUrl || initData?.rudderstackDataPlaneUrl;\n  hasDestination = !!(rudderstackApiKey && rudderstackDataplaneUrl);\n};\n\n/**\n * Set noop mode (disables tracking)\n */\nexport const setNoopMode = (noop) => {\n  noopMode = noop;\n};\n\n/**\n * Initialize the clickstream destination\n */\nexport const initClickstream = () => {\n  if (isReady) {\n    console.debug('[clickstream] Already initialized');\n    return;\n  }\n\n  if (!hasDestination) {\n    console.warn('[clickstream] Missing RudderStack configuration, tracking disabled');\n    return;\n  }\n\n  try {\n    rudderAnalytics.load(\n      rudderstackApiKey,\n      rudderstackDataplaneUrl,\n      {\n        integrations: getIntegrations(),\n        onLoaded: () => {\n          isReady = true;\n          console.debug('[clickstream] RudderStack loaded successfully');\n        }\n      }\n    );\n    isReady = true;\n  } catch (error) {\n    console.error('[clickstream] Failed to initialize:', error);\n  }\n};\n\n/**\n * Get system properties for all events\n */\nconst getSystemProperties = () => {\n  return {\n    form_factor: isRunningInMobile() ? getMobileDeviceType() : 'desktop',\n    channel: 'web'\n  };\n};\n\n/**\n * Convert camelCase to snake_case\n */\nconst toSnakeCase = (str) => {\n  return str.replace(/([A-Z])/g, '_$1').toLowerCase().replace(/^_/, '');\n};\n\n/**\n * Log event sent in the style of application-commons-clickstream\n */\nconst logEventSent = (eventName, properties) => {\n  console.debug(`[clickstream] Event Sent: ${eventName} Event Props:`, properties);\n};\n\n/**\n * Track an event\n */\nexport const trackEvent = (eventName, eventProperties = {}) => {\n  const snakeCaseEventName = toSnakeCase(eventName);\n  const mergedProperties = {\n    ...getSystemProperties(),\n    ...eventProperties\n  };\n\n  if (!isReady || !hasDestination || noopMode) {\n    return;\n  }\n\n  try {\n    rudderAnalytics.track(\n      snakeCaseEventName,\n      mergedProperties,\n      { integrations: getIntegrations() }\n    );\n    logEventSent(eventName, mergedProperties);\n  } catch (error) {\n    console.error('[clickstream] Failed to track event:', error);\n  }\n};\n\n/**\n * Track a page view\n */\nexport const trackPage = (pageName, pageProperties = {}) => {\n  const mergedProperties = {\n    ...getSystemProperties(),\n    ...pageProperties\n  };\n\n  if (!isReady || !hasDestination || noopMode) {\n    return;\n  }\n\n  try {\n    rudderAnalytics.page(\n      pageName || undefined,\n      mergedProperties,\n      { integrations: getIntegrations() }\n    );\n    logEventSent('Page Viewed', mergedProperties);\n  } catch (error) {\n    console.error('[clickstream] Failed to track page:', error);\n  }\n};\n\n/**\n * Identify a user\n */\nexport const identifyUser = (userId, userProperties = {}) => {\n  console.debug('[clickstream] Identify Called:', {\n    ready: isReady,\n    hasDestination,\n    noop: noopMode\n  });\n\n  if (!isReady || !hasDestination || noopMode) {\n    return;\n  }\n\n  const marketingIds = getMarketingIds();\n  const hashedProperties = hashFields(PII_FIELDS_TO_HASH, userProperties);\n\n  try {\n    rudderAnalytics.identify(\n      userId,\n      { ...marketingIds, ...hashedProperties },\n      { integrations: getIntegrations() }\n    );\n    console.debug('[clickstream] User Identified');\n  } catch (error) {\n    console.error('[clickstream] Failed to identify user:', error);\n  }\n};\n\n/**\n * Reset/unidentify user\n */\nexport const unidentifyUser = () => {\n  if (!isReady || !hasDestination) return;\n  try {\n    rudderAnalytics.reset(false);\n    console.debug('[clickstream] User Reset');\n  } catch (error) {\n    console.error('[clickstream] Failed to unidentify user:', error);\n  }\n};\n\n/**\n * Check if initialized\n */\nexport const isClickstreamInitialized = () => {\n  return isReady;\n};\n\n/**\n * Check if has destination configured\n */\nexport const hasClickstreamDestination = () => {\n  return hasDestination;\n};\n\n/**\n * Check if in noop mode\n */\nexport const isNoopMode = () => {\n  return noopMode;\n};\n\nexport default {\n  setRudderStackConfig,\n  setNoopMode,\n  initClickstream,\n  trackEvent,\n  trackPage,\n  identifyUser,\n  unidentifyUser,\n  isClickstreamInitialized,\n  hasClickstreamDestination,\n  isNoopMode\n};\n","/**\n * The configuration object for the Sardine service.\n * @typedef {Object} SardineConfig\n * @property {string} sardine - The Sardine value.\n */\n\nlet config;\n\n/**\n * Initializes the Sardine service with the provided response.\n * @param {Object} response - The response object containing the Sardine value.\n */\nexport const initializeSardine = (response) => {\n  const { sardine } = response;\n  config = sardine;\n};\n\n/**\n * Retrieves the Sardine configuration.\n * @returns {SardineConfig} The Sardine configuration object.\n */\nexport const getSardineConfig = () => {\n  return config;\n};\n\n","import _assign from 'lodash/assign';\nimport _isNumber from 'lodash/isNumber';\nimport _find from 'lodash/find';\nimport React, { Fragment } from 'react';\nimport parseISO from 'date-fns/parseISO';\nimport getYear from 'date-fns/getYear';\nimport isWithinInterval from 'date-fns/isWithinInterval';\nimport { DBA_IGNORE_STATES, VANITY_STATE_COPY } from '../constants/ui';\nimport { URLS as POST_CORP_URLS } from '../constants/complete_corp';\nimport { URLS as POST_LLC_URLS } from '../constants/complete_llc';\nimport { URLS as REG_URLS } from '../constants/registration';\nimport { URLS as RA_URLS } from '../constants/register_cora_pf';\nimport { URLS as POST_RA_URLS } from '../constants/complete_cora';\nimport { URLS as POST_ADDONS } from '../constants/purchase_post_addons';\nimport { reportError } from './ReportingUtils';\n\nconst RA_50_OFF_OFFER = true;\n\nconst coupon49to99 = {\n    price: 49,\n    note: '*',\n    explanation:\n      'SPECIAL OFFER - get our Starter plan for only $DISCOUNTED_PRICE. It will renew each year for $99, unlike the $119 that some competitors charge.'\n  },\n  coupon49to119SixMonth = {\n    price: 49,\n    note: '*',\n    explanation:\n      'PAYMENT TERMS - get our Starter plan for only $DISCOUNTED_PRICE. At the end of the year it will renew with our Annual Report Service for $BASE_PRICE/yr. ' +\n      'All  annual plans and add ons renew at the prices listed at the time of renewal. Rates subject to change.'\n  },\n  coupon49to119 = {\n    price: 49,\n    note: '*',\n    explanation:\n      'SPECIAL OFFER - get our Starter plan for only $DISCOUNTED_PRICE. At the end of the year it will renew with our Annual Report Service for only $BASE_PRICE/year.'\n  },\n  coupon49to129 = {\n    price: 49,\n    note: '*',\n    explanation:\n      'SPECIAL OFFER - get our Starter plan for only $DISCOUNTED_PRICE. At the end of the year it will renew with our Annual Report Service for only $BASE_PRICE/year.'\n  },\n  coupon49to199 = {\n    price: 49,\n    note: '*',\n    explanation: 'SPECIAL OFFER - get our Starter plan for only $DISCOUNTED_PRICE. At the end of the year it will renew with our Annual Report Service for only $BASE_PRICE/year.'\n  },\n  couponPartner39to119 = {\n    price: 39,\n    note: '*',\n    explanation:\n      'SPECIAL OFFER - get our Starter plan for only $DISCOUNTED_PRICE. At the end of the year it will renew with our Registered Agent service for only $BASE_PRICE/year.'\n  },\n  coupons = {\n    starter_plan_v12: coupon49to99,\n    starter_plan_v13: coupon49to99,\n    starter_plan_v14: coupon49to99,\n    starter_plan_v15: coupon49to119,\n    starter_plan_v16: coupon49to119,\n    starter_plan_v17: coupon49to119,\n    starter_plan_v18: coupon49to119,\n    starter_plan_v19: coupon49to119,\n    starter_plan_v20: coupon49to129,\n    starter_plan_v21: coupon49to119SixMonth,\n    starter_plan_v23: coupon49to119,\n    starter_plan_v24a: coupon49to119,\n    starter_plan_v24b: couponPartner39to119,\n    starter_plan_v24c: couponPartner39to119,\n    starter_plan_v26: coupon49to199,\n    partner_starter_plan_v1: couponPartner39to119,\n    partner_starter_plan_v2: coupon49to119,\n    partner_starter_plan_v3: couponPartner39to119,\n    rvshare_starter_plan_v1: couponPartner39to119\n  };\n\nlet products = {\n    accountant1800: true,\n    accounting: true,\n    amendment: true,\n    anonymity: true,\n    annualReport: true,\n    annualReportService: true,\n    banking: true,\n    bankingResolution: true,\n    basicEmail: true,\n    bof: true,\n    businessKit: true,\n    businessLicense: true,\n    corporateDocs: true,\n    cpaConsult: true,\n    dbaEntity: true,\n    dbaCompliance: true,\n    domainName: true,\n    domainNameMultipleTLDs: false,\n    domainNamePrivacy: true,\n    dudaWebsiteBuilder: false,\n    ein: true,\n    expeditePriority: true,\n    expediteRush: true,\n    expenseTrackingWithTaxFiling: true,\n    formation: true,\n    futureFileDate: true,\n    goodStanding: true,\n    logoKit: true,\n    initialCPAScreening: true,\n    insurance: true,\n    international: true,\n    naicsUpdate: false,\n    nameRes: true,\n    nyPub: true,\n    nyPubUpsell: false,\n    opAgree: true,\n    ra: true,\n    raSA: true,\n    raSADash: true,\n    smbEcommAddon: true,\n    smbWebsiteEcomm: true,\n    staticWebsite: true,\n    taxPreparation: true,\n    upsell: true,\n    wfg: true,\n    wfgInitialReport: true,\n    virtualBusinessAddress: false,\n    registeredAgentService: true,\n    vanityProduct: false,\n    zbmPro: false,\n    zbmProPF: true\n  },\n  pricing = {\n    id: 'FallbackUI',\n    test: 'A',\n    accountant1800: 0,\n    accountingGrowAndScaleMonth: 200,\n    accountingQuickStartMonth: 50,\n    accountingUpAndRunningMonth: 100,\n    amendment: 100,\n    anonymityYear: 0,\n    annualReport: 75,\n    annualReportService: 0,\n    bankOfAmericaOffer: 0,\n    bankingYear: 100,\n    bankingResolution: 35,\n    basicEmailYear: 25,\n    businessKit: 99,\n    businessLicense: 95,\n    registeredAgentService: 199,\n    corporateDocs: 100,\n    cpaConsult: 0, // Only in plans\n    dbaEntity: 95,\n    dbaCompliance: 50,\n    domainNameYear: 25,\n    domainNamePrivacyYear: 10,\n    ein: 70,\n    expeditePriority: 50,\n    expediteRush: 100,\n    formation: 0,\n    futureFileDate: 30,\n    goodStanding: 75,\n    logoKit: 60,\n    initialCPAScreening: 0, // Only in plans\n    insuranceYear: 0,\n    insuranceFrom: 45,\n    international: 300,\n    nameRes: 50,\n    nyPub: 200,\n    opAgree: 100,\n    raFirstYearOffer: 149,\n    raYear: 119,\n    smbEcommAddonMonth: 15,\n    smbEcommAddonYear: 175,\n    smbWebsiteMonth: 15,\n    smbWebsiteYear: 129,\n    smbWebsiteEcommMonth: 29,\n    smbWebsiteEcommYear: 279,\n    staticWebsite: 50,\n    staticWebsiteYear: 50,\n    taxPreparationYear: 0,\n    websiteToolsBundle: 149,\n    wfgYear: 119,\n    wfgInitialReport: 100,\n    virtualBusinessAddress: 15,\n    zbBankingPreferredMonthly: 5,\n    zbmProMonth: 30,\n    zbmProYear: 300,\n    domainLinkOnDash: false\n  },\n  usePlansBasedPricing = false,\n  standaloneServices = {},\n  plans = {};\n\nlet taxTestVariant = '';\n//let bofTestVariant = '';\n//let isBofSummer2024PromoEnabled = false;\nlet recurlyEnabled = false;\nlet applePayEnabled = false;\n\nexport const isTaxTestActive = () => {\n  return !!taxTestVariant;\n};\n\nexport const getTaxTestVariant = () => {\n  return taxTestVariant;\n};\n\nexport const setTaxTestVariant = (value) => {\n  taxTestVariant = value;\n};\n\n/** End DJL */\n\n/**\n * DJL - This section is for the BOF Test\n */\nexport const isBOFTestActive = () => {\n//  return bofTestVariant !== 'control';\n  return false;\n};\n\nexport const getBOFTestVariant = () => {\n//  return bofTestVariant;\n  return '';\n};\n\nexport const setBOFTestVariant = (/*value*/) => {\n//  bofTestVariant = value;\n};\n\nexport const isBofSummer2024PromoActive = () => {\n//  return isBofSummer2024PromoEnabled === true;\n  return false;\n};\n\nexport const getIsBofSummer2024PromoEnabled = () => {\n//  return isBofSummer2024PromoEnabled;\n  return false;\n};\n\nexport const setIsBofSummer2024PromoEnabled = (/*value*/) => {\n//  isBofSummer2024PromoEnabled = value;\n};\n\n/** End DJL */\n\nexport const isRecurlyEnabled = () => {\n  return recurlyEnabled;\n};\n\nexport const setRecurlyEnabled = (value) => {\n  recurlyEnabled = value;\n};\n\nexport const isApplePayEnabled = () => {\n  return applePayEnabled;\n};\n\nexport const setApplePayEnabled = (value) => {\n  applePayEnabled = value;\n};\n\nlet postPurchaseEntityCheckEnabled = false;\n\nexport const isPostPurchaseEntityCheckEnabled = () => {\n  return postPurchaseEntityCheckEnabled;\n};\n\nexport const setPostPurchaseEntityCheckEnabled = (value) => {\n  postPurchaseEntityCheckEnabled = value;\n};\n\nconst shouldUsePlansBasedPricing = () => {\n  return !![\n    REG_URLS.BASE,\n    RA_URLS.BASE,\n    POST_LLC_URLS.BASE,\n    POST_CORP_URLS.BASE,\n    POST_RA_URLS.BASE,\n    POST_ADDONS.BASE\n  ].find((base) => {\n    return document.location.pathname.includes(base);\n  });\n};\nconst isCoraFlow = () => {\n  return !![POST_RA_URLS.BASE, RA_URLS.BASE].find((base) => {\n    return document.location.pathname.includes(base);\n  });\n};\n\nconst getPlanBasedPricing = (service, planLevel = 'level1') => {\n  if (!usePlansBasedPricing) {\n    return 0;\n  }\n  const plansKeys = isCoraFlow() ? ['raLevel1', 'raLevel2'] : ['level1', 'level2', 'level3'];\n  if (service === 'operating_agreement') {\n    const priceBasedOnPlanLevel = plans[planLevel]?.servicePrices[service].price || 0;\n    return priceBasedOnPlanLevel;\n  }\n  return plansKeys.reduce((price, planKey) => {\n    if (price) {\n      return price;\n    }\n    return plans[planKey]?.servicePrices[service]?.price || 0;\n  }, 0);\n};\n\nconst notifySentry = (err, url, action) => {\n  const metaData = { url };\n  let errorName = '';\n\n  if (err.response) {\n    const errorCode = err.response.data.errorCode || err.response.data.status;\n    metaData.responseData = JSON.stringify(err.response.data, null, 4);\n    metaData.httpStatus = err.response.status;\n    errorName = action ? `${url} - ${action} - ${errorCode}` : `${url} - ${errorCode}`;\n  } else if (err.message) {\n    errorName =\n      err.message.toLowerCase() === 'network error'\n        ? 'Middleware Non-Responsive'\n        : `${err.name} - ${err.message}`;\n  } else {\n    errorName = `${err.name} - Unknown (no message)`;\n  }\n  reportError(new Error(errorName), { metaData });\n};\n\nexport const setPricingMapsFlags = () => {\n  usePlansBasedPricing = shouldUsePlansBasedPricing();\n};\n\nexport const setProducts = (data) => {\n  setPricingMapsFlags();\n  const {\n    products: initProducts = null,\n    pricing: initPricing = null,\n    plans: initPlans = null,\n    standaloneServices: initStandaloneServices = null\n  } = data;\n\n  if (initPlans) {\n    plans = _assign({}, initPlans);\n  }\n  if (initProducts) {\n    products = _assign({}, products, initProducts, {});\n  }\n  if (initPricing) {\n    pricing = _assign({}, pricing, initPricing, {});\n  }\n  if (initStandaloneServices) {\n    standaloneServices = _assign({}, initStandaloneServices);\n  }\n};\n\nexport const getAffiliatePricingUUID = (service, term, period, couponUuid) => {\n  const item = _find(standaloneServices, (itm) => {\n    const { related_service_pricing: pricingService = {} } = itm;\n    if (pricingService.service !== service) {\n      return false;\n    }\n    if (!term) {\n      return true;\n    }\n    if (period === 1 && pricingService.interval === 'annual') {\n      return true;\n    }\n    if (period === 12 && pricingService.interval === 'monthly') {\n      return true;\n    }\n    return false;\n  });\n\n  if (couponUuid || couponUuid === null) {\n    const serviceByCoupon = _find(standaloneServices, (itm) => {\n      return itm.related_service_pricing.coupon === couponUuid;\n    });\n    return serviceByCoupon?.uuid || '';\n  }\n\n  if (!item) {\n    const err = {\n      name: `affiliate-pricing-${service}`,\n      message: 'Does not exist a pricing uuid for that service'\n    };\n    const metadata = { standaloneServicesLength: standaloneServices.length };\n    notifySentry(err, metadata);\n  }\n\n  return item ? item.uuid : '';\n};\n\nexport const getAffiliatePricingUUIDByPrice = (service, price) => {\n  const item = _find(standaloneServices, (itm) => {\n    const { related_service_pricing: pricingService = {} } = itm;\n    if (pricingService.service !== service) {\n      return false;\n    }\n    if (pricingService.amount !== price) {\n      return false;\n    }\n    return true;\n  });\n\n  if (!item) {\n    const err = {\n      name: `affiliate-pricing-${service}-${price}`,\n      message: 'Does not exist a pricing uuid for that service and price'\n    };\n    const metadata = { standaloneServicesLength: standaloneServices.length };\n    notifySentry(err, metadata);\n  }\n\n  return item ? item.uuid : '';\n};\n\nexport const isAccountingEnabled = () => {\n  return products.accounting || false;\n};\n\nexport const getAccountingGrowAndScaleMonthlyPrice = () => {\n  return pricing.accountingGrowAndScaleMonth;\n};\n\nexport const getAccountingQuickStartMonthlyPrice = () => {\n  return pricing.accountingQuickStartMonth;\n};\n\nexport const getAccountingUpAndRunningMonthlyPrice = () => {\n  return pricing.accountingUpAndRunningMonth;\n};\n\nexport const isAmendmentEnabled = () => {\n  return products.amendment || false;\n};\n\nexport const getAmendmentPrice = () => {\n  return getPlanBasedPricing('llc_amendment') || pricing.amendment;\n};\n\nexport const isAnonymityEnabled = () => {\n  return products.anonymity || false;\n};\n\nexport const getAnonymityYearlyPrice = () => {\n  return pricing.anonymityYear;\n};\n\nexport const isAnnualReportEnabled = () => {\n  return products.annualReport || false;\n};\n\nexport const getAnnualReportPrice = () => {\n  return getPlanBasedPricing('llc_annual_report') || pricing.annualReport;\n};\n\nexport const isAnnualReportServiceEnabled = () => {\n  return products.annualReportService || false;\n};\n\nexport const getAnnualReportServicePrice = () => {\n  return getPlanBasedPricing('annual_report_service') || pricing.annualReportService;\n};\n\nexport const isBankingEnabled = () => {\n  return products.banking || false;\n};\n\nexport const getBankingYearlyPrice = () => {\n  return getPlanBasedPricing('banking') || pricing.bankingYear;\n};\n\nexport const isBankingResolutionEnabled = () => {\n  return products.bankingResolution || false;\n};\n\nexport const getBankingResolutionPrice = () => {\n  return getPlanBasedPricing('banking_resolution') || pricing.bankingResolution;\n};\n\nexport const isBasicEmailEnabled = () => {\n  return products.basicEmail || false;\n};\n\nexport const getAccountant1800Price = () => {\n  return getPlanBasedPricing['1800_accountant'] || pricing.accountant1800;\n};\n\nexport const getBasicEmailYearlyPrice = () => {\n  return getPlanBasedPricing('basic_email') || pricing.basicEmailYear;\n};\n\nexport const isBusinessLicenseEnabled = () => {\n  return products.businessLicense || false;\n};\n\nexport const isRegisteredAgentEnabled = () => {\n  return products.registeredAgentService || false;\n};\n\nexport const getBusinessLicensePrice = () => {\n  return getPlanBasedPricing('business_license_report') || pricing.businessLicense;\n};\n\nexport const getRegisteredAgentServicePrice = () => {\n  return pricing.registeredAgentService;\n};\n\nexport const getRegisteredAgentLicensePrice = () => {\n  return getPlanBasedPricing('registered_agent_service') || pricing.registeredAgentService;\n};\n\nexport const isCorporateDocsEnabled = () => {\n  return products.corporateDocs || false;\n};\n\nexport const getCorporateDocsPrice = () => {\n  return getPlanBasedPricing('corporate_docs') || pricing.corporateDocs;\n};\n\nexport const isBusinessKitEnabled = () => {\n  return products.businessKit || false;\n};\n\nexport const getBusinessKitPrice = () => {\n  return getPlanBasedPricing('business_kit') || pricing.businessKit;\n};\n\nexport const getBeneficialOwnershipFilingPrice = () => {\n  return pricing.beneficialOwnershipFiling;\n};\n\nexport const getOngoingBofCompliancePrice = () => {\n  return pricing.ongoingBofCompliance;\n};\n\nexport const getOngoingBofComplianceNoCouponPrice = () => {\n  return pricing.ongoingBofComplianceNoCoupon;\n};\n\nexport const getOngoingBofComplianceCoupon = (allCoupons) => {\n  const newCoupon = Object.values(allCoupons).find((item) => {\n    return item.external_coupon_id === 'beneficial_ownership_filing_49';\n  });\n  if (newCoupon) {\n    return newCoupon;\n  }\n  return Object.values(allCoupons).find((item) => {\n    return item.external_coupon_id === '49_off';\n  });\n};\n\nexport const getBofModificationPrice = () => {\n  return pricing.beneficialOwnershipModification;\n};\n\nexport const getOngoingBofModificationPrice = () => {\n  return pricing.beneficialOwnershipOngoingModification;\n};\n\nexport const isCPAConsultEnabled = () => {\n  return products.cpaConsult || false;\n};\n\nexport const getCPAConsultPrice = () => {\n  return getPlanBasedPricing('cpa_consult') || pricing.cpaConsult;\n};\n\nexport const isDBAEntityEnabled = () => {\n  return products.dbaEntity || false;\n};\n\nexport const getDBAEntityPrice = () => {\n  return getPlanBasedPricing('dba_entity') || pricing.dbaEntity;\n};\n\nexport const getDBAEntityFees = (requestedJurisdiction, county, city, filingFees) => {\n  if (\n    !filingFees ||\n    DBA_IGNORE_STATES[requestedJurisdiction] ||\n    !filingFees[requestedJurisdiction].dba_entity\n  ) {\n    return 0;\n  }\n\n  const fees = filingFees[requestedJurisdiction].dba_entity.fees;\n\n  if (_isNumber(fees)) {\n    return fees;\n  }\n\n  if (city) {\n    return (fees[city] ? fees[city].fees : 0) || 0;\n  }\n  return (fees[county] ? fees[county].fees : 0) || 0;\n};\n\nexport const isDBAComplianceEnabled = () => {\n  return products.dbaCompliance || false;\n};\n\nexport const getDBAComplianceYearlyPrice = () => {\n  return getPlanBasedPricing('dba_compliance') || pricing.dbaCompliance;\n};\n\nexport const isDomainNameEnabled = () => {\n  return products.domainName || false;\n};\n\nexport const getDomainNameYearlyPrice = () => {\n  return getPlanBasedPricing('domain_name_reg') || pricing.domainNameYear;\n};\n\nexport const isDomainNamePrivacyEnabled = () => {\n  return products.domainNamePrivacy || false;\n};\n\nexport const getDomainNamePrivacyYearlyPrice = () => {\n  return getPlanBasedPricing('domain_name_privacy') || pricing.domainNamePrivacyYear;\n};\n\nexport const isDomainNameMultipleTLDs = () => {\n  return products.domainNameMultipleTLDs || false;\n};\n\nexport const isDudaWebsiteBuilderEnabled = () => {\n  return products.dudaWebsiteBuilder || false;\n};\n\nexport const isEINEnabled = () => {\n  return products.ein || false;\n};\n\nexport const getEINPrice = () => {\n  return getPlanBasedPricing('ein_creation') || pricing.ein;\n};\n\nexport const isExpeditePriorityEnabled = () => {\n  return products.expeditePriority || false;\n};\n\nexport const getExpeditePriorityPrice = () => {\n  return getPlanBasedPricing('expedite') || pricing.expeditePriority;\n};\n\nexport const isExpediteRushEnabled = () => {\n  return products.expediteRush || false;\n};\n\nexport const getExpediteRushPrice = () => {\n  return getPlanBasedPricing('expedite_to_rush_upgrade') || pricing.expediteRush;\n};\n\nexport const getExpediteRushPriceFee = () => {\n  return pricing.fee;\n};\nexport const isFormationEnabled = () => {\n  return products.formation || false;\n};\n\nexport const getFormationPrice = () => {\n  return getPlanBasedPricing('llc_formation') || pricing.formation;\n};\n\n// Enable Future File Date from Oct 1 - Dec 31\nexport const isFutureFileDateEnabled = (nowOverride) => {\n  if (!products.futureFileDate) return false;\n  const now = parseISO(nowOverride || new Date().toISOString());\n  const start = parseISO(`${getYear(now)}-10-01T00:00Z`);\n  const end = parseISO(`${getYear(now)}-12-31T23:59Z`);\n  return isWithinInterval(now, { start, end });\n};\n\nexport const getFutureFileDatePrice = () => {\n  return getPlanBasedPricing('future_file_date') || pricing.futureFileDate;\n};\n\nexport const isGoodStandingEnabled = () => {\n  return products.goodStanding || false;\n};\n\nexport const getGoodStandingPrice = () => {\n  return getPlanBasedPricing('standard_good_standing') || pricing.goodStanding;\n};\n\nexport const isLogoKitEnabled = () => {\n  return products.logoKit || false;\n};\n\nexport const getLogoKitPrice = () => {\n  return getPlanBasedPricing('logo_kit') || pricing.logoKit;\n};\n\nexport const isInitialCPAScreeningEnabled = () => {\n  return products.initialCPAScreening || false;\n};\n\nexport const getInitialCPAScreeningPrice = () => {\n  return getPlanBasedPricing('initial_cpa_screening') || pricing.initialCPAScreening;\n};\n\nexport const isInsuranceEnabled = () => {\n  return products.insurance || false;\n};\n\nexport const getInsuranceYearlyPrice = () => {\n  return pricing.insuranceYear;\n};\n\nexport const getInsuranceFromPrice = () => {\n  return pricing.insuranceFrom;\n};\n\nexport const isNaicUpdateEnabled = () => {\n  return products.naicsUpdate || false;\n};\n\nexport const isNameResEnabled = () => {\n  return products.nameRes || false;\n};\n\nexport const getNameResPrice = () => {\n  return getPlanBasedPricing('entity_name_reservation') || pricing.nameRes;\n};\n\nexport const isNYPubEnabled = () => {\n  return products.nyPub || false;\n};\n\nexport const isNYPubUpsellEnabled = () => {\n  return products.nyPubUpsell || false;\n};\n\nexport const getNYPubPrice = () => {\n  return getPlanBasedPricing('ny_publication') || pricing.nyPub;\n};\n\nexport const getPAPubPrice = () => {\n  return pricing.paPub;\n};\n\nexport const getGAPubPrice = () => {\n  return pricing.gaPub;\n};\n\nexport const getSplitNYPubFees = (county, filingFees) => {\n  if (!filingFees || !filingFees.NY || !filingFees.NY.ny_publication || !county) {\n    // If filing fees are not loaded or loaded correctly\n    return null;\n  }\n\n  const fees = filingFees.NY.ny_publication.fees;\n  const idx = county.indexOf(' County');\n  const tmpKey = (idx === -1 ? county.toLowerCase() : county.substring(0, idx).toLowerCase())\n    .split(' ')\n    .join('_');\n  const key = tmpKey === 'st._lawrence' ? 'st_lawrence' : tmpKey;\n  const countyFee = fees[key] ? fees[key].domestic : fees.albany.domestic;\n\n  return {\n    stateFee: fees.state.domestic,\n    countyFee\n  };\n};\n\nexport const getNYPubFees = (county, filingFees) => {\n  if (!county) return null;\n  const { stateFee, countyFee } = getSplitNYPubFees(county, filingFees);\n  return stateFee + countyFee;\n};\n\nexport const getNYPubPriceTotal = (county, filingFees) => {\n  const price = getNYPubPrice();\n  const fees = getNYPubFees(county, filingFees) || 0;\n  return price + fees;\n};\n\nexport const isOpAgreementEnabled = () => {\n  return products.opAgree || false;\n};\n\nexport const getOpAgreementPrice = (planLevel = 'level1') => {\n  return getPlanBasedPricing('operating_agreement', planLevel) || pricing.opAgree;\n};\n\nexport const isRAEnabled = () => {\n  return products.ra || false;\n};\n\nexport const isRAStandAloneEnabled = () => {\n  return products.raSA || false;\n};\n\nexport const isRASADashboardEnabled = () => {\n  return products.raSADash || false;\n};\n\nexport const getRAYearlyPrice = () => {\n  return getPlanBasedPricing('registered_agent_service') || pricing.raYear;\n};\n\nexport const getRAFirstYearPrice = () => {\n  // First year price (RA 25% off first year offer)\n  return pricing.raFirstYearOffer;\n};\n\nexport const isRAOfferEnabled = () => {\n  return RA_50_OFF_OFFER;\n};\n\nexport const getSMBEcommAddonMonthlyPrice = () => {\n  return pricing.smbEcommAddonMonth;\n};\n\nexport const getSMBEcommAddonYearlyPrice = () => {\n  return pricing.smbEcommAddonYear;\n};\n\nexport const getSMBWebsiteMonthlyPrice = () => {\n  return pricing.smbWebsiteMonth;\n};\n\nexport const getSMBWebsiteYearlyPrice = () => {\n  return pricing.smbWebsiteYear;\n};\n\nexport const getSMBWebsiteEcommMonthlyPrice = () => {\n  return pricing.smbWebsiteEcommMonth;\n};\n\nexport const getSMBWebsiteEcommYearlyPrice = () => {\n  return pricing.smbWebsiteEcommYear;\n};\n\nexport const isStaticWebsiteEnabled = () => {\n  return products.staticWebsite || false;\n};\n\nexport const getStaticWebsiteYearlyPrice = () => {\n  return pricing.smbWebsiteYear;\n};\n\nexport const getStaticWebsitePrice = () => {\n  return getPlanBasedPricing('static_website') || pricing.staticWebsite;\n};\nexport const isTaxPreparationEnabled = () => {\n  return products.taxPreparation || false;\n};\n\nexport const getTaxPreparationYearlyPrice = () => {\n  return pricing.taxPreparationYear;\n};\n\nexport const isUpsellEnabled = () => {\n  return products.upsell || false;\n};\n\nexport const isWFGEnabled = () => {\n  return products.wfg || false;\n};\n\nexport const getBankOfAmericaOfferPrice = () => {\n  return getPlanBasedPricing('bank_of_america_offer') || pricing.bankOfAmericaOffer || 0;\n};\n\nexport const isAccountant1800Enabled = () => {\n  return products.accountant1800 || false;\n};\n\nexport const getWFGYearlyPrice = () => {\n  return getPlanBasedPricing('worry_free_service') || pricing.wfgYear;\n};\n\nexport const isWFGInitialReportEnabled = () => {\n  return products.wfgInitialReport || false;\n};\n\nexport const isVirtualBusinessAddressEnabled = () => {\n  return products.virtualBusinessAddress || false;\n};\n\nexport const getVirtualBusinessAddressPrice = () => {\n  return getPlanBasedPricing('virtual_business_address') || pricing.virtualBusinessAddress;\n};\n\nexport const getWFGInitialReportPrice = () => {\n  return getPlanBasedPricing('wfg_initial_report') || pricing.wfgInitialReport;\n};\n\nexport const getWebsiteToolsBundlePriceFromAddonOrStandalone = () => {\n  return getPlanBasedPricing('website_tools_bundle') || pricing.websiteToolsBundle;\n};\n\nexport const getEinBusinessDocsBundleFromAddonOrStandalone = () => {\n  return getPlanBasedPricing('ein_business_docs_bundle') || pricing.einBusinessDocsBundle;\n};\n\nexport const isDomainLinkOnDashEnabled = () => {\n  return pricing.domainLinkOnDash || false;\n};\n\nexport const isExpenseTrackingWithTaxFilingEnabled = () => {\n  return products.expenseTrackingWithTaxFiling;\n};\n\nexport const isZBMProPFEnabled = () => {\n  return products.zbmProPF || false;\n};\n\nexport const getZbBankingPreferredMonthlyPrice = () => {\n  return pricing.zbBankingPreferredMonthly;\n};\n\nexport const getZBMProMonthlyPrice = () => {\n  return pricing.zbmProMonth;\n};\n\nexport const getZbTaxAdviceMonthlyPrice = () => {\n  return pricing.zbTaxAdviceMonthly;\n};\n\nexport const getZbTaxAdviceYearlyPrice = () => {\n  return pricing.zbTaxAdviceYearly;\n};\n\nexport const getZbBizTaxPrepPriorYearPrice = () => {\n  return pricing.zbBizTaxPrepPriorYear;\n};\n\nexport const getZbBizTaxPrepMonthlyPrice = () => {\n  return pricing.zbBizTaxPrepMonthly;\n};\n\nexport const getZbBizTaxPrepYearlyPrice = () => {\n  return pricing.zbBizTaxPrepYearly;\n};\n\nexport const getZbTaxAdviceBizTaxPrepMonthlyPrice = () => {\n  return pricing.zbTaxAdviceBizTaxPrepMonthly;\n};\n\nexport const getZbTaxAdviceBizTaxPrepYearlyPrice = () => {\n  return pricing.zbTaxAdviceBizTaxPrepYearly;\n};\n\nexport const getZBMProYearlyPrice = () => {\n  return pricing.zbmProYear;\n};\n\nexport const getCoupon = (id) => {\n  return coupons[id] || null;\n};\n\nexport const getVanityProducts = () => {\n  return {};\n};\n\n// Dice up vanity product strings to add formatting. This will need to be tailored for each vanity product\nconst formatVanityProduct = (product, jurisdiction = null) => {\n  if (product.productId === 'vanityTrademark') {\n    const title = (\n      <Fragment>\n        {product.title.split('$')[0]}\n        <span>${product.price}?</span>\n      </Fragment>\n    );\n    const explanationSentences = product.explanation.split('.');\n    const firstExplanationSentence = explanationSentences[0];\n    explanationSentences.shift();\n    const explanation = (\n      <div style={{ fontSize: '18px', lineHeight: '24px' }}>\n        {firstExplanationSentence}\n        <br />\n        <br />\n        {explanationSentences.join('.')}\n      </div>\n    );\n    return { ...product, title, explanation };\n  }\n  if (product.productId === 'vanityVMA') {\n    const city = VANITY_STATE_COPY[jurisdiction];\n    const titlePieces = product.title.split(`$${product.price}`);\n    const title = (\n      <Fragment>\n        {titlePieces[0]}\n        <span>\n          ${product.price}\n          {titlePieces.slice(1).join('')}\n        </span>\n      </Fragment>\n    );\n    const explanation = product.explanation.replace('VMA_CITY', city);\n    const benefitsItems = product.benefitsItems.map((benefit) => {\n      return { ...benefit, description: benefit.description.replace('VMA_CITY', city) };\n    });\n    const bottomLineParagraphs = product.bottomLineParagraphs.map((paragraph) => {\n      return paragraph.replace('VMA_CITY', city);\n    });\n    return { ...product, explanation, benefitsItems, bottomLineParagraphs, title };\n  }\n  return product;\n};\n\nexport const getVanityProduct = (key = null) => {\n  if (!key) return null;\n  const vanityProduct = _find(getVanityProducts(), (item) => {\n    return item.pageTitle === key && item.active;\n  });\n  return (vanityProduct && formatVanityProduct(vanityProduct)) || null;\n};\n\nexport const getVanityProductPrice = (key = null) => {\n  return getVanityProduct(key)?.priceWithoutCoupon || getVanityProduct(key)?.price || null;\n};\n\nexport const getPostPurchaseVanityProduct = (jurisdiction = null) => {\n  const vanityProduct = _find(getVanityProducts(), (item) => {\n    const activeTest =\n      item.postPurchase &&\n      Object.prototype.hasOwnProperty.call(products, 'vanityProduct') &&\n      products.vanityProduct;\n\n    const requirements =\n      !jurisdiction || !item.allowedJurisdictions\n        ? true\n        : item.allowedJurisdictions.includes(jurisdiction);\n    return activeTest && requirements;\n  });\n  return (vanityProduct && formatVanityProduct(vanityProduct, jurisdiction)) || null;\n};\n\nexport const getPostPurchaseVanityProductPrice = () => {\n  return getPostPurchaseVanityProduct()?.price || null;\n};\n\nexport const getPricingForTests = () => {\n  return pricing;\n};\n","import _get from 'lodash/get';\nimport { getCompanyType } from './PlanUtils';\nimport {\n  getBankingResolutionPrice,\n  getBasicEmailYearlyPrice,\n  getCorporateDocsPrice,\n  getCoupon,\n  getDomainNamePrivacyYearlyPrice,\n  getDomainNameYearlyPrice,\n  getEINPrice,\n  getExpeditePriorityPrice,\n  getExpediteRushPrice,\n  getOpAgreementPrice,\n  getStaticWebsiteYearlyPrice,\n  getWFGYearlyPrice,\n  isBankingResolutionEnabled,\n  isBasicEmailEnabled,\n  isCorporateDocsEnabled,\n  isDomainNameEnabled,\n  isDomainNamePrivacyEnabled,\n  isEINEnabled,\n  isOpAgreementEnabled,\n  isStaticWebsiteEnabled,\n  isWFGEnabled\n} from './ProductService';\nimport { getPlanLevel, findItemInAddOns } from './PlanService';\n\n\n/**\n * Exports Utility functions used for accessing and calculating\n * prices for plans and add-on services\n */\nconst DEFAULT_COUPON = {\n  amount: 0,\n  coupon_uuid: '',\n  external_coupon_id: ''\n};\n\n/** The follow three functions are used to share data between third party trackers that are called at different times,\n * and share similar data as purchase_price.\n */\nconst purchasePriceKey = 'purchase_price';\nconst getPurchasePrice = () => {\n  if (window.localStorage) {\n    return Number(window.localStorage.getItem(purchasePriceKey));\n  }\n  return null;\n};\nconst setPurchasePrice = (purchasePrice) => {\n  if (window.localStorage) {\n    window.localStorage.setItem(purchasePriceKey, String(purchasePrice));\n  }\n};\nconst deletePurchasePrice = ()  => {\n  if (window.localStorage) {\n    window.localStorage.removeItem(purchasePriceKey);\n  }\n};\n\nconst getServicePricingFromPlan = (service, plan) => { return _get(plan, ['servicePrices', service], null) ?? _get(plan, ['service_prices', service], null); };\nconst getCouponById = (couponId, coupons) => { return coupons[couponId] || null; };\nconst getCouponIdFromPricing = (pricing) => { return pricing.coupon || ''; };\nconst calculateDiscountedPrice = (priceAmount, couponAmount) => { return priceAmount - (couponAmount || 0); };\nconst calculateCouponDiscountPercent = (priceAmount, couponAmount) => { return Math.floor(((couponAmount || 0) / priceAmount) * 100); };\nconst getCouponForService = (servicePricing, coupons) => { return getCouponById(getCouponIdFromPricing(servicePricing), coupons) || DEFAULT_COUPON; };\nconst getPriceAndCouponForService = (service, plan, coupons) => {\n  const\n    servicePricing = getServicePricingFromPlan(service, plan),\n    servicePrice = servicePricing ? servicePricing.price : null,\n    serviceCouponUUID = servicePricing ? servicePricing.coupon : null,\n    serviceCoupon = getCouponById(serviceCouponUUID, coupons),\n    serviceCouponAmount = serviceCoupon ? serviceCoupon.amount : 0;\n  return { servicePrice, serviceCouponAmount };\n};\n\n/**\n * @param {Object} plan\n * @param {Object} coupons\n * @param {String} service\n * @returns {Number} Percentage the discount off the total price represents (rounded down)\n * should be used for text display NOT for calculating price in checkout\n */\nconst getDiscountPercentForService = (service, plan, coupons) => {\n  const servicePricing = getServicePricingFromPlan(service, plan);\n  const coupon = getCouponForService(servicePricing, coupons);\n  return calculateCouponDiscountPercent(servicePricing.price, coupon.amount);\n};\n\n\n// TODO: Refactor this layer to use an interval are and coupon calc always\n/**\n *\n * @param {Object} service\n * @param {Object} plan\n * @returns {Number} service price\n */\nconst getYearlyPriceForService = (service, plan) => {\n  return getServicePricingFromPlan(service, plan).price;\n};\n\nconst getMonthlyPriceForService = (service, plan) => {\n  return Math.ceil(getYearlyPriceForService(service, plan) / 12);\n};\n\n/**\n * @param {String} service name\n * @param {Object} plan\n * @param {Object} coupons\n * @returns {Number} representing the final price of service for a particular plan after discounts\n */\nconst getFirstYearPriceForService = (service, plan, coupons) => {\n  const servicePricing = getServicePricingFromPlan(service, plan);\n  const coupon = getCouponForService(servicePricing, coupons);\n  return calculateDiscountedPrice(servicePricing.price, coupon.amount);\n};\n\n\nconst calculatePlanPrice = (planPrice, planCoupon, coupon) => {\n  let price = planPrice;\n  if (coupon) {\n    price = planCoupon ? (price - planCoupon.amount) : coupon.price;\n  }\n  return price;\n};\n\nconst calculateItemTotalToday = (isActive, prices) => {\n  return isActive ? prices.today : 0;\n};\n\nconst getOneTimePrices = (price, priceFees) => {\n  const fees = priceFees ? priceFees.fees || 0 : 0;\n\n  return {\n    today: price + fees,\n    fees,\n    nextYear: 0,\n    perYear: 0\n  };\n};\n\nconst getPeriodicPrices = (yearlyPrice, priceFees) => {\n  const fees = priceFees ? priceFees.fees || 0 : 0,\n    retVal = { today: fees + yearlyPrice, fees, nextYear: yearlyPrice, perYear: yearlyPrice };\n  return retVal;\n};\n\n\n/**\n *\n * @param {Object} fees\n * @param {String} domesticJurisdiction\n * @returns\n */\nconst getStateFees = (fees, domesticJurisdiction) => {\n  return fees.filingFees[domesticJurisdiction];\n};\n\n/**\n * @param {Boolean} itemBeingPurchased\n * @param {String} itemKey - name of key in plan eg \"static_website\"\n * @param {Boolean} isItemEnabled\n * @param {Boolean} periodicPrice - annual vs one time fee\n * @param {Number} fee - cost of the item\n * @param {Object} plan - for looking up if the item is an add on\n * @returns {Number}\n */\nconst getAddOnItemFee = (itemBeingPurchased, itemKey, isItemEnabled, periodicPrice, fee, plan) => {\n  const prices = (periodicPrice) ? getPeriodicPrices(fee, null) : getOneTimePrices(fee, null);\n  return calculateItemTotalToday(\n    itemBeingPurchased && isItemEnabled && findItemInAddOns(plan, itemKey),\n    prices\n  );\n};\n\n/**\n * calculate all the add on fees\n * @param {Object} purchase items\n * @param {Object} plan\n * @returns {Number} add on total\n */\nconst getAddOnFees = (purchase, plan) => {\n\n  //todo: do we want to move these hard coded strings somewhere central?\n  return getAddOnItemFee(purchase.basicEmail, 'basic_email', isBasicEmailEnabled(), false, getBasicEmailYearlyPrice(), plan) +\n    getAddOnItemFee(purchase.domainName, 'domain_name_reg', isDomainNameEnabled(), true, getDomainNameYearlyPrice(), plan) +\n    getAddOnItemFee(purchase.staticWebsite, 'static_website', isStaticWebsiteEnabled(), true, getStaticWebsiteYearlyPrice(), plan) +\n    getAddOnItemFee(purchase.domainNamePrivacy, 'domain_name_privacy', isDomainNamePrivacyEnabled(), true, getDomainNamePrivacyYearlyPrice(), plan) +\n    getAddOnItemFee(purchase.bankingResolution, 'banking_resolution', isBankingResolutionEnabled(), true, getBankingResolutionPrice(), plan) +\n    getAddOnItemFee(purchase.worryFree, 'worry_free_service', isWFGEnabled(), true, getWFGYearlyPrice(), plan) +\n    getAddOnItemFee(purchase.ein, 'ein_creation', isEINEnabled(), false, getEINPrice(), plan) +\n    getAddOnItemFee(purchase.corporateDocs, 'corporate_docs', isCorporateDocsEnabled(), false, getCorporateDocsPrice(), plan) +\n    getAddOnItemFee(purchase.opAgree, 'operating_agreement', isOpAgreementEnabled(), false, getOpAgreementPrice(), plan);\n\n};\n\n/**\n * takes the current expedite value and checks to see if its already included in the plan\n * if not return the fee\n * @param {String} expedite\n * @param {String} expediteIncludedInPlan\n * @returns\n */\nconst getExpediteFees = (expedite, expediteIncludedInPlan) => {\n\n  let expediteFee = 0;\n  if (expedite.toLowerCase() === 'rush' && expediteIncludedInPlan !== 'rush') {\n    expediteFee = getExpediteRushPrice();\n  } else if (expedite.toLowerCase() === 'priority' && expediteIncludedInPlan !== 'priority') {\n    expediteFee = getExpeditePriorityPrice();\n  }\n\n  return expediteFee;\n};\n\n/**\n *\n * @param {Object} stateFilingFees\n * @param {String} companyType\n * @returns\n */\nconst calculateStateFormationFees = (stateFilingFees, companyType) => {\n\n  if (companyType.toLowerCase() === 'llc' || companyType.toLowerCase() === 'llcx') {\n    return stateFilingFees.llc_formation.fees;\n  }\n  if (companyType.toLowerCase() === 'corp') {\n    return stateFilingFees.corp_formation.fees;\n  }\n  return 0;\n};\n\n/**\n * Prepurchase add ons\n * @param {String} domesticJurisdiction state \"AL\"\n * @param {Object} purchase\n * @param {String} companyType\n * @param {Object} fees\n * @returns\n */\nconst getTotalToday = (domesticJurisdiction, purchase, companyType, fees) => {\n  const\n    { planLevel } = purchase,\n    priceType = getCompanyType(companyType),\n    plan = getPlanLevel(planLevel, domesticJurisdiction) || { expedite: 'standard' },\n    planPrice = plan[priceType] ? plan[priceType].prices['1'] : 0,\n    coupon = getCoupon(plan.id),\n    stateFilingFees = getStateFees(fees, domesticJurisdiction),\n    calculatedPrice = calculatePlanPrice(planPrice, plan.coupon, coupon),\n    expediteFee = getExpediteFees(purchase.expedite, plan.expedite),\n    stateFormationFee = calculateStateFormationFees(stateFilingFees, priceType),\n    addOnFees = getAddOnFees(purchase, plan);\n\n  return (\n    calculatedPrice +\n    stateFormationFee +\n    addOnFees +\n    expediteFee\n  );\n};\n\nexport {\n  getServicePricingFromPlan,\n  getDiscountPercentForService,\n  getCouponIdFromPricing,\n  getCouponById,\n  calculateDiscountedPrice,\n  getCouponForService,\n  getPriceAndCouponForService,\n  calculateCouponDiscountPercent,\n  getFirstYearPriceForService,\n  getYearlyPriceForService,\n  getMonthlyPriceForService,\n  getTotalToday,\n  calculateItemTotalToday,\n  getPeriodicPrices,\n  calculateStateFormationFees,\n  getStateFees,\n  getPurchasePrice,\n  setPurchasePrice,\n  deletePurchasePrice\n};\n","\n/**\n * @param {Object} fees object ex:{priority, rush, standard}\n * @param {Object} selectedExpedite: to look up in the fees obj\n * @returns {Boolean} closed or not closed\n */\nexport const isStateClosed = (feesObj, selectedExpedite) => {\n  if (feesObj[selectedExpedite] && feesObj[selectedExpedite].delayed === true) {\n    return true;\n  }\n  return false;\n};\n\n/**\n * converts company type into llc / corp\n * @param {string} companyType\n * @returns {string}\n */\nexport const getCompanyType = (companyType) => {\n  return (companyType === 'LLCX') ? 'llc' : 'corp';\n};\n\n","/* eslint-disable import/prefer-default-export */\nimport _isEmpty from 'lodash/isEmpty';\nimport _trim from 'lodash/trim';\nimport _toUpper from 'lodash/toUpper';\nimport _toLower from 'lodash/toLower';\n\nexport const parseStringToInt = (value, radix) => {\n  // remove non-number chars before parsing\n  return parseInt(value.replace(/[^0-9]/g, ''), radix);\n};\n\nexport const parseBoolToString = (value) => {\n  return value ? 'yes' : 'no';\n};\n\nexport const checkEmpty = (value) => {\n  return _isEmpty(_trim(value));\n};\n\nexport const normalizeInitParams = (query = {}) => {\n  const {\n    domesticJurisdiction = '',\n    fromDashboard = 'false',\n    hasSCorp = 'false',\n    fromBNG = 'false',\n    type = '',\n    hasSCorpWordUpdate = 'false',\n    planLevel = ''\n  } = query;\n\n  return {\n    ...query,\n    name: checkEmpty(query.name) ? '' : _trim(query.name),\n    domesticJurisdiction: _toUpper(domesticJurisdiction),\n    fromDashboard: _toLower(fromDashboard),\n    hasSCorp: _toLower(hasSCorp),\n    type: _toUpper(type),\n    hasSCorpWordUpdate: _toLower(hasSCorpWordUpdate),\n    planLevel: _toLower(planLevel),\n    fromBNG: _toLower(fromBNG)\n  };\n};\n","import moment from 'moment-timezone';\n\nexport const getDeadline = () => {\n  // Get today's date\n  const deadline = moment()\n    .tz('America/Chicago')\n    .hour(17)\n    .minute(0)\n    .second(0)\n    .millisecond(0); // DJL - consider replaceing moment and moment-timezone\n\n  if (deadline.isBefore(new Date())) {\n    deadline.add(1, 'days');\n  }\n  if (deadline.day() === 0) { // Sunday\n    deadline.add(1, 'days');\n  } else if (deadline.day() === 6) { // Saturday\n    deadline.add(2, 'days');\n  }\n  return deadline;\n};\n\n  /* eslint-disable max-statements */\nexport const getComplete = (expedite, expediteFees, deadline) => {\n  if (!expedite || !expediteFees || !expediteFees[expedite]) {\n    return null;\n  }\n\n  const complete = deadline.clone(),\n    exData = expediteFees[expedite],\n    { period, max_time: maxTime } = exData;\n\n  if (period === 'day') {\n    let dayComplete = complete.clone(),\n      timeLeft = maxTime;\n\n    while (timeLeft > 0) {\n      dayComplete = dayComplete.add(1, 'days');\n      if (dayComplete.day() === 6) {\n        dayComplete = dayComplete.add(2, 'days'); // Skip Weekends\n      }\n      timeLeft -= 1;\n    }\n    return dayComplete;\n  }\n  if (period === 'month') {\n    const monthComplete = complete.add(maxTime, 'months');\n    if (monthComplete.day() === 6) {\n      return monthComplete.add(2, 'days');\n    }\n    if (monthComplete.day() === 0) {\n      return monthComplete.add(1, 'days');\n    }\n    return monthComplete;\n  }\n\n  return complete.add(maxTime, 'weeks');\n};\n/* eslint-enable max-statements */\n\nexport const getDeadlineTimer = (deadline, callback) => {\n  return window.setTimeout(() => {\n    callback();\n  }, deadline.toDate().getTime() - new Date().getTime());\n};\n\nexport const getExpediteHeader = (expedite, expediteFees, timerCallback) => {\n  const deadline = getDeadline(),\n    complete = getComplete(expedite, expediteFees, deadline),\n    timer = getDeadlineTimer(deadline, timerCallback);\n\n  return { deadline, complete, timer };\n};\n","// Shared normalization for corp stock inputs: strip the form's display formatting (thousands commas\n// on the share count, a leading `$` on par value) down to plain numeric strings.\nexport const cleanShares = (value) => { return String(value || '').replace(/,/g, ''); };\nexport const cleanParValue = (value) => { return String(value || '').replace(/[$,]/g, ''); };\n","import _assign from 'lodash/assign';\nimport _cloneDeep from 'lodash/cloneDeep';\nimport _concat from 'lodash/concat';\nimport _filter from 'lodash/filter';\nimport _forEach from 'lodash/forEach';\nimport _map from 'lodash/map';\nimport _reduce from 'lodash/reduce';\nimport React from 'react';\n\nimport { PRES, VP, TRSR, SEC, ASST_SEC } from '../constants/ui';\n\n/* eslint-disable max-statements */\nconst\n  labels = {\n    [ASST_SEC]: 'Asst. Secretary',\n    authorizedSignatory: 'Authorized Signatory',\n    ceo: 'CEO',\n    cto: 'CTO',\n    customer: 'Account Holder',\n    director: 'Director',\n    electiveCEO: 'Elective CEO',\n    manager: 'Manager',\n    member: 'Member',\n    officer: 'Officer',\n    officialStateContact: 'Official State Contact',\n    [PRES]: 'President',\n    [SEC]: 'Secretary',\n    sopContact: 'SOP Contact',\n    [TRSR]: 'Treasurer',\n    [VP]: 'Vice President'\n  },\n  compareItem = (item1, item2) => {\n    if (!item1 && !item2) {\n      return true;\n    }\n    if (item1 !== item2) {\n      return false;\n    }\n    return true;\n  },\n  compareUsers = (user1, user2, checkCompanyName = true) => {\n    if (!user1 || !user2) {\n      return false;\n    }\n\n    if (checkCompanyName) {\n      if (!compareItem(user1.companyName, user2.companyName)) {\n        return false;\n      }\n    }\n\n    if (!compareItem(user1.firstName, user2.firstName)) {\n      return false;\n    }\n    if (!compareItem(user1.middleName, user2.middleName)) {\n      return false;\n    }\n    if (!compareItem(user1.lastName, user2.lastName)) {\n      return false;\n    }\n    if (!compareItem(user1.suffix, user2.suffix)) {\n      return false;\n    }\n\n    return true;\n  },\n  /* eslint-disable max-statements */\n  convertUser = (user, contactType, { customer, offStateContact, electiveCEO, sopContact, authorizedSignatory, selectedKey }) => {\n    if (!user) {\n      return null;\n    }\n    const\n      isCustomer = compareUsers(user, customer, false),\n      isOffStateContact = compareUsers(user, offStateContact),\n      isSOPContact = compareUsers(user, sopContact),\n      isElectiveCEO = compareUsers(user, electiveCEO),\n      isAuthSig = compareUsers(user, authorizedSignatory, false),\n      selectedMap = {\n        offStateContact: isOffStateContact,\n        sopContact: isSOPContact,\n        electiveCEO: isElectiveCEO,\n        authorizedSignatory: isAuthSig\n      },\n      selected = selectedMap[selectedKey] || false;\n\n    const u = _assign({ contactType, isPrincipal: contactType !== selectedKey, isCustomer, isOffStateContact, isSOPContact, isElectiveCEO, isAuthSig, selected }, user);\n    if (!u.email) {\n      if (isCustomer) {\n        u.email = customer.email;\n        u.phoneNumber = customer.phoneNumber;\n      } else if (isOffStateContact) {\n        u.email = offStateContact.email;\n        u.phoneNumber = offStateContact.phoneNumber;\n      } else if (isSOPContact) {\n        u.email = sopContact.email;\n        u.phoneNumber = sopContact.phoneNumber;\n      } else if (isElectiveCEO) {\n        u.email = electiveCEO.email;\n        u.phoneNumber = electiveCEO.phoneNumber;\n      } else if (isAuthSig) {\n        u.email = authorizedSignatory.email;\n        u.phoneNumber = authorizedSignatory.phoneNumber;\n      }\n    }\n    if (u.companyName && !u.careOf) {\n      if (isOffStateContact) {\n        u.careOf = offStateContact.careOf;\n      } else if (isSOPContact) {\n        u.careOf = sopContact.careOf;\n      } else if (isElectiveCEO) {\n        u.careOf = electiveCEO.careOf;\n      }\n    }\n    return u;\n  },\n  convertUsers = (users, contactType, userData) => {\n    return _map(users, (user) => {\n      return convertUser(user, contactType, userData);\n    });\n  },\n  getContactInfoReducer = (collect, p) => {\n    if (p.isCustomer) {\n      collect.customerIncluded = true;\n    }\n    if (p.isOffStateContact) {\n      collect.offStateContactIncluded = true;\n    }\n    if (p.isSOPContact) {\n      collect.sopContactIncluded = true;\n    }\n    if (p.isElectiveCEO) {\n      collect.electiveCEOIncluded = true;\n    }\n    if (p.isAuthSig) {\n      collect.authSigIncluded = true;\n    }\n    return collect;\n  },\n  getContactInclusions = (principals) => {\n    return _reduce(principals, getContactInfoReducer, {\n      customerIncluded: false,\n      offStateContactIncluded: false,\n      sopContactIncluded: false,\n      electiveCEOIncluded: false,\n      authSigIncluded: false\n    });\n  };\n\nexport const generatePrincipals = ({ type, members, managers, directors, officers, customer, offStateContact, electiveCEO, sopContact, authorizedSignatory, selectedKey }) => {\n  const\n    userTypes = { members, managers, customer, offStateContact, electiveCEO, sopContact, authorizedSignatory, selectedKey },\n    convertedMembers = convertUsers(members, 'member', userTypes),\n    convertedManagers = convertUsers(managers, 'manager', userTypes),\n    convertedDirectors = convertUsers(directors, 'director', userTypes),\n    convertedOfficers = convertUsers(officers, 'officer', userTypes),\n    principals = type === 'CORP' ? _concat(convertedDirectors, convertedOfficers) : _concat(convertedMembers, convertedManagers);\n\n  let\n    {\n      customerIncluded,\n      offStateContactIncluded,\n      sopContactIncluded,\n      electiveCEOIncluded,\n      authSigIncluded\n    } = getContactInclusions(principals);\n\n  if (!customerIncluded) {\n    const u = convertUser(customer, 'customer', userTypes);\n    principals.push(u);\n    customerIncluded = true;\n    offStateContactIncluded = offStateContactIncluded || u.isOffStateContact;\n    sopContactIncluded = sopContactIncluded || u.isSOPContact;\n    electiveCEOIncluded = electiveCEOIncluded || u.isElectiveCEO;\n    authSigIncluded = authSigIncluded || u.isAuthSig;\n  }\n  if (offStateContact && (offStateContact.firstName || offStateContact.companyName) && !offStateContactIncluded) {\n    const u = convertUser(offStateContact, 'officialStateContact', userTypes);\n    principals.push(u);\n    sopContactIncluded = sopContactIncluded || u.isSOPContact;\n    electiveCEOIncluded = electiveCEOIncluded || u.isElectiveCEO;\n    authSigIncluded = authSigIncluded || u.isAuthSig;\n  }\n  if (sopContact && !sopContactIncluded) {\n    const u = convertUser(sopContact, 'sopContact', userTypes);\n    principals.push(u);\n    electiveCEOIncluded = electiveCEOIncluded || u.isElectiveCEO;\n    authSigIncluded = authSigIncluded || u.isAuthSig;\n  }\n  if (electiveCEO && !electiveCEOIncluded) {\n    const u = convertUser(electiveCEO, 'electiveCEO', userTypes);\n    principals.push(u);\n    authSigIncluded = authSigIncluded || u.isAuthSig;\n  }\n  if (authorizedSignatory && !authSigIncluded) {\n    const u = convertUser(authorizedSignatory, 'authorizedSignatory', userTypes);\n    principals.push(u);\n  }\n\n  _forEach(principals, (principal, index) => {\n    principal.index = index;\n  });\n\n  return principals;\n};\n\nexport const getContactTypeForChoice = (contact, pageConfig, skipKey, domesticJurisdiction) => {\n  const { contactType, isCustomer, isOffStateContact, isSOPContact, isElectiveCEO, isAuthSig, manager = false, title = '' } = contact.data,\n    retVal = [];\n\n  if (isCustomer && skipKey !== 'customer') {\n    retVal.push((<br />), labels.customer);\n  }\n  if (isOffStateContact && skipKey !== 'offStateContact') {\n    retVal.push((<br />), labels.officialStateContact);\n  }\n  if (isSOPContact && skipKey !== 'sopContact') {\n    retVal.push((<br />), labels.sopContact);\n  }\n  if (isElectiveCEO && skipKey !== 'electiveCEO') {\n    retVal.push((<br />), labels.electiveCEO);\n  }\n  if (isAuthSig && skipKey !== 'authorizedSignatory') {\n    retVal.push((<br />), labels.authorizedSignatory);\n  }\n  if (contactType === 'member') {\n    retVal.push((<br />), pageConfig.member || labels.member);\n    if (manager) {\n      retVal.push((<br />), pageConfig.manager || labels.manager);\n    }\n  } else if (contactType === 'manager') {\n    retVal.push((<br />), pageConfig.manager || labels.manager);\n  } else if (contactType === 'director' || contactType === 'officer') {\n    if (contactType === 'director') {\n      retVal.push((<br />), pageConfig.director || labels.director);\n    }\n    _forEach(title.split(','), (t) => {\n      const l = pageConfig[t] || labels[t] || t;\n      if (domesticJurisdiction === 'CA') {\n        l.replace(/President/g, 'CEO').replace(/Vice President/g, 'CTO');\n      }\n      retVal.push((<br />), l);\n    });\n  }\n  retVal.shift();\n  return retVal;\n};\n\nexport const getContactTypeForDropdown = (contact, pageConfig, skipKey, domesticJurisdiction) => {\n  const { contactType, isCustomer, isOffStateContact, isSOPContact, isElectiveCEO, isAuthSig, manager, title } = contact,\n    retVal = [];\n\n  if (isCustomer && skipKey !== 'customer') {\n    retVal.push(labels.customer);\n  }\n  if (retVal.length === 0 && isOffStateContact && skipKey !== 'offStateContact') {\n    retVal.push(labels.officialStateContact);\n  }\n  if (retVal.length === 0 && isSOPContact && skipKey !== 'sopContact') {\n    retVal.push(labels.sopContact);\n  }\n  if (retVal.length === 0 && isElectiveCEO && skipKey !== 'electiveCEO') {\n    retVal.push(labels.electiveCEO);\n  }\n  if (retVal.length === 0 && isAuthSig && skipKey !== 'authorizedSignatory') {\n    retVal.push(labels.authorizedSignatory);\n  }\n  if (contactType === 'member') {\n    retVal.push(pageConfig.member || labels.member);\n    if (retVal.length === 1 && manager) {\n      retVal.push(pageConfig.manager || labels.manager);\n    }\n  } else if (contactType === 'manager') {\n    retVal.push(pageConfig.manager || labels.manager);\n  } else if (contactType === 'director' || contactType === 'officer') {\n    _forEach(title.split(','), (t) => {\n      if (!t) {\n        return;\n      }\n      const l = pageConfig[t] || labels[t] || t;\n      if (domesticJurisdiction === 'CA') {\n        l.replace(/President/g, 'CEO').replace(/Vice President/g, 'CTO');\n      }\n      if (retVal.length <= 1) {\n        retVal.push(l);\n      }\n    });\n    if (retVal.length <= 1 && contactType === 'director') {\n      retVal.push(pageConfig.director || labels.director);\n    }\n  }\n  return retVal.join(', ');\n};\n\nexport const generateAuthSigPrincipals = ({ type, members, managerType, managers, directors, officers, customer, offStateContact, electiveCEO, sopContact, authorizedSignatory }) => {\n  const\n    userTypes = { members, managers, customer, offStateContact, electiveCEO, sopContact, authorizedSignatory, selectedKey: 'authorizedSignatory' },\n    convertedMembers = _map(convertUsers(members, 'member', userTypes), (member) => {\n      const titles = [ 'Member' ];\n      if (member.manager) {\n        titles.push('Manager');\n      }\n      return _assign({ titles }, member);\n    }),\n    convertedManagers = _map(convertUsers(managers, 'manager', userTypes), (manager) => {\n      return _assign({ titles: [ 'Manager' ] }, manager);\n    }),\n    convertedDirectors = _map(convertUsers(directors, 'director', userTypes), (director) => {\n      const titles = director.title ? director.title.split(',') : [ 'Director' ];\n      return _assign({ titles }, director);\n    }),\n    convertedOfficers = _map(convertUsers(officers, 'officer', userTypes), (officer) => {\n      const titles = officer.title.split(',');\n      return _assign({ titles }, officer);\n    }),\n    users = [];\n\n  if (type === 'CORP') {\n    users.push(...convertedDirectors, ...convertedOfficers);\n  } else if (managerType === 'AllOwners') {\n    users.push(...convertedMembers);\n  } else {\n    users.push(..._filter(convertedMembers, (member) => {\n      return member.manager;\n    }));\n    users.push(...convertedManagers);\n  }\n\n  const principals = _filter(_cloneDeep(users), (p) => {\n    return !p.companyName;\n  });\n\n  _forEach(principals, (p, index) => {\n    p.index = index;\n    if (authorizedSignatory && p.selected) {\n      p.authSigTitle = authorizedSignatory.title;\n    }\n  });\n  return principals;\n};\n/* eslint-enable max-statements */\n","import _get from 'lodash/get';\n\nimport env from '../config';\nimport { getAccountUUID, getUserUUID } from './AuthService';\nimport { getPlanLevel } from './PlanService';\nimport { getCookie } from './CookieUtils';\nimport { getEntryPointGroup } from './PartnerUtils';\n\nimport {\n  setRudderStackConfig,\n  initClickstream,\n  trackEvent as clickstreamTrackEvent,\n  trackPage as clickstreamTrackPage,\n  identifyUser\n} from './clickstreamDestination';\n\nimport { URLS as COMPANY_URLS } from '../constants/companies';\nimport { getIsFreeAccount } from './FreeAccountUtils';\nimport WebView from './WebViewUtils';\nimport { getSardineConfig } from './SardineService';\n\nconst\n  thirdPartyTrackingCSS = 'color: #4984FA',\n  debugCookieEnabled = getCookie('zbdebug') === 'woof',\n  debugLoggingEnabled = () => {\n    return env.client.debugLogging || debugCookieEnabled;\n  };\n\nlet googleads = { enabled: false },\n  zenbusinessEnv = 'local',\n  release = {},\n  visitUUID = null,\n  selectedPlan = null,\n  accountUUID = null,\n  userUUID = null;\n\n/**\n * Normalize page URI to prevent UUID from making URI too unique for analytics.\n * NOTE: This check is duplicated in the GA loading script in index.ejs.\n *\n * @param {String} page relative URI path\n * @returns page or /company page URL with UUID replaced by `$uuid` if exists\n */\nexport const normalizePage = (page) => {\n  // React router can leave off the leading slash, add it back for consistency in analytics.\n  const pageViewed = page.indexOf('/') !== 0 ? `/${page}` : page;\n\n  // Remove identifiers from company urls for analytics\n  if (pageViewed.indexOf(`/${COMPANY_URLS.BASE}/`) === 0) {\n    // Replace any UUID found with a non-unique 'uuid'\n    return pageViewed.replace(/[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}/g, '$uuid');\n  }\n  return pageViewed;\n};\n\n/**\n * Set RudderStack API info from initialization data\n */\nexport const setRudderStackApiInfo = (initData) => {\n  setRudderStackConfig(initData);\n};\n\n/**\n * Initialize Clickstream (replaces Avo/RudderStack setup)\n */\nexport const initAvoRudderstack = () => {\n  initClickstream();\n};\n\n/**\n * Identify the current user\n */\nexport const identify = () => {\n  const userId = userUUID || visitUUID;\n  if (userId) {\n    identifyUser(userId);\n  }\n};\n\nexport const setVisitor = (visitorData) => {\n  if (!visitorData) return;\n\n  visitUUID = visitorData.visitUUID || null;\n  zenbusinessEnv = visitorData.zenbusinessEnv || 'local';\n  release = visitorData.release || {};\n  accountUUID = getAccountUUID() || '';\n  userUUID = getUserUUID() || '';\n};\n\n/**\n * Utility method to log statements for debugging purposes in tracking\n * @param {string} label - label to start the log panel with\n * @param {string[] | object[]} entriesToLog - array of entries that will be iterated over & logged within the group\n */\nexport const logIfDebugLoggingEnabled = (label, entriesToLog) => {\n  if (debugLoggingEnabled()) {\n    console.groupCollapsed(`%c ${label}`, thirdPartyTrackingCSS);\n    entriesToLog.forEach((e) => { console.log(e); } );\n    console.groupEnd();\n  }\n};\n\nexport const buildEventsData = (localData) => {\n  const globalData = {\n    visitUUID,\n    ...(accountUUID ? { accountUUID } : {}),\n    zenbusinessEnv,\n    release\n  };\n\n  if (selectedPlan && selectedPlan !== 'free') {\n    globalData['selected plan'] = selectedPlan;\n    globalData['plan period'] = 'annual';\n  }\n  const data = Object.assign({}, globalData, localData);\n\n  const fixedRelease = typeof data.release === 'object'\n    ? Object.values(data.release).join('.')\n    : data.release;\n\n  const fixedInputValue =\n    typeof data.inputValue === 'boolean'\n      ? data.inputValue.toString()\n      : data.inputValue;\n\n  const fixedTestingIdVariant =\n    Array.isArray(data.testing_id_variant)\n      ? data.testing_id_variant.join(',')\n      : data.testing_id_variant;\n\n  data.release = fixedRelease;\n  data.inputValue = fixedInputValue;\n  data.testing_id_variant = fixedTestingIdVariant;\n\n  // Normalize page URL if exists\n  if (data.url) {\n    const normalizedUrl = normalizePage(data.url);\n    if (normalizedUrl !== data.url) {\n      data.originalUrl = data.url;\n      data.url = normalizedUrl;\n    }\n  }\n\n  return data;\n};\n\n/**\n * Adjust unique URLs to be non-unique and thus easily aggregatable.\n * E.g. There have been 1337 visits to `/d/company/$uuid/domains`.\n * @param {string} pathname\n * @returns {string} pathname without any customer/business unique identifiers\n */\nconst standardizePathname = (pathname) => {\n  // React router can leave off the leading slash, add it back for consistency in analytics.\n  const pageViewed = pathname.indexOf('/') !== 0 ? `/${pathname}` : pathname;\n\n  // Remove identifiers from company urls for analytics\n  // Replace any UUID found with a non-unique 'uuid'\n  return pageViewed.replace(/[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}/g, '$uuid');\n};\n\nexport const trackEventMap = {\n  true: 'yes',\n  false: 'no'\n};\n\nexport const mixpanelTrackPlans = (message, planId) => {\n  selectedPlan = planId || 'free';\n};\n\nexport const setMixpanelSelectedPlan = (planLevel) => {\n  const plan = getPlanLevel(planLevel, '') || { id: 'free' };\n\n  selectedPlan = plan.id;\n};\n\nexport const initializeGoogleAds = (envAds) => {\n  googleads = _get(envAds, 'googleads', {});\n};\n\nexport const loadGoogleAds = () => {\n  const { enabled = false } = googleads;\n\n  if (enabled) {\n    const script = document.createElement('script');\n    script.src = 'https://www.googleadservices.com/pagead/conversion.js';\n    script.async = true;\n    document.body.appendChild(script);\n  }\n\n  if (debugLoggingEnabled()) {\n    console.log('%c GOOGLE ADS - load them if enabled', thirdPartyTrackingCSS);\n  }\n};\n\n\n/**\n * Loads the Sardine tracking script and initializes the Sardine context.\n * @param {Object} args - The arguments for loading Sardine.\n * @param {string} args.flow - The flow identifier.\n * @param {string} args.accountUuid - The account UUID.\n * @param {string} args.orderUuid - The order UUID.\n */\nexport const loadSardine = (args) => {\n  if (window.sardineContext) {\n    if (debugLoggingEnabled()) {\n      console.log('%c Sardine context is already set up', thirdPartyTrackingCSS);\n    }\n    return;\n  }\n  const sardineConfig = getSardineConfig();\n  const { ldFlag } = args;\n  if (!ldFlag) {\n    if (debugLoggingEnabled()) {\n      console.log('%c Sardine is not enabled', thirdPartyTrackingCSS);\n    }\n    return;\n  }\n  const { flow, accountUuid, orderUuid } = args;\n\n  if (!accountUuid || !orderUuid) {\n    return;\n  }\n\n  const script = document.createElement('script');\n  script.src = `${sardineConfig.host}/assets/loader.min.js`;\n  script.async = true;\n  script.type = 'text/javascript';\n  script.onload = () => {\n    window.sardineContext = window._Sardine.createContext({\n      clientId: sardineConfig.clientId,\n      sessionKey:orderUuid,  // order_uuid\n      userIdHash: accountUuid, // account_uuid\n      flow,\n      environment: sardineConfig.env,\n      parentElement: document.body\n    });\n  };\n  document.body.appendChild(script);\n};\n\n/**\n * Track views changes\n * - Initial load supported by script loading.\n * - Subsquent load is handled by the lines below.\n *\n * @param {String} page\n */\nexport const trackView = (location, pageDetails, { ignoreMixpanel = false } = {}) => {\n  const { pathname } = location;\n\n  // Handle Mixpanel\n  if (!ignoreMixpanel) {\n    const localData = { // without Google Analytics Experiment data\n      url: standardizePathname(pathname),\n      deviceType: window.zenIsMobile ? 'mobile' : 'desktop',\n      ...pageDetails\n    };\n\n    const dataToSend = buildEventsData(localData);\n\n    // Use clickstream page tracking\n    clickstreamTrackPage(dataToSend.customDestinationPageName_ || dataToSend.pageType || pathname, {\n      experimentVariation: dataToSend.experimentVariation || '',\n      experimentFlagKey: dataToSend.experimentFlagKey || '',\n      experimentSlug: dataToSend.experimentSlug || '',\n      pageSlug: dataToSend.pageSlug || '',\n      pageCategory: dataToSend.pageCategory || 'wordpress-page',\n      pageSection: dataToSend.pageSection || 'unknown',\n      canonicalPath: dataToSend.url || '',\n      initialReferrer: dataToSend.initialReferrer || '',\n      initialReferringDomain: dataToSend.initialReferringDomain || '',\n      pageType: dataToSend.pageType || '',\n      pageTitle: dataToSend.pageTitle || '',\n      title: dataToSend.title || '',\n      name: dataToSend.name || '',\n      modalName: dataToSend.modalName || ''\n    });\n  }\n};\n\nexport const getClickDetails = (clickText, value, clickType) => {\n  return {\n    clickType,\n    inputValue: value || '',\n    clickText\n  };\n};\n\nexport const getButtonClickDetails = (clickText, value) => {\n  return getClickDetails(clickText, value, 'button');\n};\n\nexport const getDropdownClickDetails = (clickText, value) => {\n  return getClickDetails(clickText, value, 'dropdown');\n};\n\nexport const getArrowClickDetails = (clickText, value) => {\n  return getClickDetails(clickText, value, 'arrow');\n};\n\nexport const trackClick = (pageDetails, clickEventDetails, { ignoreMixpanel = false } = {}) => {\n  const { pathname } = window.location;\n\n  // Handle Mixpanel\n  if (!ignoreMixpanel) {\n    const localData = { // without Google Analytics Experiment data\n      clickUrl: pathname,\n      ...pageDetails,\n      ...clickEventDetails,\n      deviceType: window.zenIsMobile ? 'mobile' : 'desktop'\n    };\n\n    const dataToSend = buildEventsData(localData);\n\n    // Use clickstream event tracking for button pressed\n    clickstreamTrackEvent('buttonPressed', {\n      elementText: dataToSend.clickText || '',\n      elementName: dataToSend.elementName || '',\n      elementAsset: dataToSend.clickType || '',\n      elementStyle: dataToSend.elementStyle || 'primary',\n      elementPosition: dataToSend.elementPosition || '',\n      elementValue: dataToSend.inputValue || '',\n      screenName: dataToSend.pageType || '',\n      pageSlug: dataToSend.pageSlug || '',\n      pageCategory: dataToSend.pageCategory || 'wordpress-page',\n      pageSection: dataToSend.pageSection || 'unknown',\n      buttonFunction: dataToSend.buttonFunction || null,\n      pageTitle: dataToSend.pageTitle || '',\n      component: dataToSend.component || null,\n      title: dataToSend.pageTitle || '',\n      pageType: dataToSend.pageType || '',\n      name: dataToSend.name || '',\n      modalName: dataToSend.modalName || ''\n    });\n  }\n};\n\nexport const rudderstackTrack = (message, localData = {}) => {\n  const dataToSend = buildEventsData(localData);\n\n  clickstreamTrackPage(dataToSend.customDestinationPageName_ || message, {\n    experimentVariation: dataToSend.experimentVariation || '',\n    experimentFlagKey: dataToSend.experimentFlagKey || '',\n    experimentSlug: dataToSend.experimentSlug || '',\n    pageSlug: dataToSend.pageSlug || '',\n    pageCategory: dataToSend.pageCategory || 'wordpress-page',\n    pageSection: dataToSend.pageSection || 'unknown',\n    canonicalPath: dataToSend.url || ''\n  });\n};\n\nexport const purchasedCompleted = (localData = {}) => {\n  const dataToSend = buildEventsData(localData);\n\n  const products = [{\n    ecommProductUuid: dataToSend.ecommProductUuid || '',\n    ecommProductSku: dataToSend.ecommProducts ? dataToSend.ecommProducts[0].ecommProductSku : '',\n    ecommProductName: dataToSend.product || '',\n    ecommProductPrice: dataToSend.totalPrice ? dataToSend.totalPrice : 0,\n    ecommProductQuantity: 1,\n    productPriceOrFee: dataToSend.ecommProducts ? dataToSend.ecommProducts[0].productPriceOrFee : 'price',\n    productInterval: dataToSend.productInterval || '',\n    productRenewal: dataToSend.productRenewal || '',\n    couponPrice: dataToSend.couponPrice || 0,\n    ecommProductCategory: dataToSend.ecommProductCategory || ''\n  }];\n\n  // Use clickstream event tracking for order completed\n  clickstreamTrackEvent('orderCompleted', {\n    ecommProducts: products,\n    ecommOrderUuid: dataToSend.ecommOrderUuid || '',\n    ecommDiscount: dataToSend.ecommDiscount || 0,\n    ecommRevenue: dataToSend.ecommRevenue || 0,\n    ecommCurrencyCode: 'USD',\n    funnelAffiliate: dataToSend.funnelAffiliate || '',\n    funnelFlow: dataToSend.funnelFlow || '',\n    funnelVariation: dataToSend.funnelVariation || '',\n    funnelVersion: dataToSend.funnelVersion || '',\n    funnelSegment: dataToSend.funnelSegment || '',\n    experimentVariation: dataToSend.experimentVariation || '',\n    experimentFlagKey: dataToSend.experimentFlagKey || '',\n    experimentSlug: dataToSend.experimentSlug || ''\n  });\n};\n\n/**\n * Track events\n *\n * @param {String} eventCategory\n * @param {String} eventAction\n * @param {String} eventLabel\n * @param {Number} eventValue\n */\nexport const trackEvent = (eventCategory, eventAction, eventLabel, eventValue, additionalData = {}) => {\n  // Handle Mixpanel\n  if (eventCategory.toLowerCase() === 'purchase') {\n    const dataToSend = { // without Google Analytics Experiment data\n      status: eventAction,\n      product: eventLabel,\n      totalPrice: eventValue,\n      ...additionalData\n    };\n    purchasedCompleted(dataToSend);\n  }\n};\n\nexport const getPhoneDetails = (url, details) => {\n  const base = url.split('/')[2];\n  return base === 'registration-new' ? details : { pageTitle: base, pageType: 'checkout - post-purchase', activeFlow: `r/${base}` };\n};\n\nexport const getOrderTracking = (purchaseSource) => {\n  const isFreeAccount = getIsFreeAccount();\n  const isWebView = WebView.isWebView;\n  let ps = purchaseSource;\n  if (isFreeAccount) {\n    ps = 'free_account';\n  } else if (isWebView) {\n    ps = 'app_products_suite';\n  }\n  const testID = '';\n  const entryPoint = getEntryPointGroup() || 'zb';\n  const orderTracking = {\n    flow_name: entryPoint.toLowerCase(),\n    device_type: window.zenIsMobile ? window.mobileDeviceType : 'desktop',\n    purchase_source: ps,\n    /*\n      TODO\n      external_referral: '',\n    */\n    testID\n  };\n  return orderTracking;\n};\n\nexport const createAdditionalData = (product, price, id = '', quantity = 1, productPriceOrFee = 'price') => {\n  return {\n    ecommProducts: [\n      {\n        ecommProductSku: product,\n        ecommProductName: product,\n        ecommProductQuantity: quantity,\n        ecommProductPrice: price,\n        productPriceOrFee\n      }\n    ],\n    ecommOrderUuid: id || '',\n    ecommRevenue: price\n  };\n};\n","\n// Plans\n/**\n * @param {Object} plan\n * @returns related_plan_option object from plan\n */\nconst getRelatedPlanOption = (plan) => { return plan.related_plan_option; };\n\n/**\n * @param {Object} plan\n * @returns related_plan_pricing object from plan\n */\nconst getRelatedPlanPricing = (plan) => { return getRelatedPlanOption(plan).related_plan_pricing; };\n\n/**\n * @param {Object} plan\n * @param {String} infoKey\n * @returns value at infokey\n */\nconst getPlanPricingDetails = (plan, infoKey) => { return getRelatedPlanPricing(plan)[infoKey]; };\n\n/**\n * @param {Object} plan\n * @param {String} infoKey\n * @returns value at infokey\n */\nconst getPlanOptionDetails = (plan, infoKey) => { return getRelatedPlanOption(plan)[infoKey]; };\n\n/**\n * @param {Object} plan\n * @returns Array - the array containing all addOns associated with plan\n */\nconst getAddOnServicesForPlan = (plan) => { return getPlanOptionDetails(plan, 'addons'); };\n\n/**\n * @param {Array} allAddOnServices\n * @param {String} service\n * @returns Object - addon service object\n */\nconst getAddOnService = (allAddOnServices, service) => { return allAddOnServices.find((addon) => { return addon.service === service; }); };\n\n/**\n * @param {Object} plan\n * @returns String - coupon uuid or null if none\n */\nconst getCouponUUIDForPlan = (plan) => { return getPlanPricingDetails(plan, 'coupon'); };\n\n/**\n * @param {Object} plan\n * @param {String} service\n * @returns String - coupon uuid or null if none\n */\nconst getCouponUUIDForAddOnService = (plan, service) => { return getAddOnService(getAddOnServicesForPlan(plan), service).coupon; };\n\n/**\n * @param {Object} coupons from pricing namespace\n * @param {String} uuid of coupon\n * @returns Object - the coupon object\n */\nconst getCouponByUUID = (coupons, uuid) => { return coupons[uuid]; };\n\n/**\n * @param {Object} plan\n * @param {Object} coupons\n * @returns Object - the coupon (if any) for plan\n */\nconst getCouponForPlan = (plan, coupons) => {\n  const coupon = getCouponUUIDForPlan(plan),\n    couponUUID = coupon ? coupon.coupon_uuid : null;\n\n  return couponUUID ? getCouponByUUID(coupons, couponUUID) : null;\n};\n\n/**\n * @param {Object} plan\n * @param {Object} coupons\n * @param {String} service\n * @returns Object - representing the coupon associated with the addon service\n */\nconst getCouponForAddOnService = (plan, coupons, service) => {\n  const couponUUID = getCouponUUIDForAddOnService(plan, service);\n  return getCouponByUUID(coupons, couponUUID);\n};\n\n/**\n * @param {Object} plan\n * @returns Number\n * not all plans have valid coupons, this returns a number 0 representing no coupon if none available for plan\n */\nconst getCouponAmountForPlan = (plan, coupons) => { return (getCouponForPlan(plan, coupons) || {}).amount || 0; };\n\n/**\n * @param {Object} plan\n * @returns Number\n * not all addOn services have valid coupons, this returns a number 0 representing no coupon if none available for the service\n */\nconst getCouponAmountForAddOnService = (plan, coupons, service) => { return (getCouponForAddOnService(plan, coupons, service) || {}).amount || 0; };\n\n/**\n * @param {Object} plan\n * @returns Number representing the price of the plan\n */\nconst getPriceForPlan = (plan) => { return getPlanPricingDetails(plan, 'amount'); };\n\n/**\n * @param {Object} plan - raw plan object from pricing.plans\n * @param {String} service - service key on addon service object\n * @returns Number representing the price of the addon for the plan\n */\nconst getPriceForAddOnService = (plan, service) => {\n  const addOns = getAddOnServicesForPlan(plan);\n  return getAddOnService(addOns, service).amount;\n};\n\n/**\n * @param {Object} plan\n * @returns Number - calculated price for a plan minus any coupons available\n */\nconst getDiscountedPriceForPlan = (plan, coupons) => {\n  return getPriceForPlan(plan) - getCouponAmountForPlan(plan, coupons);\n};\n\n/**\n * @param {Object} plan\n * @param {String} service\n * @returns Number - calculated price for addon service minus any coupons available\n */\nconst getDiscountedPriceForAddOnService = (plan, coupons, service) => {\n  return getPriceForAddOnService(plan, service) - getCouponAmountForAddOnService(plan, coupons, service);\n};\n\n/**\n * @param {Object} plan\n * @returns String - the related affiliate pricing uuid for the plan object\n */\nconst getAffiliatePricingUUIDForPlan = (plan) => { return plan.uuid; };\n\nexport default {\n  getPlanPricingDetails,\n  getAffiliatePricingUUIDForPlan,\n  getDiscountedPriceForAddOnService,\n  getDiscountedPriceForPlan,\n  getPriceForAddOnService,\n  getPriceForPlan,\n  getCouponAmountForAddOnService,\n  getCouponAmountForPlan,\n  getCouponForAddOnService,\n  getCouponForPlan,\n  getAddOnServicesForPlan\n};\n","/**\n * @param {Object} StandaloneServices from pricing.standaloneServices\n * @returns Service Object\n */\nconst getStandaloneService = (standaloneServices, service) => {\n  return standaloneServices[service];\n};\n\n/**\n * @param {Object} standaloneService\n * @returns related_service_pricing object for service\n */\nconst getPricingDetailsForService = (standaloneService, infoKey) => {\n  return standaloneService?.related_service_pricing[infoKey];\n};\n\n/**\n * @param {Object} standaloneServices\n * @param {String} service\n * @returns Number representing the price of the service\n */\nconst getPriceForStandaloneService = (standaloneServices, service) => {\n  return getPricingDetailsForService(getStandaloneService(standaloneServices, service), 'amount');\n};\n\n/**\n *\n * @param {Object} standaloneServices\n * @param {String} service\n * @returns String - the coupon uuid for the service\n */\nconst getCouponUUIDForStandaloneService = (standaloneServices, service) => {\n  return getPricingDetailsForService(getStandaloneService(standaloneServices, service), 'coupon');\n};\n\n/**\n * @param {Object} standaloneServices\n * @param {object} coupons\n * @param {String} service\n * @returns Object - the coupon object associated with the service\n */\nconst getCouponForStandaloneService = (standaloneServices, coupons, service) => {\n  return coupons[getCouponUUIDForStandaloneService(standaloneServices, service)];\n};\n\n/**\n * @param {Object} standaloneServices\n * @param {Object} coupons\n * @param {String} service\n * @returns Number representing the amount of the coupon discount\n */\nconst getCouponAmountForStandaloneService = (standaloneServices, coupons, service) => {\n  return (getCouponForStandaloneService(standaloneServices, coupons, service) || {}).amount || 0;\n};\n\n/**\n *\n * @param {Object} standaloneServices\n * @param {Object} coupons\n * @param {String} service\n * @returns Number representing the final price minus the coupon discount\n */\nconst getDiscountedPriceForStandaloneService = (standaloneServices, coupons, service) => {\n  return getPriceForStandaloneService(standaloneServices, service) - getCouponAmountForStandaloneService(standaloneServices, coupons, service);\n};\n\nexport default {\n  getStandaloneService,\n  getPricingDetailsForService,\n  getDiscountedPriceForStandaloneService,\n  getCouponAmountForStandaloneService,\n  getCouponForStandaloneService,\n  getCouponUUIDForStandaloneService,\n  getPriceForStandaloneService\n};\n","import _get from 'lodash/get';\n\n/**\n *  NOTE: Not all services exist in this data currently\n * @param {Object} stateFees\n * @param {string} stateCode\n * @param {string} serviceName\n * @param {string} infoKey\n * @returns value @ info key or null;\n */\nconst getStateFeesDetails = (stateFees, stateCode, serviceName, infoKey) => {\n  return _get(stateFees, [stateCode, serviceName, infoKey], null);\n\n};\n\n/**\n *\n * @param {object} stateFees\n * @param {string} stateCode\n * @param {string} serviceName\n * @returns fee amount or null\n */\nconst getFeesForServiceByState = (stateFees, stateCode, serviceName) => {\n  return getStateFeesDetails(stateFees, stateCode, serviceName, 'fees');\n};\n\n/**\n *\n * @param {object} stateFees\n * @param {string} stateCode\n * @param {string} serviceName\n * @returns fee term or null\n */\nconst getFeesTermForServiceByState = (stateFees, stateCode, serviceName) => {\n  return getStateFeesDetails(stateFees, stateCode, serviceName, 'term');\n};\n\nexport default {\n  getFeesForServiceByState,\n  getFeesTermForServiceByState,\n  getStateFeesDetails\n};\n","/**\nUsage:\n  * utils in this folder are meant for abstracting away structural knowledge related to\n  * all data in the \"pricing\" namespace so that reading and calculating data for UI presentation is simple\n\nError Handling\n  * no error handling in these utils\n  * these utilities expect valid data objects in the initialize format\n  * all error handling should be implemented one layer above this in code invoking these utility functions\n  * where context is known, and appropriate handling can be implemented on a case-by-case basis\n\nNo Default Values\n  * Rely on api provided data\n  * DO NOT add or merge in hardcoded data or create fallbacks for these utilities\n  * IF data is missing OR inappropriately formatted we want these utilities to throw errors.\n  * the single exception so far to the no \"no default values\" rule is in regard to calculating a total price minus any coupon discounts,\n      when no coupon exists it is logical to use a zero for this calculation\n\nComposability\n  * the utils in this dir are meant to be composable abstractions for maximum reuse, if the needed utility is not\n    present, the convention will be to attempt to reuse as many abstractions already in place as possible for creating new ones\n */\nimport planUtils from './plans';\nimport standaloneServiceUtils from './standaloneServices';\nimport expediteFeesUtils from './expediteFees';\nimport stateFeesUtils from './stateFees';\n/**\n * NOTE: Regarding Packages\n *  - same object structure as plan objects\n *  - found under pricing.plans alongside standard plan levels\n *  - use plan utils for accessing data\n */\nexport default {\n  ...planUtils,\n  ...standaloneServiceUtils,\n  ...expediteFeesUtils,\n  ...stateFeesUtils\n};\n","const getExpediteFeeInfoByJurisdiction = (expediteFees, stateCode, expediteLevel, infoKey) => {\n  return expediteFees[stateCode][expediteLevel][infoKey];\n};\n\nexport default {\n  getExpediteFeeInfoByJurisdiction\n};\n","/* eslint-disable max-statements */\nimport axios from 'axios';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { loginAndGoToPage } from './AuthService';\n\nconst quickFormationData = require('./QuickFormationCreate.json');\n\nconst quickFormationDataClone = JSON.parse(JSON.stringify(quickFormationData));\n\n\n// TODO\n// GET DATA FROM UI AND STORE IT IN THE data variable as a simple object accessible through dot notation\n\nexport const quickOrderApi = (data) => {\n  // keep Date.now() consistent across all variables that may need it\n  const dateVar = Date.now();\n  // generate unique variables that will be used multiple times once here\n  const formationType = (data?.type || 'llc_formation');\n  const uniqueEmailAddress = (data?.email || quickFormationData.account.email);\n  const uniqueFirstName = (data?.first_name || `${quickFormationData.account.first_name}+${dateVar}`);\n  const uniqueLastName = (data?.last_name || `${quickFormationData.account.last_name}+${dateVar}`);\n  const uniqueEntityName = (data?.entity_name || `${quickFormationData.order.order_data.find((oData) => { return oData.service === formationType; }).entity_name}+${dateVar}`);\n  // formation type\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === 'llc_formation'; }).service = formationType;\n  quickFormationDataClone.order.order_items.find((oData) => { return oData.service === 'llc_formation'; }).service = formationType;\n  // account data\n  quickFormationDataClone.account.lead_uuid = uuidv4();\n  quickFormationDataClone.account.first_name = uniqueFirstName;\n  quickFormationDataClone.account.last_name = uniqueLastName;\n  quickFormationDataClone.account.email = uniqueEmailAddress;\n  quickFormationDataClone.account.password = data.password;\n  // order data\n  // llc_formation\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === formationType; }).entity_name = uniqueEntityName;\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === formationType; }).contact.email = uniqueEmailAddress;\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === formationType; }).contact.first_name = uniqueFirstName;\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === formationType; }).contact.last_name = uniqueLastName;\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === formationType; }).jurisdiction = data.jurisdiction;\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === formationType; }).domestic_jurisdiction = data.jurisdiction;\n  // operating_agreement\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === 'operating_agreement'; }).business_entity_name = uniqueEntityName;\n  // 1800_accountant\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === '1800_accountant'; }).acc_entity_name = uniqueEntityName;\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === '1800_accountant'; }).email = uniqueEmailAddress;\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === '1800_accountant'; }).acc_first_name = uniqueFirstName;\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === '1800_accountant'; }).acc_last_name = uniqueLastName;\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === '1800_accountant'; }).acc_entity_type = uniqueLastName;\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === '1800_accountant'; }).jurisdiction = data.jurisdiction;\n  //RA domestic jurisdiction\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === 'registered_agent_service'; }).domestic_jurisdiction = data.jurisdiction;\n  // ein domestic jurisdiction\n  quickFormationDataClone.order.order_data.find((oData) => { return oData.service === 'ein_creation'; }).domestic_jurisdiction = data.jurisdiction;\n  // order items\n  quickFormationDataClone.order.order_items.forEach((element) => {\n    if (element?.jurisdiction) {\n      element.jurisdiction = data.jurisdiction;\n    }\n  });\n  quickFormationDataClone.order.order_data.forEach((element) => {\n    if (element?.jurisdiction) {\n      element.jurisdiction = data.jurisdiction;\n    }\n  });\n  // registered agent yes/no\n  if (!data?.registered_agent) {\n    quickFormationDataClone.order.order_data = quickFormationDataClone.order.order_data.filter((services) => { return services.service !== 'registered_agent_service'; });\n    quickFormationDataClone.order.order_items = quickFormationDataClone.order.order_items.filter((services) => { return services.service !== 'registered_agent_service'; });\n  }\n  // ein_creation service yes/no\n  if (!data?.ein_creation) {\n    quickFormationDataClone.order.order_data = quickFormationDataClone.order.order_data.filter((services) => { return services.service !== 'ein_creation'; });\n    quickFormationDataClone.order.order_items = quickFormationDataClone.order.order_items.filter((services) => { return services.service !== 'ein_creation'; });\n  }\n  //online tools yes/no\n  if (!data?.online_tools) {\n    quickFormationDataClone.order.order_data = quickFormationDataClone.order.order_data.filter((services) => { return services.service !== 'basic_email'; });\n    quickFormationDataClone.order.order_items = quickFormationDataClone.order.order_items.filter((services) => { return services.service !== 'basic_email'; });\n    quickFormationDataClone.order.order_data = quickFormationDataClone.order.order_data.filter((services) => { return services.service !== 'domain_name_reg'; });\n    quickFormationDataClone.order.order_items = quickFormationDataClone.order.order_items.filter((services) => { return services.service !== 'domain_name_reg'; });\n    quickFormationDataClone.order.order_data = quickFormationDataClone.order.order_data.filter((services) => { return services.service !== 'domain_name_privacy'; });\n    quickFormationDataClone.order.order_items = quickFormationDataClone.order.order_items.filter((services) => { return services.service !== 'domain_name_privacy'; });\n    quickFormationDataClone.order.order_data = quickFormationDataClone.order.order_data.filter((services) => { return services.service !== 'static_website'; });\n    quickFormationDataClone.order.order_items = quickFormationDataClone.order.order_items.filter((services) => { return services.service !== 'static_website'; });\n    quickFormationDataClone.order.order_data = quickFormationDataClone.order.order_data.filter((services) => { return services.service !== 'website_tools_bundle'; });\n    quickFormationDataClone.order.order_items = quickFormationDataClone.order.order_items.filter((services) => { return services.service !== 'website_tools_bundle'; });\n  }\n  // corp specific changes\n  if (formationType === 'corp_formation') {\n    quickFormationDataClone.order.order_data.find((oData) => { return oData.service === formationType; }).completed_action = 'Complete Corp: Set Start Complete';\n    quickFormationDataClone.order.order_data.find((oData) => { return oData.service === formationType; }).completed_action_index = 5100;\n    quickFormationDataClone.order.order_data.find((oData) => { return oData.service === 'operating_agreement'; }).business_entity_name = uniqueEntityName;\n    quickFormationDataClone.order.order_data.find((oData) => { return oData.service === 'operating_agreement'; }).business_entity_type = 'CORP';\n    quickFormationDataClone.order.order_data.find((oData) => { return oData.service === 'operating_agreement'; }).entity_type = 'corp';\n    quickFormationDataClone.order.order_data.find((oData) => { return oData.service === '1800_accountant'; }).acc_entity_type = 'corp';\n  }\n\n  return quickFormationDataClone;\n};\n\nexport const quickOrder = async (qdata) => {\n  const currentEnvIsDev = window.location.hostname.includes('dev');\n  const currentHost = currentEnvIsDev ? 'https://www.dev.zenbusiness.com' : 'http://local.zenbusiness.com:8008';\n  const url = `${currentHost}/r/api/registration/create`;\n  const quickBody = quickOrderApi(qdata);\n  try {\n    await axios.post(url, quickBody);\n    await loginAndGoToPage('/dashboard/login');\n  } catch (e) {\n    console.log(e);\n  }\n};\n\nexport default { quickOrder, quickOrderApi };\n","function businessTypeToTarget(type) {\n  if (type === 'SOLE') {\n    return 'sole_prop';\n  }\n  if (type === 'S-CORP') {\n    return 'llc';\n  }\n  return type === 'LLCX' ? 'llc' : 'corp';\n}\n\nexport function generateSaleType(brand, target, itemPrice, modifier) {\n  if (!brand) {\n    throw new Error('Brand is required when generating saleType.');\n  }\n  if (!target) {\n    throw new Error(`Target is required for ${brand} when generating saleType.`);\n  }\n  let label = `${brand}-${target}`;\n  if (modifier) {\n    label = `${label}-${modifier}`;\n  }\n  label = `${label}-${itemPrice}`;\n  return label;\n}\n\nexport function generateSaleTypeByBusinessType(brand, type, itemPrice, modifier = '') {\n  if (!type) {\n    throw new Error(`Type is required for ${brand} when generating saleType.`);\n  }\n  return generateSaleType(brand, businessTypeToTarget(type), itemPrice, modifier);\n}\n\nexport function generateSaleTypeByBusinessTypeAndPlanLevel(brand, type, itemPrice, planLevel) {\n  let plan = 'free';\n  if (planLevel === 'level1') {\n    plan = 'starter';\n  } else if (planLevel === 'level2') {\n    plan = 'pro';\n  } else if (planLevel === 'level3') {\n    plan = 'premium';\n  }\n  return generateSaleType(brand, businessTypeToTarget(type), itemPrice, plan);\n}\n\nexport default {\n  generateSaleType,\n  generateSaleTypeByBusinessType,\n  generateSaleTypeByBusinessTypeAndPlanLevel\n};\n","/* eslint-disable max-statements */\n\nimport _assign from 'lodash/assign';\nimport { getUrlParams } from './UrlUtils';\nimport { getVisitUUID, reinitialize } from './VisitorCookie';\nimport { initializationService } from '../services';\nimport {\n  getPartner,\n  getEntryPointGroup,\n  processPartner,\n  setCampaignmedium,\n  resetPartnerStorage,\n  setCampaignName,\n  setCampaignSource,\n  setPartner\n} from './PartnerUtils';\nimport { setInitialization, initializeData } from '../actions/initialization';\nimport { reportError } from './ReportingUtils';\nimport { resetAllData as resetAllAccountData } from '../actions/register_account';\nimport { resetAllData } from '../actions/registration';\nimport { resetIsFreeAccount } from './FreeAccountUtils';\nimport { isLoggedIn, logout } from './AuthService';\n\nconst convertWebsiteUrl = (overrideFrom) => {\n  let href = overrideFrom || window.location.href;\n\n  if (href.indexOf('://') === -1) {\n    href = `://${href}`; // add :// if needed\n  }\n\n  let website = href.split('://')[1].split('?')[0]; // get rid of arguments\n\n  if (website.indexOf('www') === -1) {\n    website = `www.${website}`; // add www if needed\n  }\n\n  if (website.charAt(website.length - 1) === '/') {\n    website = website.substr(0, website.length - 1);\n  }\n  return website;\n};\n\nconst initialize = (dispatch, updateState = () => {}) => {\n  // Handle proxy usage of `/landing-init`.\n  // Due to iframe security, allow passing of `from` and `referrer` to populate visit.\n  const isProxyUsage = window.location.pathname === '/landing-init',\n    visitProcessed = window.localStorage\n      ? window.localStorage.getItem('visitProcessed') === 'true'\n      : false,\n    cachedUrl = window.localStorage ? window.localStorage.getItem('visitUrl') || '' : '';\n\n  let overrideFrom = null;\n  let overrideReferrer = null;\n  if (isProxyUsage) {\n    const overrideParams = getUrlParams(window.location.search);\n    overrideFrom = overrideParams.from;\n    overrideReferrer = overrideParams.referrer;\n  } else if (!visitProcessed && cachedUrl) {\n    overrideFrom = cachedUrl;\n    window.localStorage.removeItem('visitUrl');\n  }\n\n  const urlParams = getUrlParams(overrideFrom || window.location.href),\n    // cleanoutPath = document.location.pathname,\n    { zlscout = '' } = urlParams;\n\n  if (zlscout) {\n    resetPartnerStorage();\n    resetIsFreeAccount();\n    reinitialize();\n    resetAllData(dispatch);\n    resetAllAccountData(dispatch);\n    if (isLoggedIn()) {\n      logout();\n    } else if (zlscout) {\n      document.location.href = '/';\n    }\n  }\n\n  const visituuid = getVisitUUID(),\n    website = convertWebsiteUrl(overrideFrom),\n    landingUrl = overrideFrom || document.location.href,\n    {\n      partner = '',\n      plan_partner: entryPointGroup = '',\n      source = '',\n      utm_source: utmSource = '',\n      medium = '',\n      utm_medium: utmMedium = '',\n      campaignid: campaign = '',\n      utm_campaign: utmCampaign = '',\n      content = '',\n      utm_content: utmContent = '',\n      keyword = '',\n      utm_term: utmTerm = '',\n      CT = '',\n      mixpaneldistinctid: mixpanelId = '',\n      gclid = '',\n      msclkid = ''\n    } = urlParams,\n    campaignsource = utmSource || source,\n    campaignmedium = utmMedium || medium,\n    campaignname = utmCampaign || campaign,\n    affiliateId = campaignmedium === 'affiliate' ? campaignname : '',\n    bannerId = campaignmedium === 'affiliate' ? utmContent || content : '',\n    campaignterm = utmTerm || keyword,\n    campaigncontent = CT || utmContent || content,\n    mixpanelid = mixpanelId,\n    referrer = overrideReferrer || document.referrer,\n    visitData = {\n      setVisit: false,\n      partner: '',\n      visituuid,\n      website,\n      referrer,\n      landing_url: landingUrl,\n      campaignsource,\n      campaignmedium,\n      campaignname,\n      campaignterm,\n      campaigncontent,\n      mixpanelid,\n      affiliate_id: affiliateId,\n      banner_id: bannerId,\n      gclid,\n      msclkid\n    };\n\n  if (zlscout) {\n    resetAllData(dispatch);\n    resetAllAccountData(dispatch);\n    resetPartnerStorage();\n    resetIsFreeAccount();\n    if (isLoggedIn()) {\n      logout();\n    }\n  }\n  if (campaignmedium) {\n    setCampaignmedium(campaignmedium);\n  }\n  if (campaignsource) {\n    setCampaignSource(campaignsource);\n  }\n  if (campaignname) {\n    setCampaignName(campaignname);\n  }\n\n  // Add a comment to force a rebuild.\n  const forceNewVisit = processPartner(\n    document.referrer ? document.referrer.toLowerCase() : '',\n    partner,\n    entryPointGroup\n  );\n  // set the correct entry point when redirecting to pf flow or truic\n  if (landingUrl.includes('/registration-new/init') && !getPartner()) {\n    setPartner('pf', 'pf', 'pf');\n  }\n  if (landingUrl.includes('/registration-truic/') && !getPartner()) {\n    setPartner('TRUiC', 'TRUiC', 'TRUiC');\n  }\n\n  visitData.partner = getPartner();\n  visitData.plan_partner = getEntryPointGroup();\n  visitData.entry_point_group = getEntryPointGroup();\n  if (affiliateId) {\n    if (window.localStorage) {\n      window.localStorage.setItem('affiliateId', affiliateId);\n      window.localStorage.setItem('bannerId', bannerId);\n    }\n  }\n\n  if (!visitProcessed || forceNewVisit) {\n    if (!visituuid || forceNewVisit) {\n      // If no visituuid or forced, always call\n      _assign(visitData, { setVisit: true });\n    } else if (\n      campaignsource ||\n      campaignmedium ||\n      campaignname ||\n      campaignterm ||\n      campaigncontent ||\n      gclid\n    ) {\n      // use generated visitor id if coming in from ad\n      _assign(visitData, { setVisit: true });\n    }\n  }\n  initializationService.initialize(visitData)\n    .then((response) => {\n      setInitialization(dispatch, response);\n      initializeData(dispatch, response);\n      if (window.localStorage) {\n        window.localStorage.setItem('visitProcessed', 'true');\n      }\n    })\n    .catch((err) => {\n      reportError(err, {\n        severity: 'error',\n        metaData: { message: 'Unexpected error initializing pricing data from /initialize' }\n      });\n    }).finally(() => {\n      updateState(false);\n    });\n};\n\nexport default initialize;\n","import { ACTIONS as PROGRESS_BAR_ACTIONS } from '../constants/progress_bar';\n\nexport const initProgressBar = () => {\n  if (!window.zb) {\n    window.zb = {};\n  }\n\n  if (!window.zb.flow) {\n    window.zb.flow = {};\n  }\n};\n\nexport const resetProgressBar = () => {\n  initProgressBar();\n\n  window.zb.flow = { steps: [], active: '' };\n};\n\nexport const setGlobalProgressBar = (flow = [], current = '') => {\n  initProgressBar();\n\n  window.zb.flow = { steps: flow, active: current };\n};\n\nexport const setReducerProgressBar = (\n  dispatch,\n  progressBarData\n) => {\n  const {\n    flowOrder = [],\n    currentStep = '',\n    activeFlow = ''\n  } = progressBarData;\n  setGlobalProgressBar(flowOrder, currentStep);\n  const stepIndex = flowOrder.indexOf(currentStep);\n  dispatch({\n    type: PROGRESS_BAR_ACTIONS.SET_PROGRESS_BAR,\n    payload: {\n      steps: flowOrder,\n      currentStep: stepIndex < 0 ? 0 : stepIndex,\n      activeFlow\n    }\n  });\n};\n\nexport const resetReducerProgressBar = (dispatch) => {\n  resetProgressBar();\n  dispatch({\n    type: PROGRESS_BAR_ACTIONS.RESET_PROGRESS_BAR\n  });\n};\n","function getTaxPriorYear(dateTime) {\n  const oct15CurrentYear = new Date(`${dateTime.getFullYear()}-10-15T00:00:00Z`);\n  const apr15CurrentYear = new Date(`${dateTime.getFullYear()}-04-15T23:59:59Z`);\n\n  // If the current date is between January 1 and April 15 of the current year\n  // then the prior year is the previous year\n  if (dateTime <= apr15CurrentYear) {\n    return dateTime.getFullYear() - 1;\n  }\n  // If the current date is between October 15 and December 31 of the current year\n  // then the prior year is the current year\n  if (dateTime >= oct15CurrentYear) {\n    return dateTime.getFullYear();\n  }\n\n  // If the current date is between April 16 and October 14 of the current year\n  // then we're out of tax season\n  return null;\n}\n\nexport default getTaxPriorYear;\n","import _assign from 'lodash/assign';\n\nimport { validate as validateUuid } from 'uuid';\nimport { getCookie } from './CookieUtils';\nimport { setVisitor as setThirdPartyVisitor } from './ThirdPartyTracking';\nimport { identifyUser } from './ReportingUtils';\n\nlet\n  visitorData = {\n    zenbusinessEnv: 'local',\n    visitUUID: ''\n  };\nlet initializationVisitUUID = '';\nconst\n  storage = window.localStorage,\n  storageKey = 'initialization/visitor',\n  visitUUIDStorageKey = 'visitUUID',\n  expireMs = 1000 * 24 * 60 * 60 * 1000, // 1000 days\n  setThirdParty = (requestData) => {\n    const { visitUUID, inviteeCode } = visitorData;\n    identifyUser({\n      id: visitUUID,\n      invitee_code: inviteeCode || ''\n    });\n    setThirdPartyVisitor(visitorData, requestData);\n  },\n\n  getFromCookie = () => {\n    const cookie = getCookie('VISITOR_ID'),\n      parts = cookie ? cookie.split('|') : [];\n\n    let visitUUID = '';\n\n    if (parts.length > 0) {\n      visitUUID = parts[0];\n    }\n    _assign(visitorData, {\n      visitUUID\n    });\n  },\n\n  initialize = () => {\n    if (!storage) {\n      getFromCookie();\n      setThirdParty();\n      return;\n    }\n    const stringData = storage.getItem(storageKey) || '{}';\n    try {\n      visitorData = JSON.parse(stringData);\n      setThirdParty();\n    } catch (e) {\n      console.error(e);\n    }\n\n    if (!visitorData) {\n      visitorData = {};\n    }\n    if (!visitorData.visitUUID) {\n      visitorData.visitUUID = storage.getItem(visitUUIDStorageKey) || '';\n    }\n    setThirdParty();\n  };\n\ninitialize();\n\nexport const getVisitUUID = () => {\n  const visitUuid = visitorData.visitUUID || initializationVisitUUID;\n  if (validateUuid(visitUuid)) {\n    return visitUuid;\n  }\n  return null;\n};\n\nexport const setVisitor = (data, requestData) => {\n  const { visit_uuid: visituuid, zenbusinessEnv, release } = data;\n  initializationVisitUUID = visituuid;\n  visitorData.zenbusinessEnv = zenbusinessEnv;\n  visitorData.release = release;\n  if (visituuid !== undefined && visituuid !== visitorData.visitUUID) {\n    visitorData.visitUUID = visituuid;\n  }\n  setThirdParty(requestData);\n  if (!storage) {\n    const payload = `${visituuid}`,\n      date = new Date(),\n      expDate = new Date(date.getTime() + expireMs),\n      expires = `expires=${expDate.toUTCString()}`;\n\n    document.cookie = `VISITOR_ID=${encodeURIComponent(payload)}; path=/; ${expires}`;\n  } else {\n    storage.setItem(storageKey, JSON.stringify(visitorData));\n    storage.setItem(visitUUIDStorageKey, visitorData.visitUUID || '');\n  }\n};\n\nexport const reinitialize = () => {\n  initialize();\n};\n","import _assign from 'lodash/assign';\n\nconst storage = window.localStorage;\nconst maxTime = 60000 * 60 * 24 * 30;\n\nexport const storeReducer = (key, data) => {\n  if (!storage) {\n    return;\n  }\n  storage.setItem(key, JSON.stringify(data));\n};\n\nexport const initializeReducer = (key, initialData, invalidateDate, invalidateInterval) => {\n  if (!storage) {\n    return initialData;\n  }\n  const timeKey = `${key}-time`,\n    timeData = storage.getItem(timeKey),\n    now = new Date().getTime();\n\n  if (timeData) {\n    try {\n      const createTime = parseInt(timeData, 10),\n        interval = now - createTime;\n\n      if (interval > maxTime\n        || (invalidateDate && invalidateDate > createTime)\n        || (invalidateInterval && (interval > invalidateInterval))) {\n        storeReducer(key, initialData);\n        storage.setItem(timeKey, `${now}`);\n        return initialData;\n      }\n    } catch (e) {\n      storage.setItem(timeKey, `${now}`);\n    }\n  }\n\n  const stringData = storage.getItem(key);\n  if (!stringData) {\n    storeReducer(key, initialData);\n    storage.setItem(timeKey, `${now}`);\n    return initialData;\n  }\n  try {\n    return _assign({}, initialData, JSON.parse(stringData));\n  } catch (e) {\n    storeReducer(key, initialData);\n    return initialData;\n  }\n};\n\nexport const clearReducer = (key) => {\n  if (storage) {\n    storage.removeItem(key);\n    storage.removeItem(`${key}-time`);\n  }\n};\n\nexport const getReducerSnapshot = (key, defaultVal) => {\n  if (storage) {\n    try {\n      const stringData = storage.getItem(key);\n      if (stringData) {\n        return JSON.parse(stringData);\n      }\n    } catch (e) { // eslint-disable-line\n    }\n  }\n  return defaultVal;\n};\n\nexport const getEmailAddress = () => {\n  const key = 'registration/contact';\n  if (storage) {\n    try {\n      const stringData = storage.getItem(key);\n      if (stringData) {\n        return JSON.parse(stringData).email;\n      }\n    } catch (e) { // eslint-disable-line\n    }\n  }\n  return 'null';\n};\n\nexport const storeLocalReducer = (key, data) => {\n  if (!storage) {\n    return;\n  }\n  storage.setItem(key, JSON.stringify(data));\n};\n\nexport const initializeLocalReducer = (key, initialData) => {\n  if (!storage) {\n    return initialData;\n  }\n  const stringData = storage.getItem(key);\n  if (!stringData) {\n    storeLocalReducer(key, initialData);\n    return initialData;\n  }\n  try {\n    return JSON.parse(stringData);\n  } catch (e) {\n    storeLocalReducer(key, initialData);\n    return initialData;\n  }\n};\n\nexport const clearLocalReducer = (key) => {\n  if (storage) {\n    storage.removeItem(key);\n  }\n};\n\nexport default {\n  initialize: initializeReducer,\n  store: storeReducer,\n  clear: clearReducer,\n  initializeLocal: initializeLocalReducer,\n  storeLocal: storeLocalReducer,\n  clearLocal: clearLocalReducer\n};\n","let\n  flows = {\n    complete_cora: 'default',\n    complete_corp: 'default',\n    complete_ein: 'default',\n    complete_llc: 'default',\n    complete_wfg: 'default',\n    complete_nypub: 'default',\n    register_accounting: 'default',\n    register_amendment: 'default',\n    register_cora: 'default',\n    register_domain_v2: 'default',\n    register_email_v2: 'default',\n    register_ein: 'default',\n    register_goodstanding: 'default',\n    register_logokit: 'default',\n    register_nameres: 'default',\n    register_nypub: 'default',\n    register_smb_website: 'default',\n    register_smb_website_ecomm: 'default',\n    register_wfg: 'default',\n    register_business_kit: 'default',\n    register_bof: 'default',\n    register_bof_modification: 'default',\n    register_stock_setup: 'default',\n    registration: 'default',\n    business_name_generator: 'default',\n    register_vanity: 'default'\n  };\n\nexport const setFlows = (data) => {\n  const { flows: initFlows = null } = data;\n\n  if (initFlows) {\n    flows = initFlows;\n  }\n};\n\n\nexport const getCompleteCoRAFlowId = () => {\n  return flows.complete_cora || 'default';\n};\n\nexport const getCompleteCorpFlowId = () => {\n  return flows.complete_corp || 'default';\n};\n\nexport const getCompleteEINFlowId = () => {\n  return flows.complete_ein || 'default';\n};\n\nexport const getCompleteLLCFlowId = () => {\n  return flows.complete_llc || 'default';\n};\n\nexport const getCompleteNYPubFlowId = () => {\n  return flows.complete_nypub || 'default';\n};\n\nexport const getCompleteWFGFlowId = () => {\n  return flows.complete_wfg || 'default';\n};\n\nexport const getRegisterAccountingFlowId = () => {\n  return flows.register_accounting || 'default';\n};\n\nexport const getRegisterAmendmentFlowId = () => {\n  return flows.register_amendment || 'default';\n};\n\nexport const getRegisterCoRAFlowId = () => {\n  return flows.register_cora || 'default';\n};\n\nexport const getRegisterDomainV2Id = () => {\n  return flows.register_domain_v2 || 'default';\n};\n\nexport const getRegisterEmailV2Id = () => {\n  return flows.register_email_v2 || 'default';\n};\n\nexport const getRegisterEINFlowId = () => {\n  return flows.register_ein || 'default';\n};\n\nexport const getRegisterGSFlowId = () => {\n  return flows.register_goodstanding || 'default';\n};\n\nexport const getRegisterLogoKitFlowId = () => {\n  return flows.register_logokit || 'default';\n};\n\nexport const getRegisterNameresFlowId = () => {\n  return flows.register_nameres || 'default';\n};\n\nexport const getRegisterNYPubFlowId = () => {\n  return flows.register_nypub || 'default';\n};\n\nexport const getRegisterSMBWebsiteEcommFlowId = () => {\n  return flows.register_smb_website_ecomm || 'default';\n};\n\nexport const getRegisterSMBEcommAddonFlowId = () => {\n  return flows.register_smb_ecomm_addon || 'default';\n};\n\nexport const getRegisterSMBWebsiteOrEcommFlowId = () => {\n  return flows.register_smb_website_or_ecomm || 'default';\n};\n\nexport const getRegisterSMBWebsiteFlowId = () => {\n  return flows.register_smb_website || 'default';\n};\n\nexport const getRegisterWFGFlowId = () => {\n  return flows.register_wfg || 'default';\n};\n\nexport const getRegistrationFlowId = () => {\n  return flows.registration || 'default';\n};\n\nexport const getRegisterBusinessKitFlowId = () => {\n  return flows.register_business_kit || 'default';\n};\n\nexport const getBusinessNameGeneratorFlowId = () => {\n  return flows.business_name_generator || 'default';\n};\n\nexport const getRegisterVanityProductFlowId = () => {\n  return flows.register_vanity || 'default';\n};\n\nexport const getRegisterStockSetupFlowId = () => {\n  return flows.register_stock_setup || 'default';\n};\n\nexport const getBeneficialOwnershipFilingId = () => {\n  return flows.register_bof || 'default';\n};\n\nexport const getBeneficialOwnershipModificationId = () => {\n  return flows.register_bof_modification || 'default';\n};\n","import _isEmpty from 'lodash/isEmpty';\nimport _trim from 'lodash/trim';\nimport { isLoggedIn } from './AuthService';\nimport Validator from './FieldValidator';\nimport { PAGE_STATUS } from '../constants/ui';\nimport { SUPPORT_PHONE_PARENTHESIZED } from '../constants/supportContact';\n\nconst codeToActionErrorMap = {\n  400: 'badRequest',\n  401: 'unauthorized',\n  404: 'notFound',\n  409: 'dataIntegrity',\n  500: 'serverError',\n  1000: 'duplicateEmail',\n  1018: 'processingError',\n  1020: 'paymentError',\n  1021: 'tokenError',\n  1022: 'maintenanceMode',\n  1034: 'passwordInvalid',\n  1035: 'threeDSecureRequired'\n};\n\n// Exported so callers can check `status.dataIntegrityError` against a named constant instead of\n// a plaintext string.\nexport const DATA_INTEGRITY_ERRORS = Object.freeze({\n  MATCHING_NAME: 'matchingName'\n});\n\nconst codeToDataIntegrityErrorMap = {\n  1019: DATA_INTEGRITY_ERRORS.MATCHING_NAME\n};\n\nconst codeToCardNumberErrorMap = {\n  1001: 'genericStripe',\n  1002: 'tryAgainStripe',\n  1003: 'insufficientFunds',\n  1004: 'debitCard',\n  1006: 'limitExceeded',\n  1007: 'notSupported',\n  1009: 'incorrectNumber',\n  1013: 'invalidNumber',\n  1015: 'invalidAmount',\n  1016: 'invalidCardType',\n  1017: 'invalidCard'\n};\n\nconst codeToCVCErrorMap = {\n  1008: 'incorrectCVC',\n  1011: 'invalidCVC'\n};\n\nconst codeToExpDateErrorMap = {\n  1005: 'expiredCard',\n  1012: 'incorrectDate'\n};\n\nconst codeToZipCodeErrorMap = {\n  1010: 'incorrectZip',\n  1014: 'invalidZip'\n};\n\nconst codeToPasswordErrorMap = {\n  1030: 'passwordStrength',\n  1031: 'passwordDictionary',\n  1032: 'passwordNoUserInfo',\n  1033: 'passwordHistory'\n};\n\nexport const allHandledPaymentErrors = {\n  ...codeToCardNumberErrorMap,\n  ...codeToCVCErrorMap,\n  ...codeToExpDateErrorMap,\n  ...codeToZipCodeErrorMap,\n  1000: codeToActionErrorMap[1000]\n};\n\nexport const paymentErrorButtons = {\n  badRequest: 'Please contact support',\n  cardNumberInvalid: 'Please fix your data',\n  cvcInvalid: 'Please fix your data',\n  dataIntegrity: 'Please contact support',\n  dataMissingError: 'Please fix your data',\n  debitCard: 'Please fix your data',\n  duplicateEmail: 'Please fix your data',\n  emailExists: 'Please sign in',\n  emailInvalid: 'Please fix the data',\n  emailUndeliverable: 'Please fix the data',\n  expDateInvalid: 'Please fix your data',\n  expDateFutureInvalid: 'Please fix your data',\n  expirationInvalid: 'Please fix your data',\n  expiredCard: 'Please fix your data',\n  genericStripe: 'Please contact bank',\n  incorrectCVC: 'Please fix your data',\n  incorrectDate: 'Please fix your data',\n  incorrectNumber: 'Please fix your data',\n  incorrectZip: 'Please fix your data',\n  insufficientFunds: 'Please contact bank',\n  invalidAmount: 'Please contact bank',\n  invalidCard: 'Please contact bank',\n  invalidCardType: 'Please contact bank',\n  invalidCVC: 'Please fix your data',\n  invalidNumber: 'Please fix your data',\n  invalidZip: 'Please fix your data',\n  limitExceeded: 'Please fix your data',\n  maintenanceMode: 'Please try again later',\n  matchingName: 'Please fix your data',\n  notFound: 'Please contact support',\n  notSupported: 'Please contact bank',\n  passwordInvalid: 'Please fix your data',\n  paymentError: 'Please fix your data',\n  processingError: 'Please contact support',\n  serverError: 'Please contact support',\n  threeDSecureRequired: 'Please contact bank',\n  tokenError: 'Please contact support',\n  tryAgainStripe: 'Please try again',\n  unauthorized: 'Please contact support'\n};\n\nexport const paymentErrorMessages = {\n  badRequest: `We were unable to create your order. Please contact support at ${SUPPORT_PHONE_PARENTHESIZED} or by message below for assistance. (400)`,\n  cardNumberInvalid: 'Your credit card number doesn’t look quite right. We need a valid credit card number.',\n  cvcInvalid: 'Your CVC number doesn’t look quite right. We need a valid CVC number',\n  dataIntegrity: `We were unable to create your order. Please contact support at ${SUPPORT_PHONE_PARENTHESIZED} or by message below for assistance. (409)`,\n  dataMissingError: 'We are missing some required data for your order. Click the button to return to the information confirmation page to enter the necessary data.',\n  debitCard: 'We don’t support debit cards at this time. Please try a different card.',\n  duplicateEmail: 'An account for this email address has already been created. Go back to reenter a new email or log in with the account.',\n  emailExists: 'This email currently exists in the system. Please sign in before continuing.',\n  emailInvalid: 'The email address doesn’t look quite right. We need a valid email address.',\n  emailUndeliverable: 'This address doesn’t look like it can receive email. We need a valid email address.',\n  expDateInvalid: 'Your expiration date doesn’t look quite right. We need an expiration date formatted as MM/YYYY.',\n  expDateTwoDigitsYearInvalid: 'Your expiration date doesn’t look quite right. We need an expiration date formatted as MM/YY.',\n  expDateFutureInvalid: 'Your expiration date is in the past.',\n  expirationInvalid: 'You expiration date is not valid.',\n  expiredCard: 'Your credit card is expired. Please contact your card issuer for more information or use a different card.',\n  genericStripe: 'Your card issuer has declined this transaction. Please contact your card issuer for more information or try again with a different card.',\n  incorrectCVC: 'The CVC number is not correct for this card. Please check the number, or try a different card.',\n  incorrectDate: 'The expiration date is not correct for this card. Please check the expiration date, or try a different card.',\n  incorrectNumber: 'Your credit card number appears to be incorrect. Please check the number, or try a different card.',\n  incorrectZip: 'Your zip code appears to be incorrect for this card. Please check the zip code, or try a different card.',\n  insufficientFunds: 'Your card issuer has indicated that this card does not have sufficient funds for this order. Please contact your card issuer for more information or use a different card.',\n  invalidAmount: 'Your card issuer is not allowing a charge for this amount. Please contact your card issuer for more information, or you may try a different card.',\n  invalidCard: 'Your card issuer indicates that this card cannot be used. Please contact your card issuer for more information, or you may try a different card.',\n  invalidCardType: 'Your card issuer is not allowing this card to be used. Please contact your card issuer for more information, or you may try a different card.',\n  invalidCVC: 'Your CVC number doesn’t look quite right. We need a valid CVC number.',\n  invalidNumber: 'Your credit card number doesn’t look quite right. We need a valid credit card number.',\n  invalidZip: 'Your Zip code doesn’t look quite right. We need a valid Zip code.',\n  limitExceeded: 'This credit card has been declined too many times. You can try this card again in 24 hours, or you may try a different card.',\n  maintenanceMode: `We are currently updating our systems and are unable to process your request at this time. Please try again later or contact support at ${SUPPORT_PHONE_PARENTHESIZED} for assistance.`,\n  matchingName: 'You have already created an entity with this name. Back up and change the name.',\n  notFound: `We were unable to create your order. Please contact support at ${SUPPORT_PHONE_PARENTHESIZED} or by message below for assistance. (404)`,\n  notSupported: 'This credit card can not be used for this purchase. Please contact your card issuer, or you may try a different card.',\n  passwordInvalid: 'Please enter a valid password.',\n  passwordDictionary: 'password_dictionary_error',\n  passwordHistory: 'password_history_error',\n  passwordNoUserInfo: 'password_no_user_info_error',\n  passwordStrength: 'password_strength_error',\n  paymentError: `Your payment failed. Please try a different card or contact support at ${SUPPORT_PHONE_PARENTHESIZED} for assistance. (402)`,\n  processingError: `We were unable to process your credit card at this time. Please try again or, if the problem persists, contact support at ${SUPPORT_PHONE_PARENTHESIZED} or by message below for assistance.`,\n  serverError: `We were unable to create your order. Please contact support at ${SUPPORT_PHONE_PARENTHESIZED} or by message below for assistance. (500)`,\n  // Same approved copy as graphql-commons CART_PAYMENT_FAIL_3DS_AUTH_ERROR (this checkout can't run a 3DS challenge).\n  threeDSecureRequired: 'We were unable to authenticate your payment method. Please choose a different payment method and try again.',\n  tokenError: `We were unable to process your credit card at this time. Please try again or, if the problem persists, contact support at ${SUPPORT_PHONE_PARENTHESIZED} or by message below for assistance. (1021)`,\n  tryAgainStripe: 'Your card issuer was unable to process this transaction, but requests that you should try again. If the problem persist, Please contact your card issuer for more information or use a different card.',\n  unauthorized: `We were unable to create your order. Please contact support at ${SUPPORT_PHONE_PARENTHESIZED} or by message below for assistance. (401)`\n};\n\nexport const analyzePaymentFields = (state, checkPassword, useTwoDigitsExpYear = false) => {\n  const\n    { cardNumber: cardNumberRaw, expDate, cvc, password } = state,\n    cardNumber = cardNumberRaw.split(' ').join(''),\n    loggedIn = isLoggedIn();\n\n  const\n    cardNumberError = loggedIn || new Validator(cardNumber, 'Card Number').isCreditCard().status ? '' : 'cardNumberInvalid',\n    cvcError = loggedIn || new Validator(cvc, 'CVC').isInteger().isStringLength(3, 4).status ? '' : 'cvcInvalid',\n    passwordError = !checkPassword || loggedIn || new Validator(password, 'Password').isPassword().status ? '' : 'passwordInvalid';\n  let expDateFutureError = '',\n    expDateFormatError = '';\n  if (useTwoDigitsExpYear) {\n    expDateFormatError = loggedIn || new Validator(expDate, 'Exp Date').isMonthTwoDigitsYear().status ? '' : 'expDateTwoDigitsYearInvalid';\n    expDateFutureError = loggedIn || new Validator(expDate, 'Exp Date').isFutureMonthTwoDigitsYear().status ? '' : 'expDateFutureInvalid';\n  } else {\n    expDateFormatError = loggedIn || new Validator(expDate, 'Exp Date').isMonthYear().status ? '' : 'expDateInvalid';\n    expDateFutureError = loggedIn || new Validator(expDate, 'Exp Date').isFutureMonthYear().status ? '' : 'expDateFutureInvalid';\n  }\n  const expDateError = expDateFormatError || expDateFutureError;\n\n\n  if (cardNumberError || expDateError || cvcError || passwordError) {\n    return {\n      cardNumberError,\n      expDateError,\n      cvcError,\n      passwordError,\n      actionError: ''\n    };\n  }\n  return null;\n};\n\n// Unknown failure codes still need a visible message; never fail silently. This message names no status code.\nconst DEFAULT_ACTION_ERROR = 'processingError';\n\nexport const analyzePaymentError = (actionError) => {\n  if (!actionError) {\n    return null;\n  }\n\n  const fieldErrors = {\n    cardNumberError: codeToCardNumberErrorMap[actionError] || '',\n    cvcError: codeToCVCErrorMap[actionError] || '',\n    dataIntegrityError: codeToDataIntegrityErrorMap[actionError] || '',\n    expDateError: codeToExpDateErrorMap[actionError] || '',\n    passwordError: codeToPasswordErrorMap[actionError] || '',\n    zipCodeError: codeToZipCodeErrorMap[actionError] || ''\n  };\n  const hasFieldError = Object.values(fieldErrors).some(Boolean);\n\n  return {\n    actionError: codeToActionErrorMap[actionError] || (hasFieldError ? '' : DEFAULT_ACTION_ERROR),\n    ...fieldErrors,\n    fatalError:  actionError === 400 || actionError === 401 || actionError === 404 || actionError === 409 || (actionError >= 1000 && actionError <= 1999) ? 0 : 500\n  };\n};\n\nexport const analyzePaymentPageStatus = (state, checkPassword, checkTOS) => {\n  const { cardId, cardNumber, expDate, cvc, password, tosAgree, dataIntegrityError = 0, fatalError = 0 } = state,\n    tosIsOK = !checkTOS || tosAgree,\n    passwordIsOK = !checkPassword || !_isEmpty(_trim(password)),\n    loggedIn = isLoggedIn();\n\n  if (dataIntegrityError) {\n    return PAGE_STATUS.OK;\n  }\n  if (fatalError !== 0) {\n    return PAGE_STATUS.NEEDS_REQUIRED;\n  }\n  if (loggedIn) {\n    if (cardNumber) {\n      return !_isEmpty(cardNumber) && !_isEmpty(expDate) && !_isEmpty(cvc) && tosIsOK ? PAGE_STATUS.OK : PAGE_STATUS.NEEDS_REQUIRED;\n    }\n    return cardId && tosIsOK ? PAGE_STATUS.OK : PAGE_STATUS.NEEDS_REQUIRED;\n  }\n\n  /* eslint-disable max-len */\n  return !_isEmpty(cardNumber) && !_isEmpty(expDate) && !_isEmpty(cvc) && passwordIsOK && tosIsOK ? PAGE_STATUS.OK : PAGE_STATUS.NEEDS_REQUIRED;\n  /* eslint-enable max-len */\n};\n\n// The priority is the price and coupon data that is sent via the API\n// If a coupon is provided then we subtract the amount from the price that is sent.\n// Otherwise we attempt to use the hardcoded coupon associated with the plan level.\n// If that doesn't exist then we just display the price.\nexport const  calculatePlanPrice = (planPrice, planCoupon, coupon) => {\n  let price = planPrice;\n  if (coupon) {\n    price = planCoupon ? (price - planCoupon.amount) : coupon.price;\n  }\n\n  return price;\n};\n\n// Replace placeholder values with the actual coupon related pricing\nexport const generateCouponExplanation = (explanationRaw, discountedPrice, basePrice) => {\n  let explanation = explanationRaw || null;\n  if (explanation) {\n    if (discountedPrice) {\n      explanation = explanation.replace(/DISCOUNTED_PRICE/g, discountedPrice);\n    }\n    if (basePrice) {\n      explanation = explanation.replace(/BASE_PRICE/g, basePrice);\n    }\n\n  }\n  return explanation;\n};\n\n// helper function used by the registration plan details to return a generated coupon explanation based on\n// formation type, plan details and coupon.\nexport const getCouponExplanation = (type, plan, coupon) => {\n  const planPriceRaw = type === 'CORP' ? plan.corp.prices['1'] : plan.llc.prices['1'];\n  const planPrice = calculatePlanPrice(planPriceRaw, plan.coupon, coupon);\n  const explanation = generateCouponExplanation(coupon.explanation, planPrice, planPriceRaw);\n  return explanation;\n};\n","const key = 'entryPoint';\n\nlet entryPoint = null;\n\nexport const setAppEntryPoint = (data) => {\n  entryPoint = data || window.location.pathname + window.location.search;\n  if (window.sessionStorage) {\n    sessionStorage.setItem(key, entryPoint);\n  }\n  return entryPoint;\n};\n\nexport const getAppEntryPoint = () => {\n  if (!entryPoint) {\n    entryPoint = sessionStorage.getItem(key) || '/';\n  }\n  return entryPoint;\n};\n\n// Helper function that will allow us to extract the heading\nexport const getQueryParameterByName = (name, queryString = document.location.search) => {\n  const regex = new RegExp(`[?&]${name}=([^&]*)`),\n    results = regex.exec(queryString);\n  if (!results) { return ''; }\n  if (!results[1]) { return ''; }\n  return decodeURIComponent(results[1].replace(/\\+/g, ' '));\n};\n","\nlet\n  enabled = true,\n  url = '',\n  environment = '',\n  installed = false;\n\nconst\n  loadJS = (callback) => {\n    const\n      ref = window.document.getElementsByTagName('script')[0],\n      script = window.document.createElement('script');\n\n    script.src = url;\n    script.async = true;\n    if (script.readyState) {\n      script.onreadystatechange = function() {\n        if (script.readyState === 'loaded' || script.readyState === 'complete') {\n          script.onreadystatechange = null;\n          installed = true;\n          callback();\n        }\n      };\n    } else {\n      script.onload = function() {\n        installed = true;\n        callback();\n      };\n    }\n    ref.parentNode.insertBefore(script, ref);\n  },\n  renderPlaid = (callback, linkToken, reinitialize) => {\n    window.Plaid.create({\n      clientName: 'ZenBusiness',\n      env: environment,\n      token: linkToken,\n      ...(reinitialize && { receivedRedirectUri: window.location.href }),\n      product: ['auth'],\n      onSuccess: (publicToken, metadata) => {\n        callback({ publicToken, metadata, error: null });\n      },\n      onExit: (error, metadata) => {\n        callback({ error, metadata });\n      }\n    }).open();\n  };\n\nexport const initializePlaid = (response) => {\n  const { plaid } = response;\n\n  enabled = plaid.enabled;\n  url = plaid.url;\n  environment = plaid.environment;\n};\n\nexport const displayPlaid = (callback, linkToken, reinitialize) => {\n  if (!enabled) {\n    callback({ publicToken: '', metadata: {} });\n    return;\n  }\n  if (installed) {\n    renderPlaid(callback, linkToken, reinitialize);\n    return;\n  }\n\n  loadJS(() => {\n    renderPlaid(callback, linkToken, reinitialize);\n  });\n};\n\nexport const isPlaidEnabled = () => {\n  return enabled;\n};\n\nexport default {\n  initializePlaid,\n  renderPlaid,\n  isPlaidEnabled\n};\n","import _findIndex from 'lodash/findIndex';\nimport _get from 'lodash/get';\nimport React from 'react';\n\nimport { getCoupon, isRAOfferEnabled,\n  getWebsiteToolsBundlePriceFromAddonOrStandalone,\n  getEinBusinessDocsBundleFromAddonOrStandalone } from './ProductService';\n\nexport const\n  defaultPlans = {\n    level1: {\n      id: 'default_ui_leve1',\n      llc: {\n        price: 129,\n        prices: {\n          1: 129,\n          12: 10.75\n        },\n        fees: 100\n      },\n      corp: {\n        price: 129,\n        prices: {\n          1: 129,\n          12: 10.75\n        },\n        fees: 100\n      },\n      expense_tracking_with_tax_filing: {\n        llc: {\n          fees: 300.0,\n          price: 12.41,\n          prices: {\n            12: 12.41,\n            1: 180.0\n          }\n        },\n        corp: {\n          fees: 300.0,\n          price: 12.41,\n          prices: {\n            12: 12.41,\n            1: 180.0\n          }\n        },\n        products: [\n          'expense_tracking',\n          'tax_filing'\n        ],\n        addons: [\n          'ny_publication'\n        ],\n        auto_includes: []\n      },\n      '1800_accountant': false,\n      anonymity: false,\n      annual_report_service: isRAOfferEnabled(),\n      banking: false,\n      banking_resolution: false,\n      basic_email: false,\n      business_license_report: false,\n      change_of_registered_agent: false,\n      corporate_docs: false,\n      cpa_consult: false,\n      domain_name_privacy: false,\n      domain_name_reg: false,\n      ein_creation: false,\n      expedite: 'standard',\n      formation: true,\n      initial_cpa_screening: true,\n      insurance: false,\n      ny_publication: false,\n      operating_agreement: true,\n      registered_agent_service: !isRAOfferEnabled(),\n      static_website: false,\n      tax_preparation: false,\n      worry_free_service: false,\n      addons: ['registered_agent_service', 'expedite', 'rush', 'ein_creation', 'worry_free_service', 'domain_name_reg', 'domain_name_privacy', 'static_website', 'basic_email', 'ny_publication', 'banking_resolution', 'corporate_docs' ],\n      auto_includes: []\n    },\n    level2: {\n      id: 'default_ui_level2',\n      llc: {\n        price: 249,\n        prices: {\n          1: 249,\n          12: 20.75\n        },\n        fees: 300\n      },\n      corp: {\n        price: 249,\n        prices: {\n          1: 249,\n          12: 20.75\n        },\n        fees: 300\n      },\n      expense_tracking_with_tax_filing: {\n        llc: {\n          fees: 300.0,\n          price: 12.41,\n          prices: {\n            12: 12.41,\n            1: 180.0\n          }\n        },\n        corp: {\n          fees: 300.0,\n          price: 12.41,\n          prices: {\n            12: 12.41,\n            1: 180.0\n          }\n        },\n        products: [\n          'expense_tracking',\n          'tax_filing'\n        ],\n        addons: [\n          'ny_publication'\n        ],\n        auto_includes: []\n      },\n      '1800_accountant': false,\n      anonymity: false,\n      annual_report_service: isRAOfferEnabled(),\n      banking: false,\n      banking_resolution: true,\n      basic_email: false,\n      business_license_report: false,\n      change_of_registered_agent: false,\n      corporate_docs: true,\n      cpa_consult: false,\n      domain_name_privacy: false,\n      domain_name_reg: false,\n      ein_creation: true,\n      expedite: 'priority',\n      formation: true,\n      initial_cpa_screening: true,\n      insurance: false,\n      ny_publication: false,\n      operating_agreement: true,\n      registered_agent_service: true,\n      static_website: false,\n      tax_preparation: false,\n      worry_free_service: true,\n      addons: [ 'expedite_to_rush_upgrade', 'domain_name_reg', 'domain_name_privacy', 'static_website', 'basic_email', 'ny_publication' ],\n      auto_includes: []\n    },\n    level3: {\n      id: 'default_ui_level3',\n      llc: {\n        price: 349,\n        prices: {\n          1: 349,\n          12: 29.08\n        },\n        fees: 100\n      },\n      corp: {\n        price: 349,\n        prices: {\n          1: 349,\n          12: 29.08\n        },\n        fees: 100\n      },\n      expense_tracking_with_tax_filing: {\n        llc: {\n          fees: 300.0,\n          price: 12.41,\n          prices: {\n            12: 12.41,\n            1: 180.0\n          }\n        },\n        corp: {\n          fees: 300.0,\n          price: 12.41,\n          prices: {\n            12: 12.41,\n            1: 180.0\n          }\n        },\n        products: [\n          'expense_tracking',\n          'tax_filing'\n        ],\n        addons: [\n          'ny_publication'\n        ],\n        auto_includes: []\n      },\n      '1800_accountant': false,\n      anonymity: false,\n      annual_report_service: isRAOfferEnabled(),\n      banking: false,\n      banking_resolution: true,\n      basic_email: true,\n      business_license_report: false,\n      change_of_registered_agent: false,\n      corporate_docs: true,\n      cpa_consult: false,\n      domain_name_privacy: true,\n      domain_name_reg: true,\n      ein_creation: true,\n      expedite: 'priority',\n      formation: true,\n      initial_cpa_screening: true,\n      insurance: false,\n      ny_publication: false,\n      operating_agreement: true,\n      registered_agent_service: true,\n      static_website: true,\n      tax_preparation: false,\n      worry_free_service: true,\n      addons: [ 'ny_publication' ],\n      auto_includes: []\n    },\n    raLevel1: {\n      id: 'default_ui_ra_level1',\n      llc: {\n        price: 99,\n        prices: {\n          1: 99,\n          12: 10\n        },\n        fees: 100\n      },\n      corp: {\n        price: 99,\n        prices: {\n          1: 99,\n          12: 10\n        },\n        fees: 100\n      },\n      expense_tracking_with_tax_filing: {\n        llc: {\n          fees: 300.0,\n          price: 12.41,\n          prices: {\n            12: 12.41,\n            1: 180.0\n          }\n        },\n        corp: {\n          fees: 300.0,\n          price: 12.41,\n          prices: {\n            12: 12.41,\n            1: 180.0\n          }\n        },\n        products: [\n          'expense_tracking',\n          'tax_filing'\n        ],\n        addons: [\n          'ny_publication'\n        ],\n        auto_includes: []\n      },\n      '1800_accountant': false,\n      anonymity: false,\n      banking: false,\n      banking_resolution: false,\n      basic_email: false,\n      business_license_report: false,\n      change_of_registered_agent: false,\n      cpa_consult: false,\n      domain_name_privacy: false,\n      domain_name_reg: false,\n      ein_creation: false,\n      expedite: 'priority',\n      formation: false,\n      initial_cpa_screening: false,\n      insurance: false,\n      ny_publication: false,\n      operating_agreement: false,\n      registered_agent_service: true,\n      static_website: false,\n      tax_preparation: false,\n      worry_free_service: false,\n      addons: [],\n      auto_includes: []\n    },\n    raLevel2: {\n      id: 'default_ui_ra_level2',\n      llc: {\n        price: 149,\n        prices: {\n          1: 149,\n          12: 10\n        },\n        fees: 100\n      },\n      corp: {\n        price: 149,\n        prices: {\n          1: 149,\n          12: 10\n        },\n        fees: 100\n      },\n      expense_tracking_with_tax_filing: {\n        llc: {\n          fees: 300.0,\n          price: 12.41,\n          prices: {\n            12: 12.41,\n            1: 180.0\n          }\n        },\n        corp: {\n          fees: 300.0,\n          price: 12.41,\n          prices: {\n            12: 12.41,\n            1: 180.0\n          }\n        },\n        products: [\n          'expense_tracking',\n          'tax_filing'\n        ],\n        addons: [\n          'ny_publication'\n        ],\n        auto_includes: []\n      },\n      '1800_accountant': false,\n      anonymity: false,\n      banking: false,\n      banking_resolution: false,\n      basic_email: false,\n      business_license_report: false,\n      change_of_registered_agent: false,\n      cpa_consult: false,\n      domain_name_privacy: false,\n      domain_name_reg: false,\n      ein_creation: false,\n      expedite: 'priority',\n      formation: false,\n      initial_cpa_screening: false,\n      insurance: false,\n      ny_publication: false,\n      operating_agreement: false,\n      registered_agent_service: true,\n      static_website: false,\n      tax_preparation: false,\n      worry_free_service: true,\n      addons: [],\n      auto_includes: []\n    }\n  },\n  labels = {\n    nameAvailabilitySearch: '✓ Name availability search',\n    articlesIncorporation: '✓ Articles of incorporation',\n    stateFiling: '✓ State filing and verification',\n    chat: '✓ Real-time chat support',\n    dashboard: '✓ Personalized dashboard',\n    registeredAgent: '✓ Registered Agent',\n    changeOfAgent: '✓ Change of Registered Agent',\n    anonymity: '✓ Business address anonymity',\n    worryFree: '✓ Worry-Free Compliance',\n    ein: '✓ Employer ID Number (EIN)',\n    ein2553: '✓ Employer ID Number and Filing of Form 2553',\n    operatingAgreement: '✓ Operating agreement template & bylaws',\n    nyPublication: '✓ New York Publication',\n    banking: '✓ Business bank account',\n    bookkeeping: '✓ Bookkeeping',\n    priority: '✓ Faster Formation Speed',\n    rush: '✓ Fastest Formation Speed',\n    taxPreparation: '✓ Business tax preparation',\n    basicEmail: '✓ Business email address',\n    cpaConsult: '✓ Free Accounting Consultation',\n    initialCPAScreening: '✓ Free accounting consultation',\n    insurance: '✓ Free insurance quote',\n    domainName: '✓ Domain name registration',\n    domainNamePrivacy: '✓ Domain privacy protection',\n    staticWebsite: '✓ Corporate website',\n    bankingResolution: '✓ Banking resolution template',\n    corporateDocs: '✓ Business document templates library',\n    autoIncludes: 'One Year Free!',\n    annualReportService: 'Annual report service'\n  };\n\nlet plans = {},\n  packages = {},\n  // eslint-disable-next-line no-unused-vars\n  standalones = {},\n  orderPlanData = null;\n\nconst setStandaloneServicesByService = (standaloneServices) => {\n  return standaloneServices.reduce((formatted, service) => {\n    const key = _get(service, 'related_service_pricing.service', '');\n    if (formatted[key]) {\n      const item = formatted[key],\n        existingInterval = _get(item, 'related_service_pricing.interval', 'onetime'),\n        thisInterval = _get(service, 'related_service_pricing.interval', 'onetime');\n\n      formatted[key] = {\n        [existingInterval]: item,\n        [thisInterval]: service\n      };\n    } else {\n      formatted[key] = service;\n    }\n    return formatted;\n  }, {});\n};\n\nexport const getPlanLevel = (planLevel/*, domesticJurisdiction*/) => {\n  /*\n  const statePlans = plans[domesticJurisdiction || 'TX'],\n    plan = statePlans ? statePlans[planLevel] : null;\n  */\n  return plans[planLevel] || defaultPlans[planLevel];\n};\n\nexport const syncUpPlan = (data) => {\n  const { level, service, plan } = data;\n  const currentLevelPlan = getPlanLevel(level);\n  if (currentLevelPlan && currentLevelPlan.id !== service) {\n    plans[level] = plan || currentLevelPlan;\n    orderPlanData = data;\n  }\n};\n\nexport const setPlans = (data) => {\n  const { plans: initPlans = null, packages: initPkgs = null, standaloneServices: initSS = null } = data;\n  if (initPlans) {\n    plans = initPlans;\n  }\n  if (orderPlanData) {\n    syncUpPlan(orderPlanData);\n  }\n  if (initPkgs) {\n    packages = initPkgs;\n  }\n  if (initSS) {\n    standalones = setStandaloneServicesByService(initSS);\n  }\n};\n\nexport const isAutoIncludedInPlan = (plan, key) => {\n  if (!plan || !key) {\n    return false;\n  }\n  const\n    index = _findIndex(plan.auto_includes, (ai) => {\n      return ai === key;\n    });\n\n  return index >= 0;\n};\n\n// sometimes auto includes isn't populated we need to check addons\nexport const findItemInAddOns = (plan, key) => {\n  if (!plan || !key) {\n    return false;\n  }\n\n  const index = _findIndex(plan.addons, (ai) => {\n    return ai === key;\n  });\n\n  return index >= 0;\n};\n\nexport const getMinimumFormationPlanYearlyPrice = (/* domesticJurisdiction */) => {\n  const\n    plan = plans.level1 || defaultPlans.level1,\n    coupon = getCoupon(plan.id);\n\n  if (coupon) {\n    return coupon.price;\n  }\n\n  return plan.llc.prices['1'] || 0;\n};\n\nexport const getMinimumCoRAPlanYearlyPrice = (/*domesticJurisdiction*/) => {\n  const\n    plan = plans.raLevel1 || defaultPlans.raLevel1,\n    coupon = getCoupon(plan.id);\n\n  if (coupon) {\n    return coupon.price;\n  }\n\n  return plan.llc.prices['1'] || 0;\n};\n\n/* eslint-disable max-statements */\nexport const getPlanDetails = (planLevel, domesticJurisdiction, includeCallouts, removeCheckMarks, noExpedite, isSCorp) => {\n  const plan = getPlanLevel(planLevel, domesticJurisdiction),\n    toRemove = removeCheckMarks ? '✓ ' : '',\n    list = [];\n\n  if (plan.formation) {\n    list.push((<li key=\"formation1\">{labels.nameAvailabilitySearch.split(toRemove).join('')}</li>));\n    list.push((<li key=\"formation2\">{labels.articlesIncorporation.split(toRemove).join('')}</li>));\n    list.push((<li key=\"formation3\">{labels.stateFiling.split(toRemove).join('')}</li>));\n    list.push((<li key=\"formation4\">{labels.chat.split(toRemove).join('')}</li>));\n    list.push((<li key=\"formation5\">{labels.dashboard.split(toRemove).join('')}</li>));\n  }\n  if (!noExpedite && plan.expedite === 'priority') {\n    list.push((<li key=\"priority1\">{labels.priority.split(toRemove).join('')}</li>));\n  }\n  if (!noExpedite && plan.expedite === 'rush') {\n    list.push((<li key=\"rush1\">{labels.rush.split(toRemove).join('')}</li>));\n  }\n  if (plan.registered_agent_service) {\n    list.push((<li key=\"privacy1\">{labels.registeredAgent.split(toRemove).join('')}</li>));\n  } else if (isAutoIncludedInPlan(plan, 'registered_agent_service')) {\n    list.push((<li key=\"privacy1\">{labels.registeredAgent.split(toRemove).join('')} - {labels.autoIncludes}</li>));\n  }\n  if (plan.change_of_registered_agent) {\n    list.push((<li key=\"coa1\">{labels.changeOfAgent.split(toRemove).join('')}</li>));\n  }\n  if (plan.operating_agreement) {\n    list.push((<li key=\"opAgree1\">{labels.operatingAgreement.split(toRemove).join('')}</li>));\n  }\n  if (plan.annual_report_service) {\n    list.push((<li key=\"annualReportService1\">{labels.annualReportService.split(toRemove).join('')}</li>));\n  }\n  if (plan.ein_creation) {\n    if (isSCorp) {\n      list.push((<li key=\"ein1\">{labels.ein2553.split(toRemove).join('')}</li>));\n    } else {\n      list.push((<li key=\"ein1\">{labels.ein.split(toRemove).join('')}</li>));\n    }\n  }\n  if (plan.banking_resolution) {\n    list.push((<li key=\"bankingResolution1\">{labels.bankingResolution.split(toRemove).join('')}</li>));\n  }\n  if (plan.corporate_docs) {\n    list.push((<li key=\"corporateDocs1\">{labels.corporateDocs.split(toRemove).join('')}</li>));\n  }\n  if (plan.worry_free_service) {\n    list.push((<li key=\"worryFree1\">{labels.worryFree.split(toRemove).join('')}</li>));\n  } else if (isAutoIncludedInPlan(plan, 'worry_free_service')) {\n    list.push((<li key=\"worryFree1\">{labels.worryFree.split(toRemove).join('')} - {labels.autoIncludes}</li>));\n  }\n  if (plan.domain_name_reg) {\n    list.push((<li key=\"domainName1\">{labels.domainName.split(toRemove).join('')}</li>));\n  } else if (isAutoIncludedInPlan(plan, 'domain_name_reg')) {\n    list.push((<li key=\"domainName1\">{labels.domainName.split(toRemove).join('')} - {labels.autoIncludes}</li>));\n  }\n  if (plan.domain_name_privacy) {\n    list.push((<li key=\"domainNamePrivacy1\">{labels.domainNamePrivacy.split(toRemove).join('')}</li>));\n  } else if (isAutoIncludedInPlan(plan, 'domain_name_privacy')) {\n    list.push((<li key=\"domainNamePrivacy1\">{labels.domainNamePrivacy.split(toRemove).join('')} - {labels.autoIncludes}</li>));\n  }\n  if (plan.basic_email) {\n    list.push((<li key=\"basicEmail1\">{labels.basicEmail.split(toRemove).join('')}</li>));\n  } else if (isAutoIncludedInPlan(plan, 'basic_email')) {\n    list.push((<li key=\"basicEmail1\">{labels.basicEmail.split(toRemove).join('')} - {labels.autoIncludes}</li>));\n  }\n  if (plan.static_website) {\n    list.push((<li key=\"staticWebsite1\">{labels.staticWebsite.split(toRemove).join('')}</li>));\n  } else if (isAutoIncludedInPlan(plan, 'static_website')) {\n    list.push((<li key=\"staticWebsite1\">{labels.staticWebsite.split(toRemove).join('')} - {labels.autoIncludes}</li>));\n  }\n  if (plan.initial_cpa_screening) {\n    list.push((<li key=\"initialCPAScreening1\">{labels.initialCPAScreening.split(toRemove).join('')}</li>));\n  }\n  if (plan.anonymity) {\n    list.push((<li key=\"anonymity1\">{labels.anonymity.split(toRemove).join('')}</li>));\n  }\n  if (plan.ny_publication) {\n    list.push((<li key=\"nyPub1\">{labels.nyPublication.split(toRemove).join('')}</li>));\n  }\n  if (plan.banking) {\n    list.push((<li key=\"banking1\">{labels.banking.split(toRemove).join('')}</li>));\n  }\n  if (plan.cpa_consult) {\n    list.push((<li key=\"cpaConsult1\">{labels.cpaConsult.split(toRemove).join('')}</li>));\n  }\n  if (plan.tax_preparation) {\n    list.push((<li key=\"taxPreparation1\">{labels.taxPreparation.split(toRemove).join('')}</li>));\n  } else if (isAutoIncludedInPlan(plan, 'tax_preparation')) {\n    list.push((<li key=\"taxPreparation1\">{labels.taxPreparation.split(toRemove).join('')} - {labels.autoIncludes}</li>));\n  }\n  if (plan.insurance) {\n    list.push((<li key=\"insurance1\">{labels.insurance.split(toRemove).join('')}</li>));\n  }\n  return list;\n};\n/* eslint-enable max-statements */\n\nexport const getExpenseTrackerAndTaxFilingPlanYearlyPrice = (businessType, /*domesticJurisdiction*/) => {\n  if (packages.expense_tracking_with_tax_filing) {\n    return packages.expense_tracking_with_tax_filing[businessType === 'LLCX' ? 'llc' : 'corp'].prices['1'] || 0;\n  }\n  const plan = defaultPlans.raLevel1;\n\n  return plan.expense_tracking_with_tax_filing[businessType === 'LLCX' ? 'llc' : 'corp'].prices['1'] || 0;\n};\n\nexport const getEINBusinessDocsBundlePrice = (businessType) => {\n  const priceFromAddonsOrStandalone = getEinBusinessDocsBundleFromAddonOrStandalone();\n  if (priceFromAddonsOrStandalone) {\n    return priceFromAddonsOrStandalone;\n  }\n  if (packages.ein_business_docs_bundle) {\n    return packages.ein_business_docs_bundle[businessType === 'LLCX' ? 'llc' : 'corp'].prices['1'] || 0;\n  }\n  return 0;\n};\n\nexport const getWebsiteToolsBundleYearlyPrice = (businessType) => {\n  const priceFromAddonsOrStandalone = getWebsiteToolsBundlePriceFromAddonOrStandalone();\n  if (priceFromAddonsOrStandalone) {\n    return priceFromAddonsOrStandalone;\n  }\n  if (packages.website_tools_bundle) {\n    return packages.website_tools_bundle[businessType === 'LLCX' ? 'llc' : 'corp'].prices['1'] || 0;\n  }\n  return 0;\n};\n\nexport const getPackage = (serviceName, interval) => {\n  const pkg = packages[serviceName];\n  if (pkg) {\n    return pkg[interval] || pkg;\n  }\n  return null;\n};\n\nexport const getEINBizDocsOaBundlePrice = (businessType) => {\n  if (packages.ein_bizdocs_oa_bundle) {\n    return packages.ein_bizdocs_oa_bundle[businessType === 'LLCX' ? 'llc' : 'corp'].prices['1'] || 0;\n  }\n  return 0;\n};\n\nexport const getBizDocsBlrBundlePrice = (businessType) => {\n  if (packages.bizdocs_blr_bundle) {\n    return packages.bizdocs_blr_bundle[businessType === 'LLCX' ? 'llc' : 'corp'].prices['1'] || 0;\n  }\n  return 0;\n};\n","const storage = window.localStorage || null,\n  key = 'zenbusiness_partner',\n  timerKey = 'zenbusiness_partner_timer',\n  entryPointGroupKey = 'zenbusiness_entry_point_group',\n  attributionKey = 'zenbusiness_attribution',\n  pfKey = 'pf',\n  truicKey = 'TRUiC',\n  allowedHosts = [\n    'www.zenbusiness.com',\n    'www.dev.zenbusiness.com',\n    'local.zenbusiness.com',\n    'zenbusiness.com',\n    'dev.zenbusiness.com'\n  ],\n  timeout = 30 * 24 * 60 * 60 * 1000,\n  processTimer = () => {\n    const timerStr = storage ? storage.getItem(timerKey) || '' : '';\n    if (!timerStr) {\n      return 0;\n    }\n    return parseInt(timerStr, 10);\n  };\n\nlet partner = storage ? storage.getItem(key) || '' : '',\n  timer = processTimer(),\n  entryPointGroup = storage ? storage.getItem(entryPointGroupKey) || '' : '',\n  truicEnabled = false,\n  attribution = storage ? storage.getItem(attributionKey) || '' : '';\n\nconst storeInfo = (p, epg, attr) => {\n    partner = p;\n    entryPointGroup = epg;\n    attribution = attr;\n\n    if (storage) {\n      storage.setItem(key, p);\n      storage.setItem(entryPointGroupKey, epg);\n      storage.setItem(attributionKey, attr);\n    }\n  },\n  initializePartner = () => {\n    let removeTimer = false;\n    if (partner === pfKey) {\n      storeInfo(pfKey, pfKey, attribution || pfKey); // Make sure entry point group is set, but keep attribution unless is not set\n      removeTimer = true;\n    } else {\n      removeTimer = true;\n    }\n    if (removeTimer && storage) {\n      timer = 0;\n      storage.removeItem(timerKey);\n    }\n  },\n  getStoredItem = (storageKey) => {\n    return storage ? storage.getItem(storageKey) || '' : '';\n  },\n  setStoredItem = (storageKey, value) => {\n    if (storage) {\n      if (value) {\n        storage.setItem(storageKey, value);\n      } else {\n        storage.removeItem(storageKey);\n      }\n    }\n  };\n\ninitializePartner();\n\n// This function should only be used to initialize tests.\nexport const setupTest = (initPartner, initEntryPointGroup, initTimer, initAttribution) => {\n  partner = initPartner;\n  entryPointGroup = initEntryPointGroup;\n  attribution = initAttribution || initPartner;\n  timer = initTimer;\n};\n\n// Only needed for tests - do not use in normal code\nexport const getTimer = () => {\n  return timer;\n};\n\nexport const getPartner = () => {\n  return partner;\n};\n\nexport const getEntryPointGroup = () => {\n  return entryPointGroup;\n};\n\nexport const getAttribution = () => {\n  return attribution;\n};\n\nexport const setPartner = (newPartner, newEntryPointGroup, newAttribution) => {\n  partner = newPartner;\n  entryPointGroup = newEntryPointGroup || newPartner;\n  attribution = newAttribution || newPartner;\n  timer = 0;\n  setStoredItem(timerKey, 0);\n  setStoredItem(key, newPartner);\n  setStoredItem(entryPointGroupKey, newEntryPointGroup);\n  setStoredItem(attributionKey, newAttribution);\n};\n\nexport const getCampaignmedium = () => {\n  return getStoredItem('campaignmedium');\n};\n\nexport const setCampaignmedium = (campaignmedium) => {\n  setStoredItem('campaignmedium', campaignmedium);\n};\n\nexport const getCampaignSource = () => {\n  return getStoredItem('campaignsource');\n};\n\nexport const setCampaignSource = (campaignsource) => {\n  setStoredItem('campaignsource', campaignsource);\n};\n\nexport const getCampaignName = () => {\n  return getStoredItem('campaignname');\n};\n\nexport const setCampaignName = (campaignname) => {\n  setStoredItem('campaignname', campaignname);\n};\n\nexport const isTRUiC = () => {\n  return truicEnabled && partner === truicKey;\n};\n\nexport const isPF = () => {\n  return !isTRUiC() && entryPointGroup === pfKey;\n};\n\nexport const isTRUiCAttribution = () => {\n  return truicEnabled && attribution === truicKey;\n};\n\nexport const setPartners = (data) => {\n  const { products = { truic: false } } = data;\n\n  truicEnabled = products.truic || false;\n};\n\nexport const resetPartnerStorage = () => {\n  if (storage) {\n    storage.removeItem(key);\n    storage.removeItem(timerKey);\n    storage.removeItem(entryPointGroupKey);\n    storage.removeItem(attributionKey);\n    storage.removeItem('affiliateId');\n    storage.removeItem('bannerId');\n    storage.removeItem('campaignmedium');\n    storage.removeItem('campaignname');\n    storage.removeItem('campaignsource');\n    storage.removeItem('initialization/visitor');\n    storage.removeItem('shareASale');\n  }\n  partner = '';\n  timer = 0;\n  entryPointGroup = '';\n  attribution = '';\n  truicEnabled = false;\n};\n\n/* eslint-disable max-statements */\nconst\n  checkNonTruicURLPartner = (referrer, refParse) => {\n    let urlPartner = '';\n    // See if it is a partner landing page (anything with '/p/')\n    const pIndex = referrer.indexOf('/p/');\n    if (pIndex >= 0) {\n      const pathname = refParse.pathname;\n      urlPartner = pathname.replaceAll('/p/', '');\n      urlPartner = urlPartner.replaceAll('/', '');\n      urlPartner = urlPartner.replaceAll('-', '_');\n      return urlPartner;\n    }\n    return pfKey;\n  },\n  /*******************************\n   * The algorithm for determining the partner/affiliate\n   *\n   *  if there is a partner param, set the partner to the parameter UNLESS it is TRUiC. If it is TRUiC, set partner to PF and attribution to TRUiC\n   *  if there is a referrer:\n   *   if there is NO partner param:\n   *     if the referrer is a TRUiC landing page (/truic/*), set the partner to PF and the attribution to TRUiC\n   *     else if the referrer is a partner landing page (/p/*), set the partner and attribution to the partbner\n   *     else set the partner and attribution to PF\n   *\n   *  if no partner has been defined yet (no partner param and no referrer):\n   *    if the current URL is /r/registration-truic/init, set the partner and attribution to TRUiC\n   *    else if the current URL is /r/registration-truic/*, set the partner to PF and the attribution to TRUiC\n   *    else leave the values as-is as this is a page refresh with a flow.\n   */\n  processPartnerTruicToPFFlow = (referrer, paramPartner, paramEntryPointGroup) => {\n    let newPartner = paramPartner || '';\n\n    // Here, we want to ensure that if the TRUiC key is passed as paramPartner, it is overwritten as\n    // PF to force the flow through the PF flow.\n    if (newPartner === truicKey) {\n      newPartner = pfKey;\n    }\n    let newEntryPointGroup = paramEntryPointGroup || newPartner;\n    if (newEntryPointGroup === truicKey) {\n      newEntryPointGroup = pfKey;\n    }\n    let newAttribution = newPartner;\n    // If paramPartner is TRUiC, set the attribution to TRUiC while the partner will be PF (see above)\n    if (paramPartner === truicKey) {\n      newAttribution = truicKey;\n    }\n\n    if (!newPartner) {\n      if (referrer && referrer !== document.location.href) {\n        try {\n          const refParse = new URL(referrer);\n          if (allowedHosts.includes(refParse.hostname)) {\n            const truicIndex = referrer.indexOf('/truic');\n            if (truicIndex >= 0) {\n              // If is a TRUiC landing page, set the urlPartner to PF and the truicToPFFlow to true\n              newPartner = pfKey;\n              newEntryPointGroup = newEntryPointGroup || pfKey;\n              newAttribution = truicKey;\n            } else {\n              newPartner = checkNonTruicURLPartner(referrer, refParse);\n              newEntryPointGroup = newEntryPointGroup || newPartner;\n              newAttribution = newPartner;\n            }\n          }\n        } catch {\n          newPartner = newPartner || pfKey;\n          newEntryPointGroup = newEntryPointGroup || pfKey;\n          newAttribution = newAttribution || pfKey;\n        }\n      }\n    }\n\n    // If there is no new partner, then there is no referrer. Process accordingly\n    if (!newPartner && !newEntryPointGroup) {\n      if (document.location.href.includes('/r/registration-truic/init')) {\n        const resetVisit = partner !== truicKey || entryPointGroup !== truicKey;\n        storeInfo(truicKey, truicKey, truicKey);\n        return resetVisit;\n      }\n      // Here, unless TRUiC is set as the existing partner, do not allow direct access\n      // to the TRUiC flow. Force to PF with TRUiC attribution\n      if (document.location.href.includes('/r/registration-truic/') && partner !== truicKey) {\n        const resetVisit = partner !== pfKey || entryPointGroup !== pfKey;\n        storeInfo(pfKey, pfKey, truicKey);\n        return resetVisit;\n      }\n      // Otherwise, this is a page refresh within a flow - keep things as-is\n      return false;\n    }\n\n    // If the partner or entry point group is not PF, set both equal\n    const nonTRUiCPartner =\n      (newPartner && newPartner !== pfKey ? newPartner : '') ||\n      (newEntryPointGroup && newEntryPointGroup !== pfKey ? newEntryPointGroup : '') ||\n      '';\n    if (nonTRUiCPartner) {\n      const resetVisit = partner !== nonTRUiCPartner || entryPointGroup !== nonTRUiCPartner;\n      storeInfo(nonTRUiCPartner, nonTRUiCPartner, nonTRUiCPartner);\n      return resetVisit;\n    }\n\n    const resetVisit = partner !== newPartner || entryPointGroup !== newEntryPointGroup;\n    storeInfo(newPartner || pfKey, newEntryPointGroup || pfKey, newAttribution || pfKey);\n    return resetVisit;\n  },\n  processPartnerTruicFlow = (referrer, paramPartner, paramEntryPointGroup) => {\n    // Start by processing the document referrer. See if the referrer is from the zenbusiness.com domain.\n    let urlPartner = '';\n    if (referrer) {\n      try {\n        const refParse = new URL(referrer);\n        if (allowedHosts.includes(refParse.hostname)) {\n          // Next, check to see if it comes from a TRUiC landing page. Any page with \"truic\" in the URL is considered a TRUiC landing page\n          const truicIndex = referrer.indexOf('truic');\n          if (truicIndex >= 0) {\n            urlPartner = truicKey;\n          } else {\n            urlPartner = checkNonTruicURLPartner(referrer, refParse);\n          }\n        }\n      } catch {\n        urlPartner = pfKey;\n      }\n    }\n\n    if (!urlPartner && !paramPartner && !paramEntryPointGroup) {\n      return false;\n    }\n\n    // If the referrer is from a TRUiC landing page OR the paramParnter is set to TRUiC, set up for TRUiC\n    if (urlPartner === truicKey || paramPartner === truicKey) {\n      // Reset the visit if the partner or entryPointGroup has changed.\n      const resetVisit = partner !== truicKey || entryPointGroup !== truicKey;\n\n      // store the info and reset the timer if the timer is out\n      storeInfo(truicKey, truicKey, truicKey);\n      if (new Date().getTime() - timer > timeout) {\n        timer = new Date().getTime();\n        if (storage) {\n          storage.setItem(timerKey, `${timer}`);\n        }\n      }\n      return resetVisit;\n    }\n\n    // If the old partner is TRUiC, check the timer. If the time is valid, keep at triuc regardless of partner input.\n    if (partner === truicKey) {\n      if (new Date().getTime() - timer < timeout) {\n        return false; // No need to reset visit\n      }\n    }\n\n    // Clear the timer and continue processing\n    timer = 0;\n    if (storage) {\n      storage.removeItem(timerKey);\n    }\n\n    // Check for a non-TRUiC partner. If it is a partner (e.g. rvshare), process it. This only gets processed once.\n    const nonTRUiCPartner =\n      (urlPartner && urlPartner !== pfKey ? urlPartner : '') ||\n      (paramPartner && paramPartner !== pfKey ? paramPartner : '') ||\n      (paramEntryPointGroup && paramEntryPointGroup !== pfKey ? paramEntryPointGroup : '') ||\n      '';\n    if (nonTRUiCPartner) {\n      const resetVisit = partner !== nonTRUiCPartner || entryPointGroup !== nonTRUiCPartner;\n      storeInfo(nonTRUiCPartner, nonTRUiCPartner, nonTRUiCPartner);\n      return resetVisit;\n    }\n\n    // Check if the partner is not PF and also not TRUiC. If so, reset it (one and done), but don't reset the visit.\n    if (partner && partner !== pfKey && partner !== truicKey) {\n      storeInfo(pfKey, pfKey, pfKey);\n      return false;\n    }\n    // At this point, it is a personalization flow.\n    const resetVisit = partner !== pfKey || entryPointGroup !== pfKey;\n    storeInfo(pfKey, pfKey, pfKey);\n    return resetVisit;\n  };\n\nexport const processPartner = (referrer, paramPartner, paramEntryPointGroup) => {\n  if (window.truicToPFFlow) {\n    return processPartnerTruicToPFFlow(referrer, paramPartner, paramEntryPointGroup);\n  }\n  return processPartnerTruicFlow(referrer, paramPartner, paramEntryPointGroup);\n};\n\n// This will necessarily be run AFTER processPartner has executed.\n// DJL - NOTE - this method is essentially rote, but I am keeping it here for the\n// eventuality that checking the user's creation time will happen sometime in the future\nexport const processLogIn = (user) => {\n  const { custom_flow: userPartner = '' /*, created_datetime: createDate = ''*/ } = user;\n\n  // Check if the user is a TRUiC user.\n  if (userPartner && userPartner.toLowerCase() === truicKey.toLowerCase()) {\n    // Check if the partner is currently TRUiC. In this case, we know that the timer is still good, so just return.\n    if (partner === truicKey) {\n      return false;\n    }\n\n    /* DJL - do not use the created time for anything.\n    // If not, then we need to check the created date to see if we are within 30 days of creation\n    const createTime = Date.parse(createDate);\n    if (!isNaN(createTime) && (new Date().getTime() - createTime <= timeout)) {\n      // if under 30 days, set to TRUiC and reinitialize the timer\n      storeInfo(truicKey, truicKey);\n      timer = createTime;\n      if (storage) {\n        storage.setItem(timerKey, `${createTime}`);\n      }\n      return true;\n    }\n    */\n  }\n\n  // Now, check if the partner is TRUiC. This means the user, which an existing user, came in through a TRUiC link this time, even though\n  // they were not created as a TRUiC user. If so, leave it alone\n  if (partner === truicKey) {\n    return false;\n  }\n\n  // Next, check if the partner is set but is not PF. If so, leave it alone (they are currently in a partner pre-purchase).\n  if (partner && partner !== pfKey) {\n    return false;\n  }\n\n  // Finally, it is a PF user. Set the values appropriately. No need to reinitialize\n  storeInfo(pfKey, pfKey, pfKey);\n  return false;\n};\n","import { VARIANTS } from '../constants/register_remagine';\n\nconst storage = window.localStorage || null;\nconst testVariantKey = 'zenbusiness_test_variant';\nexport const BUS_TYPES = {\n  CORP: 'CORP',\n  SCORP: 'S-CORP',\n  LLC: 'LLCX'\n};\n\nexport const getTestVariant = () => {\n  const storageVariantValue = storage ? storage.getItem(testVariantKey) : null;\n  const testVariant = storageVariantValue && Object.values(VARIANTS).includes(storageVariantValue) ? storageVariantValue : 'mvp';\n  return testVariant;\n};\n\n/**\n * Fetches a value from localStorage by namespace, converts the string into an object if it exists,\n * then fetches the specified value by key.\n *\n * @param {String} namespace - the localStorage key to get the value from\n * @param {String} key - the key of the specific value to fetch\n * @returns\n */\nexport const getValueFromLocalStorage = (namespace, key) => {\n  const localStorage = storage ? JSON.parse(storage.getItem(namespace)) : null;\n  const value = localStorage && localStorage[key] !== null ? localStorage[key] : null;\n  return value;\n};\n","const storage = window.localStorage || null,\n  key = 'zenbusiness_is_free_account';\n\nlet isFreeAccount = storage ? (storage.getItem(key) === 'true') : false;\n\nexport const getIsFreeAccount = () => {\n  return isFreeAccount;\n};\n\nexport const setIsFreeAccount = (isSimulated) => {\n  isFreeAccount = !!isSimulated;\n  if (storage) {\n    storage.setItem(key, isFreeAccount);\n  }\n};\n\nexport const clearIsFreeAccount = () => {\n  isFreeAccount = '';\n};\n\nexport const resetIsFreeAccount = () => {\n  if (storage) {\n    storage.removeItem(key);\n  }\n  isFreeAccount = '';\n};\n","\n//combines n functions, flowing left to right, calling each function with the output of the last  function\nexport const pipe = (...fns) => { return (x) => { return fns.reduce((v, f) => { return f(v); }, x); }; };\n\nexport const minLength = (min) => {\n  return function({ value, errors = [] }) {\n    return value.length < min ? {\n      value,\n      errors: [...errors, `This field has a minimum length of ${min}`]\n    } : { value, errors };\n  };\n};\nexport const maxLength = (max) => {\n  return function({ value, errors = [] }) {\n    return value.length > max ? {\n      value,\n      errors: [...errors, `This field has a max length of ${max}`]\n    } : { value, errors };\n  };\n};\nexport const isNumeric = function({ value, errors = [] }) {\n  return !/^\\d+$/.test(value)\n    ? { value, errors: [...errors, 'This field must be numeric'] }\n    : { value, errors };\n};\n\n","import _isNumber from 'lodash/isNumber';\nimport _reduce from 'lodash/reduce';\nimport _trim from 'lodash/trim';\nimport moment from 'moment';\n\nconst allowDotUS = false;\nconst emptyStringRegex = /^\\s*$/;\nconst integerRegex = /^-?\\d+$/;\nconst floatRegex = /^-?\\d*\\.?\\d*$/;\nconst emailRegex =  /^(([^<>()&[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst zipCodeRegex = /^[0-9]{5}(?:-[0-9]{4})?$/;\nconst dollarRegex = /(?=.*?\\d)^\\$?(([1-9]\\d{0,2}(,\\d{3})*)|\\d+)?(\\.\\d{1,2})?$/;\nconst centsRegex = /^\\d*\\.?\\d*¢$/;\n\n// Credit Card Regexes\nconst visaCCRegex = /^4[0-9]{12}(?:[0-9]{3})?$/;\nconst mcCCRegex = /^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$/;\nconst amexCCRegex = /^3[47][0-9]{13}$/;\nconst discCCRegex = /^6(?:011|5[0-9]{2})[0-9]{12}$/;\n\n// Password Regex\n//const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})/;\n\n// EIN/SSN Regex\nconst ssnRegex = /^\\d{3}-\\d{2}-\\d{4}$/;\nconst einRegex = /^\\d{2}-\\d{7}$/;\n\n// Domain Name Regex\nconst domainNameRegex = allowDotUS ? /^(www\\.)?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.(com|us)$/ :  /^(www\\.)?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.com$/;\n\n// PO Box Match strings\nconst poBoxMatchStrings = ['po ', 'pobox ', 'p.o', 'p o', 'p. o', 'post office', 'box '];\n\n// Emoji match unicode codes\nconst emojiRegex = /(\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff])/;\n\n// Invalid Characters Regex\nconst invalidCharsRegex = /^[a-zA-Z0-9 ,.&'-]*$/;\n\nexport default class FieldValidator {\n  constructor(value, humanReadableFieldName) {\n    this.value = _trim(value);\n    this.fieldName = humanReadableFieldName;\n    this.message = '';\n    this.status = true;\n    this.requiredStatus = true;\n  }\n\n  isRequired(customMessage) {\n    if (this.status && !this.value) {\n      this.status = false;\n      this.requiredStatus = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} is required.`;\n    }\n    return this;\n  }\n\n  isInteger(customMessage) {\n    if (this.status && this.value && !integerRegex.test(this.value)) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be a number.`;\n    }\n    return this;\n  }\n\n  isFloat(customMessage) {\n    if (this.status && this.value && !floatRegex.test(this.value)) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be a number.`;\n    }\n    return this;\n  }\n\n  isEmail(customMessage) {\n    if (this.status && this.value && !emailRegex.test(this.value)) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be an email address.`;\n    }\n    return this;\n  }\n\n  isEmailMatch(emailConfirm, customMessage) {\n    const msg = customMessage || `${this.fieldName || 'Email'} confirmation does not match.`;\n    if (!this.status || !this.value) {\n      return this;\n    }\n    if (this.value !== emailConfirm) {\n      this.status = false;\n      this.message = msg;\n    }\n    return this;\n  }\n\n  isZIPCode(customMessage) {\n    if (this.status && this.value && !zipCodeRegex.test(this.value)) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be a ZIP code.`;\n    }\n    return this;\n  }\n\n  isPhoneNumber(customMessage) {\n    if (this.status && this.value) {\n      const\n        strippedNumber = this.value.replace(/\\D/g, ''),\n        startsWithOne = strippedNumber.indexOf('1') === 0,\n        s = startsWithOne ? strippedNumber.substring(1) : strippedNumber;\n\n      if (s.length !== 10) {\n        this.status = false;\n        this.message = customMessage || `${this.fieldName || 'Field'} must be a 10-digit mobile phone number.`;\n      }\n    }\n    return this;\n  }\n\n  isCreditCard(customMessage) {\n    if (!this.status || !this.value) {\n      return this;\n    }\n    if (visaCCRegex.test(this.value)) {\n      this.ccType = 'VISA';\n    } else if (mcCCRegex.test(this.value)) {\n      this.ccType = 'MASTERCARD';\n    } else if (amexCCRegex.test(this.value)) {\n      this.ccType = 'AMEX';\n    } else if (discCCRegex.test(this.value)) {\n      this.ccType = 'DISCOVER';\n    } else {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be a valid credit card number.`;\n    }\n    return this;\n  }\n\n  isDateFormat(format, customMessage) {\n    if (this.status && this.value && (this.value.indexOf('/') === -1 || !moment(this.value, format, true).isValid())) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be formatted as ${format}.`;\n    }\n    return this;\n  }\n\n  isFutureDate(format, testType, customMessage) {\n    const\n      now = moment(),\n      date = moment(this.value, format, true);\n\n    if (this.status && this.value && !date.isSameOrAfter(now, testType)) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be a date in the future.`;\n    }\n    return this;\n  }\n\n  isMonthTwoDigitsYear(customMessage) {\n    return this.isDateFormat('MM/YY', customMessage);\n  }\n\n  isFutureMonthTwoDigitsYear(customMessage) {\n    return this.isFutureDate('MM/YY', 'month', customMessage);\n  }\n\n  isMonthYear(customMessage) {\n    return this.isDateFormat('MM/YYYY', customMessage);\n  }\n\n  isFutureMonthYear(customMessage) {\n    return this.isFutureDate('MM/YYYY', 'month', customMessage);\n  }\n\n  isDayMonthYear(customMessage) {\n    return this.isDateFormat('DD/MM/YYYY', customMessage);\n  }\n\n  isFutureDayMonthYear(customMessage) {\n    return this.isFutureDate('DD/MM/YYYY', 'day', customMessage);\n  }\n\n  isMonthDayYear(customMessage) {\n    return this.isDateFormat('MM/DD/YYYY', customMessage);\n  }\n\n  isFutureMonthDayYear(customMessage) {\n    return this.isFutureDate('MM/DD/YYYY', 'day', customMessage);\n  }\n\n  isYearMonthDay(customMessage) {\n    return this.isDateFormat('YYYY/MM/DD', customMessage);\n  }\n\n  isFutureYearMonthDate(customMessage) {\n    return this.isFutureDate('YYYY/MM/DD', 'day', customMessage);\n  }\n\n  isAgeGreaterThan(age, customMessage) {\n    const\n      ageDate = moment(),\n      date = moment(this.value, 'MM/DD/YYYY', true);\n\n    ageDate.set('year', ageDate.get('year') - age);\n    if (this.status && this.value && date.isAfter(ageDate, 'day')) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be ${age} or older.`;\n    }\n    return this;\n  }\n\n  isCurrency(customMessage) {\n    if (!this.status || !this.value) {\n      return this;\n    }\n    if (centsRegex.test(this.value)) {\n      return this;\n    }\n    if (!dollarRegex.test(this.value.replace(/,/g, ''))) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be a value in dollars and/or cents.`;\n    }\n    return this;\n  }\n\n  isGreaterThan(min, customMessage) {\n    const msg = customMessage || `${this.fieldName || 'Field'} must be greater than ${min}.`;\n    if (!this.status || !this.value || !_isNumber(min)) {\n      return this;\n    }\n    try {\n      const val = parseFloat(this.value);\n      if (val <= min) {\n        this.status = false;\n        this.message = msg;\n      }\n    } catch (e) {\n      this.status = false;\n      this.message = msg;\n    }\n    return this;\n  }\n\n  isGreaterThanEqual(min, customMessage) {\n    const msg = customMessage || `${this.fieldName || 'Field'} must be greater than or equal to ${min}.`;\n    if (!this.status || !this.value || !_isNumber(min)) {\n      return this;\n    }\n    try {\n      const val = parseFloat(this.value);\n      if (val < min) {\n        this.status = false;\n        this.message = msg;\n      }\n    } catch (e) {\n      this.status = false;\n      this.message = msg;\n    }\n    return this;\n  }\n\n  isLessThan(max, customMessage) {\n    const msg = customMessage || `${this.fieldName || 'Field'} must be less than ${max}.`;\n    if (!this.status || !this.value || !_isNumber(max)) {\n      return this;\n    }\n    try {\n      const val = parseFloat(this.value);\n      if (val >= max) {\n        this.status = false;\n        this.message = msg;\n      }\n    } catch (e) {\n      this.status = false;\n      this.message = msg;\n    }\n    return this;\n  }\n\n  isLessThanEqual(max, customMessage) {\n    const msg = customMessage || `${this.fieldName || 'Field'} must be less than or equal to ${max}.`;\n    if (!this.status || !this.value || !_isNumber(max)) {\n      return this;\n    }\n    try {\n      const val = parseFloat(this.value);\n      if (val > max) {\n        this.status = false;\n        this.message = msg;\n      }\n    } catch (e) {\n      this.status = false;\n      this.message = msg;\n    }\n    return this;\n  }\n\n  isStringLength(min = 0, max = 100000, customMessage) {\n    const msg = customMessage || `${this.fieldName || 'Field'} string length must be between ${min} and ${max} characters long.`;\n\n    if (!this.status || !this.value) {\n      return this;\n    }\n    if (this.value.length < min || this.value.length > max) {\n      this.status = false;\n      this.message = msg;\n    }\n    return this;\n  }\n\n  isPassword(customMessage) {\n    const msg = customMessage || `${this.fieldName || 'Password'} must contain at least 8 characters.`;\n\n    if (!this.status || !this.value) {\n      return this;\n    }\n    if (this.value.length < 8) {\n      this.status = false;\n      this.message = msg;\n    }\n    return this;\n  }\n\n  isPasswordMatch(passwordConfirm, customMessage) {\n    const msg = customMessage || `${this.fieldName || 'Password'} confirmation does not match.`;\n    if (!this.status || !this.value) {\n      return this;\n    }\n    if (this.value !== passwordConfirm) {\n      this.status = false;\n      this.message = msg;\n    }\n    return this;\n  }\n\n  isNotPOBox(customMessage) {\n    const msg = customMessage || `${this.fieldName || 'Address'} cannot be a post office box.`;\n    if (!this.status || !this.value) {\n      return this;\n    }\n    const\n      valuelc = _trim(this.value.toLowerCase()),\n      isPO = _reduce(poBoxMatchStrings, (collect, str) => {\n        if (valuelc.indexOf(str) === 0) {\n          return true;\n        }\n        return collect;\n      }, false);\n\n    if (isPO) {\n      this.status = false;\n      this.message = msg;\n    }\n    return this;\n  }\n\n  isSSN(customMessage) {\n    if (this.status && this.value && !ssnRegex.test(this.value)) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be a valid Social Security number.`;\n    }\n    return this;\n  }\n\n  isEIN(customMessage) {\n    if (this.status && this.value && !einRegex.test(this.value)) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be a valid EIN number.`;\n    }\n    return this;\n  }\n\n  isDomainName(customMessage) {\n    if (this.status && this.value && !domainNameRegex.test(this.value)) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must have a valid domain name format.`;\n    }\n    return this;\n  }\n\n  isAddressLine2(customMessage) {\n    if (this.status && this.value && integerRegex.test(this.value)) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must have a suite or other indicator.`;\n    }\n    return this;\n  }\n\n  containsEmojis(customMessage) {\n    if (this.status && this.value && emojiRegex.test(this.value)) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must not include emoji.`;\n    }\n    return this;\n  }\n\n  hasInvalidChars(customMessage) {\n    if (this.status && this.value && !invalidCharsRegex.test(this.value)) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must not include invalid characters.`;\n    }\n    return this;\n  }\n\n  isSameState(state, customMessage) {\n    if (this.status && this.value && this.value !== state) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must be the same as your domestic jurisdiction`;\n    }\n    return this;\n  }\n\n  isEmptyString(customMessage) {\n    if ( emptyStringRegex.test(this.value) ) {\n      this.status = false;\n      this.message = customMessage || `${this.fieldName || 'Field'} must not be blank.`;\n    }\n    return this;\n  }\n}\n","/**\n * Determines if app is running in a mobile device\n * @returns {boolean}\n */\nexport function isRunningInMobile() {\n  return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n}\n\n/**\n * Gets app is running in a tablet or a mobile\n * @return {string}\n */\nexport function getMobileDeviceType() {\n  return (/(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(navigator.userAgent.toLowerCase())) ? 'tablet' : 'mobile';\n}\n"],"names":["webViewBrowsers","UAParser","BROWSER","VERSION","NAME","webViewOs","OS","WebView","userAgent","webViewUaParser","browser","os","browserName","appVersion","platform","getResult","isWebView","toLowerCase","getAttributes","navigator","CONTACT_US_PHRASE","replaceLinkablePhrases","text","textToRender","contactUsIndex","indexOf","React","substring","href","URLS","CONTACT_US","length","reportError","err","opts","window","Sentry","console","log","withScope","scope","setLevel","severity","setExtra","metaData","captureException","groupCollapsed","error","JSON","stringify","groupEnd","identifyUser","user","configureScope","setUser","domain","audience","auth","auth0","clientID","allowSignUp","accessToken","idToken","zbClaims","loggedIn","timeout","oboEmail","email","enableOidc","oidcClientId","localLoginAppOrigin","isLocal","location","hostname","includes","getStorageItem","key","value","sessionStorage","getItem","localStorage","setStorageItem","setItem","removeStorageItem","removeItem","getZbClaims","cookie","Cookies","get","parse","decodeURIComponent","ID_TOKEN_KEY","ACCESS_TOKEN_KEY","OBO_KEY","EMAIL_KEY","loginActionComplete","resetActionComplete","storage","clearTokens","clearInterval","setupLoggedIn","expireMS","exp","expireDate","Date","setUTCSeconds","getTime","token","decode","setInterval","getParameterByName","name","match","RegExp","exec","hash","replace","init","initializeAuth0","response","overrideDomain","eo","oci","llao","getAccessToken","getOBO","getLoggedInEmail","zbEmail","isLoggedIn","login","loginData","rt","Promise","resolve","reject","stateValue","Math","floor","random","redirectUri","redirectTo","username","password","set","path","finalRedirectTo","startsWith","origin","authOptions","state","nonce","responseType","logger","success","logAction","document","protocol","host","redirectToAfterSuccessfulLogin","_isString","resetPassword","changePassword","connection","loginAndGoToPage","clearAuthStorage","arguments","undefined","urlForLoginPage","encodeURIComponent","clear","logout","logoutUrl","assign","returnTo","recordLoginInformation","cb","storageState","Error","client","userInfo","getLoginRedirectTo","removeLoginRedirectTo","getAccountUUID","accountUuid","decodedToken","getUserUUID","userUuid","CompleteOrderTypes","COMPLETED","LLC","CORP","REGISTERED_AGENT","WORRY_FREE","NY_PUBLICATION","OrderTypes","Object","EIN","BUSINESS_LICENSE_REPORT","NAME_RESERVATION","INCOMPLETE","completeOrderTypeValues","values","isOrderCompleteByType","businessOrderType","ignoreBusinessOrderType","inferOrderStatusByType","cleanOrderData","order","orderWithoutNullPrices","order_data","orderData","order_items","orderItems","servicesWithNullPrice","reduce","map","_ref","price","service","_isEmpty","filter","_ref2","_ref3","removeServicesWithNullPrice","data","find","_ref4","item","_ref5","removeServicesThatAreNotInBothArrays","getIncompleteOrder","orders","_find","order_status","some","_ref7","isFormation","every","_ref6","isBOFOnly","require","getAddressType","matchedResult","type","isLong","addressComponent","address_components","comp","_indexOf","types","getCity","address","addressParts","split","locality","neighborhood","sublocalityLevel1","sublocality","buildAddress","addressLine2","route","streetNumber","getStreetNumber","streetNum","idx","_trim","addressLine1","join","city","county","getCounty","stateName","zip","zipSuffix","zipCode","lat","geometry","lng","addressIsGoogle","validateGeoResult","origAddress","matchedStreetNum","matchedRoute","apiKey","getInit","ZENBUSINESS_GOOGLE_MAPS_KEY","initializeAPIKey","_get","initializeMaps","callback","scriptCallback","round","_isFunction","callbackName","src","ref","getElementsByTagName","script","createElement","async","parentNode","insertBefore","loadJS","getUrlParams","url","params","args","argList","i","argVals","message","param","sanitizeRelativeUrl","pathname","search","URL","encodeURI","parseUrl","urlBase","storageKey","sscid","enabled","baseUrl","account","initialize","shareASale","e","a","r","replaceAll","isEnabled","onPayment","totalPrice","id","xtype","env","debugLogging","toFixed","pixelURL","width","height","alt","isVmaJurisdiction","jurisdiction","hasVmaProduct","isVirtualBusinessAddressEnabled","isVmaEnabledJurisdiction","VMA_ENABLED_STATES","getCookie","cookieName","parts","pop","shift","V4_SERVICES_FLAG","isV4ServiceEnabled","flags","serviceKey","servicesFlag","wantedService","String","serviceEntry","keys","enabledJurisdictions","Array","isArray","wantedJurisdiction","entry","infoCSS","action","title","info","orderDataSentDuringRegistration","setOrderDataSentDuringRegistration","validateOrderDataSentDuringRegistration","result","getOrder","orderName","companies","ordersByCompany","activeId","orderList","orderId","AUTOFILL_INPUT_NAMES","autoComplete","noPaste","stopPropagation","preventDefault","renderCleaveField","fieldKey","props","labels","placeholders","className","onChange","refFn","cleaveOptions","sardineId","disabled","disablePaste","label","noteLabel","placeholder","errorClass","errorLabel","inputMode","inputProperties","inputType","options","isAnimatedFieldClass","onPaste","StyledDiv","htmlFor","Cleave","_extends","htmlRef","phoneNumberCleaveOptions","blocks","delimiter","delimiterLazyShow","numericOnly","creditCardCleaveOptions","creditCard","monthYearCleaveOptions","date","datePattern","yearMonthDayCleaveOptions","monthDayYearCleaveOptions","cvcCleaveOptions","zipCodeCleaveOptions","currencyCleaveOptions","numeral","numeralDecimalScale","numeralPositiveOnly","stripLeadingZeroes","prefix","currencyValuePerShareCleaveOptions","integerCleaveOptions","integerCleaveNoGroupOptions","numeralThousandsGroupStyle","floatCleaveOptions","ssnCleaveOptions","einCleaveOptions","styled","div","renderAnimateTextField","inputElementOverlay","maxLength","onKeyPress","tabIndex","renderTextField","renderAnimateField","renderField","renderEmailField","renderPasswordField","renderTextArea","rows","cols","renderPhoneNumberField","renderCreditCardField","renderMonthYearField","renderMonthDayYearField","renderYearMonthDayField","renderCVCField","renderZipCodeField","renderCurrencyField","renderIntegerField","noDelimiter","renderFloatField","renderSSNField","renderEINField","renderAddressColumnValue","country","clzName","cityState","isUS","renderNameColumnValue","firstName","middleName","lastName","suffix","postFix","SUFFIX_IN_NAME","renderBreakLines","_map","_","index","rudderAnalytics","RudderAnalytics","PII_FIELDS_TO_HASH","defaultIntegrations","All","hashed","sendUserID","Mixpanel","Snowflake","isReady","hasDestination","noopMode","rudderstackApiKey","rudderstackDataplaneUrl","getIntegrations","setRudderStackConfig","initData","rudderstack","dataPlaneUrl","rudderstackDataPlaneUrl","initClickstream","debug","load","integrations","onLoaded","warn","getSystemProperties","form_factor","isRunningInMobile","getMobileDeviceType","channel","logEventSent","eventName","properties","trackEvent","eventProperties","snakeCaseEventName","mergedProperties","track","trackPage","pageName","pageProperties","page","userId","userProperties","ready","noop","marketingIds","getMarketingIds","ids","gclid","msclkid","hashedProperties","hashFields","fields","obj","forEach","field","sha256","trim","identify","unidentifyUser","reset","config","initializeSardine","sardine","getSardineConfig","coupon49to99","note","explanation","coupon49to119","couponPartner39to119","coupons","starter_plan_v12","starter_plan_v13","starter_plan_v14","starter_plan_v15","starter_plan_v16","starter_plan_v17","starter_plan_v18","starter_plan_v19","starter_plan_v20","starter_plan_v21","starter_plan_v23","starter_plan_v24a","starter_plan_v24b","starter_plan_v24c","starter_plan_v26","partner_starter_plan_v1","partner_starter_plan_v2","partner_starter_plan_v3","rvshare_starter_plan_v1","products","accountant1800","accounting","amendment","anonymity","annualReport","annualReportService","banking","bankingResolution","basicEmail","bof","businessKit","businessLicense","corporateDocs","cpaConsult","dbaEntity","dbaCompliance","domainName","domainNameMultipleTLDs","domainNamePrivacy","dudaWebsiteBuilder","ein","expeditePriority","expediteRush","expenseTrackingWithTaxFiling","formation","futureFileDate","goodStanding","logoKit","initialCPAScreening","insurance","international","naicsUpdate","nameRes","nyPub","nyPubUpsell","opAgree","ra","raSA","raSADash","smbEcommAddon","smbWebsiteEcomm","staticWebsite","taxPreparation","upsell","wfg","wfgInitialReport","virtualBusinessAddress","registeredAgentService","vanityProduct","zbmPro","zbmProPF","pricing","test","accountingGrowAndScaleMonth","accountingQuickStartMonth","accountingUpAndRunningMonth","anonymityYear","bankOfAmericaOffer","bankingYear","basicEmailYear","domainNameYear","domainNamePrivacyYear","insuranceYear","insuranceFrom","raFirstYearOffer","raYear","smbEcommAddonMonth","smbEcommAddonYear","smbWebsiteMonth","smbWebsiteYear","smbWebsiteEcommMonth","smbWebsiteEcommYear","staticWebsiteYear","taxPreparationYear","websiteToolsBundle","wfgYear","zbBankingPreferredMonthly","zbmProMonth","zbmProYear","domainLinkOnDash","usePlansBasedPricing","standaloneServices","plans","taxTestVariant","recurlyEnabled","applePayEnabled","getTaxTestVariant","setTaxTestVariant","getBOFTestVariant","setBOFTestVariant","getIsBofSummer2024PromoEnabled","setIsBofSummer2024PromoEnabled","isRecurlyEnabled","setRecurlyEnabled","isApplePayEnabled","setApplePayEnabled","postPurchaseEntityCheckEnabled","isPostPurchaseEntityCheckEnabled","setPostPurchaseEntityCheckEnabled","getPlanBasedPricing","planLevel","plansKeys","POST_RA_URLS","BASE","RA_URLS","base","servicePrices","planKey","notifySentry","errorName","errorCode","status","responseData","httpStatus","setProducts","REG_URLS","POST_LLC_URLS","POST_CORP_URLS","POST_ADDONS","initProducts","initPricing","initPlans","initStandaloneServices","_assign","getAffiliatePricingUUID","term","period","couponUuid","itm","related_service_pricing","pricingService","interval","serviceByCoupon","coupon","uuid","metadata","standaloneServicesLength","getAffiliatePricingUUIDByPrice","amount","isAccountingEnabled","getAccountingGrowAndScaleMonthlyPrice","getAccountingQuickStartMonthlyPrice","getAccountingUpAndRunningMonthlyPrice","isAmendmentEnabled","getAmendmentPrice","getAnonymityYearlyPrice","getAnnualReportPrice","getAnnualReportServicePrice","isBankingEnabled","getBankingYearlyPrice","isBankingResolutionEnabled","getBankingResolutionPrice","isBasicEmailEnabled","getAccountant1800Price","getBasicEmailYearlyPrice","isBusinessLicenseEnabled","isRegisteredAgentEnabled","getBusinessLicensePrice","getRegisteredAgentServicePrice","getRegisteredAgentLicensePrice","isCorporateDocsEnabled","getCorporateDocsPrice","isBusinessKitEnabled","getBusinessKitPrice","getBeneficialOwnershipFilingPrice","beneficialOwnershipFiling","getOngoingBofCompliancePrice","ongoingBofCompliance","getOngoingBofComplianceNoCouponPrice","ongoingBofComplianceNoCoupon","getOngoingBofComplianceCoupon","allCoupons","external_coupon_id","getBofModificationPrice","beneficialOwnershipModification","getOngoingBofModificationPrice","beneficialOwnershipOngoingModification","getCPAConsultPrice","isDBAEntityEnabled","getDBAEntityPrice","getDBAEntityFees","requestedJurisdiction","filingFees","DBA_IGNORE_STATES","dba_entity","fees","_isNumber","isDBAComplianceEnabled","getDBAComplianceYearlyPrice","isDomainNameEnabled","getDomainNameYearlyPrice","isDomainNamePrivacyEnabled","getDomainNamePrivacyYearlyPrice","isDomainNameMultipleTLDs","isDudaWebsiteBuilderEnabled","isEINEnabled","getEINPrice","getExpeditePriorityPrice","getExpediteRushPrice","isFormationEnabled","getFormationPrice","isFutureFileDateEnabled","nowOverride","now","parseISO","toISOString","start","getYear","end","isWithinInterval","getFutureFileDatePrice","getGoodStandingPrice","getLogoKitPrice","getInitialCPAScreeningPrice","isInsuranceEnabled","getNameResPrice","isNYPubEnabled","isNYPubUpsellEnabled","getNYPubPrice","getPAPubPrice","paPub","getGAPubPrice","gaPub","getSplitNYPubFees","NY","ny_publication","tmpKey","countyFee","domestic","albany","stateFee","getNYPubFees","isOpAgreementEnabled","getOpAgreementPrice","isRAEnabled","getRAYearlyPrice","getRAFirstYearPrice","isRAOfferEnabled","getSMBEcommAddonMonthlyPrice","getSMBEcommAddonYearlyPrice","getSMBWebsiteMonthlyPrice","getSMBWebsiteYearlyPrice","getSMBWebsiteEcommMonthlyPrice","getSMBWebsiteEcommYearlyPrice","isStaticWebsiteEnabled","getStaticWebsiteYearlyPrice","getTaxPreparationYearlyPrice","isUpsellEnabled","isWFGEnabled","getBankOfAmericaOfferPrice","isAccountant1800Enabled","getWFGYearlyPrice","isWFGInitialReportEnabled","getVirtualBusinessAddressPrice","getWFGInitialReportPrice","getWebsiteToolsBundlePriceFromAddonOrStandalone","getEinBusinessDocsBundleFromAddonOrStandalone","einBusinessDocsBundle","isExpenseTrackingWithTaxFilingEnabled","getZbBankingPreferredMonthlyPrice","getZBMProMonthlyPrice","getZbTaxAdviceMonthlyPrice","zbTaxAdviceMonthly","getZbTaxAdviceYearlyPrice","zbTaxAdviceYearly","getZbBizTaxPrepPriorYearPrice","zbBizTaxPrepPriorYear","getZbBizTaxPrepMonthlyPrice","zbBizTaxPrepMonthly","getZbBizTaxPrepYearlyPrice","zbBizTaxPrepYearly","getZbTaxAdviceBizTaxPrepMonthlyPrice","zbTaxAdviceBizTaxPrepMonthly","getZbTaxAdviceBizTaxPrepYearlyPrice","zbTaxAdviceBizTaxPrepYearly","getZBMProYearlyPrice","getCoupon","formatVanityProduct","product","productId","Fragment","explanationSentences","firstExplanationSentence","style","fontSize","lineHeight","VANITY_STATE_COPY","titlePieces","slice","benefitsItems","benefit","description","bottomLineParagraphs","paragraph","getVanityProduct","pageTitle","active","getVanityProductPrice","priceWithoutCoupon","getPostPurchaseVanityProduct","activeTest","postPurchase","prototype","hasOwnProperty","call","requirements","allowedJurisdictions","getPostPurchaseVanityProductPrice","DEFAULT_COUPON","coupon_uuid","getServicePricingFromPlan","plan","getCouponById","couponId","getCouponForService","servicePricing","getPriceAndCouponForService","servicePrice","serviceCouponUUID","serviceCoupon","serviceCouponAmount","getDiscountPercentForService","priceAmount","couponAmount","calculateCouponDiscountPercent","getYearlyPriceForService","getMonthlyPriceForService","ceil","getFirstYearPriceForService","calculateItemTotalToday","isActive","prices","today","getPeriodicPrices","yearlyPrice","priceFees","nextYear","perYear","getStateFees","domesticJurisdiction","getAddOnItemFee","itemBeingPurchased","itemKey","isItemEnabled","periodicPrice","fee","findItemInAddOns","getTotalToday","purchase","companyType","priceType","getCompanyType","getPlanLevel","expedite","planPrice","stateFilingFees","calculatedPrice","calculatePlanPrice","planCoupon","expediteFee","getExpediteFees","expediteIncludedInPlan","stateFormationFee","calculateStateFormationFees","llc_formation","corp_formation","addOnFees","getAddOnFees","worryFree","parseStringToInt","radix","parseInt","parseBoolToString","checkEmpty","normalizeInitParams","query","fromDashboard","hasSCorp","fromBNG","hasSCorpWordUpdate","_toUpper","_toLower","getExpediteHeader","expediteFees","timerCallback","deadline","getDeadline","moment","tz","hour","minute","second","millisecond","isBefore","add","day","complete","getComplete","clone","exData","max_time","maxTime","dayComplete","timeLeft","monthComplete","timer","getDeadlineTimer","setTimeout","toDate","cleanShares","cleanParValue","ASST_SEC","authorizedSignatory","ceo","cto","customer","director","electiveCEO","manager","member","officer","officialStateContact","PRES","SEC","sopContact","TRSR","VP","compareItem","item1","item2","compareUsers","user1","user2","companyName","convertUser","contactType","offStateContact","selectedKey","isCustomer","isOffStateContact","isSOPContact","isElectiveCEO","isAuthSig","selected","u","isPrincipal","phoneNumber","careOf","convertUsers","users","userData","getContactInfoReducer","collect","p","customerIncluded","offStateContactIncluded","sopContactIncluded","electiveCEOIncluded","authSigIncluded","generatePrincipals","members","managers","directors","officers","userTypes","convertedMembers","convertedManagers","convertedDirectors","convertedOfficers","principals","_concat","_reduce","getContactInclusions","push","_forEach","principal","getContactTypeForChoice","contact","pageConfig","skipKey","retVal","t","l","getContactTypeForDropdown","generateAuthSigPrincipals","managerType","titles","_filter","_cloneDeep","authSigTitle","thirdPartyTrackingCSS","debugCookieEnabled","debugLoggingEnabled","googleads","zenbusinessEnv","release","visitUUID","selectedPlan","accountUUID","userUUID","setRudderStackApiInfo","initAvoRudderstack","setVisitor","visitorData","buildEventsData","localData","globalData","fixedRelease","fixedInputValue","inputValue","toString","fixedTestingIdVariant","testing_id_variant","normalizedUrl","pageViewed","COMPANY_URLS","normalizePage","originalUrl","standardizePathname","trackEventMap","true","false","mixpanelTrackPlans","planId","setMixpanelSelectedPlan","initializeGoogleAds","envAds","loadGoogleAds","body","appendChild","loadSardine","sardineContext","sardineConfig","ldFlag","flow","orderUuid","onload","_Sardine","createContext","clientId","sessionKey","userIdHash","environment","parentElement","trackView","pageDetails","ignoreMixpanel","deviceType","zenIsMobile","dataToSend","clickstreamTrackPage","customDestinationPageName_","pageType","experimentVariation","experimentFlagKey","experimentSlug","pageSlug","pageCategory","pageSection","canonicalPath","initialReferrer","initialReferringDomain","modalName","getClickDetails","clickText","clickType","getButtonClickDetails","getArrowClickDetails","trackClick","clickEventDetails","clickUrl","clickstreamTrackEvent","elementText","elementName","elementAsset","elementStyle","elementPosition","elementValue","screenName","buttonFunction","component","rudderstackTrack","eventCategory","eventAction","eventLabel","eventValue","additionalData","ecommProductUuid","ecommProductSku","ecommProducts","ecommProductName","ecommProductPrice","ecommProductQuantity","productPriceOrFee","productInterval","productRenewal","couponPrice","ecommProductCategory","ecommOrderUuid","ecommDiscount","ecommRevenue","ecommCurrencyCode","funnelAffiliate","funnelFlow","funnelVariation","funnelVersion","funnelSegment","purchasedCompleted","getPhoneDetails","details","activeFlow","getOrderTracking","purchaseSource","isFreeAccount","getIsFreeAccount","ps","flow_name","getEntryPointGroup","device_type","mobileDeviceType","purchase_source","testID","createAdditionalData","getRelatedPlanOption","related_plan_option","getPlanPricingDetails","infoKey","related_plan_pricing","getRelatedPlanPricing","getAddOnServicesForPlan","getPlanOptionDetails","getAddOnService","allAddOnServices","addon","getCouponByUUID","getCouponForPlan","getCouponUUIDForPlan","couponUUID","getCouponForAddOnService","getCouponUUIDForAddOnService","getCouponAmountForPlan","getCouponAmountForAddOnService","getPriceForPlan","getPriceForAddOnService","addOns","getAffiliatePricingUUIDForPlan","getDiscountedPriceForAddOnService","getDiscountedPriceForPlan","getStandaloneService","getPricingDetailsForService","standaloneService","getPriceForStandaloneService","getCouponUUIDForStandaloneService","getCouponForStandaloneService","getCouponAmountForStandaloneService","getDiscountedPriceForStandaloneService","getStateFeesDetails","stateFees","stateCode","serviceName","planUtils","standaloneServiceUtils","getExpediteFeeInfoByJurisdiction","expediteLevel","getFeesForServiceByState","getFeesTermForServiceByState","quickFormationData","quickFormationDataClone","quickOrder","quickBody","dateVar","formationType","uniqueEmailAddress","uniqueFirstName","first_name","uniqueLastName","last_name","uniqueEntityName","entity_name","oData","lead_uuid","uuidv4","domestic_jurisdiction","business_entity_name","acc_entity_name","acc_first_name","acc_last_name","acc_entity_type","element","registered_agent","services","ein_creation","online_tools","completed_action","completed_action_index","business_entity_type","entity_type","quickOrderApi","qdata","axios","post","generateSaleType","brand","target","itemPrice","modifier","generateSaleTypeByBusinessTypeAndPlanLevel","businessTypeToTarget","dispatch","updateState","isProxyUsage","visitProcessed","cachedUrl","overrideFrom","overrideReferrer","overrideParams","from","referrer","urlParams","zlscout","resetPartnerStorage","resetIsFreeAccount","reinitialize","resetAllData","resetAllAccountData","visituuid","getVisitUUID","website","charAt","substr","convertWebsiteUrl","landingUrl","partner","plan_partner","entryPointGroup","source","utm_source","utmSource","medium","utm_medium","utmMedium","campaignid","campaign","utm_campaign","utmCampaign","content","utm_content","utmContent","keyword","utm_term","utmTerm","CT","mixpaneldistinctid","mixpanelId","campaignsource","campaignmedium","campaignname","affiliateId","bannerId","campaignterm","campaigncontent","mixpanelid","visitData","setVisit","landing_url","affiliate_id","banner_id","setCampaignmedium","setCampaignSource","setCampaignName","forceNewVisit","processPartner","getPartner","setPartner","entry_point_group","initializationService","then","setInitialization","initializeData","catch","finally","initProgressBar","zb","setGlobalProgressBar","current","steps","setReducerProgressBar","progressBarData","flowOrder","currentStep","stepIndex","PROGRESS_BAR_ACTIONS","SET_PROGRESS_BAR","payload","resetReducerProgressBar","RESET_PROGRESS_BAR","dateTime","oct15CurrentYear","getFullYear","apr15CurrentYear","initializationVisitUUID","visitUUIDStorageKey","setThirdParty","requestData","inviteeCode","invitee_code","setThirdPartyVisitor","getFromCookie","stringData","visitUuid","validateUuid","visit_uuid","expires","toUTCString","storeReducer","getReducerSnapshot","defaultVal","storeLocalReducer","initializeReducer","initialData","invalidateDate","invalidateInterval","timeKey","timeData","createTime","store","initializeLocal","initializeLocalReducer","storeLocal","clearLocal","flows","complete_cora","complete_corp","complete_ein","complete_llc","complete_wfg","complete_nypub","register_accounting","register_amendment","register_cora","register_domain_v2","register_email_v2","register_ein","register_goodstanding","register_logokit","register_nameres","register_nypub","register_smb_website","register_smb_website_ecomm","register_wfg","register_business_kit","register_bof","register_bof_modification","register_stock_setup","registration","business_name_generator","register_vanity","setFlows","initFlows","getCompleteCorpFlowId","getCompleteEINFlowId","getCompleteLLCFlowId","getCompleteNYPubFlowId","getCompleteWFGFlowId","getRegisterAccountingFlowId","getRegisterDomainV2Id","getRegisterEmailV2Id","getRegisterEINFlowId","getRegisterGSFlowId","getRegisterLogoKitFlowId","getRegisterNameresFlowId","getRegisterNYPubFlowId","getRegisterSMBWebsiteEcommFlowId","getRegisterSMBEcommAddonFlowId","register_smb_ecomm_addon","getRegisterSMBWebsiteOrEcommFlowId","register_smb_website_or_ecomm","getRegisterSMBWebsiteFlowId","getRegisterWFGFlowId","getRegistrationFlowId","getRegisterBusinessKitFlowId","getBusinessNameGeneratorFlowId","getRegisterStockSetupFlowId","getBeneficialOwnershipFilingId","codeToActionErrorMap","DATA_INTEGRITY_ERRORS","freeze","MATCHING_NAME","codeToDataIntegrityErrorMap","codeToCardNumberErrorMap","codeToCVCErrorMap","codeToExpDateErrorMap","codeToZipCodeErrorMap","codeToPasswordErrorMap","allHandledPaymentErrors","paymentErrorButtons","badRequest","cardNumberInvalid","cvcInvalid","dataIntegrity","dataMissingError","debitCard","duplicateEmail","emailExists","emailInvalid","emailUndeliverable","expDateInvalid","expDateFutureInvalid","expirationInvalid","expiredCard","genericStripe","incorrectCVC","incorrectDate","incorrectNumber","incorrectZip","insufficientFunds","invalidAmount","invalidCard","invalidCardType","invalidCVC","invalidNumber","invalidZip","limitExceeded","maintenanceMode","matchingName","notFound","notSupported","passwordInvalid","paymentError","processingError","serverError","threeDSecureRequired","tokenError","tryAgainStripe","unauthorized","paymentErrorMessages","SUPPORT_PHONE_PARENTHESIZED","expDateTwoDigitsYearInvalid","passwordDictionary","passwordHistory","passwordNoUserInfo","passwordStrength","analyzePaymentFields","checkPassword","useTwoDigitsExpYear","cardNumber","cardNumberRaw","expDate","cvc","cardNumberError","Validator","isCreditCard","cvcError","isInteger","isStringLength","passwordError","isPassword","expDateFutureError","expDateFormatError","isMonthTwoDigitsYear","isFutureMonthTwoDigitsYear","isMonthYear","isFutureMonthYear","expDateError","actionError","analyzePaymentError","fieldErrors","dataIntegrityError","zipCodeError","hasFieldError","Boolean","fatalError","analyzePaymentPageStatus","checkTOS","cardId","tosAgree","tosIsOK","passwordIsOK","PAGE_STATUS","OK","NEEDS_REQUIRED","generateCouponExplanation","explanationRaw","discountedPrice","basePrice","getCouponExplanation","planPriceRaw","corp","llc","entryPoint","setAppEntryPoint","getAppEntryPoint","getQueryParameterByName","queryString","results","initializePlaid","plaid","defaultPlans","level1","expense_tracking_with_tax_filing","addons","auto_includes","annual_report_service","banking_resolution","basic_email","business_license_report","change_of_registered_agent","corporate_docs","cpa_consult","domain_name_privacy","domain_name_reg","initial_cpa_screening","operating_agreement","registered_agent_service","static_website","tax_preparation","worry_free_service","level2","level3","raLevel1","raLevel2","nameAvailabilitySearch","articlesIncorporation","stateFiling","chat","dashboard","registeredAgent","changeOfAgent","ein2553","operatingAgreement","nyPublication","bookkeeping","priority","rush","autoIncludes","packages","standalones","orderPlanData","syncUpPlan","level","currentLevelPlan","setPlans","initPkgs","initSS","formatted","existingInterval","thisInterval","isAutoIncludedInPlan","_findIndex","ai","getMinimumCoRAPlanYearlyPrice","getPlanDetails","includeCallouts","removeCheckMarks","noExpedite","isSCorp","toRemove","list","getExpenseTrackerAndTaxFilingPlanYearlyPrice","businessType","getEINBusinessDocsBundlePrice","ein_business_docs_bundle","getWebsiteToolsBundleYearlyPrice","website_tools_bundle","getPackage","pkg","getEINBizDocsOaBundlePrice","ein_bizdocs_oa_bundle","getBizDocsBlrBundlePrice","bizdocs_blr_bundle","timerKey","entryPointGroupKey","attributionKey","pfKey","truicKey","allowedHosts","processTimer","timerStr","truicEnabled","attribution","storeInfo","epg","attr","setStoredItem","initializePartner","removeTimer","newPartner","newEntryPointGroup","newAttribution","getCampaignName","isTRUiC","isPF","setPartners","truic","checkNonTruicURLPartner","refParse","urlPartner","paramPartner","paramEntryPointGroup","truicToPFFlow","processPartnerTruicToPFFlow","resetVisit","nonTRUiCPartner","processPartnerTruicFlow","processLogIn","custom_flow","userPartner","getTestVariant","storageVariantValue","VARIANTS","getValueFromLocalStorage","namespace","setIsFreeAccount","isSimulated","pipe","_len","fns","_key","x","v","f","minLength","min","errors","max","isNumeric","emptyStringRegex","integerRegex","floatRegex","emailRegex","zipCodeRegex","dollarRegex","centsRegex","visaCCRegex","mcCCRegex","amexCCRegex","discCCRegex","ssnRegex","einRegex","domainNameRegex","poBoxMatchStrings","emojiRegex","invalidCharsRegex","FieldValidator","constructor","humanReadableFieldName","this","fieldName","requiredStatus","isRequired","customMessage","isFloat","isEmail","isEmailMatch","emailConfirm","msg","isZIPCode","isPhoneNumber","strippedNumber","ccType","isDateFormat","format","isValid","isFutureDate","testType","isSameOrAfter","isDayMonthYear","isFutureDayMonthYear","isMonthDayYear","isFutureMonthDayYear","isYearMonthDay","isFutureYearMonthDate","isAgeGreaterThan","age","ageDate","isAfter","isCurrency","isGreaterThan","parseFloat","isGreaterThanEqual","isLessThan","isLessThanEqual","isPasswordMatch","passwordConfirm","isNotPOBox","valuelc","str","isSSN","isEIN","isDomainName","isAddressLine2","containsEmojis","hasInvalidChars","isSameState","isEmptyString"],"sourceRoot":""}