-
Notifications
You must be signed in to change notification settings - Fork 0
/
app-823e6ec7b4a49f43f7d2.js.map
1 lines (1 loc) · 172 KB
/
app-823e6ec7b4a49f43f7d2.js.map
1
{"version":3,"sources":["webpack:///app-823e6ec7b4a49f43f7d2.js","webpack:///./.cache/api-runner-browser.js","webpack:///./.cache/async-requires.js","webpack:///./.cache/component-renderer.js","webpack:///./.cache/emitter.js","webpack:///./.cache/find-page.js","webpack:///./.cache/history.js","webpack:///./.cache/json/about.json?e030","webpack:///./.cache/json/basic-load-testing-with-h-2-load.json?0f10","webpack:///./.cache/json/blog-up-again.json?391c","webpack:///./.cache/json/broke-the-blog.json?f542","webpack:///./.cache/json/contact.json?85fd","webpack:///./.cache/json/dns-over-tls-and-https.json?ba72","webpack:///./.cache/json/how-did-i-build-this-blog.json?00c4","webpack:///./.cache/json/in-recent-news.json?4538","webpack:///./.cache/json/index.json?9cdc","webpack:///./.cache/json/interesting-links-and-podcasts.json?732d","webpack:///./.cache/json/layout-index.json?fda3","webpack:///./.cache/json/offline-plugin-app-shell-fallback.json?de51","webpack:///./.cache/json/open-canary-honey-pot.json?2fb4","webpack:///./.cache/json/search.json?08d3","webpack:///./.cache/json/success.json?eae8","webpack:///./.cache/json/working-with-maxmind-geoip.json?9a06","webpack:///./.cache/layouts/index.js?a0f1","webpack:///./.cache/loader.js","webpack:///./.cache/pages.json","webpack:///./.cache/prefetcher.js","webpack:///./.cache/production-app.js","webpack:///./.cache/redirects.json","webpack:///./.cache/register-service-worker.js","webpack:///./.cache/strip-prefix.js","webpack:///./gatsby-browser.js","webpack:///./~/domready/ready.js","webpack:///./~/gatsby-module-loader/patch.js","webpack:///./~/gatsby-plugin-catch-links/catch-links.js","webpack:///./~/gatsby-plugin-catch-links/gatsby-browser.js","webpack:///./~/gatsby-plugin-google-analytics/gatsby-browser.js","webpack:///./~/gatsby-plugin-offline/app-shell.js?cca5","webpack:///./~/gatsby-plugin-offline/gatsby-browser.js","webpack:///./~/mitt/dist/mitt.js","webpack:///./~/shallow-compare/lib/index.js","webpack:///./src/pages/contact.js?43a7","webpack:///./src/pages/index.js?a352","webpack:///./src/pages/search.js?562a","webpack:///./src/templates/PageTemplate.js?63ef","webpack:///./src/templates/PostTemplate.js?78ed"],"names":["webpackJsonp","218","module","exports","__webpack_require__","apiRunner","api","args","defaultReturn","results","plugins","map","plugin","result","options","filter","length","apiRunnerAsync","reduce","previous","next","then","Promise","resolve","__esModule","570","components","component---node-modules-gatsby-plugin-offline-app-shell-js","component---src-templates-page-template-js","component---src-templates-post-template-js","component---src-pages-contact-js","component---src-pages-index-js","component---src-pages-search-js","json","layout-index.json","offline-plugin-app-shell-fallback.json","success.json","blog-up-again.json","broke-the-blog.json","about.json","how-did-i-build-this-blog.json","working-with-maxmind-geoip.json","dns-over-tls-and-https.json","basic-load-testing-with-h-2-load.json","in-recent-news.json","open-canary-honey-pot.json","interesting-links-and-podcasts.json","contact.json","index.json","search.json","layouts","layout---index","571","_interopRequireDefault","obj","default","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","call","ReferenceError","_inherits","subClass","superClass","prototype","Object","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","_extends","assign","target","i","arguments","source","key","hasOwnProperty","_react","_react2","_propTypes","_propTypes2","_loader","_loader2","_emitter","_emitter2","_apiRunnerBrowser","_shallowCompare","_shallowCompare2","DefaultLayout","_ref","children","createElement","ComponentRenderer","_React$Component","props","this","_this","location","getPage","pathname","state","pageResources","getResourcesForPathname","componentWillReceiveProps","nextProps","_this2","setState","componentDidMount","_this3","on","e","page","path","shouldComponentUpdate","nextState","component","matchPath","render","pluginResponses","loader","replacementComponent","layout","Component","propTypes","bool","object","148","_mitt","_mitt2","emitter","572","_reactRouterDom","_stripPrefix","_stripPrefix2","pageCache","pages","pathPrefix","undefined","rawPathname","decodeURIComponent","trimmedPathname","split","slice","join","foundPage","some","exact","573","_createBrowserHistory","_createBrowserHistory2","replacementHistory","history","759","cb","_","error","console","log","760","761","762","763","764","765","766","767","768","758","769","770","771","772","773","752","330","process","publicLoader","_findPage","_findPage2","findPage","syncRequires","asyncRequires","pathScriptsCache","resourceStrCache","resourceCache","pathArray","pathCount","resourcesArray","resourcesCount","preferDefault","m","prefetcher","inInitialRender","fetchHistory","failedPaths","failedResources","MAX_HISTORY","getNextQueuedResources","createResourceDownload","resourceName","fetchResource","r","onResourcedFinished","onPreLoadPageResources","onPostLoadPageResources","sortResourcesByCount","a","b","sortPagesByCount","nextTick","resourceFunction","err","executeChunk","push","resource","succeeded","getResourceModule","appearsOnLine","isOnLine","navigator","onLine","succeededFetch","find","entry","handleResourceLoadError","message","window","replace","mountOrder","queue","empty","addPagesArray","newPages","addDevRequires","devRequires","addProdRequires","prodRequires","dequeue","pop","enqueue","rawPath","p","mountOrderBoost","has","unshift","sort","jsonName","indexOf","componentChunkName","onNewResourcesAdded","getResources","getPages","serviceWorker","controller","getRegistrations","registrations","_iterator","_isArray","Array","isArray","_i","Symbol","iterator","done","registration","unregister","reload","emit","layoutComponentChunkName","c","j","l","peek","804","575","pagesLoading","resourcesDownloading","startResourceDownloading","nextResource","reducer","action","type","payload","setTimeout","event","getState","0","_reactDom","_reactDom2","_gatsbyReactRouterScroll","_domready","_domready2","_history","_history2","_history3","_pages","_pages2","_redirects","_redirects2","_componentRenderer","_componentRenderer2","_asyncRequires","_asyncRequires2","___history","___emitter","___loader","redirectMap","redirect","fromPath","maybeRedirect","toPath","attachToHistory","initialAttachDone","listen","shouldUpdateScroll","prevRouterProps","oldPathname","navigate","to","eventHandler","off","clearTimeout","timeoutId","historyNavigateFunc","createLocation","wl","search","hash","___push","___replace","___navigateTo","AltRouter","DefaultRouter","_ref2","Router","ComponentRendererWithRouter","withRouter","Root","ScrollContext","layoutProps","Route","routeProps","NewRoot","renderer","document","getElementById","805","576","register","reg","addEventListener","installingWorker","installing","catch","331","str","prefix","substr","577","_reactRedux","_store","_store2","replaceRouterComponent","store","ConnectedRouterWrapper","Provider","isRequired","742","name","definition","listener","fns","doc","hack","documentElement","doScroll","domContentLoaded","loaded","test","readyState","removeEventListener","shift","fn","18","patch","onError","callback","script","head","lastChild","tagName","warn","onload","onerror","failures","querySelector","ensure","chunks","s","chunkId","immediate","handler","774","_gatsbyLink","root","ev","button","altKey","ctrlKey","metaKey","shiftKey","defaultPrevented","anchor","n","parentNode","nodeName","toLowerCase","a1","href","a2","host","re","RegExp","withPrefix","preventDefault","getAttribute","775","_catchLinks","_catchLinks2","onClientEntry","navigateTo","776","onRouteUpdate","ga","excludeGAPaths","rx","751","778","registerServiceWorker","981","splice","1200","shallowDiffers","753","754","755","756","757"],"mappings":"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","file":"app-823e6ec7b4a49f43f7d2.js","sourcesContent":["webpackJsonp([231608221292675],{\n\n/***/ 218:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\texports.apiRunner = apiRunner;\n\texports.apiRunnerAsync = apiRunnerAsync;\n\tvar plugins = [{\n\t plugin: __webpack_require__(775),\n\t options: { \"plugins\": [] }\n\t}, {\n\t plugin: __webpack_require__(778),\n\t options: { \"plugins\": [] }\n\t}, {\n\t plugin: __webpack_require__(776),\n\t options: { \"plugins\": [] }\n\t}, {\n\t plugin: __webpack_require__(577),\n\t options: { \"plugins\": [] }\n\t}];\n\t// During bootstrap, we write requires at top of this file which looks\n\t// basically like:\n\t// var plugins = [\n\t// {\n\t// plugin: require(\"/path/to/plugin1/gatsby-browser.js\"),\n\t// options: { ... },\n\t// },\n\t// {\n\t// plugin: require(\"/path/to/plugin2/gatsby-browser.js\"),\n\t// options: { ... },\n\t// },\n\t// ]\n\t\n\tfunction apiRunner(api, args, defaultReturn) {\n\t var results = plugins.map(function (plugin) {\n\t if (plugin.plugin[api]) {\n\t var result = plugin.plugin[api](args, plugin.options);\n\t return result;\n\t }\n\t });\n\t\n\t // Filter out undefined results.\n\t results = results.filter(function (result) {\n\t return typeof result !== 'undefined';\n\t });\n\t\n\t if (results.length > 0) {\n\t return results;\n\t } else if (defaultReturn) {\n\t return [defaultReturn];\n\t } else {\n\t return [];\n\t }\n\t}\n\t\n\tfunction apiRunnerAsync(api, args, defaultReturn) {\n\t return plugins.reduce(function (previous, next) {\n\t return next.plugin[api] ? previous.then(function () {\n\t return next.plugin[api](args, next.options);\n\t }) : previous;\n\t }, Promise.resolve());\n\t}\n\n/***/ }),\n\n/***/ 570:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\t// prefer default export if available\n\tvar preferDefault = function preferDefault(m) {\n\t return m && m.default || m;\n\t};\n\t\n\texports.components = {\n\t \"component---node-modules-gatsby-plugin-offline-app-shell-js\": __webpack_require__(751),\n\t \"component---src-templates-page-template-js\": __webpack_require__(756),\n\t \"component---src-templates-post-template-js\": __webpack_require__(757),\n\t \"component---src-pages-contact-js\": __webpack_require__(753),\n\t \"component---src-pages-index-js\": __webpack_require__(754),\n\t \"component---src-pages-search-js\": __webpack_require__(755)\n\t};\n\t\n\texports.json = {\n\t \"layout-index.json\": __webpack_require__(758),\n\t \"offline-plugin-app-shell-fallback.json\": __webpack_require__(769),\n\t \"success.json\": __webpack_require__(772),\n\t \"blog-up-again.json\": __webpack_require__(761),\n\t \"broke-the-blog.json\": __webpack_require__(762),\n\t \"about.json\": __webpack_require__(759),\n\t \"how-did-i-build-this-blog.json\": __webpack_require__(765),\n\t \"working-with-maxmind-geoip.json\": __webpack_require__(773),\n\t \"dns-over-tls-and-https.json\": __webpack_require__(764),\n\t \"basic-load-testing-with-h-2-load.json\": __webpack_require__(760),\n\t \"in-recent-news.json\": __webpack_require__(766),\n\t \"open-canary-honey-pot.json\": __webpack_require__(770),\n\t \"interesting-links-and-podcasts.json\": __webpack_require__(768),\n\t \"contact.json\": __webpack_require__(763),\n\t \"index.json\": __webpack_require__(767),\n\t \"search.json\": __webpack_require__(771)\n\t};\n\t\n\texports.layouts = {\n\t \"layout---index\": __webpack_require__(752)\n\t};\n\n/***/ }),\n\n/***/ 571:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _propTypes = __webpack_require__(2);\n\t\n\tvar _propTypes2 = _interopRequireDefault(_propTypes);\n\t\n\tvar _loader = __webpack_require__(330);\n\t\n\tvar _loader2 = _interopRequireDefault(_loader);\n\t\n\tvar _emitter = __webpack_require__(148);\n\t\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\t\n\tvar _apiRunnerBrowser = __webpack_require__(218);\n\t\n\tvar _shallowCompare = __webpack_require__(1200);\n\t\n\tvar _shallowCompare2 = _interopRequireDefault(_shallowCompare);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar DefaultLayout = function DefaultLayout(_ref) {\n\t var children = _ref.children;\n\t return _react2.default.createElement(\n\t \"div\",\n\t null,\n\t children()\n\t );\n\t};\n\t\n\t// Pass pathname in as prop.\n\t// component will try fetching resources. If they exist,\n\t// will just render, else will render null.\n\t\n\tvar ComponentRenderer = function (_React$Component) {\n\t _inherits(ComponentRenderer, _React$Component);\n\t\n\t function ComponentRenderer(props) {\n\t _classCallCheck(this, ComponentRenderer);\n\t\n\t var _this = _possibleConstructorReturn(this, _React$Component.call(this));\n\t\n\t var location = props.location;\n\t\n\t // Set the pathname for 404 pages.\n\t if (!_loader2.default.getPage(location.pathname)) {\n\t location = _extends({}, location, {\n\t pathname: \"/404.html\"\n\t });\n\t }\n\t\n\t _this.state = {\n\t location: location,\n\t pageResources: _loader2.default.getResourcesForPathname(location.pathname)\n\t };\n\t return _this;\n\t }\n\t\n\t ComponentRenderer.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n\t var _this2 = this;\n\t\n\t // During development, always pass a component's JSON through so graphql\n\t // updates go through.\n\t if (false) {\n\t if (nextProps && nextProps.pageResources && nextProps.pageResources.json) {\n\t this.setState({ pageResources: nextProps.pageResources });\n\t }\n\t }\n\t if (this.state.location.pathname !== nextProps.location.pathname) {\n\t var pageResources = _loader2.default.getResourcesForPathname(nextProps.location.pathname);\n\t if (!pageResources) {\n\t var location = nextProps.location;\n\t\n\t // Set the pathname for 404 pages.\n\t if (!_loader2.default.getPage(location.pathname)) {\n\t location = _extends({}, location, {\n\t pathname: \"/404.html\"\n\t });\n\t }\n\t\n\t // Page resources won't be set in cases where the browser back button\n\t // or forward button is pushed as we can't wait as normal for resources\n\t // to load before changing the page.\n\t _loader2.default.getResourcesForPathname(location.pathname, function (pageResources) {\n\t _this2.setState({\n\t location: location,\n\t pageResources: pageResources\n\t });\n\t });\n\t } else {\n\t this.setState({\n\t location: nextProps.location,\n\t pageResources: pageResources\n\t });\n\t }\n\t }\n\t };\n\t\n\t ComponentRenderer.prototype.componentDidMount = function componentDidMount() {\n\t var _this3 = this;\n\t\n\t // Listen to events so when our page gets updated, we can transition.\n\t // This is only useful on delayed transitions as the page will get rendered\n\t // without the necessary page resources and then re-render once those come in.\n\t _emitter2.default.on(\"onPostLoadPageResources\", function (e) {\n\t if (_loader2.default.getPage(_this3.state.location.pathname) && e.page.path === _loader2.default.getPage(_this3.state.location.pathname).path) {\n\t _this3.setState({ pageResources: e.pageResources });\n\t }\n\t });\n\t };\n\t\n\t ComponentRenderer.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n\t // 404\n\t if (!nextState.pageResources) {\n\t return true;\n\t }\n\t // Check if the component or json have changed.\n\t if (!this.state.pageResources && nextState.pageResources) {\n\t return true;\n\t }\n\t if (this.state.pageResources.component !== nextState.pageResources.component) {\n\t return true;\n\t }\n\t\n\t if (this.state.pageResources.json !== nextState.pageResources.json) {\n\t return true;\n\t }\n\t\n\t // Check if location has changed on a page using internal routing\n\t // via matchPath configuration.\n\t if (this.state.location.key !== nextState.location.key && nextState.pageResources.page && (nextState.pageResources.page.matchPath || nextState.pageResources.page.path)) {\n\t return true;\n\t }\n\t\n\t return (0, _shallowCompare2.default)(this, nextProps, nextState);\n\t };\n\t\n\t ComponentRenderer.prototype.render = function render() {\n\t var pluginResponses = (0, _apiRunnerBrowser.apiRunner)(\"replaceComponentRenderer\", {\n\t props: _extends({}, this.props, { pageResources: this.state.pageResources }),\n\t loader: _loader.publicLoader\n\t });\n\t var replacementComponent = pluginResponses[0];\n\t // If page.\n\t if (this.props.page) {\n\t if (this.state.pageResources) {\n\t return replacementComponent || (0, _react.createElement)(this.state.pageResources.component, _extends({\n\t key: this.props.location.pathname\n\t }, this.props, this.state.pageResources.json));\n\t } else {\n\t return null;\n\t }\n\t // If layout.\n\t } else if (this.props.layout) {\n\t return replacementComponent || (0, _react.createElement)(this.state.pageResources && this.state.pageResources.layout ? this.state.pageResources.layout : DefaultLayout, _extends({\n\t key: this.state.pageResources && this.state.pageResources.layout ? this.state.pageResources.layout : \"DefaultLayout\"\n\t }, this.props));\n\t } else {\n\t return null;\n\t }\n\t };\n\t\n\t return ComponentRenderer;\n\t}(_react2.default.Component);\n\t\n\tComponentRenderer.propTypes = {\n\t page: _propTypes2.default.bool,\n\t layout: _propTypes2.default.bool,\n\t location: _propTypes2.default.object\n\t};\n\t\n\texports.default = ComponentRenderer;\n\tmodule.exports = exports[\"default\"];\n\n/***/ }),\n\n/***/ 148:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _mitt = __webpack_require__(981);\n\t\n\tvar _mitt2 = _interopRequireDefault(_mitt);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar emitter = (0, _mitt2.default)();\n\tmodule.exports = emitter;\n\n/***/ }),\n\n/***/ 572:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _reactRouterDom = __webpack_require__(139);\n\t\n\tvar _stripPrefix = __webpack_require__(331);\n\t\n\tvar _stripPrefix2 = _interopRequireDefault(_stripPrefix);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t// TODO add tests especially for handling prefixed links.\n\tvar pageCache = {};\n\t\n\tmodule.exports = function (pages) {\n\t var pathPrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n\t return function (rawPathname) {\n\t var pathname = decodeURIComponent(rawPathname);\n\t\n\t // Remove the pathPrefix from the pathname.\n\t var trimmedPathname = (0, _stripPrefix2.default)(pathname, pathPrefix);\n\t\n\t // Remove any hashfragment\n\t if (trimmedPathname.split(\"#\").length > 1) {\n\t trimmedPathname = trimmedPathname.split(\"#\").slice(0, -1).join(\"\");\n\t }\n\t\n\t // Remove search query\n\t if (trimmedPathname.split(\"?\").length > 1) {\n\t trimmedPathname = trimmedPathname.split(\"?\").slice(0, -1).join(\"\");\n\t }\n\t\n\t if (pageCache[trimmedPathname]) {\n\t return pageCache[trimmedPathname];\n\t }\n\t\n\t var foundPage = void 0;\n\t // Array.prototype.find is not supported in IE so we use this somewhat odd\n\t // work around.\n\t pages.some(function (page) {\n\t if (page.matchPath) {\n\t // Try both the path and matchPath\n\t if ((0, _reactRouterDom.matchPath)(trimmedPathname, { path: page.path }) || (0, _reactRouterDom.matchPath)(trimmedPathname, {\n\t path: page.matchPath\n\t })) {\n\t foundPage = page;\n\t pageCache[trimmedPathname] = page;\n\t return true;\n\t }\n\t } else {\n\t if ((0, _reactRouterDom.matchPath)(trimmedPathname, {\n\t path: page.path,\n\t exact: true\n\t })) {\n\t foundPage = page;\n\t pageCache[trimmedPathname] = page;\n\t return true;\n\t }\n\t\n\t // Finally, try and match request with default document.\n\t if ((0, _reactRouterDom.matchPath)(trimmedPathname, {\n\t path: page.path + \"index.html\"\n\t })) {\n\t foundPage = page;\n\t pageCache[trimmedPathname] = page;\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t });\n\t\n\t return foundPage;\n\t };\n\t};\n\n/***/ }),\n\n/***/ 573:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _createBrowserHistory = __webpack_require__(254);\n\t\n\tvar _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory);\n\t\n\tvar _apiRunnerBrowser = __webpack_require__(218);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar pluginResponses = (0, _apiRunnerBrowser.apiRunner)(\"replaceHistory\");\n\tvar replacementHistory = pluginResponses[0];\n\tvar history = replacementHistory || (0, _createBrowserHistory2.default)();\n\tmodule.exports = history;\n\n/***/ }),\n\n/***/ 759:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(273950069227526, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(789) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 760:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(231802064233348, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(790) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 761:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(228571001766370, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(791) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 762:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(22514933948295, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(792) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 763:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(184662623972074, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(793) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 764:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(281321932036384, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(794) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 765:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(68991384216509, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(795) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 766:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(180373090472844, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(796) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 767:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(142629428675168, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(797) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 768:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(163878772362200, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(798) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 758:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(60335399758886, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(257) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 769:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(210333531512890, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(799) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 770:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(106654076600595, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(800) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 771:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(254572558124955, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(801) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 772:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(170786371021445, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(802) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 773:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(150377565746227, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(803) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 752:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(114276838955818, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(574) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 330:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.publicLoader = undefined;\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _findPage = __webpack_require__(572);\n\t\n\tvar _findPage2 = _interopRequireDefault(_findPage);\n\t\n\tvar _emitter = __webpack_require__(148);\n\t\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\t\n\tvar _stripPrefix = __webpack_require__(331);\n\t\n\tvar _stripPrefix2 = _interopRequireDefault(_stripPrefix);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar findPage = void 0;\n\t\n\tvar syncRequires = {};\n\tvar asyncRequires = {};\n\tvar pathScriptsCache = {};\n\tvar resourceStrCache = {};\n\tvar resourceCache = {};\n\tvar pages = [];\n\t// Note we're not actively using the path data atm. There\n\t// could be future optimizations however around trying to ensure\n\t// we load all resources for likely-to-be-visited paths.\n\tvar pathArray = [];\n\tvar pathCount = {};\n\tvar pathPrefix = \"\";\n\tvar resourcesArray = [];\n\tvar resourcesCount = {};\n\tvar preferDefault = function preferDefault(m) {\n\t return m && m.default || m;\n\t};\n\tvar prefetcher = void 0;\n\tvar inInitialRender = true;\n\tvar fetchHistory = [];\n\tvar failedPaths = {};\n\tvar failedResources = {};\n\tvar MAX_HISTORY = 5;\n\t\n\t// Prefetcher logic\n\tif (true) {\n\t prefetcher = __webpack_require__(575)({\n\t getNextQueuedResources: function getNextQueuedResources() {\n\t return resourcesArray.slice(-1)[0];\n\t },\n\t createResourceDownload: function createResourceDownload(resourceName) {\n\t fetchResource(resourceName, function () {\n\t resourcesArray = resourcesArray.filter(function (r) {\n\t return r !== resourceName;\n\t });\n\t prefetcher.onResourcedFinished(resourceName);\n\t });\n\t }\n\t });\n\t _emitter2.default.on(\"onPreLoadPageResources\", function (e) {\n\t prefetcher.onPreLoadPageResources(e);\n\t });\n\t _emitter2.default.on(\"onPostLoadPageResources\", function (e) {\n\t prefetcher.onPostLoadPageResources(e);\n\t });\n\t}\n\t\n\tvar sortResourcesByCount = function sortResourcesByCount(a, b) {\n\t if (resourcesCount[a] > resourcesCount[b]) {\n\t return 1;\n\t } else if (resourcesCount[a] < resourcesCount[b]) {\n\t return -1;\n\t } else {\n\t return 0;\n\t }\n\t};\n\t\n\tvar sortPagesByCount = function sortPagesByCount(a, b) {\n\t if (pathCount[a] > pathCount[b]) {\n\t return 1;\n\t } else if (pathCount[a] < pathCount[b]) {\n\t return -1;\n\t } else {\n\t return 0;\n\t }\n\t};\n\t\n\tvar fetchResource = function fetchResource(resourceName) {\n\t var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\t\n\t if (resourceStrCache[resourceName]) {\n\t process.nextTick(function () {\n\t cb(null, resourceStrCache[resourceName]);\n\t });\n\t } else {\n\t // Find resource\n\t var resourceFunction = void 0;\n\t if (resourceName.slice(0, 12) === \"component---\") {\n\t resourceFunction = asyncRequires.components[resourceName];\n\t } else if (resourceName.slice(0, 9) === \"layout---\") {\n\t resourceFunction = asyncRequires.layouts[resourceName];\n\t } else {\n\t resourceFunction = asyncRequires.json[resourceName];\n\t }\n\t\n\t // Download the resource\n\t resourceFunction(function (err, executeChunk) {\n\t resourceStrCache[resourceName] = executeChunk;\n\t fetchHistory.push({\n\t resource: resourceName,\n\t succeeded: !err\n\t });\n\t\n\t if (!failedResources[resourceName]) {\n\t failedResources[resourceName] = err;\n\t }\n\t\n\t fetchHistory = fetchHistory.slice(-MAX_HISTORY);\n\t cb(err, executeChunk);\n\t });\n\t }\n\t};\n\t\n\tvar getResourceModule = function getResourceModule(resourceName, cb) {\n\t if (resourceCache[resourceName]) {\n\t process.nextTick(function () {\n\t cb(null, resourceCache[resourceName]);\n\t });\n\t } else if (failedResources[resourceName]) {\n\t process.nextTick(function () {\n\t cb(failedResources[resourceName]);\n\t });\n\t } else {\n\t fetchResource(resourceName, function (err, executeChunk) {\n\t if (err) {\n\t cb(err);\n\t } else {\n\t var module = preferDefault(executeChunk());\n\t resourceCache[resourceName] = module;\n\t cb(err, module);\n\t }\n\t });\n\t }\n\t};\n\t\n\tvar appearsOnLine = function appearsOnLine() {\n\t var isOnLine = navigator.onLine;\n\t if (typeof isOnLine === \"boolean\") {\n\t return isOnLine;\n\t }\n\t\n\t // If no navigator.onLine support assume onLine if any of last N fetches succeeded\n\t var succeededFetch = fetchHistory.find(function (entry) {\n\t return entry.succeeded;\n\t });\n\t return !!succeededFetch;\n\t};\n\t\n\tvar handleResourceLoadError = function handleResourceLoadError(path, message) {\n\t console.log(message);\n\t\n\t if (!failedPaths[path]) {\n\t failedPaths[path] = message;\n\t }\n\t\n\t if (appearsOnLine() && window.location.pathname.replace(/\\/$/g, \"\") !== path.replace(/\\/$/g, \"\")) {\n\t window.location.pathname = path;\n\t }\n\t};\n\t\n\tvar mountOrder = 1;\n\tvar queue = {\n\t empty: function empty() {\n\t pathArray = [];\n\t pathCount = {};\n\t resourcesCount = {};\n\t resourcesArray = [];\n\t pages = [];\n\t pathPrefix = \"\";\n\t },\n\t addPagesArray: function addPagesArray(newPages) {\n\t pages = newPages;\n\t if (true) {\n\t if (false) pathPrefix = __PATH_PREFIX__;\n\t }\n\t findPage = (0, _findPage2.default)(newPages, pathPrefix);\n\t },\n\t addDevRequires: function addDevRequires(devRequires) {\n\t syncRequires = devRequires;\n\t },\n\t addProdRequires: function addProdRequires(prodRequires) {\n\t asyncRequires = prodRequires;\n\t },\n\t dequeue: function dequeue() {\n\t return pathArray.pop();\n\t },\n\t enqueue: function enqueue(rawPath) {\n\t // Check page exists.\n\t var path = (0, _stripPrefix2.default)(rawPath, pathPrefix);\n\t if (!pages.some(function (p) {\n\t return p.path === path;\n\t })) {\n\t return false;\n\t }\n\t\n\t var mountOrderBoost = 1 / mountOrder;\n\t mountOrder += 1;\n\t // console.log(\n\t // `enqueue \"${path}\", mountOrder: \"${mountOrder}, mountOrderBoost: ${mountOrderBoost}`\n\t // )\n\t\n\t // Add to path counts.\n\t if (!pathCount[path]) {\n\t pathCount[path] = 1;\n\t } else {\n\t pathCount[path] += 1;\n\t }\n\t\n\t // Add path to queue.\n\t if (!queue.has(path)) {\n\t pathArray.unshift(path);\n\t }\n\t\n\t // Sort pages by pathCount\n\t pathArray.sort(sortPagesByCount);\n\t\n\t // Add resources to queue.\n\t var page = findPage(path);\n\t if (page.jsonName) {\n\t if (!resourcesCount[page.jsonName]) {\n\t resourcesCount[page.jsonName] = 1 + mountOrderBoost;\n\t } else {\n\t resourcesCount[page.jsonName] += 1 + mountOrderBoost;\n\t }\n\t\n\t // Before adding, checking that the JSON resource isn't either\n\t // already queued or been downloading.\n\t if (resourcesArray.indexOf(page.jsonName) === -1 && !resourceStrCache[page.jsonName]) {\n\t resourcesArray.unshift(page.jsonName);\n\t }\n\t }\n\t if (page.componentChunkName) {\n\t if (!resourcesCount[page.componentChunkName]) {\n\t resourcesCount[page.componentChunkName] = 1 + mountOrderBoost;\n\t } else {\n\t resourcesCount[page.componentChunkName] += 1 + mountOrderBoost;\n\t }\n\t\n\t // Before adding, checking that the component resource isn't either\n\t // already queued or been downloading.\n\t if (resourcesArray.indexOf(page.componentChunkName) === -1 && !resourceStrCache[page.jsonName]) {\n\t resourcesArray.unshift(page.componentChunkName);\n\t }\n\t }\n\t\n\t // Sort resources by resourcesCount.\n\t resourcesArray.sort(sortResourcesByCount);\n\t if (true) {\n\t prefetcher.onNewResourcesAdded();\n\t }\n\t\n\t return true;\n\t },\n\t getResources: function getResources() {\n\t return {\n\t resourcesArray: resourcesArray,\n\t resourcesCount: resourcesCount\n\t };\n\t },\n\t getPages: function getPages() {\n\t return {\n\t pathArray: pathArray,\n\t pathCount: pathCount\n\t };\n\t },\n\t getPage: function getPage(pathname) {\n\t return findPage(pathname);\n\t },\n\t has: function has(path) {\n\t return pathArray.some(function (p) {\n\t return p === path;\n\t });\n\t },\n\t getResourcesForPathname: function getResourcesForPathname(path) {\n\t var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\t\n\t if (inInitialRender && navigator && navigator.serviceWorker && navigator.serviceWorker.controller && navigator.serviceWorker.controller.state === \"activated\") {\n\t // If we're loading from a service worker (it's already activated on\n\t // this initial render) and we can't find a page, there's a good chance\n\t // we're on a new page that this (now old) service worker doesn't know\n\t // about so we'll unregister it and reload.\n\t if (!findPage(path)) {\n\t navigator.serviceWorker.getRegistrations().then(function (registrations) {\n\t // We would probably need this to\n\t // prevent unnecessary reloading of the page\n\t // while unregistering of ServiceWorker is not happening\n\t if (registrations.length) {\n\t for (var _iterator = registrations, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t var _ref;\n\t\n\t if (_isArray) {\n\t if (_i >= _iterator.length) break;\n\t _ref = _iterator[_i++];\n\t } else {\n\t _i = _iterator.next();\n\t if (_i.done) break;\n\t _ref = _i.value;\n\t }\n\t\n\t var registration = _ref;\n\t\n\t registration.unregister();\n\t }\n\t window.location.reload();\n\t }\n\t });\n\t }\n\t }\n\t inInitialRender = false;\n\t // In development we know the code is loaded already\n\t // so we just return with it immediately.\n\t if (false) {\n\t var page = findPage(path);\n\t if (!page) return cb();\n\t var pageResources = {\n\t component: syncRequires.components[page.componentChunkName],\n\t json: syncRequires.json[page.jsonName],\n\t layout: syncRequires.layouts[page.layout],\n\t page: page\n\t };\n\t cb(pageResources);\n\t return pageResources;\n\t // Production code path\n\t } else {\n\t if (failedPaths[path]) {\n\t handleResourceLoadError(path, \"Previously detected load failure for \\\"\" + path + \"\\\"\");\n\t\n\t return cb();\n\t }\n\t\n\t var _page = findPage(path);\n\t\n\t if (!_page) {\n\t handleResourceLoadError(path, \"A page wasn't found for \\\"\" + path + \"\\\"\");\n\t\n\t return cb();\n\t }\n\t\n\t // Use the path from the page so the pathScriptsCache uses\n\t // the normalized path.\n\t path = _page.path;\n\t\n\t // Check if it's in the cache already.\n\t if (pathScriptsCache[path]) {\n\t process.nextTick(function () {\n\t cb(pathScriptsCache[path]);\n\t _emitter2.default.emit(\"onPostLoadPageResources\", {\n\t page: _page,\n\t pageResources: pathScriptsCache[path]\n\t });\n\t });\n\t return pathScriptsCache[path];\n\t }\n\t\n\t _emitter2.default.emit(\"onPreLoadPageResources\", { path: path });\n\t // Nope, we need to load resource(s)\n\t var component = void 0;\n\t var json = void 0;\n\t var layout = void 0;\n\t // Load the component/json/layout and parallel and call this\n\t // function when they're done loading. When both are loaded,\n\t // we move on.\n\t var done = function done() {\n\t if (component && json && (!_page.layoutComponentChunkName || layout)) {\n\t pathScriptsCache[path] = { component: component, json: json, layout: layout, page: _page };\n\t var _pageResources = { component: component, json: json, layout: layout, page: _page };\n\t cb(_pageResources);\n\t _emitter2.default.emit(\"onPostLoadPageResources\", {\n\t page: _page,\n\t pageResources: _pageResources\n\t });\n\t }\n\t };\n\t getResourceModule(_page.componentChunkName, function (err, c) {\n\t if (err) {\n\t handleResourceLoadError(_page.path, \"Loading the component for \" + _page.path + \" failed\");\n\t }\n\t component = c;\n\t done();\n\t });\n\t getResourceModule(_page.jsonName, function (err, j) {\n\t if (err) {\n\t handleResourceLoadError(_page.path, \"Loading the JSON for \" + _page.path + \" failed\");\n\t }\n\t json = j;\n\t done();\n\t });\n\t\n\t _page.layoutComponentChunkName && getResourceModule(_page.layout, function (err, l) {\n\t if (err) {\n\t handleResourceLoadError(_page.path, \"Loading the Layout for \" + _page.path + \" failed\");\n\t }\n\t layout = l;\n\t done();\n\t });\n\t\n\t return undefined;\n\t }\n\t },\n\t peek: function peek(path) {\n\t return pathArray.slice(-1)[0];\n\t },\n\t length: function length() {\n\t return pathArray.length;\n\t },\n\t indexOf: function indexOf(path) {\n\t return pathArray.length - pathArray.indexOf(path) - 1;\n\t }\n\t};\n\t\n\tvar publicLoader = exports.publicLoader = {\n\t getResourcesForPathname: queue.getResourcesForPathname\n\t};\n\t\n\texports.default = queue;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(50)))\n\n/***/ }),\n\n/***/ 804:\n/***/ (function(module, exports) {\n\n\tmodule.exports = [{\"componentChunkName\":\"component---node-modules-gatsby-plugin-offline-app-shell-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"offline-plugin-app-shell-fallback.json\",\"path\":\"/offline-plugin-app-shell-fallback/\"},{\"componentChunkName\":\"component---src-templates-page-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"success.json\",\"path\":\"/success/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"blog-up-again.json\",\"path\":\"/blog-up-again/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"broke-the-blog.json\",\"path\":\"/broke-the-blog/\"},{\"componentChunkName\":\"component---src-templates-page-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"about.json\",\"path\":\"/about/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"how-did-i-build-this-blog.json\",\"path\":\"/how-did-i-build-this-blog/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"working-with-maxmind-geoip.json\",\"path\":\"/working-with-maxmind-geoip/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"dns-over-tls-and-https.json\",\"path\":\"/dns-over-tls-and-https/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"basic-load-testing-with-h-2-load.json\",\"path\":\"/basic-load-testing-with-h2load/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"in-recent-news.json\",\"path\":\"/in-recent-news/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"open-canary-honey-pot.json\",\"path\":\"/open-canary-honey-pot/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"interesting-links-and-podcasts.json\",\"path\":\"/interesting-links-and-podcasts/\"},{\"componentChunkName\":\"component---src-pages-contact-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"contact.json\",\"path\":\"/contact/\"},{\"componentChunkName\":\"component---src-pages-index-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"index.json\",\"path\":\"/\"},{\"componentChunkName\":\"component---src-pages-search-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"search.json\",\"path\":\"/search/\"}]\n\n/***/ }),\n\n/***/ 575:\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = function (_ref) {\n\t var getNextQueuedResources = _ref.getNextQueuedResources,\n\t createResourceDownload = _ref.createResourceDownload;\n\t\n\t var pagesLoading = [];\n\t var resourcesDownloading = [];\n\t\n\t // Do things\n\t var startResourceDownloading = function startResourceDownloading() {\n\t var nextResource = getNextQueuedResources();\n\t if (nextResource) {\n\t resourcesDownloading.push(nextResource);\n\t createResourceDownload(nextResource);\n\t }\n\t };\n\t\n\t var reducer = function reducer(action) {\n\t switch (action.type) {\n\t case \"RESOURCE_FINISHED\":\n\t resourcesDownloading = resourcesDownloading.filter(function (r) {\n\t return r !== action.payload;\n\t });\n\t break;\n\t case \"ON_PRE_LOAD_PAGE_RESOURCES\":\n\t pagesLoading.push(action.payload.path);\n\t break;\n\t case \"ON_POST_LOAD_PAGE_RESOURCES\":\n\t pagesLoading = pagesLoading.filter(function (p) {\n\t return p !== action.payload.page.path;\n\t });\n\t break;\n\t case \"ON_NEW_RESOURCES_ADDED\":\n\t break;\n\t }\n\t\n\t // Take actions.\n\t // Wait for event loop queue to finish.\n\t setTimeout(function () {\n\t if (resourcesDownloading.length === 0 && pagesLoading.length === 0) {\n\t // Start another resource downloading.\n\t startResourceDownloading();\n\t }\n\t }, 0);\n\t };\n\t\n\t return {\n\t onResourcedFinished: function onResourcedFinished(event) {\n\t // Tell prefetcher that the resource finished downloading\n\t // so it can grab the next one.\n\t reducer({ type: \"RESOURCE_FINISHED\", payload: event });\n\t },\n\t onPreLoadPageResources: function onPreLoadPageResources(event) {\n\t // Tell prefetcher a page load has started so it should stop\n\t // loading anything new\n\t reducer({ type: \"ON_PRE_LOAD_PAGE_RESOURCES\", payload: event });\n\t },\n\t onPostLoadPageResources: function onPostLoadPageResources(event) {\n\t // Tell prefetcher a page load has finished so it should start\n\t // loading resources again.\n\t reducer({ type: \"ON_POST_LOAD_PAGE_RESOURCES\", payload: event });\n\t },\n\t onNewResourcesAdded: function onNewResourcesAdded() {\n\t // Tell prefetcher that more resources to be downloaded have\n\t // been added.\n\t reducer({ type: \"ON_NEW_RESOURCES_ADDED\" });\n\t },\n\t getState: function getState() {\n\t return { pagesLoading: pagesLoading, resourcesDownloading: resourcesDownloading };\n\t },\n\t empty: function empty() {\n\t pagesLoading = [];\n\t resourcesDownloading = [];\n\t }\n\t };\n\t};\n\n/***/ }),\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar _apiRunnerBrowser = __webpack_require__(218);\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _reactDom = __webpack_require__(24);\n\t\n\tvar _reactDom2 = _interopRequireDefault(_reactDom);\n\t\n\tvar _reactRouterDom = __webpack_require__(139);\n\t\n\tvar _gatsbyReactRouterScroll = __webpack_require__(784);\n\t\n\tvar _domready = __webpack_require__(742);\n\t\n\tvar _domready2 = _interopRequireDefault(_domready);\n\t\n\tvar _history = __webpack_require__(256);\n\t\n\tvar _history2 = __webpack_require__(573);\n\t\n\tvar _history3 = _interopRequireDefault(_history2);\n\t\n\tvar _emitter = __webpack_require__(148);\n\t\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\t\n\tvar _pages = __webpack_require__(804);\n\t\n\tvar _pages2 = _interopRequireDefault(_pages);\n\t\n\tvar _redirects = __webpack_require__(805);\n\t\n\tvar _redirects2 = _interopRequireDefault(_redirects);\n\t\n\tvar _componentRenderer = __webpack_require__(571);\n\t\n\tvar _componentRenderer2 = _interopRequireDefault(_componentRenderer);\n\t\n\tvar _asyncRequires = __webpack_require__(570);\n\t\n\tvar _asyncRequires2 = _interopRequireDefault(_asyncRequires);\n\t\n\tvar _loader = __webpack_require__(330);\n\t\n\tvar _loader2 = _interopRequireDefault(_loader);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tif (true) {\n\t __webpack_require__(641);\n\t}\n\t\n\twindow.___history = _history3.default;\n\t\n\twindow.___emitter = _emitter2.default;\n\t\n\t_loader2.default.addPagesArray(_pages2.default);\n\t_loader2.default.addProdRequires(_asyncRequires2.default);\n\twindow.asyncRequires = _asyncRequires2.default;\n\twindow.___loader = _loader2.default;\n\twindow.matchPath = _reactRouterDom.matchPath;\n\t\n\t// Convert to a map for faster lookup in maybeRedirect()\n\tvar redirectMap = _redirects2.default.reduce(function (map, redirect) {\n\t map[redirect.fromPath] = redirect;\n\t return map;\n\t}, {});\n\t\n\tvar maybeRedirect = function maybeRedirect(pathname) {\n\t var redirect = redirectMap[pathname];\n\t\n\t if (redirect != null) {\n\t _history3.default.replace(redirect.toPath);\n\t return true;\n\t } else {\n\t return false;\n\t }\n\t};\n\t\n\t// Check for initial page-load redirect\n\tmaybeRedirect(window.location.pathname);\n\t\n\t// Let the site/plugins run code very early.\n\t(0, _apiRunnerBrowser.apiRunnerAsync)(\"onClientEntry\").then(function () {\n\t // Let plugins register a service worker. The plugin just needs\n\t // to return true.\n\t if ((0, _apiRunnerBrowser.apiRunner)(\"registerServiceWorker\").length > 0) {\n\t __webpack_require__(576);\n\t }\n\t\n\t var navigate = function navigate(to, replace) {\n\t var location = (0, _history.createLocation)(to, null, null, _history3.default.location);\n\t var pathname = location.pathname;\n\t\n\t var redirect = redirectMap[pathname];\n\t\n\t // If we're redirecting, just replace the passed in pathname\n\t // to the one we want to redirect to.\n\t if (redirect) {\n\t pathname = redirect.toPath;\n\t }\n\t var wl = window.location;\n\t\n\t // If we're already at this location, do nothing.\n\t if (wl.pathname === location.pathname && wl.search === location.search && wl.hash === location.hash) {\n\t return;\n\t }\n\t\n\t var historyNavigateFunc = replace ? window.___history.replace : window.___history.push;\n\t\n\t // Listen to loading events. If page resources load before\n\t // a second, navigate immediately.\n\t function eventHandler(e) {\n\t if (e.page.path === _loader2.default.getPage(pathname).path) {\n\t _emitter2.default.off(\"onPostLoadPageResources\", eventHandler);\n\t clearTimeout(timeoutId);\n\t historyNavigateFunc(location);\n\t }\n\t }\n\t\n\t // Start a timer to wait for a second before transitioning and showing a\n\t // loader in case resources aren't around yet.\n\t var timeoutId = setTimeout(function () {\n\t _emitter2.default.off(\"onPostLoadPageResources\", eventHandler);\n\t _emitter2.default.emit(\"onDelayedLoadPageResources\", { pathname: pathname });\n\t historyNavigateFunc(location);\n\t }, 1000);\n\t\n\t if (_loader2.default.getResourcesForPathname(pathname)) {\n\t // The resources are already loaded so off we go.\n\t clearTimeout(timeoutId);\n\t historyNavigateFunc(location);\n\t } else {\n\t // They're not loaded yet so let's add a listener for when\n\t // they finish loading.\n\t _emitter2.default.on(\"onPostLoadPageResources\", eventHandler);\n\t }\n\t };\n\t\n\t // window.___loadScriptsForPath = loadScriptsForPath\n\t window.___push = function (to) {\n\t return navigate(to, false);\n\t };\n\t window.___replace = function (to) {\n\t return navigate(to, true);\n\t };\n\t window.___navigateTo = window.___push;\n\t\n\t // Call onRouteUpdate on the initial page load.\n\t (0, _apiRunnerBrowser.apiRunner)(\"onRouteUpdate\", {\n\t location: _history3.default.location,\n\t action: _history3.default.action\n\t });\n\t\n\t var initialAttachDone = false;\n\t function attachToHistory(history) {\n\t if (!window.___history || initialAttachDone === false) {\n\t window.___history = history;\n\t initialAttachDone = true;\n\t\n\t history.listen(function (location, action) {\n\t if (!maybeRedirect(location.pathname)) {\n\t // Make sure React has had a chance to flush to DOM first.\n\t setTimeout(function () {\n\t (0, _apiRunnerBrowser.apiRunner)(\"onRouteUpdate\", { location: location, action: action });\n\t }, 0);\n\t }\n\t });\n\t }\n\t }\n\t\n\t function shouldUpdateScroll(prevRouterProps, _ref) {\n\t var pathname = _ref.location.pathname;\n\t\n\t var results = (0, _apiRunnerBrowser.apiRunner)(\"shouldUpdateScroll\", {\n\t prevRouterProps: prevRouterProps,\n\t pathname: pathname\n\t });\n\t if (results.length > 0) {\n\t return results[0];\n\t }\n\t\n\t if (prevRouterProps) {\n\t var oldPathname = prevRouterProps.location.pathname;\n\t\n\t if (oldPathname === pathname) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t }\n\t\n\t var AltRouter = (0, _apiRunnerBrowser.apiRunner)(\"replaceRouterComponent\", { history: _history3.default })[0];\n\t var DefaultRouter = function DefaultRouter(_ref2) {\n\t var children = _ref2.children;\n\t return _react2.default.createElement(\n\t _reactRouterDom.Router,\n\t { history: _history3.default },\n\t children\n\t );\n\t };\n\t\n\t var ComponentRendererWithRouter = (0, _reactRouterDom.withRouter)(_componentRenderer2.default);\n\t\n\t _loader2.default.getResourcesForPathname(window.location.pathname, function () {\n\t var Root = function Root() {\n\t return (0, _react.createElement)(AltRouter ? AltRouter : DefaultRouter, null, (0, _react.createElement)(_gatsbyReactRouterScroll.ScrollContext, { shouldUpdateScroll: shouldUpdateScroll }, (0, _react.createElement)(ComponentRendererWithRouter, {\n\t layout: true,\n\t children: function children(layoutProps) {\n\t return (0, _react.createElement)(_reactRouterDom.Route, {\n\t render: function render(routeProps) {\n\t attachToHistory(routeProps.history);\n\t var props = layoutProps ? layoutProps : routeProps;\n\t\n\t if (_loader2.default.getPage(props.location.pathname)) {\n\t return (0, _react.createElement)(_componentRenderer2.default, _extends({\n\t page: true\n\t }, props));\n\t } else {\n\t return (0, _react.createElement)(_componentRenderer2.default, {\n\t page: true,\n\t location: { pathname: \"/404.html\" }\n\t });\n\t }\n\t }\n\t });\n\t }\n\t })));\n\t };\n\t\n\t var NewRoot = (0, _apiRunnerBrowser.apiRunner)(\"wrapRootComponent\", { Root: Root }, Root)[0];\n\t\n\t var renderer = (0, _apiRunnerBrowser.apiRunner)(\"replaceHydrateFunction\", undefined, _reactDom2.default.render)[0];\n\t\n\t (0, _domready2.default)(function () {\n\t return renderer(_react2.default.createElement(NewRoot, null), typeof window !== \"undefined\" ? document.getElementById(\"___gatsby\") : void 0, function () {\n\t (0, _apiRunnerBrowser.apiRunner)(\"onInitialClientRender\");\n\t });\n\t });\n\t });\n\t});\n\n/***/ }),\n\n/***/ 805:\n/***/ (function(module, exports) {\n\n\tmodule.exports = []\n\n/***/ }),\n\n/***/ 576:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _emitter = __webpack_require__(148);\n\t\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar pathPrefix = \"/\";\n\tif (false) {\n\t pathPrefix = __PATH_PREFIX__ + \"/\";\n\t}\n\t\n\tif (\"serviceWorker\" in navigator) {\n\t navigator.serviceWorker.register(pathPrefix + \"sw.js\").then(function (reg) {\n\t reg.addEventListener(\"updatefound\", function () {\n\t // The updatefound event implies that reg.installing is set; see\n\t // https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\n\t var installingWorker = reg.installing;\n\t console.log(\"installingWorker\", installingWorker);\n\t installingWorker.addEventListener(\"statechange\", function () {\n\t switch (installingWorker.state) {\n\t case \"installed\":\n\t if (navigator.serviceWorker.controller) {\n\t // At this point, the old content will have been purged and the fresh content will\n\t // have been added to the cache.\n\t // We reload immediately so the user sees the new content.\n\t // This could/should be made configurable in the future.\n\t window.location.reload();\n\t } else {\n\t // At this point, everything has been precached.\n\t // It's the perfect time to display a \"Content is cached for offline use.\" message.\n\t console.log(\"Content is now available offline!\");\n\t _emitter2.default.emit(\"sw:installed\");\n\t }\n\t break;\n\t\n\t case \"redundant\":\n\t console.error(\"The installing service worker became redundant.\");\n\t break;\n\t }\n\t });\n\t });\n\t }).catch(function (e) {\n\t console.error(\"Error during service worker registration:\", e);\n\t });\n\t}\n\n/***/ }),\n\n/***/ 331:\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\t/**\n\t * Remove a prefix from a string. Return the input string if the given prefix\n\t * isn't found.\n\t */\n\t\n\texports.default = function (str) {\n\t var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n\t\n\t if (str.substr(0, prefix.length) === prefix) return str.slice(prefix.length);\n\t return str;\n\t};\n\t\n\tmodule.exports = exports[\"default\"];\n\n/***/ }),\n\n/***/ 577:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _reactRouterDom = __webpack_require__(139);\n\t\n\tvar _reactRedux = __webpack_require__(44);\n\t\n\tvar _propTypes = __webpack_require__(2);\n\t\n\tvar _propTypes2 = _interopRequireDefault(_propTypes);\n\t\n\tvar _store = __webpack_require__(40);\n\t\n\tvar _store2 = _interopRequireDefault(_store);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t// remove the JSS style tag generated on the server to avoid conflicts with the one added on the client\n\t// exports.onInitialClientRender = function() {\n\t// // eslint-disable-next-line no-undef\n\t// var ssStyles = window.document.getElementById(\"server-side-jss\");\n\t// ssStyles && ssStyles.parentNode.removeChild(ssStyles);\n\t// };\n\t\n\texports.replaceRouterComponent = function (_ref) {\n\t var history = _ref.history;\n\t\n\t var store = (0, _store2.default)();\n\t\n\t var ConnectedRouterWrapper = function ConnectedRouterWrapper(_ref2) {\n\t var children = _ref2.children;\n\t return _react2.default.createElement(\n\t _reactRedux.Provider,\n\t { store: store },\n\t _react2.default.createElement(\n\t _reactRouterDom.Router,\n\t { history: history },\n\t children\n\t )\n\t );\n\t };\n\t\n\t ConnectedRouterWrapper.propTypes = {\n\t children: _propTypes2.default.object.isRequired\n\t };\n\t\n\t return ConnectedRouterWrapper;\n\t};\n\n/***/ }),\n\n/***/ 742:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*!\n\t * domready (c) Dustin Diaz 2014 - License MIT\n\t */\n\t!function (name, definition) {\n\t\n\t if (true) module.exports = definition()\n\t else if (typeof define == 'function' && typeof define.amd == 'object') define(definition)\n\t else this[name] = definition()\n\t\n\t}('domready', function () {\n\t\n\t var fns = [], listener\n\t , doc = document\n\t , hack = doc.documentElement.doScroll\n\t , domContentLoaded = 'DOMContentLoaded'\n\t , loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState)\n\t\n\t\n\t if (!loaded)\n\t doc.addEventListener(domContentLoaded, listener = function () {\n\t doc.removeEventListener(domContentLoaded, listener)\n\t loaded = 1\n\t while (listener = fns.shift()) listener()\n\t })\n\t\n\t return function (fn) {\n\t loaded ? setTimeout(fn, 0) : fns.push(fn)\n\t }\n\t\n\t});\n\n\n/***/ }),\n\n/***/ 18:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\t/* global document: false, __webpack_require__: false */\n\tpatch();\n\t\n\tfunction patch() {\n\t var head = document.querySelector(\"head\");\n\t var ensure = __webpack_require__.e;\n\t var chunks = __webpack_require__.s;\n\t var failures;\n\t\n\t __webpack_require__.e = function (chunkId, callback) {\n\t var loaded = false;\n\t var immediate = true;\n\t\n\t var handler = function handler(error) {\n\t if (!callback) return;\n\t\n\t callback(__webpack_require__, error);\n\t callback = null;\n\t };\n\t\n\t if (!chunks && failures && failures[chunkId]) {\n\t handler(true);\n\t return;\n\t }\n\t\n\t ensure(chunkId, function () {\n\t if (loaded) return;\n\t loaded = true;\n\t\n\t if (immediate) {\n\t // webpack fires callback immediately if chunk was already loaded\n\t // IE also fires callback immediately if script was already\n\t // in a cache (AppCache counts too)\n\t setTimeout(function () {\n\t handler();\n\t });\n\t } else {\n\t handler();\n\t }\n\t });\n\t\n\t // This is |true| if chunk is already loaded and does not need onError call.\n\t // This happens because in such case ensure() is performed in sync way\n\t if (loaded) {\n\t return;\n\t }\n\t\n\t immediate = false;\n\t\n\t onError(function () {\n\t if (loaded) return;\n\t loaded = true;\n\t\n\t if (chunks) {\n\t chunks[chunkId] = void 0;\n\t } else {\n\t failures || (failures = {});\n\t failures[chunkId] = true;\n\t }\n\t\n\t handler(true);\n\t });\n\t };\n\t\n\t function onError(callback) {\n\t var script = head.lastChild;\n\t\n\t if (script.tagName !== \"SCRIPT\") {\n\t if (typeof console !== \"undefined\" && console.warn) {\n\t console.warn(\"Script is not a script\", script);\n\t }\n\t\n\t return;\n\t }\n\t\n\t script.onload = script.onerror = function () {\n\t script.onload = script.onerror = null;\n\t setTimeout(callback, 0);\n\t };\n\t }\n\t}\n\n/***/ }),\n\n/***/ 774:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _gatsbyLink = __webpack_require__(47);\n\t\n\tmodule.exports = function (root, cb) {\n\t root.addEventListener(\"click\", function (ev) {\n\t if (ev.button !== 0 || ev.altKey || ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.defaultPrevented) {\n\t return true;\n\t }\n\t\n\t var anchor = null;\n\t for (var n = ev.target; n.parentNode; n = n.parentNode) {\n\t if (n.nodeName === \"A\") {\n\t anchor = n;\n\t break;\n\t }\n\t }\n\t if (!anchor) return true;\n\t\n\t // Don't catch links where a target (other than self) is set\n\t // e.g. _blank.\n\t if (anchor.target && anchor.target.toLowerCase() !== \"_self\") return true;\n\t\n\t // Don't catch links pointed to the same page but with a hash.\n\t if (anchor.pathname === window.location.pathname && anchor.hash !== \"\") {\n\t return true;\n\t }\n\t\n\t // Dynamically created anchor links (href=\"#my-anchor\") do not always have pathname on IE\n\t if (anchor.pathname === \"\") {\n\t return true;\n\t }\n\t\n\t // Don't catch links pointed at what look like file extensions (other than\n\t // .htm/html extensions).\n\t if (anchor.pathname.search(/^.*\\.((?!htm)[a-z0-9]{1,5})$/i) !== -1) {\n\t return true;\n\t }\n\t\n\t // IE clears the host value if the anchor href changed after creation, e.g.\n\t // in React. Creating a new anchor element to ensure host value is present\n\t var a1 = document.createElement(\"a\");\n\t a1.href = anchor.href;\n\t\n\t // In IE, the default port is included in the anchor host but excluded from\n\t // the location host. This affects the ability to directly compare\n\t // location host to anchor host. For example: http://example.com would\n\t // have a location.host of 'example.com' and an anchor.host of\n\t // 'example.com:80' Creating anchor from the location.href to normalize the\n\t // host value.\n\t var a2 = document.createElement(\"a\");\n\t a2.href = window.location.href;\n\t\n\t if (a1.host !== a2.host) return true;\n\t\n\t // For when pathPrefix is used in an app and there happens to be a link\n\t // pointing to the same domain but outside of the app's pathPrefix. For\n\t // example, a Gatsby app lives at https://example.com/myapp/, with the\n\t // pathPrefix set to `/myapp`. When adding an absolute link to the same\n\t // domain but outside of the /myapp path, for example, <a\n\t // href=\"https://example.com/not-my-app\"> the plugin won't catch it and\n\t // will navigate to an external link instead of doing a pushState resulting\n\t // in `https://example.com/myapp/https://example.com/not-my-app`\n\t var re = new RegExp(\"^\" + a2.host + (0, _gatsbyLink.withPrefix)(\"/\"));\n\t if (!re.test(\"\" + a1.host + a1.pathname)) return true;\n\t\n\t // TODO: add a check for absolute internal links in a callback or here,\n\t // or always pass only `${a1.pathname}${a1.hash}`\n\t // to avoid `https://example.com/myapp/https://example.com/myapp/here` navigation\n\t\n\t ev.preventDefault();\n\t\n\t cb(anchor.getAttribute(\"href\"));\n\t return false;\n\t });\n\t};\n\n/***/ }),\n\n/***/ 775:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _gatsbyLink = __webpack_require__(47);\n\t\n\tvar _catchLinks = __webpack_require__(774);\n\t\n\tvar _catchLinks2 = _interopRequireDefault(_catchLinks);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.onClientEntry = function () {\n\t (0, _catchLinks2.default)(window, function (href) {\n\t (0, _gatsbyLink.navigateTo)(href);\n\t });\n\t};\n\n/***/ }),\n\n/***/ 776:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.onRouteUpdate = function (_ref) {\n\t var location = _ref.location;\n\t\n\t // Don't track while developing.\n\t if ((\"production\") === \"production\" && typeof ga === \"function\") {\n\t if (location && typeof window.excludeGAPaths !== \"undefined\" && window.excludeGAPaths.some(function (rx) {\n\t return rx.test(location.pathname);\n\t })) {\n\t return;\n\t }\n\t window.ga(\"set\", \"page\", location ? location.pathname + location.search + location.hash : undefined);\n\t window.ga(\"send\", \"pageview\");\n\t }\n\t};\n\n/***/ }),\n\n/***/ 751:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(99219681209289, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(777) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 778:\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.registerServiceWorker = function () {\n\t return true;\n\t};\n\n/***/ }),\n\n/***/ 981:\n/***/ (function(module, exports) {\n\n\tfunction n(n){return n=n||Object.create(null),{on:function(c,e){(n[c]||(n[c]=[])).push(e)},off:function(c,e){n[c]&&n[c].splice(n[c].indexOf(e)>>>0,1)},emit:function(c,e){(n[c]||[]).slice().map(function(n){n(e)}),(n[\"*\"]||[]).slice().map(function(n){n(c,e)})}}}module.exports=n;\n\t//# sourceMappingURL=mitt.js.map\n\n/***/ }),\n\n/***/ 1200:\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t// Pulled from react-compat\n\t// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\n\tfunction shallowDiffers(a, b) {\n\t for (var i in a) {\n\t if (!(i in b)) return true;\n\t }for (var _i in b) {\n\t if (a[_i] !== b[_i]) return true;\n\t }return false;\n\t}\n\t\n\texports.default = function (instance, nextProps, nextState) {\n\t return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n\t};\n\t\n\tmodule.exports = exports[\"default\"];\n\n/***/ }),\n\n/***/ 753:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(70144966829960, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(622) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 754:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(35783957827783, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(623) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 755:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(142807904292071, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(624) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 756:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(235131596041995, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(626) })\n\t }\n\t });\n\t }\n\t \n\n/***/ }),\n\n/***/ 757:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(\n\t 18\n\t );\n\t module.exports = function(cb) { return __webpack_require__.e/* nsure */(198517197184460, function(_, error) {\n\t if (error) {\n\t console.log('bundle loading error', error)\n\t cb(true)\n\t } else {\n\t cb(null, function() { return __webpack_require__(627) })\n\t }\n\t });\n\t }\n\t \n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// app-823e6ec7b4a49f43f7d2.js","var plugins = [{\n plugin: require('/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/gatsby-plugin-catch-links/gatsby-browser'),\n options: {\"plugins\":[]},\n },{\n plugin: require('/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/gatsby-plugin-offline/gatsby-browser'),\n options: {\"plugins\":[]},\n },{\n plugin: require('/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/gatsby-plugin-google-analytics/gatsby-browser'),\n options: {\"plugins\":[]},\n },{\n plugin: require('/Users/munniche/Documents/js-web-hack/1/shootmenow/gatsby-browser'),\n options: {\"plugins\":[]},\n }]\n// During bootstrap, we write requires at top of this file which looks\n// basically like:\n// var plugins = [\n// {\n// plugin: require(\"/path/to/plugin1/gatsby-browser.js\"),\n// options: { ... },\n// },\n// {\n// plugin: require(\"/path/to/plugin2/gatsby-browser.js\"),\n// options: { ... },\n// },\n// ]\n\nexport function apiRunner(api, args, defaultReturn) {\n let results = plugins.map(plugin => {\n if (plugin.plugin[api]) {\n const result = plugin.plugin[api](args, plugin.options)\n return result\n }\n })\n\n // Filter out undefined results.\n results = results.filter(result => typeof result !== `undefined`)\n\n if (results.length > 0) {\n return results\n } else if (defaultReturn) {\n return [defaultReturn]\n } else {\n return []\n }\n}\n\nexport function apiRunnerAsync(api, args, defaultReturn) {\n return plugins.reduce(\n (previous, next) =>\n next.plugin[api]\n ? previous.then(() => next.plugin[api](args, next.options))\n : previous,\n Promise.resolve()\n )\n}\n\n\n\n// WEBPACK FOOTER //\n// ./.cache/api-runner-browser.js","// prefer default export if available\nconst preferDefault = m => m && m.default || m\n\nexports.components = {\n \"component---node-modules-gatsby-plugin-offline-app-shell-js\": require(\"gatsby-module-loader?name=component---node-modules-gatsby-plugin-offline-app-shell-js!/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/gatsby-plugin-offline/app-shell.js\"),\n \"component---src-templates-page-template-js\": require(\"gatsby-module-loader?name=component---src-templates-page-template-js!/Users/munniche/Documents/js-web-hack/1/shootmenow/src/templates/PageTemplate.js\"),\n \"component---src-templates-post-template-js\": require(\"gatsby-module-loader?name=component---src-templates-post-template-js!/Users/munniche/Documents/js-web-hack/1/shootmenow/src/templates/PostTemplate.js\"),\n \"component---src-pages-contact-js\": require(\"gatsby-module-loader?name=component---src-pages-contact-js!/Users/munniche/Documents/js-web-hack/1/shootmenow/src/pages/contact.js\"),\n \"component---src-pages-index-js\": require(\"gatsby-module-loader?name=component---src-pages-index-js!/Users/munniche/Documents/js-web-hack/1/shootmenow/src/pages/index.js\"),\n \"component---src-pages-search-js\": require(\"gatsby-module-loader?name=component---src-pages-search-js!/Users/munniche/Documents/js-web-hack/1/shootmenow/src/pages/search.js\")\n}\n\nexports.json = {\n \"layout-index.json\": require(\"gatsby-module-loader?name=path---!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/layout-index.json\"),\n \"offline-plugin-app-shell-fallback.json\": require(\"gatsby-module-loader?name=path---offline-plugin-app-shell-fallback!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/offline-plugin-app-shell-fallback.json\"),\n \"success.json\": require(\"gatsby-module-loader?name=path---success!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/success.json\"),\n \"blog-up-again.json\": require(\"gatsby-module-loader?name=path---blog-up-again!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/blog-up-again.json\"),\n \"broke-the-blog.json\": require(\"gatsby-module-loader?name=path---broke-the-blog!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/broke-the-blog.json\"),\n \"about.json\": require(\"gatsby-module-loader?name=path---about!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/about.json\"),\n \"how-did-i-build-this-blog.json\": require(\"gatsby-module-loader?name=path---how-did-i-build-this-blog!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/how-did-i-build-this-blog.json\"),\n \"working-with-maxmind-geoip.json\": require(\"gatsby-module-loader?name=path---working-with-maxmind-geoip!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/working-with-maxmind-geoip.json\"),\n \"dns-over-tls-and-https.json\": require(\"gatsby-module-loader?name=path---dns-over-tls-and-https!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/dns-over-tls-and-https.json\"),\n \"basic-load-testing-with-h-2-load.json\": require(\"gatsby-module-loader?name=path---basic-load-testing-with-h-2-load!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/basic-load-testing-with-h-2-load.json\"),\n \"in-recent-news.json\": require(\"gatsby-module-loader?name=path---in-recent-news!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/in-recent-news.json\"),\n \"open-canary-honey-pot.json\": require(\"gatsby-module-loader?name=path---open-canary-honey-pot!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/open-canary-honey-pot.json\"),\n \"interesting-links-and-podcasts.json\": require(\"gatsby-module-loader?name=path---interesting-links-and-podcasts!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/interesting-links-and-podcasts.json\"),\n \"contact.json\": require(\"gatsby-module-loader?name=path---contact!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/contact.json\"),\n \"index.json\": require(\"gatsby-module-loader?name=path---index!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/index.json\"),\n \"search.json\": require(\"gatsby-module-loader?name=path---search!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/json/search.json\")\n}\n\nexports.layouts = {\n \"layout---index\": require(\"gatsby-module-loader?name=component---src-layouts-index-js!/Users/munniche/Documents/js-web-hack/1/shootmenow/.cache/layouts/index.js\")\n}\n\n\n// WEBPACK FOOTER //\n// ./.cache/async-requires.js","import React, { createElement } from \"react\"\nimport PropTypes from \"prop-types\"\nimport loader, { publicLoader } from \"./loader\"\nimport emitter from \"./emitter\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport shallowCompare from \"shallow-compare\"\n\nconst DefaultLayout = ({ children }) => <div>{children()}</div>\n\n// Pass pathname in as prop.\n// component will try fetching resources. If they exist,\n// will just render, else will render null.\nclass ComponentRenderer extends React.Component {\n constructor(props) {\n super()\n let location = props.location\n\n // Set the pathname for 404 pages.\n if (!loader.getPage(location.pathname)) {\n location = Object.assign({}, location, {\n pathname: `/404.html`,\n })\n }\n\n this.state = {\n location,\n pageResources: loader.getResourcesForPathname(location.pathname),\n }\n }\n\n componentWillReceiveProps(nextProps) {\n // During development, always pass a component's JSON through so graphql\n // updates go through.\n if (process.env.NODE_ENV !== `production`) {\n if (\n nextProps &&\n nextProps.pageResources &&\n nextProps.pageResources.json\n ) {\n this.setState({ pageResources: nextProps.pageResources })\n }\n }\n if (this.state.location.pathname !== nextProps.location.pathname) {\n const pageResources = loader.getResourcesForPathname(\n nextProps.location.pathname\n )\n if (!pageResources) {\n let location = nextProps.location\n\n // Set the pathname for 404 pages.\n if (!loader.getPage(location.pathname)) {\n location = Object.assign({}, location, {\n pathname: `/404.html`,\n })\n }\n\n // Page resources won't be set in cases where the browser back button\n // or forward button is pushed as we can't wait as normal for resources\n // to load before changing the page.\n loader.getResourcesForPathname(location.pathname, pageResources => {\n this.setState({\n location,\n pageResources,\n })\n })\n } else {\n this.setState({\n location: nextProps.location,\n pageResources,\n })\n }\n }\n }\n\n componentDidMount() {\n // Listen to events so when our page gets updated, we can transition.\n // This is only useful on delayed transitions as the page will get rendered\n // without the necessary page resources and then re-render once those come in.\n emitter.on(`onPostLoadPageResources`, e => {\n if (\n loader.getPage(this.state.location.pathname) &&\n e.page.path === loader.getPage(this.state.location.pathname).path\n ) {\n this.setState({ pageResources: e.pageResources })\n }\n })\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n // 404\n if (!nextState.pageResources) {\n return true\n }\n // Check if the component or json have changed.\n if (!this.state.pageResources && nextState.pageResources) {\n return true\n }\n if (\n this.state.pageResources.component !== nextState.pageResources.component\n ) {\n return true\n }\n\n if (this.state.pageResources.json !== nextState.pageResources.json) {\n return true\n }\n\n // Check if location has changed on a page using internal routing\n // via matchPath configuration.\n if (\n this.state.location.key !== nextState.location.key &&\n nextState.pageResources.page &&\n (nextState.pageResources.page.matchPath ||\n nextState.pageResources.page.path)\n ) {\n return true\n }\n\n return shallowCompare(this, nextProps, nextState)\n }\n\n render() {\n const pluginResponses = apiRunner(`replaceComponentRenderer`, {\n props: { ...this.props, pageResources: this.state.pageResources },\n loader: publicLoader,\n })\n const replacementComponent = pluginResponses[0]\n // If page.\n if (this.props.page) {\n if (this.state.pageResources) {\n return (\n replacementComponent ||\n createElement(this.state.pageResources.component, {\n key: this.props.location.pathname,\n ...this.props,\n ...this.state.pageResources.json,\n })\n )\n } else {\n return null\n }\n // If layout.\n } else if (this.props.layout) {\n return (\n replacementComponent ||\n createElement(\n this.state.pageResources && this.state.pageResources.layout\n ? this.state.pageResources.layout\n : DefaultLayout,\n {\n key:\n this.state.pageResources && this.state.pageResources.layout\n ? this.state.pageResources.layout\n : `DefaultLayout`,\n ...this.props,\n }\n )\n )\n } else {\n return null\n }\n }\n}\n\nComponentRenderer.propTypes = {\n page: PropTypes.bool,\n layout: PropTypes.bool,\n location: PropTypes.object,\n}\n\nexport default ComponentRenderer\n\n\n\n// WEBPACK FOOTER //\n// ./.cache/component-renderer.js","import mitt from \"mitt\"\nconst emitter = mitt()\nmodule.exports = emitter\n\n\n\n// WEBPACK FOOTER //\n// ./.cache/emitter.js","// TODO add tests especially for handling prefixed links.\nimport { matchPath } from \"react-router-dom\"\nimport stripPrefix from \"./strip-prefix\"\n\nconst pageCache = {}\n\nmodule.exports = (pages, pathPrefix = ``) => rawPathname => {\n let pathname = decodeURIComponent(rawPathname)\n\n // Remove the pathPrefix from the pathname.\n let trimmedPathname = stripPrefix(pathname, pathPrefix)\n\n // Remove any hashfragment\n if (trimmedPathname.split(`#`).length > 1) {\n trimmedPathname = trimmedPathname\n .split(`#`)\n .slice(0, -1)\n .join(``)\n }\n\n // Remove search query\n if (trimmedPathname.split(`?`).length > 1) {\n trimmedPathname = trimmedPathname\n .split(`?`)\n .slice(0, -1)\n .join(``)\n }\n\n if (pageCache[trimmedPathname]) {\n return pageCache[trimmedPathname]\n }\n\n let foundPage\n // Array.prototype.find is not supported in IE so we use this somewhat odd\n // work around.\n pages.some(page => {\n if (page.matchPath) {\n // Try both the path and matchPath\n if (\n matchPath(trimmedPathname, { path: page.path }) ||\n matchPath(trimmedPathname, {\n path: page.matchPath,\n })\n ) {\n foundPage = page\n pageCache[trimmedPathname] = page\n return true\n }\n } else {\n if (\n matchPath(trimmedPathname, {\n path: page.path,\n exact: true,\n })\n ) {\n foundPage = page\n pageCache[trimmedPathname] = page\n return true\n }\n\n // Finally, try and match request with default document.\n if (\n matchPath(trimmedPathname, {\n path: page.path + `index.html`,\n })\n ) {\n foundPage = page\n pageCache[trimmedPathname] = page\n return true\n }\n }\n\n return false\n })\n\n return foundPage\n}\n\n\n\n// WEBPACK FOOTER //\n// ./.cache/find-page.js","import createHistory from \"history/createBrowserHistory\"\nimport { apiRunner } from \"./api-runner-browser\"\n\nconst pluginResponses = apiRunner(`replaceHistory`)\nconst replacementHistory = pluginResponses[0]\nconst history = replacementHistory || createHistory()\nmodule.exports = history\n\n\n\n// WEBPACK FOOTER //\n// ./.cache/history.js","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./about.json\") })\n }\n }, \"path---about\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---about!./.cache/json/about.json\n// module id = 759\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./basic-load-testing-with-h-2-load.json\") })\n }\n }, \"path---basic-load-testing-with-h-2-load\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---basic-load-testing-with-h-2-load!./.cache/json/basic-load-testing-with-h-2-load.json\n// module id = 760\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./blog-up-again.json\") })\n }\n }, \"path---blog-up-again\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---blog-up-again!./.cache/json/blog-up-again.json\n// module id = 761\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./broke-the-blog.json\") })\n }\n }, \"path---broke-the-blog\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---broke-the-blog!./.cache/json/broke-the-blog.json\n// module id = 762\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./contact.json\") })\n }\n }, \"path---contact\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---contact!./.cache/json/contact.json\n// module id = 763\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./dns-over-tls-and-https.json\") })\n }\n }, \"path---dns-over-tls-and-https\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---dns-over-tls-and-https!./.cache/json/dns-over-tls-and-https.json\n// module id = 764\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./how-did-i-build-this-blog.json\") })\n }\n }, \"path---how-did-i-build-this-blog\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---how-did-i-build-this-blog!./.cache/json/how-did-i-build-this-blog.json\n// module id = 765\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./in-recent-news.json\") })\n }\n }, \"path---in-recent-news\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---in-recent-news!./.cache/json/in-recent-news.json\n// module id = 766\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./index.json\") })\n }\n }, \"path---index\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---index!./.cache/json/index.json\n// module id = 767\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./interesting-links-and-podcasts.json\") })\n }\n }, \"path---interesting-links-and-podcasts\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---interesting-links-and-podcasts!./.cache/json/interesting-links-and-podcasts.json\n// module id = 768\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./layout-index.json\") })\n }\n }, \"path---\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---!./.cache/json/layout-index.json\n// module id = 758\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./offline-plugin-app-shell-fallback.json\") })\n }\n }, \"path---offline-plugin-app-shell-fallback\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---offline-plugin-app-shell-fallback!./.cache/json/offline-plugin-app-shell-fallback.json\n// module id = 769\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./open-canary-honey-pot.json\") })\n }\n }, \"path---open-canary-honey-pot\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---open-canary-honey-pot!./.cache/json/open-canary-honey-pot.json\n// module id = 770\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./search.json\") })\n }\n }, \"path---search\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---search!./.cache/json/search.json\n// module id = 771\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./success.json\") })\n }\n }, \"path---success\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---success!./.cache/json/success.json\n// module id = 772\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/json-loader/index.js!./working-with-maxmind-geoip.json\") })\n }\n }, \"path---working-with-maxmind-geoip\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=path---working-with-maxmind-geoip!./.cache/json/working-with-maxmind-geoip.json\n// module id = 773\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/babel-loader/lib/index.js?{\\\"presets\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",{\\\"loose\\\":true,\\\"uglify\\\":true,\\\"modules\\\":\\\"commonjs\\\",\\\"targets\\\":{\\\"browsers\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"IE >= 9\\\"]},\\\"exclude\\\":[\\\"transform-regenerator\\\",\\\"transform-es2015-typeof-symbol\\\"]}],\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\"],\\\"plugins\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/gatsby/dist/utils/babel-plugin-extract-graphql.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-add-module-exports/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-transform-object-assign/lib/index.js\\\",\\\"syntax-dynamic-import\\\",\\\"dynamic-import-webpack\\\"],\\\"cacheDirectory\\\":true}!./index.js\") })\n }\n }, \"component---src-layouts-index-js\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=component---src-layouts-index-js!./.cache/layouts/index.js\n// module id = 752\n// module chunks = 231608221292675","import React, { createElement } from \"react\"\nimport pageFinderFactory from \"./find-page\"\nimport emitter from \"./emitter\"\nimport stripPrefix from \"./strip-prefix\"\nlet findPage\n\nlet syncRequires = {}\nlet asyncRequires = {}\nlet pathScriptsCache = {}\nlet resourceStrCache = {}\nlet resourceCache = {}\nlet pages = []\n// Note we're not actively using the path data atm. There\n// could be future optimizations however around trying to ensure\n// we load all resources for likely-to-be-visited paths.\nlet pathArray = []\nlet pathCount = {}\nlet pathPrefix = ``\nlet resourcesArray = []\nlet resourcesCount = {}\nconst preferDefault = m => (m && m.default) || m\nlet prefetcher\nlet inInitialRender = true\nlet fetchHistory = []\nconst failedPaths = {}\nconst failedResources = {}\nconst MAX_HISTORY = 5\n\n// Prefetcher logic\nif (process.env.NODE_ENV === `production`) {\n prefetcher = require(`./prefetcher`)({\n getNextQueuedResources: () => resourcesArray.slice(-1)[0],\n createResourceDownload: resourceName => {\n fetchResource(resourceName, () => {\n resourcesArray = resourcesArray.filter(r => r !== resourceName)\n prefetcher.onResourcedFinished(resourceName)\n })\n },\n })\n emitter.on(`onPreLoadPageResources`, e => {\n prefetcher.onPreLoadPageResources(e)\n })\n emitter.on(`onPostLoadPageResources`, e => {\n prefetcher.onPostLoadPageResources(e)\n })\n}\n\nconst sortResourcesByCount = (a, b) => {\n if (resourcesCount[a] > resourcesCount[b]) {\n return 1\n } else if (resourcesCount[a] < resourcesCount[b]) {\n return -1\n } else {\n return 0\n }\n}\n\nconst sortPagesByCount = (a, b) => {\n if (pathCount[a] > pathCount[b]) {\n return 1\n } else if (pathCount[a] < pathCount[b]) {\n return -1\n } else {\n return 0\n }\n}\n\nconst fetchResource = (resourceName, cb = () => {}) => {\n if (resourceStrCache[resourceName]) {\n process.nextTick(() => {\n cb(null, resourceStrCache[resourceName])\n })\n } else {\n // Find resource\n let resourceFunction\n if (resourceName.slice(0, 12) === `component---`) {\n resourceFunction = asyncRequires.components[resourceName]\n } else if (resourceName.slice(0, 9) === `layout---`) {\n resourceFunction = asyncRequires.layouts[resourceName]\n } else {\n resourceFunction = asyncRequires.json[resourceName]\n }\n\n // Download the resource\n resourceFunction((err, executeChunk) => {\n resourceStrCache[resourceName] = executeChunk\n fetchHistory.push({\n resource: resourceName,\n succeeded: !err,\n })\n\n if (!failedResources[resourceName]) {\n failedResources[resourceName] = err\n }\n\n fetchHistory = fetchHistory.slice(-MAX_HISTORY)\n cb(err, executeChunk)\n })\n }\n}\n\nconst getResourceModule = (resourceName, cb) => {\n if (resourceCache[resourceName]) {\n process.nextTick(() => {\n cb(null, resourceCache[resourceName])\n })\n } else if (failedResources[resourceName]) {\n process.nextTick(() => {\n cb(failedResources[resourceName])\n })\n } else {\n fetchResource(resourceName, (err, executeChunk) => {\n if (err) {\n cb(err)\n } else {\n const module = preferDefault(executeChunk())\n resourceCache[resourceName] = module\n cb(err, module)\n }\n })\n }\n}\n\nconst appearsOnLine = () => {\n const isOnLine = navigator.onLine\n if (typeof isOnLine === `boolean`) {\n return isOnLine\n }\n\n // If no navigator.onLine support assume onLine if any of last N fetches succeeded\n const succeededFetch = fetchHistory.find(entry => entry.succeeded)\n return !!succeededFetch\n}\n\nconst handleResourceLoadError = (path, message) => {\n console.log(message)\n\n if (!failedPaths[path]) {\n failedPaths[path] = message\n }\n\n if (\n appearsOnLine() &&\n window.location.pathname.replace(/\\/$/g, ``) !== path.replace(/\\/$/g, ``)\n ) {\n window.location.pathname = path\n }\n}\n\nlet mountOrder = 1\nconst queue = {\n empty: () => {\n pathArray = []\n pathCount = {}\n resourcesCount = {}\n resourcesArray = []\n pages = []\n pathPrefix = ``\n },\n addPagesArray: newPages => {\n pages = newPages\n if (\n typeof __PREFIX_PATHS__ !== `undefined` &&\n typeof __PATH_PREFIX__ !== `undefined`\n ) {\n if (__PREFIX_PATHS__ === true) pathPrefix = __PATH_PREFIX__\n }\n findPage = pageFinderFactory(newPages, pathPrefix)\n },\n addDevRequires: devRequires => {\n syncRequires = devRequires\n },\n addProdRequires: prodRequires => {\n asyncRequires = prodRequires\n },\n dequeue: () => pathArray.pop(),\n enqueue: rawPath => {\n // Check page exists.\n const path = stripPrefix(rawPath, pathPrefix)\n if (!pages.some(p => p.path === path)) {\n return false\n }\n\n const mountOrderBoost = 1 / mountOrder\n mountOrder += 1\n // console.log(\n // `enqueue \"${path}\", mountOrder: \"${mountOrder}, mountOrderBoost: ${mountOrderBoost}`\n // )\n\n // Add to path counts.\n if (!pathCount[path]) {\n pathCount[path] = 1\n } else {\n pathCount[path] += 1\n }\n\n // Add path to queue.\n if (!queue.has(path)) {\n pathArray.unshift(path)\n }\n\n // Sort pages by pathCount\n pathArray.sort(sortPagesByCount)\n\n // Add resources to queue.\n const page = findPage(path)\n if (page.jsonName) {\n if (!resourcesCount[page.jsonName]) {\n resourcesCount[page.jsonName] = 1 + mountOrderBoost\n } else {\n resourcesCount[page.jsonName] += 1 + mountOrderBoost\n }\n\n // Before adding, checking that the JSON resource isn't either\n // already queued or been downloading.\n if (\n resourcesArray.indexOf(page.jsonName) === -1 &&\n !resourceStrCache[page.jsonName]\n ) {\n resourcesArray.unshift(page.jsonName)\n }\n }\n if (page.componentChunkName) {\n if (!resourcesCount[page.componentChunkName]) {\n resourcesCount[page.componentChunkName] = 1 + mountOrderBoost\n } else {\n resourcesCount[page.componentChunkName] += 1 + mountOrderBoost\n }\n\n // Before adding, checking that the component resource isn't either\n // already queued or been downloading.\n if (\n resourcesArray.indexOf(page.componentChunkName) === -1 &&\n !resourceStrCache[page.jsonName]\n ) {\n resourcesArray.unshift(page.componentChunkName)\n }\n }\n\n // Sort resources by resourcesCount.\n resourcesArray.sort(sortResourcesByCount)\n if (process.env.NODE_ENV === `production`) {\n prefetcher.onNewResourcesAdded()\n }\n\n return true\n },\n getResources: () => {\n return {\n resourcesArray,\n resourcesCount,\n }\n },\n getPages: () => {\n return {\n pathArray,\n pathCount,\n }\n },\n getPage: pathname => findPage(pathname),\n has: path => pathArray.some(p => p === path),\n getResourcesForPathname: (path, cb = () => {}) => {\n if (\n inInitialRender &&\n navigator &&\n navigator.serviceWorker &&\n navigator.serviceWorker.controller &&\n navigator.serviceWorker.controller.state === `activated`\n ) {\n // If we're loading from a service worker (it's already activated on\n // this initial render) and we can't find a page, there's a good chance\n // we're on a new page that this (now old) service worker doesn't know\n // about so we'll unregister it and reload.\n if (!findPage(path)) {\n navigator.serviceWorker\n .getRegistrations()\n .then(function(registrations) {\n // We would probably need this to\n // prevent unnecessary reloading of the page\n // while unregistering of ServiceWorker is not happening\n if (registrations.length) {\n for (let registration of registrations) {\n registration.unregister()\n }\n window.location.reload()\n }\n })\n }\n }\n inInitialRender = false\n // In development we know the code is loaded already\n // so we just return with it immediately.\n if (process.env.NODE_ENV !== `production`) {\n const page = findPage(path)\n if (!page) return cb()\n const pageResources = {\n component: syncRequires.components[page.componentChunkName],\n json: syncRequires.json[page.jsonName],\n layout: syncRequires.layouts[page.layout],\n page,\n }\n cb(pageResources)\n return pageResources\n // Production code path\n } else {\n if (failedPaths[path]) {\n handleResourceLoadError(\n path,\n `Previously detected load failure for \"${path}\"`\n )\n\n return cb()\n }\n\n const page = findPage(path)\n\n if (!page) {\n handleResourceLoadError(path, `A page wasn't found for \"${path}\"`)\n\n return cb()\n }\n\n // Use the path from the page so the pathScriptsCache uses\n // the normalized path.\n path = page.path\n\n // Check if it's in the cache already.\n if (pathScriptsCache[path]) {\n process.nextTick(() => {\n cb(pathScriptsCache[path])\n emitter.emit(`onPostLoadPageResources`, {\n page,\n pageResources: pathScriptsCache[path],\n })\n })\n return pathScriptsCache[path]\n }\n\n emitter.emit(`onPreLoadPageResources`, { path })\n // Nope, we need to load resource(s)\n let component\n let json\n let layout\n // Load the component/json/layout and parallel and call this\n // function when they're done loading. When both are loaded,\n // we move on.\n const done = () => {\n if (component && json && (!page.layoutComponentChunkName || layout)) {\n pathScriptsCache[path] = { component, json, layout, page }\n const pageResources = { component, json, layout, page }\n cb(pageResources)\n emitter.emit(`onPostLoadPageResources`, {\n page,\n pageResources,\n })\n }\n }\n getResourceModule(page.componentChunkName, (err, c) => {\n if (err) {\n handleResourceLoadError(\n page.path,\n `Loading the component for ${page.path} failed`\n )\n }\n component = c\n done()\n })\n getResourceModule(page.jsonName, (err, j) => {\n if (err) {\n handleResourceLoadError(\n page.path,\n `Loading the JSON for ${page.path} failed`\n )\n }\n json = j\n done()\n })\n\n page.layoutComponentChunkName &&\n getResourceModule(page.layout, (err, l) => {\n if (err) {\n handleResourceLoadError(\n page.path,\n `Loading the Layout for ${page.path} failed`\n )\n }\n layout = l\n done()\n })\n\n return undefined\n }\n },\n peek: path => pathArray.slice(-1)[0],\n length: () => pathArray.length,\n indexOf: path => pathArray.length - pathArray.indexOf(path) - 1,\n}\n\nexport const publicLoader = {\n getResourcesForPathname: queue.getResourcesForPathname,\n}\n\nexport default queue\n\n\n\n// WEBPACK FOOTER //\n// ./.cache/loader.js","module.exports = [{\"componentChunkName\":\"component---node-modules-gatsby-plugin-offline-app-shell-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"offline-plugin-app-shell-fallback.json\",\"path\":\"/offline-plugin-app-shell-fallback/\"},{\"componentChunkName\":\"component---src-templates-page-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"success.json\",\"path\":\"/success/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"blog-up-again.json\",\"path\":\"/blog-up-again/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"broke-the-blog.json\",\"path\":\"/broke-the-blog/\"},{\"componentChunkName\":\"component---src-templates-page-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"about.json\",\"path\":\"/about/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"how-did-i-build-this-blog.json\",\"path\":\"/how-did-i-build-this-blog/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"working-with-maxmind-geoip.json\",\"path\":\"/working-with-maxmind-geoip/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"dns-over-tls-and-https.json\",\"path\":\"/dns-over-tls-and-https/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"basic-load-testing-with-h-2-load.json\",\"path\":\"/basic-load-testing-with-h2load/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"in-recent-news.json\",\"path\":\"/in-recent-news/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"open-canary-honey-pot.json\",\"path\":\"/open-canary-honey-pot/\"},{\"componentChunkName\":\"component---src-templates-post-template-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"interesting-links-and-podcasts.json\",\"path\":\"/interesting-links-and-podcasts/\"},{\"componentChunkName\":\"component---src-pages-contact-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"contact.json\",\"path\":\"/contact/\"},{\"componentChunkName\":\"component---src-pages-index-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"index.json\",\"path\":\"/\"},{\"componentChunkName\":\"component---src-pages-search-js\",\"layout\":\"layout---index\",\"layoutComponentChunkName\":\"component---src-layouts-index-js\",\"jsonName\":\"search.json\",\"path\":\"/search/\"}]\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./.cache/pages.json\n// module id = 804\n// module chunks = 231608221292675","module.exports = ({ getNextQueuedResources, createResourceDownload }) => {\n let pagesLoading = []\n let resourcesDownloading = []\n\n // Do things\n const startResourceDownloading = () => {\n const nextResource = getNextQueuedResources()\n if (nextResource) {\n resourcesDownloading.push(nextResource)\n createResourceDownload(nextResource)\n }\n }\n\n const reducer = action => {\n switch (action.type) {\n case `RESOURCE_FINISHED`:\n resourcesDownloading = resourcesDownloading.filter(\n r => r !== action.payload\n )\n break\n case `ON_PRE_LOAD_PAGE_RESOURCES`:\n pagesLoading.push(action.payload.path)\n break\n case `ON_POST_LOAD_PAGE_RESOURCES`:\n pagesLoading = pagesLoading.filter(p => p !== action.payload.page.path)\n break\n case `ON_NEW_RESOURCES_ADDED`:\n break\n }\n\n // Take actions.\n // Wait for event loop queue to finish.\n setTimeout(() => {\n if (resourcesDownloading.length === 0 && pagesLoading.length === 0) {\n // Start another resource downloading.\n startResourceDownloading()\n }\n }, 0)\n }\n\n return {\n onResourcedFinished: event => {\n // Tell prefetcher that the resource finished downloading\n // so it can grab the next one.\n reducer({ type: `RESOURCE_FINISHED`, payload: event })\n },\n onPreLoadPageResources: event => {\n // Tell prefetcher a page load has started so it should stop\n // loading anything new\n reducer({ type: `ON_PRE_LOAD_PAGE_RESOURCES`, payload: event })\n },\n onPostLoadPageResources: event => {\n // Tell prefetcher a page load has finished so it should start\n // loading resources again.\n reducer({ type: `ON_POST_LOAD_PAGE_RESOURCES`, payload: event })\n },\n onNewResourcesAdded: () => {\n // Tell prefetcher that more resources to be downloaded have\n // been added.\n reducer({ type: `ON_NEW_RESOURCES_ADDED` })\n },\n getState: () => {\n return { pagesLoading, resourcesDownloading }\n },\n empty: () => {\n pagesLoading = []\n resourcesDownloading = []\n },\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./.cache/prefetcher.js","if (__POLYFILL__) {\n require(`core-js/fn/promise`)\n}\nimport { apiRunner, apiRunnerAsync } from \"./api-runner-browser\"\nimport React, { createElement } from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Router, Route, withRouter, matchPath } from \"react-router-dom\"\nimport { ScrollContext } from \"gatsby-react-router-scroll\"\nimport domReady from \"domready\"\nimport { createLocation } from \"history\"\nimport history from \"./history\"\nwindow.___history = history\nimport emitter from \"./emitter\"\nwindow.___emitter = emitter\nimport pages from \"./pages.json\"\nimport redirects from \"./redirects.json\"\nimport ComponentRenderer from \"./component-renderer\"\nimport asyncRequires from \"./async-requires\"\nimport loader from \"./loader\"\nloader.addPagesArray(pages)\nloader.addProdRequires(asyncRequires)\nwindow.asyncRequires = asyncRequires\nwindow.___loader = loader\nwindow.matchPath = matchPath\n\n// Convert to a map for faster lookup in maybeRedirect()\nconst redirectMap = redirects.reduce((map, redirect) => {\n map[redirect.fromPath] = redirect\n return map\n}, {})\n\nconst maybeRedirect = pathname => {\n const redirect = redirectMap[pathname]\n\n if (redirect != null) {\n history.replace(redirect.toPath)\n return true\n } else {\n return false\n }\n}\n\n// Check for initial page-load redirect\nmaybeRedirect(window.location.pathname)\n\n// Let the site/plugins run code very early.\napiRunnerAsync(`onClientEntry`).then(() => {\n // Let plugins register a service worker. The plugin just needs\n // to return true.\n if (apiRunner(`registerServiceWorker`).length > 0) {\n require(`./register-service-worker`)\n }\n\n const navigate = (to, replace) => {\n const location = createLocation(to, null, null, history.location)\n let { pathname } = location\n const redirect = redirectMap[pathname]\n\n // If we're redirecting, just replace the passed in pathname\n // to the one we want to redirect to.\n if (redirect) {\n pathname = redirect.toPath\n }\n const wl = window.location\n\n // If we're already at this location, do nothing.\n if (\n wl.pathname === location.pathname &&\n wl.search === location.search &&\n wl.hash === location.hash\n ) {\n return\n }\n\n const historyNavigateFunc = replace\n ? window.___history.replace\n : window.___history.push\n\n // Listen to loading events. If page resources load before\n // a second, navigate immediately.\n function eventHandler(e) {\n if (e.page.path === loader.getPage(pathname).path) {\n emitter.off(`onPostLoadPageResources`, eventHandler)\n clearTimeout(timeoutId)\n historyNavigateFunc(location)\n }\n }\n\n // Start a timer to wait for a second before transitioning and showing a\n // loader in case resources aren't around yet.\n const timeoutId = setTimeout(() => {\n emitter.off(`onPostLoadPageResources`, eventHandler)\n emitter.emit(`onDelayedLoadPageResources`, { pathname })\n historyNavigateFunc(location)\n }, 1000)\n\n if (loader.getResourcesForPathname(pathname)) {\n // The resources are already loaded so off we go.\n clearTimeout(timeoutId)\n historyNavigateFunc(location)\n } else {\n // They're not loaded yet so let's add a listener for when\n // they finish loading.\n emitter.on(`onPostLoadPageResources`, eventHandler)\n }\n }\n\n // window.___loadScriptsForPath = loadScriptsForPath\n window.___push = (to) => navigate(to, false)\n window.___replace = (to) => navigate(to, true)\n window.___navigateTo = window.___push\n\n // Call onRouteUpdate on the initial page load.\n apiRunner(`onRouteUpdate`, {\n location: history.location,\n action: history.action,\n })\n\n let initialAttachDone = false\n function attachToHistory(history) {\n if (!window.___history || initialAttachDone === false) {\n window.___history = history\n initialAttachDone = true\n\n history.listen((location, action) => {\n if (!maybeRedirect(location.pathname)) {\n // Make sure React has had a chance to flush to DOM first.\n setTimeout(() => {\n apiRunner(`onRouteUpdate`, { location, action })\n }, 0)\n }\n })\n }\n }\n\n function shouldUpdateScroll(prevRouterProps, { location: { pathname } }) {\n const results = apiRunner(`shouldUpdateScroll`, {\n prevRouterProps,\n pathname,\n })\n if (results.length > 0) {\n return results[0]\n }\n\n if (prevRouterProps) {\n const {\n location: { pathname: oldPathname },\n } = prevRouterProps\n if (oldPathname === pathname) {\n return false\n }\n }\n return true\n }\n\n const AltRouter = apiRunner(`replaceRouterComponent`, { history })[0]\n const DefaultRouter = ({ children }) => (\n <Router history={history}>{children}</Router>\n )\n\n const ComponentRendererWithRouter = withRouter(ComponentRenderer)\n\n loader.getResourcesForPathname(window.location.pathname, () => {\n const Root = () =>\n createElement(\n AltRouter ? AltRouter : DefaultRouter,\n null,\n createElement(\n ScrollContext,\n { shouldUpdateScroll },\n createElement(ComponentRendererWithRouter, {\n layout: true,\n children: layoutProps =>\n createElement(Route, {\n render: routeProps => {\n attachToHistory(routeProps.history)\n const props = layoutProps ? layoutProps : routeProps\n\n if (loader.getPage(props.location.pathname)) {\n return createElement(ComponentRenderer, {\n page: true,\n ...props,\n })\n } else {\n return createElement(ComponentRenderer, {\n page: true,\n location: { pathname: `/404.html` },\n })\n }\n },\n }),\n })\n )\n )\n\n const NewRoot = apiRunner(`wrapRootComponent`, { Root }, Root)[0]\n\n const renderer = apiRunner(\n `replaceHydrateFunction`,\n undefined,\n ReactDOM.render\n )[0]\n\n domReady(() =>\n renderer(\n <NewRoot />,\n typeof window !== `undefined`\n ? document.getElementById(`___gatsby`)\n : void 0,\n () => {\n apiRunner(`onInitialClientRender`)\n }\n )\n )\n })\n})\n\n\n\n// WEBPACK FOOTER //\n// ./.cache/production-app.js","module.exports = []\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./.cache/redirects.json\n// module id = 805\n// module chunks = 231608221292675","import emitter from \"./emitter\"\n\nlet pathPrefix = `/`\nif (__PREFIX_PATHS__) {\n pathPrefix = __PATH_PREFIX__ + `/`\n}\n\nif (`serviceWorker` in navigator) {\n navigator.serviceWorker\n .register(`${pathPrefix}sw.js`)\n .then(function(reg) {\n reg.addEventListener(`updatefound`, () => {\n // The updatefound event implies that reg.installing is set; see\n // https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\n const installingWorker = reg.installing\n console.log(`installingWorker`, installingWorker)\n installingWorker.addEventListener(`statechange`, () => {\n switch (installingWorker.state) {\n case `installed`:\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and the fresh content will\n // have been added to the cache.\n // We reload immediately so the user sees the new content.\n // This could/should be made configurable in the future.\n window.location.reload()\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a \"Content is cached for offline use.\" message.\n console.log(`Content is now available offline!`)\n emitter.emit(`sw:installed`)\n }\n break\n\n case `redundant`:\n console.error(`The installing service worker became redundant.`)\n break\n }\n })\n })\n })\n .catch(function(e) {\n console.error(`Error during service worker registration:`, e)\n })\n}\n\n\n\n// WEBPACK FOOTER //\n// ./.cache/register-service-worker.js","/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn't found.\n */\n\nexport default (str, prefix = ``) => {\n if (str.substr(0, prefix.length) === prefix) return str.slice(prefix.length)\n return str\n}\n\n\n\n// WEBPACK FOOTER //\n// ./.cache/strip-prefix.js","import React from \"react\";\nimport { Router } from \"react-router-dom\";\nimport { Provider } from \"react-redux\";\nimport PropTypes from \"prop-types\";\n\nimport createStore from \"./src/state/store\";\n\n// remove the JSS style tag generated on the server to avoid conflicts with the one added on the client\n// exports.onInitialClientRender = function() {\n// // eslint-disable-next-line no-undef\n// var ssStyles = window.document.getElementById(\"server-side-jss\");\n// ssStyles && ssStyles.parentNode.removeChild(ssStyles);\n// };\n\nexports.replaceRouterComponent = ({ history }) => {\n const store = createStore();\n\n const ConnectedRouterWrapper = ({ children }) => (\n <Provider store={store}>\n <Router history={history}>{children}</Router>\n </Provider>\n );\n\n ConnectedRouterWrapper.propTypes = {\n children: PropTypes.object.isRequired\n };\n\n return ConnectedRouterWrapper;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./gatsby-browser.js","/*!\n * domready (c) Dustin Diaz 2014 - License MIT\n */\n!function (name, definition) {\n\n if (typeof module != 'undefined') module.exports = definition()\n else if (typeof define == 'function' && typeof define.amd == 'object') define(definition)\n else this[name] = definition()\n\n}('domready', function () {\n\n var fns = [], listener\n , doc = document\n , hack = doc.documentElement.doScroll\n , domContentLoaded = 'DOMContentLoaded'\n , loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState)\n\n\n if (!loaded)\n doc.addEventListener(domContentLoaded, listener = function () {\n doc.removeEventListener(domContentLoaded, listener)\n loaded = 1\n while (listener = fns.shift()) listener()\n })\n\n return function (fn) {\n loaded ? setTimeout(fn, 0) : fns.push(fn)\n }\n\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/domready/ready.js\n// module id = 742\n// module chunks = 231608221292675","\"use strict\";\n\n/* global document: false, __webpack_require__: false */\npatch();\n\nfunction patch() {\n var head = document.querySelector(\"head\");\n var ensure = __webpack_require__.e;\n var chunks = __webpack_require__.s;\n var failures;\n\n __webpack_require__.e = function (chunkId, callback) {\n var loaded = false;\n var immediate = true;\n\n var handler = function handler(error) {\n if (!callback) return;\n\n callback(__webpack_require__, error);\n callback = null;\n };\n\n if (!chunks && failures && failures[chunkId]) {\n handler(true);\n return;\n }\n\n ensure(chunkId, function () {\n if (loaded) return;\n loaded = true;\n\n if (immediate) {\n // webpack fires callback immediately if chunk was already loaded\n // IE also fires callback immediately if script was already\n // in a cache (AppCache counts too)\n setTimeout(function () {\n handler();\n });\n } else {\n handler();\n }\n });\n\n // This is |true| if chunk is already loaded and does not need onError call.\n // This happens because in such case ensure() is performed in sync way\n if (loaded) {\n return;\n }\n\n immediate = false;\n\n onError(function () {\n if (loaded) return;\n loaded = true;\n\n if (chunks) {\n chunks[chunkId] = void 0;\n } else {\n failures || (failures = {});\n failures[chunkId] = true;\n }\n\n handler(true);\n });\n };\n\n function onError(callback) {\n var script = head.lastChild;\n\n if (script.tagName !== \"SCRIPT\") {\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(\"Script is not a script\", script);\n }\n\n return;\n }\n\n script.onload = script.onerror = function () {\n script.onload = script.onerror = null;\n setTimeout(callback, 0);\n };\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader/patch.js\n// module id = 18\n// module chunks = 231608221292675","\"use strict\";\n\nvar _gatsbyLink = require(\"gatsby-link\");\n\nmodule.exports = function (root, cb) {\n root.addEventListener(\"click\", function (ev) {\n if (ev.button !== 0 || ev.altKey || ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.defaultPrevented) {\n return true;\n }\n\n var anchor = null;\n for (var n = ev.target; n.parentNode; n = n.parentNode) {\n if (n.nodeName === \"A\") {\n anchor = n;\n break;\n }\n }\n if (!anchor) return true;\n\n // Don't catch links where a target (other than self) is set\n // e.g. _blank.\n if (anchor.target && anchor.target.toLowerCase() !== \"_self\") return true;\n\n // Don't catch links pointed to the same page but with a hash.\n if (anchor.pathname === window.location.pathname && anchor.hash !== \"\") {\n return true;\n }\n\n // Dynamically created anchor links (href=\"#my-anchor\") do not always have pathname on IE\n if (anchor.pathname === \"\") {\n return true;\n }\n\n // Don't catch links pointed at what look like file extensions (other than\n // .htm/html extensions).\n if (anchor.pathname.search(/^.*\\.((?!htm)[a-z0-9]{1,5})$/i) !== -1) {\n return true;\n }\n\n // IE clears the host value if the anchor href changed after creation, e.g.\n // in React. Creating a new anchor element to ensure host value is present\n var a1 = document.createElement(\"a\");\n a1.href = anchor.href;\n\n // In IE, the default port is included in the anchor host but excluded from\n // the location host. This affects the ability to directly compare\n // location host to anchor host. For example: http://example.com would\n // have a location.host of 'example.com' and an anchor.host of\n // 'example.com:80' Creating anchor from the location.href to normalize the\n // host value.\n var a2 = document.createElement(\"a\");\n a2.href = window.location.href;\n\n if (a1.host !== a2.host) return true;\n\n // For when pathPrefix is used in an app and there happens to be a link\n // pointing to the same domain but outside of the app's pathPrefix. For\n // example, a Gatsby app lives at https://example.com/myapp/, with the\n // pathPrefix set to `/myapp`. When adding an absolute link to the same\n // domain but outside of the /myapp path, for example, <a\n // href=\"https://example.com/not-my-app\"> the plugin won't catch it and\n // will navigate to an external link instead of doing a pushState resulting\n // in `https://example.com/myapp/https://example.com/not-my-app`\n var re = new RegExp(\"^\" + a2.host + (0, _gatsbyLink.withPrefix)(\"/\"));\n if (!re.test(\"\" + a1.host + a1.pathname)) return true;\n\n // TODO: add a check for absolute internal links in a callback or here,\n // or always pass only `${a1.pathname}${a1.hash}`\n // to avoid `https://example.com/myapp/https://example.com/myapp/here` navigation\n\n ev.preventDefault();\n\n cb(anchor.getAttribute(\"href\"));\n return false;\n });\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-plugin-catch-links/catch-links.js\n// module id = 774\n// module chunks = 231608221292675","\"use strict\";\n\nvar _gatsbyLink = require(\"gatsby-link\");\n\nvar _catchLinks = require(\"./catch-links\");\n\nvar _catchLinks2 = _interopRequireDefault(_catchLinks);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.onClientEntry = function () {\n (0, _catchLinks2.default)(window, function (href) {\n (0, _gatsbyLink.navigateTo)(href);\n });\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-plugin-catch-links/gatsby-browser.js\n// module id = 775\n// module chunks = 231608221292675","\"use strict\";\n\nexports.onRouteUpdate = function (_ref) {\n var location = _ref.location;\n\n // Don't track while developing.\n if (process.env.NODE_ENV === \"production\" && typeof ga === \"function\") {\n if (location && typeof window.excludeGAPaths !== \"undefined\" && window.excludeGAPaths.some(function (rx) {\n return rx.test(location.pathname);\n })) {\n return;\n }\n window.ga(\"set\", \"page\", location ? location.pathname + location.search + location.hash : undefined);\n window.ga(\"send\", \"pageview\");\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-plugin-google-analytics/gatsby-browser.js\n// module id = 776\n// module chunks = 231608221292675","require(\n \"!../gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!./app-shell.js\") })\n }\n }, \"component---node-modules-gatsby-plugin-offline-app-shell-js\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=component---node-modules-gatsby-plugin-offline-app-shell-js!./~/gatsby-plugin-offline/app-shell.js\n// module id = 751\n// module chunks = 231608221292675","\"use strict\";\n\nexports.registerServiceWorker = function () {\n return true;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-plugin-offline/gatsby-browser.js\n// module id = 778\n// module chunks = 231608221292675","function n(n){return n=n||Object.create(null),{on:function(c,e){(n[c]||(n[c]=[])).push(e)},off:function(c,e){n[c]&&n[c].splice(n[c].indexOf(e)>>>0,1)},emit:function(c,e){(n[c]||[]).slice().map(function(n){n(e)}),(n[\"*\"]||[]).slice().map(function(n){n(c,e)})}}}module.exports=n;\n//# sourceMappingURL=mitt.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/mitt/dist/mitt.js\n// module id = 981\n// module chunks = 231608221292675","\"use strict\";\n\nexports.__esModule = true;\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) return true;\n }for (var _i in b) {\n if (a[_i] !== b[_i]) return true;\n }return false;\n}\n\nexports.default = function (instance, nextProps, nextState) {\n return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n};\n\nmodule.exports = exports[\"default\"];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/shallow-compare/lib/index.js\n// module id = 1200\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/babel-loader/lib/index.js?{\\\"presets\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",{\\\"loose\\\":true,\\\"uglify\\\":true,\\\"modules\\\":\\\"commonjs\\\",\\\"targets\\\":{\\\"browsers\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"IE >= 9\\\"]},\\\"exclude\\\":[\\\"transform-regenerator\\\",\\\"transform-es2015-typeof-symbol\\\"]}],\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\"],\\\"plugins\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/gatsby/dist/utils/babel-plugin-extract-graphql.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-add-module-exports/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-transform-object-assign/lib/index.js\\\",\\\"syntax-dynamic-import\\\",\\\"dynamic-import-webpack\\\"],\\\"cacheDirectory\\\":true}!./contact.js\") })\n }\n }, \"component---src-pages-contact-js\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=component---src-pages-contact-js!./src/pages/contact.js\n// module id = 753\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/babel-loader/lib/index.js?{\\\"presets\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",{\\\"loose\\\":true,\\\"uglify\\\":true,\\\"modules\\\":\\\"commonjs\\\",\\\"targets\\\":{\\\"browsers\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"IE >= 9\\\"]},\\\"exclude\\\":[\\\"transform-regenerator\\\",\\\"transform-es2015-typeof-symbol\\\"]}],\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\"],\\\"plugins\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/gatsby/dist/utils/babel-plugin-extract-graphql.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-add-module-exports/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-transform-object-assign/lib/index.js\\\",\\\"syntax-dynamic-import\\\",\\\"dynamic-import-webpack\\\"],\\\"cacheDirectory\\\":true}!./index.js\") })\n }\n }, \"component---src-pages-index-js\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=component---src-pages-index-js!./src/pages/index.js\n// module id = 754\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/babel-loader/lib/index.js?{\\\"presets\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",{\\\"loose\\\":true,\\\"uglify\\\":true,\\\"modules\\\":\\\"commonjs\\\",\\\"targets\\\":{\\\"browsers\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"IE >= 9\\\"]},\\\"exclude\\\":[\\\"transform-regenerator\\\",\\\"transform-es2015-typeof-symbol\\\"]}],\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\"],\\\"plugins\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/gatsby/dist/utils/babel-plugin-extract-graphql.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-add-module-exports/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-transform-object-assign/lib/index.js\\\",\\\"syntax-dynamic-import\\\",\\\"dynamic-import-webpack\\\"],\\\"cacheDirectory\\\":true}!./search.js\") })\n }\n }, \"component---src-pages-search-js\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=component---src-pages-search-js!./src/pages/search.js\n// module id = 755\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/babel-loader/lib/index.js?{\\\"presets\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",{\\\"loose\\\":true,\\\"uglify\\\":true,\\\"modules\\\":\\\"commonjs\\\",\\\"targets\\\":{\\\"browsers\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"IE >= 9\\\"]},\\\"exclude\\\":[\\\"transform-regenerator\\\",\\\"transform-es2015-typeof-symbol\\\"]}],\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\"],\\\"plugins\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/gatsby/dist/utils/babel-plugin-extract-graphql.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-add-module-exports/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-transform-object-assign/lib/index.js\\\",\\\"syntax-dynamic-import\\\",\\\"dynamic-import-webpack\\\"],\\\"cacheDirectory\\\":true}!./PageTemplate.js\") })\n }\n }, \"component---src-templates-page-template-js\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=component---src-templates-page-template-js!./src/templates/PageTemplate.js\n// module id = 756\n// module chunks = 231608221292675","require(\n \"!../../node_modules/gatsby-module-loader/patch.js\"\n );\n module.exports = function(cb) { return require.ensure([], function(_, error) {\n if (error) {\n console.log('bundle loading error', error)\n cb(true)\n } else {\n cb(null, function() { return require(\"!!../../node_modules/babel-loader/lib/index.js?{\\\"presets\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-env/lib/index.js\\\",{\\\"loose\\\":true,\\\"uglify\\\":true,\\\"modules\\\":\\\"commonjs\\\",\\\"targets\\\":{\\\"browsers\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"IE >= 9\\\"]},\\\"exclude\\\":[\\\"transform-regenerator\\\",\\\"transform-es2015-typeof-symbol\\\"]}],\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-stage-0/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-preset-react/lib/index.js\\\"],\\\"plugins\\\":[\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/gatsby/dist/utils/babel-plugin-extract-graphql.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-add-module-exports/lib/index.js\\\",\\\"/Users/munniche/Documents/js-web-hack/1/shootmenow/node_modules/babel-plugin-transform-object-assign/lib/index.js\\\",\\\"syntax-dynamic-import\\\",\\\"dynamic-import-webpack\\\"],\\\"cacheDirectory\\\":true}!./PostTemplate.js\") })\n }\n }, \"component---src-templates-post-template-js\");\n }\n \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gatsby-module-loader?name=component---src-templates-post-template-js!./src/templates/PostTemplate.js\n// module id = 757\n// module chunks = 231608221292675"],"sourceRoot":""}