expiring tasks who are holding semaphores

Mike Galbraith (efault@gmx.de)
Thu, 24 Apr 2003 12:15:01 +0200


This is a MIME-formatted message. If you see this text it means that your
E-mail software does not support MIME-formatted messages.

--=_courier-7189-1051179094-0001-2
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Greetings Folks,

In order to explore why SCHED_RR tasks are being delayed under load on my
box, I added some debug code to semaphores (knew it was proc for [RR]
vmstat, but what about others?). At the moment, normal semaphores only
record the fact that they have been downed in the owner's task
struct. rw_semaphores, however, also have some timeout code (lib/rwsem.c)
to find out _who_ is holding the semaphore for so long. In
scheduler_tick(), I print out stats as to how many expires/second, along
with the number of tasks which were expired while holding a semaphore. See
the attached logs... the numbers seems _awfully_ high to me, and if I
prevent expiration of these guys, most of my SCHED_RR vmstat/top stalls
just go away.

I'm wondering if it's worth while adding the wrappers and starvation
timeout code to normal semaphores (hmm, what about spinlocks... we do have
a might_sleep check which amounts to the same thing if you send any lock
holder off to the expired land when there are interactive tasks doing round
robin) to see if anybody starves for these. The same random thoughts occur
for yield() for normal tasks, though I've yet to trigger a printk there.

Anyway, logs attached in case they might be of interest.

-Mike

P.S. logs are from 67-mm4 in case anyone looks up line numbers and
wonders. There are no twiddlings from yours truely other than the
semaphore stuff... it's virgin code, no wild/crazy/stupid experiments ;-)
--=_courier-7189-1051179094-0001-2
Content-Type: text/plain; name="xx.txt"; x-mac-type=42494E41; x-mac-creator=74747874; charset=iso-8859-1
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="xx.txt"

