[OpenAFS] afsdf new release

Steve Simmons scs@umich.edu
Tue, 9 May 2017 13:23:40 -0400


--94eb2c124da2f4af6d054f1a9dea
Content-Type: multipart/alternative; boundary=94eb2c124da2f4af67054f1a9de8

--94eb2c124da2f4af67054f1a9de8
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

=E2=80=8BAbout 10 years back I posted a 'afsdf' command to openafs-info. Ma=
ny
improvements were made based on suggestions here, but I never got round to
re-posting it. In general, the command does a df-ish disk usage report
across an entire cell, with various permutations on roll-ups, display
compaction, and so forth. Used in my favorite two modes:

$ afsdf -t
Server                Ptn       SizeMB         Used       Avail.  Pct Full
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =3D=3D=3D  =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =3D=3D=3D=3D=3D=3D=3D=3D
afsprs01.afs.storage   a     2,096,124    1,669,362      426,761    79.64%
afsprs01.afs.storage   b     2,096,124    1,638,733      457,390    78.18%
afsprs01.afs.storage   c     2,096,124    1,686,377      409,746    80.45%
afsprs01.afs.storage   d     2,096,124    1,703,729      392,394    81.28%
afsprs01.afs.storage   e     2,096,124    1,670,024      426,099    79.67%
afsprs01.afs.storage   f     2,096,124    1,716,652      379,471    81.90%
afsprs02.afs.storage   a     2,096,124    1,701,536      394,587    81.18%
afsprs02.afs.storage   b     2,096,124    1,711,506      384,617    81.65%
. . .
afsprs10.afs.storage   e     2,096,124    1,385,650      710,473    66.11%
afsprs10.afs.storage   f     2,096,124    1,355,564      740,559    64.67%
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =3D=3D=3D  =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =3D=3D=3D=3D=3D=3D=3D=3D
         Grand Total       125,767,440   97,068,722   28,698,717    77.18%

$ afsdf -T -s -u GB
Server       Ptn   SizeGB     Used   Avail.  Pct Full
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =3D=3D=3D  =3D=3D=3D=3D=3D=3D=3D  =3D=3D=
=3D=3D=3D=3D=3D  =3D=3D=3D=3D=3D=3D=3D  =3D=3D=3D=3D=3D=3D=3D=3D
afsprs01      a     2,046    1,630      416    79.64%
              b     2,046    1,600      446    78.18%
              c     2,046    1,646      400    80.45%
              d     2,046    1,663      383    81.28%
              e     2,046    1,630      416    79.67%
              f     2,046    1,676      370    81.90%
   Subtotal        12,281    9,848    2,433    80.19%

afsprs02      a     2,046    1,661      385    81.18%
              b     2,046    1,671      375    81.65%
. . .
afsprs10      a     2,046    1,373      673    67.11%
              b     2,046    1,355      691    66.24%
              c     2,046    1,345      701    65.71%
              d     2,046    1,377      669    67.29%
              e     2,046    1,353      693    66.11%
              f     2,046    1,323      723    64.67%
   Subtotal        12,281    8,129    4,152    66.19%
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =3D=3D=3D  =3D=3D=3D=3D=3D=3D=3D  =3D=3D=
=3D=3D=3D=3D=3D  =3D=3D=3D=3D=3D=3D=3D  =3D=3D=3D=3D=3D=3D=3D=3D
Grand Total       122,819   94,793   28,026    77.18%


afsdf -h prints a quick help message, afsdf --usage shows you all the
switches.

Enjoy,

Steve

--94eb2c124da2f4af67054f1a9de8
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64

PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFt
aWx5OmFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmIj7igItBYm91dCAxMCB5ZWFycyBiYWNrIEkg
cG9zdGVkIGEgJiMzOTthZnNkZiYjMzk7IGNvbW1hbmQgdG8gb3BlbmFmcy1pbmZvLiBNYW55IGlt
cHJvdmVtZW50cyB3ZXJlIG1hZGUgYmFzZWQgb24gc3VnZ2VzdGlvbnMgaGVyZSwgYnV0IEkgbmV2
ZXIgZ290IHJvdW5kIHRvIHJlLXBvc3RpbmcgaXQuIEluIGdlbmVyYWwsIHRoZSBjb21tYW5kIGRv
ZXMgYSBkZi1pc2ggZGlzayB1c2FnZSByZXBvcnQgYWNyb3NzIGFuIGVudGlyZSBjZWxsLCB3aXRo
IHZhcmlvdXMgcGVybXV0YXRpb25zIG9uIHJvbGwtdXBzLCBkaXNwbGF5IGNvbXBhY3Rpb24sIGFu
ZCBzbyBmb3J0aC4gVXNlZCBpbiBteSBmYXZvcml0ZSB0d28gbW9kZXM6PC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsLGhlbHZldGljYSxzYW5z
LXNlcmlmIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQt
ZmFtaWx5OmFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmIj4kIGFmc2RmIC10PC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZGVmYXVsdCI+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZv
bnQtZmFtaWx5OmFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmIj5TZXJ2ZXIgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqBQdG4gwqAgwqAgwqAgU2l6ZU1CIMKgIMKgIMKgIMKgIFVzZWQgwqAgwqAgwqAg
QXZhaWwuwqAgUGN0IEZ1bGw8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0i
Zm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYiPj09PT09PT09PT09PT09PT09
PT09IMKgPT09IMKgPT09PT09PT09PT0gwqA9PT09PT09PT09PSDCoD09PT09PT09PT09IMKgPT09
PT09PT08L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6
YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYiPmFmc3ByczAxLmFmcy5zdG9yYWdlIMKgIGEgwqAg
wqAgMiwwOTYsMTI0IMKgIMKgMSw2NjksMzYyIMKgIMKgIMKgNDI2LDc2MSDCoCDCoDc5LjY0JTwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxlPSJmb250LWZhbWlseTphcmlhbCxo
ZWx2ZXRpY2Esc2Fucy1zZXJpZiI+YWZzcHJzMDEuYWZzLnN0b3JhZ2UgwqAgYiDCoCDCoCAyLDA5
NiwxMjQgwqAgwqAxLDYzOCw3MzMgwqAgwqAgwqA0NTcsMzkwIMKgIMKgNzguMTglPC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsLGhlbHZldGlj
YSxzYW5zLXNlcmlmIj5hZnNwcnMwMS5hZnMuc3RvcmFnZSDCoCBjIMKgIMKgIDIsMDk2LDEyNCDC
oCDCoDEsNjg2LDM3NyDCoCDCoCDCoDQwOSw3NDYgwqAgwqA4MC40NSU8L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMt
c2VyaWYiPmFmc3ByczAxLmFmcy5zdG9yYWdlIMKgIGQgwqAgwqAgMiwwOTYsMTI0IMKgIMKgMSw3
MDMsNzI5IMKgIMKgIMKgMzkyLDM5NCDCoCDCoDgxLjI4JTwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2RlZmF1bHQiIHN0eWxlPSJmb250LWZhbWlseTphcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZiI+
YWZzcHJzMDEuYWZzLnN0b3JhZ2UgwqAgZSDCoCDCoCAyLDA5NiwxMjQgwqAgwqAxLDY3MCwwMjQg
wqAgwqAgwqA0MjYsMDk5IMKgIMKgNzkuNjclPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVs
dCIgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmIj5hZnNwcnMw
MS5hZnMuc3RvcmFnZSDCoCBmIMKgIMKgIDIsMDk2LDEyNCDCoCDCoDEsNzE2LDY1MiDCoCDCoCDC
oDM3OSw0NzEgwqAgwqA4MS45MCU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHls
ZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYiPmFmc3ByczAyLmFmcy5z
dG9yYWdlIMKgIGEgwqAgwqAgMiwwOTYsMTI0IMKgIMKgMSw3MDEsNTM2IMKgIMKgIMKgMzk0LDU4
NyDCoCDCoDgxLjE4JTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxlPSJmb250
LWZhbWlseTphcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZiI+YWZzcHJzMDIuYWZzLnN0b3JhZ2Ug
wqAgYiDCoCDCoCAyLDA5NiwxMjQgwqAgwqAxLDcxMSw1MDYgwqAgwqAgwqAzODQsNjE3IMKgIMKg
ODEuNjUlPC9kaXY+PGRpdj48Zm9udCBmYWNlPSJhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlm
Ij4uIC4gLjwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGZhY2U9ImFyaWFsLCBoZWx2ZXRpY2EsIHNh
bnMtc2VyaWYiPmFmc3ByczEwLmFmcy5zdG9yYWdlIMKgIGUgwqAgwqAgMiwwOTYsMTI0IMKgIMKg
MSwzODUsNjUwIMKgIMKgIMKgNzEwLDQ3MyDCoCDCoDY2LjExJTwvZm9udD48L2Rpdj48ZGl2Pjxm
b250IGZhY2U9ImFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWYiPmFmc3ByczEwLmFmcy5zdG9y
YWdlIMKgIGYgwqAgwqAgMiwwOTYsMTI0IMKgIMKgMSwzNTUsNTY0IMKgIMKgIMKgNzQwLDU1OSDC
oCDCoDY0LjY3JTwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGZhY2U9ImFyaWFsLCBoZWx2ZXRpY2Es
IHNhbnMtc2VyaWYiPj09PT09PT09PT09PT09PT09PT09IMKgPT09IMKgPT09PT09PT09PT0gwqA9
PT09PT09PT09PSDCoD09PT09PT09PT09IMKgPT09PT09PT08L2ZvbnQ+PC9kaXY+PGRpdj48Zm9u
dCBmYWNlPSJhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmIj7CoCDCoCDCoCDCoCDCoEdyYW5k
IFRvdGFsIMKgIMKgIMKgIDEyNSw3NjcsNDQwIMKgIDk3LDA2OCw3MjIgwqAgMjgsNjk4LDcxNyDC
oCDCoDc3LjE4JTwvZm9udD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBz
dHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYiPjxicj48L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0
aWNhLHNhbnMtc2VyaWYiPiQgYWZzZGYgLVQgLXMgLXUgR0I8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9kZWZhdWx0Ij48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0Ij48ZGl2IGNsYXNzPSJnbWFpbF9k
ZWZhdWx0Ij5TZXJ2ZXIgwqAgwqAgwqAgUHRuIMKgIFNpemVHQiDCoCDCoCBVc2VkIMKgIEF2YWls
LsKgIFBjdCBGdWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCI+PT09PT09PT09PT0g
wqA9PT0gwqA9PT09PT09IMKgPT09PT09PSDCoD09PT09PT0gwqA9PT09PT09PTwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2RlZmF1bHQiPmFmc3ByczAxIMKgIMKgIMKgYSDCoCDCoCAyLDA0NiDCoCDC
oDEsNjMwIMKgIMKgIMKgNDE2IMKgIMKgNzkuNjQlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVm
YXVsdCI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgYiDCoCDCoCAyLDA0NiDCoCDCoDEsNjAwIMKgIMKg
IMKgNDQ2IMKgIMKgNzguMTglPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCI+wqAgwqAg
wqAgwqAgwqAgwqAgwqAgYyDCoCDCoCAyLDA0NiDCoCDCoDEsNjQ2IMKgIMKgIMKgNDAwIMKgIMKg
ODAuNDUlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCI+wqAgwqAgwqAgwqAgwqAgwqAg
wqAgZCDCoCDCoCAyLDA0NiDCoCDCoDEsNjYzIMKgIMKgIMKgMzgzIMKgIMKgODEuMjglPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgZSDCoCDCoCAy
LDA0NiDCoCDCoDEsNjMwIMKgIMKgIMKgNDE2IMKgIMKgNzkuNjclPC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZGVmYXVsdCI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgZiDCoCDCoCAyLDA0NiDCoCDCoDEs
Njc2IMKgIMKgIMKgMzcwIMKgIMKgODEuOTAlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVs
dCI+wqAgwqBTdWJ0b3RhbCDCoCDCoCDCoCDCoDEyLDI4MSDCoCDCoDksODQ4IMKgIMKgMiw0MzMg
wqAgwqA4MC4xOSU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0Ij48YnI+PC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZGVmYXVsdCI+YWZzcHJzMDIgwqAgwqAgwqBhIMKgIMKgIDIsMDQ2IMKg
IMKgMSw2NjEgwqAgwqAgwqAzODUgwqAgwqA4MS4xOCU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9k
ZWZhdWx0Ij7CoCDCoCDCoCDCoCDCoCDCoCDCoCBiIMKgIMKgIDIsMDQ2IMKgIMKgMSw2NzEgwqAg
wqAgwqAzNzUgwqAgwqA4MS42NSU8L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTph
cmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZiI+LiAuIC48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZh
bWlseTphcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZiI+PGRpdj5hZnNwcnMxMCDCoCDCoCDCoGEg
wqAgwqAgMiwwNDYgwqAgwqAxLDM3MyDCoCDCoCDCoDY3MyDCoCDCoDY3LjExJTwvZGl2PjxkaXY+
wqAgwqAgwqAgwqAgwqAgwqAgwqAgYiDCoCDCoCAyLDA0NiDCoCDCoDEsMzU1IMKgIMKgIMKgNjkx
IMKgIMKgNjYuMjQlPC9kaXY+PGRpdj7CoCDCoCDCoCDCoCDCoCDCoCDCoCBjIMKgIMKgIDIsMDQ2
IMKgIMKgMSwzNDUgwqAgwqAgwqA3MDEgwqAgwqA2NS43MSU8L2Rpdj48ZGl2PsKgIMKgIMKgIMKg
IMKgIMKgIMKgIGQgwqAgwqAgMiwwNDYgwqAgwqAxLDM3NyDCoCDCoCDCoDY2OSDCoCDCoDY3LjI5
JTwvZGl2PjxkaXY+wqAgwqAgwqAgwqAgwqAgwqAgwqAgZSDCoCDCoCAyLDA0NiDCoCDCoDEsMzUz
IMKgIMKgIMKgNjkzIMKgIMKgNjYuMTElPC9kaXY+PGRpdj7CoCDCoCDCoCDCoCDCoCDCoCDCoCBm
IMKgIMKgIDIsMDQ2IMKgIMKgMSwzMjMgwqAgwqAgwqA3MjMgwqAgwqA2NC42NyU8L2Rpdj48ZGl2
PsKgIMKgU3VidG90YWwgwqAgwqAgwqAgwqAxMiwyODEgwqAgwqA4LDEyOSDCoCDCoDQsMTUyIMKg
IMKgNjYuMTklPC9kaXY+PGRpdj49PT09PT09PT09PSDCoD09PSDCoD09PT09PT0gwqA9PT09PT09
IMKgPT09PT09PSDCoD09PT09PT09PC9kaXY+PGRpdj5HcmFuZCBUb3RhbCDCoCDCoCDCoCAxMjIs
ODE5IMKgIDk0LDc5MyDCoCAyOCwwMjYgwqAgwqA3Ny4xOCU8L2Rpdj48ZGl2Pjxicj48L2Rpdj48
L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6
YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9k
ZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYiPmFm
c2RmIC1oIHByaW50cyBhIHF1aWNrIGhlbHAgbWVzc2FnZSwgYWZzZGYgLS11c2FnZSBzaG93cyB5
b3UgYWxsIHRoZSBzd2l0Y2hlcy48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHls
ZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYiPjxicj48L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNh
LHNhbnMtc2VyaWYiPkVuam95LDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxl
PSJmb250LWZhbWlseTphcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZiI+PGJyPjwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxlPSJmb250LWZhbWlseTphcmlhbCxoZWx2ZXRpY2Es
c2Fucy1zZXJpZiI+U3RldmU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0i
Zm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYiPjxicj48L2Rpdj48L2Rpdj4N
Cg==
--94eb2c124da2f4af67054f1a9de8--
--94eb2c124da2f4af6d054f1a9dea
Content-Type: application/octet-stream; name=afsdf
Content-Disposition: attachment; filename=afsdf
Content-Transfer-Encoding: base64
X-Attachment-Id: f_j2htrue60

