Re: Duplicate Workers entries in some EXPLAIN plans

Maciek Sakrejda <[email protected]> Tue, 14 Jan 2020 23:22:04 -0800
Newsgroups gmane.comp.db.postgresql.devel.general
Message-ID <CAOtHd0CC1iVG0ZA08onswgiOU9++Qhec0WRtECk-7zWM+nE2Rg@mail.gmail.com>
--0000000000006d637d059c28915f
Content-Type: text/plain; charset="UTF-8"

Thanks for the review! I looked at <b925a00f4ef> and rebased the patch
on current master, ac5bdf6.

I introduced a new test file because this bug is specifically about
EXPLAIN output (as opposed to query execution or planning
functionality), and it didn't seem like a test would fit in any of the
other files. I focused on testing just the behavior around this
specific bug (and fix). I think eventually we should probably test
other more fundamental EXPLAIN features (and I'm happy to contribute
to that) in that file, but that seems outside of the scope of this
patch.

Any thoughts on what we should do with text mode output (which is
untouched right now)? The output Andres proposed above makes sense to
me, but I'd like to get more input.

--0000000000006d637d059c28915f
Content-Type: text/x-patch; charset="US-ASCII"; name="merge-explain-worker-output-v2.patch"
Content-Disposition: attachment; 
	filename="merge-explain-worker-output-v2.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k5ez7tnp0>
