<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>232647</bug_id>
          
          <creation_ts>2021-11-02 17:04:10 -0700</creation_ts>
          <short_desc>Remove ReduceLoopStrength</short_desc>
          <delta_ts>2024-04-08 13:37:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>230908</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Michaud">justin_michaud</reporter>
          <assigned_to name="Justin Michaud">justin_michaud</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1811321</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2021-11-02 17:04:10 -0700</bug_when>
    <thetext>After the introduction of WasmAddress, this pass no longer does anything. It will likely only ever be profitable for WASM, and in addition, the pattern matching is pretty fragile. For now, we should remove it, and consider re-adding it when we need a JetStream progression. Here are some additional thoughts that we should consider before we add it back:

1) We consider hoisting WasmAddress in LICM or as a peephole optimization
2) We should support ARM64: see 230908
3) If we get SIMD/memcpy instruction support, we should consider inlining memcpy
4) We should make the pattern matching more general</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811322</commentid>
    <comment_count>1</comment_count>
      <attachid>443149</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2021-11-02 17:07:55 -0700</bug_when>
    <thetext>Created attachment 443149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813383</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-09 16:05:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/85228080&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2026872</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2024-04-08 13:37:18 -0700</bug_when>
    <thetext>Closing old bugs assigned to me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443149</attachid>
            <date>2021-11-02 17:07:55 -0700</date>
            <delta_ts>2021-11-02 17:07:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232647-20211102170754.patch</filename>
            <type>text/plain</type>
            <size>34492</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YmU2ZjRjOWY4ZjNhMjFjNThiYTQzYjcwZmExZjIyMzVjNDBlMDJkLi45NzBkMjY2YTg2M2E1NDc1