U3lzUnEgOiBDaGFuZ2luZyBMb2dsZXZlbApMb2dsZXZlbCBzZXQgdG8gOQowIGV4cGlyZXMvc2Vj
LCAwIHdpdGggc2VtIGRvd24uCjAgZXhwaXJlcy9zZWMsIDAgd2l0aCBzZW0gZG93bi4KMTkgZXhw
aXJlcy9zZWMsIDkgd2l0aCBzZW0gZG93bi4KOSBleHBpcmVzL3NlYywgMCB3aXRoIHNlbSBkb3du
LgoyNiBleHBpcmVzL3NlYywgMyB3aXRoIHNlbSBkb3duLgoxNiBleHBpcmVzL3NlYywgMSB3aXRo
IHNlbSBkb3duLgozIGV4cGlyZXMvc2VjLCAxIHdpdGggc2VtIGRvd24uCjE2IGV4cGlyZXMvc2Vj
LCAxIHdpdGggc2VtIGRvd24uCjEzIGV4cGlyZXMvc2VjLCAyIHdpdGggc2VtIGRvd24uCjI4IGV4
cGlyZXMvc2VjLCA5IHdpdGggc2VtIGRvd24uCjggZXhwaXJlcy9zZWMsIDEgd2l0aCBzZW0gZG93
bi4KOSBleHBpcmVzL3NlYywgMiB3aXRoIHNlbSBkb3duLgoxMSBleHBpcmVzL3NlYywgMiB3aXRo
IHNlbSBkb3duLgo1IGV4cGlyZXMvc2VjLCAxIHdpdGggc2VtIGRvd24uCjI3IGV4cGlyZXMvc2Vj
LCA1IHdpdGggc2VtIGRvd24uCjE1IGV4cGlyZXMvc2VjLCAxIHdpdGggc2VtIGRvd24uCjMgZXhw
aXJlcy9zZWMsIDAgd2l0aCBzZW0gZG93bi4KMTMgZXhwaXJlcy9zZWMsIDAgd2l0aCBzZW0gZG93
bi4KMTIgZXhwaXJlcy9zZWMsIDIgd2l0aCBzZW0gZG93bi4KMzAxOi0yIHN0YXJ2ZWQgMSBzZWNz
IGJ5IDExODQ2OjIzIHdobyBsYXN0IHJhbiAxNDU5IHRpY2tzIGFnby4Kc2VtYXBob3JlIGRvd25l
ZCBhdCBrZXJuZWwvZm9yay5jOjI2MC4Kc2ggICAgICAgICAgICBEIEM3RTg0Rjg0IDExODQ2ICAx
MTg0NSAgICAgICAgICAgICAgICAgICAgIChOT1RMQikKQ2FsbCBUcmFjZToKIFs8YzAxNGI4YmM+
XSBwdGVfY2hhaW5fYWxsb2MrMHg3OC8weDgyCiBbPGMwMTA3Y2I4Pl0gX19kb3duKzB4ZjQvMHgx
YzQKIFs8YzAxMWI0NTg+XSBkZWZhdWx0X3dha2VfZnVuY3Rpb24rMHgwLzB4MWMKIFs8YzAxMDgw
NDQ+XSBfX2Rvd25fZmFpbGVkKzB4OC8weGMKIFs8YzAxMWY4NDQ+XSAudGV4dC5sb2NrLmZvcmsr
MHgxMS8weDVkCiBbPGMwMTFlZmYwPl0gY29weV9wcm9jZXNzKzB4NjdjLzB4ZDI0CiBbPGMwMTFm
NzExPl0gZG9fZm9yaysweDc5LzB4MTY0CiBbPGMwMTA3NzI4Pl0gc3lzX2ZvcmsrMHgxOC8weDJj
CiBbPGMwMTA5MTgzPl0gc3lzY2FsbF9jYWxsKzB4Ny8weGIKCjMyNjU6LTIgc3RhcnZlZCAxIHNl
Y3MgYnkgMTE4NDM6MjUgd2hvIGxhc3QgcmFuIDExODkgdGlja3MgYWdvLgpzZW1hcGhvcmUgZG93
bmVkIGF0IGZzL2JpbmZtdF9lbGYuYzoyNjQuCmNjMSAgICAgICAgICAgRCBDN0U4NEY4NCAxMTg0
MyAgMTE4NDEgICAgICAgICAxMTg0NCAxMTg0MiAoTk9UTEIpCkNhbGwgVHJhY2U6CiBbPGMwMTA3
Y2I4Pl0gX19kb3duKzB4ZjQvMHgxYzQKIFs8YzAxMWI0NTg+XSBkZWZhdWx0X3dha2VfZnVuY3Rp
b24rMHgwLzB4MWMKIFs8YzAxMDgwNDQ+XSBfX2Rvd25fZmFpbGVkKzB4OC8weGMKIFs8YzAxNDhi
MGY+XSAudGV4dC5sb2NrLm1tYXArMHgzOS8weGJhCiBbPGMwMTQ3YjgwPl0gZG9fbW1hcF9wZ29m
ZisweDRhNC8weDYzMAogWzxjMDE3Y2E2Mj5dIGVsZl9tYXArMHhiMi8weGYwCiBbPGMwMTdjYmYz
Pl0gbG9hZF9lbGZfaW50ZXJwKzB4MTUzLzB4MjI0CiBbPGMwMTdkNGZiPl0gbG9hZF9lbGZfYmlu
YXJ5KzB4NzE3LzB4YTYwCiBbPGMwMTdjZGU0Pl0gbG9hZF9lbGZfYmluYXJ5KzB4MC8weGE2MAog
WzxjMDExOTcxNT5dIGNoYW5nZV9wYWdlX2F0dHIrMHg2ZC8weGM0CiBbPGMwMTYwMzNkPl0gc2Vh
cmNoX2JpbmFyeV9oYW5kbGVyKzB4ZTUvMHgyZDgKIFs8YzAxNjA2YjM+XSBkb19leGVjdmUrMHgx
ODMvMHgyMDQKMSBleHBpcmVzL3NlYywgMCB3aXRoIHNlbSBkb3duLgogWzxjMDE2MDZjYT5dIGRv
X2V4ZWN2ZSsweDE5YS8weDIwNAogWzxjMDEwNzdkYj5dIHN5c19leGVjdmUrMHgyZi8weDZjCiBb
PGMwMTA5MTgzPl0gc3lzY2FsbF9jYWxsKzB4Ny8weGIKCjE1IGV4cGlyZXMvc2VjLCAxIHdpdGgg
c2VtIGRvd24uCjEzIGV4cGlyZXMvc2VjLCA0IHdpdGggc2VtIGRvd24uCjE0IGV4cGlyZXMvc2Vj
LCAzIHdpdGggc2VtIGRvd24uCjMwMTotMiBzdGFydmVkIDEgc2VjcyBieSAxMTg2MjoyNSB3aG8g
bGFzdCByYW4gMTkxMCB0aWNrcyBhZ28uCnNlbWFwaG9yZSBkb3duZWQgYXQgYXJjaC9pMzg2L2tl
cm5lbC9zeXNfaTM4Ni5jOjU4LgpjYzEgICAgICAgICAgIFIgQzdGRUQ4RDQgMTE4NjIgIDExODU1
ICAgICAgICAgMTE4NjMgMTE4NjEgKE5PVExCKQpDYWxsIFRyYWNlOgogWzxjMDEwOTBjZD5dIG5l
ZWRfcmVzY2hlZCsweDI3LzB4MzIKIFs8YzAxM2VhZjk+XSBrbWVtX2NhY2hlX2FsbG9jKzB4ODEv
MHgxNTgKIFs8YzAxNDdhM2E+XSBkb19tbWFwX3Bnb2ZmKzB4MzVlLzB4NjMwCiBbPGMwMTBmZDFl
Pl0gb2xkX21tYXArMHgxMjIvMHgxNzAKIFs8YzAxMDkxODM+XSBzeXNjYWxsX2NhbGwrMHg3LzB4
YgoKMTAgZXhwaXJlcy9zZWMsIDQgd2l0aCBzZW0gZG93bi4KNyBleHBpcmVzL3NlYywgMCB3aXRo
IHNlbSBkb3duLgoxMCBleHBpcmVzL3NlYywgMyB3aXRoIHNlbSBkb3duLgo4IGV4cGlyZXMvc2Vj
LCAxIHdpdGggc2VtIGRvd24uCjggZXhwaXJlcy9zZWMsIDIgd2l0aCBzZW0gZG93bi4KNiBleHBp
cmVzL3NlYywgMiB3aXRoIHNlbSBkb3duLgoxMCBleHBpcmVzL3NlYywgMyB3aXRoIHNlbSBkb3du
Lgo5IGV4cGlyZXMvc2VjLCAyIHdpdGggc2VtIGRvd24uCjExIGV4cGlyZXMvc2VjLCA0IHdpdGgg
c2VtIGRvd24uCjE1IGV4cGlyZXMvc2VjLCA0IHdpdGggc2VtIGRvd24uCjMyNjU6LTIgc3RhcnZl
ZCAxIHNlY3MgYnkgMTE5MDU6MjMgd2hvIGxhc3QgcmFuIDE2MDkgdGlja3MgYWdvLgpzZW1hcGhv
cmUgZG93bmVkIGF0IG1tL21tYXAuYzoxMzE4LgphcyAgICAgICAgICAgIFIgQzdBQjk3OTQgMTE5
MDUgIDExOTAyICAgICAgICAgICAgICAgMTE5MDQgKE5PVExCKQpDYWxsIFRyYWNlOgogWzxjMDE0
ODU2Yz5dIGRvX211bm1hcCsweDEyMC8weDE2YwogWzxjMDExYjQzYz5dIHByZWVtcHRfc2NoZWR1
bGUrMHgyYy8weDQ4CiBbPGMwMTQ4NWEyPl0gZG9fbXVubWFwKzB4MTU2LzB4MTZjCiBbPGMwMTQ4
NjE1Pl0gc3lzX211bm1hcCsweDVkLzB4ODgKIFs8YzAxMDkxODM+XSBzeXNjYWxsX2NhbGwrMHg3
LzB4YgoKMzAxOi0yIHN0YXJ2ZWQgMSBzZWNzIGJ5IDExOTA1OjIzIHdobyBsYXN0IHJhbiAxNjg2
IHRpY2tzIGFnby4Kc2VtYXBob3JlIGRvd25lZCBhdCBtbS9tbWFwLmM6MTMxOC4KYXMgICAgICAg
ICAgICBSIEM3QUI5Nzk0IDExOTA1ICAxMTkwMiAgICAgICAgICAgICAgIDExOTA0IChOT1RMQikK
Q2FsbCBUcmFjZToKIFs8YzAxNDg1NmM+XSBkb19tdW5tYXArMHgxMjAvMHgxNmMKIFs8YzAxMWI0
M2M+XSBwcmVlbXB0X3NjaGVkdWxlKzB4MmMvMHg0OAogWzxjMDE0ODVhMj5dIGRvX211bm1hcCsw
eDE1Ni8weDE2YwogWzxjMDE0ODYxNT5dIHN5c19tdW5tYXArMHg1ZC8weDg4CiBbPGMwMTA5MTgz
Pl0gc3lzY2FsbF9jYWxsKzB4Ny8weGIKCjEyIGV4cGlyZXMvc2VjLCAyIHdpdGggc2VtIGRvd24u
CjEyIGV4cGlyZXMvc2VjLCA1IHdpdGggc2VtIGRvd24uCjExIGV4cGlyZXMvc2VjLCA1IHdpdGgg
c2VtIGRvd24uCjkgZXhwaXJlcy9zZWMsIDMgd2l0aCBzZW0gZG93bi4KMTEgZXhwaXJlcy9zZWMs
IDQgd2l0aCBzZW0gZG93bi4KMTIgZXhwaXJlcy9zZWMsIDMgd2l0aCBzZW0gZG93bi4KMTAgZXhw
aXJlcy9zZWMsIDQgd2l0aCBzZW0gZG93bi4KMzI2NTotMiBzdGFydmVkIDEgc2VjcyBieSAxMTk3
NToyNCB3aG8gbGFzdCByYW4gMTE4MyB0aWNrcyBhZ28uCnNlbWFwaG9yZSBkb3duZWQgYXQgbW0v
bXByb3RlY3QuYzoyNDIuCnNlZCAgICAgICAgICAgUiAwMDAwMDEyQiAxMTk3NSAgMTE5NzMgICAg
ICAgICAgICAgICAxMTk3NCAoTk9UTEIpCkNhbGwgVHJhY2U6CiBbPGMwMTFiNDNjPl0gcHJlZW1w
dF9zY2hlZHVsZSsweDJjLzB4NDgKIFs8YzAxNDczOWY+XSBtb3ZlX3ZtYV9zdGFydCsweDE3Zi8w
eDE4OAogWzxjMDE0ODNmMj5dIHNwbGl0X3ZtYSsweDdhLzB4ZDQKIFs8YzAxNDhmOGU+XSBtcHJv
dGVjdF9maXh1cCsweGIyLzB4MTc4CiBbPGMwMTQ5MWQzPl0gc3lzX21wcm90ZWN0KzB4MTdmLzB4
MmQ5CiBbPGMwMTA5MTgzPl0gc3lzY2FsbF9jYWxsKzB4Ny8weGIKCjMwMTotMiBzdGFydmVkIDEg
c2VjcyBieSAxMTk3NToyNCB3aG8gbGFzdCByYW4gMTc1NSB0aWNrcyBhZ28uCnNlbWFwaG9yZSBk
b3duZWQgYXQgbW0vbXByb3RlY3QuYzoyNDIuCnNlZCAgICAgICAgICAgUiAwMDAwMDEyQiAxMTk3
NSAgMTE5NzMgICAgICAgICAgICAgICAxMTk3NCAoTk9UTEIpCkNhbGwgVHJhY2U6CiBbPGMwMTFi
NDNjPl0gcHJlZW1wdF9zY2hlZHVsZSsweDJjLzB4NDgKIFs8YzAxNDczOWY+XSBtb3ZlX3ZtYV9z
dGFydCsweDE3Zi8weDE4OAogWzxjMDE0ODNmMj5dIHNwbGl0X3ZtYSsweDdhLzB4ZDQKIFs8YzAx
NDhmOGU+XSBtcHJvdGVjdF9maXh1cCsweGIyLzB4MTc4CiBbPGMwMTQ5MWQzPl0gc3lzX21wcm90
ZWN0KzB4MTdmLzB4MmQ5CiBbPGMwMTA5MTgzPl0gc3lzY2FsbF9jYWxsKzB4Ny8weGIKCjggZXhw
aXJlcy9zZWMsIDAgd2l0aCBzZW0gZG93bi4KMzI2NTotMiBzdGFydmVkIDIgc2VjcyBieSAxMTk3
NToyNCB3aG8gbGFzdCByYW4gMjIwMCB0aWNrcyBhZ28uCnNlbWFwaG9yZSBkb3duZWQgYXQgbW0v
bXByb3RlY3QuYzoyNDIuCnNlZCAgICAgICAgICAgUiAwMDAwMDEyQiAxMTk3NSAgMTE5NzMgICAg
ICAgICAgICAgICAxMTk3NCAoTk9UTEIpCkNhbGwgVHJhY2U6CiBbPGMwMTFiNDNjPl0gcHJlZW1w
dF9zY2hlZHVsZSsweDJjLzB4NDgKIFs8YzAxNDczOWY+XSBtb3ZlX3ZtYV9zdGFydCsweDE3Zi8w
eDE4OAogWzxjMDE0ODNmMj5dIHNwbGl0X3ZtYSsweDdhLzB4ZDQKIFs8YzAxNDhmOGU+XSBtcHJv
dGVjdF9maXh1cCsweGIyLzB4MTc4CiBbPGMwMTQ5MWQzPl0gc3lzX21wcm90ZWN0KzB4MTdmLzB4
MmQ5CiBbPGMwMTA5MTgzPl0gc3lzY2FsbF9jYWxsKzB4Ny8weGIKCjMwMTotMiBzdGFydmVkIDIg
c2VjcyBieSAxMTk3NToyNCB3aG8gbGFzdCByYW4gMjc2OCB0aWNrcyBhZ28uCnNlbWFwaG9yZSBk
b3duZWQgYXQgbW0vbXByb3RlY3QuYzoyNDIuCnNlZCAgICAgICAgICAgUiAwMDAwMDEyQiAxMTk3
NSAgMTE5NzMgICAgICAgICAgICAgICAxMTk3NCAoTk9UTEIpCkNhbGwgVHJhY2U6CiBbPGMwMTFi
NDNjPl0gcHJlZW1wdF9zY2hlZHVsZSsweDJjLzB4NDgKIFs8YzAxNDczOWY+XSBtb3ZlX3ZtYV9z
dGFydCsweDE3Zi8weDE4OAogWzxjMDE0ODNmMj5dIHNwbGl0X3ZtYSsweDdhLzB4ZDQKIFs8YzAx
NDhmOGU+XSBtcHJvdGVjdF9maXh1cCsweGIyLzB4MTc4CiBbPGMwMTQ5MWQzPl0gc3lzX21wcm90
ZWN0KzB4MTdmLzB4MmQ5CiBbPGMwMTA5MTgzPl0gc3lzY2FsbF9jYWxsKzB4Ny8weGIKCjE1IGV4
cGlyZXMvc2VjLCAyIHdpdGggc2VtIGRvd24uCjEwIGV4cGlyZXMvc2VjLCA0IHdpdGggc2VtIGRv
d24uCjQgZXhwaXJlcy9zZWMsIDAgd2l0aCBzZW0gZG93bi4KMCBleHBpcmVzL3NlYywgMCB3aXRo
IHNlbSBkb3duLgpTeXNScSA6IENoYW5naW5nIExvZ2xldmVsCkxvZ2xldmVsIHNldCB0byAwCg==
--=_courier-7189-1051179094-0001-2
Content-Type: text/plain; name="yy.txt"; x-mac-type=42494E41; x-mac-creator=74747874; charset=iso-8859-1
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="yy.txt"

