r252783 - in imsvdex/trunk/imsvdex: . tests

"Tom Gross" <svn-changes-z4DKO/[email protected]> Tue, 27 May 2014 09:48:33 +0000 (UTC)
Newsgroups gmane.comp.web.zope.plone.collective.cvs
Message-ID <[email protected]>
QXV0aG9yOiB0b21fZ3Jvc3MKRGF0ZTogVHVlIE1heSAyNyAwOTo0ODozMyAyMDE0Ck5ldyBSZXZp
c2lvbjogMjUyNzgzCgpNb2RpZmllZDoKICAgaW1zdmRleC90cnVuay9pbXN2ZGV4L3Rlc3RzL3Rl
c3QueG1sCiAgIGltc3ZkZXgvdHJ1bmsvaW1zdmRleC92ZGV4LnB5CkxvZzoKRU9MCgoKTW9kaWZp
ZWQ6IGltc3ZkZXgvdHJ1bmsvaW1zdmRleC90ZXN0cy90ZXN0LnhtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGltc3ZkZXgvdHJ1bmsvaW1zdmRleC90ZXN0cy90ZXN0LnhtbAkob3JpZ2luYWwp
CisrKyBpbXN2ZGV4L3RydW5rL2ltc3ZkZXgvdGVzdHMvdGVzdC54bWwJVHVlIE1heSAyNyAwOTo0
ODozMyAyMDE0CkBAIC0xLDQwICsxLDQwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJ1dGYtOCI/PgotPHZkZXggeG1sbnM9Imh0dHA6Ly93d3cuaW1zZ2xvYmFsLm9yZy94c2QvaW1z
dmRleF92MXAwIiB4bWxuczp6PSJuczp6dWNjYXJvLmJpYmxoZXJ0ei5pdCIgb3JkZXJTaWduaWZp
Y2FudD0iZmFsc2UiPgotCTx2b2NhYk5hbWU+Ci0JCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJkZSI+
UGVyc29uPC9sYW5nc3RyaW5nPgotCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZW4iPlBlcnNvbjwv
bGFuZ3N0cmluZz4KLQkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9Iml0Ij5QZXJzb25hPC9sYW5nc3Ry
aW5nPgotCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZnIiPlBlcnNvbmFnZTwvbGFuZ3N0cmluZz4K
LQk8L3ZvY2FiTmFtZT4KLQk8dm9jYWJJZGVudGlmaWVyPml0LmJpYmxoZXJ0ei56dWNjYXJvLnZv
Y2Ficy5wZXJzb25fcGVyc29uPC92b2NhYklkZW50aWZpZXI+Ci0JPHRlcm0+Ci0JCTx0ZXJtSWRl
bnRpZmllcj5pZGVudGljYWw8L3Rlcm1JZGVudGlmaWVyPgotCQk8Y2FwdGlvbj4KLQkJCTxsYW5n
c3RyaW5nIGxhbmd1YWdlPSJlbiI+aXMgaWRlbnRpY2FsIHdpdGg8L2xhbmdzdHJpbmc+Ci0JCQk8
bGFuZ3N0cmluZyBsYW5ndWFnZT0iaXQiPsOoIGlkZW50aWNvIGNvbjwvbGFuZ3N0cmluZz4KLQkJ
CTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJmciI+ZXN0IGlkZW50aXF1ZSBhdmVjPC9sYW5nc3RyaW5n
PgotCQk8L2NhcHRpb24+Ci0JCTxkZXNjcmlwdGlvbi8+Ci0JCTx6OnRlc3Q+U2NoYXM8L3o6dGVz
dD4KLQk8L3Rlcm0+Ci0JPHRlcm0+Ci0JCTx0ZXJtSWRlbnRpZmllcj5yZWxhdGl2ZTwvdGVybUlk
ZW50aWZpZXI+Ci0JCTxjYXB0aW9uPgotCQkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9ImRlIj5pc3Qg
dmVyd2FuZHQgbWl0PC9sYW5nc3RyaW5nPgotCQkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9ImVuIj5p
cyByZWxhdGl2ZSBvZjwvbGFuZ3N0cmluZz4KLQkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJpdCI+
w6ggcGFyZW50ZSBkaTwvbGFuZ3N0cmluZz4KLQkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJmciI+
ZXN0IHBhcmVudCBhdmVjPC9sYW5nc3RyaW5nPgotCQk8L2NhcHRpb24+Ci0JCTxkZXNjcmlwdGlv
bi8+Ci0JCTx0ZXJtPgotCQkJPHRlcm1JZGVudGlmaWVyPmNoaWxkPC90ZXJtSWRlbnRpZmllcj4K
LQkJCTxjYXB0aW9uPgotCQkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJkZSI+aXN0IEtpbmQgdm9u
PC9sYW5nc3RyaW5nPgotCQkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJlbiI+aXMgY2hpbGQgb2Y8
L2xhbmdzdHJpbmc+Ci0JCQkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9Iml0Ij7DqCBwcm9sZSBkaTwv
bGFuZ3N0cmluZz4KLQkJCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZnIiPmVzdCBlbmZhbnQgZGU8
L2xhbmdzdHJpbmc+Ci0JCQk8L2NhcHRpb24+Ci0JCQk8ZGVzY3JpcHRpb24vPgotCQk8L3Rlcm0+
Ci0JPC90ZXJtPgotPC92ZGV4PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgi
Pz4KKzx2ZGV4IHhtbG5zPSJodHRwOi8vd3d3Lmltc2dsb2JhbC5vcmcveHNkL2ltc3ZkZXhfdjFw
MCIgeG1sbnM6ej0ibnM6enVjY2Fyby5iaWJsaGVydHouaXQiIG9yZGVyU2lnbmlmaWNhbnQ9ImZh
bHNlIj4KKwk8dm9jYWJOYW1lPgorCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZGUiPlBlcnNvbjwv
bGFuZ3N0cmluZz4KKwkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9ImVuIj5QZXJzb248L2xhbmdzdHJp
bmc+CisJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJpdCI+UGVyc29uYTwvbGFuZ3N0cmluZz4KKwkJ
PGxhbmdzdHJpbmcgbGFuZ3VhZ2U9ImZyIj5QZXJzb25hZ2U8L2xhbmdzdHJpbmc+CisJPC92b2Nh
Yk5hbWU+CisJPHZvY2FiSWRlbnRpZmllcj5pdC5iaWJsaGVydHouenVjY2Fyby52b2NhYnMucGVy
c29uX3BlcnNvbjwvdm9jYWJJZGVudGlmaWVyPgorCTx0ZXJtPgorCQk8dGVybUlkZW50aWZpZXI+
aWRlbnRpY2FsPC90ZXJtSWRlbnRpZmllcj4KKwkJPGNhcHRpb24+CisJCQk8bGFuZ3N0cmluZyBs
YW5ndWFnZT0iZW4iPmlzIGlkZW50aWNhbCB3aXRoPC9sYW5nc3RyaW5nPgorCQkJPGxhbmdzdHJp
bmcgbGFuZ3VhZ2U9Iml0Ij7DqCBpZGVudGljbyBjb248L2xhbmdzdHJpbmc+CisJCQk8bGFuZ3N0
cmluZyBsYW5ndWFnZT0iZnIiPmVzdCBpZGVudGlxdWUgYXZlYzwvbGFuZ3N0cmluZz4KKwkJPC9j
YXB0aW9uPgorCQk8ZGVzY3JpcHRpb24vPgorCQk8ejp0ZXN0PlNjaGFzPC96OnRlc3Q+CisJPC90
ZXJtPgorCTx0ZXJtPgorCQk8dGVybUlkZW50aWZpZXI+cmVsYXRpdmU8L3Rlcm1JZGVudGlmaWVy
PgorCQk8Y2FwdGlvbj4KKwkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJkZSI+aXN0IHZlcndhbmR0
IG1pdDwvbGFuZ3N0cmluZz4KKwkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJlbiI+aXMgcmVsYXRp
dmUgb2Y8L2xhbmdzdHJpbmc+CisJCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iaXQiPsOoIHBhcmVu
dGUgZGk8L2xhbmdzdHJpbmc+CisJCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZnIiPmVzdCBwYXJl
bnQgYXZlYzwvbGFuZ3N0cmluZz4KKwkJPC9jYXB0aW9uPgorCQk8ZGVzY3JpcHRpb24vPgorCQk8
dGVybT4KKwkJCTx0ZXJtSWRlbnRpZmllcj5jaGlsZDwvdGVybUlkZW50aWZpZXI+CisJCQk8Y2Fw
dGlvbj4KKwkJCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZGUiPmlzdCBLaW5kIHZvbjwvbGFuZ3N0
cmluZz4KKwkJCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZW4iPmlzIGNoaWxkIG9mPC9sYW5nc3Ry
aW5nPgorCQkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJpdCI+w6ggcHJvbGUgZGk8L2xhbmdzdHJp
bmc+CisJCQkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9ImZyIj5lc3QgZW5mYW50IGRlPC9sYW5nc3Ry
aW5nPgorCQkJPC9jYXB0aW9uPgorCQkJPGRlc2NyaXB0aW9uLz4KKwkJPC90ZXJtPgorCTwvdGVy
bT4KKzwvdmRleD4KCk1vZGlmaWVkOiBpbXN2ZGV4L3RydW5rL2ltc3ZkZXgvdmRleC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGltc3ZkZXgvdHJ1bmsvaW1zdmRleC92ZGV4LnB5CShvcmln
aW5hbCkKKysrIGltc3ZkZXgvdHJ1bmsvaW1zdmRleC92ZGV4LnB5CVR1ZSBNYXkgMjcgMDk6NDg6
MzMgMjAxNApAQCAtMSw1MTEgKzEsNTExIEBACi0jIEZpbGU6IHZkZXgucHkKLSMKLSMgQ29weXJp
Z2h0IChjKSAyMDA3LTIwMDggYnkgTWFydGluIFJhc3BlCi0jIEJpYmxpb3RoZWNhIEhlcnR6aWFu
YSAoTWF4LVBsYW5jay1JbnN0aXR1dGUgZm9yIEFydCBIaXN0b3J5KSwgUm9tZSwgSXRhbHkKLSMg
VGhpcyBjb2RlIHdhcyB3cml0dGVuIGZvciB0aGUgWlVDQ0FSTyBQcm9qZWN0Ci0jIHNlZSBodHRw
Oi8venVjY2Fyby5iaWJsaGVydHouaXQKLSMKLSMgR2VybWFuIEZyZWUgU29mdHdhcmUgTGljZW5z
ZSAoRC1GU0wpCi0jCi0jIFRoaXMgUHJvZ3JhbSBtYXkgYmUgdXNlZCBieSBhbnlvbmUgaW4gYWNj
b3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGUgCi0jIEdlcm1hbiBGcmVlIFNvZnR3YXJlIExp
Y2Vuc2UKLSMgVGhlIExpY2Vuc2UgbWF5IGJlIG9idGFpbmVkIHVuZGVyIDxodHRwOi8vd3d3LmQt
ZnNsLm9yZz4uCi0KLSMKLQotX19hdXRob3JfXyA9ICdNYXJ0aW4gUmFzcGUsIEplbnMgS2xlaW4n
Ci1fX2RvY2Zvcm1hdF9fID0gJ3BsYWludGV4dCcKLQotaW1wb3J0IHN0cmluZwotZnJvbSB0eXBl
cyBpbXBvcnQgU3RyaW5nVHlwZXMKLWZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCi0KLWZy
b20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IEV4cGF0RXJyb3IKLWZyb20gY29sbGVjdGlvbnMg
aW1wb3J0IE9yZGVyZWREaWN0Ci0KLWZyb20gbHhtbCBpbXBvcnQgZXRyZWUKLQotVkRFWF9GTEFU
X1BST0ZJTEVfVFlQRVMgPSAoJ3RoZXNhdXJ1cycsICdnbG9zc2FyeU9yRGljdGlvbmFyeScsICdm
bGF0VG9rZW5UZXJtcycpCi1UUlVFX1ZBTFVFUyA9ICgnMScsICd0cnVlJywgJ1RydWUnLCAneWVz
JywgJ1llcycpCi1GQUxTRV9WQUxVRVMgPSAoJycsICcwJywgJ2ZhbHNlJywgJ0ZhbHNlJywgJ25v
JywgJ05vJykKLQotY2xhc3MgVkRFWEVycm9yKEV4Y2VwdGlvbik6Ci0gICAgIiIiCi0gICAgRGVu
b3RlcyBhbiBlcnJvciB3aGlsZSBoYW5kbGluZyBhbiBJTVMtVkRFWCB2b2NhYnVsYXJ5IHdpdGgg
YSBWREVYTWFuYWdlcgotICAgICIiIgotCi1jbGFzcyBWREVYTWFuYWdlcihvYmplY3QpOgotICAg
ICIiIgotCVJlYWRzIGFuIElNUy1WREVYIHZvY2FidWxhcnkgYW5kIGNvbnN0cnVjdHMgYSBWb2Nh
YnVsYXJ5RGljdCBmb3IgQXJjaGVUeXBlcy4KLQkgIFNlZSAiSU1TIFZvY2FidWxhcnkgRGVmaW5p
dGlvbiBFeGNoYW5nZSI6IGh0dHA6Ly93d3cuaW1zZ2xvYmFsLm9yZy92ZGV4Ly4KLSAgICAgIFhN
TCBiaW5kaW5nOiBodHRwOi8vd3d3Lmltc2dsb2JhbC5vcmcvdmRleC92ZGV4djFwMC9pbXN2ZGV4
X2JpbmR2MXAwLmh0bWwKLSAgICAgIE5vdCB5ZXQgc3VwcG9ydGVkOgotICAgICAgICAgIHRlcm0v
bWVkaWFkZXNjcmlwdG9yIGVsZW1lbnRzCi0gICAgICAgICAgcmVsYXRpb25zaGlwIGVsZW1lbnRz
Ci0KLSAgICBUd28gZGltZW5zaW9uYWwgTWF0cml4IHNwZWNpZmljYXRpb246Ci0gICAgVGhlIGZp
cnN0IHJvdyBpcyBhbHdheXMgdGhlIGhlYWRlci4KLSAgICBUaGUgZmlyc3QgaGVhZGVycyBzdGFy
dCB3aXRoIExldmVsIFgsIHdoZXJlYXMgZWFjaCBjb2x1bW4KLSAgICByZXByZXNlbnRzIGFuIGFk
ZGl0aW9uYWwgZGVwdGggbGV2ZWwuIElmIHlvdXIgdmRleCB0cmVlIGlzIDMgbGV2ZWxzCi0gICAg
ZGVlcCB5b3Ugd2lsbCBoYXZlIHRocmVlIExldmVsIGhlYWRlcnMuCi0gICAgVGhlIG5leHQgY29s
dW1ucyBhcmUgZm9yIGVhY2ggbGFuZ3VhZ2UuCi0gICAgVGhlIG9yZGVyIGlzIGFscGhhYmV0aWNh
bC4gRm9yIGVhY2ggbGFuZ3VhZ2UsIHR3byBjb2x1bW5zIHdpbGwgYmUKLSAgICBhZGRlZCwgb25l
IG5hbWVkIENhcHRpb24gWFgsIHRoZSBvdGhlciBEZXNjcmlwdGlvbiBYWC4KLSAgICBBIHZvY2Fi
dWxhcnkgd2l0aCBhIGRlcHRoIG9mIDMgbGV2ZWxzIGFuZCB0d28gbGFuZ3VhZ2VzIHdpbGwKLSAg
ICB0aGVyZWZvciBoYXZlIDcgY29sdW1ucy4KLSAgICB0aGUgb3RoZXIgcm93cyByZXByZXNlbnQg
YSBzaW5nbGUgdGVybSBvZiB0aGUgdm9jYWJ1bGFyeS4KLSAgICBBIGNoaWxkIGVsZW1lbnQgb2Yg
b25lIG9mIHRoZSByb290IGVsZW1lbnRzIHdvdWxkIGZpbGwgaXRzCi0gICAga2V5IGluIHRoZSBD
b2x1bW4gIkxldmVsIDIiIFRoZSBvdGhlciBMZXZlbCBmaWVsZHMgd291bGQgYmUgZW1wdHkuCi0g
ICAgQSB0ZXJtIG9mIExldmVsIDIgd2lsbCBhbHdheXMgYmUgYmVsb3cgaXRzIExldmVsIDEgdGVy
bSwgd2l0aCBubwotICAgIG90aGVyIExldmVsIDEgdGVybSBiZXR3ZWVuIHRoZW0uCi0gICAgVG8g
c2VlIGFuIGV4YW1wbGUsIGNyZWF0ZSBhIFZERVhNYW5hZ2VyIGluc3RhbmNlIHdpdGggYSB2ZGV4
IGZpbGUsIGFuZAotICAgIGNhbGwgdGhlIGV4cG9ydE1hdHJpeCBtZXRob2QuCi0gICAgIiIiCi0K
LSAgICB2ZGV4X25hbWVzcGFjZSA9ICdodHRwOi8vd3d3Lmltc2dsb2JhbC5vcmcveHNkL2ltc3Zk
ZXhfdjFwMCcKLSAgICBkZWZhdWx0X2xhbmd1YWdlID0gJ2VuJwotICAgIHVubmFtZWRfdGVybSA9
ICcodW5uYW1lZCB0ZXJtKScKLSAgICBmYWxsYmFja190b19kZWZhdWx0X2xhbmd1YWdlID0gRmFs
c2UKLSAgICBvcmRlcl9zaWduaWZpY2FudCA9IEZhbHNlCi0gICAgdGVybV9kaWN0ID0ge30KLQot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlPU5vbmUsIG1hdHJpeD1Ob25lLCBsYW5nPU5vbmUs
IG5hbWVzcGFjZT1Ob25lLCBmYWxsYmFjaz1Ob25lKToKLSAgICAgICAgIiIiCi0gICAgICAgIGNv
bnN0cnVjdHMgYSBWREVYIG1hbmFnZXIgYW5kIHBhcnNlcyBhIFhNTCB2b2NhYnVsYXJ5Ci0JCWZp
bGU6IGEgZmlsZSBvciBzdHJpbmcgdGhhdCBpcyBwYXJzZWQKLQkJbWF0cml4OiBhIHR3byBkaW1l
bnNpb25hbCBtYXRyaXggdGhhdCBpcyBwYXJzZWQgaW50byBhIHZkZXggZmlsZQotCQlsYW5nOiBz
ZXQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgZm9yIG91dHB1dCAoJyonIGZvciBtdWx0aWxpbmd1YWwg
dGVybXMpCi0gICAgICAgIG5hbWVzcGFjZTogZGVjbGFyZXMgdGhlIElNUy1WREVYIG5hbWVzcGFj
ZSBpbiB0aGUgdm9jYWIgZmlsZQotCQkgICgnJyBoYW5kbGVzIFZERVggZmlsZXMgd2l0aG91dCBh
bnkgZGVjbGFyZWQgbmFtZXNwYWNlKS4KLSAgICAgICAgZmFsbGJhY2s6IGlmIG5vIHRyYW5zbGF0
aW9uIGlzIGZvdW5kIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UKLSAgICAgICAgICBzaG91bGQgdGhl
IHRlcm0gYmUgcmV0dXJuZWQgaW4gdGhlIGRlZmF1bHQgbGFuZ3VhZ2UKLSAgICAgICAgICBvciBh
cyBzZWxmLnVubmFtZWRfdGVybSA/Ci0gICAgICAgICIiIgotICAgICAgICBpZiBpc2luc3RhbmNl
KG1hdHJpeCwgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigi
VGhpcyBpcyB0aGUgbmV3IGltc3ZkZXggdmVyc2lvbi4gWW91ICIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ0cmllZCB0byBwYXNzIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGFzICIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbWF0cml4LiBDb25zaWRlciB0
byB1c2UgbmFtZWQgYXJndW1lbnRzIikKLSAgICAgICAgaWYgbGFuZyBpcyBub3QgTm9uZToKLSAg
ICAgICAgICAgIHNlbGYuZGVmYXVsdF9sYW5ndWFnZSA9IGxhbmcKLSAgICAgICAgaWYgbmFtZXNw
YWNlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi52ZGV4X25hbWVzcGFjZSA9IG5hbWVz
cGFjZQotICAgICAgICBpZiBmYWxsYmFjayBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYu
ZmFsbGJhY2tfdG9fZGVmYXVsdF9sYW5ndWFnZSA9IGZhbGxiYWNrCi0gICAgICAgIGlmIG1hdHJp
eCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYucGFyc2VNYXRyaXgobWF0cml4KQotICAg
ICAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5wYXJzZShmaWxlKQot
ICAgICAgICBpZiBmaWxlIGFuZCBtYXRyaXg6Ci0gICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVF
cnJvcigiWW91IGdhdmUgbWUgYSBhIG1hdHJpeCBhbmQgYSBmaWxlLCBpdCBpcyAiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGRlZmluZWQgd2hhdCB0YWtlcyBwcmVjZWRl
bmNlLiBZb3UgbWF5ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5IHNl
dCBvbmUgb2YgdGhlIHR3byBwYXJhbWV0ZXJzIikKLQotICAgIGRlZiBpc1ZERVgoc2VsZik6Ci0g
ICAgICAgICIiIgotICAgICAgICBjaGVja3MgaWYgdGhlIHBhcnNlZCBYTUwgc2VlbXMgdG8gYmUg
YSB2YWxpZCBWREVYIHZvY2FidWxhcnkKLSAgICAgICAgIiIiCi0gICAgICAgICMgdGhpcyBtZXRo
b2QgZG9lcyBub3QgcGVyZm9ybSBhIGNvbXBsZXRlIHNjaGVtYSB2YWxpZGF0aW9uCi0JCSMgaXQg
anVzdCBjaGVja3MgZm9yIGEgcm9vdCBlbGVtZW50IG5hbWVkICd2ZGV4JyBpbiB0aGUgZXhwZWN0
ZWQgIG5hbWVzcGFjZQotICAgICAgICByZXR1cm4gc2VsZi50cmVlLmdldHJvb3QoKS50YWcgPT0g
c2VsZi52ZGV4VGFnKCd2ZGV4JykKLQotICAgIGRlZiBwYXJzZShzZWxmLCBmaWxlKToKLSAgICAg
ICAgIiIiCi0gICAgICAgIHBhcnNlcyBhIFZERVggdm9jYWJ1bGFyeSBmaWxlIG9yIFhNTCBzdHJp
bmcKLSAgICAgICAgIiIiCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgU3RyaW5nVHlwZXMp
OgotICAgICAgICAgICAgZmlsZSA9IFN0cmluZ0lPKGZpbGUpCi0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIHNlbGYudHJlZSA9IGV0cmVlLnBhcnNlKGZpbGUpCi0gICAgICAgIGV4Y2VwdCAoU3lu
dGF4RXJyb3IsIEV4cGF0RXJyb3IpLCBlOgotICAgICAgICAgICAgcmFpc2UgVkRFWEVycm9yLCAn
UGFyc2UgZXJyb3IgaW4gdm9jYWJ1bGFyeSBYTUw6ICVzJyAlIGUKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgZmlsZW5hbWUgPSBmaWxlLm5hbWUKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVy
cm9yOgotICAgICAgICAgICAgZmlsZW5hbWUgPSAncGFyc2VkIFhNTCB0ZXh0JwotICAgICAgICBp
ZiBub3Qgc2VsZi5pc1ZERVgoKToKLSAgICAgICAgICAgIHJhaXNlIFZERVhFcnJvciwgJ1ZvY2Fi
dWxhcnkgZm9ybWF0IG5vdCBjb3JyZWN0IGluICVzJyAlIGZpbGVuYW1lCi0gICAgICAgIHNlbGYu
b3JkZXJfc2lnbmlmaWNhbnQgPSBzZWxmLmlzT3JkZXJTaWduaWZpY2FudCgpCi0gICAgICAgIHNl
bGYubWFrZVRlcm1EaWN0KCkKLSAgICAgICAgcmV0dXJuIHNlbGYudHJlZQotCi0gICAgZGVmIHNl
cmlhbGl6ZShzZWxmLCBmaWxlPU5vbmUpOgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyB0
aGUgdm9jYWJ1bGFyeSBhcyBYTUwKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBldHJlZS50
b3N0cmluZyhzZWxmLnRyZWUsIGVuY29kaW5nPSd1dGYtOCcsIHN0YW5kYWxvbmU9VHJ1ZSkKLQot
ICAgIGRlZiBnZXRWb2NhYklkZW50aWZpZXIoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBy
ZXR1cm5zIHRoZSB2b2NhYnVsYXJ5IGlkZW50aWZpZXIKLSAgICAgICAgIiIiCi0gICAgICAgIHhw
YXRoID0gc2VsZi52ZGV4VGFnKCd2b2NhYklkZW50aWZpZXInKQotICAgICAgICByZXR1cm4gc2Vs
Zi50cmVlLmZpbmR0ZXh0KHhwYXRoKQotCi0gICAgZGVmIGdldFZvY2FiTmFtZShzZWxmLCBsYW5n
PU5vbmUpOgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyB0aGUgdm9jYWJ1bGFyeSBuYW1l
IGluIHRoZSBnaXZlbiAob3IgZGVmYXVsdCkgbGFuZ3VhZ2UuCi0gICAgICAgIElmIGxhbmcgaXMg
JyonLCByZXR1cm5zIGEgZGljdCBvZiBhbGwgdHJhbnNsYXRpb25zIGtleWVkIGJ5IGxhbmd1YWdl
Ci0gICAgICAgICIiIgotICAgICAgICB4cGF0aCA9ICclcy8lcycgJSAoc2VsZi52ZGV4VGFnKCd2
b2NhYk5hbWUnKSwgc2VsZi52ZGV4VGFnKCdsYW5nc3RyaW5nJykpCi0gICAgICAgIGNhcHRpb25z
ID0gc2VsZi50cmVlLmZpbmRhbGwoeHBhdGgpCi0gICAgICAgIHJldHVybiBzZWxmLmdldExhbmdz
dHJpbmcoY2FwdGlvbnMsIGxhbmcsIGRlZmF1bHQ9Jyh1bm5hbWVkIHZvY2FidWxhcnkpJykKLQot
ICAgIGRlZiBnZXRWb2NhYk1ldGFkYXRhKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgcmV0
dXJucyB0aGUgVkRFWCBtZXRhZGF0YSBlbGVtZW50KHMpIGZvciB0aGUgVm9jYWJ1bGFyeQotICAg
ICAgICAiIiIKLSAgICAgICAgeHBhdGggPSBzZWxmLnZkZXhUYWcoJ21ldGFkYXRhJykKLSAgICAg
ICAgcmV0dXJuIHNlbGYudHJlZS5nZXRyb290KCkuZmluZGFsbCh4cGF0aCkKLQotICAgIGRlZiBn
ZXRWb2NhYldpbGRjYXJkKHNlbGYsIGZvcmVpZ25fbnMsIHRhZ25hbWUpOgotICAgICAgICAiIiIK
LSAgICAgICAgcmV0dXJucyAnd2lsZGNhcmQnIGVsZW1lbnQocykgKHdpdGggYSBmb3JlaWduIG5h
bWVzcGFjZSkgZm9yIHRoZSBWb2NhYnVsYXJ5Ci0gICAgICAgICIiIgotICAgICAgICB4cGF0aCA9
IHNlbGYubnNUYWcoZm9yZWlnbl9ucywgdGFnbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYudHJl
ZS5nZXRyb290KCkuZmluZGFsbCh4cGF0aCkKLQotICAgIGRlZiBpc0ZsYXQoc2VsZik6Ci0gICAg
ICAgICIiIgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIFZERVggcHJvZmlsZSB0eXBlIGRl
bm90ZXMgYSBmbGF0IHZvY2FidWxhcnkKLSAgICAgICAgIiIiIAotICAgICAgICB2ZGV4ID0gc2Vs
Zi50cmVlLmdldHJvb3QoKQotICAgICAgICByZXR1cm4gdmRleC5nZXQoJ3Byb2ZpbGVUeXBlJykg
aW4gVkRFWF9GTEFUX1BST0ZJTEVfVFlQRVMKLQotICAgIGRlZiBpc09yZGVyU2lnbmlmaWNhbnQo
c2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIG9yZGVyIG9m
IHRoZSBWREVYIHZvY2FidWxhcnkgaXMgc2lnbmlmaWNhbnQKLSAgICAgICAgIiIiIAotICAgICAg
ICB2ZGV4ID0gc2VsZi50cmVlLmdldHJvb3QoKQotICAgICAgICByZXR1cm4gdmRleC5nZXQoJ29y
ZGVyU2lnbmlmaWNhbnQnKSBub3QgaW4gRkFMU0VfVkFMVUVTCi0KLSAgICBkZWYgc2hvd0xlYWZz
T25seShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIHRoaXMgaXMgbm90IGRlY2xhcmVkIGlu
IFZERVggdm9jYWJzLCBzbyB3ZSByZXR1cm4gZmFsc2UKLSAgICAgICAgIiIiCi0gICAgICAgIHJl
dHVybiBmYWxzZQotCi0gICAgZGVmIGdldFZvY2FidWxhcnlEaWN0KHNlbGYsIGxhbmc9Tm9uZSk6
Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIGEgdm9jYWJ1bGFyeSBkaWN0aW9uYXJ5IChm
b3IgQXJjaGVUeXBlcykgaW4gdGhlIGdpdmVuIGxhbmd1YWdlLgotICAgICAgICBJZiBsYW5nIGlz
ICcqJywgcmV0dXJucyBkaWN0cyBvZiBhbGwgdHJhbnNsYXRpb25zIGtleWVkIGJ5IGxhbmd1YWdl
Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5nZXRUZXJtcyhzZWxmLnRyZWUuZ2V0
cm9vdCgpLCBsYW5nKQotCi0gICAgZGVmIGdldFRlcm1zKHNlbGYsIGVsZW1lbnQsIGxhbmc9Tm9u
ZSk6Ci0gICAgICAgICIiIgotICAgICAgICBnZXQgYWxsIHRlcm0gZWxlbWVudHMgcmVjdXJzaXZl
bHkKLSAgICAgICAgICByZXR1cm5zIGEgaGllcmFyY2hpYyBkaWN0aW9uYXJ5IHN0cnVjdHVyZSBv
ZiB0aGUgdm9jYWJ1bGFyeQotICAgICAgICAiIiIKLSAgICAgICAgeHBhdGggPSBzZWxmLnZkZXhU
YWcoJ3Rlcm0nKQotICAgICAgICB0ZXJtcyA9IGVsZW1lbnQuZmluZGFsbCh4cGF0aCkKLSAgICAg
ICAgaWYgbGVuKHRlcm1zKSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAg
IyB3ZSBzaG91bGQgbm90IG9ubHkgdGVzdCBvcmRlciBzaWduaWZpY2FuY2UgZ2xvYmFsbHksIGJ1
dCBhbHNvIGZvciBldmVyeSB0ZXJtCi0gICAgICAgIGlmIHNlbGYub3JkZXJfc2lnbmlmaWNhbnQ6
Ci0gICAgICAgICAgICByZXN1bHQgPSBPcmRlcmVkRGljdCgpCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICByZXN1bHQgPSB7fQotICAgICAgICBmb3IgdGVybSBpbiB0ZXJtczoKLSAgICAgICAg
ICAgIGtleSA9IHNlbGYuZ2V0VGVybUlkZW50aWZpZXIodGVybSkKLSAgICAgICAgICAgIHZhbHVl
ID0gc2VsZi5nZXRUZXJtQ2FwdGlvbih0ZXJtLCBsYW5nKQotICAgICAgICAgICAgcmVzdWx0W2tl
eV0gPSAodmFsdWUsIHNlbGYuZ2V0VGVybXModGVybSwgbGFuZykpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQKLQotICAgIGRlZiBnZXRUZXJtSWRlbnRpZmllcihzZWxmLCB0ZXJtKToKLSAgICAgICAg
IiIiCi0gICAgICAgIHJldHVybnMgdGhlIHRlcm1JZGVudGlmaWVyIGZvciBhIGdpdmVuIHRlcm0g
ZWxlbWVudAotICAgICAgICAiIiIKLSAgICAgICAgeHBhdGggPSBzZWxmLnZkZXhUYWcoJ3Rlcm1J
ZGVudGlmaWVyJykKLSAgICAgICAgcmV0dXJuIHRlcm0uZmluZHRleHQoeHBhdGgpCi0KLSAgICBk
ZWYgZ2V0VGVybUNhcHRpb24oc2VsZiwgdGVybSwgbGFuZz1Ob25lKToKLSAgICAgICAgIiIiCi0g
ICAgICAgIHJldHVybnMgdGhlIHRyYW5zbGF0ZWQgY2FwdGlvbiBmb3IgYSB0ZXJtCi0gICAgICAg
ICAgZm9yIGxhbmcgPT0gIioiIHRoZSBtZXRob2QgcmV0dXJucyBhIGRpY3Rpb25hcnkgd2l0aCBh
bGwgdHJhbnNsYXRpb25zIAotICAgICAgICAgIGtleWVkIGJ5IGxhbmd1YWdlCi0gICAgICAgICIi
IgotICAgICAgICBpZiB0ZXJtIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAg
ICAgICB4cGF0aCA9ICclcy8lcycgJSAoc2VsZi52ZGV4VGFnKCdjYXB0aW9uJyksIHNlbGYudmRl
eFRhZygnbGFuZ3N0cmluZycpKQotICAgICAgICBjYXB0aW9ucyA9IHRlcm0uZmluZGFsbCh4cGF0
aCkKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0TGFuZ3N0cmluZyhjYXB0aW9ucywgbGFuZykKLQot
ICAgIGRlZiBnZXRUZXJtRGVzY3JpcHRpb24oc2VsZiwgdGVybSwgbGFuZz1Ob25lKToKLSAgICAg
ICAgIiIiCi0gICAgICAgIHJldHVybnMgdGhlIHRyYW5zbGF0ZWQgZGVzY3JpcHRpb24gZm9yIGEg
dGVybQotICAgICAgICAgIGZvciBsYW5nID09ICIqIiB0aGUgbWV0aG9kIHJldHVybnMgYSBkaWN0
aW9uYXJ5IHdpdGggYWxsIHRyYW5zbGF0aW9ucyAKLSAgICAgICAgICBrZXllZCBieSBsYW5ndWFn
ZQotICAgICAgICAiIiIKLSAgICAgICAgaWYgdGVybSBpcyBOb25lOgotICAgICAgICAgICAgcmV0
dXJuIE5vbmUKLSAgICAgICAgeHBhdGggPSAnJXMvJXMnICUgKHNlbGYudmRleFRhZygnZGVzY3Jp
cHRpb24nKSwgc2VsZi52ZGV4VGFnKCdsYW5nc3RyaW5nJykpCi0gICAgICAgIGRlc2NyaXB0aW9u
cyA9IHRlcm0uZmluZGFsbCh4cGF0aCkKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0TGFuZ3N0cmlu
ZyhkZXNjcmlwdGlvbnMsIGxhbmcsIGRlZmF1bHQ9JycpCi0KLSAgICBkZWYgZ2V0TGFuZ3N0cmlu
ZyhzZWxmLCBlbGVtZW50cywgbGFuZz1Ob25lLCBkZWZhdWx0PU5vbmUpOgotICAgICAgICAiIiIK
LSAgICAgICAgcmV0dXJucyB0aGUgbGFuZ3N0cmluZyBpbiB0aGUgZ2l2ZW4gbGFuZ3VhZ2UuCi0g
ICAgICAgIGZvciBsYW5nID09ICIqIiB0aGUgbWV0aG9kIHJldHVybnMgYSBkaWN0aW9uYXJ5IHdp
dGggYWxsIHRyYW5zbGF0aW9ucyAKLSAgICAgICAga2V5ZWQgYnkgbGFuZ3VhZ2UKLSAgICAgICAg
IiIiCi0gICAgICAgIGlmIGxhbmcgPT0gJyonOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0
QWxsTGFuZ3N0cmluZ3MoZWxlbWVudHMpCi0gICAgICAgIGlmIGxhbmcgaXMgTm9uZToKLSAgICAg
ICAgICAgIGxhbmcgPSBzZWxmLmRlZmF1bHRfbGFuZ3VhZ2UKLSAgICAgICAgaWYgZGVmYXVsdCBp
cyBOb25lOgotICAgICAgICAgICAgZGVmYXVsdCA9IHNlbGYudW5uYW1lZF90ZXJtCi0gICAgICAg
IHJlc3VsdCA9IE5vbmUKLSAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6Ci0gICAgICAg
ICAgICBpZiBlbGVtZW50LmdldCgnbGFuZ3VhZ2UnKSA9PSBsYW5nOgotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGVsZW1lbnQudGV4dAotICAgICAgICAgICAgaWYgc2VsZi5mYWxsYmFja190b19k
ZWZhdWx0X2xhbmd1YWdlOgotICAgICAgICAgICAgICAgaWYgZWxlbWVudC5nZXQoJ2xhbmd1YWdl
JykgPT0gc2VsZi5kZWZhdWx0X2xhbmd1YWdlOgotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
ID0gZWxlbWVudC50ZXh0Ci0gICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAgICAg
cmVzdWx0ID0gZGVmYXVsdAotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYgZ2V0QWxs
TGFuZ3N0cmluZ3Moc2VsZiwgZWxlbWVudHMpOgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJu
cyBhIGRpY3Rpb25hcnkgd2l0aCBhbGwgdHJhbnNsYXRpb25zIGtleWVkIGJ5IGxhbmd1YWdlCi0g
ICAgICAgICIiIgotICAgICAgICByZXN1bHQgPSB7fQotICAgICAgICBmb3IgZWxlbWVudCBpbiBl
bGVtZW50czoKLSAgICAgICAgICAgIHJlc3VsdFtlbGVtZW50LmdldCgnbGFuZ3VhZ2UnKV0gPSBl
bGVtZW50LnRleHQKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIGdldFRlcm1CeUlk
KHNlbGYsIGlkZW50aWZpZXIpOgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyB0aGUgVkRF
WCB0ZXJtIGVsZW1lbnQgZm9yIGEgZ2l2ZW4gdGVybSBpZGVudGlmaWVyCi0gICAgICAgICIiIgot
ICAgICAgICByZXR1cm4gc2VsZi50ZXJtX2RpY3QuZ2V0KGlkZW50aWZpZXIsIE5vbmUpCi0KLSAg
ICBkZWYgZ2V0VGVybUNhcHRpb25CeUlkKHNlbGYsIGlkZW50aWZpZXIsIGxhbmc9Tm9uZSk6Ci0g
ICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRoZSBjYXB0aW9uKHMpIGZvciBhIGdpdmVuIHRl
cm0gaWRlbnRpZmllcgotICAgICAgICAiIiIKLSAgICAgICAgdGVybSA9IHNlbGYuZ2V0VGVybUJ5
SWQoaWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0VGVybUNhcHRpb24odGVybSwg
bGFuZykKLQotICAgIGRlZiBnZXRUZXJtRGVzY3JpcHRpb25CeUlkKHNlbGYsIGlkZW50aWZpZXIs
IGxhbmc9Tm9uZSk6Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRoZSBkZXNjcmlwdGlv
bihzKSBmb3IgYSBnaXZlbiB0ZXJtIGlkZW50aWZpZXIKLSAgICAgICAgIiIiCi0gICAgICAgIHRl
cm0gPSBzZWxmLmdldFRlcm1CeUlkKGlkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBzZWxmLmdl
dFRlcm1EZXNjcmlwdGlvbih0ZXJtLCBsYW5nKQotCi0gICAgZGVmIGdldFRlcm1NZXRhZGF0YUJ5
SWQoc2VsZiwgaWRlbnRpZmllcik6Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRoZSBW
REVYIG1ldGFkYXRhIGVsZW1lbnQocykgaW5zaWRlIGEgdGVybQotICAgICAgICAgIGZvciBhIGdp
dmVuIHRlcm0gaWRlbnRpZmllcgotICAgICAgICAiIiIKLSAgICAgICAgdGVybSA9IHNlbGYuZ2V0
VGVybUJ5SWQoaWRlbnRpZmllcikKLSAgICAgICAgeHBhdGggPSBzZWxmLnZkZXhUYWcoJ21ldGFk
YXRhJykKLSAgICAgICAgcmV0dXJuIHRlcm0uZmluZGFsbCh4cGF0aCkKLQotICAgIGRlZiBnZXRU
ZXJtV2lsZGNhcmRCeUlkKHNlbGYsIGlkZW50aWZpZXIsIG5hbWVzcGFjZSwgdGFnbmFtZSk6Ci0g
ICAgICAgICIiIgotICAgICAgICByZXR1cm5zICd3aWxkY2FyZCcgZWxlbWVudChzKSAod2l0aCBh
IGZvcmVpZ24gbmFtZXNwYWNlKQotICAgICAgICAgIGluc2lkZSBhIHRlcm0gZm9yIGEgZ2l2ZW4g
dGVybSBpZGVudGlmaWVyCi0gICAgICAgICIiIgotICAgICAgICB0ZXJtID0gc2VsZi5nZXRUZXJt
QnlJZChpZGVudGlmaWVyKQotICAgICAgICB4cGF0aCA9IHNlbGYubnNUYWcobmFtZXNwYWNlLCB0
YWduYW1lKQotICAgICAgICByZXR1cm4gdGVybS5maW5kYWxsKHhwYXRoKQotCi0gICAgZGVmIGdl
dFRhZ25hbWUoc2VsZiwgbnNuYW1lKToKLQkgICAgIyBub3QgbmVlZGVkIGhlcmUKLSAgICAgICAg
aWYgbm90IG5zbmFtZVs6MV0gPT0gInsiOgotICAgICAgICAgICAgcmV0dXJuIG5zbmFtZQotICAg
ICAgICBuYW1lc3BhY2VfdXJpLCB0YWduYW1lID0gc3RyaW5nLnNwbGl0KG5hbWVbMTpdLCAifSIs
IDEpCi0gICAgICAgIHJldHVybiB0YWduYW1lCi0KLSAgICBkZWYgbnNUYWcoc2VsZiwgbmFtZXNw
YWNlLCB0YWduYW1lKToKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybnMgYSB0YWcgd2l0aCBh
IG5hbWVzcGFjZSBvZiB0aGUgZm9ybSAne25hbWVzcGFjZV91cml9dGFnbmFtZScKLSAgICAgICAg
ICBvciBqdXN0IHRoZSB0YWcgbmFtZSBpZiBhbiBlbXB0eSBuYW1lc3BhY2Ugd2FzIGdpdmVuCi0g
ICAgICAgICIiIgotICAgICAgICBpZiBuYW1lc3BhY2UgPT0gJyc6Ci0gICAgICAgICAgICByZXR1
cm4gdGFnbmFtZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICd7JXN9JXMnICUg
KG5hbWVzcGFjZSwgdGFnbmFtZSkKLQotICAgIGRlZiB2ZGV4VGFnKHNlbGYsIHRhZ25hbWUpOgot
ICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyBhIHRhZyB3aXRoIHRoZSBWREVYIG5hbWVzcGFj
ZSBvciBqdXN0IHRoZSB0YWcgbmFtZQotICAgICAgICAgIGlmIHRoZSBWREVYIG5hbWVzcGFjZSBp
cyB0aGUgZW1wdHkgc3RyaW5nCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5uc1Rh
ZyhzZWxmLnZkZXhfbmFtZXNwYWNlLCB0YWduYW1lKQotCi0gICAgZGVmIHZkZXhTZWFyY2hUZXJt
KHNlbGYsICp0YWdzKToKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBhIFNlYXJjaCBwYXRo
IGVsZW1lbnQgd2l0aCBlYWNoIHRhZyBvZiB0aGUgbGlzdCBvZgotICAgICAgICB0YWdzIGNvbmNh
dGVuYXRlZCBieSAvCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gJy8nLmpvaW4oW3NlbGYu
dmRleFRhZyh0YWcpIGZvciB0YWcgaW4gdGFnc10pCi0KLSAgICBkZWYgbWFrZVRlcm1EaWN0KHNl
bGYpOgotICAgICAgICAiIiIKLSAgICAgICAgY29uc3RydWN0cyBhIGZsYXQgZGljdGlvbmFyeSBv
ZiB0ZXJtIGVsZW1lbnRzLCBrZXllZCBieSB0ZXJtSWRlbnRpZmllciAKLSAgICAgICAgIiIiCi0g
ICAgICAgICMgdGhlIC4vLyBwcmVmaXggZmluZHMgYWxsIGl0ZW1zIHJlY3Vyc2l2ZWx5Ci0gICAg
ICAgIHhwYXRoID0gJy4vLycgKyBzZWxmLnZkZXhUYWcoJ3Rlcm0nKQotICAgICAgICB0ZXJtcyA9
IHNlbGYudHJlZS5nZXRyb290KCkuZmluZGFsbCh4cGF0aCkKLSAgICAgICAgc2VsZi50ZXJtX2Rp
Y3QgPSB7fQotICAgICAgICBmb3IgdGVybSBpbiB0ZXJtczoKLSAgICAgICAgICAgIGtleSA9IHNl
bGYuZ2V0VGVybUlkZW50aWZpZXIodGVybSkKLSAgICAgICAgICAgIHNlbGYudGVybV9kaWN0W2tl
eV0gPSB0ZXJtCi0KLSAgICBkZWYgZXhwb3J0TWF0cml4KHNlbGYpOgotICAgICAgICAiIiIKLSAg
ICAgICAgUmV0dXJuIGEgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCByZXByZXNlbnRhdGlvbiBvZiB0
aGUgdmRleCBmaWxlCi0gICAgICAgICIiIgotICAgICAgICAjIEZpcnN0IGZ1bGwgaXRlcmF0aW9u
LCBnZXQgYWxsIGxhbmd1YWdlcwotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAndHJlZScp
OgotICAgICAgICAgICAgcmV0dXJuIFtdCi0gICAgICAgIGxhbmd1YWdlcyA9IGZpbHRlcihsYW1i
ZGEgeDp4LHNldChbeC5hdHRyaWIuZ2V0KCdsYW5ndWFnZScsICcnKSBcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gc2VsZi50cmVlLmZpbmRhbGwo
Jy8vKicpXSkpCi0gICAgICAgIGxhbmd1YWdlcy5zb3J0KCkKLSAgICAgICAgZGVwdGggPSAwCi0g
ICAgICAgIHJvd3MgPSBbXQotICAgICAgICBjaGlsZHJlbl9mYXRoZXJzX2xldmVsID0ge30KLQot
ICAgICAgICAjIFNlY29uZCBmdWxsIGl0ZXJhdGlvbi4gQ29udmVydCB4bWwgdHJlZSB0byBhIGZs
YXQgcHl0aG9uIHN0cnVjdHVyZQotICAgICAgICAjIERlcHRoIGlzIG1haW50YWluZWQgYnkgYW4g
aW5kZXgsIGJ1dCBwYXJlbnQgcmVsYXRpb25zaGlwcyBpcyBvbmx5Ci0gICAgICAgICMgbWFpbnRh
aW5lZCBieSBvcmRlcmluZy4KLSAgICAgICAgZm9yIHRlcm0gaW4gc2VsZi50cmVlLmZpbmRhbGwo
Jy8vJyArIHNlbGYudmRleFNlYXJjaFRlcm0oJ3Rlcm0nKSk6Ci0gICAgICAgICAgICByb3cgPSB7
fQotICAgICAgICAgICAgcm93WydrZXknXSA9IHRlcm0uZmluZChzZWxmLnZkZXhTZWFyY2hUZXJt
KCd0ZXJtSWRlbnRpZmllcicpKVwKLSAgICAgICAgICAgICAgICAudGV4dC5zdHJpcCgpCi0gICAg
ICAgICAgICBjYXB0aW9ucyA9IHt9Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSB7fQotICAg
ICAgICAgICAgZm9yIGxhbmcgaW4gbGFuZ3VhZ2VzOgotICAgICAgICAgICAgICAgIGNhcHRpb25z
W2xhbmddID0gIiIKLSAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnNbbGFuZ10gPSAiIgotICAg
ICAgICAgICAgZm9yIGNhcHRpb24gaW4gdGVybS5maW5kYWxsKFwKLSAgICAgICAgICAgICAgICAg
ICAgc2VsZi52ZGV4U2VhcmNoVGVybSgnY2FwdGlvbicsICdsYW5nc3RyaW5nJykpOgotICAgICAg
ICAgICAgICAgIGlmIGNhcHRpb24uYXR0cmliLmhhc19rZXkoJ2xhbmd1YWdlJyk6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhcHRpb25zW2NhcHRpb24uYXR0cmliWydsYW5ndWFnZSddXSA9IGNhcHRp
b24udGV4dC5zdHJpcCgpCi0gICAgICAgICAgICBmb3IgZGVzY3JpcHRpb24gaW4gdGVybS5maW5k
YWxsKFwKLSAgICAgICAgICAgICAgICAgICAgc2VsZi52ZGV4U2VhcmNoVGVybSgnZGVzY3JpcHRp
b24nLCAnbGFuZ3N0cmluZycpKToKLSAgICAgICAgICAgICAgICBpZiBkZXNjcmlwdGlvbi5hdHRy
aWIuaGFzX2tleSgnbGFuZ3VhZ2UnKToKLSAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25z
W2Rlc2NyaXB0aW9uLmF0dHJpYlsnbGFuZ3VhZ2UnXV0gPSBcCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXNjcmlwdGlvbi50ZXh0IGFuZCBkZXNjcmlwdGlvbi50ZXh0LnN0cmlwKCkgb3IgJycK
LSAgICAgICAgICAgIHJvd1snY2FwdGlvbnMnXSA9IGNhcHRpb25zCi0gICAgICAgICAgICByb3db
J2Rlc2NyaXB0aW9ucyddID0gZGVzY3JpcHRpb25zCi0KLSAgICAgICAgICAgICMgSWYgdGhpcyBp
dGVtIGlzIGEgY2hpbGQgb2Ygc29tZXRoaW5nLCB0aGUgZmF0aGVyIG11c3QgaGF2ZQotICAgICAg
ICAgICAgIyBiZWVuIHBhcnNlZCBiZWZvcmUsIGFuZCBzdG9yZWQgaXRzIGxldmVsIGluCi0gICAg
ICAgICAgICAjIGNoaWxkcmVuX2ZhdGhlcnNfbGV2ZWwuIE9uY2UgZm9yIGVhY2ggY2hpbGQgd2l0
aCB0aGUgY2hpbGQKLSAgICAgICAgICAgICMgYXMgdGhlIGtleQotICAgICAgICAgICAgZmF0aGVy
X2xldmVsID0gY2hpbGRyZW5fZmF0aGVyc19sZXZlbC5nZXQodGVybSwgLTEpCi0gICAgICAgICAg
ICBvd25fbGV2ZWwgPSBmYXRoZXJfbGV2ZWwgKyAxCi0gICAgICAgICAgICBkZXB0aCA9IG1heChv
d25fbGV2ZWwsIGRlcHRoKQotICAgICAgICAgICAgZm9yIGNoaWxkX3Rlcm0gaW4gdGVybS5maW5k
YWxsKHNlbGYudmRleFNlYXJjaFRlcm0oJ3Rlcm0nKSk6Ci0gICAgICAgICAgICAgICAgY2hpbGRy
ZW5fZmF0aGVyc19sZXZlbFtjaGlsZF90ZXJtXSA9IG93bl9sZXZlbAotICAgICAgICAgICAgcm93
WydsZXZlbCddID0gb3duX2xldmVsCi0gICAgICAgICAgICByb3dzLmFwcGVuZChyb3cpCi0KLSAg
ICAgICAgIyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSB0cmVlLCB3
ZSBjYW4gYnVpbGQgdGhlIHR3bwotICAgICAgICAjIGRpbWVuc2lvbmFsIG1hdHJpeC4KLSAgICAg
ICAgcmV0dmFsX3Jvd3MgPSBbXQotICAgICAgICBoZWFkZXJfcm93ID0gWyJMZXZlbCAlaSIgJSB4
IGZvciB4IGluIHJhbmdlKGRlcHRoKzEpXQotICAgICAgICBmb3IgbGFuZyBpbiBsYW5ndWFnZXM6
Ci0gICAgICAgICAgICBoZWFkZXJfcm93LmV4dGVuZChbJ0NhcHRpb24gJXMnICUgbGFuZywgJ0Rl
c2NyaXB0aW9uICVzJyAlIGxhbmddKQotICAgICAgICByZXR2YWxfcm93cy5hcHBlbmQoaGVhZGVy
X3JvdykKLSAgICAgICAgZm9yIHJvdyBpbiByb3dzOgotICAgICAgICAgICAgcmV0dmFsX3JvdyA9
IFsnJyBmb3IgeCBpbiByYW5nZShkZXB0aCArIDEgKyAyICogbGVuKGxhbmd1YWdlcykpXQotICAg
ICAgICAgICAgcmV0dmFsX3Jvd1tyb3dbJ2xldmVsJ11dID0gcm93WydrZXknXQotICAgICAgICAg
ICAgZm9yIGxhbmdfY291bnQsIGxhbmcgaW4gZW51bWVyYXRlKGxhbmd1YWdlcyk6Ci0gICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gZGVwdGggKyAxCi0gICAgICAgICAgICAgICAgcmV0dmFsX3Jvd1tv
ZmZzZXQgKyBsYW5nX2NvdW50ICogMl0gPSByb3dbJ2NhcHRpb25zJ11bbGFuZ10KLSAgICAgICAg
ICAgICAgICByZXR2YWxfcm93W29mZnNldCArIGxhbmdfY291bnQgKiAyICsgMV0gPSByb3dbJ2Rl
c2NyaXB0aW9ucyddW2xhbmddCi0gICAgICAgICAgICByZXR2YWxfcm93cy5hcHBlbmQocmV0dmFs
X3JvdykKLSAgICAgICAgcmV0dXJuIHJldHZhbF9yb3dzCi0KLSAgICBkZWYgcGFyc2VNYXRyaXgo
c2VsZiwgbWF0cml4KToKLSAgICAgICAgIiIiCi0gICAgICAgIFNldHVwIGEgbWFuYWdlciBiYXNl
ZCBvbiBhIG1hdHJpeAotICAgICAgICAiIiIKLSAgICAgICAgbGFuZ3VhZ2VzID0gW10KLSAgICAg
ICAgc3RhdGUgPSAnTGV2ZWxzJwotICAgICAgICBwYXJlbnRzID0gW10KLSAgICAgICAgZm9yIGNv
bHVtbiwgY2VsbCBpbiBlbnVtZXJhdGUobWF0cml4WzBdKToKLSAgICAgICAgICAgIGlmIG5vdCAo
Y2VsbC5zdGFydHN3aXRoKCdMZXZlbCAnKQotICAgICAgICAgICAgICAgICBvciBjZWxsLnN0YXJ0
c3dpdGgoJ0Rlc2NyaXB0aW9uICcpCi0gICAgICAgICAgICAgICAgIG9yIGNlbGwuc3RhcnRzd2l0
aCgnQ2FwdGlvbiAnKSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkRh
dGEgaXMgbm90IHZhbGlkLCB1bmtub3duIGhlYWRlciIpCi0gICAgICAgICAgICBpZiBzdGF0ZSA9
PSAnTGV2ZWxzJzoKLSAgICAgICAgICAgICAgICBpZiBjZWxsLnN0YXJ0c3dpdGgoJ0xldmVsICcp
OgotICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLmFwcGVuZChOb25lKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGVsaWYgY2VsbC5zdGFydHN3aXRoKCdD
YXB0aW9uICcpOgotICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdDYXB0aW9uJwotICAgICAg
ICAgICAgICAgICAgICBsYW5ndWFnZXMuYXBwZW5kKGNlbGxbODpdKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
IHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJEYXRhIGlzIG5vdCB2YWxpZCwgYWZ0ZXIgTGV2ZWwgIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhZGVyIG11c3QgY29t
ZSB0aGUgY2FwdGlvbiIpCi0gICAgICAgICAgICBlbGlmIHN0YXRlID09ICdDYXB0aW9uJzoKLSAg
ICAgICAgICAgICAgICBpZiBjZWxsLnN0YXJ0c3dpdGgoJ0Rlc2NyaXB0aW9uICcpOgotICAgICAg
ICAgICAgICAgICAgICBzdGF0ZSA9ICdEZXNjcmlwdGlvbicKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlz
ZSBBdHRyaWJ1dGVFcnJvcigiRGF0YSBpcyBub3QgdmFsaWQsIGFmdGVyIENhcHRpb24gIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhZGVyIG11c3QgY29tZSB0
aGUgZGVzY3JpcHRpb24iKQotICAgICAgICAgICAgZWxpZiBzdGF0ZSA9PSAnRGVzY3JpcHRpb24n
OgotICAgICAgICAgICAgICAgIGlmIGNlbGwuc3RhcnRzd2l0aCgnQ2FwdGlvbiAnKToKLSAgICAg
ICAgICAgICAgICAgICAgc3RhdGUgPSAnQ2FwdGlvbicKLSAgICAgICAgICAgICAgICAgICAgaWYg
bm90IGhhc2F0dHIobGFuZ3VhZ2VzLCBjZWxsWzg6XSk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBsYW5ndWFnZXMuYXBwZW5kKGNlbGxbODpdKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJybygiRGF0YSBpcyBub3Qg
dmFsaWQsIGxhbmd1YWdlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJtYXkgbm90IGFwcGVhciB0d2ljZSEiKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJEYXRhIGlzIG5vdCB2YWxp
ZCwgYWZ0ZXIgRGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiBtdXN0IGNvbWUgYSBuZXcgQ2FwdGlvbiIpCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJQcm9ncmFtbWluZyBlcnJvciwgdW5r
bm93biBzdGF0ZSBkdXJpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJIZWFkZXIgcGFyc2luZyBlbmNvdW50ZXJlZC4gU29ycnkhIikKLSAgICAgICAgZGVwdGggPSBs
ZW4ocGFyZW50cykKLQotCi0gICAgICAgIGRlZiBhZGRTdWJFbGVtKHBhcmVudCwgZWxlbWVudE5h
bWUsIHRleHQ9Tm9uZSk6Ci0gICAgICAgICAgICByZXR2YWwgPSBldHJlZS5TdWJFbGVtZW50KHBh
cmVudCwgc2VsZi52ZGV4VGFnKGVsZW1lbnROYW1lKSkKLSAgICAgICAgICAgIGlmIHRleHQgIT0g
Tm9uZToKLSAgICAgICAgICAgICAgICByZXR2YWwudGV4dCA9IHRleHQKLSAgICAgICAgICAgIHJl
dHVybiByZXR2YWwKLSAgICAgICAgcm9vdCA9IGV0cmVlLkVsZW1lbnQoc2VsZi52ZGV4VGFnKCd2
ZGV4JyksIG5zbWFwPXtOb25lOiBzZWxmLnZkZXhfbmFtZXNwYWNlfSkKLSAgICAgICAgIyBXQVJO
SU5HISEgV2UgZG8gYSBkaXJ0eSB0cmljayBoZXJlLiBXaGVuIHRoZSBmaXJzdCBlbGVtZW50cwot
ICAgICAgICAjIFdhbnQgdG8gZ2V0IHRoZWlyIHJvb3QgZWxlbWVudCwgdGhleSBoYXZlIGEgZGVw
dGggb2YgMAotICAgICAgICAjIFRoZXkgd2lsbCB0aGVuIGFzayBmb3IgcGFyZW50c1swLTFdLiBT
byBpdCBnZXRzIHRoZSBsYXN0Ci0gICAgICAgICMgZWxlbWVudC4gQmUgYXdhcmUgb2YgdGhhdCEK
LSAgICAgICAgcGFyZW50cy5hcHBlbmQocm9vdCkKLSAgICAgICAgZm9yIHJvdyBpbiBtYXRyaXhb
MTpdOgotICAgICAgICAgICAgcm93X2RlcHRoID0gTm9uZQotICAgICAgICAgICAgZm9yIGkgaW4g
cmFuZ2UoZGVwdGgpOgotICAgICAgICAgICAgICAgIGlmIHJvd1tpXToKLSAgICAgICAgICAgICAg
ICAgICAgaWYgcm93X2RlcHRoICE9IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlz
ZSBBdHRyaWJ1dGVFcnJvcigiVGhlIE1hdHJpeCBjb250YWlucyBhbiBlbGVtZW50ICIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBkZWNpZGUgb24g
b24gd2hpY2ggbGV2ZWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIml0IHNob3VsZCBleGlzdCIpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByb3dfZGVwdGggPSBpCi0gICAgICAgICAgICBwYXJlbnQgPSBw
YXJlbnRzW3Jvd19kZXB0aC0xXQotICAgICAgICAgICAgdGVybSA9IGFkZFN1YkVsZW0ocGFyZW50
LCAndGVybScpCi0gICAgICAgICAgICBwYXJlbnRzW3Jvd19kZXB0aF0gPSB0ZXJtCi0gICAgICAg
ICAgICB0ZXJtSWRlbnRpZmllciA9IGFkZFN1YkVsZW0odGVybSwgJ3Rlcm1JZGVudGlmaWVyJywg
cm93W3Jvd19kZXB0aF0pCi0gICAgICAgICAgICBjYXB0aW9ucyA9IFtyb3dbeF0gZm9yIHggaW4g
cmFuZ2UobGVuKHBhcmVudHMpLTEsIGxlbihyb3cpLCAyKV0KLSAgICAgICAgICAgIGRlc2NyaXB0
aW9ucyA9IFtyb3dbeF0gZm9yIHggaW4gcmFuZ2UobGVuKHBhcmVudHMpLCBsZW4ocm93KSwgMild
Ci0gICAgICAgICAgICBpZiBmaWx0ZXIobGFtYmRhIHg6eCxjYXB0aW9ucyk6Ci0gICAgICAgICAg
ICAgICAgY2FwdGlvbiA9IGFkZFN1YkVsZW0odGVybSwgJ2NhcHRpb24nKQotICAgICAgICAgICAg
ICAgIGZvciBpbmRleCwgdHJhbnNsYXRpb24gaW4gZmlsdGVyKGxhbWJkYSAoaSx4KTp4LFt4IGZv
ciB4IGluIGVudW1lcmF0ZShjYXB0aW9ucyldKToKLSAgICAgICAgICAgICAgICAgICAgbGFuZ3N0
cmluZyA9IGFkZFN1YkVsZW0oY2FwdGlvbiwgJ2xhbmdzdHJpbmcnLCB0cmFuc2xhdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgbGFuZ3N0cmluZy5hdHRyaWJbJ2xhbmd1YWdlJ10gPSBsYW5ndWFn
ZXNbaW5kZXhdCi0gICAgICAgICAgICBpZiBmaWx0ZXIobGFtYmRhIHg6eCxkZXNjcmlwdGlvbnMp
OgotICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gYWRkU3ViRWxlbSh0ZXJtLCAnZGVzY3Jp
cHRpb24nKQotICAgICAgICAgICAgICAgIGZvciBpbmRleCwgdHJhbnNsYXRpb24gaW4gZmlsdGVy
KGxhbWJkYSAoaSx4KTp4LFt4IGZvciB4IGluIGVudW1lcmF0ZShkZXNjcmlwdGlvbnMpXSk6Ci0g
ICAgICAgICAgICAgICAgICAgIGxhbmdzdHJpbmcgPSBhZGRTdWJFbGVtKGRlc2NyaXB0aW9uLCAn
bGFuZ3N0cmluZycsIHRyYW5zbGF0aW9uKQotICAgICAgICAgICAgICAgICAgICBsYW5nc3RyaW5n
LmF0dHJpYlsnbGFuZ3VhZ2UnXSA9IGxhbmd1YWdlc1tpbmRleF0KLSAgICAgICAgc2VsZi50cmVl
ID0gZXRyZWUuRWxlbWVudFRyZWUocm9vdCkKLSAgICAgICAgc2VsZi5vcmRlcl9zaWduaWZpY2Fu
dCA9IHNlbGYuaXNPcmRlclNpZ25pZmljYW50KCkKLSAgICAgICAgc2VsZi5tYWtlVGVybURpY3Qo
KQorIyBGaWxlOiB2ZGV4LnB5CisjCisjIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IGJ5IE1hcnRp
biBSYXNwZQorIyBCaWJsaW90aGVjYSBIZXJ0emlhbmEgKE1heC1QbGFuY2stSW5zdGl0dXRlIGZv
ciBBcnQgSGlzdG9yeSksIFJvbWUsIEl0YWx5CisjIFRoaXMgY29kZSB3YXMgd3JpdHRlbiBmb3Ig
dGhlIFpVQ0NBUk8gUHJvamVjdAorIyBzZWUgaHR0cDovL3p1Y2Nhcm8uYmlibGhlcnR6Lml0Cisj
CisjIEdlcm1hbiBGcmVlIFNvZnR3YXJlIExpY2Vuc2UgKEQtRlNMKQorIworIyBUaGlzIFByb2dy
YW0gbWF5IGJlIHVzZWQgYnkgYW55b25lIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2Yg
dGhlIAorIyBHZXJtYW4gRnJlZSBTb2Z0d2FyZSBMaWNlbnNlCisjIFRoZSBMaWNlbnNlIG1heSBi
ZSBvYnRhaW5lZCB1bmRlciA8aHR0cDovL3d3dy5kLWZzbC5vcmc+LgorCisjCisKK19fYXV0aG9y
X18gPSAnTWFydGluIFJhc3BlLCBKZW5zIEtsZWluJworX19kb2Nmb3JtYXRfXyA9ICdwbGFpbnRl
eHQnCisKK2ltcG9ydCBzdHJpbmcKK2Zyb20gdHlwZXMgaW1wb3J0IFN0cmluZ1R5cGVzCitmcm9t
IFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitmcm9tIHhtbC5wYXJzZXJzLmV4cGF0IGltcG9y
dCBFeHBhdEVycm9yCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorCitmcm9t
IGx4bWwgaW1wb3J0IGV0cmVlCisKK1ZERVhfRkxBVF9QUk9GSUxFX1RZUEVTID0gKCd0aGVzYXVy
dXMnLCAnZ2xvc3NhcnlPckRpY3Rpb25hcnknLCAnZmxhdFRva2VuVGVybXMnKQorVFJVRV9WQUxV
RVMgPSAoJzEnLCAndHJ1ZScsICdUcnVlJywgJ3llcycsICdZZXMnKQorRkFMU0VfVkFMVUVTID0g
KCcnLCAnMCcsICdmYWxzZScsICdGYWxzZScsICdubycsICdObycpCisKK2NsYXNzIFZERVhFcnJv
cihFeGNlcHRpb24pOgorICAgICIiIgorICAgIERlbm90ZXMgYW4gZXJyb3Igd2hpbGUgaGFuZGxp
bmcgYW4gSU1TLVZERVggdm9jYWJ1bGFyeSB3aXRoIGEgVkRFWE1hbmFnZXIKKyAgICAiIiIKKwor
Y2xhc3MgVkRFWE1hbmFnZXIob2JqZWN0KToKKyAgICAiIiIKKwlSZWFkcyBhbiBJTVMtVkRFWCB2
b2NhYnVsYXJ5IGFuZCBjb25zdHJ1Y3RzIGEgVm9jYWJ1bGFyeURpY3QgZm9yIEFyY2hlVHlwZXMu
CisJICBTZWUgIklNUyBWb2NhYnVsYXJ5IERlZmluaXRpb24gRXhjaGFuZ2UiOiBodHRwOi8vd3d3
Lmltc2dsb2JhbC5vcmcvdmRleC8uCisgICAgICBYTUwgYmluZGluZzogaHR0cDovL3d3dy5pbXNn
bG9iYWwub3JnL3ZkZXgvdmRleHYxcDAvaW1zdmRleF9iaW5kdjFwMC5odG1sCisgICAgICBOb3Qg
eWV0IHN1cHBvcnRlZDoKKyAgICAgICAgICB0ZXJtL21lZGlhZGVzY3JpcHRvciBlbGVtZW50cwor
ICAgICAgICAgIHJlbGF0aW9uc2hpcCBlbGVtZW50cworCisgICAgVHdvIGRpbWVuc2lvbmFsIE1h
dHJpeCBzcGVjaWZpY2F0aW9uOgorICAgIFRoZSBmaXJzdCByb3cgaXMgYWx3YXlzIHRoZSBoZWFk
ZXIuCisgICAgVGhlIGZpcnN0IGhlYWRlcnMgc3RhcnQgd2l0aCBMZXZlbCBYLCB3aGVyZWFzIGVh
Y2ggY29sdW1uCisgICAgcmVwcmVzZW50cyBhbiBhZGRpdGlvbmFsIGRlcHRoIGxldmVsLiBJZiB5
b3VyIHZkZXggdHJlZSBpcyAzIGxldmVscworICAgIGRlZXAgeW91IHdpbGwgaGF2ZSB0aHJlZSBM
ZXZlbCBoZWFkZXJzLgorICAgIFRoZSBuZXh0IGNvbHVtbnMgYXJlIGZvciBlYWNoIGxhbmd1YWdl
LgorICAgIFRoZSBvcmRlciBpcyBhbHBoYWJldGljYWwuIEZvciBlYWNoIGxhbmd1YWdlLCB0d28g
Y29sdW1ucyB3aWxsIGJlCisgICAgYWRkZWQsIG9uZSBuYW1lZCBDYXB0aW9uIFhYLCB0aGUgb3Ro
ZXIgRGVzY3JpcHRpb24gWFguCisgICAgQSB2b2NhYnVsYXJ5IHdpdGggYSBkZXB0aCBvZiAzIGxl
dmVscyBhbmQgdHdvIGxhbmd1YWdlcyB3aWxsCisgICAgdGhlcmVmb3IgaGF2ZSA3IGNvbHVtbnMu
CisgICAgdGhlIG90aGVyIHJvd3MgcmVwcmVzZW50IGEgc2luZ2xlIHRlcm0gb2YgdGhlIHZvY2Fi
dWxhcnkuCisgICAgQSBjaGlsZCBlbGVtZW50IG9mIG9uZSBvZiB0aGUgcm9vdCBlbGVtZW50cyB3
b3VsZCBmaWxsIGl0cworICAgIGtleSBpbiB0aGUgQ29sdW1uICJMZXZlbCAyIiBUaGUgb3RoZXIg
TGV2ZWwgZmllbGRzIHdvdWxkIGJlIGVtcHR5LgorICAgIEEgdGVybSBvZiBMZXZlbCAyIHdpbGwg
YWx3YXlzIGJlIGJlbG93IGl0cyBMZXZlbCAxIHRlcm0sIHdpdGggbm8KKyAgICBvdGhlciBMZXZl
bCAxIHRlcm0gYmV0d2VlbiB0aGVtLgorICAgIFRvIHNlZSBhbiBleGFtcGxlLCBjcmVhdGUgYSBW
REVYTWFuYWdlciBpbnN0YW5jZSB3aXRoIGEgdmRleCBmaWxlLCBhbmQKKyAgICBjYWxsIHRoZSBl
eHBvcnRNYXRyaXggbWV0aG9kLgorICAgICIiIgorCisgICAgdmRleF9uYW1lc3BhY2UgPSAnaHR0
cDovL3d3dy5pbXNnbG9iYWwub3JnL3hzZC9pbXN2ZGV4X3YxcDAnCisgICAgZGVmYXVsdF9sYW5n
dWFnZSA9ICdlbicKKyAgICB1bm5hbWVkX3Rlcm0gPSAnKHVubmFtZWQgdGVybSknCisgICAgZmFs
bGJhY2tfdG9fZGVmYXVsdF9sYW5ndWFnZSA9IEZhbHNlCisgICAgb3JkZXJfc2lnbmlmaWNhbnQg
PSBGYWxzZQorICAgIHRlcm1fZGljdCA9IHt9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmls
ZT1Ob25lLCBtYXRyaXg9Tm9uZSwgbGFuZz1Ob25lLCBuYW1lc3BhY2U9Tm9uZSwgZmFsbGJhY2s9
Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBjb25zdHJ1Y3RzIGEgVkRFWCBtYW5hZ2VyIGFu
ZCBwYXJzZXMgYSBYTUwgdm9jYWJ1bGFyeQorCQlmaWxlOiBhIGZpbGUgb3Igc3RyaW5nIHRoYXQg
aXMgcGFyc2VkCisJCW1hdHJpeDogYSB0d28gZGltZW5zaW9uYWwgbWF0cml4IHRoYXQgaXMgcGFy
c2VkIGludG8gYSB2ZGV4IGZpbGUKKwkJbGFuZzogc2V0IHRoZSBkZWZhdWx0IGxhbmd1YWdlIGZv
ciBvdXRwdXQgKCcqJyBmb3IgbXVsdGlsaW5ndWFsIHRlcm1zKQorICAgICAgICBuYW1lc3BhY2U6
IGRlY2xhcmVzIHRoZSBJTVMtVkRFWCBuYW1lc3BhY2UgaW4gdGhlIHZvY2FiIGZpbGUKKwkJICAo
JycgaGFuZGxlcyBWREVYIGZpbGVzIHdpdGhvdXQgYW55IGRlY2xhcmVkIG5hbWVzcGFjZSkuCisg
ICAgICAgIGZhbGxiYWNrOiBpZiBubyB0cmFuc2xhdGlvbiBpcyBmb3VuZCBmb3IgdGhlIGdpdmVu
IGxhbmd1YWdlCisgICAgICAgICAgc2hvdWxkIHRoZSB0ZXJtIGJlIHJldHVybmVkIGluIHRoZSBk
ZWZhdWx0IGxhbmd1YWdlCisgICAgICAgICAgb3IgYXMgc2VsZi51bm5hbWVkX3Rlcm0gPworICAg
ICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXRyaXgsIGJhc2VzdHJpbmcpOgorICAg
ICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIlRoaXMgaXMgdGhlIG5ldyBpbXN2ZGV4IHZl
cnNpb24uIFlvdSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJpZWQgdG8g
cGFzcyB0aGUgZGVmYXVsdCBsYW5ndWFnZSBhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAidGhlIG1hdHJpeC4gQ29uc2lkZXIgdG8gdXNlIG5hbWVkIGFyZ3VtZW50cyIpCisg
ICAgICAgIGlmIGxhbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRlZmF1bHRfbGFu
Z3VhZ2UgPSBsYW5nCisgICAgICAgIGlmIG5hbWVzcGFjZSBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHNlbGYudmRleF9uYW1lc3BhY2UgPSBuYW1lc3BhY2UKKyAgICAgICAgaWYgZmFsbGJhY2sg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmZhbGxiYWNrX3RvX2RlZmF1bHRfbGFuZ3Vh
Z2UgPSBmYWxsYmFjaworICAgICAgICBpZiBtYXRyaXggaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICBzZWxmLnBhcnNlTWF0cml4KG1hdHJpeCkKKyAgICAgICAgaWYgZmlsZSBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIHNlbGYucGFyc2UoZmlsZSkKKyAgICAgICAgaWYgZmlsZSBhbmQgbWF0cml4
OgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIllvdSBnYXZlIG1lIGEgYSBtYXRy
aXggYW5kIGEgZmlsZSwgaXQgaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Im5vdCBkZWZpbmVkIHdoYXQgdGFrZXMgcHJlY2VkZW5jZS4gWW91IG1heSAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAib25seSBzZXQgb25lIG9mIHRoZSB0d28gcGFyYW1ldGVy
cyIpCisKKyAgICBkZWYgaXNWREVYKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgY2hlY2tz
IGlmIHRoZSBwYXJzZWQgWE1MIHNlZW1zIHRvIGJlIGEgdmFsaWQgVkRFWCB2b2NhYnVsYXJ5Cisg
ICAgICAgICIiIgorICAgICAgICAjIHRoaXMgbWV0aG9kIGRvZXMgbm90IHBlcmZvcm0gYSBjb21w
bGV0ZSBzY2hlbWEgdmFsaWRhdGlvbgorCQkjIGl0IGp1c3QgY2hlY2tzIGZvciBhIHJvb3QgZWxl
bWVudCBuYW1lZCAndmRleCcgaW4gdGhlIGV4cGVjdGVkICBuYW1lc3BhY2UKKyAgICAgICAgcmV0
dXJuIHNlbGYudHJlZS5nZXRyb290KCkudGFnID09IHNlbGYudmRleFRhZygndmRleCcpCisKKyAg
ICBkZWYgcGFyc2Uoc2VsZiwgZmlsZSk6CisgICAgICAgICIiIgorICAgICAgICBwYXJzZXMgYSBW
REVYIHZvY2FidWxhcnkgZmlsZSBvciBYTUwgc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBp
ZiBpc2luc3RhbmNlKGZpbGUsIFN0cmluZ1R5cGVzKToKKyAgICAgICAgICAgIGZpbGUgPSBTdHJp
bmdJTyhmaWxlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnRyZWUgPSBldHJlZS5w
YXJzZShmaWxlKQorICAgICAgICBleGNlcHQgKFN5bnRheEVycm9yLCBFeHBhdEVycm9yKSwgZToK
KyAgICAgICAgICAgIHJhaXNlIFZERVhFcnJvciwgJ1BhcnNlIGVycm9yIGluIHZvY2FidWxhcnkg
WE1MOiAlcycgJSBlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZS5u
YW1lCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGZpbGVuYW1l
ID0gJ3BhcnNlZCBYTUwgdGV4dCcKKyAgICAgICAgaWYgbm90IHNlbGYuaXNWREVYKCk6CisgICAg
ICAgICAgICByYWlzZSBWREVYRXJyb3IsICdWb2NhYnVsYXJ5IGZvcm1hdCBub3QgY29ycmVjdCBp
biAlcycgJSBmaWxlbmFtZQorICAgICAgICBzZWxmLm9yZGVyX3NpZ25pZmljYW50ID0gc2VsZi5p
c09yZGVyU2lnbmlmaWNhbnQoKQorICAgICAgICBzZWxmLm1ha2VUZXJtRGljdCgpCisgICAgICAg
IHJldHVybiBzZWxmLnRyZWUKKworICAgIGRlZiBzZXJpYWxpemUoc2VsZiwgZmlsZT1Ob25lKToK
KyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgdGhlIHZvY2FidWxhcnkgYXMgWE1MCisgICAg
ICAgICIiIgorICAgICAgICByZXR1cm4gZXRyZWUudG9zdHJpbmcoc2VsZi50cmVlLCBlbmNvZGlu
Zz0ndXRmLTgnLCBzdGFuZGFsb25lPVRydWUpCisKKyAgICBkZWYgZ2V0Vm9jYWJJZGVudGlmaWVy
KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJucyB0aGUgdm9jYWJ1bGFyeSBpZGVu
dGlmaWVyCisgICAgICAgICIiIgorICAgICAgICB4cGF0aCA9IHNlbGYudmRleFRhZygndm9jYWJJ
ZGVudGlmaWVyJykKKyAgICAgICAgcmV0dXJuIHNlbGYudHJlZS5maW5kdGV4dCh4cGF0aCkKKwor
ICAgIGRlZiBnZXRWb2NhYk5hbWUoc2VsZiwgbGFuZz1Ob25lKToKKyAgICAgICAgIiIiCisgICAg
ICAgIHJldHVybnMgdGhlIHZvY2FidWxhcnkgbmFtZSBpbiB0aGUgZ2l2ZW4gKG9yIGRlZmF1bHQp
IGxhbmd1YWdlLgorICAgICAgICBJZiBsYW5nIGlzICcqJywgcmV0dXJucyBhIGRpY3Qgb2YgYWxs
IHRyYW5zbGF0aW9ucyBrZXllZCBieSBsYW5ndWFnZQorICAgICAgICAiIiIKKyAgICAgICAgeHBh
dGggPSAnJXMvJXMnICUgKHNlbGYudmRleFRhZygndm9jYWJOYW1lJyksIHNlbGYudmRleFRhZygn
bGFuZ3N0cmluZycpKQorICAgICAgICBjYXB0aW9ucyA9IHNlbGYudHJlZS5maW5kYWxsKHhwYXRo
KQorICAgICAgICByZXR1cm4gc2VsZi5nZXRMYW5nc3RyaW5nKGNhcHRpb25zLCBsYW5nLCBkZWZh
dWx0PScodW5uYW1lZCB2b2NhYnVsYXJ5KScpCisKKyAgICBkZWYgZ2V0Vm9jYWJNZXRhZGF0YShz
ZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgdGhlIFZERVggbWV0YWRhdGEgZWxl
bWVudChzKSBmb3IgdGhlIFZvY2FidWxhcnkKKyAgICAgICAgIiIiCisgICAgICAgIHhwYXRoID0g
c2VsZi52ZGV4VGFnKCdtZXRhZGF0YScpCisgICAgICAgIHJldHVybiBzZWxmLnRyZWUuZ2V0cm9v
dCgpLmZpbmRhbGwoeHBhdGgpCisKKyAgICBkZWYgZ2V0Vm9jYWJXaWxkY2FyZChzZWxmLCBmb3Jl
aWduX25zLCB0YWduYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgJ3dpbGRjYXJk
JyBlbGVtZW50KHMpICh3aXRoIGEgZm9yZWlnbiBuYW1lc3BhY2UpIGZvciB0aGUgVm9jYWJ1bGFy
eQorICAgICAgICAiIiIKKyAgICAgICAgeHBhdGggPSBzZWxmLm5zVGFnKGZvcmVpZ25fbnMsIHRh
Z25hbWUpCisgICAgICAgIHJldHVybiBzZWxmLnRyZWUuZ2V0cm9vdCgpLmZpbmRhbGwoeHBhdGgp
CisKKyAgICBkZWYgaXNGbGF0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJucyB0
cnVlIGlmIHRoZSBWREVYIHByb2ZpbGUgdHlwZSBkZW5vdGVzIGEgZmxhdCB2b2NhYnVsYXJ5Cisg
ICAgICAgICIiIiAKKyAgICAgICAgdmRleCA9IHNlbGYudHJlZS5nZXRyb290KCkKKyAgICAgICAg
cmV0dXJuIHZkZXguZ2V0KCdwcm9maWxlVHlwZScpIGluIFZERVhfRkxBVF9QUk9GSUxFX1RZUEVT
CisKKyAgICBkZWYgaXNPcmRlclNpZ25pZmljYW50KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAg
ICAgcmV0dXJucyB0cnVlIGlmIHRoZSBvcmRlciBvZiB0aGUgVkRFWCB2b2NhYnVsYXJ5IGlzIHNp
Z25pZmljYW50CisgICAgICAgICIiIiAKKyAgICAgICAgdmRleCA9IHNlbGYudHJlZS5nZXRyb290
KCkKKyAgICAgICAgcmV0dXJuIHZkZXguZ2V0KCdvcmRlclNpZ25pZmljYW50Jykgbm90IGluIEZB
TFNFX1ZBTFVFUworCisgICAgZGVmIHNob3dMZWFmc09ubHkoc2VsZik6CisgICAgICAgICIiIgor
ICAgICAgICB0aGlzIGlzIG5vdCBkZWNsYXJlZCBpbiBWREVYIHZvY2Ficywgc28gd2UgcmV0dXJu
IGZhbHNlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gZmFsc2UKKworICAgIGRlZiBnZXRW
b2NhYnVsYXJ5RGljdChzZWxmLCBsYW5nPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgcmV0
dXJucyBhIHZvY2FidWxhcnkgZGljdGlvbmFyeSAoZm9yIEFyY2hlVHlwZXMpIGluIHRoZSBnaXZl
biBsYW5ndWFnZS4KKyAgICAgICAgSWYgbGFuZyBpcyAnKicsIHJldHVybnMgZGljdHMgb2YgYWxs
IHRyYW5zbGF0aW9ucyBrZXllZCBieSBsYW5ndWFnZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0
dXJuIHNlbGYuZ2V0VGVybXMoc2VsZi50cmVlLmdldHJvb3QoKSwgbGFuZykKKworICAgIGRlZiBn
ZXRUZXJtcyhzZWxmLCBlbGVtZW50LCBsYW5nPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAg
Z2V0IGFsbCB0ZXJtIGVsZW1lbnRzIHJlY3Vyc2l2ZWx5CisgICAgICAgICAgcmV0dXJucyBhIGhp
ZXJhcmNoaWMgZGljdGlvbmFyeSBzdHJ1Y3R1cmUgb2YgdGhlIHZvY2FidWxhcnkKKyAgICAgICAg
IiIiCisgICAgICAgIHhwYXRoID0gc2VsZi52ZGV4VGFnKCd0ZXJtJykKKyAgICAgICAgdGVybXMg
PSBlbGVtZW50LmZpbmRhbGwoeHBhdGgpCisgICAgICAgIGlmIGxlbih0ZXJtcykgPT0gMDoKKyAg
ICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgd2Ugc2hvdWxkIG5vdCBvbmx5IHRlc3Qg
b3JkZXIgc2lnbmlmaWNhbmNlIGdsb2JhbGx5LCBidXQgYWxzbyBmb3IgZXZlcnkgdGVybQorICAg
ICAgICBpZiBzZWxmLm9yZGVyX3NpZ25pZmljYW50OgorICAgICAgICAgICAgcmVzdWx0ID0gT3Jk
ZXJlZERpY3QoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0ge30KKyAgICAg
ICAgZm9yIHRlcm0gaW4gdGVybXM6CisgICAgICAgICAgICBrZXkgPSBzZWxmLmdldFRlcm1JZGVu
dGlmaWVyKHRlcm0pCisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuZ2V0VGVybUNhcHRpb24odGVy
bSwgbGFuZykKKyAgICAgICAgICAgIHJlc3VsdFtrZXldID0gKHZhbHVlLCBzZWxmLmdldFRlcm1z
KHRlcm0sIGxhbmcpKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgZ2V0VGVybUlk
ZW50aWZpZXIoc2VsZiwgdGVybSk6CisgICAgICAgICIiIgorICAgICAgICByZXR1cm5zIHRoZSB0
ZXJtSWRlbnRpZmllciBmb3IgYSBnaXZlbiB0ZXJtIGVsZW1lbnQKKyAgICAgICAgIiIiCisgICAg
ICAgIHhwYXRoID0gc2VsZi52ZGV4VGFnKCd0ZXJtSWRlbnRpZmllcicpCisgICAgICAgIHJldHVy
biB0ZXJtLmZpbmR0ZXh0KHhwYXRoKQorCisgICAgZGVmIGdldFRlcm1DYXB0aW9uKHNlbGYsIHRl
cm0sIGxhbmc9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICByZXR1cm5zIHRoZSB0cmFuc2xh
dGVkIGNhcHRpb24gZm9yIGEgdGVybQorICAgICAgICAgIGZvciBsYW5nID09ICIqIiB0aGUgbWV0
aG9kIHJldHVybnMgYSBkaWN0aW9uYXJ5IHdpdGggYWxsIHRyYW5zbGF0aW9ucyAKKyAgICAgICAg
ICBrZXllZCBieSBsYW5ndWFnZQorICAgICAgICAiIiIKKyAgICAgICAgaWYgdGVybSBpcyBOb25l
OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgeHBhdGggPSAnJXMvJXMnICUgKHNl
bGYudmRleFRhZygnY2FwdGlvbicpLCBzZWxmLnZkZXhUYWcoJ2xhbmdzdHJpbmcnKSkKKyAgICAg
ICAgY2FwdGlvbnMgPSB0ZXJtLmZpbmRhbGwoeHBhdGgpCisgICAgICAgIHJldHVybiBzZWxmLmdl
dExhbmdzdHJpbmcoY2FwdGlvbnMsIGxhbmcpCisKKyAgICBkZWYgZ2V0VGVybURlc2NyaXB0aW9u
KHNlbGYsIHRlcm0sIGxhbmc9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICByZXR1cm5zIHRo
ZSB0cmFuc2xhdGVkIGRlc2NyaXB0aW9uIGZvciBhIHRlcm0KKyAgICAgICAgICBmb3IgbGFuZyA9
PSAiKiIgdGhlIG1ldGhvZCByZXR1cm5zIGEgZGljdGlvbmFyeSB3aXRoIGFsbCB0cmFuc2xhdGlv
bnMgCisgICAgICAgICAga2V5ZWQgYnkgbGFuZ3VhZ2UKKyAgICAgICAgIiIiCisgICAgICAgIGlm
IHRlcm0gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHhwYXRoID0g
JyVzLyVzJyAlIChzZWxmLnZkZXhUYWcoJ2Rlc2NyaXB0aW9uJyksIHNlbGYudmRleFRhZygnbGFu
Z3N0cmluZycpKQorICAgICAgICBkZXNjcmlwdGlvbnMgPSB0ZXJtLmZpbmRhbGwoeHBhdGgpCisg
ICAgICAgIHJldHVybiBzZWxmLmdldExhbmdzdHJpbmcoZGVzY3JpcHRpb25zLCBsYW5nLCBkZWZh
dWx0PScnKQorCisgICAgZGVmIGdldExhbmdzdHJpbmcoc2VsZiwgZWxlbWVudHMsIGxhbmc9Tm9u
ZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgdGhlIGxhbmdz
dHJpbmcgaW4gdGhlIGdpdmVuIGxhbmd1YWdlLgorICAgICAgICBmb3IgbGFuZyA9PSAiKiIgdGhl
IG1ldGhvZCByZXR1cm5zIGEgZGljdGlvbmFyeSB3aXRoIGFsbCB0cmFuc2xhdGlvbnMgCisgICAg
ICAgIGtleWVkIGJ5IGxhbmd1YWdlCisgICAgICAgICIiIgorICAgICAgICBpZiBsYW5nID09ICcq
JzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldEFsbExhbmdzdHJpbmdzKGVsZW1lbnRzKQor
ICAgICAgICBpZiBsYW5nIGlzIE5vbmU6CisgICAgICAgICAgICBsYW5nID0gc2VsZi5kZWZhdWx0
X2xhbmd1YWdlCisgICAgICAgIGlmIGRlZmF1bHQgaXMgTm9uZToKKyAgICAgICAgICAgIGRlZmF1
bHQgPSBzZWxmLnVubmFtZWRfdGVybQorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgIGZv
ciBlbGVtZW50IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgaWYgZWxlbWVudC5nZXQoJ2xhbmd1
YWdlJykgPT0gbGFuZzoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBlbGVtZW50LnRleHQKKyAg
ICAgICAgICAgIGlmIHNlbGYuZmFsbGJhY2tfdG9fZGVmYXVsdF9sYW5ndWFnZToKKyAgICAgICAg
ICAgICAgIGlmIGVsZW1lbnQuZ2V0KCdsYW5ndWFnZScpID09IHNlbGYuZGVmYXVsdF9sYW5ndWFn
ZToKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IGVsZW1lbnQudGV4dAorICAgICAgICBp
ZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHQKKyAgICAgICAg
cmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGdldEFsbExhbmdzdHJpbmdzKHNlbGYsIGVsZW1lbnRz
KToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgYSBkaWN0aW9uYXJ5IHdpdGggYWxsIHRy
YW5zbGF0aW9ucyBrZXllZCBieSBsYW5ndWFnZQorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0
ID0ge30KKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CisgICAgICAgICAgICByZXN1
bHRbZWxlbWVudC5nZXQoJ2xhbmd1YWdlJyldID0gZWxlbWVudC50ZXh0CisgICAgICAgIHJldHVy
biByZXN1bHQKKworICAgIGRlZiBnZXRUZXJtQnlJZChzZWxmLCBpZGVudGlmaWVyKToKKyAgICAg
ICAgIiIiCisgICAgICAgIHJldHVybnMgdGhlIFZERVggdGVybSBlbGVtZW50IGZvciBhIGdpdmVu
IHRlcm0gaWRlbnRpZmllcgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGVybV9k
aWN0LmdldChpZGVudGlmaWVyLCBOb25lKQorCisgICAgZGVmIGdldFRlcm1DYXB0aW9uQnlJZChz
ZWxmLCBpZGVudGlmaWVyLCBsYW5nPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJu
cyB0aGUgY2FwdGlvbihzKSBmb3IgYSBnaXZlbiB0ZXJtIGlkZW50aWZpZXIKKyAgICAgICAgIiIi
CisgICAgICAgIHRlcm0gPSBzZWxmLmdldFRlcm1CeUlkKGlkZW50aWZpZXIpCisgICAgICAgIHJl
dHVybiBzZWxmLmdldFRlcm1DYXB0aW9uKHRlcm0sIGxhbmcpCisKKyAgICBkZWYgZ2V0VGVybURl
c2NyaXB0aW9uQnlJZChzZWxmLCBpZGVudGlmaWVyLCBsYW5nPU5vbmUpOgorICAgICAgICAiIiIK
KyAgICAgICAgcmV0dXJucyB0aGUgZGVzY3JpcHRpb24ocykgZm9yIGEgZ2l2ZW4gdGVybSBpZGVu
dGlmaWVyCisgICAgICAgICIiIgorICAgICAgICB0ZXJtID0gc2VsZi5nZXRUZXJtQnlJZChpZGVu
dGlmaWVyKQorICAgICAgICByZXR1cm4gc2VsZi5nZXRUZXJtRGVzY3JpcHRpb24odGVybSwgbGFu
ZykKKworICAgIGRlZiBnZXRUZXJtTWV0YWRhdGFCeUlkKHNlbGYsIGlkZW50aWZpZXIpOgorICAg
ICAgICAiIiIKKyAgICAgICAgcmV0dXJucyB0aGUgVkRFWCBtZXRhZGF0YSBlbGVtZW50KHMpIGlu
c2lkZSBhIHRlcm0KKyAgICAgICAgICBmb3IgYSBnaXZlbiB0ZXJtIGlkZW50aWZpZXIKKyAgICAg
ICAgIiIiCisgICAgICAgIHRlcm0gPSBzZWxmLmdldFRlcm1CeUlkKGlkZW50aWZpZXIpCisgICAg
ICAgIHhwYXRoID0gc2VsZi52ZGV4VGFnKCdtZXRhZGF0YScpCisgICAgICAgIHJldHVybiB0ZXJt
LmZpbmRhbGwoeHBhdGgpCisKKyAgICBkZWYgZ2V0VGVybVdpbGRjYXJkQnlJZChzZWxmLCBpZGVu
dGlmaWVyLCBuYW1lc3BhY2UsIHRhZ25hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJu
cyAnd2lsZGNhcmQnIGVsZW1lbnQocykgKHdpdGggYSBmb3JlaWduIG5hbWVzcGFjZSkKKyAgICAg
ICAgICBpbnNpZGUgYSB0ZXJtIGZvciBhIGdpdmVuIHRlcm0gaWRlbnRpZmllcgorICAgICAgICAi
IiIKKyAgICAgICAgdGVybSA9IHNlbGYuZ2V0VGVybUJ5SWQoaWRlbnRpZmllcikKKyAgICAgICAg
eHBhdGggPSBzZWxmLm5zVGFnKG5hbWVzcGFjZSwgdGFnbmFtZSkKKyAgICAgICAgcmV0dXJuIHRl
cm0uZmluZGFsbCh4cGF0aCkKKworICAgIGRlZiBnZXRUYWduYW1lKHNlbGYsIG5zbmFtZSk6CisJ
ICAgICMgbm90IG5lZWRlZCBoZXJlCisgICAgICAgIGlmIG5vdCBuc25hbWVbOjFdID09ICJ7IjoK
KyAgICAgICAgICAgIHJldHVybiBuc25hbWUKKyAgICAgICAgbmFtZXNwYWNlX3VyaSwgdGFnbmFt
ZSA9IHN0cmluZy5zcGxpdChuYW1lWzE6XSwgIn0iLCAxKQorICAgICAgICByZXR1cm4gdGFnbmFt
ZQorCisgICAgZGVmIG5zVGFnKHNlbGYsIG5hbWVzcGFjZSwgdGFnbmFtZSk6CisgICAgICAgICIi
IgorICAgICAgICByZXR1cm5zIGEgdGFnIHdpdGggYSBuYW1lc3BhY2Ugb2YgdGhlIGZvcm0gJ3tu
YW1lc3BhY2VfdXJpfXRhZ25hbWUnCisgICAgICAgICAgb3IganVzdCB0aGUgdGFnIG5hbWUgaWYg
YW4gZW1wdHkgbmFtZXNwYWNlIHdhcyBnaXZlbgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbmFt
ZXNwYWNlID09ICcnOgorICAgICAgICAgICAgcmV0dXJuIHRhZ25hbWUKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHJldHVybiAneyVzfSVzJyAlIChuYW1lc3BhY2UsIHRhZ25hbWUpCisKKyAg
ICBkZWYgdmRleFRhZyhzZWxmLCB0YWduYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVy
bnMgYSB0YWcgd2l0aCB0aGUgVkRFWCBuYW1lc3BhY2Ugb3IganVzdCB0aGUgdGFnIG5hbWUKKyAg
ICAgICAgICBpZiB0aGUgVkRFWCBuYW1lc3BhY2UgaXMgdGhlIGVtcHR5IHN0cmluZworICAgICAg
ICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYubnNUYWcoc2VsZi52ZGV4X25hbWVzcGFjZSwgdGFn
bmFtZSkKKworICAgIGRlZiB2ZGV4U2VhcmNoVGVybShzZWxmLCAqdGFncyk6CisgICAgICAgICIi
IgorICAgICAgICByZXR1cm4gYSBTZWFyY2ggcGF0aCBlbGVtZW50IHdpdGggZWFjaCB0YWcgb2Yg
dGhlIGxpc3Qgb2YKKyAgICAgICAgdGFncyBjb25jYXRlbmF0ZWQgYnkgLworICAgICAgICAiIiIK
KyAgICAgICAgcmV0dXJuICcvJy5qb2luKFtzZWxmLnZkZXhUYWcodGFnKSBmb3IgdGFnIGluIHRh
Z3NdKQorCisgICAgZGVmIG1ha2VUZXJtRGljdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAg
IGNvbnN0cnVjdHMgYSBmbGF0IGRpY3Rpb25hcnkgb2YgdGVybSBlbGVtZW50cywga2V5ZWQgYnkg
dGVybUlkZW50aWZpZXIgCisgICAgICAgICIiIgorICAgICAgICAjIHRoZSAuLy8gcHJlZml4IGZp
bmRzIGFsbCBpdGVtcyByZWN1cnNpdmVseQorICAgICAgICB4cGF0aCA9ICcuLy8nICsgc2VsZi52
ZGV4VGFnKCd0ZXJtJykKKyAgICAgICAgdGVybXMgPSBzZWxmLnRyZWUuZ2V0cm9vdCgpLmZpbmRh
bGwoeHBhdGgpCisgICAgICAgIHNlbGYudGVybV9kaWN0ID0ge30KKyAgICAgICAgZm9yIHRlcm0g
aW4gdGVybXM6CisgICAgICAgICAgICBrZXkgPSBzZWxmLmdldFRlcm1JZGVudGlmaWVyKHRlcm0p
CisgICAgICAgICAgICBzZWxmLnRlcm1fZGljdFtrZXldID0gdGVybQorCisgICAgZGVmIGV4cG9y
dE1hdHJpeChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHR3byBkaW1lbnNp
b25hbCBtYXRyaXggcmVwcmVzZW50YXRpb24gb2YgdGhlIHZkZXggZmlsZQorICAgICAgICAiIiIK
KyAgICAgICAgIyBGaXJzdCBmdWxsIGl0ZXJhdGlvbiwgZ2V0IGFsbCBsYW5ndWFnZXMKKyAgICAg
ICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ3RyZWUnKToKKyAgICAgICAgICAgIHJldHVybiBbXQor
ICAgICAgICBsYW5ndWFnZXMgPSBmaWx0ZXIobGFtYmRhIHg6eCxzZXQoW3guYXR0cmliLmdldCgn
bGFuZ3VhZ2UnLCAnJykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciB4IGluIHNlbGYudHJlZS5maW5kYWxsKCcvLyonKV0pKQorICAgICAgICBsYW5ndWFn
ZXMuc29ydCgpCisgICAgICAgIGRlcHRoID0gMAorICAgICAgICByb3dzID0gW10KKyAgICAgICAg
Y2hpbGRyZW5fZmF0aGVyc19sZXZlbCA9IHt9CisKKyAgICAgICAgIyBTZWNvbmQgZnVsbCBpdGVy
YXRpb24uIENvbnZlcnQgeG1sIHRyZWUgdG8gYSBmbGF0IHB5dGhvbiBzdHJ1Y3R1cmUKKyAgICAg
ICAgIyBEZXB0aCBpcyBtYWludGFpbmVkIGJ5IGFuIGluZGV4LCBidXQgcGFyZW50IHJlbGF0aW9u
c2hpcHMgaXMgb25seQorICAgICAgICAjIG1haW50YWluZWQgYnkgb3JkZXJpbmcuCisgICAgICAg
IGZvciB0ZXJtIGluIHNlbGYudHJlZS5maW5kYWxsKCcvLycgKyBzZWxmLnZkZXhTZWFyY2hUZXJt
KCd0ZXJtJykpOgorICAgICAgICAgICAgcm93ID0ge30KKyAgICAgICAgICAgIHJvd1sna2V5J10g
PSB0ZXJtLmZpbmQoc2VsZi52ZGV4U2VhcmNoVGVybSgndGVybUlkZW50aWZpZXInKSlcCisgICAg
ICAgICAgICAgICAgLnRleHQuc3RyaXAoKQorICAgICAgICAgICAgY2FwdGlvbnMgPSB7fQorICAg
ICAgICAgICAgZGVzY3JpcHRpb25zID0ge30KKyAgICAgICAgICAgIGZvciBsYW5nIGluIGxhbmd1
YWdlczoKKyAgICAgICAgICAgICAgICBjYXB0aW9uc1tsYW5nXSA9ICIiCisgICAgICAgICAgICAg
ICAgZGVzY3JpcHRpb25zW2xhbmddID0gIiIKKyAgICAgICAgICAgIGZvciBjYXB0aW9uIGluIHRl
cm0uZmluZGFsbChcCisgICAgICAgICAgICAgICAgICAgIHNlbGYudmRleFNlYXJjaFRlcm0oJ2Nh
cHRpb24nLCAnbGFuZ3N0cmluZycpKToKKyAgICAgICAgICAgICAgICBpZiBjYXB0aW9uLmF0dHJp
Yi5oYXNfa2V5KCdsYW5ndWFnZScpOgorICAgICAgICAgICAgICAgICAgICBjYXB0aW9uc1tjYXB0
aW9uLmF0dHJpYlsnbGFuZ3VhZ2UnXV0gPSBjYXB0aW9uLnRleHQuc3RyaXAoKQorICAgICAgICAg
ICAgZm9yIGRlc2NyaXB0aW9uIGluIHRlcm0uZmluZGFsbChcCisgICAgICAgICAgICAgICAgICAg
IHNlbGYudmRleFNlYXJjaFRlcm0oJ2Rlc2NyaXB0aW9uJywgJ2xhbmdzdHJpbmcnKSk6CisgICAg
ICAgICAgICAgICAgaWYgZGVzY3JpcHRpb24uYXR0cmliLmhhc19rZXkoJ2xhbmd1YWdlJyk6Cisg
ICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tkZXNjcmlwdGlvbi5hdHRyaWJbJ2xhbmd1
YWdlJ11dID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24udGV4dCBhbmQg
ZGVzY3JpcHRpb24udGV4dC5zdHJpcCgpIG9yICcnCisgICAgICAgICAgICByb3dbJ2NhcHRpb25z
J10gPSBjYXB0aW9ucworICAgICAgICAgICAgcm93WydkZXNjcmlwdGlvbnMnXSA9IGRlc2NyaXB0
aW9ucworCisgICAgICAgICAgICAjIElmIHRoaXMgaXRlbSBpcyBhIGNoaWxkIG9mIHNvbWV0aGlu
ZywgdGhlIGZhdGhlciBtdXN0IGhhdmUKKyAgICAgICAgICAgICMgYmVlbiBwYXJzZWQgYmVmb3Jl
LCBhbmQgc3RvcmVkIGl0cyBsZXZlbCBpbgorICAgICAgICAgICAgIyBjaGlsZHJlbl9mYXRoZXJz
X2xldmVsLiBPbmNlIGZvciBlYWNoIGNoaWxkIHdpdGggdGhlIGNoaWxkCisgICAgICAgICAgICAj
IGFzIHRoZSBrZXkKKyAgICAgICAgICAgIGZhdGhlcl9sZXZlbCA9IGNoaWxkcmVuX2ZhdGhlcnNf
bGV2ZWwuZ2V0KHRlcm0sIC0xKQorICAgICAgICAgICAgb3duX2xldmVsID0gZmF0aGVyX2xldmVs
ICsgMQorICAgICAgICAgICAgZGVwdGggPSBtYXgob3duX2xldmVsLCBkZXB0aCkKKyAgICAgICAg
ICAgIGZvciBjaGlsZF90ZXJtIGluIHRlcm0uZmluZGFsbChzZWxmLnZkZXhTZWFyY2hUZXJtKCd0
ZXJtJykpOgorICAgICAgICAgICAgICAgIGNoaWxkcmVuX2ZhdGhlcnNfbGV2ZWxbY2hpbGRfdGVy
bV0gPSBvd25fbGV2ZWwKKyAgICAgICAgICAgIHJvd1snbGV2ZWwnXSA9IG93bl9sZXZlbAorICAg
ICAgICAgICAgcm93cy5hcHBlbmQocm93KQorCisgICAgICAgICMgTm93IHRoYXQgd2Uga25vdyB0
aGUgbWF4aW11bSBkZXB0aCBvZiB0aGUgdHJlZSwgd2UgY2FuIGJ1aWxkIHRoZSB0d28KKyAgICAg
ICAgIyBkaW1lbnNpb25hbCBtYXRyaXguCisgICAgICAgIHJldHZhbF9yb3dzID0gW10KKyAgICAg
ICAgaGVhZGVyX3JvdyA9IFsiTGV2ZWwgJWkiICUgeCBmb3IgeCBpbiByYW5nZShkZXB0aCsxKV0K
KyAgICAgICAgZm9yIGxhbmcgaW4gbGFuZ3VhZ2VzOgorICAgICAgICAgICAgaGVhZGVyX3Jvdy5l
eHRlbmQoWydDYXB0aW9uICVzJyAlIGxhbmcsICdEZXNjcmlwdGlvbiAlcycgJSBsYW5nXSkKKyAg
ICAgICAgcmV0dmFsX3Jvd3MuYXBwZW5kKGhlYWRlcl9yb3cpCisgICAgICAgIGZvciByb3cgaW4g
cm93czoKKyAgICAgICAgICAgIHJldHZhbF9yb3cgPSBbJycgZm9yIHggaW4gcmFuZ2UoZGVwdGgg
KyAxICsgMiAqIGxlbihsYW5ndWFnZXMpKV0KKyAgICAgICAgICAgIHJldHZhbF9yb3dbcm93Wyds
ZXZlbCddXSA9IHJvd1sna2V5J10KKyAgICAgICAgICAgIGZvciBsYW5nX2NvdW50LCBsYW5nIGlu
IGVudW1lcmF0ZShsYW5ndWFnZXMpOgorICAgICAgICAgICAgICAgIG9mZnNldCA9IGRlcHRoICsg
MQorICAgICAgICAgICAgICAgIHJldHZhbF9yb3dbb2Zmc2V0ICsgbGFuZ19jb3VudCAqIDJdID0g
cm93WydjYXB0aW9ucyddW2xhbmddCisgICAgICAgICAgICAgICAgcmV0dmFsX3Jvd1tvZmZzZXQg
KyBsYW5nX2NvdW50ICogMiArIDFdID0gcm93WydkZXNjcmlwdGlvbnMnXVtsYW5nXQorICAgICAg
ICAgICAgcmV0dmFsX3Jvd3MuYXBwZW5kKHJldHZhbF9yb3cpCisgICAgICAgIHJldHVybiByZXR2
YWxfcm93cworCisgICAgZGVmIHBhcnNlTWF0cml4KHNlbGYsIG1hdHJpeCk6CisgICAgICAgICIi
IgorICAgICAgICBTZXR1cCBhIG1hbmFnZXIgYmFzZWQgb24gYSBtYXRyaXgKKyAgICAgICAgIiIi
CisgICAgICAgIGxhbmd1YWdlcyA9IFtdCisgICAgICAgIHN0YXRlID0gJ0xldmVscycKKyAgICAg
ICAgcGFyZW50cyA9IFtdCisgICAgICAgIGZvciBjb2x1bW4sIGNlbGwgaW4gZW51bWVyYXRlKG1h
dHJpeFswXSk6CisgICAgICAgICAgICBpZiBub3QgKGNlbGwuc3RhcnRzd2l0aCgnTGV2ZWwgJykK
KyAgICAgICAgICAgICAgICAgb3IgY2VsbC5zdGFydHN3aXRoKCdEZXNjcmlwdGlvbiAnKQorICAg
ICAgICAgICAgICAgICBvciBjZWxsLnN0YXJ0c3dpdGgoJ0NhcHRpb24gJykpOgorICAgICAgICAg
ICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJEYXRhIGlzIG5vdCB2YWxpZCwgdW5rbm93biBo
ZWFkZXIiKQorICAgICAgICAgICAgaWYgc3RhdGUgPT0gJ0xldmVscyc6CisgICAgICAgICAgICAg
ICAgaWYgY2VsbC5zdGFydHN3aXRoKCdMZXZlbCAnKToKKyAgICAgICAgICAgICAgICAgICAgcGFy
ZW50cy5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg
ICAgICAgICBlbGlmIGNlbGwuc3RhcnRzd2l0aCgnQ2FwdGlvbiAnKToKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUgPSAnQ2FwdGlvbicKKyAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzLmFw
cGVuZChjZWxsWzg6XSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiRGF0
YSBpcyBub3QgdmFsaWQsIGFmdGVyIExldmVsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImhlYWRlciBtdXN0IGNvbWUgdGhlIGNhcHRpb24iKQorICAgICAgICAg
ICAgZWxpZiBzdGF0ZSA9PSAnQ2FwdGlvbic6CisgICAgICAgICAgICAgICAgaWYgY2VsbC5zdGFy
dHN3aXRoKCdEZXNjcmlwdGlvbiAnKToKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnRGVz
Y3JpcHRpb24nCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkRhdGEgaXMg
bm90IHZhbGlkLCBhZnRlciBDYXB0aW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImhlYWRlciBtdXN0IGNvbWUgdGhlIGRlc2NyaXB0aW9uIikKKyAgICAgICAg
ICAgIGVsaWYgc3RhdGUgPT0gJ0Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICAgICAgICBpZiBjZWxs
LnN0YXJ0c3dpdGgoJ0NhcHRpb24gJyk6CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ0Nh
cHRpb24nCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGxhbmd1YWdlcywgY2Vs
bFs4Ol0pOgorICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChjZWxsWzg6
XSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJh
aXNlIEF0dHJpYnV0ZUVycm8oIkRhdGEgaXMgbm90IHZhbGlkLCBsYW5ndWFnZXMgIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF5IG5vdCBhcHBlYXIgdHdp
Y2UhIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBB
dHRyaWJ1dGVFcnJvcigiRGF0YSBpcyBub3QgdmFsaWQsIGFmdGVyIERlc2NyaXB0aW9uIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbXVzdCBjb21lIGEgbmV3IENh
cHRpb24iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1
dGVFcnJvcigiUHJvZ3JhbW1pbmcgZXJyb3IsIHVua25vd24gc3RhdGUgZHVyaW5nICIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVhZGVyIHBhcnNpbmcgZW5jb3VudGVy
ZWQuIFNvcnJ5ISIpCisgICAgICAgIGRlcHRoID0gbGVuKHBhcmVudHMpCisKKworICAgICAgICBk
ZWYgYWRkU3ViRWxlbShwYXJlbnQsIGVsZW1lbnROYW1lLCB0ZXh0PU5vbmUpOgorICAgICAgICAg
ICAgcmV0dmFsID0gZXRyZWUuU3ViRWxlbWVudChwYXJlbnQsIHNlbGYudmRleFRhZyhlbGVtZW50
TmFtZSkpCisgICAgICAgICAgICBpZiB0ZXh0ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0
dmFsLnRleHQgPSB0ZXh0CisgICAgICAgICAgICByZXR1cm4gcmV0dmFsCisgICAgICAgIHJvb3Qg
PSBldHJlZS5FbGVtZW50KHNlbGYudmRleFRhZygndmRleCcpLCBuc21hcD17Tm9uZTogc2VsZi52
ZGV4X25hbWVzcGFjZX0pCisgICAgICAgICMgV0FSTklORyEhIFdlIGRvIGEgZGlydHkgdHJpY2sg
aGVyZS4gV2hlbiB0aGUgZmlyc3QgZWxlbWVudHMKKyAgICAgICAgIyBXYW50IHRvIGdldCB0aGVp
ciByb290IGVsZW1lbnQsIHRoZXkgaGF2ZSBhIGRlcHRoIG9mIDAKKyAgICAgICAgIyBUaGV5IHdp
bGwgdGhlbiBhc2sgZm9yIHBhcmVudHNbMC0xXS4gU28gaXQgZ2V0cyB0aGUgbGFzdAorICAgICAg
ICAjIGVsZW1lbnQuIEJlIGF3YXJlIG9mIHRoYXQhCisgICAgICAgIHBhcmVudHMuYXBwZW5kKHJv
b3QpCisgICAgICAgIGZvciByb3cgaW4gbWF0cml4WzE6XToKKyAgICAgICAgICAgIHJvd19kZXB0
aCA9IE5vbmUKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGRlcHRoKToKKyAgICAgICAgICAg
ICAgICBpZiByb3dbaV06CisgICAgICAgICAgICAgICAgICAgIGlmIHJvd19kZXB0aCAhPSBOb25l
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIlRoZSBNYXRy
aXggY29udGFpbnMgYW4gZWxlbWVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiY2FuJ3QgZGVjaWRlIG9uIG9uIHdoaWNoIGxldmVsICIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCBzaG91bGQgZXhpc3QiKQor
ICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcm93X2Rl
cHRoID0gaQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50c1tyb3dfZGVwdGgtMV0KKyAgICAg
ICAgICAgIHRlcm0gPSBhZGRTdWJFbGVtKHBhcmVudCwgJ3Rlcm0nKQorICAgICAgICAgICAgcGFy
ZW50c1tyb3dfZGVwdGhdID0gdGVybQorICAgICAgICAgICAgdGVybUlkZW50aWZpZXIgPSBhZGRT
dWJFbGVtKHRlcm0sICd0ZXJtSWRlbnRpZmllcicsIHJvd1tyb3dfZGVwdGhdKQorICAgICAgICAg
ICAgY2FwdGlvbnMgPSBbcm93W3hdIGZvciB4IGluIHJhbmdlKGxlbihwYXJlbnRzKS0xLCBsZW4o
cm93KSwgMildCisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSBbcm93W3hdIGZvciB4IGluIHJh
bmdlKGxlbihwYXJlbnRzKSwgbGVuKHJvdyksIDIpXQorICAgICAgICAgICAgaWYgZmlsdGVyKGxh
bWJkYSB4OngsY2FwdGlvbnMpOgorICAgICAgICAgICAgICAgIGNhcHRpb24gPSBhZGRTdWJFbGVt
KHRlcm0sICdjYXB0aW9uJykKKyAgICAgICAgICAgICAgICBmb3IgaW5kZXgsIHRyYW5zbGF0aW9u
IGluIGZpbHRlcihsYW1iZGEgKGkseCk6eCxbeCBmb3IgeCBpbiBlbnVtZXJhdGUoY2FwdGlvbnMp
XSk6CisgICAgICAgICAgICAgICAgICAgIGxhbmdzdHJpbmcgPSBhZGRTdWJFbGVtKGNhcHRpb24s
ICdsYW5nc3RyaW5nJywgdHJhbnNsYXRpb24pCisgICAgICAgICAgICAgICAgICAgIGxhbmdzdHJp
bmcuYXR0cmliWydsYW5ndWFnZSddID0gbGFuZ3VhZ2VzW2luZGV4XQorICAgICAgICAgICAgaWYg
ZmlsdGVyKGxhbWJkYSB4OngsZGVzY3JpcHRpb25zKToKKyAgICAgICAgICAgICAgICBkZXNjcmlw
dGlvbiA9IGFkZFN1YkVsZW0odGVybSwgJ2Rlc2NyaXB0aW9uJykKKyAgICAgICAgICAgICAgICBm
b3IgaW5kZXgsIHRyYW5zbGF0aW9uIGluIGZpbHRlcihsYW1iZGEgKGkseCk6eCxbeCBmb3IgeCBp
biBlbnVtZXJhdGUoZGVzY3JpcHRpb25zKV0pOgorICAgICAgICAgICAgICAgICAgICBsYW5nc3Ry
aW5nID0gYWRkU3ViRWxlbShkZXNjcmlwdGlvbiwgJ2xhbmdzdHJpbmcnLCB0cmFuc2xhdGlvbikK
KyAgICAgICAgICAgICAgICAgICAgbGFuZ3N0cmluZy5hdHRyaWJbJ2xhbmd1YWdlJ10gPSBsYW5n
dWFnZXNbaW5kZXhdCisgICAgICAgIHNlbGYudHJlZSA9IGV0cmVlLkVsZW1lbnRUcmVlKHJvb3Qp
CisgICAgICAgIHNlbGYub3JkZXJfc2lnbmlmaWNhbnQgPSBzZWxmLmlzT3JkZXJTaWduaWZpY2Fu
dCgpCisgICAgICAgIHNlbGYubWFrZVRlcm1EaWN0KCkKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpU
aGUgYmVzdCBwb3NzaWJsZSBzZWFyY2ggdGVjaG5vbG9naWVzIGFyZSBub3cgYWZmb3JkYWJsZSBm
b3IgYWxsIGNvbXBhbmllcy4KRG93bmxvYWQgeW91ciBGUkVFIG9wZW4gc291cmNlIEVudGVycHJp
c2UgU2VhcmNoIEVuZ2luZSB0b2RheSEKT3VyIGV4cGVydHMgd2lsbCBhc3Npc3QgeW91IGluIGl0
cyBpbnN0YWxsYXRpb24gZm9yICQ1OS9tbywgbm8gY29tbWl0bWVudC4KVGVzdCBpdCBmb3IgRlJF
RSBvbiBvdXIgQ2xvdWQgcGxhdGZvcm0gYW55dGltZSEKaHR0cDovL3B1YmFkcy5nLmRvdWJsZWNs
aWNrLm5ldC9nYW1wYWQvY2xrP2lkPTE0NTMyODE5MSZpdT0vNDE0MC9vc3RnLmNsa3RyawpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpDb2xsZWN0aXZlLWNo
ZWNraW5zIG1haWxpbmcgbGlzdApDb2xsZWN0aXZlLWNoZWNraW5zQGxpc3RzLnNvdXJjZWZvcmdl
Lm5ldApodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9jb2xsZWN0
aXZlLWNoZWNraW5zCg==