Files
nexus/sreweekly/articles/350/06-reducing-logging-cost-by-two-orders-of-magnitude-using-clp.html
2026-09-12 17:23:01 +08:00

748 lines
508 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" dir="ltr"><head><meta charset="utf-8" /><title>Reducing Logging Cost by Two Orders of Magnitude using CLP</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-gYNML2fE9/vzptA4bCb0B/rwhkc3epLNlFTQ6a6ePFnuFjE/ULxpibcDHNEQCIUA' '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-SOSCxgXu6VbvoGyH0W+RXkZwo2dmtGeNAjcOikGzToast6PH33ax7qSMpfANMcFy' 'sha384-UEVxsZA2NIO/xwvozjA3fW/m5WercK7Sn1MViyQANbLZ5rx60lTKqeFM11hLZf5t' '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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89">.grecaptcha-badge { visibility: hidden !important; }</style><meta name="botdefense-enabled" content="false" /><script async nonce='fb3a24fa-108d-4b81-8f0e-8ed639b89d89' 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-WVmbv7sZ0WnO6IZ/VkhGlYZKtE7eUlzZn1ERrrVofA2uKYcSZg/aact0M8yNClpp">(function (){window["__uber_edge_cache_enabled__"] = true;})();</script><script nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-gYNML2fE9/vzptA4bCb0B/rwhkc3epLNlFTQ6a6ePFnuFjE/ULxpibcDHNEQCIUA">(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-12T05:31:44.858Z","page_generated_uuid":"f3209751-b4ff-4e7e-b7ab-975a24919aeb"});})();</script><script nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89">{"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:\u0022US\u0022,\u0022isoCodes\u0022:[\u0022CA\u0022]}" /><meta id="maps-fallback" content="uber" /><script nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-SOSCxgXu6VbvoGyH0W+RXkZwo2dmtGeNAjcOikGzToast6PH33ax7qSMpfANMcFy">(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"
);
})()})();</script><script nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-UEVxsZA2NIO/xwvozjA3fW/m5WercK7Sn1MViyQANbLZ5rx60lTKqeFM11hLZf5t">(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"
);
})()})();</script><meta data-rh="true" content="width=device-width, initial-scale=1" name="viewport"/><meta data-rh="true" content="Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber&#x27;s business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression." name="description"/><meta data-rh="true" content="Reducing Logging Cost by Two Orders of Magnitude using CLP" property="og:title"/><meta data-rh="true" content="Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber&#x27;s business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression." property="og:description"/><meta data-rh="true" content="website" property="og:type"/><meta data-rh="true" content="https://www.uber.com/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" property="og:url"/><meta data-rh="true" content="https://tb-static.uber.com/prod/udam-assets/5e9a8304-130a-5d4f-8a34-035f6fe86c6d.png" 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/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" rel="canonical"/><link data-rh="true" href="https://www.uber.com/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-de" rel="alternate"/><link data-rh="true" href="https://www.uber.com/hu/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-hu" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ci/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ci" rel="alternate"/><link data-rh="true" href="https://www.uber.com/jm/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-jm" rel="alternate"/><link data-rh="true" href="https://www.uber.com/gr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-gr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/sk/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-sk" rel="alternate"/><link data-rh="true" href="https://www.uber.com/tw/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-tw" rel="alternate"/><link data-rh="true" href="https://www.uber.com/co/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-co" rel="alternate"/><link data-rh="true" href="https://www.uber.com/pt/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-pt" rel="alternate"/><link data-rh="true" href="https://www.uber.com/bg/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-bg" rel="alternate"/><link data-rh="true" href="https://www.uber.com/be/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-be" rel="alternate"/><link data-rh="true" href="https://www.uber.com/at/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-at" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ie/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ie" rel="alternate"/><link data-rh="true" href="https://www.uber.com/dk/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-dk" rel="alternate"/><link data-rh="true" href="https://www.uber.com/au/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-au" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ro/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ro" rel="alternate"/><link data-rh="true" href="https://www.uber.com/pa/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-pa" rel="alternate"/><link data-rh="true" href="https://www.uber.com/iq/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-iq" rel="alternate"/><link data-rh="true" href="https://www.uber.com/us/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-us" rel="alternate"/><link data-rh="true" href="https://www.uber.com/tz/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-tz" rel="alternate"/><link data-rh="true" href="https://www.uber.com/mt/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-mt" rel="alternate"/><link data-rh="true" href="https://www.uber.com/za/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-za" rel="alternate"/><link data-rh="true" href="https://www.uber.com/uy/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-uy" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ae/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ae" rel="alternate"/><link data-rh="true" href="https://www.uber.com/lu/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-lu" rel="alternate"/><link data-rh="true" href="https://www.uber.com/se/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-se" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ca/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ca" rel="alternate"/><link data-rh="true" href="https://www.uber.com/bh/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-bh" rel="alternate"/><link data-rh="true" href="https://www.uber.com/tr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-tr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/py/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-py" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ch/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ch" rel="alternate"/><link data-rh="true" href="https://www.uber.com/jp/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-jp" rel="alternate"/><link data-rh="true" href="https://www.uber.com/cl/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-cl" rel="alternate"/><link data-rh="true" href="https://www.uber.com/eg/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-eg" rel="alternate"/><link data-rh="true" href="https://www.uber.com/lk/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-lk" rel="alternate"/><link data-rh="true" href="https://www.uber.com/do/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-do" rel="alternate"/><link data-rh="true" href="https://www.uber.com/mx/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-mx" rel="alternate"/><link data-rh="true" href="https://www.uber.com/sv/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-sv" rel="alternate"/><link data-rh="true" href="https://www.uber.com/cr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-cr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/es/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-es" rel="alternate"/><link data-rh="true" href="https://www.uber.com/pl/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-pl" rel="alternate"/><link data-rh="true" href="https://www.uber.com/hr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-hr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ke/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ke" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ng/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ng" rel="alternate"/><link data-rh="true" href="https://www.uber.com/jo/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-jo" rel="alternate"/><link data-rh="true" href="https://www.uber.com/fr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-fr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/hn/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-hn" rel="alternate"/><link data-rh="true" href="https://www.uber.com/fi/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-fi" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ec/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ec" rel="alternate"/><link data-rh="true" href="https://www.uber.com/gb/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-gb" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ug/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ug" rel="alternate"/><link data-rh="true" href="https://www.uber.com/bd/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-bd" rel="alternate"/><link data-rh="true" href="https://www.uber.com/no/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-no" rel="alternate"/><link data-rh="true" href="https://www.uber.com/pk/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-pk" rel="alternate"/><link data-rh="true" href="https://www.uber.com/lt/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-lt" rel="alternate"/><link data-rh="true" href="https://www.uber.com/qa/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-qa" rel="alternate"/><link data-rh="true" href="https://www.uber.com/pe/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-pe" rel="alternate"/><link data-rh="true" href="https://www.uber.com/in/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-in" rel="alternate"/><link data-rh="true" href="https://www.uber.com/cz/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-cz" rel="alternate"/><link data-rh="true" href="https://www.uber.com/sa/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-sa" rel="alternate"/><link data-rh="true" href="https://www.uber.com/br/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-br" rel="alternate"/><link data-rh="true" href="https://www.uber.com/si/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-si" rel="alternate"/><link data-rh="true" href="https://www.uber.com/hk/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-hk" rel="alternate"/><link data-rh="true" href="https://www.uber.com/kr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-kr" rel="alternate"/><link data-rh="true" href="https://www.uber.com/kw/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-kw" rel="alternate"/><link data-rh="true" href="https://www.uber.com/gt/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-gt" rel="alternate"/><link data-rh="true" href="https://www.uber.com/nl/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-nl" rel="alternate"/><link data-rh="true" href="https://www.uber.com/rs/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-rs" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ma/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ma" rel="alternate"/><link data-rh="true" href="https://www.uber.com/il/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-il" rel="alternate"/><link data-rh="true" href="https://www.uber.com/nz/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-nz" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ua/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ua" rel="alternate"/><link data-rh="true" href="https://www.uber.com/ee/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-ee" rel="alternate"/><link data-rh="true" href="https://www.uber.com/lb/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-lb" rel="alternate"/><link data-rh="true" href="https://www.uber.com/it/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-it" rel="alternate"/><link data-rh="true" href="https://www.uber.com/gh/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" hreflang="en-gh" rel="alternate"/><link data-rh="true" href="https://www.uber.com/mo/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" 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 uPqSX kZqllj ekKYDj jQOKxw cxExNw cKXFfR eTbQd fWpqhZ 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-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-fWpqhZ{aspect-ratio:auto 2160/1080;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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-nl5Zdd+Aou2VVqG026bDA21pyNJVm46/TZ6Dw7PTekdlgsbdE2IRk0SKV1VVA0X8" /><script nomodule nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-yODEj38Jhf/ZocCu8nzFbPqj3y5NCrmBFdLYhShumH2iki2oldeZgP2vQRTKy7Yi" as="script"/><link rel="modulepreload" href="/_static/client-vendor-673c886a6b0b9772.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-1Mhgkz8ySzKeD3DiCCcc0jQWYKoOyEXCML5u/YpWbmxcixU1+nSuGohSzcxrwH7Q" as="script"/><link rel="preload" href="/_static/client-main-styles-f476fd9156cbdd17.css" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-nl5Zdd+Aou2VVqG026bDA21pyNJVm46/TZ6Dw7PTekdlgsbdE2IRk0SKV1VVA0X8" as="style"/><link rel="modulepreload" href="/_static/client-2611-648968cf7df1e1c9.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-aCt18a0TdA9HKl6ISsUiY+JOd8SYeahBrXDFAn8peH4DyLeK3F/973UazqIlS3vy" as="script"/><link rel="modulepreload" href="/_static/client-9438-69ee1859c7af99a9.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-DqJP7imhmujPP0qFg/3wq1DvxiRmPd/ERVOZe7qdqW6XE85Cf02UB2LvH32gTpnJ" as="script"/><link rel="modulepreload" href="/_static/client-7729-8e3d16c04fffc39c.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-CF9Nq1+lQmSFKExsyM5IJSdJaUXRtO6PcElAxqJV1BId9JTUaJtn+jiMDw3jFD6e" as="script"/><link rel="modulepreload" href="/_static/client-6005-fdbb77498216622e.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-nn6leunJfJlCfpte1PsN5J3z2btTynUujNd4DabvB9xRc3R4QYaeh+uf6ahgNPbx" as="script"/><link rel="modulepreload" href="/_static/client-4337-a2dd27e4449ab96b.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-FsJ5paHV3/SLo9nDt6eM+6prjCHS/yzjDRwT4Cr8E417i+FgMlq/+CavlmR6OuQa" as="script"/><link rel="modulepreload" href="/_static/client-8510-5970d2315c017441.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-436hnUAdBdASvRRoklM09qy2EwzU15EId9pxtDHRRGt26jdoPDvQS0nc6rOLp260" as="script"/><link rel="modulepreload" href="/_static/client-1422-9643608eb5e4968c.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-N/dclRLQt/cQT8eJFcSNTkH4dgPQTozbM+2gJSWkqP3c0dnEslB0aaGxDMZDUZzs" as="script"/><link rel="modulepreload" href="/_static/client-runtime-e0408fcc926409a1.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-ggSy2kD/B2SCdJ2VRbEa32wy08rFHnJHfjEXmiRaOIqgsqHAIbYs970KHMwyDlgL" as="script"/><script nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-yODEj38Jhf/ZocCu8nzFbPqj3y5NCrmBFdLYhShumH2iki2oldeZgP2vQRTKy7Yi" ></script><script type="module" src="/_static/client-vendor-673c886a6b0b9772.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-1Mhgkz8ySzKeD3DiCCcc0jQWYKoOyEXCML5u/YpWbmxcixU1+nSuGohSzcxrwH7Q" ></script><script type="module" src="/_static/client-2611-648968cf7df1e1c9.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-aCt18a0TdA9HKl6ISsUiY+JOd8SYeahBrXDFAn8peH4DyLeK3F/973UazqIlS3vy" ></script><script type="module" src="/_static/client-9438-69ee1859c7af99a9.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-DqJP7imhmujPP0qFg/3wq1DvxiRmPd/ERVOZe7qdqW6XE85Cf02UB2LvH32gTpnJ" ></script><script type="module" src="/_static/client-7729-8e3d16c04fffc39c.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-CF9Nq1+lQmSFKExsyM5IJSdJaUXRtO6PcElAxqJV1BId9JTUaJtn+jiMDw3jFD6e" ></script><script type="module" src="/_static/client-6005-fdbb77498216622e.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-nn6leunJfJlCfpte1PsN5J3z2btTynUujNd4DabvB9xRc3R4QYaeh+uf6ahgNPbx" ></script><script type="module" src="/_static/client-4337-a2dd27e4449ab96b.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-FsJ5paHV3/SLo9nDt6eM+6prjCHS/yzjDRwT4Cr8E417i+FgMlq/+CavlmR6OuQa" ></script><script type="module" src="/_static/client-8510-5970d2315c017441.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-436hnUAdBdASvRRoklM09qy2EwzU15EId9pxtDHRRGt26jdoPDvQS0nc6rOLp260" ></script><script type="module" src="/_static/client-1422-9643608eb5e4968c.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-N/dclRLQt/cQT8eJFcSNTkH4dgPQTozbM+2gJSWkqP3c0dnEslB0aaGxDMZDUZzs" ></script><script type="module" src="/_static/client-runtime-e0408fcc926409a1.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-ggSy2kD/B2SCdJ2VRbEa32wy08rFHnJHfjEXmiRaOIqgsqHAIbYs970KHMwyDlgL" ></script><script defer nomodule src="/_static/client-legacy-main-1411ebdccffd58c7.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-ux5DDUgR48oe8U9iJV2HcZegZTePz6nNTD5hI1YZYnpb4tO/oAfCIx1sEQD8AATa" ></script><script defer nomodule src="/_static/client-legacy-vendor-3de0c764dbe047ae.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-R6F2eqsaIYPf+jNHqCPgaeMX/C2vxXGeGc1+3wrRFyRHRCizsf5P6GSfBegNCXDq" ></script><script defer nomodule src="/_static/client-legacy-main-styles-f476fd9156cbdd17.css" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-nl5Zdd+Aou2VVqG026bDA21pyNJVm46/TZ6Dw7PTekdlgsbdE2IRk0SKV1VVA0X8" ></script><script defer nomodule src="/_static/client-legacy-legacy-1493-36e01a199ed6ce09.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-uVhFLrftFnJEWH0MUKUcYlPtXeMKIwLPy2V60QGTGrLm0TdiL/vGVY9Letp0oJkS" ></script><script defer nomodule src="/_static/client-legacy-legacy-7002-2208d0f4bbd06adc.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-XnoPOTSlqMZiTFg+LJtue/KZRJ9/8RbPooHRgaRZ8ZaILoMfJAsWdhDXiedu6cIm" ></script><script defer nomodule src="/_static/client-legacy-legacy-4631-fda9be9ef073ff64.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-dVfZ1x2r87CXrmb2rhLU6n21LhRMyFbA04mt3Z8sCiT78/Hup/7dvIwnT/C9TP3j" ></script><script defer nomodule src="/_static/client-legacy-legacy-974-35726d3f083c769c.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-do9qCnE6USc3evZD27waiuDjCfUMLcZs2C5MVJQM+H3T/ndTmfwt/Xib12uHtD0f" ></script><script defer nomodule src="/_static/client-legacy-legacy-8965-03aa78b3d550c0d3.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-fd1BMR0WqUziFN4tG4uvIXH3Xma1DlYhFDSpszS+8baBDBCy/kt737mD5LAcIOEl" ></script><script defer nomodule src="/_static/client-legacy-legacy-8769-c676f1170417999e.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-ZbZky+e3F5XTbqh7npLhiQxB9/PzkpTzEyNhhxFev61Yrk01RlljB7Bp1BKP3+8Y" ></script><script defer nomodule src="/_static/client-legacy-legacy-414-6d670581e7ca5db2.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" integrity="sha384-edP11upF2UCG9YqI3Q5Qwne/gkiiccpVlD5xFv+UJ3TFhDmihpd5bmv8k/9K2euf" ></script><script defer nomodule src="/_static/client-legacy-runtime-470ecea55e50f133.js" nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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 Uber Blog" data-testid="wcb3-navigation-logo" href="https://www.uber.com/de/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/de/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 consumers as they go anywhere and get anything.</p></a><a data-baseweb="link" href="https://www.uber.com/de/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/de/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 move</p></a><a data-baseweb="link" href="https://www.uber.com/de/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 beginning with Uber Eats</p></a><a data-baseweb="link" href="https://www.uber.com/de/en/blog/merchants/" target="_self" class="css-fwSNZL">Merchants<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Putting stores within reach of a world of customers</p></a><a data-baseweb="link" href="https://www.uber.com/de/en/blog/business/" target="_self" class="css-fwSNZL">Business<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Transforming the way companies move and feed their people</p></a><a data-baseweb="link" href="https://www.uber.com/de/en/blog/health/" target="_self" class="css-fwSNZL">Health<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Moving care forward together with medical providers</p></a><a data-baseweb="link" href="https://www.uber.com/de/en/blog/higher-education/" target="_self" class="css-fwSNZL">Higher Education<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Enhancing campus transportation</p></a><a data-baseweb="link" href="https://www.uber.com/de/en/blog/transit/" target="_self" class="css-fwSNZL">Transit<p data-baseweb="typo-paragraphsmall" class="css-ePDHQX css-lnLvkz">Expanding the reach of public transportation</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/de/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/de/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 globally</p></a><a data-baseweb="link" href="https://www.uber.com/de/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/de/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 get 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 Uber Blog" data-testid="wcb3-navigation-logo" href="https://www.uber.com/de/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 get 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="1342d99b-4592-4203-a084-7e626097a1f7" 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">September 29, 2022</div><div class="css-jOhJVe"><h1 class="css-bUfMjo">Reducing Logging Cost by Two Orders of Magnitude using CLP</h1></div><div class="css-kghkUG"><div class="css-drdOnW"><div class="css-uPqSX"><div class="css-kZqllj"><div aria-label="Devesh Agrawal" role="img" data-baseweb="avatar" class="css-jQOKxw"><img alt="Devesh Agrawal" class="css-cxExNw"/><div class="css-cKXFfR">DA</div></div><div class="css-ekKYDj"><div data-baseweb="typo-labelmedium" class="css-eTbQd">Devesh Agrawal</div></div></div></div><div class="css-uPqSX"><div class="css-kZqllj"><div aria-label="Jack (Yu) Luo" role="img" data-baseweb="avatar" class="css-jQOKxw"><img alt="Jack (Yu) Luo" class="css-cxExNw"/><div class="css-cKXFfR">J(</div></div><div class="css-ekKYDj"><div data-baseweb="typo-labelmedium" class="css-eTbQd">Jack (Yu) Luo</div></div></div></div></div></div></div><div class="css-jOhJVe" data-testid="hero-image-media"><div class="css-fWpqhZ"><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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81ZTlhODMwNC0xMzBhLTVkNGYtOGEzNC0wMzVmNmZlODZjNmQucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=2304/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81ZTlhODMwNC0xMzBhLTVkNGYtOGEzNC0wMzVmNmZlODZjNmQucG5n 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81ZTlhODMwNC0xMzBhLTVkNGYtOGEzNC0wMzVmNmZlODZjNmQucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=2144/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81ZTlhODMwNC0xMzBhLTVkNGYtOGEzNC0wMzVmNmZlODZjNmQucG5n 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81ZTlhODMwNC0xMzBhLTVkNGYtOGEzNC0wMzVmNmZlODZjNmQucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1104/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81ZTlhODMwNC0xMzBhLTVkNGYtOGEzNC0wMzVmNmZlODZjNmQucG5n 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=552/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy81ZTlhODMwNC0xMzBhLTVkNGYtOGEzNC0wMzVmNmZlODZjNmQucG5n" alt="My project (1)" 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="0771836c-13a8-4804-92ae-0d849f616baf" 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><p class="rich-paragraph"><em class="rich-italic">Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber’s business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated </em><a class="rich-link" href="https://github.com/y-scope/clp" rel="noreferrer noopener" target="_blank"><em class="rich-italic">CLP</em></a><em class="rich-italic"> into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.</em></p></div></body><body><div><p class="rich-paragraph">At Uber, we rely on making data-driven decisions at every level. For this, we have built a large-scale big data platform that runs over 250,000 Spark analytics jobs per day, where each job could consist of hundreds of thousands of executors, processing over a hundred petabytes of analytical data. In addition, the big data platform generates a large amount of log data, and the rapid growth of Uber’s business has led to furious growth of these logs. On a busy day, our Spark cluster alone can generate up to 200TB of logs (at the default INFO verbosity level). </p></div></body><body><div><p class="rich-paragraph">These logs are critical to both the platform engineers and data scientists using Spark. Analyzing logs can be used to improve the quality of applications, troubleshoot failures or slowdowns, analyze trends, monitor anomalies, and so on. Many of these analyses require logs collected over a long period of time. For instance, when Spark jobs fail or stall, our on-call engineers may abruptly restart them to quickly mitigate operational issues, but they need older log data to identify the root cause postmortem. Other users want to compare log data week by week to identify anomalies and identify trends. Data scientists want to examine old Spark logs to examine and improve the quality of their machine learning applications. As a result, our users would frequently ask our infrastructure team to increase the log retention period from three days (the period at the time) to at least a month.</p></div></body><body><div><p class="rich-paragraph">However, if we were to increase the retention period to a month, just our HDFS storage costs would reach millions of dollars per year. Moreover, the scale of our logs prevents existing tools from managing the logs cost effectively. For example, Elasticsearch incurs prohibitive operational and hardware costs (among other challenges) in scaling to Uber’s logging workload, so much so that we were forced to migrate away from it. For our non-Spark logs, we currently <a class="rich-link" href="https://www.uber.com/de/en/blog/logging/" rel="noreferrer noopener" target="_blank">ingest them into ClickHouse</a>, but ClickHouse is more suitable for structured logs (our Spark logs are mostly unstructured whereas our non-Spark logs are mostly structured, i.e., JSON). In addition, we are concerned about storage costs: one month worth of Spark logs would more than double the current size of data stored in ClickHouse for all the other services combined.</p></div></body><body><div><p class="rich-paragraph">Unfortunately, as our log size continued to grow, things got worse: our SSDs started to burn out prematurely. Log files are typically written a few messages at a time, spread out over the duration of the job. On our memory-constrained systems, this causes many small writes over a long period of time, which in turn causes SSD write-amplification. As a mitigation, we <strong class="rich-bold"><em class="rich-italic">reduced</em></strong> the logging level from INFO to WARN, but this is contrary to what our users want!</p></div></body><body><div><p class="rich-paragraph">For a long-term solution, we decided to explore compression within the logging library (to reduce writes to the SSD). We found <a class="rich-link" href="https://github.com/y-scope/clp/" rel="noreferrer noopener" target="_blank">CLP (Compressed Log Processor)</a>, a tool with unprecedented compression (2x of general-purpose compressors) while preserving the ability to search the logs without full decompression. CLP required some customization since it was designed to compress batches of files at a time, whereas our logging library writes a single log file at a time. Specifically, we split CLP’s algorithm into two phases: Phase 1 is suitable for compressing a single log file at a time while achieving modest compression; Phase 2 aggregates these compressed files into CLP’s final format.</p></div></body><body><div><p class="rich-paragraph">After implementing Phase 1, we were surprised to see we had achieved a compression ratio of 169x. Without compression, storing the logs for three days used to cost us $180,000/year and a one month retention period would cost us a whopping 1.8 million/year. With just Phase 1, this cost is reduced to $10,000/year for a one month retention period. But more importantly, it now enables us to retain the logs as our engineers requested: we were able to restore the logging level from WARN back to INFO, increase our retention period by 10x, and still reduce our storage costs by 17x. We are still implementing Phase 2, but our preliminary results show it will deliver even higher compression (2x) and storage savings, while enabling powerful search and analytics.</p></div></body><body><div><p class="rich-paragraph">The rest of this blog details why we chose CLP over other compressors, how we split CLP’s algorithm into two phases, how we integrated CLP as a Log4j appender, an interesting improvement we made for encoding floating-point numbers, the results of deploying Phase 1, and finally, what comes next.</p></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><hr class="wp-block-separator" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">Why Not Use a General-Purpose Compressor?</h1></div></body><body><div><p class="rich-paragraph">General purpose compressors are not ideal for our purposes for a few reasons. First, they do not exploit the unique characteristics of logs, resulting in a suboptimal compression ratio. Compared to other textual data, logs are much more repetitive. Consider the following example log message:</p></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-990857" decoding="async" height="101" loading="lazy" sizes="auto, (max-width: 1535px) 100vw, 1535px" src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=67/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80OTQ2YjJiOC1lNjQzLTUyMTctYTk1Zi02NTU2NjM1NzMzMDgucG5n" width="1535"></figure></div></body><body><div><p class="rich-paragraph">It consists of three components: a timestamp (underlined), three variable values (in blue and red), and the static text (the remainder) which is also known as the log type. Among them, the log type is static, so it never changes; in addition, some variable values are also highly repetitive, such as the task ID and container ID. However, the highly repetitive components are intertwined with other components. For example, messages of the same log type could be interleaved by logs of different log types. This limits Zstandard or Gzip’s ability to find repetition, because it can only identify repetitions within a sliding window. Even within the same log message, the log type is interleaved by variables. Zstandard or Gzip do not allow gaps in the repetitive pattern; therefore when a log type is interleaved by variable values, they can only identify the multiple substrings of the log type as repetitive. In the above example, say a subsequent log message has the same log type but different variable values, Zstandard will identify 4 repetitive substrings in the log type: “ INFO Task ”, “ assigned to container: [ContainerID:”, “], operation took ”, and “ seconds”  instead of a single log type. </p></div></body><body><div><p class="rich-paragraph">In addition, general purpose compressors are not designed with search in mind: searching the logs requires decompressing the entire compressed file. Most of the time, users would only like to examine a subset of logs that satisfy certain filters, such as a particular application ID, a particular host, or a search phrase. But filters can only be applied after decompressing the entire compressed log back to plain text.</p></div></body><body><div><p class="rich-paragraph">In contrast, CLP compresses the logs and allows search directly on the compressed logs. CLP parses the unstructured logs and turns them into a structured table, where each message is a row and the different components including the timestamp, log type, and variables, are different columns. CLP deduplicates those highly repetitive columns using dictionaries and only a dictionary index is stored in the table instead of the raw string. CLP finally compresses this table using Zstandard, but in a column-oriented manner, significantly increasing its capability to find duplication. As a result, CLP has an unprecedented compression ratio (significantly exceeding the capabilities of Gzip or Zstandard alone), while allowing users to search the compressed logs without decompression back to plain-text, as it’s enabled by using the dictionaries as indexes.</p></div></body><body><div><p class="rich-paragraph">Next, we briefly overview our logging architecture and the internals of CLP, before explaining how we integrated CLP into our architecture.</p></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><hr class="wp-block-separator" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">Logging Architecture for our Spark Cluster</h1></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-990839" decoding="async" height="627" loading="lazy" sizes="auto, (max-width: 814px) 100vw, 814px" src="https://tb-static.uber.com/prod/udam-assets/e93882a5-4d8b-55be-b9a0-ca5cf3b0c6b6.png" width="814"><figcaption class="rich-figure-caption"><em class="rich-italic">Figure 1: The logging architecture of our Spark cluster. While a job is in progress, its logs are written to the container host’s SSD. When a job completes, the YARN Node Manager uploads the logs to HDFS.</em></figcaption></figure></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><p class="rich-paragraph">Figure 1 shows the current logging architecture of our Spark cluster. We primarily run Spark jobs in containers using YARN as the resource manager. While a job is running, logs are first written to the locally attached SSD on each container host. When the job completes, we use <a class="rich-link" href="https://www.davidmcginnis.net/post/a-crash-course-in-yarn-log-aggregation" rel="noreferrer noopener" target="_blank">YARN’s log aggregation feature</a> to copy the logs from each host’s SSD to HDFS.</p></div></body><body><div><p class="rich-paragraph">Logs are primarily written using Log4j, a logging library used by Spark and many other big data platforms. Log4j allows developers to use custom logic to persist log messages, in the form of a Log4j appender. For instance, developers can configure Log4j to use a SocketAppender that will send log messages over the network to some endpoint. As we’ll see later, a Log4j appender is a convenient way for us to compress logs as they are generated, before they are written to disk.</p></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><hr class="wp-block-separator" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">Background of CLP</h1></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-990842" decoding="async" height="1406" loading="lazy" sizes="auto, (max-width: 2216px) 100vw, 2216px" src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=650/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hYjFkNGFjMi0zM2U0LTU3MzEtYTY2Yy1mZTE5YzQ4ZGY5YTUucG5n" width="2216"><figcaption class="rich-figure-caption"><em class="rich-italic">Figure 2: How a log message is compressed using CLP. </em></figcaption></figure></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><p class="rich-paragraph">Figure 2 shows how CLP compresses an example log message in four steps. In the first step, CLP deterministically parses the message into a timestamp, a list of variable values, and the log type. It further recognizes that some variable values like task ID and container ID are likely repetitive, whereas others, like floating-point numbers or integers are non-repetitive. The former are called dictionary variables because they will be stored in a dictionary whereas the latter are called non-dictionary variables. </p></div></body><body><div><p class="rich-paragraph">The next two steps convert the different string components into concise binary values. In step 2, CLP encodes the timestamp and non-dictionary variables. For timestamps, it encodes the delta in milliseconds (compared to the timestamp of the last message) using a variable-length encoding scheme, hence most timestamps only occupy one or two bytes. Floating-point numbers are encoded using our custom algorithm described below. In step 3, each repetitive variable is deduplicated using a dictionary. Similarly, the log type is also deduplicated using a separate (log type) dictionary.</p></div></body><body><div><p class="rich-paragraph">In the last step, CLP converts the log messages into a table of encoded messages consisting of three columns: the timestamp, a list of variable values (either the variable dictionary IDs or encoded non-dictionary values), and the log type ID. Once a number of log messages is buffered, each column is compressed (in column-oriented order) using Zstandard. The dictionaries are also compressed separately using Zstandard. </p></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><hr class="wp-block-separator" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">Integrating CLP into Uber’s Big Data Platform</h1></div></body><body><div><p class="rich-paragraph">Initially, we planned to implement all of CLP’s compression logic into the Log4j appender. However, we quickly realized we need a streaming compressor that uses a minimal amount of memory; this is because logs are generated in a streaming fashion and our container hosts are often under high memory pressure as Spark is a data-heavy platform. However, CLP’s full compression imposes a few issues. First, it requires buffering a large number of encoded log messages in memory before compression. Buffering is needed so that CLP can compress the encoded messages in columnar order. This buffer, together with the dictionary, also requires up to hundreds of megabytes of memory. Finally, CLP achieves its best compression ratio when aggregating logs from multiple nodes or JVMs (rather than each file individually), which is infeasible within a single appender.</p></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-990844" decoding="async" height="1676" loading="lazy" sizes="auto, (max-width: 1972px) 100vw, 1972px" src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=870/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8zZmM2MjJmOS0zMTQ4LTUwYzAtYjA1ZS04NjQ0MTk3N2I3ZDkucG5n" width="1972"><figcaption class="rich-figure-caption"><em class="rich-italic">Figure 3: Splitting CLP compression deployment into two phases in our deployment. </em></figcaption></figure></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><p class="rich-paragraph">Instead, we split CLP’s compression into two phases. Figure 3 shows this architecture. Only Phase 1 runs in the Log4j appender, and it performs lightweight, streaming compression. There is one Log4j appender running in each JVM, compressing the stream of log messages generated by the Spark application running inside that JVM before writing the compressed logs to disk. The appender only performs the first two steps of CLP’s compression (as shown in Figure 2), namely parsing and encoding. After parsing and encoding, a log message is converted into an intermediate representation (IR), which is sent directly to a Zstandard compression stream without being buffered. As a result, each appender outputs a stream of compressed IR, which will be stored on the SSD of each container host. Like before, the compressed IR will be uploaded to HDFS by YARN’s log aggregation feature. Afterwards, we use an offline dedicated process to aggregate multiple compressed IRs, and run the rest of CLP’s algorithm (steps 3 and 4 in Figure 2) to fully compress the logs into CLP’s compressed columns format.</p></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-990846" decoding="async" height="49" loading="lazy" src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=69/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80ZDEyMjM1Yi1lYjM1LTU5MzYtOGY3Ny04OWZlZmQ5MWYyMjYucG5n" width="791"><figcaption class="rich-figure-caption"><em class="rich-italic">Figure 4: IR format of the example log message. <h> represents the header. </h></em></figcaption></figure></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><p class="rich-paragraph">Figure 4 shows the IR format of the example log message that is designed for streaming compression. The IR consists of a list of <header><payload> pairs, where a payload is a component parsed from the log message. In Figure 4, the message consists of five components: the logtype, three variable values, and the timestamp delta (0xE3).</payload></header></p></div></body><body><div><p class="rich-paragraph">The header for dictionary variables and the log type typically consists of two bytes: one indicates the type of the payload (i.e., dictionary variable, log type, etc.), and the other records the length of the payload. We use a variable-length encoding for the length, so the length of most payloads only requires one byte. For timestamp deltas and non-dictionary variable values, their header uses one byte to encode both the type and length. For example, the timestamp delta could require either 1, 2, 4, or 8 bytes. Hence we have four different type values for timestamp deltas. Similarly, non-dictionary values like floating point numbers or integers could also have different lengths, and they are embedded in the type byte. A careful reader might notice that we actually do not need to embed the length of these encoded variables into the type: because these variables are already encoded, their length can be determined from their encoding (for example, the encoded timestamp already uses variable-length encoding). But doing this would complicate our parsing logic. For log type and dictionary variables, we cannot embed their lengths in the type byte because their length could have an infinite number of possibilities. </p></div></body><body><div><p class="rich-paragraph">To reduce the appender’s memory footprint and SSD write-amplification, we use a few optimizations. First, we do not need to allocate space for dictionaries in Phase 1 because dictionary deduplication is only done in Phase 2. We also do not buffer uncompressed logs: after parsing each log, we directly send the partially encoded message to the Zstandard streaming compressor. This minimizes our memory usage. We do, however, use a 4MB buffer for the compressed logs, so compressed logs are written to the SSD 4MB at a time (or if the log file is closed before 4MB is reached). 4MB is carefully chosen as it’s a multiple of all block sizes for commonly used SSDs. Hence our writes to the SSD will minimize write-amplification. A small 4MB buffer is highly effective: on average, a 4MB of compressed logs translates to 400MB+ of uncompressed logs for us, given CLP + Zstandard’s more than 100x compression ratio. </p></div></body><body><div><p class="rich-paragraph">Splitting CLP’s compression into two phases is also economical. The performance of CLP’s end-to-end compression logic (Figure 2) is bottlenecked by log parsing. We now distribute log parsing to each Log4j appender, leveraging the fact that the CPUs of the containers running Spark jobs are often underutilized. As a result, Phase 2’s compression can be significantly less CPU intensive given that it no longer needs to parse the logs.</p></div></body><body><div><p class="rich-paragraph">A few tools in the Hadoop/Spark ecosystem allow users to view a job’s logs. These tools expect the logs to be in plain-text format or in a special file-type (written by the <a class="rich-link" href="https://hadoop.apache.org/docs/r3.3.2/hadoop-yarn/hadoop-yarn-common/apidocs/" rel="noreferrer noopener" target="_blank">LogAggregationFileController</a> family of classes) that YARN uses to concatenate several logs together. Since our appender writes logs in a specialized format, we had to extend the tools so that they could also read our format. This was as simple as adding an if branch in the few places a log file is read—if the log file’s extension is CLP’s, then we transparently decompress the desired chunk of the log, otherwise we run the existing code to read the uncompressed log.</p></div></body><body><div><h3 class="rich-heading-h3">Why not use a socket appender to send the logs directly over the network, completely bypassing the SSD? </h3></div></body><body><div><p class="rich-paragraph">We considered this, but implementing CLP in the appender has a few noteworthy advantages. First, log ingestion services are costly to maintain and are frequently the scalability bottleneck for a log-storage solution. In addition, some tools in the Hadoop/Spark ecosystem rely on having the logs accessible from disk/HDFS rather than a log-storage service, so integration is less intrusive if we keep the logs stored on the filesystem.</p></div></body><body><div><h3 class="rich-heading-h3">Advantages over directly compressing the original log with Zstandard </h3></div></body><body><div><p class="rich-paragraph">First, recall that CLP-compressed logs are searchable–a user query will first be directed to dictionary<strong class="rich-bold"> </strong>searches, and only matching log messages will be decompressed. Additional metadata columns can be easily added to each encoded message to enable additional filtering, such as application ID, host name, etc. </p></div></body><body><div><p class="rich-paragraph">Even our appender’s compressed IR provides better filter/search capability compared to directly compressing with Zstandard. Although the IR lacks dictionaries, search still could skip components because the log message is already parsed. For example, if a user only wants to examine logs within a certain time period, we only need to examine the timestamp component, and skip the other components of the messages that are outside of the time range. Also, some existing search tools like grep cannot natively handle a log message that spans multiple lines (such as a stack trace in an error log): grep only returns a single matching line, instead of the complete multi-line message. But since our IR consists of parsed logs, a search can always return the entire message even when it spans multiple lines. </p></div></body><body><div><p class="rich-paragraph">CLP also achieves a much higher compression ratio compared to directly applying Zstandard or Gzip, due to its columnar-based storage format and concise encoding, both of which enable Zstandard to find significantly more duplications within its sliding window. The compression ratio of end-to-end CLP is 2.16x higher than Zstandard’s and 2.28x higher than Gzip on our Spark logs. Even our appender’s compressed IR, which is only Phase 1 of CLP’s end-to-end compression, achieves a compression ratio 5-8% better than directly applying Zstandard on the raw logs. This is because, by separating the highly repetitive log types and dictionary variables, Zstandard can find longer repetitive patterns. Recall that for the log type in the example log message, Zstandard will identify 4 repetitive substrings: ” INFO Task “, ” assigned to container: [ContainerID:”, “], operation took “, and ” seconds”. However, in our appender, Zstandard can identify the entire log type string as repetitive. In addition, our concise encoding of timestamps and non-dictionary variables, specifically floating-point numbers, also results in higher compression ratio. </p></div></body><body><div><p class="rich-paragraph">Next, we describe the custom floating-point number encoding we invented that increased the  encoding speed by up to 2-3x, while simultaneously improving compression ratio and representing more floating point values printed in the logs in a lossless manner. </p></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><hr class="wp-block-separator" data-wp-block-name="core/separator"></div></body><body><div><h2 class="rich-heading-h2">Custom Floating-Point Number Encoding</h2></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-990849" decoding="async" height="220" loading="lazy" sizes="auto, (max-width: 1274px) 100vw, 1274px" src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=177/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80MWI1YzNjZi00OTkyLTVhMjgtOGEwMi00NTUzNjFiNThhM2MucG5n" width="1274"><figcaption class="rich-figure-caption"><em class="rich-italic">Figure 5: Representation of 0.335 using our custom float encoding </em></figcaption></figure></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><figure class="rich-figure"><img alt="" class="wp-image-990852" decoding="async" height="161" loading="lazy" sizes="auto, (max-width: 1264px) 100vw, 1264px" src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=130/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8zYzE4Njg4My00OTEwLTViZmYtOWM2OS03ZDQxNjRjZjhlMGQucG5n" width="1264"><figcaption class="rich-figure-caption"><em class="rich-italic">Figure 6: IEEE-754 single-precision (32 bits) representation of 0.335</em></figcaption></figure></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><p class="rich-paragraph">In implementing CLP, we made one notable optimization: a custom float encoding. Recall that CLP directly encodes a floating point value, such as “0.335”, into a 32-bit value in the encoded message. Originally, CLP encoded floating point values using the IEEE-754 standard. However, the IEEE-754 standard is not ideal for log compression purposes for a few reasons. First, encoding/decoding IEEE-754 values from string is slow. In addition, IEEE-754’s format is not lossless. For example “2.3456789” cannot be accurately represented by the IEEE-754 32-bit standard. As a result, if we encode “2.3456789” as an IEEE-754 float and then decode it back to a string, the value would be modified to “2.345678<strong class="rich-bold">8</strong>”, where the last digit is modified. Similarly, values like “0.100” (trailing 0) and “00.01” (multiple leading zeros) cannot be encoded and decoded without storing the precision and number of digits separately; the original CLP stores these values in the log type, causing some log types to be duplicated if the precision of a variable differs between log messages. Our custom floating-point encoding overcomes these issues. Figure 5 shows our protocol, representing the floating point value 0.335 in 32 bits. It encodes the value with the following format (from MSB to LSB):</p></div></body><body><div><ul class="rich-list-ul"><li class="rich-list-item">1 bit (b31): Is negative</li><li class="rich-list-item">25 bits (b30-6): The value of the floating point number without the decimal point and without the sign, as an integer. For example, for 0.335, these 25 bits represent the value of 335.</li><li class="rich-list-item">3 bits (b5-3): The total number of printed digits, minus 1. Thus, it can represent a value with a total number of digits between [1, 8], mapped to the range [0, 7]. In the case of “0.335”, there are a total of 4 digits, so the value of these 3 bits is 3. We use three bits because a 25-bit number has at most 8 decimal digits (2^25 -1 = 33,554,431). </li><li class="rich-list-item">3 bits (b2-0): Offset of the decimal point, from the right, minus 1. For example, for 0.335, the offset of the decimal is 3. Note that we take the offset from the right instead of the left because a negative sign might “waste” a value if we do so from the left. For example, if we count from the left, then the offsets of the decimal are different for 0.335 and -0.335, but they’re the same when counting from the right.</li></ul></div></body><body><div><p class="rich-paragraph">Note that we need both the number of printed digits (b5-3) and offset of the decimal (b2-0), because there can be an arbitrary number of leading zeros. For example, “0.335”, “.335”, “000.335” all have the same integer values (b30-6) and decimal offset (b2-0); therefore we need b5-3 to differentiate them (where there are 4, 3, and 6 digits respectively).</p></div></body><body><div><p class="rich-paragraph">This representation can precisely represent any floating point value whose integer value ignoring the decimal point falls in the range [-(2^25-1), (2^25-1)]. Any value that cannot be precisely represented by this protocol will be treated as a dictionary variable, guaranteeing lossless decompression.</p></div></body><body><div><p class="rich-paragraph">Our custom encoding consistently achieves a 2-3x speedup compared to IEEE-754, when evaluated on the floating point values extracted from our Spark logs. This results in a non-trivial speedup for compression. Note that the encoding logic is run not only on floating-point values, but on any token that is a candidate floating-point number, i.e., those that consist of a number character and which aren’t integers (examples include “23:59:59” or “2.4.3-uber-159”). This is because without first running through the floating-point number encoding process, we can’t rule out that the token is not a floating point value. </p></div></body><body><div><p class="rich-paragraph">Interestingly, we also find that using our custom floating-point number encoding<strong class="rich-bold"> improves the compression ratio </strong>by 5.37% when applied to our Spark logs. As mentioned earlier, this is partly because, compared to IEEE-754’s format, our custom format avoids duplicating log types when only the precision of the floating point value differs. In addition, IEEE-754’s format could have higher entropy than our encoding. For instance, compare the encoding of 0.335 in IEEE-754 (Figure 6) versus our custom encoding (Figure 5). There is a lot more entropy (frequent switching between 0 and 1) in the IEEE-754 encoded value, leading to lower compression for IEEE-754 values. More importantly, a small difference between two floating-point values often leads to a large difference in the bit sequence when they are encoded in IEEE-754. For example, the lower 16 bits of IEEE-754 encoded value for “0.334” differ with “0.335”, even though their actual values only have small differences. Hence, it limits Zstandard’s ability to find repetitiveness between two floating point values. (In reality, floating-point values such as completion time in similar log types often have similar, but not identical, values.) In comparison, in our custom encoding, there is only a 1 bit difference between the encoded values of “0.334” and “0.335”.</p></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><hr class="wp-block-separator" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">Results So Far</h1></div></body><body><div><p class="rich-paragraph">We have deployed Phase 1 (i.e., the custom Log4j appender with our custom float encoding) across our entire Spark platform. We are currently working on deploying the Phase 2 compression and integrating CLP’s search capability into our analytics and observability platforms. </p></div></body><body><div><p class="rich-paragraph"><strong class="rich-bold">Result of Phase 1 compression: </strong>In a 30-day window, our entire Spark ecosystem generated 5.38PB of uncompressed INFO level unstructured logs yet our CLP appender compressed them to only 31.4TB, amounting to an unprecedented 169x compression ratio. Now with CLP, we have restored our log verbosity from WARN back to INFO, and we can afford to retain all the logs for 1 month (as requested by our engineers). </p></div></body><body><div><p class="rich-paragraph"><strong class="rich-bold">Preliminary result of Phase 2 compression</strong>: The above mentioned result is only the size of the compressed IR. We have tested a prototype of CLP’s complete compression (including both Phase 1 and 2) on a subset of our Spark logs, and CLP’s compression ratio is 2.16x higher than Zstandard’s ratio and 2.28x higher than Gzip’s ratio. This  is consistent with <a class="rich-link" href="https://www.usenix.org/system/files/osdi21-rodrigues.pdf" rel="noreferrer noopener" target="_blank">the results reported on other log datasets</a>. </p></div></body><body><div><p class="rich-paragraph"></p></div></body><body><div><hr class="wp-block-separator" data-wp-block-name="core/separator"></div></body><body><div><h1 class="rich-heading-h1">What’s Next?</h1></div></body><body><div><p class="rich-paragraph">Our CLP Log4j appender is a big improvement to our logging architecture, but it’s only the first step on our roadmap to integrate CLP into our log management pipeline. Our future plans include further improving the compression ratio by implementing the second phase of CLP’s compression, as well as integrating CLP into our observability platform to unleash its resource-efficient search capability. Specifically, our next steps include:</p></div></body><body><div><ol class="rich-list-ol"><li class="rich-list-item">Deploy CLP’s Phase 2 compression. This will further reduce our storage costs by more than 2x.</li><li class="rich-list-item">Store the compressed logs using a columnar storage format such as Parquet, potentially integrating with Presto. This will allow us to explore CLP’s promise for search without decompression to plain-text, using SQL queries which users are already familiar with, unlocking interactive analytical use-cases on large scales of log data that were impossible without CLP.</li><li class="rich-list-item">Integrate CLP into our observability platform as the storage and search engine for large-scale unstructured logs, enabling a rich set of features such as search &amp; analytics, SQL queries, alerts, and visualization.</li></ol></div></body></div></div></div></div></div></div></section></div></div><div data-block-content-id="7276fbc6-c3fd-43b3-bc3c-4addf192b036" 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="/de/en/blog/engineering/data/"><span data-baseweb="tag" class="css-jgYIWw"><span title="Data" class="css-jAylDS">Data</span></span></a></div></div></div></div></div></div></section></div></div><div data-block-content-id="dd8e34d6-e507-40e8-adf7-e9f424702fc4" 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="Devesh Agrawal" role="img" data-baseweb="avatar" class="css-iclDxs"><img alt="Devesh Agrawal" class="css-eUNfLQ"/><div class="css-cKXFfR">DA</div></div><div class="css-lpcwSG"><div class="css-czUDWs"><p data-baseweb="typo-paragraphlarge" class="css-eoiIol">Devesh Agrawal</p><p data-baseweb="typo-paragraphsmall" class="css-kVLeBt"></p></div><p data-baseweb="typo-paragraphsmall" class="css-gLZtvz">Devesh Agarwal formerly managed the Presto and Spark teams at Uber. He authored Presto Pinot connector, and lead development of the ultra low latency fork of Presto used by many online services at Uber.</p></div></div><div class="css-cCDVuf"><div aria-label="Jack (Yu) Luo" role="img" data-baseweb="avatar" class="css-iclDxs"><img alt="Jack (Yu) Luo" class="css-eUNfLQ"/><div class="css-cKXFfR">J(</div></div><div class="css-lpcwSG"><div class="css-czUDWs"><p data-baseweb="typo-paragraphlarge" class="css-eoiIol">Jack (Yu) Luo</p><p data-baseweb="typo-paragraphsmall" class="css-kVLeBt"></p></div><p data-baseweb="typo-paragraphsmall" class="css-gLZtvz">Jack Luo is an Uber engineer who works alongside Uber’s Spark, YARN, HDFS, and observability teams to improve logging, observability, and analytics infrastructure. He is also one of the authors and core developers of the CLP system during his PhD research at University of Toronto.</p></div></div></div></div></div></div></div></div></section></div></div><div data-block-content-id="9104187f-9dc3-41c1-8f92-35146853d342" 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83MjllYmU3ZS0xMDIxLTQ3YjctYjBmNC03ZjMzZTI1NzUzZDAuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83MjllYmU3ZS0xMDIxLTQ3YjctYjBmNC03ZjMzZTI1NzUzZDAuanBlZw== 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83MjllYmU3ZS0xMDIxLTQ3YjctYjBmNC03ZjMzZTI1NzUzZDAuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83MjllYmU3ZS0xMDIxLTQ3YjctYjBmNC03ZjMzZTI1NzUzZDAuanBlZw== 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83MjllYmU3ZS0xMDIxLTQ3YjctYjBmNC03ZjMzZTI1NzUzZDAuanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83MjllYmU3ZS0xMDIxLTQ3YjctYjBmNC03ZjMzZTI1NzUzZDAuanBlZw== 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83MjllYmU3ZS0xMDIxLTQ3YjctYjBmNC03ZjMzZTI1NzUzZDAuanBlZw==" 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="Data" class="css-bZnCM">Data</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/de/en/blog/next-gen-restaurant-recommendation/">Next-Gen Restaurant Recommendation with Generative Modeling and Real-Time Features</a></div><div class="css-bGyOjB">April 16, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/de/en/blog/next-gen-restaurant-recommendation/" 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yYmQ4MmY1Yy1kMjRhLTU2YzMtYmU3OS0wY2FiMzIxOGRhMmUucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yYmQ4MmY1Yy1kMjRhLTU2YzMtYmU3OS0wY2FiMzIxOGRhMmUucG5n 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yYmQ4MmY1Yy1kMjRhLTU2YzMtYmU3OS0wY2FiMzIxOGRhMmUucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yYmQ4MmY1Yy1kMjRhLTU2YzMtYmU3OS0wY2FiMzIxOGRhMmUucG5n 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yYmQ4MmY1Yy1kMjRhLTU2YzMtYmU3OS0wY2FiMzIxOGRhMmUucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yYmQ4MmY1Yy1kMjRhLTU2YzMtYmU3OS0wY2FiMzIxOGRhMmUucG5n 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8yYmQ4MmY1Yy1kMjRhLTU2YzMtYmU3OS0wY2FiMzIxOGRhMmUucG5n" 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="Data" class="css-bZnCM">Data</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/de/en/blog/evolution-and-scale-of-ubers-delivery-search-platform/">Evolution and Scale of Uber’s Delivery Search Platform</a></div><div class="css-bGyOjB">April 14, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/de/en/blog/evolution-and-scale-of-ubers-delivery-search-platform/" 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9mMTA2MzQxMy1hNDNjLTQ3NzEtYWQ4My1kNmZhYzllODhjYTYucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9mMTA2MzQxMy1hNDNjLTQ3NzEtYWQ4My1kNmZhYzllODhjYTYucG5n 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9mMTA2MzQxMy1hNDNjLTQ3NzEtYWQ4My1kNmZhYzllODhjYTYucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9mMTA2MzQxMy1hNDNjLTQ3NzEtYWQ4My1kNmZhYzllODhjYTYucG5n 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9mMTA2MzQxMy1hNDNjLTQ3NzEtYWQ4My1kNmZhYzllODhjYTYucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9mMTA2MzQxMy1hNDNjLTQ3NzEtYWQ4My1kNmZhYzllODhjYTYucG5n 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9mMTA2MzQxMy1hNDNjLTQ3NzEtYWQ4My1kNmZhYzllODhjYTYucG5n" 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="Data" class="css-bZnCM">Data</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/de/en/blog/scaling-responsible-ai/">Under the Hood: Scaling Responsible AI at Uber</a></div><div class="css-bGyOjB">April 13, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/de/en/blog/scaling-responsible-ai/" 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iZTNiZWEyOC0wMGQyLTQyZGYtOWNjMC1hOWY1N2ViNTNiNjguanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iZTNiZWEyOC0wMGQyLTQyZGYtOWNjMC1hOWY1N2ViNTNiNjguanBlZw== 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iZTNiZWEyOC0wMGQyLTQyZGYtOWNjMC1hOWY1N2ViNTNiNjguanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iZTNiZWEyOC0wMGQyLTQyZGYtOWNjMC1hOWY1N2ViNTNiNjguanBlZw== 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iZTNiZWEyOC0wMGQyLTQyZGYtOWNjMC1hOWY1N2ViNTNiNjguanBlZw==, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iZTNiZWEyOC0wMGQyLTQyZGYtOWNjMC1hOWY1N2ViNTNiNjguanBlZw== 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9iZTNiZWEyOC0wMGQyLTQyZGYtOWNjMC1hOWY1N2ViNTNiNjguanBlZw==" 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="Data" class="css-bZnCM">Data</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/de/en/blog/accelerating-deep-learning/">Accelerating Deep Learning: How Uber Optimized Petastorm for High-Throughput and Reproducible GPU Training</a></div><div class="css-bGyOjB">April 9, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/de/en/blog/accelerating-deep-learning/" 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8xZDU1ODE5YS1mOWNlLTVkZjgtOGZiNy04YTgwZDk1YmZkZTMucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8xZDU1ODE5YS1mOWNlLTVkZjgtOGZiNy04YTgwZDk1YmZkZTMucG5n 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8xZDU1ODE5YS1mOWNlLTVkZjgtOGZiNy04YTgwZDk1YmZkZTMucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8xZDU1ODE5YS1mOWNlLTVkZjgtOGZiNy04YTgwZDk1YmZkZTMucG5n 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8xZDU1ODE5YS1mOWNlLTVkZjgtOGZiNy04YTgwZDk1YmZkZTMucG5n, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8xZDU1ODE5YS1mOWNlLTVkZjgtOGZiNy04YTgwZDk1YmZkZTMucG5n 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8xZDU1ODE5YS1mOWNlLTVkZjgtOGZiNy04YTgwZDk1YmZkZTMucG5n" 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="Data" class="css-bZnCM">Data</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/de/en/blog/automate-design-specs/">How Uber Built an Agentic System to Automate Design Specs in Minutes</a></div><div class="css-bGyOjB">March 11, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/de/en/blog/automate-design-specs/" 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83YTc2YmY3My1iMmYxLTU0NTgtOTlhNC1mODViNDBiY2ZlNTIuanBn, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1210/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83YTc2YmY3My1iMmYxLTU0NTgtOTlhNC1mODViNDBiY2ZlNTIuanBn 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83YTc2YmY3My1iMmYxLTU0NTgtOTlhNC1mODViNDBiY2ZlNTIuanBn, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=1122/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83YTc2YmY3My1iMmYxLTU0NTgtOTlhNC1mODViNDBiY2ZlNTIuanBn 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=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83YTc2YmY3My1iMmYxLTU0NTgtOTlhNC1mODViNDBiY2ZlNTIuanBn, https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=814/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83YTc2YmY3My1iMmYxLTU0NTgtOTlhNC1mODViNDBiY2ZlNTIuanBn 2x"/><img src="https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/width=407/height=0/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy83YTc2YmY3My1iMmYxLTU0NTgtOTlhNC1mODViNDBiY2ZlNTIuanBn" 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="Data" class="css-bZnCM">Data</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/de/en/blog/transforming-ads-personalization/">Transforming Ads Personalization with Sequential Modeling and Hetero-MMoE at Uber</a></div><div class="css-bGyOjB">March 10, 2026</div></div></div><a aria-hidden="true" class="css-jeuDjw" href="https://www.uber.com/de/en/blog/transforming-ads-personalization/" 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/de/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 Center" 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 Center</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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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="/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" 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/de/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 consumers 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/de/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/de/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 move</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/de/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 beginning 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/de/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">Putting 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/de/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 move 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/de/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/de/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 medical 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/de/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">Enhancing campus transportation</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/de/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 transportation</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/de/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/de/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 globally</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/de/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/de/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="/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/" 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,\u0022os\u0022:\u0022mac_os\u0022,\u0022osVersion\u0022:\u002210.15.7\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:true},\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/\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:\u0022Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0 Safari/537.36\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:\u0022f9b7c444-2321-4b76-af82-c9467b2b98a7\u0022}
</script>
<script nonce="fb3a24fa-108d-4b81-8f0e-8ed639b89d89" 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/\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\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:\u0022Cote 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:\u0022Macau\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 Freights\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:\u0022Pickup now\u0022,\u0022cro-pudo.schedule.heading\u0022:\u0022Schedule ride\u0022,\u0022cro-pudo.schedule.pickup-now\u0022:\u0022Pickup 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:\u0022Hang tight, this is taking longer than expected.\u0022,\u0022challenge.cta.continue\u0022:\u0022Continue\u0022,\u0022gpc-banner.title\u0022:\u0022Opt-out preference signal honored. 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 personalization 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 “Accept” to enable Uber to use cookies to personalize this site. We use cookies to remember your location, deliver ads, and measure ad effectiveness on other apps and websites, including social media. Customize your preferences in your Cookie Settings, or select Reject if you only want us to use essential cookies. Learn 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 which 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 analyze your visits and actions on our and third-party apps and websites to understand your interests and be able to 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 serve you relevant ads. You may opt-out from these third party ad cookies by clicking the “Opt-out” button below. If you have an Uber account, you may 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:\u0022Got it\u0022,\u0022cookie.banner.optout.text\u0022:\u0022Opt out\u0022,\u0022cookie.banner.gdpr.body\u0022:\u0022Click “Accept” to enable Uber to use cookies to personalize this site, and to deliver ads and measure their effectiveness on other apps and websites, including social media. Customize your preferences in your Cookie Settings or click “Reject” if you do not want us to use cookies for this purpose. Learn 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 which 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 analyze your visits and actions on our and third-party apps and websites to understand your interests and 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 personalize 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 “Opt out” if you do not want us to use cookies for this purpose. Learn 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 timezone.\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_%2Fde%2Fen%2Fblog%2Freducing-logging-cost-by-two-orders-of-magnitude-using-clp%2F__">
%7B%22articleHeaderAuthors%22%3A%7B%22authors%22%3A%5B%7B%22bio%22%3A%22Devesh%20Agarwal%20formerly%20managed%20the%20Presto%20and%20Spark%20teams%20at%20Uber.%20He%20authored%20Presto%20Pinot%20connector%2C%20and%20lead%20development%20of%20the%20ultra%20low%20latency%20fork%20of%20Presto%20used%20by%20many%20online%20services%20at%20Uber.%22%2C%22id%22%3A%22898cfe9d-647d-45b4-ad7e-613a1b6cde63%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F5e2a8001-b63c-5326-91b1-adb24af6df84.jpeg%22%2C%22name%22%3A%22Devesh%20Agrawal%22%7D%2C%7B%22bio%22%3A%22Jack%20Luo%20is%20an%20Uber%20engineer%20who%20works%20alongside%20Uber%E2%80%99s%20Spark%2C%20YARN%2C%20HDFS%2C%20and%20observability%20teams%20to%20improve%20logging%2C%20observability%2C%20and%20analytics%20infrastructure.%20He%20is%20also%20one%20of%20the%20authors%20and%20core%20developers%20of%20the%20CLP%20system%20during%20his%20PhD%20research%20at%20University%20of%20Toronto.%22%2C%22id%22%3A%2248b7b3b9-b438-485a-91ba-f73cf97bb644%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2Fb57395fb-341c-5bca-b59e-7b5fa097bf61.png%22%2C%22name%22%3A%22Jack%20(Yu)%20Luo%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_%2Fde%2Fen%2Fblog%2Freducing-logging-cost-by-two-orders-of-magnitude-using-clp%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_%2Fde%2Fen%2Fblog%2Freducing-logging-cost-by-two-orders-of-magnitude-using-clp%2F__">
%7B%22articleAuthors%22%3A%7B%22authors%22%3A%5B%7B%22bio%22%3A%22Devesh%20Agarwal%20formerly%20managed%20the%20Presto%20and%20Spark%20teams%20at%20Uber.%20He%20authored%20Presto%20Pinot%20connector%2C%20and%20lead%20development%20of%20the%20ultra%20low%20latency%20fork%20of%20Presto%20used%20by%20many%20online%20services%20at%20Uber.%22%2C%22id%22%3A%22898cfe9d-647d-45b4-ad7e-613a1b6cde63%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F5e2a8001-b63c-5326-91b1-adb24af6df84.jpeg%22%2C%22name%22%3A%22Devesh%20Agrawal%22%7D%2C%7B%22bio%22%3A%22Jack%20Luo%20is%20an%20Uber%20engineer%20who%20works%20alongside%20Uber%E2%80%99s%20Spark%2C%20YARN%2C%20HDFS%2C%20and%20observability%20teams%20to%20improve%20logging%2C%20observability%2C%20and%20analytics%20infrastructure.%20He%20is%20also%20one%20of%20the%20authors%20and%20core%20developers%20of%20the%20CLP%20system%20during%20his%20PhD%20research%20at%20University%20of%20Toronto.%22%2C%22id%22%3A%2248b7b3b9-b438-485a-91ba-f73cf97bb644%22%2C%22image%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2Fb57395fb-341c-5bca-b59e-7b5fa097bf61.png%22%2C%22name%22%3A%22Jack%20(Yu)%20Luo%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_%2Fde%2Fen%2Fblog%2Freducing-logging-cost-by-two-orders-of-magnitude-using-clp%2F__">
%7B%22fallbackRelatedPages%22%3A%7B%22relatedPages%22%3A%5B%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%2Fde%2Fen%2Fblog%2Fsignals-to-context%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F5a6f3171-abdb-4111-866e-77cf3161dfe7.jpeg%22%2C%22ogTitle%22%3A%22From%20Signals%20to%20Context%3A%20Lessons%20from%20Lavaredo%20Ultra%20Trail%22%2C%22publishedAt%22%3A%222026-09-11T16%3A48%3A16.207706Z%22%2C%22title%22%3A%22From%20Signals%20to%20Context%3A%20Lessons%20from%20Lavaredo%20Ultra%20Trail%22%2C%22updatedAt%22%3A%222026-09-11T16%3A49%3A52.088881Z%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%2Fde%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%2Fde%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%22346c8756-3e2b-4d8b-a9a0-6d6615c20448%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fde%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%2Fde%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%2Fde%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%3A933%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%22803de10c-77ca-4a77-9ad2-8dc5b4895b7b%22%2C%22d292598b-288a-4104-bdb3-887acea2e1cc%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fde%2Fen%2Fblog%2Fnext-gen-restaurant-recommendation%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F729ebe7e-1021-47b7-b0f4-7f33e25753d0.jpeg%22%2C%22ogTitle%22%3A%22Next-Gen%20Restaurant%20Recommendation%20with%20Generative%20Modeling%20and%20Real-Time%20Features%22%2C%22publishedAt%22%3A%222026-04-16T17%3A18%3A32.41Z%22%2C%22title%22%3A%22Next-Gen%20Restaurant%20Recommendation%20with%20Generative%20Modeling%20and%20Real-Time%20Features%22%2C%22updatedAt%22%3A%222026-04-16T17%3A18%3A32.603065Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22803de10c-77ca-4a77-9ad2-8dc5b4895b7b%22%2C%22d292598b-288a-4104-bdb3-887acea2e1cc%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fde%2Fen%2Fblog%2Fevolution-and-scale-of-ubers-delivery-search-platform%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F2bd82f5c-d24a-56c3-be79-0cab3218da2e.png%22%2C%22ogTitle%22%3A%22Evolution%20and%20Scale%20of%20Uber%E2%80%99s%20Delivery%20Search%20Platform%22%2C%22publishedAt%22%3A%222026-04-14T16%3A21%3A25.406Z%22%2C%22title%22%3A%22Evolution%20and%20Scale%20of%20Uber%E2%80%99s%20Delivery%20Search%20Platform%22%2C%22updatedAt%22%3A%222026-04-14T16%3A21%3A25.623392Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22803de10c-77ca-4a77-9ad2-8dc5b4895b7b%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fde%2Fen%2Fblog%2Fscaling-responsible-ai%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2Ff1063413-a43c-4771-ad83-d6fac9e88ca6.png%22%2C%22ogTitle%22%3A%22%20%20%20Under%20the%20Hood%3A%20Scaling%20Responsible%20AI%20at%20Uber%22%2C%22publishedAt%22%3A%222026-04-13T18%3A53%3A41.22Z%22%2C%22title%22%3A%22Under%20the%20Hood%3A%20Scaling%20Responsible%20AI%20at%20Uber%22%2C%22updatedAt%22%3A%222026-06-09T17%3A07%3A06.952765Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22803de10c-77ca-4a77-9ad2-8dc5b4895b7b%22%2C%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fde%2Fen%2Fblog%2Faccelerating-deep-learning%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2Fbe3bea28-00d2-42df-9cc0-a9f57eb53b68.jpeg%22%2C%22ogTitle%22%3A%22Accelerating%20Deep%20Learning%3A%20How%20Uber%20Optimized%20Petastorm%20for%20High-Throughput%20and%20Reproducible%20GPU%20Training%22%2C%22publishedAt%22%3A%222026-04-09T15%3A33%3A40.573Z%22%2C%22title%22%3A%22Accelerating%20Deep%20Learning%3A%20How%20Uber%20Optimized%20Petastorm%20for%20High-Throughput%20and%20Reproducible%20GPU%20Training%22%2C%22updatedAt%22%3A%222026-04-09T16%3A52%3A10.292462Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22803de10c-77ca-4a77-9ad2-8dc5b4895b7b%22%2C%22d292598b-288a-4104-bdb3-887acea2e1cc%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fde%2Fen%2Fblog%2Fautomate-design-specs%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F1d55819a-f9ce-5df8-8fb7-8a80d95bfde3.png%22%2C%22ogTitle%22%3A%22How%20Uber%20Built%20an%20Agentic%20System%20to%20Automate%20Design%20Specs%20in%20Minutes%22%2C%22publishedAt%22%3A%222026-03-11T06%3A30%3A00Z%22%2C%22title%22%3A%22How%20Uber%20Built%20an%20Agentic%20System%20to%20Automate%20Design%20Specs%20in%20Minutes%22%2C%22updatedAt%22%3A%222026-04-01T00%3A30%3A45.231464Z%22%7D%2C%7B%22categoryIDs%22%3A%5B%22add2dbca-fda9-41d4-9a47-8ca0529aaa88%22%2C%22803de10c-77ca-4a77-9ad2-8dc5b4895b7b%22%2C%22d292598b-288a-4104-bdb3-887acea2e1cc%22%5D%2C%22fullURL%22%3A%22www.uber.com%2Fde%2Fen%2Fblog%2Ftransforming-ads-personalization%2F%22%2C%22ogImageURL%22%3A%22https%3A%2F%2Ftb-static.uber.com%2Fprod%2Fudam-assets%2F7a76bf73-b2f1-5458-99a4-f85b40bcfe52.jpg%22%2C%22ogTitle%22%3A%22Transforming%20Ads%20Personalization%20with%20Sequential%20Modeling%20and%20Hetero-MMoE%20at%20Uber%22%2C%22publishedAt%22%3A%222026-03-10T06%3A30%3A00Z%22%2C%22title%22%3A%22Transforming%20Ads%20Personalization%20with%20Sequential%20Modeling%20and%20Hetero-MMoE%20at%20Uber%22%2C%22updatedAt%22%3A%222026-04-01T00%3A36%3A21.199185Z%22%7D%5D%2C%22totalCount%22%3A199%7D%7D
</script>
<script type="application/json" id="__PLL__">
{\u0022uuid\u0022:\u00227f6c3008-7157-4a13-ac29-a92b542a5096\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:\u0022CCPA\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/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\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:\u0022DE\u0022,\u0022currentTerritoryName\u0022:\u0022Los Angeles\u0022,\u0022results\u0022:[],\u0022selectedCity\u0022:{\u0022error\u0022:null,\u0022selectedCity\u0022:null}},\u0022pages\u0022:{\u0022contentsByPathname\u0022:{\u0022/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\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 get 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 consumers as they go anywhere and get anything.\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/de/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/de/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 move\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/de/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 beginning with Uber Eats\u0022,\u0022link\u0022:{\u0022ariaLabel\u0022:\u0022\u0022,\u0022href\u0022:\u0022https://www.uber.com/de/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:\u0022Putting stores within reach of a world of customers\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/de/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 move and feed their people\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/de/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/de/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 medical providers\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/de/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:\u0022Enhancing campus transportation\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/de/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 transportation\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/de/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/de/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 globally\u0022,\u0022link\u0022:{\u0022href\u0022:\u0022https://www.uber.com/de/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/de/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/de/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 stylized 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 Uber Blog\u0022,\u0022href\u0022:\u0022https://www.uber.com/de/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:\u00221342d99b-4592-4203-a084-7e626097a1f7\u0022,\u0022blockKey\u0022:\u0022reducing-logging-cost-by-two-orders-of-magnitude-using-clp.a9d97a8928fa436391e2dbcd4c9794b1\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022ArticleHeader\u0022,\u0022props\u0022:{\u0022authorUUIDs\u0022:[\u0022898cfe9d-647d-45b4-ad7e-613a1b6cde63\u0022,\u002248b7b3b9-b438-485a-91ba-f73cf97bb644\u0022],\u0022heroMedia\u0022:{\u0022imageSrc\u0022:{\u0022format\u0022:\u0022png\u0022,\u0022height\u0022:\u00221080\u0022,\u0022label\u0022:\u0022My-project-1-1.png\u0022,\u0022photoId\u0022:\u0022bd5058084bfc8d948b6b5d948bf793a7ef7e27dcdd8b4b44056a8e43894ef77b\u0022,\u0022rtlMirror\u0022:false,\u0022src\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/5e9a8304-130a-5d4f-8a34-035f6fe86c6d.png\u0022,\u0022subType\u0022:\u0022CARD\u0022,\u0022title\u0022:\u0022My project (1)\u0022,\u0022type\u0022:\u0022DYNAMIC_PHOTO\u0022,\u0022width\u0022:\u00222160\u0022}},\u0022heroMediaType\u0022:\u0022image\u0022,\u0022title\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\u0022,\u0022breadcrumbData\u0022:{\u0022parentFullURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022\u0022},\u0022categoryIds\u0022:[\u0022803de10c-77ca-4a77-9ad2-8dc5b4895b7b\u0022],\u0022cityOverride\u0022:{},\u0022isCountryVariant\u0022:true,\u0022isDynamicTemplate\u0022:false,\u0022isLive\u0022:true,\u0022namespace\u0022:\u0022blog\u0022,\u0022pattern\u0022:\u0022/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022publishedAt\u0022:\u00222022-09-29T09:30:00Z\u0022,\u0022tags\u0022:{\u0022canonical\u0022:\u0022https://www.uber.com/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022description\u0022:\u0022Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber's business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.\u0022,\u0022googlePlayAppID\u0022:\u0022com.ubercab\u0022,\u0022iPadAppID\u0022:\u0022368677368\u0022,\u0022iPhoneAppID\u0022:\u0022368677368\u0022,\u0022noIndex\u0022:false,\u0022ogDescription\u0022:\u0022Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber's business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.\u0022,\u0022ogImageURL\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/5e9a8304-130a-5d4f-8a34-035f6fe86c6d.png\u0022,\u0022ogSiteName\u0022:\u0022Uber\u0022,\u0022ogTitle\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\u0022,\u0022ogType\u0022:\u0022website\u0022,\u0022ogURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\u0022,\u0022twitterCard\u0022:\u0022summary\u0022,\u0022twitterSite\u0022:\u0022@Uber\u0022},\u0022templateID\u0022:\u0022193d3d76-be55-490f-8477-c4b7872b673a\u0022,\u0022updatedAt\u0022:\u00222026-04-01T00:23:09.4798Z\u0022},\u0022blockContentID\u0022:\u00221342d99b-4592-4203-a084-7e626097a1f7\u0022}},{\u0022blockContentID\u0022:\u00220771836c-13a8-4804-92ae-0d849f616baf\u0022,\u0022blockKey\u0022:\u0022reducing-logging-cost-by-two-orders-of-magnitude-using-clp.6db54b4947cc4239ab79592ebb1fc885\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022LongFormContent\u0022,\u0022props\u0022:{\u0022richTextEditor\u0022:{\u00220\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003Cem class=%5C\u0022rich-italic%5C\u0022\u003ELong, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber’s business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated \u003C/em\u003E\u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://github.com/y-scope/clp%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003E\u003Cem class=%5C\u0022rich-italic%5C\u0022\u003ECLP\u003C/em\u003E\u003C/a\u003E\u003Cem class=%5C\u0022rich-italic%5C\u0022\u003E into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.\u003C/em\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00221\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EAt Uber, we rely on making data-driven decisions at every level. For this, we have built a large-scale big data platform that runs over 250,000 Spark analytics jobs per day, where each job could consist of hundreds of thousands of executors, processing over a hundred petabytes of analytical data. In addition, the big data platform generates a large amount of log data, and the rapid growth of Uber’s business has led to furious growth of these logs. On a busy day, our Spark cluster alone can generate up to 200TB of logs (at the default INFO verbosity level). \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\u003EThese logs are critical to both the platform engineers and data scientists using Spark. Analyzing logs can be used to improve the quality of applications, troubleshoot failures or slowdowns, analyze trends, monitor anomalies, and so on. Many of these analyses require logs collected over a long period of time. For instance, when Spark jobs fail or stall, our on-call engineers may abruptly restart them to quickly mitigate operational issues, but they need older log data to identify the root cause postmortem. Other users want to compare log data week by week to identify anomalies and identify trends. Data scientists want to examine old Spark logs to examine and improve the quality of their machine learning applications. As a result, our users would frequently ask our infrastructure team to increase the log retention period from three days (the period at the time) to at least a month.\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\u003EHowever, if we were to increase the retention period to a month, just our HDFS storage costs would reach millions of dollars per year. Moreover, the scale of our logs prevents existing tools from managing the logs cost effectively. For example, Elasticsearch incurs prohibitive operational and hardware costs (among other challenges) in scaling to Uber’s logging workload, so much so that we were forced to migrate away from it. For our non-Spark logs, we currently \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://www.uber.com/de/en/blog/logging/%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003Eingest them into ClickHouse\u003C/a\u003E, but ClickHouse is more suitable for structured logs (our Spark logs are mostly unstructured whereas our non-Spark logs are mostly structured, i.e., JSON). In addition, we are concerned about storage costs: one month worth of Spark logs would more than double the current size of data stored in ClickHouse for all the other services combined.\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\u003EUnfortunately, as our log size continued to grow, things got worse: our SSDs started to burn out prematurely. Log files are typically written a few messages at a time, spread out over the duration of the job. On our memory-constrained systems, this causes many small writes over a long period of time, which in turn causes SSD write-amplification. As a mitigation, we \u003Cstrong class=%5C\u0022rich-bold%5C\u0022\u003E\u003Cem class=%5C\u0022rich-italic%5C\u0022\u003Ereduced\u003C/em\u003E\u003C/strong\u003E the logging level from INFO to WARN, but this is contrary to what our users want!\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00225\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EFor a long-term solution, we decided to explore compression within the logging library (to reduce writes to the SSD). We found \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://github.com/y-scope/clp/%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003ECLP (Compressed Log Processor)\u003C/a\u003E, a tool with unprecedented compression (2x of general-purpose compressors) while preserving the ability to search the logs without full decompression. CLP required some customization since it was designed to compress batches of files at a time, whereas our logging library writes a single log file at a time. Specifically, we split CLP’s algorithm into two phases: Phase 1 is suitable for compressing a single log file at a time while achieving modest compression; Phase 2 aggregates these compressed files into CLP’s final format.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00226\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EAfter implementing Phase 1, we were surprised to see we had achieved a compression ratio of 169x. Without compression, storing the logs for three days used to cost us $180,000/year and a one month retention period would cost us a whopping 1.8 million/year. With just Phase 1, this cost is reduced to $10,000/year for a one month retention period. But more importantly, it now enables us to retain the logs as our engineers requested: we were able to restore the logging level from WARN back to INFO, increase our retention period by 10x, and still reduce our storage costs by 17x. We are still implementing Phase 2, but our preliminary results show it will deliver even higher compression (2x) and storage savings, while enabling powerful search and analytics.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00227\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EThe rest of this blog details why we chose CLP over other compressors, how we split CLP’s algorithm into two phases, how we integrated CLP as a Log4j appender, an interesting improvement we made for encoding floating-point numbers, the results of deploying Phase 1, and finally, what comes next.\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\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u00229\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002210\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003EWhy Not Use a General-Purpose Compressor?\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002211\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EGeneral purpose compressors are not ideal for our purposes for a few reasons. First, they do not exploit the unique characteristics of logs, resulting in a suboptimal compression ratio. Compared to other textual data, logs are much more repetitive. Consider the following example log message:\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002212\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-990857%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022101%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 1535px) 100vw, 1535px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=67/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80OTQ2YjJiOC1lNjQzLTUyMTctYTk1Zi02NTU2NjM1NzMzMDgucG5n%5C\u0022 width=%5C\u00221535%5C\u0022\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002213\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EIt consists of three components: a timestamp (underlined), three variable values (in blue and red), and the static text (the remainder) which is also known as the log type. Among them, the log type is static, so it never changes; in addition, some variable values are also highly repetitive, such as the task ID and container ID. However, the highly repetitive components are intertwined with other components. For example, messages of the same log type could be interleaved by logs of different log types. This limits Zstandard or Gzip’s ability to find repetition, because it can only identify repetitions within a sliding window. Even within the same log message, the log type is interleaved by variables. Zstandard or Gzip do not allow gaps in the repetitive pattern; therefore when a log type is interleaved by variable values, they can only identify the multiple substrings of the log type as repetitive. In the above example, say a subsequent log message has the same log type but different variable values, Zstandard will identify 4 repetitive substrings in the log type: “ INFO Task ”, “ assigned to container: [ContainerID:”, “], operation took ”, and “ seconds”  instead of a single log type. \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\u003EIn addition, general purpose compressors are not designed with search in mind: searching the logs requires decompressing the entire compressed file. Most of the time, users would only like to examine a subset of logs that satisfy certain filters, such as a particular application ID, a particular host, or a search phrase. But filters can only be applied after decompressing the entire compressed log back to plain text.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002215\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EIn contrast, CLP compresses the logs and allows search directly on the compressed logs. CLP parses the unstructured logs and turns them into a structured table, where each message is a row and the different components including the timestamp, log type, and variables, are different columns. CLP deduplicates those highly repetitive columns using dictionaries and only a dictionary index is stored in the table instead of the raw string. CLP finally compresses this table using Zstandard, but in a column-oriented manner, significantly increasing its capability to find duplication. As a result, CLP has an unprecedented compression ratio (significantly exceeding the capabilities of Gzip or Zstandard alone), while allowing users to search the compressed logs without decompression back to plain-text, as it’s enabled by using the dictionaries as indexes.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002216\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ENext, we briefly overview our logging architecture and the internals of CLP, before explaining how we integrated CLP into our architecture.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002217\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002218\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002219\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003ELogging Architecture for our Spark Cluster\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002220\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-990839%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022627%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 814px) 100vw, 814px%5C\u0022 src=%5C\u0022https://tb-static.uber.com/prod/udam-assets/e93882a5-4d8b-55be-b9a0-ca5cf3b0c6b6.png%5C\u0022 width=%5C\u0022814%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003E\u003Cem class=%5C\u0022rich-italic%5C\u0022\u003EFigure 1: The logging architecture of our Spark cluster. While a job is in progress, its logs are written to the container host’s SSD. When a job completes, the YARN Node Manager uploads the logs to HDFS.\u003C/em\u003E\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002221\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002222\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EFigure 1 shows the current logging architecture of our Spark cluster. We primarily run Spark jobs in containers using YARN as the resource manager. While a job is running, logs are first written to the locally attached SSD on each container host. When the job completes, we use \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://www.davidmcginnis.net/post/a-crash-course-in-yarn-log-aggregation%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003EYARN’s log aggregation feature\u003C/a\u003E to copy the logs from each host’s SSD to HDFS.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002223\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ELogs are primarily written using Log4j, a logging library used by Spark and many other big data platforms. Log4j allows developers to use custom logic to persist log messages, in the form of a Log4j appender. For instance, developers can configure Log4j to use a SocketAppender that will send log messages over the network to some endpoint. As we’ll see later, a Log4j appender is a convenient way for us to compress logs as they are generated, before they are written to disk.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002224\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002225\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002226\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003EBackground of CLP\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002227\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-990842%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u00221406%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 2216px) 100vw, 2216px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=650/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy9hYjFkNGFjMi0zM2U0LTU3MzEtYTY2Yy1mZTE5YzQ4ZGY5YTUucG5n%5C\u0022 width=%5C\u00222216%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003E\u003Cem class=%5C\u0022rich-italic%5C\u0022\u003EFigure 2: How a log message is compressed using CLP. \u003C/em\u003E\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002228\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002229\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EFigure 2 shows how CLP compresses an example log message in four steps. In the first step, CLP deterministically parses the message into a timestamp, a list of variable values, and the log type. It further recognizes that some variable values like task ID and container ID are likely repetitive, whereas others, like floating-point numbers or integers are non-repetitive. The former are called dictionary variables because they will be stored in a dictionary whereas the latter are called non-dictionary variables. \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 next two steps convert the different string components into concise binary values. In step 2, CLP encodes the timestamp and non-dictionary variables. For timestamps, it encodes the delta in milliseconds (compared to the timestamp of the last message) using a variable-length encoding scheme, hence most timestamps only occupy one or two bytes. Floating-point numbers are encoded using our custom algorithm described below. In step 3, each repetitive variable is deduplicated using a dictionary. Similarly, the log type is also deduplicated using a separate (log type) dictionary.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002231\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EIn the last step, CLP converts the log messages into a table of encoded messages consisting of three columns: the timestamp, a list of variable values (either the variable dictionary IDs or encoded non-dictionary values), and the log type ID. Once a number of log messages is buffered, each column is compressed (in column-oriented order) using Zstandard. The dictionaries are also compressed separately using Zstandard. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002232\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002233\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002234\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003EIntegrating CLP into Uber’s Big Data Platform\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002235\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EInitially, we planned to implement all of CLP’s compression logic into the Log4j appender. However, we quickly realized we need a streaming compressor that uses a minimal amount of memory; this is because logs are generated in a streaming fashion and our container hosts are often under high memory pressure as Spark is a data-heavy platform. However, CLP’s full compression imposes a few issues. First, it requires buffering a large number of encoded log messages in memory before compression. Buffering is needed so that CLP can compress the encoded messages in columnar order. This buffer, together with the dictionary, also requires up to hundreds of megabytes of memory. Finally, CLP achieves its best compression ratio when aggregating logs from multiple nodes or JVMs (rather than each file individually), which is infeasible within a single appender.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002236\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-990844%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u00221676%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 1972px) 100vw, 1972px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=870/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8zZmM2MjJmOS0zMTQ4LTUwYzAtYjA1ZS04NjQ0MTk3N2I3ZDkucG5n%5C\u0022 width=%5C\u00221972%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003E\u003Cem class=%5C\u0022rich-italic%5C\u0022\u003EFigure 3: Splitting CLP compression deployment into two phases in our deployment. \u003C/em\u003E\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002237\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002238\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EInstead, we split CLP’s compression into two phases. Figure 3 shows this architecture. Only Phase 1 runs in the Log4j appender, and it performs lightweight, streaming compression. There is one Log4j appender running in each JVM, compressing the stream of log messages generated by the Spark application running inside that JVM before writing the compressed logs to disk. The appender only performs the first two steps of CLP’s compression (as shown in Figure 2), namely parsing and encoding. After parsing and encoding, a log message is converted into an intermediate representation (IR), which is sent directly to a Zstandard compression stream without being buffered. As a result, each appender outputs a stream of compressed IR, which will be stored on the SSD of each container host. Like before, the compressed IR will be uploaded to HDFS by YARN’s log aggregation feature. Afterwards, we use an offline dedicated process to aggregate multiple compressed IRs, and run the rest of CLP’s algorithm (steps 3 and 4 in Figure 2) to fully compress the logs into CLP’s compressed columns format.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002239\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-990846%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u002249%5C\u0022 loading=%5C\u0022lazy%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=69/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80ZDEyMjM1Yi1lYjM1LTU5MzYtOGY3Ny04OWZlZmQ5MWYyMjYucG5n%5C\u0022 width=%5C\u0022791%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003E\u003Cem class=%5C\u0022rich-italic%5C\u0022\u003EFigure 4: IR format of the example log message. \u003Ch\u003E represents the header. \u003C/h\u003E\u003C/em\u003E\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002240\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002241\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EFigure 4 shows the IR format of the example log message that is designed for streaming compression. The IR consists of a list of \u003Cheader\u003E\u003Cpayload\u003E pairs, where a payload is a component parsed from the log message. In Figure 4, the message consists of five components: the logtype, three variable values, and the timestamp delta (0xE3).\u003C/payload\u003E\u003C/header\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002242\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EThe header for dictionary variables and the log type typically consists of two bytes: one indicates the type of the payload (i.e., dictionary variable, log type, etc.), and the other records the length of the payload. We use a variable-length encoding for the length, so the length of most payloads only requires one byte. For timestamp deltas and non-dictionary variable values, their header uses one byte to encode both the type and length. For example, the timestamp delta could require either 1, 2, 4, or 8 bytes. Hence we have four different type values for timestamp deltas. Similarly, non-dictionary values like floating point numbers or integers could also have different lengths, and they are embedded in the type byte. A careful reader might notice that we actually do not need to embed the length of these encoded variables into the type: because these variables are already encoded, their length can be determined from their encoding (for example, the encoded timestamp already uses variable-length encoding). But doing this would complicate our parsing logic. For log type and dictionary variables, we cannot embed their lengths in the type byte because their length could have an infinite number of possibilities. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002243\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ETo reduce the appender’s memory footprint and SSD write-amplification, we use a few optimizations. First, we do not need to allocate space for dictionaries in Phase 1 because dictionary deduplication is only done in Phase 2. We also do not buffer uncompressed logs: after parsing each log, we directly send the partially encoded message to the Zstandard streaming compressor. This minimizes our memory usage. We do, however, use a 4MB buffer for the compressed logs, so compressed logs are written to the SSD 4MB at a time (or if the log file is closed before 4MB is reached). 4MB is carefully chosen as it’s a multiple of all block sizes for commonly used SSDs. Hence our writes to the SSD will minimize write-amplification. A small 4MB buffer is highly effective: on average, a 4MB of compressed logs translates to 400MB+ of uncompressed logs for us, given CLP + Zstandard’s more than 100x compression ratio. \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\u003ESplitting CLP’s compression into two phases is also economical. The performance of CLP’s end-to-end compression logic (Figure 2) is bottlenecked by log parsing. We now distribute log parsing to each Log4j appender, leveraging the fact that the CPUs of the containers running Spark jobs are often underutilized. As a result, Phase 2’s compression can be significantly less CPU intensive given that it no longer needs to parse the logs.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002245\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EA few tools in the Hadoop/Spark ecosystem allow users to view a job’s logs. These tools expect the logs to be in plain-text format or in a special file-type (written by the \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://hadoop.apache.org/docs/r3.3.2/hadoop-yarn/hadoop-yarn-common/apidocs/%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003ELogAggregationFileController\u003C/a\u003E family of classes) that YARN uses to concatenate several logs together. Since our appender writes logs in a specialized format, we had to extend the tools so that they could also read our format. This was as simple as adding an if branch in the few places a log file is read—if the log file’s extension is CLP’s, then we transparently decompress the desired chunk of the log, otherwise we run the existing code to read the uncompressed log.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002246\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch3 class=%5C\u0022rich-heading-h3%5C\u0022\u003EWhy not use a socket appender to send the logs directly over the network, completely bypassing the SSD? \u003C/h3\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\u003EWe considered this, but implementing CLP in the appender has a few noteworthy advantages. First, log ingestion services are costly to maintain and are frequently the scalability bottleneck for a log-storage solution. In addition, some tools in the Hadoop/Spark ecosystem rely on having the logs accessible from disk/HDFS rather than a log-storage service, so integration is less intrusive if we keep the logs stored on the filesystem.\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002248\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch3 class=%5C\u0022rich-heading-h3%5C\u0022\u003EAdvantages over directly compressing the original log with Zstandard \u003C/h3\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002249\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EFirst, recall that CLP-compressed logs are searchable–a user query will first be directed to dictionary\u003Cstrong class=%5C\u0022rich-bold%5C\u0022\u003E \u003C/strong\u003Esearches, and only matching log messages will be decompressed. Additional metadata columns can be easily added to each encoded message to enable additional filtering, such as application ID, host name, etc. \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\u003EEven our appender’s compressed IR provides better filter/search capability compared to directly compressing with Zstandard. Although the IR lacks dictionaries, search still could skip components because the log message is already parsed. For example, if a user only wants to examine logs within a certain time period, we only need to examine the timestamp component, and skip the other components of the messages that are outside of the time range. Also, some existing search tools like grep cannot natively handle a log message that spans multiple lines (such as a stack trace in an error log): grep only returns a single matching line, instead of the complete multi-line message. But since our IR consists of parsed logs, a search can always return the entire message even when it spans multiple lines. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002251\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ECLP also achieves a much higher compression ratio compared to directly applying Zstandard or Gzip, due to its columnar-based storage format and concise encoding, both of which enable Zstandard to find significantly more duplications within its sliding window. The compression ratio of end-to-end CLP is 2.16x higher than Zstandard’s and 2.28x higher than Gzip on our Spark logs. Even our appender’s compressed IR, which is only Phase 1 of CLP’s end-to-end compression, achieves a compression ratio 5-8%25 better than directly applying Zstandard on the raw logs. This is because, by separating the highly repetitive log types and dictionary variables, Zstandard can find longer repetitive patterns. Recall that for the log type in the example log message, Zstandard will identify 4 repetitive substrings: ” INFO Task “, ” assigned to container: [ContainerID:”, “], operation took “, and ” seconds”. However, in our appender, Zstandard can identify the entire log type string as repetitive. In addition, our concise encoding of timestamps and non-dictionary variables, specifically floating-point numbers, also results in higher compression ratio. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002252\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ENext, we describe the custom floating-point number encoding we invented that increased the  encoding speed by up to 2-3x, while simultaneously improving compression ratio and representing more floating point values printed in the logs in a lossless manner. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002253\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002254\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002255\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch2 class=%5C\u0022rich-heading-h2%5C\u0022\u003ECustom Floating-Point Number Encoding\u003C/h2\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002256\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-990849%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022220%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 1274px) 100vw, 1274px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=177/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy80MWI1YzNjZi00OTkyLTVhMjgtOGEwMi00NTUzNjFiNThhM2MucG5n%5C\u0022 width=%5C\u00221274%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003E\u003Cem class=%5C\u0022rich-italic%5C\u0022\u003EFigure 5: Representation of 0.335 using our custom float encoding \u003C/em\u003E\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002257\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002258\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-990852%5C\u0022 decoding=%5C\u0022async%5C\u0022 height=%5C\u0022161%5C\u0022 loading=%5C\u0022lazy%5C\u0022 sizes=%5C\u0022auto, (max-width: 1264px) 100vw, 1264px%5C\u0022 src=%5C\u0022https://cn-geo1.uber.com/image-proc/crop/resizecrop/udam/format=auto/quality=0/width=1024/height=130/srcb64=aHR0cHM6Ly90Yi1zdGF0aWMudWJlci5jb20vcHJvZC91ZGFtLWFzc2V0cy8zYzE4Njg4My00OTEwLTViZmYtOWM2OS03ZDQxNjRjZjhlMGQucG5n%5C\u0022 width=%5C\u00221264%5C\u0022\u003E\u003Cfigcaption class=%5C\u0022rich-figure-caption%5C\u0022\u003E\u003Cem class=%5C\u0022rich-italic%5C\u0022\u003EFigure 6: IEEE-754 single-precision (32 bits) representation of 0.335\u003C/em\u003E\u003C/figcaption\u003E\u003C/figure\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022figure\u0022},\u002259\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002260\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EIn implementing CLP, we made one notable optimization: a custom float encoding. Recall that CLP directly encodes a floating point value, such as “0.335”, into a 32-bit value in the encoded message. Originally, CLP encoded floating point values using the IEEE-754 standard. However, the IEEE-754 standard is not ideal for log compression purposes for a few reasons. First, encoding/decoding IEEE-754 values from string is slow. In addition, IEEE-754’s format is not lossless. For example “2.3456789” cannot be accurately represented by the IEEE-754 32-bit standard. As a result, if we encode “2.3456789” as an IEEE-754 float and then decode it back to a string, the value would be modified to “2.345678\u003Cstrong class=%5C\u0022rich-bold%5C\u0022\u003E8\u003C/strong\u003E”, where the last digit is modified. Similarly, values like “0.100” (trailing 0) and “00.01” (multiple leading zeros) cannot be encoded and decoded without storing the precision and number of digits separately; the original CLP stores these values in the log type, causing some log types to be duplicated if the precision of a variable differs between log messages. Our custom floating-point encoding overcomes these issues. Figure 5 shows our protocol, representing the floating point value 0.335 in 32 bits. It encodes the value with the following format (from MSB to LSB):\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002261\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cul class=%5C\u0022rich-list-ul%5C\u0022\u003E\u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003E1 bit (b31): Is negative\u003C/li\u003E\u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003E25 bits (b30-6): The value of the floating point number without the decimal point and without the sign, as an integer. For example, for 0.335, these 25 bits represent the value of 335.\u003C/li\u003E\u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003E3 bits (b5-3): The total number of printed digits, minus 1. Thus, it can represent a value with a total number of digits between [1, 8], mapped to the range [0, 7]. In the case of “0.335”, there are a total of 4 digits, so the value of these 3 bits is 3. We use three bits because a 25-bit number has at most 8 decimal digits (2^25 -1 = 33,554,431). \u003C/li\u003E\u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003E3 bits (b2-0): Offset of the decimal point, from the right, minus 1. For example, for 0.335, the offset of the decimal is 3. Note that we take the offset from the right instead of the left because a negative sign might “waste” a value if we do so from the left. For example, if we count from the left, then the offsets of the decimal are different for 0.335 and -0.335, but they’re the same when counting from the right.\u003C/li\u003E\u003C/ul\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022list\u0022},\u002262\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003ENote that we need both the number of printed digits (b5-3) and offset of the decimal (b2-0), because there can be an arbitrary number of leading zeros. For example, “0.335”, “.335”, “000.335” all have the same integer values (b30-6) and decimal offset (b2-0); therefore we need b5-3 to differentiate them (where there are 4, 3, and 6 digits respectively).\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002263\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EThis representation can precisely represent any floating point value whose integer value ignoring the decimal point falls in the range [-(2^25-1), (2^25-1)]. Any value that cannot be precisely represented by this protocol will be treated as a dictionary variable, guaranteeing lossless decompression.\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\u003EOur custom encoding consistently achieves a 2-3x speedup compared to IEEE-754, when evaluated on the floating point values extracted from our Spark logs. This results in a non-trivial speedup for compression. Note that the encoding logic is run not only on floating-point values, but on any token that is a candidate floating-point number, i.e., those that consist of a number character and which aren’t integers (examples include “23:59:59” or “2.4.3-uber-159”). This is because without first running through the floating-point number encoding process, we can’t rule out that the token is not a floating point value. \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\u003EInterestingly, we also find that using our custom floating-point number encoding\u003Cstrong class=%5C\u0022rich-bold%5C\u0022\u003E improves the compression ratio \u003C/strong\u003Eby 5.37%25 when applied to our Spark logs. As mentioned earlier, this is partly because, compared to IEEE-754’s format, our custom format avoids duplicating log types when only the precision of the floating point value differs. In addition, IEEE-754’s format could have higher entropy than our encoding. For instance, compare the encoding of 0.335 in IEEE-754 (Figure 6) versus our custom encoding (Figure 5). There is a lot more entropy (frequent switching between 0 and 1) in the IEEE-754 encoded value, leading to lower compression for IEEE-754 values. More importantly, a small difference between two floating-point values often leads to a large difference in the bit sequence when they are encoded in IEEE-754. For example, the lower 16 bits of IEEE-754 encoded value for “0.334” differ with “0.335”, even though their actual values only have small differences. Hence, it limits Zstandard’s ability to find repetitiveness between two floating point values. (In reality, floating-point values such as completion time in similar log types often have similar, but not identical, values.) In comparison, in our custom encoding, there is only a 1 bit difference between the encoded values of “0.334” and “0.335”.\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\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002267\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002268\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003EResults So Far\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002269\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EWe have deployed Phase 1 (i.e., the custom Log4j appender with our custom float encoding) across our entire Spark platform. We are currently working on deploying the Phase 2 compression and integrating CLP’s search capability into our analytics and observability platforms. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002270\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003Cstrong class=%5C\u0022rich-bold%5C\u0022\u003EResult of Phase 1 compression: \u003C/strong\u003EIn a 30-day window, our entire Spark ecosystem generated 5.38PB of uncompressed INFO level unstructured logs yet our CLP appender compressed them to only 31.4TB, amounting to an unprecedented 169x compression ratio. Now with CLP, we have restored our log verbosity from WARN back to INFO, and we can afford to retain all the logs for 1 month (as requested by our engineers). \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002271\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003Cstrong class=%5C\u0022rich-bold%5C\u0022\u003EPreliminary result of Phase 2 compression\u003C/strong\u003E: The above mentioned result is only the size of the compressed IR. We have tested a prototype of CLP’s complete compression (including both Phase 1 and 2) on a subset of our Spark logs, and CLP’s compression ratio is 2.16x higher than Zstandard’s ratio and 2.28x higher than Gzip’s ratio. This  is consistent with \u003Ca class=%5C\u0022rich-link%5C\u0022 href=%5C\u0022https://www.usenix.org/system/files/osdi21-rodrigues.pdf%5C\u0022 rel=%5C\u0022noreferrer noopener%5C\u0022 target=%5C\u0022_blank%5C\u0022\u003Ethe results reported on other log datasets\u003C/a\u003E. \u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002272\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003E\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002273\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Chr class=%5C\u0022wp-block-separator%5C\u0022 data-wp-block-name=%5C\u0022core/separator%5C\u0022\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002274\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Ch1 class=%5C\u0022rich-heading-h1%5C\u0022\u003EWhat’s Next?\u003C/h1\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022heading\u0022},\u002275\u0022:{\u0022htmlContent\u0022:\u0022\u003Cbody\u003E\u003Cdiv\u003E\u003Cp class=%5C\u0022rich-paragraph%5C\u0022\u003EOur CLP Log4j appender is a big improvement to our logging architecture, but it’s only the first step on our roadmap to integrate CLP into our log management pipeline. Our future plans include further improving the compression ratio by implementing the second phase of CLP’s compression, as well as integrating CLP into our observability platform to unleash its resource-efficient search capability. Specifically, our next steps include:\u003C/p\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022paragraph\u0022},\u002276\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\u003EDeploy CLP’s Phase 2 compression. This will further reduce our storage costs by more than 2x.\u003C/li\u003E\u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003EStore the compressed logs using a columnar storage format such as Parquet, potentially integrating with Presto. This will allow us to explore CLP’s promise for search without decompression to plain-text, using SQL queries which users are already familiar with, unlocking interactive analytical use-cases on large scales of log data that were impossible without CLP.\u003C/li\u003E\u003Cli class=%5C\u0022rich-list-item%5C\u0022\u003EIntegrate CLP into our observability platform as the storage and search engine for large-scale unstructured logs, enabling a rich set of features such as search \u0026amp; analytics, SQL queries, alerts, and visualization.\u003C/li\u003E\u003C/ol\u003E\u003C/div\u003E\u003C/body\u003E\u0022,\u0022type\u0022:\u0022list\u0022}}},\u0022blockContentID\u0022:\u00220771836c-13a8-4804-92ae-0d849f616baf\u0022}},{\u0022blockContentID\u0022:\u00227276fbc6-c3fd-43b3-bc3c-4addf192b036\u0022,\u0022blockKey\u0022:\u0022reducing-logging-cost-by-two-orders-of-magnitude-using-clp.11023a8a51784d53a5ea2fcc41877d30\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022ArticleCategories\u0022,\u0022props\u0022:{\u0022breadcrumbData\u0022:{\u0022parentFullURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022\u0022},\u0022categoryIds\u0022:[\u0022803de10c-77ca-4a77-9ad2-8dc5b4895b7b\u0022],\u0022cityOverride\u0022:{},\u0022isCountryVariant\u0022:true,\u0022isDynamicTemplate\u0022:false,\u0022isLive\u0022:true,\u0022namespace\u0022:\u0022blog\u0022,\u0022pattern\u0022:\u0022/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022publishedAt\u0022:\u00222022-09-29T09:30:00Z\u0022,\u0022tags\u0022:{\u0022canonical\u0022:\u0022https://www.uber.com/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022description\u0022:\u0022Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber's business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.\u0022,\u0022googlePlayAppID\u0022:\u0022com.ubercab\u0022,\u0022iPadAppID\u0022:\u0022368677368\u0022,\u0022iPhoneAppID\u0022:\u0022368677368\u0022,\u0022noIndex\u0022:false,\u0022ogDescription\u0022:\u0022Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber's business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.\u0022,\u0022ogImageURL\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/5e9a8304-130a-5d4f-8a34-035f6fe86c6d.png\u0022,\u0022ogSiteName\u0022:\u0022Uber\u0022,\u0022ogTitle\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\u0022,\u0022ogType\u0022:\u0022website\u0022,\u0022ogURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\u0022,\u0022twitterCard\u0022:\u0022summary\u0022,\u0022twitterSite\u0022:\u0022@Uber\u0022},\u0022templateID\u0022:\u0022193d3d76-be55-490f-8477-c4b7872b673a\u0022,\u0022updatedAt\u0022:\u00222026-04-01T00:23:09.4798Z\u0022},\u0022blockContentID\u0022:\u00227276fbc6-c3fd-43b3-bc3c-4addf192b036\u0022}},{\u0022blockContentID\u0022:\u0022dd8e34d6-e507-40e8-adf7-e9f424702fc4\u0022,\u0022blockKey\u0022:\u0022reducing-logging-cost-by-two-orders-of-magnitude-using-clp.3eba724a32a8495aadc42a33452b4dc0\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022ArticleAuthor\u0022,\u0022props\u0022:{\u0022authorUUIDs\u0022:[\u0022898cfe9d-647d-45b4-ad7e-613a1b6cde63\u0022,\u002248b7b3b9-b438-485a-91ba-f73cf97bb644\u0022],\u0022breadcrumbData\u0022:{\u0022parentFullURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022\u0022},\u0022categoryIds\u0022:[\u0022803de10c-77ca-4a77-9ad2-8dc5b4895b7b\u0022],\u0022cityOverride\u0022:{},\u0022isCountryVariant\u0022:true,\u0022isDynamicTemplate\u0022:false,\u0022isLive\u0022:true,\u0022namespace\u0022:\u0022blog\u0022,\u0022pattern\u0022:\u0022/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022publishedAt\u0022:\u00222022-09-29T09:30:00Z\u0022,\u0022tags\u0022:{\u0022canonical\u0022:\u0022https://www.uber.com/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022description\u0022:\u0022Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber's business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.\u0022,\u0022googlePlayAppID\u0022:\u0022com.ubercab\u0022,\u0022iPadAppID\u0022:\u0022368677368\u0022,\u0022iPhoneAppID\u0022:\u0022368677368\u0022,\u0022noIndex\u0022:false,\u0022ogDescription\u0022:\u0022Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber's business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.\u0022,\u0022ogImageURL\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/5e9a8304-130a-5d4f-8a34-035f6fe86c6d.png\u0022,\u0022ogSiteName\u0022:\u0022Uber\u0022,\u0022ogTitle\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\u0022,\u0022ogType\u0022:\u0022website\u0022,\u0022ogURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\u0022,\u0022twitterCard\u0022:\u0022summary\u0022,\u0022twitterSite\u0022:\u0022@Uber\u0022},\u0022templateID\u0022:\u0022193d3d76-be55-490f-8477-c4b7872b673a\u0022,\u0022updatedAt\u0022:\u00222026-04-01T00:23:09.4798Z\u0022},\u0022blockContentID\u0022:\u0022dd8e34d6-e507-40e8-adf7-e9f424702fc4\u0022}},{\u0022blockContentID\u0022:\u00229104187f-9dc3-41c1-8f92-35146853d342\u0022,\u0022blockKey\u0022:\u0022reducing-logging-cost-by-two-orders-of-magnitude-using-clp.cdb52b85a1a44e9ab7a5b4cd1825d217\u0022,\u0022content\u0022:{\u0022analyticsEvents\u0022:{},\u0022id\u0022:\u0022ArticleFeed\u0022,\u0022props\u0022:{\u0022categories\u0022:[{\u0022id\u0022:\u0022803de10c-77ca-4a77-9ad2-8dc5b4895b7b\u0022,\u0022label\u0022:\u0022Data / ML\u0022}],\u0022headline\u0022:\u0022Related Articles\u0022,\u0022breadcrumbData\u0022:{\u0022parentFullURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022\u0022},\u0022categoryIds\u0022:[\u0022803de10c-77ca-4a77-9ad2-8dc5b4895b7b\u0022],\u0022cityOverride\u0022:{},\u0022isCountryVariant\u0022:true,\u0022isDynamicTemplate\u0022:false,\u0022isLive\u0022:true,\u0022namespace\u0022:\u0022blog\u0022,\u0022pattern\u0022:\u0022/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022publishedAt\u0022:\u00222022-09-29T09:30:00Z\u0022,\u0022tags\u0022:{\u0022canonical\u0022:\u0022https://www.uber.com/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022description\u0022:\u0022Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber's business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.\u0022,\u0022googlePlayAppID\u0022:\u0022com.ubercab\u0022,\u0022iPadAppID\u0022:\u0022368677368\u0022,\u0022iPhoneAppID\u0022:\u0022368677368\u0022,\u0022noIndex\u0022:false,\u0022ogDescription\u0022:\u0022Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber's business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.\u0022,\u0022ogImageURL\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/5e9a8304-130a-5d4f-8a34-035f6fe86c6d.png\u0022,\u0022ogSiteName\u0022:\u0022Uber\u0022,\u0022ogTitle\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\u0022,\u0022ogType\u0022:\u0022website\u0022,\u0022ogURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\u0022,\u0022twitterCard\u0022:\u0022summary\u0022,\u0022twitterSite\u0022:\u0022@Uber\u0022},\u0022templateID\u0022:\u0022193d3d76-be55-490f-8477-c4b7872b673a\u0022,\u0022updatedAt\u0022:\u00222026-04-01T00:23:09.4798Z\u0022},\u0022blockContentID\u0022:\u00229104187f-9dc3-41c1-8f92-35146853d342\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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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/de/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 Center\u0022,\u0022href\u0022:\u0022https://help.uber.com/\u0022,\u0022openInNewTab\u0022:false,\u0022text\u0022:\u0022Visit Help Center\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/de/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/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-de\u0022},{\u0022href\u0022:\u0022https://www.uber.com/hu/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-hu\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ci/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ci\u0022},{\u0022href\u0022:\u0022https://www.uber.com/jm/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-jm\u0022},{\u0022href\u0022:\u0022https://www.uber.com/gr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-gr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/sk/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-sk\u0022},{\u0022href\u0022:\u0022https://www.uber.com/tw/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-tw\u0022},{\u0022href\u0022:\u0022https://www.uber.com/co/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-co\u0022},{\u0022href\u0022:\u0022https://www.uber.com/pt/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-pt\u0022},{\u0022href\u0022:\u0022https://www.uber.com/bg/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-bg\u0022},{\u0022href\u0022:\u0022https://www.uber.com/be/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-be\u0022},{\u0022href\u0022:\u0022https://www.uber.com/at/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-at\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ie/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ie\u0022},{\u0022href\u0022:\u0022https://www.uber.com/dk/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-dk\u0022},{\u0022href\u0022:\u0022https://www.uber.com/au/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-au\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ro/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ro\u0022},{\u0022href\u0022:\u0022https://www.uber.com/pa/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-pa\u0022},{\u0022href\u0022:\u0022https://www.uber.com/iq/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-iq\u0022},{\u0022href\u0022:\u0022https://www.uber.com/us/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-us\u0022},{\u0022href\u0022:\u0022https://www.uber.com/tz/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-tz\u0022},{\u0022href\u0022:\u0022https://www.uber.com/mt/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-mt\u0022},{\u0022href\u0022:\u0022https://www.uber.com/za/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-za\u0022},{\u0022href\u0022:\u0022https://www.uber.com/uy/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-uy\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ae/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ae\u0022},{\u0022href\u0022:\u0022https://www.uber.com/lu/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-lu\u0022},{\u0022href\u0022:\u0022https://www.uber.com/se/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-se\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ca/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ca\u0022},{\u0022href\u0022:\u0022https://www.uber.com/bh/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-bh\u0022},{\u0022href\u0022:\u0022https://www.uber.com/tr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-tr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/py/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-py\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ch/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ch\u0022},{\u0022href\u0022:\u0022https://www.uber.com/jp/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-jp\u0022},{\u0022href\u0022:\u0022https://www.uber.com/cl/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-cl\u0022},{\u0022href\u0022:\u0022https://www.uber.com/eg/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-eg\u0022},{\u0022href\u0022:\u0022https://www.uber.com/lk/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-lk\u0022},{\u0022href\u0022:\u0022https://www.uber.com/do/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-do\u0022},{\u0022href\u0022:\u0022https://www.uber.com/mx/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-mx\u0022},{\u0022href\u0022:\u0022https://www.uber.com/sv/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-sv\u0022},{\u0022href\u0022:\u0022https://www.uber.com/cr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-cr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/es/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-es\u0022},{\u0022href\u0022:\u0022https://www.uber.com/pl/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-pl\u0022},{\u0022href\u0022:\u0022https://www.uber.com/hr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-hr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ke/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ke\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ng/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ng\u0022},{\u0022href\u0022:\u0022https://www.uber.com/jo/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-jo\u0022},{\u0022href\u0022:\u0022https://www.uber.com/fr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-fr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/hn/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-hn\u0022},{\u0022href\u0022:\u0022https://www.uber.com/fi/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-fi\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ec/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ec\u0022},{\u0022href\u0022:\u0022https://www.uber.com/gb/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-gb\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ug/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ug\u0022},{\u0022href\u0022:\u0022https://www.uber.com/bd/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-bd\u0022},{\u0022href\u0022:\u0022https://www.uber.com/no/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-no\u0022},{\u0022href\u0022:\u0022https://www.uber.com/pk/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-pk\u0022},{\u0022href\u0022:\u0022https://www.uber.com/lt/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-lt\u0022},{\u0022href\u0022:\u0022https://www.uber.com/qa/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-qa\u0022},{\u0022href\u0022:\u0022https://www.uber.com/pe/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-pe\u0022},{\u0022href\u0022:\u0022https://www.uber.com/in/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-in\u0022},{\u0022href\u0022:\u0022https://www.uber.com/cz/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-cz\u0022},{\u0022href\u0022:\u0022https://www.uber.com/sa/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-sa\u0022},{\u0022href\u0022:\u0022https://www.uber.com/br/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-br\u0022},{\u0022href\u0022:\u0022https://www.uber.com/si/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-si\u0022},{\u0022href\u0022:\u0022https://www.uber.com/hk/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-hk\u0022},{\u0022href\u0022:\u0022https://www.uber.com/kr/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-kr\u0022},{\u0022href\u0022:\u0022https://www.uber.com/kw/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-kw\u0022},{\u0022href\u0022:\u0022https://www.uber.com/gt/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-gt\u0022},{\u0022href\u0022:\u0022https://www.uber.com/nl/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-nl\u0022},{\u0022href\u0022:\u0022https://www.uber.com/rs/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-rs\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ma/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ma\u0022},{\u0022href\u0022:\u0022https://www.uber.com/il/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-il\u0022},{\u0022href\u0022:\u0022https://www.uber.com/nz/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-nz\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ua/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ua\u0022},{\u0022href\u0022:\u0022https://www.uber.com/ee/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-ee\u0022},{\u0022href\u0022:\u0022https://www.uber.com/lb/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-lb\u0022},{\u0022href\u0022:\u0022https://www.uber.com/it/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-it\u0022},{\u0022href\u0022:\u0022https://www.uber.com/gh/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-gh\u0022},{\u0022href\u0022:\u0022https://www.uber.com/mo/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022hreflang\u0022:\u0022en-mo\u0022}],\u0022isLoading\u0022:false,\u0022page\u0022:{\u0022isLive\u0022:true,\u0022publishedAt\u0022:\u00222022-09-29T09:30:00Z\u0022,\u0022updatedAt\u0022:\u00222026-04-01T00:23:09.4798Z\u0022},\u0022seo\u0022:{\u0022canonical\u0022:\u0022https://www.uber.com/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022description\u0022:\u0022Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber's business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.\u0022,\u0022googlePlayAppID\u0022:\u0022com.ubercab\u0022,\u0022iPadAppID\u0022:\u0022368677368\u0022,\u0022iPhoneAppID\u0022:\u0022368677368\u0022,\u0022noIndex\u0022:false,\u0022ogDescription\u0022:\u0022Long, long ago, the amount of data our systems output to logs was small enough that we were able to retain all of the log files. This allowed our engineers to freely analyze the logs, say for troubleshooting our systems or improving applications. But as Uber's business grew rapidly, the amount of data being logged increased dramatically. And so we were forced to discard log files after just a short period of time, given the prohibitive cost of retaining them–that is, until we integrated CLP into the logging library (Log4j) of our big data platform. In aggregate, CLP achieves a 169x compression ratio on our log data, saving storage, memory, and disk/network bandwidth at every level. As a result, we can now retain all logs at a fraction of the cost, without throwing away any insights, and the compressed logs can be efficiently searched without decompression.\u0022,\u0022ogImageURL\u0022:\u0022https://tb-static.uber.com/prod/udam-assets/5e9a8304-130a-5d4f-8a34-035f6fe86c6d.png\u0022,\u0022ogSiteName\u0022:\u0022Uber\u0022,\u0022ogTitle\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\u0022,\u0022ogType\u0022:\u0022website\u0022,\u0022ogURL\u0022:\u0022\u0022,\u0022title\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\u0022,\u0022twitterCard\u0022:\u0022summary\u0022,\u0022twitterSite\u0022:\u0022@Uber\u0022},\u0022template\u0022:{\u0022autoLinkingEnabled\u0022:false,\u0022createdAt\u0022:\u00222026-03-29T22:33:42.072Z\u0022,\u0022id\u0022:\u0022193d3d76-be55-490f-8477-c4b7872b673a\u0022,\u0022isCountryVariant\u0022:true,\u0022isDynamicTemplate\u0022:false,\u0022name\u0022:\u0022Reducing Logging Cost by Two Orders of Magnitude using CLP\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:\u0022reducing-logging-cost-by-two-orders-of-magnitude-using-clp.a9d97a8928fa436391e2dbcd4c9794b1\u0022},\u0022type\u0022:\u0022LOUVRE_BLOCK\u0022},{\u0022louvreBlock\u0022:{\u0022blockID\u0022:\u0022reducing-logging-cost-by-two-orders-of-magnitude-using-clp.6db54b4947cc4239ab79592ebb1fc885\u0022},\u0022type\u0022:\u0022LOUVRE_BLOCK\u0022},{\u0022louvreBlock\u0022:{\u0022blockID\u0022:\u0022reducing-logging-cost-by-two-orders-of-magnitude-using-clp.11023a8a51784d53a5ea2fcc41877d30\u0022},\u0022type\u0022:\u0022LOUVRE_BLOCK\u0022},{\u0022louvreBlock\u0022:{\u0022blockID\u0022:\u0022reducing-logging-cost-by-two-orders-of-magnitude-using-clp.3eba724a32a8495aadc42a33452b4dc0\u0022},\u0022type\u0022:\u0022LOUVRE_BLOCK\u0022},{\u0022louvreBlock\u0022:{\u0022blockID\u0022:\u0022reducing-logging-cost-by-two-orders-of-magnitude-using-clp.cdb52b85a1a44e9ab7a5b4cd1825d217\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:\u0022reducing-logging-cost-by-two-orders-of-magnitude-using-clp\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-21T01:06:56.120Z\u0022,\u0022parentID\u0022:\u002209273526-f4e8-4ed4-a975-efc8555ecb81\u0022},\u0022xpBlockKeys\u0022:[]}}},\u0022routes\u0022:{\u0022host\u0022:\u0022www.uber.com\u0022,\u0022location\u0022:{\u0022pathname\u0022:\u0022/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\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:\u0022be79da2b-363a-4adf-8096-1ccb3bee99b4\u0022,\u0022meta\u0022:{}}
</script>
<script id="__ROUTER_DATA__" type="application/json">
{\u0022page\u0022:\u0022/de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022,\u0022title\u0022:\u0022*\u0022,\u0022params\u0022:{\u0022*\u0022:\u0022de/en/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp/\u0022},\u0022routePath\u0022:\u0022*\u0022,\u0022routeMatched\u0022:true}
</script>
<script type="application/json" id="__FUSION_PLUGIN_PARAMETERS__">
{\u0022parameters\u0022:{}}
</script>
</body></html>