GenericDashboardStats
5.0.2
5.0.x
Perl-Services.de
http://www.perl-services.de
Ein generisches Statistik Modul für die Übersicht.
A more generic Dashboard stats widget.
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8K
IyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBG
b3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBp
bmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNl
ZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2Vy
bmVsOjpPdXRwdXQ6OkhUTUw6OkRhc2hib2FyZDo6VGlja2V0U3RhdHNHZW5lcmljOwoKdXNlIHN0
cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3Vi
IG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3
IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2Vs
ZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgcGFyYW1ldGVycwogICAgZm9yIG15ICROZWVk
ZWQgKHF3KENvbmZpZyBOYW1lIFVzZXJJRCkpIHsKICAgICAgICBkaWUgIkdvdCBubyAkTmVlZGVk
ISIgaWYgISRTZWxmLT57JE5lZWRlZH07CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIg
UHJlZmVyZW5jZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm47
Cn0KCnN1YiBDb25maWcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1
cm4gKAogICAgICAgICV7ICRTZWxmLT57Q29uZmlnfSB9LAoKICAgICAgICAjIERvbid0IGNhY2hl
IHRoaXMgZ2xvYmFsbHkgYXMgaXQgY29udGFpbnMgSlMgdGhhdCBpcyBub3QgaW5zaWRlIG9mIHRo
ZSBIVE1MLgogICAgICAgIENhY2hlVFRMID0+IHVuZGVmLAogICAgICAgIENhY2hlS2V5ID0+IHVu
ZGVmLAogICAgKTsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoK
IyAtLS0KIyBQUwojIC0tLQogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQo
J0tlcm5lbDo6Q29uZmlnJyk7CiMgLS0tCgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkg
JExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpM
YXlvdXQnKTsKCiAgICBteSAkS2V5ICAgICAgPSAkTGF5b3V0T2JqZWN0LT57VXNlckxhbmd1YWdl
fSAuICctJyAuICRTZWxmLT57TmFtZX07CiAgICBteSAkQ2FjaGVLZXkgPSAnVGlja2V0U3RhdHMn
IC4gJy0nIC4gJFNlbGYtPntVc2VySUR9IC4gJy0nIC4gJEtleTsKCiAgICBteSAkQ2FjaGUgPSAk
S2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5
cGUgPT4gJ0Rhc2hib2FyZCcsCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAg
IGlmICggcmVmICRDYWNoZSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+T3V0cHV0
KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgICA9PiAnQWdlbnREYXNoYm9hcmRUaWNrZXRTdGF0
cycsCiAgICAgICAgICAgIERhdGEgICAgICAgICAgID0+ICRDYWNoZSwKICAgICAgICAgICAgS2Vl
cFNjcmlwdFRhZ3MgPT4gJFBhcmFte0FKQVh9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJUF4
aXMgPSAoCiAgICAgICAgJzdEYXknID0+IHsKICAgICAgICAgICAgMCA9PiAnU3VuJywKICAgICAg
ICAgICAgMSA9PiAnTW9uJywKICAgICAgICAgICAgMiA9PiAnVHVlJywKICAgICAgICAgICAgMyA9
PiAnV2VkJywKICAgICAgICAgICAgNCA9PiAnVGh1JywKICAgICAgICAgICAgNSA9PiAnRnJpJywK
ICAgICAgICAgICAgNiA9PiAnU2F0JywKICAgICAgICB9LAogICAgKTsKCiAgICBteSAkQ2xvc2Vk
VGV4dCAgICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdD
bG9zZWQnKTsKICAgIG15ICRDcmVhdGVkVGV4dCAgICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3Vh
Z2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NyZWF0ZWQnKTsKICAgIG15ICRTdGF0ZVRleHQgICAgICAg
PSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1N0YXRlJyk7CiAg
ICBteSBAVGlja2V0c0NyZWF0ZWQgID0gKCk7CiAgICBteSBAVGlja2V0c0Nsb3NlZCAgID0gKCk7
CiAgICBteSBAVGlja2V0V2Vla2RheXMgID0gKCk7CiAgICBteSAkTWF4ICAgICAgICAgICAgID0g
MDsKICAgIG15ICRVc2VVc2VyVGltZVpvbmUgPSAwOwoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QK
ICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6
VGlja2V0Jyk7CgogICAgIyBnZXQgdGhlIHRpbWUgb2JqZWN0CiAgICBteSAkVGltZU9iamVjdCA9
ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7CgogICAgIyB1c2UgdGhl
IFVzZXJUaW1lT2JqZWN0LCBpZiB0aGUgc3lzdGVtIHVzZSBVVEMgYXMgc3lzdGVtIHRpbWUgYW5k
IHRoZSBUaW1lWm9uZVVzZXIgZmVhdHVyZSBpcyBhY3RpdmUKICAgIGlmICgKICAgICAgICAhJEtl
cm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKS0+U2VydmVyTG9jYWxUaW1lT2Zm
c2V0U2Vjb25kcygpCiAgICAgICAgJiYgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcn
KS0+R2V0KCdUaW1lWm9uZVVzZXInKQogICAgICAgICYmICRTZWxmLT57VXNlclRpbWVab25lfQog
ICAgICAgICkKICAgIHsKICAgICAgICAkVXNlVXNlclRpbWVab25lID0gMTsKICAgICAgICAkVGlt
ZU9iamVjdCAgICAgID0gJExheW91dE9iamVjdC0+e1VzZXJUaW1lT2JqZWN0fTsKICAgIH0KCiMg
LS0tCiMgUFMKIyAtLS0KICAgIG15IEBTaG93blN0YXRzOwogICAgbXkgJVN0YXRJbmRleGVzOwoK
ICAgIG15ICVTdGF0cyA9ICV7ICRDb25maWdPYmplY3QtPkdldCggJ0dlbmVyaWNEYXNoYm9hcmRT
dGF0czo6U3RhdHMnICkgfHwge30gfTsKCiAgICBmb3IgbXkgJFN0YXQgKCBzb3J0IGtleXMgJVN0
YXRzICkgewogICAgICAgIG15ICRLZXkgICAgICAgICA9ICRTdGF0c3skU3RhdH0tPntPcHRpb25L
ZXl9OwogICAgICAgIG15ICRTdGF0c0NvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCggJEtleSAp
IHx8IHt9OwoKICAgICAgICAkU3RhdHN7JFN0YXR9LT57U2VhcmNoT3B0aW9uc30gPSAkU3RhdHND
b25maWc7CgogICAgICAgIG15ICRMYWJlbCA9ICRTdGF0c3skU3RhdH0tPntsYWJlbH0gfHwgJFN0
YXQ7CiAgICAgICAgJFN0YXRzeyRTdGF0fS0+e2xhYmVsfSA9ICRMYXlvdXRPYmplY3QtPntMYW5n
dWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJExhYmVsICk7CgogICAgICAgIHB1c2ggQFNob3duU3Rh
dHMsIFsgJFN0YXRzeyRTdGF0fS0+e2xhYmVsfSBdOwogICAgICAgICRTdGF0SW5kZXhlc3skU3Rh
dH0gPSAkI1Nob3duU3RhdHM7CiAgICB9CgogICAgbXkgJERheXMgPSAkQ29uZmlnT2JqZWN0LT5H
ZXQoJ0dlbmVyaWNEYXNoYm9hcmRTdGF0czo6RGF5cycpIHx8IDE0OwoKIyAgICBmb3IgbXkgJEtl
eSAoIDAgLi4gNiApIHsKICAgIGZvciBteSAkS2V5ICggMCAuLiAkRGF5cy0xICkgewojIC0tLQoK
ICAgICAgICAjIGdldCB0aGUgc3lzdGVtIHRpbWUKICAgICAgICBteSAkVGltZU5vdyA9ICRUaW1l
T2JqZWN0LT5TeXN0ZW1UaW1lKCk7CgogICAgICAgICMgY2FjaGUgcmVzdWx0cyBmb3IgMzAgbWlu
LiBmb3IgdG9kYXlzIHN0YXRzCiAgICAgICAgbXkgJENhY2hlVFRMID0gNjAgKiAzMDsKCiAgICAg
ICAgaWYgKCRLZXkpIHsKICAgICAgICAgICAgJFRpbWVOb3cgPSAkVGltZU5vdyAtICggNjAgKiA2
MCAqIDI0ICogJEtleSApOwoKICAgICAgICAgICAgIyBmb3IgcGFzdCA2IGRheXMgY2FjaGUgcmVz
dWx0cyBmb3IgOCBkYXlzIChzaG91bGQgbm90IGNoYW5nZSkKICAgICAgICAgICAgJENhY2hlVFRM
ID0gNjAgKiA2MCAqIDI0ICogODsKICAgICAgICB9CiAgICAgICAgbXkgKCAkU2VjLCAkTWluLCAk
SG91ciwgJERheSwgJE1vbnRoLCAkWWVhciwgJFdlZWtEYXkgKSA9ICRUaW1lT2JqZWN0LT5TeXN0
ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFRpbWVOb3csCiAgICAgICAg
KTsKCiAgICAgICAgdW5zaGlmdCgKICAgICAgICAgICAgQFRpY2tldFdlZWtkYXlzLAogICAgICAg
ICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRBeGlzeyc3
RGF5J30tPnskV2Vla0RheX0gKQogICAgICAgICk7CgogICAgICAgIG15ICRUaW1lU3RhcnQgPSAi
JFllYXItJE1vbnRoLSREYXkgMDA6MDA6MDAiOwogICAgICAgIG15ICRUaW1lU3RvcCAgPSAiJFll
YXItJE1vbnRoLSREYXkgMjM6NTk6NTkiOwoKICAgICAgICBpZiAoJFVzZVVzZXJUaW1lWm9uZSkg
ewoKICAgICAgICAgICAgbXkgJFN5c3RlbVRpbWVTdGFydCA9ICRUaW1lT2JqZWN0LT5UaW1lU3Rh
bXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkVGltZVN0YXJ0LAogICAg
ICAgICAgICApOwogICAgICAgICAgICBteSAkU3lzdGVtVGltZVN0b3AgPSAkVGltZU9iamVjdC0+
VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFRpbWVTdG9w
LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFN5c3RlbVRpbWVTdGFydCA9ICRTeXN0ZW1U
aW1lU3RhcnQgLSAoICRTZWxmLT57VXNlclRpbWVab25lfSAqIDM2MDAgKTsKICAgICAgICAgICAg
JFN5c3RlbVRpbWVTdG9wICA9ICRTeXN0ZW1UaW1lU3RvcCAtICAoICRTZWxmLT57VXNlclRpbWVa
b25lfSAqIDM2MDAgKTsKCiAgICAgICAgICAgICRUaW1lU3RhcnQgPSAkVGltZU9iamVjdC0+U3lz
dGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTeXN0ZW1U
aW1lU3RhcnQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRUaW1lU3RvcCA9ICRUaW1lT2Jq
ZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4g
JFN5c3RlbVRpbWVTdG9wLAogICAgICAgICAgICApOwogICAgICAgIH0KIyAtLS0KIyBQUwojIC0t
LQoKICAgICAgICBmb3IgbXkgJFN0YXQgKCBzb3J0IGtleXMgJVN0YXRzICkgewogICAgICAgICAg
ICBteSAlT3B0aW9ucyA9ICgKICAgICAgICAgICAgICAgICRTdGF0c3skU3RhdH0tPnt0eXBlfSAu
ICdUaW1lTmV3ZXJEYXRlJyA9PiAkVGltZVN0YXJ0LAogICAgICAgICAgICAgICAgJFN0YXRzeyRT
dGF0fS0+e3R5cGV9IC4gJ1RpbWVPbGRlckRhdGUnID0+ICRUaW1lU3RvcCwKICAgICAgICAgICAg
ICAgICV7ICRTdGF0c3skU3RhdH0tPntTZWFyY2hPcHRpb25zfSB9LAogICAgICAgICAgICApOwoK
ICAgICAgICAgICAgbXkgJENvdW50ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAg
ICAgICAgICAgICAgJU9wdGlvbnMsCgogICAgICAgICAgICAgICAgIyBjYWNoZSBzZWFyY2ggcmVz
dWx0IDMwIG1pbgogICAgICAgICAgICAgICAgQ2FjaGVUVEwgPT4gNjAgKiAzMCwKCiAgICAgICAg
ICAgICAgICBDdXN0b21lcklEID0+ICRQYXJhbXtEYXRhfS0+e1VzZXJDdXN0b21lcklEfSwKICAg
ICAgICAgICAgICAgIFJlc3VsdCAgICAgPT4gJ0NPVU5UJywKCiAgICAgICAgICAgICAgICAjIHNl
YXJjaCB3aXRoIHVzZXIgcGVybWlzc2lvbnMKICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4g
JFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gfHwgJ3JvJywKICAgICAgICAgICAgICAgIFVz
ZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAo
ICRDb3VudCAmJiAkQ291bnQgPiAkTWF4ICkgewogICAgICAgICAgICAgICAgJE1heCA9ICRDb3Vu
dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJEluZGV4ID0gJFN0YXRJbmRleGVzeyRT
dGF0fTsKICAgICAgICAgICAgc3BsaWNlIEB7ICRTaG93blN0YXRzWyRJbmRleF0gfSwgMSwgMCwk
Q291bnQ7CiAgICAgICAgfQojIC0tLQoKPXBvZAoKICAgICAgICBteSAkQ291bnRDcmVhdGVkID0g
JFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAoKICAgICAgICAgICAgIyBjYWNoZSBzZWFyY2gg
cmVzdWx0CiAgICAgICAgICAgIENhY2hlVFRMID0+ICRDYWNoZVRUTCwKCiAgICAgICAgICAgICMg
dGlja2V0cyB3aXRoIGNyZWF0ZSB0aW1lIGFmdGVyIC4uLiAodGlja2V0IG5ld2VyIHRoYW4gdGhp
cyBkYXRlKSAob3B0aW9uYWwpCiAgICAgICAgICAgIFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUg
PT4gJFRpbWVTdGFydCwKCiAgICAgICAgICAgICMgdGlja2V0cyB3aXRoIGNyZWF0ZWQgdGltZSBi
ZWZvcmUgLi4uICh0aWNrZXQgb2xkZXIgdGhhbiB0aGlzIGRhdGUpIChvcHRpb25hbCkKICAgICAg
ICAgICAgVGlja2V0Q3JlYXRlVGltZU9sZGVyRGF0ZSA9PiAkVGltZVN0b3AsCgogICAgICAgICAg
ICBDdXN0b21lcklEID0+ICRQYXJhbXtEYXRhfS0+e1VzZXJDdXN0b21lcklEfSwKICAgICAgICAg
ICAgUmVzdWx0ICAgICA9PiAnQ09VTlQnLAoKICAgICAgICAgICAgIyBzZWFyY2ggd2l0aCB1c2Vy
IHBlcm1pc3Npb25zCiAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gJFNlbGYtPntDb25maWd9LT57
UGVybWlzc2lvbn0gfHwgJ3JvJywKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklE
fSwKICAgICAgICApOwogICAgICAgIGlmICggJENvdW50Q3JlYXRlZCAmJiAkQ291bnRDcmVhdGVk
ID4gJE1heCApIHsKICAgICAgICAgICAgJE1heCA9ICRDb3VudENyZWF0ZWQ7CiAgICAgICAgfQog
ICAgICAgIHB1c2ggQFRpY2tldHNDcmVhdGVkLCAkQ291bnRDcmVhdGVkOwoKICAgICAgICBteSAk
Q291bnRDbG9zZWQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCgogICAgICAgICAgICAj
IGNhY2hlIHNlYXJjaCByZXN1bHQKICAgICAgICAgICAgQ2FjaGVUVEwgPT4gJENhY2hlVFRMLAoK
ICAgICAgICAgICAgIyB0aWNrZXRzIHdpdGggY3JlYXRlIHRpbWUgYWZ0ZXIgLi4uICh0aWNrZXQg
bmV3ZXIgdGhhbiB0aGlzIGRhdGUpIChvcHRpb25hbCkKICAgICAgICAgICAgVGlja2V0Q2xvc2VU
aW1lTmV3ZXJEYXRlID0+ICRUaW1lU3RhcnQsCgogICAgICAgICAgICAjIHRpY2tldHMgd2l0aCBj
cmVhdGVkIHRpbWUgYmVmb3JlIC4uLiAodGlja2V0IG9sZGVyIHRoYW4gdGhpcyBkYXRlKSAob3B0
aW9uYWwpCiAgICAgICAgICAgIFRpY2tldENsb3NlVGltZU9sZGVyRGF0ZSA9PiAkVGltZVN0b3As
CgogICAgICAgICAgICBDdXN0b21lcklEID0+ICRQYXJhbXtEYXRhfS0+e1VzZXJDdXN0b21lcklE
fSwKICAgICAgICAgICAgUmVzdWx0ICAgICA9PiAnQ09VTlQnLAoKICAgICAgICAgICAgIyBzZWFy
Y2ggd2l0aCB1c2VyIHBlcm1pc3Npb25zCiAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gJFNlbGYt
PntDb25maWd9LT57UGVybWlzc2lvbn0gfHwgJ3JvJywKICAgICAgICAgICAgVXNlcklEID0+ICRT
ZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgIGlmICggJENvdW50Q2xvc2VkICYmICRD
b3VudENsb3NlZCA+ICRNYXggKSB7CiAgICAgICAgICAgICRNYXggPSAkQ291bnRDbG9zZWQ7CiAg
ICAgICAgfQogICAgICAgIHB1c2ggQFRpY2tldHNDbG9zZWQsICRDb3VudENsb3NlZDsKICAgIH0K
Cj1jdXQKCiAgICB9CgogICAgdW5zaGlmdCgKICAgICAgICBAVGlja2V0V2Vla2RheXMsCiAgICAg
ICAgJFN0YXRlVGV4dAogICAgKTsKCiAgICBteSBAQ2hhcnREYXRhID0gKAojIC0tLQojIFBTCiMg
LS0tCiMgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgn
NyBEYXkgU3RhdHMnKSwKICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5U
cmFuc2xhdGUoCiAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnR2VuZXJpY0Rhc2hib2Fy
ZFN0YXRzOjpUaXRsZScpCiAgICAgICAgKSwKIyAtLS0KICAgICAgICBcQFRpY2tldFdlZWtkYXlz
LAojIC0tLQojIFBTCiMgLS0tCiMgICAgICAgIFsgJENyZWF0ZWRUZXh0LCByZXZlcnNlIEBUaWNr
ZXRzQ3JlYXRlZCBdLAojICAgICAgICBbICRDbG9zZWRUZXh0LCAgcmV2ZXJzZSBAVGlja2V0c0Ns
b3NlZCBdLAogICAgICAgIEBTaG93blN0YXRzLAojIC0tLQogICAgKTsKCiAgICBteSAkQ2hhcnRE
YXRhSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgRGF0YSA9PiBcQENo
YXJ0RGF0YSwKICAgICk7CgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgJXsgJFNlbGYtPntDb25m
aWd9IH0sCiAgICAgICAgS2V5ICAgICAgID0+IGludCByYW5kIDk5OTk5LAogICAgICAgIENoYXJ0
RGF0YSA9PiAkQ2hhcnREYXRhSlNPTiwKICAgICk7CgogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30t
PntDYWNoZVRUTExvY2FsfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5
c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAnRGFzaGJvYXJkJywKICAg
ICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiBcJURhdGEs
CiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0NhY2hlVFRMTG9jYWx9ICog
NjAsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkQ29udGVudCA9ICRMYXlvdXRPYmplY3QtPk91
dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgICA9PiAnQWdlbnREYXNoYm9hcmRUaWNrZXRTdGF0
cycsCiAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVEYXRhLAogICAgICAgIEtlZXBTY3JpcHRU
YWdzID0+ICRQYXJhbXtBSkFYfSwKICAgICk7CgogICAgcmV0dXJuICRDb250ZW50Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8K
IyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBG
b3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBp
bmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNl
ZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KWyUgV1JBUFBFUiBK
U09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88
IVtDREFUQVsKKGZ1bmN0aW9uKCl7CiAgICB2YXIgVGltZW91dCA9IDUwMDsKICAgIHdpbmRvdy5z
ZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBDb3JlLlVJLkFkdmFuY2VkQ2hhcnQuSW5p
dCgKICAgICAgICAgICAgIkQzOjpTaW1wbGVMaW5lQ2hhcnQiLAogICAgICAgICAgICBbJSBEYXRh
LkNoYXJ0RGF0YSAlXSwKICAgICAgICAgICAgJ3N2Zy5HcmFwaFdpZGdldFslIERhdGEuS2V5IHwg
aHRtbCAlXScsCiAgICAgICAgICAgIHsKIyAtLS0KIyBQUwojIC0tLQogICAgICAgICAgICAgICAg
VGlja3M6ICdbJSBDb25maWcoIkdlbmVyaWNEYXNoYm9hcmRTdGF0czo6RGF5cyIpICVdJyB8fCAn
NycsCiMgLS0tCiAgICAgICAgICAgICAgICBEdXJhdGlvbjogMjUwLAogICAgICAgICAgICAgICAg
UmVkdWNlWFRpY2tzOiBmYWxzZQogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0sIFRpbWVv
dXQpOwp9KCkpOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KPHN2ZyBzdHlsZT0iaGVpZ2h0OiAy
NTBweDsiIGNsYXNzPSJEM0dyYXBoQ2FudmFzIEdyYXBoV2lkZ2V0WyUgRGF0YS5LZXkgfCBodG1s
ICVdIiBpZD0iR3JhcGhXaWRnZXRbJSBEYXRhLktleSB8IGh0bWwgJV0iPjwvc3ZnPgo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90cnNfY29uZmlnIHZlcnNp
b249IjEuMCIgaW5pdD0iQXBwbGljYXRpb24iPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRGFzaGJv
YXJkQmFja2VuZCMjIzI1Ni1HZW5lcmljU3RhdHMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAg
ICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGRh
c2hib2FyZCBiYWNrZW5kIG9mIHRoZSB0aWNrZXQgc3RhdHMgb2YgdGhlIGFnZW50IGludGVyZmFj
ZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdy
b3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4g
R3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhl
IHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5h
YmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWlu
dXRlcyBmb3IgdGhlIHBsdWdpbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaWNrZXQ8
L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkRhc2hib2FyZDwvU3Vi
R3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAg
ICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6OlRp
Y2tldFN0YXRzR2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUi
PjcgRGF5IFN0YXRzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVkIj4x
PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbG9zZWQiPjE8L0l0ZW0+CiAgICAg
ICAgICAgICAgICA8SXRlbSBLZXk9IlBlcm1pc3Npb24iPnJ3PC9JdGVtPgogICAgICAgICAgICAg
ICAgPEl0ZW0gS2V5PSJCbG9jayI+Q29udGVudFNtYWxsPC9JdGVtPgogICAgICAgICAgICAgICAg
PEl0ZW0gS2V5PSJHcm91cCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWZh
dWx0Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYWNoZVRUTCI+MzA8L0l0
ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0
ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJHZW5lcmljRGFzaGJvYXJkU3RhdHM6OkRheXMiIFJl
cXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0i
MSI+SG93IG1hbnkgZGF5cyBzaG91bGQgdGhlIHN0YXRzIGluY2x1ZGU8L0Rlc2NyaXB0aW9uPgog
ICAgICAgIDxHcm91cD5HZW5lcmljRGFzaGJvYXJkU3RhdHM8L0dyb3VwPgogICAgICAgIDxTdWJH
cm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmlu
ZyBSZWdleD0iIj43PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVt
PgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iR2VuZXJpY0Rhc2hib2FyZFN0YXRzOjpUaXRsZSIgUmVx
dWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIx
Ij5UaXRsZSBmb3IgdGhlIHN0YXRzPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+R2VuZXJp
Y0Rhc2hib2FyZFN0YXRzPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+
CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+NyBEYXkgU3Rh
dHM8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29u
ZmlnSXRlbSBOYW1lPSJHZW5lcmljRGFzaGJvYXJkU3RhdHM6OlN0YXRzIyMjMDAwLUNyZWF0ZWQi
IFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJs
ZT0iMSI+SG93IG1hbnkgdGlja2V0cyB3ZXJlIGNyZWF0ZWQgdGhlIGRheTwvRGVzY3JpcHRpb24+
CiAgICAgICAgPEdyb3VwPkdlbmVyaWNEYXNoYm9hcmRTdGF0czwvR3JvdXA+CiAgICAgICAgPFN1
Ykdyb3VwPlN0YXRzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhh
c2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9wdGlvbktleSI+Q3JlYXRlZFN0YXRzPC9J
dGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJ0eXBlIj5UaWNrZXRDcmVhdGU8L0l0ZW0+
CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImNvbG9yIj4jZWVmZjAwPC9JdGVtPgogICAgICAg
ICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENv
bmZpZ0l0ZW0gTmFtZT0iR2VuZXJpY0Rhc2hib2FyZFN0YXRzOjpTdGF0cyMjIzAwMS1DcmVhdGVk
LUp1bmsiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5z
bGF0YWJsZT0iMSI+SG93IG1hbnkgdGlja2V0cyB3ZXJlIGNyZWF0ZWQgdGhlIGRheSBpbiB0aGUg
cXVldWUgSnVuazwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkdlbmVyaWNEYXNoYm9hcmRT
dGF0czwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPlN0YXRzPC9TdWJHcm91cD4KICAgICAgICA8
U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9w
dGlvbktleSI+Q3JlYXRlZEp1bmtTdGF0czwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtl
eT0idHlwZSI+VGlja2V0Q3JlYXRlPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAg
PC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iQ3JlYXRl
ZEp1bmtTdGF0cyMjI1F1ZXVlcyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVz
Y3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmUgdGhlIFF1ZXVlcyB0aGUgQ3JlYXRlZEp1
bmtTdGF0cyBzdGF0IGlzIGZvcjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkdlbmVyaWNE
YXNoYm9hcmRTdGF0czwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNyZWF0ZWRKdW5rU3RhdHM8
L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAg
ICAgICAgICA8SXRlbT5KdW5rPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwv
U2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KPC9vdHJzX2NvbmZpZz4K
PWhlYWQxIE5BTUUKCkdlbmVyaWNEYXNoYm9hcmRTdGF0cwoKPWhlYWQxIERFU0NSSVBUSU9OCgpB
cyBvZiB0b2RheSAoQXVnIDIwMTIpIHRoZSA3IGRheSBzdGF0aXN0aWMgd2lkZ2V0IGZvciB0aGUg
ZGFzaGJvYXJkIGtub3dzIG9ubHkgdHdvIHN0YXRzOiBjbG9zZWQgdGlja2V0cyBhbmQgY3JlYXRl
ZCB0aWNrZXRzLgoKVGhpcyBpcyBub3QgZW5vdWdoIGFuZCB0byBhZGQgbmV3IHN0YXRzIHRvIHRo
YXQgd2lkZ2V0IG9yIGNoYW5nZSB0aGUgY3VycmVudCBvbmVzIHlvdSBuZWVkIHByb2dyYW1taW5n
IHNraWxscy4KCkM8R2VuZXJpY0Rhc2hib2FyZFN0YXRzPiBhbGxvd3MgdG8gYWRkL2NoYW5nZSBz
dGF0cyBlYXNpbHkgd2l0aCBuZXcgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlIFN5c0NvbmZp
Zy4gU28geW91IGNhbiBzaG93IHRoZSBzdGF0cyB5b3Ugd2FudC4KCj1oZWFkMSBDUkVBVEUgTkVX
IFNUQVRTCgpUbyBjcmVhdGUgbmV3IHN0YXRzIHlvdSBoYXZlIHRvIGFkZCBvbmx5IHlvdXIgb3du
IGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhlIHN1YnNlcXVlbnQgc2VjdGlvbnMgc2hvdyBkaWZmZXJl
bnQgdHlwZXMgb2Ygc3RhdHMuCgo9aGVhZDIgVGhlICJzdGFuZGFyZCIgY2xvc2VkIHRpY2tldCBn
cmFwaAoKQ3JlYXRlIGEgZmlsZSBDPCRPVFJTX0hPTUUvS2VybmVsL0NvbmZpZy9GaWxlcy9BbnlO
YW1lLnhtbD4gd2hlcmUgIkFueU5hbWUiIGNhbiBiZSB3aGF0ZXZlciB5b3Ugd2FudC4gVGhvdWdo
IEkgcmVjb21tZW5kIHRvIG5hbWUgaXQgdGhlIHNhbWUgd2F5IHlvdSB3YW50IHRvIG5hbWUgdGhl
IGdyYXBoLgoKVGhlIFhNTCBmaWxlIGhhcyB0aGlzIGNvbnRlbnQ6CgogIDw/eG1sIHZlcnNpb249
IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiAgPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5p
dD0iQXBwbGljYXRpb24iPgogICAgPENWUz4kSWQ6IFRpY2tldC54bWwsdiAxLjUwMCAyMDEyLzAy
LzE0IDA4OjU5OjIyIG1nIEV4cCAkPC9DVlM+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJHZW5lcmlj
RGFzaGJvYXJkU3RhdHM6OlN0YXRzIyMjMDMwLUNsb3NlZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIx
Ij4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Ib3cgbWFueSB0aWNrZXRz
IHdlcmUgY3JlYXRlZCB0aGUgZGF5PC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+R2VuZXJp
Y0Rhc2hib2FyZFN0YXRzPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+U3RhdHM8L1N1Ykdyb3Vw
PgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJ
dGVtIEtleT0iT3B0aW9uS2V5Ij5DbG9zZWRTdGF0czwvSXRlbT4KICAgICAgICAgICAgICAgIDxJ
dGVtIEtleT0idHlwZSI+VGlja2V0Q2xvc2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBL
ZXk9ImNvbG9yIj4jZWVmZjAwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJsYWJl
bCI+Q2xvc2VkPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgog
ICAgPC9Db25maWdJdGVtPgogIDwvb3Ryc19jb25maWc+CgpUaGF0J3MgaXQhIE5vdGhpbmcgbW9y
ZS4KCk5vdywgd2hhdCBkb2VzIHRoZSBzZXR0aW5ncyBtZWFuPwoKPW92ZXIgNAoKPWl0ZW0gKiBP
cHRpb25LZXkKClRoZSBPcHRpb25LZXkgaXMganVzdCBhIHVuaXF1ZSBrZXkgZm9yIHRoaXMgZ3Jh
cGguIFRoaXMgaXMgdXNlZCB0byBkZWZpbmUgdGhlIG5hbWUgb2YgYW4gb3RoZXIgU3lzQ29uZmln
IG9wdGlvbiB0aGF0IGRlZmluZXMgbW9yZSBzZWFyY2ggcGFyYW1ldGVycyAoc2VlIHNlY29uZCBl
eGFtcGxlIGJlbG93KS4KCj1pdGVtICogdHlwZQoKRGVmaW5lIHdoYXQgdGltZS1wYXJhbWV0ZXIg
aXMgdXNlZCBmb3IgdGhlIHRpY2tldCBzZWFyY2guIFlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcg
dmFsdWVzOgoKPW92ZXIgNAoKPWl0ZW0gKiBUaWNrZXRDcmVhdGUKClRpY2tldHMgY3JlYXRlZCBv
biB0aGUgZ2l2ZW4gZGF5LgoKPWl0ZW0gKiBUaWNrZXRDbG9zZQoKVGlja2V0cyBjbG9zZWQgb24g
dGhlIGdpdmVuIGRheS4KCj1pdGVtICogVGlja2V0Q2hhbmdlCgpUaWNrZXRzIGNoYW5nZWQgb24g
dGhlIGdpdmVuIGRheS4KCj1pdGVtICogVGlja2V0UGVuZGluZwoKPWl0ZW0gKiBUaWNrZXRFc2Nh
bGF0aW9uCgo9aXRlbSAqIFRpY2tldEVzY2FsYXRpb25VcGRhdGUKCj1pdGVtICogVGlja2V0RXNj
YWxhdGlvblJlc3BvbnNlCgo9aXRlbSAqIFRpY2tldEVzY2FsYXRpb25Tb2x1dGlvbgoKPWl0ZW0g
KiBBcnRpY2xlQ3JlYXRlCgphcnRpY2xlcyB3aXRoIGNyZWF0ZSB0aW1lIGFmdGVyIC4uLiAoYXJ0
aWNsZSBuZXdlciB0aGFuIHRoaXMgZGF0ZSkuCgo9YmFjawoKPWl0ZW0gKiBjb2xvcgoKQ29sb3Ig
b2YgdGhlIGdyYXBoLgoKPWl0ZW0gKiBsYWJlbAoKTW91c2Ugb3ZlciBsYWJlbCBmb3IgdGhlIGdy
YXBoLgoKPWJhY2sKCkFuIG90aGVyIGV4YW1wbGU6IFNob3cgZ3JhcGggb2YgdGlja2V0IHRoYXQg
d2VyZSBjcmVhdGVkIGluIHF1ZXVlICJKdW5rIgoKICA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
aW5nPSJ1dGYtOCI/PgogIDxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkFwcGxpY2F0
aW9uIj4KICAgICAgPENvbmZpZ0l0ZW0gTmFtZT0iR2VuZXJpY0Rhc2hib2FyZFN0YXRzOjpTdGF0
cyMjIzAwMS1DcmVhdGVkLUp1bmsiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgICA8
RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Ib3cgbWFueSB0aWNrZXRzIHdlcmUgY3JlYXRl
ZCB0aGUgZGF5IGluIHRoZSBxdWV1ZSBKdW5rPC9EZXNjcmlwdGlvbj4KICAgICAgICAgIDxHcm91
cD5HZW5lcmljRGFzaGJvYXJkU3RhdHM8L0dyb3VwPgogICAgICAgICAgPFN1Ykdyb3VwPlN0YXRz
PC9TdWJHcm91cD4KICAgICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICAgIDxIYXNoPgogICAg
ICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9wdGlvbktleSI+Q3JlYXRlZEp1bmtTdGF0czwvSXRl
bT4KICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJ0eXBlIj5UaWNrZXRDcmVhdGU8L0l0ZW0+
CiAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY29sb3IiPiNlZWZmMDA8L0l0ZW0+CiAgICAg
ICAgICAgICAgICAgIDxJdGVtIEtleT0ibGFiZWwiPkNyZWF0ZWQgSW4gSnVuazwvSXRlbT4KICAg
ICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICA8L1NldHRpbmc+CiAgICAgIDwvQ29uZmlnSXRl
bT4KICAgICAgPENvbmZpZ0l0ZW0gTmFtZT0iQ3JlYXRlZEp1bmtTdGF0cyMjI1F1ZXVlcyIgUmVx
dWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9
IjEiPkRlZmluZSB0aGUgUXVldWVzIHRoZSBDcmVhdGVkSnVua1N0YXRzIHN0YXQgaXMgZm9yPC9E
ZXNjcmlwdGlvbj4KICAgICAgICAgIDxHcm91cD5HZW5lcmljRGFzaGJvYXJkU3RhdHM8L0dyb3Vw
PgogICAgICAgICAgPFN1Ykdyb3VwPkNyZWF0ZWRKdW5rU3RhdHM8L1N1Ykdyb3VwPgogICAgICAg
ICAgPFNldHRpbmc+CiAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICA8SXRl
bT5KdW5rPC9JdGVtPgogICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICA8L1NldHRpbmc+
CiAgICAgIDwvQ29uZmlnSXRlbT4KICA8L290cnNfY29uZmlnPgoKVGhlIGZpcnN0IEk8Q29uZmln
SXRlbT4gcGFydCBpcyBkZXNjcmliZWQgYWJvdmUuIFRoZSBzZWNvbmQgb25lIGFkZHMgbW9yZSBz
ZWFyY2ggcGFyYW10ZXJzLiBUaGUgbmFtZSBvZiB0aGUgaXRlbSBpcyBjcmVhdGVkIGJ5IHRoZSB2
YWx1ZSBvZiBJPE9wdGlvbktleT4gaW4gdGhlIGZpcnN0IGNvbmZpZyBvcHRpb24gdGhlbiAiIyMj
IiBhbmQgdGhlIGxhc3QgcGFydCBvZiB0aGUgbmFtZSBpcyB0aGUgc2VhcmNoIG9wdGlvbi4gQXQg
TDxodHRwOi8vb3Rycy5wZXJsLXNlcnZpY2VzLmRlL2RvY3Mvb3Rycy9yZWwtM18zL2tlcm5lbF9z
eXN0ZW1fdGlja2V0c2VhcmNoLmh0bWw+IHlvdSBjYW4gc2VlIGFsbCB0aGUgb3B0aW9ucyBmb3Ig
dGhlIHRpY2tldCBzZWFyY2guCgo9aGVhZDEgUkVQT1NJVE9SWSAmIEJVR1MKClRoZSBjb2RlIHJl
cG9zaXRvcnkgYW5kIGEgYnVndHJhY2tlciBhcmUgYXZhaWxhYmxlIGF0IEw8aHR0cDovL2dpdGh1
Yi5jb20vcmVuZWViL290cnMtR2VuZXJpY0Rhc2hib2FyZFN0YXRzPgoKPWhlYWQxIEFVVEhPUiBB
TkQgTElDRU5DRQoKICBMaWNlbnNlOiBBR1BMCgpSZW5lZSBCYWVja2VyIEM8aW5mb0BwZXJsLXNl
cnZpY2VzLmRlPgoK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTYgT1RSUyBBRywgaHR0cDovL290cnMuY29t
LwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5U
WS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNl
bnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZp
bGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCi8qZ2xv
YmFsIGQzLCBudiwgY2FudmcsIFN0cmluZ1ZpZXcgKi8KCiJ1c2Ugc3RyaWN0IjsKCnZhciBDb3Jl
ID0gQ29yZSB8fCB7fTsKQ29yZS5VSSA9IENvcmUuVUkgfHwge307CgovKioKICogQG5hbWVzcGFj
ZSBDb3JlLlVJLkFkdmFuY2VkQ2hhcnQKICogQG1lbWJlcm9mIENvcmUuVUkKICogQGF1dGhvciBP
VFJTIEFHCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIENoYXJ0IGRyYXdpbmcuCiAqLwpDb3JlLlVJ
LkFkdmFuY2VkQ2hhcnQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLy8gRGVmYXVsdCBj
b2xvcnMgZm9yIHRoZSBjaGFydHMKICAgIHZhciBDb2xvcnMgPSBbICcjRUM5MDczJywgJyM2QkFE
NTQnLCAnI0UyRjYyNicsICcjMEYyMkU0JywgJyMxRkUzNjInLCAnI0M1RjU2NicsICcjOEQyM0E4
JywgJyM3OEE3RkMnLCAnI0RGQzAxQicsICcjNDNCMjYxJywgJyM1Mzc1OEQnLCAnI0MxQUU0NScs
ICcjNkNEMTNEJywgJyNFMENBMEUnLCAnIzY1MjE4OCcsICcjM0VCQjM0JywgJyM4RjUzRUEnLCAn
Izk1NjY2OScsICcjMzRBMEZCJywgJyNGNTAxNzgnLCAnI0FCNzY2QScsICcjQkVBMDI5JywgJyNB
QkUxMjQnLCAnI0E2ODQ3NycsICcjRjdEMDg0JywgJyM5M0YwQTUnLCAnI0I1NDY2NycsICcjRjEy
RDI1JywgJyMxREJBMTMnLCAnIzIxQUYyMycsICcjM0I2MkMwJywgJyM4NzZDREMnLCAnIzNERTZB
MCcsICcjQ0NENzdGJywgJyNCOTE1ODMnLCAnIzhDRkZGQicsICcjMDczNjQxJywgJyMzOEUxRTkn
LCAnIzFBNUYyRCcsICcjRUQ2MDNGJywgJyMzQkIzQUEnLCAnI0ZBMjIxNicsICcjMzRFMjVDJywg
JyNCNjcxNkEnLCAnI0U1ODQ1QicsICcjNDk3RkMyJywgJyNBQkNDRUUnLCAnIzIyMjA0NycsICcj
REZFNTE0JywgJyNGRkE4NEYnLCAnIzM4OEI4NScsICcjRDIxQUVGJywgJyM4MTFBMjYnLCAnIzIw
NjA1NycsICcjNTU3RkRCJywgJyNGMTQ4Q0MnLCAnI0RBRkY0RScsICcjRkNGMDcyJywgJyM3OTJE
QTgnLCAnIzUwREMwQicsICcjOEZEQzdBJywgJyM5NTQ5NTgnLCAnIzc0NTc1QycsICcjQUM1Q0FG
JywgJyM0RkYyQkYnLCAnI0U0RkMxNycsICcjNkFEQjQyJywgJyM0QjY5M0InLCAnIzVEN0JBMScs
ICcjQkYxQjFDJywgJyNBMDBBQzEnLCAnIzEzQ0VFMCcsICcjMDJDN0MwJywgJyMyMUVBRDgnLCAn
I0M4N0QzOScsICcjQUVBQjg2JywgJyNEQTk5OTgnLCAnI0FBQjcxNycsICcjODQ5NkU2JywgJyNG
QUU3ODInLCAnIzEyMEJEOScsICcjMUEzQjRDJywgJyMzRjdFNjgnLCAnIzZGQ0Y2QicsICcjNTU2
NERFJywgJyM2RTA3QUQnLCAnIzBDODQ3QycsICcjMUJCOEEyJywgJyMxMDFERjgnLCAnIzg1REU5
QicsICcjRDBBRDc0JywgJyNCODAzRDgnLCAnIzBFM0M3RScsICcjRThFMDVFJywgJyM4RTM2REQn
LCAnIzJBREM4NScsICcjMTNFMTdCJywgJyNBOEFFNDEnLCAnI0MzQUE0MCcsICcjOUNGRDNDJywg
JyNBNTc4MkYnLCAnI0UzM0M1QicsICcjOEYzM0Q4JywgJyM1OUJGNEYnLCAnI0ZFQ0ZCMCcsICcj
QjU1M0Q4JywgJyMyQ0I1OTAnLCAnIzAxMDQ1RScsICcjQ0E3OEFDJywgJyM4QUE1OTYnLCAnIzU0
QkI3OScsICcjM0E1RTBFJywgJyNGMTBGNTUnLCAnI0QyMDVBQScsICcjMjM0RDhEJywgJyMzRDJG
OEEnLCAnIzlCNEY5NScsICcjRTk2RTlDJywgJyM0N0U0QzknLCAnI0ZGQzNENCcsICcjMTEyMzFB
JywgJyNEQTUyOUYnLCAnIzc4OUQ3MicsICcjQUI5OTA2JywgJyMyMDVGMzMnLCAnIzQ0NDY4NScs
ICcjMDUwNjdBJywgJyM2RTJGQzknLCAnIzE2NUFGNScsICcjMDI2NjE5JywgJyM5NkVFQzYnLCAn
IzREQjQzMycsICcjRTkyMTlGJywgJyNBQTVGNTUnLCAnIzU1OEJDQScsICcjNTYwMzRDJywgJyNB
ODk2REQnLCAnIzlDN0NEMCcsICcjQjhCMTcwJywgJyM3RDZGOTInLCAnIzlFOEEyRCcsICcjN0Q2
MTM0JywgJyNFRDA2OUUnLCAnIzc0NjI1RScsICcjM0RDOUM1JywgJyNDNjQ1MDcnLCAnIzI3NDk4
NycsICcjRDc0RUVFJywgJyNDNTMzNzknLCAnIzFBNkU0MicsICcjMzA4ODU5JywgJyNGNzA0MTkn
LCAnI0JFMTBDRicsICcjRTg0MUNDJywgJyNBRDYwQ0InLCAnIzMwQkI4MCcsICcjNTg4NkM5JyBd
OwoKICAgIC8vIGFkZCBkZXBlbmRlbmNpZXMgdG8gY2hhcnQgbGlicyBoZXJlIChlLmcuIG52ZDMg
ZXRjLikKICAgIGlmICghQ29yZS5EZWJ1Zy5DaGVja0RlcGVuZGVuY3koJ0NvcmUuVUkuQWR2YW5j
ZWRDaGFydCcsICdudicsICdudmQzJykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cgog
ICAgLyoqCiAgICAgKiBAbmFtZSBVcGRhdGVQcmVmZXJlbmNlcwogICAgICogQG1lbWJlcm9mIENv
cmUuVUkuQWR2YW5jZWRDaGFydAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge1N0cmlu
Z30gUHJlZk5hbWUKICAgICAqIEBwYXJhbSB7QXJyYXl9IFByZWZWYWx1ZQogICAgICogQGRlc2Ny
aXB0aW9uCiAgICAgKiAgICAgIFVwZGF0ZSBjaGFydCBwcmVmZXJlbmNlcyBvbiBzZXJ2ZXIuCiAg
ICAgKi8KICAgIFRhcmdldE5TLlVwZGF0ZVByZWZlcmVuY2VzID0gZnVuY3Rpb24oUHJlZk5hbWUs
IFByZWZWYWx1ZSkgewogICAgICAgIHZhciBVUkwgPSBDb3JlLkNvbmZpZy5HZXQoJ0NHSUhhbmRs
ZScpLAogICAgICAgICAgICBEYXRhID0gewogICAgICAgICAgICAgICAgQWN0aW9uOiAnQWdlbnRQ
cmVmZXJlbmNlcycsCiAgICAgICAgICAgICAgICBTdWJhY3Rpb246ICdVcGRhdGVBSkFYJywKICAg
ICAgICAgICAgICAgIEtleTogUHJlZk5hbWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJl
ZmVyZW5jZXMgPSBDb3JlLkNvbmZpZy5HZXQoJ1ByZWYtJyArIFByZWZOYW1lKSB8fCB7fTsKCiAg
ICAgICAgaWYgKCFQcmVmTmFtZSB8fCAhUHJlZk5hbWUubGVuZ3RoKSB7CiAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICB9CiAgICAgICAgUHJlZmVyZW5jZXMgPSBDb3JlLkNvbmZpZy5HZXQoJ1By
ZWYtJyArIFByZWZOYW1lKSB8fCB7fTsKICAgICAgICAvLyBNZXJnZSBwcmVmIHNldHRpbmdzCiAg
ICAgICAgJC5lYWNoKFByZWZWYWx1ZSwgZnVuY3Rpb24oQ2hhcnRUeXBlLCBWYWx1ZXMpIHsKICAg
ICAgICAgICAgJC5lYWNoKFZhbHVlcywgZnVuY3Rpb24gKEtleSwgVmFsdWUpIHsKICAgICAgICAg
ICAgICAgIGlmICh0eXBlb2YgUHJlZmVyZW5jZXNbQ2hhcnRUeXBlXSA9PT0gJ3VuZGVmaW5lZCcp
IHsKICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlc1tDaGFydFR5cGVdID0ge307CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBQcmVmZXJlbmNlc1tDaGFydFR5cGVdW0tleV0g
PSBWYWx1ZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgRGF0YS5WYWx1ZSA9
IENvcmUuSlNPTi5TdHJpbmdpZnkoUHJlZmVyZW5jZXMpOwoKICAgICAgICAvLyB1cGRhdGUgcHJl
ZgogICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoVVJMLCBEYXRhLCAkLm5vb3ApOwogICAg
fTsKCiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKiBAbmFtZSBEcmF3TGluZUNoYXJ0CiAg
ICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5BZHZhbmNlZENoYXJ0CiAgICAgKiBAZnVuY3Rpb24KICAg
ICAqIEBwYXJhbSB7QXJyYXl9IFJhd0RhdGEgLSBSYXcgSlNPTiBkYXRhLgogICAgICogQHBhcmFt
IHtET01PYmplY3R9IEVsZW1lbnQgLSBTZWxlY3RvciBvZiB0aGUgKFNWRykgZWxlbWVudCB0byB1
c2UuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gT3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy4K
ICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW09wdGlvbnMuSGlkZUxlZ2VuZF0gLSBEb24ndCBkaXNw
bGF5IHRoZSBsZWdlbmQgKG9wdGlvbmFsKS4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW09wdGlv
bnMuRHVyYXRpb25dIC0gVHJhbnNpdGlvbiBkdXJhdGlvbiBpbiBtcywgZGVmYXVsdCAwIChubyB0
cmFuc2l0aW9uKS4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW09wdGlvbnMuUHJlZmVyZW5jZXNL
ZXldIC0gTmFtZSBvZiBhbiBhZ2VudCBwcmVmZXJlbmNlcyBrZXkgc2F2ZQogICAgICogICAgICBw
ZXJzaXN0ZW50IEQzIHN0YXRpc3RpYyBzZXR0aW5ncyB0byAoY3VycmVudGx5IHVzZWQgZnJvbSB0
aGUgZGFzaGJvYXJkKS4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW09wdGlvbnMuUHJlZmVyZW5j
ZXNEYXRhXSAtIEN1cnJlbnQgdmFsdWUgb2YgdGhlIEQzIHN0YXRpc3RpYyBncmFwaCBzZXR0aW5n
cy4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBJbml0aWFsaXplcyBhbiBudmQzIGNo
YXJ0IHdpdGggZGF0YSBnZW5lcmF0ZWQgYnkgYSBmcm9udGVuZCBtb2R1bGUuCiAgICAgKi8KICAg
IGZ1bmN0aW9uIERyYXdMaW5lQ2hhcnQoUmF3RGF0YSwgRWxlbWVudCwgT3B0aW9ucykgewogICAg
ICAgIHZhciBIZWFkaW5ncywKICAgICAgICAgICAgUmVzdWx0RGF0YSA9IFtdLAogICAgICAgICAg
ICBWYWx1ZUZvcm1hdCA9ICdkJywgLy8geSBheGlzIGZvcm1hdCBpcyBieSBkZWZhdWx0ICJpbnRl
Z2VyIgogICAgICAgICAgICBDb3VudGVyID0gMCwKICAgICAgICAgICAgUHJlZmVyZW5jZXNLZXkg
PSBPcHRpb25zLlByZWZlcmVuY2VzS2V5LAogICAgICAgICAgICBQcmVmZXJlbmNlc0RhdGEgPSBP
cHRpb25zLlByZWZlcmVuY2VzRGF0YTsKCiAgICAgICAgLy8gRmlyc3QgUmF3RGF0YSBlbGVtZW50
IGlzIG5vdCBuZWVkZWQKICAgICAgICBSYXdEYXRhLnNoaWZ0KCk7CiAgICAgICAgSGVhZGluZ3Mg
PSBSYXdEYXRhLnNoaWZ0KCk7CgogICAgICAgIGlmIChQcmVmZXJlbmNlc0RhdGEgJiYgdHlwZW9m
IFByZWZlcmVuY2VzRGF0YS5MaW5lICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICBQcmVm
ZXJlbmNlc0RhdGEgPSBQcmVmZXJlbmNlc0RhdGEuTGluZTsKICAgICAgICB9CiAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgIFByZWZlcmVuY2VzRGF0YSA9IHt9OwogICAgICAgIH0KCiAgICAgICAg
JC5lYWNoKFJhd0RhdGEsIGZ1bmN0aW9uKERhdGFJbmRleCwgRGF0YUVsZW1lbnQpIHsKICAgICAg
ICAgICAgdmFyIFJlc3VsdExpbmU7CgogICAgICAgICAgICAvLyBJZ25vcmUgc3VtIHJvdwogICAg
ICAgICAgICBpZiAoRGF0YUVsZW1lbnRbMF0gPT09ICdTdW0nKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFJlc3VsdExpbmUgPSB7CiAgICAgICAg
ICAgICAgICBrZXk6IERhdGFFbGVtZW50WzBdLAogICAgICAgICAgICAgICAgY29sb3I6IENvbG9y
c1tDb3VudGVyICUgQ29sb3JzLmxlbmd0aF0sCiAgICAgICAgICAgICAgICBkaXNhYmxlZDogKFBy
ZWZlcmVuY2VzRGF0YSAmJiBQcmVmZXJlbmNlc0RhdGEuRmlsdGVyICYmICQuaW5BcnJheShEYXRh
RWxlbWVudFswXSwgUHJlZmVyZW5jZXNEYXRhLkZpbHRlcikgPT09IC0xKSA/IHRydWUgOiBmYWxz
ZSwKICAgICAgICAgICAgICAgIGFyZWE6IHRydWUsCiAgICAgICAgICAgICAgICB2YWx1ZXM6IFtd
CiAgICAgICAgICAgIH07CgogICAgICAgICAgICAkLmVhY2goSGVhZGluZ3MsIGZ1bmN0aW9uKEhl
YWRpbmdJbmRleCwgSGVhZGluZ0VsZW1lbnQpewogICAgICAgICAgICAgICAgdmFyIFZhbHVlOwog
ICAgICAgICAgICAgICAgLy8gRmlyc3QgZWxlbWVudCBpcyB4IGF4aXMgbGFiZWwKICAgICAgICAg
ICAgICAgIGlmIChIZWFkaW5nSW5kZXggPT09IDApewogICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIElnbm9yZSBzdW0gY29sCiAg
ICAgICAgICAgICAgICBpZiAoSGVhZGluZ0VsZW1lbnQgPT09ICdTdW0nKSB7CiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIFZhbHVl
ID0gcGFyc2VGbG9hdChEYXRhRWxlbWVudFtIZWFkaW5nSW5kZXhdKTsKCiAgICAgICAgICAgICAg
ICBpZiAoaXNOYU4oVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHZhbHVlIGlzIGEgZmxvYXRp
bmcgcG9pbnQgbnVtYmVyIGFuZCBub3QgYW4gaW50ZWdlcgogICAgICAgICAgICAgICAgaWYgKFZh
bHVlICUgMSkgewogICAgICAgICAgICAgICAgICAgIFZhbHVlRm9ybWF0ID0gJywxZic7IC8vIFNl
dCB5IGF4aXMgZm9ybWF0IHRvIGZsb2F0CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gbnYgZDMgZG9lcyBub3Qgd29yayBjb3JyZWNseSB3aXRoIG5vbiBudW1lcmljIHZhbHVl
cwogICAgICAgICAgICAgICAgUmVzdWx0TGluZS52YWx1ZXMucHVzaCh7CiAgICAgICAgICAgICAg
ICAgICAgeDogSGVhZGluZ0luZGV4LAogICAgICAgICAgICAgICAgICAgIHk6IFZhbHVlCiAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIFJlc3VsdERhdGEucHVz
aChSZXN1bHRMaW5lKTsKICAgICAgICAgICAgQ291bnRlcisrOwogICAgICAgIH0pOwoKICAgICAg
ICAvLyBwcm9kdWN0aW9uIG1vZGUKICAgICAgICBudi5kZXYgPSBmYWxzZTsKCiAgICAgICAgbnYu
YWRkR3JhcGgoZnVuY3Rpb24oKSB7CgogICAgICAgICAgICB2YXIgQ2hhcnQgPSBudi5tb2RlbHMu
T1RSU2xpbmVDaGFydCgpLAogICAgICAgICAgICAgICAgU2hvd0xlZ2VuZCA9IE9wdGlvbnMuSGlk
ZUxlZ2VuZCA/IGZhbHNlIDogdHJ1ZTsKCiAgICAgICAgICAgIC8vIGRvbid0IGxldCBudi9kMyBl
eGNlcHRpb25zIGJsb2NrIHRoZSByZXN0IG9mIE9UUlMgSmF2YVNjcmlwdAogICAgICAgICAgICB0
cnkgewoKICAgICAgICAgICAgICAgIENoYXJ0LnN0YWdnZXJMYWJlbHModHJ1ZSk7CgogICAgICAg
ICAgICAgICAgQ2hhcnQubWFyZ2luKHsKICAgICAgICAgICAgICAgICAgICB0b3A6IDIwLAogICAg
ICAgICAgICAgICAgICAgIHJpZ2h0OiA3MCwKICAgICAgICAgICAgICAgICAgICBib3R0b206IDUw
LAogICAgICAgICAgICAgICAgICAgIGxlZnQ6IDcwCiAgICAgICAgICAgICAgICB9KTsKCiAgICAg
ICAgICAgICAgICBDaGFydC51c2VJbnRlcmFjdGl2ZUd1aWRlbGluZSh0cnVlKQogICAgICAgICAg
ICAgICAgICAgIC5kdXJhdGlvbihPcHRpb25zLkR1cmF0aW9uIHx8IDApCiAgICAgICAgICAgICAg
ICAgICAgLnNob3dMZWdlbmQoU2hvd0xlZ2VuZCkKICAgICAgICAgICAgICAgICAgICAuc2hvd1lB
eGlzKHRydWUpCiAgICAgICAgICAgICAgICAgICAgLnNob3dYQXhpcyh0cnVlKTsKCiAgICAgICAg
ICAgICAgICBDaGFydC5kaXNwYXRjaC5vbignc3RhdGVDaGFuZ2UnLCBmdW5jdGlvbihzdGF0ZSkg
ewoKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRDb250cm9sU2VsZWN0aW9uKGNvbnRy
b2xTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ29udHJvbCA9IFtdOwogICAg
ICAgICAgICAgICAgICAgICAgICAkLmVhY2goY29udHJvbFN0YXRlLCBmdW5jdGlvbiAoS2V5LCBW
YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBWYWx1ZS5kaXNh
YmxlZCA9PT0gJ3VuZGVmaW5lZCcgfHwgIVZhbHVlLmRpc2FibGVkKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29udHJvbC5wdXNoKFZhbHVlLmtleSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQ29udHJvbDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGUuZGlzYWJsZWQgIT09ICd1bmRlZmluZWQnKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLlVwZGF0ZVByZWZlcmVuY2VzKFByZWZl
cmVuY2VzS2V5LCB7J0xpbmUnOiB7ICdGaWx0ZXInOiBnZXRDb250cm9sU2VsZWN0aW9uKFJlc3Vs
dERhdGEpIH19KTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSk7Cgog
ICAgICAgICAgICAgICAgQ2hhcnQueEF4aXMudGlja0Zvcm1hdChmdW5jdGlvbihkKSB7CiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEhlYWRpbmdzW2RdOwogICAgICAgICAgICAgICAgfSk7Cgog
ICAgICAgICAgICAgICAgQ2hhcnQueUF4aXMKICAgICAgICAgICAgICAgICAgICAudGlja0Zvcm1h
dChkMy5mb3JtYXQoVmFsdWVGb3JtYXQpKTsKCiAgICAgICAgICAgICAgICBkMy5zZWxlY3QoRWxl
bWVudCkKICAgICAgICAgICAgICAgICAgICAuZGF0dW0oUmVzdWx0RGF0YSkKICAgICAgICAgICAg
ICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgICAgICAgICAgICAgLmR1cmF0aW9uKDUwMCkK
ICAgICAgICAgICAgICAgICAgICAuY2FsbChDaGFydCk7CgogICAgICAgICAgICAgICAgbnYudXRp
bHMud2luZG93UmVzaXplKENoYXJ0LnVwZGF0ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
Y2F0Y2ggKEVycm9yKSB7CiAgICAgICAgICAgICAgICBDb3JlLkRlYnVnLkxvZyhFcnJvcik7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBDaGFydDsKICAgICAgICB9KTsKICAgIH0K
CiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKiBAbmFtZSBEcmF3U2ltcGxlTGluZUNoYXJ0
CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5BZHZhbmNlZENoYXJ0CiAgICAgKiBAZnVuY3Rpb24K
ICAgICAqIEBwYXJhbSB7QXJyYXl9IFJhd0RhdGEgLSBSYXcgSlNPTiBkYXRhLgogICAgICogQHBh
cmFtIHtET01PYmplY3R9IEVsZW1lbnQgLSBTZWxlY3RvciBvZiB0aGUgKFNWRykgZWxlbWVudCB0
byB1c2UuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gT3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9u
cy4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW09wdGlvbnMuSGlkZUxlZ2VuZF0gLSBEb24ndCBk
aXNwbGF5IHRoZSBsZWdlbmQgKG9wdGlvbmFsKS4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW09w
dGlvbnMuRHVyYXRpb25dIC0gVHJhbnNpdGlvbiBkdXJhdGlvbiBpbiBtcywgZGVmYXVsdCAwIChu
byB0cmFuc2l0aW9uKS4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBJbml0aWFsaXpl
cyBhIHNpbXBsZSBudmQzIGNoYXJ0IHdpdGggZGF0YSBnZW5lcmF0ZWQgYnkgYSBmcm9udGVuZCBt
b2R1bGUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIERyYXdTaW1wbGVMaW5lQ2hhcnQoUmF3RGF0YSwg
RWxlbWVudCwgT3B0aW9ucykgewogICAgICAgIHZhciBIZWFkaW5ncywKICAgICAgICAgICAgUmVz
dWx0RGF0YSA9IFtdLAogICAgICAgICAgICBWYWx1ZUZvcm1hdCA9ICdkJywgLy8geSBheGlzIGZv
cm1hdCBpcyBieSBkZWZhdWx0ICJpbnRlZ2VyIgogICAgICAgICAgICBDb3VudGVyID0gMDsKCiAg
ICAgICAgLy8gRmlyc3QgUmF3RGF0YSBlbGVtZW50IGlzIG5vdCBuZWVkZWQKICAgICAgICBSYXdE
YXRhLnNoaWZ0KCk7CiAgICAgICAgSGVhZGluZ3MgPSBSYXdEYXRhLnNoaWZ0KCk7CgogICAgICAg
ICQuZWFjaChSYXdEYXRhLCBmdW5jdGlvbihEYXRhSW5kZXgsIERhdGFFbGVtZW50KSB7CiAgICAg
ICAgICAgIHZhciBSZXN1bHRMaW5lOwoKICAgICAgICAgICAgLy8gSWdub3JlIHN1bSByb3cKICAg
ICAgICAgICAgaWYgKERhdGFFbGVtZW50WzBdID09PSAnU3VtJykgewogICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBSZXN1bHRMaW5lID0gewogICAgICAg
ICAgICAgICAga2V5OiBEYXRhRWxlbWVudFswXSwKICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xv
cnNbQ291bnRlciAlIENvbG9ycy5sZW5ndGhdLAogICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZh
bHNlLAogICAgICAgICAgICAgICAgYXJlYTogdHJ1ZSwKICAgICAgICAgICAgICAgIHZhbHVlczog
W10KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICQuZWFjaChIZWFkaW5ncywgZnVuY3Rpb24o
SGVhZGluZ0luZGV4KXsKICAgICAgICAgICAgICAgIHZhciBWYWx1ZTsKICAgICAgICAgICAgICAg
IC8vIEZpcnN0IGVsZW1lbnQgaXMgeCBheGlzIGxhYmVsCiAgICAgICAgICAgICAgICBpZiAoSGVh
ZGluZ0luZGV4ID09PSAwKXsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgVmFsdWUgPSBwYXJzZUZsb2F0KERhdGFFbGVtZW50W0hl
YWRpbmdJbmRleF0pOwoKICAgICAgICAgICAgICAgIGlmIChpc05hTihWYWx1ZSkpIHsKICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgaWYgdmFsdWUgaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYW5kIG5vdCBhbiBp
bnRlZ2VyCiAgICAgICAgICAgICAgICBpZiAoVmFsdWUgJSAxKSB7CiAgICAgICAgICAgICAgICAg
ICAgVmFsdWVGb3JtYXQgPSAnLDFmJzsgLy8gU2V0IHkgYXhpcyBmb3JtYXQgdG8gZmxvYXQKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBudiBkMyBkb2VzIG5vdCB3b3JrIGNv
cnJlY2x5IHdpdGggbm9uIG51bWVyaWMgdmFsdWVzCiAgICAgICAgICAgICAgICBSZXN1bHRMaW5l
LnZhbHVlcy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICB4OiBIZWFkaW5nSW5kZXgsCiAgICAg
ICAgICAgICAgICAgICAgeTogVmFsdWUKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9
KTsKICAgICAgICAgICAgUmVzdWx0RGF0YS5wdXNoKFJlc3VsdExpbmUpOwogICAgICAgICAgICBD
b3VudGVyKys7CiAgICAgICAgfSk7CgogICAgICAgIC8vIHByb2R1Y3Rpb24gbW9kZQogICAgICAg
IG52LmRldiA9IGZhbHNlOwoKICAgICAgICBudi5hZGRHcmFwaChmdW5jdGlvbigpIHsKCiAgICAg
ICAgICAgIHZhciBDaGFydCA9IG52Lm1vZGVscy5PVFJTbGluZUNoYXJ0KCksCiAgICAgICAgICAg
ICAgICBTaG93TGVnZW5kID0gT3B0aW9ucy5IaWRlTGVnZW5kID8gZmFsc2UgOiB0cnVlOwoKICAg
ICAgICAgICAgLy8gZG9uJ3QgbGV0IG52L2QzIGV4Y2VwdGlvbnMgYmxvY2sgdGhlIHJlc3Qgb2Yg
T1RSUyBKYXZhU2NyaXB0CiAgICAgICAgICAgIHRyeSB7CgogICAgICAgICAgICAgICAgQ2hhcnQu
bWFyZ2luKHsKICAgICAgICAgICAgICAgICAgICB0b3A6IDIwLAogICAgICAgICAgICAgICAgICAg
IHJpZ2h0OiAxMCwKICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwLAogICAgICAgICAgICAg
ICAgICAgIGxlZnQ6IDMwCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBDaGFy
dC51c2VJbnRlcmFjdGl2ZUd1aWRlbGluZSh0cnVlKQogICAgICAgICAgICAgICAgICAgIC5kdXJh
dGlvbihPcHRpb25zLkR1cmF0aW9uIHx8IDApCiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZVhU
aWNrcyhPcHRpb25zLlJlZHVjZVhUaWNrcykKICAgICAgICAgICAgICAgICAgICAuc2hvd0xlZ2Vu
ZChTaG93TGVnZW5kKQogICAgICAgICAgICAgICAgICAgIC5zaG93WUF4aXModHJ1ZSkKICAgICAg
ICAgICAgICAgICAgICAuc2hvd1hBeGlzKHRydWUpOwoKICAgICAgICAgICAgICAgIENoYXJ0LnhB
eGlzLnRpY2tGb3JtYXQoZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBI
ZWFkaW5nc1tkXTsKICAgICAgICAgICAgICAgIH0pOwoKLy8gLS0tCi8vIFBTCi8vIC0tLQovLyAg
ICAgICAgICAgICAgICBDaGFydC54QXhpcy50aWNrVmFsdWVzKFsxLCAyLCAzLCA0LCA1LCA2LCA3
XSk7CiAgICAgICAgICAgICAgICB2YXIgVGlja3MgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMTsgaSA8PSBwYXJzZUludCggT3B0aW9ucy5UaWNrcywgMTAgKTsg
aSsrICkgewogICAgICAgICAgICAgICAgICAgIFRpY2tzLnB1c2goaSk7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgQ2hhcnQueEF4aXMudGlja1ZhbHVlcyhUaWNrcyk7Ci8vIC0t
LQoKICAgICAgICAgICAgICAgIENoYXJ0LnlBeGlzCiAgICAgICAgICAgICAgICAgICAgLnRpY2tG
b3JtYXQoZDMuZm9ybWF0KFZhbHVlRm9ybWF0KSk7CgogICAgICAgICAgICAgICAgZDMuc2VsZWN0
KEVsZW1lbnQpCiAgICAgICAgICAgICAgICAgICAgLmRhdHVtKFJlc3VsdERhdGEpCiAgICAgICAg
ICAgICAgICAgICAgLnRyYW5zaXRpb24oKQogICAgICAgICAgICAgICAgICAgIC5kdXJhdGlvbig1
MDApCiAgICAgICAgICAgICAgICAgICAgLmNhbGwoQ2hhcnQpOwoKICAgICAgICAgICAgICAgIG52
LnV0aWxzLndpbmRvd1Jlc2l6ZShDaGFydC51cGRhdGUpOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIGNhdGNoIChFcnJvcikgewogICAgICAgICAgICAgICAgQ29yZS5EZWJ1Zy5Mb2coRXJyb3Ip
OwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gQ2hhcnQ7CiAgICAgICAgfSk7CiAg
ICB9CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgRHJhd0JhckNoYXJ0CiAg
ICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5BZHZhbmNlZENoYXJ0CiAgICAgKiBAZnVuY3Rpb24KICAg
ICAqIEBwYXJhbSB7QXJyYXl9IFJhd0RhdGEgLSBSYXcgSlNPTiBkYXRhLgogICAgICogQHBhcmFt
IHtET01PYmplY3R9IEVsZW1lbnQgLSBTZWxlY3RvciBvZiB0aGUgKFNWRykgZWxlbWVudCB0byB1
c2UuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gT3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy4K
ICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW09wdGlvbnMuSGlkZUxlZ2VuZF0gLSBEb24ndCBkaXNw
bGF5IHRoZSBsZWdlbmQgKG9wdGlvbmFsKS4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW09wdGlv
bnMuRHVyYXRpb25dIC0gVHJhbnNpdGlvbiBkdXJhdGlvbiBpbiBtcywgZGVmYXVsdCAwIChubyB0
cmFuc2l0aW9uKS4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW09wdGlvbnMuUHJlZmVyZW5jZXNL
ZXldIC0gTmFtZSBvZiBhbiBhZ2VudCBwcmVmZXJlbmNlcyBrZXkgc2F2ZQogICAgICogICAgICBw
ZXJzaXN0ZW50IEQzIHN0YXRpc3RpYyBzZXR0aW5ncyB0byAoY3VycmVudGx5IHVzZWQgZnJvbSB0
aGUgZGFzaGJvYXJkKS4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW09wdGlvbnMuUHJlZmVyZW5j
ZXNEYXRhXSAtIEN1cnJlbnQgdmFsdWUgb2YgdGhlIEQzIHN0YXRpc3RpYyBncmFwaCBzZXR0aW5n
cy4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBJbml0aWFsaXplcyBhbiBudmQzIGNo
YXJ0IHdpdGggZGF0YSBnZW5lcmF0ZWQgYnkgYSBmcm9udGVuZCBtb2R1bGUuCiAgICAgKi8KICAg
IGZ1bmN0aW9uIERyYXdCYXJDaGFydChSYXdEYXRhLCBFbGVtZW50LCBPcHRpb25zKSB7CgogICAg
ICAgIHZhciBIZWFkaW5ncywKICAgICAgICAgICAgUmVzdWx0RGF0YSA9IFtdLAogICAgICAgICAg
ICBWYWx1ZUZvcm1hdCA9ICdkJywgLy8geSBheGlzIGZvcm1hdCBpcyBieSBkZWZhdWx0ICJpbnRl
Z2VyIgogICAgICAgICAgICBQcmVmZXJlbmNlc0tleSA9IE9wdGlvbnMuUHJlZmVyZW5jZXNLZXks
CiAgICAgICAgICAgIFByZWZlcmVuY2VzRGF0YSA9IE9wdGlvbnMuUHJlZmVyZW5jZXNEYXRhLAog
ICAgICAgICAgICBDb3VudGVyID0gMDsKCiAgICAgICAgLy8gRmlyc3QgUmF3RGF0YSBlbGVtZW50
IGlzIG5vdCBuZWVkZWQKICAgICAgICBSYXdEYXRhLnNoaWZ0KCk7CiAgICAgICAgSGVhZGluZ3Mg
PSBSYXdEYXRhLnNoaWZ0KCk7CgogICAgICAgIGlmIChQcmVmZXJlbmNlc0RhdGEgJiYgdHlwZW9m
IFByZWZlcmVuY2VzRGF0YS5CYXIgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIFByZWZl
cmVuY2VzRGF0YSA9IFByZWZlcmVuY2VzRGF0YS5CYXI7CiAgICAgICAgfQogICAgICAgIGVsc2Ug
ewogICAgICAgICAgICBQcmVmZXJlbmNlc0RhdGEgPSB7fTsKICAgICAgICB9CgogICAgICAgICQu
ZWFjaChSYXdEYXRhLCBmdW5jdGlvbihEYXRhSW5kZXgsIERhdGFFbGVtZW50KSB7CiAgICAgICAg
ICAgIHZhciBJbm5lckNvdW50ZXIgPSAwLAogICAgICAgICAgICAgICAgUmVzdWx0TGluZTsKCiAg
ICAgICAgICAgIC8vIElnbm9yZSBzdW0gcm93CiAgICAgICAgICAgIGlmIChEYXRhRWxlbWVudFsw
XSA9PT0gJ1N1bScpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgUmVzdWx0TGluZSA9IHsKICAgICAgICAgICAgICAgIGtleTogRGF0YUVsZW1lbnRb
MF0sCiAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3JzW0NvdW50ZXIgJSBDb2xvcnMubGVuZ3Ro
XSwKICAgICAgICAgICAgICAgIGRpc2FibGVkOiAoUHJlZmVyZW5jZXNEYXRhICYmIFByZWZlcmVu
Y2VzRGF0YS5GaWx0ZXIgJiYgJC5pbkFycmF5KERhdGFFbGVtZW50WzBdLCBQcmVmZXJlbmNlc0Rh
dGEuRmlsdGVyKSA9PT0gLTEpID8gdHJ1ZSA6IGZhbHNlLAogICAgICAgICAgICAgICAgdmFsdWVz
OiBbXQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgJC5lYWNoKEhlYWRpbmdzLCBmdW5jdGlv
bihIZWFkaW5nSW5kZXgsIEhlYWRpbmdFbGVtZW50KXsKICAgICAgICAgICAgICAgIHZhciBWYWx1
ZTsKCiAgICAgICAgICAgICAgICBJbm5lckNvdW50ZXIrKzsKCiAgICAgICAgICAgICAgICAvLyBG
aXJzdCBlbGVtZW50IGlzIHggYXhpcyBsYWJlbAogICAgICAgICAgICAgICAgaWYgKEhlYWRpbmdJ
bmRleCA9PT0gMCl7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgLy8gSWdub3JlIHN1bSBjb2wKICAgICAgICAgICAgICAgIGlmIChI
ZWFkaW5nRWxlbWVudCA9PT0gJ1N1bScpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgVmFsdWUgPSBwYXJzZUZsb2F0KERhdGFF
bGVtZW50W0hlYWRpbmdJbmRleF0pOwoKICAgICAgICAgICAgICAgIGlmIChpc05hTihWYWx1ZSkp
IHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYW5k
IG5vdCBhbiBpbnRlZ2VyCiAgICAgICAgICAgICAgICBpZiAoVmFsdWUgJSAxKSB7CiAgICAgICAg
ICAgICAgICAgICAgVmFsdWVGb3JtYXQgPSAnLDFmJzsgLy8gU2V0IHkgYXhpcyBmb3JtYXQgdG8g
ZmxvYXQKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBudiBkMyBkb2VzIG5v
dCB3b3JrIGNvcnJlY2x5IHdpdGggbm9uIG51bWVyaWMgdmFsdWVzCiAgICAgICAgICAgICAgICAv
LyBiZWNhdXNlIGl0IGNvdWxkIGhhcHBlbiB0aGF0IHggYXhpcyBoZWFkaW5ncyBvY2N1ciBtdWx0
aXBsZQogICAgICAgICAgICAgICAgLy8gdGltZXMgKHN1Y2ggYXMgVGh1IDE4IGZvciB0d28gZGlm
ZmVyZW50IG1vbnRocyksIHdlCiAgICAgICAgICAgICAgICAvLyBhZGQgYSBjdXN0b20gbGFiZWwg
Zm9yIHVuaXF1aXR5IG9mIHRoZSBoZWFkaW5ncyB3aGljaCBpcyBiZWluZwogICAgICAgICAgICAg
ICAgLy8gcmVtb3ZlZCBsYXRlciAoc2VlIE9UUlNtdWx0aUJhckNoYXJ0LmpzKQogICAgICAgICAg
ICAgICAgUmVzdWx0TGluZS52YWx1ZXMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgeDogJ19f
TEFCRUxfU1RBUlRfXycgKyBJbm5lckNvdW50ZXIgKyAnX19MQUJFTF9FTkRfXycgKyBIZWFkaW5n
RWxlbWVudCArICcgJywKICAgICAgICAgICAgICAgICAgICB5OiBWYWx1ZQogICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBSZXN1bHREYXRhLnB1c2goUmVzdWx0
TGluZSk7CiAgICAgICAgICAgIENvdW50ZXIrKzsKICAgICAgICB9KTsKCiAgICAgICAgLy8gcHJv
ZHVjdGlvbiBtb2RlCiAgICAgICAgbnYuZGV2ID0gZmFsc2U7CgogICAgICAgIG52LmFkZEdyYXBo
KGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgdmFyIENoYXJ0ID0gbnYubW9kZWxzLk9UUlNtdWx0
aUJhckNoYXJ0KCksCiAgICAgICAgICAgICAgICBTaG93TGVnZW5kID0gT3B0aW9ucy5IaWRlTGVn
ZW5kID8gZmFsc2UgOiB0cnVlOwoKICAgICAgICAgICAgLy8gZG9uJ3QgbGV0IG52L2QzIGV4Y2Vw
dGlvbnMgYmxvY2sgdGhlIHJlc3Qgb2YgT1RSUyBKYXZhU2NyaXB0CiAgICAgICAgICAgIHRyeSB7
CgogICAgICAgICAgICAgICAgQ2hhcnQuc3RhZ2dlckxhYmVscyh0cnVlKTsKCiAgICAgICAgICAg
ICAgICBDaGFydC5tYXJnaW4oewogICAgICAgICAgICAgICAgICAgIHRvcDogMjAsCiAgICAgICAg
ICAgICAgICAgICAgcmlnaHQ6IDIwLAogICAgICAgICAgICAgICAgICAgIGJvdHRvbTogNTAsCiAg
ICAgICAgICAgICAgICAgICAgbGVmdDogNTAKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAg
ICAgICAgIENoYXJ0LmR1cmF0aW9uKE9wdGlvbnMuRHVyYXRpb24gfHwgMCk7CiAgICAgICAgICAg
ICAgICBDaGFydC5zaG93TGVnZW5kKFNob3dMZWdlbmQpOwoKICAgICAgICAgICAgICAgIENoYXJ0
LnRvb2x0aXBzKGZ1bmN0aW9uKGtleSwgeCwgeSkgewogICAgICAgICAgICAgICAgICAgIHJldHVy
biAnPGgzPicgKyBrZXkgKyAnPC9oMz4nICsgJzxwPicgKyB4ICsgJzogJyArIHkgKyAnPC9wPic7
CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBDaGFydC5kaXNwYXRjaC5vbign
c3RhdGVDaGFuZ2UnLCBmdW5jdGlvbihzdGF0ZSkgewoKICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbiBnZXRDb250cm9sU2VsZWN0aW9uKGNvbnRyb2xTdGF0ZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgQ29udHJvbCA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2go
Y29udHJvbFN0YXRlLCBmdW5jdGlvbiAoS2V5LCBWYWx1ZSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHR5cGVvZiBWYWx1ZS5kaXNhYmxlZCA9PT0gJ3VuZGVmaW5lZCcgfHwgIVZh
bHVlLmRpc2FibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbC5w
dXNoKFZhbHVlLmtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udHJvbDsK
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3Rh
dGUuc3RhY2tlZCAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgVGFy
Z2V0TlMuVXBkYXRlUHJlZmVyZW5jZXMoUHJlZmVyZW5jZXNLZXksIHsgJ0Jhcic6IHsgJ1N0YXRl
JzogeyAnU3R5bGUnOiAoc3RhdGUuc3RhY2tlZCkgPyAnc3RhY2tlZCcgOiAnJyB9IH0gfSk7CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGUu
ZGlzYWJsZWQgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdl
dE5TLlVwZGF0ZVByZWZlcmVuY2VzKFByZWZlcmVuY2VzS2V5LCB7ICdCYXInOiB7ICdGaWx0ZXIn
OiBnZXRDb250cm9sU2VsZWN0aW9uKFJlc3VsdERhdGEpfX0pOwogICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyBzZXQgc3RhY2tlZC9n
cm91cGVkIHN0YXRlCiAgICAgICAgICAgICAgICBpZiAoUHJlZmVyZW5jZXNEYXRhICYmIFByZWZl
cmVuY2VzRGF0YS5TdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIENoYXJ0LnN0YWNrZWQoKFBy
ZWZlcmVuY2VzRGF0YS5TdGF0ZS5TdHlsZSA9PT0gJ3N0YWNrZWQnKSA/IHRydWUgOiBmYWxzZSk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBDaGFydC55QXhpcy5heGlzTGFiZWwo
IlZhbHVlcyIpLnRpY2tGb3JtYXQoZDMuZm9ybWF0KFZhbHVlRm9ybWF0KSk7CgogICAgICAgICAg
ICAgICAgZDMuc2VsZWN0KEVsZW1lbnQpCiAgICAgICAgICAgICAgICAgICAgLmRhdHVtKFJlc3Vs
dERhdGEpCiAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKQogICAgICAgICAgICAgICAg
ICAgIC5kdXJhdGlvbig1MDApCiAgICAgICAgICAgICAgICAgICAgLmNhbGwoQ2hhcnQpOwoKICAg
ICAgICAgICAgICAgIG52LnV0aWxzLndpbmRvd1Jlc2l6ZShDaGFydC51cGRhdGUpOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGNhdGNoIChFcnJvcikgewogICAgICAgICAgICAgICAgQ29yZS5E
ZWJ1Zy5Mb2coRXJyb3IpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gQ2hhcnQ7
CiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUg
RHJhd1N0YWNrZWRBcmVhQ2hhcnQKICAgICAqIEBtZW1iZXJvZiBDb3JlLlVJLkFkdmFuY2VkQ2hh
cnQKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtBcnJheX0gUmF3RGF0YSAtIFJhdyBK
U09OIGRhdGEuCiAgICAgKiBAcGFyYW0ge0RPTU9iamVjdH0gRWxlbWVudCAtIFNlbGVjdG9yIG9m
IHRoZSAoU1ZHKSBlbGVtZW50IHRvIHVzZS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBPcHRpb25z
IC0gQWRkaXRpb25hbCBvcHRpb25zLgogICAgICogQHBhcmFtIHtCb29sZWFufSBbT3B0aW9ucy5I
aWRlTGVnZW5kXSAtIERvbid0IGRpc3BsYXkgdGhlIGxlZ2VuZCAob3B0aW9uYWwpLgogICAgICog
QHBhcmFtIHtCb29sZWFufSBbT3B0aW9ucy5EdXJhdGlvbl0gLSBUcmFuc2l0aW9uIGR1cmF0aW9u
IGluIG1zLCBkZWZhdWx0IDAgKG5vIHRyYW5zaXRpb24pLgogICAgICogQHBhcmFtIHtCb29sZWFu
fSBbT3B0aW9ucy5QcmVmZXJlbmNlc0tleV0gLSBOYW1lIG9mIGFuIGFnZW50IHByZWZlcmVuY2Vz
IGtleSBzYXZlCiAgICAgKiAgICAgIHBlcnNpc3RlbnQgRDMgc3RhdGlzdGljIHNldHRpbmdzIHRv
IChjdXJyZW50bHkgdXNlZCBmcm9tIHRoZSBkYXNoYm9hcmQpLgogICAgICogQHBhcmFtIHtCb29s
ZWFufSBbT3B0aW9ucy5QcmVmZXJlbmNlc0RhdGFdIC0gQ3VycmVudCB2YWx1ZSBvZiB0aGUgRDMg
c3RhdGlzdGljIGdyYXBoIHNldHRpbmdzLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAg
IEluaXRpYWxpemVzIGFuIG52ZDMgY2hhcnQgd2l0aCBkYXRhIGdlbmVyYXRlZCBieSBhIGZyb250
ZW5kIG1vZHVsZS4KICAgICAqLwogICAgZnVuY3Rpb24gRHJhd1N0YWNrZWRBcmVhQ2hhcnQoUmF3
RGF0YSwgRWxlbWVudCwgT3B0aW9ucykgewoKICAgICAgICB2YXIgSGVhZGluZ3MsCiAgICAgICAg
ICAgIFJlc3VsdERhdGEgPSBbXSwKICAgICAgICAgICAgQ291bnRlciA9IDAsCiAgICAgICAgICAg
IFByZWZlcmVuY2VzS2V5ID0gT3B0aW9ucy5QcmVmZXJlbmNlc0tleSwKICAgICAgICAgICAgUHJl
ZmVyZW5jZXNEYXRhID0gT3B0aW9ucy5QcmVmZXJlbmNlc0RhdGE7CgogICAgICAgIC8vIEZpcnN0
IFJhd0RhdGEgZWxlbWVudCBpcyBub3QgbmVlZGVkCiAgICAgICAgUmF3RGF0YS5zaGlmdCgpOwog
ICAgICAgIEhlYWRpbmdzID0gUmF3RGF0YS5zaGlmdCgpOwoKICAgICAgICBpZiAoUHJlZmVyZW5j
ZXNEYXRhICYmIHR5cGVvZiBQcmVmZXJlbmNlc0RhdGEuU3RhY2tlZEFyZWEgIT09ICd1bmRlZmlu
ZWQnKSB7CiAgICAgICAgICAgIFByZWZlcmVuY2VzRGF0YSA9IFByZWZlcmVuY2VzRGF0YS5TdGFj
a2VkQXJlYTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIFByZWZlcmVuY2Vz
RGF0YSA9IHt9OwogICAgICAgIH0KCiAgICAgICAgJC5lYWNoKFJhd0RhdGEsIGZ1bmN0aW9uKERh
dGFJbmRleCwgRGF0YUVsZW1lbnQpIHsKCiAgICAgICAgICAgIHZhciBSZXN1bHRMaW5lOwoKICAg
ICAgICAgICAgLy8gSWdub3JlIHN1bSByb3cKICAgICAgICAgICAgaWYgKERhdGFFbGVtZW50WzBd
ID09PSAnU3VtJykgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAg
ICAgICAgICBSZXN1bHRMaW5lID0gewogICAgICAgICAgICAgICAga2V5OiBEYXRhRWxlbWVudFsw
XSwKICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcnNbQ291bnRlciAlIENvbG9ycy5sZW5ndGhd
LAogICAgICAgICAgICAgICAgZGlzYWJsZWQ6IChQcmVmZXJlbmNlc0RhdGEgJiYgUHJlZmVyZW5j
ZXNEYXRhLkZpbHRlciAmJiAkLmluQXJyYXkoRGF0YUVsZW1lbnRbMF0sIFByZWZlcmVuY2VzRGF0
YS5GaWx0ZXIpID09PSAtMSkgPyB0cnVlIDogZmFsc2UsCiAgICAgICAgICAgICAgICB2YWx1ZXM6
IFtdCiAgICAgICAgICAgIH07CgogICAgICAgICAgICAkLmVhY2goSGVhZGluZ3MsIGZ1bmN0aW9u
KEhlYWRpbmdJbmRleCwgSGVhZGluZ0VsZW1lbnQpewogICAgICAgICAgICAgICAgdmFyIFZhbHVl
OwogICAgICAgICAgICAgICAgLy8gRmlyc3QgZWxlbWVudCBpcyB4IGF4aXMgbGFiZWwKICAgICAg
ICAgICAgICAgIGlmIChIZWFkaW5nSW5kZXggPT09IDApewogICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIElnbm9yZSBzdW0gY29s
CiAgICAgICAgICAgICAgICBpZiAoSGVhZGluZ0VsZW1lbnQgPT09ICdTdW0nKSB7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIFZh
bHVlID0gcGFyc2VGbG9hdChEYXRhRWxlbWVudFtIZWFkaW5nSW5kZXhdKTsKCiAgICAgICAgICAg
ICAgICBpZiAoaXNOYU4oVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIG52IGQzIGRvZXMgbm90IHdvcmsgY29y
cmVjbHkgd2l0aCBub24gbnVtZXJpYyB2YWx1ZXMKICAgICAgICAgICAgICAgIFJlc3VsdExpbmUu
dmFsdWVzLnB1c2goWwogICAgICAgICAgICAgICAgICAgIEhlYWRpbmdJbmRleCwKICAgICAgICAg
ICAgICAgICAgICBWYWx1ZQogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICBSZXN1bHREYXRhLnB1c2goUmVzdWx0TGluZSk7CiAgICAgICAgICAgIENvdW50ZXIr
KzsKICAgICAgICB9KTsKCiAgICAgICAgLy8gcHJvZHVjdGlvbiBtb2RlCiAgICAgICAgbnYuZGV2
ID0gZmFsc2U7CgogICAgICAgIG52LmFkZEdyYXBoKGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAg
dmFyIENoYXJ0ID0gbnYubW9kZWxzLk9UUlNzdGFja2VkQXJlYUNoYXJ0KCksCiAgICAgICAgICAg
ICAgICBTaG93TGVnZW5kID0gT3B0aW9ucy5IaWRlTGVnZW5kID8gZmFsc2UgOiB0cnVlOwoKICAg
ICAgICAgICAgLy8gZG9uJ3QgbGV0IG52L2QzIGV4Y2VwdGlvbnMgYmxvY2sgdGhlIHJlc3Qgb2Yg
T1RSUyBKYXZhU2NyaXB0CiAgICAgICAgICAgIHRyeSB7CgogICAgICAgICAgICAgICAgQ2hhcnQu
c3RhZ2dlckxhYmVscyh0cnVlKTsKCiAgICAgICAgICAgICAgICBDaGFydC5tYXJnaW4oewogICAg
ICAgICAgICAgICAgICAgIHRvcDogMjAsCiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDUwLAog
ICAgICAgICAgICAgICAgICAgIGJvdHRvbTogNTAsCiAgICAgICAgICAgICAgICAgICAgbGVmdDog
NTAKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIENoYXJ0LmR1cmF0aW9uKE9w
dGlvbnMuRHVyYXRpb24gfHwgMCk7CiAgICAgICAgICAgICAgICBDaGFydC5zaG93TGVnZW5kKFNo
b3dMZWdlbmQpOwoKICAgICAgICAgICAgICAgIENoYXJ0LnVzZUludGVyYWN0aXZlR3VpZGVsaW5l
KHRydWUpOwoKICAgICAgICAgICAgICAgIENoYXJ0LmRpc3BhdGNoLm9uKCdzdGF0ZUNoYW5nZScs
IGZ1bmN0aW9uKHN0YXRlKSB7CgogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldENvbnRy
b2xTZWxlY3Rpb24oY29udHJvbFN0YXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBD
b250cm9sID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChjb250cm9sU3RhdGUs
IGZ1bmN0aW9uIChLZXksIFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dHlwZW9mIFZhbHVlLmRpc2FibGVkID09PSAndW5kZWZpbmVkJyB8fCAhVmFsdWUuZGlzYWJsZWQp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sLnB1c2goVmFsdWUua2V5
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250cm9sOwogICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZS5zdHlsZSAhPT0g
J3VuZGVmaW5lZCcgfHwgdHlwZW9mIHN0YXRlLmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykgewog
ICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXROUy5VcGRhdGVQcmVmZXJlbmNlcyhQcmVmZXJl
bmNlc0tleSwgeyAnU3RhY2tlZEFyZWEnOiB7ICdTdGF0ZSc6IHsgJ1N0eWxlJzogc3RhdGUuc3R5
bGUgfSwgJ0ZpbHRlcic6IGdldENvbnRyb2xTZWxlY3Rpb24oUmVzdWx0RGF0YSl9fSk7CiAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIENo
YXJ0LngoZnVuY3Rpb24oZCkgeyByZXR1cm4gZFswXTsgfSkKICAgICAgICAgICAgICAgICAgICAu
eShmdW5jdGlvbihkKSB7IHJldHVybiBkWzFdOyB9KQogICAgICAgICAgICAgICAgICAgIC5zaG93
Q29udHJvbHModHJ1ZSkKICAgICAgICAgICAgICAgICAgICAuY2xpcEVkZ2UodHJ1ZSk7CgogICAg
ICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBzdW0gZWxlbWVudAogICAgICAgICAgICAgICAgSGVh
ZGluZ3NbSGVhZGluZ3MuaW5kZXhPZignU3VtJyldID0gdW5kZWZpbmVkOwoKICAgICAgICAgICAg
ICAgIC8vIHNldCBzdGFja2VkL2dyb3VwZWQgc3RhdGUKICAgICAgICAgICAgICAgIGlmIChQcmVm
ZXJlbmNlc0RhdGEgJiYgUHJlZmVyZW5jZXNEYXRhLlN0YXRlICYmIFByZWZlcmVuY2VzRGF0YS5T
dGF0ZS5TdHlsZSkgewogICAgICAgICAgICAgICAgICAgIENoYXJ0LnN0eWxlKFByZWZlcmVuY2Vz
RGF0YS5TdGF0ZS5TdHlsZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8g
eEF4aXMgc2hvdWxkIGhhdmUgdGhlIGRhdGEgZnJvbSByYXdkYXRhIGFzIGxhYmVscwogICAgICAg
ICAgICAgICAgQ2hhcnQueEF4aXMKICAgICAgICAgICAgICAgICAgICAudGlja0Zvcm1hdChmdW5j
dGlvbihkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBIZWFkaW5nc1tkXTsKICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIENoYXJ0LnlBeGlzCiAgICAgICAg
ICAgICAgICAgICAgLnRpY2tGb3JtYXQoZDMuZm9ybWF0KCcsLjBmJykpOwoKICAgICAgICAgICAg
ICAgIGQzLnNlbGVjdChFbGVtZW50KQogICAgICAgICAgICAgICAgICAgIC5kYXR1bShSZXN1bHRE
YXRhKQogICAgICAgICAgICAgICAgICAgIC5jYWxsKENoYXJ0KTsKCiAgICAgICAgICAgICAgICBu
di51dGlscy53aW5kb3dSZXNpemUoQ2hhcnQudXBkYXRlKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgICBjYXRjaCAoRXJyb3IpIHsKICAgICAgICAgICAgICAgIENvcmUuRGVidWcuTG9nKEVycm9y
KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIENoYXJ0OwogICAgICAgIH0pOwog
ICAgfQoKICAgIC8qKgogICAgICogQG5hbWUgSW5pdAogICAgICogQG1lbWJlcm9mIENvcmUuVUku
QWR2YW5jZWRDaGFydAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gVHlw
ZSAtIFR5cGUgb2YgdGhlIGNoYXJ0LCBlLmcuIEJhciwgTGluZSwgU3RhY2tlZEFyZWEsIGV0Yy4K
ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBSYXdEYXRhIC0gUmF3IEpTT04gZGF0YS4KICAgICAqIEBw
YXJhbSB7RE9NT2JqZWN0fSBFbGVtZW50IC0gU2VsZWN0b3Igb2YgdGhlIChTVkcpIGVsZW1lbnQg
dG8gdXNlLgogICAgICogQHBhcmFtIHtPYmplY3R9IE9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlv
bnMuCiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtPcHRpb25zLkhpZGVMZWdlbmRdIC0gRG9uJ3Qg
ZGlzcGxheSB0aGUgbGVnZW5kIChvcHRpb25hbCkuCiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtP
cHRpb25zLkR1cmF0aW9uXSAtIFRyYW5zaXRpb24gZHVyYXRpb24gaW4gbXMsIGRlZmF1bHQgMCAo
bm8gdHJhbnNpdGlvbikuCiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtPcHRpb25zLlByZWZlcmVu
Y2VzS2V5XSAtIE5hbWUgb2YgYW4gYWdlbnQgcHJlZmVyZW5jZXMga2V5IHNhdmUKICAgICAqICAg
ICAgcGVyc2lzdGVudCBEMyBzdGF0aXN0aWMgc2V0dGluZ3MgdG8gKGN1cnJlbnRseSB1c2VkIGZy
b20gdGhlIGRhc2hib2FyZCkuCiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtPcHRpb25zLlByZWZl
cmVuY2VzRGF0YV0gLSBDdXJyZW50IHZhbHVlIG9mIHRoZSBEMyBzdGF0aXN0aWMgZ3JhcGggc2V0
dGluZ3MuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgSW5pdGlhbGl6ZXMgYSBjaGFy
dC4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uKFR5cGUsIFJhd0RhdGEsIEVs
ZW1lbnQsIE9wdGlvbnMpIHsKICAgICAgICBPcHRpb25zID0gT3B0aW9ucyB8fCB7fTsKICAgICAg
ICBzd2l0Y2ggKFR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnQmFyJzoKICAgICAgICAgICAgY2Fz
ZSAnRDM6OkJhckNoYXJ0JzoKICAgICAgICAgICAgICAgIERyYXdCYXJDaGFydChSYXdEYXRhLCBF
bGVtZW50LCBPcHRpb25zKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNl
ICdEMzo6U2ltcGxlTGluZUNoYXJ0JzoKICAgICAgICAgICAgICAgIERyYXdTaW1wbGVMaW5lQ2hh
cnQoUmF3RGF0YSwgRWxlbWVudCwgT3B0aW9ucyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgY2FzZSAnU3RhY2tlZEFyZWEnOgogICAgICAgICAgICBjYXNlICdEMzo6U3RhY2tl
ZEFyZWFDaGFydCc6CiAgICAgICAgICAgICAgICBEcmF3U3RhY2tlZEFyZWFDaGFydChSYXdEYXRh
LCBFbGVtZW50LCBPcHRpb25zKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBj
YXNlICdMaW5lJzoKICAgICAgICAgICAgY2FzZSAnRDM6OkxpbmVDaGFydCc6CiAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBEcmF3TGluZUNoYXJ0KFJhd0RhdGEsIEVsZW1lbnQs
IE9wdGlvbnMpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KioKICAgICAqIEBuYW1lIEdldFNWR0NvbnRlbnQKICAgICAqIEBtZW1iZXJvZiBDb3JlLlVJLkFk
dmFuY2VkQ2hhcnQKICAgICAqIEBwcml2YXRlCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJh
bSB7alF1ZXJ5T2JqZWN0fSAkU1ZHQ29udGFpbmVyIC0gVGhlIGVsZW1lbnQgY29udGFpbmluZyB0
aGUgU1ZHIGVsZW1lbnQuIFRoZXJlIHNob3VsZCBiZSBubyBvdGhlciBjb250ZW50LgogICAgICog
QHJldHVybiB7U3RyaW5nfSAtIFRoZSBwcmVwYXJlZCBTVkcgY29udGVudCBhcyBhIHN0cmluZy4K
ICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIG1ldGhvZCBzZXJpYWxpemVzIFNW
RyBmcm9tIHRoZSBET00gdG8gYSBzdHJpbmcuIEZvciB0aGlzIHB1cnBvc2UsCiAgICAgKiAgICAg
IHNvbWUgYXR0cmlidXRlcyBjb21pbmcgZnJvbSBDU1MgYXJlIGFjdHVhbGx5IHNldCBhbHNvIGlu
IHRoZSBTVkcgZWxlbWVudHMKICAgICAqICAgICAgc28gdGhhdCBmb3IgZXhwb3J0IC8gcmVuZGVy
aW5nIHRoZXkgYXJlIHByZXNlbnQgZXZlbiBpZiB0aGUgQ1NTIGlzIG5vdCB0aGVyZQogICAgICog
ICAgICBhbnkgbW9yZS4KICAgICAqLwogICAgZnVuY3Rpb24gR2V0U1ZHQ29udGVudCgkU1ZHQ29u
dGFpbmVyKSB7CiAgICAgICAgdmFyICRDbG9uZSwKICAgICAgICAgICAgUmVwbGFjZU1hcCA9IHsK
ICAgICAgICAgICAgJ3RleHQnOiBbJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZSddLAogICAgICAg
ICAgICAnbGluZSc6IFsnZmlsbCcsICdzdHJva2UnLCAnb3BhY2l0eScsICdzaGFwZS1yZW5kZXJp
bmcnLCAnc3Ryb2tlLW9wYWNpdHknXSwKICAgICAgICAgICAgJ3BhdGgnOiBbJ2ZpbGwnLCAnc3Ry
b2tlJywgJ29wYWNpdHknLCAnc2hhcGUtcmVuZGVyaW5nJywgJ3N0cm9rZS1vcGFjaXR5J10KICAg
ICAgICB9OwoKICAgICAgICAkLmVhY2goUmVwbGFjZU1hcCwgZnVuY3Rpb24oU2VsZWN0b3IsIEF0
dHJpYnV0ZXMpewogICAgICAgICAgICAkKFNlbGVjdG9yLCAkU1ZHQ29udGFpbmVyKS5lYWNoKGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyICRFbGVtZW50ID0gJCh0aGlzKTsKICAgICAg
ICAgICAgICAgICQuZWFjaChBdHRyaWJ1dGVzLCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAg
ICAgIHZhciBDU1NBdHRyaWJ1dGU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRFbGVtZW50LmF0
dHIodGhpcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBDU1NBdHRyaWJ1dGUgPSAkRWxlbWVudC5jc3Mo
dGhpcyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFDU1NBdHRyaWJ1dGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAkRWxlbWVudC5hdHRyKHRoaXMsIENTU0F0dHJpYnV0ZSk7CiAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIFJlbW92ZSBjb250
cm9scyBmb3IgZXhwb3J0LgogICAgICAgICRDbG9uZSA9ICRTVkdDb250YWluZXIuY2xvbmUoKTsK
ICAgICAgICAkQ2xvbmUuZmluZCgnLm52LWNvbnRyb2xzV3JhcCcpLnJlbW92ZSgpOwoKICAgICAg
ICByZXR1cm4gJENsb25lLmh0bWwoKS50cmltKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbmFt
ZSBDb252ZXJ0U1ZHdG9QTkcKICAgICAqIEBtZW1iZXJvZiBDb3JlLlVJLkFkdmFuY2VkQ2hhcnQK
ICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9ICRTVkdDb250YWlu
ZXIgLSBUaGUgZWxlbWVudCBjb250YWluaW5nIHRoZSBTVkcgZWxlbWVudC4gVGhlcmUgc2hvdWxk
IGJlIG5vIG90aGVyIGNvbnRlbnQuCiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IC0gVGhlIGJhc2U2
NCBkYXRhIFVSTCBjb250YWluaW5nIHRoZSBQTkcgZGF0YS4KICAgICAqIEBkZXNjcmlwdGlvbgog
ICAgICogICAgICBDb252ZXJ0IGFuIFNWRyBlbGVtZW50IHRvIGEgUE5HIGRhdGEgVVJMLgogICAg
ICovCiAgICBUYXJnZXROUy5Db252ZXJ0U1ZHdG9QTkcgPSBmdW5jdGlvbigkU1ZHQ29udGFpbmVy
KSB7CgogICAgICAgIHZhciBTVkdDb250ZW50ID0gR2V0U1ZHQ29udGVudCgkU1ZHQ29udGFpbmVy
KSwgLy8gQ2FudmcgcmVxdWlyZXMgdHJpbW1lZCBjb250ZW50CiAgICAgICAgICAgIEhlaWdodCA9
ICRTVkdDb250YWluZXIuY3NzKCdoZWlnaHQnKSwKICAgICAgICAgICAgV2lkdGggPSAkU1ZHQ29u
dGFpbmVyLmNzcygnd2lkdGgnKSwKICAgICAgICAgICAgJENhbnZhc0NvbnRhaW5lciwKICAgICAg
ICAgICAgJENhbnZhcywKICAgICAgICAgICAgJENhbnZhczIsCiAgICAgICAgICAgIENhbnZhczJD
b250ZXh0OwoKICAgICAgICAkQ2FudmFzID0gJCgnPGNhbnZhcz48L2NhbnZhcz4nKS5hdHRyKCdo
ZWlnaHQnLCBIZWlnaHQpLmF0dHIoJ3dpZHRoJywgV2lkdGgpOwogICAgICAgICRDYW52YXMyID0g
JCgnPGNhbnZhcz48L2NhbnZhcz4nKS5hdHRyKCdoZWlnaHQnLCBIZWlnaHQpLmF0dHIoJ3dpZHRo
JywgV2lkdGgpOwoKICAgICAgICAkQ2FudmFzQ29udGFpbmVyID0gJCgnPGRpdiBzdHlsZT0icG9z
aXRpb246IGFic29sdXRlOyB0b3A6IDA7IHZpc2liaWxpdHk6IGhpZGRlbjsiPjwvZGl2PicpCiAg
ICAgICAgICAgIC5hcHBlbmQoJENhbnZhcykKICAgICAgICAgICAgLmFwcGVuZCgkQ2FudmFzMikK
ICAgICAgICAgICAgLmFwcGVuZFRvKCdib2R5Jyk7CgogICAgICAgIC8vIEZpcnN0IHRyYW5zZmVy
IHRoZSBTVkcgY29udGVudCB0byB0aGUgZmlyc3QgY2FudmFzLiBUaGlzIHdpbGwgYmUgdHJhbnNw
YXJlbnQuCiAgICAgICAgY2FudmcoCiAgICAgICAgICAgICRDYW52YXMuZ2V0KDApLAogICAgICAg
ICAgICBTVkdDb250ZW50LAogICAgICAgICAgICB7IGlnbm9yZU1vdXNlOiB0cnVlLCBpZ25vcmVB
bmltYXRpb25zOiB0cnVlIH0KICAgICAgICApOwogICAgICAgICRDYW52YXMuZ2V0KDApLnN2Zy5z
dG9wKCk7CgogICAgICAgIC8vIE5vdyB0cmFuc2ZlciBjb250ZW50IG9mIGZpcnN0IGNhbnZhcyB0
byBzZWNvbmQgY2FudmFzIHdpdGggd2hpdGUgYmFja2dyb3VuZC4KICAgICAgICBDYW52YXMyQ29u
dGV4dCA9ICRDYW52YXMyLmdldCgwKS5nZXRDb250ZXh0KCcyZCcpOwogICAgICAgIENhbnZhczJD
b250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CiAgICAgICAgQ2FudmFzMkNvbnRleHQuZmlsbFJl
Y3QoMCwgMCwgV2lkdGgucmVwbGFjZSgncHgnLCAnJyksIEhlaWdodC5yZXBsYWNlKCdweCcsICcn
KSk7CiAgICAgICAgQ2FudmFzMkNvbnRleHQuZHJhd0ltYWdlKCRDYW52YXMuZ2V0KDApLCAwLCAw
KTsKCiAgICAgICAgJENhbnZhc0NvbnRhaW5lci5yZW1vdmUoKTsKICAgICAgICByZXR1cm4gJENh
bnZhczIuZ2V0KDApLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7CiAgICB9OwoKICAgIC8qKgogICAg
ICogQG5hbWUgQ29udmVydFNWR3RvQmFzZTY0CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5BZHZh
bmNlZENoYXJ0CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAk
U1ZHQ29udGFpbmVyIC0gVGhlIGVsZW1lbnQgY29udGFpbmluZyB0aGUgU1ZHIGVsZW1lbnQuIFRo
ZXJlIHNob3VsZCBiZSBubyBvdGhlciBjb250ZW50LgogICAgICogQHJldHVybiB7U3RyaW5nfSAt
IFRoZSBiYXNlNjQgZGF0YSBVUkwgY29udGFpbmluZyB0aGUgU1ZHIGRhdGEgd2l0aCBhIHByb3Bl
ciBYTUwgaGVhZGVyLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIENvbnZlcnQgYW4g
U1ZHIGVsZW1lbnQgdG8gYW4gU1ZHIGRhdGEgVVJMLgogICAgICovCiAgICBUYXJnZXROUy5Db252
ZXJ0U1ZHdG9CYXNlNjQgPSBmdW5jdGlvbigkU1ZHQ29udGFpbmVyKSB7CiAgICAgICAgLy8gd2lu
ZG93LmJ0b2EoKSBkb2VzIG5vdCB3b3JrIGJlY2F1c2UgaXQgZG9lcyBub3Qgc3VwcG9ydCBVbmlj
b2RlIERPTSBzdHJpbmdzLgogICAgICAgIHZhciBTVkdQcmVmaXggPSAnPD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQg
U1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcx
MS5kdGQiPicsCiAgICAgICAgICAgIFVuaWNvZGVTdHJpbmdWaWV3ID0gbmV3IFN0cmluZ1ZpZXco
U1ZHUHJlZml4ICsgR2V0U1ZHQ29udGVudCgkU1ZHQ29udGFpbmVyKSk7CiAgICAgICAgcmV0dXJu
ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcgKyBVbmljb2RlU3RyaW5nVmlldy50b0Jhc2U2
NCgpOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oQ29yZS5VSS5BZHZhbmNlZENoYXJ0
IHx8IHt9KSk7Cg==
2018-06-19 06:55:30otrs5s