Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Dec 2011 16:13:53 +0300
From:      green dog <fiziologus@gmail.com>
To:        ports@FreeBSD.org
Subject:   [update] graphics/py-soya3d
Message-ID:  <CAFGnVTnYFTQxunPYz1-JriS-4vju-zuHs%2BHgdBkWosqq%2BD5vgQ@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--20cf3071cca883364d04b3a88e48
Content-Type: text/plain; charset=ISO-8859-1

update to 0.15rc1

--20cf3071cca883364d04b3a88e48
Content-Type: text/plain; charset=US-ASCII; name="diff.txt"
Content-Disposition: attachment; filename="diff.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gvz82xv20

ZGlmZiAtcnVOIHB5LXNveWEzZC9NYWtlZmlsZSBweS1zb3lhM2QubmV3L01ha2VmaWxlCi0tLSBw
eS1zb3lhM2QvTWFrZWZpbGUJMjAxMC0wNC0yOCAwMTo1ODoyNy4wMDAwMDAwMDAgKzA0MDAKKysr
IHB5LXNveWEzZC5uZXcvTWFrZWZpbGUJMjAxMS0xMS0yNSAxNDoyNjozNi4wMDAwMDAwMDAgKzA0
MDAKQEAgLTYsMTIgKzYsMTIgQEAKICMKIAogUE9SVE5BTUU9CXNveWEzZAotUE9SVFZFUlNJT049
CTAuMTQKLVBPUlRSRVZJU0lPTj0JNQorRElTVFZFUlNJT049CTAuMTVyYzEKK1BPUlRSRVZJU0lP
Tj0JMQogQ0FURUdPUklFUz0JZ3JhcGhpY3MgcHl0aG9uCiBNQVNURVJfU0lURVM9CWh0dHA6Ly9k
b3dubG9hZC5nbmEub3JnL3NveWEvCiBQS0dOQU1FUFJFRklYPQkke1BZVEhPTl9QS0dOQU1FUFJF
RklYfQotRElTVE5BTUU9CVNveWEtJHtQT1JUVkVSU0lPTn0KK0RJU1ROQU1FPQlTb3lhLSR7RElT
VFZFUlNJT059CiBESVNURklMRVM9CSR7RElTVE5BTUV9JHtFWFRSQUNUX1NVRlh9CiBESVNUX1NV
QkRJUj0JcHl0aG9uCiAKQEAgLTU1LDYgKzU1LDkgQEAKIAlAJHtSRUlOUExBQ0VfQ01EfSAtZSBc
CiAJCSdzfCUlTE9DQUxCQVNFJSV8JHtMT0NBTEJBU0V9fGcnIC1lIFwKIAkJCSdzfC91c3IvaW5j
bHVkZXwke0xPQ0FMQkFTRX0vaW5jbHVkZXxnJyAke1dSS1NSQ30vc2V0dXAucHkKKyNSZXBsYWNl
IGJhZCBmaWxlIChjb250ZW50IGJpbmFyeSBzaW1ib2xzKQorCUAke1JNfSAke1dSS1NSQ30vZWRp
dG9yL3dvcmxkLnB5ICYmIFwKKwkke0NQfSAke0ZJTEVTRElSfS93b3JsZC5weSAke1dSS1NSQ30v
ZWRpdG9yCiAKIHBvc3QtaW5zdGFsbDoKIC5pZiAhZGVmaW5lZChOT1BPUlRFWEFNUExFUykKZGlm
ZiAtcnVOIHB5LXNveWEzZC9kaXN0aW5mbyBweS1zb3lhM2QubmV3L2Rpc3RpbmZvCi0tLSBweS1z
b3lhM2QvZGlzdGluZm8JMjAxMS0wNy0wMyAxODoxMjowMi4wMDAwMDAwMDAgKzA0MDAKKysrIHB5
LXNveWEzZC5uZXcvZGlzdGluZm8JMjAxMS0xMS0yNSAxNDoyNDo1Ni4wMDAwMDAwMDAgKzA0MDAK
QEAgLTEsNCArMSw0IEBACi1TSEEyNTYgKHB5dGhvbi9Tb3lhLTAuMTQudGFyLmJ6MikgPSBkY2I5
MzIwNmQ3MTU0ZGM1NzVlYzZlZWI3ZmEzZWNmZDZiZmI3OGZhMjMzZGI2MzllNDIzODU3Y2QyYTk5
NTkwCi1TSVpFIChweXRob24vU295YS0wLjE0LnRhci5iejIpID0gOTA1NjU5CitTSEEyNTYgKHB5
dGhvbi9Tb3lhLTAuMTVyYzEudGFyLmJ6MikgPSAyNTY3NzE0YmMzMTJhMTcxYmI1YjMxY2I4NTQ4
MDRhNzhjZmY4NzhlOGQ1Y2QyMzUyY2YzN2Y0OGM4ZWI2ZGQ2CitTSVpFIChweXRob24vU295YS0w
LjE1cmMxLnRhci5iejIpID0gOTEwNTc2CiBTSEEyNTYgKHB5dGhvbi9Tb3lhVHV0b3JpYWwtMC4x
NC50YXIuYnoyKSA9IDg2ZDViODE4OWU3ZjdiNDI2OTk3NmE2NWYyM2E1MTI5MWJiOTljNjI3MmYy
ODg0Y2JkMTI5YTZlOWNjNmNiZWMKIFNJWkUgKHB5dGhvbi9Tb3lhVHV0b3JpYWwtMC4xNC50YXIu
YnoyKSA9IDUyMjM2NzQKZGlmZiAtcnVOIHB5LXNveWEzZC9maWxlcy9wYXRjaC1zZXR1cC5weSBw
eS1zb3lhM2QubmV3L2ZpbGVzL3BhdGNoLXNldHVwLnB5Ci0tLSBweS1zb3lhM2QvZmlsZXMvcGF0
Y2gtc2V0dXAucHkJMjAwOS0wNC0yNyAwNToxNjozNS4wMDAwMDAwMDAgKzA0MDAKKysrIHB5LXNv
eWEzZC5uZXcvZmlsZXMvcGF0Y2gtc2V0dXAucHkJMjAxMS0xMS0yNSAxNDoyNDo1Ni4wMDAwMDAw
MDAgKzA0MDAKQEAgLTEsMTQgKzEsNiBAQAotLS0tIHNldHVwLnB5CTIwMDktMDQtMjIgMTA6MDA6
MjMuMDAwMDAwMDAwIC0wNTAwCi0rKysgc2V0dXAucHkJMjAwOS0wNC0yMiAxMDowMzoyMy4wMDAw
MDAwMDAgLTA1MDAKLUBAIC0yMSw2ICsyMSw3IEBACi0gCi0gIyBNb2RpZnkgdGhlIGZvbGxvd2lu
ZyBpZiBuZWVkZWQgOgotIFVTRV9PUEVOQUwgPSAxICAgICAjIHVzZSBPcGVuQUwKLStIQVZFX1BZ
UkVYID0gMAotICNVU0VfT1BFTkFMID0gMAotIAotICMgTW9kaWZ5IHRoZSBmb2xsb3dpbmcgaWYg
bmVlZGVkIDoKLUBAIC0zMiw3ICszMyw3IEBACistLS0gc2V0dXAucHkuYmFrCTIwMTAtMDEtMTkg
MDA6Mzk6NTcuMDAwMDAwMDAwICswMzAwCisrKysgc2V0dXAucHkJMjAxMS0xMS0yNSAwNTo0Mzow
OS4wMDAwMDAwMDAgKzA0MDAKK0BAIC0zMiw3ICszMiw3IEBACiAgSU5DRElSID0gWwogIAkjIm9k
ZS0wLjUvaW5jbHVkZSIsCiAgCSIvdXNyL2luY2x1ZGUiLApAQCAtMTcsNyArOSw3IEBACiAgCSIv
dXNyL1gxMVI2L2luY2x1ZGUiLAogIAkiL3Vzci9YMTEvaW5jbHVkZSIsCiAgCSIvdXNyL2luY2x1
ZGUvZnJlZXR5cGUyIiwKLUBAIC00OCw3ICs0OSw3IEBACitAQCAtNDgsNyArNDgsNyBAQAogIExJ
QkRJUiA9IFsKICAJIyJvZGUtMC41L2xpYiIsCiAgCSIvdXNyL2xpYiIsCkBAIC0yNiwxOSArMTgs
MjYgQEAKICAJIi9vcHQvbG9jYWwvbGliIiwgIyBGb3IgTWFjIE9TIFggImRhcndpbiBwb3J0Igog
IAkiL3Vzci9YMTFSNi9saWIiLAogIAkiL3Vzci9YMTEvbGliIiwKLUBAIC03OSwxMSArODAsNiBA
QAorQEAgLTgxLDEyICs4MSwxMiBAQAogIFNESVNUSU5HID0gKCJzZGlzdCIgaW4gc3lzLmFyZ3Zb
MTpdKSBhbmQgbm90ICgiLS1oZWxwIiBpbiBzeXMuYXJndlsxOl0pCiAgCiAgTUFDT1NYX0RFUExP
WU1FTlRfVEFSR0VUICA9IG9zLmdldGVudignTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJykKIC10
cnk6CiAtCWZyb20gUHlyZXguRGlzdHV0aWxzIGltcG9ydCBidWlsZF9leHQKLS0JSEFWRV9QWVJF
WCA9IDEKLS1leGNlcHQ6Ci0tCUhBVkVfUFlSRVggPSAwCi0gCi0gIyBPbmx5IGVuYWJsZSBQeXJl
eCBjb21waWxhdGlvbiBmb3IgU1ZOIHNvdXJjZXMKLSBpZiBub3Qgb3MucGF0aC5leGlzdHMob3Mu
cGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICIuc3ZuIikpOgotQEAgLTE1OSw2
ICsxNTUsNyBAQAorLQlVU0VfUFlSRVggPSAxCistZXhjZXB0IEltcG9ydEVycm9yOgorLQlVU0Vf
UFlSRVggPSAwCistCXByaW50ICJObyBQeXJleCBmb3VuZCIKKysjdHJ5OgorKyMJZnJvbSBQeXJl
eC5EaXN0dXRpbHMgaW1wb3J0IGJ1aWxkX2V4dAorKyMJVVNFX1BZUkVYID0gMQorKyNleGNlcHQg
SW1wb3J0RXJyb3I6CisrVVNFX1BZUkVYID0gMAorKyMJcHJpbnQgIk5vIFB5cmV4IGZvdW5kIgor
IAorIGlmIFVTRV9QWVJFWDogcHJpbnQgIlB5cmV4IGNvbXBpbGF0aW9uIGVuYWJsZWQhIgorIGVs
c2U6ICAgICAgICAgIHByaW50ICJQeXJleCBjb21waWxhdGlvbiBkaXNhYmxlZC4iCitAQCAtMTcy
LDYgKzE3Miw3IEBACiAgCQlERUZJTkVTLmFwcGVuZCgoJ1NPWUFfTUFDT1NYJywxKSkKICAJZWxz
ZToKICAJCUxJQlMuYXBwZW5kKCJvcGVuYWwiKQpkaWZmIC1ydU4gcHktc295YTNkL2ZpbGVzL3dv
cmxkLnB5IHB5LXNveWEzZC5uZXcvZmlsZXMvd29ybGQucHkKLS0tIHB5LXNveWEzZC9maWxlcy93
b3JsZC5weQkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMAorKysgcHktc295YTNk
Lm5ldy9maWxlcy93b3JsZC5weQkyMDExLTExLTI1IDE0OjI0OjU2LjAwMDAwMDAwMCArMDQwMApA
QCAtMCwwICsxLDcyMyBAQAorIyAtKi0gaW5kZW50LXRhYnMtbW9kZTogdCAtKi0KKworIyBTb3lh
IDNECisjIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEplYW4tQmFwdGlzdGUgTEFNWQorIworIyBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
IyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z
dG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworZnJvbSBlZGl0b2JqLm9ic2VydmUgaW1wb3J0
ICoKK2ltcG9ydCBlZGl0b2JqLmN1c3RvbSBhcyBjdXN0b20KK2ltcG9ydCBUa2ludGVyLCB0aW1l
LCB3ZWFrcmVmCitpbXBvcnQgc295YSwgc295YS5vcGVuZ2wsIHNveWEuc2RsY29uc3QsIHNveWEu
Y3ViZSBhcyBjdWJlLCBzb3lhLmN1cnNvciBhcyBjdXJzb3IKKworU1RFUCAgICA9IDAuMTI1CitF
UFNJTE9OID0gMC4wMDEKKworIyBBZGRpdGlvbm5hbCBrZXkgYmluZGluZy4gKEEgZGljdCBtYXBw
aW5nIGtleSBJRCB0byBhIGxhbWJkYSB0YWtpbmcgMiBhcmdzLCB0aGUgcm9vdCB3b3JsZCBhbmQg
dGhlIGVkaXRlZCBvYmplY3QpLgorS0VZX0JJTkRJTkdTID0ge30KKworY2xhc3MgV29ybGRFZGl0
b3I6CisJZGVmIF9faW5pdF9fKHNlbGYsIHdvcmxkLCBkaWFsb2cpOgorCQlzZWxmLmFjdGl2ZSAg
ICAgICAgICAgICAgPSAwCisJCXNlbGYuZGlhbG9nICAgICAgICAgICAgICA9IGRpYWxvZworCQlz
ZWxmLmhhbmRsZXMgICAgICAgICAgICAgPSBbXQorCQlzZWxmLnZlcnRleF9oYW5kbGVzICAgICAg
PSBbXQorCQlzZWxmLmNoaWxkcmVuX3Zpc2liaWxpdHkgPSB7IHdvcmxkIDogMSB9CisJCQorCQlz
ZWxmLndvcmxkID0gc2VsZi5jdXJyZW50ID0gd29ybGQKKwkJCisJCXNlbGYuc2NlbmUgID0gc295
YS5Xb3JsZCgpCisJCXNlbGYuc2NlbmUubmFtZSA9ICJfX3NjZW5lX18iCisJCXNlbGYuc2NlbmUu
YXRtb3NwaGVyZSA9IHNveWEuQXRtb3NwaGVyZSgpCisJCXNlbGYuc2NlbmUuYXRtb3NwaGVyZS5h
bWJpZW50ID0gKDAuNSwgMC41LCAwLjUsIDEuMCkKKwkJCisJCXNlbGYuY2FtZXJhID0gc295YS5D
YW1lcmEoc2VsZi5zY2VuZSkKKwkJc2VsZi5jYW1lcmEuc2V0X3h5eigwLjAsIDAuMCwgNS4wKQor
CQlzZWxmLmNhbWVyYS5yb3RhdGVfeSg0NSkKKwkJc295YS5zZXRfcm9vdF93aWRnZXQoc2VsZi5j
YW1lcmEpCisJCQorCQlzZWxmLmxpZ2h0ID0gc295YS5MaWdodChzZWxmLnNjZW5lKQorCQlzZWxm
LmxpZ2h0LnNldF94eXooMC4yLCAyLjAsIDIuMikKKwkJc2VsZi5saWdodC50b3BfbGV2ZWwgPSAx
CisJCXNlbGYubGlnaHQuY2FzdF9zaGFkb3cgPSAwCisJCQorCQlzZWxmLmN1cnNvciA9IEN1cnNv
cihzZWxmLnNjZW5lLCBzZWxmLmNhbWVyYSwgc2VsZi5oYW5kbGVzLCBzZWxmLmxpZ2h0KQorCQlz
ZWxmLmN1cnNvci5uYW1lID0gImN1cnNvciIKKwkJCisJCXNlbGYuY29udGVudCA9IHNveWEuV29y
bGQoc2VsZi5zY2VuZSkKKwkJc2VsZi5jb250ZW50Lm5hbWUgPSAiX19jb250ZW50X18iCisJCXNl
bGYuY29udGVudC5hcHBlbmQod29ybGQpCisJCQorCQlzZWxmLmFkZF9oYW5kbGVzX2Zvcih3b3Js
ZCkKKwkJCisJCW9ic2VydmVfdHJlZSh3b3JsZCwgc2VsZi5vbl9jaGFuZ2VkKQorCQkKKwkJc2Vs
Zi5sYXN0X2NsaWNrICA9IDAKKwkJc2VsZi5jYW1lcmFfbW9kZSA9IDAKKwkJCisJZGVmIGFkZF9o
YW5kbGVzX2ZvcihzZWxmLCBpdGVtKToKKwkJaWYgICBpc2luc3RhbmNlKGl0ZW0sIHNveWEuU3By
aXRlKToKKwkJCXNlbGYuaGFuZGxlcy5hcHBlbmQoUG9zaXRpb25IYW5kbGUoc2VsZi5jb250ZW50
LCBzZWxmLCBpdGVtKSkKKwkJCQorCQllbGlmIGlzaW5zdGFuY2UoaXRlbSwgc295YS5GYWNlKToK
KwkJCWZvciB2ZXJ0ZXggaW4gaXRlbS52ZXJ0aWNlczogc2VsZi5hZGRfaGFuZGxlc19mb3JfdmVy
dGV4KHZlcnRleCkKKwkJCQorCQllbGlmIGlzaW5zdGFuY2UoaXRlbSwgc295YS5Db29yZFN5c3Qp
OgorCQkJc2VsZi5oYW5kbGVzLmFwcGVuZChQb3NpdGlvbkhhbmRsZSAgIChzZWxmLmNvbnRlbnQs
IHNlbGYsIGl0ZW0pKQorCQkJc2VsZi5oYW5kbGVzLmFwcGVuZChPcmllbnRhdGlvbkhhbmRsZShz
ZWxmLmNvbnRlbnQsIHNlbGYsIGl0ZW0pKQorCQkJCisJCWlmICAgaXNpbnN0YW5jZShpdGVtLCBz
b3lhLldvcmxkKSBhbmQgc2VsZi5jaGlsZHJlbl92aXNpYmlsaXR5LmdldChpdGVtLCAwKToKKwkJ
CWZvciBzdWJpdGVtIGluIGl0ZW0uY2hpbGRyZW46IHNlbGYuYWRkX2hhbmRsZXNfZm9yKHN1Yml0
ZW0pCisJCQkKKwlkZWYgYWRkX2hhbmRsZXNfZm9yX3ZlcnRleChzZWxmLCB2ZXJ0ZXgpOgorCQlp
ZiBnZXRhdHRyKHZlcnRleCwgImltbWF0dXJlIiwgMCk6IHJldHVybgorCQkKKwkJZm9yIGhhbmRs
ZSBpbiBzZWxmLnZlcnRleF9oYW5kbGVzOgorCQkJaWYgaGFuZGxlLmlzX2Zvcih2ZXJ0ZXgpOiBy
ZXR1cm4KKwkJCisJCWZvciBoYW5kbGUgaW4gc2VsZi52ZXJ0ZXhfaGFuZGxlczoKKwkJCXYgPSBo
YW5kbGUudmVydGljZXNbMF0KKwkJCWlmICh2LnBhcmVudCBpcyB2ZXJ0ZXgucGFyZW50KSBhbmQg
KGFicyh2LnggLSB2ZXJ0ZXgueCkgPCBFUFNJTE9OKSBhbmQgKGFicyh2LnkgLSB2ZXJ0ZXgueSkg
PCBFUFNJTE9OKSBhbmQgKGFicyh2LnogLSB2ZXJ0ZXgueikgPCBFUFNJTE9OKToKKwkJCQloYW5k
bGUuYWRkX3ZlcnRleCh2ZXJ0ZXgpCisJCQkJcmV0dXJuIGhhbmRsZQorCQllbHNlOgorCQkJaGFu
ZGxlID0gVmVydGV4SGFuZGxlKHNlbGYuY29udGVudCwgc2VsZiwgdmVydGV4KQorCQkJc2VsZi5o
YW5kbGVzLmFwcGVuZChoYW5kbGUpCisJCQlzZWxmLnZlcnRleF9oYW5kbGVzLmFwcGVuZChoYW5k
bGUpCisJCQkKKwlkZWYgcmVtb3ZlX2hhbmRsZXNfb2Yoc2VsZiwgaXRlbSk6CisJCWZvciBoYW5k
bGUgaW4gc2VsZi5oYW5kbGVzWzpdOiBoYW5kbGUuZGVsX2ZvcihpdGVtKQorCQkKKwkJaWYgICBp
c2luc3RhbmNlKGl0ZW0sIHNveWEuRmFjZSk6CisJCQlmb3IgaGFuZGxlIGluIHNlbGYudmVydGV4
X2hhbmRsZXNbOl06CisJCQkJZm9yIHZlcnRleCBpbiBpdGVtLnZlcnRpY2VzOiBoYW5kbGUuZGVs
X2Zvcih2ZXJ0ZXgpCisJCQkJCisJCWVsaWYgaXNpbnN0YW5jZShpdGVtLCBzb3lhLldvcmxkKToK
KwkJCWZvciBzdWJpdGVtIGluIGl0ZW06IHNlbGYucmVtb3ZlX2hhbmRsZXNfb2Yoc3ViaXRlbSkK
KwkJCQorCWRlZiBzZWxlY3RfaGFuZGxlc19mb3Ioc2VsZiwgaXRlbSk6CisJCXNlbGYuY3VycmVu
dCA9IGl0ZW0KKwkJZm9yIGhhbmRsZSBpbiBzZWxmLmhhbmRsZXM6CisJCQlpZiBoYW5kbGUuaXNf
Zm9yKGl0ZW0pOiBoYW5kbGUuc2VsZWN0KCkKKwkJCQorCWRlZiBjaGlsZHJlbl9lZGl0ZWQoc2Vs
Ziwgd29ybGQsIHZpc2libGUpOgorCQlzZWxmLmNoaWxkcmVuX3Zpc2liaWxpdHlbd29ybGRdID0g
dmlzaWJsZQorCQlpZiB2aXNpYmxlOgorCQkJZm9yIGl0ZW0gaW4gd29ybGQuY2hpbGRyZW46CisJ
CQkJZm9yIGhhbmRsZSBpbiBzZWxmLmhhbmRsZXM6CisJCQkJCWlmIGhhbmRsZS5pc19mb3IoaXRl
bSk6IGNvbnRpbnVlCisJCQkJc2VsZi5hZGRfaGFuZGxlc19mb3IoaXRlbSkKKwkJZWxzZToKKwkJ
CWZvciBpdGVtIGluIHdvcmxkLmNoaWxkcmVuOiBzZWxmLnJlbW92ZV9oYW5kbGVzX29mKGl0ZW0p
CisJCQkKKwlkZWYgb25fZXZlbnQoc2VsZiwgZXZlbnQpOgorCQkjcHJpbnQgZXZlbnQKKwkJaWYg
ICBldmVudFswXSA9PSBzb3lhLnNkbGNvbnN0Lk1PVVNFTU9USU9OOgorCQkJaWYgc295YS5nZXRf
bW9kKCkgJiBzb3lhLnNkbGNvbnN0Lk1PRF9DVFJMOgorCQkJCXNlbGYuY3Vyc29yLmdyaWRfc3Rl
cCA9IFNURVAKKwkJCWVsc2U6IHNlbGYuY3Vyc29yLmdyaWRfc3RlcCA9IDAuMAorCQkJCisJCQlp
ZiBzZWxmLmNhbWVyYV9tb2RlOgorCQkJCXNlbGYuY2FtZXJhLnR1cm5feShmbG9hdChldmVudFsz
XSkpCisJCQkJc2VsZi5jYW1lcmEudHVybl94KGZsb2F0KGV2ZW50WzRdKSkKKwkJCQkKKwkJCXgs
IHkgPSBldmVudFsxXSwgZXZlbnRbMl0KKwkJCWlmICAgeCA9PSAwOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5jYW1lcmEgKz0gc295YS5WZWN0b3Ioc2VsZi5jYW1lcmEs
IC0wLjEsICAwLjAsIDAuMCkKKwkJCWVsaWYgeCA9PSBzZWxmLmNhbWVyYS5nZXRfc2NyZWVuX3dp
ZHRoKCkgIC0gMTogc2VsZi5jYW1lcmEgKz0gc295YS5WZWN0b3Ioc2VsZi5jYW1lcmEsICAwLjEs
ICAwLjAsIDAuMCkKKwkJCWlmICAgeSA9PSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5jYW1lcmEgKz0gc295YS5WZWN0b3Ioc2VsZi5jYW1lcmEsICAwLjAsICAwLjEs
IDAuMCkKKwkJCWVsaWYgeSA9PSBzZWxmLmNhbWVyYS5nZXRfc2NyZWVuX2hlaWdodCgpIC0gMTog
c2VsZi5jYW1lcmEgKz0gc295YS5WZWN0b3Ioc2VsZi5jYW1lcmEsICAwLjAsIC0wLjEsIDAuMCkK
KwkJCQorCQkJc2VsZi5jdXJzb3IubW91c2VfbW92ZWQoeCwgeSkKKwkJCQorCQllbGlmIGV2ZW50
WzBdID09IHNveWEuc2RsY29uc3QuTU9VU0VCVVRUT05ET1dOOgorCQkJaWYgZXZlbnRbMV0gPCAz
OiAjIExlZnQgb3IgbWlkZGxlIGJ1dHRvbgorCQkJCWN1cnJlbnQgPSB0aW1lLnRpbWUoKQorCQkJ
CWlmIGN1cnJlbnQgLSBzZWxmLmxhc3RfY2xpY2sgPCAwLjI6CisJCQkJCXNlbGYuY3Vyc29yLmJ1
dHRvbl9wcmVzc2VkKDIsIHNveWEuZ2V0X21vZCgpICYgc295YS5zZGxjb25zdC5NT0RfU0hJRlQp
ICMgRG91YmxlLWNsaWNrIGlzIHRoZSBzYW1lIHRoYXQgbWlkZGxlIGNsaWNrCisJCQkJZWxzZToK
KwkJCQkJc2VsZi5jdXJzb3IuYnV0dG9uX3ByZXNzZWQoZXZlbnRbMV0sIHNveWEuZ2V0X21vZCgp
ICYgc295YS5zZGxjb25zdC5NT0RfU0hJRlQpCisJCQkJc2VsZi5sYXN0X2NsaWNrID0gY3VycmVu
dAorCQkJZWxpZiBldmVudFsxXSA9PSAzOiBzZWxmLmNhbWVyYV9tb2RlID0gMQorCQkJCisJCWVs
aWYgZXZlbnRbMF0gPT0gc295YS5zZGxjb25zdC5NT1VTRUJVVFRPTlVQOgorCQkJaWYgc2VsZi5j
YW1lcmFfbW9kZToKKwkJCQlpZiAgIGV2ZW50WzFdID09IDM6IHNlbGYuY2FtZXJhX21vZGUgPSAw
CisJCQkJZWxpZiBldmVudFsxXSA9PSA0OiBzZWxmLl96b29tKC0xLjApCisJCQkJZWxpZiBldmVu
dFsxXSA9PSA1OiBzZWxmLl96b29tKCAxLjApCisJCQllbHNlOgorCQkJCWlmICAgZXZlbnRbMV0g
PCAgMzogc2VsZi5jdXJzb3IuYnV0dG9uX3JlbGVhc2VkKGV2ZW50WzFdKQorCQkJCWVsaWYgZXZl
bnRbMV0gPT0gNDogc2VsZi5jdXJzb3IubW91c2Vfcm9sbGVkKC0wLjI1KQorCQkJCWVsaWYgZXZl
bnRbMV0gPT0gNTogc2VsZi5jdXJzb3IubW91c2Vfcm9sbGVkKCAwLjI1KQorCQkJCQorCQllbGlm
IGV2ZW50WzBdID09IHNveWEuc2RsY29uc3QuS0VZRE9XTjoKKwkJCSMgUGFnZSB1cCwgcGFnZSBk
b3duCisJCQlpZiAgIGV2ZW50WzFdID09IDI4MDogc2VsZi5jdXJzb3IubW91c2Vfcm9sbGVkKC0x
IC0gOSAqIChzb3lhLmdldF9tb2QoKSAmIHNveWEuc2RsY29uc3QuTU9EX1NISUZUKSkKKwkJCWVs
aWYgZXZlbnRbMV0gPT0gMjgxOiBzZWxmLmN1cnNvci5tb3VzZV9yb2xsZWQoIDEgKyA5ICogKHNv
eWEuZ2V0X21vZCgpICYgc295YS5zZGxjb25zdC5NT0RfU0hJRlQpKQorCQkJCisJCQkjIExlZnQs
IHJpZ2h0LCB1cCwgZG93bgorCQkJZWxpZiBldmVudFsxXSA9PSAyNzY6IHNlbGYuY2FtZXJhICs9
IHNveWEuVmVjdG9yKHNlbGYuY2FtZXJhLCAtMS4wIC0gOS4wICogKHNveWEuZ2V0X21vZCgpICYg
c295YS5zZGxjb25zdC5NT0RfU0hJRlQpLCAgMC4wLCAwLjApCisJCQllbGlmIGV2ZW50WzFdID09
IDI3NTogc2VsZi5jYW1lcmEgKz0gc295YS5WZWN0b3Ioc2VsZi5jYW1lcmEsICAxLjAgKyA5LjAg
KiAoc295YS5nZXRfbW9kKCkgJiBzb3lhLnNkbGNvbnN0Lk1PRF9TSElGVCksICAwLjAsIDAuMCkK
KwkJCWVsaWYgZXZlbnRbMV0gPT0gMjczOiBzZWxmLmNhbWVyYSArPSBzb3lhLlZlY3RvcihzZWxm
LmNhbWVyYSwgIDAuMCwgIDEuMCArIDkuMCAqIChzb3lhLmdldF9tb2QoKSAmIHNveWEuc2RsY29u
c3QuTU9EX1NISUZUKSwgMC4wKQorCQkJZWxpZiBldmVudFsxXSA9PSAyNzQ6IHNlbGYuY2FtZXJh
ICs9IHNveWEuVmVjdG9yKHNlbGYuY2FtZXJhLCAgMC4wLCAtMS4wIC0gOS4wICogKHNveWEuZ2V0
X21vZCgpICYgc295YS5zZGxjb25zdC5NT0RfU0hJRlQpLCAwLjApCisJCQkKKwkJCSMgbyA6IHRv
Z2dsZSBvcnRobyBjYW1lcmEKKwkJCWVsaWYgZXZlbnRbMV0gPT0gMTExOgorCQkJCXNlbGYuY2Ft
ZXJhLm9ydGhvID0gbm90IHNlbGYuY2FtZXJhLm9ydGhvCisJCQkJc2VsZi5jYW1lcmEuZm92ID0g
NjAuMAorCQkJCQorCQkJIyArLCAtIDogem9vbQorCQkJZWxpZiBldmVudFsxXSA9PSAyNzA6IHNl
bGYuX3pvb20oLTEuMCAtIDkgKiAoc295YS5nZXRfbW9kKCkgJiBzb3lhLnNkbGNvbnN0Lk1PRF9T
SElGVCkpCisJCQllbGlmIGV2ZW50WzFdID09IDI2OTogc2VsZi5fem9vbSggMS4wICsgOSAqIChz
b3lhLmdldF9tb2QoKSAmIHNveWEuc2RsY29uc3QuTU9EX1NISUZUKSkKKwkJCQorCQkJIyA0LCA2
LCA4LCAyLCA1LCAwIDogcHJlZGVmaW5lZCB2aWV3cworCQkJZWxpZiBldmVudFsxXSA9PSAyNjA6
CisJCQkJYSwgYiA9IHNlbGYud29ybGQuZ2V0X2JveCgpCisJCQkJY2FtZXJheSwgY2FtZXJheiA9
IHNlbGYuY2FtZXJhLnksIHNlbGYuY2FtZXJhLnoKKwkJCQlzZWxmLmNhbWVyYS5zZXRfaWRlbnRp
dHkoKQorCQkJCXNlbGYuY2FtZXJhLnNldF94eXoobWluKChhICUgc2VsZi5zY2VuZSkueCwgKGIg
JSBzZWxmLnNjZW5lKS54KSAtIDMuMCwgY2FtZXJheSwgY2FtZXJheikKKwkJCQlzZWxmLmNhbWVy
YS5sb29rX2F0KHNveWEuVmVjdG9yKE5vbmUsICAxLjAsICAwLjAsICAwLjApKQorCQkJZWxpZiBl
dmVudFsxXSA9PSAyNjI6CisJCQkJYSwgYiA9IHNlbGYud29ybGQuZ2V0X2JveCgpCisJCQkJY2Ft
ZXJheSwgY2FtZXJheiA9IHNlbGYuY2FtZXJhLnksIHNlbGYuY2FtZXJhLnoKKwkJCQlzZWxmLmNh
bWVyYS5zZXRfaWRlbnRpdHkoKQorCQkJCXNlbGYuY2FtZXJhLnNldF94eXoobWF4KChhICUgc2Vs
Zi5zY2VuZSkueCwgKGIgJSBzZWxmLnNjZW5lKS54KSArIDMuMCwgY2FtZXJheSwgY2FtZXJheikK
KwkJCQlzZWxmLmNhbWVyYS5sb29rX2F0KHNveWEuVmVjdG9yKE5vbmUsIC0xLjAsICAwLjAsICAw
LjApKQorCQkJZWxpZiBldmVudFsxXSA9PSAyNjQ6CisJCQkJYSwgYiA9IHNlbGYud29ybGQuZ2V0
X2JveCgpCisJCQkJY2FtZXJheCwgY2FtZXJheiA9IHNlbGYuY2FtZXJhLngsIHNlbGYuY2FtZXJh
LnoKKwkJCQlzZWxmLmNhbWVyYS5zZXRfaWRlbnRpdHkoKQorCQkJCXNlbGYuY2FtZXJhLnNldF94
eXooY2FtZXJheCwgbWF4KChhICUgc2VsZi5zY2VuZSkueSwgKGIgJSBzZWxmLnNjZW5lKS55KSAr
IDMuMCwgY2FtZXJheikKKwkJCQlzZWxmLmNhbWVyYS5sb29rX2F0KHNveWEuVmVjdG9yKE5vbmUs
ICAwLjAsIC0xLjAsICAwLjApKQorCQkJZWxpZiBldmVudFsxXSA9PSAyNTg6CisJCQkJYSwgYiA9
IHNlbGYud29ybGQuZ2V0X2JveCgpCisJCQkJY2FtZXJheCwgY2FtZXJheiA9IHNlbGYuY2FtZXJh
LngsIHNlbGYuY2FtZXJhLnoKKwkJCQlzZWxmLmNhbWVyYS5zZXRfaWRlbnRpdHkoKQorCQkJCXNl
bGYuY2FtZXJhLnNldF94eXooY2FtZXJheCwgbWluKChhICUgc2VsZi5zY2VuZSkueSwgKGIgJSBz
ZWxmLnNjZW5lKS55KSAtIDMuMCwgY2FtZXJheikKKwkJCQlzZWxmLmNhbWVyYS5sb29rX2F0KHNv
eWEuVmVjdG9yKE5vbmUsICAwLjAsICAxLjAsICAwLjApKQorCQkJZWxpZiBldmVudFsxXSA9PSAy
NjE6CisJCQkJYSwgYiA9IHNlbGYud29ybGQuZ2V0X2JveCgpCisJCQkJY2FtZXJheCwgY2FtZXJh
eSA9IHNlbGYuY2FtZXJhLngsIHNlbGYuY2FtZXJhLnkKKwkJCQlzZWxmLmNhbWVyYS5zZXRfaWRl
bnRpdHkoKQorCQkJCXNlbGYuY2FtZXJhLnNldF94eXooY2FtZXJheCwgY2FtZXJheSwgbWluKChh
ICUgc2VsZi5zY2VuZSkueiwgKGIgJSBzZWxmLnNjZW5lKS56KSAtIDMuMCkKKwkJCQlzZWxmLmNh
bWVyYS5sb29rX2F0KHNveWEuVmVjdG9yKE5vbmUsICAwLjAsICAwLjAsICAxLjApKQorCQkJZWxp
ZiBldmVudFsxXSA9PSAyNTY6CisJCQkJYSwgYiA9IHNlbGYud29ybGQuZ2V0X2JveCgpCisJCQkJ
Y2FtZXJheCwgY2FtZXJheSA9IHNlbGYuY2FtZXJhLngsIHNlbGYuY2FtZXJhLnkKKwkJCQlzZWxm
LmNhbWVyYS5zZXRfaWRlbnRpdHkoKQorCQkJCXNlbGYuY2FtZXJhLnNldF94eXooY2FtZXJheCwg
Y2FtZXJheSwgbWF4KChhICUgc2VsZi5zY2VuZSkueiwgKGIgJSBzZWxmLnNjZW5lKS56KSArIDMu
MCkKKwkJCQlzZWxmLmNhbWVyYS5sb29rX2F0KHNveWEuVmVjdG9yKE5vbmUsICAwLjAsICAwLjAs
IC0xLjApKQorCQkJCQorCQkJIyBxLCB0IDogbmV3IHF1YWQsIG5ldyB0cmlhbmdsZQorCQkJZWxp
ZiBldmVudFsxXSA9PSAxMTM6CisJCQkJaWYgaGFzYXR0cihzZWxmLmN1cnJlbnQsICJjaGlsZHJl
biIpOiBpbnRvID0gc2VsZi5jdXJyZW50CisJCQkJZWxzZTogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnRvID0gc2VsZi5jdXJyZW50LnBhcmVudAorCQkJCWludG8uYXBwZW5kKHNv
eWEuUXVhZCgpKQorCQkJZWxpZiBldmVudFsxXSA9PSAxMTY6CisJCQkJaWYgaGFzYXR0cihzZWxm
LmN1cnJlbnQsICJjaGlsZHJlbiIpOiBpbnRvID0gc2VsZi5jdXJyZW50CisJCQkJZWxzZTogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvID0gc2VsZi5jdXJyZW50LnBhcmVudAor
CQkJCWludG8uYXBwZW5kKHNveWEuVHJpYW5nbGUoKSkKKwkJCWVsc2U6CisJCQkJaWYgS0VZX0JJ
TkRJTkdTLmhhc19rZXkoZXZlbnRbMV0pOgorCQkJCQlLRVlfQklORElOR1NbZXZlbnRbMV1dKHNl
bGYud29ybGQsIHNlbGYuY3VycmVudCkKKwkJCQkJCisJZGVmIF96b29tKHNlbGYsIHopOgorCQlp
ZiBzZWxmLmNhbWVyYS5vcnRobzogc2VsZi5jYW1lcmEuZm92ID0gc2VsZi5jYW1lcmEuZm92ICog
KDEuMCArIHogLyAxMC4wKQorCQllbHNlOiAgICAgICAgICAgICAgICAgc2VsZi5jYW1lcmEgKz0g
c295YS5WZWN0b3Ioc2VsZi5jYW1lcmEsIDAuMCwgMC4wLCB6KQorCQkJCisJZGVmIHJlbmRlcihz
ZWxmKToKKwkJaWYgc2VsZi5hY3RpdmU6CisJCQlzZWxmLnNjZW5lLmJlZ2luX3JvdW5kKCkKKwkJ
CXNlbGYuc2NlbmUuYWR2YW5jZV90aW1lKDEuMCkKKwkJCXNlbGYuc2NlbmUuYmVnaW5fcm91bmQo
KQorCQkJc2VsZi5zY2VuZS5hZHZhbmNlX3RpbWUoMS4wKQorCQkJc2VsZi5zY2VuZS5iZWdpbl9y
b3VuZCgpCisJCQlzZWxmLnNjZW5lLmFkdmFuY2VfdGltZSgxLjApCisJCQlzZWxmLnNjZW5lLmJl
Z2luX3JvdW5kKCkKKwkJCXNlbGYuc2NlbmUuYWR2YW5jZV90aW1lKDEuMCkKKwkJCXNlbGYuc2Nl
bmUuYmVnaW5fcm91bmQoKQorCQkJc2VsZi5zY2VuZS5hZHZhbmNlX3RpbWUoMS4wKQorCQkJc295
YS5yZW5kZXIoKQorCQkJCisJZGVmIGFjdGl2YXRlKHNlbGYsIGV2ZW50ID0gTm9uZSk6CisJCWlm
IG5vdCBzZWxmLmFjdGl2ZToKKwkJCXNlbGYuYWN0aXZlID0gMQorCQkJc295YS5zZXRfcm9vdF93
aWRnZXQoc2VsZi5jYW1lcmEpCisJCQlzb3lhLmN1cnNvcl9zZXRfdmlzaWJsZSgwKQorCQkJc2Vs
Zi5hdXRvX3JlbmRlcigpCisJCQkKKwlkZWYgYXV0b19yZW5kZXIoc2VsZik6CisJCWZvciBldmVu
dCBpbiBzb3lhLmNvYWxlc2NlX21vdGlvbl9ldmVudChzb3lhLnByb2Nlc3NfZXZlbnQoKSk6IHNl
bGYub25fZXZlbnQoZXZlbnQpCisJCXNlbGYucmVuZGVyKCkKKwkJc2VsZi5jYW5jZWwgPSBzZWxm
LmRpYWxvZy5hZnRlcigxNTAsIHNlbGYuYXV0b19yZW5kZXIpCisJCQorCWRlZiBkZWFjdGl2YXRl
KHNlbGYsIGV2ZW50ID0gTm9uZSk6CisJCWlmIHNlbGYuYWN0aXZlOgorCQkJc2VsZi5hY3RpdmUg
PSAwCisJCQlzb3lhLmN1cnNvcl9zZXRfdmlzaWJsZSgxKQorCQkJc2VsZi5kaWFsb2cuYWZ0ZXJf
Y2FuY2VsKHNlbGYuY2FuY2VsKQorCQkJCisJZGVmIG9uX2NoYW5nZWQoc2VsZiwgb2JqLCB0eXBl
LCBuZXcsIG9sZCk6CisJCWlmIHR5cGUgaXMgbGlzdDoKKwkJCWZvciBpdGVtIGluIG5ldzoKKwkJ
CQlpZiBub3QgaXRlbSBpbiBvbGQ6CisJCQkJCXNlbGYuYWRkX2hhbmRsZXNfZm9yKGl0ZW0pCisJ
CQkJCWlmIGlzaW5zdGFuY2UoaXRlbSwgc295YS5GYWNlKToKKwkJCQkJCWZvciB2ZXJ0ZXggaW4g
aXRlbS52ZXJ0aWNlczoKKwkJCQkJCQlpZiBnZXRhdHRyKHZlcnRleCwgImltbWF0dXJlIiwgMCk6
CisJCQkJCQkJCXNlbGYuY3Vyc29yLm1hbmFnZV9jbGljayhGYWNlQ2xpY2tNYW5hZ2VyKHNlbGYs
IGl0ZW0pKQorCQkJCQkJCQlicmVhaworCQkJCQllbGlmIGhhc2F0dHIoaXRlbS5fX2NsYXNzX18s
ICJfX2NsaWNrbWFuYWdlcl9fIik6CisJCQkJCQlzZWxmLmN1cnNvci5tYW5hZ2VfY2xpY2soaXRl
bS5fX2NsYXNzX18uX19jbGlja21hbmFnZXJfXyhzZWxmLCBpdGVtKSkKKwkJCQkJCQorCQkJZm9y
IGl0ZW0gaW4gb2xkOgorCQkJCWlmIG5vdCBpdGVtIGluIG5ldzogc2VsZi5yZW1vdmVfaGFuZGxl
c19vZihpdGVtKQorCQkJCQorCQllbHNlOgorCQkJaWYgKG5vdCBoYXNhdHRyKG9iaiwgImNoaWxk
cmVuIikpIGFuZCAobm90IGhhc2F0dHIob2JqLCAiaXRlbXMiKSk6CisJCQkJdW5vYnNlcnZlX3Ry
ZWUob2JqLCBzZWxmLm9uX2NoYW5nZWQpCisJCQkJCitSRUQgICAgPSBzb3lhLk1hdGVyaWFsKCk7
IFJFRCAgIC5kaWZmdXNlID0gKDEuMCwgMC4wLCAwLjAsIDEuMCkKK0dSRUVOICA9IHNveWEuTWF0
ZXJpYWwoKTsgR1JFRU4gLmRpZmZ1c2UgPSAoMC4wLCAxLjAsIDAuMCwgMS4wKQorQkxVRSAgID0g
c295YS5NYXRlcmlhbCgpOyBCTFVFICAuZGlmZnVzZSA9ICgwLjAsIDAuMCwgMS4wLCAxLjApCitZ
RUxMT1cgPSBzb3lhLk1hdGVyaWFsKCk7IFlFTExPVy5kaWZmdXNlID0gKDEuMCwgMS4wLCAwLjAs
IDEuMCkKKworUkVEX0hBTkRMRSA9IEdSRUVOX0hBTkRMRSA9IEJMVUVfSEFORExFID0gWUVMTE9X
X0hBTkRMRSA9IE5vbmUKKworZGVmIGJ1aWxkX2hhbmRsZXMoKToKKwlnbG9iYWwgUkVEX0hBTkRM
RSwgR1JFRU5fSEFORExFLCBCTFVFX0hBTkRMRSwgWUVMTE9XX0hBTkRMRQorCQorCXJlZF9jdWJl
ICAgID0gY3ViZS5DdWJlKE5vbmUsIFJFRCk7ICAgIHJlZF9jdWJlICAgLnNjYWxlKFNURVAsIFNU
RVAsIFNURVApCisJZ3JlZW5fY3ViZSAgPSBjdWJlLkN1YmUoTm9uZSwgR1JFRU4pOyAgZ3JlZW5f
Y3ViZSAuc2NhbGUoU1RFUCwgU1RFUCwgU1RFUCkKKwlibHVlX2N1YmUgICA9IGN1YmUuQ3ViZShO
b25lLCBCTFVFKTsgICBibHVlX2N1YmUgIC5zY2FsZShTVEVQLCBTVEVQLCBTVEVQKQorCXllbGxv
d19jdWJlID0gY3ViZS5DdWJlKE5vbmUsIFlFTExPVyk7IHllbGxvd19jdWJlLnNjYWxlKFNURVAs
IFNURVAsIFNURVApCisJCisJUkVEX0hBTkRMRSAgICA9IHJlZF9jdWJlICAgLnRvX21vZGVsKCkK
KwlHUkVFTl9IQU5ETEUgID0gZ3JlZW5fY3ViZSAudG9fbW9kZWwoKQorCUJMVUVfSEFORExFICAg
PSBibHVlX2N1YmUgIC50b19tb2RlbCgpCisJWUVMTE9XX0hBTkRMRSA9IHllbGxvd19jdWJlLnRv
X21vZGVsKCkKKwkKK2J1aWxkX2hhbmRsZXMoKQorCitjbGFzcyBDdXJzb3IoY3Vyc29yLkN1cnNv
cik6CisJZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCA9IE5vbmUsIGNhbWVyYSA9IE5vbmUsIGhh
bmRsZXMgPSBOb25lLCBsaWdodCA9IE5vbmUpOgorCQljdXJzb3IuQ3Vyc29yLl9faW5pdF9fKHNl
bGYsIHBhcmVudCwgY2FtZXJhLCBHUkVFTl9IQU5ETEUpCisJCQorCQlzZWxmLmhhbmRsZXMgICAg
ICAgID0gaGFuZGxlcworCQlzZWxmLmRyYWdpbmcgICAgICAgID0gMAorCQlzZWxmLmxpZ2h0ICAg
ICAgICAgID0gbGlnaHQKKwkJc2VsZi5jbGlja19tYW5hZ2VycyA9IFtdCisJCQorCWRlZiBtYW5h
Z2VfY2xpY2soc2VsZiwgY2xpY2tfbWFuYWdlcik6CisJCXNlbGYuY2xpY2tfbWFuYWdlcnMuYXBw
ZW5kKGNsaWNrX21hbmFnZXIpCisJCQorCWRlZiBtb3ZlKHNlbGYsIHBvcyk6IHNlbGYuYWRkX3Zl
Y3RvcihzZWxmID4+IHBvcykKKwkJCisJZGVmIGFkZF92ZWN0b3Ioc2VsZiwgZGVwKToKKwkJY3Vy
c29yLkN1cnNvci5hZGRfdmVjdG9yKHNlbGYsIGRlcCkKKwkJZm9yIGhhbmRsZSBpbiBzZWxmLmhh
bmRsZXM6IGhhbmRsZS5jdXJzb3JfbW92ZWQoc2VsZiwgc2VsZi5pc19uZWFyLCBkZXApCisJCXNl
bGYubGlnaHQubW92ZShzZWxmKQorCQkKKwkJaWYgc2VsZi5jbGlja19tYW5hZ2VyczoKKwkJCWlm
IG5vdCBzZWxmLmNsaWNrX21hbmFnZXJzWy0xXS5vbl9tb3Rpb24oc2VsZik6IGRlbCBzZWxmLmNs
aWNrX21hbmFnZXJzWy0xXQorCQkJCisJX19pYWRkX18gPSBhZGRfdmVjdG9yCisJCisJZGVmIGlz
X25lYXIoc2VsZiwgcG9zaXRpb24pOiByZXR1cm4gcG9zaXRpb24uZGlzdGFuY2VfdG8oc2VsZikg
PCBTVEVQCisJZGVmIG5lYXIoc2VsZiwgYSwgYik6IHJldHVybiAoKHNlbGYuZGlzdGFuY2VfdG8o
YSkgPCBzZWxmLmRpc3RhbmNlX3RvKGIpKSBhbmQgYSkgb3IgYgorCQorCWRlZiBidXR0b25fcHJl
c3NlZChzZWxmLCBidXR0b24sIG11bHRpc2VsZWN0ID0gMCk6CisJCWlmICAgYnV0dG9uID09IDE6
CisJCQlwcmVkID0gc2VsZi5pc19uZWFyCisJCQlwcmludCAiJXMsICVzLCAlcyIgJSAoc2VsZi54
LCBzZWxmLnksIHNlbGYueikKKwkJZWxzZTogICAgICAgICAgICAgcHJlZCA9IHNlbGYuaXNfdW5k
ZXJfdGVzdGVyKFNURVApCisJCQorCQlpZiBzZWxmLmNsaWNrX21hbmFnZXJzOgorCQkJaWYgbm90
IHNlbGYuY2xpY2tfbWFuYWdlcnNbLTFdLm9uX2NsaWNrKHNlbGYpOiBkZWwgc2VsZi5jbGlja19t
YW5hZ2Vyc1stMV0KKwkJZWxzZToKKwkJCWhhbmRsZXMgPSBmaWx0ZXIocHJlZCwgc2VsZi5oYW5k
bGVzKQorCQkJaWYgaGFuZGxlczoKKwkJCQloYW5kbGUgPSBtaW4obWFwKGxhbWJkYSBoYW5kbGU6
IChzZWxmLmRpc3RhbmNlX3RvKGhhbmRsZSksIGhhbmRsZSksIGhhbmRsZXMpKVsxXQorCQkJCSMg
bW92ZSB0aGUgY3Vyc29yIGF0IHRoZSBoYW5kbGUncyBaIChpbiB0aGUgY2FtZXJhIGNvb3JkaW5h
dGUgc3lzdGVtKQorCQkJCW1vdXNlID0gc2VsZiAlIHNlbGYuY2FtZXJhCisJCQkJc2VsZi5tb3Vz
ZV9yb2xsZWQoKGhhbmRsZSAlIHNlbGYuY2FtZXJhKS56IC0gbW91c2UueikKKwkJCQloYW5kbGUu
c2VsZWN0KCkKKwkJCQkKKwkJCQlpZiBub3QgbXVsdGlzZWxlY3Q6CisJCQkJCWZvciBoIGluIHNl
bGYuaGFuZGxlczoKKwkJCQkJCWlmIG5vdCBoIGlzIGhhbmRsZTogaC5oaWdobGlnaHQoMCkKKwkJ
CWVsc2U6CisJCQkJZm9yIGggaW4gc2VsZi5oYW5kbGVzOiBoLmhpZ2hsaWdodCgwKQorCQkJCQor
CQkJc2VsZi5kcmFnaW5nID0gMQorCQkJCQorCWRlZiBidXR0b25fcmVsZWFzZWQoc2VsZiwgYnV0
dG9uKToKKwkJZm9yIGhhbmRsZSBpbiBzZWxmLnNlbGVjdGVkX2hhbmRsZXMoKToKKwkJCWhhbmRs
ZS5jdXJzb3JfZW5kbW92ZShzZWxmKQorCQkJCisJCWlmIHNlbGYuY2xpY2tfbWFuYWdlcnM6CisJ
CQlpZiBub3Qgc2VsZi5jbGlja19tYW5hZ2Vyc1stMV0ub25fcmVsZWFzZShzZWxmKTogZGVsIHNl
bGYuY2xpY2tfbWFuYWdlcnNbLTFdCisJCWVsc2U6IHNlbGYuZHJhZ2luZyA9IDAKKwkJCisJZGVm
IHNlbGVjdGVkX2hhbmRsZXMgICAgICAgIChzZWxmKTogcmV0dXJuIGZpbHRlcihsYW1iZGEgaGFu
ZGxlOiBoYW5kbGUuc2VsZWN0ZWQgICAsIHNlbGYuaGFuZGxlcykKKwlkZWYgaGlnaGxpZ2h0ZWRf
aGFuZGxlcyAgICAgKHNlbGYpOiByZXR1cm4gZmlsdGVyKGxhbWJkYSBoYW5kbGU6IGhhbmRsZS5o
aWdobGlnaHRlZCwgc2VsZi5oYW5kbGVzKQorCWRlZiBoaWdobGlnaHRlZF9vbmx5X2hhbmRsZXMo
c2VsZik6IHJldHVybiBmaWx0ZXIobGFtYmRhIGhhbmRsZTogaGFuZGxlLmhpZ2hsaWdodGVkIGFu
ZCBub3QgaGFuZGxlLnNlbGVjdGVkLCBzZWxmLmhhbmRsZXMpCisJZGVmIG5lYXJlc3Rfc2VsZWN0
ZWRfaGFuZGxlKHNlbGYpOgorCQlzZWxlY3RlZF9oYW5kbGVzID0gc2VsZi5zZWxlY3RlZF9oYW5k
bGVzKCkKKwkJcmV0dXJuIHNlbGVjdGVkX2hhbmRsZXMgYW5kIG1pbihtYXAobGFtYmRhIGhhbmRs
ZTogKHNlbGYuZGlzdGFuY2VfdG8oaGFuZGxlKSwgaGFuZGxlKSwgc2VsZWN0ZWRfaGFuZGxlcykp
WzFdCisJZGVmIG92ZXJfaGFuZGxlKHNlbGYpOgorCQloYW5kbGVzID0gc2VsZi5oaWdobGlnaHRl
ZF9vbmx5X2hhbmRsZXMoKQorCQlyZXR1cm4gaGFuZGxlcyBhbmQgbWluKG1hcChsYW1iZGEgaGFu
ZGxlOiAoc2VsZi5kaXN0YW5jZV90byhoYW5kbGUpLCBoYW5kbGUpLCBoYW5kbGVzKSlbMV0KKwkJ
CitjbGFzcyBDbGlja01hbmFnZXI6CisJZGVmIG9uX21vdGlvbihzZWxmLCBjdXJzb3IpOgorCQki
IiJDYWxsZWQgd2hlbiB0aGUgY3Vyc29yIGlzIG1vdmVkLiBNdXN0IHJldHVybnMgdHJ1ZSBpZiB0
aGlzIG1hbmFnZXIgaXMgc3RpbGwgdXNlZnVsbCwgb3IgZmFsc2UgaWYgdGhpcyBtYW5hZ2VyJ3Mg
dGFzayBpcyBhY2hpZXZlZC4iIiIKKwkJcmV0dXJuIDEKKwlkZWYgb25fY2xpY2soc2VsZiwgY3Vy
c29yKToKKwkJIiIiQ2FsbGVkIHdoZW4gdGhlIGN1cnNvciBpcyBjbGlja2VkLiBNdXN0IHJldHVy
bnMgdHJ1ZSBpZiB0aGlzIG1hbmFnZXIgaXMgc3RpbGwgdXNlZnVsbCwgb3IgZmFsc2UgaWYgdGhp
cyBtYW5hZ2VyJ3MgdGFzayBpcyBhY2hpZXZlZC4iIiIKKwkJcmV0dXJuIDEKKwlkZWYgb25fcmVs
ZWFzZShzZWxmLCBjdXJzb3IpOgorCQkiIiJDYWxsZWQgd2hlbiB0aGUgY3Vyc29yIGlzIHJlbGVh
c2VkLiBNdXN0IHJldHVybnMgdHJ1ZSBpZiB0aGlzIG1hbmFnZXIgaXMgc3RpbGwgdXNlZnVsbCwg
b3IgZmFsc2UgaWYgdGhpcyBtYW5hZ2VyJ3MgdGFzayBpcyBhY2hpZXZlZC4iIiIKKwkJcmV0dXJu
IDEKKwkKK2NsYXNzIEZhY2VDbGlja01hbmFnZXIoQ2xpY2tNYW5hZ2VyKToKKwlkZWYgX19pbml0
X18oc2VsZiwgZWRpdG9yLCBmYWNlKToKKwkJc2VsZi5lZGl0b3IgPSBlZGl0b3IKKwkJc2VsZi5m
YWNlICAgPSBmYWNlCisJCQorCWRlZiBvbl9tb3Rpb24oc2VsZiwgY3Vyc29yKToKKwkJaSA9IDAK
KwkJd2hpbGUgbm90IGdldGF0dHIoc2VsZi5mYWNlLnZlcnRpY2VzW2ldLCAiaW1tYXR1cmUiLCAw
KTogaSA9IGkgKyAxCisJCQorCQl3aGlsZSBpIDwgbGVuKHNlbGYuZmFjZS52ZXJ0aWNlcyk6CisJ
CQlzZWxmLmZhY2UudmVydGljZXNbaV0ucGFyZW50ID0gc2VsZi5mYWNlLnBhcmVudAorCQkJc2Vs
Zi5mYWNlLnZlcnRpY2VzW2ldLm1vdmUoY3Vyc29yKQorCQkJaSA9IGkgKyAxCisJCQkKKwkJcmV0
dXJuIDEKKwkKKwlkZWYgb25fY2xpY2soc2VsZiwgY3Vyc29yKToKKwkJaSA9IDAKKwkJd2hpbGUg
bm90IGdldGF0dHIoc2VsZi5mYWNlLnZlcnRpY2VzW2ldLCAiaW1tYXR1cmUiLCAwKTogaSA9IGkg
KyAxCisJCQorCQl2ZXJ0ZXggPSBzZWxmLmZhY2UudmVydGljZXNbaV0KKwkJZGVsIHZlcnRleC5p
bW1hdHVyZQorCQkKKwkJaGFuZGxlID0gY3Vyc29yLm92ZXJfaGFuZGxlKCkKKwkJaWYgaGFuZGxl
OgorCQkJaWYgaXNpbnN0YW5jZShoYW5kbGUsIFZlcnRleEhhbmRsZSk6CisJCQkJaGFuZGxlLmFk
ZF92ZXJ0ZXgoc2VsZi5mYWNlLnZlcnRpY2VzW2ldKQorCQkJZWxzZToKKwkJCQlzZWxmLmZhY2Uu
dmVydGljZXNbaV0ucGFyZW50ID0gc2VsZi5mYWNlLnBhcmVudAorCQkJCXNlbGYuZmFjZS52ZXJ0
aWNlc1tpXS5tb3ZlKGhhbmRsZSkKKwkJCQkKKwkJCQlzZWxmLmVkaXRvci5hZGRfaGFuZGxlc19m
b3JfdmVydGV4KHZlcnRleCkKKwkJZWxzZToKKwkJCXNlbGYuZmFjZS52ZXJ0aWNlc1tpXS5wYXJl
bnQgPSBzZWxmLmZhY2UucGFyZW50CisJCQlzZWxmLmZhY2UudmVydGljZXNbaV0ubW92ZShjdXJz
b3IpCisJCQkKKwkJCXNlbGYuZWRpdG9yLmFkZF9oYW5kbGVzX2Zvcl92ZXJ0ZXgodmVydGV4KQor
CQkJCisJCXJldHVybiBpIDwgbGVuKHNlbGYuZmFjZS52ZXJ0aWNlcykgLSAxCisJCitjbGFzcyBN
b3ZlQ2xpY2tNYW5hZ2VyKENsaWNrTWFuYWdlcik6CisJZGVmIF9faW5pdF9fKHNlbGYsIGVkaXRv
ciwgaXRlbSk6CisJCXNlbGYuZWRpdG9yID0gZWRpdG9yCisJCXNlbGYuaXRlbSAgID0gaXRlbQor
CQkKKwlkZWYgb25fbW90aW9uKHNlbGYsIGN1cnNvcik6CisJCXNlbGYuaXRlbS5tb3ZlKGN1cnNv
cikKKwkJcmV0dXJuIDEKKwkKKwlkZWYgb25fY2xpY2soc2VsZiwgY3Vyc29yKToKKwkJaGFuZGxl
ID0gY3Vyc29yLm92ZXJfaGFuZGxlKCkKKwkJaWYgaGFuZGxlOgorCQkJc2VsZi5pdGVtLm1vdmUo
aGFuZGxlKQorCQllbHNlOgorCQkJc2VsZi5pdGVtLm1vdmUoY3Vyc29yKQorCQkJCisJCXJldHVy
biAwCisKKyMgTGlzdCBvZiAzRCBpdGVtcycgY2xhc3NlcyB0aGF0IGFyZSBwb3NpdGlvbm5lZCBh
dCB0aGUgbmV4dCBtb3VzZSBjbGljaydzIHBvc2l0aW9uLgorCitjbGFzcyBIYW5kbGUoc295YS5C
b2R5KToKKwlkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCBlZGl0b3IgPSBOb25lKToKKwkJc295
YS5Cb2R5Ll9faW5pdF9fKHNlbGYsIHBhcmVudCwgc2VsZi5OQVRVUkFMKQorCQlzZWxmLmVkaXRv
ciAgICAgID0gZWRpdG9yCisJCXNlbGYuc2VsZWN0ZWQgICAgPSAwCisJCXNlbGYuaGlnaGxpZ2h0
ZWQgPSAwCisJCXNlbGYuaWRlYWwgICAgICAgPSBzb3lhLlBvaW50KHBhcmVudCkKKwkJCisJZGVm
IGRlbF9mb3Ioc2VsZiwgaXRlbSk6CisJCWlmIHNlbGYuaXNfZm9yKGl0ZW0pOgorCQkJc2VsZi5w
YXJlbnQucmVtb3ZlKHNlbGYpCisJCQlzZWxmLmVkaXRvci5oYW5kbGVzLnJlbW92ZShzZWxmKQor
CQkJcmV0dXJuIDEKKwkJCisJZGVmIGhpZ2hsaWdodChzZWxmLCB2YWx1ZSA9IDEpOgorCQlzZWxm
LmhpZ2hsaWdodGVkID0gdmFsdWUKKwkJaWYgdmFsdWU6CisJCQlzZWxmLnNldF9tb2RlbChHUkVF
Tl9IQU5ETEUpCisJCWVsc2U6CisJCQlpZiBzZWxmLnNlbGVjdGVkOiBzZWxmLnNlbGVjdCgwKQor
CQkJc2VsZi5zZXRfbW9kZWwoc2VsZi5OQVRVUkFMKQorCQkJCisJZGVmIHNlbGVjdChzZWxmLCB2
YWx1ZSA9IDEpOgorCQlzZWxmLnNlbGVjdGVkID0gdmFsdWUKKwkJaWYgdmFsdWU6CisJCQlpZiBu
b3Qgc2VsZi5oaWdobGlnaHRlZDogc2VsZi5oaWdobGlnaHQoMSkKKwkJCQorCWRlZiBjdXJzb3Jf
bW92ZWQoc2VsZiwgY3Vyc29yLCBwcmVkLCBkZXApOgorCQlpZiBzZWxmLnNlbGVjdGVkOgorCQkJ
aWYgY3Vyc29yLmRyYWdpbmc6CisJCQkJc2VsZi5pZGVhbCArPSBkZXAKKwkJCQlpZiBjdXJzb3Iu
Z3JpZF9zdGVwOgorCQkJCQlwb3MgICA9IHNlbGYuaWRlYWwuY29weSgpCisJCQkJCXN0ZXAgID0g
Y3Vyc29yLmdyaWRfc3RlcAorCQkJCQlkICAgICA9IHN0ZXAgLyAyLjAKKwkJCQkJcG9zLnggPSAo
KHBvcy54ICsgZCkgLy8gc3RlcCkgKiBzdGVwCisJCQkJCXBvcy55ID0gKChwb3MueSArIGQpIC8v
IHN0ZXApICogc3RlcAorCQkJCQlwb3MueiA9ICgocG9zLnogKyBkKSAvLyBzdGVwKSAqIHN0ZXAK
KwkJCQkJc2VsZi5tb3ZlKHBvcykKKwkJCQllbHNlOiBzZWxmLm1vdmUoc2VsZi5pZGVhbCkKKwkJ
ZWxzZToKKwkJCWlmIHNlbGYuaGlnaGxpZ2h0ZWQ6CisJCQkJaWYgbm90IHByZWQoc2VsZik6IHNl
bGYuaGlnaGxpZ2h0KDApCisJCQllbGlmIHByZWQoc2VsZik6IHNlbGYuaGlnaGxpZ2h0KCkKKwkJ
CQorCWRlZiBjdXJzb3JfZW5kbW92ZShzZWxmLCBjdXJzb3IpOiBwYXNzCisJCisKK2NsYXNzIFBv
c2l0aW9uSGFuZGxlKEhhbmRsZSk6CisJTkFUVVJBTCA9IEJMVUVfSEFORExFCisJZGVmIF9faW5p
dF9fKHNlbGYsIHBhcmVudCwgZWRpdG9yLCBwb3NpdGlvbik6CisJCUhhbmRsZS5fX2luaXRfXyhz
ZWxmLCBwYXJlbnQsIGVkaXRvcikKKwkJCisJCXNlbGYucG9zaXRpb24gPSBwb3NpdGlvbgorCQlz
ZWxmLmlkZWFsLm1vdmUocG9zaXRpb24pCisJCUhhbmRsZS5tb3ZlKHNlbGYsIHBvc2l0aW9uKQor
CQkKKwkJb2JzZXJ2ZShwb3NpdGlvbiwgc2VsZi5vbl9jaGFuZ2VkKQorCQl3b3JsZCA9IHBvc2l0
aW9uLnBhcmVudAorCQl3aGlsZSB3b3JsZDoKKwkJCW9ic2VydmUod29ybGQsIHNlbGYub25fcGFy
ZW50X2NoYW5nZWQpCisJCQl3b3JsZCA9IHdvcmxkLnBhcmVudAorCQkJCisJZGVmIGlzX2ZvciAo
c2VsZiwgaXRlbSk6IHJldHVybiBpdGVtIGlzIHNlbGYucG9zaXRpb24KKwkKKwlkZWYgbW92ZShz
ZWxmLCBwb3NpdGlvbik6CisJCUhhbmRsZS5tb3ZlKHNlbGYsIHBvc2l0aW9uKQorCQlzZWxmLnBv
c2l0aW9uLm1vdmUocG9zaXRpb24pCisJCQorCWRlZiBhZGRfdmVjdG9yKHNlbGYsIHZlY3Rvcik6
CisJCUhhbmRsZS5hZGRfdmVjdG9yKHNlbGYsIHZlY3RvcikKKwkJc2VsZi5wb3NpdGlvbi5hZGRf
dmVjdG9yKHZlY3RvcikKKwlfX2lhZGRfXyA9IGFkZF92ZWN0b3IKKwkKKwlkZWYgb25fY2hhbmdl
ZChzZWxmLCBvYmosIHR5cGUsIG5ldywgb2xkKToKKwkJaWYgdHlwZSBpcyBvYmplY3Q6CisJCQlp
ZiAobmV3WyJ4Il0gIT0gb2xkWyJ4Il0pIG9yIChuZXdbInkiXSAhPSBvbGRbInkiXSkgb3IgKG5l
d1sieiJdICE9IG9sZFsieiJdKToKKwkJCQlIYW5kbGUubW92ZShzZWxmLCBvYmopCisJCQkJc2Vs
Zi5pZGVhbC5tb3ZlKG9iaikKKwkJCWlmIG5ld1sicGFyZW50Il0gIT0gb2xkWyJwYXJlbnQiXToK
KwkJCQlzZWxmLnVwZGF0ZV9oaWVyYXJjaHkobmV3WyJwYXJlbnQiXSwgb2xkWyJwYXJlbnQiXSkK
KwkJCQlIYW5kbGUubW92ZShzZWxmLCBzZWxmLnBvc2l0aW9uKQorCQkJCXNlbGYuaWRlYWwubW92
ZShvYmopCisJCQkJCisJZGVmIG9uX3BhcmVudF9jaGFuZ2VkKHNlbGYsIG9iaiwgdHlwZSwgbmV3
LCBvbGQpOgorCQlpZiB0eXBlIGlzIG9iamVjdDoKKwkJCWlmIChuZXdbIngiXSAhPSBvbGRbIngi
XSkgb3IgKG5ld1sieSJdICE9IG9sZFsieSJdKSBvciAobmV3WyJ6Il0gIT0gb2xkWyJ6Il0pOgor
CQkJCUhhbmRsZS5tb3ZlKHNlbGYsIHNlbGYucG9zaXRpb24pCisJCQkJc2VsZi5pZGVhbC5tb3Zl
KHNlbGYucG9zaXRpb24pCisJCQlpZiBuZXdbInBhcmVudCJdICE9IG9sZFsicGFyZW50Il06CisJ
CQkJc2VsZi51cGRhdGVfaGllcmFyY2h5KG5ld1sicGFyZW50Il0sIG9sZFsicGFyZW50Il0pCisJ
CQkJSGFuZGxlLm1vdmUoc2VsZiwgc2VsZi5wb3NpdGlvbikKKwkJCQlzZWxmLmlkZWFsLm1vdmUo
c2VsZi5wb3NpdGlvbikKKwkJCQkKKwlkZWYgdXBkYXRlX2hpZXJhcmNoeShzZWxmLCBuZXdwYXJl
bnQsIG9sZHBhcmVudCk6CisJCXdvcmxkID0gb2xkcGFyZW50CisJCXdoaWxlIHdvcmxkOgorCQkJ
dW5vYnNlcnZlKHdvcmxkLCBzZWxmLm9uX3BhcmVudF9jaGFuZ2VkKQorCQkJd29ybGQgPSB3b3Js
ZC5wYXJlbnQKKwkJCQorCQl3b3JsZCA9IG5ld3BhcmVudAorCQl3aGlsZSB3b3JsZDoKKwkJCW9i
c2VydmUod29ybGQsIHNlbGYub25fcGFyZW50X2NoYW5nZWQpCisJCQl3b3JsZCA9IHdvcmxkLnBh
cmVudAorCQkJCisJZGVmIF9fcmVwcl9fKHNlbGYpOiByZXR1cm4gIjxQb3NpdGlvbkhhbmRsZSBm
b3IgJXM+IiAlIChzZWxmLnBvc2l0aW9uLCkKKwkKK2NsYXNzIFZlcnRleEhhbmRsZShIYW5kbGUp
OgorCU5BVFVSQUwgPSBSRURfSEFORExFCisJZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgZWRp
dG9yLCB2ZXJ0ZXgpOgorCQlIYW5kbGUuX19pbml0X18oc2VsZiwgcGFyZW50LCBlZGl0b3IpCisJ
CXNlbGYudmVydGljZXMgPSBbdmVydGV4XQorCQlIYW5kbGUubW92ZShzZWxmLCB2ZXJ0ZXgpCisJ
CXNlbGYuaWRlYWwubW92ZSh2ZXJ0ZXgpCisJCQorCQlvYnNlcnZlKHZlcnRleCwgc2VsZi5vbl9j
aGFuZ2VkKQorCQl3b3JsZCA9IHZlcnRleC5wYXJlbnQKKwkJd2hpbGUgd29ybGQ6CisJCQlvYnNl
cnZlKHdvcmxkLCBzZWxmLm9uX3BhcmVudF9jaGFuZ2VkKQorCQkJd29ybGQgPSB3b3JsZC5wYXJl
bnQKKwkJCQorCWRlZiBpc19mb3Ioc2VsZiwgaXRlbSk6CisJCWZvciB2ZXJ0ZXggaW4gc2VsZi52
ZXJ0aWNlczoKKwkJCWlmIHZlcnRleCBpcyBpdGVtOiByZXR1cm4gMQorCQlyZXR1cm4gMAorCQor
CWRlZiBkZWxfZm9yKHNlbGYsIGl0ZW0pOgorCQlmb3IgdmVydGV4IGluIHNlbGYudmVydGljZXM6
CisJCQlpZiB2ZXJ0ZXggaXMgaXRlbToKKwkJCQlzZWxmLnZlcnRpY2VzLnJlbW92ZSh2ZXJ0ZXgp
CisJCQkJdW5vYnNlcnZlKHZlcnRleCwgc2VsZi5vbl9jaGFuZ2VkKQorCQkJCWlmIG5vdCBzZWxm
LnZlcnRpY2VzOgorCQkJCQlzZWxmLnBhcmVudC5yZW1vdmUoc2VsZikKKwkJCQkJc2VsZi5lZGl0
b3IuaGFuZGxlcy5yZW1vdmUoc2VsZikKKwkJCQkJc2VsZi5lZGl0b3IudmVydGV4X2hhbmRsZXMu
cmVtb3ZlKHNlbGYpCisJCQkJCQorCWRlZiBkZWxfZm9yX2FsbChzZWxmKToKKwkJZm9yIHZlcnRl
eCBpbiBzZWxmLnZlcnRpY2VzOgorCQkJdW5vYnNlcnZlKHZlcnRleCwgc2VsZi5vbl9jaGFuZ2Vk
KQorCQkJCisJCXNlbGYucGFyZW50LnJlbW92ZShzZWxmKQorCQlzZWxmLmVkaXRvci5oYW5kbGVz
LnJlbW92ZShzZWxmKQorCQkKKwlkZWYgbW92ZShzZWxmLCBwb3NpdGlvbik6CisJCUhhbmRsZS5t
b3ZlKHNlbGYsIHBvc2l0aW9uKQorCQlmb3IgdmVydGV4IGluIHNlbGYudmVydGljZXM6IHZlcnRl
eC5tb3ZlKHBvc2l0aW9uKQorCQkKKwlkZWYgYWRkX3ZlY3RvcihzZWxmLCB2ZWN0b3IpOgorCQlI
YW5kbGUuYWRkX3ZlY3RvcihzZWxmLCB2ZWN0b3IpCisJCWZvciB2ZXJ0ZXggaW4gc2VsZi52ZXJ0
aWNlczoKKwkJCXZlcnRleC5hZGRfdmVjdG9yKHZlY3RvcikKKwlfX2lhZGRfXyA9IGFkZF92ZWN0
b3IKKwkKKwlkZWYgb25fY2hhbmdlZChzZWxmLCBvYmosIHR5cGUsIG5ldywgb2xkKToKKwkJaWYg
dHlwZSBpcyBvYmplY3Q6CisJCQlpZiAobmV3WyJ4Il0gIT0gb2xkWyJ4Il0pIG9yIChuZXdbInki
XSAhPSBvbGRbInkiXSkgb3IgKG5ld1sieiJdICE9IG9sZFsieiJdKToKKwkJCQlpZiBsZW4oc2Vs
Zi52ZXJ0aWNlcykgPT0gMToKKwkJCQkJSGFuZGxlLm1vdmUoc2VsZiwgb2JqKQorCQkJCQlzZWxm
LmlkZWFsLm1vdmUob2JqKQorCQkJCWVsc2U6CisJCQkJCXNlbGYuZ2l2ZV91cF92ZXJ0ZXgob2Jq
KQorCQkJCQkKKwkJCWlmIG5ld1sicGFyZW50Il0gIT0gb2xkWyJwYXJlbnQiXTogc2VsZi5naXZl
X3VwX3ZlcnRleChvYmopCisJCQkKKwlkZWYgb25fcGFyZW50X2NoYW5nZWQoc2VsZiwgb2JqLCB0
eXBlLCBvbGQsIG5ldyk6CisJCWlmIHR5cGUgaXMgb2JqZWN0OgorCQkJaWYgKG5ld1sieCJdICE9
IG9sZFsieCJdKSBvciAobmV3WyJ5Il0gIT0gb2xkWyJ5Il0pIG9yIChuZXdbInoiXSAhPSBvbGRb
InoiXSk6CisJCQkJSGFuZGxlLm1vdmUoc2VsZiwgc2VsZi52ZXJ0aWNlc1swXSkKKwkJCQlzZWxm
LmlkZWFsLm1vdmUoc2VsZi52ZXJ0aWNlc1swXSkKKwkJCWVsaWYgbmV3WyJwYXJlbnQiXSAhPSBv
bGRbInBhcmVudCJdOgorCQkJCXNlbGYudXBkYXRlX2hpZXJhcmNoeShuZXdbInBhcmVudCJdLCBv
bGRbInBhcmVudCJdKQorCQkJCUhhbmRsZS5tb3ZlKHNlbGYsIHNlbGYudmVydGljZXNbMF0pCisJ
CQkJc2VsZi5pZGVhbC5tb3ZlKHNlbGYudmVydGljZXNbMF0pCisJCQkKKwlkZWYgdXBkYXRlX2hp
ZXJhcmNoeShzZWxmLCBuZXdwYXJlbnQsIG9sZHBhcmVudCk6CisJCXdvcmxkID0gb2xkcGFyZW50
CisJCXdoaWxlIHdvcmxkOgorCQkJdW5vYnNlcnZlKHdvcmxkLCBzZWxmLm9uX3BhcmVudF9jaGFu
Z2VkKQorCQkJd29ybGQgPSB3b3JsZC5wYXJlbnQKKwkJCQorCQl3b3JsZCA9IG5ld3BhcmVudAor
CQl3aGlsZSB3b3JsZDoKKwkJCW9ic2VydmUod29ybGQsIHNlbGYub25fcGFyZW50X2NoYW5nZWQp
CisJCQl3b3JsZCA9IHdvcmxkLnBhcmVudAorCQkJCisJZGVmIGFkZF92ZXJ0ZXgoc2VsZiwgdmVy
dGV4KToKKwkJdmVydGV4LnBhcmVudCA9IHNlbGYudmVydGljZXNbMF0ucGFyZW50CisJCXZlcnRl
eC5tb3ZlKHNlbGYpCisJCXNlbGYudmVydGljZXMuYXBwZW5kKHZlcnRleCkKKwkJb2JzZXJ2ZSh2
ZXJ0ZXgsIHNlbGYub25fY2hhbmdlZCkKKwkJCisJZGVmIGdpdmVfdXBfdmVydGV4KHNlbGYsIHZl
cnRleCk6CisJCXNlbGYuZGVsX2Zvcih2ZXJ0ZXgpCisJCXNlbGYuZWRpdG9yLmFkZF9oYW5kbGVz
X2Zvcl92ZXJ0ZXgodmVydGV4KQorCQkKKwlkZWYgY3Vyc29yX2VuZG1vdmUoc2VsZiwgY3Vyc29y
KToKKwkJaGFuZGxlID0gY3Vyc29yLm92ZXJfaGFuZGxlKCkKKwkJaWYgaGFuZGxlOgorCQkJaWYg
aXNpbnN0YW5jZShoYW5kbGUsIFZlcnRleEhhbmRsZSk6CisJCQkJc2VsZi5kZWxfZm9yX2FsbCgp
CisJCQkJZm9yIHZlcnRleCBpbiBzZWxmLnZlcnRpY2VzOiBoYW5kbGUuYWRkX3ZlcnRleCh2ZXJ0
ZXgpCisJCQllbHNlOgorCQkJCXNlbGYubW92ZShoYW5kbGUpCisJCQkJCisJZGVmIF9fcmVwcl9f
KHNlbGYpOiByZXR1cm4gIjxWZXJ0ZXhIYW5kbGUgZm9yICVzPiIgJSAoc2VsZi52ZXJ0aWNlcywp
CisKK2NsYXNzIE9yaWVudGF0aW9uSGFuZGxlKEhhbmRsZSk6CisJTkFUVVJBTCA9IFlFTExPV19I
QU5ETEUKKwlkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCBlZGl0b3IsIG9yaWVudGF0aW9uKToK
KwkJSGFuZGxlLl9faW5pdF9fKHNlbGYsIHBhcmVudCwgZWRpdG9yKQorCQkKKwkJc2VsZi5vcmll
bnRhdGlvbiA9IG9yaWVudGF0aW9uCisJCXNlbGYucGxhY2UoKQorCQlzZWxmLmlkZWFsLm1vdmUo
c295YS5Qb2ludChvcmllbnRhdGlvbiwgMC4wLCAwLjAsIC0xLjApKQorCQkKKwkJb2JzZXJ2ZShv
cmllbnRhdGlvbiwgc2VsZi5vbl9jaGFuZ2VkKQorCQl3b3JsZCA9IG9yaWVudGF0aW9uLnBhcmVu
dAorCQl3aGlsZSB3b3JsZDoKKwkJCW9ic2VydmUod29ybGQsIHNlbGYub25fcGFyZW50X2NoYW5n
ZWQpCisJCQl3b3JsZCA9IHdvcmxkLnBhcmVudAorCQkJCisJZGVmIGlzX2ZvciAoc2VsZiwgaXRl
bSk6IHJldHVybiBpdGVtIGlzIHNlbGYub3JpZW50YXRpb24KKwkKKwlkZWYgcGxhY2Uoc2VsZik6
IEhhbmRsZS5tb3ZlKHNlbGYsIHNveWEuUG9pbnQoc2VsZi5vcmllbnRhdGlvbiwgMC4wLCAwLjAs
IC0xLjApKQorCQkKKwlkZWYgbW92ZShzZWxmLCBwb3NpdGlvbik6CisJCWlmIHNveWEuZ2V0X21v
ZCgpICYgc295YS5zZGxjb25zdC5NT0RfU0hJRlQ6CisJCQlwb3NpdGlvbiA9IHNveWEuUG9pbnQo
cG9zaXRpb24ucGFyZW50LCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KQorCQkJ
cG9zaXRpb24uY29udmVydF90byhzZWxmLm9yaWVudGF0aW9uLnBhcmVudCkKKwkJCXBvc2l0aW9u
LnkgPSBzZWxmLm9yaWVudGF0aW9uLnkKKwkJc2VsZi5vcmllbnRhdGlvbi5sb29rX2F0KHBvc2l0
aW9uKQorCQlzZWxmLnBsYWNlKCkKKwkJCisJZGVmIGFkZF92ZWN0b3Ioc2VsZiwgdmVjdG9yKToK
KwkJc2VsZi5tb3ZlKHNlbGYucG9zaXRpb24oKSArIHZlY3RvcikKKwlfX2lhZGRfXyA9IGFkZF92
ZWN0b3IKKwkKKwlkZWYgb25fY2hhbmdlZChzZWxmLCBvYmosIHR5cGUsIG5ldywgb2xkKToKKwkJ
aWYgdHlwZSBpcyBvYmplY3Q6CisJCQlpZiAobmV3WyJ4Il0gIT0gb2xkWyJ4Il0pIG9yIChuZXdb
InkiXSAhPSBvbGRbInkiXSkgb3IgKG5ld1sieiJdICE9IG9sZFsieiJdKToKKwkJCQlzZWxmLnBs
YWNlKCkKKwkJCQlzZWxmLmlkZWFsLm1vdmUoc2VsZikKKwkJCWlmIG5ld1sicGFyZW50Il0gIT0g
b2xkWyJwYXJlbnQiXToKKwkJCQlzZWxmLnVwZGF0ZV9oaWVyYXJjaHkobmV3WyJwYXJlbnQiXSwg
b2xkWyJwYXJlbnQiXSkKKwkJCQlzZWxmLmlkZWFsLm1vdmUoc2VsZikKKwkJCQlzZWxmLnBsYWNl
KCkKKwkJCQorCWRlZiBvbl9wYXJlbnRfY2hhbmdlZChzZWxmLCBvYmosIHR5cGUsIG5ldywgb2xk
KToKKwkJaWYgdHlwZSBpcyBvYmplY3Q6CisJCQlpZiAobmV3WyJ4Il0gIT0gb2xkWyJ4Il0pIG9y
IChuZXdbInkiXSAhPSBvbGRbInkiXSkgb3IgKG5ld1sieiJdICE9IG9sZFsieiJdKToKKwkJCQlz
ZWxmLnBsYWNlKCkKKwkJCQlzZWxmLmlkZWFsLm1vdmUoc2VsZikKKwkJCWlmIG5ld1sicGFyZW50
Il0gIT0gb2xkWyJwYXJlbnQiXToKKwkJCQlzZWxmLnVwZGF0ZV9oaWVyYXJjaHkobmV3WyJwYXJl
bnQiXSwgb2xkWyJwYXJlbnQiXSkKKwkJCQlzZWxmLnBsYWNlKCkKKwkJCQlzZWxmLmlkZWFsLm1v
dmUoc2VsZikKKwkJCQkKKwlkZWYgdXBkYXRlX2hpZXJhcmNoeShzZWxmLCBuZXdwYXJlbnQsIG9s
ZHBhcmVudCk6CisJCXdvcmxkID0gb2xkcGFyZW50CisJCXdoaWxlIHdvcmxkOgorCQkJdW5vYnNl
cnZlKHdvcmxkLCBzZWxmLm9uX3BhcmVudF9jaGFuZ2VkKQorCQkJd29ybGQgPSB3b3JsZC5wYXJl
bnQKKwkJCQorCQl3b3JsZCA9IG5ld3BhcmVudAorCQl3aGlsZSB3b3JsZDoKKwkJCW9ic2VydmUo
d29ybGQsIHNlbGYub25fcGFyZW50X2NoYW5nZWQpCisJCQl3b3JsZCA9IHdvcmxkLnBhcmVudAor
CQkJCisJZGVmIF9fcmVwcl9fKHNlbGYpOiByZXR1cm4gIjxPcmllbnRhdGlvbkhhbmRsZSBmb3Ig
JXM+IiAlIChzZWxmLm9yaWVudGF0aW9uLCkK
--20cf3071cca883364d04b3a88e48--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFGnVTnYFTQxunPYz1-JriS-4vju-zuHs%2BHgdBkWosqq%2BD5vgQ>