CINXE.COM
Netlify
<!doctype html><html lang="en"><head><meta charset="utf-8"/><title>Netlify</title><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#ffffff"/><meta name="google-site-verification" content="G4JqDTXMHpDyWoqIRwgw8PBqg-AncXqtdkHehcOR7kc"/><meta name="description" content="Start building the best web experiences in record time"/><meta name="slack-app-id" content="A05P27DR8C8"><link rel="preconnect" href="https://api.commandbar.com" crossorigin/><link rel="preconnect" href="https://featureflags.netlify.com" crossorigin/><link rel="preconnect" href="https://screenshot-proxy.netlify.app" crossorigin/><link rel="apple-touch-icon" sizes="180x180" href="https://www.netlify.com/v3/static/favicon/apple-touch-icon.png"/><link rel="icon" type="image/x-icon" href="/favicon.ico"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png"/><link href="/style/app.css" rel="stylesheet"/></head><body><svg style="bottom: 0; position: absolute; z-index: -1" aria-hidden="true"><defs><symbol id="netlify-logomark" viewBox="0 0 128 128"><path style="transition: fill 200ms ease-out" fill="var(--logoDiamond)" d="m125.2 54.8-52-52L71.3.9 69.2 0H58.8l-2.1.9-1.9 1.9-52 52-1.9 1.9-.9 2.1v10.3l.9 2.1 1.9 1.9 52 52 1.9 1.9 2.1.9h10.3l2.1-.9 1.9-1.9 52-52 1.9-1.9.9-2.1V58.8l-.9-2.1-1.8-1.9z"/><path style="transition: fill 200ms ease-out" fill="var(--logoN)" d="M78.9 80.5H71l-.7-.7V61.3c0-3.3-1.3-5.9-5.3-6-2-.1-4.4 0-6.9.1l-.4.4v24l-.7.7h-7.9l-.7-.7V48.1l.7-.7H67c6.9 0 12.6 5.6 12.6 12.6v19.8l-.7.7z"/><path style="transition: fill 200ms ease-out" fill="var(--logoSpark)" d="m38.4 30.8 7.3 7.3v5.8l-.8.8h-5.8l-7.3-7.3v-1.1l5.5-5.5h1.1zm.2 37.2v-8l-.7-.7h-28l-.7.7v8l.7.7H38l.6-.7zm.5 15.7L31.8 91v1.1l5.5 5.5h1.1l7.3-7.3v-5.8l-.8-.8h-5.8zM60 11.3l-.6.7v25l.7.7H68l.7-.7V12l-.7-.7h-8zm0 79.1-.7.7v25l.7.7h8l.7-.7v-25l-.7-.7h-8zm58.1-31h-28l-.7.6v8l.7.7h28.1l.7-.7v-8l-.8-.6z"/></symbol><symbol id="netlify-logo" viewBox="0 0 48 48"><use href="#netlify-logomark"/></symbol><symbol id="netlify-logo-mono" viewBox="0 0 48 48"><use href="#netlify-logomark"/></symbol></defs></svg><style>:root { --logoDiamond: none; --logoN: rgb(var(--colorRgbFacetsTeal800)); --logoSpark: rgb(var(--colorRgbFacetsTeal400)); } .tw-dark { --logoN: rgb(var(--colorRgbFacetsNeutralDark000)); --logoSpark: rgb(var(--colorRgbFacetsTeal200)); } #netlify-logo-mono { --logoN: currentColor; --logoSpark: currentColor; }</style><div id="root" tabindex="-1"></div><div hidden><span id="open-in-new-tab">Opens in a new tab</span></div><script nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK">// crypto.randomUUID() polyfill (() => { if ( window.crypto && typeof window.crypto.randomUUID !== 'function' && typeof window.crypto.getRandomValues === 'function' && typeof Uint8Array === 'function' ) { function randomUUID() { const callback = (c) => { const num = Number(c); return (num ^ (window.crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (num / 4)))).toString(16); }; return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, callback); } console.log('Polyfilling crypto.randomUUID()'); window.crypto.randomUUID = randomUUID; } })();</script><script nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK">// preload the critical path fetch requests that the app // loads (some in a serial fashion) during bootstrap (() => { // we are confident the user is authenticated // if we have the auth cookie hint. if (document.cookie.includes('_nf-auth-hint')) { // ParallelData allows for async loading and handoff to the app. It also // allows us to pull data from a parallel loaded request to use to make other // parallel requests. // This is the fetch-only version (does not include XHR parallel loading) // ParallelData v1.3.0 - https://github.com/sean-roberts/parallel-data // prettier-ignore !function(){"use strict";var e="ParallelData";function t(){try{for(var t,r=arguments.length,n=Array(r),o=0;o<r;o++)n[o]=arguments[o];(t=console).error.apply(t,[e].concat(n))}catch(e){}}function r(e,t){return Object.assign.apply(Object,arguments)}var n={},o={},a={},c=function(e,t){return e.toUpperCase()+"-"+t},i=function(){};i=function(e,n,i){var l=c(e,n);if(!o[l])var u=o[l]=fetch(n,r({},i,{__PDFetch__:!0,method:e,headers:r({},a.headers,i.headers||{}),credentials:i.credentials||"include",redirect:i.redirect||"follow"})).then(function(e){return i&&i.onParallelDataResponse&&i.onParallelDataResponse(e.clone(),{transferredToApp:!!u.__PDConsumed__}),e}).catch(function(e){throw t("fetch request failed",e),e})},window.ParallelData={version:"1.3.0",configure:function(e){var t;(e=e||{}).allRequests&&(t=e.allRequests,a=r({},a,t||{}))}},window.ParallelData.getForFetch=function(e,r){r=r||{};try{"fetch"in window&&"Promise"in window&&i("GET",e,r)}catch(e){t("fetch request failed",e)}},function(){try{var e=window.fetch;if(!e||!window.Promise)return;window.fetch=function(t,r){t=t||{},r=r||{};var a=void 0;"string"==typeof t?a=t:t.url&&(a=t.url);var i=function(e,t){if(e&&e.method&&e.url){var r=c(e.method,e.url);return"xhr"===t?n[r]:o[r]}}({method:r.method?r.method:t.method?t.method:"GET",url:a},"fetch");return r.__PDFetch__||!i||i.__PDConsumed__?e.apply(window,arguments):(i.__PDConsumed__=!0,i)}}catch(e){t("failed to run fetchInterceptor",e)}}()}(); // These requests were chosen because they were the most common critical path // requests across all pages ParallelData.getForFetch('/access-control/bb-api/api/v1/user'); ParallelData.getForFetch('/access-control/bb-api/api/v1/accounts?minimal=true'); ParallelData.getForFetch('/access-control/bb-api/api/v1/organizations'); ParallelData.getForFetch('/.netlify/builders/notifications'); } })();</script><script nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK">if ( window.location.host === 'app.netlify.com' || window.location.search.includes('force-load-segment') ) { // Segment snippet // running snippet here because it will set up the initial mocked // methods/properties for immediate use but we call analytics.load() later after the // page has loaded so that segment is out of the critical path // prettier-ignore !function () { var analytics = window.analytics = window.analytics || []; if (!analytics.initialize) if (analytics.invoked) window.console && console.error && console.error("Segment snippet included twice."); else { analytics.invoked = !0; analytics.methods = ["trackSubmit", "trackClick", "trackLink", "trackForm", "pageview", "identify", "reset", "group", "track", "ready", "alias", "page", "once", "off", "on"]; analytics.factory = function (t) { return function () { var e = Array.prototype.slice.call(arguments); e.unshift(t); analytics.push(e); return analytics } }; for (var t = 0; t < analytics.methods.length; t++) { var e = analytics.methods[t]; analytics[e] = analytics.factory(e) } analytics.load = function (t) { var e = document.createElement("script"); e.async = !0; e.src = ("https:" === document.location.protocol ? "https://" : "http://") + "cdn.segment.com/analytics.js/v1/" + t + "/analytics.min.js"; var n = document.getElementsByTagName("script")[0]; n.parentNode.insertBefore(e, n) }; analytics.SNIPPET_VERSION = "3.1.0"; } }(); window._asyncScriptsWaitingLoad = window._asyncScriptsWaitingLoad || []; window._asyncScriptsWaitingLoad.push(() => { // load Segment if (window.analytics) { analytics.load("bHbADSxnRvrpFMYP6pMNP38JC4J7Av75"); } }); }</script><script nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK">// Failed to execute 'removeChild' on 'Node' workaround // https://github.com/facebook/react/issues/11538#issuecomment-417504600 (() => { var originalRemoveChild = Node.prototype.removeChild; var originalInsertBefore = Node.prototype.insertBefore; var log var observer = new MutationObserver(function (event) { if ( document.documentElement.className.match('translated') || // _msttexthash is added to the title when microsoft edge translates a page document.querySelector('title').hasAttribute('_msttexthash') ) { log = window.DD_RUM && window.DD_RUM.addAction ? window.DD_RUM.addAction : (name, data) => console.error(name, data); log('PageTranslate'); if (typeof Node === 'function' && Node.prototype) { Node.prototype.removeChild = function (child) { if (child.parentNode !== this) { log('CustomError', { errorType: 'removeChild', child: child }) return child; } return originalRemoveChild.apply(this, arguments); } Node.prototype.insertBefore = function (newNode, referenceNode) { if (referenceNode && referenceNode.parentNode !== this) { log('CustomError', { errorType: 'insertBefore', node: referenceNode }) return newNode; } return originalInsertBefore.apply(this, arguments); } } } else { log && log('PageUntranslate'); Node.prototype.removeChild = originalRemoveChild; Node.prototype.insertBefore = originalInsertBefore; } }); // https://stackoverflow.com/a/58891538 observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'], childList: false, characterData: false }); // Include observer to detect microsoft edge translations observer.observe(document.querySelector('title'), { attributes: true, attributeFilter: ['_msttexthash'], childList: false, characterData: false }); })();</script><script src="/runtime.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/containers.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/graphql.vendor.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/highcharts.vendor.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/lib.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/ui.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/actions.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/lodash.vendor.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/monitoring.vendor.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/relayRouterRedux.vendor.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/buildInfo.vendor.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/markdown.vendor.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/helpers.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/babel.vendor.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/reactUiUtilities.vendor.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/react.vendor.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/iso-3166.vendor.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/3971.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script src="/app.bundle.js" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script><script nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK">(()=>{ // this script adds cnm to the app but only to a percentage of users. // this will enable us to measure users with it on vs off. // Setting to true effectively sets this to 100% without changing any state // that users are currently bucketed into. Setting it back to false will // allow the bucketing to go back to the calculated version let shouldAddCNM = true; try{ if(window.location.origin !== 'https://app.netlify.com' && !window.location.origin.endsWith('--app.netlify.app') && !window.location.origin.endsWith('--app.netlify.com')){ return; } // for consistency of synthetic perf tests. Always include CNM const userAgent = window.navigator.userAgent.toLowerCase(); if(userAgent.includes('lighthouse') || userAgent.includes('speedcurve')) { shouldAddCNM = true; } const alreadyHasResult = shouldAddCNM === true || !!localStorage.getItem('cnm-add-result'); if(alreadyHasResult && !shouldAddCNM){ shouldAddCNM = localStorage.getItem('cnm-add-result') === 'true'; }else if(!alreadyHasResult) { // 50% rollout shouldAddCNM = (Math.random() * 100) > 50; localStorage.setItem('cnm-add-result', shouldAddCNM.toString()); } if(shouldAddCNM){ const script = document.createElement('script'); script.async = true; script.defer = true; script.src = '/netlify-cnm/cnm.js'; document.body.appendChild(script); } if (window.DD_RUM) { DD_RUM.setGlobalContextProperty('use-cnm', shouldAddCNM); DD_RUM.setGlobalContextProperty('multi-visit-cnm', alreadyHasResult); } }catch(e){} })();</script><noscript><div class="app"><div class="tw-flex tw-z-overlay tw-inset-0 tw-fixed tw-items-center tw-justify-center tw-m-0 tw-text-center tw-w-full tw-min-h-screen tw-bg-white"><div class="container"><h1>The Netlify dashboard needs JavaScript :(</h1><p>You can enable JavaScript in <a href="https://enable-javascript.com/" class="highlight-link" target="_blank">your browser settings</a>.</p></div></div></div></noscript> <script async id="netlify-rum-container" src="/.netlify/scripts/rum" data-netlify-rum-site-id="5f9562c1-be9c-4898-bc6a-5b40de4e1450" data-netlify-deploy-branch="main" data-netlify-deploy-context="production" data-netlify-cwv-token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlX2lkIjoiNWY5NTYyYzEtYmU5Yy00ODk4LWJjNmEtNWI0MGRlNGUxNDUwIiwiYWNjb3VudF9pZCI6IjU4ZGE4ODkzZDY4NjVkMzVjOTJhNzJiOCIsImRlcGxveV9pZCI6IjY3NDc3YTg2OWM1NzM5MDAwODNiZmQ1ZSIsImlzc3VlciI6Im5mc2VydmVyIn0.4R8nqr7wwlAhmU6OW0gTQu0jWezq2CePzGz3E7ZDAD4" nonce="PTiMOza+AHXlHi3vfJzOGzlUviYqo7QK"></script></body></html>