CINXE.COM
Peter Nilson, Author at Railway Technology
<!doctype html> <html lang="en-US"> <head> <script async src='https://securepubads.g.doubleclick.net/tag/js/gpt.js'></script> <style> .login-button a { display: block; width: 100%; height: 100%; } .login-button.logout-button i { font-size: 25px; margin-left: 0.6em; } .login-button.logout-button{ background: none !important; text-indent: 0 !important; } </style> <script> </script> <link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,600;1,400;1,600&display=swap" rel="stylesheet"> <link rel='preload' id='fonts' href='https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/scss/fonts.css' media='all' as="style" onload="this.rel='stylesheet'"> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="ie=edge" /><script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"1385880850",accountID:"3318845",trustKey:"66686",xpid:"VwUGWV5XDRABVlRSBAgPU1EE",licenseKey:"NRJS-7b82eb47d05ddffd6c6",applicationID:"1250398555"};;/*! For license information please see nr-loader-spa-1.274.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>u});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function u(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>h,gD:()=>g,xN:()=>p});var n=r(993);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const u="[data-nr-mask]",d=()=>{const e={mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,harvestTimeSeconds:10,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},feature_flags:[],generic_events:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},harvest:{tooManyRequestsDelay:60},jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},logging:{enabled:!0,harvestTimeSeconds:10,autoStart:!0,level:n.p_.INFO},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(u):""===t||null===t?e.mask_selector=u:(0,a.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,a.R)(7,t)}},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},ssl:void 0,user_actions:{enabled:!0}}},l={},f="All configuration objects require an agent identifier!";function h(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function p(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,d());const r=(0,s.nY)(e);r&&(r.init=l[e])}function g(e,t){if(!e)throw new Error(f);var r=h(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},5603:(e,t,r)=>{"use strict";r.d(t,{a:()=>c,o:()=>s});var n=r(384),i=r(8122);const o={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},a={};function s(e){if(!e)throw new Error("All loader-config objects require an agent identifier!");if(!a[e])throw new Error("LoaderConfig for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.loader_config=a[e])}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,Yq:()=>a,xv:()=>n});const n="1.274.0",i="PROD",o="CDN",a="^2.0.0-alpha.17"},6154:(e,t,r)=>{"use strict";r.d(t,{A4:()=>s,OF:()=>d,RI:()=>i,WN:()=>h,bv:()=>o,gm:()=>a,lR:()=>f,m:()=>u,mw:()=>c,sb:()=>l});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s="complete"===a?.document?.readyState,c=Boolean("hidden"===a?.document?.visibilityState),u=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),l=d&&"undefined"==typeof SharedWorker,f=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),h=Date.now()-(0,n.t)()},7295:(e,t,r)=>{"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>o});var n=[];function i(e){if(!e||o(e))return!1;if(0===n.length)return!0;for(var t=0;t<n.length;t++){var r=n[t];if("*"===r.hostname)return!1;if(s(r.hostname,e.hostname)&&c(r.pathname,e.pathname))return!1}return!0}function o(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let o,a;i>0?(o=r.substring(0,i),a=r.substring(i)):(o=r,a="");let[s]=o.split(":");n.push({hostname:s,pathname:a})}}function s(e,t){return!(e.length>t.length)&&t.indexOf(e)===t.length-e.length}function c(e,t){return 0===e.indexOf("/")&&(e=e.substring(1)),0===t.indexOf("/")&&(t=t.substring(1)),""===e||e===t}},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),h(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return h(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),h(e,t)})))}function h(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)p(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function p(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(u.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=h(n),c=g(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var p=v()[s[e]];p&&p.push([f,e,r,a]);return a},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!v()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return d[t]=d[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,ZF:()=>c,bz:()=>a,el:()=>u});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}function c(){return s(16)}function u(){return s(32)}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},7485:(e,t,r)=>{"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},3304:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(7836);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},8139:(e,t,r)=>{"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),o=r(8990),a=r(6154);const s={},c=a.gm.XMLHttpRequest,u="addEventListener",d="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e){var t=function(e){return(e||n.ee).get("events")}(e);if(s[t.debugId]++)return t;s[t.debugId]=1;var r=(0,i.YM)(t,!0);function f(e){r.inPlace(e,[u,d],"-",p)}function p(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,f),h(a.gm,f),h(c.prototype,f)),t.on(u+"-start",(function(e,t){var n=e[1];if(null!==n&&("function"==typeof n||"object"==typeof n)){var i=(0,o.I)(n,l,(function(){var e={object:function(){if("function"!=typeof n.handleEvent)return;return n.handleEvent.apply(n,arguments)},function:n}[typeof n];return e?r(e,"fn-",null,e.name||"anonymous"):n}));this.wrapped=e[1]=i}})),t.on(d+"-start",(function(e){e[1]=this.wrapped||e[1]})),t}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,u);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434:(e,t,r)=>{"use strict";r.d(t,{Jt:()=>o,YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],u=e[c];d(u)||(e[c]=r(u,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return d(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,d,l;try{a=this,o=[...arguments],d="function"==typeof n?n(o,a):n||{}}catch(t){u([t,"",[o,a,s],d],e)}i(r+"start",[o,a,s],d,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],d,c),e}finally{i(r+"end",[o,a,l],d,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){u([t,r,n,i],e)}s=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function d(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},9300:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.ajax},3333:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,Zp:()=>i,mq:()=>s,nf:()=>a,qN:()=>o});const n=r(860).K7.genericEvents,i=["auxclick","click","copy","keydown","paste","scrollend"],o=["focus","blur"],a=4,s=1e3},6774:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.jserrors},993:(e,t,r)=>{"use strict";r.d(t,{ET:()=>o,TZ:()=>a,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o="log",a=n.K7.logging},3785:(e,t,r)=>{"use strict";r.d(t,{R:()=>c,b:()=>u});var n=r(9908),i=r(1863),o=r(860),a=r(3969),s=r(993);function c(e,t,r={},c=s.p_.INFO){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,o.K7.metrics,e),(0,n.p)(s.ET,[(0,i.t)(),t,r,c],void 0,o.K7.logging,e)}function u(e){return"string"==typeof e&&Object.values(s.p_).some((t=>t===e.toUpperCase().trim()))}},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>s,rs:()=>i,xV:()=>a,z_:()=>o});const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{BB:()=>d,G4:()=>o,Qb:()=>l,TZ:()=>i,Ug:()=>a,_s:()=>s,bc:()=>u,yP:()=>c});var n=r(2614);const i=r(860).K7.sessionReplay,o={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"},a=.12,s={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},c={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0},u={RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},d=5e3,l={API:"api"}},5270:(e,t,r)=>{"use strict";r.d(t,{Aw:()=>c,CT:()=>u,SR:()=>s});var n=r(384),i=r(9417),o=r(7767),a=r(6154);function s(e){return!!(0,n.dV)().o.MO&&(0,o.V)(e)&&!0===(0,i.gD)(e,"session_trace.enabled")}function c(e){return!0===(0,i.gD)(e,"session_replay.preload")&&s(e)}function u(e,t){const r=t.correctAbsoluteTimestamp(e);return{originalTimestamp:e,correctedTimestamp:r,timestampDiff:e-r,originTime:a.WN,correctedOriginTime:t.correctedOriginTime,originTimeDiff:Math.floor(a.WN-t.correctedOriginTime)}}},3738:(e,t,r)=>{"use strict";r.d(t,{He:()=>i,Kp:()=>s,Lc:()=>u,Rz:()=>d,TZ:()=>n,bD:()=>o,d3:()=>a,jx:()=>l,uP:()=>c});const n=r(860).K7.sessionTrace,i="bstResource",o="resource",a="-start",s="-end",c="fn"+a,u="fn"+s,d="pushState",l=1e3},3962:(e,t,r)=>{"use strict";r.d(t,{AM:()=>o,O2:()=>s,Qu:()=>c,TZ:()=>a,ih:()=>u,tC:()=>i});var n=r(860);const i=["click","keydown","submit"],o="api",a=n.K7.softNav,s={INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},c={INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},u={IP:"in progress",FIN:"finished",CAN:"cancelled"}},7378:(e,t,r)=>{"use strict";r.d(t,{$p:()=>x,BR:()=>b,Kp:()=>R,L3:()=>y,Lc:()=>c,NC:()=>o,SG:()=>d,TZ:()=>i,U6:()=>p,UT:()=>m,d3:()=>w,dT:()=>f,e5:()=>A,gx:()=>v,l9:()=>l,oW:()=>h,op:()=>g,rw:()=>u,tH:()=>E,uP:()=>s,wW:()=>T,xq:()=>a});var n=r(384);const i=r(860).K7.spa,o=["click","submit","keypress","keydown","keyup","change"],a=999,s="fn-start",c="fn-end",u="cb-start",d="api-ixn-",l="remaining",f="interaction",h="spaNode",p="jsonpNode",g="fetch-start",m="fetch-done",v="fetch-body-",b="jsonp-end",y=(0,n.dV)().o.ST,w="-start",R="-end",x="-body",T="cb"+R,A="jsTime",E="fetch"},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7767:(e,t,r)=>{"use strict";r.d(t,{V:()=>o});var n=r(9417),i=r(6154);const o=e=>i.RI&&!0===(0,n.gD)(e,"privacy.cookies_enabled")},425:(e,t,r)=>{"use strict";r.d(t,{j:()=>j});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),u=r(5289),d=r(6154),l=r(944),f=r(3969),h=r(384),p=r(6344);const g=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",p.G4.RECORD,p.G4.PAUSE,"log","wrapLogger"],m=["setErrorHandler","finished","addToTrace","addRelease"];var v=r(1863),b=r(2614),y=r(993),w=r(3785),R=r(2646),x=r(3434);function T(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const i=function(e){return(e||s.ee).get("logger")}(e),o=(0,x.YM)(i),a=new R.y(s.P);return a.level=n.level,a.customAttributes=n.customAttributes,o.inPlace(t,[r],"wrap-logger-",a),i}function A(){const e=(0,h.pV)();g.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const E={};var S=r(9417),N=r(5603),O=r(5284);const _=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let I=!1;function j(e,t={},g,R){let{init:x,info:j,loader_config:P,runtime:C={},exposed:k=!0}=t;C.loaderType=g;const L=(0,h.pV)();j||(x=L.init,j=L.info,P=L.loader_config),(0,S.xN)(e.agentIdentifier,x||{}),(0,N.a)(e.agentIdentifier,P||{}),j.jsAttributes??={},d.bv&&(j.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,j);const H=(0,S.D0)(e.agentIdentifier),D=[j.beacon,j.errorBeacon];I||(H.proxy.assets&&(_(H.proxy.assets),D.push(H.proxy.assets)),H.proxy.beacon&&D.push(H.proxy.beacon),A(),(0,h.US)("activatedFeatures",O.B),e.runSoftNavOverSpa&&=!0===H.soft_navigations.enabled&&H.feature_flags.includes("soft_nav")),C.denyList=[...H.ajax.deny_list||[],...H.ajax.block_internal?D:[]],C.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,C),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=function(e,t,h=!1){t||(0,c.Ak)(e,"api");const g={};var R=s.ee.get(e),x=R.get("tracer");E[e]=b.g.OFF,R.on(p.G4.REPLAY_RUNNING,(t=>{E[e]=t}));var A="api-",S=A+"ixn-";function N(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),I(A,n,!0,o||null===r?"session":void 0)(t,r)}function O(){}g.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,R),(0,w.R)(R,e,t,r)},g.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,R),T(R,e,t,{customAttributes:r,level:i})},m.forEach((e=>{g[e]=I(A,e,!0,"api")})),g.addPageAction=I(A,"addPageAction",!0,n.K7.genericEvents),g.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,I(A,"setPageViewName",!0)()},g.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return N(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},g.setUserId=function(e){if("string"==typeof e||null===e)return N("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},g.setApplicationVersion=function(e){if("string"==typeof e||null===e)return N("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},g.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,R),R.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},g[p.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,R),(0,a.p)(p.G4.RECORD,[],void 0,n.K7.sessionReplay,R)},g[p.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,R),(0,a.p)(p.G4.PAUSE,[],void 0,n.K7.sessionReplay,R)},g.interaction=function(e){return(new O).get("object"==typeof e?e:{})};const _=O.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,R),h||(0,a.p)(S+"tracer",[(0,v.t)(),e,r],i,n.K7.spa,R),function(){if(x.emit((o?"":"no-")+"fn-start",[(0,v.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw x.emit("fn-err",[arguments,this,t],r),t}finally{x.emit("fn-end",[(0,v.t)()],r)}}}};function I(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,R),i&&(0,a.p)(e+t,[(0,v.t)(),...arguments],r?null:this,i,R),r?void 0:this}}function j(){r.e(478).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),R.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{_[e]=I(S,e,void 0,h?n.K7.softNav:n.K7.spa)})),g.setCurrentRouteName=h?I(S,"routeName",void 0,n.K7.softNav):I(A,"routeName",!0,n.K7.spa),g.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,R),(0,a.p)("err",[t,(0,v.t)(),!1,r,!!E[e]],void 0,n.K7.jserrors,R)},d.RI?(0,u.GG)((()=>j()),!0):j(),g}(e.agentIdentifier,R,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=k),I=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>o,K7:()=>n,P3:()=>i});const n={ajax:"ajax",genericEvents:"generic_events",jserrors:"jserrors",logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.spa]:5,[n.ajax]:6,[n.sessionTrace]:7,[n.softNav]:8,[n.sessionReplay]:9,[n.logging]:10,[n.genericEvents]:11},o={[n.pageViewTiming]:"events",[n.ajax]:"events",[n.spa]:"events",[n.softNav]:"events",[n.metrics]:"jserrors",[n.jserrors]:"jserrors",[n.sessionTrace]:"browser/blobs",[n.sessionReplay]:"browser/blobs",[n.logging]:"browser/logs",[n.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>({212:"nr-spa-compressor",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.274.0.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.274.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var l=u[d];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={478:"sha512-1vUqEfJPB8Pihje9mv5CfYgkitO1FWcS+UQb84DbXqP8oYctRv4/lzl/MzNLPlRhcY1WVDBGL20I8vm6s2VV7g==",249:"sha512-Y/BeZAh6VSTmUtUNmS5XdyKxL92s30Fyyj8xVW76HSPxcKItL4+x2+kGMZc8pMJnUpZDz1L4eftZQAJh3D8NnA==",212:"sha512-Gn2tQ3qog5Yhrx/gRutkSTYPp+7nkKFt4/mIXg99LxcNpMDAYJZDBYmAACdoHNM86+iq1F3cBcQotFNzjIX8bw=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var h=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},p=setTimeout(h.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=h.bind(null,s.onerror),s.onload=h.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={38:0,788:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.274.0.PROD"]=self["webpackChunk:NRBA-1.274.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(e=(0,r.LA)(16)){this.agentIdentifier=e}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(425);var l=i(1687),f=i(4234),h=i(5289),p=i(6154),g=i(5270),m=i(7767),v=i(6389);class b extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,v.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if((0,m.V)(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(478).then(i.bind(i,6526));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(t.sharedAggregator)await t.sharedAggregator;else{t.sharedAggregator=i.e(478).then(i.bind(i,9337));const{EventAggregator:e}=await t.sharedAggregator;t.sharedAggregator=new e}if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(478).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};p.RI?(0,h.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return(0,g.SR)(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var y=i(6630);class w extends b{static featureName=y.T;constructor(e,t=!0){super(e,y.T,t),this.importAggregator(e)}}var R=i(384);var x=i(9908),T=i(2843),A=i(3878),E=i(782),S=i(1863);class N extends b{static featureName=E.T;constructor(e,t=!0){super(e,E.T,t),p.RI&&((0,T.u)((()=>(0,x.p)("docHidden",[(0,S.t)()],void 0,E.T,this.ee)),!0),(0,A.sp)("pagehide",(()=>(0,x.p)("winPagehide",[(0,S.t)()],void 0,E.T,this.ee))),this.importAggregator(e))}}var O=i(3969);class _ extends b{static featureName=O.TZ;constructor(e,t=!0){super(e,O.TZ,t),this.importAggregator(e)}}var I=i(6774),j=i(3304);class P{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,j.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function C(e){return H(e)?e:new P(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic)}function k(e){const t="Unhandled Promise Rejection";if(!e?.reason)return;if(H(e.reason))try{return e.reason.message=t+": "+e.reason.message,C(e.reason)}catch(t){return C(e.reason)}const r=C(e.reason);return r.message=t+": "+r?.message,r}function L(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new P(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic);return t.name=SyntaxError.name,t}return H(e.error)?e.error:C(e)}function H(e){return e instanceof Error&&!!e.stack}class D extends b{static featureName=I.T;#r=!1;constructor(e,r=!0){super(e,I.T,r);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(e=>{this.abortHandler&&(0,x.p)("ierr",[C(e),(0,S.t)(),!0,{},this.#r],void 0,this.featureName,this.ee)})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.#r=e})),p.gm.addEventListener("unhandledrejection",(e=>{this.abortHandler&&(0,x.p)("err",[k(e),(0,S.t)(),!1,{unhandledPromiseRejection:1},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),p.gm.addEventListener("error",(e=>{this.abortHandler&&(0,x.p)("err",[L(e),(0,S.t)(),!1,{},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e)}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var M=i(8990);let K=1;const U="nr@id";function V(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===p.gm?0:(0,M.I)(e,U,(function(){return K++}))}function G(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,j.A)(e).length}catch(e){return}}}var F=i(8139),B=i(7836),W=i(3434);const z={},q=["open","send"];function Z(t){var r=t||B.ee;const n=function(e){return(e||B.ee).get("xhr")}(r);if(z[n.debugId]++)return n;z[n.debugId]=1,(0,F.u)(r);var i=(0,W.YM)(n),o=p.gm.XMLHttpRequest,a=p.gm.MutationObserver,s=p.gm.Promise,c=p.gm.setInterval,u="readystatechange",d=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],l=[],f=p.gm.XMLHttpRequest=function(t){const r=new o(t),a=n.context(r);try{n.emit("new-xhr",[r],a),r.addEventListener(u,(s=a,function(){var e=this;e.readyState>3&&!s.resolved&&(s.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,d,"fn-",y)}),(0,A.jT)(!1))}catch(t){(0,e.R)(15,t);try{n.emit("internal-error",[t])}catch(e){}}var s;return r};function h(e,t){i.inPlace(t,["onreadystatechange"],"fn-",y)}if(function(e,t){for(var r in e)t[r]=e[r]}(o,f),f.prototype=o.prototype,i.inPlace(f.prototype,q,"-xhr-",y),n.on("send-xhr-start",(function(e,t){h(e,t),function(e){l.push(e),a&&(g?g.then(b):c?c(b):(m=-m,v.data=m))}(t)})),n.on("open-xhr-start",h),a){var g=s&&s.resolve();if(!c&&!s){var m=1,v=document.createTextNode(m);new a(b).observe(v,{characterData:!0})}}else r.on("fn-end",(function(e){e[0]&&e[0].type===u||b()}));function b(){for(var e=0;e<l.length;e++)h(0,l[e]);l.length&&(l=[])}function y(e,t){return t}return n}var Y="fetch-",X=Y+"body-",J=["arrayBuffer","blob","json","text","formData"],Q=p.gm.Request,ee=p.gm.Response,te="prototype";const re={};function ne(e){const t=function(e){return(e||B.ee).get("fetch")}(e);if(!(Q&&ee&&p.gm.fetch))return t;if(re[t.debugId]++)return t;function r(e,r,n){var i=e[r];"function"==typeof i&&(e[r]=function(){var e,r=[...arguments],o={};t.emit(n+"before-start",[r],o),o[B.P]&&o[B.P].dt&&(e=o[B.P].dt);var a=i.apply(this,r);return t.emit(n+"start",[r,e],a),a.then((function(e){return t.emit(n+"end",[null,e],a),e}),(function(e){throw t.emit(n+"end",[e],a),e}))})}return re[t.debugId]=1,J.forEach((e=>{r(Q[te],e,X),r(ee[te],e,X)})),r(p.gm,"fetch",Y),t.on(Y+"end",(function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(Y+"done",[null,r],n)}else t.emit(Y+"done",[e],n)})),t}var ie=i(7485),oe=i(5603);class ae{constructor(e){this.agentIdentifier=e}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var t=(0,oe.o)(this.agentIdentifier);if(!t)return null;var n=(t.accountID||"").toString()||null,i=(t.agentID||"").toString()||null,o=(t.trustKey||"").toString()||null;if(!n||!i)return null;var a=(0,r.ZF)(),s=(0,r.el)(),c=Date.now(),u={spanId:a,traceId:s,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(u.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),u.traceContextStateHeader=this.generateTraceContextStateHeader(a,c,n,i,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(u.newrelicHeader=this.generateTraceHeader(a,s,c,n,i,o)),u}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,o){if(!("function"==typeof p.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return o&&n!==o&&(a.d.tk=o),btoa((0,j.A)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1,r={};if((0,s.gD)(this.agentIdentifier,"distributed_tracing")&&(r=(0,s.D0)(this.agentIdentifier).distributed_tracing),e.sameOrigin)t=!0;else if(r.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,ie.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}isDtEnabled(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.enabled}excludeNewrelicHeader(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.cors_use_tracecontext_headers}}var se=i(9300),ce=i(7295),ue=["load","error","abort","timeout"],de=ue.length,le=(0,R.dV)().o.REQ,fe=(0,R.dV)().o.XHR;class he extends b{static featureName=se.T;constructor(e,t=!0){super(e,se.T,t),this.dt=new ae(e.agentIdentifier),this.handler=(e,t,r,n)=>(0,x.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};p.gm?.performance?.getEntriesByType("resource").forEach((t=>{if(t.initiatorType in e&&0!==t.responseStatus){const r={status:t.responseStatus},n={rxSize:t.transferSize,duration:Math.floor(t.duration),cbTime:0};pe(r,t.name),this.handler("xhr",[r,n,t.startTime,t.responseEnd,e[t.initiatorType]],void 0,a.K7.ajax)}}))}catch(e){}ne(this.ee),Z(this.ee),function(e,t,r,n){function i(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=R,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},e.addEventListener("load",(function(r){T(t,e)}),(0,A.jT)(!1)),p.lR||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,A.jT)(!1))}function o(e){this.params={method:e[0]},pe(this,e[1]),this.metrics={}}function s(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var i=n.generateTracePayload(this.parsedOrigin);if(i){var o=!1;i.newrelicHeader&&(r.setRequestHeader("newrelic",i.newrelicHeader),o=!0),i.traceContextParentHeader&&(r.setRequestHeader("traceparent",i.traceContextParentHeader),i.traceContextStateHeader&&r.setRequestHeader("tracestate",i.traceContextStateHeader),o=!0),o&&(this.dt=i)}}function c(e,r){var n=this.metrics,i=e[0],o=this;if(n&&i){var a=G(i);a&&(n.txSize=a)}this.startTime=(0,S.t)(),this.body=i,this.listener=function(e){try{"abort"!==e.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==e.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof r.onload)&&"function"==typeof o.end)&&o.end(r)}catch(e){try{t.emit("internal-error",[e])}catch(e){}}};for(var s=0;s<de;s++)r.addEventListener(ue[s],this.listener,(0,A.jT)(!1))}function u(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function d(e,t){var r=""+V(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function l(e,t){var r=""+V(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function f(){this.endTime=(0,S.t)()}function h(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-added",[e[1],e[2]],r)}function g(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-removed",[e[1],e[2]],r)}function m(e,t,r){t instanceof fe&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,S.t)()))}function v(e,r){this.xhrCbStart&&t.emit("xhr-cb-time",[(0,S.t)()-this.xhrCbStart,this.onload,r],r)}function b(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&p.RI&&(t=""+p.gm.location.href):e[0]&&e[0].url?t=e[0].url:p.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,ie.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var i=n.generateTracePayload(this.parsedOrigin);if(i&&(i.newrelicHeader||i.traceContextParentHeader))if(e[0]&&e[0].headers)s(e[0].headers,i)&&(this.dt=i);else{var o={};for(var a in r)o[a]=r[a];o.headers=new Headers(r.headers||{}),s(o.headers,i)&&(this.dt=i),e.length>1?e[1]=o:e.push(o)}}function s(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function y(e,t){this.params={},this.metrics={},this.startTime=(0,S.t)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r,n=this.opts||{},i=this.target;"string"==typeof i?r=i:"object"==typeof i&&i instanceof le?r=i.url:p.gm?.URL&&"object"==typeof i&&i instanceof URL&&(r=i.href),pe(this,r);var o=(""+(i&&i instanceof le&&i.method||n.method||"GET")).toUpperCase();this.params.method=o,this.body=n.body,this.txSize=G(n.body)||0}function w(e,t){if(this.endTime=(0,S.t)(),this.params||(this.params={}),(0,ce.iW)(this.params))return;let n;this.params.status=t?t.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);const i={txSize:this.txSize,rxSize:n,duration:(0,S.t)()-this.startTime};r("xhr",[this.params,i,this.startTime,this.endTime,"fetch"],this,a.K7.ajax)}function R(e){const t=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(let t=0;t<de;t++)e.removeEventListener(ue[t],this.listener,!1);t.aborted||(0,ce.iW)(t)||(n.duration=(0,S.t)()-this.startTime,this.loadCazptureCalled||4!==e.readyState?null==t.status&&(t.status=0):T(this,e),n.cbTime=this.cbTime,r("xhr",[t,n,this.startTime,this.endTime,"xhr"],this,a.K7.ajax))}}function T(e,r){e.params.status=r.status;var n=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?G(e.response):"text"===r||""===r||void 0===r?G(e.responseText):void 0}(r,e.lastSize);if(n&&(e.metrics.rxSize=n),e.sameOrigin){var i=r.getResponseHeader("X-NewRelic-App-Data");i&&((0,x.p)(O.rs,["Ajax/CrossApplicationTracing/Header/Seen"],void 0,a.K7.metrics,t),e.params.cat=i.split(", ").pop())}e.loadCaptureCalled=!0}t.on("new-xhr",i),t.on("open-xhr-start",o),t.on("open-xhr-end",s),t.on("send-xhr-start",c),t.on("xhr-cb-time",u),t.on("xhr-load-added",d),t.on("xhr-load-removed",l),t.on("xhr-resolved",f),t.on("addEventListener-end",h),t.on("removeEventListener-end",g),t.on("fn-end",v),t.on("fetch-before-start",b),t.on("fetch-start",y),t.on("fn-start",m),t.on("fetch-done",w)}(e,this.ee,this.handler,this.dt),this.importAggregator(e)}}function pe(e,t){var r=(0,ie.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}const ge={},me=["pushState","replaceState"];function ve(e){const t=function(e){return(e||B.ee).get("history")}(e);return!p.RI||ge[t.debugId]++||(ge[t.debugId]=1,(0,W.YM)(t).inPlace(window.history,me,"-")),t}var be=i(3738);const{He:ye,bD:we,d3:Re,Kp:xe,TZ:Te,Lc:Ae,uP:Ee,Rz:Se}=be;class Ne extends b{static featureName=Te;constructor(e,t=!0){super(e,Te,t);if(!(0,m.V)(this.agentIdentifier))return void this.deregisterDrain();const r=this.ee;let n;ve(r),this.eventsEE=(0,F.u)(r),this.eventsEE.on(Ee,(function(e,t){this.bstStart=(0,S.t)()})),this.eventsEE.on(Ae,(function(e,t){(0,x.p)("bst",[e[0],t,this.bstStart,(0,S.t)()],void 0,a.K7.sessionTrace,r)})),r.on(Se+Re,(function(e){this.time=(0,S.t)(),this.startPath=location.pathname+location.hash})),r.on(Se+xe,(function(e){(0,x.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,a.K7.sessionTrace,r)}));try{n=new PerformanceObserver((e=>{const t=e.getEntries();(0,x.p)(ye,[t],void 0,a.K7.sessionTrace,r)})),n.observe({type:we,buffered:!0})}catch(e){}this.importAggregator(e,{resourceObserver:n})}}var Oe=i(2614);class _e extends b{static featureName=t.TZ;#i;#o;constructor(e,r=!0){let n;super(e,t.TZ,r),this.replayRunning=!1,this.#o=e;try{n=JSON.parse(localStorage.getItem("".concat(Oe.H3,"_").concat(Oe.uh)))}catch(e){}(0,g.SR)(e.agentIdentifier)&&this.ee.on(t.G4.RECORD,(()=>this.#a())),this.#s(n)?(this.#i=n?.sessionReplayMode,this.#c()):this.importAggregator(e),this.ee.on("err",(e=>{this.replayRunning&&(this.errorNoticed=!0,(0,x.p)(t.G4.ERROR_DURING_REPLAY,[e],void 0,this.featureName,this.ee))})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.replayRunning=e}))}#s(e){return e&&(e.sessionReplayMode===Oe.g.FULL||e.sessionReplayMode===Oe.g.ERROR)||(0,g.Aw)(this.agentIdentifier)}#u=!1;async#c(e){if(!this.#u){this.#u=!0;try{const{Recorder:t}=await Promise.all([i.e(478),i.e(249)]).then(i.bind(i,8589));this.recorder??=new t({mode:this.#i,agentIdentifier:this.agentIdentifier,trigger:e,ee:this.ee}),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording}catch(e){}this.importAggregator(this.#o,{recorder:this.recorder,errorNoticed:this.errorNoticed})}}#a(){this.featAggregate?this.featAggregate.mode!==Oe.g.FULL&&this.featAggregate.initializeRecording(Oe.g.FULL,!0):(this.#i=Oe.g.FULL,this.#c(t.Qb.API),this.recorder&&this.recorder.parent.mode!==Oe.g.FULL&&(this.recorder.parent.mode=Oe.g.FULL,this.recorder.stopRecording(),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording))}}var Ie=i(3962);class je extends b{static featureName=Ie.TZ;constructor(e,t=!0){if(super(e,Ie.TZ,t),!p.RI||!(0,R.dV)().o.MO)return;const r=ve(this.ee);Ie.tC.forEach((e=>{(0,A.sp)(e,(e=>{a(e)}),!0)}));const n=()=>(0,x.p)("newURL",[(0,S.t)(),""+window.location],void 0,this.featureName,this.ee);r.on("pushState-end",n),r.on("replaceState-end",n);try{this.removeOnAbort=new AbortController}catch(e){}(0,A.sp)("popstate",(e=>(0,x.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)),!0,this.removeOnAbort?.signal);let i=!1;const o=new((0,R.dV)().o.MO)(((e,t)=>{i||(i=!0,requestAnimationFrame((()=>{(0,x.p)("newDom",[(0,S.t)()],void 0,this.featureName,this.ee),i=!1})))})),a=(0,v.s)((e=>{(0,x.p)("newUIEvent",[e],void 0,this.featureName,this.ee),o.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0})}),100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),o.disconnect(),this.abortHandler=void 0},this.importAggregator(e,{domObserver:o})}}var Pe=i(7378);const Ce={},ke=["appendChild","insertBefore","replaceChild"];function Le(e){const t=function(e){return(e||B.ee).get("jsonp")}(e);if(!p.RI||Ce[t.debugId])return t;Ce[t.debugId]=!0;var r=(0,W.YM)(t),n=/[?&](?:callback|cb)=([^&#]+)/,i=/(.*)\.([^.]+)/,o=/^(\w+)(\.|$)(.*)$/;function a(e,t){if(!e)return t;const r=e.match(o),n=r[1];return a(r[3],t[n])}return r.inPlace(Node.prototype,ke,"dom-"),t.on("dom-start",(function(e){!function(e){if(!e||"string"!=typeof e.nodeName||"script"!==e.nodeName.toLowerCase())return;if("function"!=typeof e.addEventListener)return;var o=(s=e.src,c=s.match(n),c?c[1]:null);var s,c;if(!o)return;var u=function(e){var t=e.match(i);if(t&&t.length>=3)return{key:t[2],parent:a(t[1],window)};return{key:e,parent:window}}(o);if("function"!=typeof u.parent[u.key])return;var d={};function l(){t.emit("jsonp-end",[],d),e.removeEventListener("load",l,(0,A.jT)(!1)),e.removeEventListener("error",f,(0,A.jT)(!1))}function f(){t.emit("jsonp-error",[],d),t.emit("jsonp-end",[],d),e.removeEventListener("load",l,(0,A.jT)(!1)),e.removeEventListener("error",f,(0,A.jT)(!1))}r.inPlace(u.parent,[u.key],"cb-",d),e.addEventListener("load",l,(0,A.jT)(!1)),e.addEventListener("error",f,(0,A.jT)(!1)),t.emit("new-jsonp",[e.src],d)}(e[0])})),t}const He={};function De(e){const t=function(e){return(e||B.ee).get("promise")}(e);if(He[t.debugId])return t;He[t.debugId]=!0;var r=t.context,n=(0,W.YM)(t),i=p.gm.Promise;return i&&function(){function e(r){var o=t.context(),a=n(r,"executor-",o,null,!1);const s=Reflect.construct(i,[a],e);return t.context(s).getCtx=function(){return o},s}p.gm.Promise=e,Object.defineProperty(e,"name",{value:"Promise"}),e.toString=function(){return i.toString()},Object.setPrototypeOf(e,i),["all","race"].forEach((function(r){const n=i[r];e[r]=function(e){let i=!1;[...e||[]].forEach((e=>{this.resolve(e).then(a("all"===r),a(!1))}));const o=n.apply(this,arguments);return o;function a(e){return function(){t.emit("propagate",[null,!i],o,!1,!1),i=i||!e}}}})),["resolve","reject"].forEach((function(r){const n=i[r];e[r]=function(e){const r=n.apply(this,arguments);return e!==r&&t.emit("propagate",[e,!0],r,!1,!1),r}})),e.prototype=i.prototype;const o=i.prototype.then;i.prototype.then=function(...e){var i=this,a=r(i);a.promise=i,e[0]=n(e[0],"cb-",a,null,!1),e[1]=n(e[1],"cb-",a,null,!1);const s=o.apply(this,e);return a.nextPromise=s,t.emit("propagate",[i,!0],s,!1,!1),s},i.prototype.then[W.Jt]=o,t.on("executor-start",(function(e){e[0]=n(e[0],"resolve-",this,null,!1),e[1]=n(e[1],"resolve-",this,null,!1)})),t.on("executor-err",(function(e,t,r){e[1](r)})),t.on("cb-end",(function(e,r,n){t.emit("propagate",[n,!0],this.nextPromise,!1,!1)})),t.on("propagate",(function(e,r,n){this.getCtx&&!r||(this.getCtx=function(){if(e instanceof Promise)var r=t.context(e);return r&&r.getCtx?r.getCtx():this})}))}(),t}const Me={},Ke="setTimeout",Ue="setInterval",Ve="clearTimeout",Ge="-start",Fe=[Ke,"setImmediate",Ue,Ve,"clearImmediate"];function Be(e){const t=function(e){return(e||B.ee).get("timer")}(e);if(Me[t.debugId]++)return t;Me[t.debugId]=1;var r=(0,W.YM)(t);return r.inPlace(p.gm,Fe.slice(0,2),Ke+"-"),r.inPlace(p.gm,Fe.slice(2,3),Ue+"-"),r.inPlace(p.gm,Fe.slice(3),Ve+"-"),t.on(Ue+Ge,(function(e,t,n){e[0]=r(e[0],"fn-",null,n)})),t.on(Ke+Ge,(function(e,t,n){this.method=n,this.timerDuration=isNaN(e[1])?0:+e[1],e[0]=r(e[0],"fn-",this,n)})),t}const We={};function ze(e){const t=function(e){return(e||B.ee).get("mutation")}(e);if(!p.RI||We[t.debugId])return t;We[t.debugId]=!0;var r=(0,W.YM)(t),n=p.gm.MutationObserver;return n&&(window.MutationObserver=function(e){return this instanceof n?new n(r(e,"fn-")):n.apply(this,arguments)},MutationObserver.prototype=n.prototype),t}const{TZ:qe,d3:Ze,Kp:Ye,$p:Xe,wW:Je,e5:Qe,tH:$e,uP:et,rw:tt,Lc:rt}=Pe;class nt extends b{static featureName=qe;constructor(e,t=!0){if(super(e,qe,t),!p.RI)return;try{this.removeOnAbort=new AbortController}catch(e){}let r,n=0;const i=this.ee.get("tracer"),o=Le(this.ee),a=De(this.ee),s=Be(this.ee),c=Z(this.ee),u=this.ee.get("events"),d=ne(this.ee),l=ve(this.ee),f=ze(this.ee);function h(e,t){l.emit("newURL",[""+window.location,t])}function g(){n++,r=window.location.hash,this[et]=(0,S.t)()}function m(){n--,window.location.hash!==r&&h(0,!0);var e=(0,S.t)();this[Qe]=~~this[Qe]+e-this[et],this[rt]=e}function v(e,t){e.on(t,(function(){this[t]=(0,S.t)()}))}this.ee.on(et,g),a.on(tt,g),o.on(tt,g),this.ee.on(rt,m),a.on(Je,m),o.on(Je,m),this.ee.on("fn-err",((...t)=>{t[2]?.__newrelic?.[e.agentIdentifier]||(0,x.p)("function-err",[...t],void 0,this.featureName,this.ee)})),this.ee.buffer([et,rt,"xhr-resolved"],this.featureName),u.buffer([et],this.featureName),s.buffer(["setTimeout"+Ye,"clearTimeout"+Ze,et],this.featureName),c.buffer([et,"new-xhr","send-xhr"+Ze],this.featureName),d.buffer([$e+Ze,$e+"-done",$e+Xe+Ze,$e+Xe+Ye],this.featureName),l.buffer(["newURL"],this.featureName),f.buffer([et],this.featureName),a.buffer(["propagate",tt,Je,"executor-err","resolve"+Ze],this.featureName),i.buffer([et,"no-"+et],this.featureName),o.buffer(["new-jsonp","cb-start","jsonp-error","jsonp-end"],this.featureName),v(d,$e+Ze),v(d,$e+"-done"),v(o,"new-jsonp"),v(o,"jsonp-end"),v(o,"cb-start"),l.on("pushState-end",h),l.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,A.jT)(!0,this.removeOnAbort?.signal)),window.addEventListener("load",h,(0,A.jT)(!0,this.removeOnAbort?.signal)),window.addEventListener("popstate",(function(){h(0,n>1)}),(0,A.jT)(!0,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e)}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var it=i(3333);class ot extends b{static featureName=it.TZ;constructor(e,t=!0){super(e,it.TZ,t);const r=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.user_actions.enabled];p.RI&&e.init.user_actions.enabled&&(it.Zp.forEach((e=>(0,A.sp)(e,(e=>(0,x.p)("ua",[e],void 0,this.featureName,this.ee)),!0))),it.qN.forEach((e=>(0,A.sp)(e,(e=>(0,x.p)("ua",[e],void 0,this.featureName,this.ee)))))),r.some((e=>e))?this.importAggregator(e):this.deregisterDrain()}}var at=i(993),st=i(3785);class ct extends b{static featureName=at.TZ;constructor(e,t=!0){super(e,at.TZ,t);const r=this.ee;this.ee.on("wrap-logger-end",(function([e]){const{level:t,customAttributes:n}=this;(0,st.R)(r,e,n,t)})),this.importAggregator(e)}}new class extends o{constructor(t,r){super(r),p.gm?(this.features={},(0,R.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(w),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,R.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[he,w,N,Ne,_e,_,D,ot,ct,je,nt],loaderType:"spa"})})()})();</script> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=1"> <meta name="pocket-site-verification" content="" /> <script> (function (html) { html.className = html.className.replace(/\bno-js\b/, 'js'); })(document.documentElement); </script> <link rel="profile" href="https://gmpg.org/xfn/11"> <link rel="pingback" href="https://www.railway-technology.com/xmlrpc.php"> <link rel="icon" href=""> <link rel="icon" href="https://www.railway-technology.com/wp-content/uploads/sites/13/2021/11/cropped-railwayfavicon-150x150.png" sizes="32x32" /> <link rel="icon" href="https://www.railway-technology.com/wp-content/uploads/sites/13/2021/11/cropped-railwayfavicon-300x300.png" sizes="192x192" /> <link rel="apple-touch-icon" href="https://www.railway-technology.com/wp-content/uploads/sites/13/2021/11/cropped-railwayfavicon-180x180.png" /> <meta name="msapplication-TileImage" content="https://www.railway-technology.com/wp-content/uploads/sites/13/2021/11/cropped-railwayfavicon-300x300.png" /> <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <!-- OneTrust Cookies Consent Notice start for railway-technology.com --> <script src="https://cdn-ukwest.onetrust.com/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="70c3e621-0d27-4b82-9696-0c125003ab50" ></script> <script type="text/javascript"> function OptanonWrapper() { } </script> <!-- OneTrust Cookies Consent Notice end for railway-technology.com --> <!-- This site is optimized with the Yoast SEO Premium plugin v23.5 (Yoast SEO v23.5) - https://yoast.com/wordpress/plugins/seo/ --> <title>Peter Nilson, Author at Railway Technology</title> <link rel="canonical" href="https://www.railway-technology.com/author/peternilson/" /> <link rel="next" href="https://www.railway-technology.com/author/peternilson/page/2/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="profile" /> <meta property="og:title" content="Peter Nilson" /> <meta property="og:url" content="https://www.railway-technology.com/author/peternilson/" /> <meta property="og:site_name" content="Railway Technology" /> <meta property="og:image" content="https://secure.gravatar.com/avatar/62efa367832927580764a1dd7e1d3ebf?s=500&d=mm&r=g" /> <meta name="twitter:card" content="summary_large_image" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"ProfilePage","@id":"https://www.railway-technology.com/author/peternilson/","url":"https://www.railway-technology.com/author/peternilson/","name":"Peter Nilson, Author at Railway Technology","isPartOf":{"@id":"https://www.railway-technology.com/#website"},"primaryImageOfPage":{"@id":"https://www.railway-technology.com/author/peternilson/#primaryimage"},"image":{"@id":"https://www.railway-technology.com/author/peternilson/#primaryimage"},"thumbnailUrl":"https://www.railway-technology.com/wp-content/uploads/sites/13/2024/11/shutterstock_2136264119.jpg","breadcrumb":{"@id":"https://www.railway-technology.com/author/peternilson/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://www.railway-technology.com/author/peternilson/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://www.railway-technology.com/author/peternilson/#primaryimage","url":"https://www.railway-technology.com/wp-content/uploads/sites/13/2024/11/shutterstock_2136264119.jpg","contentUrl":"https://www.railway-technology.com/wp-content/uploads/sites/13/2024/11/shutterstock_2136264119.jpg","width":1000,"height":644},{"@type":"BreadcrumbList","@id":"https://www.railway-technology.com/author/peternilson/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.railway-technology.com/"},{"@type":"ListItem","position":2,"name":"Archives for Peter Nilson"}]},{"@type":"WebSite","@id":"https://www.railway-technology.com/#website","url":"https://www.railway-technology.com/","name":"Railway Technology","description":"The leading site for news and procurement in the railway industry","publisher":{"@id":"https://www.railway-technology.com/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.railway-technology.com/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https://www.railway-technology.com/#organization","name":"Railway Technology","url":"https://www.railway-technology.com/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://www.railway-technology.com/#/schema/logo/image/","url":"https://www.railway-technology.com/wp-content/uploads/sites/13/2017/10/Railway-Technology.png","contentUrl":"https://www.railway-technology.com/wp-content/uploads/sites/13/2017/10/Railway-Technology.png","width":669,"height":47,"caption":"Railway Technology"},"image":{"@id":"https://www.railway-technology.com/#/schema/logo/image/"},"sameAs":["https://www.facebook.com/GlobalDataplc/","https://www.linkedin.com/company/globaldataplc/"]},{"@type":"Person","@id":"https://www.railway-technology.com/#/schema/person/745aa5e79c2e8ec93900f0a2956823ea","name":"Peter Nilson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://www.railway-technology.com/#/schema/person/image/","url":"https://secure.gravatar.com/avatar/62efa367832927580764a1dd7e1d3ebf?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/62efa367832927580764a1dd7e1d3ebf?s=96&d=mm&r=g","caption":"Peter Nilson"},"description":"Peter Nilson is the editor of Future Rail, Airport Industry Review, and Ship Technology Global. He was previously the editor of the Just Food and Just Drinks digital magazines. He enjoys long walks on the beach and talking about the weather.","sameAs":["https://www.linkedin.com/in/peter-nilson-973035206","https://x.com/NilsonMuntz"],"mainEntityOfPage":{"@id":"https://www.railway-technology.com/author/peternilson/"}}]}</script> <!-- / Yoast SEO Premium plugin. --> <link rel='dns-prefetch' href='//www.railway-technology.com' /> <link rel='dns-prefetch' href='//cdn.permutive.com' /> <link rel='dns-prefetch' href='//www.google.com' /> <link rel='dns-prefetch' href='//cdn.jsdelivr.net' /> <link rel='dns-prefetch' href='//cdn.plyr.io' /> <link rel='dns-prefetch' href='//fonts.googleapis.com' /> <link rel="alternate" type="application/rss+xml" title="Railway Technology » Feed" href="https://www.railway-technology.com/feed/" /> <link rel="alternate" type="application/rss+xml" title="Railway Technology » Comments Feed" href="https://www.railway-technology.com/comments/feed/" /> <link rel="alternate" type="application/rss+xml" title="Railway Technology » Posts by Peter Nilson Feed" href="https://www.railway-technology.com/author/peternilson/feed/" /> <style id='wp-emoji-styles-inline-css' type='text/css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='https://www.railway-technology.com/wp-includes/css/dist/block-library/style.min.css?ver=6.6.2' type='text/css' media='all' /> <style id='classic-theme-styles-inline-css' type='text/css'> /*! This file is auto-generated */ .wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} </style> <style id='global-styles-inline-css' type='text/css'> :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--thb-accent: #f74a2e;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} :where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} :where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} :root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} </style> <link rel='stylesheet' id='gd-banner-css' href='https://www.railway-technology.com/wp-content/plugins/all-newsletters/assets/css/gd-banners.css?ver=6.6.2' type='text/css' media='all' /> <link rel='stylesheet' id='gd-opensearch-css' href='https://www.railway-technology.com/wp-content/plugins/gd-opensearch/public/css/gd-opensearch-public.css?ver=1732634980' type='text/css' media='all' /> <link rel='stylesheet' id='main_NS-css-css' href='https://www.railway-technology.com/wp-content/plugins/storefronts-gd/assets/css/main_NS.css?ver=1.7.5' type='text/css' media='all' /> <link rel='stylesheet' id='Swiper-css-css' href='https://www.railway-technology.com/wp-content/plugins/storefronts-gd/assets/vendor/swiper/swiper.css?ver=6.8.3' type='text/css' media='all' /> <link rel='stylesheet' id='font-lora-css' href='https://fonts.googleapis.com/css2?family=Lora%3Aital%2Cwght%400%2C400%3B0%2C500%3B0%2C600%3B0%2C700%3B1%2C400%3B1%2C500%3B1%2C600%3B1%2C700&display=swap&ver=1' type='text/css' media='all' /> <link rel='stylesheet' id='Swiper-css' href='https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css?ver=6.6.2' type='text/css' media='all' /> <link rel='stylesheet' id='gdm-b2b-main-css' href='https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/scss/main.css?ver=2.35' type='text/css' media='all' /> <link rel='stylesheet' id='thb-fa-css' href='https://www.railway-technology.com/wp-content/themes/goodlife-wp/assets/css/font-awesome.min.css?ver=4.7.0' type='text/css' media='all' /> <link rel='stylesheet' id='style-css' href='https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/style.css?ver=4.6.0' type='text/css' media='all' /> <link rel='stylesheet' id='tablepress-default-css' href='https://www.railway-technology.com/wp-content/plugins/tablepress/css/default.min.css?ver=1.13' type='text/css' media='all' /> <script type="text/javascript" id="crb-google-tagmanager-js-extra"> /* <![CDATA[ */ var crbTracker = {"googleTagManager":{"id":"GTM-58SPZLQ"}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/plugins/verdict-tracking//js/googleTagManager.js?ver=1732633271" id="crb-google-tagmanager-js"></script> <script type="text/javascript" async src="https://cdn.permutive.com/e82dc6a7-79a5-49b7-b1ed-a89a37f2fe8b-web.js?ver=6.6.2" id="crb-permutive-cdn-js"></script> <script type="text/javascript" id="crb-permutive-js-extra"> /* <![CDATA[ */ var crbTracker = {"permutive":{"workspaceID":"e82dc6a7-79a5-49b7-b1ed-a89a37f2fe8b","publicAPIKey":"62905692-4299-42af-951f-aa610546b2b1","postTitle":"How 5G Standalone can help upgrade the UK\u2019s railway network","postID":117093,"postType":"post","postDate":"November 25, 2024","postAuthor":"Peter Nilson","postTags":false,"postCategories":"Comment","collectDomains":"https:\/\/www.railway-technology.com\/wp-content\/plugins\/verdict-tracking\/\/js\/pollsInFrame.js","pageViewEvent":[]}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/plugins/verdict-tracking//js/permutive.js?ver=1732633271" id="crb-permutive-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/plugins/gd-opensearch/public/js/gd-opensearch-public.js?ver=1732634980" id="gd-opensearch-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/foundation.min.js?ver=6.6.2" id="foundation-js"></script> <script type="text/javascript" id="loadmore_posts-js-extra"> /* <![CDATA[ */ var loadmore_params = {"ajaxurl":"https:\/\/www.railway-technology.com\/wp-admin\/admin-ajax.php","posts":"{\"author_name\":\"peternilson\",\"error\":\"\",\"m\":\"\",\"p\":0,\"post_parent\":\"\",\"subpost\":\"\",\"subpost_id\":\"\",\"attachment\":\"\",\"attachment_id\":0,\"name\":\"\",\"pagename\":\"\",\"page_id\":0,\"second\":\"\",\"minute\":\"\",\"hour\":\"\",\"day\":0,\"monthnum\":0,\"year\":0,\"w\":0,\"category_name\":\"\",\"tag\":\"\",\"cat\":\"\",\"tag_id\":\"\",\"author\":5598,\"feed\":\"\",\"tb\":\"\",\"paged\":0,\"meta_key\":\"\",\"meta_value\":\"\",\"preview\":\"\",\"s\":\"\",\"sentence\":\"\",\"title\":\"\",\"fields\":\"\",\"menu_order\":\"\",\"embed\":\"\",\"category__in\":[],\"category__not_in\":[],\"category__and\":[],\"post__in\":[],\"post__not_in\":[],\"post_name__in\":[],\"tag__in\":[],\"tag__not_in\":[],\"tag__and\":[],\"tag_slug__in\":[],\"tag_slug__and\":[],\"post_parent__in\":[],\"post_parent__not_in\":[],\"author__in\":[],\"author__not_in\":[],\"search_columns\":[],\"has_password\":false,\"ignore_sticky_posts\":false,\"suppress_filters\":false,\"cache_results\":true,\"update_post_term_cache\":true,\"update_menu_item_cache\":false,\"lazy_load_term_meta\":true,\"update_post_meta_cache\":true,\"post_type\":\"\",\"posts_per_page\":10,\"nopaging\":false,\"comments_per_page\":\"50\",\"no_found_rows\":false,\"order\":\"DESC\"}","current_page":"2","max_page":"13"}; /* ]]> */ </script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/loadmoreposts.js?ver=6.6.2" id="loadmore_posts-js"></script> <link rel="https://api.w.org/" href="https://www.railway-technology.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.railway-technology.com/wp-json/wp/v2/users/5598" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.railway-technology.com/xmlrpc.php?rsd" /> <meta name="generator" content="WordPress 6.6.2" /> <style id="Sgpollscstyle">iframe[src^="https://www.surveygizmo.eu"]{display:block!important;height:auto!important;}</style><script src="https://www.googleoptimize.com/optimize.js?id=OPT-WTP994P"></script> <!-- BEGIN Parse.ly 2.6.1 --> <script type="application/ld+json"> {"@context":"http:\/\/schema.org","@type":"WebPage","headline":"Author - Peter Nilson","url":"http:\/\/www.railway-technology.com\/author\/peternilson\/","Categories":"Comment","keywords":["5G","Digitalisation","Passenger Rail"]} </script> <!-- END Parse.ly --> <link rel="icon" href="https://www.railway-technology.com/wp-content/uploads/sites/13/2021/11/cropped-railwayfavicon-150x150.png" sizes="32x32" /> <link rel="icon" href="https://www.railway-technology.com/wp-content/uploads/sites/13/2021/11/cropped-railwayfavicon-300x300.png" sizes="192x192" /> <link rel="apple-touch-icon" href="https://www.railway-technology.com/wp-content/uploads/sites/13/2021/11/cropped-railwayfavicon-180x180.png" /> <meta name="msapplication-TileImage" content="https://www.railway-technology.com/wp-content/uploads/sites/13/2021/11/cropped-railwayfavicon-300x300.png" /> <!-- Google Analytics (GA) code start --> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '', 'auto'); ga('send', 'pageview'); </script> <!-- Google Analytics (GA) code end --> <script type="text/javascript"> piAId = '376012'; piCId = '71929'; piHostname = 'pi.pardot.com'; (function() { function async_load(){ var s = document.createElement('script'); s.type = 'text/javascript'; s.src = ('https:' == document.location.protocol ? 'https://pi' : 'http://cdn') + '.pardot.com/pd.js'; var c = document.getElementsByTagName('script')[0]; c.parentNode.insertBefore(s, c); } if(window.attachEvent) { window.attachEvent('onload', async_load); } else { window.addEventListener('load', async_load, false); } })(); </script> <!-- This code is to be used on all ther sites in the network so we can track all the sites from one GA account. Ask CJB. --> <!-- Global site tag (gtag.js) - Google Analytics --> <!--<script async src="https://www.googletagmanager.com/gtag/js?id=UA-3619893-46"></script> --> <script> /* window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-3619893-46'); */ </script> </head> <body id="site-body" class="thb-boxed-off thb_ads_header_mobile_on thb-lightbox-on thb-capitalize-off thb-dark-mode-off thb-header-style1 thb-title-underline-hover" > <script src="https://cdnjs.cloudflare.com/ajax/libs/classie/1.0.1/classie.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/jquery.magnific-popup.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/magnific-popup.min.css" /> <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.6.0/slick.css"/> <script type="text/javascript" src="//cdn.jsdelivr.net/jquery.slick/1.6.0/slick.min.js"></script> <!-- End Content Click Capture --> <!-- <div class="translate"> <p>Switch language:</p> </div> .translate --> <!-- Nav --> <header class="site-header" id="top"> <div class="site-logo"> <a href="https://www.railway-technology.com/"> <img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2017/10/RT.png" alt="RT"> </a> </div> <div class="initials"><a href="https://www.railway-technology.com">RT</a></div> <div class="menu-button">Menu</div> <div class="search-button">Search</div> <form id="searchForm" action="https://www.railway-technology.com/s" class="search-form laptop-search" method="get" role="search"> <input id="searchInput" type="text" name="search" value="" placeholder="Search" class="search-box" /> <input type="submit" class="search-submit"> <div id="messageBox" style="color: red; margin-top: 5px;"></div> </form> <!-- End SearchForm --> <script> document.getElementById('searchForm').addEventListener('submit', function(e) { var input = document.getElementById('searchInput'); var messageBox = document.getElementById('messageBox'); var sanitizedInput = input.value.replace(/[^a-zA-Z0-9\s.']/g, ''); if (sanitizedInput !== input.value) { e.preventDefault(); // Prevent form submission input.value = sanitizedInput; // Update the input with sanitized value messageBox.textContent = 'Special characters have been removed from your search query.'; // Optionally, clear the message after a few seconds setTimeout(function() { messageBox.textContent = ''; }, 5000); // Clear after 5 seconds } else { messageBox.textContent = ''; // Clear any existing message } }); </script> <nav class="burger-menu"> <div class="scroll"> <form action="https://www.railway-technology.com/s" class="search-form" method="get" role="search"> <input type="text" name="search" value="" placeholder="Search" class="search-box" /> <input type="submit" class="search-submit"> </form> <!-- End SearchForm --> <section class="nav-block sections"> <h2>Sections</h2> <div class="menu-burger-menu-container"><ul id="menu-burger-menu" class="menu"><li id="menu-item-99745" class="menu-itemmenu-item-99745"><a title="Home" href="https://www.railway-technology.com/" class="c-nav-hamburger-menu__link">Home</a></li><li id="menu-item-99731" class="menu-itemmenu-item-99731"><a title="News" href="https://www.railway-technology.com/news/" class="c-nav-hamburger-menu__link">News</a></li><li id="menu-item-99743" class="menu-item menu-item-has-children dropdown menu-item-99743"><a title="Analysis" href="https://www.railway-technology.com/analysis/" data-toggle="dropdown" class="c-nav-hamburger-menu__link c-nav-hamburger-menu__link--has-children">Analysis</a><input type="checkbox" value="analysis" name="analysis"><ul role="menu" class=" dropdown-menu"><li id="menu-item-99732" class="menu-item menu-item-99732"><a title="Features" href="https://www.railway-technology.com/features/" class="c-nav-hamburger-menu__link">Features</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99733" class="menu-item menu-item-99733"><a title="Comment & Opinion" href="https://www.railway-technology.com/comment/" class="c-nav-hamburger-menu__link">Comment & Opinion</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99758" class="menu-item menu-item-99758"><a title="Projects" href="https://www.railway-technology.com/projects-a-z/" class="c-nav-hamburger-menu__link">Projects</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99744" class="menu-item menu-item-99744"><a title="Data Insights" href="https://www.railway-technology.com/data-insights/" class="c-nav-hamburger-menu__link">Data Insights</a><ul role="menu" class=" dropdown-menu"></ul></li></ul></li><li id="menu-item-99759" class="menu-item menu-item-has-children dropdown menu-item-99759"><a title="Sectors" href="https://www.railway-technology.com/sector/railway/" data-toggle="dropdown" class="c-nav-hamburger-menu__link c-nav-hamburger-menu__link--has-children">Sectors</a><input type="checkbox" value="analysis" name="analysis"><ul role="menu" class=" dropdown-menu"><li id="menu-item-99734" class="menu-item menu-item-99734"><a title="High Speed Railways" href="https://www.railway-technology.com/sector/high-speed-railways/" class="c-nav-hamburger-menu__link">High Speed Railways</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99735" class="menu-item menu-item-99735"><a title="Passenger Rail" href="https://www.railway-technology.com/sector/passenger-transportation/passenger-rail/" class="c-nav-hamburger-menu__link">Passenger Rail</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99736" class="menu-item menu-item-99736"><a title="Rail Infrastructure" href="https://www.railway-technology.com/sector/transport-infrastructure/rail-infrastructure/" class="c-nav-hamburger-menu__link">Rail Infrastructure</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99737" class="menu-item menu-item-99737"><a title="Operations" href="https://www.railway-technology.com/sector/operations/" class="c-nav-hamburger-menu__link">Operations</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99738" class="menu-item menu-item-99738"><a title="Rolling Stock" href="https://www.railway-technology.com/sector/rolling-stock/" class="c-nav-hamburger-menu__link">Rolling Stock</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99739" class="menu-item menu-item-99739"><a title="Trams & Metros" href="https://www.railway-technology.com/sector/passenger-transportation/passenger-rail/trams-metros/" class="c-nav-hamburger-menu__link">Trams & Metros</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99746" class="menu-item menu-item-99746"><a title="Technology" href="https://www.railway-technology.com/sector/theme/technology/" class="c-nav-hamburger-menu__link">Technology</a><ul role="menu" class=" dropdown-menu"></ul></li></ul></li><li id="menu-item-99760" class="menu-item menu-item-has-children dropdown menu-item-99760"><a title="Themes" href="https://www.railway-technology.com/sector/theme/" data-toggle="dropdown" class="c-nav-hamburger-menu__link c-nav-hamburger-menu__link--has-children">Themes</a><input type="checkbox" value="analysis" name="analysis"><ul role="menu" class=" dropdown-menu"><li id="menu-item-99749" class="menu-item menu-item-99749"><a title="Artificial Intelligence" href="https://www.railway-technology.com/sector/theme/technology/artificial-intelligence/" class="c-nav-hamburger-menu__link">Artificial Intelligence</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99756" class="menu-item menu-item-99756"><a title="Cloud" href="https://www.railway-technology.com/sector/theme/technology/cloud/" class="c-nav-hamburger-menu__link">Cloud</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99752" class="menu-item menu-item-99752"><a title="Corporate Governance" href="https://www.railway-technology.com/sector/theme/macro/esg/governance/" class="c-nav-hamburger-menu__link">Corporate Governance</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99754" class="menu-item menu-item-99754"><a title="Cybersecurity" href="https://www.railway-technology.com/sector/theme/technology/cybersecurity/" class="c-nav-hamburger-menu__link">Cybersecurity</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99750" class="menu-item menu-item-99750"><a title="Environmental Sustainability" href="https://www.railway-technology.com/sector/theme/macro/esg/environment/" class="c-nav-hamburger-menu__link">Environmental Sustainability</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99763" class="menu-item menu-item-99763"><a title="Internet of Things" href="https://www.railway-technology.com/sector/theme/technology/internet-of-things/" class="c-nav-hamburger-menu__link">Internet of Things</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99755" class="menu-item menu-item-99755"><a title="Robotics" href="https://www.railway-technology.com/sector/theme/technology/robotics/" class="c-nav-hamburger-menu__link">Robotics</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99751" class="menu-item menu-item-99751"><a title="Social Responsibility" href="https://www.railway-technology.com/sector/theme/macro/esg/social/" class="c-nav-hamburger-menu__link">Social Responsibility</a><ul role="menu" class=" dropdown-menu"></ul></li></ul></li><li id="menu-item-99761" class="menu-item menu-item-has-children dropdown menu-item-99761"><a title="Insights" href="https://www.railway-technology.com/insights/" data-toggle="dropdown" class="c-nav-hamburger-menu__link c-nav-hamburger-menu__link--has-children">Insights</a><input type="checkbox" value="analysis" name="analysis"><ul role="menu" class=" dropdown-menu"><li id="menu-item-99762" class="menu-item menu-item-99762"><a title="Deals" href="https://www.railway-technology.com/deals-dashboards/" class="c-nav-hamburger-menu__link">Deals</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99757" class="menu-item menu-item-99757"><a title="Jobs" href="https://www.railway-technology.com/jobs/" class="c-nav-hamburger-menu__link">Jobs</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99768" class="menu-item menu-item-99768"><a title="Filings" href="https://www.railway-technology.com/filings/" class="c-nav-hamburger-menu__link">Filings</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99771" class="menu-item menu-item-99771"><a title="Patents" href="https://www.railway-technology.com/patents/" class="c-nav-hamburger-menu__link">Patents</a><ul role="menu" class=" dropdown-menu"></ul></li></ul></li><li id="menu-item-99747" class="menu-item menu-item-has-children dropdown menu-item-99747"><a title="Companies" href="#" data-toggle="dropdown" class="c-nav-hamburger-menu__link c-nav-hamburger-menu__link--has-children">Companies</a><input type="checkbox" value="analysis" name="analysis"><ul role="menu" class=" dropdown-menu"><li id="menu-item-99748" class="menu-item menu-item-99748"><a title="Company A-Z" href="https://www.railway-technology.com/company-a-z/" class="c-nav-hamburger-menu__link">Company A-Z</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99765" class="menu-item menu-item-99765"><a title="Company Categories" href="https://www.railway-technology.com/contractors/" class="c-nav-hamburger-menu__link">Company Categories</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99859" class="menu-item menu-item-99859"><a title="Products & Services" href="https://www.railway-technology.com/products/" class="c-nav-hamburger-menu__link">Products & Services</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99856" class="menu-item menu-item-99856"><a title="Company Releases" href="https://www.railway-technology.com/pressreleases/" class="c-nav-hamburger-menu__link">Company Releases</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99857" class="menu-item menu-item-99857"><a title="White Papers" href="https://www.railway-technology.com/whitepapers/" class="c-nav-hamburger-menu__link">White Papers</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99858" class="menu-item menu-item-99858"><a title="Videos" href="https://www.railway-technology.com/videos/" class="c-nav-hamburger-menu__link">Videos</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99770" class="menu-item menu-item-99770"><a title="Buyer's Guide" href="https://www.railway-technology.com/buyers-guide/" class="c-nav-hamburger-menu__link">Buyer's Guide</a><ul role="menu" class=" dropdown-menu"></ul></li><li id="menu-item-99767" class="menu-item menu-item-99767"><a title="Partner content" href="https://www.railway-technology.com/sponsored/" class="c-nav-hamburger-menu__link">Partner content</a><ul role="menu" class=" dropdown-menu"></ul></li></ul></li><li id="menu-item-99861" class="menu-itemmenu-item-99861"><a title="Events" href="https://www.railway-technology.com/events/" class="c-nav-hamburger-menu__link">Events</a></li><li id="menu-item-107657" class="premium-insights-menu-link menu-itemmenu-item-107657"><a title="Buy Reports" href="https://www.railway-technology.com/buy-reports/" class="c-nav-hamburger-menu__link">Buy Reports</a></li><li id="menu-item-99766" class="menu-itemmenu-item-99766"><a title="Excellence Awards" href="https://www.railway-technology.com/excellence-awards/" class="c-nav-hamburger-menu__link">Excellence Awards</a></li><li id="menu-item-108675" class="menu-itemmenu-item-108675"><a title="Innovation Rankings" href="https://www.railway-technology.com/innovation-ranking/" class="c-nav-hamburger-menu__link">Innovation Rankings</a></li><li id="menu-item-99764" class="menu-itemmenu-item-99764"><a title="Magazine" href="https://www.railway-technology.com/magazine/" class="c-nav-hamburger-menu__link">Magazine</a></li><li id="menu-item-106825" class="menu-itemmenu-item-106825"><a title="Newsletters" href="https://www.railway-technology.com/newsletters/" class="c-nav-hamburger-menu__link">Newsletters</a></li><ul></div> </section> <section class="nav-block globaldata"> <h2>GlobalData</h2> <div class="menu-globaldata-container"><ul id="menu-globaldata" class="menu"><li id="menu-item-99673" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-99673"><a href="https://www.railway-technology.com/about-us-online/" class="c-nav-hamburger-menu__link">About Us</a></li> <li id="menu-item-99676" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-99676"><a href="https://www.railway-technology.com/advertise-with-us/" class="c-nav-hamburger-menu__link">Advertise With Us</a></li> <li id="menu-item-99671" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-99671"><a href="https://www.railway-technology.com/contact-us/" class="c-nav-hamburger-menu__link">Contact Us</a></li> <li id="menu-item-99675" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-99675"><a href="https://www.verdictmediastrategies.com/" class="c-nav-hamburger-menu__link">Our Marketing Solutions</a></li> <li id="menu-item-99674" class="ext-link menu-item menu-item-type-custom menu-item-object-custom menu-item-99674"><a target="_blank" rel="noopener" href="https://store.globaldata.com/" class="c-nav-hamburger-menu__link">GlobalData Reports</a></li> <li id="menu-item-99672" class="ext-link menu-item menu-item-type-custom menu-item-object-custom menu-item-99672"><a target="_blank" rel="noopener" href="https://globaldata.com/" class="c-nav-hamburger-menu__link">Visit GlobalData</a></li> </ul></div> </section> </div> <!-- .scroll --> </nav> <!-- .burger-menu --> <nav class="nav-bar"> <div class="menu-header-menu-container"><ul id="menu-header-menu" class="menu"><li id="menu-item-99699" class="menu-item menu-item-99699"><a title="News" href="https://www.railway-technology.com/news/"><span>News</span></a></li><li id="menu-item-99705" class="menu-item menu-item-has-children has-sub menu-item-99705"><a title="Analysis" href="https://www.railway-technology.com/analysis/"><span>Analysis</span></a><div class="mega"><section class="nav-block subcats"><h2>Sections</h2><ul role="menu" class=" dropdown-menu"><li id="menu-item-99706" class="menu-item menu-item-99706"><a title="Features" href="https://www.railway-technology.com/features/" class=""><span>Features</span></a></li><li id="menu-item-99707" class="menu-item menu-item-99707"><a title="Comment & Opinion" href="https://www.railway-technology.com/comment/" class=""><span>Comment & Opinion</span></a></li><li id="menu-item-99709" class="menu-item menu-item-99709"><a title="Projects" href="https://www.railway-technology.com/projects-a-z/" class=""><span>Projects</span></a></li><li id="menu-item-105294" class="menu-item menu-item-105294"><a title="Data Insights" href="https://www.railway-technology.com/data-insights/" class=""><span>Data Insights</span></a></li></ul></section><section class="nav-block most-read"><h2>Latest</h2><ul><li><a href="https://www.railway-technology.com/features/signalling-to-sidings-the-state-of-bim/">Signalling to sidings: the state of BIM</a></li><li><a href="https://www.railway-technology.com/comment/why-data-management-is-key-to-rail-asset-management/">Why data management is key to rail asset management </a></li><li><a href="https://www.railway-technology.com/features/excellence-awards-2024-winners-announced/">Excellence Awards 2024 – Winners Announced!</a></li></ul></section></div></li><li id="menu-item-99710" class="menu-item menu-item-has-children has-sub menu-item-99710"><a title="Sectors" href="https://www.railway-technology.com/sector/railway/"><span>Sectors</span></a><div class="mega"><section class="nav-block subcats"><h2>Sections</h2><ul role="menu" class=" dropdown-menu"><li id="menu-item-99693" class="menu-item menu-item-99693"><a title="High Speed Railways" href="https://www.railway-technology.com/sector/high-speed-railways/" class=""><span>High Speed Railways</span></a></li><li id="menu-item-99694" class="menu-item menu-item-99694"><a title="Passenger Rail" href="https://www.railway-technology.com/sector/passenger-transportation/passenger-rail/" class=""><span>Passenger Rail</span></a></li><li id="menu-item-99695" class="menu-item menu-item-99695"><a title="Rail Infrastructure" href="https://www.railway-technology.com/sector/transport-infrastructure/rail-infrastructure/" class=""><span>Rail Infrastructure</span></a></li><li id="menu-item-99696" class="menu-item menu-item-99696"><a title="Operations" href="https://www.railway-technology.com/sector/operations/" class=""><span>Operations</span></a></li><li id="menu-item-99697" class="menu-item menu-item-99697"><a title="Rolling Stock" href="https://www.railway-technology.com/sector/rolling-stock/" class=""><span>Rolling Stock</span></a></li><li id="menu-item-99698" class="menu-item menu-item-99698"><a title="Trams & Metros" href="https://www.railway-technology.com/sector/passenger-transportation/passenger-rail/trams-metros/" class=""><span>Trams & Metros</span></a></li><li id="menu-item-99711" class="menu-item menu-item-99711"><a title="Technology" href="https://www.railway-technology.com/sector/theme/technology/" class=""><span>Technology</span></a></li></ul></section><section class="nav-block most-read"><h2>Latest</h2><ul><li><a href="https://www.railway-technology.com/news/cpkc-atco-enpower-hydrogen-production/">CPKC, ATCO EnPower build hydrogen production and refuelling stations in Alberta</a></li><li><a href="https://www.railway-technology.com/news/kontron-rail-infrastructure-design-europe/">Kontron wins $68m rail infrastructure design contract in Europe</a></li><li><a href="https://www.railway-technology.com/news/hitachi-rail-etcs-signalling-thailand/">Hitachi Rail secures ETCS signalling contracts in Thailand</a></li></ul></section></div></li><li id="menu-item-99723" class="menu-item menu-item-has-children has-sub menu-item-99723"><a title="Themes" href="https://www.railway-technology.com/sector/theme/"><span>Themes</span></a><div class="mega"><section class="nav-block subcats"><h2>Sections</h2><ul role="menu" class=" dropdown-menu"><li id="menu-item-99715" class="menu-item menu-item-99715"><a title="Artificial Intelligence" href="https://www.railway-technology.com/sector/theme/technology/artificial-intelligence/" class=""><span>Artificial Intelligence</span></a></li><li id="menu-item-99719" class="menu-item menu-item-99719"><a title="Cloud" href="https://www.railway-technology.com/sector/theme/technology/cloud/" class=""><span>Cloud</span></a></li><li id="menu-item-99721" class="menu-item menu-item-99721"><a title="Corporate Governance" href="https://www.railway-technology.com/sector/theme/macro/esg/governance/" class=""><span>Corporate Governance</span></a></li><li id="menu-item-99717" class="menu-item menu-item-99717"><a title="Cybersecurity" href="https://www.railway-technology.com/sector/theme/technology/cybersecurity/" class=""><span>Cybersecurity</span></a></li><li id="menu-item-99722" class="menu-item menu-item-99722"><a title="Environmental Sustainability" href="https://www.railway-technology.com/sector/theme/macro/esg/environment/" class=""><span>Environmental Sustainability</span></a></li><li id="menu-item-99718" class="menu-item menu-item-99718"><a title="Internet of Things" href="https://www.railway-technology.com/sector/theme/technology/internet-of-things/" class=""><span>Internet of Things</span></a></li><li id="menu-item-99720" class="menu-item menu-item-99720"><a title="Robotics" href="https://www.railway-technology.com/sector/theme/technology/robotics/" class=""><span>Robotics</span></a></li><li id="menu-item-99724" class="menu-item menu-item-99724"><a title="Social Responsibility" href="https://www.railway-technology.com/sector/theme/macro/esg/social/" class=""><span>Social Responsibility</span></a></li></ul></section><section class="nav-block most-read"><h2>Latest</h2><ul><li><a href="https://www.railway-technology.com/news/cpkc-atco-enpower-hydrogen-production/">CPKC, ATCO EnPower build hydrogen production and refuelling stations in Alberta</a></li><li><a href="https://www.railway-technology.com/news/rail-vision-semi-autonomous-locomotives/">Rail Vision introduces semi-autonomous capabilities for locomotives</a></li><li><a href="https://www.railway-technology.com/news/industrial-networks-real-time-railcar-tracking/">Industrial Networks unveils Smart AEI Tag for real-time railcar tracking</a></li></ul></section></div></li><li id="menu-item-99725" class="menu-item menu-item-has-children has-sub menu-item-99725"><a title="Insights" href="https://www.railway-technology.com/insights/"><span>Insights</span></a><div class="mega"><section class="nav-block subcats"><h2>Sections</h2><ul role="menu" class=" dropdown-menu"><li id="menu-item-99726" class="menu-item menu-item-99726"><a title="Deals" href="https://www.railway-technology.com/deals-dashboards/" class=""><span>Deals</span></a></li><li id="menu-item-99727" class="menu-item menu-item-99727"><a title="Jobs" href="https://www.railway-technology.com/jobs/" class=""><span>Jobs</span></a></li><li id="menu-item-99728" class="menu-item menu-item-99728"><a title="Filings" href="https://www.railway-technology.com/filings/" class=""><span>Filings</span></a></li><li id="menu-item-99729" class="menu-item menu-item-99729"><a title="Patents" href="https://www.railway-technology.com/patents/" class=""><span>Patents</span></a></li></ul></section><section class="nav-block most-read"><h2>Latest</h2><ul><li><a href="https://www.railway-technology.com/news/beacon-adds-vectron-fleet-siemens-order/">Beacon adds 25 Vectrons to its fleet with Siemens order</a></li><li><a href="https://www.railway-technology.com/news/keolis-amey-retains-dlr-contract-tfl/">KeolisAmey retains DLR contract with TfL until 2033</a></li><li><a href="https://www.railway-technology.com/news/global-travel-and-tourism-sector-deal-activity-fell-by-12-6-yoy-in-h1-2024/">Global travel and tourism sector deal activity fell by 12.6% YoY in H1 2024</a></li></ul></section></div></li><li id="menu-item-99712" class="menu-item menu-item-has-children has-sub menu-item-99712"><a title="Companies" href="#"><span>Companies</span></a><div class="mega"><section class="nav-block subcats"><h2>Sections</h2><ul role="menu" class=" dropdown-menu"><li id="menu-item-99713" class="menu-item menu-item-99713"><a title="Company A-Z" href="https://www.railway-technology.com/company-a-z/" class=""><span>Company A-Z</span></a></li><li id="menu-item-99714" class="menu-item menu-item-99714"><a title="Company Categories" href="https://www.railway-technology.com/contractors/" class=""><span>Company Categories</span></a></li><li id="menu-item-99854" class="menu-item menu-item-99854"><a title="Products & Services" href="https://www.railway-technology.com/products/" class=""><span>Products & Services</span></a></li><li id="menu-item-99851" class="menu-item menu-item-99851"><a title="Company Releases" href="https://www.railway-technology.com/pressreleases/" class=""><span>Company Releases</span></a></li><li id="menu-item-99852" class="menu-item menu-item-99852"><a title="White Papers" href="https://www.railway-technology.com/whitepapers/" class=""><span>White Papers</span></a></li><li id="menu-item-99853" class="menu-item menu-item-99853"><a title="Videos" href="https://www.railway-technology.com/videos/" class=""><span>Videos</span></a></li><li id="menu-item-99741" class="menu-item menu-item-99741"><a title="Buyer's Guide" href="https://www.railway-technology.com/buyers-guide/" class=""><span>Buyer's Guide</span></a></li><li id="menu-item-99742" class="menu-item menu-item-99742"><a title="Partner content" href="https://www.railway-technology.com/sponsored/" class=""><span>Partner content</span></a></li></ul></section><section class="nav-block most-read"><h2>Latest</h2><ul><li><a href="https://www.railway-technology.com/sponsored/huaweis-top-10-construction-principles-for-intelligent-computing-centre-facilities/">Huawei’s top 10 construction principles for intelligent computing centre facilities</a></li><li><a href="https://www.railway-technology.com/sponsored/lessons-from-ten-great-crashes/">Lessons from ten great crashes</a></li><li><a href="https://www.railway-technology.com/sponsored/ways-to-grow-your-personal-brand/">Ways to grow your personal brand</a></li></ul></section></div></li><li id="menu-item-99855" class="menu-item menu-item-99855"><a title="Events" href="https://www.railway-technology.com/events/"><span>Events</span></a></li><li id="menu-item-107658" class="premium-insights-menu-link menu-item menu-item-107658"><a title="Buy Reports" href="https://www.railway-technology.com/buy-reports/"><span>Buy Reports</span></a></li><li id="menu-item-106953" class="menu-item menu-item-106953"><a title="Newsletters" href="https://www.railway-technology.com/newsletters/"><span>Newsletters</span></a></li><ul></div> <div class="initials"><a href="https://www.railway-technology.com">RT</a></div> </nav> <div class="menu-bg"></div> </header> <main class="grid-container"> <header class="header-category"> <h1>All articles by Peter Nilson</h1> </header> <section class="author"> <div class="grid-x border-bottom bio"> <div class="large-3 avatar"> <figure> <img alt='' src='https://secure.gravatar.com/avatar/62efa367832927580764a1dd7e1d3ebf?s=177&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/62efa367832927580764a1dd7e1d3ebf?s=354&d=mm&r=g 2x' class='avatar avatar-177 photo' height='177' width='177' decoding='async'/> </figure> <div> <h3 class="hide-on-desktop"> Peter Nilson </h3> <h6> <a href="https://twitter.com/NilsonMuntz" target="_blank"> @NilsonMuntz </a> </h6> </div> </div> <div class="large-9"> <p> Peter Nilson is the editor of Future Rail, Airport Industry Review, and Ship Technology Global. He was previously the editor of the Just Food and Just Drinks digital magazines. He enjoys long walks on the beach and talking about the weather. </p> </div> </div> </section> <section class="categories"> <div class="grid-x"> <div class="cell large-9 centered-content"> <div class="full-border-desktop-version" id="main-author"> <ul class="gdm-article-list"> <li> <article> <div class="grid-x"> <div class="cell large-3 articles "> <figure> <a href="https://www.railway-technology.com/comment/how-5g-standalone-can-help-upgrade-the-uks-railway-network/?"><img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2024/11/shutterstock_2136264119.jpg" alt=""></a> </figure> </div> <div class="cell large-8 article-text"> <h3><a href="https://www.railway-technology.com/comment/how-5g-standalone-can-help-upgrade-the-uks-railway-network/?">How 5G Standalone can help upgrade the UK’s railway network</a></h3> <p>UK railway companies face significant challenges, from financial pressures and workforce shortages to unpredictable weather conditions. And while efforts to…</p> </div> </div> </article> </li> <li> <article> <div class="grid-x"> <div class="cell large-3 articles "> <figure> <a href="https://www.railway-technology.com/comment/why-data-management-is-key-to-rail-asset-management/?"><img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2024/11/shutterstock_2357821615.jpg" alt=""></a> </figure> </div> <div class="cell large-8 article-text"> <h3><a href="https://www.railway-technology.com/comment/why-data-management-is-key-to-rail-asset-management/?">Why data management is key to rail asset management </a></h3> <p>In the rail industry, asset management has historically been synonymous with the management of physical assets by dedicated teams of…</p> </div> </div> </article> </li> <li> <article> <div class="grid-x"> <div class="cell large-3 articles "> <figure> <a href="https://www.railway-technology.com/comment/how-to-build-a-next-generation-of-railway-cybersecurity/?"><img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2024/10/GCRE-C1-Washery.jpg" alt=""></a> </figure> </div> <div class="cell large-8 article-text"> <h3><a href="https://www.railway-technology.com/comment/how-to-build-a-next-generation-of-railway-cybersecurity/?">How to build a next-generation of railway cybersecurity</a></h3> <p>The railways are a pivotal part of the UK's infrastructure. The most recent Office for Road and Rail figures recorded…</p> </div> </div> </article> </li> <li> <article> <div class="grid-x"> <div class="cell large-3 articles "> <figure> <a href="https://www.railway-technology.com/comment/meeting-rail-industry-pressures-with-mobile-printing-technology/?"><img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2024/10/bixolon-main.jpg" alt=""></a> </figure> </div> <div class="cell large-8 article-text"> <h3><a href="https://www.railway-technology.com/comment/meeting-rail-industry-pressures-with-mobile-printing-technology/?">Meeting rail industry pressures with mobile printing technology </a></h3> <p>Ticket inspectors have a crucial role to play in facilitating the travel of rail passengers in the UK, where over…</p> </div> </div> </article> </li> <li> <article> <div class="grid-x"> <div class="cell large-3 articles "> <figure> <a href="https://www.railway-technology.com/features/rush-to-print-future-rail-107-is-out-now/?"><img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2024/09/FR107-web-main.jpg" alt=""></a> </figure> </div> <div class="cell large-8 article-text"> <h3><a href="https://www.railway-technology.com/features/rush-to-print-future-rail-107-is-out-now/?">Rush to print: Future Rail 107 is out now</a></h3> <p>Issue 107 of Future Rail is out now! Additive manufacturing, or 3D printing, is increasingly being used in the maintenance – and…</p> </div> </div> </article> </li> </ul> <div class="grid-container"> <section class="gdm-newsletter-banner__container"> <div class="gdm-newsletter-banner__wrapper-container gdm-newsletter-banner__wrapper-container--article"> <div class="gdm-newsletter-banner-info__wrapper"> <div class="gdm-newsletter-banner-logo__container"> <img src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/images/newsletter-new.svg" alt="newsletter-banner-logo"> </div> <div class="gdm-newsletter-banner-info__container"> <h3 class="gdm-newsletter-banner__heading">Sign up for our daily news round-up!</h3> <p class="gdm-newsletter-banner__sub-heading">Give your business an edge with our leading industry insights.</p> </div> </div> <div class="gdm-newsletter-banner__btn-container"> <a href="https://www.railway-technology.com/all-newsletters/" class="button secondary solid">Sign up</a> </div> </div> </section> </div> <div id="load_sub_posts"><ul class="gdm-article-list"> <li> <article> <div class="grid-x"> <div class="cell large-3 articles "> <figure> <a href="https://www.railway-technology.com/comment/getting-onboard-rail-market-liberalisation/?"><img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2024/08/shutterstock_1293483556.jpg" alt=""></a> </figure> </div> <div class="cell large-8 article-text"> <h3><a href="https://www.railway-technology.com/comment/getting-onboard-rail-market-liberalisation/?">Getting onboard rail market liberalisation </a></h3> <p>After nearly two decades of the EU’s rail market liberalisation, the intention to ramp up competitiveness and revolutionise a sustainable…</p> </div> </div> </article> </li> <li> <article> <div class="grid-x"> <div class="cell large-3 articles "> <figure> <a href="https://www.railway-technology.com/comment/trackside-technology-approaching-the-rail-industrys-evolving-security-threats/?"><img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2024/08/shutterstock_1379154851.jpg" alt=""></a> </figure> </div> <div class="cell large-8 article-text"> <h3><a href="https://www.railway-technology.com/comment/trackside-technology-approaching-the-rail-industrys-evolving-security-threats/?">Trackside technology: approaching the rail industry’s evolving security threats</a></h3> <p>According to the UK Office of Rail and Road (ORR), over 1.6 billion passenger rail journeys were made between April…</p> </div> </div> </article> </li> <li> <article> <div class="grid-x"> <div class="cell large-3 articles "> <figure> <a href="https://www.railway-technology.com/comment/smart-kiosks-transforming-the-future-of-rail-ticketing/?"><img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2024/07/shutterstock_693639028.jpg" alt=""></a> </figure> </div> <div class="cell large-8 article-text"> <h3><a href="https://www.railway-technology.com/comment/smart-kiosks-transforming-the-future-of-rail-ticketing/?">Smart Kiosks: transforming the future of rail ticketing</a></h3> <p>When it comes to ticketing in the rail industry, unfortunately not all options were created equally. And that means some…</p> </div> </div> </article> </li> <li> <article> <div class="grid-x"> <div class="cell large-3 articles "> <figure> <a href="https://www.railway-technology.com/features/rise-fall-rise-again-leeds-tram/?"><img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2024/07/leeds-tram-copy.jpg" alt=""></a> </figure> </div> <div class="cell large-8 article-text"> <h3><a href="https://www.railway-technology.com/features/rise-fall-rise-again-leeds-tram/?">The rise, fall, and rise again of the Leeds tram</a></h3> <p>For many years, the UK city of Leeds has held the rather unfortunate distinction of being the largest city in…</p> </div> </div> </article> </li> <li> <article> <div class="grid-x"> <div class="cell large-3 articles "> <figure> <a href="https://www.railway-technology.com/comment/the-return-of-the-rusty-railway/?"><img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2024/07/shutterstock_2276905447.jpg" alt=""></a> </figure> </div> <div class="cell large-8 article-text"> <h3><a href="https://www.railway-technology.com/comment/the-return-of-the-rusty-railway/?">The return of the rusty railway? </a></h3> <p>Some of the railway sector’s most important components are made of steel, including gantries, platforms, and overhead signalling systems –…</p> </div> </div> </article> </li> </div> </div> <div class="cell load-more-btn feature grid-x mb hide-on-mobile"> <a id="pagination_showmore_auth_btn" href="javascript: my_auth_show_more();" class="button solid primary newsletter-signup__email-button" >View more</a> </div> </div> <div class="cell large-3 articles padding-left-gap-full"> </div> </div> </section> </main> <!-- Footer --> <footer id="footer" class="footer-container grid-x"> <div class="footer-wrapper grid-x"> <div class="main-footer-col medium-6"> <img src="https://www.railway-technology.com/wp-content/uploads/sites/13/2017/10/RailwayTechnology_footer.png" alt="RailwayTechnology" data-displayname="Railway Technology" class="footer-logo"> <p class="footer-excerpt"> The leading site for news and procurement in the railway industry</p> <div class="share"> <div class="share__list"> <a href="https://www.linkedin.com/company/railwaytechnology" target="_blank" class="share__link icon-linkedin" title=""> <img src="/code/wp-content/themes/goodlife-wp-B2B/assets/img/icons/linkedin_icon_w.svg"> </a> <a href="https://www.twitter.com/FutureRail_Mag" target="_blank" class="share__link icon-twitter" title=""> <img src="/code/wp-content/themes/goodlife-wp-B2B/assets/img/icons/twitter_icon_w.svg"> </a> <a href="https://www.facebook.com/globaldataplc/" target="_blank" class="share__link icon-facebook" title=""> <img src="/code/wp-content/themes/goodlife-wp-B2B/assets/img/icons/facebook_icon_w.svg"> </a> </div> </div> </div> <div class="footer-cols grid-x medium-5"> <nav class="footer-nav medium-6"> <ul class="footer-nav-list"><li id="menu-item-99700" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-99700"><a href="https://www.railway-technology.com/about-us-online/">About us</a></li> <li id="menu-item-99703" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-99703"><a href="https://www.railway-technology.com/advertise-with-us/">Advertise with us</a></li> <li id="menu-item-103040" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-103040"><a href="https://www.railway-technology.com/license-our-content/">License our content</a></li> <li id="menu-item-99691" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-99691"><a rel="nofollow" href="https://www.railway-technology.com/contact-us/">Contact us</a></li> <li id="menu-item-99692" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-99692"><a href="https://www.railway-technology.com/editorial-standards/">Editorial approach</a></li> <li id="menu-item-99701" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-99701"><a href="https://www.railway-technology.com/all-newsletters/">Newsletters</a></li> <li id="menu-item-99702" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-99702"><a href="https://www.verdictmediastrategies.com/">Our marketing solutions</a></li> </ul> </nav> <div class="copyright-col medium-6"> <ul class=""><li id="menu-item-99670" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-99670"><a href="https://www.globaldata.com/privacy-policy/" class="c-nav-hamburger-menu__link">Privacy policy</a></li> <li id="menu-item-99677" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-99677"><a href="https://www.globaldata.com/terms-conditions/" class="c-nav-hamburger-menu__link">Terms and conditions</a></li> <li id="menu-item-104474" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-104474"><a href="https://www.railway-technology.com/sitemap/" class="c-nav-hamburger-menu__link">Sitemap</a></li> </ul> <p class="footer-tag-line"> Powered by <a href="https://www.globaldata.com" target="_blank"><img class="c-footer__tag-line-img" src="/code/wp-content/themes/goodlife-wp-B2B/assets/images/verdict-logo-w.png" alt="Pharma Tech Logo"></a> </p> <p class="footer-copyright">© Verdict Media Limited 2024</p> </div> </div> </div> </footer> <script type='text/javascript' src='https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/custom_newsletter.js?ver=1.5'> </script> <script type='text/javascript' src='https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/subscribe.js?ver=1.4'> </script> <script type='text/javascript' src='https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/report.js?ver=1.0'> </script> <!-- Start of HubSpot Embed Code --> <script type="text/javascript" id="hs-script-loader" async defer src="//js-eu1.hs-scripts.com/26632421.js?businessUnitId=15641589"></script> <!-- End of HubSpot Embed Code --> <!-- Corner Modals End here --> <script> document.addEventListener("DOMContentLoaded", function(event) { let preFooter = document.createElement('div'); preFooter.className= 'pre-footer-subscribe'; preFooter.innerHTML = ` <a class="pre-footer-subscribe__all-newsletters" href="https://www.railway-technology.com/all-newsletters"> <img src='https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/images/eye.svg' alt=''> <span class="text">View all newsletters</span> <span class="icon-chevron-right"></span> </a> <div class="pre-footer-subscribe__click" onclick="showPopUp('newsletter')"> <figure class="pre-footer-subscribe__figure"> <div class="lines"></div> </figure> <span class="text"> Receive our newsletter - data, insights and analysis delivered to you <span class="icon-chevron-right"></span></span> </div> ` var cfooterExist = document.getElementsByClassName('c-footer'); if (cfooterExist.length > 0) { document.querySelector('footer.c-footer').before(preFooter); } }) </script> <!--this line was after line no 13, <img src='-B2B/assets/img/newsletter-icon.svg' alt=''>--> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/plugins/verdict-tracking//js/permutiveData.js?ver=1.0.5" id="crb-permutive-data-js"></script> <script type="text/javascript" id="nsmgscampaigns-js-extra"> /* <![CDATA[ */ var nsmgscampaigns = {"ajaxurl":"https:\/\/www.railway-technology.com\/wp-admin\/admin-ajax.php","nonce":"4080404d17"}; /* ]]> */ </script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/plugins/nsmg-campaigns/assets/public/js/main.js?ver=2.7#defer" id="nsmgscampaigns-js"></script> <script type="text/javascript" src="https://www.google.com/recaptcha/api.js?ver=1.0" id="ha-recaptcha-js"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js" id="Swiper-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/swiper.js?ver=5.127" id="gdm-b2b-swiper-script-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/sep-22-ui.js?ver=2.0.3" id="sep-22-redesign-ui-script-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/catfish.js?ver=1.5" id="catfish-script-js"></script> <script type="text/javascript" src="https://cdn.plyr.io/3.6.3/plyr.polyfilled.js?ver=3.6.3" id="plyr-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-includes/js/underscore.min.js?ver=1.13.4" id="underscore-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp/assets/js/vendor.min.js?ver=4.6.0" id="thb-vendor-js"></script> <script type="text/javascript" id="thb-app-js-extra"> /* <![CDATA[ */ var themeajax = {"url":"https:\/\/www.railway-technology.com\/wp-admin\/admin-ajax.php","l10n":{"loading":"Loading ...","nomore":"No More Posts"},"settings":{"viai_publisher_id":"431861828953521","thb_custom_video_player":"on"}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp/assets/js/app.min.js?ver=4.6.0" id="thb-app-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/plugins/storefronts-gd/assets/js/app.js?ver=5.8.6" id="main-js-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/collapseToggler.js?ver=1.1.0" id="Collapse-toggler-js-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/collapsible.js?ver=1.7.8" id="Collapse-js-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/modal.js?ver=1.7.9" id="Modal-js-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/plugins/storefronts-gd/assets/vendor/swiper/swiper.js?ver=6.8.3" id="Swiper-js-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/plugins/storefronts-gd/assets/js/swiper.js?ver=5.127" id="gdm-slider-js-js"></script> <script data-cfasync="false" type="text/javascript" data-parsely-site="railway-technology.com" src="https://cdn.parsely.com/keys/railway-technology.com/p.js?ver=2.6.1" id="parsely-cfg"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/jquery.min.js?ver=6.6.2" id="jquery_latest-js"></script> <script type="text/javascript" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/detect-private-browsing.js?ver=6.6.2" id="detect_browsing-js"></script> <aside id="thb-login" class="mfp-hide thb-login-form light"> <ul> <li class="lost"><a href="#" class="always">Lost Password</a> <span class="back">Back ⟶</span></li> <li><a href="#" class="active">Login</a></li> <li><a href="#">Register</a></li> </ul> <div class="thb-overflow-container"> <div class="thb-form-container"> <div class="thb-lost"> <form id="thb_lost_form" action="https://www.railway-technology.com/" method="post"> <div class="thb-errors lost-errors"></div> <div class="form-field"> <input class="form-control required " name="thb_user_or_email" id="thb_user_or_email" type="text" placeholder="Username or E-mail" /> </div> <div class="form-field"> <input type="hidden" name="action" value="thb_reset_password"/> <button class="btn " type="submit">Get new password</button> </div> <input type="hidden" id="password-security" name="password-security" value="cebd76f3c3" /><input type="hidden" name="_wp_http_referer" value="/author/peternilson/" /> </form> </div> <div class="thb-login"> <form id="thb_login_form" action="https://www.railway-technology.com/" method="post"> <div class="thb-errors login-errors"></div> <div class="form-field"> <input class="form-control required " name="thb_user_login" type="text" placeholder="Username" autocomplete="off" /> </div> <div class="form-field"> <input class="form-control required " name="thb_user_pass" id="thb_user_pass" type="password" placeholder="Password"> </div> <div class="form-field"> <a href="#" class="lost_password">Lost Password?</a> </div> <div class="form-field last"> <input type="hidden" name="action" value="thb_login_member"/> <button class="btn " type="submit">Login</button> </div> <input type="hidden" id="login-security" name="login-security" value="cebd76f3c3" /><input type="hidden" name="_wp_http_referer" value="/author/peternilson/" /> </form> </div> <div class="thb-register"> <div class="alert alert-warning">Registration is disabled.</div> </div> </div> </div> </aside> <div class="hide"> <svg class="comment_icon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="13px" height="13px" viewBox="0 0 13 13" enable-background="new 0 0 13 13" xml:space="preserve"> <path id="comment_icon" d="M12.7,0H0.3C0.134,0,0,0.128,0,0.286v9.143c0,0.157,0.134,0.286,0.3,0.286h2.1v3c0,0.105,0.061,0.201,0.159,0.252 C2.603,12.988,2.651,13,2.7,13c0.058,0,0.116-0.016,0.167-0.048l3.524-3.237H12.7c0.165,0,0.3-0.129,0.3-0.286V0.286 C13,0.128,12.865,0,12.7,0z"/> </svg> </div> <script type="text/javascript"> var elem = document.getElementById("framecovid"); function openFullscreen() { if (elem.requestFullscreen) { elem.requestFullscreen(); } else if (elem.mozRequestFullScreen) { /* Firefox */ elem.mozRequestFullScreen(); } else if (elem.webkitRequestFullscreen) { /* Chrome, Safari & Opera */ elem.webkitRequestFullscreen(); } else if (elem.msRequestFullscreen) { /* IE/Edge */ elem.msRequestFullscreen(); } } </script> <style> .covidspreaddata{ font-size: 16px; padding: 6px 14px; color: #18a1cd; font-weight: normal; font-family: Roboto,sans-serif; } .covidspreaddata:hover{ cursor: pointer; } </style> <script> function addParam() { for (var e = ["www.railway-technology.com", "pantheonsite.io"], n = ["scalar", "pid", "sid", "utm_source", "utm_medium", "utm_content", "utm_campaign"], t = document.querySelectorAll("a"), o = 0; o < t.length; o++) for (var a = 0; a < e.length; a++) t[o].href.indexOf(e[a]) > -1 && -1 === t[o].href.indexOf("#") && window.location.href.indexOf("?") > -1 && (t[o].href = i(t[o].href)); function i(e) { e = -1 === e.indexOf("?") ? e + "?" : e + "&"; for (var t = [], o = 0; o < n.length; o++) r(n[o]) && t.push(n[o] + "=" + r(n[o])); if( e.indexOf("utm_") == -1) { var a = e + t.join("&"); } return (a = a.replace(/&$/, "")).replace(/\?$/, "") } function r(e) { if (e = new RegExp("[?&]" + encodeURIComponent(e) + "=([^&]*)").exec(window.location.search)) return decodeURIComponent(e[1]) } } jQuery( document ).ready(function() { addParam(); }); jQuery('.c-company-header__links-toggle-button, .c-company-header__form-toggle-button, .menu-item-type-custom .c-nav-featured__menu-item-link, .btn-custom, .page-template-template-aboutus-magazine .c-tabs-nav__tab').click(function(event) { // This will prevent the default action of the anchor event.preventDefault(); // Failing the above, you could use this, however the above is recommended return false; }); jQuery('.single-storefronts .c-tabs-nav__tab, .page-template-template-aboutus-online .c-tabs-nav__tab, .page-template-template-aboutus-magazine .c-tabs-nav__tab').on('click', function(){ jQuery('html,body').stop().animate({ scrollTop: jQuery( jQuery(this).attr('href') ).offset().top - jQuery('.x-navbar').height() },700 ,'swing'); }); </script> <script type="text/javascript"> jQuery( document ).ready(function() { window._uxa = window._uxa || []; var cname1='pageType:'; var cvalue1="post- archive page"; window._uxa.push(['setCustomVariable', 1, cname1, cvalue1]); var cname2 = 'pageCategory:'; var cvalue2 =""; window._uxa.push(['setCustomVariable', 2, cname2, cvalue2]); var cname3 = 'region:'; var cvalue3 =""; window._uxa.push(['setCustomVariable', 3, cname3, cvalue3]); var cname4 = 'sector:'; var cname5='reporting:' var cvalue5 ="Features (web)"; window._uxa.push(['setCustomVariable', 5, cname5, cvalue5]); }); // we don't need this anymore // jQuery(document).ready(function(){ // jQuery('#Sgpollsputhere').css('height', jQuery(window).height()-30); // jQuery(window).resize(function(){ // jQuery('#Sgpollsputhere').css('height', jQuery(window).height()-30); // }); // }); </script> <!-- Start of HubSpot Embed Code --> <script type="text/javascript" id="hs-script-loader" async defer src="//js-eu1.hs-scripts.com/26632421.js?businessUnitId=15641589"></script> <!-- End of HubSpot Embed Code --> <!--<script src="https://pr-fr-chat-b2b-gdm-figaro1.pantheonsite.io/mining-technology/wp-content/themes/goodlife-wp-B2B/api-search/ai-search.js"></script>--> <!-- Javascript modules --> <script type="module" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/modules.js?ver=1.006"></script> <script type="module" src="https://www.railway-technology.com/wp-content/themes/goodlife-wp-B2B/assets/js/index.js?ver=1.2"></script> <script type='text/javascript' src='https://www.google.com/recaptcha/api.js?ver=1.0' id='ha-recaptcha-js'></script> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-7b82eb47d05ddffd6c6","applicationID":"1250398555","transactionName":"MVAAZkoFWEBSURIKWwgaI1FMDVldHFMTF1wJRw==","queueTime":0,"applicationTime":843,"atts":"HRcDEAIfS04=","errorBeacon":"bam.nr-data.net","agent":""}</script></body> </html><script> var my_report_field_offset = '10' ; var my_report_field_nonce = 'f554ce32db'; var my_report_ajax_url = 'https://www.railway-technology.com/wp-admin/admin-ajax.php'; var my_report_more = true; var author_id = '5598'; function my_auth_show_more() { jQuery.post( my_report_ajax_url, { 'action': 'my_auth_show_more', 'offset': my_report_field_offset, 'nonce': my_report_field_nonce, 'author_id': author_id }, function (json) { jQuery('#main-author').append(json['content']); my_report_field_offset = json['offset']; if (!json['more']) { jQuery('#pagination_showmore_auth_btn').css('display', 'none'); } }, 'json' ); } </script>