Files
nexus/sreweekly/articles/413/02-cinnamon-using-century-old-tech-to-build-a-mean-load-shedder.html
2026-09-12 17:23:01 +08:00

748 lines
507 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html><html lang="en-GB" dir="ltr"><head><meta charset="utf-8" /><title>Cinnamon: Using Century Old Tech to Build a Mean Load Shedder</title><meta http-equiv="Content-Security-Policy" content="block-all-mixed-content,frame-src 'self' 'self' blob: d1a3f4spazzrp4.cloudfront.net d1w2poirtb3as9.cloudfront.net d3i4yxtzktqr9n.cloudfront.net d1nyezh1ys8wfo.cloudfront.net d3i4yxtzktqr9n.cloudfront.net *.altrulabs.com *.doubleclick.net *.facebook.com *.facebook.net *.google-analytics.com *.google.com *.hotjar.com *.hotjar.io *.hotjar.net *.snapchat.com *.qualtrics.com *.youtube.com analytics.pangle-ads.com analytics.tiktok.com api.company-target.com app.acuityscheduling.com atag.adgile.media *.bing.com maps.googleapis.com px.ads.linkedin.com s.company-target.com sc-static.net/scevent.min.js snap.licdn.com static.ads-twitter.com tag-logger.demandbase.com tag.demandbase.com/e353a7a2a87d1338.min.js tags.tiqcdn.com *.mutinycdn.com https://www.googleadservices.com/pagead/ tb-static.uber.com/prod/uber-static/uber-sites/all-live-pages.json tracking.intentsify.io translate.googleapis.com uber.formstack.com uber.zappy-ride.com usage-us.talentplatform.com google-analytics.com google.fr google.ca https://www.googletagmanager.com *.yimg.jp *.yjtag.jp jometer.com *.amazon-adsystem.com *.uber.com *.yahoo.co.jp *.clarity.ms *.taboola.com block.opendns.com t.co *.uber-assets.com *.uberinternal.com *.twitter.com *.jometer.com *.ibb.co id.rlcdn.com jotrack.s3.amazonaws.com cur.cursors-4u.net *.gstatic.com google.co.in/pagead s.yimg.com/wi/ytc.js sp.analytics.yahoo.com redditstatic.com/ads/pixel.js alb.reddit.com/rp.gif s3.amazonaws.com/jotrack https://www.redditstatic.com https://pixel-config.reddit.com https://conversions-config.reddit.com https://api.c99.ai/api/v1/fire/snippet https://dx.mountain.com/spx https://gs.mountain.com/gs https://px.mountain.com/st 44.238.122.172 100.20.58.101 35.85.84.151 44.228.85.26 34.215.155.61 35.160.46.251 52.71.121.170 18.210.229.244 44.212.189.233 3.212.39.155 52.22.50.55 54.156.2.105 live.rezync.com/sync live.rezync.com/pixel idsync.rlcdn.com/ p.rfihub.com/ js.driftt.com https://munchkin.marketo.net/munchkin.js https://munchkin.marketo.net/163/munchkin.js https://js.adsrvr.org/up_loader.1.1.0.js https://tag.demandbase.com/8fd99f526b0979ce.min.js https://insight.adsrvr.org/ https://js.adsrvr.org/universal_pixel.1.1.3.js https://match.adsrvr.org *.mktoresp.com wss://*.hotjar.com ads-engagement.presage.io https://scripts.inmarkethub.com/conversion-tracking/ https://accounts.google.com 'self',worker-src 'self' 'self' https: http: data: blob: blob:,child-src 'self' blob: blob: 'self' blob: d1a3f4spazzrp4.cloudfront.net d1w2poirtb3as9.cloudfront.net d3i4yxtzktqr9n.cloudfront.net d1nyezh1ys8wfo.cloudfront.net d3i4yxtzktqr9n.cloudfront.net *.altrulabs.com *.doubleclick.net *.facebook.com *.facebook.net *.google-analytics.com *.google.com *.hotjar.com *.hotjar.io *.hotjar.net *.snapchat.com *.qualtrics.com *.youtube.com analytics.pangle-ads.com analytics.tiktok.com api.company-target.com app.acuityscheduling.com atag.adgile.media *.bing.com maps.googleapis.com px.ads.linkedin.com s.company-target.com sc-static.net/scevent.min.js snap.licdn.com static.ads-twitter.com tag-logger.demandbase.com tag.demandbase.com/e353a7a2a87d1338.min.js tags.tiqcdn.com *.mutinycdn.com https://www.googleadservices.com/pagead/ tb-static.uber.com/prod/uber-static/uber-sites/all-live-pages.json tracking.intentsify.io translate.googleapis.com uber.formstack.com uber.zappy-ride.com usage-us.talentplatform.com google-analytics.com google.fr google.ca https://www.googletagmanager.com *.yimg.jp *.yjtag.jp jometer.com *.amazon-adsystem.com *.uber.com *.yahoo.co.jp *.clarity.ms *.taboola.com block.opendns.com t.co *.uber-assets.com *.uberinternal.com *.twitter.com *.jometer.com *.ibb.co id.rlcdn.com jotrack.s3.amazonaws.com cur.cursors-4u.net *.gstatic.com google.co.in/pagead s.yimg.com/wi/ytc.js sp.analytics.yahoo.com redditstatic.com/ads/pixel.js alb.reddit.com/rp.gif s3.amazonaws.com/jotrack https://www.redditstatic.com https://pixel-config.reddit.com https://conversions-config.reddit.com https://api.c99.ai/api/v1/fire/snippet https://dx.mountain.com/spx https://gs.mountain.com/gs https://px.mountain.com/st 44.238.122.172 100.20.58.101 35.85.84.151 44.228.85.26 34.215.155.61 35.160.46.251 52.71.121.170 18.210.229.244 44.212.189.233 3.212.39.155 52.22.50.55 54.156.2.105 live.rezync.com/sync live.rezync.com/pixel idsync.rlcdn.com/ p.rfihub.com/ js.driftt.com https://munchkin.marketo.net/munchkin.js https://munchkin.marketo.net/163/munchkin.js https://js.adsrvr.org/up_loader.1.1.0.js https://tag.demandbase.com/8fd99f526b0979ce.min.js https://insight.adsrvr.org/ https://js.adsrvr.org/universal_pixel.1.1.3.js https://match.adsrvr.org *.mktoresp.com wss://*.hotjar.com ads-engagement.presage.io https://scripts.inmarkethub.com/conversion-tracking/,connect-src 'self' 'self' blob: d1a3f4spazzrp4.cloudfront.net d1w2poirtb3as9.cloudfront.net d3i4yxtzktqr9n.cloudfront.net d1nyezh1ys8wfo.cloudfront.net d3i4yxtzktqr9n.cloudfront.net *.altrulabs.com *.doubleclick.net *.facebook.com *.facebook.net *.google-analytics.com *.google.com *.hotjar.com *.hotjar.io *.hotjar.net *.snapchat.com *.qualtrics.com *.youtube.com analytics.pangle-ads.com analytics.tiktok.com api.company-target.com app.acuityscheduling.com atag.adgile.media *.bing.com maps.googleapis.com px.ads.linkedin.com s.company-target.com sc-static.net/scevent.min.js snap.licdn.com static.ads-twitter.com tag-logger.demandbase.com tag.demandbase.com/e353a7a2a87d1338.min.js tags.tiqcdn.com *.mutinycdn.com https://www.googleadservices.com/pagead/ tb-static.uber.com/prod/uber-static/uber-sites/all-live-pages.json tracking.intentsify.io translate.googleapis.com uber.formstack.com uber.zappy-ride.com usage-us.talentplatform.com google-analytics.com google.fr google.ca https://www.googletagmanager.com *.yimg.jp *.yjtag.jp jometer.com *.amazon-adsystem.com *.uber.com *.yahoo.co.jp *.clarity.ms *.taboola.com block.opendns.com t.co *.uber-assets.com *.uberinternal.com *.twitter.com *.jometer.com *.ibb.co id.rlcdn.com jotrack.s3.amazonaws.com cur.cursors-4u.net *.gstatic.com google.co.in/pagead s.yimg.com/wi/ytc.js sp.analytics.yahoo.com redditstatic.com/ads/pixel.js alb.reddit.com/rp.gif s3.amazonaws.com/jotrack https://www.redditstatic.com https://pixel-config.reddit.com https://conversions-config.reddit.com https://api.c99.ai/api/v1/fire/snippet https://dx.mountain.com/spx https://gs.mountain.com/gs https://px.mountain.com/st 44.238.122.172 100.20.58.101 35.85.84.151 44.228.85.26 34.215.155.61 35.160.46.251 52.71.121.170 18.210.229.244 44.212.189.233 3.212.39.155 52.22.50.55 54.156.2.105 live.rezync.com/sync live.rezync.com/pixel idsync.rlcdn.com/ p.rfihub.com/ js.driftt.com https://munchkin.marketo.net/munchkin.js https://munchkin.marketo.net/163/munchkin.js https://js.adsrvr.org/up_loader.1.1.0.js https://tag.demandbase.com/8fd99f526b0979ce.min.js https://insight.adsrvr.org/ https://js.adsrvr.org/universal_pixel.1.1.3.js https://match.adsrvr.org *.mktoresp.com wss://*.hotjar.com ads-engagement.presage.io https://scripts.inmarkethub.com/conversion-tracking/ https://dyguxp1m9tbrw.cloudfront.net https://tc2.uber.com https://u-vsm.tmobiapi.com https://*.tiles.mapbox.com https://api.mapbox.com https://events.mapbox.com https://*.googleapis.com https://*.gstatic.com *.mutinyhq.com *.mutinyhq.io *.mutinycdn.com anylist.c.appier.net t0.c.appier.net gocm.c.appier.net a.c.appier.net s.c.appier.net c.c.appier.net tags.srv.stackadapt.com qvdt3feo.com srv.stackadapt.com ap.srv.stackadapt.com east.srv.stackadapt.com uw.srv.stackadapt.com eu.srv.stackadapt.com https://bzr.openai.com/v1/ https://dev.visualwebsiteoptimizer.com/j.php https://accounts.google.com https://auth.uber.com https://auth-sandbox.uber.com https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com https://*.g.doubleclick.net https://*.google.com *.google.com *.google.ad *.google.ae *.google.com.af *.google.com.ag *.google.com.ai *.google.al *.google.am *.google.co.ao *.google.com.ar *.google.as *.google.at *.google.com.au *.google.az *.google.ba *.google.com.bd *.google.be *.google.bf *.google.bg *.google.com.bh *.google.bi *.google.bj *.google.com.bn *.google.com.bo *.google.com.br *.google.bs *.google.bt *.google.co.bw *.google.by *.google.com.bz *.google.ca *.google.cd *.google.cf *.google.cg *.google.ch *.google.ci *.google.co.ck *.google.cl *.google.cm *.google.cn *.google.com.co *.google.co.cr *.google.com.cu *.google.cv *.google.com.cy *.google.cz *.google.de *.google.dj *.google.dk *.google.dm *.google.com.do *.google.dz *.google.com.ec *.google.ee *.google.com.eg *.google.es *.google.com.et *.google.fi *.google.com.fj *.google.fm *.google.fr *.google.ga *.google.ge *.google.gg *.google.com.gh *.google.com.gi *.google.gl *.google.gm *.google.gr *.google.com.gt *.google.gy *.google.com.hk *.google.hn *.google.hr *.google.ht *.google.hu *.google.co.id *.google.ie *.google.co.il *.google.im *.google.co.in *.google.iq *.google.is *.google.it *.google.je *.google.com.jm *.google.jo *.google.co.jp *.google.co.ke *.google.com.kh *.google.ki *.google.kg *.google.co.kr *.google.com.kw *.google.kz *.google.la *.google.com.lb *.google.li *.google.lk *.google.co.ls *.google.lt *.google.lu *.google.lv *.google.com.ly *.google.co.ma *.google.md *.google.me *.google.mg *.google.mk *.google.ml *.google.com.mm *.google.mn *.google.ms *.google.com.mt *.google.mu *.google.mv *.google.mw *.google.com.mx *.google.com.my *.google.co.mz *.google.com.na *.google.com.ng *.google.com.ni *.google.ne *.google.nl *.google.no *.google.com.np *.google.nr *.google.nu *.google.co.nz *.google.com.om *.google.com.pa *.google.com.pe *.google.com.pg *.google.com.ph *.google.com.pk *.google.pl *.google.pn *.google.com.pr *.google.ps *.google.pt *.google.com.py *.google.com.qa *.google.ro *.google.ru *.google.rw *.google.com.sa *.google.com.sb *.google.sc *.google.se *.google.com.sg *.google.sh *.google.si *.google.sk *.google.com.sl *.google.sn *.google.so *.google.sm *.google.sr *.google.st *.google.com.sv *.google.td *.google.tg *.google.co.th *.google.com.tj *.google.tl *.google.tm *.google.tn *.google.to *.google.com.tr *.google.tt *.google.com.tw *.google.co.tz *.google.com.ua *.google.co.ug *.google.co.uk *.google.com.uy *.google.co.uz *.google.com.vc *.google.co.ve *.google.vg *.google.co.vi *.google.com.vn *.google.vu *.google.ws *.google.rs *.google.co.za *.google.co.zm *.google.co.zw *.google.cat https://api-js.mixpanel.com,manifest-src 'self',form-action 'self',object-src 'none',script-src 'self' 'unsafe-inline' https://d1a3f4spazzrp4.cloudfront.net https://d3i4yxtzktqr9n.cloudfront.net https://tb-static.uber.com https://tbs-static.uber.com 'sha384-ux5DDUgR48oe8U9iJV2HcZegZTePz6nNTD5hI1YZYnpb4tO/oAfCIx1sEQD8AATa' 'sha384-p922af8FVOr8B5eM6jLO/WJmoEcfabEy8Z8+P8vOy9SGGntNcEfaly10Wvucvu7j' 'sha384-IK4C5JaYfIMZ7/sFaGOgESMO6B/5tt6MxnF4IW2TO3mKObw5X9po8UwdFYbxn4/j' 'sha384-vvoTCCkIMpTkfRbsS6hkYe2EhjwXnmSBSH87Klmn1D2+dd/Vy8b/FrA8phkLcv8P' 'sha384-RNRcIV0lzwICzecOP0K3SspQ5x9oTTUoqGrWVh2zqEXFt4JxJtS0unJhDG/bRgVN' 'sha384-FkEc9nRWUC0IwXGTrmcV+3SnM0FLtUHGp4266nDv2YNVpt/utgZLKzeRGd5RpwKN' 'sha384-uVhFLrftFnJEWH0MUKUcYlPtXeMKIwLPy2V60QGTGrLm0TdiL/vGVY9Letp0oJkS' 'sha384-wtYvA6eV7EgPY10szfaEqlbnFCZw81QJDk/Peu/UW2NEf4YIDIc6wLay1crlMZ0N' 'sha384-edP11upF2UCG9YqI3Q5Qwne/gkiiccpVlD5xFv+UJ3TFhDmihpd5bmv8k/9K2euf' 'sha384-ZbZky+e3F5XTbqh7npLhiQxB9/PzkpTzEyNhhxFev61Yrk01RlljB7Bp1BKP3+8Y' 'sha384-fd1BMR0WqUziFN4tG4uvIXH3Xma1DlYhFDSpszS+8baBDBCy/kt737mD5LAcIOEl' 'sha384-dVfZ1x2r87CXrmb2rhLU6n21LhRMyFbA04mt3Z8sCiT78/Hup/7dvIwnT/C9TP3j' 'sha384-SrPRlp75HaMulSClffMbSYVhavFFfqRc6Clg5ifYwE+GuLqZSquK7LGON1cV/yQh' 'sha384-8LeuuHxbTpOmH/Sq3v/rlfNLrAIx5gHt2yPrdUxlYeigpMuLQOI6F5srE94olo+d' 'sha384-V0oIMW62Ir2sa+0yFEqng1tmQIeRX9rn3DzT2Tpe0huB8MQih72S0dADgQZLAb8E' 'sha384-wYWOEPO5Ti4a6xi6hc5bzS5qwWKu/L2zeCfT/94jMJ6kMVlzmnsHZ//hNwMWFNNE' 'sha384-oCrJhgJzV8Rh2/rg20fSg9Wl//6KFh5IxkUv+0RtsKeYllC9uprVZL+9KlIrtfrV' 'sha384-4POhDul7hraVTPCdHfPumHQviMMZtQeRTJNgS4Hl4mcDR/o2cJfgtkl+ExDB/qCm' 'sha384-0XoU+eWYfSEGm3fqm3eAcuOY6+eUTGQ1f7JWSErqy4orr6nl66H9FV6I2Ygef4ae' 'sha384-trzOFbXK3+IYjF53zwAZjh86fFLqAMM0hQaIPLvhbk7nGYYuJw5p5sfRKQn5kgsb' 'sha384-oSY6G/8y2iEvLMolRwtzUr20ecKRTpwzXOUDBTv5NJZFBoGHoali37ISW6RRgfG3' 'sha384-amQnXzn6BlmAU3YygYrsZt3ppUSHGtUreNiA9Hddv7FB7/+PoVrkDo1IzKcvIMZG' 'sha384-ZmtBOD2wt5lbXre7u7CunPBe3s5J7V5tTTu5hUbVHPUW0hJWCWlscQtPAuDGV4Ri' 'sha384-+s3u5F9Tl+XPAb0HJhdkjq3kvuaZNGMMyrivibV9tUvG64mrd+CkBhB6Ny91Bn57' 'sha384-TK6uHI6GWFH+u0TcjK1cMU3vHul+5fjsQbvWJ15lhooqBREWXSb1GWJu6JO7eih3' 'sha384-YuygwYtaObUytd5B+R0u2nxYZ+JVh0yqFkUK1txTTWf0lbpf+zi2sC8s7v3EWyHj' 'sha384-HCZDz69syikei7nvTjPgqG/uIOEoiPD5fMw7QTgFkhrjFvUpLXSi+iltPKwYBc37' 'sha384-0CJQ9QgpCbCSS+7YM5Mo8wUDNuaoP4uioBqjtsozRnu+jYHdheQ5uo1U1gqRlodu' 'sha384-JOvah6ONP59YbfNzWKXCez+VkiU7imbMmh74uIRu5edc99fQEnqTOE+3S2xhcaRy' 'sha384-kbQUq8oBZjfPX7a/6NBIhGiHMj4aP6P7bISG0eiLi2OJEiJvYp1o+TwQS2o0pZjI' 'sha384-1cnQOwxAIoq3J84jSwZcwEuY9T1uFoV3FNlx3T2zE7mOuY9V3fGWsQEbv9td0uq7' 'sha384-Q08lmszA+fSQQkV6EQnKxRbjf4WHePiVfoAkT5dBuaAOmgknryKGHRb4BpT2rdKa' 'sha384-E8AfJf+AS1/Cctn3QvzQzKJOmmhnMmuLtrQDsmc3kTgeVcJUWzvWk+wYUS4iCHTw' 'sha384-+g4/3au6lhEHehwpSsFLpspS7U1PLUBFNkZjIpvW32l8FsenXN8GKFSqi2qLEMMi' 'sha384-quqbR/Nd08/FWZBO2jncaG1kOUFJlPTM3MEOiDIgBwPiD+/5wkPUjO3J42vhyH+r' 'sha384-jYGH8LuTakXAcACyf4dqo42RnYEOMK5+x4Tf2ixsx/7FwCkEinHbod/Ixjesds6R' 'sha384-eK2j+lkmBl34A0KgV0sfiWoxaG4M7InhJC8u6M+XEPhlsMRRH+uZMw+5SpM1rXIp' 'sha384-33O+Tw4Tyw/4oHkmxOXiW2rlcVvEocFvRXUurdrjtK7TMxiC6rmhgLjvl0skfQDU' 'sha384-WJf9FyF0hPfIImiv9IRjWWj+qYqMfq7wX+1ahJhxctJzlUMCot+NwMI10Qo8V0W1' 'sha384-9EcZuY8jaYzBVyqXgcAp2oyP4EGum58ugIAGr0AnY5IQzDMq/ONcjXHtr3W9SLGQ' 'sha384-beFubc8goNrlolw0pckYchvNqvv0gxq1FsIc7AclIl/qK5wDiXcmMgEJJuHMOxx/' 'sha384-iLFBvpJ5L7qe3+pVS1iZdH99tbZzHTBmP/Oy1vbsYxbQErA9iEVZ41Ow+PGu/KqK' 'sha384-nLhj0nExlZyIK9unaZU9tKMFJGPGw9OkCfwQ1G+ENZHdoi3PJ6VwYPgQ0GvJ6/oh' 'sha384-DgZLliy4cfiDSUuZ0wWSn0YYaVAMWFer6jvOi4h38Pq+JJeNn1RfV5D5X2v7ul6W' 'sha384-Cur4bI7H7xKGJrP3hPAPC0LueRhASFEHW4qPRG2fnCEjV8T3UloJK3Ejw87O2pQt' 'sha384-PlKd6xoiDqueIj1Vg5cZy8tf6GFfsvLQiPHFpivOX+tAXWxf3D1faf3Nrfi3h2gi' 'sha384-zwstNLnvu4/KYdeW+nY32kDEtaWERY4GKTrEgu7eYLhb6qwCwdr2ZvKyC5XrVqu/' 'sha384-QuQ436viKHmPg7Op2bMhrzprNm+jrIwidvm4xzYSXgjHMCtK3OMBTjK7n9/UrlTM' 'sha384-7sU7f3Fygfxq7hMlY+EIJYcUbxi6oF1lsZlDB3nU/DzTwM49xCqR7SgsmufPn3m5' 'sha384-5wugsVy0jkQ8eGUJeQR9rGkci4amv3cLru9yBRrZJDS8seBqtBWbQVYE504N4+4E' 'sha384-y0fBKqrvvXb8OCJrJ4jez87bhhEn7BZHPqy1J0ij2fE8hSm5lMqm/J0P8pu2any0' 'sha384-9NOZ4ohrw/P227Y5ogy8NekFoJexqsrYIBbcTXFrikCMZQ5y77xNBeu4H9Dy1l1C' 'sha384-NBl5q/x/JZuVyCSqEcNFFiLWTbjSNweTJJncjx/7TfSAZAurOa3UhGIUm6bbR41G' 'sha384-8JAsha7gOHshCZdMbKercN/E7PyDN/Xvk5KYN/Mn+w680uSIBaLcIbq7H5oigl0c' 'sha384-ri5qkPkbqWIuYhT3ktoV887Q4JotOSsamFP6Uzor1sgcbUZJe5LmEJO5Sh1qX07O' 'sha384-mp05521C8uyqptoHBK49ejAy1NNPQo/42rNTbmn9JqSM+HRYfJPNjOXbQsgOacxR' 'sha384-Z66yNk3buiYA8nD4Tho6ETMGSljf0yazbmSWIgYNy/gKpeajufLYj303P+i4gVaJ' 'sha384-2eWBTfCdaLFXKPiE6w2g/rDmuxmVbQcwZF1B+UdaeKKDjmBd5jFcdpH9RjvbI+6Z' 'sha384-TUmxnL6zGFF7kiSAizihQ20CgjlVrxyORWjki03zYKCW/XI5/zuwE794gSMV/QSt' 'sha384-do9qCnE6USc3evZD27waiuDjCfUMLcZs2C5MVJQM+H3T/ndTmfwt/Xib12uHtD0f' 'sha384-7N2dNGqyslbHmZVNY8YTScpbxnKyXKdPBBVZ1KIrqEyeUzQUsmwwlRgud0CtIE+3' 'sha384-HChNsBMwgEsopqmcsklik4Vm+W+8mJBh1/FLOyE7QLKIiAU5Yw5AEJ3T0OdUBcu8' 'sha384-zKVKmm2l903uR2PVaKVmfBa2MNUUDngaC6TFX8XA7rMP4TqKxt90VeO899fz7dzl' 'sha384-zFP/bwcQptdgcW+GjYtd+wEjlXdTBb3IikBP7LYGdXrmeOMcXzwiUakZXQ9q8Wbc' 'sha384-9TeepMQRmqfPZabMhARG4kFSlpBJjzl3vM3LRAHftHhmbb0syPsopWCu3Jmt6CbE' 'sha384-Ot7OMh7VbP5KJLhfUCgy1sVYA5kUbZNkN0lCb2cy+cQ2S7OakHsoXLATqXr8cpqX' 'sha384-6fzsK3QyuuQkf2HwSdOSgOeZ392LF/sQHzFaYM1updvV/KyQsn9JjE0+NJIOCeXT' 'sha384-TLEXn+J55ox/RRIwdvNN/UvudxyYlmZvuKTFia8EQWYA7CIDSsSvIKcNqyfrfaDP' 'sha384-D+zeDZFhBYGg1+gEzEizZPXFjBsF2h4kIdDzJNBF5MJZj12uRAg/RY2vR7/EM507' 'sha384-1lW/KT8z6k0qE6eJVaBRmB8tlI+rg/f8L25qql3yDo3+ZY4Zg02/IbEI/Lg1Egxx' 'sha384-5weAxDKL9hkm7DmPEXNSlQh7rqLMPyxGEtytewG4MLmkSFvBR5gMOlWmgDZs+Lln' 'sha384-Ds0BKGPBvhzqlg5Viiod+1G1Pb9HyGlLKVQa53vs5+xgMETHG77ILsBOwo0pF+Xv' 'sha384-CjEer5uRUMSIDxcg1RD6GByr5CZWQpeM7RhgPmBIiHGexaQ6RD7TTfIgRp92mBAq' 'sha384-zoKmTxBqTf/DTyoELxuQKXDFZfx8BtqEb37TvMDDP0JYCJ78q8ovdgG9mFawzmL1' 'sha384-A5bNAxRyc+fcXZ8st2kVIBQfUYRzimZSAFFaK/SYs7IyOOifYRM6NNeYAQtON40O' 'sha384-67y8IREm3Z0OJWD2J2Lo8r+TWZVKfDDKtgXEk1yHQbwbGfld2uaxmALon0dEBglR' 'sha384-XRyx78Mo1MyUi02TG/SmotWv0k2HvWTRfg79Z0S7+NciNbikEjjr7ul25l0OJtjC' 'sha384-S/upPwjmwZxooNpyQK+c/m4ycK1sAlEEr6LYFFv7uvCfnMVrI+rFd677YgW7ScM7' 'sha384-TwZwG5R2Tox/McwyvrsuTPJCEYhea1eQAWullXFWqyKmASPJUnZEjrkIhT8/5UXu' 'sha384-W4IEMpOWZu/3frpIgNs4rJTaceLXdkMjeWUsy8t9ONiRXE3MB2SkkPwaTbzndRl+' 'sha384-IjqBASmtufIQxMDiprMPMcWYpwIkRqt8u6Udvls5GKacl5y6Bx3aek3U42Jrg2Wt' 'sha384-hwmdrjO8RA30ZfENqXagD8WzbL8+G3PvrDudiZrNkClQMd0O/bUgEBfgGxYoABZ/' 'sha384-vzjb910Pj2SZMsb6bSj5pLGRzLVqgfeBebFUFQj236e+aLIolZ2I2wlLRo6s/u1P' 'sha384-EjdDrgHs9wB+KNutQdIegHb7rJEL4suioOyweuKxl1XcgmWnCTDgBakZ+LXQ7rxb' 'sha384-FxZjuDAjmbY3rqRpDLBkLwvxghXjnzLjhNzYtMHmJGXgH/KdDGCTfeyAWK/Yfz6n' 'sha384-fM0pQ37KFqFhL1G+b/vWux4MS9dVg+ur7eGxzklREmWxYl+WacsCX0wUjdsEiJHN' 'sha384-nDL2c0JkTJUJR6Yibe19FEXoEth1nK+FCC8h6r6VN64xXt68FR/h5P+lrD0XOwG3' 'sha384-IFQwwrCLSZk4vLnZ0DdOqAwIldj0OAp4ElFKlz39yG0YEAn8OYsncizeN2jhjnF/' 'sha384-iHuduYNHtgCISDc+igwLSzw6rzg4KMwLXl+AQ2h/4mZs8qLyoN3YBnLdBk+IcMp7' 'sha384-l4Ix7o/sPjjugp0B+bwmBWTm0IPlUUq7sULs1paNkoAPvNN+a2naBXwXRRSzBZnd' 'sha384-nZ219LC5v8ENQcWQ9jtn/Us+dursggz58SkeqJ3V2C4vXCbZjSNoRkPQY7/pznWJ' 'sha384-w/AUZjUF7V9xcSKPEXu31iUVn2ZIeEGdgBKEWwh/FbsmeyHmeRLIXU1rnFIbarS1' 'sha384-j+vKYxRLQqQ3IAkG/0wBT07T5wJNMaMbpuNRQcZnA1Ou2tkkgIpPLWRMDroing+w' 'sha384-QKAQJfkIlX6ai07j++KnL/Hd1UZx52gxV+b2yXY9p9JvyFPTWm6dSf7mTGmJumCJ' 'sha384-ERdD2dQEH3XftZma7gdcBp6ZjFUeukmpA1HJOkYGoXkZTuNAiHTIg7B9ltc65PBk' 'sha384-ozMs8LVn2kkiBdVchXr2hQ8on/iHHFXI1SuXpPhhCBItMM2+DX5lOTtb/m5NXrQo' 'sha384-3+y8PxLyRHwjxM+JpcC5hloJ1huZfd5gEsjqAVFszTJNCaBJGso5O1P3Tt6Ck8GM' 'sha384-9v49ppqoQqyXEgD1sKiqSntZrUaxQNaEFhCw9c9DkGtrW2FRBiJd9swWZsiZxc5i' 'sha384-fw/WbVfH6e6FFYGkar6iZyAHRi9LKC0oLBIf/J7rMV870ZHAxnqrwK2EdEA7HeNU' 'sha384-Gv6rGKmfQk6FIcS8KortH/hOSrRTYlDMNkJpGpmhDEq4CRxp1GR6JgJG54eJmX8A' 'sha384-rmJiqoHcGBHMuZhZ3bl8KrH2rWLAfoCfjy6RXN7QqEAcGNkLpLcXs2BHptNbRgQB' 'sha384-x9GyJtwv0TqWnjcTEDdriddplBQUNsmPxWAqp4HCxS7EaXvJ7T9ItmtgjhfatNrV' 'sha384-+pySFROjc4R0YsicgguVj4cb8AgRUvD/nokapTO+vMAdVjbUf1QFHIJOWZ2MDXdq' 'sha384-ARzE/rpwFQVs6MfByRvlrkXHUtIdu3vdYHI1zqse54zIYzLnagOTTff9kP/6+ky9' 'sha384-d0wUsqnYqEPya4l9FLhGDKsOR2amI16Q6GTCL0wOSQ9eVLehSVXkgNNXbqzVsD4g' 'sha384-my5VDB74MJiXKf8RJC0acGLU6w/FW9PG/bB2M3jo1c0q+Z21LRZoQV3cZB6GWE1q' 'sha384-R2Uppud0y2ztgijZsM7tqS1COzqlip5pWUCbQHHGIZ2dLj0mUu3g1VYPK8o7PkdO' 'sha384-CbqQ9AipVLjRzcAJ2t2kvY4eJAUEuDQ9JMrU97bmWqHnmT2FBFkH/C2bvLmgaU+B' 'sha384-0/sYlVvzQJpmTiKDsCS7Io18zp3i+Y1DMgV5oUchLM5AS/YJ28zXKbpbeV7OMb1H' 'sha384-C43z3E9ZlmzokvG3r8mjhY30zYAn8Goy0CjYWeah1qc99q+RvWnpt3ExnUA8X5Wt' 'sha384-7qJ2Jx+x8D3O36JMwY8J+UCSM+KTUb/XYiKWAIdqzhG30VO2OxoO/Uv6L55mBR4t' 'sha384-QHYsw9GBQgk+5U0mxiPvjkELW/kd8tNkCogqkdy9kV+i3rQQT6GAlOSa0yyCtMkJ' 'sha384-i7EKpHbxBCHDyzRuJPUV64oZZdJyWL2xtCVF+7GUAE34Tnr3M2FwmkoCBVUsJxi+' 'sha384-03+dHP8zEw2dMIoST+E++pfdFj7PXXpr8StmZkrc6MXutST2shBJDDRJcm42+J4W' 'sha384-3+h3aH5reHuIMkWqSW3WcqinXkxDZZsNp+gd1OSlegyZs/jVthk+m0yYr7FwbpDy' 'sha384-ibCz6Me2KLSVBQ9KCal6EAN5RwF9n8+SS1tjbS8yh7H+9CVFhcknQ6qbLBPRc7+V' 'sha384-tqrO5NmBYnHruyppq1Aa5GmSukhwzEB0J7mNji13jTP1dsjpMN/FWsIs/c6nzI9z' 'sha384-AhcMhmky7vDycwzgIfZVk6GERUP+wWUL6/Dmd+UMRri1/Ww93uPHWrvf9niGAecS' 'sha384-H3nffkB5WxBnRDVqJ42T0GWMfFiBV7dnhkhuBf176PYl5M5ap+8Af3aiRpp4HRYU' 'sha384-hYMLh5KndGUELsboOiXq0z5T9k1d+x+YFyZUMo2lPBNYPUAQ8dFYLU6rvjAt+iXt' 'sha384-m6aZ2MOAGQ7BM+gGZtnoDUy1RsUJKSGtg6T15CYube/W/iVmDAomTlfaR58x56r+' 'sha384-nqFxVd+ctmxViUpMi5kkNJHW4xcqaBEXdr2439vtv2o33mcKY8LyI1ujEci89MYQ' 'sha384-pxl4tIg2ZTEpupXUe4F7Hpwp4v0LbeIgwW9DUsCU6A56GUicS7MO8/KTULbyAaWs' 'sha384-DjEyy3FfhneVWzpvi/j/xUieDnDlBa/83yg6XAp0c1s4EuVcVbNTMpG/xn45WGie' 'sha384-x11hADg2mwtVngBrXGz409zqStjnFvCqjA3WOXuS5GWxL0A3IlCJC5VtQJ/a6zrI' 'sha384-gYVSq1BbcFu+MOkFtPndpqrA2aLQ1KhcBRBDg57Mkc5BlEXiXWEvt4snfIo0sfFQ' 'sha384-8JLYWGigQTtbN53R5zf1/qzfH2TXNzhWgB6RQeHeByuj9SxZlwqAe9eb+4aBP3C4' 'sha384-KHcLNBo9cbC943+reRxtfa3wSSmUIwsz3iijGUczIy8hykQ/7D5GKp9pLZ/FLmmy' 'sha384-/U7YRkyEOm/WXJI0gDBANcYoNVu/awiDEuO5S6WUHbtq4xnR2adbyiwUKVP5BAgH' 'sha384-M8/LM4qvdjek1IzjVvsonuvJxqSK6BtJ8IP4NvEHIHA6v1c41euRIUWpypf1LMdO' 'sha384-PDIXxarb1N7cLunrZhhMHL6ZdYdTw4svDgpOQTiVIraAAPnIqRH0+q7igTLhyN6X' 'sha384-M8D06K9SMXIXwyaaUc59VKZQeCSkUP1hQVLW+7veinlNWZRdFlmcMSIdzavFxWpY' 'sha384-r3Ss0eUUe+z2JzGNF55HMMzSeUPHBsQIElhFkIsJWDEzqaQTnOYcSOTV33cbg7Q3' 'sha384-l7cl80tNNHDbietg0v8sfeT0kNGGm2z2jQbwttiITG/Lc5WCJN75cC+M0t9d9M4s' 'sha384-UfFjTZkTCZZjeiKg+z0R52W863fTAZtd/B1GxfraLQULBCv4gJkqhYZPzvCxjAGv' 'sha384-kO/7pdgYKuoMvQS+0t9wFTLS4jzZvERaN0ZwLKxzNKnp1RxA6YQk8qaYIIrrFsq+' 'sha384-0ICkT/TIippoCerA//w/M+z3ttoxUkdapdzK5GpNCuwvJHVnzvMWGYwwI+UuDaP9' 'sha384-0529MUUsq2tOSdoefP7yllGSn9dRLJgE3gCbOpDw4YkJH86ufuw1eNBgvIaCL0w1' 'sha384-bICb9Dh63/mYZuubJxG9e+wZhpw6wXXojO1WahdOs8JMk5WndElXI/QOfvTYtPvl' 'sha384-1O3KN3PJ4+O8V9m+ywLuapAJUuZR/y+9eN2Ig0T3smiN7hFgCKcqPbZ/P1bNxeK8' 'sha384-tfWNM+Al1vKl3Z4Z+B/lbGqKsuVh0NmHj4ePMJxS66FrbXzQTQIkczsMBlfVg7+r' 'sha384-5qunZJWQgfM8A4oft8MVt8EDcy7iOKPNOaqbaQjmLf9MpFw0G0GrqNOIfxVkkJz+' 'sha384-jc126cutGn061vD1lc45mDOZvx4iFIxqvj6nBSxyi7cvycpHViKrHV/RTThy1kuh' 'sha384-t7rDviYeHPDdhVnaZUwxEY6W6YjE7yWT2KI+4nYlTQbiGRFdeEMRJTCrKp5KQPJ6' 'sha384-J1F438E66U8wlkzm3QBH4/7k3atQrYfbrfY/5ba0ragAvknwZRm+Zn/3WzGjVgcI' 'sha384-bssiS+T7uSH68RzC7qEfzPUczJARE6cF0RtYRm9MPyXetl35+Dw/pnR0y0LtL9P4' 'sha384-p6JJbPI64RbiwNfivD/csZxbBKf30wfUEOzhZUMbcB46Z7Yyg9aQt3syoOn+27LB' 'sha384-D0NzFqPED4v1ssUG+ufp+/v3dPNkchk6BH2WAcdI3JkO+HPOzDbGKEYKFXlPkbW1' 'sha384-f4NnAl+lKu/wphhg+xPdmeAWbh98kg2fvMeRHFw6+hdBrpS7HZjJs3b1djr22ALc' 'sha384-CXLDh1l1U6PdxRfiOIbhYJJ4W0FW69qW57M3Obq96F+LvpBuVOsR6Xq4l0aTt6GF' 'sha384-/CQ06r8V3bM6nzxssmfNxrYeDD8x1B/HBmK8nW7VDuAb9Ut/1MNS8qSUKZAqtzjD' 'sha384-2HqzMIxCYT7H2ZGdomE5HL+XhzpzE5MXdxJ7TAKQFNLj0eZcWwVOQpLqdIVIAGKT' 'sha384-UuH8j4NqIojOHLZCx1jq1RiXjwdkpKIarthBFeAfuWee28QkCMTU/BtqxYMbNGl/' 'sha384-Mvd01ymKvPC8aQwRFY90dqgHB/l2S21dce6nZT91D55xB5GqcV6Q9/7OW0faJ7vv' 'sha384-JyKP+Gz4COxaICz5dZiYSNoC84OiTowOD02MxJIe3HL3buikw6223SiEWOdo3wKc' 'sha384-kDgGTmeZ4XzIzn1rIzYVAJYAFoSTy0K5XeMM6J/joGGSi6bguNhPqp1hZEg3I7FJ' 'sha384-E7qCxh34UjN1Rv/tlJxurcA2TIf1XW1RkGhdirCPjXv7h+B75jzFoSbBQ6sT5+rL' 'sha384-1gq/jyGIOMt4ZMVX4jp3ne6w7kALrHzYHUWJuOLKuF1Pja7hYB0zeExvqkfXojYw' 'sha384-TALkjL2DsIj0IHFekX5zhCsmiklcprsELiBNFBR6SvKjQqawKGe4KhZ40wIR7jTN' 'sha384-l+QN2GSCGqqeGIfJjdRoH/vZ+Ecc9nO5P8XSDWRx0RBXUarILtKuhQ3jsl3rl7Kn' 'sha384-2p7JRMd6b+7jF90aczm/FCGXXZ0+fQZL8MxnEP3r+AVDRXGAO8Jcf8odw4s419b2' 'sha384-mhE0tnQlH1l1UqGjoPd4EEY346yI2eY/Ra91FWcM11dVRXuwVCsSpT8HyaGtnDub' 'sha384-Gst5FCzoV2gP0NCVgUYhtivMAq3Uw92FmLh1rAi5Cid5X+XfnMgyfHlw83/G0Qma' 'sha384-qBhGyn7vnpugSAGxErqPaaFMSRrDRZKAHk4634IE2dBCIty34OJS6KACRM14W72+' 'sha384-qk35WgLkg1D1SbbeL3wUpdLwMGMa+GEDkKQ9lfdIE5PloWKTvOds+liBqI4S/i4E' 'sha384-lJy+WzH97fLLIJHY+UtC5Pvc48v2HvuI3igyzQ1y2rqCXlWw2YvOGuaitf6j6XqL' 'sha384-729ZFHgra6ww7my99kogJvfSYHjxzWryrCavNR9vza1q8umEZ/bPi2LMQgQa3g8+' 'sha384-6qch/n+W2dLsTwwByMT8fDUs7L9SBGZ7Vq+H0VYfg8+YqKICIO45/WkFK3nm3HHC' 'sha384-To+hy9r/92xbqEquk61nEOxQ/9WPnmuzmoMq9hOByC6C21VWd+PSEtMRD8ZJ+5Tt' 'sha384-5rtSKosgkjDhq61aA8zn6iszIZ+rKftjtRjv78ycwUYEMYl0bGxM8ZqpLfjC3/hh' 'sha384-1kmN28aFSgkKnl9MjQpyac9H89KkAPlVphD0gW6o7TPSww5ksmevXY2FJS1w2JNF' 'sha384-xOyKDQJaXsxDeYJdXzrjvNm3RqcU0Y7bncvMe8Y9Vc44lHZeL0NkBd8GCWepF2fI' 'sha384-Dr5g6lXPiXWIY4feby4QS+Mdwq4iNPGYrmv9twX6X/7TpXtq/HWHx4q8XMptgcIe' 'sha384-6NZTN4grqcn10jNKY0JiZ7PlOwf/NKQPDxOmYzw8FgOsngB25gJBoJiQhKmX90dh' 'sha384-LJjzwcpDSVwNcDmmHKtSHz69qQyq1Yemex+hgM0fzk4r6kgZXC+XkZRDqXjZ2OO7' 'sha384-kpvODT4SdOOTjs5Zj/LHjfW2a7J/sJm1h4bZxGnuwU5KD/rno3c0diyocK/8NTXZ' 'sha384-1HAv4HdnfbvH1wmvHDD5Hkb0Yd4GOQICZSnPwcmkWMdxQkrnhy7bIW+DtDHAp8bh' 'sha384-+yxHZPv5JG9hswaQotXfltWtWIh8yCJ872JKIy4IneaiDaEKnNhpNvUawNWaoEym' 'sha384-gF8xPaB6+uC1UT8SPrgZp+UlvFOTPTZjkjbRm6VHw9oGG5oE8VwT6KFyEeq2hoGS' 'sha384-w51Q7KLh6hiySiG1gXNBnqJMmpdAxThVLq20lo94VhYme3ALMZphvXG3RgWdYByj' 'sha384-8+zuGfDZQtLrfUx2jNkTn3muBe/luJdhKbF9yYBzdP/SNUyimGSMt5tOUgjWrYCD' 'sha384-KaR4R/dnFhT17rjiGljmQ6nG9UrCsTkjoGI12wzfZRFofo30zzY9oc0m70bdBWAJ' 'sha384-3DHoy8VRtkKvZzEqyF097X7AgJrgwh6LFQwGfq3ryxw4JPUXX6kuFOyX0nyK0k7g' 'sha384-nYisGhYCDC05YGO2nLxwu/x/5zdWt7XUGsGLb6112T69J1dnfsct8deV+php4/EM' 'sha384-jAJFo32tPV7SypLdHUPocaycOjV2pUu1N0Xl7ql1tU9skVPR+bRJEkciK+f1rfP6' 'sha384-9LyBtniRIAGfR+JxgI+rUXSIwniYcoQ9qEtKlC1CRadit9TKS07uOW/noRjiZ+Ti' 'sha384-i2JWji4R1ZkCzy8hKi9Uwuf7Yf9Yj+oL3muepr1iysdz/0kXZOAXrIk2tGB6Wzro' 'sha384-/LPvGtBU9pC4eox3PeLojdVkLj/f6dD9zaygCP89J6jJ1/t6Akeu9a/gifB9bENv' 'sha384-L/SlRn5PaFVt+6+DqB1UPxQVzT2gctqnL2VF+QT9szQuTXTELF9LxNLKtbGSI96O' 'sha384-VCOz0+5Nfm1vcvyLv4gvCD8YhBLqtk3qshvN2LuCSgiFcW19qplO8xyZ1wKmPQYl' 'sha384-jwO3EH3qefvYD6kDKcv+vbBqvz9iFwQrgxWgeYyMlVblOFCTh7XvN2p/l8kmb0CY' 'sha384-pj7arS35tTkCqoQ9yJcT/zvsZP5ZWhqm5GVGeh5fKSPWGCxGLgryxs7vKFFD20P/' 'sha384-hFu0rC+dXCibEwpNs2e7AV4clU0moBc+ZxQ/eX42JMsm/zE+cbI2lxLuwHZBZYxz' 'sha384-mJOjEk8yqPmlxSOPKDZQH/sSnZE1Mj3ZJ6lgSN4sCQB6rur1lN5zCIh0vRXudeU8' 'sha384-oUxz5mzVI0KOZVGlmFjUbsi0p7sK0G+Vbq204FWESVkeu/L0IiWa7ZSqbdfPmQ4F' 'sha384-AiA4Wn2R7IplnaRUcGqvvsT6Gv1wCRyukFBuUCYoDCTKhe+54WYCwMOr6a7Kv/Vf' 'sha384-9PAMUNRyOPGzh5rGpTpysCrFtFTJukfJDdirFs9hfbo63AY1cfzfy1QUPhPn/gxZ' 'sha384-3U1Eh6rB2bLAGnTI2ggBnUDFM9RxzsPymQdFk3uKfByEW0bqwWfjdHXvrpIDjVrO' 'sha384-gi5fDg3GG+aHX4bNFTGxoNxV47ZHo2mc/mPa9xAbsj/nCGUKHj+qVrtCkHCCn15j' 'sha384-r2M62hGvo7kWj2XBwVHHy3kvnnAuzfXoIepyfBPJOu6jT+nR0XO6Jx67H3KhSwBl' 'sha384-4ZL3+qXCZM+trxWh975MUuH+CD3WA3noXmRIIRJLvXCx/wlCZGrI69uWzVofUdPA' 'sha384-L9+B+ETLB0vceaToiTrHunZTxQCOKCYeuyOtHxBBagW1j+e07GVPviK6n3iHMfKB' 'sha384-NTobpPwhkAvrtwcb0a7eDbFMkhrELj1yXEBpSjD3GRIZyi6feSPNBNVLHBeCDzyi' 'sha384-tMYhxoomhPdiCT3TroggXtUfzS4WaZAx0ozFl/DcKqiTKyqHNrQFkrCS8Ceon4vF' 'sha384-1LG0hf36gwTliCLG0EFM6yLgnrA0cLUS5R1LL0e+lNvjqLrIlb12dJcISydRchs5' 'sha384-1CfFM8zSBcWaVV4CpM1/9H0uBM7igiH28JfLSquBYx1jPKwTJI9AfvbsqIn644Z7' 'sha384-VoO3sma69APHA1GjgqXSes2BbNXLc2+ytE55ZV2xxYUp42A4qyoMyVaLimY+2e5A' 'sha384-+GlIxM/V8yCxDPdESsGc+Hqm+RfaShIGgGwjVGJpIFyPRUGq0kKuwdubkd8Nf8f5' 'sha384-mFD4o9DwMyifIym4fqZgCNpFY43tgHvHcYwUGA/Pq6e25LOJxJ90KaEcOKOIzQiP' 'sha384-VIChXgNMTY5nuxtwF1PoLZ2zRTTzjbZ3dpf6V0gnpjlCIcWI5uaUCCweyQa1X0Dj' 'sha384-7Or8mTPZsyS3/slwO7TXs8qsG9Ro2dafM2bcJ/gOi5elcO5SxSxha8TKVWZhXEi3' 'sha384-/NvY7gWOc6NRouIXhN1v6Mju4cihGCyEv5nw5v0HMJn7OpEqBKzmHNhtsZe7tkfG' 'sha384-pleRoY7fsyM7VDST9jhHyVhHrYVp41xICu+UWMq9Qp+4tZsWze1XYSwk1XdcZ2qY' 'sha384-CjQccYoQLyaX/3NXrP9nuW4Y2lq7WOuAoeBxuWs51B3kcipSyCVPbgaosaKRBUkL' 'sha384-YxRJmRD5w13I5PUPWCkFbTndwMj2nt4+gj014Xlu73q5KcC6jGaoiV0B4x/1+Mp0' 'sha384-7NngDNk/UNf94hgSAKOpLCX6F0epY6LSBnIv9y1sk2Ti1EAG6Q5ebGs7EV59k4lY' 'sha384-gz0LXNeg2h7LzxXzsPVXXrpbuO2jOFLoUZHMhMvwG2gR+2DcvHiyj/UC3SHPHU1P' 'sha384-O5hEYNjtuZhPue3XArMxV5ovDYaXi4S9myg5AHjBxCQc678C1vSEf/2QNpZNIGaF' 'sha384-Ep5AqQJNUGj1gAvN9NjaHo34zQaMM2580tbLSjcEekMh4Aw4S9zglLX7rFsUWlM9' 'sha384-+WaC/CreRcb0buFH3FZrYIm+4Y7dS3mjAbuOEvQhbJyQ0cD+P35AS6YRW0gHGBw3' 'sha384-IJFs3WOvqpdv7T/QE3PZHoizNDLy1UAP004ui77zmYn0ODjNbDSqcHsEzXJ6QU1A' 'sha384-Zir1j0GKJKwYWY63NNnluMlMpVd0zW9jmlPAmWIv/BNdD1yGCqZI0SiEKH+eY6en' 'sha384-7gwqpEajJP9zgViCGoOkNMuHdg5tlJt/2Xyu9LEsk/gyreDNgmLLxayver8TV+AZ' 'sha384-vJxYl7cmvojD7zXH65gWfQOyLADi3tCXlM97xzNQPJMBGwHVKkSh01FkFFjCwKfi' 'sha384-h/dealAGWB0W7BAjrik0hHeCZ/dcGGKWzTN+NM736344PKVyb8qLO8iUQlHwTBz8' 'sha384-/1/3Z9XgRjub5Wyfpln3i+0iogpX2IQDTg898tTudi28Si2gIgxqvnhT2NdsdtcJ' 'sha384-Uh1PoZ9T2Jsp81JQSkyTi8fzQVrbwP7snnEn3N5YsbslIQQyb/DC6FgmQDlhchAe' 'sha384-9UCzwR8dfmV9op9/v4//Qf3iuJV8cLiI8euSrp0VohSUdTMUT5XYXF7kSlDB2AU4' 'sha384-AEuKEeF1nckXfrxay7OrsIlnYEm4ZD0wXb5KYG5MqjCFVj0CxvuM33I6ey8Lxg5d' 'sha384-laALCODHa9TVhY2GjH/v+OY2sGYEpqFq2ldPUO+pDv6J27UlZArNQAkPwtIrxDj1' 'sha384-Bo/edDU/+GY6Zw3QTbRxHA3QI2GJDOOIj2MHt27arEoL61lYxV5m16KYU9DMXZBx' 'sha384-AM9XxH7XSqT7OfBbogPiR3gF7X+POyjsPGc0Nb1/wpru7Bq/pa4OqM2r0LqvJ4+Z' 'sha384-Onfn+04G92zylA8VdbiIUDKa95qXkzlkdHi3HiXvNnWeOcoeTiSO5/Fqwajylu9C' 'sha384-+/SBZBpPgm8oin5JUFTzUCTqhQBb3c0iHnj1ygdp7+1sEIn09CDFx5XRhnh4VwAZ' 'sha384-H1p/Q1GocD2PPcMY6Q5ea/+sa7P0dt8+XH2/neAPMH9MKwRfx13xYT5ufKzakWne' 'sha384-vgkqGncPhUx+XQ+QEPMwtCM2yUEhDD7ZgBvdD6UBOPIYTfEK6kqm6JH6y0+tuk3/' 'sha384-tFbq2OSgM7YPbdfmycWu5QRdn0imYN+nQrpAy15iasGRQbzRZlCU13CsdniDB+16' 'sha384-v3waDbqzLZEiiiG/7/wATGfTxyQY0Oot5h98HnuL5v2Lu1Ev/V/sA1urVJV/kNk5' 'sha384-sZFC7irulFY6/rMZ+CGGGLCQO3BOtk6qmeE2Rg2uN5ibDwtXG8ORcpqHcn6l3bDA' 'sha384-ve2nPLY8RE9AfkCgmu2sw3mGh2UWFkusFB0VdhthmVIuEtRhiz9/n9znrxrDNZyL' 'sha384-1ZWa4KJhNT9c3LxTNpPgqtoqhaujAUUb0Aj2dFv36o7sPXiZ+pSSymoIOfFlidIm' 'sha384-Pkf7neqrei4s1RdT7mdILR+ECaFCRMLZRci189azNRcaFWDhpNRc5rfmHnGjsSFK' 'sha384-vq0KuxL/czVBEYAG5F6S0NoHs54E+gaf4b+TOVJIETszcsis8ruY+g7iq4vPFrwv' 'sha384-lj7NCOBQww3+F8RkTtT2NC0WHIJlHLsD57+EvnsOUGALRVfkEsCFW44S4IazLhe4' 'sha384-DvFjgvHZRTtjp8zJUbnnrlZTW5ZxblqbZruGOhQYwb3O8oaI8kAG2GJtRwDfKWBK' 'sha384-DolqQpgG8CqCHEquUFZTutNWDuK81V1g+hrGGGWtSYBDYrYJLmp5/1XuK5Eipuz+' 'sha384-Ruvpeu74npNatFPgK/iLmlgcqSS4g/9oFmNJjgUXxNmB8hx4H3I/UfdxBeKtem15' 'sha384-mdi4gIK554yIJZwI+p7+WVdRy/syfG4IltP17rjCuLUN7O6cNUPmHBAK2b+TuEWx' 'sha384-XnoPOTSlqMZiTFg+LJtue/KZRJ9/8RbPooHRgaRZ8ZaILoMfJAsWdhDXiedu6cIm' 'sha384-Y70aSB0xJrtj2dKHqhAS76CHFmGub0icFuJbkPOB1EPuhwiklFFyF0CMtq9kk3c5' 'sha384-9MxLaT0JPRZGkNwEo2GyNT04AlNt62ESriNu+9f2KMjHpTtiRCe9G/FRG6Hq85lJ' 'sha384-FBtGgA+i7SikW0/TDSFsd/js/Tzi6i5FPDMaD7OA0fMVpsrDxWVnNneIAZ7dJlS3' 'sha384-uwdBKVj+nooyFkMvTTk/aM9N9LEiWCgAj6/hT907wd7gNuH6cF+aYWReHZA6kqOj' 'sha384-tTp8KllnoCYZhS8xWyBX3J6srrMu5sUQPrXCQCAFBwztPMapnxJGT6uMXpxTgTd4' 'sha384-A+JVVozd/+5sjPSkU2emY7E2HZNdIPkt4SqD64ZLCNF/EWD6RI0n5LAsfi5fjKz1' 'sha384-ZlHI9iUtQX3qyrvY4m17PeSX8qgzNBm5Kw0oPX5D9F3Hc0Ot+9ogiWKmOu2UpBmb' 'sha384-fqHJVW06CoiNXDUFmhbtL3XgGQalK35Hff4T8UYBj/s1T5HwMpo9vcxrpeMUqWe1' 'sha384-67mzCDWXG20E4PhqBtiKUxjYmNyQV5bQy2WhWKrAXrki0BIvC4Jf44B0//KayTun' 'sha384-ici1U/r1TUYq1VBnl8zsW9SHyVbxYi4FhF//7T7xcpC676q+GHw6CsI9yZ9yHIZP' 'sha384-xv+7kNT7sudvpMOnkFytOYGr3GPUrpepcEE9CxkWMdi9B5n/xeaIUgcmGKkrbwZp' 'sha384-Sg51YT1RNdgRGX5vUjrv5s87xPmA4mhVBoGRkggVh+iteLJgbSIUH2mfcJBnmB2U' 'sha384-DkaM9zIe0oBmjnqx3HrvGwPexx5N+FXVKRP8wT1By5l1+HmLw8WfrcXYGaQONV+J' 'sha384-hjlmQ1Zdk7IJbDU7F+FjkT7a78FihaZIYGb2qqmAA7lvOCCCXEKswTjPijDA+yN1' 'sha384-PSQW7RWjsunkK/Lxi/XUYAdJPGTSayom/m70dKTq6Z3KyczMf1U4kvkQEo8el1ad' 'sha384-N6jKCfsPgAMoVczYHVcQbMGx+nxTZvXbRQOvslAQYLrIXZef3hJ6RbQlNLLsFX2E' 'sha384-ZNGXjbZy5G2W4gAnddDwSwtpOn+LHtahgM3LSSfmJUgpNOFOmc2+Ryg7h/W6mX8x' 'sha384-C/VxIoYxEn0t7CZCv0eM8XW53LjbTMG2e6zsglEVI6y2fGeSOUxd0MPVeSALJO0F' 'sha384-qaLT4MkXb8j0gJBlDQldRztdpEHg8M8F9V+TmVU4rrzj1ZeZgKTsMaQjMQwdUs/5' 'sha384-aeuDrM6mZn3Z1N+LrwgrjdSmokUi9eEusLt6EZ8+GxvV9dr4FhI9nH/xKSuIXwEz' 'sha384-DyTNeSMNSv7eTovYIAgkw/uPyXfxgjViU+csnF5Xx46b0Q4VIsG8vJM97HvRZQww' 'sha384-JT0qzTzek3pV4ZpX/QigaWZgYRFzLsYXSZ2qJqZtzAax2nyA/8JtYBRBOTZ9Wl1g' 'sha384-r/nsON0Bw63MeJQNwbXVq+uxTDlGHsfMvq3tSxd/be3K1IXN2yhVDYtlH/+QBZ3E' 'sha384-E8ZpPXbuYt2VSe60qkydAYa2OtplUSo+5f/w+LER8vlyFf7wb1erXG2ES19IFr3G' 'sha384-tllCCB6Wo5ZM0SuvYu+AoW/I7DECtOlQ8Wf7BK13lmWgNYN22kHaQer2c0Ef/AKs' 'sha384-ONtwHGa3kwhucysYZ0m/krJiaZd2lCh7vlHyfK2Vu5m62D5WbqDUnpLHSfv21VXa' 'sha384-RM7+4Y2q6DMlNnWpXyMMQ3Fmp+B2wCyS1nL8XVZl31hdCL6GQpId2d7yGsuAwc/H' 'sha384-HgiE0txHyoFVxfWc0T1PxmxAWRNE+HUIqkuiMRZF7WVCC9VN+eEYSz+XM8iW1Zf4' 'sha384-GQuh+1d0/cf4M7Qhw53L8Fn/OC1l9VV4fhxPP6yK/EnZh12BtPBul1ItdptM2zai' 'sha384-80BfaBqXpWIroZx8v8tllsiM9xvSNZvOnttW/rjpuY4sspMCoq5ii6cKuIaMn0W2' 'sha384-SsvVo6OPcfdD19VX3gv/1jaHixDBeMtWuF1hPUheUu/maZTKd/94eqKAwYX5KN6r' 'sha384-H9Yg2Yg3ZRzEgPjG5NlFXCk5VsjwAx0jECGsNDuTUGzDigPdLSbsnnuRADcD3AcP' 'sha384-cjhhZs0C67m6Y/RuFFCFDQojwLDb15N9cUWBBr6lmNTSl9w12tl06gwRvcGE6Y3T' 'sha384-/J+Y8qKZAdMVjwmz3JQbNE+EHv7HdGCoOXAjdUZ41q/iHyMTtITEY8tVbEnEltyR' 'sha384-gZzkSc78TwxPSGWHKuqC4JUEO08ESevcqS7xOiXNHtgRAQDZ8S99Iy/nZtwbg4of' 'sha384-Nag82fySqvFKN9New2QkZeEldikFiJ6TL/n2ymdDE5iRSQXXMG4iXE0aziLUzEz6' 'sha384-+D+/HgHKv0MKdMHclPAU5xkK878EJgNLJDwE74KX6dPi8yLD/2xFRHdRGexIgygj' 'sha384-9z7uWuuqIn1eNizB0+e9jA21obWXza142qWpN63j69LW+p5F3X0/KWXqYujI0lNK' 'sha384-5IBKj7hOq+DTooXr98IUSyRn/TahxHCtrJj2pLCYbi651mbnPE4nH0ojac4hW8iv' 'sha384-R6F2eqsaIYPf+jNHqCPgaeMX/C2vxXGeGc1+3wrRFyRHRCizsf5P6GSfBegNCXDq' 'sha384-gsxYzOHcXHxvZ7F4aYJFPw5QVDatkKwDNtkBcRtDKD4Gzl3uKpdP2rqA4A/W9NMB' 'sha384-Shd88QjotomM51a7EKpysZLq4cU13ZVjdYMkcGXnaQmRrMD1y9X8AhxLcSBqtSuN' 'sha384-fwoxRoOWBuyQry5rlrlVDm1aiOl0aVgKrPXRgb84Foo10SrcgTWdz39RI9RPtfcx' 'sha384-5XQicycIem+R3C6+bJ753e78VedOdR7OCDxrCjDH0LVLxe1b6PAMBsWYQjhkOX8N' 'sha384-a99oGr0NPMvOXAkroctd1q5QeTWjxJfkOv3aQL8KDycb2EMdmHpI+GQsCbBeBqwd' 'sha384-gDl1egAHC0do64U1l6NGMuJEqNmQA+vCRuVvgqfI1657PJv5ps5hxk5zopmHU89n' 'sha384-Z/VKCeQjHYx/sizQKPLNWaUqgsHbTD9WyFQ2rG2UR/+ZAjA5cNm2OLHwDb+fk/hP' 'sha384-7crRuZ6kl4FnofslZse2FSA8lDRu5eibmR621t5ve2cQmBpKz/XQnb7KACn3YBxY' 'sha384-nl5Zdd+Aou2VVqG026bDA21pyNJVm46/TZ6Dw7PTekdlgsbdE2IRk0SKV1VVA0X8' 'sha384-yODEj38Jhf/ZocCu8nzFbPqj3y5NCrmBFdLYhShumH2iki2oldeZgP2vQRTKy7Yi' 'sha384-ggSy2kD/B2SCdJ2VRbEa32wy08rFHnJHfjEXmiRaOIqgsqHAIbYs970KHMwyDlgL' 'sha384-9L5SZYNrxP1uqX5f4t6YEWwvm19GM9OWseelu2bytlzqQjcGdWDGvbPFhbXP8CdJ' 'sha384-x4EWGBTRjTkkCsgPLVa6z13uUIhDZynKaxZPu3q40Ys11gmx101wNeM36fbWmqAS' 'sha384-PjpBOyJpInsNMonx2oxjVIIKLz1ggX7AC223taJ3ypp6TZVT7/WhAUC98F/6+Ev+' 'sha384-QexcqZq/2+97GHMZmGkTFrt10s9ly/8bhd4RCpZBQmkdtw3geoT3fgiJja9vNmeK' 'sha384-aCt18a0TdA9HKl6ISsUiY+JOd8SYeahBrXDFAn8peH4DyLeK3F/973UazqIlS3vy' 'sha384-8amiBPXPcdtW+A/wJGzSvXK0wsRwf3uYRyJiW2K81DrlFNIT1i5u/GDvzT/kiAA/' 'sha384-N/dclRLQt/cQT8eJFcSNTkH4dgPQTozbM+2gJSWkqP3c0dnEslB0aaGxDMZDUZzs' 'sha384-436hnUAdBdASvRRoklM09qy2EwzU15EId9pxtDHRRGt26jdoPDvQS0nc6rOLp260' 'sha384-FsJ5paHV3/SLo9nDt6eM+6prjCHS/yzjDRwT4Cr8E417i+FgMlq/+CavlmR6OuQa' 'sha384-CF9Nq1+lQmSFKExsyM5IJSdJaUXRtO6PcElAxqJV1BId9JTUaJtn+jiMDw3jFD6e' 'sha384-qwmWSnP2t/TQRNvSFpYVKMleqjVNL+hLoUWM8xtPOeZ+uZ2m0mTuM89LfVLk+qkX' 'sha384-LRJC0rPNwJBypIqmVjWE86231hAhuz3ce3yO9PBdQVMOUqv8ALTxskwHyhXsFJSf' 'sha384-r9ViSB+TBkVciCtoTayIlKmLck2jKt+/ZsIA8VugTvgdoMcKBBP5rHWqUDpsMijt' 'sha384-FCtRU4DczZwEXkn7tpXAo9ipWl15bfwSwJc5g3AT9EoZJHDCx/keAe0IzswWyI6R' 'sha384-/mMtnDH5/hNkY8YHRNCLlWRs0C7z5W6R4d2EcX52vAryez1rU/fAUpruXlPUCFDo' 'sha384-XqeBUjHOch+uJ2L/t20YsOTiqCchsVHn02vai5M9WVs8b9IxIXkCBDFvlqJayc3o' 'sha384-QskwXyaLIvasohmE9s5Zdu6VpNlyJIn36YAeKo3bFXaCofpB54QnHyh3dI9LTwU3' 'sha384-CyzVXDASKKM+i5BSGrbM0uso6S9bKj5LKZN7KC5zWNQBSw65KeT939h8pcl2rw3X' 'sha384-PHvhw9BYGLyJpal29HHpYrLtVidGFOlpu3+gYoUJbc3g+3IKqQiLA1RZEKuxYLmy' 'sha384-OVI+gfx/pfN5+OWTUMzAN8+QS5JNkHKrf+en3ik0nNskZLhPWRgw6DDHG3fnH8Yb' 'sha384-I5YS33pnpRtXmzFy7F8VRBc0Kg6MRI6hTbEE6nO3jG5WGfcS9v+NhbxUs7QoZnFQ' 'sha384-qeS3tZNT/5XjwNcb3q6yeBOs6Vmy6Rqhox5P/Xc1/DU+f3mZhfkXj8713j3mnDYi' 'sha384-YhGOh50l1I6IWkAJTD7Z6my2N2QCDRHSM9+44U9GMhQgjNR7pOwpHIWhbB2X0TkT' 'sha384-O4BwAH5uPoXvk6xs2m251R9hOlGAnlGkvnmnDslrlaXYpiXmEt0jKVRT8Qcyhr8U' 'sha384-F47R0LgrtF2uVvSr6GwNpk0nNUKUm/hgu0TjabCjqJ1ZHnjr24arV2IYKCWPJ599' 'sha384-oEKZadrZFrnnC71h3VDjmH9FYISMQy2HkvkQUzdTIOHlN0UryeJYK+sQaPYyWDQE' 'sha384-hKBrbScIPwlPy9msYfI7iELY5hpGHafB7r6s80TvADFrIqBkIxxcdLGTNXhEsT5Q' 'sha384-XTYeYgiYzKCX6zvn+/KCV+8ssepNB5nxzunrElhtcLCf+PXEADreqfuX9PEpGkBD' 'sha384-rvlJyu1B7MLg8bIdSgbSa8KTxoZ5t6AC/UFZFcl1Lq6qI5zj6uGK8XfIiMmwc6mS' 'sha384-nYKrYfarV0kjUpzfWgdNJlmdPxHQEII1iVwStaWyz+WPEhqLuamf5V9cW+tG3tWh' 'sha384-E+pO+NcgqFLGGvmYyjFsh16ovE00JJpoOKATiA8ui2EKXA4v49ILzVX2dwsAJYmP' 'sha384-ajdLU4sn86P91IhRm28oFbdEsLxzjCQeYwQ6FcTQzcO+DTxGWD4m12TflkttYKt+' 'sha384-BYRV9bj1pEO7nLLTQfQn7rfw4vMAUyUW87Og1K5nqskH/xBz4dHWIgAGDx3KRDlA' 'sha384-oAP1265A7BAA8ckwkyQFGMy8x49y8gxPUK9+/heogZMgEG7Y9mfQn2VNYEHKUTkC' 'sha384-uZTjdNwLCm+qIsE0fVopA4Uwp9bdD9FXw+pWi9bw4ppHOZPhhJXelm4dh6UjT1NT' 'sha384-qH8LFXRVahvgRIMMARu2RERTHVU5xKAabt2Akv4hG0D54NjyjvIXndrp0ro76lxN' 'sha384-e0wv2+BX/cGVQEQupXS7vi6VkpL0yTenz6iLYnl6HobW84a7SwwShN7f+hePW4AO' 'sha384-evnuniFW4m/TSvfKIN/1V5+4HmSjTh4mqmmQOCBg5aQka9cHLjqqtuYVoDoqn90A' 'sha384-rEnj2safC2kkUb5a6aAQDnc5pqGFgC1vZ0mKXt5t75noc1QP2HXstT2qm0TPU2RP' 'sha384-GOsz/Ogl6lIZLzY9l4v8WPBU5fwcWcZDHX3iNOMTmEficTdwSOanxcLITCf8vibA' 'sha384-IK6fZ75KN7WQT0aEXF/5w69nkPHnef+ZEz/erTDjgIHXT/rze+xt1I0cYFfCu2dh' 'sha384-RWFJZO6xPpOP2SvSd9MVfJN+OiVonVPVAO+9U53O463OYNXnyu4oP9abEyWk9+S1' 'sha384-VepwYIZnd/hlO+TESMmWDgDezamIcdU5J1yxt6BpsNVk0uHuuMFjnPIiJvGTz9c4' 'sha384-eLI5PuS5QRc5FQAkJ8kI45xizIZnkBx83BazVgMBGcQHPWY447q0hP00vWoppgJP' 'sha384-uZRCWKv0wRfgAxc7ShJSIYO6S6Zo9yWQXy3waMp5UaEQPQqAQqq5af/8SbT57lRq' 'sha384-JQzhbAxmtxpru7y0dspQDjWqizUUR7BvydYlUuKVT2cwkcQ8dPayGKdbC1EZc2kL' 'sha384-uyzbt4v3hmGTeT3Su38hW3FnoST0lIg/OiGd4Y37tYdtsUYxB9ls0TL3jKFgmRHh' 'sha384-sSYvaKmBikPUGvigun/pjT/e+VabU0RSemYKRJrb6a64T6VNp2y7RFHGvJbiO4sk' 'sha384-jEzb4d4jhCj/yg3EZpIjC58/KjH+a9nuUOKjAFfCkhohD8A41GzHsibup4lfCgsr' 'sha384-Akdma/dkNUU1cU0ki/MBQPfkmVaIVXiQO9i/1ZnGk8AAa55mHXJxrjj6gKszM4p5' 'sha384-1p4h5PTDPFeHY2kmcBafU/m//GbttB2JpUKwom6MqIDMH7JW8I2fFCpWiPMvnGX/' 'sha384-uPsdpsolLEg6CQaKcm3mBDY0HnqFZ8EFgiWBZB9X7LYXrHOJtAeQiS7hPjJnyg5x' 'sha384-BiO6+yApUXtoS8u8sQNxDFqM5z6RuBvLejrZY8m56nFuz+xYShHbtD3FPD6k5tki' 'sha384-J2y/4KcxcnFB/YtTCAxBerWVV4kFC8ccdL5zDXCnKLHv6YiMa1VLhNmEkZE9fGIM' 'sha384-bng2eORk5BlBerQlOr4dnvCc0COwiDoDqQNCJYEvbcjGov9U/VsV2XTkIH6G9Hdj' 'sha384-3Lz1TwXzyOPCBcDizg3hRA0CN7apkF1jKdg05GuXFq9jXn6IB4MEBltqCxXy8WTM' 'sha384-waokCi/7WclvfGYp2+2sDUfKtdI6bqtSdt6nFQrPUUmCzLm4At1F2RQdx9lDroXD' 'sha384-nn6leunJfJlCfpte1PsN5J3z2btTynUujNd4DabvB9xRc3R4QYaeh+uf6ahgNPbx' 'sha384-yL6QUGTWvnAHza83mKHczB0NlZZeBWMa9gmPVD+g3sKwRASiWBU8DnDwmR2oamDG' 'sha384-KnPasE6HR683Eguk7yPkU+eqf2k+CW5+K6/2dYg008GWY0nVkXlUzN+MfQwarKZJ' 'sha384-dK7cr/35bieYcXmIOWprxpx4802La8TN2EolFCwq6LW32VqM529D6JPQBd++psYd' 'sha384-9Gep58raIppd0hHhxkxypwwK3lLQd3yC3RgZluSQUpI27dNziPX+AIl/2MOshfwO' 'sha384-snKx8qhMSagvc5RrwXDLTiMR2V6I5Td2v6t/WpCDYPoD0W+Sqpwf2Ov4zAzb3wYb' 'sha384-ZlPvsKAwVjluGZnlzmOz9ec1l4ogoJ9jh9HCshzN6m+eUpt2extfzp3+QsQpiSBc' 'sha384-2RJ1OkjBohFGbz6xfwZSQ1CH8fALqQhQW2TwHMc0jkosei+uGnIrxzvAekOlo2Q/' 'sha384-2/n4urOKNU+pId17pkZuzk20+Kt1jslV4KWFWa052K2S9WwSly01s9gRSmnxn6bK' 'sha384-NFQbWlkrX2xQGHUbaxXWPm9hmtR6opE4onFo64syVsgG1WZ14587+rOE0D7Q84Sn' 'sha384-vVORnIGk4nKhLAyC39qSWWAk6LKzWI0b/vWHZFEeRAQspYZucFtdKLPBYDJOMfIN' 'sha384-ToEpEoUQufhK3L6CSciwl+8PKveU8u+rxLiE90u/sjXi28kL+Labueq8B9PPD2DD' 'sha384-KuVxisf9YWyBri5FynlS+4isQk8pctmE/5UWVWZ7MivlNWk42kvVH3OuwSPnkBdW' 'sha384-OLjOt3vZz5PtcyLOKJorgZdKzq/JfgMheRT1IIXOM5o8d27UqEElJ6py8USer923' 'sha384-VPZG4GGDbDP1++H+T2wRwqebCxyVE8ASSu0YwWCj+ZwjXHCE0/kG+2lY/BdokaKx' 'sha384-CbP71HtoD0+Cg3e+YeWdblxFahi9Ts66Bxa8XFiQBUmtR0DBCDGeHetBxVSNWO3g' 'sha384-oI8LgQ6cedjog3kngIZ3LGRgoRmP85o5KlGVZUMeReiaKzPn0Ra92imWdYV2NlJO' 'sha384-tj3FGxpV+/ghWcJvF/5eyVzfzwGJsRkrZ9WevL5KmO1AsQQOjYPFVLcaxE8pxX1E' 'sha384-eg1LGXxKUyjdKMl4MsiW752Vo8maNl/QN0KSny+5LWEYo4IJEzWzNvottqFR4WeS' 'sha384-WE/KWaIyiP7UgBh/WfFzecqjlitZy6KZO9wPy9MrWDR9FjmGY4MzW2UGpVQXn28N' 'sha384-UAahG8cpKeyRAwv+ENEmDQS+DXSelAyM8ihBCRZeAOCOaTkalNRsDlbOquZDa/cU' 'sha384-QS7CnnaBzVM2Ashq3p9aIvyylDmafvt3lmHD1I9vit/GgvpnIaWdtc4Qixve9UOk' 'sha384-8YH3/TdvWAqm4chbXgDkJocTDDopX7mc5vx6BL/zVUA+OiVjo1KLJpc4QUymR/LG' 'sha384-LSEHgH3GvFem3X5RChhXlGKIUYnMEOxkPTi19X+kuRToGUd85LoRuPNx9g2o/A5Q' 'sha384-wCQdmCrDfzU+CcNM1Oj6MHBLPO6SArEbYieVxw8pubfn8bS/owZL8zS3269rLQRs' 'sha384-JRzC4tyrnWA2oj8KF5ZU0vaBYjT4MNNe9dOtapyeu8JVXfDgROcnKvs2UDy2UTHV' 'sha384-zA1b+rtqV/JegPTLPrNWrhc7JP8pWBHJwX7CnU7XtaPDuBd4dvJ7CskhEDqyhFml' 'sha384-rf1rodjJF0CKxvSL/n7uz2YETDsMwCUFBXpPFEZmQLV+FwPAEPHkKx9Dz+5BSEXm' 'sha384-JKDdm50WDjyTz7/lLlRGm300amxzzguzGImvmmynLOgqnOkc8LuN01aMIXYht5Z8' 'sha384-FKDQDkbK8gDOGJimkGObr4FTmBbLC9Wvs/JXygDyA2MTjG91BuHlYCpvCpWiQL/U' 'sha384-U54eaOj0zq3BR8eD/4SYPXjAGHqxAWJsp9J3IuzhF6ca8aAAZRcSKYN1bddbjIi0' 'sha384-GSAkMzGFAhymwvWj1MeqNFv4KM+GkkyYbh9vnzy2fOvwiNfbELGhE1Hh3uBFfB5w' 'sha384-MHGZmgHReHn8SIUNUOsyqpY1WWOdvPnZsy18/UFHG8OWV6aGzUz/WCbp6yKwA2uk' 'sha384-Nc39C1S6a/6seiLPNbDsqXPpY4tQhxTHxVHNkU8ukOTQo87OB4O9ChfnpW54m45O' 'sha384-Y6tq3v4yhaABAmRktx6UsRMOpfaS0moiXLquWSj7LOMNufqdbU4VpzHFXPnPEvAr' 'sha384-VTvHzGe6sbL71/fzJYX7plhGyeT6Y0ACmMuynd7nGNcWJiL7qEhaH7Be+nJenYPR' 'sha384-EV6+xBpnQWsw54sM0TwmKR2YY8M8w7E35x3Eio2uItWDmtFnSDwexNHzT1d2tk0Q' 'sha384-0rBulxdrZ9ZxUtrX1vvpOCF7DXuHuBFG1POrrxBebdGY0Ukt3GdjJr3HO7yjVlim' 'sha384-4zNdVkgprfomcnmiRfRG2LkDdrKnDJbqVgqzqhQFnP6SFGM0yJWvx9QH4Q+zTb8I' 'sha384-KIgx4ExYLyBRmG8ytsmzxhlZfVrzl+jK9Q0rOoEim+BZvwyPNsUMLc/fK13Od8fs' 'sha384-imRdfeiXxjHwxw5MKqSlpl2m33NSAF9dBlUmuFQD7Hcbl3/G8d2WdSJ9Campt4ex' 'sha384-HehJ4zF9Gg+NnpquI6vUic93mzv/U52AXMou/7JG0rsqyavDQ6eQP6QS1iLq35yj' 'sha384-RhuV5FgcXTR+jXTIXW+FUPDxjFc0PxHvwzumZcPdPquKK5zZPWVhbb28WRRMWPfm' 'sha384-68izHCXo3/FwNRZyIfzIzdcUA6rh7qqDpcDFoz9TE6k7gQD3j39/MGpUdvGHeVZT' 'sha384-hYyEJ48jd3yRDLArkSEEzbB3POPxlw1PkVFE9GF5dgSW343NdUyZD/i3OacIBWhY' 'sha384-MpjmrkBo847ev2wSqtfZc4Z2ImT8wPm7wwZBaef9Yoe/UtdfmtGKuzD4KarVsJR0' 'sha384-FijN4zJTUI7VsKLDIHPcQD1zTs0XQBBjSRBsVXdAKTcdU50VZLEtNFxf5gSDnKfd' 'sha384-xzQKoSTKtAk6qRsJKKNfQpyEwv/pETqEbZthe1OPF57H6cT3gOkv9ANED9hiVm7m' 'sha384-KHoQ5w+RcS4Abh5QkF2ojJgw3HMA7VTbOX3ocjDZsmfbE++UY3FBw6aJ/JyX/yFo' 'sha384-blDHtrkgViP25mB2RNd1YeAlXybhhvFpW2ZSgabFCVLTWAmUqkocM5z0IOCeqnH3' 'sha384-qy3519/sim9hBAm3bkDqHo8hOF6erEuYoxPv202fzYB2RwpFuRvlX/2ulLzwS/dw' 'sha384-LUOkPvmAwnzPOCdUyNW5NDINDRdCXVZTpFvNZaNH+gRgYZbRHoejxrgLq996iVq7' 'sha384-hckJOarE1yfykW5ir0BJdq9p6g/KStky4N0/JeUivtcy4eFignxyoqssw0FIy2/f' 'sha384-kf4Hm/9odY9ctxM+LQFcgYu6ritu43cGxZZfDpH3UuvqvYwGX2F2Sqy9K20mwgdh' 'sha384-eYRTtWWQUFWjfumP0X9qh4dn6JMcqX2C4dZksLRrE/5EMWBrmj8Llv2ENbRAXHI+' 'sha384-J25+aSISYRITNKhyDBx1hSZQ5EFfVU3bs8bp+SDJZdbTdX/RUiYqDwQKCvt3QRvL' 'sha384-XfM2+N1n5axfUBe11/u92gdJyeQ6dIZ6SLyXFiyGIoUI9IzhOL3z70pmGnwWN9/k' 'sha384-dttxmbuaDGAtAGbn3UlcVOnJuYvp156KsS4/tw+38iYsxY/ViXxudP8gigyPR2nF' 'sha384-lI4Xg7nLOTIEQ/brFShWnPAibgglWIxLWvfqHR2RJjaF1lx6sXb01sYfwCLztFRo' 'sha384-xN9A2LGs8YCYAH/we44/omr3X+7ycuf46+0PYAiNly135RcZbybWzvqlMIkHE2OD' 'sha384-85kAvOqCyLC4bMp39vsymxVa89IHgTRy+HuhCTYKcdCQ8fidTA7inCwtY9oP4QwC' 'sha384-0pilQY1lb590EGs7Edxjm8wjRlX5jSht6rNUZ/uv4GXJEHFs8XZdYhv8MdUCGw/Y' 'sha384-i+whgoufbmpwYc8tKS9qL7A+xo6NtUJGikfrJu/1mjEUfQt0YtfM/Xl/dgICMPOO' 'sha384-GsDYABhaVe2uUPxOvxuBFCcOnEOF9Xrr2b3u6WQvgCjTv74gyqKJ87E4BTYcLqjd' 'sha384-bqHDjr4QAAz4XjoOVynGLah79KO4vqkY58AQRd7PwQ/KYNglyaKDG+3PH7tVQ9aK' 'sha384-baVZP00DBRc6vgiEACNdaw6+ndh6PFnc8zeSBZcaIb8IHnkcx9kQkv5T+WQ7epg7' 'sha384-CMh2nfjDP8+RGVaS3hVT3BxbL917ng+RkORdUOcPyuVR+pO+mdD8/d0M9mRliKlJ' 'sha384-m988uy45fcjhIyVlOPwTFviD8MkSF+vUYvOe79es7q0EB+bWieJe+7o08q2SuxEW' 'sha384-SZL7gHae2c1Izu2EKPqLPLYV1dRK0D/794TeQz6dveSwjwTdE18NVwTjtogkqgY+' 'sha384-WItmin4P+6UiZdxRfB1/SUYsG3v8+oFfLekKOuYMIrTduaWv5e6poT+717+s92hr' 'sha384-BDNqG2O0EuCRB3eOSEwtXri3iaK/Gn16esTszGAMYwGWOPdcWBs4WxN4chLJx7qA' 'sha384-zYbhAuszZ6vgiHelr1gZJAwDuNSWRVDAA0YCzmBFUgoyiUHtb3L36esxwF1Wl52U' 'sha384-ApKTKxdZy9V3q7/H+zPIuKMbVDBhRpEBO70WnFhAUXK3bifhETrEzTxhuMPmbBCh' 'sha384-CwmchyHiz18fJawTxUOq7PwlhLOyAXQwDkTrjFZH8THQo489t161jyX60LypLLSw' 'sha384-+WtOXIj2YYprBYxQO1ee8K7KkFFPsnH4+bIILiEtai7AmcH/KxxkCVDG87SHlbXw' 'sha384-smB3cHg/tCBpCs5yOtMpt8agyMrf7YrjdUe5TeNBYlwp+ZFK55nCblcqx2YrXGdg' 'sha384-vAsK8O/6k9NwWj8ag6hQR71/9a3guFRPulS9K+2aqnuxc4GQTXLWya6ruGOtR/3w' 'sha384-Irl9Z+7jFZ9BUPjsOteldZIt47qg3EnbWXVjQZFcX/xU/cu1mqRsH3YYif9X24uE' 'sha384-tGb3FMAwARjxNwXfEHge8T5ZJCqOOc+OHqRfB+VbpQXNRPJht3nLIgOcNKcA92EY' 'sha384-1R0L2hx79CNXTGlE3lWZP5cV32O8H2pthDG8dmbll+/yS8vexTzDo5POdReh3RO5' 'sha384-gHLfBh6TXs6luqRfv5GZ/1+3YDnkIlcv/6clEtYDqw9h0iSf1s3iuTjfL5m2u26J' 'sha384-V2wk/RdGziomK8k7kvMW0JaWD7l6C9mQSOa3c1SKxFAzWdbZkDjWZSWCjBWQq0XS' 'sha384-12cDwm+ROyolgYgYUsgkanLlVkZfBNVEXWrYsGUhgN6Y5aG76geTUGYymw7cUBGz' 'sha384-FMKqSufwrqEwC4kU/JQX9kueMc5q2wsgOYXegayfv85h0Ov4WUqaI879Mpnhk5UT' 'sha384-Vb/fBqxyh0NuXNo7REAkW1aYXUFLLQJunIRws4yEwTgwmn5qgO/h1YgaAbxj7yoB' 'sha384-yVT2jsUB72ShGtG1z7byGjvXWkpSyVHELEF2Dehwy/Bjekd7iXOaBB5j3p5mdvl+' 'sha384-1dHBlmmwXTEcBTtdqKDUgtEWlCDskqu3bQDZnYjEyGxJtT0ogTUD919NlCDbs5Dv' 'sha384-WqW+yKSKsQ3R75svUJZnEKSHSHa9VAO8fOyocZsuJPnlqm/nl29E3vA9kPcynHjo' 'sha384-wpuLwtNYoJyGmlMUqpIm5naEoWSxGEK2oBH9eu/+nYpNSTV3wh6ZeSEy5fyFPNqs' 'sha384-qIRBQLnXZN3dGJ2bAp7YtuaL01oUi6JjAoL6cIGRifMFOjRYfxtjaPDdd3hYsC3Y' 'sha384-1SolE3GbCKotlt9yU4tbj44D6Yq5GJ/rxf72K64mza+lHXz5q6sYkGJsrDQwWVZg' 'sha384-BtFycPfCBqJ/TgulQ2YIVbgJ91GmjwYcdSD0PSNbLmGzLGt7GmKMYHg6X+JXUL4K' 'sha384-iu0zLJPTSUTZDnY8vaXVRv+XKMbJHa/iROUDrLOt5WDWmUgH7v2xd/S141hzo1jS' 'sha384-YSmU4wNZ1SWqo/rn8RIxKlafz9Ngl5PT3JEMyWfVPzQrRig3kQ7vKuuqeQZGtvQ1' 'sha384-BpoTkdVv/48fLbkm3FwxjHLt8HWWhy8KpK6a/blpyEoFIWXuBFYRVmbFJAGcMktW' 'sha384-l0w/6td+0K1NcgD9r0kKJtXacIMzGcKGrlO1LetQn74kto1XQQ7sn2tHADk5nYjQ' 'sha384-Ll9EVwPMskZ2b1v+MzDIIiPybY+OvfYzxaeLHqGcYHyu2oLP706kyMmOvkXBZbdo' 'sha384-sNqJi+ERjYRx6/dg0vdiX8penZ+xnFYxy77bDFmsd0OCehyaF4faHD4RNz8IOptC' 'sha384-NiOk7hKa/euBFb6zByqLCkM8rHeIQ6dbABdmoLSpX6cPeI+eiaBBvoohm+5V2p4G' 'sha384-NUyxJQgywvRDa8pqHsSoJY4yBBmO7CwoLloKljh2hsYfa9/sADPV13eucGjayfnG' 'sha384-4CYjRlnyW6p7LsDjoFUUYJBR7nKCp1CHzYk92sbcjjVJbUnyO3qIU0PFUxGr4hgm' 'sha384-AtREkT2M02L0b9NRUWxJO8mppWBdoLFkfnhVmxowLFhZ93vuUHsVQ1CkpOJUUp8P' 'sha384-vN9SD1FYWg3fA7k+DAWUBFOdSz5jelhD6Fbp38AQY+8qSo1K5k7RnJz/4oeU13mi' 'sha384-dvUv2G/tuVeoY/6YRsZBPZY/LamSOT+eZP5ycIKZSskV6EmkuCB3ixrSPsYyda2C' 'sha384-yF35ewiCVGhUANcmP9wBvVz01dryN6RRnJB/23kJySqDzCZyeyK6iUBBmUpOysSf' 'sha384-zFULgkDBVISKlH+Ow+v6hBPx4QW0xrg6wf6qZRFUR+FZ0MJC5PoS2WfY0Jc9BeFF' 'sha384-tnszTGunj2/iVC7ufHKdSli1LfBphSqSFBYyRbYrQPbo1oocY6mCc/gb/fkHQPnZ' 'sha384-myUiTlsZ+LqgxeFw2pSHR7j8ZIP/2pSjxzgiqkohSSw48YhlWl62OUQ85UKqSTn+' 'sha384-Zzwo2ao/5ADz5xCbnpFiZTQhpx+1ug10RkDxN+gWuDvNVZ17KkCroZw3vYfufhFl' 'sha384-LI26nUoZ1nh2k9SHBh9v7aekC7IYODI07zcAFb6uHHVOC5la8Vwl7lDx81SAYTyt' 'sha384-2MSd1hggvN6tjOwmuOMl8i7nC/82QZztjQMq0S3VEXib0bS2NTBTG8nvpEZTHqiS' 'sha384-ggsngjKV2M/REOKzggccHMiQXumQSLVxVuGJRr+SlGHXmZJqHWKmt7KzHdcXt2EG' 'sha384-buX1xipzWIJUmCP7tgW76d9eceT1Fvlc/BkvpZFAPAOB+iR0PaN+Y1GjSpT7p8o/' 'sha384-ZWQ37U+oRXbINFHHtIbe9G0k9U22pzKOWJq/lYHIOWw/Rye6f0LuAH8zrXIXp57d' 'sha384-MNieQvo1yySB6X5/NLZOwgVXjkhIbURSEGHjwKOX6ZqcBeoQkNE2ZiFOu5N6Qrnl' 'sha384-CF5HZkKO2R2/AMfjyBVCHAjO4Xq826WqHDQIBQNzwhu3hnV8R1F35ClbM0eDqIpV' 'sha384-CJ0ddme54q5M5iLOs4xv/6f4k7lVysXjHbPu8AK2X+ZAi4fhAoGYzNJpDzUANW3U' 'sha384-A2W1vZITMbwnAYzB6+pbnWjyZXuO0ViAd0Wlnc5NvcF4kV0eB5XN9K+2HWTY3vsi' 'sha384-OK0RiWuEuTijYNatX72LjCCXlHL44K8tiBSoKJPtf1xOTuCesw8jkmTfyTp+qqZF' 'sha384-QwdxEXSCWTdinnBW3KnYT/69PQ6pLQGFXhnFCAdcpofZjtKc7pEy3pUgdkhHa922' 'sha384-DOLVVxqj31yYzFgwlraw3ZnTWbq7ArDpLFuXV5UBhlhMujfBAkqPNQo3QQpVziCG' 'sha384-ncRTfkw+2/FYZMDstvzgheBmqPF6SgWrZhx5YYbR+BFC5JgUIep0movifvoDiokQ' 'sha384-FQGYgJLqwFY2kY8/6dLZAHeLeeFuXyPdKE8uAPrpvJDvyT1EFWRLj0RR8eygXbI8' 'sha384-nfI6OqCpP0x53yeoPnPzgWaPREekkLFaidTXvQlw1Wb+ZYB7iWMsB94RD0quPCfK' 'sha384-V2lt4xWFYVT2CzIlcEp59ZADEBJsKqhwWghRi4hucHahOYPh+S8aD77M4jlBwj+i' 'sha384-5mNQSWw5SFEhqdvA3OC6R/IpoDuajvmbXqmduURy4r2/BTgAve6NejCldg9sRbZW' 'sha384-T/cwZNEZdmNrUNT/8ZPE73c6HgjdZ1UE0RVYaPEMGQ/phMOkchRJ5Y3Nkk6NOMy4' 'sha384-dmyA+OdKL/bnhlIAXRIYyAKzmTSb7YbFDqq+QFoRlW3Oo8pJpS2QEvUbV/mpwj6A' 'sha384-5XufpUdo76YOak0HmXfUHnlMFqM3wMQl+fQsXJrN7cFYY3AIh3pdIAL70L8gntu0' 'sha384-vaii7Bp02F0hrCwWsrvkSyqCyRxeKn4RCbfvkFC0rSE3KKGoEEff8h5OSutwChM3' 'sha384-xz3acOHxd8OD7BK/bWpbNh7OUq1kKOy2jKSGxbc8iYcJfbIP1o+v1bz6p6zUCSbI' 'sha384-wcZUC/Ny15F2HWYsOeU80qswgmyr3zBN0CkVYhUmpCDMpKuniMwUPoPTP7AYNV3J' 'sha384-OJgdaj8R+kZTA2fTjDuDrhC3rUOnTabaEZheCPYiFlCWGH2Jr++GI62ZVwALt7sh' 'sha384-bmz/KFa2j7yosQSakajIgMv3l9ULDuOH8cMRrckqgrrLp7oAK3c89YWl782qEBOH' 'sha384-N/BkyEdKG+hVum5gh1vshWDbDgrsj3slxxLOsY0F/BlPwePfBRsOaa/CWIWTho+0' 'sha384-3pUGQulG9NiohPkDvOrjXG3huWH5fYod+zRdw9Mmac54IZr2xBS0BxdIPSIIEVZt' 'sha384-Pdzfg16vklweATYFg45+3IQyd7WwV2vUBLcCIKdxvdF3hBI/mW5meGZnXq8E04BK' 'sha384-1pilXTCuMGGuKYb/mWuUo1JQUt2XqTP+l2hBDxuksbE9cuP7FwK8HLTt/2w9TEgU' 'sha384-GlPH2vX0a6AuB6cFqT7ZtaJjR//Pj0L7sS+6i7hFGE366MFH0F5OXjDwl/qG8IGk' 'sha384-haMm1iQJQfAUfs9GYz04z+ij5tcksOQxxv3wtbgAs6QeJw9dbqxiNKRmFzOQrQ/B' 'sha384-RBpYHOSre/NdX7NbQ46j8PKxJx0vdpnj70wiVBA/CQvjocpfkAUxnkE2C55BoBJZ' 'sha384-a1H7q3DSo71GvaMCJSTR1gOo6TT4+Y3E7prQ5frzk+6L5v5gCXXOTvaCLmhTWFRR' 'sha384-+L3d+ETX/9ZeyI+tiMaThkoLzYR3hkvsJ0mNjyQnzSaXIgZavixrX+Gu8fOuhgaz' 'sha384-A0N2+fNOtY8J/bCeJbzwZoQqdTFTMemS+Xd6jckbL0vMPzhfRMmPGJv+qSB7mKI5' 'sha384-6CrKkvlh/K8EVTwjnmXveBcvPrZxScsM0NFiGBzFv7cxvNFUbwshqPom322iv2LP' 'sha384-CsIf/2YoZuasU5QpKj8KLCc6x5afDs6HHA++TGheDYGv3kuFNNH53VDYc0DPLtJi' 'sha384-QT+bZt+YMwNS2UpB5LTNfRs/18nPiYKc30qQZeI5Kx/tqK5sUaNxsWjssCskoEWK' 'sha384-H96nzSLJ8p5qlVw7dD/Sphu6mgZRxawPuZYBoX5VW7EIG38KfH0Esy0w46bERMX1' 'sha384-Bjge8HcBrEw4v/g600VJZ3sfjXVX6KNVwpkSig7EVZxn7PQWXi/C2OG5IfPqs629' 'sha384-YsvXFURf1ZcyBlB+ezNfICpBdugb5gK2ds5YEV+glp3LShiUp/1whr0/3l3zFOIr' 'sha384-dj7en/Qz9hj6nnbmdO1KML6BbX621XvjnThuDxWlPGgDW0nOB+OjCXqVlJXxw90/' 'sha384-LHjkVPA5Zw63MkrHKZg2zeCeOudsFnk7BePrEDYv2q2XXWQ5ejd1CK80E+HQiVmY' 'sha384-LKwDN/J0EdcrtG+2kgowuNxJWrngUk2g/8Cp20ECvO+JaYmXV3F3kP1nEQCQZzOv' 'sha384-nW4lAq4zLT9NipBwv2pmOmlD3+gY7jw//87SXJqdmcueCwXxdoxjQdBBBzPXaQEj' 'sha384-ftovvoNXVpOuRiNpgFTxT97CggjYE/AMcqNjgsQT1OK9P9jMdeT0hcvGWgzQOJOX' 'sha384-RMGgMI2POojHAmJdN5tBKMOjTF/xCf6vz59DhjjLSS3l9ls08R1g/4sdUUJ8aY4J' 'sha384-M5xMHplr55/bWZGepRG2U9HNQ4AbtV2zFV6duic8uhRN3E1mWhh46K2YyFL9/OTo' 'sha384-R9rJO3yD3kC/Hpcmuqxc332+GI1sc27ctEMK8FUbzNzEycZvWMfkdOQimQ1VCROl' 'sha384-K2bJgbX0DWNw54GSGmRZM+QTZZUUgLFnnHFpctY3jDJFzPVHZAymT0BXd7avAsYD' 'sha384-qp60EnwlfmQPfkT6jCSXGHbpAky2sEcE4Rmn2inES/ttdwDHE8CKSjUIVEV+9kYO' 'sha384-tvIAvpXPok1GEWuKMAvyEj0d1Z4y2bAqj1vriFmiw36r236VHaZcLn3dAExrcwAX' 'sha384-NwWf4q7yhtPyyyyh1WEBjp4jw2l5k3MgA0EBtLyTlwjK5LWnTPNVwlRQdwAwhKIl' 'sha384-Q5dIVg4swBQxIcSOUyYvZXVyEda2x1Nd66fd6VmWsMlFENTfhcMwmLnUOzaNM7pA' 'sha384-gfhyb/cIGFoLYk6/vC7UfaI6eCyt1bXGD9sanvhQVjRRcpRb1T9pdWmARnu96r6+' 'sha384-M/VQ3JHH+ZE2V+qdffYJMpkxqlwsFpP6Lh8kg/cb/fufc3VmAOPG5eR1eBLbSOyw' 'sha384-reM4XZ389jmFwWccvaQaiReHQ0CbN4gCefkKJ6iZaAIluBpHG3z4fgBZiyDF5JK2' 'sha384-fNKAAaI8CtUUBjgQ3AHlFzTxgyGZ4QYPxnFaUB2mEy/n4ZBjAO86aHvoKFYcLrP2' 'sha384-gAi6bIdHNu2Z6xQVM1N1prf/BCQgcv5eECaN83Cp8Ua7zYKynxj7uYiGLZaoULBR' 'sha384-uBlNWRISY0AkihFoJMFfo0HVeQdtV4qDdDmNiApFL6B9lKKuft+iINAQtG1LNiL7' 'sha384-aIXZXxlJF3xsUw6t8km9uD04VsLDg7MZ4fRYZvYeny4qO83WEzjJw9dpJTnj+PO2' 'sha384-QIacFwUSniC7xe2b37iaOiOvsP3M7qdk8TYlfhwTfqQfeyShajI28Vm22OXP/sKT' 'sha384-aWn0gdXxaacjPth/1wjf2wetCzS4lBrv9eGVo/tbYriul9y0ucXyy/vKYDXV91cH' 'sha384-/PuUSu9yujYyb4daCkVdqtYB9bBAsfItb47H1W86S6xQ0dAea5rcumG9bwz1Ct7p' 'sha384-a2reHYyO2g5+QBg9o203NviTlRDA9fKEDM1fz0uKGSCE73tHbVvC4jTBpwUzQpzt' 'sha384-/CyX3oC+NlY762P1dSaah2DPshnFnPgdYeuVpjVdCHqCBe+yAxn+bXyeYrKG5P3H' 'sha384-pWD9SRilfhHDR09uRSV0HoRA1nXFdo6Ej624BMhNlNBXDnkanBsCbC2ISmnu6Fvw' 'sha384-wc8TPrAhNzC/PzowvESvGb07xrTECgmF5Eh2TzizP6nx9S5nou5kbhLDfN2XsVGY' 'sha384-9SRLSVsNHHf3l0Oij9jLwT86x8sziciKXG2IFXY8J/+2GlmjMbuiG7lOJ14JpgvA' 'sha384-4hiI1Ftc4Nq4xZHQQ8GTcICh/4rz6r9oCz6etxBzT9qZTv2u2JGUSiPP32y2DnIJ' 'sha384-7qabhDHwfyRLI3b3N+tFERT7TrBkuhFMb6el8MCTv7Q0fcg0vkcD3d5EQ+s71lpe' 'sha384-9YACedEDU0xF4O4+Dn57C6qGkFbXElz2ZNjf8aRtSAzSNU0eIdj5cvQa7mM9xEnh' 'sha384-HZzTxCk7wJtL6QmF3+Wi9ovnJyEw/OU8k1qzMB3lbrcKiX7LnkXp3N9sFZhwZ7MY' 'sha384-aei8jwH6U5K/O2qlkqgj+TsygkL7+T5fuK2YhcClpDft4vbI69bCzToyjeNmP5UF' 'sha384-TutVG7+G0fV3RbyOUVJppvZrqAg5GEXU5mDMek9Mj6TwzZtphmyJQfuDpyBEbzZa' 'sha384-XiNOEbEPLkJBhHOK2v1c0+TNhXBDUypOZsm5JfiMD9W4OPVtyjYqJgMDCF1YjPb3' 'sha384-bJbLEm/WXZ+++12AWEcoMwh24AHzev7Uw1aN4w1dwvCdX8VBNQqegbmRHHjndxmc' 'sha384-DqJP7imhmujPP0qFg/3wq1DvxiRmPd/ERVOZe7qdqW6XE85Cf02UB2LvH32gTpnJ' 'sha384-QAAFmYXnyJ9NSqZBmZFZyPq242mS9MQ1Sq3KWJHzlSW1bOIqFsg8tO9qxco4hhv2' 'sha384-aVT8mCcCYnMstvxCb4Z4O1+VapZZ7yS1+ACu/LdhKaesmW8CvHl2uq+diLRViGtR' 'sha384-xV7fN59eoFptWEsnOItqDZlMd2Bqptm98wBraGuG9EJC3lIOZcKpoYfT4KvRL2OA' 'sha384-luRoc2alVMuQlsXTL4YjesKa5rSca/7gIeum3UN6ppXHoOltZuRRL2Y6bVq5FXR4' 'sha384-jmrGbomo0yVPRhuqodyTu9Y+m1904nuWjU2rchaDifNvc8A6+NdukVcpy9MhzSpn' 'sha384-8JqcVRGY833UPv/LxhPeQFqJe7RQfJo2vp/fOU54SEiv/mIGwpyj76SlHHjYfGS6' 'sha384-2QNQd0X6QQc6nqnvv+N9x47Sn3GhKLMF/YJEHTPX9kR9KDZ3bIkk6O/367e2o5NG' 'sha384-GhQsuBKxPC90CcW/1PZVAiQra70HY54LHrkL7RI5Nhtss6D0bzlzPtDMCjq5zp05' 'sha384-fVknGC4OPuPh3N1UBnw3bU5uoWUKKxDi+DuYfDahBEP3fVCQIxwk9MoZ7QDhfOF4' 'sha384-tIyS/UdKK+3YkhzAx2K/V/kiRijEIAhbEAWr3bZ644+L3U5ofWp5JDxG+vWfJGEB' 'sha384-8p7G2h5WVnzzeC9i1iOwX+afLvon4t7vXSuCmWclfNV3SGivto65DKYtGXEUJ8Om' 'sha384-uXbSOOhMlAyxdAdZYF8zUsQ4A93yxWJocVCs0xuw7mhFfR74yaufxdoVwYbG1k31' 'sha384-aSNvCNIg8OK/rfvv1LP6vuZlAngemdxfoVx9YVLGqvfVq6Abpuilyo9aFwrgIaem' 'sha384-3EE52qXSA+j5FGqaRjFVdmGsKhnOfJ9ueFKG4zB6elh6jemzUbySmuGkNF1pNARG' 'sha384-89KjUScsyilq+b5X/wZdMuZjK47pUJUXfiAneXhUe389KLdxFHc7Sg7Sp7W0WHIq' 'sha384-LHbup3Ll9vQQ3f1kIWsbgETiaI+KLXPYnhlwVTumVAZroDzW0XAZG9tIoQT4dAcV' 'sha384-AW0XZwCRORqsPb7VuEwtUyv8SsBnek2ZkUvEI1Rvd2xthr50IJS/sdr0zRGQNFZj' 'sha384-Y2hFGmR2gLfVQ9DnPWXrRVNWXfpOWKAcu5rtMF89neAzcPeHYsXzCLr0c9YysJwp' 'sha384-9gQxNVGNNC4DC6UOk2yujoG8nHYzZgt4gIExXvtXEGf757Ac6N3uun3BelID2Qfh' 'sha384-erV0W5GWJrVqF5QzbAFa5E6oqxihLh71Wtps9OyBS34FTalUrsoFUF82v4Pc1Hg9' 'sha384-/AXwzT2jbSFk+s+KDw4PtVVVoxUWtk1MmEB5M3oe9q7EW4nHV7NlxJ3Jn+12ABiO' 'sha384-UOhTBWPqv9WAypj0Ttnlt03AuGM5Nt1S0NYDa9yvpjxM7shGNarNawk13vg+gc21' 'sha384-i/utMY43LnELiOIU7MC6qAOIqjRSX29dd86DiQfNwhi/r43TE+Z11G80hWvaFdzn' 'sha384-sfRCqyFeqYBxI26kWbsuwWMlBHJ8/MOmJNa8X/Yq3wGXeIX6M1Dg5OHWxVClF1++' 'sha384-52sYBE0owxExeeavpXkhmbY30hoZaGs69/j/OWhZPH8C+76atVpHDxLWmEjTMT+D' 'sha384-p5jINPDcDfdkPT7cfWuSMstYQQ2adpMeEhmI1qZTHNOCUtjg9w8YiMOT0lc1RG+P' 'sha384-VWx7Pbvds8fFP1GQT9r22ibc9w6AoDsc+oIK1iVGB9clByLhxKT3ozg2Yxojj8Ga' 'sha384-dE7L8mFCK+gW/NRvtRh8265JIjFilzaG9vdb9ejjmuFDFhs6GK5lfMNGVMAOXPuw' 'sha384-YJ0Z3GPtkR/cmKQGVK6yNPNmer2SS4tuRJ21HWFOwDCE8BRJ66QPBNHC4mMaLUOQ' 'sha384-1Mhgkz8ySzKeD3DiCCcc0jQWYKoOyEXCML5u/YpWbmxcixU1+nSuGohSzcxrwH7Q' 'sha384-LbZ6HJt/oGGq1Zr5lKqpe9GDGpfs7YgeRt8sxwbV1yAZcW1MtmZCWBIGQMuXU921' 'sha384-Ufz8XiXWk4h1sgYnQI1Cp5Ms7IHtq6TAIZznlDBCJsIxsUhW3oqM78bXBQ7DsIo8' 'sha384-5v+R+QDT0tEguF+TpGwoEwxICudTjkqC94B0uXX6mKMMlE5q6TdlnrGigZEdZn5k' 'sha384-mHWQTMsUN25WFK/Ir7Koh1a7Ah6zJveCluEWh6ZbLTE4JcP39ELSgfIRpf19a5bS' 'sha384-Hbe5TCw99IbZp15UyykHAmJTWatxpMwjp1zD4M7JgGx6om6REnaYTPHhz0Da1KPr' 'sha384-Q2J0v1B+F6HN1lN+B5whlgZcmYfjAEyUnOI7sJOA0SIgEAh2SutWjlHLhE0BAlb0' 'sha384-AhHvJyK4Mo2Lr6Vl38Q1pbyr4hKajrRs6FwkNRLzIgvhXlBBN6nfThdl5MyQoct9' 'sha384-lKoZch0NzfMx+VXp+WVMdCcvA9Wf9JRM/vt5SSWajh92qqPBTvVuuAcoFY0UxD4Z' 'sha384-mcK3UMVp0GUn5WkaTG0rgxbHY3UDoU6C8/r80o3FlUQXGMRs2w7QhIYdeigglv32' 'sha384-dwib240Wl9GZJv12nHHBWl4pWIb/hc4yrAa5HJ67msqG9iaMuvkARhg0Got7VT8M' 'sha384-LVnd0E0HlzOxfg6Q0t9ithkcGnJrhSD80swKbLlqWJfiViHdfRvrA/JngUC9Vuqg' 'sha384-Wkhg1tNdk1rCHUoJ0IotbHgQ8p34Ft77j2oX5JT1x5V7oU4PHPUx2TzyxbmH/CpV' 'sha384-q6eGrDugfMtqdd4FMQ3QoA8OXQ2lrcxe+F2nsCsxYUFlA3mYyGU4nginf6+1hFfG' 'sha384-qfqOnAtTKufbF6DHYCIU/HO++wN+TOasEgxmj9G1cMet8DyQ8Z6441S8KLgx7Ogb' 'sha384-WVmbv7sZ0WnO6IZ/VkhGlYZKtE7eUlzZn1ERrrVofA2uKYcSZg/aact0M8yNClpp' 'sha384-MduOinZz/O+pASraL9SAC57SOOfHoqzFmMyxHOyp9/HS9pMFY0wh49bjrlafLz4h' 'sha384-BdXpfVfUER3BV0ZkbEWcnNonrV+2od/M17yZDXLWccp5oamvNyFGCTAkmWCwTvhO' 'sha384-tXKwYgjRJ1dk8n4a9A2G/285AtBI2GXwi4a959xk2Fl9hOZYHh7k8PmLAwA9oTI4' 'sha384-xZfsEdLvTo0mP31ClC2LDjsW83FPCgi2MVn7TjarV9a/J/DdT+A32uIkchBCrDRf' 'sha384-C4EClKu0ywFMFEvayIV8JO1hjJu7jXRJYZtOTC3ZLLhZITYykeasGJu44zijzZL4' 'sha384-16wQeREjWUYdV8Y/JP6XAxEGNV70iLf1C4MrPxPEkIn0CY1QSHSHvqffwcmGX9kG' 'sha384-FEHF88Bdd67Ucs8w+sq3c+riaYC0Cfs1VhUACC0+XwokpV8/fnLjJ+9Kft3QihVy' 'sha384-uGEsvx8th0rj7t6JIP/Jh9gks7GETUsC87NUFORRpC3vJky5iZCUO5u2AUv7mjIa' 'sha384-Ddq21m3o82KiOj79HVgsauYoWMErga5JF/5mYGp0l0hHN6ObK953Hz4iutpHGN1m' 'sha384-IauThOQwITVXI9M5xEjIGv846CjcZKHBwOWSfVHKg51QXnjwRaeenc6sj+zGN8Bm' 'sha384-iP833FMI3Gbb8PIBNOY8aTsWI8/4EAzQk1sj2xnNWsZqhy+x0UjkT5HtEdVmzh4E' 'sha384-SFD/2kuY2oP7fuXM8+eoqoh4eedkTR8v417x1Tfz3GwYuHlgzmIKdrINqlFbD/67' 'self' blob: d1a3f4spazzrp4.cloudfront.net d1w2poirtb3as9.cloudfront.net d3i4yxtzktqr9n.cloudfront.net d1nyezh1ys8wfo.cloudfront.net d3i4yxtzktqr9n.cloudfront.net *.altrulabs.com *.doubleclick.net *.facebook.com *.facebook.net *.google-analytics.com *.google.com *.hotjar.com *.hotjar.io *.hotjar.net *.snapchat.com *.qualtrics.com *.youtube.com analytics.pangle-ads.com analytics.tiktok.com api.company-target.com app.acuityscheduling.com atag.adgile.media *.bing.com maps.googleapis.com px.ads.linkedin.com s.company-target.com sc-static.net/scevent.min.js snap.licdn.com static.ads-twitter.com tag-logger.demandbase.com tag.demandbase.com/e353a7a2a87d1338.min.js tags.tiqcdn.com *.mutinycdn.com https://www.googleadservices.com/pagead/ tb-static.uber.com/prod/uber-static/uber-sites/all-live-pages.json tracking.intentsify.io translate.googleapis.com uber.formstack.com uber.zappy-ride.com usage-us.talentplatform.com google-analytics.com google.fr google.ca https://www.googletagmanager.com *.yimg.jp *.yjtag.jp jometer.com *.amazon-adsystem.com *.uber.com *.yahoo.co.jp *.clarity.ms *.taboola.com block.opendns.com t.co *.uber-assets.com *.uberinternal.com *.twitter.com *.jometer.com *.ibb.co id.rlcdn.com jotrack.s3.amazonaws.com cur.cursors-4u.net *.gstatic.com google.co.in/pagead s.yimg.com/wi/ytc.js sp.analytics.yahoo.com redditstatic.com/ads/pixel.js alb.reddit.com/rp.gif s3.amazonaws.com/jotrack https://www.redditstatic.com https://pixel-config.reddit.com https://conversions-config.reddit.com https://api.c99.ai/api/v1/fire/snippet https://dx.mountain.com/spx https://gs.mountain.com/gs https://px.mountain.com/st 44.238.122.172 100.20.58.101 35.85.84.151 44.228.85.26 34.215.155.61 35.160.46.251 52.71.121.170 18.210.229.244 44.212.189.233 3.212.39.155 52.22.50.55 54.156.2.105 live.rezync.com/sync live.rezync.com/pixel idsync.rlcdn.com/ p.rfihub.com/ js.driftt.com https://munchkin.marketo.net/munchkin.js https://munchkin.marketo.net/163/munchkin.js https://js.adsrvr.org/up_loader.1.1.0.js https://tag.demandbase.com/8fd99f526b0979ce.min.js https://insight.adsrvr.org/ https://js.adsrvr.org/universal_pixel.1.1.3.js https://match.adsrvr.org *.mktoresp.com wss://*.hotjar.com ads-engagement.presage.io https://scripts.inmarkethub.com/conversion-tracking/ 'self' 'unsafe-eval' 'wasm-unsafe-eval' https://*.googleapis.com https://*.gstatic.com https://*.ggpht.com https://*.googleusercontent.com jscdn.appier.net tags.srv.stackadapt.com qvdt3feo.com https://bzrcdn.openai.com/sdk/oaiq.min.js https://go.affec.tv/j/69f4d03351c6f99b62d06e9b https://accounts.google.com 'self' https://www.google-analytics.com https://ssl.google-analytics.com maps.googleapis.com maps.google.com https://*.googletagmanager.com,style-src 'self' 'unsafe-inline' https://d1a3f4spazzrp4.cloudfront.net https://d3i4yxtzktqr9n.cloudfront.net https://tb-static.uber.com https://tbs-static.uber.com https://tags.srv.stackadapt.com/sa.css https://fonts.googleapis.com/ https://api.tiles.mapbox.com https://fonts.googleapis.com https://accounts.google.com,font-src 'self' data: https: http:,img-src 'self' https: http: data: blob: *.mutinycdn.com alb.reddit.com pixel.rubiconproject.com anylist.c.appier.net t0.c.appier.net gocm.c.appier.net a.c.appier.net s.c.appier.net c.c.appier.net https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com https://*.g.doubleclick.net https://*.google.com *.google.com *.google.ad *.google.ae *.google.com.af *.google.com.ag *.google.com.ai *.google.al *.google.am *.google.co.ao *.google.com.ar *.google.as *.google.at *.google.com.au *.google.az *.google.ba *.google.com.bd *.google.be *.google.bf *.google.bg *.google.com.bh *.google.bi *.google.bj *.google.com.bn *.google.com.bo *.google.com.br *.google.bs *.google.bt *.google.co.bw *.google.by *.google.com.bz *.google.ca *.google.cd *.google.cf *.google.cg *.google.ch *.google.ci *.google.co.ck *.google.cl *.google.cm *.google.cn *.google.com.co *.google.co.cr *.google.com.cu *.google.cv *.google.com.cy *.google.cz *.google.de *.google.dj *.google.dk *.google.dm *.google.com.do *.google.dz *.google.com.ec *.google.ee *.google.com.eg *.google.es *.google.com.et *.google.fi *.google.com.fj *.google.fm *.google.fr *.google.ga *.google.ge *.google.gg *.google.com.gh *.google.com.gi *.google.gl *.google.gm *.google.gr *.google.com.gt *.google.gy *.google.com.hk *.google.hn *.google.hr *.google.ht *.google.hu *.google.co.id *.google.ie *.google.co.il *.google.im *.google.co.in *.google.iq *.google.is *.google.it *.google.je *.google.com.jm *.google.jo *.google.co.jp *.google.co.ke *.google.com.kh *.google.ki *.google.kg *.google.co.kr *.google.com.kw *.google.kz *.google.la *.google.com.lb *.google.li *.google.lk *.google.co.ls *.google.lt *.google.lu *.google.lv *.google.com.ly *.google.co.ma *.google.md *.google.me *.google.mg *.google.mk *.google.ml *.google.com.mm *.google.mn *.google.ms *.google.com.mt *.google.mu *.google.mv *.google.mw *.google.com.mx *.google.com.my *.google.co.mz *.google.com.na *.google.com.ng *.google.com.ni *.google.ne *.google.nl *.google.no *.google.com.np *.google.nr *.google.nu *.google.co.nz *.google.com.om *.google.com.pa *.google.com.pe *.google.com.pg *.google.com.ph *.google.com.pk *.google.pl *.google.pn *.google.com.pr *.google.ps *.google.pt *.google.com.py *.google.com.qa *.google.ro *.google.ru *.google.rw *.google.com.sa *.google.com.sb *.google.sc *.google.se *.google.com.sg *.google.sh *.google.si *.google.sk *.google.com.sl *.google.sn *.google.so *.google.sm *.google.sr *.google.st *.google.com.sv *.google.td *.google.tg *.google.co.th *.google.com.tj *.google.tl *.google.tm *.google.tn *.google.to *.google.com.tr *.google.tt *.google.com.tw *.google.co.tz *.google.com.ua *.google.co.ug *.google.co.uk *.google.com.uy *.google.co.uz *.google.com.vc *.google.co.ve *.google.vg *.google.co.vi *.google.com.vn *.google.vu *.google.ws *.google.rs *.google.co.za *.google.co.zm *.google.co.zw *.google.cat"><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-SFD/2kuY2oP7fuXM8+eoqoh4eedkTR8v417x1Tfz3GwYuHlgzmIKdrINqlFbD/67">!function(){var e,t,n,i,r={passive:!0,capture:!0},a=new Date,o=function(){i=[],t=-1,e=null,f(addEventListener)},c=function(i,r){e||(e=r,t=i,n=new Date,f(removeEventListener),u())},u=function(){if(t>=0&&t<n-a){var r={entryType:"first-input",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+t};i.forEach((function(e){e(r)})),i=[]}},s=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){c(e,t),a()},i=function(){a()},a=function(){removeEventListener("pointerup",n,r),removeEventListener("pointercancel",i,r)};addEventListener("pointerup",n,r),addEventListener("pointercancel",i,r)}(t,e):c(t,e)}},f=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,s,r)}))},p="hidden"===document.visibilityState?0:1/0;addEventListener("visibilitychange",(function e(t){"hidden"===document.visibilityState&&(p=t.timeStamp,removeEventListener("visibilitychange",e,!0))}),!0);o(),self.webVitals={firstInputPolyfill:function(e){i.push(e),u()},resetFirstInputPolyfill:o,get firstHiddenTime(){return p}}}();</script><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-Wkhg1tNdk1rCHUoJ0IotbHgQ8p34Ft77j2oX5JT1x5V7oU4PHPUx2TzyxbmH/CpV">(function () {
try {
for (var i = 0; i < document.scripts.length; i++) {
var script = document.scripts[i];
var prevOnError = script.onerror;
script.onerror = function (event) {
var errorMessage = 'Error loading script ' + this.src;
console.debug(errorMessage);
window.onerror(
errorMessage,
'load-error-handler: ' + window.location.href,
0,
0,
new Error(errorMessage)
);
if (prevOnError) {
prevOnError(event);
}
};
}
} catch (e) {
// we do not want this script to cause problems
console.debug('load-error-handler', {
e,
});
}
})()</script><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-LVnd0E0HlzOxfg6Q0t9ithkcGnJrhSD80swKbLlqWJfiViHdfRvrA/JngUC9Vuqg">
const messageCounts = {};
const httpRegex = /^https?:///;
onerror = function (m, s, l, c, e) {
if (s && !httpRegex.test(s)) return;
var getError = function(e){var t=e;return"object"==typeof e&&(e instanceof Array||(t={},Object.getOwnPropertyNames(e).forEach((function(r){t[r]=e[r]})))),t};
var _e = e || {};
messageCounts[m] = (messageCounts[m] || 0) + 1;
if (_e.__handled || messageCounts[m] > 3) return;
var x = new XMLHttpRequest();
x.open('POST', '/_errors');
x.setRequestHeader('Content-Type', 'application/json');
x.send(
JSON.stringify({
ssr_build_hash: '6b3a63cf4db5045ba9232b88302b83c9f15c602b',
message: m,
source: s,
line: l,
col: c,
error: getError(_e),
})
);
_e.__handled = true;
};
</script><style id="fusion-plugin-botdefense-hide-grecaptcha-badge" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761">.grecaptcha-badge { visibility: hidden !important; }</style><meta name="botdefense-enabled" content="false" /><script async nonce='8cb736c6-924e-49f7-8a41-47a6b3562761' src='https://tags.tiqcdn.com/utag/uber/main/prod/utag.js'></script> <meta name="msvalidate.01" content="813904D1791F14A7C08B0F95D62B936C" />
<meta
name="google-site-verification"
content="rchXWPkvl_50DRQRhfcJYNUFN09oRKmZ2fB0E16cmy0"
/>
<meta
name="google-site-verification"
content="Bjn4rtR4RnyNEyL8jxpWMgHWYsN609d3ym5JC3UnPZw"
/>
<meta
name="google-site-verification"
content="ZNd-KiQy8TBAswVsPxVO_P2hH94PzfJH7swpl_Ubyrk"
/>
<meta name="referrer" content="strict-origin-when-cross-origin" /> <meta property="fb:app_id" content="277064115737714" /> <meta name="twitter:site" content="@Uber" /> <meta name="twitter:card" content="app" /> <meta name="twitter:app:id:iphone" content="368677368" /> <meta name="twitter:app:id:ipad" content="368677368" /> <meta name="twitter:app:id:googleplay" content="com.ubercab" /> <meta property="og:type" content="website" /> <script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-q6eGrDugfMtqdd4FMQ3QoA8OXQ2lrcxe+F2nsCsxYUFlA3mYyGU4nginf6+1hFfG">(function (){class PreAnalytics{static queue=[];static emitter=null;static add(e){e&&(PreAnalytics.emitter?e.name&&PreAnalytics.emitter(e.name,e.payload||{}):PreAnalytics.queue.push(e))}static flush(e){PreAnalytics.emitter=e;const t=PreAnalytics.queue;PreAnalytics.queue=[],t.forEach((t=>{t?.name&&e(t.name,t?.payload||{})}))}}
window.__PRE_ANALYTICS__ = PreAnalytics})();</script><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-qfqOnAtTKufbF6DHYCIU/HO++wN+TOasEgxmj9G1cMet8DyQ8Z6441S8KLgx7Ogb">(function (){class PubSub{#s={};subscribe(s,b){return this.#s[s]||(this.#s[s]=[]),this.#s[s].push(b),()=>this.unsubscribe(s,b)}unsubscribe(s,b){this.#s[s]&&(this.#s[s]=this.#s[s].filter((s=>s!==b)))}publish(s,b){this.#s[s]&&(this.#s[s].forEach((s=>{s(b)})),this.clear(s))}clear(s){s?delete this.#s[s]:this.#s={}}}
window.__PUB_SUB__ = new PubSub();})();</script><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-WVmbv7sZ0WnO6IZ/VkhGlYZKtE7eUlzZn1ERrrVofA2uKYcSZg/aact0M8yNClpp">(function (){window["__uber_edge_cache_enabled__"] = true;})();</script><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-MduOinZz/O+pASraL9SAC57SOOfHoqzFmMyxHOyp9/HS9pMFY0wh49bjrlafLz4h">(function (){function __uber_sites_bootstrap_loader__(e,r,t){if(window.__uber_sites_bootstrap_metadata__={fetch_defined:String("function"==typeof e),is_edge_cache_enabled:String(Boolean(r)),page_generated_at:t.page_generated_at,page_generated_uuid:t.page_generated_uuid},"function"!=typeof e)return window.__uber_sites_bootstrap_error__=new Error("No native support for fetch()"),window.__uber_sites_bootstrap_error__.name="FetchNotSupported",void(window.__uber_sites_bootstrap__=Promise.resolve(null));const _=new URL(window.location.href),o=_.searchParams.get("referrer"),s="string"==typeof o?o:document.referrer,a=new URL("/bootstrap.json",window.location.origin);a.searchParams.set("referrer",s),a.searchParams.set("_bmd",t.page_generated_at+"_"+t.page_generated_uuid),r&&a.searchParams.set("_isedgecacheenabled",r);window.__uber_sites_bootstrap__=e(a.href,{credentials:"include",method:"GET",mode:"no-cors",redirect:"manual"}).then((function(e){return"opaqueredirect"===e.type?(_.searchParams.set("referrer",s),_.searchParams.set("_pec","no"),window.location.replace(_.href),Promise.resolve(null)):e.ok?e.json():(window.__uber_sites_bootstrap_error__=new Error(`${e.status} ${e.statusText}`),window.__uber_sites_bootstrap_error__.name="FetchReturned",window.__uber_sites_bootstrap_error__.status=e.status,Promise.resolve(null))})).catch((function(e){return window.__uber_sites_bootstrap_error__=e,Promise.resolve(null)}))}
__uber_sites_bootstrap_loader__((typeof fetch !== 'function') ? undefined : fetch, true, {"page_generated_at":"2026-09-11T07:46:53.841Z","page_generated_uuid":"a9d2df3b-1456-4bd1-b520-b2c5517423d4"});})();</script><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-BdXpfVfUER3BV0ZkbEWcnNonrV+2od/M17yZDXLWccp5oamvNyFGCTAkmWCwTvhO">(function (){function __main__(){const t=function(){const t={isUserPotentiallyLoggedIn:!1},e=document.cookie.match("(^|;)\\s*smeta\\s*=\\s*([^;]+)"),n=e?.pop()||"";if(n)try{const e=JSON.parse(n),i=new Date<new Date(e.expiresAt);t.isUserPotentiallyLoggedIn=i,t.sessionExpirationDate=new Date(e.expiresAt)}catch(t){}return t}()?.isUserPotentiallyLoggedIn;t&&navigator.permissions.query({name:"geolocation"}).then((t=>{if("granted"===t.state){const t=document.cookie.split(";").some((t=>t.trim().startsWith("optOutCH=")));if(t)return;const e=document.createElement("style");e.textContent=".city-hub-redirect-wrapper { display: block !important; }",document.head.appendChild(e),window.__PUB_SUB__.subscribe("getUserTravelStatus",(n=>{const i=n?.data,s=new URL("https://www.uber.com/city-hub");i?.cityId&&s.searchParams.set("city_id",i?.cityId),s.searchParams.set("source","ar"),i?.isUserTraveling&&!t?window.location.href=s.toString():e.textContent=".city-hub-redirect-wrapper { display: none !important; }"}))}}))}
try {
__main__({}, new Map(), 'cityHubRedirect')
} catch {
}
})();</script><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-tXKwYgjRJ1dk8n4a9A2G/285AtBI2GXwi4a959xk2Fl9hOZYHh7k8PmLAwA9oTI4">(function (){function __main__(){const t=new URLSearchParams(window.location.search);if("true"===t.get("optOutCH")){if(!document.cookie.split(";").some((t=>t.trim().startsWith("optOutCH=")))){const t=new Date;t.setTime(t.getTime()+864e5),document.cookie=`optOutCH=true; expires=${t.toUTCString()}; path=/`}t.delete("optOutCH");const o=t.toString()?`${window.location.pathname}?${t.toString()}`:window.location.pathname;window.history.replaceState({},"",o)}}
try {
__main__({}, new Map(), 'nav-v2')
} catch {
}
})();</script><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-xZfsEdLvTo0mP31ClC2LDjsW83FPCgi2MVn7TjarV9a/J/DdT+A32uIkchBCrDRf">(function (){function __main__(a,e){const n=e?.get?.("getCurrentUser");n&&!n.skip&&"data"in n&&window?.__PRE_ANALYTICS__?.add?.({name:"pageview:logged-in",payload:{value_map:{is_logged_in:String(Boolean(n.data?.user?.firstName))}}})}
(function() {
try {
window.__component_LoggedInPageview_script_injected__ = true;
const rpcIds = ["getCurrentUser"];
const completedRpcs = new Map();
function checkAndExecute() {
if (completedRpcs.size === rpcIds.length) {
try {
__main__({}, completedRpcs, 'LoggedInPageview')
} catch {
}
}
}
rpcIds.forEach(rpcId => {
if (window.__PUB_SUB__) {
window.__PUB_SUB__.subscribe(rpcId + '',
function(data) {
completedRpcs.set(rpcId, data);
checkAndExecute();
});
}
});
checkAndExecute();
} catch {
window.__component_LoggedInPageview_script_injected__ = false;
window?.__PRE_ANALYTICS__?.add?.({
name: 'uber-sites:component-enhancer-script-injection-failure',
payload: {
componentName: 'LoggedInPageview',
error: error,
},
});
}
})();
})();</script>
<script type="application/json" id="__MARKETING_UCLICK_LINK_CONFIG__">
%7B%22commonParams%22%3A%7B%22uclick_id%22%3A%5B%7B%22variable%22%3A%22sessionId%22%2C%22renameTo%22%3A%22uclick_id%22%7D%5D%2C%22marketing_vistor_id%22%3A%5B%7B%22variable%22%3A%22marketingVisitorId%22%2C%22renameTo%22%3A%22marketing_vistor_id%22%7D%5D%2C%22paidTracking%22%3A%5B%7B%22param%22%3A%22utm_source%22%7D%2C%7B%22param%22%3A%22utm_campaign%22%7D%2C%7B%22param%22%3A%22utm_content%22%7D%2C%7B%22param%22%3A%22utm_medium%22%7D%2C%7B%22param%22%3A%22utm_term%22%7D%2C%7B%22param%22%3A%22ad_id%22%7D%2C%7B%22param%22%3A%22adgroup_id%22%7D%2C%7B%22param%22%3A%22campaign_id%22%7D%2C%7B%22param%22%3A%22keyword_id%22%7D%2C%7B%22param%22%3A%22keyword%22%7D%2C%7B%22param%22%3A%22creative_id%22%7D%2C%7B%22param%22%3A%22creative_name%22%7D%2C%7B%22param%22%3A%22click_id%22%7D%2C%7B%22param%22%3A%22cid%22%7D%2C%7B%22param%22%3A%22kwid%22%7D%2C%7B%22param%22%3A%22kw%22%7D%2C%7B%22param%22%3A%22gclid%22%7D%2C%7B%22param%22%3A%22ttclid%22%7D%2C%7B%22param%22%3A%22fbclid%22%7D%2C%7B%22param%22%3A%22gbraid%22%7D%5D%7D%2C%22attachSearchParams%22%3A%5B%7B%22domains%22%3A%5B%22*%22%5D%2C%22includes%22%3A%5B%22uclick_id%22%5D%7D%2C%7B%22domains%22%3A%5B%22rides.sng.link%22%2C%22eats.sng.link%22%2C%22earn.sng.link%22%5D%2C%22params%22%3A%5B%7B%22variable%22%3A%22marketingVisitorId%22%2C%22renameTo%22%3A%22mvid%22%7D%5D%7D%2C%7B%22domains%22%3A%5B%22ocie.app.link%22%2C%22skuo.app.link%22%5D%2C%22params%22%3A%5B%7B%22variable%22%3A%22marketingVisitorId%22%2C%22renameTo%22%3A%22~tune_publisher_sub1%22%7D%5D%7D%2C%7B%22domains%22%3A%5B%22auth.uber.com%22%5D%2C%22includes%22%3A%5B%22paidTracking%22%2C%22marketing_vistor_id%22%5D%2C%22params%22%3A%5B%7B%22param%22%3A%22id%22%7D%2C%7B%22param%22%3A%22userId%22%7D%2C%7B%22param%22%3A%22uber_client_name%22%7D%2C%7B%22param%22%3A%22name%22%7D%2C%7B%22param%22%3A%22countryiso2%22%7D%2C%7B%22param%22%3A%22requestToken%22%7D%5D%7D%2C%7B%22domains%22%3A%5B%22restaurant.uber.com%22%2C%22m.uber.com%22%2C%22ubereats.com%22%2C%22www.ubereats.com%22%2C%22get.uber.com%22%5D%2C%22includes%22%3A%5B%22paidTracking%22%2C%22marketing_vistor_id%22%5D%7D%2C%7B%22domains%22%3A%5B%22merchants.ubereats.com%22%2C%22www.uberhealth.com%22%5D%2C%22updateLinksOnSameDomain%22%3Atrue%2C%22includes%22%3A%5B%22paidTracking%22%2C%22marketing_vistor_id%22%5D%7D%2C%7B%22domains%22%3A%5B%22drivers.uber.com%22%5D%2C%22includes%22%3A%5B%22paidTracking%22%2C%22marketing_vistor_id%22%5D%2C%22params%22%3A%5B%7B%22param%22%3A%22invite_code%22%7D%2C%7B%22param%22%3A%22cid%22%7D%5D%7D%2C%7B%22domains%22%3A%5B%22www.uber.com%22%5D%2C%22updateLinksOnSameDomain%22%3Atrue%2C%22includes%22%3A%5B%22paidTracking%22%5D%2C%22params%22%3A%5B%7B%22param%22%3A%22uber_client_name%22%7D%2C%7B%22param%22%3A%22countryiso2%22%7D%2C%7B%22param%22%3A%22userId%22%7D%2C%7B%22param%22%3A%22id%22%7D%2C%7B%22param%22%3A%22requestToken%22%7D%2C%7B%22param%22%3A%22region%22%7D%2C%7B%22param%22%3A%22evp%22%7D%5D%7D%2C%7B%22domains%22%3A%5B%22account.uber.com%22%2C%22bonjour.uber.com%22%2C%22mobility-webview.uber.com%22%2C%22freightbonjour.uber.com%22%2C%22businesses.uber.com%22%2C%22charter.uber.com%22%2C%22paypay.uber.com%22%2C%22direct.uber.com%22%2C%22event.uber.com%22%2C%22vouchers.uber.com%22%2C%22po.uber.com%22%2C%22xlb-beta.uber.com%22%2C%22thankatruckdriver.uber.com%22%2C%22business-beta.uber.com%22%2C%22direct-beta.uber.com%22%2C%22transit.uber.com%22%2C%22reimagine.uber.com%22%2C%22beta.uber.com%22%2C%22transit-beta.uber.com%22%2C%22guest.uber.com%22%2C%22xlb.uber.com%22%5D%2C%22includes%22%3A%5B%22paidTracking%22%5D%7D%2C%7B%22domains%22%3A%5B%22business.uber.com%22%5D%2C%22includes%22%3A%5B%22paidTracking%22%5D%2C%22params%22%3A%5B%7B%22param%22%3A%22uber_client_name%22%7D%2C%7B%22param%22%3A%22name%22%7D%2C%7B%22param%22%3A%22countryiso2%22%7D%5D%7D%5D%2C%22preventSearchParams%22%3A%5B%7B%22domains%22%3A%5B%22websites.crawco.nl%22%2C%22www.ueberbrueckungshilfe-unternehmen.de%22%2C%22ec.europa.eu%22%2C%22www.sheerid.com%22%2C%22partners.uber.com%2Fdeeplink%2Fbook-a-vaccine-walgreens%22%2C%22drivers.uber.com%2Fdeeplink%2Fcovid-vaccine-rides%22%2C%22bip.warszawa.pl%22%2C%22archiwum.bip.uml.lodz.pl%22%2C%22www.adr.org%22%2C%22www.bli.gov.tw%22%2C%22tb-static.uber.com%22%5D%2C%22includes%22%3A%5B%22uclick_id%22%5D%7D%5D%2C%22skipOnSourcePages%22%3A%5B%22www.uber.com%2Flegal%22%5D%7D
</script>
<script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-16wQeREjWUYdV8Y/JP6XAxEGNV70iLf1C4MrPxPEkIn0CY1QSHSHvqffwcmGX9kG">(function (){function matchesAnyDomainPath(e,t){const n=e.host.toLowerCase(),a=e.pathname.toLowerCase();return(t||[]).some((function(e){const t=e.indexOf("/");let r,i;return t<0?(r=e,i=""):0===t?(r="*",i=e):(r=e.substring(0,t),i=e.substring(t)),i=i.toLowerCase(),r=r.toLowerCase(),("*"===r||n===r)&&a.startsWith(i)}))}function applySearchParamsConfig(e,t,n,a){(t||[]).forEach((function(t){matchesAnyDomainPath(e,t.domains)&&(t.includes&&n&&t.includes.forEach((e=>{(n[e]||[]).forEach(a)})),(t.params||[]).forEach(a))}))}function getEligibleValuesToAttach(e,t,n,a){const r={};for(const[e,n]of t?.searchParams||[])r[e]=n;const i=Object.assign({},window?.__marketing_uclick_link__?.variables||{});return applySearchParamsConfig(e,n,a,(function(e){e.variable?delete i[e.variable]:e.param&&delete r[e.param]})),{params:r,variables:i}}function attachQueryParams(e,t,n,a){applySearchParamsConfig(e,t,n,(function(t){const n=t.value?t.value:t.variable?a.variables[t.variable]:a.params[t.param];n&&e.searchParams.set(t.renameTo||t.variable||t.param,n)}))}function isSameDomainAllowed(e,t){return(t||[]).some((t=>matchesAnyDomainPath(e,t.domains)&&t.updateLinksOnSameDomain))}function decorateHrefFactory(e){const t=e&&e.commonParams||{},n=e&&e.attachSearchParams||[],a=e&&e.preventSearchParams||[],r=e&&e.skipOnSourcePages||[];return function(e){if(!e)return e;let i,o;try{i=new URL(window?.location?.href),o=new URL(e,i)}catch{return e}if(matchesAnyDomainPath(i,r))return e;if(!(o.host&&o.host!==i.host||isSameDomainAllowed(o,n)))return e;const c=getEligibleValuesToAttach(o,i,a,t);return attachQueryParams(o,n,t,c),o.href}}function mutateLinkFactory(e){const t=decorateHrefFactory(e);return function(e){if(e.target instanceof Element){const n=e.target.closest("[href]");if(!n||n.getAttribute("data-uclick-id"))return;if(n.closest("svg"))return;const a=n.href||n.getAttribute("href")||"",r=t(a);if(!r||r===a)return;n.setAttribute("href",r),n.setAttribute("data-uclick-id",window?.__marketing_uclick_link__?.variables?.sessionId||"")}}}function setVariables(e){window.__marketing_uclick_link__&&(window.__marketing_uclick_link__.variables=e)}function installHandlers(e){const t=document.getElementById(e);if(t&&t.textContent){const e=JSON.parse(decodeURIComponent(t.textContent));if(e&&!1===e.enabled)return;const n=mutateLinkFactory(e);document.addEventListener("mousedown",n),document.addEventListener("click",n),window.__marketing_uclick_link__={decorateHref:decorateHrefFactory(e),eventListener:n,variables:{}}}}function uninstallHandlers(){const e=window.__marketing_uclick_link__.eventListener;document.removeEventListener("mousedown",e),document.removeEventListener("click",e),window.__marketing_uclick_link__.eventListener=null}
installHandlers('__MARKETING_UCLICK_LINK_CONFIG__');})();</script><script type="speculationrules" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761">{"prerender":[{"source":"document","where":{"and":[{"href_matches":["https://m.uber.com/*\\?*(^|&)pickup*","https://m.uber.com/*\\?*(^|&)drop*"]},{"selector_matches":"[data-pudo-cta=\"true\"]"}]},"eagerness":"immediate"}]}</script><meta id="PRIVACY_BANNERS_GEO_IP" content="{\u0022countryCode\u0022:\u0022IN\u0022,\u0022isoCodes\u0022:[\u0022MP\u0022]}" /><meta id="maps-fallback" content="google" /><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-uGEsvx8th0rj7t6JIP/Jh9gks7GETUsC87NUFORRpC3vJky5iZCUO5u2AUv7mjIa">(function (){function preloadInvokerInit(){"undefined"!=typeof window&&"function"==typeof window.fetch&&(window.__preload_cache_invoker__=function(n,o,e,w,i,d,t,r,c,l,a,f,p){window[e]=window[e]||{},window[e][w]=window[e][w]||{},window[e][w].start=window.performance?window.performance.now():null;const _={body:o,credentials:"include",headers:{"content-type":"application/json","x-csrf-token":"x"},method:"POST",mode:"cors"},s=a?`_${a}`:"",u=function(){if(f)return window[e][w]&&delete window[e][w],window?.__PUB_SUB__?.publish?.(`${n}${s}`,{skip:!0}),Promise.resolve();const o=p?"?localeCode="+encodeURIComponent(p):"";return fetch("/api/"+n+o,_).then((n=>n.json())).then((o=>{window[e][w].end=window.performance?window.performance.now():null,window[e][w].data=o,window?.__PUB_SUB__?.publish?.(`${n}${s}`,o),setTimeout((()=>{delete window[e][w]}),t||864e5)})).catch((()=>{delete window[e][w]}))};window[e][w].promise=!r||c&&!window[i]||!window[d]?u():window[d].then((function(n){if(!l||!l(n))return u();delete window[e][w]}))})}
preloadInvokerInit();})();</script><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-Ddq21m3o82KiOj79HVgsauYoWMErga5JF/5mYGp0l0hHN6ObK953Hz4iutpHGN1m">(function (){(async function () {
let args = "{}";
if (typeof window === 'undefined' || typeof window.fetch !== 'function' || typeof window.__preload_cache_invoker__ !== 'function') {
return;
}
window.__preload_cache_invoker__(
'getCurrentUser',
args,
'__preload_cache__',
"[\"getCurrentUser\",{},{\"chainWithBootstrap\":true,\"skipBootstrapOnNonEdgeCachedPages\":true,\"skipOnBootstrapCondition\":\"bootstrapData?.is_logged_in === false\"}]",
'__uber_edge_cache_enabled__',
'__uber_sites_bootstrap__',
undefined,
true,
true,
function (bootstrapData) { return bootstrapData?.is_logged_in === false; },
'',
false,
"en-GB"
);
})()})();</script><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-IauThOQwITVXI9M5xEjIGv846CjcZKHBwOWSfVHKg51QXnjwRaeenc6sj+zGN8Bm">(function (){(async function () {
let args = "{\"xpParameter\":{\"defaultValue\":\"LEGACY\",\"key\":\"config.city_selector_variant\",\"namespace\":\"chameleon-experiments\"}}";
if (typeof window === 'undefined' || typeof window.fetch !== 'function' || typeof window.__preload_cache_invoker__ !== 'function') {
return;
}
window.__preload_cache_invoker__(
'getExperiments',
args,
'__preload_cache__',
"[\"getExperiments\",{\"xpParameter\":{\"defaultValue\":\"LEGACY\",\"key\":\"config.city_selector_variant\",\"namespace\":\"chameleon-experiments\"}},{}]",
'__uber_edge_cache_enabled__',
'__uber_sites_bootstrap__',
undefined,
undefined,
undefined,
function (bootstrapData) { return false; },
'',
false,
"en-GB"
);
})()})();</script><meta data-rh="true" content="width=device-width, initial-scale=1" name="viewport"/><meta data-rh="true" content="Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we&#x27;re bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber&#x27;s service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated." name="description"/><meta data-rh="true" content="Cinnamon: Using Century Old Tech to Build a Mean Load Shedder" property="og:title"/><meta data-rh="true" content="Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we&#x27;re bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber&#x27;s service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated." property="og:description"/><meta data-rh="true" content="website" property="og:type"/><meta data-rh="true" content="https://www.uber.com/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" property="og:url"/><meta data-rh="true" content="https://tb-static.uber.com/prod/udam-assets/af951005-c1a0-5a02-891c-463ad08d7577.jpg" property="og:image"/><meta data-rh="true" content="Uber" property="og:site_name"/><meta data-rh="true" content="summary" name="twitter:card"/><meta data-rh="true" content="@Uber" name="twitter:site"/><meta data-rh="true" content="368677368" name="twitter:app:id:iphone"/><meta data-rh="true" content="368677368" name="twitter:app:id:ipad"/><meta data-rh="true" content="com.ubercab" name="twitter:app:id:googleplay"/><link data-rh="true" href="/_static/99c4bc580c8b57b7.ico" rel="shortcut icon" type="image/x-icon"/><link data-rh="true" href="/_static/99c4bc580c8b57b7.ico" rel="icon" type="image/x-icon"/><link data-rh="true" href="/_static/bafeeed0a39bd111.png" rel="apple-touch-icon"/><link data-rh="true" href="/_static/d5cc2683f3e6439d.png" rel="apple-touch-icon"/><link data-rh="true" href="/_static/6abf4289b29727df.png" rel="apple-touch-icon" sizes="76x76"/><link data-rh="true" href="/_static/64b3a3562020ce13.png" rel="apple-touch-icon" sizes="120x120"/><link data-rh="true" href="/_static/64b3a3562020ce13.png" rel="apple-touch-icon" sizes="120x120"/><link data-rh="true" href="/_static/e866579cf618f063.png" rel="apple-touch-icon" sizes="144x144"/><link data-rh="true" href="/_static/169325435ed77d85.png" rel="apple-touch-icon" sizes="152x152"/><link data-rh="true" href="/_static/de0e97ed977ad313.png" rel="apple-touch-icon" sizes="180x180"/><link data-rh="true" href="https://www.uber.com/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" rel="canonical"/><link data-rh="true" href="https://www.uber.com/be/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-be" rel="alternate"/><link data-rh="true" href="https://www.uber.com/jp/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-jp" rel="alternate"/><link data-rh="true" href="https://www.uber.com/mt/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-mt" rel="alternate"/><link data-rh="true" href="https://www.uber.com/pe/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-pe" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ug/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ug" rel="alternate"/><link data-rh="true" href="https://www.uber.com/lb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-lb" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ua/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ua" rel="alternate"/><link data-rh="true" href="https://www.uber.com/jm/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-jm" rel="alternate"/><link data-rh="true" href="https://www.uber.com/tw/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-tw" rel="alternate"/><link data-rh="true" href="https://www.uber.com/pt/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-pt" rel="alternate"/><link data-rh="true" href="https://www.uber.com/gh/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-gh" rel="alternate"/><link data-rh="true" href="https://www.uber.com/rs/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-rs" rel="alternate"/><link data-rh="true" href="https://www.uber.com/nz/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-nz" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ma/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ma" rel="alternate"/><link data-rh="true" href="https://www.uber.com/hn/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-hn" rel="alternate"/><link data-rh="true" href="https://www.uber.com/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-gb" rel="alternate"/><link data-rh="true" href="https://www.uber.com/dk/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-dk" rel="alternate"/><link data-rh="true" href="https://www.uber.com/se/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-se" rel="alternate"/><link data-rh="true" href="https://www.uber.com/uy/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-uy" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ke/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ke" rel="alternate"/><link data-rh="true" href="https://www.uber.com/us/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-us" rel="alternate"/><link data-rh="true" href="https://www.uber.com/tz/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-tz" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ch/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ch" rel="alternate"/><link data-rh="true" href="https://www.uber.com/es/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-es" rel="alternate"/><link data-rh="true" href="https://www.uber.com/fi/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-fi" rel="alternate"/><link data-rh="true" href="https://www.uber.com/si/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-si" rel="alternate"/><link data-rh="true" href="https://www.uber.com/fr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-fr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/cr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-cr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/in/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-in" rel="alternate"/><link data-rh="true" href="https://www.uber.com/de/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-de" rel="alternate"/><link data-rh="true" href="https://www.uber.com/no/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-no" rel="alternate"/><link data-rh="true" href="https://www.uber.com/nl/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-nl" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ci/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ci" rel="alternate"/><link data-rh="true" href="https://www.uber.com/kw/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-kw" rel="alternate"/><link data-rh="true" href="https://www.uber.com/iq/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-iq" rel="alternate"/><link data-rh="true" href="https://www.uber.com/sa/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-sa" rel="alternate"/><link data-rh="true" href="https://www.uber.com/do/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-do" rel="alternate"/><link data-rh="true" href="https://www.uber.com/cl/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-cl" rel="alternate"/><link data-rh="true" href="https://www.uber.com/at/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-at" rel="alternate"/><link data-rh="true" href="https://www.uber.com/co/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-co" rel="alternate"/><link data-rh="true" href="https://www.uber.com/bg/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-bg" rel="alternate"/><link data-rh="true" href="https://www.uber.com/bd/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-bd" rel="alternate"/><link data-rh="true" href="https://www.uber.com/hr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-hr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/sv/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-sv" rel="alternate"/><link data-rh="true" href="https://www.uber.com/pa/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-pa" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ae/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ae" rel="alternate"/><link data-rh="true" href="https://www.uber.com/tr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-tr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/lk/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-lk" rel="alternate"/><link data-rh="true" href="https://www.uber.com/lt/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-lt" rel="alternate"/><link data-rh="true" href="https://www.uber.com/hu/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-hu" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ie/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ie" rel="alternate"/><link data-rh="true" href="https://www.uber.com/br/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-br" rel="alternate"/><link data-rh="true" href="https://www.uber.com/mx/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-mx" rel="alternate"/><link data-rh="true" href="https://www.uber.com/lu/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-lu" rel="alternate"/><link data-rh="true" href="https://www.uber.com/sk/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-sk" rel="alternate"/><link data-rh="true" href="https://www.uber.com/kr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-kr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/cz/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-cz" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ca/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ca" rel="alternate"/><link data-rh="true" href="https://www.uber.com/pl/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-pl" rel="alternate"/><link data-rh="true" href="https://www.uber.com/bh/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-bh" rel="alternate"/><link data-rh="true" href="https://www.uber.com/it/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-it" rel="alternate"/><link data-rh="true" href="https://www.uber.com/au/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-au" rel="alternate"/><link data-rh="true" href="https://www.uber.com/gt/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-gt" rel="alternate"/><link data-rh="true" href="https://www.uber.com/il/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-il" rel="alternate"/><link data-rh="true" href="https://www.uber.com/jo/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-jo" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ro/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ro" rel="alternate"/><link data-rh="true" href="https://www.uber.com/eg/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-eg" rel="alternate"/><link data-rh="true" href="https://www.uber.com/za/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-za" rel="alternate"/><link data-rh="true" href="https://www.uber.com/gr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-gr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/py/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-py" rel="alternate"/><link data-rh="true" href="https://www.uber.com/pk/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-pk" rel="alternate"/><link data-rh="true" href="https://www.uber.com/qa/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-qa" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ng/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ng" rel="alternate"/><link data-rh="true" href="https://www.uber.com/hk/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-hk" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ec/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ec" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ee/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-ee" rel="alternate"/><link data-rh="true" href="https://www.uber.com/mo/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" hreflang="en-mo" rel="alternate"/><style data-rh="true" >
.rich-lfc-content {
font-family: UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 16px;
font-weight: normal;
line-height: 24px;
color: #000000;
letter-spacing: 0;
min-width: 0;
}
.rich-bold {
font-weight: bold;
}
.rich-italic {
font-style: italic;
}
.rich-underline {
text-decoration: underline;
}
.rich-strikethrough {
text-decoration: line-through;
}
.rich-quote {
font-family: UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 20px;
font-weight: 700;
line-height: 28px;
border-inline-start-color: #E8E8E8;
border-inline-start-style: solid;
border-inline-start-width: 4px;
margin: 0;
padding-bottom: 16px;
padding-inline-start: 32px;
padding-top: 16px;
}
.rich-custom-quote {
font-family: UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 28px;
font-weight: 700;
line-height: 36px;
margin: 0 auto;
position: relative;
width: fit-content;
max-width: 80%;
}
.rich-custom-quote::before {
content: '"';
margin-inline-end: 4px;
}
.rich-custom-quote::after {
content: '"';
margin-inline-start: 4px;
}
.rich-float-clear {
clear: both;
}
.rich-image {
max-width: 100%;
height: auto;
}
.rich-figure {
margin: 20px 0;
max-width: 100%;
text-align: center;
}
.rich-figure img {
display: block;
height: auto;
margin-left: auto;
margin-right: auto;
max-width: 100%;
}
.rich-figure-caption {
font-family: UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
font-weight: 500;
line-height: 16px;
color: #4B4B4B;
margin-top: 8px;
text-align: center;
}
.rich-image-center {
display: block;
width: fit-content;
margin-bottom: 20px;
margin-top: 20px;
margin-left: auto;
margin-right: auto;
position: relative;
}
.rich-image-left {
float: left;
margin-right: 20px;
margin-top: 0;
position: relative;
}
.rich-image-right {
float: right;
margin-left: 20px;
margin-top: 0;
position: relative;
}
[dir='rtl'] .rich-image-left {
float: right;
margin-left: 20px;
margin-right: 0;
}
[dir='rtl'] .rich-image-right {
float: left;
margin-left: 0;
margin-right: 20px;
}
.rich-image-wrapper {
position: relative;
text-align: center;
}
.rich-video {
display: block;
aspect-ratio: 16 / 9;
height: auto;
margin: 20px auto;
max-width: 100%;
object-fit: contain;
object-position: center;
width: 100%;
}
.rich-table {
border-collapse: collapse;
width: 100%;
margin: 16px 0;
}
.rich-table-cell,
.rich-table-cell-header {
border: 2px solid #F3F3F3;
padding: 8px;
text-align: start;
}
.rich-table-cell-header {
background-color: #F3F3F3;
font-weight: bold;
}
.rich-lfc-content .rich-link-cta {
font-family: UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 16px;
font-weight: 500;
line-height: 20px;
display: inline-block;
margin-top: 12px;
padding: 12px 16px;
text-decoration: none;
border-radius: 8px;
background-color: #000000;
color: #FFFFFF;
transition: background-color 200ms cubic-bezier(.2, .8, .4, 1);
}
.rich-lfc-content .rich-link-cta:hover {
background-color: #282828;
color: #FFFFFF;
}
@media (max-width: 600px) {
.rich-image-left,
.rich-image-right {
float: none !important;
margin-left: auto !important;
margin-right: auto !important;
display: flex;
justify-content: center;
margin-top: 20px;
margin-bottom: 20px;
}
}
@media screen and (min-width: 600px) {
.rich-custom-quote {
font-family: UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 32px;
font-weight: 700;
line-height: 40px;
}
}
@media screen and (min-width: 1136px) {
.rich-custom-quote {
font-family: UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 36px;
font-weight: 700;
line-height: 44px;
}
}
.rich-heading-h1 {
font-family: UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 40px;
font-weight: 700;
line-height: 52px;
}
.rich-heading-h2 {
font-family: UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 36px;
font-weight: 700;
line-height: 44px;
}
.rich-heading-h3 {
font-family: UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 32px;
font-weight: 700;
line-height: 40px;
}
.rich-heading-h4 {
font-family: UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 28px;
font-weight: 700;
line-height: 36px;
}
.rich-heading-h5 {
font-family: UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 24px;
font-weight: 700;
line-height: 32px;
}
.rich-heading-h6 {
font-family: UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
font-weight: 500;
line-height: 16px;
}
.rich-link {
font-family: UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 16px;
font-weight: 500;
line-height: 20px;
font-size: inherit;
color: #000000;
cursor: pointer;
text-decoration: underline;
}
.rich-link:hover {
color: #276EF1;
}
.rich-paragraph {
font-family: UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 16px;
font-weight: normal;
line-height: 24px;
}
.rich-list-item {
font-family: UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 16px;
font-weight: normal;
line-height: 24px;
}
.rich-nested-list-item {
list-style-type: none;
}
.rich-table-cell,
.rich-table-cell-header {
font-family: UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 16px;
font-weight: normal;
line-height: 24px;
}
.rich-table tbody > tr {
border-bottom: none;
}
</style><style class="_styletron_hydrate_" data-hydrate="bzyevI PKJb jcwfVM cenKGv hSgrkT hNYSyH cxltSn jdmMfJ favjHz kNnmbO bEvpjW btbKrJ ePqIsi boIhmv UsIex beegqO idoxzA bWHXse coikQw hDdkid dWTxGR fCwhaC guiGWC kpjDOI hYZYtM jrSJdi hhSroJ jrSMTd kFHXBV iVVeIU erEjEB cndfHK cMGqfS kfoJzM hdjfHk kXvOCV kfGxPu dkkdtH gqcHgx hazmlH ofGld gMUoBL bVFrLX cpjRpJ gVWXrV dWBVmg dTqljZ lbyguR esMPmm hWkSKL bLZDAV flFEmG iJiqqk lWgfA cDENyl fXAxKR lpcwSG fRvJhN boizeY ZwMiT kubgwy jXIcbF fwSNZL ePDHQX lnLvkz iwUWAj eKMvCJ dluitZ fZMXzA gAzlNU eOLFUs kvlyqw dmqvLf hFtqPc gKOWma GWCtH daiOOU iacIfU bjVkCt jaByka bolAuU daInXa fVLpfI bnsMK jOhJVe jgmlEN cjHYHA iXmjNW hBnhgZ dODCLc HXvWP rjIkq dmEOyR iBZTkJ AnBpG bYGJej cDWyiW efdIWD hCxyXn dQXoUy huebvm ekbqzf FvMyi lfhXcE fdGxkK cLYIms fOpIi dLzUvf gzlAMi dKvrsS gBmvBw rwapI xdbDk dtzAnt kghkUG dhEXXW hJZDgX cGUJPV lWKHs dZTBoz bUfMjo drdOnW hTBogS uPqSX kZqllj ekKYDj jQOKxw cxExNw cKXFfR eTbQd bdRVnM etAiCK dHTgDT boSGMR fcoWDR gtGwaM gtXpje hByTyl kwWKra Yerqw kHWzwv fLCWQY ingCMH cCDVuf czUDWs iclDxs eUNfLQ eoiIol kVLeBt gLZtvz dQDsac laJbgX dahbuC jgYIWw jAylDS gowlgP fIxJXI jKvvYG hxCswv fhseOM dsWNMj bzLBFK dtrVZw iGtyFy jODDvp jJwUXi kwNuyP jeuDjw hxGQNi bpyykn cOsLzB eleJdh fPItWk lnzgHT bfYiUy bGyOjB gkIDnk bZnCM">.css-bzyevI{background-color:#ffffff;min-height:100%;}.css-jcwfVM{background-color:#ffffff;border:none;clip:rect(0 0 0 0);color:#0000EE;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;transform:translateY(-100%);-webkit-transition:transform 200ms ease-out;-moz-transition:transform 200ms ease-out;transition:transform 200ms ease-out;width:1px;}.css-jcwfVM:focus{-webkit-box-align:center;align-items:center;background-color:#ffffff;border:0;clip:initial;color:#0000EE;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;height:60px;-webkit-box-pack:center;justify-content:center;margin:0;overflow:visible;padding:0;position:relative;transform:translateY(0);-webkit-transition:transform 200ms ease-out;-moz-transition:transform 200ms ease-out;transition:transform 200ms ease-out;width:100%;z-index:2147483647;}.css-jcwfVM:hover{text-decoration:underline;}.css-cenKGv{display:inline;}@media screen and (min-width: 600px){.css-cenKGv{display:inline;}}@media screen and (min-width: 1136px){.css-cenKGv{display:inline;}}.css-hSgrkT{display:none;}.css-hNYSyH{display:none;}@media screen and (min-width: 320px){.css-hNYSyH{display:none;}}@media screen and (min-width: 600px){.css-hNYSyH{display:none;}}@media screen and (min-width: 1136px){.css-hNYSyH{display:inherit;}}.css-cxltSn{background:none;position:absolute;right:-16px;top:56px;}.css-jdmMfJ{display:-ms-grid;display:grid;-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1 / -1;grid-column-gap:40px;grid-row-gap:40px;-ms-grid-columns:repeat(12,1fr);grid-template-columns:repeat(12,1fr);position:relative;max-width:1136px;margin:0 auto;}.css-favjHz{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;border-left-width:0;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-style:none;border-top-style:none;border-right-style:none;border-bottom-style:none;outline:none;box-sizing:border-box;box-shadow:none;text-decoration:none;-webkit-appearance:none;-webkit-transition-property:background;-moz-transition-property:background;transition-property:background;transition-duration:200ms;transition-timing-function:cubic-bezier(0, 0, 1, 1);cursor:pointer;margin-left:0;margin-top:0;margin-right:0;margin-bottom:0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:16px;font-weight:500;line-height:20px;border-top-right-radius:50%;border-bottom-right-radius:50%;border-top-left-radius:50%;border-bottom-left-radius:50%;padding-top:14px;padding-bottom:14px;padding-left:14px;padding-right:14px;color:#000000;background-color:transparent;}.css-favjHz:disabled{cursor:not-allowed;background-color:#F3F3F3;color:#A6A6A6;}.css-favjHz:focus-visible{box-shadow:inset 0 0 0 2px #FFFFFF, 0 0 0 2px #276EF1 ;}@media (hover: hover){.css-favjHz:hover{box-shadow:inset 999px 999px 0px rgba(0, 0, 0, 0.04) ;}}.css-favjHz:active{box-shadow:inset 999px 999px 0px rgba(0, 0, 0, 0.08) ;}.css-kNnmbO{display:none;}@media screen and (min-width: 320px){.css-kNnmbO{display:none;}}@media screen and (min-width: 600px){.css-kNnmbO{display:none;}}@media screen and (min-width: 1136px){.css-kNnmbO{display:inherit;padding-top:128px;}}.css-bEvpjW{box-sizing:border-box;display:-ms-grid;display:grid;-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1 / -1;grid-column-gap:40px;grid-row-gap:12px;-ms-grid-columns:repeat(1, 1fr);grid-template-columns:repeat(1, 1fr);margin:0 auto;padding-bottom:64px;padding-left:24px;padding-right:24px;padding-top:40px;width:100%;}@media screen and (min-width: 1136px){.css-bEvpjW{grid-row-gap:40px;-ms-grid-columns:repeat(4, 1fr);grid-template-columns:repeat(4, 1fr);padding-left:0;padding-right:0;padding-top:0;width:1136px;}}.css-btbKrJ{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1 / -1;padding-bottom:40px;}.css-ePqIsi{color:#000000;font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:700;font-size:28px;line-height:36px;margin:0;}@media screen and (min-width: 320px){.css-ePqIsi{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:700;font-size:28px;line-height:36px;}}@media screen and (min-width: 600px){.css-ePqIsi{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:700;font-size:28px;line-height:36px;}}@media screen and (min-width: 1136px){.css-ePqIsi{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:700;font-size:36px;line-height:44px;}}.css-boIhmv{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:start;justify-content:start;border-left-width:0;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-style:none;border-top-style:none;border-right-style:none;border-bottom-style:none;outline:none;box-sizing:border-box;box-shadow:none;text-decoration:none;-webkit-appearance:none;-webkit-transition-property:background;-moz-transition-property:background;transition-property:background;transition-duration:200ms;transition-timing-function:cubic-bezier(0, 0, 1, 1);cursor:pointer;margin-left:0;margin-top:0;margin-right:0;margin-bottom:0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:18px;font-weight:500;line-height:24px;border-top-right-radius:8px;border-bottom-right-radius:8px;border-top-left-radius:8px;border-bottom-left-radius:8px;padding-top:16px;padding-bottom:16px;padding-left:20px;padding-right:20px;color:#000000;background-color:transparent;transform:translate3D(-20px, 0, 0);}.css-boIhmv:disabled{cursor:not-allowed;background-color:#F3F3F3;color:#A6A6A6;}.css-boIhmv:focus-visible{box-shadow:inset 0 0 0 2px #FFFFFF, 0 0 0 2px #276EF1 ;}@media (hover: hover){.css-boIhmv:hover{box-shadow:inset 999px 999px 0px rgba(0, 0, 0, 0.04) ;}}.css-boIhmv:active{box-shadow:inset 999px 999px 0px rgba(0, 0, 0, 0.08) ;}.css-UsIex{display:inherit;}@media screen and (min-width: 320px){.css-UsIex{display:inherit;}}@media screen and (min-width: 600px){.css-UsIex{display:inherit;}}@media screen and (min-width: 1136px){.css-UsIex{display:none;}}.css-beegqO{display:inherit;}.css-idoxzA{margin-top:0;margin-bottom:0;margin-left:0;overflow:auto;padding-top:0;padding-bottom:0;padding-left:24px;position:relative;outline:none;display:block;border-left:none;list-style:none;padding-right:24px;}.css-bWHXse{cursor:pointer;margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;overflow:auto;padding-top:0;padding-bottom:0;padding-left:0;padding-right:0;position:relative;outline:none;}.css-coikQw{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:justify;justify-content:space-between;width:100%;}.css-hDdkid{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;position:relative;width:100%;}.css-dWTxGR{height:24px;width:24px;margin-right:16px;}.css-fCwhaC{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:32px;font-weight:700;line-height:40px;color:#000000;margin-bottom:16px;margin-top:16px;}.css-guiGWC{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;margin-top:-12px;position:absolute;right:0;top:50%;}.css-kpjDOI{height:100%;width:100%;}.css-hYZYtM{margin-top:0;margin-bottom:0;margin-left:0;overflow:auto;padding-top:0;padding-bottom:0;padding-left:6px;position:relative;outline:none;display:none;border-left:none;list-style:none;}.css-jrSJdi{cursor:auto;margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;overflow:auto;padding-top:0;padding-bottom:0;padding-left:0;padding-right:0;position:relative;outline:none;}.css-hhSroJ{background-color:transparent;color:#000000;font-size:16px;font-weight:500;line-height:16px;}.css-jrSMTd{background-color:transparent;color:#4B4B4B;font-size:14px;font-weight:400;line-height:22px;}.css-kFHXBV{color:#000000;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:inherit;font-weight:500;line-height:inherit;-webkit-transition-property:backgroundSize;-moz-transition-property:backgroundSize;transition-property:backgroundSize;transition-duration:500ms;transition-timing-function:cubic-bezier(0.22, 1, 0.36, 1);text-decoration:none;text-underline-position:under;will-change:background-size;background-size:0% 100%, 100% 100%;background-repeat:no-repeat;background-image:none;margin-left:36px;}.css-kFHXBV:hover{color:#4B4B4B;background-size:100% 100%, 100% 100%;}.css-kFHXBV:focus{outline:none;outline-offset:1px;text-decoration:none;}.css-kFHXBV:visited{color:#727272;}.css-kFHXBV:active{color:#5E5E5E;}.css-iVVeIU{color:#000000;font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:32px;font-weight:700;line-height:40px;background-image:none;background-repeat:no-repeat;background-size:0% 100%, 100% 100%;cursor:pointer;margin-bottom:16px;margin-top:16px;text-decoration:none;text-underline-position:under;transition-duration:500ms;-webkit-transition-property:backgroundSize;-moz-transition-property:backgroundSize;transition-property:backgroundSize;transition-timing-function:cubic-bezier(0.22, 1, 0.36, 1);width:100%;will-change:background-size;}.css-iVVeIU:active{color:#5E5E5E;}.css-iVVeIU:focus{outline:3px solid #276EF1;outline-offset:1px;text-decoration:none;}.css-iVVeIU:focus:not(:focus-visible){outline:none;}.css-iVVeIU:hover{background-size:100% 100%, 100% 100%;color:#4B4B4B;}.css-iVVeIU:visited{color:#000000;}.css-erEjEB{margin-top:0;margin-bottom:0;margin-left:14px;overflow:auto;padding-top:0;padding-bottom:0;padding-left:6px;position:relative;outline:none;display:none;border-left:none;list-style:none;}.css-cndfHK{display:none;padding-top:12px;padding-right:24px;padding-bottom:96px;padding-left:24px;}.css-cMGqfS{-webkit-box-align:center;align-items:center;display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;gap:6px;}.css-kfoJzM{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;border-left-width:0;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-style:none;border-top-style:none;border-right-style:none;border-bottom-style:none;outline:none;box-sizing:border-box;box-shadow:none;text-decoration:none;-webkit-appearance:none;-webkit-transition-property:background;-moz-transition-property:background;transition-property:background;transition-duration:200ms;transition-timing-function:cubic-bezier(0, 0, 1, 1);cursor:pointer;margin-left:0;margin-top:0;margin-right:0;margin-bottom:0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:14px;font-weight:500;line-height:16px;border-top-right-radius:999px;border-bottom-right-radius:999px;border-top-left-radius:999px;border-bottom-left-radius:999px;padding-top:10px;padding-bottom:10px;padding-left:12px;padding-right:12px;color:#000000;background-color:transparent;white-space:nowrap;}.css-kfoJzM:disabled{cursor:not-allowed;background-color:#F3F3F3;color:#A6A6A6;}.css-kfoJzM:focus-visible{box-shadow:inset 0 0 0 2px #FFFFFF, 0 0 0 2px #276EF1 ;}@media (hover: hover){.css-kfoJzM:hover{box-shadow:inset 999px 999px 0px rgba(0, 0, 0, 0.04) ;}}.css-kfoJzM:active{box-shadow:inset 999px 999px 0px rgba(0, 0, 0, 0.08) ;}.css-hdjfHk{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;margin-right:8px;}.css-kXvOCV{margin-bottom:64px;width:32px;}.css-kfGxPu{-webkit-box-align:center;align-items:center;border-bottom:1px solid #000000;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:justify;justify-content:space-between;padding-bottom:40px;}.css-dkkdtH{width:90%;}.css-gqcHgx{background-color:#FFFFFF;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;position:relative;width:100%;height:auto;min-height:auto;max-height:auto;margin:0 auto;padding-top:0;padding-bottom:0;}@media screen and (min-width: 320px){.css-gqcHgx{padding-top:0;padding-bottom:0;}}@media screen and (min-width: 600px){.css-gqcHgx{padding-top:0;padding-bottom:0;}}@media screen and (min-width: 1136px){.css-gqcHgx{padding-top:0;padding-bottom:0;}}.css-hazmlH{background-position:center center;background-repeat:no-repeat;background-size:cover;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;position:relative;width:100%;height:auto;margin:0 auto;overflow:hidden;z-index:0;}.css-ofGld{width:100%;max-width:100%;margin-right:auto;margin-left:auto;padding-top:0;padding-bottom:0;align-self:flex-start;}@media screen and (min-width: 320px){.css-ofGld{max-width:100%;padding-top:0;padding-bottom:0;}}@media screen and (min-width: 600px){.css-ofGld{max-width:100%;padding-top:0;padding-bottom:0;}}@media screen and (min-width: 1136px){.css-ofGld{max-width:1280px;padding-top:0;padding-bottom:0;}}.css-gMUoBL{color:#000000;background-color:transparent;padding-top:40px;padding-right:24px;padding-bottom:40px;padding-left:24px;}@media screen and (min-width: 320px){.css-gMUoBL{padding-top:40px;padding-right:24px;padding-bottom:40px;padding-left:24px;}}@media screen and (min-width: 600px){.css-gMUoBL{padding-top:56px;padding-right:32px;padding-bottom:56px;padding-left:32px;}}@media screen and (min-width: 1136px){.css-gMUoBL{padding-top:64px;padding-right:64px;padding-bottom:64px;padding-left:64px;}}.css-bVFrLX{display:-ms-grid;display:grid;grid-column-gap:16px;grid-row-gap:36px;-ms-grid-columns:repeat(4, 1fr);grid-template-columns:repeat(4, 1fr);height:100%;justify-items:inherit;}@media screen and (min-width: 320px){.css-bVFrLX{grid-column-gap:16px;grid-row-gap:36px;-ms-grid-columns:repeat(4, 1fr);grid-template-columns:repeat(4, 1fr);}}@media screen and (min-width: 600px){.css-bVFrLX{grid-column-gap:36px;grid-row-gap:36px;-ms-grid-columns:repeat(8, 1fr);grid-template-columns:repeat(8, 1fr);}}@media screen and (min-width: 1136px){.css-bVFrLX{grid-column-gap:36px;grid-row-gap:36px;-ms-grid-columns:repeat(12, 1fr);grid-template-columns:repeat(12, 1fr);}}.css-cpjRpJ{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;order:0;width:100%;-ms-grid-row-align:center;align-self:center;display:-ms-grid;display:grid;}@media screen and (min-width: 320px){.css-cpjRpJ{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;}}@media screen and (min-width: 600px){.css-cpjRpJ{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;}}@media screen and (min-width: 1136px){.css-cpjRpJ{grid-column:span 5;}}.css-gVWXrV{color:#000000;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:inherit;font-weight:500;line-height:inherit;-webkit-transition-property:backgroundSize;-moz-transition-property:backgroundSize;transition-property:backgroundSize;transition-duration:500ms;transition-timing-function:cubic-bezier(0.22, 1, 0.36, 1);text-decoration:none;text-underline-position:under;will-change:background-size;background-size:0% 100%, 100% 100%;background-repeat:no-repeat;background-image:none;}.css-gVWXrV:hover{color:#4B4B4B;background-size:100% 100%, 100% 100%;}.css-gVWXrV:focus{outline:none;outline-offset:1px;text-decoration:none;}.css-gVWXrV:visited{color:#727272;}.css-gVWXrV:active{color:#5E5E5E;}.css-dWBVmg{color:inherit;font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:700;font-size:36px;line-height:44px;}.css-dTqljZ{color:#000000;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:normal;font-size:16px;line-height:24px;}.css-lbyguR{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;order:0;width:100%;-ms-grid-row-align:center;align-self:center;display:-ms-grid;display:grid;}@media screen and (min-width: 320px){.css-lbyguR{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;}}@media screen and (min-width: 600px){.css-lbyguR{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;}}@media screen and (min-width: 1136px){.css-lbyguR{grid-column:span 1;}}.css-esMPmm{font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:16px;font-weight:normal;line-height:24px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;padding-bottom:12px;padding-top:12px;border-bottom-width:0;border-bottom-style:solid;border-bottom-color:#F3F3F3;background-color:#000000;box-sizing:border-box;height:64px;padding-left:0;padding-right:0;position:relative;top:0;transition-duration:300ms;-webkit-transition-property:top;-moz-transition-property:top;transition-property:top;z-index:2002;}.css-hWkSKL{box-sizing:border-box;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:normal;justify-content:normal;margin-left:auto;margin-right:auto;max-width:calc(1280px + 64px*2);padding-left:64px;padding-right:64px;width:100%;}.css-bLZDAV{color:#FFFFFF;font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:20px;font-weight:400;line-height:112px;-webkit-transition-property:backgroundSize;-moz-transition-property:backgroundSize;transition-property:backgroundSize;transition-duration:500ms;transition-timing-function:cubic-bezier(0.22, 1, 0.36, 1);position:relative;text-decoration:none;text-underline-position:under;will-change:background-size;background-size:0% 100%, 100% 100%;background-repeat:no-repeat;background-image:none;-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;height:100%;text-align:left;top:0;white-space:nowrap;}.css-bLZDAV:hover{color:#FFFFFF;background-size:100% 100%, 100% 100%;}.css-bLZDAV:focus{outline:none;outline-offset:1px;text-decoration:none;}.css-bLZDAV:visited{color:#FFFFFF;}.css-bLZDAV:active{color:#FFFFFF;}@media screen and (min-width: 1136px){.css-bLZDAV{font-size:24px;}}.css-flFEmG{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-flex:1;flex-grow:1;flex-shrink:1;flex-basis:auto;padding-left:0 !important;padding-right:0 !important;justify-self:flex-start;-webkit-box-pack:start;justify-content:flex-start;list-style:none;margin-bottom:0;margin-top:0;margin-left:24px;margin-right:24px;overflow:hidden;padding-bottom:0 !important;padding-top:0 !important;visibility:hidden;}.css-flFEmG:first-child{padding:0;}.css-flFEmG:last-child{padding:0;}.css-iJiqqk{-ms-grid-row-align:center;align-self:center;padding-left:0;margin-bottom:0;visibility:inherit;padding-right:4px;}.css-lWgfA{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;border-left-width:0;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-style:none;border-top-style:none;border-right-style:none;border-bottom-style:none;outline:none;box-sizing:border-box;box-shadow:none;text-decoration:none;-webkit-appearance:none;-webkit-transition-property:background;-moz-transition-property:background;transition-property:background;transition-duration:200ms;transition-timing-function:cubic-bezier(0, 0, 1, 1);cursor:pointer;margin-left:0;margin-top:0;margin-right:0;margin-bottom:0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:14px;font-weight:500;line-height:16px;border-top-right-radius:999px;border-bottom-right-radius:999px;border-top-left-radius:999px;border-bottom-left-radius:999px;padding-top:10px;padding-bottom:10px;padding-left:12px;padding-right:12px;color:#FFFFFF;background-color:#000000;white-space:nowrap;}.css-lWgfA:disabled{cursor:not-allowed;background-color:#F3F3F3;color:#A6A6A6;}.css-lWgfA:focus-visible{box-shadow:inset 0 0 0 2px #FFFFFF, 0 0 0 2px #276EF1 ;}@media (hover: hover){.css-lWgfA:hover{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.1) ;}}.css-lWgfA:active{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.2) ;}.css-cDENyl{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;margin-left:8px;}.css-fXAxKR{direction:ltr;display:-ms-grid;display:grid;grid-column-gap:36px;-ms-grid-columns:2fr 1fr ;grid-template-columns:2fr 1fr ;}.css-lpcwSG{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;}.css-fRvJhN{-webkit-box-align:center;align-items:center;background-image:-webkit-linear-gradient(
transparent calc(100% - 1px),
#000000 1px
),
-webkit-linear-gradient(
transparent calc(100% - 1px),
#E5E5E5 1px
)
;background-image:-moz-linear-gradient(
transparent calc(100% - 1px),
#000000 1px
),
-moz-linear-gradient(
transparent calc(100% - 1px),
#E5E5E5 1px
)
;background-image:linear-gradient(
transparent calc(100% - 1px),
#000000 1px
),
linear-gradient(
transparent calc(100% - 1px),
#E5E5E5 1px
)
;background-position:0px calc(100% - 1px), 0px calc(100% - 1px);background-repeat:no-repeat;background-size:0% 6px, 100% 6px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;flex:0 0 auto;padding:0 0 24px;-webkit-transition:all 400ms cubic-bezier(.2, .8, .4, 1);-moz-transition:all 400ms cubic-bezier(.2, .8, .4, 1);transition:all 400ms cubic-bezier(.2, .8, .4, 1);}.css-boizeY{display:inline-block;margin-right:12px;height:24px;width:24px;}.css-ZwMiT{display:block;height:100%;transform:scaleX(1);width:100%;}.css-kubgwy{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:24px;font-weight:700;line-height:24px;background-color:transparent;color:#000000;}.css-jXIcbF{display:-ms-grid;display:grid;flex:0 0 auto;grid-auto-flow:column;grid-column-gap:36px;grid-row-gap:24px;-ms-grid-columns:repeat(2, 1fr);grid-template-columns:repeat(2, 1fr);-ms-grid-rows:repeat(5, auto);grid-template-rows:repeat(5, auto);max-width:576px;padding-top:30px;}.css-fwSNZL{color:#000000;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:inherit;font-weight:500;line-height:inherit;-webkit-transition-property:backgroundSize;-moz-transition-property:backgroundSize;transition-property:backgroundSize;transition-duration:500ms;transition-timing-function:cubic-bezier(0.22, 1, 0.36, 1);text-decoration:none;text-underline-position:under;will-change:background-size;background-size:0% 100%, 100% 100%;background-repeat:no-repeat;background-image:none;background-color:transparent;display:block;}.css-fwSNZL:hover{color:#5E5E5E !important;background-size:100% 100%, 100% 100%;}.css-fwSNZL:focus{outline:none;outline-offset:1px;text-decoration:none;}.css-fwSNZL:visited{color:#000000;}.css-fwSNZL:active{color:#5E5E5E;}.css-ePDHQX{background-color:transparent;margin:12px 0 0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:14px;font-weight:normal;line-height:20px;color:#4B4B4B;}.css-lnLvkz{color:#000000;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:normal;font-size:14px;line-height:20px;}.css-iwUWAj{display:-ms-grid;display:grid;flex:0 0 auto;grid-auto-flow:column;grid-column-gap:36px;grid-row-gap:24px;-ms-grid-columns:repeat(1, 1fr);grid-template-columns:repeat(1, 1fr);-ms-grid-rows:repeat(4, auto);grid-template-rows:repeat(4, auto);max-width:288px;padding-top:30px;}.css-eKMvCJ{-ms-grid-row-align:center;align-self:center;padding-left:0;margin-bottom:0;visibility:hidden;padding-right:4px;}.css-dluitZ{background-color:#FFFFFF;position:relative;margin-top:0;margin-bottom:0;margin-left:-3px;margin-right:-3px;padding-top:8px;padding-bottom:8px;padding-left:0;padding-right:0;border-top-left-radius:8px;border-top-right-radius:8px;border-bottom-right-radius:8px;border-bottom-left-radius:8px;box-shadow:0 4px 16px hsla(0, 0%, 0%, 0.16);overflow:auto;min-width:192px;}.css-dluitZ:focus{outline:none;}.css-fZMXzA{font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:14px;font-weight:normal;line-height:20px;position:relative;display:block;color:#A6A6A6;text-align:center;cursor:not-allowed;background-color:transparent;margin-bottom:0;padding-top:24px;padding-bottom:24px;padding-right:24px;padding-left:24px;}.css-gAzlNU{position:absolute;top:0;left:0;width:1px;height:1px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;margin-top:-1px;margin-right:-1px;margin-bottom:-1px;margin-left:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-width:0;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;}.css-eOLFUs{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-flex:0;flex-grow:0;flex-shrink:0;flex-basis:auto;padding-left:24px;padding-right:24px;justify-self:flex-end;-webkit-box-pack:end;justify-content:flex-end;list-style:none;margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.css-eOLFUs:first-child{padding:0;}.css-eOLFUs:last-child{padding:0;}.css-kvlyqw{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;border-left-width:0;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-style:none;border-top-style:none;border-right-style:none;border-bottom-style:none;outline:none;box-sizing:border-box;box-shadow:none;text-decoration:none;-webkit-appearance:none;-webkit-transition-property:background;-moz-transition-property:background;transition-property:background;transition-duration:200ms;transition-timing-function:cubic-bezier(0, 0, 1, 1);cursor:pointer;margin-left:0;margin-top:0;margin-right:0;margin-bottom:0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:14px;font-weight:500;line-height:16px;border-top-right-radius:999px;border-bottom-right-radius:999px;border-top-left-radius:999px;border-bottom-left-radius:999px;padding-top:10px;padding-bottom:10px;padding-left:12px;padding-right:12px;color:#FFFFFF;background-color:#000000;overflow:hidden;position:relative;}.css-kvlyqw:disabled{cursor:not-allowed;background-color:#F3F3F3;color:#A6A6A6;}.css-kvlyqw:focus-visible{box-shadow:inset 0 0 0 2px #FFFFFF, 0 0 0 2px #276EF1 ;}@media (hover: hover){.css-kvlyqw:hover{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.1) ;}}.css-kvlyqw:active{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.2) ;}.css-kvlyqw::before{background:-webkit-linear-gradient(to bottom right, #CBCBCB, #E2E2E2 50%, #CBCBCB) no-repeat;background:-moz-linear-gradient(to bottom right, #CBCBCB, #E2E2E2 50%, #CBCBCB) no-repeat;background:linear-gradient(to bottom right, #CBCBCB, #E2E2E2 50%, #CBCBCB) no-repeat;bottom:0;content:"";left:0;position:absolute;right:0;top:0;}.css-dmqvLf{-ms-grid-row-align:center;align-self:center;padding-left:0;margin-bottom:0;visibility:inherit;}@media screen and (min-width: 320px){.css-dmqvLf{padding-right:4px;}}@media screen and (min-width: 600px){.css-dmqvLf{padding-right:4px;}}@media screen and (min-width: 1136px){.css-dmqvLf{padding-right:0;}}.css-hFtqPc{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;border-left-width:0;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-style:none;border-top-style:none;border-right-style:none;border-bottom-style:none;outline:none;box-sizing:border-box;box-shadow:none;text-decoration:none;-webkit-appearance:none;-webkit-transition-property:background;-moz-transition-property:background;transition-property:background;transition-duration:200ms;transition-timing-function:cubic-bezier(0, 0, 1, 1);cursor:pointer;margin-left:0;margin-top:0;margin-right:0;margin-bottom:0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:14px;font-weight:500;line-height:16px;border-top-right-radius:999px;border-bottom-right-radius:999px;border-top-left-radius:999px;border-bottom-left-radius:999px;padding-top:10px;padding-bottom:10px;padding-left:12px;padding-right:12px;color:#000000;background-color:#FFFFFF;white-space:nowrap;overflow:hidden;position:relative;}.css-hFtqPc:disabled{cursor:not-allowed;background-color:#F3F3F3;color:#A6A6A6;}.css-hFtqPc:focus-visible{box-shadow:inset 0 0 0 2px #FFFFFF, 0 0 0 2px #276EF1 ;}@media (hover: hover){.css-hFtqPc:hover{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.1) ;}}.css-hFtqPc:active{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.2) ;}.css-hFtqPc:focus{background-color:#E2E2E2;color:#000000;}.css-hFtqPc:hover{background-color:#E2E2E2;color:#000000;}.css-hFtqPc::before{background:-webkit-linear-gradient(to bottom right, #CBCBCB, #E2E2E2 50%, #CBCBCB) no-repeat;background:-moz-linear-gradient(to bottom right, #CBCBCB, #E2E2E2 50%, #CBCBCB) no-repeat;background:linear-gradient(to bottom right, #CBCBCB, #E2E2E2 50%, #CBCBCB) no-repeat;bottom:0;content:"";left:0;position:absolute;right:0;top:0;}.css-gKOWma{background-color:#FFFFFF;border-radius:12px;box-shadow:0px 4px 16px rgba(0, 0, 0, 0.12);list-style-type:none;margin:0;padding:8px;}.css-GWCtH{padding:12px 16px;font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:20px;font-weight:700;line-height:28px;-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;gap:24px;-webkit-box-pack:justify;justify-content:space-between;}.css-daiOOU{width:16px;}.css-iacIfU{color:#000000;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:inherit;font-weight:500;line-height:inherit;-webkit-transition-property:backgroundSize;-moz-transition-property:backgroundSize;transition-property:backgroundSize;transition-duration:500ms;transition-timing-function:cubic-bezier(0.22, 1, 0.36, 1);text-decoration:none;text-underline-position:under;will-change:background-size;background-size:0% 100%, 100% 100%;background-repeat:no-repeat;background-image:none;border-radius:4px;display:block;}.css-iacIfU:hover{color:#4B4B4B;background-size:100% 100%, 100% 100%;}.css-iacIfU:focus{outline:none;outline-offset:1px;text-decoration:none;}.css-iacIfU:visited{color:#000000;}.css-iacIfU:active{color:#5E5E5E;}.css-iacIfU:focus:not(:focus-visible){outline:none;}.css-iacIfU:focus-visible{outline:3px solid #276EF1;outline-offset:2px;}.css-bjVkCt{box-sizing:border-box;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:justify;justify-content:space-between;margin-left:auto;margin-right:auto;max-width:calc(1280px + 24px*2);padding-left:24px;padding-right:24px;width:100%;}.css-jaByka{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-flex:0;flex-grow:0;flex-shrink:0;flex-basis:auto;padding-left:24px;padding-right:24px;justify-self:flex-end;-webkit-box-pack:end;justify-content:flex-end;list-style:none;margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;transform:translateX(14px);}.css-jaByka:first-child{padding:0;}.css-jaByka:last-child{padding:0;}.css-bolAuU{-ms-grid-row-align:center;align-self:center;padding-left:0;margin-bottom:0;visibility:inherit;padding-right:0;}.css-daInXa{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;border-left-width:0;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-style:none;border-top-style:none;border-right-style:none;border-bottom-style:none;outline:none;box-sizing:border-box;box-shadow:none;text-decoration:none;-webkit-appearance:none;-webkit-transition-property:background;-moz-transition-property:background;transition-property:background;transition-duration:200ms;transition-timing-function:cubic-bezier(0, 0, 1, 1);cursor:pointer;margin-left:0;margin-top:0;margin-right:0;margin-bottom:0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:14px;font-weight:500;line-height:16px;border-top-right-radius:50%;border-bottom-right-radius:50%;border-top-left-radius:50%;border-bottom-left-radius:50%;padding-top:10px;padding-bottom:10px;padding-left:10px;padding-right:10px;color:#FFFFFF;background-color:#000000;}.css-daInXa:disabled{cursor:not-allowed;background-color:#F3F3F3;color:#A6A6A6;}.css-daInXa:focus-visible{box-shadow:inset 0 0 0 2px #FFFFFF, 0 0 0 2px #276EF1 ;}@media (hover: hover){.css-daInXa:hover{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.1) ;}}.css-daInXa:active{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.2) ;}.css-fVLpfI{color:#000000;background-color:#FFFFFF;padding-top:40px;padding-right:24px;padding-bottom:40px;padding-left:24px;}@media screen and (min-width: 320px){.css-fVLpfI{padding-top:40px;padding-right:24px;padding-bottom:40px;padding-left:24px;}}@media screen and (min-width: 600px){.css-fVLpfI{padding-top:56px;padding-right:32px;padding-bottom:56px;padding-left:32px;}}@media screen and (min-width: 1136px){.css-fVLpfI{padding-top:64px;padding-right:64px;padding-bottom:64px;padding-left:64px;}}.css-bnsMK{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;order:0;width:100%;-ms-grid-row-align:center;align-self:center;display:-ms-grid;display:grid;}@media screen and (min-width: 320px){.css-bnsMK{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;}}@media screen and (min-width: 600px){.css-bnsMK{-ms-grid-column:2;-ms-grid-column-span:-4;grid-column:2 / -2;}}@media screen and (min-width: 1136px){.css-bnsMK{-ms-grid-column:3;-ms-grid-column-span:-6;grid-column:3 / -3;}}.css-jOhJVe{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:center;justify-content:center;width:100%;}.css-jgmlEN{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-flex:1;flex-grow:1;-webkit-box-pack:start;justify-content:start;width:100%;}@media screen and (min-width: 1136px){.css-jgmlEN{-webkit-box-pack:start;justify-content:flex-start;}}.css-cjHYHA{margin:4px;min-width:128px;}.css-iXmjNW{display:none;}@media screen and (min-width: 1136px){.css-iXmjNW{display:-ms-grid;display:grid;grid-column:span 1;}}.css-hBnhgZ{background-color:#000000;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;position:relative;width:100%;height:auto;min-height:auto;max-height:auto;margin:0 auto;padding-top:0;padding-bottom:0;}@media screen and (min-width: 320px){.css-hBnhgZ{padding-top:0;padding-bottom:0;}}@media screen and (min-width: 600px){.css-hBnhgZ{padding-top:0;padding-bottom:0;}}@media screen and (min-width: 1136px){.css-hBnhgZ{padding-top:0;padding-bottom:0;}}.css-dODCLc{align-self:flex-start;width:100%;max-width:100%;padding-top:40px;padding-right:24px;padding-bottom:40px;padding-left:24px;}@media screen and (min-width: 320px){.css-dODCLc{max-width:100%;padding-top:40px;padding-right:24px;padding-bottom:40px;padding-left:24px;}}@media screen and (min-width: 600px){.css-dODCLc{max-width:100%;padding-top:56px;padding-right:32px;padding-bottom:56px;padding-left:32px;}}@media screen and (min-width: 1136px){.css-dODCLc{max-width:1152px;padding-top:64px;padding-right:64px;padding-bottom:64px;padding-left:64px;}}.css-HXvWP{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;order:0;width:100%;-ms-grid-row-align:center;align-self:center;display:-ms-grid;display:grid;}.css-rjIkq{grid-column:span 12;order:0;width:100%;-ms-grid-row-align:center;align-self:center;display:-ms-grid;display:grid;}@media screen and (min-width: 320px){.css-rjIkq{grid-column:span 12;}}@media screen and (min-width: 600px){.css-rjIkq{grid-column:span 8;}}.css-dmEOyR{color:#FFFFFF;font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:20px;font-weight:400;line-height:112px;-webkit-transition-property:backgroundSize;-moz-transition-property:backgroundSize;transition-property:backgroundSize;transition-duration:500ms;transition-timing-function:cubic-bezier(0.22, 1, 0.36, 1);position:relative;text-decoration:none;text-underline-position:under;will-change:background-size;background-size:0% 100%, 100% 100%;background-repeat:no-repeat;background-image:none;-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;height:100%;text-align:left;top:0;white-space:nowrap;}.css-dmEOyR:hover{color:#FFFFFF;background-size:100% 100%, 100% 100%;}.css-dmEOyR:focus{outline:3px solid #276EF1;outline-offset:1px;text-decoration:none;}.css-dmEOyR:visited{color:#FFFFFF;}.css-dmEOyR:active{color:#FFFFFF;}@media screen and (min-width: 1136px){.css-dmEOyR{font-size:24px;}}.css-iBZTkJ{color:#FFFFFF;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:inherit;font-weight:400;line-height:1;-webkit-transition-property:backgroundSize;-moz-transition-property:backgroundSize;transition-property:backgroundSize;transition-duration:500ms;transition-timing-function:cubic-bezier(0.22, 1, 0.36, 1);position:relative;text-decoration:none;text-underline-position:under;will-change:background-size;background-size:0% 100%, 100% 100%;background-repeat:no-repeat;background-image:none;display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;height:100%;margin-bottom:0;top:0;}.css-iBZTkJ:hover{color:#FFFFFF;background-size:100% 100%, 100% 100%;}.css-iBZTkJ:focus{outline:3px solid #276EF1;outline-offset:1px;text-decoration:none;color:#FFFFFF;}.css-iBZTkJ:visited{color:#FFFFFF;}.css-iBZTkJ:active{color:#5E5E5E;}@media screen and (min-width: 1136px){.css-iBZTkJ{margin-bottom:48px;}}.css-AnBpG{color:inherit;margin-bottom:0;margin-top:0;padding-bottom:2px;position:relative;}.css-AnBpG:focus:after{background:#FFFFFF;bottom:0;color:#FFFFFF;content:'';height:1px;left:0;position:absolute;right:0;width:100%;}.css-AnBpG:hover:after{background:#FFFFFF;bottom:0;color:#FFFFFF;content:'';height:1px;left:0;position:absolute;right:0;width:100%;}.css-bYGJej{grid-column:span 12;height:100%;}@media screen and (min-width: 320px){.css-bYGJej{grid-column:span 12;}}@media screen and (min-width: 600px){.css-bYGJej{grid-column:span 4;}}.css-cDWyiW{list-style-type:none;margin:0;-webkit-padding-start:0;-moz-padding-start:0;padding-inline-start:0;padding-left:0;}.css-efdIWD{-webkit-box-align:start;align-items:flex-start;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;grid-auto-flow:row;grid-column:span 3;width:100%;}.css-hCxyXn{margin-bottom:16px;}.css-dQXoUy{color:#FFFFFF;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:500;font-size:18px;line-height:24px;margin-bottom:20px;}.css-huebvm{color:#FFFFFF;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:inherit;font-weight:500;line-height:inherit;-webkit-transition-property:backgroundSize;-moz-transition-property:backgroundSize;transition-property:backgroundSize;transition-duration:500ms;transition-timing-function:cubic-bezier(0.22, 1, 0.36, 1);text-decoration:none;text-underline-position:under;will-change:background-size;background-size:0% 100%, 100% 100%;background-repeat:no-repeat;background-image:none;cursor:pointer;display:block;margin-bottom:16px;margin-top:0;padding-top:0;}.css-huebvm:hover{color:#AFAFAF;background-size:100% 100%, 100% 100%;text-decoration:none;}.css-huebvm:focus{outline:none;outline-offset:1px;text-decoration:none;}.css-huebvm:visited{color:#FFFFFF;text-decoration:none;}.css-huebvm:active{color:#5E5E5E;}.css-huebvm:focus:not(:focus-visible){outline:none;}.css-huebvm:focus-visible{color:#AFAFAF;outline:3px solid #276EF1;text-decoration:none;}.css-ekbqzf{color:inherit;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:normal;font-size:14px;line-height:20px;margin-top:0;margin-bottom:0;}.css-FvMyi{display:-ms-grid;display:grid;grid-auto-flow:column;grid-column:span 6;-webkit-box-pack:left;justify-content:left;justify-items:start;list-style-type:none;margin:0;padding-bottom:12px;padding-left:0;padding-top:12px;transform:translateX(-12px);}.css-lfhXcE{display:-ms-grid;display:grid;grid-auto-flow:row;-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;-webkit-box-pack:left;justify-content:left;justify-items:start;list-style-type:none;margin:0;padding-left:0;transform:translateX(-12px);width:100%;}@media screen and (min-width: 1136px){.css-lfhXcE{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;grid-auto-flow:column;grid-column:span 6;-webkit-box-pack:end;justify-content:end;}}.css-fdGxkK{display:-ms-grid;display:grid;grid-auto-flow:column;grid-column:span 6;width:100%;}.css-cLYIms{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;border-left-width:0;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-style:none;border-top-style:none;border-right-style:none;border-bottom-style:none;outline:none;box-sizing:border-box;box-shadow:none;text-decoration:none;-webkit-appearance:none;-webkit-transition-property:background;-moz-transition-property:background;transition-property:background;transition-duration:200ms;transition-timing-function:cubic-bezier(0, 0, 1, 1);cursor:pointer;margin-left:0;margin-top:0;margin-right:0;margin-bottom:0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:16px;font-weight:500;line-height:20px;border-top-right-radius:8px;border-bottom-right-radius:8px;border-top-left-radius:8px;border-bottom-left-radius:8px;padding-top:0;padding-bottom:0;padding-left:0;padding-right:0;color:#FFFFFF;background-color:#000000;height:48px;width:48px;}.css-cLYIms:disabled{cursor:not-allowed;background-color:#F3F3F3;color:#A6A6A6;}.css-cLYIms:focus-visible{box-shadow:inset 0 0 0 2px #FFFFFF, 0 0 0 2px #276EF1 ;}@media (hover: hover){.css-cLYIms:hover{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.1) ;}}.css-cLYIms:active{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.2) ;}.css-fOpIi{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;border-left-width:0;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-style:none;border-top-style:none;border-right-style:none;border-bottom-style:none;outline:none;box-sizing:border-box;box-shadow:none;text-decoration:none;-webkit-appearance:none;-webkit-transition-property:background;-moz-transition-property:background;transition-property:background;transition-duration:200ms;transition-timing-function:cubic-bezier(0, 0, 1, 1);cursor:pointer;margin-left:0;margin-top:0;margin-right:0;margin-bottom:0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:14px;font-weight:500;line-height:16px;border-top-right-radius:8px;border-bottom-right-radius:8px;border-top-left-radius:8px;border-bottom-left-radius:8px;padding-top:10px;padding-bottom:10px;padding-left:12px;padding-right:12px;color:#FFFFFF;background-color:#000000;}.css-fOpIi:disabled{cursor:not-allowed;background-color:#F3F3F3;color:#A6A6A6;}.css-fOpIi:focus-visible{box-shadow:inset 0 0 0 2px #FFFFFF, 0 0 0 2px #276EF1 ;}@media (hover: hover){.css-fOpIi:hover{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.1) ;}}.css-fOpIi:active{box-shadow:inset 999px 999px 0px rgba(255, 255, 255, 0.2) ;}.css-dLzUvf{color:#000000;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:inherit;font-weight:500;line-height:inherit;-webkit-transition-property:backgroundSize;-moz-transition-property:backgroundSize;transition-property:backgroundSize;transition-duration:500ms;transition-timing-function:cubic-bezier(0.22, 1, 0.36, 1);text-decoration:underline;text-underline-position:under;will-change:background-size;background-size:0% 100%, 100% 100%;background-repeat:no-repeat;background-image:none;}.css-dLzUvf:hover{color:#4B4B4B;background-size:100% 100%, 100% 100%;}.css-dLzUvf:focus{outline:none;outline-offset:1px;text-decoration:none;}.css-dLzUvf:visited{color:#727272;}.css-dLzUvf:active{color:#5E5E5E;}.css-gzlAMi{grid-column:span 3;order:0;width:100%;-ms-grid-row-align:center;align-self:center;display:-ms-grid;display:grid;}.css-dKvrsS{color:#AFAFAF;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:normal;font-size:12px;line-height:20px;}.css-gBmvBw{grid-column:span 5;order:0;width:100%;-ms-grid-row-align:center;align-self:center;display:-ms-grid;display:grid;}.css-rwapI{display:-ms-grid;display:grid;grid-auto-flow:column;-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;list-style-type:none;margin:0;padding-left:0;}@media screen and (min-width: 1136px){.css-rwapI{grid-gap:32px;-webkit-box-pack:end;justify-content:end;}}.css-xdbDk{color:#AFAFAF;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:inherit;font-weight:500;line-height:inherit;-webkit-transition-property:backgroundSize;-moz-transition-property:backgroundSize;transition-property:backgroundSize;transition-duration:500ms;transition-timing-function:cubic-bezier(0.22, 1, 0.36, 1);text-decoration:none;text-underline-position:under;will-change:background-size;background-size:0% 100%, 100% 100%;background-repeat:no-repeat;background-image:none;cursor:pointer;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;margin-bottom:16px;}.css-xdbDk:hover{color:#FFFFFF;background-size:100% 100%, 100% 100%;}.css-xdbDk:focus{outline:3px solid #276EF1;outline-offset:1px;text-decoration:none;}.css-xdbDk:visited{color:#727272;}.css-xdbDk:active{color:#5E5E5E;}.css-dtzAnt{color:inherit;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:normal;font-size:12px;line-height:20px;margin-top:0;margin-bottom:0;}.css-kghkUG{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:center;justify-content:center;}.css-dhEXXW{-webkit-box-align:center;align-items:center;display:-ms-grid;display:grid;gap:16px;-webkit-box-pack:center;justify-content:center;width:100%;}@media screen and (min-width: 1136px){.css-dhEXXW{gap:24px;}}.css-hJZDgX{color:#000000;background-color:#FFFFFF;padding-top:40px;padding-right:24px;padding-bottom:0;padding-left:24px;}@media screen and (min-width: 320px){.css-hJZDgX{padding-top:40px;padding-right:24px;padding-bottom:0;padding-left:24px;}}@media screen and (min-width: 600px){.css-hJZDgX{padding-top:56px;padding-right:32px;padding-bottom:0;padding-left:32px;}}@media screen and (min-width: 1136px){.css-hJZDgX{padding-top:64px;padding-right:64px;padding-bottom:0;padding-left:64px;}}.css-cGUJPV{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;order:0;width:100%;-ms-grid-row-align:center;align-self:center;display:-ms-grid;display:grid;-webkit-box-align:center;align-items:center;gap:24px;}@media screen and (min-width: 600px){.css-cGUJPV{gap:36px;}}@media screen and (min-width: 1136px){.css-cGUJPV{gap:64px;}}.css-lWKHs{margin:0 auto;}.css-dZTBoz{color:#000000;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:500;font-size:18px;line-height:24px;}.css-bUfMjo{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:36px;font-weight:700;line-height:44px;margin:0;text-align:center;}@media screen and (min-width: 600px){.css-bUfMjo{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:36px;font-weight:700;line-height:44px;}}@media screen and (min-width: 1136px){.css-bUfMjo{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:52px;font-weight:700;line-height:64px;}}.css-drdOnW{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-lines:multiple;flex-wrap:wrap;gap:16px;-webkit-box-pack:center;justify-content:center;}.css-hTBogS{-webkit-box-align:center;align-items:center;background-color:#E8E8E8;border-radius:192px;color:#000000;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;font-size:14px;font-weight:normal;height:36px;-webkit-box-pack:center;justify-content:center;min-width:36px;width:36px;}.css-uPqSX{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-pack:justify;justify-content:space-between;padding-left:16px;padding-right:16px;}.css-kZqllj{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;gap:16px;}.css-ekKYDj{-webkit-box-align:start;align-items:flex-start;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:2px;-webkit-box-pack:center;justify-content:center;}.css-jQOKxw{background-color:#000000;border-top-left-radius:50%;border-top-right-radius:50%;border-bottom-right-radius:50%;border-bottom-left-radius:50%;box-sizing:border-box;display:inline-block;height:40px;width:40px;}.css-cxExNw{border-top-left-radius:50%;border-top-right-radius:50%;border-bottom-right-radius:50%;border-bottom-left-radius:50%;box-sizing:border-box;display:none;height:40px;width:40px;object-fit:cover;}.css-cKXFfR{font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:16px;font-weight:normal;line-height:24px;color:#FFFFFF;-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:center;justify-content:center;height:100%;}.css-eTbQd{color:#000000;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:500;font-size:16px;line-height:20px;}.css-bdRVnM{aspect-ratio:auto 3965/2974;max-width:1312px;width:100%;}.css-etAiCK{display:block;height:100%;transform:scaleX(1);width:100%;object-fit:cover;}.css-dHTgDT{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:8px;position:relative;}.css-boSGMR{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;gap:6px;position:relative;}.css-fcoWDR{color:#5E5E5E;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:500;font-size:18px;line-height:24px;}.css-gtGwaM{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;border-left-width:0;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-style:none;border-top-style:none;border-right-style:none;border-bottom-style:none;outline:none;box-sizing:border-box;box-shadow:none;text-decoration:none;-webkit-appearance:none;-webkit-transition-property:background;-moz-transition-property:background;transition-property:background;transition-duration:200ms;transition-timing-function:cubic-bezier(0, 0, 1, 1);cursor:pointer;margin-left:0;margin-top:0;margin-right:0;margin-bottom:0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:12px;font-weight:500;line-height:16px;border-top-right-radius:50%;border-bottom-right-radius:50%;border-top-left-radius:50%;border-bottom-left-radius:50%;padding-top:0;padding-bottom:0;padding-left:0;padding-right:0;color:#000000;background-color:#F3F3F3;height:40px;width:40px;padding:6px;}.css-gtGwaM:disabled{cursor:not-allowed;background-color:#F3F3F3;color:#A6A6A6;}.css-gtGwaM:focus-visible{box-shadow:inset 0 0 0 2px #FFFFFF, 0 0 0 2px #276EF1 ;}@media (hover: hover){.css-gtGwaM:hover{box-shadow:inset 999px 999px 0px rgba(0, 0, 0, 0.04) ;}}.css-gtGwaM:active{box-shadow:inset 999px 999px 0px rgba(0, 0, 0, 0.08) ;}.css-gtXpje{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;border-left-width:0;border-top-width:0;border-right-width:0;border-bottom-width:0;border-left-style:none;border-top-style:none;border-right-style:none;border-bottom-style:none;outline:none;box-sizing:border-box;box-shadow:none;text-decoration:none;-webkit-appearance:none;-webkit-transition-property:background;-moz-transition-property:background;transition-property:background;transition-duration:200ms;transition-timing-function:cubic-bezier(0, 0, 1, 1);cursor:pointer;margin-left:0;margin-top:0;margin-right:0;margin-bottom:0;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:12px;font-weight:500;line-height:16px;border-top-right-radius:50%;border-bottom-right-radius:50%;border-top-left-radius:50%;border-bottom-left-radius:50%;padding-top:0;padding-bottom:0;padding-left:0;padding-right:0;color:#000000;background-color:#F3F3F3;height:40px;width:40px;padding:8px;}.css-gtXpje:disabled{cursor:not-allowed;background-color:#F3F3F3;color:#A6A6A6;}.css-gtXpje:focus-visible{box-shadow:inset 0 0 0 2px #FFFFFF, 0 0 0 2px #276EF1 ;}@media (hover: hover){.css-gtXpje:hover{box-shadow:inset 999px 999px 0px rgba(0, 0, 0, 0.04) ;}}.css-gtXpje:active{box-shadow:inset 999px 999px 0px rgba(0, 0, 0, 0.08) ;}.css-hByTyl{margin-bottom:10px;}.css-kwWKra{-webkit-column-gap:36px;column-gap:36px;display:-ms-grid;display:grid;-ms-grid-columns:1fr;grid-template-columns:1fr;row-gap:16px;}@media screen and (min-width: 600px){.css-kwWKra{-ms-grid-columns:repeat(2, 1fr);grid-template-columns:repeat(2, 1fr);}}.css-Yerqw{background-color:#F3F3F3;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;position:relative;width:100%;height:auto;min-height:auto;max-height:auto;margin:0 auto;padding-top:0;padding-bottom:0;}@media screen and (min-width: 320px){.css-Yerqw{padding-top:0;padding-bottom:0;}}@media screen and (min-width: 600px){.css-Yerqw{padding-top:0;padding-bottom:0;}}@media screen and (min-width: 1136px){.css-Yerqw{padding-top:0;padding-bottom:0;}}.css-kHWzwv{color:#000000;background-color:#F3F3F3;padding-top:40px;padding-right:24px;padding-bottom:40px;padding-left:24px;}@media screen and (min-width: 320px){.css-kHWzwv{padding-top:40px;padding-right:24px;padding-bottom:40px;padding-left:24px;}}@media screen and (min-width: 600px){.css-kHWzwv{padding-top:56px;padding-right:32px;padding-bottom:56px;padding-left:32px;}}@media screen and (min-width: 1136px){.css-kHWzwv{padding-top:64px;padding-right:64px;padding-bottom:64px;padding-left:64px;}}.css-fLCWQY{-ms-grid-column:1;-ms-grid-column-span:-2;grid-column:1/-1;order:0;width:100%;-ms-grid-row-align:center;align-self:center;display:-ms-grid;display:grid;}@media screen and (min-width: 600px){.css-fLCWQY{-ms-grid-column:2;-ms-grid-column-span:-4;grid-column:2 / -2;}}@media screen and (min-width: 1136px){.css-fLCWQY{-ms-grid-column:3;-ms-grid-column-span:-6;grid-column:3 / -3;}}.css-ingCMH{color:#5E5E5E;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:700;font-size:16px;line-height:20px;margin:0;white-space:nowrap;}.css-cCDVuf{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:16px;}.css-czUDWs{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:4px;margin-bottom:16px;}.css-iclDxs{background-color:#000000;border-top-left-radius:50%;border-top-right-radius:50%;border-bottom-right-radius:50%;border-bottom-left-radius:50%;box-sizing:border-box;display:inline-block;height:64px;width:64px;}.css-eUNfLQ{border-top-left-radius:50%;border-top-right-radius:50%;border-bottom-right-radius:50%;border-bottom-left-radius:50%;box-sizing:border-box;display:none;height:64px;width:64px;object-fit:cover;}.css-eoiIol{color:#000000;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:700;font-size:18px;line-height:28px;margin:0;}.css-kVLeBt{color:#4B4B4B;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:normal;font-size:14px;line-height:20px;margin:0;}.css-gLZtvz{color:#000000;font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:normal;font-size:14px;line-height:20px;margin:0;}.css-dQDsac{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:20px;font-weight:700;line-height:28px;margin-bottom:24px;}@media screen and (min-width: 600px){.css-dQDsac{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:24px;font-weight:700;line-height:32px;}}.css-laJbgX{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-lines:multiple;flex-wrap:wrap;gap:6px;}.css-dahbuC{color:inherit;text-decoration:none;}.css-jgYIWw{font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:14px;font-weight:500;line-height:16px;-webkit-box-align:center;align-items:center;color:#175BCC;background-color:#EFF4FE;border-left-style:solid;border-right-style:solid;border-top-style:solid;border-bottom-style:solid;border-left-width:0;border-right-width:0;border-top-width:0;border-bottom-width:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;box-sizing:border-box;cursor:pointer;display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;height:24px;-webkit-box-pack:justify;justify-content:space-between;margin-top:5px;margin-bottom:5px;margin-left:5px;margin-right:5px;padding-top:4px;padding-bottom:4px;padding-left:6px;padding-right:6px;outline:none;margin:0;}.css-jAylDS{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:auto;order:0;}.css-gowlgP{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-lines:multiple;flex-wrap:wrap;gap:24px;-webkit-box-pack:justify;justify-content:space-between;margin-bottom:32px;}.css-fIxJXI{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:36px;font-weight:700;line-height:44px;}.css-jKvvYG{-webkit-box-align:end;align-items:flex-end;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-lines:multiple;flex-wrap:wrap;gap:16px;}.css-hxCswv{font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:18px;font-weight:normal;line-height:28px;}.css-fhseOM{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-lines:multiple;flex-wrap:wrap;gap:16px;}.css-dsWNMj{font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:18px;font-weight:normal;line-height:28px;text-wrap:nowrap;}.css-bzLBFK{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:24px;}.css-dtrVZw{display:-ms-grid;display:grid;gap:24px;-ms-grid-rows:repeat(2, 1fr);grid-template-rows:repeat(2, 1fr);width:100%;}@media screen and (min-width: 320px){.css-dtrVZw{-ms-grid-columns:repeat(1, 1fr);grid-template-columns:repeat(1, 1fr);}}@media screen and (min-width: 600px){.css-dtrVZw{-ms-grid-columns:repeat(2, 1fr);grid-template-columns:repeat(2, 1fr);}}@media screen and (min-width: 1136px){.css-dtrVZw{-ms-grid-columns:repeat(3, 1fr);grid-template-columns:repeat(3, 1fr);}}.css-iGtyFy{margin-bottom:64px;margin-top:64px;font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:24px;font-weight:700;line-height:32px;}.css-jODDvp{-webkit-box-align:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:center;justify-content:center;min-height:400px;width:100%;}.css-jJwUXi{border-radius:12px;cursor:pointer;overflow:hidden;position:relative;border-color:hsla(0, 0%, 0%, 0.08);border-style:solid;border-width:1px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;}.css-jJwUXi:hover div a{background-size:100% 1px;}.css-jJwUXi:hover div img{transform:scale(1.1);}.css-jJwUXi:nth-child(n) div img{-webkit-transition:400ms;-moz-transition:400ms;transition:400ms;}.css-kwNuyP{border-radius:12px;cursor:pointer;overflow:hidden;position:relative;border-color:hsla(0, 0%, 0%, 0.08);border-style:solid;border-width:1px;z-index:0;}.css-kwNuyP:hover div a{background-size:100% 1px;}.css-kwNuyP:hover div img{transform:scale(1.1);}.css-kwNuyP:nth-child(n) div img{-webkit-transition:400ms;-moz-transition:400ms;transition:400ms;}.css-jeuDjw{bottom:0;left:0;position:absolute;right:0;top:0;z-index:2;}.css-hxGQNi{bottom:0;left:0;position:absolute;z-index:1;}.css-bpyykn{background:-webkit-linear-gradient(0deg,rgba(0,0,0,0.8) 0%, rgba(0,0,0,0) 100%);background:-moz-linear-gradient(0deg,rgba(0,0,0,0.8) 0%, rgba(0,0,0,0) 100%);background:linear-gradient(0deg,rgba(0,0,0,0.8) 0%, rgba(0,0,0,0) 100%);bottom:0;height:100%;left:0;position:absolute;width:100%;z-index:1;}.css-cOsLzB{width:auto;height:auto;overflow:hidden;position:relative;}.css-cOsLzB::before{content:"";width:1px;margin-left:-1px;float:left;height:0;padding-top:66.66666666666667%;pointer-events:none;}.css-cOsLzB::after{content:"";display:table;clear:both;}.css-eleJdh{position:absolute;width:100%;top:0;bottom:0;}.css-fPItWk{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:10px;padding:16px;width:auto;}.css-lnzgHT{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;flex-flow:row wrap-reverse;gap:6px;max-height:24px;overflow:hidden;}.css-bfYiUy{font-family:UberMove, UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:28px;font-weight:700;line-height:36px;-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#FFFFFF;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;}.css-bGyOjB{font-family:UberMoveText, system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:16px;font-weight:normal;line-height:24px;color:#DDDDDD;}.css-gkIDnk{-webkit-box-decoration-break:clone;background-image:-webkit-linear-gradient(#FFFFFF, #FFFFFF);background-image:-moz-linear-gradient(#FFFFFF, #FFFFFF);background-image:linear-gradient(#FFFFFF, #FFFFFF);background-position:left bottom;background-repeat:no-repeat;background-size:0% 1px;color:inherit;text-decoration:none;-webkit-transition:400ms;-moz-transition:400ms;transition:400ms;}.css-bZnCM{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:160px;order:0;}</style><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-iP833FMI3Gbb8PIBNOY8aTsWI8/4EAzQk1sj2xnNWsZqhy+x0UjkT5HtEdVmzh4E">(function (){function __main__(t,e){var n=t&&t.safeUrlParams;if("undefined"!=typeof window&&(window.__SAFE_URL_PARAMS_CONFIG__=n||null),n&&"object"==typeof n){var r=function(){var t={};try{new URLSearchParams(window.location.search).forEach((function(e,n){t[n]=e}))}catch(t){}return t}();if(0!==Object.keys(r).length)if(i(),"undefined"!=typeof MutationObserver){var o=new MutationObserver((function(t){t.forEach((function(t){t.addedNodes.forEach((function(t){if(t.nodeType===Node.ELEMENT_NODE){"A"===t.tagName&&t.hasAttribute("href")&&a(t,r);var e=t.querySelectorAll&&t.querySelectorAll("a[href]");e&&e.forEach((function(t){a(t,r)}))}}))}))}));o.observe(document.documentElement,{childList:!0,subtree:!0}),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",(function(){o.disconnect()})):o.disconnect()}else"loading"===document.readyState&&document.addEventListener("DOMContentLoaded",i)}function a(t,e){try{var r=t.getAttribute("href");if(!r||r.startsWith("#")||r.startsWith("javascript:"))return;var o=new URL(r,window.location.origin),a=function(t){return t.startsWith("/")}(r),i=a?window.location.hostname:o.hostname,c=n[i];if(!c||!Array.isArray(c))return;var d=!1;c.forEach((function(t){e[t]&&(o.searchParams.set(t,e[t]),d=!0)})),d&&(a?t.setAttribute("href",o.pathname+o.search+o.hash):t.setAttribute("href",o.toString()))}catch(t){}}function i(){document.querySelectorAll("a[href]").forEach((function(t){a(t,r)}))}}
(function() {
try {
window['__script_safe-url-params-script_injected__'] = true;
var params = {"safeUrlParams":{"business.uber.com":["uber_client_name","name","countryiso2"],"auth.uber.com":["uber_client_name","name","countryiso2","userId","id","requestToken"],"www.uber.com":["uber_client_name","countryiso2","userId","id","requestToken"],"default":[],"drivers.uber.com":["invite_code"],"merchants.ubereats.com":["client_id","location_ids","brand_id","utm_campaign","user_id"],"earn-uberaisolutions.uber.com":["utm_source","jClickId","source"]}};
var beforeCallback = null;
var loadCallback = null;
var errorCallback = null;
function handleError(error) {
window['__script_safe-url-params-script_injected__'] = false;
if (errorCallback) {
try {
errorCallback({ name: 'safe-url-params-script', error: error });
} catch (cbErr) {
console.error('[script-injector] onScriptError callback failed:', cbErr);
}
}
if (window.__PRE_ANALYTICS__ && window.__PRE_ANALYTICS__.add) {
window.__PRE_ANALYTICS__.add({
name: 'script-injector:injection-failure',
payload: {
scriptName: 'safe-url-params-script',
error: error.message || String(error)
}
});
}
}
function executeScript(resolvedData) {
try {
var mergedData = Object.assign({}, resolvedData, params);
if (beforeCallback) {
try {
beforeCallback({ name: 'safe-url-params-script', script: 'safe-url-params-script' });
} catch (cbErr) {
console.error('[script-injector] beforeScriptLoad callback failed:', cbErr);
}
}
if (typeof __main__ === 'function') {
__main__(mergedData, 'safe-url-params-script');
}
if (loadCallback) {
try {
loadCallback({ name: 'safe-url-params-script', data: mergedData });
} catch (cbErr) {
console.error('[script-injector] onScriptLoad callback failed:', cbErr);
}
}
} catch (execError) {
handleError(execError);
}
}
executeScript({});
} catch (error) {
window['__script_safe-url-params-script_injected__'] = false;
if (window.__PRE_ANALYTICS__ && window.__PRE_ANALYTICS__.add) {
window.__PRE_ANALYTICS__.add({
name: 'script-injector:initialization-failure',
payload: {
scriptName: 'safe-url-params-script',
error: error.message || String(error)
}
});
}
}
})();
})();</script><style>
@font-face {
font-family: "Book";
font-display: fallback;
src: url("/_static/d9fefb2e7848440e.woff") format("woff"),url("/_static/c7d2487e86a01259.woff2") format("woff2");
}
@font-face {
font-family: "Medium";
font-display: fallback;
src: url("/_static/4a6ba14eeb82d398.woff") format("woff"),url("/_static/373acd359b809a36.woff2") format("woff2");
}
@font-face {
font-family: "NarrowBook";
font-display: fallback;
src: url("/_static/72265bee6edcde38.woff") format("woff"),url("/_static/4092f014767a0c42.woff2") format("woff2");
}
@font-face {
font-family: "NarrowMedium";
font-display: fallback;
src: url("/_static/3b7b2d393828f966.woff") format("woff"),url("/_static/d03e099b908c23f5.woff2") format("woff2");
}
@font-face {
font-family: "NarrowNews";
font-display: fallback;
src: url("/_static/d35e4f7be34dbdf1.woff") format("woff"),url("/_static/3ead8fe086dcc03b.woff2") format("woff2");
}
@font-face {
font-family: "NarrowThin";
font-display: fallback;
src: url("/_static/56bde4d6d985fd33.woff") format("woff"),url("/_static/22ff2ed7e89a1893.woff2") format("woff2");
}
@font-face {
font-family: "News";
font-display: fallback;
src: url("/_static/7dee2ff8254c25e7.woff") format("woff"),url("/_static/eaaab0415f3c894a.woff2") format("woff2");
}
@font-face {
font-family: "Thin";
font-display: fallback;
src: url("/_static/3bafb784fdbf1412.woff") format("woff"),url("/_static/4971a684a2006b0b.woff2") format("woff2");
}</style><script type="application/json" id="__FUSION_UNIVERSAL_VALUES__">
{}
</script><link rel="stylesheet" href="/_static/client-main-styles-f476fd9156cbdd17.css" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-nl5Zdd+Aou2VVqG026bDA21pyNJVm46/TZ6Dw7PTekdlgsbdE2IRk0SKV1VVA0X8" /><script nomodule nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-dwib240Wl9GZJv12nHHBWl4pWIb/hc4yrAa5HJ67msqG9iaMuvkARhg0Got7VT8M">(function() {var check = document.createElement('script');if (!('noModule' in check) && 'onbeforeload' in check) {var support = false;document.addEventListener('beforeload', function(e) {if (e.target === check) {support = true;} else if (!e.target.hasAttribute('nomodule') || !support) {return;}e.preventDefault();}, true);check.type = 'module';check.src = '.';document.head.appendChild(check);check.remove();}}());</script><link rel="modulepreload" href="/_static/client-main-88fe15495d448ccb.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-yODEj38Jhf/ZocCu8nzFbPqj3y5NCrmBFdLYhShumH2iki2oldeZgP2vQRTKy7Yi" as="script"/><link rel="modulepreload" href="/_static/client-vendor-673c886a6b0b9772.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-1Mhgkz8ySzKeD3DiCCcc0jQWYKoOyEXCML5u/YpWbmxcixU1+nSuGohSzcxrwH7Q" as="script"/><link rel="preload" href="/_static/client-main-styles-f476fd9156cbdd17.css" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-nl5Zdd+Aou2VVqG026bDA21pyNJVm46/TZ6Dw7PTekdlgsbdE2IRk0SKV1VVA0X8" as="style"/><link rel="modulepreload" href="/_static/client-2611-648968cf7df1e1c9.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-aCt18a0TdA9HKl6ISsUiY+JOd8SYeahBrXDFAn8peH4DyLeK3F/973UazqIlS3vy" as="script"/><link rel="modulepreload" href="/_static/client-9438-69ee1859c7af99a9.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-DqJP7imhmujPP0qFg/3wq1DvxiRmPd/ERVOZe7qdqW6XE85Cf02UB2LvH32gTpnJ" as="script"/><link rel="modulepreload" href="/_static/client-7729-8e3d16c04fffc39c.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-CF9Nq1+lQmSFKExsyM5IJSdJaUXRtO6PcElAxqJV1BId9JTUaJtn+jiMDw3jFD6e" as="script"/><link rel="modulepreload" href="/_static/client-6005-fdbb77498216622e.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-nn6leunJfJlCfpte1PsN5J3z2btTynUujNd4DabvB9xRc3R4QYaeh+uf6ahgNPbx" as="script"/><link rel="modulepreload" href="/_static/client-4337-a2dd27e4449ab96b.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-FsJ5paHV3/SLo9nDt6eM+6prjCHS/yzjDRwT4Cr8E417i+FgMlq/+CavlmR6OuQa" as="script"/><link rel="modulepreload" href="/_static/client-8510-5970d2315c017441.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-436hnUAdBdASvRRoklM09qy2EwzU15EId9pxtDHRRGt26jdoPDvQS0nc6rOLp260" as="script"/><link rel="modulepreload" href="/_static/client-1422-9643608eb5e4968c.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-N/dclRLQt/cQT8eJFcSNTkH4dgPQTozbM+2gJSWkqP3c0dnEslB0aaGxDMZDUZzs" as="script"/><link rel="modulepreload" href="/_static/client-runtime-e0408fcc926409a1.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-ggSy2kD/B2SCdJ2VRbEa32wy08rFHnJHfjEXmiRaOIqgsqHAIbYs970KHMwyDlgL" as="script"/><script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-mcK3UMVp0GUn5WkaTG0rgxbHY3UDoU6C8/r80o3FlUQXGMRs2w7QhIYdeigglv32">window.performance && window.performance.mark && window.performance.mark('firstRenderStart');__FUSION_ASSET_PATH__ = "/_static/";</script><script type="module" src="/_static/client-main-88fe15495d448ccb.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-yODEj38Jhf/ZocCu8nzFbPqj3y5NCrmBFdLYhShumH2iki2oldeZgP2vQRTKy7Yi" ></script><script type="module" src="/_static/client-vendor-673c886a6b0b9772.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-1Mhgkz8ySzKeD3DiCCcc0jQWYKoOyEXCML5u/YpWbmxcixU1+nSuGohSzcxrwH7Q" ></script><script type="module" src="/_static/client-2611-648968cf7df1e1c9.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-aCt18a0TdA9HKl6ISsUiY+JOd8SYeahBrXDFAn8peH4DyLeK3F/973UazqIlS3vy" ></script><script type="module" src="/_static/client-9438-69ee1859c7af99a9.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-DqJP7imhmujPP0qFg/3wq1DvxiRmPd/ERVOZe7qdqW6XE85Cf02UB2LvH32gTpnJ" ></script><script type="module" src="/_static/client-7729-8e3d16c04fffc39c.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-CF9Nq1+lQmSFKExsyM5IJSdJaUXRtO6PcElAxqJV1BId9JTUaJtn+jiMDw3jFD6e" ></script><script type="module" src="/_static/client-6005-fdbb77498216622e.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-nn6leunJfJlCfpte1PsN5J3z2btTynUujNd4DabvB9xRc3R4QYaeh+uf6ahgNPbx" ></script><script type="module" src="/_static/client-4337-a2dd27e4449ab96b.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-FsJ5paHV3/SLo9nDt6eM+6prjCHS/yzjDRwT4Cr8E417i+FgMlq/+CavlmR6OuQa" ></script><script type="module" src="/_static/client-8510-5970d2315c017441.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-436hnUAdBdASvRRoklM09qy2EwzU15EId9pxtDHRRGt26jdoPDvQS0nc6rOLp260" ></script><script type="module" src="/_static/client-1422-9643608eb5e4968c.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-N/dclRLQt/cQT8eJFcSNTkH4dgPQTozbM+2gJSWkqP3c0dnEslB0aaGxDMZDUZzs" ></script><script type="module" src="/_static/client-runtime-e0408fcc926409a1.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-ggSy2kD/B2SCdJ2VRbEa32wy08rFHnJHfjEXmiRaOIqgsqHAIbYs970KHMwyDlgL" ></script><script defer nomodule src="/_static/client-legacy-main-1411ebdccffd58c7.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-ux5DDUgR48oe8U9iJV2HcZegZTePz6nNTD5hI1YZYnpb4tO/oAfCIx1sEQD8AATa" ></script><script defer nomodule src="/_static/client-legacy-vendor-3de0c764dbe047ae.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-R6F2eqsaIYPf+jNHqCPgaeMX/C2vxXGeGc1+3wrRFyRHRCizsf5P6GSfBegNCXDq" ></script><script defer nomodule src="/_static/client-legacy-main-styles-f476fd9156cbdd17.css" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-nl5Zdd+Aou2VVqG026bDA21pyNJVm46/TZ6Dw7PTekdlgsbdE2IRk0SKV1VVA0X8" ></script><script defer nomodule src="/_static/client-legacy-legacy-1493-36e01a199ed6ce09.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-uVhFLrftFnJEWH0MUKUcYlPtXeMKIwLPy2V60QGTGrLm0TdiL/vGVY9Letp0oJkS" ></script><script defer nomodule src="/_static/client-legacy-legacy-7002-2208d0f4bbd06adc.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-XnoPOTSlqMZiTFg+LJtue/KZRJ9/8RbPooHRgaRZ8ZaILoMfJAsWdhDXiedu6cIm" ></script><script defer nomodule src="/_static/client-legacy-legacy-4631-fda9be9ef073ff64.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-dVfZ1x2r87CXrmb2rhLU6n21LhRMyFbA04mt3Z8sCiT78/Hup/7dvIwnT/C9TP3j" ></script><script defer nomodule src="/_static/client-legacy-legacy-974-35726d3f083c769c.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-do9qCnE6USc3evZD27waiuDjCfUMLcZs2C5MVJQM+H3T/ndTmfwt/Xib12uHtD0f" ></script><script defer nomodule src="/_static/client-legacy-legacy-8965-03aa78b3d550c0d3.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-fd1BMR0WqUziFN4tG4uvIXH3Xma1DlYhFDSpszS+8baBDBCy/kt737mD5LAcIOEl" ></script><script defer nomodule src="/_static/client-legacy-legacy-8769-c676f1170417999e.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-ZbZky+e3F5XTbqh7npLhiQxB9/PzkpTzEyNhhxFev61Yrk01RlljB7Bp1BKP3+8Y" ></script><script defer nomodule src="/_static/client-legacy-legacy-414-6d670581e7ca5db2.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-edP11upF2UCG9YqI3Q5Qwne/gkiiccpVlD5xFv+UJ3TFhDmihpd5bmv8k/9K2euf" ></script><script defer nomodule src="/_static/client-legacy-runtime-470ecea55e50f133.js" nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-p922af8FVOr8B5eM6jLO/WJmoEcfabEy8Z8+P8vOy9SGGntNcEfaly10Wvucvu7j" ></script></head><body><div id="root"><div class="uwa-capture"><div class="css-bzyevI"><style>
html,body,#root{min-height:100%;}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);scroll-padding-top:64px;}
body{margin:0;}
html:not([data-tour-cta-eligible="true"]) a[href$="#tour-start"]{display:none !important;}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}
input::-webkit-inner-spin-button,input::-webkit-outer-spin-button,input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-webkit-search-results-button,input::-webkit-search-results-decoration{display:none;}
body:has(input[type="checkbox"]#hamburger-input:checked) {
overflow: hidden;
}
body:has(input[type="checkbox"]#hamburger-input:not(:checked)) {
overflow: auto;
}
</style><style>
@font-face {
font-family: 'UberMove';
src: url('https://tb-static.uber.com/prod/uber-static/UberMove-Light.woff2')
format('woff2'),
url('https://tb-static.uber.com/prod/uber-static/UberMove-Light.woff')
format('woff');
font-weight: 200;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'UberMove';
src: url('https://tb-static.uber.com/prod/uber-static/UberMove-Regular.woff2')
format('woff2'),
url('https://tb-static.uber.com/prod/uber-static/UberMove-Regular.woff')
format('woff');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'UberMove';
src: url('https://tb-static.uber.com/prod/uber-static/UberMove-Medium.woff2')
format('woff2'),
url('https://tb-static.uber.com/prod/uber-static/UberMove-Medium.woff')
format('woff');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'UberMove';
src: url('https://tb-static.uber.com/prod/uber-static/UberMove-Bold.woff2')
format('woff2'),
url('https://tb-static.uber.com/prod/uber-static/UberMove-Bold.woff')
format('woff');
font-weight: 600;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'UberMoveText';
src: url('https://tb-static.uber.com/prod/uber-static/UberMoveText-Light.woff2')
format('woff2'),
url('https://tb-static.uber.com/prod/uber-static/UberMoveText-Light.woff')
format('woff');
font-weight: 200;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'UberMoveText';
src: url('https://tb-static.uber.com/prod/uber-static/UberMoveText-Regular.woff2')
format('woff2'),
url('https://tb-static.uber.com/prod/uber-static/UberMoveText-Regular.woff')
format('woff');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'UberMoveText';
src: url('https://tb-static.uber.com/prod/uber-static/UberMoveText-Medium.woff2')
format('woff2'),
url('https://tb-static.uber.com/prod/uber-static/UberMoveText-Medium.woff')
format('woff');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'UberMoveText';
src: url('https://tb-static.uber.com/prod/uber-static/UberMoveText-Bold.woff2')
format('woff2'),
url('https://tb-static.uber.com/prod/uber-static/UberMoveText-Bold.woff')
format('woff');
font-weight: 600;
font-style: normal;
font-display: swap;
}
</style><div class="css-PKJb"><a href="#main" class="css-jcwfVM">Skip to main content</a><div>
<!--[if lte IE 9]>
<br>
<a href="#browser-happy" id="browser-happy" role="presentation" class=""><div>
<div style="color: #b4540b; margin: 0; padding: 24px; cursor: pointer;">
<div style="margin: 0; padding: 0; margin: 0 auto; max-width: 1032px; position: relative; ">
<div style="position: absolute; top: 0; right: 0;">×</div>
<h3 style="margin: 0 0 20px; padding: 0;">
Browser not supported
</h3>
<p style="margin: 0; padding: 0;">
This probably isn't the experience you were expecting. Internet Explorer isn't supported on Uber.com. Try switching to a different browser to view our site.
</p>
</div>
</div>
</div></a>
<![endif]-->
</div><main id="main" tabindex="-1"><div data-block-content-id="a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f" data-block-id="Navigation" style="display:inline" tabindex="-1"><div data-testid="responsive.visibility.wrapper" class="css-cenKGv"><div data-baseweb="block" data-testid="responsive-desktop-nav" class="css-hNYSyH"><span style="height:0;position:absolute;width:0" aria-hidden="true"></span><nav data-baseweb="header-navigation" role="navigation" class="css-esMPmm"><div class="css-hWkSKL" data-testid="nav-grid" tabindex="-1"><a data-baseweb="link" aria-label="Go to the Uber Blog" data-testid="wcb3-navigation-logo" href="https://www.uber.com/gb/en/blog/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_logo.link_cta27" class="css-bLZDAV">Uber Blog</a><ul data-testid="navigation-left-list-desktop" class="css-flFEmG"><li class="css-iJiqqk"><button data-baseweb="button" aria-label="Explore" aria-haspopup="menu" aria-expanded="false" class="css-lWgfA">Explore<div aria-hidden="true" class="css-cDENyl"><svg width="18" height="18" viewBox="0 0 24 24" fill="none"><path d="M18 8v3.8l-6 4.6-6-4.6V8l6 4.6L18 8Z" fill="currentColor"></path></svg></div></button><div class="css-hSgrkT"><div class="css-fXAxKR"><div class="css-lpcwSG"><div class="css-fRvJhN"><div class="css-boizeY"><img src="https://tb-static.uber.com/prod/udam-assets/b13c9264-0416-4e8f-bb02-737a108f36ae.svg" srcSet="https://tb-static.uber.com/prod/udam-assets/b13c9264-0416-4e8f-bb02-737a108f36ae.svg" alt="" aria-hidden="true" role="presentation" fetchpriority="high" class="css-ZwMiT"/></div><span class="css-kubgwy">Products</span></div><div class="css-jXIcbF"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/advertising/" target="_self" class="css-fwSNZL">Advertising<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Learn more about advertising on Uber. Reach customers as they go anywhere and get anything.</p></a><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/earn/" target="_self" class="css-fwSNZL">Earn<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Resources for driving and delivering with Uber</p></a><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/ride/" target="_self" class="css-fwSNZL">Ride<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Experiences and information for people on the go</p></a><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/eat/" aria-label="" target="_self" class="css-fwSNZL">Eat<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Ordering meals for delivery is just the start with Uber Eats</p></a><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/merchants/" target="_self" class="css-fwSNZL">Merchants<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Bringing stores within reach of a world of customers</p></a><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/business/" target="_self" class="css-fwSNZL">Business<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Transforming the way companies transport and feed their people</p></a><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/health/" target="_self" class="css-fwSNZL">Health<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Moving care forward together with healthcare providers</p></a><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/higher-education/" target="_self" class="css-fwSNZL">Higher Education<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Improving campus transport</p></a><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/transit/" target="_self" class="css-fwSNZL">Transit<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Expanding the reach of public transport</p></a></div></div><div class="css-lpcwSG"><div class="css-fRvJhN"><div class="css-boizeY"><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=24/height=24/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yNzk4ODM0OC0wY2JkLTRjNWMtYmUzYS1mNTMzZjQ4ZDAwNDcucG5n" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=24/height=24/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yNzk4ODM0OC0wY2JkLTRjNWMtYmUzYS1mNTMzZjQ4ZDAwNDcucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=48/height=48/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yNzk4ODM0OC0wY2JkLTRjNWMtYmUzYS1mNTMzZjQ4ZDAwNDcucG5n 2x" alt="" aria-hidden="true" role="presentation" fetchpriority="high" class="css-ZwMiT"/></div><span class="css-kubgwy">Company</span></div><div class="css-iwUWAj"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/engineering/" target="_self" class="css-fwSNZL">Engineering<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">The technology behind Uber Engineering</p></a><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/community-support/" target="_self" class="css-fwSNZL">Community support<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Doing the right thing for cities and communities worldwide</p></a><a data-baseweb="link" href="https://www.uber.com/gb/en/newsroom/" target="_self" class="css-fwSNZL">Newsroom<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Uber news and updates in your country</p></a><a data-baseweb="link" href="https://www.uber.com/gb/en/" target="_self" class="css-fwSNZL">Uber.com<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Product, how-to, and policy content—and more</p></a></div></div></div></div></li><li data-testid="more-link-desktop" class="css-eKMvCJ"><button data-baseweb="button" aria-label="More" href="" aria-haspopup="menu" aria-expanded="false" class="css-lWgfA">More<div aria-hidden="true" class="css-cDENyl"><svg width="18" height="18" viewBox="0 0 24 24" fill="white"><path d="M18 8v3.8l-6 4.6-6-4.6V8l6 4.6L18 8Z" fill="currentColor"></path></svg></div></button><div class="css-hSgrkT"><ul role="menu" aria-label="Navigation menu" tabindex="0" data-baseweb="menu" class="css-dluitZ"><li role="status" aria-live="polite" aria-atomic="true" class="css-fZMXzA">No results</li></ul><div role="status" aria-live="polite" aria-atomic="true" class="css-gAzlNU"></div><span></span></div></li></ul><ul class="css-eOLFUs"><li class="css-iJiqqk"><button data-baseweb="button" aria-label="Change language" aria-expanded="false" aria-haspopup="menu" class="css-lWgfA"><div aria-hidden="true" class="css-hdjfHk"><svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M12 1C5.9 1 1 5.9 1 12s4.9 11 11 11 11-4.9 11-11S18.1 1 12 1Zm8 11c0 .7-.1 1.4-.3 2-.6-1.5-1.6-3.1-3-4.7l1.8-1.8c1 1.3 1.5 2.8 1.5 4.5ZM6.5 6.5c1.3 0 3.6.8 6 2.9l-3.2 3.2C7.1 9.8 6.5 7.5 6.5 6.5Zm8.1 5c2.3 2.7 2.9 5 2.9 6-1.3 0-3.6-.8-6-2.9l3.1-3.1Zm1.9-6.1-1.9 1.9c-1.6-1.4-3.2-2.4-4.7-3 .7-.2 1.3-.3 2-.3 1.8 0 3.3.5 4.6 1.4ZM4 12c0-.7.1-1.4.3-2 .6 1.5 1.6 3.1 3 4.7l-1.8 1.8C4.5 15.2 4 13.7 4 12Zm3.5 6.6 1.9-1.9c1.6 1.4 3.2 2.4 4.7 3-.7.2-1.3.3-2 .3-1.8 0-3.3-.5-4.6-1.4Z" fill="currentColor"></path></svg></div>EN</button></li><li class="css-iJiqqk"><a data-baseweb="button" aria-label="Help" href="https://help.uber.com/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_additionalCta.link_cta1" class="css-lWgfA">Help</a></li><li class="css-iJiqqk"><a data-baseweb="button" aria-label="Log in to your Uber account" data-testid="wcb3-navigation-login" href="https://auth.uber.com/login-redirect?next_url=https://www.uber.com" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_login.link_cta26" class="css-kvlyqw">Log in</a></li><li class="css-dmqvLf"><button data-baseweb="button" aria-label="Sign up to ride, drive, and receive delivery" aria-expanded="false" aria-haspopup="menu" class="css-hFtqPc">Sign up</button><div class="css-hSgrkT"><ul class="css-gKOWma"><li><a data-baseweb="link" href="https://m.uber.com/looking/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[0].link_cta2" class="css-iacIfU"><div class="css-GWCtH">Ride<div class="css-daiOOU"><img alt="" class="css-kpjDOI" loading="lazy" src="https://tb-static.uber.com/prod/udam-assets/80bb7bdd-6cf4-4053-94c5-2e4e53d9d5f6.svg" aria-hidden="true"/></div></div></a></li><li><a data-baseweb="link" aria-label="" href="https://drivers.uber.com/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[1].link_cta3" class="css-iacIfU"><div class="css-GWCtH">Drive &amp; deliver<div class="css-daiOOU"><img alt="" class="css-kpjDOI" loading="lazy" src="https://tb-static.uber.com/prod/udam-assets/d4ca3837-f9df-473b-9099-85505187cb2a.svg" aria-hidden="true"/></div></div></a></li><li><a data-baseweb="link" href="https://ubereats.com/login-redirect/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[2].link_cta4" class="css-iacIfU"><div class="css-GWCtH">Uber Eats<div class="css-daiOOU"><img alt="" class="css-kpjDOI" loading="lazy" src="https://tb-static.uber.com/prod/udam-assets/839bd4f4-306c-4b1b-b0e8-ab9cc8fd65c7.svg" aria-hidden="true"/></div></div></a></li><li><a data-baseweb="link" href="https://business.uber.com/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[3].link_cta5" class="css-iacIfU"><div class="css-GWCtH">Business<div class="css-daiOOU"><img alt="" class="css-kpjDOI" loading="lazy" src="https://tb-static.uber.com/prod/udam-assets/0d73ead7-7739-4bb3-b79b-ded048dba1e1.svg" aria-hidden="true"/></div></div></a></li></ul></div></li></ul></div></nav></div><div data-baseweb="block" data-testid="responsive-mobile-nav" class="css-UsIex"><span style="height:0;position:absolute;width:0" aria-hidden="true"></span><nav data-baseweb="header-navigation" role="navigation" class="css-esMPmm"><div class="css-bjVkCt" data-testid="nav-grid" tabindex="-1"><a data-baseweb="link" aria-label="Go to the Uber Blog" data-testid="wcb3-navigation-logo" href="https://www.uber.com/gb/en/blog/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_logo.link_cta27" class="css-bLZDAV">Uber Blog</a><ul class="css-jaByka"><li class="css-iJiqqk"><a data-baseweb="button" aria-label="Log in to your Uber account" data-testid="wcb3-navigation-login" href="https://auth.uber.com/login-redirect?next_url=https://www.uber.com" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_login.link_cta26" class="css-kvlyqw">Log in</a></li><li class="css-dmqvLf"><button data-baseweb="button" aria-label="Sign up to ride, drive, and receive delivery" aria-expanded="false" aria-haspopup="menu" class="css-hFtqPc">Sign up</button><div class="css-hSgrkT"><ul class="css-gKOWma"><li><a data-baseweb="link" href="https://m.uber.com/looking/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[0].link_cta2" class="css-iacIfU"><div class="css-GWCtH">Ride<div class="css-daiOOU"><img alt="" class="css-kpjDOI" loading="lazy" src="https://tb-static.uber.com/prod/udam-assets/80bb7bdd-6cf4-4053-94c5-2e4e53d9d5f6.svg" aria-hidden="true"/></div></div></a></li><li><a data-baseweb="link" aria-label="" href="https://drivers.uber.com/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[1].link_cta3" class="css-iacIfU"><div class="css-GWCtH">Drive &amp; deliver<div class="css-daiOOU"><img alt="" class="css-kpjDOI" loading="lazy" src="https://tb-static.uber.com/prod/udam-assets/d4ca3837-f9df-473b-9099-85505187cb2a.svg" aria-hidden="true"/></div></div></a></li><li><a data-baseweb="link" href="https://ubereats.com/login-redirect/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[2].link_cta4" class="css-iacIfU"><div class="css-GWCtH">Uber Eats<div class="css-daiOOU"><img alt="" class="css-kpjDOI" loading="lazy" src="https://tb-static.uber.com/prod/udam-assets/839bd4f4-306c-4b1b-b0e8-ab9cc8fd65c7.svg" aria-hidden="true"/></div></div></a></li><li><a data-baseweb="link" href="https://business.uber.com/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[3].link_cta5" class="css-iacIfU"><div class="css-GWCtH">Business<div class="css-daiOOU"><img alt="" class="css-kpjDOI" loading="lazy" src="https://tb-static.uber.com/prod/udam-assets/0d73ead7-7739-4bb3-b79b-ded048dba1e1.svg" aria-hidden="true"/></div></div></a></li></ul></div></li><li class="css-bolAuU"><button data-baseweb="button" aria-label="Menu" data-drawer="Explore" data-testid="wcb3-navigation-hamburger" class="css-daInXa"><svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M2 6h20v3H2V6Z" fill="currentColor"></path>,<path d="M2 15h20v3H2v-3Z" fill="currentColor"></path></svg></button></li></ul></div></nav></div></div></div><div data-block-content-id="0e0d93f9-6080-48cf-a67c-b44585b1ab78" data-block-id="ArticleHeader" style="display:inline" tabindex="-1"><div data-testid="responsive.visibility.wrapper" class="css-cenKGv"><section data-baseweb="block" class="css-gqcHgx"><div data-baseweb="block" class="css-hazmlH"><div data-baseweb="block" class="css-ofGld"><div data-baseweb="block" class="container-inner css-hJZDgX"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><div data-baseweb="block" class="css-cGUJPV"><div class="css-dhEXXW"><div data-baseweb="typo-labellarge" class="css-lWKHs css-dZTBoz">November 22, 2023</div><div class="css-jOhJVe"><h1 class="css-bUfMjo">Cinnamon: Using Century Old Tech to Build a Mean Load Shedder</h1></div><div class="css-kghkUG"><div class="css-drdOnW"><div class="css-uPqSX"><div class="css-kZqllj"><div aria-label="Timothy Smyth" role="img" data-baseweb="avatar" class="css-jQOKxw"><img alt="Timothy Smyth" class="css-cxExNw"/><div class="css-cKXFfR">TS</div></div><div class="css-ekKYDj"><div data-baseweb="typo-labelmedium" class="css-eTbQd">Timothy Smyth</div></div></div></div><div class="css-uPqSX"><div class="css-kZqllj"><div aria-label="Vladimir Gavrilenko" role="img" data-baseweb="avatar" class="css-jQOKxw"><img alt="Vladimir Gavrilenko" class="css-cxExNw"/><div class="css-cKXFfR">VG</div></div><div class="css-ekKYDj"><div data-baseweb="typo-labelmedium" class="css-eTbQd">Vladimir Gavrilenko</div></div></div></div><div class="css-uPqSX"><div class="css-kZqllj"><div aria-label="Jesper Lindstrom Nielsen" role="img" data-baseweb="avatar" class="css-jQOKxw"><img alt="Jesper Lindstrom Nielsen" class="css-cxExNw"/><div class="css-cKXFfR">JL</div></div><div class="css-ekKYDj"><div data-baseweb="typo-labelmedium" class="css-eTbQd">Jesper Lindstrom Nielsen</div></div></div></div><div class="css-hTBogS" data-testid="remaining-authors-count">1+</div></div></div></div><div class="css-jOhJVe" data-testid="hero-image-media"><div class="css-bdRVnM"><picture><source media="screen and (min-width: 1136px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1152/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hZjk1MTAwNS1jMWEwLTVhMDItODkxYy00NjNhZDA4ZDc1NzcuanBn, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=2304/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hZjk1MTAwNS1jMWEwLTVhMDItODkxYy00NjNhZDA4ZDc1NzcuanBn 2x"/><source media="screen and (min-width: 600px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1072/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hZjk1MTAwNS1jMWEwLTVhMDItODkxYy00NjNhZDA4ZDc1NzcuanBn, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=2144/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hZjk1MTAwNS1jMWEwLTVhMDItODkxYy00NjNhZDA4ZDc1NzcuanBn 2x"/><source media="screen and (min-width: 320px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=552/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hZjk1MTAwNS1jMWEwLTVhMDItODkxYy00NjNhZDA4ZDc1NzcuanBn, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1104/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hZjk1MTAwNS1jMWEwLTVhMDItODkxYy00NjNhZDA4ZDc1NzcuanBn 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=552/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hZjk1MTAwNS1jMWEwLTVhMDItODkxYy00NjNhZDA4ZDc1NzcuanBn" alt="Main-image-GettyImages-717354177.jpg" fetchpriority="high" loading="eager" class="css-etAiCK"/></picture></div></div><div class="css-dHTgDT" data-testid="social-share-links"><div data-baseweb="typo-labellarge" class="css-fcoWDR">Share this article</div><div class="css-boSGMR" data-testid="social-share-links-buttons"><button data-baseweb="button" title="Share via Facebook" class="css-gtGwaM"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" color="#000000"><title>Facebook</title><path d="M21.79 1H2.21C1.54 1 1 1.54 1 2.21v19.57c0 .68.54 1.22 1.21 1.22h10.54v-8.51H9.9v-3.33h2.86V8.71c0-2.84 1.74-4.39 4.27-4.39.85 0 1.71.04 2.56.13v2.97h-1.75c-1.38 0-1.65.65-1.65 1.62v2.12h3.3l-.43 3.33h-2.89V23h5.61c.67 0 1.21-.54 1.21-1.21V2.21C23 1.54 22.46 1 21.79 1Z" fill="currentColor"></path></svg></button><button data-baseweb="button" title="Share via LinkedIn" class="css-gtGwaM"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" color="#000000"><title>Linkedin</title><path d="M21.37 1H2.62C1.73 1 1 1.71 1 2.58v18.83c0 .88.73 1.59 1.62 1.59h18.75c.9 0 1.63-.71 1.63-1.59V2.58C23 1.71 22.27 1 21.37 1ZM7.53 19.75H4.26V9.25h3.27v10.5ZM5.89 7.81C4.85 7.81 4 6.96 4 5.92s.84-1.89 1.89-1.89c1.04 0 1.89.85 1.89 1.89.01 1.04-.84 1.89-1.89 1.89Zm13.86 11.94h-3.26v-5.1c0-1.22-.02-2.78-1.7-2.78-1.7 0-1.96 1.33-1.96 2.7v5.19H9.57V9.26h3.13v1.43h.04c.44-.83 1.5-1.7 3.09-1.7 3.3 0 3.91 2.17 3.91 5v5.76h.01Z" fill="currentColor"></path></svg></button><button data-baseweb="button" title="Share via X" class="css-gtGwaM"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" color="#000000"><title>X social</title><path d="M14.094 10.317 22.28 1H20.34l-7.11 8.088L7.557 1H1.01l8.583 12.231L1.01 23H2.95l7.503-8.543L16.446 23h6.546M3.649 2.432h2.978L20.34 21.639h-2.98" fill="currentColor"></path></svg></button><button data-baseweb="button" title="Copy link" class="css-gtXpje"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" color="#000000"><title>Link</title><path fill-rule="evenodd" clip-rule="evenodd" d="M16.5 1c1.7 0 3.3.6 4.6 1.9 2.5 2.5 2.5 6.7 0 9.2l-3 3c-1.3 1.3-2.9 1.9-4.6 1.9-1.7 0-3.3-.6-4.6-1.9l-1-1L10 12l1 1c.7.6 1.5 1 2.5 1s1.8-.3 2.5-1l1.5-1.5L19 10c1.4-1.4 1.4-3.6 0-5-.7-.6-1.5-1-2.5-1s-1.8.3-2.5 1l-.5.6c-.9-.4-2-.6-3-.6h-.7l2.1-2.1C13.2 1.6 14.8 1 16.5 1ZM10 19l.5-.6c.9.4 2 .6 3 .6h.7l-2.1 2.1C10.8 22.4 9.2 23 7.5 23c-1.7 0-3.3-.6-4.6-1.9-2.5-2.5-2.5-6.7 0-9.2l3-3C7.2 7.6 8.8 7 10.5 7c1.7 0 3.3.6 4.6 1.9l1 1L14 12l-1-1c-.7-.6-1.5-1-2.5-1s-1.8.3-2.5 1l-1.5 1.5L5 14c-1.4 1.4-1.4 3.6 0 5 .7.6 1.5 1 2.5 1s1.8-.3 2.5-1Z" fill="currentColor"></path></svg></button></div></div></div></div></div></div></div></section></div></div><div data-block-content-id="5c04c6c9-28fb-43a1-9d24-f4e94be010ce" data-block-id="LongFormContent" style="display:inline" tabindex="-1"><div data-testid="responsive.visibility.wrapper" class="css-cenKGv"><section data-baseweb="block" class="css-gqcHgx"><div data-baseweb="block" class="css-hazmlH"><div data-baseweb="block" class="css-ofGld"><div data-baseweb="block" class="container-inner css-fVLpfI"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><div data-baseweb="block" class="css-bnsMK"><div class="rich-lfc-content" data-testid="content"><body><div><h1 class="rich-heading-h1">Introduction</h1></div></body><body><div><p class="rich-paragraph">Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we’re bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow).</p></div></body><body><div><p class="rich-paragraph">To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber’s service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.</p></div></body><body><div><p class="rich-paragraph">To solve these two problems, we’ve created the load shedder library, Cinnamon. It is built on the experiences from a previous load shedder, <a class="rich-link" href="https://www.uber.com/en-DK/blog/qalm-qos-load-management-framework/" rel="noreferrer noopener" target="_blank">QALM</a>, that was able to do graceful degradation. In addition to graceful degradation, Cinnamon dynamically and continuously adjusts the capacity of the service (using a <a class="rich-link" href="https://en.wikipedia.org/wiki/TCP_Vegas#:~:text=TCP%20Vegas%20is%20a%20TCP,Lawrence%20Brakmo%20and%20Larry%20L." rel="noreferrer noopener" target="_blank">modified TCP-Vegas algorithm</a>, a fairly “young” idea, from 1994) and thus adjusts the amount of load shedding dynamically, depending on the incoming requests (using the <a class="rich-link" href="https://en.wikipedia.org/wiki/PID_controller" rel="noreferrer noopener" target="_blank">PID controller</a> idea, with origins back to the 17th century). Compared with previous approaches, Cinnamon is able to handle bigger overloads, while maintaining good latencies (P50 latency increases 50% at 300% overload). It is very efficient, generally adding only 1 microsecond of overhead per request. Lastly, Cinnamon requires no configuration, and it is being rapidly adopted by services at Uber. </p></div></body><body><div><p class="rich-paragraph">This blog post is the first in a series of three on Cinnamon. The series should be interesting for everyone–from readers with no prior knowledge of dynamic load shedders to readers who have extensive knowledge. In this specific blog post we’ll give an overview of Cinnamon and see how it compares to the <a class="rich-link" href="https://en.wikipedia.org/wiki/CoDel" rel="noreferrer noopener" target="_blank">CoDel</a>-based QALM. In the next two we’ll dive into how we find the rejection rate using a PID controller and how we automatically adjust the capacity using a modified TCP Vegas algorithm.</p></div></body><body><div><hr class="wp-block-separator has-alpha-channel-opacity" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">Background</h1></div></body><body><div><p class="rich-paragraph">Before diving into how Cinnamon is architected and works, we’ll briefly describe how <a class="rich-link" href="https://www.uber.com/en-DK/blog/qalm-qos-load-management-framework/" rel="noreferrer noopener" target="_blank">QALM</a> works. If you have already read the QALM blog post, feel free to skip this section.</p></div></body><body><div><p class="rich-paragraph">QALM uses the <a class="rich-link" href="https://en.wikipedia.org/wiki/CoDel" rel="noreferrer noopener" target="_blank">Controlled Delay (a.k.a., CoDel)</a> algorithm to detect overload and when overloaded it will drop low-priority requests (if any). In essence, CoDel (and thus QALM) monitors the queue of incoming requests and how much time each request spends in the queue. If they all are delayed by more than, say 5 ms, within a 100ms window, then CoDel sheds requests. For QALM, it would then reject any lower-priority requests. </p></div></body><body><div><p class="rich-paragraph">At any given point, QALM limits the number of requests that are executed concurrently, which in turn acts as the capacity. As QALM is implemented in Go, the limit is implemented by inserting all requests into a channel, from which a set of background goroutines consumes up to a certain limit. Lastly, in order to use QALM, you have to configure the priority of your callers and you need to configure the maximum number of concurrent requests to be handled. </p></div></body><body><div><p class="rich-paragraph">While deploying QALM, we noticed that the configuration part hindered adoption, as they require more effort than anticipated. First, just depending on the priority of your caller might not capture that a test service called your upstream service, and thus the request should really be a low-priority request (the diagram below shows this problem).</p></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-1068489" decoding="async" height="284" loading="lazy" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9jMGI4MDBmZS02MjhlLTU1MmItYTIzYS04MTNiYjgwZjQwNDcucG5n" width="1024"><figcaption class="rich-figure-caption">Figure 1: Diagram of two services, where Service 1 receives online traffic from users and from a testing system. For both sources, they call Service 2 to retrieve some information.</figcaption></figure></div></body><body><div><p class="rich-paragraph"><a class="rich-link" href="https://lucid.app/lucidchart/bd5020c1-da24-4c3e-a70d-d0a546342810/edit?page=0&amp;v=258&amp;s=612"></a>In the above, say we’re configuring the priorities in Service 2 – we might set requests from Service 1 to be high priority (as it is serving online traffic from our mobile apps). But because Service 1 is also serving test systems, it would wrongly categorize those requests in Service 2 as high priority.</p></div></body><body><div><p class="rich-paragraph">In addition, setting the right maximum number of concurrent requests is difficult, as it can really change fairly rapidly depending on the request patterns your service is handling and on which hardware (and neighbors on that hardware) it is running. Further, we noticed that using channels for load shedding can be expensive, as they are points of synchronization.</p></div></body><body><div><p class="rich-paragraph">Thus, we started the work on Cinnamon to fix these issues, namely: </p></div></body><body><div><ol class="rich-list-ol"> <li class="rich-list-item">Better priority propagation</li> <li class="rich-list-item">Require zero configuration to use</li> <li class="rich-list-item">Make it very performant</li> </ol></div></body><body><div><hr class="wp-block-separator has-alpha-channel-opacity" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">Architecture</h1></div></body><body><div><p class="rich-paragraph">Cinnamon is built as an <a class="rich-link" href="https://github.com/yarpc" rel="noreferrer noopener" target="_blank">RPC middleware</a> that is easily imported by Uber’s Go services. On top of that each request is tagged with a priority (at the edge) that is propagated down through the request stack, so that all services processing some part of the request knows how important the request is for our users. This is depicted in the diagram below:</p></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-1068492" decoding="async" height="277" loading="lazy" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8zZDU0MTdmYy1jOTdiLTUyZWQtODM1My03ZDE2ZGIwYzgwM2UucG5n" width="1024"><figcaption class="rich-figure-caption">Figure 2: Diagram of how Cinnamon fits into the service mesh at Uber.</figcaption></figure></div></body><body><div><p class="rich-paragraph">In the diagram above a request from one of our apps hits our Edge system that then forwards the request to Service 1, which as part of its processing of this request will query a database and then Service 2. The endpoint in the edge is annotated with the priority of the request and this is propagated from the edge to all downstream dependencies via <a class="rich-link" href="https://www.uber.com/en-DK/blog/distributed-tracing/" rel="noreferrer noopener" target="_blank">Jaeger</a>. By propagating this information, all services in the request chain will know the importance of the request and how critical it is for our users.</p></div></body><body><div><p class="rich-paragraph">Having the priority annotated with each request and propagating it down through the call chain, Cinnamon is able to act autonomously for each service instance, while still able to globally agree on which requests to serve and which to reject during overloads. </p></div></body><body><div><hr class="wp-block-separator has-alpha-channel-opacity" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">Priorities</h1></div></body><body><div><p class="rich-paragraph">Cinnamon uses the priority attached to the request and if not present it sets a default one, depending on the calling service. The priority is actually composed of two different components, a <em class="rich-italic">tier</em> level and a <em class="rich-italic">cohort.</em> The tier level designates how important the request is. At Uber we use 6 tiers, from 0 to 5, where tier 0 is the highest priority and tier 5 is the lowest.</p></div></body><body><div><p class="rich-paragraph">The cohorts are used to further segregate the requests within a tier, such that we can load-shed the same subset of requests across services. It is very much inspired by <a class="rich-link" href="https://arxiv.org/abs/1806.04075" rel="noreferrer noopener" target="_blank">WeChat’s approach</a>, where we divide the requests into 128 cohorts, based on the user involved in the request. That way, if a service needs to load-shed say 5% of its tier 1 requests, it will be the same set of users (i.e., 5%) that are load-shedded. To do so, we use a simple sharding scheme with hashing and some timing information to group and automatically shift users around, to ensure that the same users are not always shedded first. To align with tier levels, the highest priority cohort is 0 and the lowest is cohort 127.</p></div></body><body><div><p class="rich-paragraph">With 6 tiers and 128 cohorts for each, we end up with 768 different priorities that we can then load-shed on. With “only” 768 different priorities, we can also build a very efficient priority queue with separate buckets for each priority. </p></div></body><body><div><hr class="wp-block-separator has-alpha-channel-opacity" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">Library Architecture</h1></div></body><body><div><p class="rich-paragraph">With overall Cinnamon deployment and priorities described, it is now time to dive into how the Cinnamon library is built. </p></div></body><body><div><p class="rich-paragraph">The diagram below shows the life of a request as it goes through the Cinnamon middleware:</p></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-1068495" decoding="async" height="355" loading="lazy" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80ODgzOTM5MS01ZDUzLTVkMDktYmQ0YS03NjZjZDI2MzgzYTUucG5n" width="1024"><figcaption class="rich-figure-caption">Figure 3: Diagram shows how a request traverses through Cinnamon, before being sent to the business logic for actual processing.</figcaption></figure></div></body><body><div><p class="rich-paragraph">As a request comes in it goes through these stages:</p></div></body><body><div><ol class="rich-list-ol"> <li class="rich-list-item"><strong class="rich-bold">Priority:</strong> First we ensure that the request has a priority attached, and if not we set a default one based on the caller of the request.</li> <li class="rich-list-item"><strong class="rich-bold">Rejector:</strong> Next it enters the rejector that figures out whether we should reject the request or not. </li> <li class="rich-list-item"><strong class="rich-bold">Priority Queue: </strong>If the request is accepted it will enter a priority queue, to ensure that the highest-priority requests are scheduled first. </li> <li class="rich-list-item"><strong class="rich-bold">Scheduler:</strong> Cinnamon only allows a fixed number of requests to be processed in parallel, so the scheduler’s job is to ensure that we process as many requests concurrently as the current limit allows, but not more.</li> <li class="rich-list-item"><strong class="rich-bold">Timeout:</strong> In cases where too many requests are queued, they will time out from the queue and return a rate limiting error. The queue timeout is typically 33% of the normal request timeout.</li> </ol></div></body><body><div><p class="rich-paragraph">Additionally, Cinnamon has two background threads/goroutines, the “PID controller” and the “auto-tuner”, that continuously adjust the rejection threshold respecting the maximum allowed concurrent requests. You might ask why we have two and can’t it all be done with just setting a correct rejection threshold, but that is unfortunately not enough. We essentially have two slightly overlapping concerns. When a service is overloaded, just controlling the maximum number of concurrent requests is not enough, as a queue might still form. On the other hand, just setting a rejection threshold does not prevent the service from being overloaded if it processes too many requests concurrently. Thus we have the two goroutines, where the PID controller’s job is to minimize the number of queued requests, whereas the auto-tuner’s job is to maximize the throughput of the service, without sacrificing the response latencies (too much). </p></div></body><body><div><p class="rich-paragraph">We’ll briefly describe these two aspects below. For more in-depth information about these two, read the two following blog posts.</p></div></body><body><div><hr class="wp-block-separator has-alpha-channel-opacity" data-wp-block-name="core/separator"></div></body><body><div><h2 class="rich-heading-h2">Rejector</h2></div></body><body><div><p class="rich-paragraph">The rejector component has two responsibilities: a) figure out whether an endpoint is overloaded and b), if an endpoint is overloaded, shed a percentage of the requests to make sure the request queue is as small as possible.</p></div></body><body><div><p class="rich-paragraph">To determine whether an endpoint is overloaded we keep track of the last time the request queue was empty, and if it has not been emptied in the last say 10 seconds we deem the endpoint to be overloaded (inspired by <a class="rich-link" href="https://queue.acm.org/detail.cfm?id=2839461" rel="noreferrer noopener" target="_blank">Facebook</a>).</p></div></body><body><div><p class="rich-paragraph">When an endpoint is overloaded, the background goroutine starts to monitor the inflow and outflow of requests into the priority queue. Based on these numbers, it uses a <a class="rich-link" href="https://en.wikipedia.org/wiki/PID_controller" rel="noreferrer noopener" target="_blank">PID controller</a> to determine a ratio of requests to shed. The PID controller is very fast (as in very few iterations are needed) at finding the correct level and once the request queue has been drained, the PID ensures that we only slowly reduce the ratio. By slowly reducing the threshold we limit oscillating rates that worsen the latencies. Further, by just monitoring the inflow and outflow of requests to the priority queue, we make the PID controller agnostic to whether the service serves a high or low RPS volume.</p></div></body><body><div><hr class="wp-block-separator has-alpha-channel-opacity" data-wp-block-name="core/separator"></div></body><body><div><h2 class="rich-heading-h2">Scheduler</h2></div></body><body><div><p class="rich-paragraph">If a request is accepted for processing (i.e., not rejected) it continues into a priority queue, where a scheduler pops the highest priority ones first and forwards them to the business logic inside the service that processes the request. The scheduler makes sure to only allow a certain number of concurrent requests to be processed at the same time, to better control latencies. We call this the inflight limit.</p></div></body><body><div><p class="rich-paragraph">The <em class="rich-italic">auto-tuner</em> background goroutine monitors the latency of the endpoint and uses a heavily modified/augmented version of the <a class="rich-link" href="https://en.wikipedia.org/wiki/TCP_Vegas" rel="noreferrer noopener" target="_blank">Vegas TCP/IP control algorithm</a> to control the inflight limit. In essence, if the latency goes up it could mean the service is overloaded and thus it reduces the inflight limit. Vice versa, if latencies are stable or dropping, it will increase the limit to allow a higher throughput.</p></div></body><body><div><hr class="wp-block-separator has-alpha-channel-opacity" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">Experimental Results</h1></div></body><body><div><p class="rich-paragraph">To verify that Cinnamon actually works, we ran a number of experiments, including comparing it with our existing load shedder, <a class="rich-link" href="https://www.uber.com/en-DK/blog/qalm-qos-load-management-framework/" rel="noreferrer noopener" target="_blank">QALM</a>. When evaluating the load shedder, we want to test how good it is at: 1) protecting the service, and 2) protecting our core flows, by shedding low-priority requests first.</p></div></body><body><div><p class="rich-paragraph">To see how well the two protect the service, we compare the throughput, which is the number of requests sent to the backend and the <a class="rich-link" href="https://aws.amazon.com/builders-library/using-load-shedding-to-avoid-overload/" rel="noreferrer noopener" target="_blank"><em class="rich-italic">goodput</em></a>, which is the subset of throughput that returns a successful response. Ideally the goodput should be as high as possible with minimal effect on the latencies. Furthermore, in order to protect our core flows, the load shedder should ideally shed lower-priority traffic before any higher-priority traffic.</p></div></body><body><div><p class="rich-paragraph">In all cases, we use a test service that has an endpoint that does a mix of memory allocations, CPU work (sorting) and rescheduling (via a <em class="rich-italic">time.Sleep</em>) to mimic a real-life workload. The response time of the endpoint is around 120ms when not loaded.</p></div></body><body><div><p class="rich-paragraph">We run tests of 5 minutes, where we send a fixed amount of RPS (e.g., 1,000), where 50% of the traffic is tier 1 and 50% is tier 5. Each request has a timeout of 1 second. We collect the P50 and P99 latencies and goodput. In all cases, we run in production, where we have two backend instances and are hitting them from two other machines. Each backend has a capacity of ~650 RPS, so in total the service can handle 1,300 RPS. </p></div></body><body><div><hr class="wp-block-separator has-alpha-channel-opacity" data-wp-block-name="core/separator"></div></body><body><div><h2 class="rich-heading-h2">Goodput</h2></div></body><body><div><p class="rich-paragraph">The first to estimate is the goodput, which is essentially the <throughput> * (1 – <error-rate>), where error-rate is both rate-limiting errors and timeouts. We group by tier and include the error rate to make it easy to compare (we’ve added a baseline case, with no load shedders enabled).</error-rate></throughput></p></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-1068501" decoding="async" height="605" loading="lazy" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yODU2OWUwMC00OGJmLTUyMDktOTAyZC00OTdjMmI3ZDViNzIucG5n" title="Chart" width="1024"><figcaption class="rich-figure-caption">Figure 4: Goodput with no load shedder (baseline), Cinnamon and QALM at various levels of inbound RPS)</figcaption></figure></div></body><body><div><p class="rich-paragraph">To get the total goodput for one of the load shedders, you can just add the goodput for tier 1 and tier 5 (e.g., in the 2,000 RPS case, Cinnamon’s goodput is 1,000+302=1,302). As the sending of the traffic happens from two different machines, some of the tier5 goes through, because the two machines are not fully synced when to start the experiment. For the baseline case (i.e., no load shedder), when sending more than 3,000 RPS to the service it dies, and no requests go through.</p></div></body><body><div><p class="rich-paragraph">As can be seen, when the service is not loaded (200-1,000 RPS), all requests go through. When we hit the 1,500 RPS case, both load shedders kick in, where QALM keeps a slightly higher goodput (~2% higher), compared to Cinnamon (1,258 vs. 1,280). This is likely because the auto-tuner has to find the right inflight limit combined with noise in our production environment. </p></div></body><body><div><p class="rich-paragraph">At 2,000 RPS and above, Cinnamon sustains goodput close to the capacity. Do note that at the higher throughput cases, the service is spending more and more resources rejecting requests, and thus the capacity of the service goes down. QALM on the other hand starts to error out on tier 1 requests as well (most of them are timeouts), and at 3,000 RPS, its total goodput is at 552, or 40% of the capacity of the service.</p></div></body><body><div><hr class="wp-block-separator has-alpha-channel-opacity" data-wp-block-name="core/separator"></div></body><body><div><h2 class="rich-heading-h2">Latencies</h2></div></body><body><div><p class="rich-paragraph">While goodput is one thing, it’s another thing entirely whether the latencies are good. The graph below shows the P50 and P99 tier 1 latencies (which are the ones we really care about):</p></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-1068505" decoding="async" height="613" loading="lazy" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy84Y2E3MmE2Ni00MzE1LTU4OWYtYjA3ZS01ZDhjM2JmZGVjNDMucG5n" title="Chart" width="1024"><figcaption class="rich-figure-caption">Figure 5: P50 latencies for the high priority, tier 1, requests for the three setup at different inbound RPS.</figcaption></figure></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-1068507" decoding="async" height="602" loading="lazy" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hZmZiNzllOS1hM2I2LTUwOTItYTU3Zi1hMjg0YWMyMWE3OTQucG5n" title="Chart" width="1024"><figcaption class="rich-figure-caption">Figure 6: P99 latencies for the high priority, tier 1, requests for the three setup at different inbound RPS.</figcaption></figure></div></body><body><div><p class="rich-paragraph">(Note that after 3,000 RPS the service is completely dead without a load shedder, so we don’t have any baseline points after that).</p></div></body><body><div><p class="rich-paragraph">Under light load, the P99 is at ~140 ms for all and it increases to ~190 ms when the system is fairly loaded (1,000 RPS). Going above the capacity limit (1,500 RPS+) both load shedders kick in, but the latency profile starts to diverge. QALM fairly quickly approaches the timeout limit of 1 sec (for both P50 and P99), whereas Cinnamon stays below 500ms (with P50 of ~180 ms). Note that the latency distribution looks similar for tier 5.</p></div></body><body><div><p class="rich-paragraph">The big difference for these cases is that the PID controller in Cinnamon is able to sustain a good rejection rate, so you avoid oscillating between rejecting everything and then rejecting nothing (which CoDel tends to do). Further, at high throughput cases, the service is so loaded that CoDel believes all requests are delayed, so it rejects almost every request (and this is only amplified by using a single Go channel).</p></div></body><body><div><p class="rich-paragraph">We can actually see this fluctuation of the rejection ratio if we zoom in on one of the RPS cases. The graphs below show the success and error rate along with success response times for Cinnamon and QALM in the 4000 RPS case (for reference, we have included a 2-minute baseline run of 700 RPS).</p></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-1068510" decoding="async" height="526" loading="lazy" sizes="auto, (max-width: 545px) 100vw, 545px" src="https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy84MmRiZGIxYS02YzJhLTVlMTEtOWQ2Ny0xMDczZDA0MmUwNTgucG5n" width="545"><figcaption class="rich-figure-caption">Figure 7: The two graphs show how throughput, goodput, and latencies vary over time with both Cinnamon and QALM, when we send 4,000 RPS to the service. The first bump of traffic (to 700 RPS) is a baseline with no load shedder.</figcaption></figure></div></body><body><div><p class="rich-paragraph">As can be seen, the rejection rate (yellow line) is fairly stable for Cinnamon (with a bit of timeouts in the beginning due to queues), whereas QALM consistently returns timeouts, where both success (green line) and rejection rates fluctuate (e.g., success rate goes from ~0 to 500).</p></div></body><body><div><hr class="wp-block-separator has-alpha-channel-opacity" data-wp-block-name="core/separator"></div></body><body><div><h2 class="rich-heading-h2">Interaction Between PID and Auto-Tuner</h2></div></body><body><div><p class="rich-paragraph">Another interesting aspect is how the PID controller and the auto-tuner interact. To see this we look at the 1,500 and 2,000 RPS cases, which the following heatmaps show. The top graph shows how the inflight limit moves, while the bottom one shows rejection rate.</p></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-1068514" decoding="async" height="519" loading="lazy" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hYjNlNDYwMS0yZTA3LTVmZDQtYTAzNC1jMmJjNWQzNzE2NzUucG5n" width="1024"><figcaption class="rich-figure-caption">Figure 8: The two graphs show how the inflight limit and the auto-tuner interact in Cinnamon, when running at 1,500 and 2,000 RPS.</figcaption></figure></div></body><body><div><p class="rich-paragraph">Initially for the 1,500 RPS case, the inflight limit is ~240 which then drops to ~60 and then stabilizes around 110. This takes a few minutes for the auto-tuner to adjust. Meanwhile, as we’re sending 1,500 requests to it, there is a request-queue build-up and the rejector kicks in. As the auto-tuner adjusts the inflight (and thus the goodput), the rejector adjusts to make sure the queue is as small as possible.</p></div></body><body><div><p class="rich-paragraph">On the other hand for the 2,000 RPS case, the inflight limit is already at 110, so it does not need to adjust, as it stays there. Correspondingly, the rejector keeps a steady rejection rate of ~30%.</p></div></body><body><div><hr class="wp-block-separator has-alpha-channel-opacity" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">Summary</h1></div></body><body><div><p class="rich-paragraph">With Cinnamon we have built an efficient load shedder that uses century-old techniques to dynamically set thresholds for rejecting and estimating capacity of the services. It solves the issues we noticed with QALM (and thus any CoDel-based load shedder), namely, that Cinnamon is able to:</p></div></body><body><div><ol class="rich-list-ol"> <li class="rich-list-item">Quickly find a stable rejection rate</li> <li class="rich-list-item">Automatically adjust the capacity of the service</li> <li class="rich-list-item">Be used without setting any configuration parameters</li> <li class="rich-list-item">Incur very low overhead</li> </ol></div></body><body><div><p class="rich-paragraph">It should be noted that in designing and implementing Cinnamon we have been heavily inspired by technologies or ideas from a wide range of sources (i.e., <a class="rich-link" href="https://www.uber.com/en-DK/blog/distributed-tracing/" rel="noreferrer noopener" target="_blank">Jaeger</a>, <a class="rich-link" href="https://arxiv.org/abs/1806.04075" rel="noreferrer noopener" target="_blank">WeChat</a>, <a class="rich-link" href="https://queue.acm.org/detail.cfm?id=2839461" rel="noreferrer noopener" target="_blank">Facebook</a>, <a class="rich-link" href="https://netflixtechblog.medium.com/performance-under-load-3e6fa9a60581" rel="noreferrer noopener" target="_blank">Netflix</a>, and <a class="rich-link" href="https://aws.amazon.com/builders-library/using-load-shedding-to-avoid-overload/" rel="noreferrer noopener" target="_blank">Amazon</a>).</p></div></body></div></div></div></div></div></div></section></div></div><div data-block-content-id="f7f7b11c-66f4-46a3-86c6-ca7469c5f2d7" data-block-id="ArticleCategories" style="display:inline" tabindex="-1"><div data-testid="responsive.visibility.wrapper" class="css-cenKGv"><section data-baseweb="block" class="css-gqcHgx"><div data-baseweb="block" class="css-hazmlH"><div data-baseweb="block" class="css-ofGld"><div data-baseweb="block" class="container-inner css-fVLpfI"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><div data-baseweb="block" class="css-HXvWP"><div class="css-dQDsac">Category</div><div class="css-laJbgX"><a class="css-dahbuC" href="/gb/en/blog/engineering/"><span data-baseweb="tag" class="css-jgYIWw"><span title="Engineering" class="css-jAylDS">Engineering</span></span></a><a class="css-dahbuC" href="/gb/en/blog/engineering/aarhus/"><span data-baseweb="tag" class="css-jgYIWw"><span title="Aarhus" class="css-jAylDS">Aarhus</span></span></a><a class="css-dahbuC" href="/gb/en/blog/engineering/backend/"><span data-baseweb="tag" class="css-jgYIWw"><span title="Backend" class="css-jAylDS">Backend</span></span></a></div></div></div></div></div></div></section></div></div><div data-block-content-id="8308f24e-e2b3-4015-b4d5-5042c002bcb0" data-block-id="ArticleAuthor" style="display:inline" tabindex="-1"><div data-testid="responsive.visibility.wrapper" class="css-cenKGv"><section data-baseweb="block" class="css-Yerqw"><div data-baseweb="block" class="css-hazmlH"><div data-baseweb="block" class="css-ofGld"><div data-baseweb="block" class="container-inner css-kHWzwv"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><div data-baseweb="block" class="css-fLCWQY"><div class="css-hByTyl"><div data-baseweb="typo-labelmedium" class="css-ingCMH">Written by</div></div><div class="css-kwWKra" data-testid="authors-grid"><div class="css-cCDVuf"><div aria-label="Timothy Smyth" role="img" data-baseweb="avatar" class="css-iclDxs"><img alt="Timothy Smyth" class="css-eUNfLQ"/><div class="css-cKXFfR">TS</div></div><div class="css-lpcwSG"><div class="css-czUDWs"><p data-baseweb="typo-paragraphlarge" class="css-eoiIol">Timothy Smyth</p><p data-baseweb="typo-paragraphsmall" class="css-kVLeBt"></p></div><p data-baseweb="typo-paragraphsmall" class="css-gLZtvz">Timothy Smyth is a Staff Engineer at Uber on the Delivery Backend Platform team based in New York City, helping to increase the resilience of Uber Delivery.</p></div></div><div class="css-cCDVuf"><div aria-label="Vladimir Gavrilenko" role="img" data-baseweb="avatar" class="css-iclDxs"><img alt="Vladimir Gavrilenko" class="css-eUNfLQ"/><div class="css-cKXFfR">VG</div></div><div class="css-lpcwSG"><div class="css-czUDWs"><p data-baseweb="typo-paragraphlarge" class="css-eoiIol">Vladimir Gavrilenko</p><p data-baseweb="typo-paragraphsmall" class="css-kVLeBt"></p></div><p data-baseweb="typo-paragraphsmall" class="css-gLZtvz">Vladimir Gavrilenko is a Software Engineer at Uber on the Inventory and Catalog team based in Aarhus, where he focuses on reliability and scalability.</p></div></div><div class="css-cCDVuf"><div aria-label="Jesper Lindstrom Nielsen" role="img" data-baseweb="avatar" class="css-iclDxs"><img alt="Jesper Lindstrom Nielsen" class="css-eUNfLQ"/><div class="css-cKXFfR">JL</div></div><div class="css-lpcwSG"><div class="css-czUDWs"><p data-baseweb="typo-paragraphlarge" class="css-eoiIol">Jesper Lindstrom Nielsen</p><p data-baseweb="typo-paragraphsmall" class="css-kVLeBt"></p></div><p data-baseweb="typo-paragraphsmall" class="css-gLZtvz">Jesper Lindstrom Nielsen is a Staff Engineer at Uber on the Inventory and Catalog team based in Aarhus, trying to make everything run a bit faster and scale a bit more.</p></div></div><div class="css-cCDVuf"><div aria-label="Jakob Holdgaard Thomsen" role="img" data-baseweb="avatar" class="css-iclDxs"><img alt="Jakob Holdgaard Thomsen" class="css-eUNfLQ"/><div class="css-cKXFfR">JH</div></div><div class="css-lpcwSG"><div class="css-czUDWs"><p data-baseweb="typo-paragraphlarge" class="css-eoiIol">Jakob Holdgaard Thomsen</p><p data-baseweb="typo-paragraphsmall" class="css-kVLeBt"></p></div><p data-baseweb="typo-paragraphsmall" class="css-gLZtvz">Jakob Holdgaard Thomsen is a Principal Engineer at Uber, working out of the Aarhus office, helping to make Uber&#x27;s systems more performant and more reliable.</p></div></div></div></div></div></div></div></div></section></div></div><div data-block-content-id="5785d8f2-23f3-4820-87c2-b6399dab543d" data-block-id="ArticleFeed" style="display:inline" tabindex="-1"><div data-testid="responsive.visibility.wrapper" class="css-cenKGv"><div><section data-baseweb="block" class="css-gqcHgx"><div data-baseweb="block" class="css-hazmlH"><div data-baseweb="block" class="css-ofGld"><div data-baseweb="block" class="container-inner css-fVLpfI"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><div data-baseweb="block" class="css-HXvWP"><div class="css-gowlgP"><div class="css-jKvvYG"><div class="css-fIxJXI">Related articles</div><div class="css-hxCswv">6 articles</div></div></div><div data-baseweb="block" class="css-bzLBFK css-PKJb"><div data-baseweb="block" class="css-dtrVZw css-PKJb" data-testid="newsroom-article-feed-grid"><div class="css-kwNuyP" data-testid="newsroom-article-feed-card"><div data-baseweb="aspect-ratio-box" class="css-cOsLzB"><div data-baseweb="aspect-ratio-box-body" class="css-eleJdh"><picture><source media="screen and (min-width: 1136px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=605/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8wOGZkYTRmZS00NzA0LTQ0ZWMtOWNjNi05NjNjNGY5YWNmYzMucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8wOGZkYTRmZS00NzA0LTQ0ZWMtOWNjNi05NjNjNGY5YWNmYzMucG5n 2x"/><source media="screen and (min-width: 600px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=561/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8wOGZkYTRmZS00NzA0LTQ0ZWMtOWNjNi05NjNjNGY5YWNmYzMucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8wOGZkYTRmZS00NzA0LTQ0ZWMtOWNjNi05NjNjNGY5YWNmYzMucG5n 2x"/><source media="screen and (min-width: 320px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8wOGZkYTRmZS00NzA0LTQ0ZWMtOWNjNi05NjNjNGY5YWNmYzMucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8wOGZkYTRmZS00NzA0LTQ0ZWMtOWNjNi05NjNjNGY5YWNmYzMucG5n 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8wOGZkYTRmZS00NzA0LTQ0ZWMtOWNjNi05NjNjNGY5YWNmYzMucG5n" alt="" loading="lazy" fetchpriority="low" class="css-etAiCK"/></picture></div></div><div class="css-bpyykn"></div><div class="css-hxGQNi"><div data-baseweb="block" class="css-fPItWk css-PKJb"><div class="css-lnzgHT"><div><span data-baseweb="tag" class="css-jgYIWw"><span title="AI / ML" class="css-bZnCM">AI / ML</span></span></div><div><span data-baseweb="tag" class="css-jgYIWw"><span title="Engineering" class="css-bZnCM">Engineering</span></span></div></div><div class="css-bfYiUy"><a class="css-gkIDnk" href="https://www.uber.com/gb/en/blog/efficient-software-factory/">Running a Software Factory Efficiently at Uber Scale</a></div><div class="css-bGyOjB">August 27, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/gb/en/blog/efficient-software-factory/" tabindex="-1"></a></div><div class="css-kwNuyP" data-testid="newsroom-article-feed-card"><div data-baseweb="aspect-ratio-box" class="css-cOsLzB"><div data-baseweb="aspect-ratio-box-body" class="css-eleJdh"><picture><source media="screen and (min-width: 1136px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=605/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9kYzY2MGQ2MS05NTkxLTQ3MjUtYmMyMy00NWFjZTAxZjI4N2EucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9kYzY2MGQ2MS05NTkxLTQ3MjUtYmMyMy00NWFjZTAxZjI4N2EucG5n 2x"/><source media="screen and (min-width: 600px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=561/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9kYzY2MGQ2MS05NTkxLTQ3MjUtYmMyMy00NWFjZTAxZjI4N2EucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9kYzY2MGQ2MS05NTkxLTQ3MjUtYmMyMy00NWFjZTAxZjI4N2EucG5n 2x"/><source media="screen and (min-width: 320px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9kYzY2MGQ2MS05NTkxLTQ3MjUtYmMyMy00NWFjZTAxZjI4N2EucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9kYzY2MGQ2MS05NTkxLTQ3MjUtYmMyMy00NWFjZTAxZjI4N2EucG5n 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9kYzY2MGQ2MS05NTkxLTQ3MjUtYmMyMy00NWFjZTAxZjI4N2EucG5n" alt="" loading="lazy" fetchpriority="low" class="css-etAiCK"/></picture></div></div><div class="css-bpyykn"></div><div class="css-hxGQNi"><div data-baseweb="block" class="css-fPItWk css-PKJb"><div class="css-lnzgHT"><div><span data-baseweb="tag" class="css-jgYIWw"><span title="Backend" class="css-bZnCM">Backend</span></span></div><div><span data-baseweb="tag" class="css-jgYIWw"><span title="Engineering" class="css-bZnCM">Engineering</span></span></div><div><span data-baseweb="tag" class="css-jgYIWw"><span title="Mobile" class="css-bZnCM">Mobile</span></span></div></div><div class="css-bfYiUy"><a class="css-gkIDnk" href="https://www.uber.com/gb/en/blog/scaling-verify-wallet/">Scaling Verify with Wallet for Identity Verification at Uber</a></div><div class="css-bGyOjB">June 23, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/gb/en/blog/scaling-verify-wallet/" tabindex="-1"></a></div><div class="css-kwNuyP" data-testid="newsroom-article-feed-card"><div data-baseweb="aspect-ratio-box" class="css-cOsLzB"><div data-baseweb="aspect-ratio-box-body" class="css-eleJdh"><picture><source media="screen and (min-width: 1136px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=605/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80ZWRlMzQ1OS1lNGE2LTRlNWYtYWExOC00YWE5M2UwMWEzNGIucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80ZWRlMzQ1OS1lNGE2LTRlNWYtYWExOC00YWE5M2UwMWEzNGIucG5n 2x"/><source media="screen and (min-width: 600px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=561/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80ZWRlMzQ1OS1lNGE2LTRlNWYtYWExOC00YWE5M2UwMWEzNGIucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80ZWRlMzQ1OS1lNGE2LTRlNWYtYWExOC00YWE5M2UwMWEzNGIucG5n 2x"/><source media="screen and (min-width: 320px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80ZWRlMzQ1OS1lNGE2LTRlNWYtYWExOC00YWE5M2UwMWEzNGIucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80ZWRlMzQ1OS1lNGE2LTRlNWYtYWExOC00YWE5M2UwMWEzNGIucG5n 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80ZWRlMzQ1OS1lNGE2LTRlNWYtYWExOC00YWE5M2UwMWEzNGIucG5n" alt="" loading="lazy" fetchpriority="low" class="css-etAiCK"/></picture></div></div><div class="css-bpyykn"></div><div class="css-hxGQNi"><div data-baseweb="block" class="css-fPItWk css-PKJb"><div class="css-lnzgHT"><div><span data-baseweb="tag" class="css-jgYIWw"><span title="AI / ML" class="css-bZnCM">AI / ML</span></span></div><div><span data-baseweb="tag" class="css-jgYIWw"><span title="Engineering" class="css-bZnCM">Engineering</span></span></div></div><div class="css-bfYiUy"><a class="css-gkIDnk" href="https://www.uber.com/gb/en/blog/scaling-real-time-traffic/">Scaling Real-Time Traffic Forecasting with a Graph-Aware Transformer</a></div><div class="css-bGyOjB">May 19, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/gb/en/blog/scaling-real-time-traffic/" tabindex="-1"></a></div><div class="css-kwNuyP" data-testid="newsroom-article-feed-card"><div data-baseweb="aspect-ratio-box" class="css-cOsLzB"><div data-baseweb="aspect-ratio-box-body" class="css-eleJdh"><picture><source media="screen and (min-width: 1136px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=605/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hOTc0M2Q4Ni1kNzhmLTQ1OTUtODY5MC04NDkxNzM3MzAxYWQuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hOTc0M2Q4Ni1kNzhmLTQ1OTUtODY5MC04NDkxNzM3MzAxYWQuanBlZw== 2x"/><source media="screen and (min-width: 600px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=561/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hOTc0M2Q4Ni1kNzhmLTQ1OTUtODY5MC04NDkxNzM3MzAxYWQuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hOTc0M2Q4Ni1kNzhmLTQ1OTUtODY5MC04NDkxNzM3MzAxYWQuanBlZw== 2x"/><source media="screen and (min-width: 320px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hOTc0M2Q4Ni1kNzhmLTQ1OTUtODY5MC04NDkxNzM3MzAxYWQuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hOTc0M2Q4Ni1kNzhmLTQ1OTUtODY5MC04NDkxNzM3MzAxYWQuanBlZw== 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hOTc0M2Q4Ni1kNzhmLTQ1OTUtODY5MC04NDkxNzM3MzAxYWQuanBlZw==" alt="" loading="lazy" fetchpriority="low" class="css-etAiCK"/></picture></div></div><div class="css-bpyykn"></div><div class="css-hxGQNi"><div data-baseweb="block" class="css-fPItWk css-PKJb"><div class="css-lnzgHT"><div><span data-baseweb="tag" class="css-jgYIWw"><span title="Backend" class="css-bZnCM">Backend</span></span></div><div><span data-baseweb="tag" class="css-jgYIWw"><span title="Engineering" class="css-bZnCM">Engineering</span></span></div></div><div class="css-bfYiUy"><a class="css-gkIDnk" href="https://www.uber.com/gb/en/blog/zero-growth-stack/">Zero-Growth Stack, Real Gains: How Stack Allocation Can Save 10% CPU in Go</a></div><div class="css-bGyOjB">May 7, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/gb/en/blog/zero-growth-stack/" tabindex="-1"></a></div><div class="css-kwNuyP" data-testid="newsroom-article-feed-card"><div data-baseweb="aspect-ratio-box" class="css-cOsLzB"><div data-baseweb="aspect-ratio-box-body" class="css-eleJdh"><picture><source media="screen and (min-width: 1136px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=605/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iYzA2ZWY4Yy1kYjg1LTRjN2QtOTk4YS0zYmY5M2JlOGZmYzkuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iYzA2ZWY4Yy1kYjg1LTRjN2QtOTk4YS0zYmY5M2JlOGZmYzkuanBlZw== 2x"/><source media="screen and (min-width: 600px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=561/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iYzA2ZWY4Yy1kYjg1LTRjN2QtOTk4YS0zYmY5M2JlOGZmYzkuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iYzA2ZWY4Yy1kYjg1LTRjN2QtOTk4YS0zYmY5M2JlOGZmYzkuanBlZw== 2x"/><source media="screen and (min-width: 320px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iYzA2ZWY4Yy1kYjg1LTRjN2QtOTk4YS0zYmY5M2JlOGZmYzkuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iYzA2ZWY4Yy1kYjg1LTRjN2QtOTk4YS0zYmY5M2JlOGZmYzkuanBlZw== 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iYzA2ZWY4Yy1kYjg1LTRjN2QtOTk4YS0zYmY5M2JlOGZmYzkuanBlZw==" alt="" loading="lazy" fetchpriority="low" class="css-etAiCK"/></picture></div></div><div class="css-bpyykn"></div><div class="css-hxGQNi"><div data-baseweb="block" class="css-fPItWk css-PKJb"><div class="css-lnzgHT"><div><span data-baseweb="tag" class="css-jgYIWw"><span title="Backend" class="css-bZnCM">Backend</span></span></div><div><span data-baseweb="tag" class="css-jgYIWw"><span title="Engineering" class="css-bZnCM">Engineering</span></span></div></div><div class="css-bfYiUy"><a class="css-gkIDnk" href="https://www.uber.com/gb/en/blog/ansible-automation-powers/">How Ansible® Automation Powers the Uber Corporate Network at a Global Scale</a></div><div class="css-bGyOjB">April 30, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/gb/en/blog/ansible-automation-powers/" tabindex="-1"></a></div><div class="css-kwNuyP" data-testid="newsroom-article-feed-card"><div data-baseweb="aspect-ratio-box" class="css-cOsLzB"><div data-baseweb="aspect-ratio-box-body" class="css-eleJdh"><picture><source media="screen and (min-width: 1136px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=605/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81YTNhNGUwZS05YmMwLTQ0NjUtOTM3ZC0wMjAxMDc4YzcxY2EuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81YTNhNGUwZS05YmMwLTQ0NjUtOTM3ZC0wMjAxMDc4YzcxY2EuanBlZw== 2x"/><source media="screen and (min-width: 600px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=561/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81YTNhNGUwZS05YmMwLTQ0NjUtOTM3ZC0wMjAxMDc4YzcxY2EuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81YTNhNGUwZS05YmMwLTQ0NjUtOTM3ZC0wMjAxMDc4YzcxY2EuanBlZw== 2x"/><source media="screen and (min-width: 320px)" srcSet="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81YTNhNGUwZS05YmMwLTQ0NjUtOTM3ZC0wMjAxMDc4YzcxY2EuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81YTNhNGUwZS05YmMwLTQ0NjUtOTM3ZC0wMjAxMDc4YzcxY2EuanBlZw== 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81YTNhNGUwZS05YmMwLTQ0NjUtOTM3ZC0wMjAxMDc4YzcxY2EuanBlZw==" alt="" loading="lazy" fetchpriority="low" class="css-etAiCK"/></picture></div></div><div class="css-bpyykn"></div><div class="css-hxGQNi"><div data-baseweb="block" class="css-fPItWk css-PKJb"><div class="css-lnzgHT"><div><span data-baseweb="tag" class="css-jgYIWw"><span title="Backend" class="css-bZnCM">Backend</span></span></div><div><span data-baseweb="tag" class="css-jgYIWw"><span title="Engineering" class="css-bZnCM">Engineering</span></span></div></div><div class="css-bfYiUy"><a class="css-gkIDnk" href="https://www.uber.com/gb/en/blog/hybrid-core-allocation/">Hybrid Core Allocation: From Overallocation to Reliable Sharing</a></div><div class="css-bGyOjB">April 21, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/gb/en/blog/hybrid-core-allocation/" tabindex="-1"></a></div></div></div></div></div></div></div></div></section></div></div></div><div data-block-content-id="00cdbbb9-7ef2-4465-9486-c208a836b0f5" data-block-id="Footer" style="display:inline" tabindex="-1"><div data-testid="responsive.visibility.wrapper" class="css-cenKGv"><span style="height:0;position:absolute;width:0" aria-hidden="true"></span><footer><section data-baseweb="block" class="css-hBnhgZ"><div data-baseweb="block" class="css-hazmlH"><div class="css-jOhJVe" tabindex="-1"><div data-baseweb="block" class="css-dODCLc"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><div data-baseweb="block" class="css-HXvWP"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><div data-baseweb="block" class="css-rjIkq"><div data-testid="footer-typography-logo-wrapper"><a data-baseweb="link" aria-label="" data-testid="footer-logo-typography-logo" href="https://www.uber.com/gb/en/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_logo.link_cta30" class="css-dmEOyR">Uber</a></div><div><a data-baseweb="link" aria-label="Visit Uber&#x27;s Help Centre" data-testid="link-logo" href="https://help.uber.com/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_linkLogo_cta28" class="css-iBZTkJ"><p class="css-AnBpG" data-testid="inner-link">Visit Help Centre</p></a></div></div><div data-baseweb="block" class="css-bYGJej"></div></div></div><div data-baseweb="block" class="css-HXvWP"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><div class="css-efdIWD"><div><h2 data-baseweb="typo-labellarge" class="css-dQXoUy">Company</h2></div><ul class="css-cDWyiW"><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/about/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[0].link_cta5" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">About us</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="Our offerings, apps and products" data-testid="link-center" href="https://www.uber.com/gb/en/about/uber-offerings/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[1].link_cta6" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Our offerings</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/newsroom/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[2].link_cta7" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Newsroom</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://investor.uber.com/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[3].link_cta8" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Investors</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/blog/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[4].link_cta9" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Blog</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://jobs.uber.com/en/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[5].link_cta10" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Careers</p></a></li></ul></div><div class="css-efdIWD"><div><h2 data-baseweb="typo-labellarge" class="css-dQXoUy">Products</h2></div><ul class="css-cDWyiW"><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/ride/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[0].link_cta12" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Ride</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/drive/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[1].link_cta13" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Drive</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/deliver/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[2].link_cta14" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Deliver</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.ubereats.com/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[3].link_cta15" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Eat</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/business/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[4].link_cta16" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Uber for Business</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uberfreight.com/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[5].link_cta17" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Uber Freight</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="Gift cards to redeem and buy" data-testid="link-center" href="https://www.uber.com/gb/en/gift-cards/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[6].link_cta18" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Gift cards</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" data-testid="link-center" href="https://www.uberhealth.com/gb/en/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[7].link_cta19" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Uber Health</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/advertising/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[8].link_cta20" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Uber Advertising</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" data-testid="link-center" href="https://merchants.ubereats.com/gb/en/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[9].link_cta21" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Merchants</p></a></li></ul></div><div class="css-efdIWD"><div><h2 data-baseweb="typo-labellarge" class="css-dQXoUy">Global citizenship</h2></div><ul class="css-cDWyiW"><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/safety/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group3.childNodes[0].link_cta22" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Safety</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/about/sustainability/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group3.childNodes[1].link_cta23" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Sustainability</p></a></li></ul></div><div class="css-efdIWD"><div><h2 data-baseweb="typo-labellarge" class="css-dQXoUy">Travel</h2></div><ul class="css-cDWyiW"><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://rides.sng.link/Aw5zn/o42y?_dl=uber%3A%2F%2Freserve&amp;_smtype=3&amp;_forward_params=1&amp;_fallback_redirect=http%3A%2F%2Fm.uber.com%2Freserve&amp;pcn=ubercom-footer&amp;mvid=[marketing-visitor-id]" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group4.childNodes[0].link_cta24" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Reserve</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/airports/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group4.childNodes[1].link_cta25" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Airports</p></a></li><li class="css-hCxyXn"><a data-baseweb="link" aria-label="" data-testid="link-center" href="https://www.uber.com/gb/en/r/cities/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group4.childNodes[2].link_cta26" class="css-huebvm"><p data-baseweb="typo-paragraphsmall" class="css-ekbqzf">Cities</p></a></li></ul></div></div></div><div data-baseweb="block" class="css-HXvWP"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><ul class="css-FvMyi"><li><div><a data-baseweb="button" href="https://www.linkedin.com/company/1815218" target="_blank" data-testid="button-social" text="LinkedIn" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_linkedin_cta29" class="css-cLYIms"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none"><title>linkedin</title><path d="M21.37 1H2.62C1.73 1 1 1.71 1 2.58v18.83c0 .88.73 1.59 1.62 1.59h18.75c.9 0 1.63-.71 1.63-1.59V2.58C23 1.71 22.27 1 21.37 1ZM7.53 19.75H4.26V9.25h3.27v10.5ZM5.89 7.81C4.85 7.81 4 6.96 4 5.92s.84-1.89 1.89-1.89c1.04 0 1.89.85 1.89 1.89.01 1.04-.84 1.89-1.89 1.89Zm13.86 11.94h-3.26v-5.1c0-1.22-.02-2.78-1.7-2.78-1.7 0-1.96 1.33-1.96 2.7v5.19H9.57V9.26h3.13v1.43h.04c.44-.83 1.5-1.7 3.09-1.7 3.3 0 3.91 2.17 3.91 5v5.76h.01Z" fill="currentColor"></path></svg></a></div></li><li><div><a data-baseweb="button" href="https://www.youtube.com/channel/UCgnxoUwDmmyzeigmmcf0hZA" target="_blank" data-testid="button-social" text="YouTube" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_youtube_cta34" class="css-cLYIms"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none"><title>youtube</title><path d="M23 12s0-3.85-.46-5.58c-.25-.95-1-1.7-1.94-1.96C18.88 4 12 4 12 4s-6.88 0-8.6.46c-.95.25-1.69 1.01-1.94 1.96C1 8.15 1 12 1 12s.04 3.85.5 5.58c.25.95 1 1.7 1.95 1.96 1.71.46 8.59.46 8.59.46s6.88 0 8.6-.46c.95-.25 1.69-1.01 1.94-1.96.46-1.73.42-5.58.42-5.58Zm-13 3.27V8.73L15.5 12 10 15.27Z" fill="currentColor"></path></svg></a></div></li><li><div><a data-baseweb="button" href="https://instagram.com/uber/" target="_blank" data-testid="button-social" text="Instagram" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_instagram_cta27" class="css-cLYIms"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none"><title>instagram</title><g fill="currentColor"><path d="M21.15 2.85C19.05.74 16.23 1 12 1 8.04 1 5 .69 2.85 2.85.74 4.95 1 7.77 1 12c0 3.95-.31 7 1.85 9.15C4.95 23.26 7.77 23 12 23c3.96 0 7 .31 9.15-1.85C23.25 19.05 23 16.23 23 12c0-4.31.24-7.07-1.85-9.15Zm-1.4 16.9c-1.37 1.37-3.18 1.27-7.75 1.27-4.29 0-6.34.15-7.75-1.27-1.44-1.44-1.27-3.51-1.27-7.75 0-4.23-.15-6.33 1.27-7.75C5.66 2.84 7.6 2.98 12 2.98c4.23 0 6.33-.15 7.75 1.27 1.38 1.38 1.27 3.22 1.27 7.75 0 4.24.15 6.34-1.27 7.75Z"></path><path d="M12 6.35a5.65 5.65 0 1 0 .001 11.301A5.65 5.65 0 0 0 12 6.35Zm0 9.32c-2.02 0-3.67-1.64-3.67-3.67 0-2.03 1.64-3.67 3.67-3.67 2.03 0 3.67 1.64 3.67 3.67 0 2.02-1.65 3.67-3.67 3.67ZM17.87 4.81c-.73 0-1.32.59-1.32 1.32 0 .73.59 1.32 1.32 1.32.73 0 1.32-.59 1.32-1.32 0-.73-.59-1.32-1.32-1.32Z"></path></g></svg></a></div></li><li><div><a data-baseweb="button" href="https://twitter.com/uber" target="_blank" data-testid="button-social" text="Twitter" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_twitter_cta33" class="css-cLYIms"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none"><title>twitter</title><path d="M14.094 10.317 22.28 1H20.34l-7.11 8.088L7.557 1H1.01l8.583 12.231L1.01 23H2.95l7.503-8.543L16.446 23h6.546M3.649 2.432h2.978L20.34 21.639h-2.98" fill="currentColor"></path></svg></a></div></li></ul><ul class="css-lfhXcE"><li><button data-baseweb="button" aria-label="Current language: English" data-testid="button-geolang" lang="en" class="css-fOpIi"><div aria-hidden="true" class="css-hdjfHk"><svg width="16" height="16" viewBox="0 0 24 24" fill="none"><title>Globe</title><path d="M12 1C5.9 1 1 5.9 1 12s4.9 11 11 11 11-4.9 11-11S18.1 1 12 1Zm8 11c0 .7-.1 1.4-.3 2-.6-1.5-1.6-3.1-3-4.7l1.8-1.8c1 1.3 1.5 2.8 1.5 4.5ZM6.5 6.5c1.3 0 3.6.8 6 2.9l-3.2 3.2C7.1 9.8 6.5 7.5 6.5 6.5Zm8.1 5c2.3 2.7 2.9 5 2.9 6-1.3 0-3.6-.8-6-2.9l3.1-3.1Zm1.9-6.1-1.9 1.9c-1.6-1.4-3.2-2.4-4.7-3 .7-.2 1.3-.3 2-.3 1.8 0 3.3.5 4.6 1.4ZM4 12c0-.7.1-1.4.3-2 .6 1.5 1.6 3.1 3 4.7l-1.8 1.8C4.5 15.2 4 13.7 4 12Zm3.5 6.6 1.9-1.9c1.6 1.4 3.2 2.4 4.7 3-.7.2-1.3.3-2 .3-1.8 0-3.3-.5-4.6-1.4Z" fill="currentColor"></path></svg></div>English</button></li></ul><div class="css-fdGxkK"><div class="css-jgmlEN"><a data-baseweb="link" aria-label="Download the Uber app on Google Play" href="https://rides.sng.link/Bw5zn/vz1k?_dl=uber%3A%2F%2F&amp;pcn=uber-com-footer&amp;mvid=[marketing-visitor-id]" target="_self" class="css-cjHYHA css-dLzUvf"><img alt="Download the Uber app for Android" aria-hidden="true" loading="lazy" role="presentation" src="https://tb-static.uber.com/prod/udam-assets/07335cd8-47d5-51a0-a07b-125195eb4cea.svg"/></a><a data-baseweb="link" aria-label="Download the Uber app on the App Store" href="https://rides.sng.link/Cw5zn/564k?_dl=uber%3A%2F%2F&amp;_smtype=3&amp;pcn=uber-com-footer&amp;mvid=[marketing-visitor-id]" target="_self" class="css-cjHYHA css-dLzUvf"><img alt="Download the Uber app for iOS" aria-hidden="true" loading="lazy" role="presentation" src="https://tb-static.uber.com/prod/udam-assets/e723f2d5-90c4-5d3b-ad4d-c36fa5597879.svg"/></a></div></div></div></div><div data-baseweb="block" class="css-HXvWP"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><div data-baseweb="block" class="css-gzlAMi"><p data-baseweb="typo-paragraphxsmall" data-testid="typography-copyright" class="css-dKvrsS"><span>© <!-- -->2026<!-- --> </span>Uber Technologies Inc.</p></div><div data-baseweb="block" class="css-gBmvBw"></div><div class="css-iXmjNW"></div><div data-baseweb="block" class="css-gzlAMi"><ul class="css-rwapI"><li><a data-baseweb="link" aria-label="" href="https://www.uber.com/legal/document/?name=privacy-notice" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_privacy_cta31" class="css-xdbDk"><p data-baseweb="typo-paragraphxsmall" class="css-dtzAnt">Privacy</p></a></li><li><a data-baseweb="link" aria-label="" href="https://www.uber.com/gb/en/about/accessibility/" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_accessibility_cta1" class="css-xdbDk"><p data-baseweb="typo-paragraphxsmall" class="css-dtzAnt">Accessibility</p></a></li><li><a data-baseweb="link" aria-label="Terms and Conditions" href="https://www.uber.com/legal/document/?name=general-terms-of-use" target="_self" data-tracking-name="_00cdbbb9-7ef2-4465-9486-c208a836b0f5_terms_cta32" class="css-xdbDk"><p data-baseweb="typo-paragraphxsmall" class="css-dtzAnt">Terms</p></a></li></ul></div></div></div></div></div></div></div></section></footer></div></div><div class="css-hSgrkT"><div tabindex="-1"><div data-baseweb="block" data-testid="desktop-content-drawer" class="css-hNYSyH"><div data-baseweb="block" class="css-jdmMfJ"><button data-baseweb="button" aria-label="Close" class="css-cxltSn css-favjHz"><svg width="42" height="42" viewBox="0 0 24 24" fill="none"><path d="m18.1 8.1-2.2-2.2-3.9 4-3.9-4-2.2 2.2 4 3.9-4 3.9 2.2 2.2 3.9-4 3.9 4 2.2-2.2-4-3.9 4-3.9Z" fill="currentColor"></path></svg></button></div><div class="css-hSgrkT"><div class="css-bEvpjW"><div class="css-btbKrJ"><h2 data-baseweb="typo-displayxsmall" class="css-ePqIsi">Select your preferred language</h2></div><a data-baseweb="button" aria-label="English, English" href="/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" lang="en" target="_self" class="css-boIhmv"><span>English, English</span></a></div></div></div><div data-baseweb="block" data-testid="mobile-content-drawer" class="css-UsIex"><div data-baseweb="block" class="css-beegqO"><ul role="tree" class="css-idoxzA"><li role="treeitem" data-nodeid="" tabindex="0" class="css-bWHXse"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><div class="css-dWTxGR"><div class="css-kpjDOI"></div></div><h3 class="css-fCwhaC">Products</h3><div class="css-guiGWC"><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M18 8v3.8l-6 4.6-6-4.6V8l6 4.6L18 8Z" fill="currentColor"></path></svg></div></div></div><ul role="group" class="css-hYZYtM"><li role="treeitem" data-nodeid="" tabindex="0" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/advertising/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[0].link_cta6" class="css-kFHXBV"><p class="css-hhSroJ">Advertising</p><p class="css-jrSMTd">Learn more about advertising on Uber. Reach customers as they go anywhere and get anything.</p></a></div></div></li><li role="treeitem" data-nodeid="1" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/earn/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[1].link_cta7" class="css-kFHXBV"><p class="css-hhSroJ">Earn</p><p class="css-jrSMTd">Resources for driving and delivering with Uber</p></a></div></div></li><li role="treeitem" data-nodeid="2" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/ride/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[2].link_cta8" class="css-kFHXBV"><p class="css-hhSroJ">Ride</p><p class="css-jrSMTd">Experiences and information for people on the go</p></a></div></div></li><li role="treeitem" data-nodeid="3" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/eat/" aria-label="" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[3].link_cta9" class="css-kFHXBV"><p class="css-hhSroJ">Eat</p><p class="css-jrSMTd">Ordering meals for delivery is just the start with Uber Eats</p></a></div></div></li><li role="treeitem" data-nodeid="4" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/merchants/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[4].link_cta10" class="css-kFHXBV"><p class="css-hhSroJ">Merchants</p><p class="css-jrSMTd">Bringing stores within reach of a world of customers</p></a></div></div></li><li role="treeitem" data-nodeid="5" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/business/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[5].link_cta11" class="css-kFHXBV"><p class="css-hhSroJ">Business</p><p class="css-jrSMTd">Transforming the way companies transport and feed their people</p></a></div></div></li><li role="treeitem" data-nodeid="6" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/freight/" target="_self" hidden="" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[6].link_cta12" class="css-kFHXBV"><p class="css-hhSroJ">Freight</p><p class="css-jrSMTd">Taking shipping logistics in a new direction</p></a></div></div></li><li role="treeitem" data-nodeid="7" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/health/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[7].link_cta13" class="css-kFHXBV"><p class="css-hhSroJ">Health</p><p class="css-jrSMTd">Moving care forward together with healthcare providers</p></a></div></div></li><li role="treeitem" data-nodeid="8" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/higher-education/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[8].link_cta14" class="css-kFHXBV"><p class="css-hhSroJ">Higher Education</p><p class="css-jrSMTd">Improving campus transport</p></a></div></div></li><li role="treeitem" data-nodeid="9" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/transit/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[9].link_cta15" class="css-kFHXBV"><p class="css-hhSroJ">Transit</p><p class="css-jrSMTd">Expanding the reach of public transport</p></a></div></div></li></ul></li><li role="treeitem" data-nodeid="1" tabindex="-1" class="css-bWHXse"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><div class="css-dWTxGR"><div class="css-kpjDOI"></div></div><h3 class="css-fCwhaC">Company</h3><div class="css-guiGWC"><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M18 8v3.8l-6 4.6-6-4.6V8l6 4.6L18 8Z" fill="currentColor"></path></svg></div></div></div><ul role="group" class="css-hYZYtM"><li role="treeitem" data-nodeid="" tabindex="0" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/engineering/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[1].childNodes[0].link_cta16" class="css-kFHXBV"><p class="css-hhSroJ">Engineering</p><p class="css-jrSMTd">The technology behind Uber Engineering</p></a></div></div></li><li role="treeitem" data-nodeid="1" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/blog/community-support/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[1].childNodes[1].link_cta17" class="css-kFHXBV"><p class="css-hhSroJ">Community support</p><p class="css-jrSMTd">Doing the right thing for cities and communities worldwide</p></a></div></div></li><li role="treeitem" data-nodeid="2" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/newsroom/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[1].childNodes[2].link_cta18" class="css-kFHXBV"><p class="css-hhSroJ">Newsroom</p><p class="css-jrSMTd">Uber news and updates in your country</p></a></div></div></li><li role="treeitem" data-nodeid="3" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a data-baseweb="link" href="https://www.uber.com/gb/en/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[1].childNodes[3].link_cta19" class="css-kFHXBV"><p class="css-hhSroJ">Uber.com</p><p class="css-jrSMTd">Product, how-to, and policy content—and more</p></a></div></div></li></ul></li><li role="treeitem" data-nodeid="2" tabindex="-1" class="css-jrSJdi"><div overrides="[object Object]" class="css-coikQw"><div class="css-hDdkid"><a aria-label="" class="css-iVVeIU" data-baseweb="link" href="https://help.uber.com/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_additionalCta.link_cta1">Help</a></div></div><ul role="group" class="css-erEjEB"></ul></li></ul></div><div data-baseweb="block" class="css-cndfHK"><button data-baseweb="button" aria-label="Change language" aria-expanded="false" aria-haspopup="menu" class="css-kfoJzM"><div aria-hidden="true" class="css-hdjfHk"><svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M12 1C5.9 1 1 5.9 1 12s4.9 11 11 11 11-4.9 11-11S18.1 1 12 1Zm8 11c0 .7-.1 1.4-.3 2-.6-1.5-1.6-3.1-3-4.7l1.8-1.8c1 1.3 1.5 2.8 1.5 4.5ZM6.5 6.5c1.3 0 3.6.8 6 2.9l-3.2 3.2C7.1 9.8 6.5 7.5 6.5 6.5Zm8.1 5c2.3 2.7 2.9 5 2.9 6-1.3 0-3.6-.8-6-2.9l3.1-3.1Zm1.9-6.1-1.9 1.9c-1.6-1.4-3.2-2.4-4.7-3 .7-.2 1.3-.3 2-.3 1.8 0 3.3.5 4.6 1.4ZM4 12c0-.7.1-1.4.3-2 .6 1.5 1.6 3.1 3 4.7l-1.8 1.8C4.5 15.2 4 13.7 4 12Zm3.5 6.6 1.9-1.9c1.6 1.4 3.2 2.4 4.7 3-.7.2-1.3.3-2 .3-1.8 0-3.3-.5-4.6-1.4Z" fill="currentColor"></path></svg></div>EN</button></div><div data-baseweb="block" class="css-hSgrkT"><div class="css-bEvpjW"><div class="css-btbKrJ"><h2 data-baseweb="typo-displayxsmall" class="css-ePqIsi">Select your preferred language</h2></div><a data-baseweb="button" aria-label="English, English" href="/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/" lang="en" target="_self" class="css-boIhmv"><span>English, English</span></a></div></div><div data-baseweb="block" class="css-hSgrkT"><section data-baseweb="block" class="css-gqcHgx"><div data-baseweb="block" class="css-hazmlH"><div data-baseweb="block" class="css-ofGld"><div data-baseweb="block" class="container-inner css-gMUoBL"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><div data-baseweb="block" class="css-cpjRpJ"><a data-baseweb="link" href="https://m.uber.com/looking/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[0].link_cta2" class="css-gVWXrV"><div class="css-kXvOCV"><div class="css-kpjDOI"></div></div><div class="css-kfGxPu"><h2 data-baseweb="typo-headingxlarge" class="css-dWBVmg">Ride</h2><svg width="32" height="32" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m22.2 12-6.5 9h-3.5l5.5-7.5H2v-3h15.7L12.2 3h3.5l6.5 9Z" fill="currentColor"></path></svg></div><div class="css-dkkdtH"><p data-baseweb="typo-paragraphmedium" class="css-dTqljZ"></p></div></a></div><div data-baseweb="block" class="css-lbyguR"></div><div data-baseweb="block" class="css-cpjRpJ"><a data-baseweb="link" aria-label="" href="https://drivers.uber.com/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[1].link_cta3" class="css-gVWXrV"><div class="css-kXvOCV"><div class="css-kpjDOI"></div></div><div class="css-kfGxPu"><h2 data-baseweb="typo-headingxlarge" class="css-dWBVmg">Drive &amp; deliver</h2><svg width="32" height="32" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m22.2 12-6.5 9h-3.5l5.5-7.5H2v-3h15.7L12.2 3h3.5l6.5 9Z" fill="currentColor"></path></svg></div><div class="css-dkkdtH"><p data-baseweb="typo-paragraphmedium" class="css-dTqljZ"></p></div></a></div><div data-baseweb="block" class="css-lbyguR"></div><div data-baseweb="block" class="css-cpjRpJ"><a data-baseweb="link" href="https://ubereats.com/login-redirect/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[2].link_cta4" class="css-gVWXrV"><div class="css-kXvOCV"><div class="css-kpjDOI"></div></div><div class="css-kfGxPu"><h2 data-baseweb="typo-headingxlarge" class="css-dWBVmg">Uber Eats</h2><svg width="32" height="32" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m22.2 12-6.5 9h-3.5l5.5-7.5H2v-3h15.7L12.2 3h3.5l6.5 9Z" fill="currentColor"></path></svg></div><div class="css-dkkdtH"><p data-baseweb="typo-paragraphmedium" class="css-dTqljZ"></p></div></a></div><div data-baseweb="block" class="css-lbyguR"></div><div data-baseweb="block" class="css-cpjRpJ"><a data-baseweb="link" href="https://business.uber.com/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[3].link_cta5" class="css-gVWXrV"><div class="css-kXvOCV"><div class="css-kpjDOI"></div></div><div class="css-kfGxPu"><h2 data-baseweb="typo-headingxlarge" class="css-dWBVmg">Business</h2><svg width="32" height="32" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m22.2 12-6.5 9h-3.5l5.5-7.5H2v-3h15.7L12.2 3h3.5l6.5 9Z" fill="currentColor"></path></svg></div><div class="css-dkkdtH"><p data-baseweb="typo-paragraphmedium" class="css-dTqljZ"></p></div></a></div><div data-baseweb="block" class="css-lbyguR"></div></div></div></div></div></section></div><div data-baseweb="block" class="css-hSgrkT"><section data-baseweb="block" class="css-gqcHgx"><div data-baseweb="block" class="css-hazmlH"><div data-baseweb="block" class="css-ofGld"><div data-baseweb="block" class="container-inner css-gMUoBL"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"></div></div></div></div></section></div><div data-baseweb="block" class="css-hSgrkT"><section data-baseweb="block" class="css-gqcHgx"><div data-baseweb="block" class="css-hazmlH"><div data-baseweb="block" class="css-ofGld"><div data-baseweb="block" class="container-inner css-gMUoBL"><div data-baseweb="block" data-testid="block-container" class="css-bVFrLX"><div data-baseweb="block" class="css-cpjRpJ"><a data-baseweb="link" href="https://drivers.uber.com/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[0].link_cta20" class="css-gVWXrV"><div class="css-kXvOCV"><div class="css-kpjDOI"></div></div><div class="css-kfGxPu"><h2 data-baseweb="typo-headingxlarge" class="css-dWBVmg">Drive &amp; deliver</h2><svg width="32" height="32" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m22.2 12-6.5 9h-3.5l5.5-7.5H2v-3h15.7L12.2 3h3.5l6.5 9Z" fill="currentColor"></path></svg></div><div class="css-dkkdtH"><p data-baseweb="typo-paragraphmedium" class="css-dTqljZ"></p></div></a></div><div data-baseweb="block" class="css-lbyguR"></div><div data-baseweb="block" class="css-cpjRpJ"><a data-baseweb="link" href="https://m.uber.com/login-redirect" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[1].link_cta21" class="css-gVWXrV"><div class="css-kXvOCV"><div class="css-kpjDOI"></div></div><div class="css-kfGxPu"><h2 data-baseweb="typo-headingxlarge" class="css-dWBVmg">Ride</h2><svg width="32" height="32" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m22.2 12-6.5 9h-3.5l5.5-7.5H2v-3h15.7L12.2 3h3.5l6.5 9Z" fill="currentColor"></path></svg></div><div class="css-dkkdtH"><p data-baseweb="typo-paragraphmedium" class="css-dTqljZ"></p></div></a></div><div data-baseweb="block" class="css-lbyguR"></div><div data-baseweb="block" class="css-cpjRpJ"><a data-baseweb="link" href="https://ubereats.com/login-redirect/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[2].link_cta22" class="css-gVWXrV"><div class="css-kXvOCV"><div class="css-kpjDOI"></div></div><div class="css-kfGxPu"><h2 data-baseweb="typo-headingxlarge" class="css-dWBVmg">Uber Eats</h2><svg width="32" height="32" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m22.2 12-6.5 9h-3.5l5.5-7.5H2v-3h15.7L12.2 3h3.5l6.5 9Z" fill="currentColor"></path></svg></div><div class="css-dkkdtH"><p data-baseweb="typo-paragraphmedium" class="css-dTqljZ"></p></div></a></div><div data-baseweb="block" class="css-lbyguR"></div><div data-baseweb="block" class="css-cpjRpJ"><a data-baseweb="link" href="https://business.uber.com/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[3].link_cta23" class="css-gVWXrV"><div class="css-kXvOCV"><div class="css-kpjDOI"></div></div><div class="css-kfGxPu"><h2 data-baseweb="typo-headingxlarge" class="css-dWBVmg">Uber for Business</h2><svg width="32" height="32" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m22.2 12-6.5 9h-3.5l5.5-7.5H2v-3h15.7L12.2 3h3.5l6.5 9Z" fill="currentColor"></path></svg></div><div class="css-dkkdtH"><p data-baseweb="typo-paragraphmedium" class="css-dTqljZ"></p></div></a></div><div data-baseweb="block" class="css-lbyguR"></div><div data-baseweb="block" class="css-cpjRpJ"><a data-baseweb="link" href="https://account.uber.com/" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[4].link_cta24" class="css-gVWXrV"><div class="css-kXvOCV"><div class="css-kpjDOI"></div></div><div class="css-kfGxPu"><h2 data-baseweb="typo-headingxlarge" class="css-dWBVmg">Manage account</h2><svg width="32" height="32" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m22.2 12-6.5 9h-3.5l5.5-7.5H2v-3h15.7L12.2 3h3.5l6.5 9Z" fill="currentColor"></path></svg></div><div class="css-dkkdtH"><p data-baseweb="typo-paragraphmedium" class="css-dTqljZ"></p></div></a></div><div data-baseweb="block" class="css-lbyguR"></div><div data-baseweb="block" class="css-cpjRpJ"><a data-baseweb="link" href="https://auth.uber.com/login/logout" target="_self" data-tracking-name="_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[5].link_cta25" class="css-gVWXrV"><div class="css-kXvOCV"></div><div class="css-kfGxPu"><h2 data-baseweb="typo-headingxlarge" class="css-dWBVmg">Sign out</h2><svg width="32" height="32" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m22.2 12-6.5 9h-3.5l5.5-7.5H2v-3h15.7L12.2 3h3.5l6.5 9Z" fill="currentColor"></path></svg></div><div class="css-dkkdtH"><p data-baseweb="typo-paragraphmedium" class="css-dTqljZ"></p></div></a></div><div data-baseweb="block" class="css-lbyguR"></div></div></div></div></div></section></div></div></div></div></main></div><div class="css-PKJb"></div></div></div></div>
<script type="application/json" id="__PWV_DEVICE_INFO__">
{\u0022app\u0022:{},\u0022device\u0022:{\u0022type\u0022:\u0022desktop\u0022},\u0022webview\u0022:{}}
</script>
<script id="__HTML_DATA_EMBEDDING__" type="application/json">{\u0022all_product_suggestions\u0022:{\u0022NAVIGATION_ITEM_TYPE_CAR_RENTALS\u0022:\u0022https://m.uber.com/go/rent \u0022,\u0022NAVIGATION_ITEM_TYPE_CENTRAL\u0022:\u0022https://www.uber.com/business/products/central/\u0022,\u0022NAVIGATION_ITEM_TYPE_CHARTER\u0022:\u0022https://charter.uber.com/\u0022,\u0022NAVIGATION_ITEM_TYPE_RESTAURANTS\u0022:\u0022https://www.ubereats.com/\u0022,\u0022NAVIGATION_ITEM_TYPE_GROCERY\u0022:\u0022https://www.ubereats.com/feeds/shop_feed\u0022,\u0022NAVIGATION_ITEM_TYPE_HEALTH\u0022:\u0022https://www.uberhealth.com/\u0022,\u0022NAVIGATION_ITEM_TYPE_RIDER_ITEM_DELIVERY\u0022:\u0022https://m.uber.com/go/connect/pickup\u0022,\u0022NAVIGATION_ITEM_TYPE_RIDES\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_UBER_RESERVE\u0022:\u0022https://m.uber.com/reserve/\u0022,\u0022NAVIGATION_ITEM_TYPE_HOURLY\u0022:\u0022https://m.uber.com/go/hourly/home\u0022,\u0022NAVIGATION_ITEM_TYPE_MOTO\u0022:\u0022https://m.uber.com/looking?flow_type=focused\u0026product_classifications=MOTO\u0022,\u0022NAVIGATION_ITEM_TYPE_TEENS\u0022:\u0022https://www.uber.com/ride/teens/\u0022,\u0022NAVIGATION_ITEM_TYPE_TRANSIT_RIDER\u0022:\u0022https://www.uber.com/transit/journey-planning/\u0022,\u0022NAVIGATION_ITEM_TYPE_TRAVEL_FLOW_TYPE\u0022:\u0022https://travel.uber.com/go/travel/tour/booking/search\u0022,\u0022NAVIGATION_ITEM_TYPE_TRAVEL\u0022:\u0022https://www.uber.com/gb/en/u/travel-uk/\u0022,\u0022NAVIGATION_ITEM_TYPE_INTERCITY\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_HCV\u0022:\u0022https://m.uber.com/looking/\u0022},\u0022all_product_suggestions_v2\u0022:{\u0022NAVIGATION_ITEM_TYPE_CAR_RENTALS\u0022:\u0022https://m.uber.com/go/rent \u0022,\u0022NAVIGATION_ITEM_TYPE_RESTAURANTS\u0022:\u0022https://www.ubereats.com/\u0022,\u0022NAVIGATION_ITEM_TYPE_GROCERY\u0022:\u0022https://www.ubereats.com/feeds/shop_feed\u0022,\u0022NAVIGATION_ITEM_TYPE_RIDER_ITEM_DELIVERY\u0022:\u0022https://m.uber.com/go/connect/pickup\u0022,\u0022NAVIGATION_ITEM_TYPE_RIDES\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_AIRPORT\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_UBER_RESERVE\u0022:\u0022https://m.uber.com/reserve/\u0022,\u0022NAVIGATION_ITEM_TYPE_HOURLY\u0022:\u0022https://m.uber.com/go/hourly/home\u0022,\u0022NAVIGATION_ITEM_TYPE_MOTO\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_TEENS\u0022:\u0022https://www.uber.com/ride/teens/\u0022,\u0022NAVIGATION_ITEM_TYPE_TRAVEL_FLOW_TYPE\u0022:\u0022https://travel.uber.com/go/travel/tour/booking/search\u0022,\u0022NAVIGATION_ITEM_TYPE_TRAVEL\u0022:\u0022https://www.uber.com/gb/en/u/travel-uk/\u0022,\u0022NAVIGATION_ITEM_TYPE_INTERCITY\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_HCV\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_BLACK\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_ELECTRIC\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_TAXI\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_ELITE\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_SUV\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022NAVIGATION_ITEM_TYPE_SENIORS\u0022:\u0022https://www.uber.com/ride/seniors/\u0022,\u0022NAVIGATION_ITEM_TYPE_TRAVEL_BUSES\u0022:\u0022https://www.uber.com/ride/travel/intercity-bus/\u0022},\u0022automated_tracking_block_list\u0022:[],\u0022automated_tracking_check_enabled_routes\u0022:false,\u0022automated_tracking_enabled_routes\u0022:[\u0022/:country/:lang/drive/\u0022,\u0022/:country/:lang/ride/\u0022,\u0022/:country/:lang/deliver/\u0022,\u0022/global/:lang/price-estimate/\u0022,\u0022/:country/:lang/ride/how-it-works/reserve/\u0022,\u0022/:country/:lang/s/r/\u0022,\u0022/:country/:lang/s/d/kochab/\u0022,\u0022/:country/:lang/s/c/deliver-kochab/\u0022,\u0022/:country/:lang/s/e/referrals/\u0022,\u0022/:country/:lang/\u0022,\u0022/\u0022,\u0022/:country/:lang/business/\u0022],\u0022config.automated_tracking_enabled_blocks\u0022:[\u0022Highlight\u0022,\u0022ContentItems\u0022,\u0022Accordion\u0022,\u0022Navigation\u0022,\u0022Text\u0022,\u0022SubNavigation\u0022,\u0022Header\u0022,\u0022Footer\u0022,\u0022Legal\u0022,\u0022ContentConnected\u0022,\u0022EarningsCalculator\u0022,\u0022MultiLink\u0022,\u0022Media\u0022,\u0022Notification\u0022,\u0022Gallery\u0022,\u0022BillboardVertical\u0022,\u0022Bullets\u0022,\u0022MultilinkBold\u0022,\u0022MerchantSignupForm\u0022,\u0022BannerCampaign\u0022,\u0022AccordionTabbed\u0022,\u0022ContentStandard\u0022,\u0022List\u0022,\u0022Table\u0022,\u0022ProductHeader\u0022,\u0022ListTextLinks\u0022,\u0022CRODriverGuarantee\u0022,\u0022UberReserve\u0022,\u0022ContentHighlight\u0022,\u0022CardGallery\u0022,\u0022DriverGuaranteeLegal\u0022,\u0022FaqSchema\u0022,\u0022GiftingHighlight\u0022,\u0022BillboardCTA\u0022,\u0022CCBSearchbar\u0022,\u0022CCBJobsList\u0022,\u0022ReferralGuarantee\u0022,\u0022Formstack\u0022,\u0022BannerFull\u0022,\u0022BannerCTA\u0022,\u0022Chart\u0022,\u0022Map\u0022,\u0022U4BStandardCTA\u0022,\u0022CROStickyBottomButton\u0022,\u0022VehicleInspectionsMap\u0022,\u0022ReferralGuaranteeLegal\u0022,\u0022DirectSignupForm\u0022,\u0022BillboardStandard\u0022,\u0022HeaderTripSelector\u0022,\u0022BackToTop\u0022,\u0022WordpressGallery\u0022,\u0022GenericIframe\u0022,\u0022CCBBullets\u0022,\u0022Acuity\u0022,\u0022ModalPopup\u0022,\u0022CCBBannerCTA\u0022,\u0022CCBContentList\u0022,\u0022MediaHero\u0022,\u0022U4BLogoGrid\u0022,\u0022EnrollSignup\u0022,\u0022EatsOffer\u0022,\u0022ProductsCarousel\u0022,\u0022U4bContactSalesForm\u0022,\u0022DynamicProductsCarousel\u0022,\u0022Signup\u0022,\u0022JobPosting\u0022,\u0022POSMerchantSignupForm\u0022,\u0022Mosaic\u0022,\u0022CROSearchBarDropdown\u0022,\u0022Dot\u0022,\u0022BarChart\u0022,\u0022HelpSearch\u0022,\u0022WhatsappPhoneIntake\u0022,\u0022CCBContentGrid\u0022,\u0022GreenlightExtension\u0022,\u0022U4BMultilinkCTA\u0022,\u0022CCBLocationsGrid\u0022,\u0022IllustratedValueProps\u0022,\u0022CROBanner\u0022,\u0022DynamicMap\u0022,\u0022CCBBillboardVertical\u0022,\u0022HeaderMap\u0022,\u0022PersonalizedHighlight\u0022,\u0022DynamicEarningsCalculator\u0022,\u0022ProductsCarouselCitySelect\u0022,\u0022CROPesHighlight\u0022,\u0022CROProductSuggestions\u0022,\u0022CROAccountSummary\u0022,\u0022CROPersonalizedHero\u0022,\u0022CROPickUpDropOff\u0022,\u0022CRORentAndReserve\u0022,\u0022CROMapHero\u0022,\u0022ReferralBlock\u0022,\u0022CROEarnerOnboardingBlock\u0022,\u0022SearchResults\u0022,\u0022CROEarnerEducationalBlock\u0022,\u0022CROBannerStrip\u0022,\u0022CROActiveEarnerProductSuggestions\u0022,\u0022CROActiveEarnerSummary\u0022,\u0022CROMembership\u0022,\u0022CROFareBreakdown\u0022,\u0022CROEarnerUpcomingEvents\u0022,\u0022CarRentalListings\u0022,\u0022CROProductList\u0022,\u0022CROEatsCarousels\u0022,\u0022CROCityPOIs\u0022,\u0022CROPopularRouteList\u0022,\u0022CROCitySelectorHighlight\u0022,\u0022CROGuidedTour\u0022,\u0022RouteSummary\u0022,\u0022TravelRouteSchedule\u0022,\u0022IntercityC2RDock\u0022,\u0022IntercityListings\u0022,\u0022TrainsPudo\u0022,\u0022CROOptimizedPudo\u0022],\u0022config.city_selector_variant\u0022:\u0022MODAL_WITH_SUGGESTIONS\u0022,\u0022coreWebVitalsTrackingIdAllowMap\u0022:{\u0022/:c/:l/impact/\u0022:{\u0022label\u0022:\u0022impact-not-edge-cached\u0022,\u0022noQueryParams\u0022:true},\u0022/us/en/impact/\u0022:{\u0022label\u0022:\u0022impact-edge-cached\u0022,\u0022noQueryParams\u0022:true},\u0022/us/en/drive/\u0022:{\u0022label\u0022:\u0022drive\u0022},\u0022/us/en/ride/\u0022:{\u0022label\u0022:\u0022ride\u0022},\u0022/\u0022:{\u0022label\u0022:\u0022home\u0022},\u0022/global/en/sign-in/\u0022:{\u0022label\u0022:\u0022sign-in\u0022,\u0022noQueryParams\u0022:true}},\u0022cro_popular_route_list_discalimer_rosetta_key\u0022:\u0022*Prices reflect the average prices for the most common Uber ride option (e.g. UberX) from destinations within the pickup area shown to destinations within the dropoff area shown for the past 1 month. They do not represent fixed or guaranteed prices.\u0022,\u0022disable_automated_tracking\u0022:false,\u0022enable_streamline_supply_sourcing\u0022:false,\u0022featureFlagMap\u0022:{\u0022automated_tracking\u0022:true,\u0022block_xp_enabled\u0022:true,\u0022redirect_user\u0022:true,\u0022block_xp_local_storage_enabled\u0022:false,\u0022homepage_personalized_redirection\u0022:true,\u0022nav_site_search_enabled\u0022:false,\u0022audience_personalized_redirection\u0022:true,\u0022tulip_shadow_traffic\u0022:true,\u0022use_layover_on_pudo\u0022:true,\u0022use_paste_on_pudo\u0022:true,\u0022hide_keyboard_on_scroll_mobile\u0022:true,\u0022geolocation_cookie_user_object_v2\u0022:true,\u0022use_browser_inbuilt_lazy_load_in_responsive_images\u0022:true,\u0022activate_city_bias_in_footer_location_search\u0022:true,\u0022floating_accessibility_labels_on_pudo\u0022:true,\u0022use_optimized_product_suggestions\u0022:true,\u0022islands_enabled\u0022:true,\u0022use_federation_signal_usage_rights_derivative\u0022:true,\u0022memoize_get_treatment_block_map_at_request_level\u0022:true,\u0022geo_lang_city_redirect_en_fallback\u0022:true,\u0022middleware_timing_logging\u0022:true,\u0022user_preferred_locale_redirect\u0022:true,\u0022user_preferred_locale_redirect_bot_check\u0022:true,\u0022page_pre_hydrate_links_with_safe_url_params\u0022:true,\u0022check_block_territory_dependency_from_flipr\u0022:true,\u0022page_cache_independent_of_territory_id\u0022:true,\u0022multi_encoding_cache\u0022:true,\u0022page_cache_in_memory_storage\u0022:true,\u0022stale_while_revalidate\u0022:true,\u0022seo_blocks_ssr_rendering_enabled\u0022:false,\u0022link_localizer_disable_redis_cache\u0022:true,\u0022live_page_urls_enable_redis_cache\u0022:true,\u0022redirect_middleware_in_precache\u0022:false,\u0022web_notifications_enabled\u0022:true,\u0022web_notifications_allowlist_enabled\u0022:false,\u0022shared_emitter_islands\u0022:true,\u0022content_service_skip_redis_with_retry\u0022:true,\u0022ssr_suspense_yield\u0022:false,\u0022uwa_config_edge_cache\u0022:false},\u0022google_one_tap_metadata\u0022:{\u0022allowlisted_paths\u0022:[\u0022/\u0022,\u0022/:country/:lang/\u0022,\u0022/:country/:lang/ride/\u0022,\u0022/:country/:lang/drive/\u0022,\u0022/:country/:lang/deliver/\u0022],\u0022enable_for_all\u0022:false},\u0022google_one_tap_next_url\u0022:\u0022https://www.uber.com/in/en/\u0022,\u0022hero_blocks_list\u0022:[\u0022CROPickUpDropOff\u0022,\u0022CROMapHero\u0022,\u0022Highlight\u0022,\u0022PersonalizedHighlight\u0022],\u0022html_bundle_size_thresholds\u0022:{},\u0022llm_chatbot_blocked_countries\u0022:[\u0022GB\u0022],\u0022optimized_city_selector_enabled\u0022:false,\u0022pudo_search_in_different_city_enabled\u0022:true,\u0022redirect_loggedin_user\u0022:{\u0022/:country?/:lang?/ride/\u0022:\u0022https://m.uber.com/go/pickup\u0022},\u0022request_user_agent\u0022:\u0022Claude-User (claude-code/2.1.238; +https://support.anthropic.com/)\u0022,\u0022responsive_img_blocks\u0022:[\u0022Highlight\u0022,\u0022Bullets\u0022,\u0022CROPickUpDropOff\u0022,\u0022ContentItems\u0022,\u0022Header\u0022,\u0022Media\u0022,\u0022CROMapHero\u0022,\u0022ArticleHeader\u0022,\u0022MultiLink\u0022,\u0022MultilinkBold\u0022,\u0022CCBContentGrid\u0022,\u0022WCB1SidePhotoPromoMigrated\u0022,\u0022FeaturedArticle\u0022,\u0022ArticleFeed\u0022],\u0022ssr_rendering_feature_flags\u0022:{\u0022city_hub_ssr_rendering_enabled\u0022:false,\u0022eats_carosel_ssr_rendering_enabled\u0022:false,\u0022poi_block_ssr_rendering_enabled\u0022:false,\u0022popular_routes_list_ssr_rendering_enabled\u0022:true,\u0022product_list_ssr_rendering_enabled\u0022:true},\u0022uais_job_postings_blurbs\u0022:{\u0022disclaimer\u0022:\u0022\u0022,\u0022intro\u0022:\u0022\u0022,\u0022whyItMatters\u0022:\u0022\u0022},\u0022url_audience_meta\u0022:{\u0022ride\u0022:{\u0022usl_url\u0022:\u0022https://m.uber.com/login-redirect/\u0022,\u0022patterns\u0022:[\u0022/r/\u0022,\u0022ride\u0022,\u0022uber-one\u0022,\u0022gift\u0022,\u0022rent\u0022,\u0022promo\u0022,\u0022city-hub\u0022]},\u0022drive\u0022:{\u0022usl_url\u0022:\u0022https://drivers.uber.com/\u0022,\u0022patterns\u0022:[\u0022/a/\u0022,\u0022/d/\u0022,\u0022/e/\u0022,\u0022(?\u003C!item-)deliver\u0022,\u0022drive\u0022,\u0022earning\u0022,\u0022uber-pro\u0022]}}}</script>
<script type="application/json" id="__ANALYTICS_PLUGIN_CONFIG__">
{\u0022async\u0022:true,\u0022serviceName\u0022:\u0022uber-sites\u0022,\u0022uuid\u0022:\u002234f89dc0-1ca9-426a-b342-69f601184f73\u0022}
</script>
<script nonce="8cb736c6-924e-49f7-8a41-47a6b3562761" integrity="sha384-C4EClKu0ywFMFEvayIV8JO1hjJu7jXRJYZtOTC3ZLLhZITYykeasGJu44zijzZL4">(function (){function __youtubeIframeScript__(){var e=document.getElementsByTagName("iframe");try{for(var t=0;t<e.length;t++)if("enabled"===e.item(t).dataset.tracking&&"www.youtube.com"===new URL(e.item(t).src).host){var r=document.createElement("script");r.src="https://www.youtube.com/iframe_api";var a=document.getElementsByTagName("script")[0];return a.parentNode.insertBefore(r,a),void(window.__on_youtube_iframe_ready__=new Promise((e=>{window.onYouTubeIframeAPIReady=e})))}}catch(e){}}
__youtubeIframeScript__();})();</script>
<script type="application/json" id="__FEATURE_TOGGLES__">
{\u0022data\u0022:{}}
</script>
<script type="application/json" id="__USL_GOOGLE_ONE_TAP__">
{\u0022enabled\u0022:false,\u0022googleIdConfiguration\u0022:{\u0022provider\u0022:\u0022google\u0022,\u0022scope\u0022:\u0022profile email\u0022,\u0022prompt\u0022:\u0022select_account\u0022,\u0022ux_mode\u0022:\u0022popup\u0022,\u0022cookiepolicy\u0022:\u0022single_host_origin\u0022,\u0022cancel_on_tap_outside\u0022:false,\u0022itp_support\u0022:false},\u0022showOnMobileScreens\u0022:true,\u0022deferredSessionUrl\u0022:\u0022https://auth.uber.com/v2/create-deferred-session\u0022,\u0022nextUrl\u0022:\u0022https://www.uber.com/in/en/\u0022,\u0022enableWhenAuthenticated\u0022:false,\u0022shouldManuallyInit\u0022:true,\u0022debugLogging\u0022:false,\u0022clientId\u0022:\u002289939265457-enilmfbsacgcj2b7qq3sc7jc51u5b3ge.apps.googleusercontent.com\u0022,\u0022showOnITPBrowsers\u0022:true}
</script>
<script type="application/json" id="__TRANSLATIONS__">
{\u0022localeCode\u0022:\u0022en-GB\u0022,\u0022translations\u0022:{\u0022Country.display_name.CA\u0022:\u0022Canada\u0022,\u0022Country.display_name.US\u0022:\u0022United States\u0022,\u0022Country.display_name.AL\u0022:\u0022Albania\u0022,\u0022Country.display_name.DZ\u0022:\u0022Algeria\u0022,\u0022Country.display_name.AD\u0022:\u0022Andorra\u0022,\u0022Country.display_name.AR\u0022:\u0022Argentina\u0022,\u0022Country.display_name.AT\u0022:\u0022Austria\u0022,\u0022Country.display_name.AZ\u0022:\u0022Azerbaijan\u0022,\u0022Country.display_name.BH\u0022:\u0022Bahrain\u0022,\u0022Country.display_name.BD\u0022:\u0022Bangladesh\u0022,\u0022Country.display_name.BY\u0022:\u0022Belarus\u0022,\u0022Country.display_name.GB\u0022:\u0022United Kingdom\u0022,\u0022Country.display_name.BJ\u0022:\u0022Benin\u0022,\u0022Country.display_name.BA\u0022:\u0022Bosnia and Herzegovina\u0022,\u0022Country.display_name.IE\u0022:\u0022Ireland\u0022,\u0022Country.display_name.BW\u0022:\u0022Botswana\u0022,\u0022Country.display_name.IL\u0022:\u0022Israel\u0022,\u0022Country.display_name.BG\u0022:\u0022Bulgaria\u0022,\u0022Country.display_name.FR\u0022:\u0022France\u0022,\u0022Country.display_name.BF\u0022:\u0022Burkina Faso\u0022,\u0022Country.display_name.BI\u0022:\u0022Burundi\u0022,\u0022Country.display_name.BE\u0022:\u0022Belgium\u0022,\u0022Country.display_name.KH\u0022:\u0022Cambodia\u0022,\u0022Country.display_name.CM\u0022:\u0022Cameroon\u0022,\u0022Country.display_name.CV\u0022:\u0022Cape Verde\u0022,\u0022Country.display_name.CF\u0022:\u0022Central African Republic\u0022,\u0022Country.display_name.TD\u0022:\u0022Chad\u0022,\u0022Country.display_name.DK\u0022:\u0022Denmark\u0022,\u0022Country.display_name.CN\u0022:\u0022China, People's Republic of\u0022,\u0022Country.display_name.FI\u0022:\u0022Finland\u0022,\u0022Country.display_name.GR\u0022:\u0022Greece\u0022,\u0022Country.display_name.DE\u0022:\u0022Germany\u0022,\u0022Country.display_name.CO\u0022:\u0022Colombia\u0022,\u0022Country.display_name.IT\u0022:\u0022Italy\u0022,\u0022Country.display_name.KM\u0022:\u0022Comoros\u0022,\u0022Country.display_name.CR\u0022:\u0022Costa Rica\u0022,\u0022Country.display_name.HR\u0022:\u0022Croatia\u0022,\u0022Country.display_name.NL\u0022:\u0022Netherlands\u0022,\u0022Country.display_name.NO\u0022:\u0022Norway\u0022,\u0022Country.display_name.PL\u0022:\u0022Poland\u0022,\u0022Country.display_name.PT\u0022:\u0022Portugal\u0022,\u0022Country.display_name.RO\u0022:\u0022Romania\u0022,\u0022Country.display_name.ES\u0022:\u0022Spain\u0022,\u0022Country.display_name.CH\u0022:\u0022Switzerland\u0022,\u0022Country.display_name.UA\u0022:\u0022Ukraine\u0022,\u0022Country.display_name.CY\u0022:\u0022Cyprus\u0022,\u0022Country.display_name.CZ\u0022:\u0022Czech Republic\u0022,\u0022Country.display_name.CG\u0022:\u0022Congo, Republic of the (Congo-Brazzaville)\u0022,\u0022Country.display_name.SE\u0022:\u0022Sweden\u0022,\u0022Country.display_name.DO\u0022:\u0022Dominican Republic\u0022,\u0022Country.display_name.EC\u0022:\u0022Ecuador\u0022,\u0022Country.display_name.EG\u0022:\u0022Egypt\u0022,\u0022Country.display_name.SV\u0022:\u0022El Salvador\u0022,\u0022Country.display_name.EE\u0022:\u0022Estonia\u0022,\u0022Country.display_name.ET\u0022:\u0022Ethiopia\u0022,\u0022Country.display_name.GM\u0022:\u0022Gambia, The\u0022,\u0022Country.display_name.GH\u0022:\u0022Ghana\u0022,\u0022Country.display_name.GU\u0022:\u0022Guam\u0022,\u0022Country.display_name.GT\u0022:\u0022Guatemala\u0022,\u0022Country.display_name.GG\u0022:\u0022Guernsey and Alderney\u0022,\u0022Country.display_name.HU\u0022:\u0022Hungary\u0022,\u0022Country.display_name.KE\u0022:\u0022Kenya\u0022,\u0022Country.display_name.NG\u0022:\u0022Nigeria\u0022,\u0022Country.display_name.ZA\u0022:\u0022South Africa\u0022,\u0022Country.display_name.IS\u0022:\u0022Iceland\u0022,\u0022Country.display_name.ID\u0022:\u0022Indonesia\u0022,\u0022Country.display_name.IQ\u0022:\u0022Iraq\u0022,\u0022Country.display_name.IM\u0022:\u0022Isle of Man\u0022,\u0022Country.display_name.CI\u0022:\u0022Côte d’Ivoire (Ivory Coast)\u0022,\u0022Country.display_name.JO\u0022:\u0022Jordan\u0022,\u0022Country.display_name.KZ\u0022:\u0022Kazakhstan\u0022,\u0022Country.display_name.KW\u0022:\u0022Kuwait\u0022,\u0022Country.display_name.LV\u0022:\u0022Latvia\u0022,\u0022Country.display_name.LB\u0022:\u0022Lebanon\u0022,\u0022Country.display_name.AE\u0022:\u0022United Arab Emirates\u0022,\u0022Country.display_name.LT\u0022:\u0022Lithuania\u0022,\u0022Country.display_name.LU\u0022:\u0022Luxembourg\u0022,\u0022Country.display_name.MO\u0022:\u0022Macao\u0022,\u0022Country.display_name.MY\u0022:\u0022Malaysia\u0022,\u0022Country.display_name.BR\u0022:\u0022Brazil\u0022,\u0022Country.display_name.MX\u0022:\u0022Mexico\u0022,\u0022Country.display_name.MT\u0022:\u0022Malta\u0022,\u0022Country.display_name.CL\u0022:\u0022Chile\u0022,\u0022Country.display_name.MA\u0022:\u0022Morocco\u0022,\u0022Country.display_name.MM\u0022:\u0022Myanmar (Burma)\u0022,\u0022Country.display_name.NA\u0022:\u0022Namibia\u0022,\u0022Country.display_name.NP\u0022:\u0022Nepal\u0022,\u0022Country.display_name.OM\u0022:\u0022Oman\u0022,\u0022Country.display_name.PK\u0022:\u0022Pakistan\u0022,\u0022Country.display_name.PA\u0022:\u0022Panama\u0022,\u0022Country.display_name.PY\u0022:\u0022Paraguay\u0022,\u0022Country.display_name.PE\u0022:\u0022Peru\u0022,\u0022Country.display_name.AU\u0022:\u0022Australia\u0022,\u0022Country.display_name.NZ\u0022:\u0022New Zealand\u0022,\u0022Country.display_name.PH\u0022:\u0022Philippines\u0022,\u0022Country.display_name.IN\u0022:\u0022India\u0022,\u0022Country.display_name.PR\u0022:\u0022Puerto Rico\u0022,\u0022Country.display_name.QA\u0022:\u0022Qatar\u0022,\u0022Country.display_name.RU\u0022:\u0022Russia\u0022,\u0022Country.display_name.HK\u0022:\u0022Hong Kong\u0022,\u0022Country.display_name.TW\u0022:\u0022Taiwan (ROC)\u0022,\u0022Country.display_name.SA\u0022:\u0022Saudi Arabia\u0022,\u0022Country.display_name.JP\u0022:\u0022Japan\u0022,\u0022Country.display_name.RS\u0022:\u0022Serbia\u0022,\u0022Country.display_name.SG\u0022:\u0022Singapore\u0022,\u0022Country.display_name.SK\u0022:\u0022Slovakia\u0022,\u0022Country.display_name.SI\u0022:\u0022Slovenia\u0022,\u0022Country.display_name.KR\u0022:\u0022Korea, Republic of (South Korea)\u0022,\u0022Country.display_name.LK\u0022:\u0022Sri Lanka\u0022,\u0022Country.display_name.TZ\u0022:\u0022Tanzania\u0022,\u0022Country.display_name.TH\u0022:\u0022Thailand\u0022,\u0022Country.display_name.TR\u0022:\u0022Turkey\u0022,\u0022Country.display_name.UG\u0022:\u0022Uganda\u0022,\u0022Country.display_name.UY\u0022:\u0022Uruguay\u0022,\u0022Country.display_name.VN\u0022:\u0022Vietnam\u0022,\u0022common.accessibility.skip-to-main-content\u0022:\u0022Skip to main content\u0022,\u0022common.brand.uber.text\u0022:\u0022Uber\u0022,\u0022common.button.close.aria-label\u0022:\u0022Close pop-up window\u0022,\u0022common.button.close.text\u0022:\u0022Close\u0022,\u0022common.carousel.button.next.aria-label\u0022:\u0022Advance to next gallery item\u0022,\u0022common.carousel.button.next.text\u0022:\u0022Next\u0022,\u0022common.carousel.button.previous.aria-label\u0022:\u0022Return to previous gallery item\u0022,\u0022common.carousel.button.previous.text\u0022:\u0022Previous\u0022,\u0022common.carousel.nav.wrapper.aria-label\u0022:\u0022Gallery controls\u0022,\u0022common.carousel.dot.aria-label\u0022:\u0022Slide ${current} of ${total}\u0022,\u0022page-not-found.heading.text\u0022:\u0022Sorry, we couldn’t find that page\u0022,\u0022page-not-found.body.text\u0022:\u0022We have shifted a few things around, and your page must have gotten lost. Try retyping the address or just head back to our home page.\u0022,\u0022page-not-found.cta.text\u0022:\u0022Go to Uber.com\u0022,\u0022page-not-found.cta.aria-label\u0022:\u0022Go to Uber.com\u0022,\u0022page-not-found.cta-business.text\u0022:\u0022Go to Uber for Business\u0022,\u0022page-not-found.cta-business.aria-label\u0022:\u0022Go to Uber for Business\u0022,\u0022page-not-found.cta-careers.text\u0022:\u0022Go to Uber Careers\u0022,\u0022page-not-found.cta-careers.aria-label\u0022:\u0022Go to Uber Careers\u0022,\u0022page-not-found.cta-merchants.text\u0022:\u0022Go to Uber Eats for Merchants\u0022,\u0022page-not-found.cta-merchants.aria-label\u0022:\u0022Go to Uber Eats for Merchants\u0022,\u0022page-not-found.cta-freights.text\u0022:\u0022Go to Uber Freight\u0022,\u0022page-not-found.cta-freights.aria-label\u0022:\u0022Go to Uber Freight\u0022,\u0022page-not-found.cta-health.text\u0022:\u0022Go to Uber Health\u0022,\u0022page-not-found.cta-health.aria-label\u0022:\u0022Go to Uber Health\u0022,\u0022page-not-found.title.text\u0022:\u0022Page Not Found\u0022,\u0022notification.browser_support.ie.body\u0022:\u0022This probably isn't the experience you were expecting. Internet Explorer isn't supported on Uber.com. Try switching to a different browser to view our site.\u0022,\u0022notification.browser_support.ie.heading\u0022:\u0022Browser not supported\u0022,\u0022cro.pudo.dropdown.no-results\u0022:\u0022No results\u0022,\u0022cro-pudo.add-stop\u0022:\u0022Add a stop\u0022,\u0022cro-pudo.bounce.cta\u0022:\u0022For me\u0022,\u0022cro-pudo.bounce.heading\u0022:\u0022Switch rider\u0022,\u0022cro-pudo.bounce.for-me\u0022:\u0022For me\u0022,\u0022cro-pudo.bounce.for-someone-else\u0022:\u0022For someone else\u0022,\u0022cro-pudo.schedule.cta\u0022:\u0022Pick-up now\u0022,\u0022cro-pudo.schedule.heading\u0022:\u0022Schedule trip\u0022,\u0022cro-pudo.schedule.pickup-now\u0022:\u0022Pick-up now\u0022,\u0022cro-pudo.schedule.schedule-later\u0022:\u0022Schedule later\u0022,\u0022common.button.cancel\u0022:\u0022Cancel\u0022,\u0022common.button.confirm\u0022:\u0022Confirm\u0022,\u0022cro-pudo.date-picker.label\u0022:\u0022Date\u0022,\u0022cro-pudo.time-picker.label\u0022:\u0022Time\u0022,\u0022pudo.city_selector_option.text\u0022:\u0022Search in a different city\u0022,\u0022challenge.heading.main\u0022:\u0022One more step\u0022,\u0022challenge.heading.complete_assessment\u0022:\u0022Please wait while we complete an automated security check.\u0022,\u0022challenge.message.token_expired\u0022:\u0022Challenge request expired. Please refresh the page and try again.\u0022,\u0022challenge.message.generic_error\u0022:\u0022Something went wrong. Please refresh the page and try again.\u0022,\u0022challenge.message.redirecting\u0022:\u0022Challenge completed. Redirecting you back...\u0022,\u0022challenge.message.long_load\u0022:\u0022Sorry, this is taking longer than expected.\u0022,\u0022challenge.cta.continue\u0022:\u0022Continue\u0022,\u0022gpc-banner.title\u0022:\u0022Opt-out preference signal honoured. For more information, please visit our \u003CgpcTitleLink\u003EUnited States Privacy Notice\u003C/gpcTitleLink\u003E.\u0022,\u0022gpc-banner.error\u0022:\u0022There was an error in processing your opt-out preference signal. Please try again \u003CgpcErrorLink\u003Ehere\u003C/gpcErrorLink\u003E.\u0022,\u0022cookie-preferences.single-layer-opt-out.summary\u0022:\u0022This website uses third-party cookies to serve you relevant ads and provide personalisation by remembering your location. You may opt out from these cookies by selecting the \\u0022Opt out\\u0022 button below. If you have an Uber account, you may opt out of the \\u0022sale\\u0022 or \\u0022sharing\\u0022 of your data \u003CsharingOptOutLink\u003Ehere\u003C/sharingOptOutLink\u003E.\u0022,\u0022cookie-preferences.single-layer-opt-out.opt-out-cta\u0022:\u0022Opt out\u0022,\u0022cookie-preferences.single-layer-opt-out.opt-in-cta\u0022:\u0022Got it\u0022,\u0022cookie-preferences.multi-layer-opt-in.title\u0022:\u0022We use cookies\u0022,\u0022cookie-preferences.multi-layer-opt-in.initial-layer.summary\u0022:\u0022Select \\u0022Accept\\u0022 to enable Uber to use cookies to personalise this site. We use cookies to remember your location, deliver ads and measure ad effectiveness on other apps and websites, including social media. Customise your preferences in your cookie settings, or select \\u0022Reject\\u0022 if you only want us to use essential cookies. Find out more in our \u003CcookieStatementLink\u003ECookie Notice\u003C/cookieStatementLink\u003E.\u0022,\u0022cookie-preferences.multi-layer-opt-in.initial-layer.opt-in-cta\u0022:\u0022Accept\u0022,\u0022cookie-preferences.multi-layer-opt-in.opt-out-cta\u0022:\u0022Reject\u0022,\u0022cookie-preferences.multi-layer-opt-in.initial-layer.cookie-settings-cta\u0022:\u0022Cookie settings\u0022,\u0022cookie-preferences.multi-layer-opt-in.settings-layer.essential\u0022:\u0022Essential\u0022,\u0022cookie-preferences.multi-layer-opt-in.settings-layer.essential-summary\u0022:\u0022Essential cookies are necessary for features that are essential to your use of our site or services, such as account login, authentication and site security.\u0022,\u0022cookie-preferences.multi-layer-opt-in.settings-layer.targeted-advertising\u0022:\u0022Targeted advertising\u0022,\u0022cookie-preferences.multi-layer-opt-in.settings-layer.targeted-advertising-summary\u0022:\u0022Targeted advertising cookies allow Uber to share your data with advertising partners, including social media companies, to send you more relevant ads on other apps and websites and for purposes determined by those partners.\u0022,\u0022cookie-preferences.multi-layer-opt-in.settings-layer.analytics\u0022:\u0022Analytics\u0022,\u0022cookie-preferences.multi-layer-opt-in.settings-layer.analytics-summary\u0022:\u0022Analytics cookies allow Uber to analyse your visits and actions on our third-party apps and websites to understand your interests and offer you more relevant ads on other apps and websites.\u0022,\u0022cookie-preferences.multi-layer-opt-in.settings-layer.accept-cta\u0022:\u0022Accept cookies\u0022,\u0022cookie-preferences.multi-layer-opt-in.settings-layer.close-settings-cta\u0022:\u0022Hide\u0022,\u0022cookie.banner.ccpa.body\u0022:\u0022This website uses third-party advertising cookies to provide you with relevant ads. You can opt out of these third-party ad cookies by clicking the \\u0022Opt out\\u0022 button below. If you have an Uber account, you can opt out of the “sale” or “sharing” of your data ${constructedCCPACookieLink}.\u0022,\u0022cookie.banner.ccpa.url.text\u0022:\u0022here\u0022,\u0022cookie.banner.optin.text\u0022:\u0022OK\u0022,\u0022cookie.banner.optout.text\u0022:\u0022Opt out\u0022,\u0022cookie.banner.gdpr.body\u0022:\u0022Click “Accept” to allow Uber to use cookies to personalise this site, and to deliver ads and measure their effectiveness on other apps and websites, including social media. Customise your preferences in your cookie settings or click ‘Reject’ if you do not want us to use cookies for this purpose. Find out more in our ${constructedGDPRCookieLink}.\u0022,\u0022cookie.banner.gdpr.url.text\u0022:\u0022Cookie notice\u0022,\u0022cookie.banner.gdpr.optout.text\u0022:\u0022Reject\u0022,\u0022cookie.banner.gdpr.optin.text\u0022:\u0022Accept\u0022,\u0022cookie.banner.gdpr.optin.text.alt\u0022:\u0022Accept cookies\u0022,\u0022cookie.banner.title\u0022:\u0022We use cookies\u0022,\u0022cookie.banner.settings.button\u0022:\u0022Cookie settings\u0022,\u0022cookie.banner.settings.button.alt\u0022:\u0022Hide\u0022,\u0022cookie.banner.essential\u0022:\u0022Essential\u0022,\u0022cookie.banner.essential.description\u0022:\u0022Essential cookies are necessary for features that are essential to your use of our site or services, such as account login, authentication and site security.\u0022,\u0022cookie.banner.trageted.ad\u0022:\u0022Targeted advertising\u0022,\u0022cookie.banner.trageted.ad.description\u0022:\u0022Targeted advertising cookies allow Uber to share your data with advertising partners, including social media companies, to send you more relevant ads on other apps and websites, and for purposes determined by those partners.\u0022,\u0022cookie.banner.analytics\u0022:\u0022Analytics\u0022,\u0022cookie.banner.analytics.description\u0022:\u0022Analytics cookies allow Uber to analyse your visits and actions on our and third-party apps and websites to understand your interests and to be able to offer you more relevant ads on other apps and websites.\u0022,\u0022gpc.banner.title\u0022:\u0022Opt-out preference signal honored. For more information, please visit our ${constructedGPCTitleLink}. \u0022,\u0022gpc.banner.title.link.text\u0022:\u0022United States Privacy Notice\u0022,\u0022gpc.banner.error\u0022:\u0022There was an error in processing your opt-out preference signal. Please try again ${constructedGPCErrorLink}. \u0022,\u0022gpc.banner.error.link.text\u0022:\u0022here\u0022,\u0022cookie-preferences.single-layer-opt-out.summary.ca\u0022:\u0022This website uses cookies to personalise your experience. Cookies are used to remember your location, deliver ads and measure ad effectiveness on other apps and websites, including social media. You may select \\u0022Opt out\\u0022 if you do not want us to use cookies for this purpose. Find out more in our \u003CsharingOptOutLink\u003ECookie Notice\u003C/sharingOptOutLink\u003E.\u0022,\u0022newsroom.article.feed.article\u0022:\u0022article\u0022,\u0022newsroom.article.feed.articles\u0022:\u0022articles\u0022,\u0022newsroom.article.feed.next\u0022:\u0022Next\u0022,\u0022newsroom.article.feed.prev\u0022:\u0022Prev\u0022,\u0022newsroom.article.feed.prep\u0022:\u0022of\u0022,\u0022newsroom.article.feed.no-articles-found\u0022:\u0022No articles found.\u0022,\u0022newsroom.article.feed.all-categories\u0022:\u0022All categories\u0022,\u0022newsroom.article.feed.filter-by\u0022:\u0022Filter by:\u0022,\u0022newsroom.article.feed.headline\u0022:\u0022Related articles\u0022,\u0022location.banner.selectcity.text\u0022:\u0022You're seeing information for \u003Cb style='white-space:nowrap'\u003E${cityName}\u003C/b\u003E.\u0022,\u0022location.banner.alt.button.text\u0022:\u0022Select a different location\u0022,\u0022header.panel.language.change_language.aria_label\u0022:\u0022Change language\u0022,\u0022header.panel.more_link.text\u0022:\u0022More\u0022,\u0022common.button.hamburger.text\u0022:\u0022Menu\u0022,\u0022header.panel.language.cta.text\u0022:\u0022Select your preferred language\u0022,\u0022header.panel.geolocation.enter-a-city.text\u0022:\u0022Enter a city\u0022,\u0022header.panel.geolocation.help-info-alt.text\u0022:\u0022You're seeing information for ${location}. To see local features and services for another location, enter a city in the search box above.\u0022,\u0022header.panel.geolocation.cta.show-more.text\u0022:\u0022Show more\u0022,\u0022header.panel.geolocation.cta.show-less.text\u0022:\u0022Show less\u0022,\u0022header.panel.geolocation.select-city-error.text\u0022:\u0022Location not available, please try again\u0022,\u0022header.notification.heading.text\u0022:\u0022How we use cookies\u0022,\u0022header.notification.body.text\u0022:\u0022Your selected location is saved by using cookies so that you can see relevant information each time you return.\u0022,\u0022footer.language.copy.detailed-text.aria-label\u0022:\u0022Current language: ${language}\u0022,\u0022footer.geolocation.copy.text\u0022:\u0022Seeing information for this city\u0022,\u0022navigation.rider.identity.hub.user.rating\u0022:\u0022user rating\u0022,\u0022navigation.rider.identity.hub.user.name\u0022:\u0022user name\u0022,\u0022navigation.rider.identity.hub.uber.cash.balance\u0022:\u0022Uber Cash balance\u0022,\u0022navigation.rider.identity.hub.uber.one\u0022:\u0022Uber One\u0022,\u0022newsroom.article-header.social-share-links.share-this-article\u0022:\u0022Share this article\u0022,\u0022newsroom.article.categories.label\u0022:\u0022Category\u0022,\u0022newsroom.article.author.headline\u0022:\u0022Written by\u0022,\u0022footer.geolocation.default.location\u0022:\u0022San Francisco Bay Area\u0022}}
</script>
<script type="application/json" id="__FILE_UPLOAD__">
{\u0022value\u0022:{\u0022options\u0022:{\u0022apiPrefix\u0022:\u0022/wisdom-bug-reporter\u0022,\u0022apiNegotiatePath\u0022:\u0022/negotiate\u0022,\u0022apiUploadPath\u0022:\u0022/upload\u0022,\u0022clientEncryption\u0022:true,\u0022maxConcurrentUploads\u0022:3,\u0022maxRetries\u0022:2,\u0022endpoint\u0022:\u0022tech-issue-tracker\u0022}}}
</script>
<script type="application/json" id="__MANAGED_TRANSLATIONS__">
[{\u0022accordion\u0022:{\u0022collapse\u0022:\u0022Collapse\u0022,\u0022expand\u0022:\u0022Expand\u0022},\u0022breadcrumbs\u0022:{\u0022ariaLabel\u0022:\u0022Breadcrumbs navigation\u0022},\u0022datepicker\u0022:{\u0022ariaLabel\u0022:\u0022Select a date.\u0022,\u0022ariaLabelRange\u0022:\u0022Select a date range.\u0022,\u0022ariaLabelCalendar\u0022:\u0022Calendar.\u0022,\u0022ariaRoleDescriptionCalendarMonth\u0022:\u0022Calendar month\u0022,\u0022previousMonth\u0022:\u0022Previous month.\u0022,\u0022nextMonth\u0022:\u0022Next month.\u0022,\u0022pastWeek\u0022:\u0022Past Week\u0022,\u0022pastMonth\u0022:\u0022Past Month\u0022,\u0022pastThreeMonths\u0022:\u0022Past 3 Months\u0022,\u0022pastSixMonths\u0022:\u0022Past 6 Months\u0022,\u0022pastYear\u0022:\u0022Past Year\u0022,\u0022pastTwoYears\u0022:\u0022Past 2 Years\u0022,\u0022screenReaderMessageInput\u0022:\u0022Press the down arrow key to interact with the calendar and select a date. Press the escape button to close the calendar.\u0022,\u0022selectedDate\u0022:\u0022Selected date is ${date}.\u0022,\u0022selectedDateRange\u0022:\u0022Selected date range is from ${startDate} to ${endDate}.\u0022,\u0022selectSecondDatePrompt\u0022:\u0022Select the second date.\u0022,\u0022quickSelectLabel\u0022:\u0022Choose a date range\u0022,\u0022quickSelectAriaLabel\u0022:\u0022Choose a date range\u0022,\u0022quickSelectPlaceholder\u0022:\u0022None\u0022,\u0022timeSelectEndLabel\u0022:\u0022End time\u0022,\u0022timeSelectStartLabel\u0022:\u0022Start time\u0022,\u0022timePickerAriaLabel12Hour\u0022:\u0022Select a time, 12-hour format.\u0022,\u0022timePickerAriaLabel24Hour\u0022:\u0022Select a time, 24-hour format.\u0022,\u0022timezonePickerAriaLabel\u0022:\u0022Select a time zone.\u0022,\u0022selectedStartDateLabel\u0022:\u0022Selected start date.\u0022,\u0022selectedEndDateLabel\u0022:\u0022Selected end date.\u0022,\u0022dateNotAvailableLabel\u0022:\u0022Not available.\u0022,\u0022dateAvailableLabel\u0022:\u0022It’s available.\u0022,\u0022selectedLabel\u0022:\u0022Selected.\u0022,\u0022chooseLabel\u0022:\u0022Choose\u0022},\u0022datatable\u0022:{\u0022emptyState\u0022:\u0022No rows match the filter criteria defined. Please remove one or more filters to view more data.\u0022,\u0022loadingState\u0022:\u0022Loading rows.\u0022,\u0022searchAriaLabel\u0022:\u0022Search by text\u0022,\u0022filterAdd\u0022:\u0022Add Filter\u0022,\u0022filterExclude\u0022:\u0022Exclude\u0022,\u0022filterApply\u0022:\u0022Apply\u0022,\u0022filterExcludeRange\u0022:\u0022Exclude range\u0022,\u0022filterExcludeValue\u0022:\u0022Exclude value\u0022,\u0022filterAppliedTo\u0022:\u0022filter applied to\u0022,\u0022optionsLabel\u0022:\u0022Select column to filter by\u0022,\u0022optionsSearch\u0022:\u0022Search for a column to filter by...\u0022,\u0022optionsEmpty\u0022:\u0022No columns available.\u0022,\u0022categoricalFilterSearchLabel\u0022:\u0022Search categories\u0022,\u0022categoricalFilterSelectAll\u0022:\u0022Select All\u0022,\u0022categoricalFilterSelectClear\u0022:\u0022Clear\u0022,\u0022categoricalFilterEmpty\u0022:\u0022No categories found\u0022,\u0022datetimeFilterRange\u0022:\u0022Range\u0022,\u0022datetimeFilterRangeDatetime\u0022:\u0022Date, Time\u0022,\u0022datetimeFilterRangeDate\u0022:\u0022Date\u0022,\u0022datetimeFilterRangeTime\u0022:\u0022Time\u0022,\u0022datetimeFilterCategorical\u0022:\u0022Categorical\u0022,\u0022datetimeFilterCategoricalWeekday\u0022:\u0022Weekday\u0022,\u0022datetimeFilterCategoricalMonth\u0022:\u0022Month\u0022,\u0022datetimeFilterCategoricalQuarter\u0022:\u0022Quarter\u0022,\u0022datetimeFilterCategoricalHalf\u0022:\u0022Half\u0022,\u0022datetimeFilterCategoricalFirstHalf\u0022:\u0022H1\u0022,\u0022datetimeFilterCategoricalSecondHalf\u0022:\u0022H2\u0022,\u0022datetimeFilterCategoricalYear\u0022:\u0022Year\u0022,\u0022numericalFilterRange\u0022:\u0022Range\u0022,\u0022numericalFilterSingleValue\u0022:\u0022Single Value\u0022,\u0022booleanFilterTrue\u0022:\u0022true\u0022,\u0022booleanFilterFalse\u0022:\u0022false\u0022,\u0022booleanColumnTrueShort\u0022:\u0022T\u0022,\u0022booleanColumnFalseShort\u0022:\u0022F\u0022,\u0022selectRow\u0022:\u0022Select row\u0022,\u0022selectAllRows\u0022:\u0022Select all rows\u0022,\u0022sortColumn\u0022:\u0022Sort column\u0022},\u0022buttongroup\u0022:{\u0022ariaLabel\u0022:\u0022button group\u0022},\u0022fileuploaderbasic\u0022:{\u0022dropFilesToUpload\u0022:\u0022baseui.fileuploaderbasic.drop_files_to_upload\u0022,\u0022or\u0022:\u0022baseui.fileuploaderbasic.or\u0022,\u0022browseFiles\u0022:\u0022baseui.fileuploaderbasic.browse_files\u0022,\u0022retry\u0022:\u0022baseui.fileuploaderbasic.retry\u0022,\u0022cancel\u0022:\u0022baseui.fileuploaderbasic.cancel\u0022},\u0022menu\u0022:{\u0022noResultsMsg\u0022:\u0022No results\u0022,\u0022parentMenuItemAriaLabel\u0022:\u0022You are currently at an item that opens a nested listbox. Press right arrow to enter that element and left arrow to return.\u0022},\u0022modal\u0022:{\u0022close\u0022:\u0022Close\u0022},\u0022drawer\u0022:{\u0022close\u0022:\u0022Close\u0022},\u0022pagination\u0022:{\u0022prev\u0022:\u0022Prev\u0022,\u0022next\u0022:\u0022Next\u0022,\u0022preposition\u0022:\u0022of\u0022},\u0022select\u0022:{\u0022noResultsMsg\u0022:\u0022No results found\u0022,\u0022placeholder\u0022:\u0022Select...\u0022,\u0022create\u0022:\u0022Create\u0022},\u0022toast\u0022:{\u0022close\u0022:\u0022Close\u0022}}]
</script>
<script type="application/json" id="__LOCAL_REDUX_STATE_NewsroomArticleHeader_Store_%2Fgb%2Fen%2Fblog%2Fcinnamon-using-century-old-tech-to-build-a-mean-load-shedder%2F__">
%7B%22articleHeaderAuthors%22%3A%7B%22authors%22%3A%5B%7B%22bio%22%3A%22Timothy%20Smyth%20is%20a%20Staff%20Engineer%20at%20Uber%20on%20the%20Delivery%20Backend%20Platform%20team%20based%20in%20New%20York%20City%2C%20helping%20to%20increase%20the%20resilience%20of%20Uber%20Delivery.%22%2C%22id%22%3A%227c8d02e7-21b9-4250-a738-2c0609ec516b%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F24e260e5-9438-52f4-af9a-d3b13c0fd1bb.jpg%22%2C%22name%22%3A%22Timothy%20Smyth%22%7D%2C%7B%22bio%22%3A%22Vladimir%20Gavrilenko%20is%20a%20Software%20Engineer%20at%20Uber%20on%20the%20Inventory%20and%20Catalog%20team%20based%20in%20Aarhus%2C%20where%20he%20focuses%20on%20reliability%20and%20scalability.%22%2C%22id%22%3A%2298f0528e-c329-4f10-9166-53bcacd1849f%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F44573237-fea5-5550-943b-487a1560bc7b.jpeg%22%2C%22name%22%3A%22Vladimir%20Gavrilenko%22%7D%2C%7B%22bio%22%3A%22Jesper%20Lindstrom%20Nielsen%20is%20a%20Staff%20Engineer%20at%20Uber%20on%20the%20Inventory%20and%20Catalog%20team%20based%20in%20Aarhus%2C%20trying%20to%20make%20everything%20run%20a%20bit%20faster%20and%20scale%20a%20bit%20more.%22%2C%22id%22%3A%226418b826-a6f6-4be6-a2da-a39302c3ba72%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2Fe4458950-1b85-55d3-8bb5-d5604a50daea.jpg%22%2C%22name%22%3A%22Jesper%20Lindstrom%20Nielsen%22%7D%2C%7B%22bio%22%3A%22Jakob%20Holdgaard%20Thomsen%20is%20a%20Principal%20Engineer%20at%20Uber%2C%20working%20out%20of%20the%20Aarhus%20office%2C%20helping%20to%20make%20Uber's%20systems%20more%20performant%20and%20more%20reliable.%22%2C%22id%22%3A%22ba41d6ff-04bf-4f12-bfd0-a9bfd1a76e1c%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F7ba23249-0769-5ef2-b149-6180a0d548a5.jpeg%22%2C%22name%22%3A%22Jakob%20Holdgaard%20Thomsen%22%7D%5D%2C%22error%22%3Afalse%2C%22hasClientLoaded%22%3Afalse%2C%22hasServerLoaded%22%3Atrue%2C%22isLoading%22%3Afalse%7D%7D
</script>
<script type="application/json" id="__LOCAL_REDUX_STATE_Newsroom_Article Categories Store_%2Fgb%2Fen%2Fblog%2Fcinnamon-using-century-old-tech-to-build-a-mean-load-shedder%2F__">
%7B%22listCategories%22%3A%7B%22error%22%3Afalse%2C%22hasClientLoaded%22%3Afalse%2C%22hasServerLoaded%22%3Atrue%2C%22isLoading%22%3Afalse%2C%22newsroomCategories%22%3A%5B%7B%22ID%22%3A%220bf657bb-dd5b-4659-b33b-e55cb88324b6%22%2C%22name%22%3A%22Publications%22%2C%22originalName%22%3A%22Publications%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fpubs%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%220ffcf021-5577-461e-b746-6c17f1115c51%22%2C%22name%22%3A%22Merchants%20and%20Restaurants%22%2C%22originalName%22%3A%22Merchants%20and%20Restaurants%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22merchants-and-restaurants%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%2216c6ef99-f647-4fb4-85c7-640bd66dee23%22%2C%22name%22%3A%22Web%22%2C%22originalName%22%3A%22Web%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fweb%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22186509a5-4b48-48d9-b19e-a13ee286f0c7%22%2C%22name%22%3A%22Uber%20One%22%2C%22originalName%22%3A%22Uber%20One%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22uber-one%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%22187172d6-8966-4d93-93e1-42c7f9fc6b6b%22%2C%22name%22%3A%22All%22%2C%22originalName%22%3A%22All%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22all%22%2C%22tags%22%3A%5B%22line-of-business%22%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%2219c4353b-7610-4816-a2fa-7c2c7c600fb9%22%2C%22name%22%3A%22Privacy%20and%20Other%20Notices%22%2C%22originalName%22%3A%22Privacy%20and%20Other%20Notices%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22privacy-and-other-notices%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%221ab4177f-7935-4118-9ff9-fe7f8f23b178%22%2C%22name%22%3A%22Stories%22%2C%22originalName%22%3A%22Stories%22%2C%22parentID%22%3A%22e9800f78-4271-4039-8364-861068326379%22%2C%22slug%22%3A%22eat%2Feats-stories%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%221c3ba6e7-e922-4eda-a18e-9e25e4c27b12%22%2C%22name%22%3A%22Autonomous%22%2C%22originalName%22%3A%22Autonomous%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22autonomous%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%222432c86e-8b69-4469-a559-1249baccfea9%22%2C%22name%22%3A%22Subscriptions%20and%20Rewards%22%2C%22originalName%22%3A%22Subscriptions%20and%20Rewards%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22subscriptions-and-rewards-programs%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%222504ce39-9c11-475c-8ad7-8104b65406ef%22%2C%22name%22%3A%22Earn%22%2C%22originalName%22%3A%22Earn%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22earn%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%2232c923ac-429c-49a0-a2b4-2bc71768ab6c%22%2C%22name%22%3A%22Featured%22%2C%22originalName%22%3A%22Featured%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22featured%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%22346c8756-3e2b-4d8b-a9a0-6d6615c20448%22%2C%22name%22%3A%22Transit%22%2C%22originalName%22%3A%22Transit%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22transit%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%223d3488e5-03f8-4692-a6c0-7f151a6bde57%22%2C%22name%22%3A%22Uber%20Eats%20-%20Merchants%22%2C%22originalName%22%3A%22Uber%20Eats%20-%20Merchants%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22uber-eats---merchants%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%2240cbe86f-e33b-4ea2-b5b0-16b3778507b8%22%2C%22name%22%3A%22Freight%22%2C%22originalName%22%3A%22Freight%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22freight%22%2C%22tags%22%3A%5B%22line-of-business%22%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%2241468f00-57d4-4c3d-915d-ed98a8990baa%22%2C%22name%22%3A%22Products%22%2C%22originalName%22%3A%22Products%22%2C%22parentID%22%3A%22bcf3b56f-c5bf-43ef-a8a2-ef6201781763%22%2C%22slug%22%3A%22restaurants%2Frestaurant-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%224fbb022e-236b-4d4b-8ef6-1fd4012c7fbf%22%2C%22name%22%3A%22Other%22%2C%22originalName%22%3A%22Other%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22other%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%2250f3f3b2-13a9-482d-ae78-89b6103c8258%22%2C%22name%22%3A%22Legal%22%2C%22originalName%22%3A%22Legal%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22legal%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%225886ffbc-9f7b-484f-81b4-8c49346b617d%22%2C%22name%22%3A%22Ride%22%2C%22originalName%22%3A%22Ride%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22ride%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%2258bb85a4-c72e-4d3b-b790-ba903459fafd%22%2C%22name%22%3A%22Driver%20products%22%2C%22originalName%22%3A%22Driver%20products%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22earn%2Fdrive%2Fdriver-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%2259730c33-9b1f-4817-b4c8-5fb163406814%22%2C%22name%22%3A%22Health%22%2C%22originalName%22%3A%22Health%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22health%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%225c871e2b-5633-4f43-8b49-6d0e656194f4%22%2C%22name%22%3A%22Drive%22%2C%22originalName%22%3A%22Drive%22%2C%22parentID%22%3A%22c00c8ce4-0527-4ca6-967c-d5ef749c233c%22%2C%22slug%22%3A%22earn%2Fdrive%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%225dcdf19d-ca0d-42f6-9dd3-066c25204da5%22%2C%22name%22%3A%22Promotions%22%2C%22originalName%22%3A%22Promotions%22%2C%22parentID%22%3A%22e9800f78-4271-4039-8364-861068326379%22%2C%22slug%22%3A%22eat%2Feats-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%225e7870f7-bb1f-413f-9e18-9e4d60208e6c%22%2C%22name%22%3A%22Promotions%22%2C%22originalName%22%3A%22Promotions%22%2C%22parentID%22%3A%22bcf3b56f-c5bf-43ef-a8a2-ef6201781763%22%2C%22slug%22%3A%22restaurants%2Frestaurant-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%225e7bc43a-eb95-4fc3-8866-13acceeaa672%22%2C%22name%22%3A%22Higher%20Education%22%2C%22originalName%22%3A%22Higher%20Education%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22higher-education%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%226389de43-1070-42e8-8ed3-ba6347d05e7e%22%2C%22name%22%3A%22Business%22%2C%22originalName%22%3A%22Business%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22business%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%2266286a61-7940-4022-aa92-54f42932d23c%22%2C%22name%22%3A%22Mobility%20and%20Delivery%22%2C%22originalName%22%3A%22Mobility%20and%20Delivery%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22mobility-and-delivery%22%2C%22tags%22%3A%5B%22line-of-business%22%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%226743e1ec-a06d-4e97-b397-f86804579d0b%22%2C%22name%22%3A%22Sustainability%22%2C%22originalName%22%3A%22Sustainability%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22sustainability%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%226998ac48-7e00-44c3-a533-1534ee2fa18f%22%2C%22name%22%3A%22Uber%20Eats%22%2C%22originalName%22%3A%22Uber%20Eats%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22uber-eats%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%226a5698e0-8c94-44e8-ad64-1921f79dab64%22%2C%22name%22%3A%22Uber%20Eats%20-%20Cornershop%22%2C%22originalName%22%3A%22Uber%20Eats%20-%20Cornershop%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22uber-eats---cornershop%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%226db631cc-42c8-49ae-a355-3a25b9d4d199%22%2C%22name%22%3A%22Stories%22%2C%22originalName%22%3A%22Stories%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22merchants%2Fmerchant-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%226f000f09-cced-40af-86ac-dfd175609ac4%22%2C%22name%22%3A%22Company%20News%22%2C%22originalName%22%3A%22Company%20News%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22company-news%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%22765c7383-a55f-4332-9210-20910040800f%22%2C%22name%22%3A%22Security%22%2C%22originalName%22%3A%22Security%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fsecurity%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%227bffa285-79dc-4cfb-b472-de76a293f057%22%2C%22name%22%3A%22Delivery%22%2C%22originalName%22%3A%22Delivery%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22delivery%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%227c2f76f6-506e-49b9-a9c4-e98ec4ad58ab%22%2C%22name%22%3A%22Products%22%2C%22originalName%22%3A%22Products%22%2C%22parentID%22%3A%225886ffbc-9f7b-484f-81b4-8c49346b617d%22%2C%22slug%22%3A%22ride%2Fride-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%227ea1ae80-7b1f-4b99-a820-9fd2aaf03c9e%22%2C%22name%22%3A%22Ride%20and%20eat%22%2C%22originalName%22%3A%22Ride%20and%20eat%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22ride-and-eat%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22803de10c-77ca-4a77-9ad2-8dc5b4895b7b%22%2C%22name%22%3A%22Data%22%2C%22originalName%22%3A%22Data%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fdata%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22846fa62a-fde5-4c19-beea-988b2ca5f16b%22%2C%22name%22%3A%22Mobile%22%2C%22originalName%22%3A%22Mobile%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fmobile%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22875573f9-92c1-4e78-82f8-16871648f9d0%22%2C%22name%22%3A%22Promotions%22%2C%22originalName%22%3A%22Promotions%22%2C%22parentID%22%3A%225886ffbc-9f7b-484f-81b4-8c49346b617d%22%2C%22slug%22%3A%22ride%2Fride-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%2288966076-3de3-4ecf-bb0d-52f020775f43%22%2C%22name%22%3A%22Driver%20promotions%22%2C%22originalName%22%3A%22Driver%20promotions%22%2C%22parentID%22%3A%22c00c8ce4-0527-4ca6-967c-d5ef749c233c%22%2C%22slug%22%3A%22earn%2Fdrive%2Fdriver-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%228bd3777a-3adf-4dc0-bfe2-b70d14b42ba5%22%2C%22name%22%3A%22Delivery%20promotions%22%2C%22originalName%22%3A%22Delivery%20promotions%22%2C%22parentID%22%3A%22a30aaf8f-6ef3-4c80-b489-b41ecdef084a%22%2C%22slug%22%3A%22deliver-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%229b144ceb-d11e-49d4-a3e4-7e372fdcd419%22%2C%22name%22%3A%22Rides%22%2C%22originalName%22%3A%22Rides%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22rides%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%22a30aaf8f-6ef3-4c80-b489-b41ecdef084a%22%2C%22name%22%3A%22Deliver%22%2C%22originalName%22%3A%22Deliver%22%2C%22parentID%22%3A%222504ce39-9c11-475c-8ad7-8104b65406ef%22%2C%22slug%22%3A%22courier%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22a4a084ff-0268-46a6-8b5f-15a64dfce9b3%22%2C%22name%22%3A%22Uber%20for%20Business%22%2C%22originalName%22%3A%22Uber%20for%20Business%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22uber-for-business%22%2C%22tags%22%3A%5B%22line-of-business%22%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%22a4dc5873-0cb8-43bb-9fd8-60b7223d55eb%22%2C%22name%22%3A%22Drivers%20and%20Couriers%22%2C%22originalName%22%3A%22Drivers%20and%20Couriers%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22drivers-and-couriers%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%22a9e2d382-795d-4cb8-a830-24ffaf81a335%22%2C%22name%22%3A%22Community%20support%22%2C%22originalName%22%3A%22Community%20support%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22community-support%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22ad5e5704-b615-463d-b0ee-9bbed7374385%22%2C%22name%22%3A%22Mobility%22%2C%22originalName%22%3A%22Mobility%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22mobility%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22name%22%3A%22Engineering%22%2C%22originalName%22%3A%22Engineering%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22engineering%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22af2eff0d-cf81-462f-a53f-1347f5e1769a%22%2C%22name%22%3A%22Safety%22%2C%22originalName%22%3A%22Safety%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22safety%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%22b191be18-dbd4-4bbe-a1bf-99d613f7d272%22%2C%22name%22%3A%22Promotions%22%2C%22originalName%22%3A%22Promotions%22%2C%22parentID%22%3A%22c00c8ce4-0527-4ca6-967c-d5ef749c233c%22%2C%22slug%22%3A%22merchants%2Fmerchant-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22b374768e-489f-42d5-913d-269fbb44a44b%22%2C%22name%22%3A%22Backend%22%2C%22originalName%22%3A%22Backend%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fbackend%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22b4a35e46-acd0-4a59-a55d-adaf0b367d2a%22%2C%22name%22%3A%22Culture%22%2C%22originalName%22%3A%22Culture%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fculture%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22bcf3b56f-c5bf-43ef-a8a2-ef6201781763%22%2C%22name%22%3A%22Restaurants%22%2C%22originalName%22%3A%22Restaurants%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22restaurants%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22c00c8ce4-0527-4ca6-967c-d5ef749c233c%22%2C%22name%22%3A%22Merchants%22%2C%22originalName%22%3A%22Merchants%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22merchants%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22cb24cf79-c6bc-4654-b8cd-8df80a9a573a%22%2C%22name%22%3A%22Stories%22%2C%22originalName%22%3A%22Stories%22%2C%22parentID%22%3A%225886ffbc-9f7b-484f-81b4-8c49346b617d%22%2C%22slug%22%3A%22ride%2Fride-stories%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22cbe0f585-26bd-4ae8-a47a-c5f3b3c2628d%22%2C%22name%22%3A%22Terms%22%2C%22originalName%22%3A%22Terms%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22terms%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%22d292598b-288a-4104-bdb3-887acea2e1cc%22%2C%22name%22%3A%22AI%20%2F%20ML%22%2C%22originalName%22%3A%22AI%20%2F%20ML%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fuber-ai%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22d380a997-7426-40bd-aa26-79784bc274a3%22%2C%22name%22%3A%22Stories%22%2C%22originalName%22%3A%22Stories%22%2C%22parentID%22%3A%22bcf3b56f-c5bf-43ef-a8a2-ef6201781763%22%2C%22slug%22%3A%22restaurants%2Frestaurant-stories%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22d665e277-3ad0-4748-954b-264ec45af21a%22%2C%22name%22%3A%22Grocery%20and%20Retail%22%2C%22originalName%22%3A%22Grocery%20and%20Retail%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22grocery-and-retail%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%22e0c27623-6408-448d-8607-64bfa5a17063%22%2C%22name%22%3A%22Drive%20feedback%22%2C%22originalName%22%3A%22Drive%20feedback%22%2C%22parentID%22%3A%225c871e2b-5633-4f43-8b49-6d0e656194f4%22%2C%22slug%22%3A%22earn%2Fdrive%2Fdriver-feedback%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22e15086b4-8088-4d8b-b1d5-5050257f6e46%22%2C%22name%22%3A%22Products%22%2C%22originalName%22%3A%22Products%22%2C%22parentID%22%3A%22e9800f78-4271-4039-8364-861068326379%22%2C%22slug%22%3A%22eat%2Feats-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22e1c5e0c6-5ca8-44d6-b287-05387a5b755f%22%2C%22name%22%3A%22Uber%20for%20Business%22%2C%22originalName%22%3A%22Uber%20for%20Business%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22uber-for-business%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%22e20e24a6-20e5-4a41-8995-4ec2ddd40e0d%22%2C%22name%22%3A%22Health%22%2C%22originalName%22%3A%22Health%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22health%22%2C%22tags%22%3A%5B%22line-of-business%22%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%22e425f80b-a21a-4925-9865-a936a09c1d54%22%2C%22name%22%3A%22Updates%22%2C%22originalName%22%3A%22Updates%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22updates%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22e8bd0dca-9a72-46d5-9509-c3ba4d2d54b4%22%2C%22name%22%3A%22Policies%20and%20Guidelines%22%2C%22originalName%22%3A%22Policies%20and%20Guidelines%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22policies-and-guidelines%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22legal%22%7D%2C%7B%22ID%22%3A%22e9800f78-4271-4039-8364-861068326379%22%2C%22name%22%3A%22Eat%22%2C%22originalName%22%3A%22Eat%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22eat%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22ebdd52e3-6ba8-4fd2-b7c2-666149b2b787%22%2C%22name%22%3A%22Advertising%22%2C%22originalName%22%3A%22Advertising%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22advertising%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22newsroom%22%7D%2C%7B%22ID%22%3A%22ef2d4bc1-0302-475e-836c-f927b2faeedd%22%2C%22name%22%3A%22Products%22%2C%22originalName%22%3A%22Products%22%2C%22parentID%22%3A%22c00c8ce4-0527-4ca6-967c-d5ef749c233c%22%2C%22slug%22%3A%22merchants%2Fmerchant-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22f3415ea7-492d-4825-bc27-2ce7c110607d%22%2C%22name%22%3A%22Advertising%22%2C%22originalName%22%3A%22Advertising%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22advertising%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22fa28ad00-e80a-4935-b518-2681e54a0986%22%2C%22name%22%3A%22Delivery%20products%22%2C%22originalName%22%3A%22Delivery%20products%22%2C%22parentID%22%3A%22a30aaf8f-6ef3-4c80-b489-b41ecdef084a%22%2C%22slug%22%3A%22deliver-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22fcbeef20-f044-4b60-b8b4-4d2ffc92354d%22%2C%22name%22%3A%22Aarhus%22%2C%22originalName%22%3A%22Aarhus%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Faarhus%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%5D%7D%7D
</script>
<script type="application/json" id="__LOCAL_REDUX_STATE_NewsroomArticleAuthor_Store_%2Fgb%2Fen%2Fblog%2Fcinnamon-using-century-old-tech-to-build-a-mean-load-shedder%2F__">
%7B%22articleAuthors%22%3A%7B%22authors%22%3A%5B%7B%22bio%22%3A%22Timothy%20Smyth%20is%20a%20Staff%20Engineer%20at%20Uber%20on%20the%20Delivery%20Backend%20Platform%20team%20based%20in%20New%20York%20City%2C%20helping%20to%20increase%20the%20resilience%20of%20Uber%20Delivery.%22%2C%22id%22%3A%227c8d02e7-21b9-4250-a738-2c0609ec516b%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F24e260e5-9438-52f4-af9a-d3b13c0fd1bb.jpg%22%2C%22name%22%3A%22Timothy%20Smyth%22%7D%2C%7B%22bio%22%3A%22Vladimir%20Gavrilenko%20is%20a%20Software%20Engineer%20at%20Uber%20on%20the%20Inventory%20and%20Catalog%20team%20based%20in%20Aarhus%2C%20where%20he%20focuses%20on%20reliability%20and%20scalability.%22%2C%22id%22%3A%2298f0528e-c329-4f10-9166-53bcacd1849f%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F44573237-fea5-5550-943b-487a1560bc7b.jpeg%22%2C%22name%22%3A%22Vladimir%20Gavrilenko%22%7D%2C%7B%22bio%22%3A%22Jesper%20Lindstrom%20Nielsen%20is%20a%20Staff%20Engineer%20at%20Uber%20on%20the%20Inventory%20and%20Catalog%20team%20based%20in%20Aarhus%2C%20trying%20to%20make%20everything%20run%20a%20bit%20faster%20and%20scale%20a%20bit%20more.%22%2C%22id%22%3A%226418b826-a6f6-4be6-a2da-a39302c3ba72%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2Fe4458950-1b85-55d3-8bb5-d5604a50daea.jpg%22%2C%22name%22%3A%22Jesper%20Lindstrom%20Nielsen%22%7D%2C%7B%22bio%22%3A%22Jakob%20Holdgaard%20Thomsen%20is%20a%20Principal%20Engineer%20at%20Uber%2C%20working%20out%20of%20the%20Aarhus%20office%2C%20helping%20to%20make%20Uber's%20systems%20more%20performant%20and%20more%20reliable.%22%2C%22id%22%3A%22ba41d6ff-04bf-4f12-bfd0-a9bfd1a76e1c%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F7ba23249-0769-5ef2-b149-6180a0d548a5.jpeg%22%2C%22name%22%3A%22Jakob%20Holdgaard%20Thomsen%22%7D%5D%2C%22error%22%3Afalse%2C%22hasClientLoaded%22%3Afalse%2C%22hasServerLoaded%22%3Atrue%2C%22isLoading%22%3Afalse%7D%7D
</script>
<script type="application/json" id="__LOCAL_REDUX_STATE_Newsroom_Article Feed Store_%2Fgb%2Fen%2Fblog%2Fcinnamon-using-century-old-tech-to-build-a-mean-load-shedder%2F__">
%7B%22fallbackRelatedPages%22%3A%7B%22relatedPages%22%3A%5B%7B%22categoryIDs%22%3A%5B%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22d292598b-288a-4104-bdb3-887acea2e1cc%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Fefficient-software-factory%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F08fda4fe-4704-44ec-9cc6-963c4f9acfc3.png%22%2C%22ogTitle%22%3A%22Running%20a%20Software%20Factory%20Efficiently%20at%20Uber%20Scale%22%2C%22publishedAt%22%3A%222026-08-27T12%3A30%3A00Z%22%2C%22title%22%3A%22Running%20a%20Software%20Factory%20Efficiently%20at%20Uber%20Scale%22%2C%22updatedAt%22%3A%222026-08-31T22%3A13%3A32.557182Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%225e7bc43a-eb95-4fc3-8866-13acceeaa672%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Fintroducing-husker-share%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F71a0512b-ea4c-4b65-a7d8-39c71e709bf0.png%22%2C%22ogTitle%22%3A%22Introducing%20Husker%20Share%2C%20the%20University%20of%20Nebraska-Lincoln%E2%80%99s%20latest%20program%20with%20Uber%22%2C%22publishedAt%22%3A%222026-08-14T21%3A35%3A11.455Z%22%2C%22title%22%3A%22Introducing%20Husker%20Share%2C%20the%20University%20of%20Nebraska-Lincoln%E2%80%99s%20latest%20program%20with%20Uber%22%2C%22updatedAt%22%3A%222026-08-14T21%3A35%3A11.550271Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%225c871e2b-5633-4f43-8b49-6d0e656194f4%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Fdriver-worker-faq%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2Fb8d50a93-fd0d-4485-a98d-28568c218ca4.png%22%2C%22ogTitle%22%3A%22Frequently%20Asked%20Questions%20-%20Worker%20Protections%22%2C%22publishedAt%22%3A%222026-08-12T08%3A46%3A28.227Z%22%2C%22title%22%3A%22Frequently%20Asked%20Questions%20%E2%80%93%20Worker%20Protections%22%2C%22updatedAt%22%3A%222026-08-12T08%3A46%3A28.397499Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22346c8756-3e2b-4d8b-a9a0-6d6615c20448%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Fbroadening-our-reach%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F5c451115-cb10-4833-8cbe-17c43b9ee39c.png%22%2C%22ogTitle%22%3A%22Broadening%20our%20reach%3A%20introducing%20the%20final%20cohort%20of%20recipients%20of%20the%20Uber%20Transit%20Innovation%20Fund%22%2C%22publishedAt%22%3A%222026-08-05T19%3A30%3A00Z%22%2C%22title%22%3A%22Broadening%20our%20reach%3A%20introducing%20the%20final%20cohort%20of%20recipients%20of%20the%20Uber%20Transit%20Innovation%20Fund%22%2C%22updatedAt%22%3A%222026-08-05T19%3A30%3A03.325777Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22346c8756-3e2b-4d8b-a9a0-6d6615c20448%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Frider-insights-alrc%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F9da49e58-0f9c-4c08-9093-86e801e7c863.png%22%2C%22ogTitle%22%3A%22Rider%20insights%3A%20How%20NJ%20Transit%E2%80%99s%20Access%20Link%20Riders%E2%80%99%20Choice%20Pilot%20redefines%20mobility%20freedom%22%2C%22publishedAt%22%3A%222026-08-04T22%3A51%3A17.74Z%22%2C%22title%22%3A%22Rider%20insights%3A%20How%20NJ%20Transit%E2%80%99s%20Access%20Link%20Riders%E2%80%99%20Choice%20Pilot%20redefines%20mobility%20freedom%22%2C%22updatedAt%22%3A%222026-08-05T18%3A23%3A42.377176Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22346c8756-3e2b-4d8b-a9a0-6d6615c20448%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Fyour-guide-to-access-link-riders-choice-pilot-2-0%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2Fec9067ea-1f63-4bea-9e84-19da84940f16.png%22%2C%22ogTitle%22%3A%22Using%20Uber%3A%20your%20guide%20to%20NJ%20TRANSIT%E2%80%99s%20Access%20Link%20Riders%E2%80%99%20Choice%20Pilot%202.0%22%2C%22publishedAt%22%3A%222026-07-31T08%3A47%3A18.487Z%22%2C%22title%22%3A%22Using%20Uber%3A%20your%20guide%20to%20NJ%20TRANSIT%E2%80%99s%20Access%20Link%20Riders%E2%80%99%20Choice%20Pilot%202.0%22%2C%22updatedAt%22%3A%222026-07-31T08%3A47%3A18.673589Z%22%7D%5D%2C%22error%22%3Afalse%2C%22hasClientLoaded%22%3Afalse%2C%22hasServerLoaded%22%3Atrue%2C%22isLoading%22%3Afalse%2C%22hasMore%22%3Afalse%2C%22totalCount%22%3A1403%7D%2C%22listCategories%22%3A%7B%22error%22%3Afalse%2C%22hasClientLoaded%22%3Afalse%2C%22hasServerLoaded%22%3Atrue%2C%22isLoading%22%3Afalse%2C%22newsroomCategories%22%3A%5B%7B%22ID%22%3A%220bf657bb-dd5b-4659-b33b-e55cb88324b6%22%2C%22name%22%3A%22Publications%22%2C%22originalName%22%3A%22Publications%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fpubs%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%2216c6ef99-f647-4fb4-85c7-640bd66dee23%22%2C%22name%22%3A%22Web%22%2C%22originalName%22%3A%22Web%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fweb%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%221ab4177f-7935-4118-9ff9-fe7f8f23b178%22%2C%22name%22%3A%22Stories%22%2C%22originalName%22%3A%22Stories%22%2C%22parentID%22%3A%22e9800f78-4271-4039-8364-861068326379%22%2C%22slug%22%3A%22eat%2Feats-stories%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%222504ce39-9c11-475c-8ad7-8104b65406ef%22%2C%22name%22%3A%22Earn%22%2C%22originalName%22%3A%22Earn%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22earn%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22346c8756-3e2b-4d8b-a9a0-6d6615c20448%22%2C%22name%22%3A%22Transit%22%2C%22originalName%22%3A%22Transit%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22transit%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%2241468f00-57d4-4c3d-915d-ed98a8990baa%22%2C%22name%22%3A%22Products%22%2C%22originalName%22%3A%22Products%22%2C%22parentID%22%3A%22bcf3b56f-c5bf-43ef-a8a2-ef6201781763%22%2C%22slug%22%3A%22restaurants%2Frestaurant-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%2250f3f3b2-13a9-482d-ae78-89b6103c8258%22%2C%22name%22%3A%22Legal%22%2C%22originalName%22%3A%22Legal%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22legal%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%225886ffbc-9f7b-484f-81b4-8c49346b617d%22%2C%22name%22%3A%22Ride%22%2C%22originalName%22%3A%22Ride%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22ride%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%2258bb85a4-c72e-4d3b-b790-ba903459fafd%22%2C%22name%22%3A%22Driver%20products%22%2C%22originalName%22%3A%22Driver%20products%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22earn%2Fdrive%2Fdriver-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%2259730c33-9b1f-4817-b4c8-5fb163406814%22%2C%22name%22%3A%22Health%22%2C%22originalName%22%3A%22Health%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22health%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%225c871e2b-5633-4f43-8b49-6d0e656194f4%22%2C%22name%22%3A%22Drive%22%2C%22originalName%22%3A%22Drive%22%2C%22parentID%22%3A%22c00c8ce4-0527-4ca6-967c-d5ef749c233c%22%2C%22slug%22%3A%22earn%2Fdrive%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%225dcdf19d-ca0d-42f6-9dd3-066c25204da5%22%2C%22name%22%3A%22Promotions%22%2C%22originalName%22%3A%22Promotions%22%2C%22parentID%22%3A%22e9800f78-4271-4039-8364-861068326379%22%2C%22slug%22%3A%22eat%2Feats-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%225e7870f7-bb1f-413f-9e18-9e4d60208e6c%22%2C%22name%22%3A%22Promotions%22%2C%22originalName%22%3A%22Promotions%22%2C%22parentID%22%3A%22bcf3b56f-c5bf-43ef-a8a2-ef6201781763%22%2C%22slug%22%3A%22restaurants%2Frestaurant-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%225e7bc43a-eb95-4fc3-8866-13acceeaa672%22%2C%22name%22%3A%22Higher%20Education%22%2C%22originalName%22%3A%22Higher%20Education%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22higher-education%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%226389de43-1070-42e8-8ed3-ba6347d05e7e%22%2C%22name%22%3A%22Business%22%2C%22originalName%22%3A%22Business%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22business%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%226db631cc-42c8-49ae-a355-3a25b9d4d199%22%2C%22name%22%3A%22Stories%22%2C%22originalName%22%3A%22Stories%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22merchants%2Fmerchant-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22765c7383-a55f-4332-9210-20910040800f%22%2C%22name%22%3A%22Security%22%2C%22originalName%22%3A%22Security%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fsecurity%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%227c2f76f6-506e-49b9-a9c4-e98ec4ad58ab%22%2C%22name%22%3A%22Products%22%2C%22originalName%22%3A%22Products%22%2C%22parentID%22%3A%225886ffbc-9f7b-484f-81b4-8c49346b617d%22%2C%22slug%22%3A%22ride%2Fride-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%227ea1ae80-7b1f-4b99-a820-9fd2aaf03c9e%22%2C%22name%22%3A%22Ride%20and%20eat%22%2C%22originalName%22%3A%22Ride%20and%20eat%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22ride-and-eat%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22803de10c-77ca-4a77-9ad2-8dc5b4895b7b%22%2C%22name%22%3A%22Data%22%2C%22originalName%22%3A%22Data%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fdata%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22846fa62a-fde5-4c19-beea-988b2ca5f16b%22%2C%22name%22%3A%22Mobile%22%2C%22originalName%22%3A%22Mobile%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fmobile%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22875573f9-92c1-4e78-82f8-16871648f9d0%22%2C%22name%22%3A%22Promotions%22%2C%22originalName%22%3A%22Promotions%22%2C%22parentID%22%3A%225886ffbc-9f7b-484f-81b4-8c49346b617d%22%2C%22slug%22%3A%22ride%2Fride-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%2288966076-3de3-4ecf-bb0d-52f020775f43%22%2C%22name%22%3A%22Driver%20promotions%22%2C%22originalName%22%3A%22Driver%20promotions%22%2C%22parentID%22%3A%22c00c8ce4-0527-4ca6-967c-d5ef749c233c%22%2C%22slug%22%3A%22earn%2Fdrive%2Fdriver-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%228bd3777a-3adf-4dc0-bfe2-b70d14b42ba5%22%2C%22name%22%3A%22Delivery%20promotions%22%2C%22originalName%22%3A%22Delivery%20promotions%22%2C%22parentID%22%3A%22a30aaf8f-6ef3-4c80-b489-b41ecdef084a%22%2C%22slug%22%3A%22deliver-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22a30aaf8f-6ef3-4c80-b489-b41ecdef084a%22%2C%22name%22%3A%22Deliver%22%2C%22originalName%22%3A%22Deliver%22%2C%22parentID%22%3A%222504ce39-9c11-475c-8ad7-8104b65406ef%22%2C%22slug%22%3A%22courier%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22a9e2d382-795d-4cb8-a830-24ffaf81a335%22%2C%22name%22%3A%22Community%20support%22%2C%22originalName%22%3A%22Community%20support%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22community-support%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22name%22%3A%22Engineering%22%2C%22originalName%22%3A%22Engineering%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22engineering%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22b191be18-dbd4-4bbe-a1bf-99d613f7d272%22%2C%22name%22%3A%22Promotions%22%2C%22originalName%22%3A%22Promotions%22%2C%22parentID%22%3A%22c00c8ce4-0527-4ca6-967c-d5ef749c233c%22%2C%22slug%22%3A%22merchants%2Fmerchant-promotions%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22b374768e-489f-42d5-913d-269fbb44a44b%22%2C%22name%22%3A%22Backend%22%2C%22originalName%22%3A%22Backend%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fbackend%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22b4a35e46-acd0-4a59-a55d-adaf0b367d2a%22%2C%22name%22%3A%22Culture%22%2C%22originalName%22%3A%22Culture%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fculture%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22bcf3b56f-c5bf-43ef-a8a2-ef6201781763%22%2C%22name%22%3A%22Restaurants%22%2C%22originalName%22%3A%22Restaurants%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22restaurants%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22c00c8ce4-0527-4ca6-967c-d5ef749c233c%22%2C%22name%22%3A%22Merchants%22%2C%22originalName%22%3A%22Merchants%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22merchants%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22cb24cf79-c6bc-4654-b8cd-8df80a9a573a%22%2C%22name%22%3A%22Stories%22%2C%22originalName%22%3A%22Stories%22%2C%22parentID%22%3A%225886ffbc-9f7b-484f-81b4-8c49346b617d%22%2C%22slug%22%3A%22ride%2Fride-stories%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22d292598b-288a-4104-bdb3-887acea2e1cc%22%2C%22name%22%3A%22AI%20%2F%20ML%22%2C%22originalName%22%3A%22AI%20%2F%20ML%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Fuber-ai%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22d380a997-7426-40bd-aa26-79784bc274a3%22%2C%22name%22%3A%22Stories%22%2C%22originalName%22%3A%22Stories%22%2C%22parentID%22%3A%22bcf3b56f-c5bf-43ef-a8a2-ef6201781763%22%2C%22slug%22%3A%22restaurants%2Frestaurant-stories%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22e0c27623-6408-448d-8607-64bfa5a17063%22%2C%22name%22%3A%22Drive%20feedback%22%2C%22originalName%22%3A%22Drive%20feedback%22%2C%22parentID%22%3A%225c871e2b-5633-4f43-8b49-6d0e656194f4%22%2C%22slug%22%3A%22earn%2Fdrive%2Fdriver-feedback%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22e15086b4-8088-4d8b-b1d5-5050257f6e46%22%2C%22name%22%3A%22Products%22%2C%22originalName%22%3A%22Products%22%2C%22parentID%22%3A%22e9800f78-4271-4039-8364-861068326379%22%2C%22slug%22%3A%22eat%2Feats-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22e425f80b-a21a-4925-9865-a936a09c1d54%22%2C%22name%22%3A%22Updates%22%2C%22originalName%22%3A%22Updates%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22updates%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22e9800f78-4271-4039-8364-861068326379%22%2C%22name%22%3A%22Eat%22%2C%22originalName%22%3A%22Eat%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22eat%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22ef2d4bc1-0302-475e-836c-f927b2faeedd%22%2C%22name%22%3A%22Products%22%2C%22originalName%22%3A%22Products%22%2C%22parentID%22%3A%22c00c8ce4-0527-4ca6-967c-d5ef749c233c%22%2C%22slug%22%3A%22merchants%2Fmerchant-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22f3415ea7-492d-4825-bc27-2ce7c110607d%22%2C%22name%22%3A%22Advertising%22%2C%22originalName%22%3A%22Advertising%22%2C%22parentID%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22slug%22%3A%22advertising%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22fa28ad00-e80a-4935-b518-2681e54a0986%22%2C%22name%22%3A%22Delivery%20products%22%2C%22originalName%22%3A%22Delivery%20products%22%2C%22parentID%22%3A%22a30aaf8f-6ef3-4c80-b489-b41ecdef084a%22%2C%22slug%22%3A%22deliver-products%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%2C%7B%22ID%22%3A%22fcbeef20-f044-4b60-b8b4-4d2ffc92354d%22%2C%22name%22%3A%22Aarhus%22%2C%22originalName%22%3A%22Aarhus%22%2C%22parentID%22%3A%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22slug%22%3A%22engineering%2Faarhus%22%2C%22tags%22%3A%5B%5D%2C%22theNamespace%22%3A%22blog%22%7D%5D%7D%2C%22relatedPages%22%3A%7B%22error%22%3Afalse%2C%22hasClientLoaded%22%3Afalse%2C%22hasMore%22%3Afalse%2C%22hasServerLoaded%22%3Atrue%2C%22isLoading%22%3Afalse%2C%22relatedPages%22%3A%5B%7B%22categoryIDs%22%3A%5B%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22d292598b-288a-4104-bdb3-887acea2e1cc%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Fefficient-software-factory%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F08fda4fe-4704-44ec-9cc6-963c4f9acfc3.png%22%2C%22ogTitle%22%3A%22Running%20a%20Software%20Factory%20Efficiently%20at%20Uber%20Scale%22%2C%22publishedAt%22%3A%222026-08-27T12%3A30%3A00Z%22%2C%22title%22%3A%22Running%20a%20Software%20Factory%20Efficiently%20at%20Uber%20Scale%22%2C%22updatedAt%22%3A%222026-08-31T22%3A13%3A32.557182Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22b374768e-489f-42d5-913d-269fbb44a44b%22%2C%22846fa62a-fde5-4c19-beea-988b2ca5f16b%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Fscaling-verify-wallet%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2Fdc660d61-9591-4725-bc23-45ace01f287a.png%22%2C%22ogTitle%22%3A%22Scaling%20Verify%20with%20Wallet%20for%20Identity%20Verification%20at%20Uber%22%2C%22publishedAt%22%3A%222026-06-23T13%3A15%3A00Z%22%2C%22title%22%3A%22Scaling%20Verify%20with%20Wallet%20for%20Identity%20Verification%20at%20Uber%22%2C%22updatedAt%22%3A%222026-07-09T21%3A05%3A41.780424Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22d292598b-288a-4104-bdb3-887acea2e1cc%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Fscaling-real-time-traffic%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F4ede3459-e4a6-4e5f-aa18-4aa93e01a34b.png%22%2C%22ogTitle%22%3A%22Scaling%20Real-Time%20Traffic%20Forecasting%20with%20a%20Graph-Aware%20Transformer%22%2C%22publishedAt%22%3A%222026-05-19T13%3A15%3A00Z%22%2C%22title%22%3A%22Scaling%20Real-Time%20Traffic%20Forecasting%20with%20a%20Graph-Aware%20Transformer%22%2C%22updatedAt%22%3A%222026-05-19T15%3A21%3A51.087135Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22b374768e-489f-42d5-913d-269fbb44a44b%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Fzero-growth-stack%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2Fa9743d86-d78f-4595-8690-8491737301ad.jpeg%22%2C%22ogTitle%22%3A%22Zero-Growth%20Stack%2C%20Real%20Gains%3A%20How%20Stack%20Allocation%20Can%20Save%2010%25%20CPU%20in%20Go%22%2C%22publishedAt%22%3A%222026-05-07T13%3A15%3A00Z%22%2C%22title%22%3A%22Zero-Growth%20Stack%2C%20Real%20Gains%3A%20How%20Stack%20Allocation%20Can%20Save%2010%25%20CPU%20in%20Go%22%2C%22updatedAt%22%3A%222026-05-07T20%3A01%3A57.076329Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22b374768e-489f-42d5-913d-269fbb44a44b%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Fansible-automation-powers%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2Fbc06ef8c-db85-4c7d-998a-3bf93be8ffc9.jpeg%22%2C%22ogTitle%22%3A%22How%20Ansible%C2%AE%20Automation%20Powers%20the%20Uber%20Corporate%20Network%20at%20a%20Global%20Scale%22%2C%22publishedAt%22%3A%222026-04-30T06%3A15%3A00Z%22%2C%22title%22%3A%22How%20Ansible%C2%AE%20Automation%20Powers%20the%20Uber%20Corporate%20Network%20at%20a%20Global%20Scale%22%2C%22updatedAt%22%3A%222026-04-30T21%3A06%3A35.62127Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22b374768e-489f-42d5-913d-269fbb44a44b%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fgb%2Fen%2Fblog%2Fhybrid-core-allocation%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F5a3a4e0e-9bc0-4465-937d-0201078c71ca.jpeg%22%2C%22ogTitle%22%3A%22Hybrid%20Core%20Allocation%3A%20From%20Overallocation%20to%20Reliable%20Sharing%22%2C%22publishedAt%22%3A%222026-04-21T06%3A15%3A00Z%22%2C%22title%22%3A%22Hybrid%20Core%20Allocation%3A%20From%20Overallocation%20to%20Reliable%20Sharing%22%2C%22updatedAt%22%3A%222026-04-21T16%3A16%3A55.379864Z%22%7D%5D%2C%22totalCount%22%3A748%7D%7D
</script>
<script type="application/json" id="__PLL__">
{\u0022uuid\u0022:\u00222d48cbc3-988c-45df-bb22-0b46f3a6d6c4\u0022,\u0022meta\u0022:{\u0022trackingId\u0022:\u0022blog\u0022}}
</script>
<script type="application/json" id="__REDUX_STATE__">
{\u0022DGInfo\u0022:{\u0022error\u0022:false,\u0022hasLoaded\u0022:false,\u0022isLoading\u0022:false,\u0022localizedCityName\u0022:\u0022\u0022,\u0022localizedGuaranteedAmount\u0022:\u0022\u0022,\u0022marketingCode\u0022:\u0022\u0022,\u0022shouldHideDG\u0022:false,\u0022sipAvailable\u0022:false,\u0022subtitle\u0022:\u0022\u0022,\u0022termsLinkURL\u0022:\u0022\u0022,\u0022tripsGoalValue\u0022:0},\u0022PesData\u0022:{\u0022data\u0022:null,\u0022error\u0022:null,\u0022hasLoaded\u0022:false,\u0022isLoading\u0022:false,\u0022localeCode\u0022:null,\u0022status\u0022:null},\u0022RGInfo\u0022:{\u0022avatarURL\u0022:\u0022\u0022,\u0022campaignInfo\u0022:[],\u0022error\u0022:false,\u0022hasReferral\u0022:false,\u0022isLoading\u0022:true,\u0022legal\u0022:{\u0022htmlContent\u0022:\u0022\u0022},\u0022localizedAmount\u0022:\u0022\u0022,\u0022subtitle\u0022:\u0022\u0022,\u0022title\u0022:\u0022\u0022},\u0022allLivePagesJsonUrl\u0022:\u0022\u0022,\u0022bootstrap\u0022:{},\u0022breadcrumbsLPM\u0022:{\u0022error\u0022:false,\u0022results\u0022:[]},\u0022carRentalData\u0022:{\u0022locationError\u0022:null,\u0022locationStatus\u0022:\u0022PENDING\u0022,\u0022previewError\u0022:null,\u0022previewStatus\u0022:\u0022PENDING\u0022,\u0022v2Error\u0022:null,\u0022v2Status\u0022:\u0022PENDING\u0022},\u0022clientSideRender\u0022:{\u0022blocks\u0022:{}},\u0022cookieBanner\u0022:{\u0022bannerType\u0022:\u0022\u0022,\u0022raw\u0022:{\u0022US\u0022:\u0022CCPA\u0022,\u0022AT\u0022:\u0022GDPR\u0022,\u0022BE\u0022:\u0022GDPR\u0022,\u0022BG\u0022:\u0022GDPR\u0022,\u0022HR\u0022:\u0022GDPR\u0022,\u0022CY\u0022:\u0022GDPR\u0022,\u0022CZ\u0022:\u0022GDPR\u0022,\u0022DK\u0022:\u0022GDPR\u0022,\u0022EE\u0022:\u0022GDPR\u0022,\u0022FI\u0022:\u0022GDPR\u0022,\u0022FR\u0022:\u0022GDPR\u0022,\u0022DE\u0022:\u0022GDPR\u0022,\u0022GR\u0022:\u0022GDPR\u0022,\u0022HU\u0022:\u0022GDPR\u0022,\u0022IE\u0022:\u0022GDPR\u0022,\u0022IT\u0022:\u0022GDPR\u0022,\u0022LV\u0022:\u0022GDPR\u0022,\u0022LT\u0022:\u0022GDPR\u0022,\u0022LU\u0022:\u0022GDPR\u0022,\u0022MT\u0022:\u0022GDPR\u0022,\u0022NL\u0022:\u0022GDPR\u0022,\u0022AN\u0022:\u0022GDPR\u0022,\u0022PL\u0022:\u0022GDPR\u0022,\u0022PT\u0022:\u0022GDPR\u0022,\u0022RO\u0022:\u0022GDPR\u0022,\u0022SK\u0022:\u0022GDPR\u0022,\u0022SI\u0022:\u0022GDPR\u0022,\u0022ES\u0022:\u0022GDPR\u0022,\u0022SE\u0022:\u0022GDPR\u0022,\u0022GB\u0022:\u0022GDPR\u0022,\u0022IS\u0022:\u0022GDPR\u0022,\u0022LI\u0022:\u0022GDPR\u0022,\u0022NO\u0022:\u0022GDPR\u0022,\u0022CH\u0022:\u0022GDPR\u0022}},\u0022countryLegalLinks\u0022:{\u0022DE\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/de/de/legal/impressum-rides/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Impressum Rides\u0022},{\u0022link\u0022:\u0022https://www.uber.com/de/de/legal/impressum-eats/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Impressum Eats\u0022},{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022},{\u0022link\u0022:\u0022https://www.ubereats.com/uber-one?mod=terminateConfirmation\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Terminate Uber One contract\u0022}],\u0022AT\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/at/de/legal/impressum-rides/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Impressum\u0022},{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022GB\u0022:[{\u0022link\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/d53fc99a-a177-596f-b5fc-3144fbb07957.pdf\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Download Uber Modern Slavery Act Transparency Statement\u0022},{\u0022link\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/552a0fcd-6fc3-52f0-945e-c39444b91814.pdf\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Download Uber Eats Modern Slavery Act Transparency Statement\u0022}],\u0022BR\u0022:[{\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Uber Technologies Inc. | Uber do Brasil Tecnologia Ltda | Avenida Brigadeiro Faria Lima, n.º 949, Pinheiros, São Paulo/SP - CEP 05.426-200 | CNPJ: 17.895.646/0001-87\u0022}],\u0022EG\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/terms/careem-acquisition-egypt/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Uber's acquisition of Careem\u0022}],\u0022US\u0022:[{\u0022link\u0022:\u0022https://privacy.uber.com/privacy/us\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Do not sell or share my personal information\u0022},{\u0022link\u0022:\u0022https://www.uber.com/google-disclosure/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Google Data Policy\u0022}],\u0022BD\u0022:[{\u0022link\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/95590fec-bc64-52f1-ac06-113f95e5aa47.pdf\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Bangladesh ridesharing related information\u0022}],\u0022BE\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022HR\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022CZ\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022EE\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022FI\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022GR\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022IT\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022IE\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022LT\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022MT\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022NL\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022PL\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022PT\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022},{\u0022link\u0022:\u0022https://www.livroreclamacoes.pt/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Complaints Book\u0022}],\u0022RO\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022SK\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022ES\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022},{\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Contact number: +34 919 49 55 87\u0022}],\u0022SE\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022FR\u0022:[{\u0022link\u0022:\u0022https://www.uber.com/legal/how-the-uber-and-uber-eats-apps-and-websites-work/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022How the Uber and Uber Eats apps and websites work\u0022}],\u0022TW\u0022:[{\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Company's registered name - Uber Formosa Co. Ltd.%5CnTaxation registration number - 83118125\u0022}],\u0022KR\u0022:[{\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022UT LLC | Business registration number: 166-86-02049 | Contact Phone: 080-805-9622 | Email: support_kr@uber.com | Representative: Jinwoo Song | Registered Address (not a customer support location): 343, Samil-daero, Jung-gu, Seoul, Republic of Korea | Mail-Order-Sales Registration Number: 2021-서울중구-0976\u0022}]},\u0022countryLocationBannerEnabled\u0022:false,\u0022flipr\u0022:{},\u0022isPrivacyBannersConsentsServiceEnabled\u0022:false,\u0022isPrivacyBannersEnabled\u0022:true,\u0022isProduction\u0022:true,\u0022isSPARoutingEnabled\u0022:false,\u0022languages\u0022:{\u0022currentLanguage\u0022:\u0022en\u0022,\u0022supportedLanguages\u0022:{\u0022error\u0022:null,\u0022isLoading\u0022:false,\u0022supportedLanguages\u0022:{\u0022/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022:[{\u0022baseLanguage\u0022:\u0022en\u0022,\u0022languageCode\u0022:\u0022en\u0022,\u0022languageSlug\u0022:\u0022en\u0022,\u0022localLanguage\u0022:\u0022English\u0022,\u0022locale\u0022:\u0022en\u0022,\u0022pageLanguage\u0022:\u0022English, English\u0022}]}}},\u0022locationAutocomplete\u0022:{\u0022countryCode\u0022:\u0022GB\u0022,\u0022currentTerritoryName\u0022:\u0022Indore\u0022,\u0022results\u0022:[],\u0022selectedCity\u0022:{\u0022error\u0022:null,\u0022selectedCity\u0022:null}},\u0022pages\u0022:{\u0022contentsByPathname\u0022:{\u0022/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022:{\u0022blockContents\u0022:[{\u0022blockContentID\u0022:\u0022a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f\u0022,\u0022blockKey\u0022:\u0022s_n_page_9_b_4_b_a.46435f9ef8c646ddb7225d5a12f97103\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022Navigation\u0022,\u0022props\u0022:{\u0022additionalCta\u0022:{\u0022childNodes\u0022:[],\u0022component\u0022:\u0022Link\u0022,\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://help.uber.com/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Help\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_additionalCta.link_cta1\u0022}},\u0022cta\u0022:{\u0022childNodes\u0022:[{\u0022icon\u0022:{\u0022format\u0022:\u0022svg\u0022,\u0022height\u0022:\u002224\u0022,\u0022label\u0022:\u0022route_filled\u0022,\u0022legacySrc\u0022:\u0022https://www.uber-assets.com/image/upload/v1655401019/assets/80/bb7bdd-6cf4-4053-94c5-2e4e53d9d5f6/original/route_filled.svg\u0022,\u0022photoId\u0022:\u00222e60f716b4ccf926172440114c0cdf25dc9dc5d557502baead6b31910d690e28\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/80bb7bdd-6cf4-4053-94c5-2e4e53d9d5f6.svg\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022route_filled\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u002224\u0022},\u0022link\u0022:{\u0022href\u0022:\u0022https://m.uber.com/looking/\u0022,\u0022text\u0022:\u0022Ride\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[0].link_cta2\u0022}},{\u0022icon\u0022:{\u0022format\u0022:\u0022svg\u0022,\u0022height\u0022:\u002224\u0022,\u0022label\u0022:\u0022Steering wheel (filled)\u0022,\u0022legacySrc\u0022:\u0022https://www.uber-assets.com/image/upload/v1542250915/assets/d4/ca3837-f9df-473b-9099-85505187cb2a/original/steering_wheel-filled.svg\u0022,\u0022photoId\u0022:\u00226f17582e289141efff525b02ab614fa612cf41d280bd6196fce12d05920fe388\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/d4ca3837-f9df-473b-9099-85505187cb2a.svg\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022Drive\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u002224\u0022},\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://drivers.uber.com/\u0022,\u0022text\u0022:\u0022Drive \u0026 deliver\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[1].link_cta3\u0022}},{\u0022icon\u0022:{\u0022format\u0022:\u0022svg\u0022,\u0022height\u0022:\u002224\u0022,\u0022label\u0022:\u0022Restaurant (filled)\u0022,\u0022legacySrc\u0022:\u0022https://www.uber-assets.com/image/upload/v1542250524/assets/83/9bd4f4-306c-4b1b-b0e8-ab9cc8fd65c7/original/restaurant-filled.svg\u0022,\u0022photoId\u0022:\u0022d44564102dd0d0be9073dc268d0e6e9e9a123454e89efe9c1b7277132c308d06\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/839bd4f4-306c-4b1b-b0e8-ab9cc8fd65c7.svg\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022Restaurant location\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u002224\u0022},\u0022link\u0022:{\u0022href\u0022:\u0022https://ubereats.com/login-redirect/\u0022,\u0022text\u0022:\u0022Uber Eats\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[2].link_cta4\u0022}},{\u0022icon\u0022:{\u0022format\u0022:\u0022svg\u0022,\u0022height\u0022:\u002224\u0022,\u0022label\u0022:\u0022Storefront (filled)\u0022,\u0022legacySrc\u0022:\u0022https://www.uber-assets.com/image/upload/v1542250986/assets/0d/73ead7-7739-4bb3-b79b-ded048dba1e1/original/storefront-filled.svg\u0022,\u0022photoId\u0022:\u0022a16521613e81666f112410e9c8f1abaa66c1c75c18d6009fa2d6f13c282b08e3\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/0d73ead7-7739-4bb3-b79b-ded048dba1e1.svg\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022Store location\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u002224\u0022},\u0022link\u0022:{\u0022href\u0022:\u0022https://business.uber.com/\u0022,\u0022text\u0022:\u0022Business\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_cta.childNodes[3].link_cta5\u0022}}],\u0022component\u0022:\u0022CTA_LAYOVER\u0022,\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022Sign up to ride, drive, and receive delivery\u0022,\u0022href\u0022:\u0022\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Sign up\u0022}},\u0022displayOptions\u0022:{\u0022hideLoginIcon\u0022:true,\u0022showLoginTextOnAllSize\u0022:true},\u0022links\u0022:[{\u0022childNodes\u0022:[{\u0022childNodes\u0022:[{\u0022description\u0022:\u0022Learn more about advertising on Uber. Reach customers as they go anywhere and get anything.\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/advertising/\u0022,\u0022text\u0022:\u0022Advertising\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[0].link_cta6\u0022}},{\u0022description\u0022:\u0022Resources for driving and delivering with Uber\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/earn/\u0022,\u0022text\u0022:\u0022Earn\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[1].link_cta7\u0022}},{\u0022description\u0022:\u0022Experiences and information for people on the go\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/ride/\u0022,\u0022text\u0022:\u0022Ride\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[2].link_cta8\u0022}},{\u0022description\u0022:\u0022Ordering meals for delivery is just the start with Uber Eats\u0022,\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/eat/\u0022,\u0022text\u0022:\u0022Eat\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[3].link_cta9\u0022}},{\u0022description\u0022:\u0022Bringing stores within reach of a world of customers\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/merchants/\u0022,\u0022text\u0022:\u0022Merchants\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[4].link_cta10\u0022}},{\u0022description\u0022:\u0022Transforming the way companies transport and feed their people\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/business/\u0022,\u0022text\u0022:\u0022Business\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[5].link_cta11\u0022}},{\u0022description\u0022:\u0022Taking shipping logistics in a new direction\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/freight/\u0022,\u0022text\u0022:\u0022Freight\u0022,\u0022hidden\u0022:true,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[6].link_cta12\u0022}},{\u0022description\u0022:\u0022Moving care forward together with healthcare providers\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/health/\u0022,\u0022text\u0022:\u0022Health\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[7].link_cta13\u0022}},{\u0022description\u0022:\u0022Improving campus transport\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/higher-education/\u0022,\u0022text\u0022:\u0022Higher Education\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[8].link_cta14\u0022}},{\u0022description\u0022:\u0022Expanding the reach of public transport\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/transit/\u0022,\u0022text\u0022:\u0022Transit\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[0].childNodes[9].link_cta15\u0022}}],\u0022icon\u0022:{\u0022format\u0022:\u0022svg\u0022,\u0022height\u0022:\u002224\u0022,\u0022label\u0022:\u0022Menu selector\u0022,\u0022legacySrc\u0022:\u0022https://www.uber-assets.com/image/upload/v1693943418/assets/b1/3c9264-0416-4e8f-bb02-737a108f36ae/original/dot_grid_outlined.svg\u0022,\u0022photoId\u0022:\u0022c3c04d7df6d3656a235d07d8e38867103703faca43a8a4a9ffac830e58e3247f\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/b13c9264-0416-4e8f-bb02-737a108f36ae.svg\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022Menu selector\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u002224\u0022},\u0022link\u0022:{\u0022text\u0022:\u0022Products\u0022}},{\u0022childNodes\u0022:[{\u0022description\u0022:\u0022The technology behind Uber Engineering\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/engineering/\u0022,\u0022text\u0022:\u0022Engineering\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[1].childNodes[0].link_cta16\u0022}},{\u0022description\u0022:\u0022Doing the right thing for cities and communities worldwide\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/community-support/\u0022,\u0022text\u0022:\u0022Community support\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[1].childNodes[1].link_cta17\u0022}},{\u0022description\u0022:\u0022Uber news and updates in your country\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/newsroom/\u0022,\u0022text\u0022:\u0022Newsroom\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[1].childNodes[2].link_cta18\u0022}},{\u0022description\u0022:\u0022Product, how-to, and policy content—and more\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/gb/en/\u0022,\u0022text\u0022:\u0022Uber.com\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_links[0].childNodes[1].childNodes[3].link_cta19\u0022}}],\u0022icon\u0022:{\u0022format\u0022:\u0022png\u0022,\u0022height\u0022:\u002224\u0022,\u0022label\u0022:\u0022People Icon\u0022,\u0022photoId\u0022:\u0022b771e1f8f0ee8b551d59a25611d4d31f1fc2769c842d205c663df986bdc3b463\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/27988348-0cbd-4c5c-be3a-f533f48d0047.png\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022Two stylised square shapes and dots, resembling a pair of people.\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u002224\u0022},\u0022link\u0022:{\u0022text\u0022:\u0022Company\u0022}}],\u0022component\u0022:\u0022MegaMenu\u0022,\u0022link\u0022:{\u0022text\u0022:\u0022Explore\u0022},\u0022trimFlyoutMenu\u0022:false}],\u0022lob\u0022:{\u0022childNodes\u0022:[],\u0022component\u0022:\u0022LoBFlyoutMenu\u0022,\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022\u0022}},\u0022loggedInCta\u0022:{\u0022childNodes\u0022:[{\u0022icon\u0022:{\u0022format\u0022:\u0022svg\u0022,\u0022height\u0022:\u002224\u0022,\u0022label\u0022:\u0022Drive and Deliver\u0022,\u0022legacySrc\u0022:\u0022https://www.uber-assets.com/image/upload/v1721211384/assets/e3/f56da1-d0d0-4ddb-a97a-62451d4164ef/original/drive-deliver.svg\u0022,\u0022photoId\u0022:\u0022adfe305cbbb8a167d7270e4505766e1fa4a38dd2970bb9c29002b7395868121e\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/e3f56da1-d0d0-4ddb-a97a-62451d4164ef.svg\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022Drive and Deliver\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u002224\u0022},\u0022link\u0022:{\u0022href\u0022:\u0022https://drivers.uber.com/\u0022,\u0022text\u0022:\u0022Drive \u0026 deliver\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[0].link_cta20\u0022}},{\u0022icon\u0022:{\u0022format\u0022:\u0022svg\u0022,\u0022height\u0022:\u002228\u0022,\u0022label\u0022:\u0022Ride\u0022,\u0022legacySrc\u0022:\u0022https://www.uber-assets.com/image/upload/v1721211597/assets/cc/b36d13-2a48-47a7-a01a-2b5f78973293/original/ride.svg\u0022,\u0022photoId\u0022:\u0022cd1e693bb6bdf2df850a5a6671f75550c68bbafbae0a75ea3ad91ca3dfaba602\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/ccb36d13-2a48-47a7-a01a-2b5f78973293.svg\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022Ride with Uber\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u002228\u0022},\u0022link\u0022:{\u0022href\u0022:\u0022https://m.uber.com/login-redirect\u0022,\u0022text\u0022:\u0022Ride\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[1].link_cta21\u0022}},{\u0022icon\u0022:{\u0022format\u0022:\u0022svg\u0022,\u0022height\u0022:\u002224\u0022,\u0022label\u0022:\u0022Uber Eats\u0022,\u0022legacySrc\u0022:\u0022https://www.uber-assets.com/image/upload/v1721211613/assets/ae/aa8bd6-4051-4372-bcc5-a8631cfbbcaa/original/uber-eats.svg\u0022,\u0022photoId\u0022:\u00220e6371fc25f5e36e219c382498e911e393107a567ecad22196633fe67d8c9a92\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/aeaa8bd6-4051-4372-bcc5-a8631cfbbcaa.svg\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022Uber Eats\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u002224\u0022},\u0022link\u0022:{\u0022href\u0022:\u0022https://ubereats.com/login-redirect/\u0022,\u0022text\u0022:\u0022Uber Eats\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[2].link_cta22\u0022}},{\u0022icon\u0022:{\u0022format\u0022:\u0022svg\u0022,\u0022height\u0022:\u002224\u0022,\u0022label\u0022:\u0022Uber for Business\u0022,\u0022legacySrc\u0022:\u0022https://www.uber-assets.com/image/upload/v1721211438/assets/2a/2a1bb3-c25a-4b46-b64d-b8b1ec5e6969/original/uber-for-business.svg\u0022,\u0022photoId\u0022:\u0022b7a7b0ba89075c656067f9f27280d8a0dd5b0626777f2a9861d023884187e590\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/2a2a1bb3-c25a-4b46-b64d-b8b1ec5e6969.svg\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022Uber for Business\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u002224\u0022},\u0022link\u0022:{\u0022href\u0022:\u0022https://business.uber.com/\u0022,\u0022text\u0022:\u0022Uber for Business\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[3].link_cta23\u0022}},{\u0022icon\u0022:{\u0022format\u0022:\u0022svg\u0022,\u0022height\u0022:\u002224\u0022,\u0022label\u0022:\u0022Manage account\u0022,\u0022legacySrc\u0022:\u0022https://www.uber-assets.com/image/upload/v1721211457/assets/33/188c4f-3728-4287-9447-50da6f123c2f/original/manage-account.svg\u0022,\u0022photoId\u0022:\u0022c37a85934df174dd120edabaeb5b98730119b6cce2ffbb55e5089fe94bcd10bd\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/33188c4f-3728-4287-9447-50da6f123c2f.svg\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022Manage account\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u002224\u0022},\u0022link\u0022:{\u0022href\u0022:\u0022https://account.uber.com/\u0022,\u0022text\u0022:\u0022Manage account\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[4].link_cta24\u0022}},{\u0022link\u0022:{\u0022href\u0022:\u0022https://auth.uber.com/login/logout\u0022,\u0022text\u0022:\u0022Sign out\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_loggedInCta.childNodes[5].link_cta25\u0022}}],\u0022component\u0022:\u0022LOGGED_IN_LAYOVER\u0022,\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022Your account information\u0022,\u0022text\u0022:\u0022${firstName}\u0022}},\u0022login\u0022:{\u0022childNodes\u0022:[],\u0022component\u0022:\u0022LoginLink\u0022,\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022Log in to your Uber account\u0022,\u0022href\u0022:\u0022https://auth.uber.com/login-redirect?next_url=https://www.uber.com\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Log in\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_login.link_cta26\u0022}},\u0022logo\u0022:{\u0022icon\u0022:{\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022},\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022Go to the Uber Blog\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Uber Blog\u0022,\u0022data-tracking-name\u0022:\u0022_a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f_logo.link_cta27\u0022}},\u0022subBlockRightCTA\u0022:{\u0022showSubBlockRightCTA\u0022:false,\u0022subBlockData\u0022:[]},\u0022theme\u0022:\u0022dark\u0022},\u0022blockContentID\u0022:\u0022a6e8fb67-1a64-43ec-bfe5-d6a9baffa05f\u0022}},{\u0022blockContentID\u0022:\u00220e0d93f9-6080-48cf-a67c-b44585b1ab78\u0022,\u0022blockKey\u0022:\u0022cinnamon-using-century-old-tech-to-build-a-mean-load-shedder.175668fe9d82424db544f4986f9ca00f\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022ArticleHeader\u0022,\u0022props\u0022:{\u0022authorUUIDs\u0022:[\u00227c8d02e7-21b9-4250-a738-2c0609ec516b\u0022,\u002298f0528e-c329-4f10-9166-53bcacd1849f\u0022,\u00226418b826-a6f6-4be6-a2da-a39302c3ba72\u0022,\u0022ba41d6ff-04bf-4f12-bfd0-a9bfd1a76e1c\u0022],\u0022heroMedia\u0022:{\u0022imageSrc\u0022:{\u0022format\u0022:\u0022jpg\u0022,\u0022height\u0022:\u00222974\u0022,\u0022label\u0022:\u0022Main-image-GettyImages-717354177.jpg\u0022,\u0022photoId\u0022:\u0022a5cfd61e7ab00bc3bc4847b7e9395105213b5585a4e06fe027a599bf3e3d2ba6\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/af951005-c1a0-5a02-891c-463ad08d7577.jpg\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022Main-image-GettyImages-717354177.jpg\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u00223965\u0022}},\u0022heroMediaType\u0022:\u0022image\u0022,\u0022title\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022breadcrumbData\u0022:{\u0022parentFullURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022\u0022},\u0022categoryIds\u0022:[\u0022add2dbca-fda9-41d4-9a47-8ca0529aaa88\u0022,\u0022fcbeef20-f044-4b60-b8b4-4d2ffc92354d\u0022,\u0022b374768e-489f-42d5-913d-269fbb44a44b\u0022],\u0022cityOverride\u0022:{},\u0022isCountryVariant\u0022:true,\u0022isDynamicTemplate\u0022:false,\u0022isLive\u0022:true,\u0022namespace\u0022:\u0022blog\u0022,\u0022pattern\u0022:\u0022/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022publishedAt\u0022:\u00222023-11-22T08:00:00Z\u0022,\u0022tags\u0022:{\u0022canonical\u0022:\u0022https://www.uber.com/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022description\u0022:\u0022Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we're bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber's service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.\u0022,\u0022googlePlayAppID\u0022:\u0022com.ubercab\u0022,\u0022iPadAppID\u0022:\u0022368677368\u0022,\u0022iPhoneAppID\u0022:\u0022368677368\u0022,\u0022noIndex\u0022:false,\u0022ogDescription\u0022:\u0022Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we're bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber's service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.\u0022,\u0022ogImageURL\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/af951005-c1a0-5a02-891c-463ad08d7577.jpg\u0022,\u0022ogSiteName\u0022:\u0022Uber\u0022,\u0022ogTitle\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022ogType\u0022:\u0022website\u0022,\u0022ogURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022twitterCard\u0022:\u0022summary\u0022,\u0022twitterSite\u0022:\u0022@Uber\u0022},\u0022templateID\u0022:\u00227f81accf-da1c-40e7-b006-91ce261bf011\u0022,\u0022updatedAt\u0022:\u00222026-04-01T00:02:50.896493Z\u0022},\u0022blockContentID\u0022:\u00220e0d93f9-6080-48cf-a67c-b44585b1ab78\u0022}},{\u0022blockContentID\u0022:\u00225c04c6c9-28fb-43a1-9d24-f4e94be010ce\u0022,\u0022blockKey\u0022:\u0022cinnamon-using-century-old-tech-to-build-a-mean-load-shedder.04f4ba052ca1446895615a89850573a6\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022LongFormContent\u0022,\u0022props\u0022:{\u0022richTextEditor\u0022:{\u00220\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003EIntroduction\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u00221\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EUber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we’re bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow).\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00222\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ETo mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber’s service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00223\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ETo solve these two problems, we’ve created the load shedder library, Cinnamon. It is built on the experiences from a previous load shedder, \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://www.uber.com/en-DK/blog/qalm-qos-load-management-framework/%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EQALM\u003C/a\u003E, that was able to do graceful degradation. In addition to graceful degradation, Cinnamon dynamically and continuously adjusts the capacity of the service (using a \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://en.wikipedia.org/wiki/TCP_Vegas#:~:text=TCP%2520Vegas%2520is%2520a%2520TCP,Lawrence%2520Brakmo%2520and%2520Larry%2520L.%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003Emodified TCP-Vegas algorithm\u003C/a\u003E, a fairly “young” idea, from 1994) and thus adjusts the amount of load shedding dynamically, depending on the incoming requests (using the \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://en.wikipedia.org/wiki/PID_controller%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EPID controller\u003C/a\u003E idea, with origins back to the 17th century). Compared with previous approaches, Cinnamon is able to handle bigger overloads, while maintaining good latencies (P50 latency increases 50%25 at 300%25 overload). It is very efficient, generally adding only 1 microsecond of overhead per request. Lastly, Cinnamon requires no configuration, and it is being rapidly adopted by services at Uber. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00224\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EThis blog post is the first in a series of three on Cinnamon. The series should be interesting for everyone–from readers with no prior knowledge of dynamic load shedders to readers who have extensive knowledge. In this specific blog post we’ll give an overview of Cinnamon and see how it compares to the \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://en.wikipedia.org/wiki/CoDel%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003ECoDel\u003C/a\u003E-based QALM. In the next two we’ll dive into how we find the rejection rate using a PID controller and how we automatically adjust the capacity using a modified TCP Vegas algorithm.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00225\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator has-alpha-channel-opacity%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00226\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003EBackground\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u00227\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EBefore diving into how Cinnamon is architected and works, we’ll briefly describe how \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://www.uber.com/en-DK/blog/qalm-qos-load-management-framework/%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EQALM\u003C/a\u003E works. If you have already read the QALM blog post, feel free to skip this section.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00228\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EQALM uses the \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://en.wikipedia.org/wiki/CoDel%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EControlled Delay (a.k.a., CoDel)\u003C/a\u003E algorithm to detect overload and when overloaded it will drop low-priority requests (if any). In essence, CoDel (and thus QALM) monitors the queue of incoming requests and how much time each request spends in the queue. If they all are delayed by more than, say 5 ms, within a 100ms window, then CoDel sheds requests. For QALM, it would then reject any lower-priority requests. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00229\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EAt any given point, QALM limits the number of requests that are executed concurrently, which in turn acts as the capacity. As QALM is implemented in Go, the limit is implemented by inserting all requests into a channel, from which a set of background goroutines consumes up to a certain limit. Lastly, in order to use QALM, you have to configure the priority of your callers and you need to configure the maximum number of concurrent requests to be handled. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002210\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EWhile deploying QALM, we noticed that the configuration part hindered adoption, as they require more effort than anticipated. First, just depending on the priority of your caller might not capture that a test service called your upstream service, and thus the request should really be a low-priority request (the diagram below shows this problem).\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002211\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cfigure class=%5C\u0022rich-figure%5C\u0022\u003E\u003Cimg alt=%5C\u0022%5C\u0022 class=%5C\u0022wp-image-1068489%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022284%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 1024px) 100vw, 1024px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9jMGI4MDBmZS02MjhlLTU1MmItYTIzYS04MTNiYjgwZjQwNDcucG5n%5C\u0022 width=%5C\u00221024%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003EFigure 1: Diagram of two services, where Service 1 receives online traffic from users and from a testing system. For both sources, they call Service 2 to retrieve some information.\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002212\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://lucid.app/lucidchart/bd5020c1-da24-4c3e-a70d-d0a546342810/edit?page=0\u0026amp;v=258\u0026amp;s=612%5C\u0022\u003E\u003C/a\u003EIn the above, say we’re configuring the priorities in Service 2 – we might set requests from Service 1 to be high priority (as it is serving online traffic from our mobile apps). But because Service 1 is also serving test systems, it would wrongly categorize those requests in Service 2 as high priority.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002213\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EIn addition, setting the right maximum number of concurrent requests is difficult, as it can really change fairly rapidly depending on the request patterns your service is handling and on which hardware (and neighbors on that hardware) it is running. Further, we noticed that using channels for load shedding can be expensive, as they are points of synchronization.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002214\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EThus, we started the work on Cinnamon to fix these issues, namely: \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002215\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Col class=%5C\u0022rich-list-ol%5C\u0022\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003EBetter priority propagation\u003C/li\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003ERequire zero configuration to use\u003C/li\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003EMake it very performant\u003C/li\u003E \u003C/ol\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022list\u0022},\u002216\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator has-alpha-channel-opacity%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002217\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003EArchitecture\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002218\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ECinnamon is built as an \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://github.com/yarpc%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003ERPC middleware\u003C/a\u003E that is easily imported by Uber’s Go services. On top of that each request is tagged with a priority (at the edge) that is propagated down through the request stack, so that all services processing some part of the request knows how important the request is for our users. This is depicted in the diagram below:\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002219\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cfigure class=%5C\u0022rich-figure%5C\u0022\u003E\u003Cimg alt=%5C\u0022%5C\u0022 class=%5C\u0022wp-image-1068492%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022277%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 1024px) 100vw, 1024px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8zZDU0MTdmYy1jOTdiLTUyZWQtODM1My03ZDE2ZGIwYzgwM2UucG5n%5C\u0022 width=%5C\u00221024%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003EFigure 2: Diagram of how Cinnamon fits into the service mesh at Uber.\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002220\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EIn the diagram above a request from one of our apps hits our Edge system that then forwards the request to Service 1, which as part of its processing of this request will query a database and then Service 2. The endpoint in the edge is annotated with the priority of the request and this is propagated from the edge to all downstream dependencies via \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://www.uber.com/en-DK/blog/distributed-tracing/%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EJaeger\u003C/a\u003E. By propagating this information, all services in the request chain will know the importance of the request and how critical it is for our users.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002221\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EHaving the priority annotated with each request and propagating it down through the call chain, Cinnamon is able to act autonomously for each service instance, while still able to globally agree on which requests to serve and which to reject during overloads. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002222\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator has-alpha-channel-opacity%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002223\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003EPriorities\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002224\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ECinnamon uses the priority attached to the request and if not present it sets a default one, depending on the calling service. The priority is actually composed of two different components, a \u003Cem class=%5C\u0022rich-italic%5C\u0022\u003Etier\u003C/em\u003E level and a \u003Cem class=%5C\u0022rich-italic%5C\u0022\u003Ecohort.\u003C/em\u003E The tier level designates how important the request is. At Uber we use 6 tiers, from 0 to 5, where tier 0 is the highest priority and tier 5 is the lowest.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002225\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EThe cohorts are used to further segregate the requests within a tier, such that we can load-shed the same subset of requests across services. It is very much inspired by \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://arxiv.org/abs/1806.04075%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EWeChat’s approach\u003C/a\u003E, where we divide the requests into 128 cohorts, based on the user involved in the request. That way, if a service needs to load-shed say 5%25 of its tier 1 requests, it will be the same set of users (i.e., 5%25) that are load-shedded. To do so, we use a simple sharding scheme with hashing and some timing information to group and automatically shift users around, to ensure that the same users are not always shedded first. To align with tier levels, the highest priority cohort is 0 and the lowest is cohort 127.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002226\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EWith 6 tiers and 128 cohorts for each, we end up with 768 different priorities that we can then load-shed on. With “only” 768 different priorities, we can also build a very efficient priority queue with separate buckets for each priority. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002227\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator has-alpha-channel-opacity%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002228\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003ELibrary Architecture\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002229\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EWith overall Cinnamon deployment and priorities described, it is now time to dive into how the Cinnamon library is built. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002230\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EThe diagram below shows the life of a request as it goes through the Cinnamon middleware:\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002231\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cfigure class=%5C\u0022rich-figure%5C\u0022\u003E\u003Cimg alt=%5C\u0022%5C\u0022 class=%5C\u0022wp-image-1068495%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022355%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 1024px) 100vw, 1024px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80ODgzOTM5MS01ZDUzLTVkMDktYmQ0YS03NjZjZDI2MzgzYTUucG5n%5C\u0022 width=%5C\u00221024%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003EFigure 3: Diagram shows how a request traverses through Cinnamon, before being sent to the business logic for actual processing.\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002232\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EAs a request comes in it goes through these stages:\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002233\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Col class=%5C\u0022rich-list-ol%5C\u0022\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003E\u003Cstrong class=%5C\u0022rich-bold%5C\u0022\u003EPriority:\u003C/strong\u003E First we ensure that the request has a priority attached, and if not we set a default one based on the caller of the request.\u003C/li\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003E\u003Cstrong class=%5C\u0022rich-bold%5C\u0022\u003ERejector:\u003C/strong\u003E Next it enters the rejector that figures out whether we should reject the request or not. \u003C/li\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003E\u003Cstrong class=%5C\u0022rich-bold%5C\u0022\u003EPriority Queue: \u003C/strong\u003EIf the request is accepted it will enter a priority queue, to ensure that the highest-priority requests are scheduled first. \u003C/li\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003E\u003Cstrong class=%5C\u0022rich-bold%5C\u0022\u003EScheduler:\u003C/strong\u003E Cinnamon only allows a fixed number of requests to be processed in parallel, so the scheduler’s job is to ensure that we process as many requests concurrently as the current limit allows, but not more.\u003C/li\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003E\u003Cstrong class=%5C\u0022rich-bold%5C\u0022\u003ETimeout:\u003C/strong\u003E In cases where too many requests are queued, they will time out from the queue and return a rate limiting error. The queue timeout is typically 33%25 of the normal request timeout.\u003C/li\u003E \u003C/ol\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022list\u0022},\u002234\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EAdditionally, Cinnamon has two background threads/goroutines, the “PID controller” and the “auto-tuner”, that continuously adjust the rejection threshold respecting the maximum allowed concurrent requests. You might ask why we have two and can’t it all be done with just setting a correct rejection threshold, but that is unfortunately not enough. We essentially have two slightly overlapping concerns. When a service is overloaded, just controlling the maximum number of concurrent requests is not enough, as a queue might still form. On the other hand, just setting a rejection threshold does not prevent the service from being overloaded if it processes too many requests concurrently. Thus we have the two goroutines, where the PID controller’s job is to minimize the number of queued requests, whereas the auto-tuner’s job is to maximize the throughput of the service, without sacrificing the response latencies (too much). \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002235\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EWe’ll briefly describe these two aspects below. For more in-depth information about these two, read the two following blog posts.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002236\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator has-alpha-channel-opacity%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002237\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch2 class=%5C\u0022rich-heading-h2%5C\u0022\u003ERejector\u003C/h2\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002238\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EThe rejector component has two responsibilities: a) figure out whether an endpoint is overloaded and b), if an endpoint is overloaded, shed a percentage of the requests to make sure the request queue is as small as possible.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002239\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ETo determine whether an endpoint is overloaded we keep track of the last time the request queue was empty, and if it has not been emptied in the last say 10 seconds we deem the endpoint to be overloaded (inspired by \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://queue.acm.org/detail.cfm?id=2839461%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EFacebook\u003C/a\u003E).\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002240\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EWhen an endpoint is overloaded, the background goroutine starts to monitor the inflow and outflow of requests into the priority queue. Based on these numbers, it uses a \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://en.wikipedia.org/wiki/PID_controller%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EPID controller\u003C/a\u003E to determine a ratio of requests to shed. The PID controller is very fast (as in very few iterations are needed) at finding the correct level and once the request queue has been drained, the PID ensures that we only slowly reduce the ratio. By slowly reducing the threshold we limit oscillating rates that worsen the latencies. Further, by just monitoring the inflow and outflow of requests to the priority queue, we make the PID controller agnostic to whether the service serves a high or low RPS volume.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002241\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator has-alpha-channel-opacity%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002242\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch2 class=%5C\u0022rich-heading-h2%5C\u0022\u003EScheduler\u003C/h2\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002243\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EIf a request is accepted for processing (i.e., not rejected) it continues into a priority queue, where a scheduler pops the highest priority ones first and forwards them to the business logic inside the service that processes the request. The scheduler makes sure to only allow a certain number of concurrent requests to be processed at the same time, to better control latencies. We call this the inflight limit.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002244\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EThe \u003Cem class=%5C\u0022rich-italic%5C\u0022\u003Eauto-tuner\u003C/em\u003E background goroutine monitors the latency of the endpoint and uses a heavily modified/augmented version of the \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://en.wikipedia.org/wiki/TCP_Vegas%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EVegas TCP/IP control algorithm\u003C/a\u003E to control the inflight limit. In essence, if the latency goes up it could mean the service is overloaded and thus it reduces the inflight limit. Vice versa, if latencies are stable or dropping, it will increase the limit to allow a higher throughput.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002245\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator has-alpha-channel-opacity%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002246\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003EExperimental Results\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002247\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ETo verify that Cinnamon actually works, we ran a number of experiments, including comparing it with our existing load shedder, \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://www.uber.com/en-DK/blog/qalm-qos-load-management-framework/%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EQALM\u003C/a\u003E. When evaluating the load shedder, we want to test how good it is at: 1) protecting the service, and 2) protecting our core flows, by shedding low-priority requests first.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002248\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ETo see how well the two protect the service, we compare the throughput, which is the number of requests sent to the backend and the \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://aws.amazon.com/builders-library/using-load-shedding-to-avoid-overload/%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003E\u003Cem class=%5C\u0022rich-italic%5C\u0022\u003Egoodput\u003C/em\u003E\u003C/a\u003E, which is the subset of throughput that returns a successful response. Ideally the goodput should be as high as possible with minimal effect on the latencies. Furthermore, in order to protect our core flows, the load shedder should ideally shed lower-priority traffic before any higher-priority traffic.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002249\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EIn all cases, we use a test service that has an endpoint that does a mix of memory allocations, CPU work (sorting) and rescheduling (via a \u003Cem class=%5C\u0022rich-italic%5C\u0022\u003Etime.Sleep\u003C/em\u003E) to mimic a real-life workload. The response time of the endpoint is around 120ms when not loaded.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002250\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EWe run tests of 5 minutes, where we send a fixed amount of RPS (e.g., 1,000), where 50%25 of the traffic is tier 1 and 50%25 is tier 5. Each request has a timeout of 1 second. We collect the P50 and P99 latencies and goodput. In all cases, we run in production, where we have two backend instances and are hitting them from two other machines. Each backend has a capacity of ~650 RPS, so in total the service can handle 1,300 RPS. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002251\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator has-alpha-channel-opacity%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002252\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch2 class=%5C\u0022rich-heading-h2%5C\u0022\u003EGoodput\u003C/h2\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002253\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EThe first to estimate is the goodput, which is essentially the \u003Cthroughput\u003E * (1 – \u003Cerror-rate\u003E), where error-rate is both rate-limiting errors and timeouts. We group by tier and include the error rate to make it easy to compare (we’ve added a baseline case, with no load shedders enabled).\u003C/error-rate\u003E\u003C/throughput\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002254\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cfigure class=%5C\u0022rich-figure%5C\u0022\u003E\u003Cimg alt=%5C\u0022%5C\u0022 class=%5C\u0022wp-image-1068501%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022605%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 1024px) 100vw, 1024px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yODU2OWUwMC00OGJmLTUyMDktOTAyZC00OTdjMmI3ZDViNzIucG5n%5C\u0022 title=%5C\u0022Chart%5C\u0022 width=%5C\u00221024%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003EFigure 4: Goodput with no load shedder (baseline), Cinnamon and QALM at various levels of inbound RPS)\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002255\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ETo get the total goodput for one of the load shedders, you can just add the goodput for tier 1 and tier 5 (e.g., in the 2,000 RPS case, Cinnamon’s goodput is 1,000+302=1,302). As the sending of the traffic happens from two different machines, some of the tier5 goes through, because the two machines are not fully synced when to start the experiment. For the baseline case (i.e., no load shedder), when sending more than 3,000 RPS to the service it dies, and no requests go through.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002256\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EAs can be seen, when the service is not loaded (200-1,000 RPS), all requests go through. When we hit the 1,500 RPS case, both load shedders kick in, where QALM keeps a slightly higher goodput (~2%25 higher), compared to Cinnamon (1,258 vs. 1,280). This is likely because the auto-tuner has to find the right inflight limit combined with noise in our production environment. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002257\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EAt 2,000 RPS and above, Cinnamon sustains goodput close to the capacity. Do note that at the higher throughput cases, the service is spending more and more resources rejecting requests, and thus the capacity of the service goes down. QALM on the other hand starts to error out on tier 1 requests as well (most of them are timeouts), and at 3,000 RPS, its total goodput is at 552, or 40%25 of the capacity of the service.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002258\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator has-alpha-channel-opacity%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002259\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch2 class=%5C\u0022rich-heading-h2%5C\u0022\u003ELatencies\u003C/h2\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002260\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EWhile goodput is one thing, it’s another thing entirely whether the latencies are good. The graph below shows the P50 and P99 tier 1 latencies (which are the ones we really care about):\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002261\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cfigure class=%5C\u0022rich-figure%5C\u0022\u003E\u003Cimg alt=%5C\u0022%5C\u0022 class=%5C\u0022wp-image-1068505%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022613%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 1024px) 100vw, 1024px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy84Y2E3MmE2Ni00MzE1LTU4OWYtYjA3ZS01ZDhjM2JmZGVjNDMucG5n%5C\u0022 title=%5C\u0022Chart%5C\u0022 width=%5C\u00221024%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003EFigure 5: P50 latencies for the high priority, tier 1, requests for the three setup at different inbound RPS.\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002262\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cfigure class=%5C\u0022rich-figure%5C\u0022\u003E\u003Cimg alt=%5C\u0022%5C\u0022 class=%5C\u0022wp-image-1068507%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022602%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 1024px) 100vw, 1024px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hZmZiNzllOS1hM2I2LTUwOTItYTU3Zi1hMjg0YWMyMWE3OTQucG5n%5C\u0022 title=%5C\u0022Chart%5C\u0022 width=%5C\u00221024%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003EFigure 6: P99 latencies for the high priority, tier 1, requests for the three setup at different inbound RPS.\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002263\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E(Note that after 3,000 RPS the service is completely dead without a load shedder, so we don’t have any baseline points after that).\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002264\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EUnder light load, the P99 is at ~140 ms for all and it increases to ~190 ms when the system is fairly loaded (1,000 RPS). Going above the capacity limit (1,500 RPS+) both load shedders kick in, but the latency profile starts to diverge. QALM fairly quickly approaches the timeout limit of 1 sec (for both P50 and P99), whereas Cinnamon stays below 500ms (with P50 of ~180 ms). Note that the latency distribution looks similar for tier 5.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002265\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EThe big difference for these cases is that the PID controller in Cinnamon is able to sustain a good rejection rate, so you avoid oscillating between rejecting everything and then rejecting nothing (which CoDel tends to do). Further, at high throughput cases, the service is so loaded that CoDel believes all requests are delayed, so it rejects almost every request (and this is only amplified by using a single Go channel).\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002266\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EWe can actually see this fluctuation of the rejection ratio if we zoom in on one of the RPS cases. The graphs below show the success and error rate along with success response times for Cinnamon and QALM in the 4000 RPS case (for reference, we have included a 2-minute baseline run of 700 RPS).\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002267\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cfigure class=%5C\u0022rich-figure%5C\u0022\u003E\u003Cimg alt=%5C\u0022%5C\u0022 class=%5C\u0022wp-image-1068510%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022526%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 545px) 100vw, 545px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy84MmRiZGIxYS02YzJhLTVlMTEtOWQ2Ny0xMDczZDA0MmUwNTgucG5n%5C\u0022 width=%5C\u0022545%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003EFigure 7: The two graphs show how throughput, goodput, and latencies vary over time with both Cinnamon and QALM, when we send 4,000 RPS to the service. The first bump of traffic (to 700 RPS) is a baseline with no load shedder.\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002268\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EAs can be seen, the rejection rate (yellow line) is fairly stable for Cinnamon (with a bit of timeouts in the beginning due to queues), whereas QALM consistently returns timeouts, where both success (green line) and rejection rates fluctuate (e.g., success rate goes from ~0 to 500).\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002269\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator has-alpha-channel-opacity%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002270\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch2 class=%5C\u0022rich-heading-h2%5C\u0022\u003EInteraction Between PID and Auto-Tuner\u003C/h2\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002271\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EAnother interesting aspect is how the PID controller and the auto-tuner interact. To see this we look at the 1,500 and 2,000 RPS cases, which the following heatmaps show. The top graph shows how the inflight limit moves, while the bottom one shows rejection rate.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002272\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cfigure class=%5C\u0022rich-figure%5C\u0022\u003E\u003Cimg alt=%5C\u0022%5C\u0022 class=%5C\u0022wp-image-1068514%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022519%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 1024px) 100vw, 1024px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/resize/udam/format=auto/quality=0/width=2160/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hYjNlNDYwMS0yZTA3LTVmZDQtYTAzNC1jMmJjNWQzNzE2NzUucG5n%5C\u0022 width=%5C\u00221024%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003EFigure 8: The two graphs show how the inflight limit and the auto-tuner interact in Cinnamon, when running at 1,500 and 2,000 RPS.\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002273\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EInitially for the 1,500 RPS case, the inflight limit is ~240 which then drops to ~60 and then stabilizes around 110. This takes a few minutes for the auto-tuner to adjust. Meanwhile, as we’re sending 1,500 requests to it, there is a request-queue build-up and the rejector kicks in. As the auto-tuner adjusts the inflight (and thus the goodput), the rejector adjusts to make sure the queue is as small as possible.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002274\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EOn the other hand for the 2,000 RPS case, the inflight limit is already at 110, so it does not need to adjust, as it stays there. Correspondingly, the rejector keeps a steady rejection rate of ~30%25.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002275\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator has-alpha-channel-opacity%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002276\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003ESummary\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002277\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EWith Cinnamon we have built an efficient load shedder that uses century-old techniques to dynamically set thresholds for rejecting and estimating capacity of the services. It solves the issues we noticed with QALM (and thus any CoDel-based load shedder), namely, that Cinnamon is able to:\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002278\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Col class=%5C\u0022rich-list-ol%5C\u0022\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003EQuickly find a stable rejection rate\u003C/li\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003EAutomatically adjust the capacity of the service\u003C/li\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003EBe used without setting any configuration parameters\u003C/li\u003E \u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003EIncur very low overhead\u003C/li\u003E \u003C/ol\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022list\u0022},\u002279\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EIt should be noted that in designing and implementing Cinnamon we have been heavily inspired by technologies or ideas from a wide range of sources (i.e., \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://www.uber.com/en-DK/blog/distributed-tracing/%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EJaeger\u003C/a\u003E, \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://arxiv.org/abs/1806.04075%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EWeChat\u003C/a\u003E, \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://queue.acm.org/detail.cfm?id=2839461%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EFacebook\u003C/a\u003E, \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://netflixtechblog.medium.com/performance-under-load-3e6fa9a60581%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003ENetflix\u003C/a\u003E, and \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://aws.amazon.com/builders-library/using-load-shedding-to-avoid-overload/%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EAmazon\u003C/a\u003E).\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022}}},\u0022blockContentID\u0022:\u00225c04c6c9-28fb-43a1-9d24-f4e94be010ce\u0022}},{\u0022blockContentID\u0022:\u0022f7f7b11c-66f4-46a3-86c6-ca7469c5f2d7\u0022,\u0022blockKey\u0022:\u0022cinnamon-using-century-old-tech-to-build-a-mean-load-shedder.e8010cd2c2a7489aa1e981d7f2ea05f2\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022ArticleCategories\u0022,\u0022props\u0022:{\u0022breadcrumbData\u0022:{\u0022parentFullURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022\u0022},\u0022categoryIds\u0022:[\u0022add2dbca-fda9-41d4-9a47-8ca0529aaa88\u0022,\u0022fcbeef20-f044-4b60-b8b4-4d2ffc92354d\u0022,\u0022b374768e-489f-42d5-913d-269fbb44a44b\u0022],\u0022cityOverride\u0022:{},\u0022isCountryVariant\u0022:true,\u0022isDynamicTemplate\u0022:false,\u0022isLive\u0022:true,\u0022namespace\u0022:\u0022blog\u0022,\u0022pattern\u0022:\u0022/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022publishedAt\u0022:\u00222023-11-22T08:00:00Z\u0022,\u0022tags\u0022:{\u0022canonical\u0022:\u0022https://www.uber.com/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022description\u0022:\u0022Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we're bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber's service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.\u0022,\u0022googlePlayAppID\u0022:\u0022com.ubercab\u0022,\u0022iPadAppID\u0022:\u0022368677368\u0022,\u0022iPhoneAppID\u0022:\u0022368677368\u0022,\u0022noIndex\u0022:false,\u0022ogDescription\u0022:\u0022Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we're bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber's service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.\u0022,\u0022ogImageURL\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/af951005-c1a0-5a02-891c-463ad08d7577.jpg\u0022,\u0022ogSiteName\u0022:\u0022Uber\u0022,\u0022ogTitle\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022ogType\u0022:\u0022website\u0022,\u0022ogURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022twitterCard\u0022:\u0022summary\u0022,\u0022twitterSite\u0022:\u0022@Uber\u0022},\u0022templateID\u0022:\u00227f81accf-da1c-40e7-b006-91ce261bf011\u0022,\u0022updatedAt\u0022:\u00222026-04-01T00:02:50.896493Z\u0022},\u0022blockContentID\u0022:\u0022f7f7b11c-66f4-46a3-86c6-ca7469c5f2d7\u0022}},{\u0022blockContentID\u0022:\u00228308f24e-e2b3-4015-b4d5-5042c002bcb0\u0022,\u0022blockKey\u0022:\u0022cinnamon-using-century-old-tech-to-build-a-mean-load-shedder.d4464375c52f4dc69ddb8a34d361242d\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022ArticleAuthor\u0022,\u0022props\u0022:{\u0022authorUUIDs\u0022:[\u00227c8d02e7-21b9-4250-a738-2c0609ec516b\u0022,\u002298f0528e-c329-4f10-9166-53bcacd1849f\u0022,\u00226418b826-a6f6-4be6-a2da-a39302c3ba72\u0022,\u0022ba41d6ff-04bf-4f12-bfd0-a9bfd1a76e1c\u0022],\u0022breadcrumbData\u0022:{\u0022parentFullURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022\u0022},\u0022categoryIds\u0022:[\u0022add2dbca-fda9-41d4-9a47-8ca0529aaa88\u0022,\u0022fcbeef20-f044-4b60-b8b4-4d2ffc92354d\u0022,\u0022b374768e-489f-42d5-913d-269fbb44a44b\u0022],\u0022cityOverride\u0022:{},\u0022isCountryVariant\u0022:true,\u0022isDynamicTemplate\u0022:false,\u0022isLive\u0022:true,\u0022namespace\u0022:\u0022blog\u0022,\u0022pattern\u0022:\u0022/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022publishedAt\u0022:\u00222023-11-22T08:00:00Z\u0022,\u0022tags\u0022:{\u0022canonical\u0022:\u0022https://www.uber.com/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022description\u0022:\u0022Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we're bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber's service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.\u0022,\u0022googlePlayAppID\u0022:\u0022com.ubercab\u0022,\u0022iPadAppID\u0022:\u0022368677368\u0022,\u0022iPhoneAppID\u0022:\u0022368677368\u0022,\u0022noIndex\u0022:false,\u0022ogDescription\u0022:\u0022Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we're bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber's service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.\u0022,\u0022ogImageURL\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/af951005-c1a0-5a02-891c-463ad08d7577.jpg\u0022,\u0022ogSiteName\u0022:\u0022Uber\u0022,\u0022ogTitle\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022ogType\u0022:\u0022website\u0022,\u0022ogURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022twitterCard\u0022:\u0022summary\u0022,\u0022twitterSite\u0022:\u0022@Uber\u0022},\u0022templateID\u0022:\u00227f81accf-da1c-40e7-b006-91ce261bf011\u0022,\u0022updatedAt\u0022:\u00222026-04-01T00:02:50.896493Z\u0022},\u0022blockContentID\u0022:\u00228308f24e-e2b3-4015-b4d5-5042c002bcb0\u0022}},{\u0022blockContentID\u0022:\u00225785d8f2-23f3-4820-87c2-b6399dab543d\u0022,\u0022blockKey\u0022:\u0022cinnamon-using-century-old-tech-to-build-a-mean-load-shedder.3e62aac2cb76408faf066b84e3b41759\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022ArticleFeed\u0022,\u0022props\u0022:{\u0022categories\u0022:[{\u0022id\u0022:\u0022add2dbca-fda9-41d4-9a47-8ca0529aaa88\u0022,\u0022label\u0022:\u0022Engineering\u0022},{\u0022id\u0022:\u0022fcbeef20-f044-4b60-b8b4-4d2ffc92354d\u0022,\u0022label\u0022:\u0022Aarhus\u0022},{\u0022id\u0022:\u0022b374768e-489f-42d5-913d-269fbb44a44b\u0022,\u0022label\u0022:\u0022Backend\u0022}],\u0022headline\u0022:\u0022Related Articles\u0022,\u0022breadcrumbData\u0022:{\u0022parentFullURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022\u0022},\u0022categoryIds\u0022:[\u0022add2dbca-fda9-41d4-9a47-8ca0529aaa88\u0022,\u0022fcbeef20-f044-4b60-b8b4-4d2ffc92354d\u0022,\u0022b374768e-489f-42d5-913d-269fbb44a44b\u0022],\u0022cityOverride\u0022:{},\u0022isCountryVariant\u0022:true,\u0022isDynamicTemplate\u0022:false,\u0022isLive\u0022:true,\u0022namespace\u0022:\u0022blog\u0022,\u0022pattern\u0022:\u0022/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022publishedAt\u0022:\u00222023-11-22T08:00:00Z\u0022,\u0022tags\u0022:{\u0022canonical\u0022:\u0022https://www.uber.com/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022description\u0022:\u0022Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we're bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber's service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.\u0022,\u0022googlePlayAppID\u0022:\u0022com.ubercab\u0022,\u0022iPadAppID\u0022:\u0022368677368\u0022,\u0022iPhoneAppID\u0022:\u0022368677368\u0022,\u0022noIndex\u0022:false,\u0022ogDescription\u0022:\u0022Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we're bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber's service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.\u0022,\u0022ogImageURL\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/af951005-c1a0-5a02-891c-463ad08d7577.jpg\u0022,\u0022ogSiteName\u0022:\u0022Uber\u0022,\u0022ogTitle\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022ogType\u0022:\u0022website\u0022,\u0022ogURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022twitterCard\u0022:\u0022summary\u0022,\u0022twitterSite\u0022:\u0022@Uber\u0022},\u0022templateID\u0022:\u00227f81accf-da1c-40e7-b006-91ce261bf011\u0022,\u0022updatedAt\u0022:\u00222026-04-01T00:02:50.896493Z\u0022},\u0022blockContentID\u0022:\u00225785d8f2-23f3-4820-87c2-b6399dab543d\u0022}},{\u0022blockContentID\u0022:\u002200cdbbb9-7ef2-4465-9486-c208a836b0f5\u0022,\u0022blockKey\u0022:\u0022s_n_page_4_9_4_a_1.65af07cdc047499b92da74f1c4fb0ea7\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022Footer\u0022,\u0022props\u0022:{\u0022accessibility\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/about/accessibility/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Accessibility\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_accessibility_cta1\u0022},\u0022apple\u0022:{\u0022alt\u0022:\u0022Download the Uber app for iOS\u0022,\u0022href\u0022:\u0022https://rides.sng.link/Cw5zn/564k?_dl=uber%253A%252F%252F\u0026_smtype=3\u0026pcn=uber-com-footer\u0026mvid=[marketing-visitor-id]\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_apple_cta2\u0022},\u0022copyright\u0022:\u0022Uber Technologies Inc.\u0022,\u0022facebook\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.facebook.com/uber\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Facebook\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_facebook_cta3\u0022},\u0022geolocation\u0022:{\u0022description\u0022:\u0022\u0022,\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022\u0022},\u0022subTitle\u0022:\u0022\u0022,\u0022title\u0022:\u0022Change your location\u0022},\u0022google\u0022:{\u0022alt\u0022:\u0022Download the Uber app for Android\u0022,\u0022href\u0022:\u0022https://rides.sng.link/Bw5zn/vz1k?_dl=uber%253A%252F%252F\u0026pcn=uber-com-footer\u0026mvid=[marketing-visitor-id]\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_google_cta4\u0022},\u0022group1\u0022:{\u0022childNodes\u0022:[{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/about/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022About us\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[0].link_cta5\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022Our offerings, apps and products\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/about/uber-offerings/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Our offerings\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[1].link_cta6\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/newsroom/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Newsroom\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[2].link_cta7\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://investor.uber.com/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Investors\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[3].link_cta8\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Blog\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[4].link_cta9\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://jobs.uber.com/en/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Careers\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[5].link_cta10\u0022}},{\u0022hideWithUScript\u0022:\u0022true\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/legal/document/?name=uber-contact-information\u0022,\u0022text\u0022:\u0022Company information\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group1.childNodes[6].link_cta11\u0022}}],\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Company\u0022}},\u0022group2\u0022:{\u0022childNodes\u0022:[{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/ride/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Ride\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[0].link_cta12\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/drive/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Drive\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[1].link_cta13\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/deliver/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Deliver\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[2].link_cta14\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.ubereats.com/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Eat\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[3].link_cta15\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/business/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Uber for Business\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[4].link_cta16\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uberfreight.com/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Uber Freight\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[5].link_cta17\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022Gift cards to redeem and buy\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/gift-cards/\u0022,\u0022text\u0022:\u0022Gift cards\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[6].link_cta18\u0022}},{\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uberhealth.com/gb/en/\u0022,\u0022text\u0022:\u0022Uber Health\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[7].link_cta19\u0022}},{\u0022hideWithUScript\u0022:\u0022false\u0022,\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/advertising/\u0022,\u0022text\u0022:\u0022Uber Advertising\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[8].link_cta20\u0022}},{\u0022hideWithUScript\u0022:\u0022false\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://merchants.ubereats.com/gb/en/\u0022,\u0022text\u0022:\u0022Merchants\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group2.childNodes[9].link_cta21\u0022}}],\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Products\u0022}},\u0022group3\u0022:{\u0022childNodes\u0022:[{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/safety/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Safety\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group3.childNodes[0].link_cta22\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/about/sustainability/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Sustainability\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group3.childNodes[1].link_cta23\u0022}}],\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Global citizenship\u0022}},\u0022group4\u0022:{\u0022childNodes\u0022:[{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://rides.sng.link/Aw5zn/o42y?_dl=uber%253A%252F%252Freserve\u0026_smtype=3\u0026_forward_params=1\u0026_fallback_redirect=http%253A%252F%252Fm.uber.com%252Freserve\u0026pcn=ubercom-footer\u0026mvid=[marketing-visitor-id]\u0022,\u0022text\u0022:\u0022Reserve\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group4.childNodes[0].link_cta24\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/airports/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Airports\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group4.childNodes[1].link_cta25\u0022}},{\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/r/cities/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Cities\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_group4.childNodes[2].link_cta26\u0022}}],\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Travel\u0022}},\u0022instagram\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://instagram.com/uber/\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Instagram\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_instagram_cta27\u0022},\u0022legal\u0022:\u0022\u0022,\u0022linkLogo\u0022:{\u0022ariaLabel\u0022:\u0022Visit Uber's Help Centre\u0022,\u0022href\u0022:\u0022https://help.uber.com/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Visit Help Centre\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_linkLogo_cta28\u0022},\u0022linkedin\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.linkedin.com/company/1815218\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022LinkedIn\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_linkedin_cta29\u0022},\u0022logo\u0022:{\u0022icon\u0022:{\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022},\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/gb/en/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Uber\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_logo.link_cta30\u0022}},\u0022privacy\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/legal/document/?name=privacy-notice\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Privacy\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_privacy_cta31\u0022},\u0022terms\u0022:{\u0022ariaLabel\u0022:\u0022Terms and Conditions\u0022,\u0022href\u0022:\u0022https://www.uber.com/legal/document/?name=general-terms-of-use\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Terms\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_terms_cta32\u0022},\u0022twitter\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://twitter.com/uber\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022Twitter\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_twitter_cta33\u0022},\u0022youtube\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.youtube.com/channel/UCgnxoUwDmmyzeigmmcf0hZA\u0022,\u0022openInNewTab\u0022:true,\u0022text\u0022:\u0022YouTube\u0022,\u0022data-tracking-name\u0022:\u0022_00cdbbb9-7ef2-4465-9486-c208a836b0f5_youtube_cta34\u0022}},\u0022blockContentID\u0022:\u002200cdbbb9-7ef2-4465-9486-c208a836b0f5\u0022}}],\u0022cosData\u0022:null,\u0022error\u0022:\u0022\u0022,\u0022hreflang\u0022:[{\u0022href\u0022:\u0022https://www.uber.com/be/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-be\u0022},{\u0022href\u0022:\u0022https://www.uber.com/jp/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-jp\u0022},{\u0022href\u0022:\u0022https://www.uber.com/mt/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-mt\u0022},{\u0022href\u0022:\u0022https://www.uber.com/pe/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-pe\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ug/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ug\u0022},{\u0022href\u0022:\u0022https://www.uber.com/lb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-lb\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ua/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ua\u0022},{\u0022href\u0022:\u0022https://www.uber.com/jm/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-jm\u0022},{\u0022href\u0022:\u0022https://www.uber.com/tw/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-tw\u0022},{\u0022href\u0022:\u0022https://www.uber.com/pt/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-pt\u0022},{\u0022href\u0022:\u0022https://www.uber.com/gh/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-gh\u0022},{\u0022href\u0022:\u0022https://www.uber.com/rs/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-rs\u0022},{\u0022href\u0022:\u0022https://www.uber.com/nz/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-nz\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ma/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ma\u0022},{\u0022href\u0022:\u0022https://www.uber.com/hn/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-hn\u0022},{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-gb\u0022},{\u0022href\u0022:\u0022https://www.uber.com/dk/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-dk\u0022},{\u0022href\u0022:\u0022https://www.uber.com/se/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-se\u0022},{\u0022href\u0022:\u0022https://www.uber.com/uy/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-uy\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ke/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ke\u0022},{\u0022href\u0022:\u0022https://www.uber.com/us/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-us\u0022},{\u0022href\u0022:\u0022https://www.uber.com/tz/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-tz\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ch/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ch\u0022},{\u0022href\u0022:\u0022https://www.uber.com/es/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-es\u0022},{\u0022href\u0022:\u0022https://www.uber.com/fi/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-fi\u0022},{\u0022href\u0022:\u0022https://www.uber.com/si/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-si\u0022},{\u0022href\u0022:\u0022https://www.uber.com/fr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-fr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/cr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-cr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/in/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-in\u0022},{\u0022href\u0022:\u0022https://www.uber.com/de/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-de\u0022},{\u0022href\u0022:\u0022https://www.uber.com/no/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-no\u0022},{\u0022href\u0022:\u0022https://www.uber.com/nl/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-nl\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ci/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ci\u0022},{\u0022href\u0022:\u0022https://www.uber.com/kw/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-kw\u0022},{\u0022href\u0022:\u0022https://www.uber.com/iq/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-iq\u0022},{\u0022href\u0022:\u0022https://www.uber.com/sa/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-sa\u0022},{\u0022href\u0022:\u0022https://www.uber.com/do/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-do\u0022},{\u0022href\u0022:\u0022https://www.uber.com/cl/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-cl\u0022},{\u0022href\u0022:\u0022https://www.uber.com/at/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-at\u0022},{\u0022href\u0022:\u0022https://www.uber.com/co/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-co\u0022},{\u0022href\u0022:\u0022https://www.uber.com/bg/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-bg\u0022},{\u0022href\u0022:\u0022https://www.uber.com/bd/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-bd\u0022},{\u0022href\u0022:\u0022https://www.uber.com/hr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-hr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/sv/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-sv\u0022},{\u0022href\u0022:\u0022https://www.uber.com/pa/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-pa\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ae/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ae\u0022},{\u0022href\u0022:\u0022https://www.uber.com/tr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-tr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/lk/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-lk\u0022},{\u0022href\u0022:\u0022https://www.uber.com/lt/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-lt\u0022},{\u0022href\u0022:\u0022https://www.uber.com/hu/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-hu\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ie/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ie\u0022},{\u0022href\u0022:\u0022https://www.uber.com/br/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-br\u0022},{\u0022href\u0022:\u0022https://www.uber.com/mx/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-mx\u0022},{\u0022href\u0022:\u0022https://www.uber.com/lu/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-lu\u0022},{\u0022href\u0022:\u0022https://www.uber.com/sk/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-sk\u0022},{\u0022href\u0022:\u0022https://www.uber.com/kr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-kr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/cz/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-cz\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ca/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ca\u0022},{\u0022href\u0022:\u0022https://www.uber.com/pl/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-pl\u0022},{\u0022href\u0022:\u0022https://www.uber.com/bh/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-bh\u0022},{\u0022href\u0022:\u0022https://www.uber.com/it/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-it\u0022},{\u0022href\u0022:\u0022https://www.uber.com/au/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-au\u0022},{\u0022href\u0022:\u0022https://www.uber.com/gt/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-gt\u0022},{\u0022href\u0022:\u0022https://www.uber.com/il/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-il\u0022},{\u0022href\u0022:\u0022https://www.uber.com/jo/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-jo\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ro/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ro\u0022},{\u0022href\u0022:\u0022https://www.uber.com/eg/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-eg\u0022},{\u0022href\u0022:\u0022https://www.uber.com/za/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-za\u0022},{\u0022href\u0022:\u0022https://www.uber.com/gr/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-gr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/py/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-py\u0022},{\u0022href\u0022:\u0022https://www.uber.com/pk/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-pk\u0022},{\u0022href\u0022:\u0022https://www.uber.com/qa/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-qa\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ng/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ng\u0022},{\u0022href\u0022:\u0022https://www.uber.com/hk/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-hk\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ec/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ec\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ee/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-ee\u0022},{\u0022href\u0022:\u0022https://www.uber.com/mo/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022hreflang\u0022:\u0022en-mo\u0022}],\u0022isLoading\u0022:false,\u0022page\u0022:{\u0022isLive\u0022:true,\u0022publishedAt\u0022:\u00222023-11-22T08:00:00Z\u0022,\u0022updatedAt\u0022:\u00222026-04-01T00:02:50.896493Z\u0022},\u0022seo\u0022:{\u0022canonical\u0022:\u0022https://www.uber.com/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022description\u0022:\u0022Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we're bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber's service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.\u0022,\u0022googlePlayAppID\u0022:\u0022com.ubercab\u0022,\u0022iPadAppID\u0022:\u0022368677368\u0022,\u0022iPhoneAppID\u0022:\u0022368677368\u0022,\u0022noIndex\u0022:false,\u0022ogDescription\u0022:\u0022Uber has thousands of microservices that serve its ~130M monthly customers such as riders, eaters and earners. The traffic from these customers leads to millions of requests per second (i.e., RPS) aggregated across our services, both directly from online traffic (e.g., a user pressing a button in the app), but also indirectly from offline traffic (e.g., a batch job that does aggregation over trips). With that complexity, we're bound to have cases where one or more services are overloaded, due to traffic spikes (e.g., a too-aggressive batch job) or slowness (e.g., a database gets slow). To mitigate these overload situations, it is vital to do graceful degradation, where we shed lower-priority requests (e.g., batch jobs) before any high-priority requests (e.g., online customer requests). Our goal is to ensure a good user experience, even when parts of our backend are having load issues. Given Uber's service footprint, any solution for graceful degradation also has to be automatic and require no configuration, because even if we require just a single configuration value per service, it will quickly be expensive in engineering hours, given the vast number of services we operate and how often such values tend to be outdated.\u0022,\u0022ogImageURL\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/af951005-c1a0-5a02-891c-463ad08d7577.jpg\u0022,\u0022ogSiteName\u0022:\u0022Uber\u0022,\u0022ogTitle\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022ogType\u0022:\u0022website\u0022,\u0022ogURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022twitterCard\u0022:\u0022summary\u0022,\u0022twitterSite\u0022:\u0022@Uber\u0022},\u0022template\u0022:{\u0022autoLinkingEnabled\u0022:false,\u0022createdAt\u0022:\u00222026-03-29T17:25:51.962Z\u0022,\u0022id\u0022:\u00227f81accf-da1c-40e7-b006-91ce261bf011\u0022,\u0022isCountryVariant\u0022:true,\u0022isDynamicTemplate\u0022:false,\u0022name\u0022:\u0022Cinnamon: Using Century Old Tech to Build a Mean Load Shedder\u0022,\u0022namespace\u0022:\u0022blog\u0022,\u0022pageElements\u0022:[{\u0022louvreBlock\u0022:{\u0022blockID\u0022:\u0022s_n_page_9_b_4_b_a.46435f9ef8c646ddb7225d5a12f97103\u0022},\u0022type\u0022:\u0022LOUVRE_BLOCK\u0022},{\u0022louvreBlock\u0022:{\u0022blockID\u0022:\u0022cinnamon-using-century-old-tech-to-build-a-mean-load-shedder.175668fe9d82424db544f4986f9ca00f\u0022},\u0022type\u0022:\u0022LOUVRE_BLOCK\u0022},{\u0022louvreBlock\u0022:{\u0022blockID\u0022:\u0022cinnamon-using-century-old-tech-to-build-a-mean-load-shedder.04f4ba052ca1446895615a89850573a6\u0022},\u0022type\u0022:\u0022LOUVRE_BLOCK\u0022},{\u0022louvreBlock\u0022:{\u0022blockID\u0022:\u0022cinnamon-using-century-old-tech-to-build-a-mean-load-shedder.e8010cd2c2a7489aa1e981d7f2ea05f2\u0022},\u0022type\u0022:\u0022LOUVRE_BLOCK\u0022},{\u0022louvreBlock\u0022:{\u0022blockID\u0022:\u0022cinnamon-using-century-old-tech-to-build-a-mean-load-shedder.d4464375c52f4dc69ddb8a34d361242d\u0022},\u0022type\u0022:\u0022LOUVRE_BLOCK\u0022},{\u0022louvreBlock\u0022:{\u0022blockID\u0022:\u0022cinnamon-using-century-old-tech-to-build-a-mean-load-shedder.3e62aac2cb76408faf066b84e3b41759\u0022},\u0022type\u0022:\u0022LOUVRE_BLOCK\u0022},{\u0022louvreBlock\u0022:{\u0022blockID\u0022:\u0022s_n_page_4_9_4_a_1.65af07cdc047499b92da74f1c4fb0ea7\u0022},\u0022type\u0022:\u0022LOUVRE_BLOCK\u0022}],\u0022publishedTemplateVariables\u0022:\u0022\u0022,\u0022slug\u0022:\u0022cinnamon-using-century-old-tech-to-build-a-mean-load-shedder\u0022,\u0022slugIsVariable\u0022:false,\u0022supportedLocalesByCountry\u0022:{\u0022AE\u0022:[\u0022en\u0022],\u0022AT\u0022:[\u0022en\u0022],\u0022AU\u0022:[\u0022en-AU\u0022],\u0022BD\u0022:[\u0022en\u0022],\u0022BE\u0022:[\u0022en\u0022],\u0022BG\u0022:[\u0022en\u0022],\u0022BH\u0022:[\u0022en\u0022],\u0022BR\u0022:[\u0022en\u0022],\u0022CA\u0022:[\u0022en\u0022],\u0022CH\u0022:[\u0022en\u0022],\u0022CI\u0022:[\u0022en\u0022],\u0022CL\u0022:[\u0022en\u0022],\u0022CO\u0022:[\u0022en\u0022],\u0022CR\u0022:[\u0022en\u0022],\u0022CZ\u0022:[\u0022en\u0022],\u0022DE\u0022:[\u0022en\u0022],\u0022DK\u0022:[\u0022en\u0022],\u0022DO\u0022:[\u0022en\u0022],\u0022EC\u0022:[\u0022en\u0022],\u0022EE\u0022:[\u0022en\u0022],\u0022EG\u0022:[\u0022en\u0022],\u0022ES\u0022:[\u0022en\u0022],\u0022FI\u0022:[\u0022en\u0022],\u0022FR\u0022:[\u0022en\u0022],\u0022GB\u0022:[\u0022en-GB\u0022],\u0022GH\u0022:[\u0022en\u0022],\u0022GR\u0022:[\u0022en\u0022],\u0022GT\u0022:[\u0022en\u0022],\u0022HK\u0022:[\u0022en\u0022],\u0022HN\u0022:[\u0022en\u0022],\u0022HR\u0022:[\u0022en\u0022],\u0022HU\u0022:[\u0022en\u0022],\u0022IE\u0022:[\u0022en\u0022],\u0022IL\u0022:[\u0022en\u0022],\u0022IN\u0022:[\u0022en\u0022],\u0022IQ\u0022:[\u0022en\u0022],\u0022IT\u0022:[\u0022en\u0022],\u0022JM\u0022:[\u0022en\u0022],\u0022JO\u0022:[\u0022en\u0022],\u0022JP\u0022:[\u0022en\u0022],\u0022KE\u0022:[\u0022en\u0022],\u0022KR\u0022:[\u0022en\u0022],\u0022KW\u0022:[\u0022en\u0022],\u0022LB\u0022:[\u0022en\u0022],\u0022LK\u0022:[\u0022en\u0022],\u0022LT\u0022:[\u0022en\u0022],\u0022LU\u0022:[\u0022en\u0022],\u0022MA\u0022:[\u0022en\u0022],\u0022MO\u0022:[\u0022en\u0022],\u0022MT\u0022:[\u0022en\u0022],\u0022MX\u0022:[\u0022en\u0022],\u0022NG\u0022:[\u0022en\u0022],\u0022NL\u0022:[\u0022en\u0022],\u0022NO\u0022:[\u0022en\u0022],\u0022NZ\u0022:[\u0022en-AU\u0022],\u0022PA\u0022:[\u0022en\u0022],\u0022PE\u0022:[\u0022en\u0022],\u0022PK\u0022:[\u0022en\u0022],\u0022PL\u0022:[\u0022en\u0022],\u0022PT\u0022:[\u0022en\u0022],\u0022PY\u0022:[\u0022en\u0022],\u0022QA\u0022:[\u0022en\u0022],\u0022RO\u0022:[\u0022en\u0022],\u0022RS\u0022:[\u0022en\u0022],\u0022SA\u0022:[\u0022en\u0022],\u0022SE\u0022:[\u0022en\u0022],\u0022SI\u0022:[\u0022en\u0022],\u0022SK\u0022:[\u0022en\u0022],\u0022SV\u0022:[\u0022en\u0022],\u0022TR\u0022:[\u0022en\u0022],\u0022TW\u0022:[\u0022en\u0022],\u0022TZ\u0022:[\u0022en\u0022],\u0022UA\u0022:[\u0022en\u0022],\u0022UG\u0022:[\u0022en\u0022],\u0022US\u0022:[\u0022en\u0022],\u0022UY\u0022:[\u0022en\u0022],\u0022ZA\u0022:[\u0022en\u0022]},\u0022updatedAt\u0022:\u00222026-05-21T00:58:29.406Z\u0022,\u0022parentID\u0022:\u002209273526-f4e8-4ed4-a975-efc8555ecb81\u0022},\u0022xpBlockKeys\u0022:[]}}},\u0022routes\u0022:{\u0022host\u0022:\u0022www.uber.com\u0022,\u0022location\u0022:{\u0022pathname\u0022:\u0022/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022},\u0022namespace\u0022:\u0022blog\u0022,\u0022originalHost\u0022:\u0022www.uber.com\u0022,\u0022protocol\u0022:\u0022https\u0022},\u0022travel\u0022:{\u0022routeScheduleData\u0022:{\u0022departureOptionsError\u0022:null,\u0022departureOptionsStatus\u0022:\u0022PENDING\u0022,\u0022searchLocationError\u0022:null,\u0022searchLocationStatus\u0022:\u0022PENDING\u0022}}}
</script>
<script type="application/json" id="__APM__">
{\u0022pageLoadUuid\u0022:\u0022a934a329-1a8f-424c-974d-6c11ddbb8721\u0022,\u0022meta\u0022:{}}
</script>
<script id="__ROUTER_DATA__" type="application/json">
{\u0022page\u0022:\u0022/gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022,\u0022title\u0022:\u0022*\u0022,\u0022params\u0022:{\u0022*\u0022:\u0022gb/en/blog/cinnamon-using-century-old-tech-to-build-a-mean-load-shedder/\u0022},\u0022routePath\u0022:\u0022*\u0022,\u0022routeMatched\u0022:true}
</script>
<script type="application/json" id="__FUSION_PLUGIN_PARAMETERS__">
{\u0022parameters\u0022:{}}
</script>
</body></html>