Andrew Cooke | Contents | Latest | RSS | Previous | Next

C[omp]ute

Welcome to my blog, which was once a mailing list of the same name and is still generated by mail. Please reply via the "comment" links.

Always interested in offers/projects/new ideas. Eclectic experience in fields like: numerical computing; Python web; Java enterprise; functional languages; GPGPU; SQL databases; etc. Based in Santiago, Chile; telecommute worldwide. CV; email.

Personal Projects

Choochoo Training Diary

Last 100 entries

=?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; =?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=; Surprise Paradox; [Books] Good Author List; [Computing] Efficient queries with grouping in Postgres; [Computing] Automatic Wake (Linux); [Computing] AWS CDK Aspects in Go; [Bike] Adidas Gravel Shoes; [Computing, Horror] Biological Chips; [Books] Weird Lit Recs; [Covid] Extended SIR Models; [Art] York-based Printmaker; [Physics] Quantum Transitions are not Instantaneous; [Computing] AI and Drum Machines; [Computing] Probabilities, Stopping Times, Martingales; bpftrace Intro Article; [Computing] Starlab Systems - Linux Laptops; [Computing] Extended Berkeley Packet Filter; [Green] Mainspring Linear Generator; Better Approach; Rummikub Solver; Chilean Poetry; Felicitations - Empowerment Grant; [Bike] Fixing Spyre Brakes (That Need Constant Adjustment); [Computing, Music] Raspberry Pi Media (Audio) Streamer; [Computing] Amazing Hack To Embed DSL In Python; [Bike] Ruta Del Condor (El Alfalfal); [Bike] Estimating Power On Climbs; [Computing] Applying Azure B2C Authentication To Function Apps; [Bike] Gearing On The Back Of An Envelope; [Computing] Okular and Postscript in OpenSuse; There's a fix!; [Computing] Fail2Ban on OpenSuse Leap 15.3 (NFTables); [Cycling, Computing] Power Calculation and Brakes; [Hardware, Computing] Amazing Pockit Computer; Bullying; How I Am - 3 Years Post Accident, 8+ Years With MS; [USA Politics] In America's Uncivil War Republicans Are The Aggressors; [Programming] Selenium and Python; Better Walking Data; [Bike] How Fast Before Walking More Efficient Than Cycling?; [COVID] Coronavirus And Cycling; [Programming] Docker on OpenSuse; Cadence v Speed; [Bike] Gearing For Real Cyclists; [Programming] React plotting - visx; [Programming] React Leaflet; AliExpress Independent Sellers; Applebaum - Twilight of Democracy; [Politics] Back + US Elections; [Programming,Exercise] Simple Timer Script; [News] 2019: The year revolt went global; [Politics] The world's most-surveilled cities

© 2006-2017 Andrew Cooke (site) / post authors (content).

[Bike] Notes on Servicing Suspension Forks

From: andrew cooke <andrew@...>

Date: Sat, 2 Sep 2017 10:44:17 -0300

[Note: this is based on my experience with a Rockshox 2016 SID RCT3,
so some details may not apply to other models or makes.]


Instructions

Rockshox provide detailed instructions that depend on the model year.
See https://www.sram.com/service/rockshox/all

Youtube also has many videos of people servicing forks, but it's
difficult to be sure of the exact model and year, so while they're
useful to give a general idea, some of the details can be wrong (for
example, there's an official Rockshox video that gives torque figures
that are completely wrong for my fork).

When you have the service manual, read through it several times.
There's a lot of information in there and it's better to understand
what you are doing before you open up the fork.


Parts