U3lzUnEgOiBDaGFuZ2luZyBMb2dsZXZlbApMb2dsZXZlbCBzZXQgdG8gOQowIGV4cGlyZXMvc2Vj
LCAwIHdpdGggc2VtIGRvd24uCjAgZXhwaXJlcy9zZWMsIDAgd2l0aCBzZW0gZG93bi4KMTMgZXhw
aXJlcy9zZWMsIDcgd2l0aCBzZW0gZG93bi4KMTcgZXhwaXJlcy9zZWMsIDIgd2l0aCBzZW0gZG93
bi4KMTMgZXhwaXJlcy9zZWMsIDEgd2l0aCBzZW0gZG93bi4KMTkgZXhwaXJlcy9zZWMsIDIgd2l0
aCBzZW0gZG93bi4KMTAgZXhwaXJlcy9zZWMsIDMgd2l0aCBzZW0gZG93bi4KMTkgZXhwaXJlcy9z
ZWMsIDMgd2l0aCBzZW0gZG93bi4KNCBleHBpcmVzL3NlYywgMCB3aXRoIHNlbSBkb3duLgo4IGV4
cGlyZXMvc2VjLCAzIHdpdGggc2VtIGRvd24uCjE0IGV4cGlyZXMvc2VjLCAxIHdpdGggc2VtIGRv
d24uCjggZXhwaXJlcy9zZWMsIDMgd2l0aCBzZW0gZG93bi4KMjggZXhwaXJlcy9zZWMsIDQgd2l0
aCBzZW0gZG93bi4KNCBleHBpcmVzL3NlYywgMSB3aXRoIHNlbSBkb3duLgoxNiBleHBpcmVzL3Nl
YywgMCB3aXRoIHNlbSBkb3duLgozIGV4cGlyZXMvc2VjLCAyIHdpdGggc2VtIGRvd24uCjE2IGV4
cGlyZXMvc2VjLCAwIHdpdGggc2VtIGRvd24uCjI0IGV4cGlyZXMvc2VjLCAzIHdpdGggc2VtIGRv
d24uCjMwMTotMiBzdGFydmVkIDEgc2VjcyBieSA5MDg1OjI1IHdobyBsYXN0IHJhbiAxMTYyIHRp
Y2tzIGFnby4Kc2VtYXBob3JlIGRvd25lZCBhdCBtbS9tcHJvdGVjdC5jOjI0Mi4KZ2NjICAgICAg
ICAgICBSIDAwMDAwMTJCICA5MDg1ICAgODc4OSAgICAgICAgICAgICAgICAgICAgIChOT1RMQikK
Q2FsbCBUcmFjZToKIFs8YzAxMWI0M2M+XSBwcmVlbXB0X3NjaGVkdWxlKzB4MmMvMHg0OAogWzxj
MDE0NzM5Zj5dIG1vdmVfdm1hX3N0YXJ0KzB4MTdmLzB4MTg4CiBbPGMwMTQ4M2YyPl0gc3BsaXRf
dm1hKzB4N2EvMHhkNAogWzxjMDE0OGY4ZT5dIG1wcm90ZWN0X2ZpeHVwKzB4YjIvMHgxNzgKIFs8
YzAxNDkxZDM+XSBzeXNfbXByb3RlY3QrMHgxN2YvMHgyZDkKIFs8YzAxMDkxODM+XSBzeXNjYWxs
X2NhbGwrMHg3LzB4YgoKMTEgZXhwaXJlcy9zZWMsIDEgd2l0aCBzZW0gZG93bi4KMzI2NTotMiBz
dGFydmVkIDEgc2VjcyBieSA5MDg1OjI1IHdobyBsYXN0IHJhbiAxMzM4IHRpY2tzIGFnby4Kc2Vt
YXBob3JlIGRvd25lZCBhdCBtbS9tcHJvdGVjdC5jOjI0Mi4KZ2NjICAgICAgICAgICBSIDAwMDAw
MTJCICA5MDg1ICAgODc4OSAgICAgICAgICAgICAgICAgICAgIChOT1RMQikKQ2FsbCBUcmFjZToK
IFs8YzAxMWI0M2M+XSBwcmVlbXB0X3NjaGVkdWxlKzB4MmMvMHg0OAogWzxjMDE0NzM5Zj5dIG1v
dmVfdm1hX3N0YXJ0KzB4MTdmLzB4MTg4CiBbPGMwMTQ4M2YyPl0gc3BsaXRfdm1hKzB4N2EvMHhk
NAogWzxjMDE0OGY4ZT5dIG1wcm90ZWN0X2ZpeHVwKzB4YjIvMHgxNzgKIFs8YzAxNDkxZDM+XSBz
eXNfbXByb3RlY3QrMHgxN2YvMHgyZDkKIFs8YzAxMDkxODM+XSBzeXNjYWxsX2NhbGwrMHg3LzB4
YgoKMTkgZXhwaXJlcy9zZWMsIDcgd2l0aCBzZW0gZG93bi4KMjMgZXhwaXJlcy9zZWMsIDggd2l0
aCBzZW0gZG93bi4KMjcgZXhwaXJlcy9zZWMsIDggd2l0aCBzZW0gZG93bi4KOSBleHBpcmVzL3Nl
YywgMyB3aXRoIHNlbSBkb3duLgoyMSBleHBpcmVzL3NlYywgNSB3aXRoIHNlbSBkb3duLgoyMiBl
eHBpcmVzL3NlYywgOCB3aXRoIHNlbSBkb3duLgo5IGV4cGlyZXMvc2VjLCAwIHdpdGggc2VtIGRv
d24uCjE1IGV4cGlyZXMvc2VjLCA0IHdpdGggc2VtIGRvd24uCjIyIGV4cGlyZXMvc2VjLCA1IHdp
dGggc2VtIGRvd24uCjE3IGV4cGlyZXMvc2VjLCAzIHdpdGggc2VtIGRvd24uCjExIGV4cGlyZXMv
c2VjLCAzIHdpdGggc2VtIGRvd24uCjIyIGV4cGlyZXMvc2VjLCA0IHdpdGggc2VtIGRvd24uCjEw
IGV4cGlyZXMvc2VjLCAyIHdpdGggc2VtIGRvd24uCjE3IGV4cGlyZXMvc2VjLCAyIHdpdGggc2Vt
IGRvd24uCjYgZXhwaXJlcy9zZWMsIDEgd2l0aCBzZW0gZG93bi4KMTkgZXhwaXJlcy9zZWMsIDQg
d2l0aCBzZW0gZG93bi4KMTMgZXhwaXJlcy9zZWMsIDIgd2l0aCBzZW0gZG93bi4KMTAgZXhwaXJl
cy9zZWMsIDMgd2l0aCBzZW0gZG93bi4KMTYgZXhwaXJlcy9zZWMsIDYgd2l0aCBzZW0gZG93bi4K
MTMgZXhwaXJlcy9zZWMsIDQgd2l0aCBzZW0gZG93bi4KMTQgZXhwaXJlcy9zZWMsIDQgd2l0aCBz
ZW0gZG93bi4KMTUgZXhwaXJlcy9zZWMsIDQgd2l0aCBzZW0gZG93bi4KMTMgZXhwaXJlcy9zZWMs
IDMgd2l0aCBzZW0gZG93bi4KOSBleHBpcmVzL3NlYywgMiB3aXRoIHNlbSBkb3duLgo5IGV4cGly
ZXMvc2VjLCA0IHdpdGggc2VtIGRvd24uCjggZXhwaXJlcy9zZWMsIDUgd2l0aCBzZW0gZG93bi4K
NiBleHBpcmVzL3NlYywgMiB3aXRoIHNlbSBkb3duLgo2IGV4cGlyZXMvc2VjLCAzIHdpdGggc2Vt
IGRvd24uCjIgZXhwaXJlcy9zZWMsIDAgd2l0aCBzZW0gZG93bi4KNCBleHBpcmVzL3NlYywgNCB3
aXRoIHNlbSBkb3duLgo0IGV4cGlyZXMvc2VjLCAxIHdpdGggc2VtIGRvd24uCjIgZXhwaXJlcy9z
ZWMsIDIgd2l0aCBzZW0gZG93bi4KNSBleHBpcmVzL3NlYywgMyB3aXRoIHNlbSBkb3duLgo5IGV4
cGlyZXMvc2VjLCAyIHdpdGggc2VtIGRvd24uCjkgZXhwaXJlcy9zZWMsIDUgd2l0aCBzZW0gZG93
bi4KOSBleHBpcmVzL3NlYywgOCB3aXRoIHNlbSBkb3duLgo3IGV4cGlyZXMvc2VjLCA1IHdpdGgg
c2VtIGRvd24uCjMgZXhwaXJlcy9zZWMsIDMgd2l0aCBzZW0gZG93bi4KMTEgZXhwaXJlcy9zZWMs
IDUgd2l0aCBzZW0gZG93bi4KMTQgZXhwaXJlcy9zZWMsIDkgd2l0aCBzZW0gZG93bi4KMTIgZXhw
aXJlcy9zZWMsIDMgd2l0aCBzZW0gZG93bi4KMTEgZXhwaXJlcy9zZWMsIDIgd2l0aCBzZW0gZG93
bi4KOSBleHBpcmVzL3NlYywgMSB3aXRoIHNlbSBkb3duLgo4IGV4cGlyZXMvc2VjLCAxIHdpdGgg
c2VtIGRvd24uCjkgZXhwaXJlcy9zZWMsIDUgd2l0aCBzZW0gZG93bi4KMiBleHBpcmVzL3NlYywg
MCB3aXRoIHNlbSBkb3duLgoxIGV4cGlyZXMvc2VjLCAxIHdpdGggc2VtIGRvd24uCjcgZXhwaXJl
cy9zZWMsIDUgd2l0aCBzZW0gZG93bi4KMyBleHBpcmVzL3NlYywgMiB3aXRoIHNlbSBkb3duLgox
MCBleHBpcmVzL3NlYywgMTAgd2l0aCBzZW0gZG93bi4KMyBleHBpcmVzL3NlYywgMCB3aXRoIHNl
bSBkb3duLgoxIGV4cGlyZXMvc2VjLCAxIHdpdGggc2VtIGRvd24uCjIgZXhwaXJlcy9zZWMsIDAg
d2l0aCBzZW0gZG93bi4KMyBleHBpcmVzL3NlYywgMiB3aXRoIHNlbSBkb3duLgozIGV4cGlyZXMv
c2VjLCAzIHdpdGggc2VtIGRvd24uCjIgZXhwaXJlcy9zZWMsIDAgd2l0aCBzZW0gZG93bi4KMCBl
eHBpcmVzL3NlYywgMCB3aXRoIHNlbSBkb3duLgozIGV4cGlyZXMvc2VjLCAzIHdpdGggc2VtIGRv
d24uCjQgZXhwaXJlcy9zZWMsIDAgd2l0aCBzZW0gZG93bi4KNSBleHBpcmVzL3NlYywgMiB3aXRo
IHNlbSBkb3duLgoyIGV4cGlyZXMvc2VjLCAyIHdpdGggc2VtIGRvd24uCjUgZXhwaXJlcy9zZWMs
IDUgd2l0aCBzZW0gZG93bi4KNiBleHBpcmVzL3NlYywgNiB3aXRoIHNlbSBkb3duLgoyIGV4cGly
ZXMvc2VjLCAyIHdpdGggc2VtIGRvd24uCjIgZXhwaXJlcy9zZWMsIDIgd2l0aCBzZW0gZG93bi4K
MiBleHBpcmVzL3NlYywgMiB3aXRoIHNlbSBkb3duLgo2IGV4cGlyZXMvc2VjLCAyIHdpdGggc2Vt
IGRvd24uCjQgZXhwaXJlcy9zZWMsIDMgd2l0aCBzZW0gZG93bi4KNSBleHBpcmVzL3NlYywgMiB3
aXRoIHNlbSBkb3duLgoxMCBleHBpcmVzL3NlYywgNyB3aXRoIHNlbSBkb3duLgoxMCBleHBpcmVz
L3NlYywgOSB3aXRoIHNlbSBkb3duLgo5IGV4cGlyZXMvc2VjLCA4IHdpdGggc2VtIGRvd24uCjUg
ZXhwaXJlcy9zZWMsIDMgd2l0aCBzZW0gZG93bi4KOSBleHBpcmVzL3NlYywgNiB3aXRoIHNlbSBk
b3duLgoxNSBleHBpcmVzL3NlYywgMTIgd2l0aCBzZW0gZG93bi4KMTEgZXhwaXJlcy9zZWMsIDkg
d2l0aCBzZW0gZG93bi4KMTEgZXhwaXJlcy9zZWMsIDkgd2l0aCBzZW0gZG93bi4KOSBleHBpcmVz
L3NlYywgNyB3aXRoIHNlbSBkb3duLgo5IGV4cGlyZXMvc2VjLCA3IHdpdGggc2VtIGRvd24uCjE1
IGV4cGlyZXMvc2VjLCAxMCB3aXRoIHNlbSBkb3duLgo5IGV4cGlyZXMvc2VjLCA5IHdpdGggc2Vt
IGRvd24uCjkgZXhwaXJlcy9zZWMsIDcgd2l0aCBzZW0gZG93bi4KMTUgZXhwaXJlcy9zZWMsIDEw
IHdpdGggc2VtIGRvd24uCjEyIGV4cGlyZXMvc2VjLCA5IHdpdGggc2VtIGRvd24uCjEwIGV4cGly
ZXMvc2VjLCA2IHdpdGggc2VtIGRvd24uCjEyIGV4cGlyZXMvc2VjLCA4IHdpdGggc2VtIGRvd24u
CjEzIGV4cGlyZXMvc2VjLCA2IHdpdGggc2VtIGRvd24uCjEzIGV4cGlyZXMvc2VjLCA3IHdpdGgg
c2VtIGRvd24uCjExIGV4cGlyZXMvc2VjLCAyIHdpdGggc2VtIGRvd24uCjEwIGV4cGlyZXMvc2Vj
LCA2IHdpdGggc2VtIGRvd24uCjUgZXhwaXJlcy9zZWMsIDQgd2l0aCBzZW0gZG93bi4KMTAgZXhw
aXJlcy9zZWMsIDQgd2l0aCBzZW0gZG93bi4KMzAxOi0yIHN0YXJ2ZWQgMSBzZWNzIGJ5IDEwNzI0
OjIzIHdobyBsYXN0IHJhbiAxNjI5IHRpY2tzIGFnby4Kc2VtYXBob3JlIGRvd25lZCBhdCBhcmNo
L2kzODYva2VybmVsL3N5c19pMzg2LmM6NTguCmNwcDAgICAgICAgICAgRCBDMEU3MUUwQyAxMDcy
NCAgMTA3MTIgICAgICAgICAxMDcyNSAgICAgICAoTk9UTEIpCkNhbGwgVHJhY2U6CiBbPGMwMTM3
OTFlPl0gZmluZF9nZXRfcGFnZSsweDNhLzB4ODgKIFs8YzAxMWNhMjU+XSBpb19zY2hlZHVsZSsw
eDI5LzB4MzgKIFs8YzAxNTVjM2U+XSBfX3dhaXRfb25fYnVmZmVyKzB4YTIvMHhiYwogWzxjMDEx
ZGMxOD5dIGF1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbisweDAvMHg0MAogWzxjMDExZGMxOD5dIGF1
dG9yZW1vdmVfd2FrZV9mdW5jdGlvbisweDAvMHg0MAogWzxjMDE5NzYwMj5dIGRvX2dldF93cml0
ZV9hY2Nlc3MrMHg3Mi8weDc4OAogWzxjMDE5N2Q2MD5dIGpvdXJuYWxfZ2V0X3dyaXRlX2FjY2Vz
cysweDQ4LzB4NmMKIFs8YzAxOGU4OTA+XSBleHQzX3Jlc2VydmVfaW5vZGVfd3JpdGUrMHgzMC8w
eDkwCiBbPGMwMThlOTBhPl0gZXh0M19tYXJrX2lub2RlX2RpcnR5KzB4MWEvMHgzNAogWzxjMDE4
ZTk3Nz5dIGV4dDNfZGlydHlfaW5vZGUrMHg1My8weDY4CiBbPGMwMTc1NDUxPl0gX19tYXJrX2lu
b2RlX2RpcnR5KzB4MzEvMHgxMmMKIFs8YzAxNmYyZjg+XSB1cGRhdGVfYXRpbWUrMHg4OC8weGM0
CiBbPGMwMTM4YmJkPl0gZ2VuZXJpY19maWxlX21tYXArMHgyMS8weDNjCiBbPGMwMTQ3YWU5Pl0g
ZG9fbW1hcF9wZ29mZisweDQwZC8weDYzMAogWzxjMDEwZmQxZT5dIG9sZF9tbWFwKzB4MTIyLzB4
MTcwCiBbPGMwMTA5MTgzPl0gc3lzY2FsbF9jYWxsKzB4Ny8weGIKCjggZXhwaXJlcy9zZWMsIDMg
d2l0aCBzZW0gZG93bi4KNyBleHBpcmVzL3NlYywgMyB3aXRoIHNlbSBkb3duLgo0IGV4cGlyZXMv
c2VjLCAwIHdpdGggc2VtIGRvd24uCjggZXhwaXJlcy9zZWMsIDIgd2l0aCBzZW0gZG93bi4KMTEg
ZXhwaXJlcy9zZWMsIDkgd2l0aCBzZW0gZG93bi4KMzI2NTotMiBzdGFydmVkIDEgc2VjcyBieSAx
MDcyNzoyNCB3aG8gbGFzdCByYW4gNTI4IHRpY2tzIGFnby4Kc2VtYXBob3JlIGRvd25lZCBhdCBm
cy9iaW5mbXRfZWxmLmM6MjY0Lgp0b3VjaCAgICAgICAgIFIgQzZEOEMwMDAgMTA3MjcgIDEwNTQz
ICAgICAgICAgICAgICAgICAgICAgKE5PVExCKQpDYWxsIFRyYWNlOgogWzxjMDE1NWIzZj5dIHdh
a2VfdXBfYnVmZmVyKzB4Yi8weDI4CiBbPGMwMTk3OTY1Pl0gZG9fZ2V0X3dyaXRlX2FjY2Vzcysw
eDNkNS8weDc4OAogWzxjMDExYjQ1OD5dIGRlZmF1bHRfd2FrZV9mdW5jdGlvbisweDAvMHgxYwog
WzxjMDE5N2Q2MD5dIGpvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcysweDQ4LzB4NmMKIFs8YzAxOGU4
OTA+XSBleHQzX3Jlc2VydmVfaW5vZGVfd3JpdGUrMHgzMC8weDkwCiBbPGMwMThlOTBhPl0gZXh0
M19tYXJrX2lub2RlX2RpcnR5KzB4MWEvMHgzNAogWzxjMDE4ZTk3Nz5dIGV4dDNfZGlydHlfaW5v
ZGUrMHg1My8weDY4CiBbPGMwMTc1NDUxPl0gX19tYXJrX2lub2RlX2RpcnR5KzB4MzEvMHgxMmMK
IFs8YzAxNmYyZjg+XSB1cGRhdGVfYXRpbWUrMHg4OC8weGM0CiBbPGMwMTM4YmJkPl0gZ2VuZXJp
Y19maWxlX21tYXArMHgyMS8weDNjCiBbPGMwMTQ3YWU5Pl0gZG9fbW1hcF9wZ29mZisweDQwZC8w
eDYzMAogWzxjMDE3Y2E2Mj5dIGVsZl9tYXArMHhiMi8weGYwCiBbPGMwMTdkM2M5Pl0gbG9hZF9l
bGZfYmluYXJ5KzB4NWU1LzB4YTYwCiBbPGMwMTdjZGU0Pl0gbG9hZF9lbGZfYmluYXJ5KzB4MC8w
eGE2MAogWzxjMDEwZjc2Nj5dIHRpbWVyX2ludGVycnVwdCsweGJhLzB4MWE4CiBbPGMwMTYwMzNk
Pl0gc2VhcmNoX2JpbmFyeV9oYW5kbGVyKzB4ZTUvMHgyZDgKIFs8YzAxNjA2YjM+XSBkb19leGVj
dmUrMHgxODMvMHgyMDQKIFs8YzAxNjA2Y2E+XSBkb19leGVjdmUrMHgxOWEvMHgyMDQKIFs8YzAx
MDc3ZGI+XSBzeXNfZXhlY3ZlKzB4MmYvMHg2YwogWzxjMDEwOTE4Mz5dIHN5c2NhbGxfY2FsbCsw
eDcvMHhiCgo0IGV4cGlyZXMvc2VjLCA0IHdpdGggc2VtIGRvd24uCjMwMTotMiBzdGFydmVkIDEg
c2VjcyBieSAxMDcyNzoyNCB3aG8gbGFzdCByYW4gMjQ0IHRpY2tzIGFnby4Kc2VtYXBob3JlIGRv
d25lZCBhdCBmcy9iaW5mbXRfZWxmLmM6MjY0Lgp0b3VjaCAgICAgICAgIEQgQzdFRUYxNzggMTA3
MjcgIDEwNTQzICAgICAgICAgICAgICAgICAgICAgKE5PVExCKQpDYWxsIFRyYWNlOgogWzxjMDEz
NzkxZT5dIGZpbmRfZ2V0X3BhZ2UrMHgzYS8weDg4CiBbPGMwMTU3M2RjPl0gYmhfbHJ1X2luc3Rh
bGwrMHhlNC8weGYwCiBbPGMwMTA3Y2I4Pl0gX19kb3duKzB4ZjQvMHgxYzQKIFs8YzAxMWI0NTg+
XSBkZWZhdWx0X3dha2VfZnVuY3Rpb24rMHgwLzB4MWMKIFs8YzAxMDgwNDQ+XSBfX2Rvd25fZmFp
bGVkKzB4OC8weGMKIFs8YzAxOTk4ZjY+XSAudGV4dC5sb2NrLnRyYW5zYWN0aW9uKzB4YjkvMHgx
NzMKIFs8YzAxMWI0NTg+XSBkZWZhdWx0X3dha2VfZnVuY3Rpb24rMHgwLzB4MWMKIFs8YzAxOTdk
NjA+XSBqb3VybmFsX2dldF93cml0ZV9hY2Nlc3MrMHg0OC8weDZjCiBbPGMwMThlODkwPl0gZXh0
M19yZXNlcnZlX2lub2RlX3dyaXRlKzB4MzAvMHg5MAogWzxjMDE4ZTkwYT5dIGV4dDNfbWFya19p
bm9kZV9kaXJ0eSsweDFhLzB4MzQKIFs8YzAxOGU5Nzc+XSBleHQzX2RpcnR5X2lub2RlKzB4NTMv
MHg2OAogWzxjMDE3NTQ1MT5dIF9fbWFya19pbm9kZV9kaXJ0eSsweDMxLzB4MTJjCiBbPGMwMTZm
MmY4Pl0gdXBkYXRlX2F0aW1lKzB4ODgvMHhjNAogWzxjMDEzOGJiZD5dIGdlbmVyaWNfZmlsZV9t
bWFwKzB4MjEvMHgzYwogWzxjMDE0N2FlOT5dIGRvX21tYXBfcGdvZmYrMHg0MGQvMHg2MzAKIFs8
YzAxN2NhNjI+XSBlbGZfbWFwKzB4YjIvMHhmMAogWzxjMDE3ZDNjOT5dIGxvYWRfZWxmX2JpbmFy
eSsweDVlNS8weGE2MAogWzxjMDE3Y2RlND5dIGxvYWRfZWxmX2JpbmFyeSsweDAvMHhhNjAKIFs8
YzAxMGY3NjY+XSB0aW1lcl9pbnRlcnJ1cHQrMHhiYS8weDFhOAogWzxjMDE2MDMzZD5dIHNlYXJj
aF9iaW5hcnlfaGFuZGxlcisweGU1LzB4MmQ4CiBbPGMwMTYwNmIzPl0gZG9fZXhlY3ZlKzB4MTgz
LzB4MjA0CiBbPGMwMTYwNmNhPl0gZG9fZXhlY3ZlKzB4MTlhLzB4MjA0CiBbPGMwMTA3N2RiPl0g
c3lzX2V4ZWN2ZSsweDJmLzB4NmMKIFs8YzAxMDkxODM+XSBzeXNjYWxsX2NhbGwrMHg3LzB4YgoK
MTEgZXhwaXJlcy9zZWMsIDExIHdpdGggc2VtIGRvd24uCjYgZXhwaXJlcy9zZWMsIDYgd2l0aCBz
ZW0gZG93bi4KNyBleHBpcmVzL3NlYywgNyB3aXRoIHNlbSBkb3duLgo2IGV4cGlyZXMvc2VjLCA2
IHdpdGggc2VtIGRvd24uCjQgZXhwaXJlcy9zZWMsIDQgd2l0aCBzZW0gZG93bi4KMTEgZXhwaXJl
cy9zZWMsIDEwIHdpdGggc2VtIGRvd24uCjAgZXhwaXJlcy9zZWMsIDAgd2l0aCBzZW0gZG93bi4K
MCBleHBpcmVzL3NlYywgMCB3aXRoIHNlbSBkb3duLgpTeXNScSA6IENoYW5naW5nIExvZ2xldmVs
CkxvZ2xldmVsIHNldCB0byAwCg==
--=_courier-7189-1051179094-0001-2--