IyEvdXNyL2Jpbi9wZXJsIC13CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAkSWQ6IGFmc2RmLHYg
MS4yMyAyMDE3LzA1LzA5IDE2OjEwOjM2IHNjcyBFeHAgJAojCiMgTk9URTogVGhpcyB0b29sIGlz
IGFyY2hpdmVkLiAgUGxlYXNlIGNoZWNrIG91dAojICAgICAgIGEgY29weSBpZiB5b3UgYXJlIHBs
YW5uaW5nIG9uIG1vZGlmeWluZyB0aGUgbWFpbiBjb3B5LgojCiMgUmVwb3NpdG9yeTogJFNvdXJj
ZTogL2Fmcy91bWljaC5lZHUvdXNlci9zL2Mvc2NzL3NyYy9BRlMuVG9vbHMvQUZTLlJlcG9ydHMv
UkNTL2Fmc2RmLHYgJAojCiMgJExvZzogYWZzZGYsdiAkCiMgUmV2aXNpb24gMS4yMyAgMjAxNy8w
NS8wOSAxNjoxMDozNiAgc2NzCiMgTW92ZSB1dWlkIGNoZWNraW5nIG1lc3NhZ2UgdG8gZGVidWcg
bW9kZSBvbmx5LgojCiMgUmV2aXNpb24gMS4yMiAgMjAxMS8wOC8xOCAyMzowNDowNSAgc2NzCiMg
TWFkZSBjb2x1bW4gd2lkdGhzIGNoYW5nZSB3aXRoIHVuaXRzICh2ZXJ5IHNpbXBsZS1taW5kZWQp
LCBtYWRlIHN0cmlwcGluZwojIG9mIGNlbGxuYW1lcyB3b3JrIHJpZ2h0LCBhZGRlZCBob3N0LW9u
bHkgbmFtaW5nLgojCiMgUmV2aXNpb24gMS4yMSAgMjAxMS8wOC8xOCAyMjoyNDoyNCAgc2NzCiMg
Q29ycmVjdGVkIGVycm9yIGluIHVzYWdlIG1lc3NhZ2UsIHJlbW92ZWQgc29tZSBkZWFkIGNvbW1l
bnRhcnkuCiMKIyBSZXZpc2lvbiAxLjIwICAyMDExLzA4LzAzIDE4OjMzOjE1ICBzY3MKIyBBbGxv
d2VkIG92ZXJyaWRpbmcgb2Ygc2NhbGUgc28gY2FuIGRpc3BsYXkgaW4gbWIsIGdiLCB0YiwgcGIu
CiMKIyBSZXZpc2lvbiAxLjE5ICAyMDEwLzA1LzExIDIxOjQ2OjIxICBzY3MKIyBBbGxvdyBob3N0
cyB3aGljaCBoYXZlIGFmcyBpbnN0YWxsZWQgYnV0IGFyZW4ndCBhY3R1YWxseSBjbGllbnRzLgoj
CiMgUmV2aXNpb24gMS4xOCAgMjAxMC8wNS8xMSAyMToxMjo1MCAgc2NzCiMgTmVlZCB0byBjaGVj
ayBhZnMgZXhpc3RhbmNlIHZlcnkgZWFybHkuCiMKIyBSZXZpc2lvbiAxLjE3ICAyMDEwLzA1LzEx
IDIwOjU4OjA4ICBzY3MKIyBBZGRlZCBjaGVjayBmb3IgcHJlc2VuY2Ugb2YgQUZTIHV0aWxpdGll
cyBvbiBhIHN5c3RlbS4KIwojIFJldmlzaW9uIDEuMTYgIDIwMTAvMDUvMTAgMjA6MTg6MjcgIHNj
cwojIEFkZGVkIHN1cHJlc3Npb24gb2YgY2VsbG5hbWUsIHJlc3RvcmVkIGZ1bGwgc3VidG90YWxz
LCBzdXByZXNzaW9ucyBvZgojIGR1cGxpY2F0ZSBob3N0bmFtZXMuIERlZmF1bHQgd29ya3MgZXhh
Y3RseSBhcyBiZWZvcmUuCiMKIyBSZXZpc2lvbiAxLjE1ICAyMDA5LzA1LzI4IDE3OjUxOjMzICBz
Y3MKIyBBZGRlZCBieS11dWlkIG1hcHBpbmdzIHNvIGVhY2ggc2VydmVyIGxpc3RzIG9ubHkgb25j
ZS4KIwojIENvbnN0cnVjdGlvbiBub3RlczoKIwojIFRoaXMgcGFzc2VzIGJvdGggJ3BlcmwgLXcn
IGFuZCAndXNlIHN0cmljdCcgc2lsZW50bHkuCiMKIyBUYWIgc3RvcHMgYXJlIHNldCBhdCA4LCBz
aGlmdCB3aWR0aHMgYXQgNC4KIyAKIwojIFRPRE86IG5vdyB0aGF0IHNjYWxpbmcgd29ya3Mgcmln
aHQsIGxvb3QgYXQgcmVkdWNpbmcgY29sdW1uIHdpZHRocwojICBmb3IgbnVtYmVycyB3aGVuIHRo
ZSBzY2FsZSByZWR1Y2VzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQojIEdlbmVyaWMgbW9kdWxlcyBhbmQgdGhlaXIgbG9jYXRpb24ocykKIy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCgp1c2UJc3RyaWN0Owp1c2UJRW5nbGlzaDsJIyBTdHJvbmdseSByZWNvbW1lbmRl
ZCBmb3IgcmVhZGFiaWxpdHkKdXNlCUNhcnA7CQkjIENyZWF0ZXMgdmVyeSBkZXRhaWxlZCBhbmQg
dXNlZnVsIGRlYnVnIG1zZ3MKdXNlCURhdGE6OkR1bXBlcjsJIyBQcmludHMgY29tcGxleCB2YXJp
YWJsZXMgCnVzZQl3YXJuaW5nczsKCiMgTWFrZSBvdXRwdXQgZnJvbSBwZXJsIC13IGJlIG1vcmUg
dmVyYm9zZSBhbmQgdXNlZnVsCgp1c2UJZGlhZ25vc3RpY3M7CgojIENvbW1lbnQgb3V0IHdoZW4g
bm90IGRlYnVnZ2luZyEKCiNCRUdJTiB7ICRFeHBvcnRlcjo6VmVyYm9zZT0xOyB9CgojLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIyBXaG8gdGhlIGhlY2sgYXJlIHdlPyAgVXNlZCBpbiBtYW55IGVycm9y
IG1lc3NhZ2VzLCBkZWZpbmUgZWFybHkuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKdXNlCUZpbGU6
OkJhc2VuYW1lOwpteQkkVE9PTCA9IGJhc2VuYW1lICQwOwoKIyBTZWFyY2ggJFBBVEggZm9yIGFu
IGV4ZWN1dGFibGUgY29tbWFuZCwgcmV0dXJuIGZ1bGwgcGF0aCBpZiBmb3VuZC4KCnN1YiBjaGVj
a19wYXRoICggJCApIHsKICAgIG15ICRiaW5hcnkgPSAkX1swXTsKICAgIGZvciBteSAkcGF0aCAo
IHNwbGl0ICI6IiwgJEVOVntQQVRIfSApIHsKICAgICAgICBpZiAoIC14ICIkcGF0aC8kYmluYXJ5
IiApIHsKCSAgICByZXR1cm4gIiRwYXRoLyRiaW5hcnkiOwoJfQogICAgfQogICAgcmV0dXJuICIi
Owp9CgojIEJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBtYWtlIHN1cmUgd2UgaGF2ZSBBRlMg
b24gdGhpcyBzeXN0ZW0uCgppZiAoICEgY2hlY2tfcGF0aCggInZvcyIgKSApIHsKICAgIHByaW50
IFNUREVSUiAiJFRPT0w6IEkgY2FuJ3QgZmluZCB0aGUgYWZzIGJpbmFyaWVzLiBQbGVhc2UgY2hl
Y2sgeW91clxuIjsKICAgIHByaW50IFNUREVSUiAiIFwkUEFUSCBhbmQgdGhlIHN5c3RlbSB0byBz
ZWUgaWYgdGhleSBhcmUgaW5zdGFsbGVkLlxuIjsKICAgIGV4aXQgMTsKfQoKCiMtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQojIG9wdGlvbiBkZWZpbml0aW9ucwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwoj
IEtlZXAgdGhlc2UgaW4gc3luYyB3aXRoIHRoZSB1c2FnZSBhbmQgaGVscCBzdWJyb3V0aW5lcywg
YnV0IGJlYXIgaW4KIyBtaW5kIHRoYXQgc29tZSBvcHRpb25zIChsaWtlIGRlYnVnIGFuZCBzb21l
dGltZXMgdmVyYm9zZSkgbWF5IG5vdAojIGJlIGFkdmVydGlzZWQgdG8gdGhlIHVzZXIuICBTZWUg
dGhlIHVzYWdlL2hlbHAgc3Vicm91dGluZXMgZm9yIGVhc3kKIyBhbmQgcmVsaWFibGUgd2F5cyB0
byBrZWVwIHRoZSBwcmludGluZyBvZiBkZWZhdWx0IHZhbHVlcyBpbiBzeW5jIHdpdGgKIyB0aGVp
ciBhY3R1YWwgc2V0dGluZ3MuCiMKIyBTb21lIHN3aXRjaGVzIGFuZCBtZWFuaW5nczoKIyAJLS12
ZXJzaW9uCVByaW50IHZlcnNpb24gYW5kIGV4aXQuCiMgCS0tdXNhZ2UJCVByaW50IHVzYWdlIG1z
ZyBhbmQgZXhpdC4KIwktLWhlbHAJCVByaW50IGhlbHAgYW5kIGV4aXQuCiMgIC1WCS0tdmVyYm9z
ZQlWZXJib3NlIG1vZGUuICBOb3QgYWx3YXlzIGFkdmVydGlzZWQuCiMJLS1kZWJ1ZwkJRGVidWcg
bW9kZS4gIE5vdCBldmVyIGFkdmVydGlzZWQuCiMJLS1wZXJsd2FybglJbnRlcmFjdGl2ZWx5IHR1
cm4gb24gcGVybCAtdyBmbGFnIGZvciBkZWJ1Z2dpbmcuCiMgIC1XICAgLS13YXJuaW5nCUxldmVs
IGF0IHdoaWNoIHdlIGZsYWcgd2FybmluZ3MKIyAgLXcgICAtLW5vd2FybmluZwlOZXZlciBmbGFn
IHdhcm5pbmdzCiMgIC1EICAgLS1kYW5nZXIJTGV2ZWwgYXQgd2hpY2ggd2UgZmxhZyBkYW5nZXJv
dXNseSBmdWxsIHBhcnRpdGlvbnMKIyAgLWQgICAtLW5vd2FybmluZwlOZXZlciBmbGFnIGRhbmdl
cgoKIyBEZWNsYXJlIGFsbCB0aGUgdmFyaWFibGVzIHNldCBieSB0aGUgb3B0aW9ucwoKbXkgKAog
ICAgJGRlYnVnLCAkdmVyYm9zZSwgJHBlcmx3YXJuLAkjIENvbnRyb2wgZGVidWcgb3V0cHV0CiAg
ICAkaGVscCwgJHVzYWdlLCAkdmVyc2lvbiwJCSMgUHJpbnQgYSBtZXNzYWdlIGFuZCBleGl0CiAg
ICAkd2FybmluZywgJGRhbmdlciwJCQkjIFdhcm5pbmcgYW5kIGRhbmdlciBsZXZlbHMKICAgICRu
b3dhcm5pbmcsICRub2RhbmdlciwJCSMgU3VwcmVzcyB3YXJuaW5ncy9kYW5nZXIgbWVzc2FnZXMK
ICAgICRzdWJ0b3RhbHMsCQkJCSMgVHVybiBzdWJ0b3RhbHMgb24gb3Igb2ZmLgogICAgJHJlcGVh
dHNydiwJCQkJIyBUdXJuIG9mZiByZXBlYXRlZCBzZXJ2ZXIgbmFtZXMKICAgICRjZWxsbmFtZSwJ
CQkJIyBDaG9vc2Ugd2hhdCBjZWxsIHRvIGxpc3QKICAgICR0cmltY2VsbCwgJHRyaW1hbGwsCQkj
IFRyaW0gY2VsbC9kb21haW4gbmFtZSBmcm9tIHNlcnZlcgogICAgJHVmbGFnLCAkdW5pdHMsICR1
dGFnCQkjIFNldCB0byBzcGVjaWZpYyB1bml0cwopOwoKIyBUd2VhayB0aGVzZSBuZXh0IHR3byBk
ZWZhdWx0IHZhbHVlcyBhcyBuZWVkZWQuICBJZiB5b3UgZG9uJ3Qgd2FudAojIHdhcm5pbmdzLCBq
dXN0IGRhbmdlciBub3RpY2VzLCBzZXQgd2FybiA9PSBkYW5nZXIuCgpteSAkd2Fybl9sZXZlbCA9
IDkwLjA7Cm15ICRkYW5nZXJfbGV2ZWwgPSA5NS4wOwoKIyBTZXQgdGhlIHN3aXRjaGVzIHRoYXQg
bmVlZCBkZWZhdWx0cy4gIFplcm8gaXMgb2ZmLCBhbnl0aGluZyBlbHNlCiMgaXMgb24uICBJZiB0
aGUgdXNhZ2UgbWVzc2FnZSBwcmludHMgdGhlbSwgc2V0IGEgc3RyaW5nIG5vdyBkZXNjcmliaW5n
CiMgdGhlaXIgZGVmYXVsdCB2YWx1ZSBub3cuCgokdmVyYm9zZSA9IDA7ICAgbXkgJHZlcmJvc2Vf
ZGZsdCAgID0gJHZlcmJvc2UgICAgPyAieWVzIiA6ICJubyI7CiRkZWJ1ZyA9IDA7ICAgICBteSAk
ZGVidWdfZGZsdCAgICAgPSAkZGVidWcgICAgICA/ICJ5ZXMiIDogIm5vIjsKJG5vd2FybmluZyA9
IDA7IG15ICRub3dhcm5pbmdfZGZsdCA9ICRub3dhcm5pbmcgID8gInllcyIgOiAibm8iOwokbm9k
YW5nZXIgPSAwOyAgbXkgJG5vZGFuZ2VyX2RmbHQgID0gJG5vZGFuZ2VyICAgPyAieWVzIiA6ICJu
byI7CiRzdWJ0b3RhbHMgPSAwOyBteSAkc3VidG90YWxzX2RmbHQgPSAkc3VidG90YWxzICA/ICJv
biIgOiAib2ZmIjsKJHJlcGVhdHNydiA9IDA7IG15ICRyZXBlYXRzcnZfZGZsdCA9ICRyZXBlYXRz
cnYgID8gIm9uIiA6ICJvZmYiOwokdHJpbWNlbGwgPSAwOyAgbXkgJHRyaW1jZWxsX2RmbHQgID0g
JHRyaW1jZWxsICAgPyAib24iIDogIm9mZiI7CiR0cmltYWxsID0gMDsgICBteSAkdHJpbWFsbF9k
Zmx0ICAgPSAkdHJpbWFsbCAgICA/ICJvbiIgOiAib2ZmIjsKJHV0YWcgPSAiTUIiOyAgIG15ICR1
dGFnX2RmbHQgICAgICA9ICJNQiI7CiR1bml0cyA9IDEwMjQ7CiRjZWxsbmFtZSA9ICIiOwoKbXkg
JG53aWR0aCA9IDExOyAgICAjIFdpZHRoIG9mIGEgbnVtZXJpYyBmaWVsZC4gRGVmYXVsdCBpcyBm
b3IgTUIuCgojIEdldCBvdXIgY3VycmVudCBjZWxsIG5hbWUgaWYgd2UgY2FuLiBTaW5jZSBhZnMg
YmluYXJpZXMgYXJlCiMga25vd24gdG8gYmUgaW5zdGFsbGVkIHdlJ2Qgb3JkaW5hcmlseSBiZSBj
b29sLCBidXQgdGhlIGZzIHdzY2VsbAojIGNvbW1hbmQgaXMgb25seSBnb2luZyB0byB3b3JrIG9u
IGFuIGFjdGl2ZSBjbGllbnQuIFNvIGlmIHRoaXMgY2FsbAojIGZhaWxzIG9uIGEgbm9uLWNsaWVu
dCB3aXRoIGFmcyBiaW5hcmllcywgd2UganVzdCBzZXQgdGhlIGNlbGxuYW1lCiMgYmxhbmsuCgok
Y2VsbG5hbWUgPSBgZnMgd3NjZWxsIDI+L2Rldi9udWxsYDsKaWYgKCAkY2VsbG5hbWUgIX4gcy9e
LionKC4qKSdcbi8kMS8gKSB7CiAgICAkY2VsbG5hbWUgPSAiIjsKfSBlbHNlIHsKICAgICRjZWxs
bmFtZSA9ICQxOwp9CgojIERvICpub3QqIGFjdHVhbGx5IHBhcnNlIHRoZSBvcHRpb25zIHVudGls
IHRoZSB1c2FnZSBzdGF0ZW1lbnRzCiMgYXJlIGJ1aWx0LCBiZWxvdy4KCiMtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiMgVXNhZ2UgYW5kIGhlbHAgbWVzc2FnZXMsIGFuZCBiYXNpYyBzZXR1cCBmb3IgZGVmaW5p
bmcgdGhlbS4KIwojIFRoZSBoZWxwIGZ1bmN0aW9uIHByaW50cyBhIGhlbHAgbWVzc2FnZSBvbiBT
VERFUlIgYW5kIGV4aXRzLiAgSXQgdGFrZXMKIyBubyBwYXJhbWV0ZXJzLCBhbmQgd2lsbCBjb21w
bGFpbiBpZiBtaXN1c2VkLgojCiMgVGhlIHVzYWdlIGZ1bmN0aW9uIHdpbGwgcHJpbnQgYW4gb3B0
aW9uYWwgc2V0IG9mIGNhbGxlci1zdXBwbGllZAojIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSBhIHN0
YW5kYXJkIHVzYWdlIG1lc3NhZ2UuCiMKIyBUaGUgc3RhbmRhcmQgdXNhZ2UgYW5kIGhlbHAgbWVz
c2FnZXMgaW5jbHVkZSB0aGUgbmFtZSBhbmQgdmVyc2lvbgojIG51bWJlciBvZiB0aGUgcHJvZ3Jh
bSBiZWluZyB1c2VkLiAgU29tZSBkZWZhdWx0cyBhcmUgaW5kaWNhdGVkOwojIHRoZSBtZXNzYWdl
cyBzaG91bGQgYmUgZGVmaW5lZCBiZWZvcmUgb3B0aW9ucyBhcmUgY2hlY2tlZC4KIy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KCiMgVGhlc2UgZnVua3kgbGluZXMgZGVmaW5lIGEgdmFyaWFibGUgbmFtZWQgVkVS
U0lPTiB3aGljaCB3ZSBidWlsZCBmcm9tCiMgdGhlIFJDUy9DVlMgcmV2aXNpb24gbnVtYmVyLgoK
bXkJJFZFUlNJT04gPSAnJFJldmlzaW9uOiAxLjIzICQnOwokVkVSU0lPTiA9fiBzL14uK1xzKyhc
UyspXHMuKiQvJDEvZzsKCiMgQ2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYWRkaXRpb25hbCBzdHJp
bmdzIG9mIHlvdXIgb3duIHRvCiMgcHJpbnQgYSB1c2FnZSBtZXNzYWdlLgoKc3ViIHVzYWdlIHsK
ICAgIG15CSRyZXR2YWwgPSAwOwoKICAgICMgS2VlcCB0aGlzIHVzYWdlIHN0YXRlbWVudCBpbiBz
eW5jIHdpdGggdGhlIGdldG9wdHMgdXNhZ2UgYWJvdmUhCiAgICAjIEZlZWwgZnJlZSB0byByZWFy
cmFuZ2UgdGhlIG9yZGVyIGFuZCBjb250ZW50IGZvciBtYXhpbXVtIGNsYXJpdHksCgogICAgbXkJ
JG1zZyA9CiJCYXNpYyAkVE9PTCB1c2FnZSBpczoKCiAgICRUT09MIDxvcHRpb24gZmxhZyhzKT4g
WyBmaWxlZGlyIFsgZmlsZWRpciBdLi4uIF0KClRoZSBvcHRpb25zIGF2YWlsYWJsZSBhcmU6Cgog
IC11IFggICAgIC0tdW5pdHMgWFggICAgIHVuaXRzIHRvIHVzZSAtIE1CLCBHQiwgVEIsIFBCIChk
ZWZhdWx0OiAke3V0YWdfZGZsdH0pCiAgLXcgWCAgICAgLS13YXJuaW5nIFggICAgd2FybiBpZiBt
b3JlIHRoYW4gWCUgZnVsbCAoZGVmYXVsdDogJHt3YXJuX2xldmVsfSUpCiAgLWQgWCAgICAgLS1k
YW5nZXIgWCAgICAgZGFuZ2VyIGlmIG1vcmUgdGhhbiBYJSBmdWxsIChkZWZhdWx0OiAke2Rhbmdl
cl9sZXZlbH0lKQogIC1XICAgICAgIC0tbm93YXJuaW5nICAgIHN1cHByZXNzIHdhcm5pbmcgbWVz
c2FnZXMgKGRlZmF1bHQ6ICRub3dhcm5pbmdfZGZsdCkKICAtRCAgICAgICAtLW5vZGFuZ2VyICAg
ICBzdXBwcmVzcyBkYW5nZXIgbWVzc2FnZXMgKGRlZmF1bHQ6ICRub2Rhbmdlcl9kZmx0KQogIC1j
IG5hbWUgIC0tY2VsbCBuYW1lICAgIHNlbGVjdCB3aGF0IGNlbGwgdG8gbGlzdCAoZGVmYXVsdDog
eW91ciBjZWxsKQogIC1zCSAgIC0tc3VidG90YWxzICAgIHByaW50IHBlci1zZXJ2ZXIgc3VidG90
YWxzIChkZWZhdWx0OiAkc3VidG90YWxzX2RmbHQpCiAgLXIJICAgLS1yZXBlYXRzcnYgICAgc3Vw
cHJlc3MgZXh0cmEgc2VydmVyIG5hbWVzIChkZWZhdWx0OiAkcmVwZWF0c3J2X2RmbHQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoYXV0b21hdGljIHdpdGggLXMpCiAgLXQJICAgLS10cmlt
Y2VsbCAgICAgcmVtb3ZlIGNlbGxuYW1lIGZyb20gc2VydmVycyAoZGVmYXVsdDogJHRyaW1jZWxs
X2RmbHQpCiAgLVQJICAgLS10cmltYWxsICAgICAgcmVtb3ZlIGFsbCBidXQgaG9zdCBuYW1lIGZy
b20gc2VydmVycyAoZGVmYXVsdDogJHRyaW1hbGxfZGZsdCkKCiAgLVUgICAgLS11c2FnZSAgICAg
ICAgICAgcHJpbnQgdGhpcyB1c2FnZSBtZXNzYWdlIGFuZCBleGl0CiAgICAgICAgLS1oZWxwICAg
ICAgICAgICAgcHJpbnQgYSBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKICAgICAgICAtLXZlcnNpb24g
ICAgICAgICBwcmludCB2ZXJzaW9uIG51bWJlciBvZiAkVE9PTCBhbmQgZXhpdAogIC1WICAgIC0t
dmVyYm9zZSAgICAgICAgIGJlIHZlcmJvc2UgKGRlZmF1bHQ6ICR2ZXJib3NlX2RmbHQpCgokVE9P
TCB2ZXJzaW9uICRWRVJTSU9OIC0gc2VuZCBjb21tZW50cy9idWdzIHRvIHNjc1xAdW1pY2guZWR1
LgoiOwogICAgIyBJZiB0aGVyZSBhcmUgbWVzc2FnZXMsIHdlIGFzc3VtZSBhbiBlcnJvciBvY2N1
cnJlZCBhbmQKICAgICMgZXZlcnl0aGluZyBtdXN0IGdvIHRvIHN0ZGVyci4gT3RoZXJ3aXNlIGl0
IHdhcyBqdXN0IGEKICAgICMgdXNhZ2UgcmVxdWVzdCBhbmQgZ29lcyB0byBzdGRvdXQuCiAgICBp
ZiAoIEBfICkgewoJcHJpbnQgU1RERVJSICIkVE9PTDogIjsKCWZvcmVhY2ggKCBAXyApIHsKCSAg
ICBwcmludCBTVERFUlIgJF8sICJcbiI7Cgl9CglwcmludCBTVERFUlIgIlxuIjsKCXByaW50IFNU
REVSUiAkbXNnOwoJZXhpdCAxOwogICAgfSBlbHNlIHsKCXByaW50IFNURE9VVCAkbXNnCiAgICB9
CiAgICBleGl0IDA7Cn0KCnN1YiBoZWxwIHsKICAgIG15CSRhcmdfY291bnQgPSBzY2FsYXIoIEBf
ICk7CiAgICBjYXJwICIkVE9PTCBpbnRlcm5hbCBlcnJvcjogaGVscCBjYWxsZWQgd2l0aCBhcmdz
IiBpZiAoICRhcmdfY291bnQgKTsKCiAgICBteQkkbXNnID0KIiRUT09MIHByaW50cyBkaXNrIHVz
YWdlIGZvciBhbiBlbnRpcmUgYWZzIGNlbGwgaW4gYSBmb3JtYXQgdGhhdCdzCmVhc3kgZm9yIHBl
b3BsZSB0byByZWFkLiBUaGUgc2ltcGxlc3QgdXNlIGlzIGp1c3QKCiAgICAkVE9PTAoKd2hpY2gg
d2lsbCBwcmludCBvdXQgYWxsIHBhcnRpdGlvbnMgb2YgYWxsIGNlbGxzIG9mIHlvdXIgY3VycmVu
dCBBRlMgY2VsbC4KSWYgYW55IHBhcnRpdGlvbnMgYXJlIHRvbyBmdWxsLCBhbiBhcHByb3ByaWF0
ZSB3YXJuaW5nIG1lc3NhZ2UgaXMgcHJpbnRlZC4KCllvdSBjYW4gbW9kaWZ5IHRoZSBvdXRwdXQg
aW4gdmFyaW91cyBpbnRlcmVzdGluZyB3YXlzLCBpbmNsdWRpbmcgdGhlCnN1cHJlc3Npb24gb2Yg
cmVwZWF0ZWQgaG9zdG5hbWVzLCBzZWxlY3RpbmcgYSBzcGVjaWZpYyBjZWxsLCBzaG9ydGVuaW5n
CnRoZSBob3N0bmFtZXMsIGV0Yy4gRm9yIGV4YW1wbGUsCgogICAgJFRPT0wgLXQgLS1jZWxsIGZv
by5iYXIuY29tCgp3aWxsIHNob3cgZGlzayB1c2FnZSBmb3IgYWxsIHRoZSBzZXJ2ZXJzIGFuZCBw
YXJ0aXRpb25zIGluIHRoZSBjZWxsCmZvby5iYXIuY29tLCByZW1vdmluZyAnLmZvby5iYXIuY29t
JyBmcm9tIHRoZWlyIG5hbWVzIGFuZCBzdXByZXNzaW5nCmR1cGxpY2F0ZSBob3N0bmFtZXMuCgpU
byBzZWUgYWxsIHRoZSBvcHRpb25zLCBkbwogICAgJFRPT0wgLS11c2FnZQoKJFRPT0wgdmVyc2lv
biAkVkVSU0lPTiAtIHNlbmQgY29tbWVudHMvYnVncyB0byBzY3NcQHVtaWNoLmVkdS4KIjsKICAg
IHByaW50IFNURE9VVCAkbXNnOwogICAgZXhpdCAwOwp9CgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQ
cm9jZXNzIHRoZSBvcHRpb25zLCBnaXZpbmcgaW1tZWRpYXRlIGhlbHAvdXNhZ2UgaWYgcmVxdWVz
dGVkCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9faWdu
b3JlX2Nhc2UpOwoKbXkgJHJlc3VsdCA9IEdldE9wdGlvbnMgKAogICAgICAgICJ2ZXJib3NlfFYi
CT0+IFwkdmVyYm9zZSwJCSNib29sZWFuCiAgICAgICAgInVzYWdlfFUiCT0+IFwkdXNhZ2UsCQkj
Ym9vbGVhbgogICAgICAgICJoZWxwIgkJPT4gXCRoZWxwLAkJI2Jvb2xlYW4KICAgICAgICAidmVy
c2lvbiIJPT4gXCR2ZXJzaW9uLAkJI2Jvb2xlYW4KCSJwZXJsd2FybiIJPT4gXCRwZXJsd2FybiwJ
CSNib29sZWFuCgkid2FybmluZ3x3PWkiCT0+IFwkd2Fybl9sZXZlbCwKCSJkYW5nZXJ8ZD1pIgk9
PiBcJGRhbmdlcl9sZXZlbCwKCSJub3dhcm5pbmd8VyIJPT4gXCRub3dhcm5pbmcsCQkjYm9vbGVh
bgoJIm5vZGFuZ2VyfEQiCT0+IFwkbm9kYW5nZXIsCQkjYm9vbGVhbgoJInN1YnRvdGFsc3xzIiAg
ID0+IFwkc3VidG90YWxzLAkJI2Jvb2xlYW4KCSJyZXBlYXRzcnZ8ciIgICA9PiBcJHJlcGVhdHNy
diwJCSNib29sZWFuCgkidHJpbWNlbGx8dCIgICAgPT4gXCR0cmltY2VsbCwJCSNib29sZWFuCgki
dHJpbWFsbHxUIiAgICAgPT4gXCR0cmltYWxsLAkJI2Jvb2xlYW4KCSJkZWJ1Zz1zIgk9PiBcJGRl
YnVnLAkJI3N0cmluZwoJImNlbGx8Yz1zIgk9PiBcJGNlbGxuYW1lLAkJI3N0cmluZwoJInVuaXRz
fHU9cyIJPT4gXCR1ZmxhZywJCSNzdHJpbmcKKTsKdXNhZ2UgIiIgaWYgISAkcmVzdWx0OwoKbXkg
JGNlbGxmbGFnID0gIiIgZXEgJGNlbGxuYW1lID8gIiIgOiAiLWNlbGwgJGNlbGxuYW1lIjsKCm15
ICRzcnZfd2lkdGggPSBsZW5ndGgoICJHcmFuZCBUb3RhbCIgKTs7CgojIFR1cm4gb2ZmIHdhcm5p
bmdzIHNvIHdlIGNhbiBwcm9jZXNzIHRoZSBmbGFncwoKbm8gc3RyaWN0OwpteSAkb2xkd2Fybmlu
ZyA9ICRXQVJOSU5HOwoKIyBSZXN0b3JlIHdhcm5pbmdzIGlmIHdlIHNob3VsZAoKdXNlIHN0cmlj
dDsKCm15ICRXQVJOSU5HID0gJHBlcmx3YXJuID8gJHBlcmx3YXJuIDogJG9sZHdhcm5pbmc7Cgp1
c2FnZSBpZiAoICR1c2FnZSApOwpoZWxwIGlmICggJGhlbHAgKTsKaWYgKCAkdmVyc2lvbiApIHsK
ICAgIHByaW50ICIkVE9PTCB2ZXJzaW9uICRWRVJTSU9OXG4iOwogICAgZXhpdCAwOwp9CgppZiAo
ICR2ZXJib3NlIGFuZCAhICRkZWJ1ZyApIHsKICAgIHByaW50ZiAiJXMgdmVyc2lvbiAlcyBpcyBy
dW5uaW5nLlxuIiwgJFRPT0wsICRWRVJTSU9OOwp9CgojIFNldCB2YXJpb3VzIGNvbnN0YW50cyBk
ZXBlbmRpbmcgb24gdGhlIHVuaXQgcmVxdWVzdGVkCgppZiAoICR1ZmxhZyApIHsKICAgIGlmICgg
IiR1ZmxhZyIgPX4gL15NQiQvaSApIHsKCSR1dGFnID0gIk1CIjsKCSR1bml0cyA9IDEwMjQ7Cgkk
bndpZHRoID0gMTE7CiAgICB9IGVsc2lmICggIiR1ZmxhZyIgPX4gL15HQiQvaSApIHsKCSR1dGFn
ID0gIkdCIjsKCSR1bml0cyA9IDEwMjQgKiAxMDI0OwoJJG53aWR0aCA9IDc7CiAgICB9IGVsc2lm
ICggIiR1ZmxhZyIgPX4gL15UQiQvaSApIHsKCSR1dGFnID0gIlRCIjsKCSR1bml0cyA9IDEwMjQg
KiAxMDI0ICogMTAyNDsKCSRud2lkdGggPSA3OwogICAgfSBlbHNpZiAoICIkdWZsYWciID1+IC9e
UEIkL2kgKSB7CgkkdXRhZyA9ICJQQiI7CgkkdW5pdHMgPSAxMDI0ICogMTAyNCAqIDEwMjQgKiAx
MDI0OwoJJG53aWR0aCA9IDc7CiAgICB9IGVsc2UgewoJdXNhZ2UgIiRUT09MOiBObyBzdWNoIHVu
aXQgYXMgJyR1ZmxhZycuIFVzZSAnTUInLCAnR0InIG9yICdUQicuIjsKCWV4aXQ7CiAgICB9Cn0K
CmlmICggJGRlYnVnICkgewogICAgcHJpbnRmICIlcyB2ZXJzaW9uICVzIGlzIHJ1bm5pbmcgd2l0
aCBzZXR0aW5nczpcbiIsICRUT09MLCAkVkVSU0lPTjsKICAgIHByaW50ZiAiICBXYXJuaW5nIGxl
dmVsIGlzICUuMmYlJSwgIiwgJHdhcm5fbGV2ZWw7CiAgICBwcmludGYgIndhcm5pbmcgbm90aWNl
cyBhcmUgJXMuXG4iLCAkbm93YXJuaW5nID8gIlNVUFJFU1NFRCIgOiAiUFJJTlRFRCI7CiAgICBw
cmludGYgIiAgRGFuZ2VyIGxldmVsIGlzICUzLjJmJSUsICIsICRkYW5nZXJfbGV2ZWw7CiAgICBw
cmludGYgImRhbmdlciBub3RpY2VzIGFyZSAlcy5cbiIsICRub2RhbmdlciA/ICJTVVBSRVNTRUQi
IDogIlBSSU5URUQiOwogICAgcHJpbnRmICIgIFBlcmwgd2FybmluZ3MgYXJlICVzLCAiLCAkcGVy
bHdhcm4gPyAiT04iIDogIk9GRiI7CiAgICBwcmludGYgIm5hdGl2ZSBwZXJsIHdhcm5pbmdzIGFy
ZSAlcy5cbiIsICRXQVJOSU5HID8gIk9OIiA6ICJPRkYiOwogICAgcHJpbnRmICIgIFZlcmJvc2Ug
aXMgJXMsICIsICR2ZXJib3NlID8gIk9OIiA6ICJPRkYiOwogICAgcHJpbnRmICJkZWJ1Z2dpbmcg
aXMgJXMuXG4iLCAkZGVidWcgPyAiT04iIDogIk9GRiI7CiAgICBwcmludGYgIiBjZWxsIHRvIHVz
ZTogJXNcbiIsICIiIGVxICRjZWxsbmFtZSA/ICJsb2NhbCIgOiAiJGNlbGxuYW1lIjsKICAgIHBy
aW50ZiAiIHVuaXRzIHdpbGwgYmU6ICVzXG4iLCAiJHVmbGFnIjsKfQoKIyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIyBHbG9iYWwgdmFyaWFibGVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpteSAkd2FybmluZ19zZWVu
ID0gMDsKbXkgJGRhbmdlcl9zZWVuID0gMDsKCm15ICR3YXJuaW5nX2ZsYWcgPSAiICA8PCBXYXJu
aW5nIjsKbXkgJGRhbmdlcl9mbGFnID0gIiAgPDwgREFOR0VSIjsKCgojIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQojIEJvaWxlciBwbGF0ZSBmdW5jdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgR2l2ZW4gYSBu
dW1lcmljIHN0cmluZywgYWRkIGNvbW1hcyBmb3IgaHVtYW4gcmVhZGFiaWxpdHkuCgpzdWIgY29t
bWlmeSB7CiAgICBteSAkdCA9IHJldmVyc2UgJF9bMF07CiAgICAkdCA9fiBzLyhcZFxkXGQpKD89
XGQpKD8hXGQqXC4pLyQxLC9nOwogICAgcmV0dXJuIHNjYWxhciByZXZlcnNlICR0Owp9CgojIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQojIFN1YnJvdXRpbmVzIGFuZCB0aGVpciByZWxhdGVkIHZhcmlhYmxlcwoj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQoKc3ViIG1rX2ZsYWcgewogICAgbXkgKCAkcGN0ICkgPSAkX1swXTsK
ICAgIG15ICRmbGFnID0gIiI7CgogICAgaWYgKCAkcGN0ID49ICRkYW5nZXJfbGV2ZWwgKSB7Cgkk
ZGFuZ2VyX3NlZW4rKzsKCWlmICggISAkbm9kYW5nZXIgKSB7CgkgICAgJGZsYWcgPSAkZGFuZ2Vy
X2ZsYWc7Cgl9IGVsc2UgewoJICAgICRmbGFnID0gJHdhcm5pbmdfZmxhZyBpZiAoICEgJG5vd2Fy
bmluZyApOwoJfQogICAgfSBlbHNpZiAoICRwY3QgPj0gJHdhcm5fbGV2ZWwgKSB7Cgkkd2Fybmlu
Z19zZWVuKys7CgkkZmxhZyA9ICR3YXJuaW5nX2ZsYWcgaWYgKCAhICRub3dhcm5pbmcgKTsKICAg
IH0KICAgIHJldHVybiAkZmxhZwp9CgpzdWIgZmluZF9hbGwgewogICAgbXkgKCBAbGlzdCwgJGxp
bmUsICRwY3QsICVzZXJ2ZXJzLCAlc3J2dGFncyApOwogICAgbXkgKCAkc2VydmVyLCAkc2Vydm5h
bWUsICRwYXJ0aXRpb24sICRzaXplLCAkZnJlZSwgJHVzZWQgKTsKICAgIG15ICggJGd0b3RfZnJl
ZSwgJGd0b3RfdXNlZCwgJGd0b3Rfc2l6ZSApID0gKCAwLCAwLCAwKTsKICAgIG15ICggJHN0b3Rf
ZnJlZSwgJHN0b3RfdXNlZCwgJHN0b3Rfc2l6ZSApID0gKCAwLCAwLCAwKTsKICAgIG15ICggJHNu
YW1lbGVuLCAkdXVpZCApOwoKICAgICMgR2V0IGFsbCB0aGUgc2VydmVyIG5hbWVzLCBidXQgb25s
eSBvbmNlLgoKICAgIG9wZW4oIEZTREFUQSwgInZvcyBsaXN0YWRkcnMgLXByaW50dXVpZCAkY2Vs
bGZsYWcgLW5vYXV0aCB8IiApOwogICAgd2hpbGUgKCAkbGluZSA9IDxGU0RBVEE+ICkgewogICAg
ICAgICMgU3VjayBpbiBvbmUgc2VydmVycyB3b3J0aCBvZiBkYXRhLCBrZWVwaW5nIG9ubHkgZmly
c3QgbmFtZQogICAgICAgIGlmICggJGxpbmUgPX4gL15VVUlEOiAoLiopJC8gKSB7CgkgICAgICR1
dWlkID0gJDE7CgkgICAgICRzZXJ2ZXIgPSA8RlNEQVRBPjsKCSAgICAgY2hvbXAgJHNlcnZlcjsK
CSAgICAgd2hpbGUgKCAiIiBuZSAkbGluZSApIHsKCQkkbGluZSA9IDxGU0RBVEE+OwoJICAgICAJ
Y2hvbXAgJGxpbmU7CgkgICAgfQoJICAgICRkZWJ1ZyAmJiBwcmludCAiR290IHV1aWQgJyR1dWlk
JyBmb3IgJyRzZXJ2ZXInLlxuIjsKCX0KCWlmICggISBleGlzdHMgJHNlcnZlcnN7dXVpZH0gKSB7
CgkgICAgJHNlcnZlcnN7JHV1aWR9ID0gJHNlcnZlcjsJIyBTYXZlIHRoZSBmdWxsIG5hbWUKCSAg
ICAjIFRyaW0gY2VsbG5hbWUgb3IgZG9tYWluIG5hbWUgZnJvbSBzZXJ2ZXIgaWYgYXNrZWQgYW5k
IGlmIHdlIGNhbgoJICAgIGlmICggJHRyaW1hbGwgKSB7CgkJJHNlcnZlciA9fiBzL1wuLiokLy87
CgkgICAgfSBlbHNpZiAoICR0cmltY2VsbCApIHsKCQlpZiAoICIiICF+IC9eJGNlbGxuYW1lJC8g
KSB7CgkJICAgICRzZXJ2ZXIgPX4gcy9cLiRjZWxsbmFtZSQvLzsKCQl9CgkgICAgfQoJICAgICMg
U2F2ZSB0aGUgbmFtZSB3ZSdsbCBhY3R1YWxseSBkaXNwbGF5CgkgICAgJHNydnRhZ3N7JHNlcnZl
cnN7JHV1aWR9fSA9ICRzZXJ2ZXI7CgkgICAgIyBCdWlsZCBzZXJ2ZXIgbmFtZSB3aWR0aCBkeW5h
bWljbHkKCSAgICAkc25hbWVsZW4gPSBsZW5ndGgoICRzZXJ2ZXIgKTsKCSAgICAkc3J2X3dpZHRo
ID0gJHNuYW1lbGVuIGlmICRzbmFtZWxlbiA+ICRzcnZfd2lkdGg7Cgl9CiAgICB9CiAgICBjbG9z
ZSBGU0RBVEE7CgogICAgcHJpbnRmICIlLSR7c3J2X3dpZHRofS4ke3Nydl93aWR0aH1zICAlLTNz
ICAlJHtud2lkdGh9cyAgJSR7bndpZHRofXMgICUke253aWR0aH1zICAlOHNcbiIsCgkiU2VydmVy
IiwgIlB0biIsICJTaXplJHV0YWciLCAiVXNlZCIsICJBdmFpbC4iLCAiUGN0IEZ1bGwiOwogICAg
cHJpbnRmICIlLSR7c3J2X3dpZHRofS4ke3Nydl93aWR0aH1zICAlM3MgICUke253aWR0aH1zICAl
JHtud2lkdGh9cyAgJSR7bndpZHRofXMgICU4c1xuIiwKCSI9Ingkc3J2X3dpZHRoLCAnPSd4Mywg
Jz0neCR7bndpZHRofSwnPSd4JHtud2lkdGh9LCAnPSd4JHtud2lkdGh9LCAnPSd4ODsKCiAgICAj
IEZvciBlYWNoIHNlcnZlciwgZ2V0IGRpc2sgdXNhZ2UgYW5kIGZvcm1hdCBpdCBwcm9wZXJseQoK
ICAgIG15ICRzdWJ0b3RhbF9kb25lID0gMDsKICAgIGZvciAkc2VydmVyICggc29ydCB2YWx1ZXMg
JXNlcnZlcnMgKSB7CglteSBAZnNkYXRhOwoJJHNlcnZuYW1lID0gJHNydnRhZ3N7JHNlcnZlcn07
CglpZiAoICRzdWJ0b3RhbHMgKSB7CgkgICAgJHN0b3RfZnJlZSA9ICRzdG90X3VzZWQgPSAkc3Rv
dF9zaXplID0gMDsKCSAgICAjIElmIHdlIGp1c3QgcHJpbnRlZCBhIHN1YnRvdGFsLCBwcmludCBh
biBleHRyYSBuZXdsaW5lCgkgICAgIyBzY3Mgbm90ZSAyMDExLzA4LzE4IC0gbm90IHN1cmUgdGhp
cyBpcyByZWFsbHkgZGVzaXJlYWJsZQoJICAgIHByaW50ICJcbiIgaWYgKCAkc3VidG90YWxfZG9u
ZSApOwoJfQoJb3BlbiggRlNEQVRBLCAidm9zIHBhcnRpbmZvIC1zZXJ2ZXIgJHNlcnZlciAkY2Vs
bGZsYWcgLW5vYXV0aCB8IiApOwoJQGZzZGF0YSA9ICggPEZTREFUQT4gKTsKCWZvcmVhY2ggJGxp
bmUgKCBAZnNkYXRhICkgewoJICAgICMgQWxsIGNhbGN1bGF0aW9uIGlzIGRvbmUgaW4gdGhlIG5h
dGl2ZSBzZXJ2ZXIgdW5pdHMsIEtCLgoJICAgICMgV2Ugc2NhbGUgdGhlbSBhcyByZXF1ZXN0ZWQg
d2hlbiBwcmludGluZy4KCSAgICBjaG9tcCAkbGluZTsKCSAgICBAbGlzdCA9IHNwbGl0IC9bIDpd
LywgJGxpbmU7CgkgICAgJHBhcnRpdGlvbiA9ICRsaXN0WzRdOwoJICAgICRwYXJ0aXRpb24gPX4g
cy9eXC92aWNlcC8vOwoJICAgICRzaXplID0gJGxpc3RbMTJdOwoJICAgICRmcmVlID0gJGxpc3Rb
Nl07CgkgICAgJHVzZWQgPSAkc2l6ZSAtICRmcmVlOwoJICAgICRwY3QgPSAoICR1c2VkIC8gJHNp
emUgKSAqIDEwMDsKCSAgICBwcmludGYgIiUtJHtzcnZfd2lkdGh9LiR7c3J2X3dpZHRofXMgICAl
LTFzICAgJSR7bndpZHRofXMgICUke253aWR0aH1zICAlJHtud2lkdGh9cyAgJTcuMmYlJSVzXG4i
LAoJCSRzZXJ2bmFtZSwgJHBhcnRpdGlvbiwgY29tbWlmeSggaW50KCAkc2l6ZSAvICR1bml0cyAp
ICksCgkJY29tbWlmeSggaW50KCAkdXNlZCAvICR1bml0cyApICksCgkJY29tbWlmeSggaW50KCAk
ZnJlZSAvICR1bml0cyApICksCgkJJHBjdCwgbWtfZmxhZyggJHBjdCApOwoJICAgICMgU3VwcmVz
cyBkdXBsaWNhdGUgc2VydmVyIG5hbWVzIHdoZW4gdXNpbmcgc3VidG90YWxzCgkgICAgIyBvciBp
ZiBhc2tlZCB0by4KCSAgICAkc2Vydm5hbWUgPSAiIiBpZiAoICRzdWJ0b3RhbHMgb3IgJHJlcGVh
dHNydiApOwoJICAgICRzdG90X2ZyZWUgKz0gJGZyZWU7CgkgICAgJHN0b3RfdXNlZCArPSAkdXNl
ZDsKCSAgICAkc3RvdF9zaXplICs9ICRzaXplOwoJICAgICRndG90X2ZyZWUgKz0gJGZyZWU7Cgkg
ICAgJGd0b3RfdXNlZCArPSAkdXNlZDsKCSAgICAkZ3RvdF9zaXplICs9ICRzaXplOwoJfQoJI3By
aW50ICJcJHN0b3Rfc2l6ZSBpcyAnJHN0b3Rfc2l6ZSdcbiI7CglpZiAoICRzdWJ0b3RhbHMgKSB7
CgkgICAgJHBjdCA9ICggJHN0b3RfdXNlZCAvICRzdG90X3NpemUgKSAqIDEwMDsKCSAgICBwcmlu
dGYoICIlJHtzcnZfd2lkdGh9LiR7c3J2X3dpZHRofXMgICAgICAgJSR7bndpZHRofXMgICUke253
aWR0aH1zICAlJHtud2lkdGh9cyAgJTcuMmYlJSVzXG4iLAoJCSAgICAiU3VidG90YWwiLCBjb21t
aWZ5KCBpbnQoICRzdG90X3NpemUgLyAkdW5pdHMgKSApLAoJCSAgICBjb21taWZ5KCBpbnQoICRz
dG90X3VzZWQgLyAkdW5pdHMgKSApLAoJCSAgICBjb21taWZ5KCBpbnQoICRzdG90X2ZyZWUgLyAk
dW5pdHMgKSApLAoJCSAgICAkcGN0LCBta19mbGFnKCAkcGN0ICkgKTsKCSAgICAkc3VidG90YWxf
ZG9uZSA9IDE7Cgl9CiAgICB9CiAgICBpZiAoIDAgPT0gJGd0b3Rfc2l6ZSApIHsKCSRwY3QgPSAw
OwogICAgfSBlbHNlIHsKCSRwY3QgPSAoICRndG90X3VzZWQgLyAkZ3RvdF9zaXplICkgKiAxMDA7
CiAgICB9CiAgICBwcmludGYgIiUtJHtzcnZfd2lkdGh9LiR7c3J2X3dpZHRofXMgICUzcyAgJSR7
bndpZHRofXMgICUke253aWR0aH1zICAlJHtud2lkdGh9cyAgJThzXG4iLAoJIj0ieCRzcnZfd2lk
dGgsICc9J3gzLCAnPSd4JHtud2lkdGh9LCc9J3gke253aWR0aH0sICc9J3gke253aWR0aH0sICc9
J3g4OwogICAgcHJpbnRmICIlJHtzcnZfd2lkdGh9LiR7c3J2X3dpZHRofXMgICAgICAgJSR7bndp
ZHRofXMgICUke253aWR0aH1zICAlJHtud2lkdGh9cyAgJTcuMmYlJSVzXG4iLAoJICAgICJHcmFu
ZCBUb3RhbCIsIGNvbW1pZnkoIGludCggJGd0b3Rfc2l6ZSAvICR1bml0cyApICksCgkgICAgY29t
bWlmeSggaW50KCAkZ3RvdF91c2VkIC8gJHVuaXRzICkgKSwKCSAgICBjb21taWZ5KCBpbnQoICRn
dG90X2ZyZWUgLyAkdW5pdHMgKSApLAoJICAgICRwY3QsIG1rX2ZsYWcoICRwY3QgKTsKICAgIGNs
b3NlIEZTREFUQTsKICAgIGlmICggJHZlcmJvc2UgKSB7CglpZiAoIDAgPT0gKCAkZGFuZ2VyX3Nl
ZW4gKyAkd2FybmluZ19zZWVuICkgKXsKCSAgICBwcmludCAiICBObyBwYXJ0aXRpb25zIGFyZSBv
dmVybHkgZnVsbC5cbiI7Cgl9IGVsc2UgewoJICAgIHByaW50ZiAiICAlcyBwYXJ0aXRpb25zIGZh
aXJseSBmdWxsLCAlcyBhcmUgZGFuZ2Vyb3VzbHkgZnVsbC5cbiIsCgkJJHdhcm5pbmdfc2VlbiA/
ICR3YXJuaW5nX3NlZW4gOiAiTm8iLAoJCSRkYW5nZXJfc2VlbiA/ICRkYW5nZXJfc2VlbiA6ICJu
b25lIjsKCX0KICAgIH0KfQoKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTUFJTiAtIGV2ZXJ5dGhpbmcg
aXMgc2V0LCBsZXRzIGRvIHJlYWwgd29yay4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmZpbmRfYWxsKCk7
CgpleGl0IDA7Cg==
--94eb2c124da2f4af6d054f1a9dea--