eval %q{cmVxdWlyZSAnc2tldGNodXAucmInCgpjbGFzcyBTcHJheXByb2dyZXNzQmFy
IAoKQEBlcnJfdG90YWxfbm90bnVtZXJpYyA9ICJQcm9ncmVzc0JhcjogVG90
YWwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIgpAQGVycl9jb3VudF9u
b3RudW1lcmljID0gIlByb2dyZXNzQmFyOiBJdGVyYXRpb24gQ291bnQgbXVz
dCBiZSBudW1lcmljIgpAQGVuZF90aW1lICAgICAgICAgICAgID0gIkVuZCBA
ICIgCkBAcHJvZ3Jlc3NjaGFyID0gIj4iIDsgCkBAaW5pdGlhbF9ibG9jayA9
ICItIiAqIDUwICAgICAjIERlZmF1bHQgcHJvZ3Jlc3MgYmFyIGxpbmUgc2Vx
dWVuY2UuCgpkZWYgaW5pdGlhbGl6ZSh0b3RhbCxwaGFzZT1uaWwpICAKICBp
ZiAoIXRvdGFsLmludGVnZXI/IG9yIHRvdGFsIDwgMCkKICAgIHJhaXNlKEFy
Z3VtZW50RXJyb3IsQEBlcnJfdG90YWxfbm90bnVtZXJpYykKICAgIHJldHVy
biA7IAogICAgZW5kIDsgCiAgQHRvdGFsID0gdG90YWwudG9faSA7IAogIEBw
aGFzZSA9IHBoYXNlIDsgCiAgQGZpcnN0dGltZSA9IHRydWUgOyAKICBlbmQg
OyAKCmRlZiB1cGRhdGUoaXRlcmF0aW9uKSAKICBpZiAhaXRlcmF0aW9uLmlu
dGVnZXI/IAogICAgcmFpc2UoQXJndW1lbnRFcnJvcixAQGVycl9jb3VudF9u
b3RudW1lcmljKSAgCiAgICByZXR1cm4gOyAKICAgIGVuZCA7IAogIGl0ZXJh
dGlvbiA9IFtpdGVyYXRpb24uYWJzLEB0b3RhbF0ubWluICAjIG1ha2Ugc3Vy
ZSB3ZSBkb24ndCBleGNlZWQgdGhlIHRvdGFsIGNvdW50IG9yIGhhdmUgYSB2
YWx1ZSA8IDAKICBwY3QgPSBbMSwoaXRlcmF0aW9uKjEwMCkvQHRvdGFsXS5t
YXggICAgIyBDYWxjdWxhdGUgcGVyY2VudGFnZSBjb21wbGV0ZS4KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByb3VuZCB1
cCB0byAxJSBpZiBhbnl0aGluZyBsZXNzIHRoYW4gMSUuCiAgZW5kX3RpbWUg
PSAiPyIgOyAKICBpZiBAZmlyc3R0aW1lIHRoZW4gOyAKICAgICMgR2V0IHRo
ZSBjdXJyZW50IHRpbWUgb2YgZGF5LiAKICAgICMgc2V0IHVwIGFuIGVsYXBz
ZWQgdGltZXIgc28gd2UgY2FuIGNhbGN1bGF0ZSBleHBlY3RlZCBlbmQgdGlt
ZS4gIAogICAgQHRpbWUxID0gVGltZS5ub3cgOyAgICAgIyBHZXQgY3VycmVu
dCB0aW1lIG9mIGRheS4gCiAgICBAZmlyc3R0aW1lID0gZmFsc2UgOyAgICAj
IHR1cm4gb2ZmIHN3aXRjaCAKICBlbHNlIAogICAgIyBkaXZpZGUgdGhlIGVs
YXBzZWQgdGltZSBieSB0aGUgcGN0IGNvbXBsZXRlLCB0aGVuIG11bHRpcGxl
IHRoYXQgYnkgMTAwLCB0aGVuIGFkZCB0aGF0IHRvIHRoZSAKICAgICMgc3Rh
cnQgdGltZSwgYW5kIHRoYXQgaXMgdGhlIGV4cGVjdGVkIGVuZCB0aW1lLiAg
CiAgICBlbmRfdGltZSA9IFRpbWUuYXQoKCgoKFRpbWUubm93LUB0aW1lMSku
dG9fZikvcGN0KSoxMDAgKyBAdGltZTEudG9fZikudG9faSkuc3RyZnRpbWUo
IiVIOiVNOiVTIikgCiAgICBlbmQgOyAKICBwY3RfcG9zID0gW3BjdC8yLDFd
Lm1heCA7CiAgY3VycmVudF9ibG9jayA9IEBAaW5pdGlhbF9ibG9ja1swLHBj
dF9wb3MtMV0gPDwgQEBwcm9ncmVzc2NoYXIgPDwgQEBpbml0aWFsX2Jsb2Nr
W3BjdF9wb3MsQEBpbml0aWFsX2Jsb2NrLmxlbmd0aF0KICBTa2V0Y2h1cC5z
ZXRfc3RhdHVzX3RleHQoY3VycmVudF9ibG9jayA8PCAiICAgIiA8PCAocGN0
LnRvX3MpIDw8ICIlLiAje0BAZW5kX3RpbWV9ICIgPDwgZW5kX3RpbWUgPDwg
IiAje0BwaGFzZX0iKQogICNTa2V0Y2h1cC5zZXRfc3RhdHVzX3RleHQoY3Vy
cmVudF9ibG9jayA8PCAiICAgIiA8PCAocGN0LnRvX3MpIDw8ICIlIikKICBp
ZiAoKChUaW1lLm5vdy1AdGltZTEpLnRvX2YvcGN0KSoxMDApID4gJGNidF9k
ZWxheQogICAgJGNidF9zdG9wX3RpbWVyID0gdHJ1ZQogIGVuZAogICNpZiAo
KChUaW1lLm5vdy1AdGltZTEpLnRvX2YgPiAzMDAKICAgICMkY2J0X3N0b3Bf
dGltZXIgPSB0cnVlCiAgI2VuZAogIGVuZCA7IAoKZW5kIDsgIyBjbGFzcyBQ
cm9ncmVzc0JhciA7CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUmV0dXJucyBoaWdoZXN0L2xvd2VzdCBaIG9mIG1vZGVsCmRlZiBjYnRf
bW9kZWxfdG9wCm1vZGVsID0gU2tldGNodXAuYWN0aXZlX21vZGVsCnJldHVy
biBtb2RlbC5ib3VuZHMubWF4LnoKZW5kCmRlZiBjYnRfbW9kZWxfYm90dG9t
Cm1vZGVsID0gU2tldGNodXAuYWN0aXZlX21vZGVsCnJldHVybiBtb2RlbC5i
b3VuZHMubWluLnoKZW5kCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgcG9pbnRzIHRvIGFsdGl0dWRl
IGgKZGVmIG1hcF96KHBvaW50c19hcnJheSwgaCkKbWFwcGVkX2FycmF5ID1b
XQpwb2ludHNfYXJyYXkuZWFjaCB7IHxwfCBtYXBwZWRfYXJyYXkucHVzaCBH
ZW9tOjpQb2ludDNkLm5ldyhwLngsIHAueSwgaCkgfQpyZXR1cm4gbWFwcGVk
X2FycmF5CmVuZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
UmV0dXJucyBhdmVyYWdlIHdpZHRoIGFuZCBkZXB0aCBvZiBjb21wb25lbnQg
ZGVmaW5pdGlvbgpkZWYgY2J0X2F2ZXJhZ2VfYm91bmRzKGNvbXBzX2RlZl9h
cnJheSkKICBhcmVhID0gMC4wCiAgYXZlcmFnZV9zY2FsZSA9ICgkY2J0X2xv
d19zY2FsZS5hYnMgKyAkY2J0X2hpZ2hfc2NhbGUuYWJzKSAvIDIuMAogIGNv
bXBzX2RlZl9hcnJheS5lYWNoIHsgfGNkfCBhcmVhID0gYXJlYSArIGNidF9h
cmVhX2JvdW5kcyhjZCkgfQogIHJldHVybiAoYXJlYSAqIGF2ZXJhZ2Vfc2Nh
bGUpIC8gY29tcHNfZGVmX2FycmF5Lmxlbmd0aAplbmQKIy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJldHVybnMgYXZlcmFnZSB3aWR0aCBh
bmQgZGVwdGggb2YgY29tcG9uZW50IGRlZmluaXRpb24KZGVmIGNidF9hdmVy
YWdlX3dpZHRocyhjb21wc19kZWZfYXJyYXkpCiAgdyA9IDAuMAogIGF2ZXJh
Z2Vfc2NhbGUgPSAoJGNidF9sb3dfc2NhbGUuYWJzICsgJGNidF9oaWdoX3Nj
YWxlLmFicykgLyAyLjAKICBjb21wc19kZWZfYXJyYXkuZWFjaCBkbyB8Y2R8
CiAgICB3ICs9IGNkLmJvdW5kcy53aWR0aCBpZiBjZC5ib3VuZHMud2lkdGgg
PiAwLjAwMQogICAgdyArPSBbY2QuYm91bmRzLndpZHRoLGNkLmJvdW5kcy5k
ZXB0aCxjZC5ib3VuZHMuaGVpZ2h0XS5tYXggaWYgY2QuYm91bmRzLndpZHRo
IDwgMC4wMDEKICBlbmQKICByZXR1cm4gKHcgKiBhdmVyYWdlX3NjYWxlKSAv
IGNvbXBzX2RlZl9hcnJheS5sZW5ndGggaWYgdyE9MAplbmQKIy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJldHVybnMgYXJlYSBvZiBjb21w
b25lbnQgZGVmaW5pdGlvbgpkZWYgY2J0X2FyZWFfYm91bmRzKGMpCiAgdz1j
LmJvdW5kcy53aWR0aAogIGQ9Yy5ib3VuZHMuZGVwdGgKICBpZiB3PDAuMDAx
IGFuZCBkPjAuMDAxCiAgICB3PWQvMTAKICBlbmQKICBpZiB3PjAuMDAxIGFu
ZCBkPDAuMDAxCiAgICBkPXcvMTAKICBlbmQKICBpZiB3PjAuMDAxIGFuZCBk
PjAuMDAxCiAgICByZXR1cm4gdypkCiAgZWxzZQogICAgcmV0dXJuIGMuYm91
bmRzLmhlaWdodCAqIGMuYm91bmRzLmhlaWdodAogIGVuZAogICNyZXR1cm4g
KGMuYm91bmRzLndpZHRoICogYy5ib3VuZHMuZGVwdGggKiBjLmJvdW5kcy5o
ZWlnaHQpICogMC42NjY2CmVuZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUmV0dXJucyBCQiBvZiBmYWNlcyBzZXQKZGVmIGNidF9mYWNl
c19ib3VuZHMoZmFjZXMpClNrZXRjaHVwLnNldF9zdGF0dXNfdGV4dCgiQ29t
cHV0aW5nIGZhY2VzIGJvdW5kcy4uLiIpCmZiYiA9IEdlb206OkJvdW5kaW5n
Qm94Lm5ldwpmYWNlcy5lYWNoIHsgfGZ8IGZiYi5hZGQgZi5ib3VuZHMgfQpy
ZXR1cm4gZmJiCmVuZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUmV0dXJucyBhcmVhIG9mIGZhY2VzIHNldApkZWYgY2J0X2ZhY2VzX2Fy
ZWEoZmFjZXMpClNrZXRjaHVwLnNldF9zdGF0dXNfdGV4dCgiQ29tcHV0aW5n
IGZhY2VzIGFyZWEuLi4iKQphID0gMC4wCmZhY2VzLmVhY2ggeyB8ZnwgYSA9
IGEgKyBmLmFyZWEgfQpyZXR1cm4gYQplbmQKIy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFJldHVybnMgc2xvcGUgYW5nbGUgb2YgZmFjZSBb
MC0+UEkvMl0KZGVmIGNidF9zbG9wZShoaXRfb2JqZXQpCmNhc2UgaGl0X29i
amV0WzFdWzBdLnR5cGVuYW1lCiAgd2hlbiAiRmFjZSIKICAgIGYgPSBoaXRf
b2JqZXRbMV1bMF0KICB3aGVuICJDb21wb25lbnRJbnN0YW5jZSIKICAgIGYg
PSBoaXRfb2JqZXRbMV1bMV0KICB3aGVuICJHcm91cCIKICAgIGYgPSBoaXRf
b2JqZXRbMV1bMV0KICB3aGVuICJJbWFnZSIKICAgIGYgPSBoaXRfb2JqZXRb
MV1bMV0KICB3aGVuICJFZGdlIgogICAgcCA9IGhpdF9vYmpldFsxXVswXS5z
dGFydC5wb3NpdGlvbgogICAgcHogPSBoaXRfb2JqZXRbMV1bMF0uZW5kLnBv
c2l0aW9uCiAgICBwMyA9IEdlb206OlBvaW50M2QubmV3KHB6LngscHoueSxw
LnopCiAgICBhID0gaGl0X29iamV0WzFdWzBdLmxpbmVbMV0uYW5nbGVfYmV0
d2VlbiBwLnZlY3Rvcl90byhwMykKICAgIHJldHVybiBhCiAgZWxzZQogICAg
cmV0dXJuIG5pbAplbmQKaWYgZi50eXBlbmFtZSA9PSAiRmFjZSIKICBuID0g
Zi5ub3JtYWwKICBwID0gR2VvbTo6UG9pbnQzZC5uZXcoMCwwLDApCiAgcHog
PSBwLm9mZnNldChuKQogIHAwID0gR2VvbTo6UG9pbnQzZC5uZXcocHoueCxw
ei55LDApCiAgYSA9IHAudmVjdG9yX3RvKHAwKS5hbmdsZV9iZXR3ZWVuIG4K
ICByZXR1cm4gYQplbHNlCiAgcmV0dXJuIDAuMAplbmQKZW5kCiMtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVGVzdCBpZiBsb3dfc3RlZXAg
PCBzbG9wZSBvZiBmYWNlIDwgaGlnaF9zdGVlcApkZWYgY2J0X21hdGNoX3Ns
b3BlKGYpCnJldHVybiB0cnVlIGlmICRjYnRfbG93X3N0ZWVwID09IDAgYW5k
ICRjYnRfaGlnaF9zdGVlcCA9PSA5MApsID0gTWF0aDo6c2luKCRjYnRfbG93
X3N0ZWVwLmRlZ3JlZXMpCmggPSBNYXRoOjpzaW4oJGNidF9oaWdoX3N0ZWVw
LmRlZ3JlZXMpCmZhID0gTWF0aDo6Y29zKGNidF9zbG9wZShmKSkKaWYgbCA8
PSBmYSBhbmQgaCA+IGZhCiAgcmV0dXJuIHRydWUKICBlbHNlCiAgcmV0dXJu
IGZhbHNlCmVuZAplbmQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICBUZXN0IGlmIGxvd19hbHQgPCBwLnogPCBoaWdoX2FsdApkZWYgY2J0
X21hdGNoX2FsdChwKQppZiBwLnogPj0gJGNidF9sb3dfYWx0IGFuZCBwLnog
PD0gJGNidF9oaWdoX2FsdAogIHJldHVybiB0cnVlCiAgZWxzZQogIHJldHVy
biBmYWxzZQplbmQKZW5kCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAgVGVzdCBpZiBoaXQgb2JqZWN0IG1hdGNoZXMgbGF5ZXIgbWFzawpk
ZWYgY2J0X21hdGNoX2xheWVyKGhpdF9vYmpldCkKcmV0dXJuIHRydWUgaWYg
JGNidF9sYXllcl9tYXNrID09ICIiCmNhc2UgaGl0X29iamV0WzFdWzBdLnR5
cGVuYW1lCiAgd2hlbiAiRmFjZSIKICAgIGYgPSBoaXRfb2JqZXRbMV1bMF0K
ICB3aGVuICJDb21wb25lbnRJbnN0YW5jZSIKICAgIGYgPSBoaXRfb2JqZXRb
MV1bMV0KICB3aGVuICJHcm91cCIKICAgIGYgPSBoaXRfb2JqZXRbMV1bMV0K
ICB3aGVuICJJbWFnZSIKICAgIGYgPSBoaXRfb2JqZXRbMV1bMV0KICB3aGVu
ICJFZGdlIgogICAgZiA9IGhpdF9vYmpldFsxXVswXQplbmQKCmlmIGYubGF5
ZXIubmFtZSA9PSAkY2J0X2xheWVyX21hc2sKICByZXR1cm4gdHJ1ZQogIGVs
c2UKICByZXR1cm4gZmFsc2UKZW5kCmVuZAojLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gUmV0dXJucyBhcnJheSBvZiBjb21wcyBkZWZpbml0
aW9ucwpkZWYgY2J0X2xvYWRfY29tcHMoY29tcHNfYXJyYXkpCiAgJGNidF9j
b21wcz1bXQogIFNrZXRjaHVwLmFjdGl2ZV9tb2RlbC5kZWZpbml0aW9ucy5l
YWNoIGRvIHxkfAogICAgaWYgY29tcHNfYXJyYXkuaW5jbHVkZT8gZC5uYW1l
CiAgICAgICRjYnRfY29tcHMucHVzaCBkCiAgICBlbmQKICBlbmQKICByZXR1
cm4gJGNidF9jb21wcwplbmQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFJldHVybnMgbnVtYmVyIG9mIGNvbXBzIHRvIHNwcmF5CmRlZiBj
YnRfbl9wb2ludHMoc2hhcGUsY2VudGVyLHJhZGl1cyxwcmVzc3VyZSxzaGFw
ZV9wb2ludHMpCiAgcHJlc3MgPSBwcmVzc3VyZS5zcGxpdCgiJSIpWzBdLnRv
X2kgCiAgY2FzZSBzaGFwZQogICAgd2hlbiAiTGluZSIKICAgICAgdyA9IGNi
dF9hdmVyYWdlX3dpZHRocygkY2J0X2NvbXBzKQogICAgd2hlbiAiQ2lyY2xl
IgogICAgICBhcmVhID0gJGNidF9yYWRpdXMgKiAkY2J0X3JhZGl1cyAqIE1h
dGg6OlBJCiAgICB3aGVuICJTcXVhcmUiCiAgICAgIGFyZWEgPSAoKCRjYnRf
cmFkaXVzIC8gTWF0aC5zcXJ0KDIpKSoyKSAqICgoJGNidF9yYWRpdXMgLyBN
YXRoLnNxcnQoMikpKjIpCiAgICB3aGVuICJUcmlhbmdsZSIKICAgICAgYXJl
YSA9ICgkY2J0X3JhZGl1cyAqICRjYnRfcmFkaXVzKSAqIDMuMAogICAgd2hl
biAiUmVjdGFuZ2xlIgogICAgICBhcmVhID0gKHNoYXBlX3BvaW50c1swXS5k
aXN0YW5jZSBzaGFwZV9wb2ludHNbMV0pICogKHNoYXBlX3BvaW50c1sxXS5k
aXN0YW5jZSBzaGFwZV9wb2ludHNbMl0pCiAgICB3aGVuICJTZWxlY3Rpb24i
CiAgICAgIGFyZWEgPSBjYnRfZmFjZXNfYXJlYShjYnRfc29ydF9mYWNlcyhT
a2V0Y2h1cC5hY3RpdmVfbW9kZWwuc2VsZWN0aW9uKSkKICBlbmQKCiAgY2Fz
ZSBzaGFwZQogICAgd2hlbiAiTGluZSIKICAgICAgbiA9IChjZW50ZXIuZGlz
dGFuY2UocmFkaXVzKSAvIHcpCiAgICBlbHNlCiAgICAgIGF2ZXJhZ2VfYXJl
YSA9IGNidF9hdmVyYWdlX2JvdW5kcygkY2J0X2NvbXBzKQogICAgICBuID0g
YXJlYSAvIGF2ZXJhZ2VfYXJlYQogIGVuZAoKICAgIHB1dHMgc2hhcGUgKyAi
ICAgIiArIHByZXNzdXJlICsgIiAgICIgKyBuLnRvX2kudG9fcyArICIgLT4g
IiArICgobi50b19pICogcHJlc3MpIC8gMTAwKS5mbG9vci50b19zCiAgICBj
YnRfd2FybmluZygobi50b19pICogcHJlc3MpIC8gMTAwKQppZiAobi50b19p
ICogcHJlc3MpIC8gMTAwIDwgMQogIHJldHVybiAxCiAgZWxzZQogIHJldHVy
biAobi50b19pICogcHJlc3MpIC8gMTAwCmVuZAplbmQKIy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJldHVybnMgcmFuZG9tIG51bWJlcjog
bG93X3JhbmdlIDwgbnVtYmVyIDwgaGlnaF9yYW5nZQpkZWYgY2J0X3JhbmRf
cmFuZ2UobG93LGhpZ2gpCiAgdjEgPSByYW5kKCkqIChoaWdoLnRvX2YuYWJz
IC0gbG93LnRvX2YuYWJzKQogIHYyID0gcmFuZCgpKiAoaGlnaC50b19mLmFi
cyAtIGxvdy50b19mLmFicykKICAjdjMgPSByYW5kKCkqIChoaWdoLnRvX2Yu
YWJzIC0gbG93LnRvX2YuYWJzKQogIGlmICRjYnRfcHJvcG9ydGlvbiA9PSAi
WWVzIgogICAgdjIgPSB2MQogIGVuZAogIGlmIGxvdy50b19mIDwgMCBvciBo
aWdoLnRvX2YgPCAwCiAgICByZXR1cm4gW25lZ19yYW5kKGxvdy50b19mLmFi
cyArIHYxKSwobG93LnRvX2YuYWJzICsgdjIpLChsb3cudG9fZi5hYnMgKyB2
MSldCiAgICBlbHNlCiAgICByZXR1cm4gWyhsb3cudG9fZi5hYnMgKyB2MSks
KGxvdy50b19mLmFicyArIHYyKSwobG93LnRvX2YuYWJzICsgdjEpXQogIGVu
ZAplbmQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJldHVy
bnMgZWl0aGVyIHggb3IgLXgsIDEvMiBwcm9iYWJpbGl0eQpkZWYgbmVnX3Jh
bmQoeCkKaWYgcmFuZCgpIDwgMC41CiAgcmV0dXJuIHgKICBlbHNlCiAgcmV0
dXJuIC14CmVuZAplbmQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIFByb2JsZW0gPwpkZWYgY2J0X2NvbnRyb2xfc3RvcCh0cmlhbHNfZG9u
ZSwgbl9kb25lLCBuX3RhcmdldCkKaWYgKG5fZG9uZS50b19mICsgMSkvdHJp
YWxzX2RvbmUudG9fZiA8ICRjYnRfcmF0aW8gIyBkZWZhdWx0IDAuMDAxCiAg
cmVwID0gVUkubWVzc2FnZWJveCgodHJpYWxzX2RvbmUtMSkudG9fcyArICIg
dHJpYWxzIHRvIGRyb3AgY29tcG9uZW50cyBkb25lLlxuTWF5YmUgdGhlcmUg
aXMgbm8gc3VyZmFjZSBvbiB3aGljaCB0byBkcm9wLFxub3IgdGhlcmUgYXJl
IHRvbyBtdWNoIGNvbnN0cmFpbnRzLlxuQ29udGludWUgPyIsIE1CX1lFU05P
KQogIGlmIHJlcCA9PSA3CiAgICBicmVhawogICAgZWxzZQogICAgJGNidF9y
YXRpbyA9ICRjYnRfcmF0aW8gLyAyLjAKICBlbmQKZW5kCgppZiAkY2J0X3N0
b3BfdGltZXIgPT0gdHJ1ZQogIHJlcCA9IFVJLm1lc3NhZ2Vib3goIk1vcmUg
dGhhbiAiICsgKCRjYnRfZGVsYXkgLyA2MCkudG9fcyArICIgbWludXRlcyBy
ZW1haW5pbmcgdG8gY29tcGxldGUuXG5Db250aW51ZSA/IiwgTUJfWUVTTk8p
CiAgaWYgcmVwID09IDcKICAgIGJyZWFrCiAgICBlbHNlCiAgICAkY2J0X2Rl
bGF5ID0gJGNidF9kZWxheSAqIDIKICAgICRjYnRfc3RvcF90aW1lciA9IGZh
bHNlCiAgZW5kCmVuZAplbmQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIENvbGxlY3QgYWxsIGNvbXBvbmVudHMsIHJldHVybnMgYXJyYXkK
ZGVmIGNidF9jb2xsZWN0X2NvbXBvbmVudHNfb2xkCm1vZGVsPVNrZXRjaHVw
LmFjdGl2ZV9tb2RlbApjb21wcyA9IG1vZGVsLmRlZmluaXRpb25zCmNvbXBz
X25hbWVzID0gW10KY29tcHMuZWFjaCBkbyB8Y3wKICBpZiBub3QgYy5ncm91
cD8gYW5kIG5vdCBjLmltYWdlPwogICAgY29tcHNfbmFtZXMucHVzaChjLm5h
bWUpCiAgZW5kCmVuZApyZXR1cm4gY29tcHNfbmFtZXMuc29ydCEKZW5kCgpk
ZWYgY2J0X2NvbGxlY3RfY29tcG9uZW50cwptb2RlbD1Ta2V0Y2h1cC5hY3Rp
dmVfbW9kZWwKY29tcHMgPSBtb2RlbC5kZWZpbml0aW9ucwpjb21wc19kZWZz
ID0gW10KY29tcHMuZWFjaCBkbyB8Y3wKICBpZiBub3QgYy5ncm91cD8gYW5k
IG5vdCBjLmltYWdlPwogICAgY29tcHNfZGVmcy5wdXNoKGMpCiAgZW5kCmVu
ZApyZXR1cm4gY29tcHNfZGVmcwplbmQKIy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIENvbGxlY3QgbGV2ZWwgMSBjb21wb25lbnRzLCByZXR1
cm5zIGFycmF5CmRlZiBjYnRfY29sbGVjdF90b3BfY29tcG9uZW50c19vbGQK
U2tldGNodXAuc2V0X3N0YXR1c190ZXh0KCJDb2xsZWN0aW5nIGNvbXBvbmVu
dHMuLi4iKQptb2RlbD1Ta2V0Y2h1cC5hY3RpdmVfbW9kZWwKYWxsX2NvbXBz
ID0gbW9kZWwuZGVmaW5pdGlvbnMKYWxsX2NvbXBzX25hbWVzID0gY2J0X2Nv
bGxlY3RfY29tcG9uZW50cwp0b3BfY29tcHMgPSBhbGxfY29tcHNfbmFtZXMK
YWxsX2NvbXBzLmVhY2ggZG8gfGNkfAogIGlmIG5vdCBjZC5pbWFnZT8gYW5k
IG5vdCBjZC5ncm91cD8gYW5kIG5vdCBjZC5pbnRlcm5hbD8KICAgICMgU2Vh
cmNoIGZvciBzdWItY29tcG9uZW50cyBpbiB0aGlzIGNvbXAgZGVmCiAgICBj
ZC5lbnRpdGllcy5lYWNoIGRvIHxlfAogICAgICBpZiBlLnR5cGVuYW1lID09
ICJDb21wb25lbnRJbnN0YW5jZSIgI29yIGUudHlwZW5hbWUgPT0gIkdyb3Vw
IgogICAgICAgIHRvcF9jb21wcy5kZWxldGUgZS5kZWZpbml0aW9uLm5hbWUg
aWYgZS5kZWZpbml0aW9uLmludGVybmFsPyAKICAgICAgZW5kCiAgICBlbmQK
ICBlbmQKZW5kClNrZXRjaHVwLnNldF9zdGF0dXNfdGV4dCgiIikKcmV0dXJu
IHRvcF9jb21wcy5zb3J0IQplbmQKCmRlZiBjYnRfY29sbGVjdF90b3BfY29t
cG9uZW50cwpTa2V0Y2h1cC5zZXRfc3RhdHVzX3RleHQoIkNvbGxlY3Rpbmcg
Y29tcG9uZW50cy4uLiIpCm1vZGVsPVNrZXRjaHVwLmFjdGl2ZV9tb2RlbAph
bGxfY29tcHMgPSBtb2RlbC5kZWZpbml0aW9ucwphbGxfY29tcHNfZGVmcyA9
IGNidF9jb2xsZWN0X2NvbXBvbmVudHMKdG9wX2NvbXBzPVtdCmFsbF9jb21w
c19kZWZzLmVhY2ggZG8gfGNkfAogIHRvcF9jb21wcy5wdXNoKGNkLm5hbWUp
IGlmIG5vdCBjZC5oaWRkZW4/CmVuZApTa2V0Y2h1cC5zZXRfc3RhdHVzX3Rl
eHQoIiIpCnJldHVybiB0b3BfY29tcHMuc29ydCEKZW5kCgojLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29sbGVjdCBsYXllcnMgbmFtZXMs
IHJldHVybnMgYXJyYXkKZGVmIGNidF9jb2xsZWN0X2xheWVycwpTa2V0Y2h1
cC5zZXRfc3RhdHVzX3RleHQoIkNvbGxlY3RpbmcgbGF5ZXJzLi4uIikKbW9k
ZWw9U2tldGNodXAuYWN0aXZlX21vZGVsCmxheWVyc19uYW1lcyA9IFtdCm1v
ZGVsLmxheWVycy5lYWNoIHsgfGx8IGxheWVyc19uYW1lcy5wdXNoKGwubmFt
ZSkgfQpTa2V0Y2h1cC5zZXRfc3RhdHVzX3RleHQoIiIpCnJldHVybiBsYXll
cnNfbmFtZXMuc29ydCEKZW5kCgpkZWYgY2J0X3NvcnRfZmFjZXMocykKU2tl
dGNodXAuc2V0X3N0YXR1c190ZXh0KCJTb3J0aW5nIGZhY2VzLi4uIikKZj1b
XQpzLmVhY2ggeyB8b2JqfCBmLnB1c2gob2JqKSBpZiBvYmoudHlwZW5hbWUg
PT0gIkZhY2UiIH0KcmV0dXJuIGYKZW5kCiMtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBFcmFkaWNhdGUgbm9uLWZhY2VzIG9iamVjdHMgdGhy
b3VnaCBzZWxlY3Rpb24KZGVmIGNsZWFuX3NlbApTa2V0Y2h1cC5zZXRfc3Rh
dHVzX3RleHQoIlNvcnRpbmcgc2VsZWN0aW9uLi4uIikKcyA9IFNrZXRjaHVw
LmFjdGl2ZV9tb2RlbC5zZWxlY3Rpb24Kcy5lYWNoIHsgfGV8IHMucmVtb3Zl
KGUpIGlmIG5vdCBlLmtpbmRfb2Y/KFNrZXRjaHVwOjpGYWNlKSB9CmVuZAoj
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2FzdCByYXkgdGhy
b3VnaCBwb2ludCBwIGFuZCByZXR1cm4gW2ludGVyc2VjdGlvbixmYWNlXSB3
aXRoIGZhY2VzIHNldCwgaWYgYW55CmRlZiBjYnRfcmF5Y2FzdF9mYWNlcyhw
LGZhY2VzKQpoaXQgPSBmYWxzZQpoaXRfZmFjZSA9IG5pbAp2ID0gR2VvbTo6
VmVjdG9yM2QubmV3KDAsIDAsIC0xMDAwMDApCmZhY2VzLmVhY2ggZG8gfGZh
Y2V8CiAgcmF5Y2FzdCA9IEdlb20uaW50ZXJzZWN0X2xpbmVfcGxhbmUoW3As
cC5vZmZzZXQodildLCBmYWNlLnBsYW5lKQogIGlmIHJheWNhc3QgYW5kIEdl
b20ucG9pbnRfaW5fcG9seWdvbl8yRChwLCBmYWNlLnZlcnRpY2VzLCB0cnVl
KQogICAgaGl0ID0gdHJ1ZQogICAgaGl0X2ZhY2UgPSBmYWNlCiAgICByZXR1
cm4gW0dlb20uaW50ZXJzZWN0X2xpbmVfcGxhbmUoW3AscC5vZmZzZXQodild
LCBoaXRfZmFjZS5wbGFuZSksIGhpdF9mYWNlXQogIGVuZAplbmQKaWYgaGl0
ID09IHRydWUKICByZXR1cm4gW0dlb20uaW50ZXJzZWN0X2xpbmVfcGxhbmUo
W3AscC5vZmZzZXQodildLCBoaXRfZmFjZS5wbGFuZSksIGhpdF9mYWNlXQpl
bHNlCiAgcmV0dXJuIGZhbHNlCmVuZAplbmQKIy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIE1vZGlmeSBjb21wIHRyYW5zZm9ybSwgZGVwZW5k
aW5nIG9uIG9wdGlvbnMKZGVmIGNidF9yb3RhdGVfc2NhbGUoaCxjKQojIFJv
dGF0aW9uCmlmICRjYnRfcm90YXRlID09ICJZZXMiCiAgbz1jLnRyYW5zZm9y
bWF0aW9uLm9yaWdpbgogIGlmICRjYnRfcGVycGVuZGljdWxhciA9PSAiTm8i
CiAgICBpZiBoWzFdWzBdLmNsYXNzLnRvX3MgPT0gIlNrZXRjaHVwOjpGYWNl
IgogICAgICByID0gR2VvbTo6VHJhbnNmb3JtYXRpb24ubmV3KFswLDAsMF0s
IGhbMV1bMF0ubm9ybWFsKQogICAgICBjLnRyYW5zZm9ybWF0aW9uID0gYy50
cmFuc2Zvcm1hdGlvbiAqIHIKICAgIGVsc2UKICAgICAgciA9IEdlb206OlRy
YW5zZm9ybWF0aW9uLm5ldyhbMCwwLDBdLGhbMV1bMV0ubm9ybWFsKQogICAg
ICBjLnRyYW5zZm9ybWF0aW9uID0gYy50cmFuc2Zvcm1hdGlvbiAqIHIKICAg
IGVuZAogIGVsc2UKICAgIHI9R2VvbTo6VHJhbnNmb3JtYXRpb24ucm90YXRp
b24obyxbMCwwLDFdLHJhbmQoTWF0aDo6UEkqMi4wKS50b19mKQogICAgYy50
cmFuc2Zvcm0hIHIKICBlbmQKZW5kCmlmICRjYnRfbG93X3NjYWxlICE9IDEu
MCBvciAkY2J0X2hpZ2hfc2NhbGUgIT0gMS4wCiAgc2NhbGVzID0gY2J0X3Jh
bmRfcmFuZ2UoJGNidF9sb3dfc2NhbGUsJGNidF9oaWdoX3NjYWxlKQogIGMu
dHJhbnNmb3JtYXRpb24gPSBjLnRyYW5zZm9ybWF0aW9uICogR2VvbTo6VHJh
bnNmb3JtYXRpb24uc2NhbGluZyhzY2FsZXNbMF0sc2NhbGVzWzFdLCBzY2Fs
ZXNbMF0uYWJzKQplbmQKZW5kCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBSZXR1cm5zIGFuIGFycmF5IG9mIG4gcmFuZG9tIHBvaW50cyBi
YXNlZCBvbiBzaGFwZQpkZWYgY2J0X3JhbmRvbV9wb2ludHMobiwgc2hhcGUs
IGNlbnRlciwgY29ybmVyKQogIG1vZGVsID0gU2tldGNodXAuYWN0aXZlX21v
ZGVsCiAgc2VsID0gU2tldGNodXAuYWN0aXZlX21vZGVsLnNlbGVjdGlvbgog
IHYgPSBHZW9tOjpWZWN0b3IzZC5uZXcoMCwwLC0xMDAwMCkKICByYW5kX3B0
cz1bXQoKICAjIFNldCBaIG9mIHJhbmRvbSBwb2ludHMgdG8gaGlnaGVzdCBa
IGFsdGl0dWRlIG9mIG1vZGVsICsgMTAwMCB1bml0cyAoYWxsb3cgc3RhY2tp
bmcgaGlnaGVyIHRoYW4gbW9kZWwgdG9wKQogIHogPSBjYnRfbW9kZWxfdG9w
ICsgMTAwMDAwCiAgY2VudGVyID0gW2NlbnRlci54LGNlbnRlci55LCB6XQog
IGNvcm5lciA9IFtjb3JuZXIueCxjb3JuZXIueSwgel0gaWYgc2hhcGUgIT0g
IlJlY3RhbmdsZSIgYW5kIHNoYXBlICE9ICJTZWxlY3Rpb24iCiAgcDFfbGlu
ZSA9IGNlbnRlciBpZiBzaGFwZSA9PSAiTGluZSIKICBwMl9saW5lID0gY29y
bmVyIGlmIHNoYXBlID09ICJMaW5lIgogIEBwYiA9IFNwcmF5cHJvZ3Jlc3NC
YXIubmV3KG4pIAogIGNvdW50ID0gMAogIHRyaWFscyA9IDAKICAKICAjIExh
eWVyIG1hbmFnZW1lbnQKICBpZiAkY2J0X2xheWVyICE9ICIiCiAgICBvbGRf
bGF5ZXIgPSBtb2RlbC5hY3RpdmVfbGF5ZXIKICAgIG1vZGVsLmFjdGl2ZV9s
YXllciA9ICRjYnRfbGF5ZXIKICBlbmQKICAKICBjYXNlIHNoYXBlCiAgICB3
aGVuICJTZWxlY3Rpb24iCiAgICAgIHB0cyA9IG1hcF96KGNvcm5lciwgeikK
ICAgICAgY2VudGVyID0gW2NlbnRlci54LGNlbnRlci55LCB6XQogICAgICBm
YWNlcyA9IGNidF9zb3J0X2ZhY2VzKHNlbCkKICAgICAgd2hpbGUgY291bnQg
PCBuCiAgICAgICAgcCA9IHBvbGFyKGNlbnRlciwgR2VvbTo6UG9pbnQzZC5u
ZXcoJGNidF9yYWRpdXMsY2VudGVyLnksY2VudGVyLnopLCByYW5kKCRjYnRf
cmFkaXVzKSwgcmFuZCooTWF0aDo6UEkqMikpCiAgICAgICAgaGl0ID0gIG1v
ZGVsLnJheXRlc3QgW3Asdl0KICAgICAgICB0cmlhbHMgPSB0cmlhbHMgKyAx
CiAgICAgICAgaWYgaGl0ICE9IG5pbCBhbmQgR2VvbS5wb2ludF9pbl9wb2x5
Z29uXzJEKGhpdFswXSwgcHRzLCB0cnVlKSBhbmQgY2J0X3JheWNhc3RfZmFj
ZXMocCxmYWNlcykgYW5kIGhpdFsxXVswXS5jbGFzcy50b19zICE9ICRjYnRf
cHJldmVudCBhbmQgY2J0X21hdGNoX3Nsb3BlKGhpdCkgYW5kIGNidF9tYXRj
aF9hbHQoaGl0WzBdKSBhbmQgY2J0X21hdGNoX2xheWVyKGhpdCkKICAgICAg
ICAgIGNvbXAgPSBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwuZW50aXRpZXMuYWRk
X2luc3RhbmNlICRjYnRfY29tcHNbcmFuZCgkY2J0X2NvbXBzLmxlbmd0aCld
LCBoaXRbMF0KICAgICAgICAgICMgUm90YXRlIGFuZCBzY2FsZQogICAgICAg
ICAgY2J0X3JvdGF0ZV9zY2FsZShoaXQsIGNvbXApCiAgICAgICAgICAgCiAg
ICAgICAgICBjb3VudCA9IGNvdW50ICsgMQogICAgICAgIGVuZAogICAgICAg
IEBwYi51cGRhdGUoY291bnQpCiAgICAgICAgY2J0X2NvbnRyb2xfc3RvcCh0
cmlhbHMsIGNvdW50LCBuKQogICAgICBlbmQKICAgIHdoZW4gIkxpbmUiCiAg
ICAgIHZsaW5lID0gcDFfbGluZS52ZWN0b3JfdG8ocDJfbGluZSkKICAgICAg
d2hpbGUgY291bnQgPCBuCiAgICAgICAgdmxpbmUubGVuZ3RoID0gcmFuZChw
MV9saW5lLmRpc3RhbmNlKHAyX2xpbmUpKS50b19mCiAgICAgICAgcCA9IHAx
X2xpbmUub2Zmc2V0KHZsaW5lKQogICAgICAgIGhpdCA9ICBtb2RlbC5yYXl0
ZXN0IFtwLHZdCiAgICAgICAgdHJpYWxzID0gdHJpYWxzICsgMQogICAgICAg
IGlmIGhpdCAhPSBuaWwgYW5kIGhpdFsxXVswXS5jbGFzcy50b19zICE9ICRj
YnRfcHJldmVudCBhbmQgY2J0X21hdGNoX3Nsb3BlKGhpdCkgYW5kIGNidF9t
YXRjaF9hbHQoaGl0WzBdKSBhbmQgY2J0X21hdGNoX2xheWVyKGhpdCkKICAg
ICAgICAgIGNvbXAgPSBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwuZW50aXRpZXMu
YWRkX2luc3RhbmNlICRjYnRfY29tcHNbcmFuZCgkY2J0X2NvbXBzLmxlbmd0
aCldLCBoaXRbMF0KICAgICAgICAgICMgUm90YXRlIGFuZCBzY2FsZQogICAg
ICAgICAgY2J0X3JvdGF0ZV9zY2FsZShoaXQsIGNvbXApCgogICAgICAgICAg
Y291bnQgPSBjb3VudCArIDEKICAgICAgICBlbmQKICAgICAgICBAcGIudXBk
YXRlKGNvdW50KQogICAgICAgIGNidF9jb250cm9sX3N0b3AodHJpYWxzLCBj
b3VudCwgbikKICAgICAgZW5kCiAgICB3aGVuICJSZWN0YW5nbGUiCiAgICAg
IHB0cyA9IG1hcF96KGNvcm5lciwgeikKICAgICAgY2VudGVyID0gW2NlbnRl
ci54LGNlbnRlci55LCB6XQogICAgICB3aGlsZSBjb3VudCA8IG4KICAgICAg
ICBwID0gcG9sYXIoY2VudGVyLCBHZW9tOjpQb2ludDNkLm5ldygkY2J0X3Jh
ZGl1cyxjZW50ZXIueSxjZW50ZXIueiksIHJhbmQoJGNidF9yYWRpdXMpLCBy
YW5kKihNYXRoOjpQSSoyKSkKICAgICAgICBoaXQgPSAgbW9kZWwucmF5dGVz
dCBbcCx2XQogICAgICAgIHRyaWFscyA9IHRyaWFscyArIDEKICAgICAgICBp
ZiBoaXQgIT0gbmlsIGFuZCBHZW9tLnBvaW50X2luX3BvbHlnb25fMkQoaGl0
WzBdLCBwdHMsIHRydWUpIGFuZCBoaXRbMV1bMF0uY2xhc3MudG9fcyAhPSAk
Y2J0X3ByZXZlbnQgYW5kIGNidF9tYXRjaF9zbG9wZShoaXQpIGFuZCBjYnRf
bWF0Y2hfYWx0KGhpdFswXSkgYW5kIGNidF9tYXRjaF9sYXllcihoaXQpCiAg
ICAgICAgICBjb21wID0gU2tldGNodXAuYWN0aXZlX21vZGVsLmVudGl0aWVz
LmFkZF9pbnN0YW5jZSAkY2J0X2NvbXBzW3JhbmQoJGNidF9jb21wcy5sZW5n
dGgpXSwgaGl0WzBdCiAgICAgICAgICAjIFJvdGF0ZSBhbmQgc2NhbGUKICAg
ICAgICAgIGNidF9yb3RhdGVfc2NhbGUoaGl0LCBjb21wKQoKICAgICAgICAg
IGNvdW50ID0gY291bnQgKyAxCiAgICAgICAgICBAcGIudXBkYXRlKGNvdW50
KQogICAgICAgIGVuZAogICAgICAgIGNidF9jb250cm9sX3N0b3AodHJpYWxz
LCBjb3VudCwgbikKICAgICAgZW5kCiAgICB3aGVuICJDaXJjbGUiCiAgICAg
IGFuZyA9IChNYXRoOjpQSSAqIDIpIC8gbgogICAgICB3aGlsZSBjb3VudCA8
IG4KICAgICAgICBwID0gcG9sYXIoY2VudGVyLCBHZW9tOjpQb2ludDNkLm5l
dygkY2J0X3JhZGl1cyxjZW50ZXIueSxjZW50ZXIueiksIHJhbmQoJGNidF9y
YWRpdXMpLCByYW5kKihNYXRoOjpQSSoyKSkKICAgICAgICBoaXQgPSAgbW9k
ZWwucmF5dGVzdCBbcCx2XQogICAgICAgIHRyaWFscyA9IHRyaWFscyArIDEK
ICAgICAgICBpZiBoaXQgIT0gbmlsIGFuZCBoaXRbMV1bMF0uY2xhc3MudG9f
cyAhPSAkY2J0X3ByZXZlbnQgYW5kIGNidF9tYXRjaF9zbG9wZShoaXQpIGFu
ZCBjYnRfbWF0Y2hfYWx0KGhpdFswXSkgYW5kIGNidF9tYXRjaF9sYXllciho
aXQpCiAgICAgICAgICBjb21wID0gU2tldGNodXAuYWN0aXZlX21vZGVsLmVu
dGl0aWVzLmFkZF9pbnN0YW5jZSAkY2J0X2NvbXBzW3JhbmQoJGNidF9jb21w
cy5sZW5ndGgpXSwgaGl0WzBdCiAgICAgICAgICAjIFJvdGF0ZSBhbmQgc2Nh
bGUKICAgICAgICAgIGNidF9yb3RhdGVfc2NhbGUoaGl0LCBjb21wKQogICAg
ICAgICAgCiAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQogICAgICAgICAg
QHBiLnVwZGF0ZShjb3VudCkKICAgICAgICBlbmQKICAgICAgICBjYnRfY29u
dHJvbF9zdG9wKHRyaWFscywgY291bnQsIG4pCiAgICAgIGVuZAogICAgd2hl
biAiU3F1YXJlIgogICAgICAjIENhbGN1bGF0ZSB2aXJ0dWFsIHNxdWFyZQog
ICAgICBhbmcgPSBNYXRoOjpQSSoyLzQuMAogICAgICBwdHM9W2Nvcm5lcl0g
CiAgICAgIDEudXB0bygzKSBkbyB8aXwKICAgICAgICBwID0gY29ybmVyLnRy
YW5zZm9ybShHZW9tOjpUcmFuc2Zvcm1hdGlvbi5yb3RhdGlvbihjZW50ZXIs
WzAsMCwxXSxpKihNYXRoOjpQSS8yLjApKSkKICAgICAgICBwdHMucHVzaCBw
CiAgICAgIGVuZAogICAgICB3aGlsZSBjb3VudCA8IG4KICAgICAgICAjIENy
ZWF0ZSByYW5kb20gcG9pbnQKICAgICAgICBwID0gcG9sYXIoY2VudGVyLCBH
ZW9tOjpQb2ludDNkLm5ldygkY2J0X3JhZGl1cyxjZW50ZXIueSxjZW50ZXIu
eiksIHJhbmQoJGNidF9yYWRpdXMpLCByYW5kKihNYXRoOjpQSSoyKSkKICAg
ICAgICAjIEFkZCBpdCBpZiBpdCBpcyBpbiB2aXJ0dWFsIHBvbHlnb24KICAg
ICAgICBpZiBHZW9tLnBvaW50X2luX3BvbHlnb25fMkQgcCwgcHRzLCB0cnVl
CiAgICAgICAgICBoaXQgPSAgbW9kZWwucmF5dGVzdCBbcCx2XQogICAgICAg
ICAgdHJpYWxzID0gdHJpYWxzICsgMQogICAgICAgICAgaWYgaGl0ICE9IG5p
bCBhbmQgaGl0WzFdWzBdLmNsYXNzLnRvX3MgIT0gJGNidF9wcmV2ZW50IGFu
ZCBjYnRfbWF0Y2hfc2xvcGUoaGl0KSBhbmQgY2J0X21hdGNoX2FsdChoaXRb
MF0pIGFuZCBjYnRfbWF0Y2hfbGF5ZXIoaGl0KQogICAgICAgICAgICBjb21w
ID0gU2tldGNodXAuYWN0aXZlX21vZGVsLmVudGl0aWVzLmFkZF9pbnN0YW5j
ZSAkY2J0X2NvbXBzW3JhbmQoJGNidF9jb21wcy5sZW5ndGgpXSwgaGl0WzBd
CiAgICAgICAgICAgICMgUm90YXRlIGFuZCBzY2FsZQogICAgICAgICAgICBj
YnRfcm90YXRlX3NjYWxlKGhpdCwgY29tcCkKICAgICAgICAgICAgCiAgICAg
ICAgICAgIGNvdW50ID0gY291bnQgKyAxCiAgICAgICAgICBlbmQKICAgICAg
ICAgIEBwYi51cGRhdGUoY291bnQpCiAgICAgICAgZW5kCiAgICAgICAgY2J0
X2NvbnRyb2xfc3RvcCh0cmlhbHMsIGNvdW50LCBuKQogICAgICBlbmQKICAg
IHdoZW4gIlRyaWFuZ2xlIgogICAgICAjIENhbGN1bGF0ZSB2aXJ0dWFsIHRy
aWFuZ2xlCiAgICAgIGFuZyA9IE1hdGg6OlBJKjIvMy4wCiAgICAgIHB0cz1b
Y29ybmVyXSAKICAgICAgMS51cHRvKDIpIGRvIHxpfAogICAgICAgIHAgPSBj
b3JuZXIudHJhbnNmb3JtKEdlb206OlRyYW5zZm9ybWF0aW9uLnJvdGF0aW9u
KGNlbnRlcixbMCwwLDFdLGkqKE1hdGg6OlBJKjIuMC8zLjApKSkKICAgICAg
ICBwdHMucHVzaCBwCiAgICAgIGVuZAogICAgICBjb3VudCA9IDAKICAgICAg
d2hpbGUgY291bnQgPCBuCiAgICAgICAgIyBDcmVhdGUgcmFuZG9tIHBvaW50
CiAgICAgICAgcCA9IHBvbGFyKGNlbnRlciwgR2VvbTo6UG9pbnQzZC5uZXco
JGNidF9yYWRpdXMsY2VudGVyLnksY2VudGVyLnopLCByYW5kKCRjYnRfcmFk
aXVzKSwgcmFuZCooTWF0aDo6UEkqMikpCiAgICAgICAgIyBBZGQgaXQgaWYg
aXQgaXMgaW4gdmlydHVhbCBwb2x5Z29uCiAgICAgICAgaWYgR2VvbS5wb2lu
dF9pbl9wb2x5Z29uXzJEIHAsIHB0cywgdHJ1ZQogICAgICAgICAgaGl0ID0g
IG1vZGVsLnJheXRlc3QgW3Asdl0KICAgICAgICAgIHRyaWFscyA9IHRyaWFs
cyArIDEKICAgICAgICAgIGlmIGhpdCAhPSBuaWwgYW5kIGhpdFsxXVswXS5j
bGFzcy50b19zICE9ICRjYnRfcHJldmVudCBhbmQgY2J0X21hdGNoX3Nsb3Bl
KGhpdCkgYW5kIGNidF9tYXRjaF9hbHQoaGl0WzBdKSBhbmQgY2J0X21hdGNo
X2xheWVyKGhpdCkKICAgICAgICAgICAgY29tcCA9IFNrZXRjaHVwLmFjdGl2
ZV9tb2RlbC5lbnRpdGllcy5hZGRfaW5zdGFuY2UgJGNidF9jb21wc1tyYW5k
KCRjYnRfY29tcHMubGVuZ3RoKV0sIGhpdFswXQogICAgICAgICAgICAjIFJv
dGF0ZSBhbmQgc2NhbGUKICAgICAgICAgICAgY2J0X3JvdGF0ZV9zY2FsZSho
aXQsIGNvbXApCgogICAgICAgICAgY291bnQgPSBjb3VudCArIDEKICAgICAg
ICAgIEBwYi51cGRhdGUoY291bnQpCiAgICAgICAgZW5kICMgaWYgaGl0IE9L
CiAgICAgICAgZW5kCiAgICAgICAgCiAgICAgIGVuZAogICAgICBjYnRfY29u
dHJvbF9zdG9wKHRyaWFscywgY291bnQsIG4pCiAgZW5kCiAgCiAgIyBMYXll
ciBtYW5hZ2VtZW50CiAgaWYgJGNidF9sYXllciAhPSAiIgogICAgbW9kZWwu
YWN0aXZlX2xheWVyID0gb2xkX2xheWVyCiAgZW5kCiAgCiAgcmV0dXJuIHJh
bmRfcHRzCmVuZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
UmV0dXJuIHBvaW50IEAgZGlzdCxhbmdsZQpkZWYgcG9sYXIocDEsIHAyLCBk
LCBhbmdsZSkKICB2ID0gcDIgLSBwMQogIHYubGVuZ3RoID0gZAogIHRyYW5z
bGF0ZSA9IEdlb206OlRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0aW9uKHYpCiAg
cF90ZW1wID0gcDEudHJhbnNmb3JtKHRyYW5zbGF0ZSkKICByb3RhdGUgPSBH
ZW9tOjpUcmFuc2Zvcm1hdGlvbi5yb3RhdGlvbiggcDEsIEdlb206OlZlY3Rv
cjNkLm5ldygwLCAwLCAxKSwgYW5nbGUpCiAgI3Jlc3VsdCA9IHBfdGVtcC50
cmFuc2Zvcm0ocm90YXRlKQogICNyZXR1cm4gcmVzdWx0CiAgcmV0dXJuIHBf
dGVtcC50cmFuc2Zvcm0ocm90YXRlKQplbmQKIy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIE1haW4gZGlhbG9nOiBwcm9tcHQgZm9yIGJydXNo
IHN0eWxlCmRlZiBjYnRfZGlhbG9nX21haW4KICBtb2RlbCA9IFNrZXRjaHVw
LmFjdGl2ZV9tb2RlbAogIHNlbCA9IG1vZGVsLnNlbGVjdGlvbgogIGNvbXBz
ID0gY2J0X2NvbGxlY3RfdG9wX2NvbXBvbmVudHMKICBpZiBjb21wcy5sZW5n
dGg9PTAKICAgIFVJLm1lc3NhZ2Vib3goIk5vIGNvbXBvbmVudHMgbG9hZGVk
IGluIHRoaXMgbW9kZWwuIikKICAgIHJldHVybiBuaWwKICBlbmQKICBjb21w
cy51bnNoaWZ0KCIiKQogIGwxX2NvbXBzID0gY29tcHMuam9pbigifCIpCiAg
bDJfY29tcHMgPSBjb21wcy5qb2luKCJ8IikKICBsYXllcnMgPSBjYnRfY29s
bGVjdF9sYXllcnMKICBTa2V0Y2h1cC5zZXRfc3RhdHVzX3RleHQoIkRpYWxv
ZyBib3guLi4iKQogIAogIHNoYXBlcyA9IFsiUG9pbnQiLCAiTGluZSIsICJW
ZXJ0aWNlcyBvZiBmYWNlcyIsICJUcmlhbmdsZSIsICJTcXVhcmUiLCAiUmVj
dGFuZ2xlIiwgIkNpcmNsZSIsICJTcHJheSJdCiAgIyBDYXNlIHNlbGVjdGlv
bgogIGlmIG5vdCBzZWwuZW1wdHk/IGFuZCBjYnRfc29ydF9mYWNlcyhzZWwp
ICE9IFtdCiAgICBzaGFwZXMucHVzaCAiU2VsZWN0aW9uIgogICAgJGNidF9z
aGFwZSA9ICJTZWxlY3Rpb24iCiAgZW5kCiAgaWYgJGNidF9zaGFwZSA9PSAi
U2VsZWN0aW9uIiBhbmQgc2VsLmVtcHR5PwogICAgJGNidF9zaGFwZSA9ICJD
aXJjbGUiCiAgZW5kCiAgIyBUcmlhbHMgcmF0aW8gYW5kIHN0b3BfdGltZXIK
ICAkY2J0X3JhdGlvID0gMC4wMDEKICAkY2J0X3N0b3BfdGltZXIgPSBmYWxz
ZQogICRjYnRfZGVsYXkgPSAxODAKICAKICAkY2J0X3VzZV9zZXR0aW5ncyA9
ICJEaWFsb2ciIGlmIG5vdCAkY2J0X3VzZV9zZXR0aW5ncwogIHByZXNzdXJl
cyA9IFsiNSUiLCIxMCUiLCIxNSUiLCIyMCUiLCIyNSUiLCIzMCUiLCIzNSUi
LCI0MCUiLCI0NSUiLCI1MCUiLCI1NSUiLCI2MCUiLCI2NSUiLCI3MCUiLCI3
NSUiLCI4MCUiLCI4NSUiLCI5MCUiLCI5NSUiLCIxMDAlIl0KICAkY2J0X25h
bWVfMSA9IGNvbXBzWzBdIGlmIG5vdCAkY2J0X25hbWVfMSBhbmQgY29tcHMu
bGVuZ3RoID4gMAogICRjYnRfbmFtZV8yID0gIiIgaWYgbm90ICRjYnRfbmFt
ZV8yCiAgJGNidF9uYW1lXzMgPSAiIiBpZiBub3QgJGNidF9uYW1lXzMKICAk
Y2J0X25hbWVfNCA9ICIiIGlmIG5vdCAkY2J0X25hbWVfNAogICRjYnRfbmFt
ZV81ID0gIiIgaWYgbm90ICRjYnRfbmFtZV81CiAgJGNidF9uYW1lXzYgPSAi
IiBpZiBub3QgJGNidF9uYW1lXzYKICAkY2J0X3NoYXBlID0gIkNpcmNsZSIg
aWYgbm90ICRjYnRfc2hhcGUKICAkY2J0X3JhZGl1cyA9IDUwLm0gaWYgbm90
ICRjYnRfcmFkaXVzCiAgJGNidF9zcHJheV9yYWRpdXMgPSAxMC5tIGlmIG5v
dCAkY2J0X3NwcmF5X3JhZGl1cwogICRjYnRfcHJlc3N1cmUgPSAiNTAlIiBp
ZiBub3QgJGNidF9wcmVzc3VyZQogICRjYnRfcm90YXRlID0gIlllcyIgaWYg
bm90ICRjYnRfcm90YXRlCiAgJGNidF9zdGFja2luZyA9ICJZZXMiIGlmIG5v
dCAkY2J0X3N0YWNraW5nCiAgJGNidF9wZXJwZW5kaWN1bGFyID0gIlllcyIg
aWYgbm90ICRjYnRfcGVycGVuZGljdWxhcgogICRjYnRfbGF5ZXIgPSBtb2Rl
bC5hY3RpdmVfbGF5ZXIubmFtZSBpZiBub3QgJGNidF9sYXllcgogICRjYnRf
bGF5ZXJfbWFzayA9ICIiIGlmIG5vdCAkY2J0X2xheWVyX21hc2sKICAkY2J0
X2xvd19zY2FsZSA9IDEuMCBpZiBub3QgJGNidF9sb3dfc2NhbGUKICAkY2J0
X2hpZ2hfc2NhbGUgPSAxLjAgaWYgbm90ICRjYnRfaGlnaF9zY2FsZQogICRj
YnRfcHJvcG9ydGlvbiA9ICJZZXMiIGlmIG5vdCAkY2J0X3Byb3BvcnRpb24K
ICAkY2J0X2xvd19zdGVlcCA9IDAgaWYgbm90ICRjYnRfbG93X3N0ZWVwCiAg
JGNidF9oaWdoX3N0ZWVwID0gOTAgaWYgbm90ICRjYnRfaGlnaF9zdGVlcAog
ICRjYnRfbG93X2FsdCA9IGNidF9tb2RlbF9ib3R0b20KICAkY2J0X2hpZ2hf
YWx0ID0gY2J0X21vZGVsX3RvcAogIAogIHByb21wdHMgPSBbIlVzZSBzZXR0
aW5nczogIiwgIkNvbXBvbmVudCAxOiAiLCAiQ29tcG9uZW50IDI6ICIsICJD
b21wb25lbnQgMzogIiwgIkNvbXBvbmVudCA0OiAiLCAiQ29tcG9uZW50IDU6
ICIsICJDb21wb25lbnQgNjogIiwgIlNwcmF5IHNoYXBlOiAiLCAiU3ByYXkg
cHJlc3N1cmU6ICIsICJSYW5kb20gcm90YXRlOiAiLCAiUHJldmVudCBzdGFj
a2luZzogIiwgIktlZXAgdmVydGljYWw6ICIsICJEZXN0aW5hdGlvbiBsYXll
cjogIiwgIkxheWVyIG1hc2s6ICIsICJNYWludGFpbiBwcm9wb3J0aW9uczog
IiwgIkxvdyBzY2FsZSB2YWx1ZTogIiwgIkhpZ2ggc2NhbGUgdmFsdWU6ICIs
ICJMb3cgc3RlZXBuZXNzOiAiLCAiSGlnaCBzdGVlcG5lc3M6ICIgLCAiTG93
IGFsdGl0dWRlOiAiLCAiSGlnaCBhbHRpdHVkZTogIl0KICBlbnVtcyA9IFtb
IkJhc2ljIiwiRGVmYXVsdHMiLCJEaWFsb2ciXS5qb2luKCJ8IiksbDFfY29t
cHMsbDJfY29tcHMsbDJfY29tcHMsbDJfY29tcHMsbDJfY29tcHMsbDJfY29t
cHMsc2hhcGVzLmpvaW4oInwiKSwgcHJlc3N1cmVzLmpvaW4oInwiKSwgWyJZ
ZXMiLCAiTm8iXS5qb2luKCJ8IiksIFsiWWVzIiwgIk5vIl0uam9pbigifCIp
LCBbIlllcyIsICJObyJdLmpvaW4oInwiKSwgbGF5ZXJzLnVuc2hpZnQoIiIp
LmpvaW4oInwiKSwgbGF5ZXJzLnVuc2hpZnQoIiIpLmpvaW4oInwiKSwgWyJZ
ZXMiLCAiTm8iXS5qb2luKCJ8IildCiAgdmFsdWVzID0gWyRjYnRfdXNlX3Nl
dHRpbmdzLCAkY2J0X25hbWVfMSwgJGNidF9uYW1lXzIsICRjYnRfbmFtZV8z
LCAkY2J0X25hbWVfNCwgJGNidF9uYW1lXzUsICRjYnRfbmFtZV82LCAkY2J0
X3NoYXBlLCAkY2J0X3ByZXNzdXJlLCAkY2J0X3JvdGF0ZSwgJGNidF9zdGFj
a2luZywgJGNidF9wZXJwZW5kaWN1bGFyLCAkY2J0X2xheWVyLCAkY2J0X2xh
eWVyX21hc2ssICRjYnRfcHJvcG9ydGlvbiwgJGNidF9sb3dfc2NhbGUsICRj
YnRfaGlnaF9zY2FsZSwgJGNidF9sb3dfc3RlZXAsICRjYnRfaGlnaF9zdGVl
cCwgJGNidF9sb3dfYWx0LCAkY2J0X2hpZ2hfYWx0XQogIHJlc3VsdHMgPSBp
bnB1dGJveCBwcm9tcHRzLCB2YWx1ZXMsIGVudW1zLCAoY29tcHMubGVuZ3Ro
LTEpLnRvX3MgKyAiIGNvbXBvbmVudHMgYXZhaWxhYmxlOiIKICByZXR1cm4g
aWYgbm90IHJlc3VsdHMKICAkY2J0X3VzZV9zZXR0aW5ncywgJGNidF9uYW1l
XzEsICRjYnRfbmFtZV8yLCAkY2J0X25hbWVfMywgJGNidF9uYW1lXzQsICRj
YnRfbmFtZV81LCAkY2J0X25hbWVfNiwgJGNidF9zaGFwZSwgJGNidF9wcmVz
c3VyZSwgJGNidF9yb3RhdGUsICRjYnRfc3RhY2tpbmcsICRjYnRfcGVycGVu
ZGljdWxhciwgJGNidF9sYXllciwgJGNidF9sYXllcl9tYXNrLCAkY2J0X3By
b3BvcnRpb24sICRjYnRfbG93X3NjYWxlLCAkY2J0X2hpZ2hfc2NhbGUsICRj
YnRfbG93X3N0ZWVwLCAkY2J0X2hpZ2hfc3RlZXAsICRjYnRfbG93X2FsdCwg
JGNidF9oaWdoX2FsdCA9IHJlc3VsdHMKICAKICAjIExvYWQgY29tcG9uZW50
cyBkZWZpbml0aW9ucwogICRjYnRfY29tcHMgPSBjYnRfbG9hZF9jb21wcyhb
JGNidF9uYW1lXzEsICRjYnRfbmFtZV8yLCAkY2J0X25hbWVfMywgJGNidF9u
YW1lXzQsICRjYnRfbmFtZV81LCAkY2J0X25hbWVfNl0pCiAgCiAgIyBMYXll
cgogIGlmICRjYnRfbGF5ZXIgPT0gbmlsIG9yICRjYnRfbGF5ZXIgPT0gIiIK
ICAgICRjYnRfbGF5ZXI9bW9kZWwuYWN0aXZlX2xheWVyLm5hbWUKICBlbmQK
ICAKICAjIFN0YWNraW5nCiAgaWYgJGNidF9zdGFja2luZyA9PSAiWWVzIgog
ICAgJGNidF9wcmV2ZW50ID0gIlNrZXRjaHVwOjpDb21wb25lbnRJbnN0YW5j
ZSIKICAgIGVsc2UKICAgICRjYnRfcHJldmVudCA9ICIiCiAgZW5kCiAgCiAg
IyBBbHRpdHVkZQogIGlmICRjYnRfbG93X2FsdCA+ICRjYnRfaGlnaF9hbHQK
ICAgICRjYnRfaGlnaF9hbHQgPSAkY2J0X2xvd19hbHQKICAgICRjYnRfbG93
X2FsdCA9IDAKICBlbmQKICAKICAjIFN0ZWVwbmVzcwogIGlmICRjYnRfbG93
X3N0ZWVwID4gJGNidF9oaWdoX3N0ZWVwCiAgICAkY2J0X2hpZ2hfc3RlZXAg
PSAkY2J0X2xvd19zdGVlcAogICAgJGNidF9sb3dfc3RlZXAgPSAwCiAgZW5k
CiAgCiAgIyBTdG9yZSBjdXJyZW50IGRpYWxvZyBzZXR0aW5ncwogIGNidF9z
dG9yZV9kaWFsb2dfc2V0dGluZ3MKICAKICAjIFVzZSBjb3JyZWN0IHNldHRp
bmdzCiAgY2FzZSAkY2J0X3VzZV9zZXR0aW5ncwogICAgd2hlbiAiQmFzaWMi
CiAgICAgIGNidF91c2VfYmFzaWMKICAgIHdoZW4gIkRlZmF1bHRzIgogICAg
ICBjYnRfdXNlX2RlZmF1bHQKICBlbmQKCmVuZAoKIy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFNldCBkZWZhdWx0IHNldHRpbmdzIGRpYWxv
ZwpkZWYgY2J0X2RpYWxvZ19zZXRfZGVmYXVsdHMKICBtb2RlbCA9IFNrZXRj
aHVwLmFjdGl2ZV9tb2RlbAogIGlmIFNrZXRjaHVwLmFjdGl2ZV9tb2RlbC5w
YXRoLmxlbmd0aD09MAogICAgVUkubWVzc2FnZWJveCgiUGxlYXNlIHNhdmUg
eW91ciBtb2RlbCBmaXJzdC4iKQogICAgcmV0dXJuIG5pbAogIGVuZAogIHVk
X3NoYXBlcyA9IFsiUG9pbnQiLCAiTGluZSIsICJWZXJ0aWNlcyBvZiBmYWNl
cyIsICJUcmlhbmdsZSIsICJTcXVhcmUiLCAiUmVjdGFuZ2xlIiwgIkNpcmNs
ZSIsICJTZWxlY3Rpb24iXQogIHVkX3ByZXNzdXJlcyA9IFsiMTAlIiwiMjAl
IiwiMzAlIiwiNDAlIiwiNTAlIiwiNjAlIiwiNzAlIiwiODAlIiwiOTAlIiwi
MTAwJSJdCiAgIyBUcmlhbHMgcmF0aW8KICAkY2J0X3JhdGlvID0gMC4wMDEK
ICAKICAkY2J0X2RlX3NoYXBlID0gIkNpcmNsZSIgaWYgbm90ICRjYnRfZGVf
c2hhcGUKICAkY2J0X2RlX3JhZGl1cyA9IDUwLm0gaWYgbm90ICRjYnRfZGVf
cmFkaXVzCiAgJGNidF9kZV9zcHJheV9yYWRpdXMgPSAxMC5tIGlmIG5vdCAk
Y2J0X2RlX3NwcmF5X3JhZGl1cwogICRjYnRfZGVfcHJlc3N1cmUgPSAiNTAl
IiBpZiBub3QgJGNidF9kZV9wcmVzc3VyZQogICRjYnRfZGVfcm90YXRlID0g
IlllcyIgaWYgbm90ICRjYnRfZGVfcm90YXRlCiAgJGNidF9kZV9zdGFja2lu
ZyA9ICJZZXMiIGlmIG5vdCAkY2J0X2RlX3N0YWNraW5nCiAgJGNidF9kZV9w
ZXJwZW5kaWN1bGFyID0gIlllcyIgaWYgbm90ICRjYnRfZGVfcGVycGVuZGlj
dWxhcgogICRjYnRfZGVfcHJvcG9ydGlvbiA9ICJZZXMiIGlmIG5vdCAkY2J0
X2RlX3Byb3BvcnRpb24KICAkY2J0X2RlX2xvd19zY2FsZSA9IDEuMCBpZiBu
b3QgJGNidF9kZV9sb3dfc2NhbGUKICAkY2J0X2RlX2hpZ2hfc2NhbGUgPSAx
LjAgaWYgbm90ICRjYnRfZGVfaGlnaF9zY2FsZQogICRjYnRfZGVfbG93X3N0
ZWVwID0gMCBpZiBub3QgJGNidF9kZV9sb3dfc3RlZXAKICAkY2J0X2RlX2hp
Z2hfc3RlZXAgPSA5MCBpZiBub3QgJGNidF9kZV9oaWdoX3N0ZWVwCiAgJGNi
dF9kZV9sb3dfYWx0ID0gY2J0X21vZGVsX2JvdHRvbQogICRjYnRfZGVfaGln
aF9hbHQgPSBjYnRfbW9kZWxfdG9wCiAgCiAgcHJvbXB0cyA9IFsiU3ByYXkg
c2hhcGU6ICIsICJTcHJheSBwcmVzc3VyZTogIiwgIlJhbmRvbSByb3RhdGU6
ICIsICJQcmV2ZW50IHN0YWNraW5nOiAiLCAiS2VlcCB2ZXJ0aWNhbDogIiwg
Ik1haW50YWluIHByb3BvcnRpb25zOiAiLCAiTG93IHNjYWxlIHZhbHVlOiAi
LCAiSGlnaCBzY2FsZSB2YWx1ZTogIiwgIkxvdyBzdGVlcG5lc3M6ICIsICJI
aWdoIHN0ZWVwbmVzczoiLCAiTG93IGFsdGl0dWRlOiAiLCAiSGlnaCBhbHRp
dHVkZTogIl0KICBlbnVtcyA9IFt1ZF9zaGFwZXMuam9pbigifCIpLCB1ZF9w
cmVzc3VyZXMuam9pbigifCIpLCBbIlllcyIsICJObyJdLmpvaW4oInwiKSwg
WyJZZXMiLCAiTm8iXS5qb2luKCJ8IiksIFsiWWVzIiwgIk5vIl0uam9pbigi
fCIpLCBbIlllcyIsICJObyJdLmpvaW4oInwiKV0KICB2YWx1ZXMgPSBbJGNi
dF9kZV9zaGFwZSwgJGNidF9kZV9wcmVzc3VyZSwgJGNidF9kZV9yb3RhdGUs
ICRjYnRfZGVfc3RhY2tpbmcsICRjYnRfZGVfcGVycGVuZGljdWxhciwgJGNi
dF9kZV9wcm9wb3J0aW9uLCAkY2J0X2RlX2xvd19zY2FsZSwgJGNidF9kZV9o
aWdoX3NjYWxlLCAkY2J0X2RlX2xvd19zdGVlcCwgJGNidF9kZV9oaWdoX3N0
ZWVwLCAkY2J0X2RlX2xvd19hbHQsICRjYnRfZGVfaGlnaF9hbHRdCiAgcmVz
dWx0cyA9IGlucHV0Ym94IHByb21wdHMsIHZhbHVlcywgZW51bXMsICJEZWZh
dWx0cyBzZXR0aW5ncyIKICByZXR1cm4gaWYgbm90IHJlc3VsdHMKICAkY2J0
X2RlX3NoYXBlLCAkY2J0X2RlX3ByZXNzdXJlLCAkY2J0X2RlX3JvdGF0ZSwg
JGNidF9kZV9zdGFja2luZywgJGNidF9kZV9wZXJwZW5kaWN1bGFyLCAkY2J0
X2RlX3Byb3BvcnRpb24sICRjYnRfZGVfbG93X3NjYWxlLCAkY2J0X2RlX2hp
Z2hfc2NhbGUsICRjYnRfZGVfbG93X3N0ZWVwLCAkY2J0X2RlX2hpZ2hfc3Rl
ZXAsICRjYnRfZGVfbG93X2FsdCwgJGNidF9kZV9oaWdoX2FsdCA9IHJlc3Vs
dHMKICAjIFN0YWNraW5nCiAgaWYgJGNidF9kZV9zdGFja2luZyA9PSAiWWVz
IgogICAgJGNidF9kZV9wcmV2ZW50ID0gIlNrZXRjaHVwOjpDb21wb25lbnRJ
bnN0YW5jZSIKICAgIGVsc2UKICAgICRjYnRfZGVfcHJldmVudCA9ICIiCiAg
ZW5kCmVuZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2V0
IGJhc2ljIGFuZCBkZWZhdWx0IHNldHRpbmdzCmRlZiBjYnRfc2V0X2Jhc2lj
CiAgbW9kZWwgPSBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwKICBpZiBTa2V0Y2h1
cC5hY3RpdmVfbW9kZWwucGF0aC5sZW5ndGg9PTAKICAgIFVJLm1lc3NhZ2Vi
b3goIlBsZWFzZSBzYXZlIHlvdXIgbW9kZWwgZmlyc3QuIikKICAgIHJldHVy
biBuaWwKICBlbmQKICAjIFRyaWFscyByYXRpbwogICRjYnRfcmF0aW8gPSAw
LjAwMQogICMgU3ByYXkgcmFkaXVzIGRlZmF1bHQKICAkY2J0X3NwcmF5X3Jh
ZGl1cyA9IDEwLm0KICAjIEJhc2ljCiAgJGNidF9iYV9zaGFwZSA9ICJDaXJj
bGUiCiAgJGNidF9iYV9yYWRpdXMgPSA1MC5tCiAgJGNidF9iYV9zcHJheV9y
YWRpdXMgPSAxMC5tCiAgJGNidF9iYV9wcmVzc3VyZSA9ICI1MCUiCiAgJGNi
dF9iYV9yb3RhdGUgPSAiWWVzIgogICRjYnRfYmFfc3RhY2tpbmcgPSAiWWVz
IgogICRjYnRfYmFfcGVycGVuZGljdWxhciA9ICJZZXMiCiAgJGNidF9iYV9w
cm9wb3J0aW9uID0gIlllcyIKICAkY2J0X2JhX2xvd19zY2FsZSA9IDEuMAog
ICRjYnRfYmFfaGlnaF9zY2FsZSA9IDEuMAogICRjYnRfYmFfbG93X3N0ZWVw
ID0gMAogICRjYnRfYmFfaGlnaF9zdGVlcCA9IDkwCiAgJGNidF9iYV9sb3df
YWx0ID0gY2J0X21vZGVsX2JvdHRvbQogICRjYnRfYmFfaGlnaF9hbHQgPSBj
YnRfbW9kZWxfdG9wCiAgJGNidF9iYV9wcmV2ZW50ID0gIlNrZXRjaHVwOjpD
b21wb25lbnRJbnN0YW5jZSIKICAjIERlZmF1bHQKICAkY2J0X2RlX3NoYXBl
ID0gIkNpcmNsZSIgaWYgbm90ICRjYnRfZGVfc2hhcGUKICAkY2J0X2RlX3Jh
ZGl1cyA9IDUwLm0gaWYgbm90ICRjYnRfZGVfcmFkaXVzCiAgJGNidF9kZV9z
cHJheV9yYWRpdXMgPSAxMC5tIGlmIG5vdCAkY2J0X2RlX3NwcmF5X3JhZGl1
cwogICRjYnRfZGVfcHJlc3N1cmUgPSAiNTAlIiBpZiBub3QgJGNidF9kZV9w
cmVzc3VyZQogICRjYnRfZGVfcm90YXRlID0gIlllcyIgaWYgbm90ICRjYnRf
ZGVfcm90YXRlCiAgJGNidF9kZV9zdGFja2luZyA9ICJZZXMiIGlmIG5vdCAk
Y2J0X2RlX3N0YWNraW5nCiAgJGNidF9kZV9wZXJwZW5kaWN1bGFyID0gIlll
cyIgaWYgbm90ICRjYnRfZGVfcGVycGVuZGljdWxhcgogICRjYnRfZGVfcHJv
cG9ydGlvbiA9ICJZZXMiIGlmIG5vdCAkY2J0X2RlX3Byb3BvcnRpb24KICAk
Y2J0X2RlX2xvd19zY2FsZSA9IDEuMCBpZiBub3QgJGNidF9kZV9sb3dfc2Nh
bGUKICAkY2J0X2RlX2hpZ2hfc2NhbGUgPSAxLjAgaWYgbm90ICRjYnRfZGVf
aGlnaF9zY2FsZQogICRjYnRfZGVfbG93X3N0ZWVwID0gMCBpZiBub3QgJGNi
dF9kZV9sb3dfc3RlZXAKICAkY2J0X2RlX2hpZ2hfc3RlZXAgPSA5MCBpZiBu
b3QgJGNidF9kZV9oaWdoX3N0ZWVwCiAgJGNidF9kZV9sb3dfYWx0ID0gY2J0
X21vZGVsX2JvdHRvbQogICRjYnRfZGVfaGlnaF9hbHQgPSBjYnRfbW9kZWxf
dG9wCiAgJGNidF9kZV9wcmV2ZW50ID0gIlNrZXRjaHVwOjpDb21wb25lbnRJ
bnN0YW5jZSIKZW5kCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBPdmVyd3JpdGUgY3VycmVudCBzZXR0aW5ncyB3aXRoIGJhc2ljIHNldHRp
bmdzCmRlZiBjYnRfdXNlX2Jhc2ljCiAgI3B1dHMgInNldHRpbmdzIHRvIGJh
c2ljIgogICRjYnRfc2hhcGUgPSAkY2J0X2JhX3NoYXBlCiAgJGNidF9yYWRp
dXMgPSAkY2J0X2JhX3JhZGl1cwogICRjYnRfc3ByYXlfcmFkaXVzID0gJGNi
dF9iYV9zcHJheV9yYWRpdXMKICAkY2J0X3ByZXNzdXJlID0gJGNidF9iYV9w
cmVzc3VyZQogICRjYnRfcm90YXRlID0gJGNidF9iYV9yb3RhdGUKICAkY2J0
X3N0YWNraW5nID0gJGNidF9iYV9zdGFja2luZwogICRjYnRfcGVycGVuZGlj
dWxhciA9ICRjYnRfYmFfcGVycGVuZGljdWxhcgogICRjYnRfcHJvcG9ydGlv
biA9ICRjYnRfYmFfcHJvcG9ydGlvbgogICRjYnRfbG93X3NjYWxlID0gJGNi
dF9iYV9sb3dfc2NhbGUKICAkY2J0X2hpZ2hfc2NhbGUgPSAkY2J0X2JhX2hp
Z2hfc2NhbGUKICAkY2J0X2xvd19zdGVlcCA9ICRjYnRfYmFfbG93X3N0ZWVw
CiAgJGNidF9oaWdoX3N0ZWVwID0gJGNidF9iYV9oaWdoX3N0ZWVwCiAgJGNi
dF9sb3dfYWx0ID0gY2J0X21vZGVsX2JvdHRvbQogICRjYnRfaGlnaF9hbHQg
PSBjYnRfbW9kZWxfdG9wCiAgJGNidF9wcmV2ZW50ID0gIlNrZXRjaHVwOjpD
b21wb25lbnRJbnN0YW5jZSIKZW5kCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBPdmVyd3JpdGUgY3VycmVudCBzZXR0aW5ncyB3aXRoIGJh
c2ljIHNldHRpbmdzCmRlZiBjYnRfdXNlX2RlZmF1bHQKICAjcHV0cyAic2V0
dGluZ3MgdG8gZGVmYXVsdCIKICAkY2J0X3NoYXBlID0gJGNidF9kZV9zaGFw
ZQogICRjYnRfcmFkaXVzID0gJGNidF9kZV9yYWRpdXMKICAkY2J0X3NwcmF5
X3JhZGl1cyA9ICRjYnRfZGVfc3ByYXlfcmFkaXVzCiAgJGNidF9wcmVzc3Vy
ZSA9ICRjYnRfZGVfcHJlc3N1cmUKICAkY2J0X3JvdGF0ZSA9ICRjYnRfZGVf
cm90YXRlCiAgJGNidF9zdGFja2luZyA9ICRjYnRfZGVfc3RhY2tpbmcKICAk
Y2J0X3BlcnBlbmRpY3VsYXIgPSAkY2J0X2RlX3BlcnBlbmRpY3VsYXIKICAk
Y2J0X3Byb3BvcnRpb24gPSAkY2J0X2RlX3Byb3BvcnRpb24KICAkY2J0X2xv
d19zY2FsZSA9ICRjYnRfZGVfbG93X3NjYWxlCiAgJGNidF9oaWdoX3NjYWxl
ID0gJGNidF9kZV9oaWdoX3NjYWxlCiAgJGNidF9sb3dfc3RlZXAgPSAkY2J0
X2RlX2xvd19zdGVlcAogICRjYnRfaGlnaF9zdGVlcCA9ICRjYnRfZGVfaGln
aF9zdGVlcAogICRjYnRfbG93X2FsdCA9IGNidF9tb2RlbF9ib3R0b20KICAk
Y2J0X2hpZ2hfYWx0ID0gY2J0X21vZGVsX3RvcAogICRjYnRfcHJldmVudCA9
ICJTa2V0Y2h1cDo6Q29tcG9uZW50SW5zdGFuY2UiCmVuZAojLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVtcCBzYXZlIG9mIGRpYWxvZyBz
ZXR0aW5ncywgdG8gYmUgcmVzdG9yZWQgd2hlbiBjb21tYW5kIGVuZHMKZGVm
IGNidF9zdG9yZV9kaWFsb2dfc2V0dGluZ3MKICAkY2J0X3Rfc2hhcGUgPSAk
Y2J0X3NoYXBlCiAgJGNidF90X3JhZGl1cyA9ICRjYnRfcmFkaXVzCiAgJGNi
dF90X3ByZXNzdXJlID0gJGNidF9wcmVzc3VyZQogICRjYnRfdF9yb3RhdGUg
PSAkY2J0X3JvdGF0ZQogICRjYnRfdF9zdGFja2luZyA9ICRjYnRfc3RhY2tp
bmcKICAkY2J0X3RfcGVycGVuZGljdWxhciA9ICRjYnRfcGVycGVuZGljdWxh
cgogICRjYnRfdF9wcm9wb3J0aW9uID0gJGNidF9wcm9wb3J0aW9uCiAgJGNi
dF90X2xvd19zY2FsZSA9ICRjYnRfbG93X3NjYWxlCiAgJGNidF90X2hpZ2hf
c2NhbGUgPSAkY2J0X2hpZ2hfc2NhbGUKICAkY2J0X3RfbG93X3N0ZWVwID0g
JGNidF9sb3dfc3RlZXAKICAkY2J0X3RfaGlnaF9zdGVlcCA9ICRjYnRfaGln
aF9zdGVlcAogICRjYnRfdF9sb3dfYWx0ID0gJGNidF9sb3dfYWx0CiAgJGNi
dF90X2hpZ2hfYWx0ID0gJGNidF9oaWdoX2FsdAogICRjYnRfdF9wcmV2ZW50
ID0gJGNidF9wcmV2ZW50CmVuZAoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIFJlc3RvcmUgZGlhbG9nIHNldHRpbmdzCmRlZiBjYnRfcmVz
dG9yZV9kaWFsb2dfc2V0dGluZ3MKICAkY2J0X3NoYXBlID0gJGNidF90X3No
YXBlCiAgJGNidF9yYWRpdXMgPSAkY2J0X3RfcmFkaXVzCiAgJGNidF9wcmVz
c3VyZSA9ICRjYnRfdF9wcmVzc3VyZQogICRjYnRfcm90YXRlID0gJGNidF90
X3JvdGF0ZQogICRjYnRfc3RhY2tpbmcgPSAkY2J0X3Rfc3RhY2tpbmcKICAk
Y2J0X3BlcnBlbmRpY3VsYXIgPSAkY2J0X3RfcGVycGVuZGljdWxhcgogICRj
YnRfcHJvcG9ydGlvbiA9ICRjYnRfdF9wcm9wb3J0aW9uCiAgJGNidF9sb3df
c2NhbGUgPSAkY2J0X3RfbG93X3NjYWxlCiAgJGNidF9oaWdoX3NjYWxlID0g
JGNidF90X2hpZ2hfc2NhbGUKICAkY2J0X2xvd19zdGVlcCA9ICRjYnRfdF9s
b3dfc3RlZXAKICAkY2J0X2hpZ2hfc3RlZXAgPSAkY2J0X3RfaGlnaF9zdGVl
cAogICRjYnRfbG93X2FsdCA9ICRjYnRfdF9sb3dfYWx0CiAgJGNidF9oaWdo
X2FsdCA9ICRjYnRfdF9oaWdoX2FsdAogICRjYnRfcHJldmVudCA9ICRjYnRf
dF9wcmV2ZW50CmVuZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gV2FybmluZzogbG90IG9mIGNvbXBvbmVudHMgIQpkZWYgY2J0X3dhcm5p
bmcobikKcmV0dXJuIGlmIG4gPCA1MDAKbjIgPSBuLzEwMCAqIDEwMApyZXAg
PSBVSS5tZXNzYWdlYm94KCJBYm91dCB0byBjcmVhdGUgbW9yZSB0aGFuICIg
KyBuMi50b19zICsgIiBjb21wb25lbnRzLlxuIFByb2NlZWQgPyIsTUJfWUVT
Tk8pCmJyZWFrIGlmIHJlcCA9PSA3CmVuZAojLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gVG9vbCBjbGFzcyBmb3IgTmdvbnMKY2xhc3MgQ29t
cG9uZW50TmdvbkJydXNoVG9vbAoKZGVmIGluaXRpYWxpemUKICBtb2RlbCA9
IFNrZXRjaHVwLmFjdGl2ZV9tb2RlbAogIGVudGl0aWVzID0gbW9kZWwuZW50
aXRpZXMKCiAgQGlwMSA9IG5pbAogIEBpcDIgPSBuaWwKICBAaXAzID0gbmls
CiAgQHhkb3duID0gMAogIEB5ZG93biA9IDAKICBAc3RhdGUgPSAwCiAgQHNo
YXBlID0gJGNidF9zaGFwZQogICNwdXRzICJJbml0IE5nb25Ub29sIHdpdGg6
ICIgKyAkY2J0X3NoYXBlCmVuZAoKZGVmIGFjdGl2YXRlCiAgICBAaXAxID0g
U2tldGNodXA6OklucHV0UG9pbnQubmV3CiAgICBAaXAyID0gU2tldGNodXA6
OklucHV0UG9pbnQubmV3CiAgICBAaXAzID0gU2tldGNodXA6OklucHV0UG9p
bnQubmV3CiAgICBAaXAgPSBTa2V0Y2h1cDo6SW5wdXRQb2ludC5uZXcKICAg
IEBkcmF3biA9IGZhbHNlCiAgICAjIFRoaXMgc2V0cyB0aGUgbGFiZWwgZm9y
IHRoZSBWQ0IKICAgIFNrZXRjaHVwOjpzZXRfc3RhdHVzX3RleHQgIlJhZGl1
cyBvciBEaXN0YW5jZSIsIFNCX1ZDQl9MQUJFTAogICAgc2VsZi5yZXNldChu
aWwpCiAgICAjcHV0cyAiQWN0aXZhdGUgTmdvblRvb2wgd2l0aDogIiArICRj
YnRfc2hhcGUKZW5kCgpkZWYgb25Nb3VzZUxlYXZlKHZpZXcpCiAgU2tldGNo
dXAuc2VuZF9hY3Rpb24gInNlbGVjdFNlbGVjdGlvblRvb2w6IgplbmQKCmRl
ZiBkZWFjdGl2YXRlKHZpZXcpCiAgICB2aWV3LmludmFsaWRhdGUgaWYgQGRy
YXduCmVuZAoKZGVmIG9uTW91c2VNb3ZlKGZsYWdzLCB4LCB5LCB2aWV3KQog
ICAgaWYoIEBzdGF0ZSA9PSAwICkKICAgICAgI3B1dHMic3RhdGUgMDogIiAr
ICRjYnRfc2hhcGUKICAgICAgICBAaXAucGljayB2aWV3LCB4LCB5CiAgICAg
ICAgaWYoIEBpcCAhPSBAaXAxICkKICAgICAgICAgICAgdmlldy5pbnZhbGlk
YXRlIGlmKCBAaXAuZGlzcGxheT8gb3IgQGlwMS5kaXNwbGF5PyApCiAgICAg
ICAgICAgIEBpcDEuY29weSEgQGlwCiAgICAgICAgICAgICMgc2V0IHRoZSB0
b29sdGlwIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCB0byB0aGlzIHBvaW50
CiAgICAgICAgICAgIHZpZXcudG9vbHRpcCA9IEBpcDEudG9vbHRpcAogICAg
ICAgIGVuZAogICAgZWxzZQogICAgICAgICMgR2V0dGluZyB0aGUgcmFkaXVz
IHBvaW50IG9yIHRoZSBzZWNvbmQgcG9pbnQgZm9yIHJlY3RhbmdsZQogICAg
ICAgIEBpcDIucGljayB2aWV3LCB4LCB5LCBAaXAxCiAgICAgICAgdmlldy50
b29sdGlwID0gQGlwMi50b29sdGlwIGlmKCBAaXAyLnZhbGlkPyApCiAgICAg
ICAgdmlldy5pbnZhbGlkYXRlCiAgICAgICAgIyBVcGRhdGUgdGhlIGxlbmd0
aCBkaXNwbGF5ZWQgaW4gdGhlIFZDQgogICAgICAgIGlmKCBAaXAyLnZhbGlk
PyApCiAgICAgICAgICAgIEBsZW5ndGggPSBAaXAxLnBvc2l0aW9uLmRpc3Rh
bmNlKEBpcDIucG9zaXRpb24pCiAgICAgICAgICAgIFNrZXRjaHVwOjpzZXRf
c3RhdHVzX3RleHQgQGxlbmd0aC50b19zLCBTQl9WQ0JfVkFMVUUKICAgICAg
ICBlbmQKICAgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgbW91c2Ugd2Fz
IG1vdmVkIGZhciBlbm91Z2ggdG8gY3JlYXRlIGEgY2lyY2xlLgogICAgICAg
ICMgVGhpcyBpcyB1c2VkIHNvIHRoYXQgeW91IGNhbiBjcmVhdGUgYSBjaXJj
bGUgYnkgZWl0aGVyIGRyYWdnaW4gb3IgZG9pbmcgY2xpY2stbW92ZS1jbGlj
awogICAgICAgIGlmKCAoeC1AeGRvd24pLmFicyA+IDEwIHx8ICh5LUB5ZG93
bikuYWJzID4gMTAgKQogICAgICAgICAgICBAZHJhZ2dpbmcgPSB0cnVlCiAg
ICAgICAgICAgIHNlbGYuZHJhd19nZW9tZXRyeShAaXAxLnBvc2l0aW9uLCBA
aXAyLnBvc2l0aW9uLCBAbGVuZ3RoLCB2aWV3KQogICAgICAgIGVuZAogICAg
ZW5kCmVuZAoKZGVmIG9uTEJ1dHRvbkRvd24oZmxhZ3MsIHgsIHksIHZpZXcp
CiAgICAjIFdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBmaXJzdCB0aW1lLCB3
ZSBzd2l0Y2ggdG8gZ2V0dGluZyB0aGUKICAgICMgc2Vjb25kIHBvaW50LiAg
V2hlbiBoZSBjbGlja3MgYSBzZWNvbmQgdGltZSB3ZSBjcmVhdGUgdGhlIGNp
cmNsZQogICAgaWYoIEBzdGF0ZSA9PSAwICkKICAgICAgICBAaXAxLnBpY2sg
dmlldywgeCwgeQogICAgICAgIGlmKCBAaXAxLnZhbGlkPyApCiAgICAgICAg
ICAgIEBzdGF0ZSA9IDEKICAgICAgICAgICAgU2tldGNodXA6OnNldF9zdGF0
dXNfdGV4dCAiUmFkaXVzIiwgU0JfUFJPTVBUCiAgICAgICAgICAgIEB4ZG93
biA9IHgKICAgICAgICAgICAgQHlkb3duID0geQogICAgICAgIGVuZAogICAg
ZW5kCiAgICBpZiggQHN0YXRlID09IDEgKQogICAgICAgICMgY3JlYXRlIHRo
ZSBuZ29uIG9uIHRoZSBzZWNvbmQgY2xpY2sKICAgICAgICAjaWYoIEBpcDIu
dmFsaWQ/IGFuZCAoJGNidF9zaGFwZSA9PSAiQ2lyY2xlIiBvciAkY2J0X3No
YXBlID09ICJTcXVhcmUiIG9yICRjYnRfc2hhcGUgPT0gIlRyaWFuZ2xlIikp
CiAgICAgICAgaWYoIEBpcDIudmFsaWQ/IGFuZCAoQHNoYXBlID09ICJDaXJj
bGUiIG9yIEBzaGFwZSA9PSAiU3F1YXJlIiBvciBAc2hhcGUgPT0gIlRyaWFu
Z2xlIikpCiAgICAgICAgICBAc3RhdGUgPSAyCiAgICAgICAgICAjIHNwcmF5
IGNvbXBvbmVudHMKICAgICAgICAgIHNlbGYuY3JlYXRlX2dlb21ldHJ5KEBp
cDEucG9zaXRpb24sIEBpcDIucG9zaXRpb24sdmlldykKICAgICAgICAgIHNl
bGYucmVzZXQodmlldykKICAgICAgICBlbmQKICAgIGVuZAogICAgIyBDbGVh
ciBhbnkgaW5mZXJlbmNlIGxvY2sKICAgIHZpZXcubG9ja19pbmZlcmVuY2UK
ZW5kCgpkZWYgb25MQnV0dG9uVXAoZmxhZ3MsIHgsIHksIHZpZXcpCiAgICAj
IElmIHdlIGFyZSBkb2luZyBhIGRyYWcsIHRoZW4gY3JlYXRlIHRoZSBjaXJj
bGUgb24gdGhlIG1vdXNlIHVwIGV2ZW50CiAgICBpZiggQGRyYWdnaW5nICYm
IEBpcDIudmFsaWQ/ICkKICAgICAgICAjIHNwcmF5IGNvbXBvbmVudHMpCiAg
ICAgICAgc2VsZi5jcmVhdGVfZ2VvbWV0cnkoQGlwMS5wb3NpdGlvbiwgQGlw
Mi5wb3NpdGlvbix2aWV3KQogICAgICAgIHNlbGYucmVzZXQodmlldykKICAg
IGVuZAplbmQKCmRlZiBvbktleURvd24oa2V5LCByZXBlYXQsIGZsYWdzLCB2
aWV3KQogICAgaWYoIGtleSA9PSBDT05TVFJBSU5fTU9ESUZJRVJfS0VZICYm
IHJlcGVhdCA9PSAxICkKICAgICAgICBAc2hpZnRfZG93bl90aW1lID0gVGlt
ZS5ub3cKICAgICAgICAKICAgICAgICAjIGlmIHdlIGFscmVhZHkgaGF2ZSBh
biBpbmZlcmVuY2UgbG9jaywgdGhlbiB1bmxvY2sgaXQKICAgICAgICBpZigg
dmlldy5pbmZlcmVuY2VfbG9ja2VkPyApCiAgICAgICAgICAgICMgY2FsbGlu
ZyBsb2NrX2luZmVyZW5jZSB3aXRoIG5vIGFyZ3VtZW50cyBhY3R1YWxseSB1
bmxvY2tzCiAgICAgICAgICAgIHZpZXcubG9ja19pbmZlcmVuY2UKICAgICAg
ICBlbHNpZiggQHN0YXRlID09IDAgJiYgQGlwMS52YWxpZD8gKQogICAgICAg
ICAgICB2aWV3LmxvY2tfaW5mZXJlbmNlIEBpcDEKICAgICAgICBlbHNpZigg
QHN0YXRlID09IDEgJiYgQGlwMi52YWxpZD8gKQogICAgICAgICAgICB2aWV3
LmxvY2tfaW5mZXJlbmNlIEBpcDIsIEBpcDEKICAgICAgICBlbmQKICAgIGVu
ZAplbmQKCmRlZiBvbktleVVwKGtleSwgcmVwZWF0LCBmbGFncywgdmlldykK
ICAgIGlmKCBrZXkgPT0gQ09OU1RSQUlOX01PRElGSUVSX0tFWSAmJgogICAg
ICAgIHZpZXcuaW5mZXJlbmNlX2xvY2tlZD8gJiYKICAgICAgICAoVGltZS5u
b3cgLSBAc2hpZnRfZG93bl90aW1lKSA+IDAuNSApCiAgICAgICAgdmlldy5s
b2NrX2luZmVyZW5jZQogICAgZW5kCmVuZAoKZGVmIG9uVXNlclRleHQodGV4
dCwgdmlldykKICAgIHJldHVybiBpZiBub3QgQHN0YXRlID09IDEKICAgIHJl
dHVybiBpZiBub3QgQGlwMi52YWxpZD8KICAgIAogICAgYmVnaW4KICAgICAg
ICB2YWx1ZSA9IHRleHQudG9fbAogICAgcmVzY3VlCiAgICAgICAgIyBFcnJv
ciBwYXJzaW5nIHRoZSB0ZXh0CiAgICAgICAgVUkuYmVlcAogICAgICAgIHB1
dHMgIkNhbm5vdCBjb252ZXJ0ICN7dGV4dH0gdG8gYSBMZW5ndGgiCiAgICAg
ICAgdmFsdWUgPSBuaWwKICAgICAgICBTa2V0Y2h1cDo6c2V0X3N0YXR1c190
ZXh0ICIiLCBTQl9WQ0JfVkFMVUUKICAgIGVuZAogICAgcmV0dXJuIGlmICF2
YWx1ZQoKICAgICMgQ29tcHV0ZSB0aGUgZGlyZWN0aW9uIGFuZCB0aGUgc2Vj
b25kIHBvaW50CiAgICBwdDEgPSBAaXAxLnBvc2l0aW9uCiAgICB2ZWMgPSBA
aXAyLnBvc2l0aW9uIC0gcHQxCiAgICBpZiggdmVjLmxlbmd0aCA9PSAwLjAg
KQogICAgICAgIHJldHVybgogICAgZW5kCiAgICB2ZWMubGVuZ3RoID0gdmFs
dWUKICAgIHB0MiA9IHB0MSArIHZlYwoKICAgICMgc3ByYXkgY29tcG9uZW50
cwogICAgc2VsZi5jcmVhdGVfZ2VvbWV0cnkocHQxLCBwdDIsIHZpZXcpCiAg
ICBzZWxmLnJlc2V0KHZpZXcpCmVuZAoKIyBUaGUgZHJhdyBtZXRob2QgaXMg
Y2FsbGVkIHdoZW5ldmVyIHRoZSB2aWV3IGlzIHJlZnJlc2hlZC4KZGVmIGRy
YXcodmlldykKICAgIGlmKCBAaXAxLnZhbGlkPyApCiAgICAgICAgaWYoIEBp
cDEuZGlzcGxheT8gKQogICAgICAgICAgICBAaXAxLmRyYXcodmlldykKICAg
ICAgICAgICAgQGRyYXduID0gdHJ1ZQogICAgICAgIGVuZAogICAgICAgIGlm
KCBAaXAyLnZhbGlkPyApCiAgICAgICAgICAgIEBpcDIuZHJhdyh2aWV3KSBp
ZiggQGlwMi5kaXNwbGF5PyApCiAgICAgICAgICAgIHZpZXcuc2V0X2NvbG9y
X2Zyb21fbGluZShAaXAxLCBAaXAyKQogICAgICAgICAgICBzZWxmLmRyYXdf
Z2VvbWV0cnkoQGlwMS5wb3NpdGlvbiwgQGlwMi5wb3NpdGlvbiwgQGxlbmd0
aCwgdmlldykKICAgICAgICAgICAgQGRyYXduID0gdHJ1ZQogICAgICAgIGVu
ZAogICAgZW5kCmVuZAoKIyBvbkNhbmNlbCBpcyBjYWxsZWQgd2hlbiB0aGUg
dXNlciBoaXRzIHRoZSBlc2NhcGUga2V5CmRlZiBvbkNhbmNlbChmbGFnLCB2
aWV3KQogICAgc2VsZi5yZXNldCh2aWV3KQogICAgU2tldGNodXAuc2VuZF9h
Y3Rpb24gInNlbGVjdFNlbGVjdGlvblRvb2w6IgplbmQKCiMgUmVzZXQgdGhl
IHRvb2wgYmFjayB0byBpdHMgaW5pdGlhbCBzdGF0ZQpkZWYgcmVzZXQodmll
dykKICAgIEBzdGF0ZSA9IDAKICAgICMgRGlzcGxheSBhIHByb21wdCBvbiB0
aGUgc3RhdHVzIGJhcgogICAgU2tldGNodXA6OnNldF9zdGF0dXNfdGV4dCgi
Q2VudGVyIG9mIGNpcmNsZSIsIFNCX1BST01QVCkKICAgICMgY2xlYXIgdGhl
IElucHV0UG9pbnRzCiAgICBAaXAxLmNsZWFyCiAgICBAaXAyLmNsZWFyCiAg
ICBpZiggdmlldyApCiAgICAgICAgdmlldy50b29sdGlwID0gbmlsCiAgICAg
ICAgdmlldy5pbnZhbGlkYXRlIGlmIEBkcmF3bgogICAgZW5kCiAgICBAZHJh
d24gPSBmYWxzZQogICAgQGRyYWdnaW5nID0gZmFsc2UKZW5kCgojIENyZWF0
ZSBuZXcgZ2VvbWV0cnkgd2hlbiB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgdHdv
IHBvaW50cy4KZGVmIGNyZWF0ZV9nZW9tZXRyeShwMSwgcDIsIHZpZXcpCiAg
bW9kZWwgPSBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwKICBtb2RlbC5zdGFydF9v
cGVyYXRpb24gIkNvbXBvbmVudCBTcHJheSAoIiArIEBzaGFwZSArICIpIgog
ICRjYnRfcmFkaXVzID0gcDEuZGlzdGFuY2UgcDIKICAjbl9jb21wcyA9IGNi
dF9uX3BvaW50cygkY2J0X3NoYXBlLCBAaXAxLnBvc2l0aW9uLCAkY2J0X3Jh
ZGl1cywgJGNidF9wcmVzc3VyZSxuaWwpCiAgI2NidF9yYW5kb21fcG9pbnRz
KG5fY29tcHMsICRjYnRfc2hhcGUsIEBpcDEucG9zaXRpb24sIEBpcDIucG9z
aXRpb24pCiAgbl9jb21wcyA9IGNidF9uX3BvaW50cyhAc2hhcGUsIEBpcDEu
cG9zaXRpb24sICRjYnRfcmFkaXVzLCAkY2J0X3ByZXNzdXJlLG5pbCkKICBj
YnRfcmFuZG9tX3BvaW50cyhuX2NvbXBzLCBAc2hhcGUsIEBpcDEucG9zaXRp
b24sIEBpcDIucG9zaXRpb24pCiAgbW9kZWwuY29tbWl0X29wZXJhdGlvbgog
ICAgCmVuZCAjb2YgZGVmIGNyZWF0ZV9nZW9tZXRyeQoKCiMgRHJhdyB0aGUg
Z2VvbWV0cnkKZGVmIGRyYXdfZ2VvbWV0cnkocHQxLCBwdDIsIHJhZGl1cywg
dmlldykKICBjYXNlIEBzaGFwZQogICAgd2hlbiAiQ2lyY2xlIgogICAgICBz
aWRlcyA9IDMwCiAgICB3aGVuICJTcXVhcmUiCiAgICAgIHNpZGVzID0gNAog
ICAgd2hlbiAiVHJpYW5nbGUiCiAgICAgIHNpZGVzID0gMwogIGVuZAogIGFu
ZyA9IE1hdGg6OlBJKjIvc2lkZXMKICBwdHM9W3B0Ml0KICAwLnVwdG8oc2lk
ZXMtMSkgZG8gfGl8CiAgICB0cmFucyA9IEdlb206OlRyYW5zZm9ybWF0aW9u
LnJvdGF0aW9uKHB0MSxbMCwwLDFdLGkqYW5nKQogICAgcHRzLnB1c2ggcHQy
LnRyYW5zZm9ybSh0cmFucykKICBlbmQKICAjIE5nb24gdGVtcCBkcmF3CiAg
dmlldy5kcmF3X3BvaW50cyhwdDEsOCw1LCJyZWQiKQogIHB0cy5wdXNoIHB0
cy5maXJzdAogIHZpZXcuZHJhd19wb2x5bGluZSBwdHMKZW5kCgplbmQgIyBj
bGFzcyBDb21wb25lbnROZ29uQnJ1c2hUb29sCgojLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQoKY2xhc3MgQ29tcG9uZW50UG9pbnRCcnVz
aFRvb2wKCmRlZiBpbml0aWFsaXplCiAgICBAaXAxID0gbmlsCiAgICBAeGRv
d24gPSAwCiAgICBAeWRvd24gPSAwCiAgICBAc2hhcGUgPSAkY2J0X3NoYXBl
CiAgICAjIEl0ZXJhdGUgdGhyb3VnaCBjb21wIGxpc3QKICAgIEBpbmRpY2Ug
PSAwCmVuZAoKZGVmIGFjdGl2YXRlCiAgICBAaXAxID0gU2tldGNodXA6Oklu
cHV0UG9pbnQubmV3CiAgICBAaXAgPSBTa2V0Y2h1cDo6SW5wdXRQb2ludC5u
ZXcKICAgIEBkcmF3biA9IGZhbHNlCiAgICBTa2V0Y2h1cDo6c2V0X3N0YXR1
c190ZXh0KCJQb2ludCIsIFNCX1ZDQl9MQUJFTCkKICAgIHNlbGYucmVzZXQo
bmlsKQplbmQKCmRlZiBvbk1vdXNlTGVhdmUodmlldykKICBTa2V0Y2h1cC5z
ZW5kX2FjdGlvbiAic2VsZWN0U2VsZWN0aW9uVG9vbDoiCmVuZAoKZGVmIGRl
YWN0aXZhdGUodmlldykKICAgIHZpZXcuaW52YWxpZGF0ZSBpZiBAZHJhd24K
ZW5kCgpkZWYgb25Nb3VzZU1vdmUoZmxhZ3MsIHgsIHksIHZpZXcpCiAgQGlw
LnBpY2sgdmlldywgeCwgeQogIGlmKCBAaXAgIT0gQGlwMSApCiAgICB2aWV3
LmludmFsaWRhdGUgaWYoIEBpcC5kaXNwbGF5PyBvciBAaXAxLmRpc3BsYXk/
ICkKICAgIEBpcDEuY29weSEgQGlwCiAgICB2aWV3LnRvb2x0aXAgPSBAaXAx
LnRvb2x0aXAKICBlbmQKZW5kCgpkZWYgb25MQnV0dG9uRG93bihmbGFncywg
eCwgeSwgdmlldykKICAgICAgICBAaXAxLnBpY2sgdmlldywgeCwgeQogICAg
ICAgIGlmKCBAaXAxLnZhbGlkPyApCiAgICAgICAgICAgIFNrZXRjaHVwOjpz
ZXRfc3RhdHVzX3RleHQoIlBvaW50IiwgU0JfUFJPTVBUKQogICAgICAgICAg
ICBAeGRvd24gPSB4CiAgICAgICAgICAgIEB5ZG93biA9IHkKICAgICAgICBl
bmQKICAgICMgQ2xlYXIgYW55IGluZmVyZW5jZSBsb2NrCiAgICB2aWV3Lmxv
Y2tfaW5mZXJlbmNlCiAgICBzZWxmLmNyZWF0ZV9nZW9tZXRyeShAaXAxLnBv
c2l0aW9uLHZpZXcpCmVuZAoKZGVmIG9uTEJ1dHRvblVwKGZsYWdzLCB4LCB5
LCB2aWV3KQogIGlmKCBAZHJhZ2dpbmcgJiYgQGlwMi52YWxpZD8gKQogICAg
c2VsZi5yZXNldCh2aWV3KQogIGVuZAplbmQKCmRlZiBvbktleURvd24oa2V5
LCByZXBlYXQsIGZsYWdzLCB2aWV3KQogIGlmKCBrZXkgPT0gQ09OU1RSQUlO
X01PRElGSUVSX0tFWSAmJiByZXBlYXQgPT0gMSApCiAgICBAc2hpZnRfZG93
bl90aW1lID0gVGltZS5ub3cKICAgICMgaWYgd2UgYWxyZWFkeSBoYXZlIGFu
IGluZmVyZW5jZSBsb2NrLCB0aGVuIHVubG9jayBpdAogICAgaWYoIHZpZXcu
aW5mZXJlbmNlX2xvY2tlZD8gKQogICAgICAjIGNhbGxpbmcgbG9ja19pbmZl
cmVuY2Ugd2l0aCBubyBhcmd1bWVudHMgYWN0dWFsbHkgdW5sb2NrcwogICAg
ICB2aWV3LmxvY2tfaW5mZXJlbmNlCiAgICBlbmQKICBlbmQKZW5kCgpkZWYg
b25LZXlVcChrZXksIHJlcGVhdCwgZmxhZ3MsIHZpZXcpCiAgICBpZigga2V5
ID09IENPTlNUUkFJTl9NT0RJRklFUl9LRVkgJiYKICAgICAgICB2aWV3Lmlu
ZmVyZW5jZV9sb2NrZWQ/ICYmCiAgICAgICAgKFRpbWUubm93IC0gQHNoaWZ0
X2Rvd25fdGltZSkgPiAwLjUgKQogICAgICAgIHZpZXcubG9ja19pbmZlcmVu
Y2UKICAgIGVuZAplbmQKCmRlZiBvblVzZXJUZXh0KHRleHQsIHZpZXcpCiAg
ICBzZWxmLnJlc2V0KHZpZXcpCmVuZAoKZGVmIGRyYXcodmlldykKICBpZigg
QGlwMS52YWxpZD8gKQogICAgaWYoIEBpcDEuZGlzcGxheT8gKQogICAgICBA
aXAxLmRyYXcodmlldykKICAgICAgQGRyYXduID0gdHJ1ZQogICAgZW5kCiAg
ZW5kCmVuZAoKZGVmIG9uQ2FuY2VsKGZsYWcsIHZpZXcpCiAgICBzZWxmLnJl
c2V0KHZpZXcpCiAgICBTa2V0Y2h1cC5zZW5kX2FjdGlvbiAic2VsZWN0U2Vs
ZWN0aW9uVG9vbDoiCmVuZAoKZGVmIHJlc2V0KHZpZXcpCiAgQHN0YXRlID0g
MAogIFNrZXRjaHVwOjpzZXRfc3RhdHVzX3RleHQoJGV4U3RyaW5ncy5HZXRT
dHJpbmcoIlBvaW50IiksIFNCX1BST01QVCkKICBAaXAxLmNsZWFyCiAgaWYo
IHZpZXcgKQogICAgdmlldy50b29sdGlwID0gbmlsCiAgICB2aWV3LmludmFs
aWRhdGUgaWYgQGRyYXduCiAgZW5kCiAgQGRyYXduID0gZmFsc2UKICBAZHJh
Z2dpbmcgPSBmYWxzZQplbmQKCmRlZiBjcmVhdGVfZ2VvbWV0cnkocDEsIHZp
ZXcpCiAgbW9kZWwgPSBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwKICBtb2RlbC5z
dGFydF9vcGVyYXRpb24gIkNvbXBvbmVudCBTcHJheSAoUG9pbnQpIgogIHog
PSBjYnRfbW9kZWxfdG9wICsgMTAwMDAwCiAgcCA9IFtAaXAxLnBvc2l0aW9u
LngsIEBpcDEucG9zaXRpb24ueSwgel0KICB2ID0gR2VvbTo6VmVjdG9yM2Qu
bmV3KDAsMCwtMTAwMDApCiAgaGl0ID0gIG1vZGVsLnJheXRlc3QgW3Asdl0K
ICAKICBpZiBoaXQgIT0gbmlsIGFuZCBoaXRbMV1bMF0uY2xhc3MudG9fcyAh
PSAkY2J0X3ByZXZlbnQgYW5kIGNidF9tYXRjaF9zbG9wZShoaXQpIGFuZCBj
YnRfbWF0Y2hfYWx0KGhpdFswXSkKICAgIAogICAgIyBSYW5kb20gdHlwZQog
ICAgI2NvbXAgPSBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwuZW50aXRpZXMuYWRk
X2luc3RhbmNlICRjYnRfY29tcHNbcmFuZCgkY2J0X2NvbXBzLmxlbmd0aCld
LCBoaXRbMF0KICAgIAogICAgIyBJdGVyYXRlIHRocm91Z2ggc2VsZWN0ZWQg
Y29tcG9uZW50cwogICAgaWYgQGluZGljZSA9PSAkY2J0X2NvbXBzLmxlbmd0
aAogICAgICBAaW5kaWNlID0gMAogICAgZW5kCiAgICBjb21wID0gU2tldGNo
dXAuYWN0aXZlX21vZGVsLmVudGl0aWVzLmFkZF9pbnN0YW5jZSAkY2J0X2Nv
bXBzW0BpbmRpY2VdLCBoaXRbMF0KICAgIEBpbmRpY2UgPSBAaW5kaWNlICsg
MQogICAgCiAgICAjIFJvdGF0aW9uIGFuZCBzY2FsZQogICAgY2J0X3JvdGF0
ZV9zY2FsZShoaXQsY29tcCkKICAgIGVsc2UKICAgIFNrZXRjaHVwLnNldF9z
dGF0dXNfdGV4dCgiQ2Fubm90IHBsYWNlIGEgY29tcG9uZW50IGhlcmUgISIp
CiAgZW5kCiAgaWYgbm90IGNidF9tYXRjaF9zbG9wZShoaXQpCiAgICAgIFNr
ZXRjaHVwLnNldF9zdGF0dXNfdGV4dCgiU2xvcGUgb3V0IG9mIHJhbmdlLiBD
YW5ub3QgcGxhY2UgYSBjb21wb25lbnQgaGVyZSAhIikKICBlbmQKICBpZiBu
b3QgY2J0X21hdGNoX2FsdChoaXRbMF0pCiAgICAgIFNrZXRjaHVwLnNldF9z
dGF0dXNfdGV4dCgiQWx0aXR1ZGUgb3V0IG9mIHJhbmdlLiBDYW5ub3QgcGxh
Y2UgYSBjb21wb25lbnQgaGVyZSAhIikKICBlbmQKICAKICBtb2RlbC5jb21t
aXRfb3BlcmF0aW9uCmVuZAoKZGVmIGRyYXdfZ2VvbWV0cnkocHQxLCB2aWV3
KQogICAgdmlldy5kcmF3X3BvaW50KHB0MSkKZW5kCgplbmQgIyBjbGFzcyBD
b21wb25lbnRQb2ludEJydXNoVG9vbAoKIy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KCmNsYXNzIENvbXBvbmVudExpbmVCcnVzaFRvb2wK
CmRlZiBpbml0aWFsaXplCiAgICBAaXAxID0gbmlsCiAgICBAaXAyID0gbmls
CiAgICBAeGRvd24gPSAwCiAgICBAeWRvd24gPSAwCiAgICBAc2hhcGUgPSAk
Y2J0X3NoYXBlCmVuZAoKZGVmIGFjdGl2YXRlCiAgICBAaXAxID0gU2tldGNo
dXA6OklucHV0UG9pbnQubmV3CiAgICBAaXAyID0gU2tldGNodXA6OklucHV0
UG9pbnQubmV3CiAgICBAaXAgPSBTa2V0Y2h1cDo6SW5wdXRQb2ludC5uZXcK
ICAgIEBkcmF3biA9IGZhbHNlCiAgICBTa2V0Y2h1cDo6c2V0X3N0YXR1c190
ZXh0ICRleFN0cmluZ3MuR2V0U3RyaW5nKCJMZW5ndGgiKSwgU0JfVkNCX0xB
QkVMCiAgICBzZWxmLnJlc2V0KG5pbCkKZW5kCgpkZWYgb25Nb3VzZUxlYXZl
KHZpZXcpCiAgU2tldGNodXAuc2VuZF9hY3Rpb24gInNlbGVjdFNlbGVjdGlv
blRvb2w6IgplbmQKCmRlZiBkZWFjdGl2YXRlKHZpZXcpCiAgICB2aWV3Lmlu
dmFsaWRhdGUgaWYgQGRyYXduCmVuZAoKZGVmIG9uTW91c2VNb3ZlKGZsYWdz
LCB4LCB5LCB2aWV3KQogICAgaWYoIEBzdGF0ZSA9PSAwICkKICAgICAgICBA
aXAucGljayB2aWV3LCB4LCB5CiAgICAgICAgaWYoIEBpcCAhPSBAaXAxICkK
ICAgICAgICAgICAgdmlldy5pbnZhbGlkYXRlIGlmKCBAaXAuZGlzcGxheT8g
b3IgQGlwMS5kaXNwbGF5PyApCiAgICAgICAgICAgIEBpcDEuY29weSEgQGlw
CiAgICAgICAgICAgIHZpZXcudG9vbHRpcCA9IEBpcDEudG9vbHRpcAogICAg
ICAgIGVuZAogICAgZWxzZQogICAgICAgIEBpcDIucGljayB2aWV3LCB4LCB5
LCBAaXAxCiAgICAgICAgdmlldy50b29sdGlwID0gQGlwMi50b29sdGlwIGlm
KCBAaXAyLnZhbGlkPyApCiAgICAgICAgdmlldy5pbnZhbGlkYXRlCgogICAg
ICAgIGlmKCBAaXAyLnZhbGlkPyApCiAgICAgICAgICAgIGxlbmd0aCA9IEBp
cDEucG9zaXRpb24uZGlzdGFuY2UoQGlwMi5wb3NpdGlvbikKICAgICAgICAg
ICAgU2tldGNodXA6OnNldF9zdGF0dXNfdGV4dCBsZW5ndGgudG9fcywgU0Jf
VkNCX1ZBTFVFCiAgICAgICAgZW5kCiAgICAgICAgCiAgICAgICAgaWYoICh4
LUB4ZG93bikuYWJzID4gMTAgfHwgKHktQHlkb3duKS5hYnMgPiAxMCApCiAg
ICAgICAgICAgIEBkcmFnZ2luZyA9IHRydWUKICAgICAgICBlbmQKICAgIGVu
ZAplbmQKCmRlZiBvbkxCdXR0b25Eb3duKGZsYWdzLCB4LCB5LCB2aWV3KQog
ICAgaWYoIEBzdGF0ZSA9PSAwICkKICAgICAgICBAaXAxLnBpY2sgdmlldywg
eCwgeQogICAgICAgIGlmKCBAaXAxLnZhbGlkPyApCiAgICAgICAgICAgIEBz
dGF0ZSA9IDEKICAgICAgICAgICAgU2tldGNodXA6OnNldF9zdGF0dXNfdGV4
dCAkZXhTdHJpbmdzLkdldFN0cmluZygiU2VsZWN0IHNlY29uZCBlbmQiKSwg
U0JfUFJPTVBUCiAgICAgICAgICAgIEB4ZG93biA9IHgKICAgICAgICAgICAg
QHlkb3duID0geQogICAgICAgIGVuZAogICAgZWxzZQogICAgICAgICMgY3Jl
YXRlIHRoZSBsaW5lIG9uIHRoZSBzZWNvbmQgY2xpY2sKICAgICAgICBpZigg
QGlwMi52YWxpZD8gKQogICAgICAgICAgICBzZWxmLmNyZWF0ZV9nZW9tZXRy
eShAaXAxLnBvc2l0aW9uLCBAaXAyLnBvc2l0aW9uLHZpZXcpCiAgICAgICAg
ICAgIHNlbGYucmVzZXQodmlldykKICAgICAgICBlbmQKICAgIGVuZAogICAg
IyBDbGVhciBhbnkgaW5mZXJlbmNlIGxvY2sKICAgIHZpZXcubG9ja19pbmZl
cmVuY2UKZW5kCgpkZWYgb25MQnV0dG9uVXAoZmxhZ3MsIHgsIHksIHZpZXcp
CiAgICBpZiggQGRyYWdnaW5nICYmIEBpcDIudmFsaWQ/ICkKICAgICAgICBz
ZWxmLmNyZWF0ZV9nZW9tZXRyeShAaXAxLnBvc2l0aW9uLCBAaXAyLnBvc2l0
aW9uLHZpZXcpCiAgICAgICAgc2VsZi5yZXNldCh2aWV3KQogICAgZW5kCmVu
ZAoKZGVmIG9uS2V5RG93bihrZXksIHJlcGVhdCwgZmxhZ3MsIHZpZXcpCiAg
ICBpZigga2V5ID09IENPTlNUUkFJTl9NT0RJRklFUl9LRVkgJiYgcmVwZWF0
ID09IDEgKQogICAgICAgIEBzaGlmdF9kb3duX3RpbWUgPSBUaW1lLm5vdwog
ICAgICAgIAogICAgICAgICMgaWYgd2UgYWxyZWFkeSBoYXZlIGFuIGluZmVy
ZW5jZSBsb2NrLCB0aGVuIHVubG9jayBpdAogICAgICAgIGlmKCB2aWV3Lmlu
ZmVyZW5jZV9sb2NrZWQ/ICkKICAgICAgICAgICAgIyBjYWxsaW5nIGxvY2tf
aW5mZXJlbmNlIHdpdGggbm8gYXJndW1lbnRzIGFjdHVhbGx5IHVubG9ja3MK
ICAgICAgICAgICAgdmlldy5sb2NrX2luZmVyZW5jZQogICAgICAgIGVsc2lm
KCBAc3RhdGUgPT0gMCAmJiBAaXAxLnZhbGlkPyApCiAgICAgICAgICAgIHZp
ZXcubG9ja19pbmZlcmVuY2UgQGlwMQogICAgICAgIGVsc2lmKCBAc3RhdGUg
PT0gMSAmJiBAaXAyLnZhbGlkPyApCiAgICAgICAgICAgIHZpZXcubG9ja19p
bmZlcmVuY2UgQGlwMiwgQGlwMQogICAgICAgIGVuZAogICAgZW5kCmVuZAoK
ZGVmIG9uS2V5VXAoa2V5LCByZXBlYXQsIGZsYWdzLCB2aWV3KQogICAgaWYo
IGtleSA9PSBDT05TVFJBSU5fTU9ESUZJRVJfS0VZICYmCiAgICAgICAgdmll
dy5pbmZlcmVuY2VfbG9ja2VkPyAmJgogICAgICAgIChUaW1lLm5vdyAtIEBz
aGlmdF9kb3duX3RpbWUpID4gMC41ICkKICAgICAgICB2aWV3LmxvY2tfaW5m
ZXJlbmNlCiAgICBlbmQKZW5kCgpkZWYgb25Vc2VyVGV4dCh0ZXh0LCB2aWV3
KQogICAgcmV0dXJuIGlmIG5vdCBAc3RhdGUgPT0gMQogICAgcmV0dXJuIGlm
IG5vdCBAaXAyLnZhbGlkPwoKICAgIGJlZ2luCiAgICAgICAgdmFsdWUgPSB0
ZXh0LnRvX2wKICAgIHJlc2N1ZQogICAgICAgICMgRXJyb3IgcGFyc2luZyB0
aGUgdGV4dAogICAgICAgIFVJLmJlZXAKICAgICAgICBwdXRzICJDYW5ub3Qg
Y29udmVydCAje3RleHR9IHRvIGEgTGVuZ3RoIgogICAgICAgIHZhbHVlID0g
bmlsCiAgICAgICAgU2tldGNodXA6OnNldF9zdGF0dXNfdGV4dCAiIiwgU0Jf
VkNCX1ZBTFVFCiAgICBlbmQKICAgIHJldHVybiBpZiAhdmFsdWUKCiAgICAj
IENvbXB1dGUgdGhlIGRpcmVjdGlvbiBhbmQgdGhlIHNlY29uZCBwb2ludAog
ICAgcHQxID0gQGlwMS5wb3NpdGlvbgogICAgdmVjID0gQGlwMi5wb3NpdGlv
biAtIHB0MQogICAgaWYoIHZlYy5sZW5ndGggPT0gMC4wICkKICAgICAgICBV
SS5iZWVwCiAgICAgICAgcmV0dXJuCiAgICBlbmQKICAgIHZlYy5sZW5ndGgg
PSB2YWx1ZQogICAgcHQyID0gcHQxICsgdmVjCgogICAgIyBDcmVhdGUgYSBs
aW5lCiAgICBzZWxmLmNyZWF0ZV9nZW9tZXRyeShwdDEsIHB0MiwgdmlldykK
ICAgIHNlbGYucmVzZXQodmlldykKZW5kCgpkZWYgZHJhdyh2aWV3KQogICAg
aWYoIEBpcDEudmFsaWQ/ICkKICAgICAgICBpZiggQGlwMS5kaXNwbGF5PyAp
CiAgICAgICAgICAgIEBpcDEuZHJhdyh2aWV3KQogICAgICAgICAgICBAZHJh
d24gPSB0cnVlCiAgICAgICAgZW5kCiAgICAgICAgCiAgICAgICAgaWYoIEBp
cDIudmFsaWQ/ICkKICAgICAgICAgICAgQGlwMi5kcmF3KHZpZXcpIGlmKCBA
aXAyLmRpc3BsYXk/ICkKICAgICAgICAgICAgdmlldy5zZXRfY29sb3JfZnJv
bV9saW5lKEBpcDEsIEBpcDIpCiAgICAgICAgICAgIHNlbGYuZHJhd19nZW9t
ZXRyeShAaXAxLnBvc2l0aW9uLCBAaXAyLnBvc2l0aW9uLCB2aWV3KQogICAg
ICAgICAgICBAZHJhd24gPSB0cnVlCiAgICAgICAgZW5kCiAgICBlbmQKZW5k
CgpkZWYgb25DYW5jZWwoZmxhZywgdmlldykKICAgIHNlbGYucmVzZXQodmll
dykKICAgIFNrZXRjaHVwLnNlbmRfYWN0aW9uICJzZWxlY3RTZWxlY3Rpb25U
b29sOiIKZW5kCgpkZWYgcmVzZXQodmlldykKICAgIEBzdGF0ZSA9IDAKICAg
IFNrZXRjaHVwOjpzZXRfc3RhdHVzX3RleHQoJGV4U3RyaW5ncy5HZXRTdHJp
bmcoIlNlbGVjdCBmaXJzdCBlbmQiKSwgU0JfUFJPTVBUKQogICAgQGlwMS5j
bGVhcgogICAgQGlwMi5jbGVhcgogICAgCiAgICBpZiggdmlldyApCiAgICAg
ICAgdmlldy50b29sdGlwID0gbmlsCiAgICAgICAgdmlldy5pbnZhbGlkYXRl
IGlmIEBkcmF3bgogICAgZW5kCiAgICAKICAgIEBkcmF3biA9IGZhbHNlCiAg
ICBAZHJhZ2dpbmcgPSBmYWxzZQplbmQKCmRlZiBjcmVhdGVfZ2VvbWV0cnko
cDEsIHAyLCB2aWV3KQogIG1vZGVsID0gU2tldGNodXAuYWN0aXZlX21vZGVs
CiAgbW9kZWwuc3RhcnRfb3BlcmF0aW9uICJDb21wb25lbnQgU3ByYXkgKExp
bmUpIgogICRjYnRfcmFkaXVzID0gcDEuZGlzdGFuY2UgcDIKICBuX2NvbXBz
ID0gY2J0X25fcG9pbnRzKEBzaGFwZSwgQGlwMS5wb3NpdGlvbiwgQGlwMi5w
b3NpdGlvbiwgJGNidF9wcmVzc3VyZSxuaWwpCiAgY2J0X3JhbmRvbV9wb2lu
dHMobl9jb21wcywgQHNoYXBlLCBAaXAxLnBvc2l0aW9uLCBAaXAyLnBvc2l0
aW9uKQogIG1vZGVsLmNvbW1pdF9vcGVyYXRpb24KZW5kCgpkZWYgZHJhd19n
ZW9tZXRyeShwdDEsIHB0MiwgdmlldykKICAgIHZpZXcuZHJhd19saW5lKHB0
MSwgcHQyKQplbmQKCmVuZCAjIGNsYXNzIENvbXBvbmVudExpbmVCcnVzaFRv
b2wKCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKY2xh
c3MgQ29tcG9uZW50U3ByYXlCcnVzaFRvb2wKCmRlZiBpbml0aWFsaXplCiAg
ICBAaXAxID0gbmlsCiAgICBAeGRvd24gPSAwCiAgICBAeWRvd24gPSAwCiAg
ICBAc2hhcGUgPSAiQ2lyY2xlIgplbmQKCmRlZiBhY3RpdmF0ZQogICAgQGlw
MSA9IFNrZXRjaHVwOjpJbnB1dFBvaW50Lm5ldwogICAgQGlwID0gU2tldGNo
dXA6OklucHV0UG9pbnQubmV3CiAgICBAZHJhd24gPSBmYWxzZQogICAgU2tl
dGNodXA6OnNldF9zdGF0dXNfdGV4dCgiU3ByYXkgcmFkaXVzIiwgU0JfVkNC
X0xBQkVMKQogICAgc2VsZi5yZXNldChuaWwpCmVuZAoKZGVmIG9uTW91c2VM
ZWF2ZSh2aWV3KQogIFNrZXRjaHVwLnNlbmRfYWN0aW9uICJzZWxlY3RTZWxl
Y3Rpb25Ub29sOiIKZW5kCgpkZWYgZGVhY3RpdmF0ZSh2aWV3KQogICAgdmll
dy5pbnZhbGlkYXRlIGlmIEBkcmF3bgplbmQKCmRlZiBvbk1vdXNlTW92ZShm
bGFncywgeCwgeSwgdmlldykKICBAaXAucGljayB2aWV3LCB4LCB5CiAgaWYo
IEBpcCAhPSBAaXAxICkKICAgIHZpZXcuaW52YWxpZGF0ZSBpZiggQGlwLmRp
c3BsYXk/IG9yIEBpcDEuZGlzcGxheT8gKQogICAgQGlwMS5jb3B5ISBAaXAK
ICAgIHZpZXcudG9vbHRpcCA9IEBpcDEudG9vbHRpcAogIGVuZAogIAplbmQK
CmRlZiBvbkxCdXR0b25Eb3duKGZsYWdzLCB4LCB5LCB2aWV3KQogICAgICAg
IEBpcDEucGljayB2aWV3LCB4LCB5CiAgICAgICAgaWYoIEBpcDEudmFsaWQ/
ICkKICAgICAgICAgICAgU2tldGNodXA6OnNldF9zdGF0dXNfdGV4dCgiUG9p
bnQiLCBTQl9QUk9NUFQpCiAgICAgICAgICAgIEB4ZG93biA9IHgKICAgICAg
ICAgICAgQHlkb3duID0geQogICAgICAgIGVuZAogICAgIyBDbGVhciBhbnkg
aW5mZXJlbmNlIGxvY2sKICAgIHZpZXcubG9ja19pbmZlcmVuY2UKICAgIHNl
bGYuY3JlYXRlX2dlb21ldHJ5KEBpcDEucG9zaXRpb24sdmlldykKZW5kCgpk
ZWYgb25MQnV0dG9uVXAoZmxhZ3MsIHgsIHksIHZpZXcpCiAgaWYoIEBkcmFn
Z2luZyAmJiBAaXAyLnZhbGlkPyApCiAgICBzZWxmLnJlc2V0KHZpZXcpCiAg
ZW5kCmVuZAoKZGVmIG9uS2V5RG93bihrZXksIHJlcGVhdCwgZmxhZ3MsIHZp
ZXcpCiAgaWYoIGtleSA9PSBDT05TVFJBSU5fTU9ESUZJRVJfS0VZICYmIHJl
cGVhdCA9PSAxICkKICAgIEBzaGlmdF9kb3duX3RpbWUgPSBUaW1lLm5vdwog
ICAgIyBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW5mZXJlbmNlIGxvY2ssIHRo
ZW4gdW5sb2NrIGl0CiAgICBpZiggdmlldy5pbmZlcmVuY2VfbG9ja2VkPyAp
CiAgICAgICMgY2FsbGluZyBsb2NrX2luZmVyZW5jZSB3aXRoIG5vIGFyZ3Vt
ZW50cyBhY3R1YWxseSB1bmxvY2tzCiAgICAgIHZpZXcubG9ja19pbmZlcmVu
Y2UKICAgIGVuZAogIGVuZAplbmQKCmRlZiBvbktleVVwKGtleSwgcmVwZWF0
LCBmbGFncywgdmlldykKICAgIGlmKCBrZXkgPT0gQ09OU1RSQUlOX01PRElG
SUVSX0tFWSAmJgogICAgICAgIHZpZXcuaW5mZXJlbmNlX2xvY2tlZD8gJiYK
ICAgICAgICAoVGltZS5ub3cgLSBAc2hpZnRfZG93bl90aW1lKSA+IDAuNSAp
CiAgICAgICAgdmlldy5sb2NrX2luZmVyZW5jZQogICAgZW5kCmVuZAoKZGVm
IG9uVXNlclRleHQodGV4dCwgdmlldykKICAgIGJlZ2luCiAgICAgICAgdmFs
dWUgPSB0ZXh0LnRvX2wKICAgIHJlc2N1ZQogICAgICAgICMgRXJyb3IgcGFy
c2luZyB0aGUgdGV4dAogICAgICAgIFVJLmJlZXAKICAgICAgICBwdXRzICJD
YW5ub3QgY29udmVydCAje3RleHR9IHRvIGEgcmFkaXVzIgogICAgICAgIHZh
bHVlID0gbmlsCiAgICAgICAgU2tldGNodXA6OnNldF9zdGF0dXNfdGV4dCAi
IiwgU0JfVkNCX1ZBTFVFCiAgICBlbmQKICAgIHJldHVybiBpZiAhdmFsdWUK
ICAgIGlmIHZhbHVlCiAgICAgICRjYnRfc3ByYXlfcmFkaXVzID0gdmFsdWUu
dG9fbAogICAgZW5kICAgIAogICAgc2VsZi5yZXNldCh2aWV3KQplbmQKCmRl
ZiBkcmF3KHZpZXcpCiAgaWYoIEBpcDEudmFsaWQ/ICkKICAgIGlmKCBAaXAx
LmRpc3BsYXk/ICkKICAgICAgQGlwMS5kcmF3KHZpZXcpCiAgICAgIHZfcmFk
ID0gR2VvbTo6VmVjdG9yM2QubmV3KCRjYnRfc3ByYXlfcmFkaXVzLDAsMCkK
ICAgICAgc2VsZi5kcmF3X2dlb21ldHJ5KEBpcDEucG9zaXRpb24sIEBpcDEu
cG9zaXRpb24ub2Zmc2V0KHZfcmFkKSwgJGNidF9zcHJheV9yYWRpdXMsIHZp
ZXcpCiAgICAgIEBkcmF3biA9IHRydWUKICAgIGVuZAogIGVuZAplbmQKCmRl
ZiBvbkNhbmNlbChmbGFnLCB2aWV3KQogICAgc2VsZi5yZXNldCh2aWV3KQog
ICAgU2tldGNodXAuc2VuZF9hY3Rpb24gInNlbGVjdFNlbGVjdGlvblRvb2w6
IgplbmQKCmRlZiByZXNldCh2aWV3KQogIEBzdGF0ZSA9IDAKICBTa2V0Y2h1
cDo6c2V0X3N0YXR1c190ZXh0KCRleFN0cmluZ3MuR2V0U3RyaW5nKCJQb2lu
dCIpLCBTQl9QUk9NUFQpCiAgQGlwMS5jbGVhcgogIGlmKCB2aWV3ICkKICAg
IHZpZXcudG9vbHRpcCA9IG5pbAogICAgdmlldy5pbnZhbGlkYXRlIGlmIEBk
cmF3bgogIGVuZAogIEBkcmF3biA9IGZhbHNlCiAgQGRyYWdnaW5nID0gZmFs
c2UKZW5kCgpkZWYgY3JlYXRlX2dlb21ldHJ5KHAxLCB2aWV3KQogIG1vZGVs
ID0gU2tldGNodXAuYWN0aXZlX21vZGVsCiAgbW9kZWwuc3RhcnRfb3BlcmF0
aW9uICJDb21wb25lbnQgU3ByYXkgKFNwcmF5KSIKICBwMj0gcDEub2Zmc2V0
KEdlb206OlZlY3RvcjNkLm5ldygkY2J0X3NwcmF5X3JhZGl1cywwLDApKQog
ICRjYnRfcmFkaXVzID0gJGNidF9zcHJheV9yYWRpdXMKICBuX2NvbXBzID0g
Y2J0X25fcG9pbnRzKEBzaGFwZSxwMSwgJGNidF9yYWRpdXMsICRjYnRfcHJl
c3N1cmUsIG5pbCkKICBjYnRfcmFuZG9tX3BvaW50cyhuX2NvbXBzLCBAc2hh
cGUsIHAxLCBwMikKICBtb2RlbC5jb21taXRfb3BlcmF0aW9uCmVuZAoKIyBE
cmF3IHRoZSBnZW9tZXRyeQpkZWYgZHJhd19nZW9tZXRyeShwdDEsIHB0Miwg
cmFkaXVzLCB2aWV3KQogIHNpZGVzID0gMTIKICBhbmcgPSBNYXRoOjpQSSoy
L3NpZGVzCiAgcHRzPVtdCiAgdG9wID0gW3B0MS54LHB0MS55LCBwdDEueisk
Y2J0X3NwcmF5X3JhZGl1c10KICAKICAwLnVwdG8oc2lkZXMtMSkgZG8gfGl8
CiAgICBwdHMucHVzaChwdDIudHJhbnNmb3JtKEdlb206OlRyYW5zZm9ybWF0
aW9uLnJvdGF0aW9uKHB0MSxbMCwwLDFdLGkqYW5nKSkpCiAgZW5kCiAgCiAg
MC51cHRvKHNpZGVzLTEpIGRvIHxpfAogICAgcHRzLnB1c2gocHQyLnRyYW5z
Zm9ybShHZW9tOjpUcmFuc2Zvcm1hdGlvbi5yb3RhdGlvbihwdDEsWzAsMCwx
XSxpKmFuZykpKQogICAgdmlldy5kcmF3IEdMX0xJTkVTLCBbdG9wLCBwdDIu
dHJhbnNmb3JtKEdlb206OlRyYW5zZm9ybWF0aW9uLnJvdGF0aW9uKHB0MSxb
MCwwLDFdLGkqYW5nKSldCiAgZW5kCiAgcHRzLnB1c2ggcHRzLmZpcnN0CiAg
dmlldy5kcmF3X3BvbHlsaW5lIHB0cwogIAplbmQKCmVuZCAjIGNsYXNzIENv
bXBvbmVudFNwcmF5QnJ1c2hUb29sCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCgpjbGFzcyBDb21wb25lbnRSZWN0QnJ1c2hUb29sCgpk
ZWYgaW5pdGlhbGl6ZQogICAgQGlwID0gU2tldGNodXA6OklucHV0UG9pbnQu
bmV3CiAgICBAaXAxID0gU2tldGNodXA6OklucHV0UG9pbnQubmV3CiAgICBA
c2hhcGUgPSAkY2J0X3NoYXBlCiAgICByZXNldAplbmQKCmRlZiByZXNldAog
ICAgQHB0cyA9IFtdCiAgICBAc3RhdGUgPSAwCiAgICBAaXAxLmNsZWFyCiAg
ICBAZHJhd24gPSBmYWxzZQogICAgU2tldGNodXA6OnNldF9zdGF0dXNfdGV4
dCAiIiwgU0JfVkNCX0xBQkVMCiAgICBTa2V0Y2h1cDo6c2V0X3N0YXR1c190
ZXh0ICIiLCBTQl9WQ0JfVkFMVUUKICAgIFNrZXRjaHVwOjpzZXRfc3RhdHVz
X3RleHQgIlN0YXJ0IHBvaW50IgogICAgQHNoaWZ0X2Rvd25fdGltZSA9IFRp
bWUubm93CmVuZAoKZGVmIGFjdGl2YXRlCiAgICBzZWxmLnJlc2V0CmVuZAoK
ZGVmIGRlYWN0aXZhdGUodmlldykKICAgIHZpZXcuaW52YWxpZGF0ZSBpZiBA
ZHJhd24KZW5kCgpkZWYgb25Nb3VzZUxlYXZlKHZpZXcpCiAgU2tldGNodXAu
c2VuZF9hY3Rpb24gInNlbGVjdFNlbGVjdGlvblRvb2w6IgplbmQKCmRlZiBz
ZXRfY3VycmVudF9wb2ludCh4LCB5LCB2aWV3KQogICAgaWYoICFAaXAucGlj
ayh2aWV3LCB4LCB5LCBAaXAxKSApCiAgICAgICAgcmV0dXJuIGZhbHNlCiAg
ICBlbmQKICAgIG5lZWRfZHJhdyA9IHRydWUKICAgIAogICAgIyBTZXQgdGhl
IHRvb2x0aXAgdGhhdCB3aWxsIGJlIGRpc3BsYXllZAogICAgdmlldy50b29s
dGlwID0gQGlwLnRvb2x0aXAKICAgICAgICAKICAgICMgQ29tcHV0ZSBwb2lu
dHMKICAgIGNhc2UgQHN0YXRlCiAgICB3aGVuIDAKICAgICAgICBAcHRzWzBd
ID0gQGlwLnBvc2l0aW9uCiAgICAgICAgQHB0c1s0XSA9IEBwdHNbMF0KICAg
ICAgICBuZWVkX2RyYXcgPSBAaXAuZGlzcGxheT8gfHwgQGRyYXduCiAgICB3
aGVuIDEKICAgICAgICBAcHRzWzFdID0gQGlwLnBvc2l0aW9uCiAgICAgICAg
QHdpZHRoID0gQHB0c1swXS5kaXN0YW5jZSBAcHRzWzFdCiAgICAgICAgU2tl
dGNodXA6OnNldF9zdGF0dXNfdGV4dCBAd2lkdGgudG9fcywgU0JfVkNCX1ZB
TFVFCiAgICB3aGVuIDIKICAgICAgICBwdDEgPSBAaXAucG9zaXRpb24KICAg
ICAgICBwdDIgPSBwdDEucHJvamVjdF90b19saW5lIEBwdHMKICAgICAgICB2
ZWMgPSBwdDEgLSBwdDIKICAgICAgICBAaGVpZ2h0ID0gdmVjLmxlbmd0aAog
ICAgICAgIGlmKCBAaGVpZ2h0ID4gMCApCiAgICAgICAgICAgICMgdGVzdCBm
b3IgYSBzcXVhcmUKICAgICAgICAgICAgc3F1YXJlX3BvaW50ID0gcHQyLm9m
ZnNldCh2ZWMsIEB3aWR0aCkKICAgICAgICAgICAgaWYoIHZpZXcucGlja19o
ZWxwZXIudGVzdF9wb2ludChzcXVhcmVfcG9pbnQsIHgsIHkpICkKICAgICAg
ICAgICAgICAgIEBoZWlnaHQgPSBAd2lkdGgKICAgICAgICAgICAgICAgIEBw
dHNbMl0gPSBAcHRzWzFdLm9mZnNldCh2ZWMsIEBoZWlnaHQpCiAgICAgICAg
ICAgICAgICBAcHRzWzNdID0gQHB0c1swXS5vZmZzZXQodmVjLCBAaGVpZ2h0
KQogICAgICAgICAgICAgICAgdmlldy50b29sdGlwID0gIlNxdWFyZSIKICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgQHB0c1syXSA9IEBwdHNb
MV0ub2Zmc2V0KHZlYykKICAgICAgICAgICAgICAgIEBwdHNbM10gPSBAcHRz
WzBdLm9mZnNldCh2ZWMpCiAgICAgICAgICAgIGVuZAogICAgICAgIGVsc2UK
ICAgICAgICAgICAgQHB0c1syXSA9IEBwdHNbMV0KICAgICAgICAgICAgQHB0
c1szXSA9IEBwdHNbMF0KICAgICAgICBlbmQKICAgICAgICBTa2V0Y2h1cDo6
c2V0X3N0YXR1c190ZXh0IEBoZWlnaHQudG9fcywgU0JfVkNCX1ZBTFVFCiAg
ICBlbmQKCiAgICB2aWV3LmludmFsaWRhdGUgaWYgbmVlZF9kcmF3CmVuZAoK
ZGVmIG9uTW91c2VNb3ZlKGZsYWdzLCB4LCB5LCB2aWV3KQogICAgc2VsZi5z
ZXRfY3VycmVudF9wb2ludCh4LCB5LCB2aWV3KQplbmQKCmRlZiBjcmVhdGVf
Z2VvbWV0cnkKICBtb2RlbCA9IFNrZXRjaHVwLmFjdGl2ZV9tb2RlbAogIG1v
ZGVsLnN0YXJ0X29wZXJhdGlvbiAiQ29tcG9uZW50IFNwcmF5IChSZWN0YW5n
bGUpIgogIAogICRjYnRfcmFkaXVzID0gKEBwdHNbMF0uZGlzdGFuY2UgQHB0
c1syXSkgLyAyLjAKICBuX2NvbXBzID0gY2J0X25fcG9pbnRzKEBzaGFwZSwg
QHB0c1swXSwgQHB0c1syXSwgJGNidF9wcmVzc3VyZSwgQHB0cykKICBkaWFn
ID0gQHB0c1swXS52ZWN0b3JfdG8gQHB0c1syXQogIGRpYWcubGVuZ3RoID0g
KEBwdHNbMF0uZGlzdGFuY2UgQHB0c1syXSkvMi4wCiAgcmVjdF9jZW50ZXIg
PSBAcHRzWzBdLm9mZnNldChkaWFnKQogIEBwdHMucG9wCiAgY2J0X3JhbmRv
bV9wb2ludHMobl9jb21wcywgQHNoYXBlLCByZWN0X2NlbnRlciwgQHB0cykK
CiAgbW9kZWwuY29tbWl0X29wZXJhdGlvbgogIHNlbGYucmVzZXQKZW5kCgpk
ZWYgaW5jcmVtZW50X3N0YXRlCiAgICBAc3RhdGUgKz0gMQogICAgY2FzZSBA
c3RhdGUKICAgIHdoZW4gMQogICAgICAgIEBpcDEuY29weSEgQGlwCiAgICAg
ICAgU2tldGNodXA6OnNldF9zdGF0dXNfdGV4dCAiU2Vjb25kIHBvaW50Igog
ICAgICAgIFNrZXRjaHVwOjpzZXRfc3RhdHVzX3RleHQgIkxlbmd0aCIsIFNC
X1ZDQl9MQUJFTAogICAgICAgIFNrZXRjaHVwOjpzZXRfc3RhdHVzX3RleHQg
IiIsIFNCX1ZDQl9WQUxVRQogICAgd2hlbiAyCiAgICAgICAgQGlwMS5jbGVh
cgogICAgICAgIFNrZXRjaHVwOjpzZXRfc3RhdHVzX3RleHQgIlRoaXJkIHBv
aW50IgogICAgICAgIFNrZXRjaHVwOjpzZXRfc3RhdHVzX3RleHQgIldpZHRo
IiwgU0JfVkNCX0xBQkVMCiAgICAgICAgU2tldGNodXA6OnNldF9zdGF0dXNf
dGV4dCAiIiwgU0JfVkNCX1ZBTFVFCiAgICB3aGVuIDMKICAgICAgICBzZWxm
LmNyZWF0ZV9nZW9tZXRyeQogICAgZW5kCmVuZAoKZGVmIG9uTEJ1dHRvbkRv
d24oZmxhZ3MsIHgsIHksIHZpZXcpCiAgICBzZWxmLnNldF9jdXJyZW50X3Bv
aW50KHgsIHksIHZpZXcpCiAgICBzZWxmLmluY3JlbWVudF9zdGF0ZQogICAg
dmlldy5sb2NrX2luZmVyZW5jZQplbmQKCmRlZiBvbkNhbmNlbChmbGFnLCB2
aWV3KQogICAgdmlldy5pbnZhbGlkYXRlIGlmIEBkcmF3bgogICAgc2VsZi5y
ZXNldAplbmQKCiMgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciB0eXBl
cyBhIHZhbHVlIGludG8gdGhlIFZDQgpkZWYgb25Vc2VyVGV4dCh0ZXh0LCB2
aWV3KQogICAgYmVnaW4KICAgICAgICB2YWx1ZSA9IHRleHQudG9fbAogICAg
cmVzY3VlCiAgICAgICAgIyBFcnJvciBwYXJzaW5nIHRoZSB0ZXh0CiAgICAg
ICAgVUkuYmVlcAogICAgICAgIHZhbHVlID0gbmlsCiAgICAgICAgU2tldGNo
dXA6OnNldF9zdGF0dXNfdGV4dCAiIiwgU0JfVkNCX1ZBTFVFCiAgICBlbmQK
ICAgIHJldHVybiBpZiAhdmFsdWUKICAgIAogICAgY2FzZSBAc3RhdGUKICAg
IHdoZW4gMQogICAgICAgICMgdXBkYXRlIHRoZSB3aWR0aAogICAgICAgIHZl
YyA9IEBwdHNbMV0gLSBAcHRzWzBdCiAgICAgICAgaWYoIHZlYy5sZW5ndGgg
PiAwLjAgKQogICAgICAgICAgICB2ZWMubGVuZ3RoID0gdmFsdWUKICAgICAg
ICAgICAgQHB0c1sxXSA9IEBwdHNbMF0ub2Zmc2V0KHZlYykKICAgICAgICAg
ICAgdmlldy5pbnZhbGlkYXRlCiAgICAgICAgICAgIHNlbGYuaW5jcmVtZW50
X3N0YXRlCiAgICAgICAgZW5kCiAgICB3aGVuIDIKICAgICAgICAjIHVwZGF0
ZSB0aGUgaGVpZ2h0CiAgICAgICAgdmVjID0gQHB0c1szXSAtIEBwdHNbMF0K
ICAgICAgICBpZiggdmVjLmxlbmd0aCA+IDAuMCApCiAgICAgICAgICAgIHZl
Yy5sZW5ndGggPSB2YWx1ZQogICAgICAgICAgICBAcHRzWzJdID0gQHB0c1sx
XS5vZmZzZXQodmVjKQogICAgICAgICAgICBAcHRzWzNdID0gQHB0c1swXS5v
ZmZzZXQodmVjKQogICAgICAgICAgICBzZWxmLmluY3JlbWVudF9zdGF0ZQog
ICAgICAgIGVuZAogICAgZW5kCmVuZAoKZGVmIGdldEV4dGVudHMKICAgIGJi
ID0gR2VvbTo6Qm91bmRpbmdCb3gubmV3CiAgICBjYXNlIEBzdGF0ZQogICAg
d2hlbiAwCiAgICAgICAgIyBXZSBhcmUgZ2V0dGluZyB0aGUgZmlyc3QgcG9p
bnQKICAgICAgICBpZiggQGlwLnZhbGlkPyAmJiBAaXAuZGlzcGxheT8gKQog
ICAgICAgICAgICBiYi5hZGQgQGlwLnBvc2l0aW9uCiAgICAgICAgZW5kCiAg
ICB3aGVuIDEKICAgICAgICBiYi5hZGQgQHB0c1swXQogICAgICAgIGJiLmFk
ZCBAcHRzWzFdCiAgICB3aGVuIDIKICAgICAgICBiYi5hZGQgQHB0cwogICAg
ZW5kCiAgICBiYgplbmQKCmRlZiBkcmF3KHZpZXcpCiAgICBAZHJhd24gPSBm
YWxzZQogICAgCiAgICAjIFNob3cgdGhlIGN1cnJlbnQgaW5wdXQgcG9pbnQK
ICAgIGlmKCBAaXAudmFsaWQ/ICYmIEBpcC5kaXNwbGF5PyApCiAgICAgICAg
QGlwLmRyYXcodmlldykKICAgICAgICBAZHJhd24gPSB0cnVlCiAgICBlbmQK
CiAgICAjIHNob3cgdGhlIHJlY3RhbmdsZQogICAgaWYoIEBzdGF0ZSA9PSAx
ICkKICAgICAgICAjIGp1c3QgZHJhdyBhIGxpbmUgZnJvbSB0aGUgc3RhcnQg
dG8gdGhlIGVuZCBwb2ludAogICAgICAgIHZpZXcuc2V0X2NvbG9yX2Zyb21f
bGluZShAaXAxLCBAaXApCiAgICAgICAgaW5mZXJlbmNlX2xvY2tlZCA9IHZp
ZXcuaW5mZXJlbmNlX2xvY2tlZD8KICAgICAgICB2aWV3LmxpbmVfd2lkdGgg
PSAzIGlmIGluZmVyZW5jZV9sb2NrZWQKICAgICAgICB2aWV3LmRyYXcoR0xf
TElORV9TVFJJUCwgQHB0c1swXSwgQHB0c1sxXSkKICAgICAgICB2aWV3Lmxp
bmVfd2lkdGggPSAxIGlmIGluZmVyZW5jZV9sb2NrZWQKICAgICAgICBAZHJh
d24gPSB0cnVlCiAgICBlbHNpZiggQHN0YXRlID4gMSApCiAgICAgICAgIyBk
cmF3IHRoZSBjdXJ2ZQogICAgICAgIHZpZXcuZHJhd2luZ19jb2xvciA9ICJy
ZWQiCiAgICAgICAgdmlldy5kcmF3KEdMX0xJTkVfU1RSSVAsIEBwdHMpCiAg
ICAgICAgQGRyYXduID0gdHJ1ZQogICAgZW5kCmVuZAoKZGVmIG9uS2V5RG93
bihrZXksIHJwdCwgZmxhZ3MsIHZpZXcpCiAgICBpZigga2V5ID09IENPTlNU
UkFJTl9NT0RJRklFUl9LRVkgJiYgcnB0ID09IDEgKQogICAgICAgIEBzaGlm
dF9kb3duX3RpbWUgPSBUaW1lLm5vdwogICAgICAgIAogICAgICAgICMgaWYg
d2UgYWxyZWFkeSBoYXZlIGFuIGluZmVyZW5jZSBsb2NrLCB0aGVuIHVubG9j
ayBpdAogICAgICAgIGlmKCB2aWV3LmluZmVyZW5jZV9sb2NrZWQ/ICkKICAg
ICAgICAgICAgdmlldy5sb2NrX2luZmVyZW5jZQogICAgICAgIGVsc2lmKCBA
c3RhdGUgPT0gMCApCiAgICAgICAgICAgIHZpZXcubG9ja19pbmZlcmVuY2Ug
QGlwCiAgICAgICAgZWxzaWYoIEBzdGF0ZSA9PSAxICkKICAgICAgICAgICAg
dmlldy5sb2NrX2luZmVyZW5jZSBAaXAsIEBpcDEKICAgICAgICBlbmQKICAg
IGVuZAplbmQKCmRlZiBvbktleVVwKGtleSwgcnB0LCBmbGFncywgdmlldykK
ICAgIGlmKCBrZXkgPT0gQ09OU1RSQUlOX01PRElGSUVSX0tFWSAmJgogICAg
ICAgIHZpZXcuaW5mZXJlbmNlX2xvY2tlZD8gJiYKICAgICAgICAoVGltZS5u
b3cgLSBAc2hpZnRfZG93bl90aW1lKSA+IDAuNSApCiAgICAgICAgdmlldy5s
b2NrX2luZmVyZW5jZQogICAgZW5kCmVuZAoKZW5kICMgb2YgY2xhc3MgUmVj
dGFuZ2xlVG9vbAoKCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQoKZGVmIGZhY2VzYnJ1c2h0b29sKHNoYXBlKQptb2RlbCA9IFNrZXRj
aHVwLmFjdGl2ZV9tb2RlbApzZWwgPSBtb2RlbC5zZWxlY3Rpb24KaWYgbm90
IHNlbC5lbXB0eT8KICBjbGVhbl9zZWwKICBlbHNlCiAgVUkubWVzc2FnZWJv
eCgiTm8gc2VsZWN0aW9uLiIpCiAgcmV0dXJuIG5pbAplbmQKbW9kZWwuc3Rh
cnRfb3BlcmF0aW9uICJDb21wb25lbnQgU3ByYXkgKEZhY2VzIHNldCkiCmJi
ID0gY2J0X2ZhY2VzX2JvdW5kcyhjYnRfc29ydF9mYWNlcyhtb2RlbC5zZWxl
Y3Rpb24pKQpjb3JuZXJzID0gWyhiYi5jb3JuZXIgMCksKGJiLmNvcm5lciAx
KSwoYmIuY29ybmVyIDMpLChiYi5jb3JuZXIgMildCiMgVmlydHVhbCBwb2x5
Z29uIG9mIEJCIGZyb20gd2hpY2ggdG8gY2FzdCByYXlzCnB0cyA9IG1hcF96
KGNvcm5lcnMsIGNidF9tb2RlbF90b3ArMTAwMDAwKQokY2J0X3JhZGl1cyA9
IChwdHNbMF0uZGlzdGFuY2UgcHRzWzJdKSAvIDIuMApuX2NvbXBzID0gY2J0
X25fcG9pbnRzKHNoYXBlLCBwdHNbMF0sIHB0c1syXSwgJGNidF9wcmVzc3Vy
ZSwgcHRzKQpkaWFnID0gcHRzWzBdLnZlY3Rvcl90byBwdHNbMl0KZGlhZy5s
ZW5ndGggPSAocHRzWzBdLmRpc3RhbmNlIHB0c1syXSkvMi4wCmNlbnRlciA9
IHB0c1swXS5vZmZzZXQoZGlhZykKY2J0X3JhbmRvbV9wb2ludHMobl9jb21w
cywgc2hhcGUsIGNlbnRlciwgcHRzKQoKbW9kZWwuY29tbWl0X29wZXJhdGlv
bgplbmQKCmRlZiB2ZXJ0aWNlc2JydXNodG9vbChzaGFwZSkKbW9kZWwgPSBT
a2V0Y2h1cC5hY3RpdmVfbW9kZWwKc2VsID0gbW9kZWwuc2VsZWN0aW9uCmlm
IG5vdCBzZWwuZW1wdHk/CiAgY2xlYW5fc2VsCiAgZWxzZQogIFVJLm1lc3Nh
Z2Vib3goIk5vIHNlbGVjdGlvbi4iKQogIHJldHVybiBuaWwKZW5kCm1vZGVs
LnN0YXJ0X29wZXJhdGlvbiAiQ29tcG9zYW50IFNwcmF5IChGYWNlcyB2ZXJ0
aWNlcykiCiMgR2V0IHVuaXF1ZSBhcnJheSBvZiB2ZXJ0aWNlcwp2ZXJ0aWNl
c19hcnJheT1bXQpzZWwuZWFjaCBkbyB8ZnwKICBmLmxvb3BzLmVhY2ggZG8g
fGxvb3B8CiAgICBsb29wLnZlcnRpY2VzLmVhY2ggZG8gfHZ8CiAgICAgIHZl
cnRpY2VzX2FycmF5LnB1c2godikgaWYgbm90IHZlcnRpY2VzX2FycmF5Lmlu
Y2x1ZGU/KHYpIAogICAgZW5kCiAgZW5kCmVuZAojIFJhbmRvbWx5IGRyb3Ag
Y29tcG9uZW50cyBhdCB2ZXJ0aWNlcwp2ZXJ0aWNlc19hcnJheS5lYWNoIGRv
IHxwfAogIGNvbXAgPSBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwuYWN0aXZlX2Vu
dGl0aWVzLmFkZF9pbnN0YW5jZSAkY2J0X2NvbXBzW3JhbmQoJGNidF9jb21w
cy5sZW5ndGgpXSwgcC5wb3NpdGlvbgogIGNidF9yb3RhdGVfc2NhbGUocCxj
b21wKQplbmQKbW9kZWwuY29tbWl0X29wZXJhdGlvbgplbmQKCmRlZiBjb21w
b25lbnRicnVzaHRvb2wKICAjIEV4aXQgY3VycmVudCBjb21tYW5kLCBpZiBh
bnkKICBTa2V0Y2h1cC5zZW5kX2FjdGlvbiAic2VsZWN0U2VsZWN0aW9uVG9v
bDoiCiAgIyBEaWFsb2cgYm94IGJydXNoIHN0eWxlCiAgY2J0X2RpYWxvZ19t
YWluCiAgIyBTd2l0Y2gKICBjYXNlICRjYnRfc2hhcGUKICAgIHdoZW4gIlBv
aW50IgogICAgICBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwuc2VsZWN0X3Rvb2wg
Q29tcG9uZW50UG9pbnRCcnVzaFRvb2wubmV3CiAgICB3aGVuICJMaW5lIgog
ICAgICBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwuc2VsZWN0X3Rvb2wgQ29tcG9u
ZW50TGluZUJydXNoVG9vbC5uZXcKICAgIHdoZW4gIlZlcnRpY2VzIG9mIGZh
Y2VzIgogICAgICB2ZXJ0aWNlc2JydXNodG9vbCgiU2VsZWN0aW9uIikKICAg
IHdoZW4gIlJlY3RhbmdsZSIKICAgICAgU2tldGNodXAuYWN0aXZlX21vZGVs
LnNlbGVjdF90b29sIENvbXBvbmVudFJlY3RCcnVzaFRvb2wubmV3CiAgICB3
aGVuICJTZWxlY3Rpb24iCiAgICAgIGZhY2VzYnJ1c2h0b29sKCJTZWxlY3Rp
b24iKQogICAgd2hlbiAiU3ByYXkiCiAgICAgIFNrZXRjaHVwLmFjdGl2ZV9t
b2RlbC5zZWxlY3RfdG9vbCBDb21wb25lbnRTcHJheUJydXNoVG9vbC5uZXcK
ICAgIGVsc2UKICAgICAgU2tldGNodXAuYWN0aXZlX21vZGVsLnNlbGVjdF90
b29sIENvbXBvbmVudE5nb25CcnVzaFRvb2wubmV3CiAgICBlbmQKCiAgIyBS
ZXN0b3JlIGRpYWxvZyBzZXRpbmdzCiAgY2J0X3Jlc3RvcmVfZGlhbG9nX3Nl
dHRpbmdzICAKZW5kCgoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KCiMgaW5pdGlhbGl6ZSBiYXNpYyBzZXR0aW5ncwptb2RlbCA9IFNr
ZXRjaHVwLmFjdGl2ZV9tb2RlbAppZiBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwu
cGF0aC5sZW5ndGghPTAKICBjYnRfc2V0X2Jhc2ljCmVuZAoKaWYgKG5vdCBm
aWxlX2xvYWRlZD8oImNvbXBvX3NwcmF5LnJiIikpCiAgY29tcG9uZW50X3Bh
aW50YnJ1c2hfbWVudSA9IFVJLm1lbnUoIkRyYXciKS5hZGRfc3VibWVudSgi
Q29tcG9uZW50IFNwcmF5IikKICBjb21wb25lbnRfcGFpbnRicnVzaF9tZW51
LmFkZF9pdGVtKCJDb21wb25lbnQgU3ByYXkgVG9vbCIpIHsgY29tcG9uZW50
YnJ1c2h0b29sIH0KICBjb21wb25lbnRfcGFpbnRicnVzaF9tZW51LmFkZF9p
dGVtKCJTZXQgZGVmYXVsdCBzZXR0aW5ncyIpIHsgY2J0X2RpYWxvZ19zZXRf
ZGVmYXVsdHMgfQplbmQKZmlsZV9sb2FkZWQoImNvbXBvX3NwcmF5LnJiIikK}.unpack("m").to_s