For my fork, at least, there are three types of parts kit, for
different types of service:

 * A full kit that contains seals, washers, valves - almost everything
   in the fork except for the "big" components (stanchions, lower,
   damper, rods).
   https://www.google.com/search?q=114018018001

 * A basic kit that contains the seals and washers needed for a normal
   (complete) service.
   https://www.google.com/search?q=004315032430
  
 * A dust seal kit that contains only the rings and seals at the top
   of the outers (don't have a part number for this).
   https://www.amazon.com/dp/B00H65GFMO

You can also buy multipacks of individual components, like foam rings
and crush washers.

Again: the above is for MY fork.  Your fork will require something
different.

Finding exactly which kit works for your fork can be difficult.  I
suggest starting on Amazon and then cross-checking part numbers until
you find consistent descriptions across several sites.  The Rockshox
parts catalogue may also be useful:
https://www.google.com/search?q=rockshox+parts+catalogue

In addition to the components above you need tools, alcohol (to
clean), oil and grease.  I use the Rockshox "butter" grease (even
though it's quite expensive), but generic (typically LiquiMoly) oils
of the correct weights (my fork takes two weights - a lighter oil for
the damper and a heavier one for lubricating the outers).


Types of Service

There are two kinds of service generally discussed:

 * You always remove the lowers and replace the foam rings and
   lubricating oil.  This makes sure the lowers are correctly
   lubricated.  For this, it may be worth buying packs of foam rings,
   crush washers, and the metal parts that go on the washers (these
   last two are the washers at the bottom of the lowers which you
   should really replace each time you remove the lowers because - as
   their name suggests - they deform on use).

 * With the lowers removed you can also service each fork leg
   separately.  However, the basic kit contains parts for both, so
   it's generally worth servicing the two sides together.  This means
   taking each side apart, cleaning, and re-assembling with new seals.

You can also take the forks apart to inspect them if you're trying to
solve some problem.  This generally involves removing the lowers first.


Servicing Tips

 * Take your time!  There's a lot of details to get right.  It's
   better to do everything slowly and double check than have a fork
   that doesn't work.

 * Clean your forks before disassembly - you don't want any dirt stuck
   around the top caps that ends up dropping into the inners.

 * The basic kit contains some seals that are almost-but-not-quite the
   same size as others.  Compare carefully so that you use exactly the
   right size.

 * To remove the lowers, after loosening the screws slightly, you need
   to hammer the screws to "unstick" the rods (see service manual).
   This takes a worrying amount of violence (I don't have a rubber
   mallet so use a steel hammer with a piece of wood to soften the
   blow).  When it does work the lowers come off quite easily.

 * Be very careful that the circlips are clicked completely into place
   when you re-assemble.

 * Getting the damper rod with the glide ring inserted correctly is
   particularly tricky.  Just keep fiddling and suddenly - eventually
   - it will slide in easily.

 * The amount of damping oil is specified in two ways in the manual -
   the total amount and the depth below the crown.  The easiest way to
   measure is (with the rod fully extended and the fork held
   vertically) to use a screwdriver as a "dipstick".  Rest the end of
   the handle of the screwdriver on the crown so that the blade is
   inside the fork, extending down to the oil level.  Then remove and
   measure the distance between handle and oil.

 * If you do the above, check for consistency by first filling with
   the correct volume.  It's not completely clear to me exactly where
   on the crown to measure from, so having a second measurement to
   check gives more certainty.

 * To remove a little damping oil you can use a (clean!) drinks straw
   - insert the straw into the oil then place your finger over the end
   and remove.

 * While the manual rebuilds one leg at a time I find it easier to
   completely disassemble the fork (both legs) and then rebuild.  But
   you need to be careful that you still follow all the instructions.

 * The screw that holds the LSC knob in place can come loose (and you
   lose knob and screw).  You can buy a replacement, but consider
   using locktite or placing a small patch of tape over the knob and
   screw (weirdly it's difficult to bug locktite in Chile...)

 * Not really a fork service tip, but black electrical tape is a much
   simpler and more reliable way to hold the brake hose in place than
   the fiddly clamp on the fork.

 * When replacing the lowers you add lubricating oil through the screw
   holes at the bottom.  Before doing this, make sure that the rods
   that connect to the screws are not blocking the holes!  In other
   words, before replacing the lowers press the two rods into the
   uppers (the damper rod won't go so far, but it's enough).

 * If you've pushed in the air rod (see above) when replacing the
   lowers, add a little air to push it back out before trying to
   connect the screws.

 * As far as I can tell the basic kit contains a couple of items you
   don't need / use.  I assume these are for other models.

 * If you do get seal sizes mixed up then next service you can't just
   match seals with what you used before (because they were wrong!).
   One solution is to buy the full service kit - at least the one I
   have has the seals divided by type, so it's clearer which one goes
   where.


Known Problems

These are mistakes I have made:

 * If a circlip is not correctly in place it may come undone when the
   fork is loaded.  On the air spring side this means that there is no
   negative spring - when unloaded the fork goes to full extension and
   does a hard stop.

 * If the damper rod is not fully extended when you replace the damper
   then (as far as I can tell - I have not seen this documented
   anywhere) the damper will have a partial vacuum when fully extended
   which reduces rebound.  The end result is that your fork has too
   much sag / not enough travel.

 * If you pressurise the damper without the nut on (at the top,
   holding the settings dial in place) then a shaft (and oil) can come
   flying out.  The shaft connects the LSC knob to the bottom of the
   damper and is easy to replace.  However, at the top it has a
   drilled hole that should contain two ball bearings separated by a
   spring.  Without these you don't get "clicks" when rotating the LSC
   knob.

 * If you use the wrong size (slightly) seal on the air piston then it
   starts to leak air after a few uses.

 * If the screw holes are blocked and you squirt lubricating oil in
   anyway (see tips above) the oil ends up in the "outside" ends of
   the lowers, and you'll see it dripping on the floor when you have
   the fork back on the bike.


I hope this is useful to someone and saves them from learning by (so
many!) mistakes,

Andrew

Removing Lowers

From: andrew cooke <andrewcooke@...>

Date: Thu, 16 Nov 2017 08:58:50 -0300

Just gave my lowers a quick service (should have done so earlier -
very dry and dirty seals).

I found that this made removing the lowers easier than before:

 * Place the fork upside down in the stand, with the grip around the
   lower (if you have a stand - I bought one recently, and it does
   help).

 * When loosening and then hammering the retaining screw (the most
   worrying part of the whole process IMHO), if you're careful you can
   see when it moves - the screw drops several mm, which is clearly
   visible if you're careful to compare something (eg a mark on the
   allen key) with the top of the lower.

Andrew

Solo Air Equalization

From: andrew cooke <andrew@...>

Date: Mon, 11 Dec 2017 15:55:48 -0300

A common problem I forgot to mention above (credit to MTBSPEC on
reddit) is Solo Air equalization.  This can be a problem at any time -
not just when servicing.


Background

In addition to the "positive spring" that resists compression of the
fork, forks have a "negative spring" that resists extension.  This is
partly so that when the fork extends (say, when you front wheel leaves
the ground) it comes to a soft stop (against the negative spring).

On Solo Air forks this negative spring is a separate air chamber below
the air piston.  The air pressure in this chamber is set automatically
by a very simple mechanism: there's a small notch on the inside of the
stanchion (you can see it when you have everything disassembled and
clean), and when the air piston passes this notch pressure in the
positive and negative spring chambers can equalize.

This is why, when you adjust the pressure in your fork, you need to
cycle the fork a few times - to let the air enter or leave the
negative chamber.  As a general rule, I find it's best to make a small
change to pressure, bounce the fork to equalize, and then change some
more.


The Problem

Anyway, unfortunately this notch can get blocked with grease, which
stops the pressure from equalizing correctly.  If the pressure is too
high then the fork doesn't extend as much as it should.  If it is too
low then the fork can not compress / sag correctly.  The only solution
I know to this problem (apart from a full service) is to bounce the
fork (or even pull it), perhaps also playing around with air pressure.

With enough jiggling, it tends to fix itself (sometimes you can hear
the air hiss through).


Andrew

=?UTF-8?B?VGhlIGJlc3QgY3VzdG9taXplZCBmcmVpZ2h0IHNvbHV0aW9uIGZyb20gRWFzZSBmcmVpZ2h0?=

From: Tina <freight@...>

Date: Fri, 28 Jun 2024 13:22:55 +0800 (GMT+08:00)

CkhpCgoKCgpHcmVldGluZ3MgZnJvbSBFYXNlRnJlaWdodCEgSSdtIFRpbmEsIHRoZSBGcmVpZ2h0
IE1hbmFnZXIgYXQgRWFzZUZyZWlnaHQsIGFuIEFJIGZyZWlnaHQgYWdlbnQgbmV0d29yayBlc3Rh
Ymxpc2hlZCB1bmRlciBOZXRlYXNlLCBhIENoaW5lc2UgcHVibGljbHkgbGlzdGVkIGNvbXBhbnkg
aW4gMjAwMS4gV2l0aCAxNSB5ZWFycyBvZiBleHBlcmllbmNlIGluIHRoZSBpbXBvcnQgYW5kIGV4
cG9ydCBpbmR1c3RyeSwgd2UgaGF2ZSBnYXRoZXJlZCBvdmVyIDEwLDAwMCBDaGluZXNlIGZyZWln
aHQgYWdlbnRzIHRvIGVuc3VyZSBvdXIgY3VzdG9tZXJzIHJlY2VpdmUgZWZmaWNpZW50IGFuZCBj
b3N0LWVmZmVjdGl2ZSBmcmVpZ2h0IHNlcnZpY2VzLgoKCldlIHN1cHBvcnQgeW91OgoxLk11bHRp
cGxlIGZyZWlnaHQgcXVvdGF0aW9ucyB0byBlbnN1cmUgeW91IGNob29zZSB0aGUgYmVzdCBzb2x1
dGlvbi4KMi5UaGUgcXVvdGF0aW9uIGRldGFpbHMgYXJlIHNwZWNpZmljIGFuZCBjb21wcmVoZW5z
aXZlLCBwcm92aWRpbmcgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGVhY2ggY29zdCBpbnZvbHZl
ZC4KMy5UcmFuc3BhcmVudCBwcmljaW5nLCBubyBtaWRkbGVtYW4gbWFya3Vwcy4KNC5PZmZlcmlu
ZyBhIHZhcmlldHkgb2Ygc2hpcHBpbmcgbWV0aG9kcyBmb3IgZmxleGlibGUgc2VsZWN0aW9uIGJh
c2VkIG9uIHNwZWNpZmljIG5lZWRzLgoKCgoKCldlIGJlbGlldmUgaW4gb3VyIGFiaWxpdHkgdG8g
cHJvdmlkZSB5b3Ugd2l0aCBjdXN0b21pemVkIHNlcnZpY2VzLCBlYXJuaW5nIHlvdXIgcmVjb2du
aXRpb24gdGhyb3VnaCBvdXIgcHJvZmVzc2lvbmFsaXNtLCBjYXBhYmlsaXRpZXMsIHNwZWVkLCBh
bmQgZWZmaWNpZW5jeSwgZW5zdXJpbmcgeW91IGVuam95IHRoZSBiZXN0IHNoaXBwaW5nIHNvbHV0
aW9ucy5QbGVhc2Uga2luZGx5IGNvbnRhY3QgdXMgbm93IGZvciBmcmVlIGNvbnRhaW5lciBzaGlw
cGluZyBxdW90ZSEKCgoKCkJlc3QgcmVnYXJkcywKVGluYSBYaWUKQ3VzdG9tZXIgUmVwcmVzZW50
YXRpdmUKCkVhc2VGcmVpZ2h0IChTdWJzaWRpYXJ5IG9mIE5ldEVhc2UpCgpXZWJzaXRlOiBlYXNl
LWZyZWlnaHQuY29tCkUtbWFpbDogdGluYUBlYXNlZnJlaWdodGluYy5jb20KCgoKQWRkcmVzczog
TmV0ZWFzZcKt4oCUMzk5IFdhbmdzaGFuZyBSb2FkLCBCaW5qaWFuZyBEaXN0cmljdCwgSGFuZ3po
b3UKCgoKCgoKCgoKCgpJZiB5b3UgZG9uJ3Qgd2FudCB0byByZWNlaXZlIG91ciBlbWFpbHMsIHlv
dSBjYW4gZWFzaWx5IHVuc3Vic2NyaWJlIGhlcmUuCgoKDQoNCg==

=?UTF-8?B?RXhjbHVzaXZlIEVhc2VGcmVpZ2h0IEZyZWlnaHQgU2VydmljZXMgdGFpbG9yZWQganVzdCBmb3IgeW91?=

From: Tina <freight@...>

Date: Thu, 4 Jul 2024 16:03:11 +0800 (GMT+08:00)

CkhpCgoKCgpIaSxuaWNlIHRvIGNvbnRhY3QgeW91IGFnYWluISBJJ20gVGluYSwgZnJlaWdodCBt
YW5hZ2VyIG9mIEVhc2VmcmVpZ2h0LCBmcm9tIHRoZSBBSSBmcmVpZ2h0IGFnZW50IG5ldHdvcmsg
b2YgTmV0RWFzZSwgYSBsaXN0ZWQgY29tcGFueSBpbiBDaGluYS5XZSBhcmUgbm90IGp1c3QgeW91
ciBwb2ludCBvZiBjb250YWN0IHdpdGggZnJlaWdodCBhZ2VudHMsIGJ1dCB5b3VyIGdsb2JhbCB0
cmFkZSBwYXJ0bmVyLCBvZmZlcmluZyBpbnNpZ2h0cyBhbmQgYWR2aWNlIHRvIG5hdmlnYXRlIHRo
ZSBjb21wbGV4aXRpZXMgb2YgaW50ZXJuYXRpb25hbCBzaGlwcGluZy4KCgpXZSBzdXBwb3J0IHlv
dToKIDEuT2ZmZXJzIGRlZGljYXRlZCBvbmUtb24tb25lIGN1c3RvbWVyIHNlcnZpY2UgcmVwcmVz
ZW50YXRpdmVzIGFuZCBwcm9tcHQgcXVvdGF0aW9ucwogMi5PZmZlciB0YWlsb3JlZCBmcmVpZ2h0
IHNvbHV0aW9ucyB0byBtZWV0IHRoZSB1bmlxdWUgcmVxdWlyZW1lbnRzIG9mIG91ciBjbGllbnRz
LgogMy5Qcm92aWRpbmcgcmVsaWFibGUgZnJlaWdodCBwYXJ0bmVycyBhbmQgaGF2ZSBvZmZpY2Vz
IGluIG1ham9yIHBvcnRzIGZvciBvbi1zaXRlIGF1ZGl0cwoKCk91ciBjdXN0b21lciBzdXBwb3J0
IHRlYW0gaXMgYWx3YXlzIHJlYWR5IHRvIGFzc2lzdCB3aXRoIGFueSBpbnF1aXJpZXMsIGVuc3Vy
aW5nIGEgc21vb3RoIGFuZCB3b3JyeS1mcmVlIGV4cGVyaWVuY2UuUGxlYXNlIGtpbmRseSByZXBs
eSB0byBnZXQgdGhlIGxhdGVzdCBmcmVlIG9mIGNoYXJnZSBDaGluYSBzaGlwcGluZyBxdW90ZXMh
CgoKCgoKQmVzdCByZWdhcmRzLApUaW5hIFhpZQpDdXN0b21lciBSZXByZXNlbnRhdGl2ZQoKRWFz
ZUZyZWlnaHQgKFN1YnNpZGlhcnkgb2YgTmV0RWFzZSkKCldlYnNpdGU6IGVhc2UtZnJlaWdodC5j
b20KRS1tYWlsOiB0aW5hQGVhc2VmcmVpZ2h0aW5jLmNvbQoKCgpBZGRyZXNzOiBOZXRlYXNlwq3i
gJQzOTkgV2FuZ3NoYW5nIFJvYWQsIEJpbmppYW5nIERpc3RyaWN0LCBIYW5nemhvdQoKCgoKCgoK
CgoKCklmIHlvdSBkb24ndCB3YW50IHRvIHJlY2VpdmUgb3VyIGVtYWlscywgeW91IGNhbiBlYXNp
bHkgdW5zdWJzY3JpYmUgaGVyZS4KCgoK5ZyoMjAyNC0wNi0yOO+8jFRpbmEgPGZyZWlnaHRAbG9n
aXN0aWNzZGlzdHJpYnV0aW9uY28uY29tPiDlhpnpgZM6LS0tLS3ljp/lp4vpgq7ku7YtLS0tLQog
5Y+R5Lu25Lq677yaIFRpbmEgPGZyZWlnaHRAbG9naXN0aWNzZGlzdHJpYnV0aW9uY28uY29tPgog
5Y+R5Lu25pe26Ze0OiAyMDI05bm0MDbmnIgyOOaXpSDlkajkupQKIOaUtuS7tuS6uu+8miBbY29t
cHV0ZStub3Rlc29uc2VyMEBhY29va2Uub3JnXQog5Li76aKY77yaIFRoZSBiZXN0IGN1c3RvbWl6
ZWQgZnJlaWdodCBzb2x1dGlvbiBmcm9tIEVhc2UgZnJlaWdodAoKCkhpCgoKCgpHcmVldGluZ3Mg
ZnJvbSBFYXNlRnJlaWdodCEgSSdtIFRpbmEsIHRoZSBGcmVpZ2h0IE1hbmFnZXIgYXQgRWFzZUZy
ZWlnaHQsIGFuIEFJIGZyZWlnaHQgYWdlbnQgbmV0d29yayBlc3RhYmxpc2hlZCB1bmRlciBOZXRl
YXNlLCBhIENoaW5lc2UgcHVibGljbHkgbGlzdGVkIGNvbXBhbnkgaW4gMjAwMS4gV2l0aCAxNSB5
ZWFycyBvZiBleHBlcmllbmNlIGluIHRoZSBpbXBvcnQgYW5kIGV4cG9ydCBpbmR1c3RyeSwgd2Ug
aGF2ZSBnYXRoZXJlZCBvdmVyIDEwLDAwMCBDaGluZXNlIGZyZWlnaHQgYWdlbnRzIHRvIGVuc3Vy
ZSBvdXIgY3VzdG9tZXJzIHJlY2VpdmUgZWZmaWNpZW50IGFuZCBjb3N0LWVmZmVjdGl2ZSBmcmVp
Z2h0IHNlcnZpY2VzLgoKCldlIHN1cHBvcnQgeW91OgogMS5NdWx0aXBsZSBmcmVpZ2h0IHF1b3Rh
dGlvbnMgdG8gZW5zdXJlIHlvdSBjaG9vc2UgdGhlIGJlc3Qgc29sdXRpb24uCiAyLlRoZSBxdW90
YXRpb24gZGV0YWlscyBhcmUgc3BlY2lmaWMgYW5kIGNvbXByZWhlbnNpdmUsIHByb3ZpZGluZyBh
IGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgZWFjaCBjb3N0IGludm9sdmVkLgogMy5UcmFuc3BhcmVu
dCBwcmljaW5nLCBubyBtaWRkbGVtYW4gbWFya3Vwcy4KIDQuT2ZmZXJpbmcgYSB2YXJpZXR5IG9m
IHNoaXBwaW5nIG1ldGhvZHMgZm9yIGZsZXhpYmxlIHNlbGVjdGlvbiBiYXNlZCBvbiBzcGVjaWZp
YyBuZWVkcy4KCgoKCgpXZSBiZWxpZXZlIGluIG91ciBhYmlsaXR5IHRvIHByb3ZpZGUgeW91IHdp
dGggY3VzdG9taXplZCBzZXJ2aWNlcywgZWFybmluZyB5b3VyIHJlY29nbml0aW9uIHRocm91Z2gg
b3VyIHByb2Zlc3Npb25hbGlzbSwgY2FwYWJpbGl0aWVzLCBzcGVlZCwgYW5kIGVmZmljaWVuY3ks
IGVuc3VyaW5nIHlvdSBlbmpveSB0aGUgYmVzdCBzaGlwcGluZyBzb2x1dGlvbnMuUGxlYXNlIGtp
bmRseSBjb250YWN0IHVzIG5vdyBmb3IgZnJlZSBjb250YWluZXIgc2hpcHBpbmcgcXVvdGUhCgoK
CgpCZXN0IHJlZ2FyZHMsClRpbmEgWGllCkN1c3RvbWVyIFJlcHJlc2VudGF0aXZlCgpFYXNlRnJl
aWdodCAoU3Vic2lkaWFyeSBvZiBOZXRFYXNlKQoKV2Vic2l0ZTogZWFzZS1mcmVpZ2h0LmNvbQpF
LW1haWw6IHRpbmFAZWFzZWZyZWlnaHRpbmMuY29tCgoKCkFkZHJlc3M6IE5ldGVhc2XCreKAlDM5
OSBXYW5nc2hhbmcgUm9hZCwgQmluamlhbmcgRGlzdHJpY3QsIEhhbmd6aG91CgoKCgoKCgoKCgoK
SWYgeW91IGRvbid0IHdhbnQgdG8gcmVjZWl2ZSBvdXIgZW1haWxzLCB5b3UgY2FuIGVhc2lseSB1
bnN1YnNjcmliZSBoZXJlLgoKCgoKDQoNCg==

Comment on this post