X-Attachment-Id: f_k5ez7tnp0

ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5k
L2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCBkMTg5YjhkNTczLi45NmE4OTczODg0IDEwMDY0NAot
LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t
bWFuZHMvZXhwbGFpbi5jCkBAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIHZvaWQgc2hvd19zb3J0
b3JkZXJfb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgTm9kZSAqc29ydGV4cHIsCiAJCQkJCQkJCSAg
IE9pZCBzb3J0T3BlcmF0b3IsIE9pZCBjb2xsYXRpb24sIGJvb2wgbnVsbHNGaXJzdCk7CiBzdGF0
aWMgdm9pZCBzaG93X3RhYmxlc2FtcGxlKFRhYmxlU2FtcGxlQ2xhdXNlICp0c2MsIFBsYW5TdGF0
ZSAqcGxhbnN0YXRlLAogCQkJCQkJCSBMaXN0ICphbmNlc3RvcnMsIEV4cGxhaW5TdGF0ZSAqZXMp
Owotc3RhdGljIHZvaWQgc2hvd19zb3J0X2luZm8oU29ydFN0YXRlICpzb3J0c3RhdGUsIEV4cGxh
aW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19zb3J0X2luZm8oU29ydFN0YXRlICpzb3J0
c3RhdGUsIFN0cmluZ0luZm8qIHdvcmtlcl9zdHJzLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRp
YyB2b2lkIHNob3dfaGFzaF9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWluU3RhdGUg
KmVzKTsKIHN0YXRpYyB2b2lkIHNob3dfdGlkYml0bWFwX2luZm8oQml0bWFwSGVhcFNjYW5TdGF0
ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQlFeHBsYWluU3RhdGUgKmVzKTsKQEAgLTI4OSw2ICsyODks
NyBAQCBOZXdFeHBsYWluU3RhdGUodm9pZCkKIAllcy0+Y29zdHMgPSB0cnVlOwogCS8qIFByZXBh
cmUgb3V0cHV0IGJ1ZmZlci4gKi8KIAllcy0+c3RyID0gbWFrZVN0cmluZ0luZm8oKTsKKwllcy0+
cm9vdF9zdHIgPSBlcy0+c3RyOwogCiAJcmV0dXJuIGVzOwogfQpAQCAtMTA5MCw5ICsxMDkxLDIw
IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJ
Y29uc3QgY2hhciAqcGFydGlhbG1vZGUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKm9wZXJhdGlvbiA9
IE5VTEw7CiAJY29uc3QgY2hhciAqY3VzdG9tX25hbWUgPSBOVUxMOworCVN0cmluZ0luZm8gKndv
cmtlcl9zdHJzID0gTlVMTDsKIAlpbnQJCQlzYXZlX2luZGVudCA9IGVzLT5pbmRlbnQ7CiAJYm9v
bAkJaGFzY2hpbGRyZW47CiAKKwkvKiBQcmVwYXJlIHBlci13b3JrZXIgb3V0cHV0ICovCisJaWYg
KGVzLT5hbmFseXplICYmIHBsYW5zdGF0ZS0+d29ya2VyX2luc3RydW1lbnQpIHsKKwkJaW50IG51
bV93b3JrZXJzID0gcGxhbnN0YXRlLT53b3JrZXJfaW5zdHJ1bWVudC0+bnVtX3dvcmtlcnM7CisJ
CWludCBuOworCQl3b3JrZXJfc3RycyA9IChTdHJpbmdJbmZvICopIHBhbGxvYzAobnVtX3dvcmtl
cnMgKiBzaXplb2YoU3RyaW5nSW5mbykpOworCQlmb3IgKG4gPSAwOyBuIDwgbnVtX3dvcmtlcnM7
IG4rKykgeworCQkJd29ya2VyX3N0cnNbbl0gPSBtYWtlU3RyaW5nSW5mbygpOworCQl9CisJfQor
CiAJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCXsKIAkJY2FzZSBUX1Jlc3VsdDoKQEAgLTEzNTcs
NiArMTM2OSw2NCBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5j
ZXN0b3JzLAogCQlFeHBsYWluUHJvcGVydHlCb29sKCJQYXJhbGxlbCBBd2FyZSIsIHBsYW4tPnBh
cmFsbGVsX2F3YXJlLCBlcyk7CiAJfQogCisJLyogUHJlcGFyZSB3b3JrZXIgZ2VuZXJhbCBleGVj
dXRpb24gZGV0YWlscyAqLworCWlmIChlcy0+YW5hbHl6ZSAmJiBlcy0+dmVyYm9zZSAmJiBwbGFu
c3RhdGUtPndvcmtlcl9pbnN0cnVtZW50KQorCXsKKwkJV29ya2VySW5zdHJ1bWVudGF0aW9uICp3
ID0gcGxhbnN0YXRlLT53b3JrZXJfaW5zdHJ1bWVudDsKKwkJaW50CQkJbjsKKworCQlmb3IgKG4g
PSAwOyBuIDwgdy0+bnVtX3dvcmtlcnM7ICsrbikKKwkJeworCQkJSW5zdHJ1bWVudGF0aW9uICpp
bnN0cnVtZW50ID0gJnctPmluc3RydW1lbnRbbl07CisJCQlkb3VibGUJCW5sb29wcyA9IGluc3Ry
dW1lbnQtPm5sb29wczsKKwkJCWRvdWJsZQkJc3RhcnR1cF9tczsKKwkJCWRvdWJsZQkJdG90YWxf
bXM7CisJCQlkb3VibGUJCXJvd3M7CisKKwkJCWlmIChubG9vcHMgPD0gMCkKKwkJCQljb250aW51
ZTsKKwkJCXN0YXJ0dXBfbXMgPSAxMDAwLjAgKiBpbnN0cnVtZW50LT5zdGFydHVwIC8gbmxvb3Bz
OworCQkJdG90YWxfbXMgPSAxMDAwLjAgKiBpbnN0cnVtZW50LT50b3RhbCAvIG5sb29wczsKKwkJ
CXJvd3MgPSBpbnN0cnVtZW50LT5udHVwbGVzIC8gbmxvb3BzOworCisJCQlpZiAoZXMtPmZvcm1h
dCA9PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm9TcGFj
ZXMoZXMtPnN0ciwgZXMtPmluZGVudCAqIDIpOworCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0
ciwgIldvcmtlciAlZDogIiwgbik7CisJCQkJaWYgKGVzLT50aW1pbmcpCisJCQkJCWFwcGVuZFN0
cmluZ0luZm8oZXMtPnN0ciwKKwkJCQkJCQkJCSAiYWN0dWFsIHRpbWU9JS4zZi4uJS4zZiByb3dz
PSUuMGYgbG9vcHM9JS4wZlxuIiwKKwkJCQkJCQkJCSBzdGFydHVwX21zLCB0b3RhbF9tcywgcm93
cywgbmxvb3BzKTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKKwkJ
CQkJCQkJCSAiYWN0dWFsIHJvd3M9JS4wZiBsb29wcz0lLjBmXG4iLAorCQkJCQkJCQkJIHJvd3Ms
IG5sb29wcyk7CisJCQkJZXMtPmluZGVudCsrOworCQkJCWlmIChlcy0+YnVmZmVycykKKwkJCQkJ
c2hvd19idWZmZXJfdXNhZ2UoZXMsICZpbnN0cnVtZW50LT5idWZ1c2FnZSk7CisJCQkJZXMtPmlu
ZGVudC0tOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCUV4cGxhaW5PcGVuV29ya2VyKHdvcmtl
cl9zdHJzW25dLCBlcyk7CisKKwkJCQlpZiAoZXMtPnRpbWluZykKKwkJCQl7CisJCQkJCUV4cGxh
aW5Qcm9wZXJ0eUZsb2F0KCJBY3R1YWwgU3RhcnR1cCBUaW1lIiwgIm1zIiwKKwkJCQkJCQkJCQkg
c3RhcnR1cF9tcywgMywgZXMpOworCQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIFRv
dGFsIFRpbWUiLCAibXMiLAorCQkJCQkJCQkJCSB0b3RhbF9tcywgMywgZXMpOworCQkJCX0KKwkJ
CQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIFJvd3MiLCBOVUxMLCByb3dzLCAwLCBlcyk7
CisJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkFjdHVhbCBMb29wcyIsIE5VTEwsIG5sb29wcywg
MCwgZXMpOworCQkJfQorCQl9CisKKwkJaWYgKGVzLT5mb3JtYXQgIT0gRVhQTEFJTl9GT1JNQVRf
VEVYVCkgeworCQkJRXhwbGFpbkNsb3NlV29ya2VyKGVzKTsKKwkJfQorCX0KKwogCXN3aXRjaCAo
bm9kZVRhZyhwbGFuKSkKIAl7CiAJCWNhc2UgVF9TZXFTY2FuOgpAQCAtMTg1Niw3ICsxOTI2LDcg
QEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJ
CWJyZWFrOwogCQljYXNlIFRfU29ydDoKIAkJCXNob3dfc29ydF9rZXlzKGNhc3ROb2RlKFNvcnRT
dGF0ZSwgcGxhbnN0YXRlKSwgYW5jZXN0b3JzLCBlcyk7Ci0JCQlzaG93X3NvcnRfaW5mbyhjYXN0
Tm9kZShTb3J0U3RhdGUsIHBsYW5zdGF0ZSksIGVzKTsKKwkJCXNob3dfc29ydF9pbmZvKGNhc3RO
b2RlKFNvcnRTdGF0ZSwgcGxhbnN0YXRlKSwgd29ya2VyX3N0cnMsIGVzKTsKIAkJCWJyZWFrOwog
CQljYXNlIFRfTWVyZ2VBcHBlbmQ6CiAJCQlzaG93X21lcmdlX2FwcGVuZF9rZXlzKGNhc3ROb2Rl
KE1lcmdlQXBwZW5kU3RhdGUsIHBsYW5zdGF0ZSksCkBAIC0xODg1LDc0ICsxOTU1LDMwIEBAIEV4
cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJaWYgKGVz
LT5idWZmZXJzICYmIHBsYW5zdGF0ZS0+aW5zdHJ1bWVudCkKIAkJc2hvd19idWZmZXJfdXNhZ2Uo
ZXMsICZwbGFuc3RhdGUtPmluc3RydW1lbnQtPmJ1ZnVzYWdlKTsKIAotCS8qIFNob3cgd29ya2Vy
IGRldGFpbCAqLwotCWlmIChlcy0+YW5hbHl6ZSAmJiBlcy0+dmVyYm9zZSAmJiAhZXMtPmhpZGVf
d29ya2VycyAmJgotCQlwbGFuc3RhdGUtPndvcmtlcl9pbnN0cnVtZW50KQorCS8qIFByZXBhcmUg
d29ya2VyIGJ1ZmZlciB1c2FnZSAqLworCWlmIChlcy0+YnVmZmVycyAmJiBlcy0+YW5hbHl6ZSAm
JiBlcy0+dmVyYm9zZSAmJiAhZXMtPmhpZGVfd29ya2VycworCQkmJiBwbGFuc3RhdGUtPndvcmtl
cl9pbnN0cnVtZW50ICYmIGVzLT5mb3JtYXQgIT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKIAl7CiAJ
CVdvcmtlckluc3RydW1lbnRhdGlvbiAqdyA9IHBsYW5zdGF0ZS0+d29ya2VyX2luc3RydW1lbnQ7
Ci0JCWJvb2wJCW9wZW5lZF9ncm91cCA9IGZhbHNlOwogCQlpbnQJCQluOwogCiAJCWZvciAobiA9
IDA7IG4gPCB3LT5udW1fd29ya2VyczsgKytuKQogCQl7CiAJCQlJbnN0cnVtZW50YXRpb24gKmlu
c3RydW1lbnQgPSAmdy0+aW5zdHJ1bWVudFtuXTsKIAkJCWRvdWJsZQkJbmxvb3BzID0gaW5zdHJ1
bWVudC0+bmxvb3BzOwotCQkJZG91YmxlCQlzdGFydHVwX21zOwotCQkJZG91YmxlCQl0b3RhbF9t
czsKLQkJCWRvdWJsZQkJcm93czsKIAogCQkJaWYgKG5sb29wcyA8PSAwKQogCQkJCWNvbnRpbnVl
OwotCQkJc3RhcnR1cF9tcyA9IDEwMDAuMCAqIGluc3RydW1lbnQtPnN0YXJ0dXAgLyBubG9vcHM7
Ci0JCQl0b3RhbF9tcyA9IDEwMDAuMCAqIGluc3RydW1lbnQtPnRvdGFsIC8gbmxvb3BzOwotCQkJ
cm93cyA9IGluc3RydW1lbnQtPm50dXBsZXMgLyBubG9vcHM7CiAKLQkJCWlmIChlcy0+Zm9ybWF0
ID09IEVYUExBSU5fRk9STUFUX1RFWFQpCi0JCQl7Ci0JCQkJYXBwZW5kU3RyaW5nSW5mb1NwYWNl
cyhlcy0+c3RyLCBlcy0+aW5kZW50ICogMik7Ci0JCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3Ry
LCAiV29ya2VyICVkOiAiLCBuKTsKLQkJCQlpZiAoZXMtPnRpbWluZykKLQkJCQkJYXBwZW5kU3Ry
aW5nSW5mbyhlcy0+c3RyLAotCQkJCQkJCQkJICJhY3R1YWwgdGltZT0lLjNmLi4lLjNmIHJvd3M9
JS4wZiBsb29wcz0lLjBmXG4iLAotCQkJCQkJCQkJIHN0YXJ0dXBfbXMsIHRvdGFsX21zLCByb3dz
LCBubG9vcHMpOwotCQkJCWVsc2UKLQkJCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLAotCQkJ
CQkJCQkJICJhY3R1YWwgcm93cz0lLjBmIGxvb3BzPSUuMGZcbiIsCi0JCQkJCQkJCQkgcm93cywg
bmxvb3BzKTsKLQkJCQllcy0+aW5kZW50Kys7Ci0JCQkJaWYgKGVzLT5idWZmZXJzKQotCQkJCQlz
aG93X2J1ZmZlcl91c2FnZShlcywgJmluc3RydW1lbnQtPmJ1ZnVzYWdlKTsKLQkJCQllcy0+aW5k
ZW50LS07Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJaWYgKCFvcGVuZWRfZ3JvdXApCi0JCQkJ
ewotCQkJCQlFeHBsYWluT3Blbkdyb3VwKCJXb3JrZXJzIiwgIldvcmtlcnMiLCBmYWxzZSwgZXMp
OwotCQkJCQlvcGVuZWRfZ3JvdXAgPSB0cnVlOwotCQkJCX0KLQkJCQlFeHBsYWluT3Blbkdyb3Vw
KCJXb3JrZXIiLCBOVUxMLCB0cnVlLCBlcyk7Ci0JCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigi
V29ya2VyIE51bWJlciIsIE5VTEwsIG4sIGVzKTsKLQotCQkJCWlmIChlcy0+dGltaW5nKQotCQkJ
CXsKLQkJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkFjdHVhbCBTdGFydHVwIFRpbWUiLCAibXMi
LAotCQkJCQkJCQkJCSBzdGFydHVwX21zLCAzLCBlcyk7Ci0JCQkJCUV4cGxhaW5Qcm9wZXJ0eUZs
b2F0KCJBY3R1YWwgVG90YWwgVGltZSIsICJtcyIsCi0JCQkJCQkJCQkJIHRvdGFsX21zLCAzLCBl
cyk7Ci0JCQkJfQotCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJBY3R1YWwgUm93cyIsIE5VTEws
IHJvd3MsIDAsIGVzKTsKLQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIExvb3BzIiwg
TlVMTCwgbmxvb3BzLCAwLCBlcyk7Ci0KLQkJCQlpZiAoZXMtPmJ1ZmZlcnMpCi0JCQkJCXNob3df
YnVmZmVyX3VzYWdlKGVzLCAmaW5zdHJ1bWVudC0+YnVmdXNhZ2UpOwotCi0JCQkJRXhwbGFpbkNs
b3NlR3JvdXAoIldvcmtlciIsIE5VTEwsIHRydWUsIGVzKTsKLQkJCX0KKwkJCUV4cGxhaW5PcGVu
V29ya2VyKHdvcmtlcl9zdHJzW25dLCBlcyk7CisJCQlzaG93X2J1ZmZlcl91c2FnZShlcywgJmlu
c3RydW1lbnQtPmJ1ZnVzYWdlKTsKIAkJfQorCQlFeHBsYWluQ2xvc2VXb3JrZXIoZXMpOworCX0K
IAotCQlpZiAob3BlbmVkX2dyb3VwKQotCQkJRXhwbGFpbkNsb3NlR3JvdXAoIldvcmtlcnMiLCAi
V29ya2VycyIsIGZhbHNlLCBlcyk7CisJLyogU2hvdyB3b3JrZXIgZGV0YWlsICovCisJaWYgKHBs
YW5zdGF0ZS0+d29ya2VyX2luc3RydW1lbnQpIHsKKwkJRXhwbGFpbkZsdXNoV29ya2Vycyh3b3Jr
ZXJfc3RycywgcGxhbnN0YXRlLT53b3JrZXJfaW5zdHJ1bWVudC0+bnVtX3dvcmtlcnMsIGVzKTsK
IAl9CiAKIAkvKiBHZXQgcmVhZHkgdG8gZGlzcGxheSB0aGUgY2hpbGQgcGxhbnMgKi8KQEAgLTI1
NTIsNyArMjU3OCw3IEBAIHNob3dfdGFibGVzYW1wbGUoVGFibGVTYW1wbGVDbGF1c2UgKnRzYywg
UGxhblN0YXRlICpwbGFuc3RhdGUsCiAgKiBJZiBpdCdzIEVYUExBSU4gQU5BTFlaRSwgc2hvdyB0
dXBsZXNvcnQgc3RhdHMgZm9yIGEgc29ydCBub2RlCiAgKi8KIHN0YXRpYyB2b2lkCi1zaG93X3Nv
cnRfaW5mbyhTb3J0U3RhdGUgKnNvcnRzdGF0ZSwgRXhwbGFpblN0YXRlICplcykKK3Nob3dfc29y
dF9pbmZvKFNvcnRTdGF0ZSAqc29ydHN0YXRlLCBTdHJpbmdJbmZvICp3b3JrZXJfc3RycywgRXhw
bGFpblN0YXRlICplcykKIHsKIAlpZiAoIWVzLT5hbmFseXplKQogCQlyZXR1cm47CkBAIC0yNTkz
LDcgKzI2MTksNiBAQCBzaG93X3NvcnRfaW5mbyhTb3J0U3RhdGUgKnNvcnRzdGF0ZSwgRXhwbGFp
blN0YXRlICplcykKIAlpZiAoc29ydHN0YXRlLT5zaGFyZWRfaW5mbyAhPSBOVUxMKQogCXsKIAkJ
aW50CQkJbjsKLQkJYm9vbAkJb3BlbmVkX2dyb3VwID0gZmFsc2U7CiAKIAkJZm9yIChuID0gMDsg
biA8IHNvcnRzdGF0ZS0+c2hhcmVkX2luZm8tPm51bV93b3JrZXJzOyBuKyspCiAJCXsKQEAgLTI2
MjAsMjEgKzI2NDUsMTUgQEAgc2hvd19zb3J0X2luZm8oU29ydFN0YXRlICpzb3J0c3RhdGUsIEV4
cGxhaW5TdGF0ZSAqZXMpCiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJaWYgKCFvcGVuZWRfZ3Jv
dXApCi0JCQkJewotCQkJCQlFeHBsYWluT3Blbkdyb3VwKCJXb3JrZXJzIiwgIldvcmtlcnMiLCBm
YWxzZSwgZXMpOwotCQkJCQlvcGVuZWRfZ3JvdXAgPSB0cnVlOwotCQkJCX0KLQkJCQlFeHBsYWlu
T3Blbkdyb3VwKCJXb3JrZXIiLCBOVUxMLCB0cnVlLCBlcyk7Ci0JCQkJRXhwbGFpblByb3BlcnR5
SW50ZWdlcigiV29ya2VyIE51bWJlciIsIE5VTEwsIG4sIGVzKTsKKwkJCQlFeHBsYWluT3Blbldv
cmtlcih3b3JrZXJfc3Ryc1tuXSwgZXMpOwogCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIlNvcnQg
TWV0aG9kIiwgc29ydE1ldGhvZCwgZXMpOwogCQkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIlNv
cnQgU3BhY2UgVXNlZCIsICJrQiIsIHNwYWNlVXNlZCwgZXMpOwogCQkJCUV4cGxhaW5Qcm9wZXJ0
eVRleHQoIlNvcnQgU3BhY2UgVHlwZSIsIHNwYWNlVHlwZSwgZXMpOwotCQkJCUV4cGxhaW5DbG9z
ZUdyb3VwKCJXb3JrZXIiLCBOVUxMLCB0cnVlLCBlcyk7CiAJCQl9CiAJCX0KLQkJaWYgKG9wZW5l
ZF9ncm91cCkKLQkJCUV4cGxhaW5DbG9zZUdyb3VwKCJXb3JrZXJzIiwgIldvcmtlcnMiLCBmYWxz
ZSwgZXMpOworCQlpZiAoZXMtPmZvcm1hdCAhPSBFWFBMQUlOX0ZPUk1BVF9URVhUKSB7CisJCQlF
eHBsYWluQ2xvc2VXb3JrZXIoZXMpOworCQl9CiAJfQogfQogCkBAIC0zNzUxLDYgKzM3NzAsNjIg
QEAgRXhwbGFpbkNsb3NlR3JvdXAoY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hhciAqbGFi
ZWxuYW1lLAogCX0KIH0KIAorLyoKKyAqIEJlZ2luIG91dHB1dCBmb3IgYSBzcGVjaWZpYyB3b3Jr
ZXIuIElmIHdlIGFyZSBjdXJyZW50bHkgcHJvZHVjaW5nIG91dHB1dAorICogZm9yIGFub3RoZXIg
d29ya2VyLCBjbG9zZSB0aGF0IHdvcmtlciBhdXRvbWF0aWNhbGx5LgorICovCit2b2lkCitFeHBs
YWluT3BlbldvcmtlcihTdHJpbmdJbmZvIHdvcmtlcl9zdHIsIEV4cGxhaW5TdGF0ZSAqZXMpCit7
CisJLyoKKwkgKiBXZSBpbmRlbnQgdHdpY2UtLW9uY2UgZm9yIHRoZSAiV29ya2VyIiBncm91cCBh
bmQgb25jZSBmb3IgdGhlICJXb3JrZXJzIgorCSAqIGdyb3VwLS1idXQgb25seSBuZWVkIHRvIGFk
anVzdCBpbmRlbnRhdGlvbiBvbmNlIGZvciBlYWNoIHN0cmluZyBvZgorCSAqIEV4cGxhaW5PcGVu
V29ya2VyIGNhbGxzLgorCSAqLworCWlmIChlcy0+c3RyID09IGVzLT5yb290X3N0cikgeworCQll
cy0+aW5kZW50ICs9IDI7CisJfQorCisJZXMtPnByaW50X3dvcmtlcnMgPSB0cnVlOworCWVzLT5z
dHIgPSB3b3JrZXJfc3RyOworfQorCisvKgorICogRXhwbGljaXRseSBlbmQgb3V0cHV0IGZvciB0
aGUgY3VycmVudCB3b3JrZXIgYW5kIHJlc3VtZSBvdXRwdXQKKyAqIGZvciB0aGUgcm9vdCBvZiB0
aGUgbm9kZS4KKyAqLwordm9pZAorRXhwbGFpbkNsb3NlV29ya2VyKEV4cGxhaW5TdGF0ZSAqZXMp
Cit7CisJZXMtPmluZGVudCAtPSAyOworCWVzLT5zdHIgPSBlcy0+cm9vdF9zdHI7Cit9CisKKy8q
CisgKiBGbHVzaCBvdXRwdXQgcmVnaXN0ZXJlZCBzbyBmYXIgdG8gdGhlIG91dHB1dCBidWZmZXIg
YW5kIGRlYWxsb2NhdGUKKyAqIG1lY2hhbmlzbSBmb3Igd3JpdGluZyB0byB3b3JrZXJzLgorICov
Cit2b2lkCitFeHBsYWluRmx1c2hXb3JrZXJzKFN0cmluZ0luZm8qIHdvcmtlcl9zdHJzLCBpbnQg
bnVtX3dvcmtlcnMsIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJaW50IGk7CisKKwlpZiAoIWVzLT5w
cmludF93b3JrZXJzKSB7CisJCXJldHVybjsKKwl9CisKKwlFeHBsYWluT3Blbkdyb3VwKCJXb3Jr
ZXJzIiwgIldvcmtlcnMiLCBmYWxzZSwgZXMpOworCWZvciAoaSA9IDA7IGkgPCBudW1fd29ya2Vy
czsgaSsrKSB7CisJCUV4cGxhaW5PcGVuR3JvdXAoIldvcmtlciIsIE5VTEwsIHRydWUsIGVzKTsK
KwkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiV29ya2VyIE51bWJlciIsIE5VTEwsIGksIGVzKTsK
KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhlcy0+c3RyLCB3b3JrZXJfc3Ryc1tpXS0+ZGF0YSk7
CisJCUV4cGxhaW5DbG9zZUdyb3VwKCJXb3JrZXIiLCBOVUxMLCB0cnVlLCBlcyk7CisJfQorCUV4
cGxhaW5DbG9zZUdyb3VwKCJXb3JrZXJzIiwgIldvcmtlcnMiLCBmYWxzZSwgZXMpOworCS8vIGRv
IHdlIGhhdmUgYW55IG90aGVyIGNsZWFudXAgdG8gZG8/CisJZXMtPnByaW50X3dvcmtlcnMgPSBm
YWxzZTsKK30KKwogLyoKICAqIEVtaXQgYSAiZHVtbXkiIGdyb3VwIHRoYXQgbmV2ZXIgaGFzIGFu
eSBtZW1iZXJzLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4u
aCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCA0NTAyN2E3YzQ3Li4yOTE5
YjI3ODBkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIv
c3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC0yNyw3ICsyNyw3IEBAIHR5cGVkZWYg
ZW51bSBFeHBsYWluRm9ybWF0CiAKIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0ZQogewotCVN0
cmluZ0luZm8Jc3RyOwkJCS8qIG91dHB1dCBidWZmZXIgKi8KKwlTdHJpbmdJbmZvCXN0cjsJCQkv
KiBjdXJyZW50IG91dHB1dCBidWZmZXIgKi8KIAkvKiBvcHRpb25zICovCiAJYm9vbAkJdmVyYm9z
ZTsJCS8qIGJlIHZlcmJvc2UgKi8KIAlib29sCQlhbmFseXplOwkJLyogcHJpbnQgYWN0dWFsIHRp
bWVzICovCkBAIC00MCw2ICs0MCw4IEBAIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0ZQogCS8q
IHN0YXRlIGZvciBvdXRwdXQgZm9ybWF0dGluZyAtLS0gbm90IHJlc2V0IGZvciBlYWNoIG5ldyBw
bGFuIHRyZWUgKi8KIAlpbnQJCQlpbmRlbnQ7CQkJLyogY3VycmVudCBpbmRlbnRhdGlvbiBsZXZl
bCAqLwogCUxpc3QJICAgKmdyb3VwaW5nX3N0YWNrOyAvKiBmb3JtYXQtc3BlY2lmaWMgZ3JvdXBp
bmcgc3RhdGUgKi8KKwlib29sICAgICAgICBwcmludF93b3JrZXJzOyAgLyogd2hldGhlciBjdXJy
ZW50IG5vZGUgaGFzIHdvcmtlciBtZXRhZGF0YSAqLworCVN0cmluZ0luZm8Jcm9vdF9zdHI7CQkv
KiByb290IG91dHB1dCBidWZmZXIgKi8KIAkvKiBzdGF0ZSByZWxhdGVkIHRvIHRoZSBjdXJyZW50
IHBsYW4gdHJlZSAoZmlsbGVkIGJ5IEV4cGxhaW5QcmludFBsYW4pICovCiAJUGxhbm5lZFN0bXQg
KnBzdG10OwkJCS8qIHRvcCBvZiBwbGFuICovCiAJTGlzdAkgICAqcnRhYmxlOwkJCS8qIHJhbmdl
IHRhYmxlICovCkBAIC0xMTEsNCArMTEzLDkgQEAgZXh0ZXJuIHZvaWQgRXhwbGFpbk9wZW5Hcm91
cChjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpsYWJlbG5hbWUsCiBleHRlcm4gdm9p
ZCBFeHBsYWluQ2xvc2VHcm91cChjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpsYWJl
bG5hbWUsCiAJCQkJCQkJICBib29sIGxhYmVsZWQsIEV4cGxhaW5TdGF0ZSAqZXMpOwogCitleHRl
cm4gdm9pZCBFeHBsYWluT3BlbldvcmtlcihTdHJpbmdJbmZvIHdvcmtlcl9zdHIsIEV4cGxhaW5T
dGF0ZSAqZXMpOworZXh0ZXJuIHZvaWQgRXhwbGFpbkNsb3NlV29ya2VyKEV4cGxhaW5TdGF0ZSAq
ZXMpOworZXh0ZXJuIHZvaWQgRXhwbGFpbkZsdXNoV29ya2VycyhTdHJpbmdJbmZvICp3b3JrZXJf
c3RycywgaW50IG51bV93b3JrZXJzLCBFeHBsYWluU3RhdGUgKmVzKTsKKworCiAjZW5kaWYJCQkJ
CQkJLyogRVhQTEFJTl9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk
L2V4cGxhaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWluLm91dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kYjk5MTRkYjdiCi0tLSAvZGV2L251
bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWluLm91dApAQCAtMCwwICsx
LDc1IEBACistLQorLS0gRVhQTEFJTgorLS0KKy0tIGhlbHBlciBmdW5jdGlvbnMgZm9yIGV4YW1p
bmluZyBqc29uIGV4cGxhaW4gb3V0cHV0CistLSByZXR1cm4gYSBqc29uIGV4cGxhaW4gb2YgZ2l2
ZW4gcXVlcnkKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGpzb25fZXhwbGFpbihxdWVyeSB0
ZXh0LCB2YXJpYWRpYyBvcHRzIHRleHRbXSkKKyAgUkVUVVJOUyBqc29uIExBTkdVQUdFIFBMUEdT
UUwgQVMgJCQKK0RFQ0xBUkUKKyAgcGxhbiBqc29uOworQkVHSU4KKyAgRVhFQ1VURSAnRVhQTEFJ
TiAoJyB8fCBhcnJheV90b19zdHJpbmcoYXJyYXlfYXBwZW5kKG9wdHMsICdGT1JNQVQgSlNPTikg
JyksICcsICcpIHx8IHF1ZXJ5IElOVE8gU1RSSUNUIHBsYW47CisgIFJFVFVSTiBwbGFuOworRU5E
OworJCQ7CisvKgorICogVGFrZXMgYSBqc29uIG9iamVjdCBhbmQgcHJvY2Vzc2VzIGl0cyBrZXlz
IGFuZCB2YWx1ZXMuIEZvciBldmVyeQorICogbWF0Y2hpbmcga2V5IHdob3NlIHZhbHVlIGlzIGEg
bnVtYmVyLCBzZXQgaXQgdG8gemVybyB0byBmYWNpbGl0YXRlCisgKiBjb21wYXJpc29ucyBmb3Ig
dmFsdWVzIHRoYXQgY2FuIHZhcnkgYWNyb3NzIGV4ZWN1dGlvbnMuIElmIG5vdCBhIG51bWJlciwK
KyAqIHNldCB0aGUgdmFsdWUgdG8gLTEgdG8gaW5kaWNhdGUgd2UgbWF0Y2hlZCBhbiB1bmV4cGVj
dGVkIGtleS4gUmV0dXJuCisgKiBub24tbWF0Y2hpbmcga2V5cyBhbmQgdmFsdWVzIHVubW9kaWZp
ZWQuCisgKi8KK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGpzb25fbm9ybWFsaXplX251bWVy
aWNfa2V5c19tYXRjaGluZyhvYmoganNvbiwgcmVnZXhwIHRleHQpCisgIFJFVFVSTlMganNvbiBM
QU5HVUFHRSBTUUwgQVMgJCQKK1NFTEVDVAorICBjb2FsZXNjZShqc29uX29iamVjdF9hZ2coCisg
ICAga2V5LAorICAgIENBU0UKKyAgICAgIFdIRU4ga2V5IH4gcmVnZXhwIFRIRU4KKyAgICAgICAg
Q0FTRSBqc29uX3R5cGVvZih2YWx1ZSkKKwkgIFdIRU4gJ251bWJlcicgVEhFTiAwOjp0ZXh0Ojpq
c29uCisJICBFTFNFICgtMSk6OnRleHQ6Ompzb24KKwlFTkQKKyAgICAgIEVMU0UgdmFsdWUKKyAg
ICBFTkQKKyAgKSwgJ3t9JykKK0ZST00KKyAganNvbl9lYWNoKG9iaikKKyQkOworLS0gZXhwbGFp
biBvbmx5IHdvcmtlciBpbmZvcm1hdGlvbiwgbm9ybWFsaXppbmcgYW55IHZhbHVlcyB0aGF0IGNv
dWxkIHZhcnkgYWNyb3NzIGV4ZWN1dGlvbnMKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGV4
cGxhaW5fd29ya2VycyhwbGFuX25vZGUganNvbikKKyAgUkVUVVJOUyBqc29uIExBTkdVQUdFIFNR
TCBBUyAkJAorU0VMRUNUCisgIGNvYWxlc2NlKGpzb25fb2JqZWN0X2FnZyhrZXksIHZhbHVlKSwg
J3t9JykKK0ZST00gKAorICBTRUxFQ1QKKyAgICBrZXksCisgICAgQ0FTRSBrZXkKKyAgICAgIFdI
RU4gJ1dvcmtlcnMnIFRIRU4KKyAgICAgICAgKFNFTEVDVCBqc29uX2FnZygKKwkgICBqc29uX25v
cm1hbGl6ZV9udW1lcmljX2tleXNfbWF0Y2hpbmcod29ya2VyLCAnKEJsb2Nrc3xUaW1lKSR8U29y
dCBTcGFjZSBVc2VkJykKKyAgICAgICAgKQorICAgICAgICBGUk9NIGpzb25fYXJyYXlfZWxlbWVu
dHModmFsdWUpIEFTIHdvcmtlcnMod29ya2VyKSkKKyAgICAgIFdIRU4gJ1BsYW5zJyBUSEVOCisJ
KFNFTEVDVCBqc29uX2FnZygKKwkgIGV4cGxhaW5fd29ya2VycyhjaGlsZCkKKwkpCisJRlJPTSBq
c29uX2FycmF5X2VsZW1lbnRzKHZhbHVlKSBBUyBjaGlsZHJlbihjaGlsZCkpCisgICAgRU5EIEFT
IHZhbHVlCisgIEZST00KKyAgICBqc29uX2VhY2gocGxhbl9ub2RlKSBBUyBlbnRyaWVzKGtleSwg
dmFsdWUpCisgIFdIRVJFCisgICAga2V5IElOICgnV29ya2VycycsICdQbGFucycpCispIEFTIHBs
YW5fZmllbGRzKGtleSwgdmFsdWUpOworJCQ7CistLSB0ZXN0IHRoYXQgcGVyLXdvcmtlciBzb3J0
IGFuZCBidWZmZXJzIG91dHB1dCBpcyBjb21iaW5lZCBjb3JyZWN0bHkgaW4gRVhQTEFJTgorc2V0
IGZvcmNlX3BhcmFsbGVsX21vZGUgPSB0cnVlOworU0VMRUNUIGV4cGxhaW5fd29ya2Vycyhqc29u
X2V4cGxhaW4oJCQKKyAgU0VMRUNUICogRlJPTSAoVkFMVUVTKDEpLCgyKSkgeCBPUkRFUiBCWSB4
OworJCQsICd2ZXJib3NlJywgJ2FuYWx5emUnLCAnYnVmZmVycycpIC0+IDAgLT4gJ1BsYW4nKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFpbl93
b3JrZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsg
IlBsYW5zIiA6IFt7ICJXb3JrZXJzIiA6IFt7ICJXb3JrZXIgTnVtYmVyIiA6IDAsICJBY3R1YWwg
U3RhcnR1cCBUaW1lIiA6IDAsICJBY3R1YWwgVG90YWwgVGltZSIgOiAwLCAiQWN0dWFsIFJvd3Mi
IDogMiwgIkFjdHVhbCBMb29wcyIgOiAxLCAiU29ydCBNZXRob2QiIDogInF1aWNrc29ydCIsICJT
b3J0IFNwYWNlIFVzZWQiIDogMCwgIlNvcnQgU3BhY2UgVHlwZSIgOiAiTWVtb3J5IiwgIlNoYXJl
ZCBIaXQgQmxvY2tzIiA6IDAsICJTaGFyZWQgUmVhZCBCbG9ja3MiIDogMCwgIlNoYXJlZCBEaXJ0
aWVkIEJsb2NrcyIgOiAwLCAiU2hhcmVkIFdyaXR0ZW4gQmxvY2tzIiA6IDAsICJMb2NhbCBIaXQg
QmxvY2tzIiA6IDAsICJMb2NhbCBSZWFkIEJsb2NrcyIgOiAwLCAiTG9jYWwgRGlydGllZCBCbG9j
a3MiIDogMCwgIkxvY2FsIFdyaXR0ZW4gQmxvY2tzIiA6IDAsICJUZW1wIFJlYWQgQmxvY2tzIiA6
IDAsICJUZW1wIFdyaXR0ZW4gQmxvY2tzIiA6IDAgfV0sICJQbGFucyIgOiBbeyAiV29ya2VycyIg
OiBbeyAiV29ya2VyIE51bWJlciIgOiAwLCAiQWN0dWFsIFN0YXJ0dXAgVGltZSIgOiAwLCAiQWN0
dWFsIFRvdGFsIFRpbWUiIDogMCwgIkFjdHVhbCBSb3dzIiA6IDIsICJBY3R1YWwgTG9vcHMiIDog
MSwgIlNoYXJlZCBIaXQgQmxvY2tzIiA6IDAsICJTaGFyZWQgUmVhZCBCbG9ja3MiIDogMCwgIlNo
YXJlZCBEaXJ0aWVkIEJsb2NrcyIgOiAwLCAiU2hhcmVkIFdyaXR0ZW4gQmxvY2tzIiA6IDAsICJM
b2NhbCBIaXQgQmxvY2tzIiA6IDAsICJMb2NhbCBSZWFkIEJsb2NrcyIgOiAwLCAiTG9jYWwgRGly
dGllZCBCbG9ja3MiIDogMCwgIkxvY2FsIFdyaXR0ZW4gQmxvY2tzIiA6IDAsICJUZW1wIFJlYWQg
QmxvY2tzIiA6IDAsICJUZW1wIFdyaXR0ZW4gQmxvY2tzIiA6IDAgfV0gfV0gfV0gfQorKDEgcm93
KQorCityZXNldCBmb3JjZV9wYXJhbGxlbF9tb2RlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn
cmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1
bGUKaW5kZXggZDMzYTRlMTQzZC4uZDJiMTdkZDNlYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn
cmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3Nj
aGVkdWxlCkBAIC0xMTIsNyArMTEyLDcgQEAgdGVzdDogcGxhbmNhY2hlIGxpbWl0IHBscGdzcWwg
Y29weTIgdGVtcCBkb21haW4gcmFuZ2VmdW5jcyBwcmVwYXJlIGNvbnZlcnNpb24gdHIKICMgLS0t
LS0tLS0tLQogIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzCiAjIC0tLS0tLS0tLS0K
LXRlc3Q6IHBhcnRpdGlvbl9qb2luIHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFy
dCBpbmRleGluZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29ydAor
dGVzdDogcGFydGl0aW9uX2pvaW4gcGFydGl0aW9uX3BydW5lIHJlbG9wdGlvbnMgaGFzaF9wYXJ0
IGluZGV4aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUgcGFydGl0aW9uX2luZm8gdHVwbGVzb3J0IGV4
cGxhaW4KIAogIyBldmVudCB0cmlnZ2VycyBjYW5ub3QgcnVuIGNvbmN1cnJlbnRseSB3aXRoIGFu
eSB0ZXN0IHRoYXQgcnVucyBEREwKIHRlc3Q6IGV2ZW50X3RyaWdnZXIKZGlmZiAtLWdpdCBhL3Ny
Yy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxf
c2NoZWR1bGUKaW5kZXggZjg2ZjVjNTY4Mi4uYWNiYTM5MTMzMiAxMDA2NDQKLS0tIGEvc3JjL3Rl
c3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxf
c2NoZWR1bGUKQEAgLTE5Myw2ICsxOTMsNyBAQCB0ZXN0OiBpbmRleGluZwogdGVzdDogcGFydGl0
aW9uX2FnZ3JlZ2F0ZQogdGVzdDogcGFydGl0aW9uX2luZm8KIHRlc3Q6IHR1cGxlc29ydAordGVz
dDogZXhwbGFpbgogdGVzdDogZXZlbnRfdHJpZ2dlcgogdGVzdDogZmFzdF9kZWZhdWx0CiB0ZXN0
OiBzdGF0cwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwgYi9z
cmMvdGVzdC9yZWdyZXNzL3NxbC9leHBsYWluLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwLi41ZmI2ZTdkMmUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVn
cmVzcy9zcWwvZXhwbGFpbi5zcWwKQEAgLTAsMCArMSw3NyBAQAorLS0KKy0tIEVYUExBSU4KKy0t
CisKKy0tIGhlbHBlciBmdW5jdGlvbnMgZm9yIGV4YW1pbmluZyBqc29uIGV4cGxhaW4gb3V0cHV0
CisKKy0tIHJldHVybiBhIGpzb24gZXhwbGFpbiBvZiBnaXZlbiBxdWVyeQorQ1JFQVRFIE9SIFJF
UExBQ0UgRlVOQ1RJT04ganNvbl9leHBsYWluKHF1ZXJ5IHRleHQsIHZhcmlhZGljIG9wdHMgdGV4
dFtdKQorICBSRVRVUk5TIGpzb24gTEFOR1VBR0UgUExQR1NRTCBBUyAkJAorREVDTEFSRQorICBw
bGFuIGpzb247CitCRUdJTgorICBFWEVDVVRFICdFWFBMQUlOICgnIHx8IGFycmF5X3RvX3N0cmlu
ZyhhcnJheV9hcHBlbmQob3B0cywgJ0ZPUk1BVCBKU09OKSAnKSwgJywgJykgfHwgcXVlcnkgSU5U
TyBTVFJJQ1QgcGxhbjsKKyAgUkVUVVJOIHBsYW47CitFTkQ7CiskJDsKKworLyoKKyAqIFRha2Vz
IGEganNvbiBvYmplY3QgYW5kIHByb2Nlc3NlcyBpdHMga2V5cyBhbmQgdmFsdWVzLiBGb3IgZXZl
cnkKKyAqIG1hdGNoaW5nIGtleSB3aG9zZSB2YWx1ZSBpcyBhIG51bWJlciwgc2V0IGl0IHRvIHpl
cm8gdG8gZmFjaWxpdGF0ZQorICogY29tcGFyaXNvbnMgZm9yIHZhbHVlcyB0aGF0IGNhbiB2YXJ5
IGFjcm9zcyBleGVjdXRpb25zLiBJZiBub3QgYSBudW1iZXIsCisgKiBzZXQgdGhlIHZhbHVlIHRv
IC0xIHRvIGluZGljYXRlIHdlIG1hdGNoZWQgYW4gdW5leHBlY3RlZCBrZXkuIFJldHVybgorICog
bm9uLW1hdGNoaW5nIGtleXMgYW5kIHZhbHVlcyB1bm1vZGlmaWVkLgorICovCitDUkVBVEUgT1Ig
UkVQTEFDRSBGVU5DVElPTiBqc29uX25vcm1hbGl6ZV9udW1lcmljX2tleXNfbWF0Y2hpbmcob2Jq
IGpzb24sIHJlZ2V4cCB0ZXh0KQorICBSRVRVUk5TIGpzb24gTEFOR1VBR0UgU1FMIEFTICQkCitT
RUxFQ1QKKyAgY29hbGVzY2UoanNvbl9vYmplY3RfYWdnKAorICAgIGtleSwKKyAgICBDQVNFCisg
ICAgICBXSEVOIGtleSB+IHJlZ2V4cCBUSEVOCisgICAgICAgIENBU0UganNvbl90eXBlb2YodmFs
dWUpCisJICBXSEVOICdudW1iZXInIFRIRU4gMDo6dGV4dDo6anNvbgorCSAgRUxTRSAoLTEpOjp0
ZXh0Ojpqc29uCisJRU5ECisgICAgICBFTFNFIHZhbHVlCisgICAgRU5ECisgICksICd7fScpCitG
Uk9NCisgIGpzb25fZWFjaChvYmopCiskJDsKKworLS0gZXhwbGFpbiBvbmx5IHdvcmtlciBpbmZv
cm1hdGlvbiwgbm9ybWFsaXppbmcgYW55IHZhbHVlcyB0aGF0IGNvdWxkIHZhcnkgYWNyb3NzIGV4
ZWN1dGlvbnMKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGV4cGxhaW5fd29ya2VycyhwbGFu
X25vZGUganNvbikKKyAgUkVUVVJOUyBqc29uIExBTkdVQUdFIFNRTCBBUyAkJAorU0VMRUNUCisg
IGNvYWxlc2NlKGpzb25fb2JqZWN0X2FnZyhrZXksIHZhbHVlKSwgJ3t9JykKK0ZST00gKAorICBT
RUxFQ1QKKyAgICBrZXksCisgICAgQ0FTRSBrZXkKKyAgICAgIFdIRU4gJ1dvcmtlcnMnIFRIRU4K
KyAgICAgICAgKFNFTEVDVCBqc29uX2FnZygKKwkgICBqc29uX25vcm1hbGl6ZV9udW1lcmljX2tl
eXNfbWF0Y2hpbmcod29ya2VyLCAnKEJsb2Nrc3xUaW1lKSR8U29ydCBTcGFjZSBVc2VkJykKKyAg
ICAgICAgKQorICAgICAgICBGUk9NIGpzb25fYXJyYXlfZWxlbWVudHModmFsdWUpIEFTIHdvcmtl
cnMod29ya2VyKSkKKyAgICAgIFdIRU4gJ1BsYW5zJyBUSEVOCisJKFNFTEVDVCBqc29uX2FnZygK
KwkgIGV4cGxhaW5fd29ya2VycyhjaGlsZCkKKwkpCisJRlJPTSBqc29uX2FycmF5X2VsZW1lbnRz
KHZhbHVlKSBBUyBjaGlsZHJlbihjaGlsZCkpCisgICAgRU5EIEFTIHZhbHVlCisgIEZST00KKyAg
ICBqc29uX2VhY2gocGxhbl9ub2RlKSBBUyBlbnRyaWVzKGtleSwgdmFsdWUpCisgIFdIRVJFCisg
ICAga2V5IElOICgnV29ya2VycycsICdQbGFucycpCispIEFTIHBsYW5fZmllbGRzKGtleSwgdmFs
dWUpOworJCQ7CisKKy0tIHRlc3QgdGhhdCBwZXItd29ya2VyIHNvcnQgYW5kIGJ1ZmZlcnMgb3V0
cHV0IGlzIGNvbWJpbmVkIGNvcnJlY3RseSBpbiBFWFBMQUlOCitzZXQgZm9yY2VfcGFyYWxsZWxf
bW9kZSA9IHRydWU7CisKK1NFTEVDVCBleHBsYWluX3dvcmtlcnMoanNvbl9leHBsYWluKCQkCisg
IFNFTEVDVCAqIEZST00gKFZBTFVFUygxKSwoMikpIHggT1JERVIgQlkgeDsKKyQkLCAndmVyYm9z
ZScsICdhbmFseXplJywgJ2J1ZmZlcnMnKSAtPiAwIC0+ICdQbGFuJyk7CisKK3Jlc2V0IGZvcmNl
X3BhcmFsbGVsX21vZGU7Cg==
--0000000000006d637d059c28915f--