OGZjM2YxZjU3YTA4ZjVlYjZlMDI5NjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNyBAQAorMjAyMS0xMS0wMiAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBh
cHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFJlZHVjZUxvb3BTdHJlbmd0aAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNjQ3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWZ0ZXIgdGhlIGludHJvZHVj
dGlvbiBvZiBXYXNtQWRkcmVzcywgdGhpcyBwYXNzIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJ
dCB3aWxsIGxpa2VseSBvbmx5IGV2ZXIgYmUgcHJvZml0YWJsZSBmb3IgV0FTTSwgYW5kIGluIGFk
ZGl0aW9uLAorICAgICAgICB0aGUgcGF0dGVybiBtYXRjaGluZyBpcyBwcmV0dHkgZnJhZ2lsZS4g
Rm9yIG5vdywgd2Ugc2hvdWxkIHJlbW92ZSBpdCwgYW5kIGNvbnNpZGVyIHJlLWFkZGluZyBpdCB3
aGVuIHdlIG5lZWQgYSBKZXRTdHJlYW0gcHJvZ3Jlc3Npb24uCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJh
dGVUb0Fpcik6CisgICAgICAgICogYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGIzL0IzUmVkdWNlTG9vcFN0cmVuZ3RoLmg6IFJlbW92ZWQuCisgICAgICAg
ICogYjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIzXzguY3BwOgorICAgICAgICAoYWRk
Q29weVRlc3RzKToKKyAgICAgICAgKHRlc3RGYXN0Rm9yd2FyZENvcHkzMik6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9HQ01lbW9yeU9wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Z2NTYWZl
TWVtY3B5KToKKyAgICAgICAgKEpTQzo6Z2NTYWZlTWVtbW92ZSk6CisKIDIwMjEtMTEtMDEgIFJv
YmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAogICAgICAgICBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2V0IGNyYXNoZXMgaWYgdGhlIGxlbmd0aCArIG9iamVj
dE9mZnNldCBpcyA+IFVJTlQzMl9NQVgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ZWM1NmMxMGVhYTBlNGYwNmEyZTMwZTNhYWI2NDZhMGYwZGJiNjhjOC4uMTkzN2RjOGZhNGIwYTg1
YzMwYmI0NmMzM2VhMDU0YWUzMzljNjE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTEyMDgsNyArMTIwOCw2IEBACiAJCTczMTFGQTMyMjQwREIxRDMwMDNENDhEQiAvKiBEZWxl
dGVCeVZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDczMTFGQTMxMjQwREIxRDMwMDNENDhEQiAvKiBEZWxldGVCeVZhcmlhbnQuaCAqLzsgfTsK
IAkJNzM0QjY1NTUyM0Y1QzEwNDAwQTA2OUQxIC8qIERlbGV0ZVByb3BlcnR5U2xvdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzM0QjY1NTQyM0Y0QTMz
MTAwQTA2OUQxIC8qIERlbGV0ZVByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTczQUQwNjI5MjNGRjY2MjYwMEY1MzU5MyAvKiBE
ZWxldGVCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzNBRDA2MjgyM0ZGNjYyNjAwRjUzNTkzIC8qIERlbGV0ZUJ5U3RhdHVzLmggKi87IH07
Ci0JCTczRTM3OTk0MjJFMEVGNjUwMDkzMzU2NSAvKiBCM1JlZHVjZUxvb3BTdHJlbmd0aC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzNFMzc5OTMyMkUw
RUY0RjAwOTMzNTY1IC8qIEIzUmVkdWNlTG9vcFN0cmVuZ3RoLmggKi87IH07CiAJCTc1OTNDODk4
QkU3MTRBNjRCRTkzQTZFNyAvKiBXYXNtQ29udGV4dElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNzk1OEQ3RkExMTQyQjBBQzlFMzY0RCAv
KiBXYXNtQ29udGV4dElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3OTAwODEzOTFFOTVBOEVDMDA1MkQ3Q0QgLyogV2FzbU1vZHVsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwMDgxMzcx
RTk1QThFQzAwNTJEN0NEIC8qIFdhc21Nb2R1bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5s
aW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OTA1QkI2NzFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQxNDUsOCArNDE0NCw2IEBA
CiAJCTczMTkwRDk2MjQwMDkzNDkwMEY4OTFDOSAvKiBEZWxldGVCeVN0YXR1cy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWxldGVCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTczNEI2NTU0MjNGNEEzMzEwMEEwNjlEMSAvKiBEZWxldGVQcm9wZXJ0eVNsb3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVsZXRlUHJvcGVydHlTbG90Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTczQUQwNjI4MjNGRjY2MjYwMEY1MzU5MyAvKiBE
ZWxldGVCeVN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWxldGVCeVN0YXR1cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3M0UzNzk5MzIyRTBFRjRGMDA5MzM1NjUgLyogQjNSZWR1
Y2VMb29wU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1
Y2VMb29wU3RyZW5ndGguaDsgcGF0aCA9IGIzL0IzUmVkdWNlTG9vcFN0cmVuZ3RoLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTczRTM3OTk1MjJFMEVGOTEwMDkzMzU2NSAvKiBCM1Jl
ZHVjZUxvb3BTdHJlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBCM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZUxvb3BTdHJlbmd0
aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3QjI1Q0IyQzMwOTRBOTJBMzhF
MURCMyAvKiBKU01vZHVsZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU01vZHVsZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTAwODEz
NjFFOTVBOEVDMDA1MkQ3Q0QgLyogV2FzbU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtTW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzkwMDgxMzcxRTk1QThFQzAwNTJEN0NEIC8qIFdhc21Nb2R1bGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNjAyMSw4ICs2MDE4LDYgQEAKIAkJCQkwRjcyNUNBNjFDNTAzREVEMDBBRDk0
M0EgLyogQjNQdXJlQ1NFLmggKi8sCiAJCQkJNDM0MjJBNjQxQzE2MjIxRTAwRTJFQjk4IC8qIEIz
UmVkdWNlRG91YmxlVG9GbG9hdC5jcHAgKi8sCiAJCQkJNDM0MjJBNjUxQzE2MjIxRTAwRTJFQjk4
IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5oICovLAotCQkJCTczRTM3OTk1MjJFMEVGOTEwMDkz
MzU2NSAvKiBCM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHAgKi8sCi0JCQkJNzNFMzc5OTMyMkUwRUY0
RjAwOTMzNTY1IC8qIEIzUmVkdWNlTG9vcFN0cmVuZ3RoLmggKi8sCiAJCQkJMEZFQzg1QjcxQkUx
NDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwICovLAogCQkJCTBGRUM4NUI4MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmggKi8sCiAJCQkJMEZFQzg0RUExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5jcHAgKi8sCkBAIC05NTM2LDcgKzk1MzEs
NiBAQAogCQkJCTBGRUM4NTJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzI1Q0FBMUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVD
U0UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNDIyQTY3MUMxNjI2NzgwMEUyRUI5OCAvKiBCM1Jl
ZHVjZURvdWJsZVRvRmxvYXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTczRTM3OTk0MjJFMEVGNjUw
MDkzMzU2NSAvKiBCM1JlZHVjZUxvb3BTdHJlbmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
Qzg1QkQxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkJCRDk2MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1NwYXJzZUNvbGxl
Y3Rpb24uaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IGRk
OGNiNjI3MjQxYmU4OGNlZWYwNzQ1OWM4NWVmM2M4YTlmOGM4MzcuLjUwNzQ5NjJhZGNmOGNlNTEx
YzQyYWZjNGZmMGIwNTAyMWVmMzlhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAg
LTE2MSw3ICsxNjEsNiBAQCBiMy9CM1BoaUNoaWxkcmVuLmNwcAogYjMvQjNQcm9jZWR1cmUuY3Bw
CiBiMy9CM1B1cmVDU0UuY3BwCiBiMy9CM1JlZHVjZURvdWJsZVRvRmxvYXQuY3BwCi1iMy9CM1Jl
ZHVjZUxvb3BTdHJlbmd0aC5jcHAKIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwCiBiMy9CM1NTQUNh
bGN1bGF0b3IuY3BwCiBiMy9CM1Nsb3RCYXNlVmFsdWUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAKaW5kZXggYjkzY2U4MTliMWUzZmExNDA5ZDBiN2M3M2IwMWM4YmZi
OTExNjNlNS4uYTRiMjk0ODIzZDVlNzI1MDQ1ZjUwMzdkZTVjNDU0MjdiODE5ODZlZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcApAQCAtNDYsNyArNDYsNiBAQAogI2lu
Y2x1ZGUgIkIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oIgogI2luY2x1ZGUg
IkIzUHJvY2VkdXJlLmgiCiAjaW5jbHVkZSAiQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmgiCi0jaW5j
bHVkZSAiQjNSZWR1Y2VMb29wU3RyZW5ndGguaCIKICNpbmNsdWRlICJCM1JlZHVjZVN0cmVuZ3Ro
LmgiCiAjaW5jbHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIK
QEAgLTkyLDcgKzkxLDYgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJl
KQogICAgICAgICAgICAgZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMocHJvY2VkdXJlKTsK
ICAgICAgICAgZWxpbWluYXRlRGVhZENvZGUocHJvY2VkdXJlKTsKICAgICAgICAgaW5mZXJTd2l0
Y2hlcyhwcm9jZWR1cmUpOwotICAgICAgICByZWR1Y2VMb29wU3RyZW5ndGgocHJvY2VkdXJlKTsK
ICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUIzVGFpbER1cCgpKQogICAgICAgICAgICAgZHVwbGlj
YXRlVGFpbHMocHJvY2VkdXJlKTsKICAgICAgICAgZml4U1NBKHByb2NlZHVyZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlTG9vcFN0cmVuZ3RoLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVhZWQ0NGJkN2UwNjNhMmU5OTk3Y2Q0OGViMzY0ZDJm
ZGRhNDIwZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQjNSZWR1
Y2VMb29wU3RyZW5ndGguaCIKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLSNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQjNCbG9ja0luc2VydGlvblNldC5oIgotI2lu
Y2x1ZGUgIkIzQ29uc3RQdHJWYWx1ZS5oIgotI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0LmgiCi0j
aW5jbHVkZSAiQjNOYXR1cmFsTG9vcHMuaCIKLSNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKLSNp
bmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKLSNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgotI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLSNpZiBDUFUoWDg2XzY0KQotSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZhc3RGb3J3YXJkQ29weTMyLCB2b2lkLCAodWlu
dDMyX3QqIGRzdCwgY29uc3QgdWludDMyX3QqIHNyYywgc2l6ZV90IHNpemUpKQotewotICAgIHJl
dHVybiBmYXN0Rm9yd2FyZENvcHkzMihkc3QsIHNyYywgc2l6ZSk7Ci19Ci0jZW5kaWYKLQotY2xh
c3MgUmVkdWNlTG9vcFN0cmVuZ3RoIHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotCi0gICAgc3RydWN0IEFkZHJJbmZvIHsKLSAgICAgICAgVmFsdWUqIGFwcGVu
ZEFkZHIoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgVmFsdWUqIGFkZHIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElkZW50
aXR5LCBhZGRyLT5vcmlnaW4oKSwgYWRkcik7Ci0gICAgICAgICAgICByZXR1cm4gYWRkcjsKLSAg
ICAgICAgfQotCi0gICAgICAgIFZhbHVlKiBpbnNpZGVMb29wQWRkcjsKLQotICAgICAgICBWYWx1
ZSogYXJyYXlCYXNlOwotICAgICAgICBWYWx1ZSogaW5kZXg7Ci0gICAgfTsKLQotcHVibGljOgot
ICAgIFJlZHVjZUxvb3BTdHJlbmd0aChQcm9jZWR1cmUmIHByb2MpCi0gICAgICAgIDogbV9wcm9j
KHByb2MpCi0gICAgICAgICwgbV9pbnNlcnRpb25TZXQocHJvYykKLSAgICAgICAgLCBtX2Jsb2Nr
SW5zZXJ0aW9uU2V0KHByb2MpCi0gICAgICAgICwgbV9yb290KHByb2MuYXQoMCkpCi0gICAgICAg
ICwgbV9waGlDaGlsZHJlbihwcm9jKQotICAgIHsKLSAgICB9Ci0KLSNpZiBDUFUoWDg2XzY0KQot
ICAgIHZvaWQgcmVkdWNlQnl0ZUNvcHlMb29wc1RvTWVtY3B5KCkKLSAgICB7Ci0gICAgICAgIEhh
c2hTZXQ8VmFsdWUqPiBwYXR0ZXJuTWF0Y2hlZFZhbHVlczsKLQotICAgICAgICBWYWx1ZSogc3Rv
cmUgPSBtX3ZhbHVlOwotICAgICAgICBpZiAoc3RvcmUtPm9wY29kZSgpICE9IFN0b3JlKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBwYXR0ZXJuTWF0Y2hlZFZhbHVlcy5hZGQoc3RvcmUp
OwotCi0gICAgICAgIFZhbHVlKiBsb2FkID0gc3RvcmUtPmNoaWxkKDApOwotICAgICAgICB1aW50
MzJfdCBlbGVtU2l6ZSA9IHNpemVvZlR5cGUobG9hZC0+dHlwZSgpKTsKLSAgICAgICAgaWYgKGxv
YWQtPm9wY29kZSgpICE9IExvYWQgfHwgZWxlbVNpemUgIT0gNCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgcGF0dGVybk1hdGNoZWRWYWx1ZXMuYWRkKGxvYWQpOwotCi0gICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJGb3VuZCBzdG9yZS9sb2FkOiIsICpz
dG9yZSk7Ci0KLSAgICAgICAgYXV0byBleHRyYWN0QXJyYXlJbmZvID0gWyZdIChWYWx1ZSogdmFs
dWUpIC0+IHN0ZDo6b3B0aW9uYWw8QWRkckluZm8+IHsKLSAgICAgICAgICAgIHBhdHRlcm5NYXRj
aGVkVmFsdWVzLmFkZCh2YWx1ZSk7Ci0KLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8QWRkcklu
Zm8+IGFkZHIgPSB7IEFkZHJJbmZvKCkgfTsKLQotICAgICAgICAgICAgVmFsdWUqIHN1bSA9IHZh
bHVlOwotICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBaRXh0MzIpCi0gICAgICAg
ICAgICAgICAgc3VtID0gc3VtLT5jaGlsZCgwKTsKLQotICAgICAgICAgICAgaWYgKHN1bS0+b3Bj
b2RlKCkgIT0gQWRkIHx8IHN1bS0+bnVtQ2hpbGRyZW4oKSAhPSAyKQotICAgICAgICAgICAgICAg
IHJldHVybiB7IH07Ci0KLSAgICAgICAgICAgIGFkZHItPmluc2lkZUxvb3BBZGRyID0gc3VtOwot
ICAgICAgICAgICAgYXV0byBleHRyYWN0TG9vcEluZGV4SW5TdWJ0cmVlID0gWyZdIChWYWx1ZSog
dmFsdWUpIC0+IFZhbHVlKiB7Ci0gICAgICAgICAgICAgICAgLy8gTWF0Y2ggYXJyQmFzZVtpKmVs
ZW1TaXplXQotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gU2hsCi0gICAg
ICAgICAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gUGhpCi0gICAg
ICAgICAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoV1RGOjpmYXN0TG9nMihl
bGVtU2l6ZSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUtPmNoaWxkKDApOwot
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gU2hsCi0gICAgICAgICAgICAg
ICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gWkV4dDMyCi0gICAgICAgICAg
ICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFBoaQot
ICAgICAgICAgICAgICAgICAgICAmJiB2YWx1ZS0+Y2hpbGQoMSktPmlzSW50KFdURjo6ZmFzdExv
ZzIoZWxlbVNpemUpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAg
ICB9OwotCi0gICAgICAgICAgICAvLyBUcnkgdG8gZmluZCBhIGtub3duIHBhdHRlcm4gYXBwbGll
ZCB0byBhIHNpbmdsZSBwaGksIHdoaWNoIHdlIGNhbiBhc3N1bWUgaXMgb3VyIGxvb3AgaW5kZXgu
Ci0gICAgICAgICAgICBWYWx1ZSogbGVmdCA9IGV4dHJhY3RMb29wSW5kZXhJblN1YnRyZWUoc3Vt
LT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSBleHRyYWN0TG9vcEluZGV4
SW5TdWJ0cmVlKHN1bS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgaWYgKGxlZnQgJiYgIXJpZ2h0
KSB7Ci0gICAgICAgICAgICAgICAgYWRkci0+aW5kZXggPSBsZWZ0OwotICAgICAgICAgICAgICAg
IGFkZHItPmFycmF5QmFzZSA9IHN1bS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHJpZ2h0ICYmICFsZWZ0KSB7Ci0gICAgICAgICAgICAgICAgYWRkci0+aW5kZXggPSByaWdodDsK
LSAgICAgICAgICAgICAgICBhZGRyLT5hcnJheUJhc2UgPSBzdW0tPmNoaWxkKDApOwotICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgICAgICAgICAg
cGF0dGVybk1hdGNoZWRWYWx1ZXMuYWRkKGFkZHItPmluZGV4KTsKLSAgICAgICAgICAgIHBhdHRl
cm5NYXRjaGVkVmFsdWVzLmFkZChhZGRyLT5hcnJheUJhc2UpOwotCi0gICAgICAgICAgICByZXR1
cm4gYWRkcjsKLSAgICAgICAgfTsKLQotICAgICAgICBhdXRvIGRlc3RpbmF0aW9uID0gZXh0cmFj
dEFycmF5SW5mbyhzdG9yZS0+Y2hpbGQoMSkpOwotICAgICAgICBhdXRvIHNvdXJjZSA9IGV4dHJh
Y3RBcnJheUluZm8obG9hZC0+Y2hpbGQoMCkpOwotCi0gICAgICAgIGlmICghc291cmNlIHx8ICFk
ZXN0aW5hdGlvbiB8fCBzb3VyY2UtPmluZGV4ICE9IGRlc3RpbmF0aW9uLT5pbmRleCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoZGVzdGluYXRpb24tPmFycmF5QmFzZS0+dHlw
ZSgpICE9IEludDY0IHx8IHNvdXJjZS0+YXJyYXlCYXNlLT50eXBlKCkgIT0gSW50NjQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nTG4oIkZvdW5kIGFycmF5IGluZm86ICIsICpzb3VyY2UtPmFycmF5QmFzZSwgIlsiLCAqc291
cmNlLT5pbmRleCwgIl0gPSAiLCAqZGVzdGluYXRpb24tPmFycmF5QmFzZSwgIlsiLCAqZGVzdGlu
YXRpb24tPmluZGV4LCAiXSIpOwotCi0gICAgICAgIC8vIEZpbmQgdGhlIGxvb3AgaGVhZGVyLCBm
b290ZXIgYW5kIGlubmVyIGJsb2Nrcy4KLSAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMg
b25lIGVudHJhbmNlIHRvIGFuZCBvbmUgZXhpdCBmcm9tIHRoZSBsb29wLgotICAgICAgICBhdXRv
KiBsb29wID0gbV9wcm9jLm5hdHVyYWxMb29wcygpLmlubmVyTW9zdExvb3BPZihtX2Jsb2NrKTsK
LSAgICAgICAgaWYgKCFsb29wKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBCYXNpY0Js
b2NrKiBsb29wSGVhZCA9IGxvb3AtPmhlYWRlcigpOwotICAgICAgICBCYXNpY0Jsb2NrKiBsb29w
Rm9vdCA9IG51bGxwdHI7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGxvb3BQcmVoZWFkZXIgPSBudWxs
cHRyOwotICAgICAgICBCYXNpY0Jsb2NrKiBsb29wUG9zdGZvb3RlciA9IG51bGxwdHI7Ci0gICAg
ICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wSW5uZXJCbG9ja3M7Ci0KLSAgICAgICAgewot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3AtPnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgICAgIGxvb3BJbm5lckJsb2Nrcy5hZGQobG9vcC0+YXQoaSkpOwotCi0gICAg
ICAgICAgICBpZiAoIWxvb3BJbm5lckJsb2Nrcy5jb250YWlucyhsb2FkLT5vd25lcikpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoIWxvb3BJbm5lckJsb2Nrcy5j
b250YWlucyhzdG9yZS0+b3duZXIpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgU21hbGxTZXQ8QmFzaWNCbG9jayo+IGxvb3BFbnRyYW5jZXM7Ci0gICAgICAgICAgICBT
bWFsbFNldDxCYXNpY0Jsb2NrKj4gbG9vcEV4aXRzOwotICAgICAgICAgICAgZm9yIChhdXRvKiBi
bG9jayA6IGxvb3BJbm5lckJsb2NrcykgewotICAgICAgICAgICAgICAgIGZvciAoYXV0byBzdWNj
ZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
bG9vcElubmVyQmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3Nvci5ibG9jaygpKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb3BFeGl0cy5hZGQoc3VjY2Vzc29yLmJsb2NrKCkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIHByZWRlY2Vzc29yIDogYmxvY2st
PnByZWRlY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9vcElubmVyQmxv
Y2tzLmNvbnRhaW5zKHByZWRlY2Vzc29yKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BF
bnRyYW5jZXMuYWRkKHByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChsb29wRXhpdHMuc2l6ZSgpICE9IDEpIHsKLSAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb29w
IGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGV4aXRzOiAiKTsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGxvb3BFeGl0cykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coKmJsb2NrLCAiICIpOwotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbG9vcFBvc3Rmb290ZXIgPSAqbG9vcEV4aXRzLmJlZ2luKCk7Ci0K
LSAgICAgICAgICAgIGlmIChsb29wRW50cmFuY2VzLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG9vcCBo
YXMgaW5jb3JyZWN0IG51bWJlciBvZiBlbnRyYW5jZXM6ICIpOwotICAgICAgICAgICAgICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbG9vcEVudHJhbmNlcykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coKmJsb2NrLCAiICIpOwotICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbG9vcFByZWhlYWRlciA9ICpsb29wRW50cmFuY2VzLmJl
Z2luKCk7Ci0KLSAgICAgICAgICAgIGlmICghbG9vcEhlYWQtPnByZWRlY2Vzc29ycygpLmNvbnRh
aW5zKGxvb3BQcmVoZWFkZXIpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTG9vcCBoZWFkIGRvZXMgbm90IGZvbGxvdyBwcmVo
ZWFkZXIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBsb29wUG9zdGZvb3Rlci0+cHJl
ZGVjZXNzb3JzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobG9vcElubmVyQmxvY2tzLmNvbnRh
aW5zKHByZWRlY2Vzc29yKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobG9vcEZvb3QpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiTG9vcCBoYXMgbW9yZSB0aGFuIG9uZSBleGl0IHBvaW50Iik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgbG9vcEZvb3QgPSBwcmVkZWNlc3NvcjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmVyYm9zZSkg
ewotICAgICAgICAgICAgZGF0YUxvZygiRm91bmQgbG9vcCBoZWFkOiIsICpsb29wSGVhZCwgIiBm
b290OiIsICpsb29wRm9vdCwgIiBwcmVoZWFkICIsICpsb29wUHJlaGVhZGVyLCAiIHBvc3Rmb290
ICIsICpsb29wUG9zdGZvb3RlciwgIiBpbm5lciBibG9ja3M6ICIpOwotICAgICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGxvb3BJbm5lckJsb2NrcykKLSAgICAgICAgICAgICAgICBk
YXRhTG9nKCpibG9jaywgIiAiKTsKLSAgICAgICAgICAgIGRhdGFMb2dMbigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGluZGV4IGlzIGEgbW9ub3RvbmljIGluZHVj
dGl2ZSB2YXJpYWJsZS4KLSAgICAgICAgVmFsdWUqIHN0YXJ0aW5nSW5kZXggPSBudWxscHRyOwot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9waGlDaGlsZHJlbi5hdChzb3VyY2UtPmluZGV4
KS5zaXplKCkgIT0gMikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIFZh
bHVlKiB1cGRhdGVJbmRleCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBmb3IgKFZhbHVlKiB1cCA6
IG1fcGhpQ2hpbGRyZW4uYXQoc291cmNlLT5pbmRleCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bV9wcm9jLmRvbWluYXRvcnMoKS5kb21pbmF0ZXModXAtPm93bmVyLCBsb29wUHJlaGVhZGVyKSkK
LSAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmdJbmRleCA9IHVwOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlSW5kZXggPSB1cDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKCF1cGRhdGVJbmRleCB8fCAhc3RhcnRpbmdJbmRleCB8fCAh
bG9vcElubmVyQmxvY2tzLmNvbnRhaW5zKHVwZGF0ZUluZGV4LT5vd25lcikpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgcGF0dGVybk1hdGNoZWRWYWx1ZXMuYWRkKHVwZGF0
ZUluZGV4KTsKLSAgICAgICAgICAgIHBhdHRlcm5NYXRjaGVkVmFsdWVzLmFkZChzdGFydGluZ0lu
ZGV4KTsKLQotICAgICAgICAgICAgdXBkYXRlSW5kZXggPSB1cGRhdGVJbmRleC0+Y2hpbGQoMCk7
Ci0gICAgICAgICAgICBzdGFydGluZ0luZGV4ID0gc3RhcnRpbmdJbmRleC0+Y2hpbGQoMCk7Ci0g
ICAgICAgICAgICBpZiAodXBkYXRlSW5kZXgtPm9wY29kZSgpICE9IEFkZCB8fCAhdXBkYXRlSW5k
ZXgtPmNoaWxkKDEpLT5pc0ludCgxKSB8fCB1cGRhdGVJbmRleC0+Y2hpbGQoMCkgIT0gc291cmNl
LT5pbmRleCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghc3Rh
cnRpbmdJbmRleC0+aXNJbnQoMCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIkZvdW5kIHN0
YXJ0aW5nIGluZGV4OiIsICpzdGFydGluZ0luZGV4KTsKLQotICAgICAgICAvLyBJZGVudGlmeSB0
aGUgbG9vcCBleGl0IGNvbmRpdGlvbi4KLSAgICAgICAgVmFsdWUqIGV4aXRDb25kaXRpb24gPSBu
dWxscHRyOwotICAgICAgICAvLyBJcyB0aGlzIGFuIGV4aXQgY29uZGl0aW9uIG9yIGEgY29udGlu
dWF0aW9uIGNvbmRpdGlvbj8KLSAgICAgICAgYm9vbCBjb25kaXRpb25JbnZlcnRlZCA9IGZhbHNl
OwotICAgICAgICAvLyBEbyB3ZSBjaGVjayB0aGUgaW5kZXggYmVmb3JlIG9yIGFmdGVyIHVzaW5n
IGl0PwotICAgICAgICBib29sIGNoZWNrQmVmb3JlV3JpdGUgPSBmYWxzZTsKLSAgICAgICAgewot
ICAgICAgICAgICAgVmFsdWUqIGJyYW5jaCA9IGxvb3BGb290LT5sYXN0KCk7Ci0gICAgICAgICAg
ICBpZiAoYnJhbmNoLT5vcGNvZGUoKSAhPSBCcmFuY2gpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgcGF0dGVybk1hdGNoZWRWYWx1ZXMuYWRkKGJyYW5jaCk7Ci0gICAgICAg
ICAgICBleGl0Q29uZGl0aW9uID0gYnJhbmNoLT5jaGlsZCgwKTsKLQotICAgICAgICAgICAgY29u
ZGl0aW9uSW52ZXJ0ZWQgPSBsb29wUG9zdGZvb3RlciAhPSBsb29wRm9vdC0+c3VjY2Vzc29yKDAp
LmJsb2NrKCk7Ci0gICAgICAgICAgICBjaGVja0JlZm9yZVdyaXRlID0gbV9wcm9jLmRvbWluYXRv
cnMoKS5zdHJpY3RseURvbWluYXRlcyhsb29wRm9vdCwgbV9ibG9jayk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiRm91bmQgZXhpdCBj
b25kaXRpb246ICIsICpleGl0Q29uZGl0aW9uLCAiIGludmVydGVkOiAiLCBjb25kaXRpb25JbnZl
cnRlZCwgIiBjaGVja3MgYmVmb3JlIHRoZSBmaXJzdCB3cml0ZTogIiwgY2hlY2tCZWZvcmVXcml0
ZSk7Ci0KLSAgICAgICAgLy8gSWRlbmZpdHkgdGhlIGxvb3AgYm91bmQgYnkgbWF0Y2hpbmcgbG9v
cCBib3VuZCBleHByZXNzaW9ucy4KLSAgICAgICAgVmFsdWUqIGxvb3BCb3VuZCA9IG51bGxwdHI7
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gZXh0cmFjdExvb3BCb3VuZCA9IFsmXSAoVmFs
dWUqIGluZGV4LCBWYWx1ZSogYm91bmQpIC0+IFZhbHVlKiB7Ci0gICAgICAgICAgICAgICAgLy8g
TWF0Y2ggaSsxIHdoZW4gd2UgZG8gYSB3cml0ZSBmaXJzdCBmb2xsb3dlZCBieSB0aGUgY2hlY2sg
Zm9yIHRoZSBuZXh0IGl0ZXJhdGlvbgotICAgICAgICAgICAgICAgIGlmICghY2hlY2tCZWZvcmVX
cml0ZSAmJiBpbmRleC0+b3Bjb2RlKCkgPT0gQWRkICYmIGluZGV4LT5jaGlsZCgwKSA9PSBzb3Vy
Y2UtPmluZGV4ICYmIGluZGV4LT5jaGlsZCgxKS0+aXNJbnQoMSkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBib3VuZDsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgIGlmIChleGl0Q29uZGl0aW9uLT5vcGNvZGUoKSA9PSBH
cmVhdGVyVGhhbiAmJiBjb25kaXRpb25JbnZlcnRlZCkgewotICAgICAgICAgICAgICAgIC8vIGVu
dGVyIGxvb3AgYWdhaW4gaWYgc2l6ZSA+IGkKLSAgICAgICAgICAgICAgICBsb29wQm91bmQgPSBl
eHRyYWN0TG9vcEJvdW5kKGV4aXRDb25kaXRpb24tPmNoaWxkKDEpLCBleGl0Q29uZGl0aW9uLT5j
aGlsZCgwKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV4aXRDb25kaXRpb24tPm9wY29kZSgp
ID09IExlc3NUaGFuICYmICFjb25kaXRpb25JbnZlcnRlZCkgewotICAgICAgICAgICAgICAgIC8v
IGVudGVyIGxvb3AgYWdhaW4gaWYgc2l6ZSA8IGkKLSAgICAgICAgICAgICAgICBsb29wQm91bmQg
PSBleHRyYWN0TG9vcEJvdW5kKGV4aXRDb25kaXRpb24tPmNoaWxkKDEpLCBleGl0Q29uZGl0aW9u
LT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbG9vcEJvdW5k
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiVW5hYmxlIHRvIGV4dHJhY3QgYm91bmQgZnJvbSBleGl0IGNvbmRpdGlvbiAiLCAq
ZXhpdENvbmRpdGlvbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBlZmZl
Y3RmdWwgdGhpbmdzIGhhcHBlbmluZy4KLSAgICAgICAgLy8gVGhpcyBhbHNvIGd1YXJhbnRlZXMg
dGhhdCB3ZSBmb3VuZCB0aGUgb25seSBicmFuY2ggaW4gdGhlIGxvb3AuIFRoaXMgbWVhbnMgdGhh
dCBvdXIKLSAgICAgICAgLy8gbG9hZC9zdG9yZSBtdXN0IGhhcHBlbiBpZmYgb3VyIGluZGV4IHVw
ZGF0ZSBhbmQgYnJhbmNoIGRvLgotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbG9v
cElubmVyQmxvY2tzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIHZh
bHVlID0gYmxvY2stPmF0KGluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAocGF0dGVybk1hdGNo
ZWRWYWx1ZXMuY29udGFpbnModmFsdWUpIHx8IHZhbHVlLT5vcGNvZGUoKSA9PSBKdW1wKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIEVmZmVjdHMgZWZm
ZWN0cyA9IHZhbHVlLT5lZmZlY3RzKCk7Ci0gICAgICAgICAgICAgICAgZWZmZWN0cy5yZWFkc0xv
Y2FsU3RhdGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoZWZmZWN0cyAhPSBFZmZlY3Rz
Ojpub25lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIk5vdCBieXRlIGNvcHkgbG9vcCwgbm9kZSAiLCAqdmFs
dWUsICIgaGFzIGVmZmVjdHMiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaG9p
c3RWYWx1ZShsb29wUHJlaGVhZGVyLCBzb3VyY2UtPmFycmF5QmFzZSwgZmFsc2UpCi0gICAgICAg
ICAgICB8fCAhaG9pc3RWYWx1ZShsb29wUHJlaGVhZGVyLCBkZXN0aW5hdGlvbi0+YXJyYXlCYXNl
LCBmYWxzZSkKLSAgICAgICAgICAgIHx8ICFob2lzdFZhbHVlKGxvb3BQcmVoZWFkZXIsIGxvb3BC
b3VuZCwgZmFsc2UpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJGb3VuZCBieXRlIGNvcHkgbG9vcDogIiwgKnNvdXJj
ZS0+YXJyYXlCYXNlLCAiWyIsICpzb3VyY2UtPmluZGV4LCAiXSA9ICIsICpkZXN0aW5hdGlvbi0+
YXJyYXlCYXNlLCAiWyIsICpkZXN0aW5hdGlvbi0+aW5kZXgsICJdIGZyb20gaW5kZXggIiwgKnN0
YXJ0aW5nSW5kZXgsICIgdG8gbWF4IGluZGV4ICIsICpsb29wQm91bmQsICIgc3RyaWRlOiAiLCBl
bGVtU2l6ZSk7Ci0KLSAgICAgICAgYm9vbCBob2lzdFJlc3VsdCA9IGhvaXN0VmFsdWUobG9vcFBy
ZWhlYWRlciwgc291cmNlLT5hcnJheUJhc2UpOwotICAgICAgICBob2lzdFJlc3VsdCAmPSBob2lz
dFZhbHVlKGxvb3BQcmVoZWFkZXIsIGRlc3RpbmF0aW9uLT5hcnJheUJhc2UpOwotICAgICAgICBo
b2lzdFJlc3VsdCAmPSBob2lzdFZhbHVlKGxvb3BQcmVoZWFkZXIsIGxvb3BCb3VuZCk7Ci0gICAg
ICAgIEFTU0VSVF9VTlVTRUQoaG9pc3RSZXN1bHQsIGhvaXN0UmVzdWx0KTsKLQotICAgICAgICBh
dXRvIG9yaWdpbiA9IGxvb3BQb3N0Zm9vdGVyLT5hdCgwKS0+b3JpZ2luKCk7Ci0KLSAgICAgICAg
QmFzaWNCbG9jayogbWVtY3B5ID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUobG9v
cFBvc3Rmb290ZXIsIGxvb3BQb3N0Zm9vdGVyLT5mcmVxdWVuY3koKSk7Ci0gICAgICAgIG1lbWNw
eS0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sobG9vcFBvc3Rmb290ZXIpKTsKLSAgICAg
ICAgbWVtY3B5LT5hZGRQcmVkZWNlc3Nvcihsb29wUHJlaGVhZGVyKTsKLSAgICAgICAgd2hpbGUg
KGxvb3BQb3N0Zm9vdGVyLT5wcmVkZWNlc3NvcnMoKS5zaXplKCkpIAotICAgICAgICAgICAgbG9v
cFBvc3Rmb290ZXItPnJlbW92ZVByZWRlY2Vzc29yKGxvb3BQb3N0Zm9vdGVyLT5wcmVkZWNlc3Nv
cnMoKVswXSk7Ci0gICAgICAgIGxvb3BQb3N0Zm9vdGVyLT5hZGRQcmVkZWNlc3NvcihtZW1jcHkp
OwotICAgICAgICBsb29wUHJlaGVhZGVyLT5zZXRTdWNjZXNzb3JzKG1lbWNweSk7Ci0KLSAgICAg
ICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6Zm9yQ2FsbCgpOwotICAgICAgICBtZW1jcHkt
PmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4sIGVmZmVjdHMs
Ci0gICAgICAgICAgICBtZW1jcHktPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9y
aWdpbiwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uRmFzdEZvcndhcmRD
b3B5MzIpKSwKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uLT5hcHBlbmRBZGRyKG1fcHJvYywgbWVt
Y3B5LCBkZXN0aW5hdGlvbi0+YXJyYXlCYXNlKSwKLSAgICAgICAgICAgIHNvdXJjZS0+YXBwZW5k
QWRkcihtX3Byb2MsIG1lbWNweSwgc291cmNlLT5hcnJheUJhc2UpLAotICAgICAgICAgICAgbG9v
cEJvdW5kKTsKLQotICAgICAgICBtZW1jcHktPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBKdW1w
LCBvcmlnaW4pOwotICAgIH0KLQotICAgIGJvb2wgaG9pc3RWYWx1ZShCYXNpY0Jsb2NrKiBpbnRv
LCBWYWx1ZSogdmFsdWUsIGJvb2wgY2FuTXV0YXRlID0gdHJ1ZSkKLSAgICB7Ci0gICAgICAgIGlm
IChtX3Byb2MuZG9taW5hdG9ycygpLmRvbWluYXRlcyh2YWx1ZS0+b3duZXIsIGludG8pKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gdmFsdWUt
PmVmZmVjdHMoKTsKLSAgICAgICAgaWYgKGVmZmVjdHMgIT0gRWZmZWN0czo6bm9uZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkNhbm5v
dCBob2lzdCAiLCAqdmFsdWUsICIgaW50byAiLCAqaW50bywgIiBzaW5jZSBpdCBoYXMgZWZmZWN0
cyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9y
IChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgewotICAgICAgICAgICAgaWYgKCFo
b2lzdFZhbHVlKGludG8sIGNoaWxkLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNhbk11dGF0ZSkgewotICAgICAgICAgICAg
Zm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKLSAgICAgICAgICAgICAgICBo
b2lzdFZhbHVlKGludG8sIGNoaWxkKTsKLQotICAgICAgICAgICAgdmFsdWUtPm93bmVyLT5hdCh2
YWx1ZS0+aW5kZXgoKSkgPSBtX3Byb2MuYWRkPFZhbHVlPihOb3AsIFZvaWQsIHZhbHVlLT5vcmln
aW4oKSk7Ci0gICAgICAgICAgICBpbnRvLT5hcHBlbmROb25UZXJtaW5hbCh2YWx1ZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHJ1bigpCi0g
ICAgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiUmVkdWNl
TG9vcFN0cmVuZ3RoIGV4YW1pbmluZyBwcm9jOiAiLCBtX3Byb2MpOwotICAgICAgICBib29sIHJl
c3VsdCA9IGZhbHNlOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZh
bHNlOwotCi0gICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jLmJsb2Nr
c0luUHJlT3JkZXIoKSkgewotICAgICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKLQotICAg
ICAgICAgICAgICAgIGZvciAobV9pbmRleCA9IDA7IG1faW5kZXggPCBibG9jay0+c2l6ZSgpOyAr
K21faW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZSA9IG1fYmxvY2stPmF0KG1f
aW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5wZXJmb3JtU3Vic3RpdHV0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlZHVjZUJ5dGVDb3B5TG9vcHNUb01lbWNweSgpOwot
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOwotICAg
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgfD0gbV9ibG9ja0luc2VydGlvblNldC5leGVjdXRl
KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY2hhbmdlZCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9wcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChtX2NoYW5n
ZWQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
IHdoaWxlIChtX2NoYW5nZWQgJiYgbV9wcm9jLm9wdExldmVsKCkgPj0gMik7Ci0KLSAgICAgICAg
aWYgKHJlc3VsdCAmJiB2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWR1Y2VMb29w
U3RyZW5ndGggcHJvZHVjZWQgcHJvYzogIiwgbV9wcm9jKTsKLQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLSNlbHNlCi0gICAgYm9vbCBydW4oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSNlbmRpZgotCi0gICAgUHJvY2VkdXJlJiBtX3Byb2M7Ci0gICAgSW5z
ZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwotICAgIEJsb2NrSW5zZXJ0aW9uU2V0IG1fYmxvY2tJ
bnNlcnRpb25TZXQ7Ci0gICAgQmFzaWNCbG9jayogbV9yb290IHsgbnVsbHB0ciB9OwotICAgIEJh
c2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQgbV9pbmRleCB7IDAg
fTsKLSAgICBWYWx1ZSogbV92YWx1ZSB7IG51bGxwdHIgfTsKLSAgICBib29sIG1fY2hhbmdlZCB7
IGZhbHNlIH07Ci0gICAgUGhpQ2hpbGRyZW4gbV9waGlDaGlsZHJlbjsKLX07Ci0KLWJvb2wgcmVk
dWNlTG9vcFN0cmVuZ3RoKFByb2NlZHVyZSYgcHJvYykKLXsKLSAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUocHJvYywgInJlZHVjZUxvb3BTdHJlbmd0aCIpOwotICAgIHJldHVybiBSZWR1Y2VMb29w
U3RyZW5ndGgocHJvYykucnVuKCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0j
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0aC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlTG9vcFN0cmVuZ3RoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNWU1
NjU5OTdlMTRiY2M0NTM3NjM4NTBmZDMxYjRlMTM5ZjgwY2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlTG9vcFN0cmVuZ3RoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIEVOQUJMRShCM19KSVQpCi0KLSNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewotCi1jbGFzcyBQcm9jZWR1cmU7Ci0K
LS8vIEFwcGx5IHRyYW5zZm9ybWF0aW9ucyB0aGF0IG1hdGNoIGFuZCBzaW1wbGlmeSBlbnRpcmUg
bG9vcHMuCi0KLWJvb2wgcmVkdWNlTG9vcFN0cmVuZ3RoKFByb2NlZHVyZSYpOwotCi0KLQotI2lm
IENQVShYODZfNjQpCi0vKgotICogVGhlIHNlbWFudGljcyBvZiBCMyByZXF1aXJlIHRoYXQgbG9h
ZHMgYW5kIHN0b3JlcyBhcmUgbm90IHJlZHVjZWQgaW4gZ3JhbnVsYXJpdHkuCi0gKiBJZiB3ZSB3
b3VsZCB1c2Ugc3lzdGVtIG1lbWNweSwgdGhlbiBpdCBpcyBwb3NzaWJsZSB0aGF0IHdlIHdvdWxk
IGdldCBhIGJ5dGUgY29weSBsb29wLAotICogYW5kIHRoaXMgY291bGQgY2F1c2UgR0MgdGVhcmlu
Zy4KLSAqLwotQUxXQVlTX0lOTElORSB2b2lkIGZhc3RGb3J3YXJkQ29weTMyKHVpbnQzMl90KiBk
c3QsIGNvbnN0IHVpbnQzMl90KiBzcmMsIHNpemVfdCBzaXplKQotewotICAgIHVpbnQ2NF90IGk7
Ci0gICAgaW50NjRfdCBjb3VudGVyOwotICAgIHVpbnQ2NF90IHRtcCwgdG1wMjsKLQotICAgIGFz
bSB2b2xhdGlsZSgKLSAgICAgICAgInRlc3QgJXFbc2l6ZV0sICVxW3NpemVdXHRcbiIKLSAgICAg
ICAgImp6IDkwMGZcdFxuIiAvLyBleGl0Ci0gICAgICAgICJ4b3JxICVxW2ldLCAlcVtpXVx0XG4i
Ci0gICAgICAgIC8vIGlmIHNpemUgPCA4Ci0gICAgICAgICJjbXAgJDgsICVxW3NpemVdXHRcbiIK
LSAgICAgICAgImpsIDEwMGZcdFxuIiAvLyBiYWNrcG9yY2gKLSAgICAgICAgLy8gaWYgKGRzdCAr
IHNpemUqNCA8PSBzcmMgfHwgc3JjICsgc2l6ZSo0IDw9IGRzdCkKLSAgICAgICAgImxlYXEgKCVx
W3NyY10sICVxW3NpemVdLCA0KSwgJXFbdG1wXVx0XG4iCi0gICAgICAgICJjbXAgJXFbdG1wXSwg
JXFbZHN0XVx0XG4iCi0gICAgICAgICJqYWUgNTAwZlx0XG4iIC8vIHNpbWQgbm8gb3ZlcmxhcAot
ICAgICAgICAibGVhcSAoJXFbZHN0XSwgJXFbc2l6ZV0sIDQpLCAlcVt0bXBdXHRcbiIKLSAgICAg
ICAgImNtcCAlcVt0bXBdLCAlcVtzcmNdXHRcbiIKLSAgICAgICAgImphZSA1MDBmXHRcbiIgLy8g
c2ltZCBubyBvdmVybGFwCi0gICAgICAgICJqbXAgMTAwZlx0XG4iIC8vIEJhY2twb3JjaAotCi0g
ICAgICAgIC8vIEJhY2twb3JjaCAoYXNzdW1lcyB3ZSBjYW4gd3JpdGUgYXQgbGVhc3Qgb25lIGlu
dCkKLSAgICAgICAgIjEwMDpcdFxuIgotICAgICAgICAvLyBjb3VudGVyID0gKHNpemUgLSBpKSU0
Ci0gICAgICAgICJtb3YgJXFbc2l6ZV0sICVxW2NvdW50ZXJdXHRcbiIKLSAgICAgICAgInN1YnEg
JXFbaV0sICVxW2NvdW50ZXJdXHRcbiIKLQotICAgICAgICAvLyBJZiB3ZSBhcmUgYSBtdWx0aXBs
ZSBvZiA0LCB1bnJvbGwgdGhlIGxvb3AKLSAgICAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdlIGFy
ZSBub256ZXJvCi0gICAgICAgICJhbmQgJDMsICVxW2NvdW50ZXJdXHRcbiIKLSAgICAgICAgImp6
IDIwMGZcdFxuIiAvLyB1bnJvbGxlZCBsb29wCi0KLSAgICAgICAgIm5lZ3EgJXFbY291bnRlcl1c
dFxuIgotICAgICAgICAiLmJhbGlnbiAzMlx0XG4iCi0gICAgICAgICIxMDE6XHRcbiIKLSAgICAg
ICAgIm1vdiAoJXFbc3JjXSwgJXFbaV0sIDQpLCAla1t0bXBdXHRcbiIKLSAgICAgICAgIm1vdiAl
a1t0bXBdLCAoJXFbZHN0XSwgJXFbaV0sIDQpXHRcbiIKLSAgICAgICAgImluY3EgJXFbaV1cdFxu
IgotICAgICAgICAiaW5jcSAlcVtjb3VudGVyXVx0XG4iCi0gICAgICAgICJqbnogMTAxYlx0XG4i
Ci0gICAgICAgIC8vIERvIHdlIHN0aWxsIGhhdmUgYW55dGhpbmcgbGVmdD8KLSAgICAgICAgImNt
cHEgJXFbc2l6ZV0sICVxW2ldXHRcbiIKLSAgICAgICAgImplIDkwMGZcdFxuIiAvLyBleGl0Ci0g
ICAgICAgIC8vIFRoZW4gZ28gdG8gdGhlIHVucm9sbGVkIGxvb3AKLSAgICAgICAgImptcCAyMDBm
XHRcbiIKLQotICAgICAgICAvLyBVbnJvbGxlZCBsb29wIChhc3N1bWVzIG11bHRpcGxlIG9mIDQs
IGNhbiBkbyBvbmUgaXRlcmF0aW9uKQotICAgICAgICAiMjAwOlx0XG4iCi0gICAgICAgICJzaHIg
JDIsICVxW2NvdW50ZXJdXHRcbiIKLSAgICAgICAgIm5lZ3EgJXFbY291bnRlcl1cdFxuIgotICAg
ICAgICAiLmJhbGlnbiAzMlx0XG4iCi0gICAgICAgICIyMDE6XHRcbiIKLSAgICAgICAgIm1vdiAo
JXFbc3JjXSwgJXFbaV0sIDQpLCAla1t0bXBdXHRcbiIKLSAgICAgICAgIm1vdiAla1t0bXBdLCAo
JXFbZHN0XSwgJXFbaV0sIDQpXHRcbiIKLSAgICAgICAgIm1vdiA0KCVxW3NyY10sICVxW2ldLCA0
KSwgJWtbdG1wMl1cdFxuIgotICAgICAgICAibW92ICVrW3RtcDJdLCA0KCVxW2RzdF0sICVxW2ld
LCA0KVx0XG4iCi0gICAgICAgICJtb3YgOCglcVtzcmNdLCAlcVtpXSwgNCksICVrW3RtcDJdXHRc
biIKLSAgICAgICAgIm1vdiAla1t0bXAyXSwgOCglcVtkc3RdLCAlcVtpXSwgNClcdFxuIgotICAg
ICAgICAibW92IDEyKCVxW3NyY10sICVxW2ldLCA0KSwgJWtbdG1wXVx0XG4iCi0gICAgICAgICJt
b3YgJWtbdG1wXSwgMTIoJXFbZHN0XSwgJXFbaV0sIDQpXHRcbiIKLSAgICAgICAgImFkZHEgJDQs
ICVxW2ldXHRcbiIKLSAgICAgICAgImNtcHEgJXFbc2l6ZV0sICVxW2ldXHRcbiIKLSAgICAgICAg
ImpiIDIwMWJcdFxuIgotICAgICAgICAiam1wIDkwMGZcdFxuIiAvLyBleGl0Ci0KLSAgICAgICAg
Ly8gc2ltZCBubyBvdmVybGFwCi0gICAgICAgIC8vIGNvdW50ZXIgPSAtKHNpemUvOCk7Ci0gICAg
ICAgICI1MDA6XHRcbiIKLSAgICAgICAgIm1vdiAlcVtzaXplXSwgJXFbY291bnRlcl1cdFxuIgot
ICAgICAgICAic2hycSAkMywgJXFbY291bnRlcl1cdFxuIgotICAgICAgICAibmVncSAlcVtjb3Vu
dGVyXVx0XG4iCi0gICAgICAgICIuYmFsaWduIDMyXHRcbiIKLSAgICAgICAgIjUwMTpcdFxuIgot
ICAgICAgICAibW92dXBzICglcVtzcmNdLCAlcVtpXSwgNCksICUleG1tMFx0XG4iCi0gICAgICAg
ICJtb3Z1cHMgMTYoJXFbc3JjXSwgJXFbaV0sIDQpLCAlJXhtbTFcdFxuIgotICAgICAgICAibW92
dXBzICUleG1tMCwgKCVxW2RzdF0sICVxW2ldLCA0KVx0XG4iCi0gICAgICAgICJtb3Z1cHMgJSV4
bW0xLCAxNiglcVtkc3RdLCAlcVtpXSwgNClcdFxuIgotICAgICAgICAiYWRkcSAkOCwgJXFbaV1c
dFxuIgotICAgICAgICAiaW5jcSAlcVtjb3VudGVyXVx0XG4iCi0gICAgICAgICJqbnogNTAxYlx0
XG4iCi0gICAgICAgIC8vIGlmIChpID09IHNpemUpCi0gICAgICAgICJjbXBxICVxW3NpemVdLCAl
cVtpXVx0XG4iCi0gICAgICAgICJqZSA5MDBmXHRcbiIgLy8gZW5kCi0gICAgICAgICJqbXAgMTAw
Ylx0XG4iIC8vIGJhY2twb3JjaAotICAgICAgICAiOTAwOlx0XG4iCi0gICAgOiBbaV0gIj0mYyIg
KGkpLCBbY291bnRlcl0gIj0mciIgKGNvdW50ZXIpLCBbdG1wXSAiPSZhIiAodG1wKSwgIFt0bXAy
XSAiPSZyIiAodG1wMikKLSAgICA6IFtkc3RdICJEIiAoZHN0KSwgW3NyY10gIlMiIChzcmMpLCBb
c2l6ZV0gInIiIChzaXplKQotICAgIDogInhtbTAiLCAieG1tMSIpOwotfQotCi1KU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZhc3RGb3J3YXJkQ29weTMyLCB2b2lkLCAodWludDMy
X3QqLCBjb25zdCB1aW50MzJfdCosIHNpemVfdCkpOwotI2VuZGlmCi0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMwotCi0jZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCmluZGV4IDlkYTgxZWMzNTA1OTg3NzhlMDY3OWYwYzQ1OGEyMTNiN2IxNWU5MDAu
LmY1MTkzN2Q5NTM5NmYzNzk4ZjMxNmYwOTAwNGQxMTAzMWUzNWExZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmgKQEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlICJCM01vdmVDb25zdGFu
dHMuaCIKICNpbmNsdWRlICJCM05hdGl2ZVRyYWl0cy5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCi0jaW5jbHVkZSAiQjNSZWR1Y2VMb29wU3RyZW5ndGguaCIKICNpbmNsdWRlICJCM1JlZHVj
ZVN0cmVuZ3RoLmgiCiAjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKQEAgLTExNTQsNyArMTE1Myw2IEBAIHZvaWQgYWRk
QXRvbWljVGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKCk+Pj4mKTsKIHZvaWQgYWRkTG9hZFRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+Jik7CiB2b2lkIGFkZFR1cGxlVGVzdHMoY29uc3Qg
Y2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mKTsKIAotdm9p
ZCB0ZXN0RmFzdEZvcndhcmRDb3B5MzIoKTsKIHZvaWQgdGVzdEJ5dGVDb3B5TG9vcCgpOwogdm9p
ZCB0ZXN0Qnl0ZUNvcHlMb29wU3RhcnRJc0xvb3BEZXBlbmRlbnQoKTsKIHZvaWQgdGVzdEJ5dGVD
b3B5TG9vcEJvdW5kSXNMb29wRGVwZW5kZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzXzguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
M184LmNwcAppbmRleCA1YWUzNTFjNTc2OTE5ZGY1NGIyN2U0NjNmMDYxM2EyNWVhOTY4NDEwLi43
YWMxZTlmMTU0YmNlZWEyN2I1ZDFmMzY5NjVkOGMwNDAyYjk0ZDhlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjNfOC5jcHAKQEAgLTkzNiw2NSArOTM2LDYgQEAgdm9pZCBhZGRMb2FkVGVz
dHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4m
IHRhc2tzKQogICAgIFJVTih0ZXN0TG9hZDx1aW50MTZfdD4oTG9hZDE2WiwgLTEwMDAwMDAwMDAp
KTsKIH0KIAotdm9pZCB0ZXN0RmFzdEZvcndhcmRDb3B5MzIoKQotewotI2lmIENQVShYODZfNjQp
Ci0gICAgZm9yIChjb25zdCBib29sIGFsaWduZWQgOiB7IHRydWUsIGZhbHNlIH0pIHsKLSAgICAg
ICAgZm9yIChjb25zdCBib29sIG92ZXJsYXAgOiB7IGZhbHNlLCB0cnVlIH0pIHsKLSAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGFycnNpemUgOiB7IDEsIDQsIDUsIDYsIDgsIDEwLCAxMiwgMTYsIDIw
LCA0MCwgMTAwLCAxMDAwfSkgewotICAgICAgICAgICAgICAgIHNpemVfdCBvdmVybGFwQW1vdW50
ID0gNTsKLQotICAgICAgICAgICAgICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBhcnJheTEsIGFy
cmF5MjsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCogYXJyMSwgKmFycjI7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAob3ZlcmxhcCkgewotICAgICAgICAgICAgICAgICAgICBhcnJheTEgPSBtYWtl
VW5pcXVlQXJyYXk8dWludDMyX3Q+KGFycnNpemUgKiAyKTsKLSAgICAgICAgICAgICAgICAgICAg
YXJyMSA9ICZhcnJheTFbMF07Ci0gICAgICAgICAgICAgICAgICAgIGFycjIgPSBhcnIxICsgKGFy
cnNpemUgLSBvdmVybGFwQW1vdW50KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBhcnJheTEgPSBtYWtlVW5pcXVlQXJyYXk8dWludDMyX3Q+KGFycnNpemUp
OwotICAgICAgICAgICAgICAgICAgICBhcnJheTIgPSBtYWtlVW5pcXVlQXJyYXk8dWludDMyX3Q+
KGFycnNpemUpOwotICAgICAgICAgICAgICAgICAgICBhcnIxID0gJmFycmF5MVswXTsKLSAgICAg
ICAgICAgICAgICAgICAgYXJyMiA9ICZhcnJheTJbMF07Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKCFhbGlnbmVkICYmIGFycnNpemUgPCAzKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcCAmJiBhcnJzaXpl
IDw9IG92ZXJsYXBBbW91bnQgKyAzKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgICAgIGlmICghYWxpZ25lZCkgewotICAgICAgICAgICAgICAgICAgICArK2Fy
cjE7Ci0gICAgICAgICAgICAgICAgICAgICsrYXJyMjsKLSAgICAgICAgICAgICAgICAgICAgYXJy
c2l6ZSAtPSAxOwotICAgICAgICAgICAgICAgICAgICBvdmVybGFwQW1vdW50IC09IDE7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
cnJzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIGFycjFbaV0gPSBpOwotCi0gICAgICAg
ICAgICAgICAgZmFzdEZvcndhcmRDb3B5MzIoYXJyMiwgYXJyMSwgYXJyc2l6ZSk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAob3ZlcmxhcCkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFycnNpemUgLSBvdmVybGFwQW1vdW50OyArK2kpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBDSEVDSyhhcnIyW2ldID09IGkpOwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gYXJyc2l6ZSAtIG92ZXJsYXBBbW91bnQ7IGkgPCBhcnJzaXplOyArK2kpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBDSEVDSyhhcnIyW2ldID09IGkgLSAoYXJyc2l6ZSAtIG92
ZXJsYXBBbW91bnQpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycnNpemU7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENIRUNLKGFycjJbaV0gPT0gaSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKCFhbGlnbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIC0tYXJyMTsK
LSAgICAgICAgICAgICAgICAgICAgLS1hcnIyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotfQotCiB2b2lkIHRlc3RCeXRlQ29weUxv
b3AoKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMTE2NCw3ICsxMTA1LDYgQEAgdm9pZCB0
ZXN0Qnl0ZUNvcHlMb29wQm91bmRJc0xvb3BEZXBlbmRlbnQoKQogCiB2b2lkIGFkZENvcHlUZXN0
cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYg
dGFza3MpCiB7Ci0gICAgUlVOKHRlc3RGYXN0Rm9yd2FyZENvcHkzMigpKTsKICAgICBSVU4odGVz
dEJ5dGVDb3B5TG9vcCgpKTsKICAgICBSVU4odGVzdEJ5dGVDb3B5TG9vcFN0YXJ0SXNMb29wRGVw
ZW5kZW50KCkpOwogICAgIFJVTih0ZXN0Qnl0ZUNvcHlMb29wQm91bmRJc0xvb3BEZXBlbmRlbnQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ01lbW9yeU9wZXJh
dGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDTWVtb3J5T3BlcmF0aW9ucy5o
CmluZGV4IDVkOTI2MzJjMGJmMDRjMjFlMjc0NjUxMDRhNTExNGFmMWU2ODhkMmIuLmU4OWIwMGFk
NzUwMWMxODJkMjQ3NDdjMDEyZDE4OTdhYzljMmNjNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDTWVtb3J5T3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDTWVtb3J5T3BlcmF0aW9ucy5oCkBAIC00MCw3ICs0MCw3IEBAIGNvbnN0
ZXhwciBzaXplX3QgbWVkaXVtQ3V0b2ZmID0gNCAqIDEwMjQ7CiAKIC8vIFRoaXMgaXMgYSBmb3J3
YXJkcyBsb29wIHNvIGdjU2FmZU1lbW1vdmUgY2FuIHJlbHkgb24gdGhlIGRpcmVjdGlvbi4gCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgdm9pZCBnY1NhZmVNZW1jcHkoVCog
ZHN0LCBUKiBzcmMsIHNpemVfdCBieXRlcykKK0FMV0FZU19JTkxJTkUgdm9pZCBnY1NhZmVNZW1j
cHkoVCogZHN0LCBjb25zdCBUKiBzcmMsIHNpemVfdCBieXRlcykKIHsKICAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihUKSA9PSBzaXplb2YoSlNWYWx1ZSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJ5
dGVzICUgOCA9PSAwKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgZ2NT
YWZlTWVtY3B5KFQqIGRzdCwgVCogc3JjLCBzaXplX3QgYnl0ZXMpCiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSB2b2lkIGdjU2FmZU1lbW1vdmUoVCogZHN0LCBUKiBz
cmMsIHNpemVfdCBieXRlcykKK0FMV0FZU19JTkxJTkUgdm9pZCBnY1NhZmVNZW1tb3ZlKFQqIGRz
dCwgY29uc3QgVCogc3JjLCBzaXplX3QgYnl0ZXMpCiB7CiAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoVCkgPT0gc2l6ZW9mKEpTVmFsdWUpKTsKICAgICBSRUxFQVNFX0FTU0VSVChieXRlcyAlIDgg
PT0gMCk7Cg==
</data>
<flag name="review"
          id="467827"
          type_id="1"
          status="?"
          setter="justin_michaud"
    />
          </attachment>
      

    </bug>

</bugzilla>