<?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>183054</bug_id>
          
          <creation_ts>2018-02-22 12:20:46 -0800</creation_ts>
          <short_desc>Refactor MacroAssembler code to improve reuse and extensibility.</short_desc>
          <delta_ts>2018-02-22 13:54:10 -0800</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 Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1401505</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-02-22 12:20:46 -0800</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401506</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-02-22 12:21:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/37797337&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401514</commentid>
    <comment_count>2</comment_count>
      <attachid>334468</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-02-22 12:43:01 -0800</bug_when>
    <thetext>Created attachment 334468
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401517</commentid>
    <comment_count>3</comment_count>
      <attachid>334468</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-02-22 12:49:03 -0800</bug_when>
    <thetext>Comment on attachment 334468
proposed patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401541</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-02-22 13:54:10 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r228932: &lt;http://trac.webkit.org/r228932&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334468</attachid>
            <date>2018-02-22 12:43:01 -0800</date>
            <delta_ts>2018-02-22 12:49:03 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-183054.patch</filename>
            <type>text/plain</type>
            <size>53553</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI4OTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDE4LTAyLTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWZhY3RvciBNYWNyb0Fzc2VtYmxlciBjb2RlIHRvIGltcHJvdmUgcmV1c2UgYW5kIGV4dGVuc2li
aWxpdHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
ODMwNTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM3Nzk3MzM3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYXNzZW1ibGVyL0FSTTY0QXNzZW1i
bGVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcDoKKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk0uaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpjYW5Db21wYWN0KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6Y29tcHV0ZUp1bXBUeXBlKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6anVtcFNpemVEZWx0YSk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxpbmspOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTTY0Ojpsb2FkNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2Fk
NjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6bG9hZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZDMy
V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
NjQ6OmxvYWQxNik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxvYWQxNlNp
Z25lZEV4dGVuZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2Fk
OCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxvYWQ4U2lnbmVkRXh0ZW5k
VG8zMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN0b3JlNjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQ
YXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN0b3JlMzIpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQ
YXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN0b3JlMTYpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdG9yZTgpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTY0OjpnZXRFZmZlY3RpdmVBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk02NDo6YnJhbmNoRG91YmxlTm9uWmVybyk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmJyYW5jaERvdWJsZVplcm9Pck5hTik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxvYWREb3VibGUpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkRmxvYXQpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0Ojptb3ZlQ29uZGl0aW9uYWxseUFmdGVyRmxvYXRpbmdQb2ludENvbXBh
cmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojptb3ZlRG91YmxlQ29uZGl0
aW9uYWxseUFmdGVyRmxvYXRpbmdQb2ludENvbXBhcmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckFSTTY0OjpzdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNNjQ6OnN0b3JlRmxvYXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpj
YWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6anVtcCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnRhaWxSZWN1cnNpdmVDYWxsKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c2V0Q2FycnkpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpyZWVtaXRJbml0aWFsTW92ZVdpdGhQYXRjaCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmlzQnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNNjQ6OmludmVydCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNNjQ6OnJlYWRDYWxsVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6cmVwbGFjZVdpdGhWTUhhbHQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
OjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpt
YXhKdW1wUmVwbGFjZW1lbnRTaXplKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6cGF0Y2hhYmxlSnVtcFNpemUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
OjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om1ha2VC
cmFuY2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjptYWtlQ29tcGFyZUFu
ZEJyYW5jaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om1ha2VUZXN0Qml0
QW5kQnJhbmNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6QVJNNjRDb25k
aXRpb24pOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojptb3ZlV2l0aEZpeGVk
V2lkdGgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmUpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0Ojp0cnlMb2FkV2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNNjQ6OnRyeUxvYWRTaWduZWRXaXRoT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk02NDo6dHJ5U3RvcmVXaXRoT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk02NDo6anVtcEFmdGVyRmxvYXRpbmdQb2ludENvbXBhcmUpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJNSVBTLmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgICogYXNzZW1ibGVyL1Byb2JlU3RhY2suaDoKKyAgICAgICAgLSBSZW1v
dmVkIGEgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBhbiBvYnNvbGV0ZSBjbGFzcy4KKwogMjAxOC0w
Mi0yMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgc2xlZXAoZG91YmxlKSBhbmQgc2xlZXBNUyhkb3VibGUpIGludGVyZmFjZXMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJ
KHJldmlzaW9uIDIyODkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJN
NjRBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwOCw3ICszMDgsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBuYW1lRm9yUmVnaXN0ZXJbaWRdOwogICAgIH0KIAotcHJpdmF0ZToK
K3Byb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNTcChSZWdpc3RlcklEIHJl
ZykgeyByZXR1cm4gQVJNNjRSZWdpc3RlcnM6OmlzU3AocmVnKTsgfQogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc1pyKFJlZ2lzdGVySUQgcmVnKSB7IHJldHVybiBBUk02NFJlZ2lzdGVyczo6
aXNacihyZWcpOyB9CiAKQEAgLTUxNSw3ICs1MTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBpc1ZhbGlkU2lnbmVkSW1tOShvZmZzZXQpOwogICAgIH0KIAotcHJpdmF0ZToKK3Byb3RlY3Rl
ZDoKICAgICBpbnQgZW5jb2RlRlBJbW0oZG91YmxlIGQpCiAgICAgewogICAgICAgICBBU1NFUlQo
Y2FuRW5jb2RlRlBJbW0oZCkpOwpAQCAtMjk4OSw3ICsyOTg5LDcgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIHRlbXBsYXRlPERhdGFzaXpl
IHNpemU+CiAgICAgc3RhdGljIGJvb2wgY2hlY2tNb3ZrKGludCBpbnNuLCBpbnQgX2h3LCBSZWdp
c3RlcklEIF9yZCkKICAgICB7CkBAIC0zNzU0LDYgKzM3NTQsOSBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxMaW5rUmVjb3JkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9qdW1wc1RvTGluazsK
ICAgICBpbnQgbV9pbmRleE9mTGFzdFdhdGNocG9pbnQ7CiAgICAgaW50IG1faW5kZXhPZlRhaWxP
Zkxhc3RXYXRjaHBvaW50OworCitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3QgTUFYX1BPSU5URVJfQklUUyA9IDQ4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmNwcAkocmV2aXNpb24gMjI4OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMywxMCBAQAog
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEu
aD4KIAorI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIF9faGFzX2luY2x1ZGUoPFdlYktp
dEFkZGl0aW9ucy9NYWNyb0Fzc2VtYmxlclN1cHBvcnQuaD4pCisjaW5jbHVkZSA8V2ViS2l0QWRk
aXRpb25zL01hY3JvQXNzZW1ibGVyU3VwcG9ydC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJsZXI6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4
MTAwMDAwMDAwdWxsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjI4OTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwz
MCArMzAsMzUgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAKICNpZiBDUFUoQVJNX1RIVU1C
MikKKyNkZWZpbmUgVEFSR0VUX0FTU0VNQkxFUiBBUk12N0Fzc2VtYmxlcgorI2RlZmluZSBUQVJH
RVRfTUFDUk9BU1NFTUJMRVIgTWFjcm9Bc3NlbWJsZXJBUk12NwogI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyQVJNdjcuaCIKIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQVJN
djcgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogCiAjZWxpZiBDUFUoQVJNNjQpCisjZGVmaW5lIFRB
UkdFVF9BU1NFTUJMRVIgQVJNNjRBc3NlbWJsZXIKKyNkZWZpbmUgVEFSR0VUX01BQ1JPQVNTRU1C
TEVSIE1hY3JvQXNzZW1ibGVyQVJNNjQKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckFSTTY0Lmgi
Ci1uYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckFSTTY0IE1hY3JvQXNzZW1i
bGVyQmFzZTsgfTsKIAogI2VsaWYgQ1BVKEFSTV9UUkFESVRJT05BTCkKKyNkZWZpbmUgVEFSR0VU
X0FTU0VNQkxFUiBBUk1Bc3NlbWJsZXIKKyNkZWZpbmUgVEFSR0VUX01BQ1JPQVNTRU1CTEVSIE1h
Y3JvQXNzZW1ibGVyQVJNCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJBUk0uaCIKLW5hbWVzcGFj
ZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQVJNIE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsK
IAogI2VsaWYgQ1BVKE1JUFMpCisjZGVmaW5lIFRBUkdFVF9BU1NFTUJMRVIgTUlQU0Fzc2VtYmxl
cgorI2RlZmluZSBUQVJHRVRfTUFDUk9BU1NFTUJMRVIgTWFjcm9Bc3NlbWJsZXJNSVBTCiAjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXJNSVBTLmgiCi1uYW1lc3BhY2UgSlNDIHsKLXR5cGVkZWYgTWFj
cm9Bc3NlbWJsZXJNSVBTIE1hY3JvQXNzZW1ibGVyQmFzZTsKLX07CiAKICNlbGlmIENQVShYODYp
CisjZGVmaW5lIFRBUkdFVF9BU1NFTUJMRVIgWDg2QXNzZW1ibGVyCisjZGVmaW5lIFRBUkdFVF9N
QUNST0FTU0VNQkxFUiBNYWNyb0Fzc2VtYmxlclg4NgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
WDg2LmgiCi1uYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4NiBNYWNyb0Fz
c2VtYmxlckJhc2U7IH07CiAKICNlbGlmIENQVShYODZfNjQpCisjZGVmaW5lIFRBUkdFVF9BU1NF
TUJMRVIgWDg2QXNzZW1ibGVyCisjZGVmaW5lIFRBUkdFVF9NQUNST0FTU0VNQkxFUiBNYWNyb0Fz
c2VtYmxlclg4Nl82NAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyWDg2XzY0LmgiCi1uYW1lc3Bh
Y2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4Nl82NCBNYWNyb0Fzc2VtYmxlckJhc2U7
IH07CiAKICNlbHNlCiAjZXJyb3IgIlRoZSBNYWNyb0Fzc2VtYmxlciBpcyBub3Qgc3VwcG9ydGVk
IG9uIHRoaXMgcGxhdGZvcm0uIgpAQCAtODYsNiArOTEsOCBAQCB0eXBlZGVmIFZlY3RvcjxQcmlu
dFJlY29yZD4gUHJpbnRSZWNvcmRMCiAKIH0gLy8gbmFtZXNwYWNlIFByaW50ZXIKIAordXNpbmcg
TWFjcm9Bc3NlbWJsZXJCYXNlID0gVEFSR0VUX01BQ1JPQVNTRU1CTEVSOworCiBjbGFzcyBNYWNy
b0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlckJhc2UgewogcHVibGljOgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAkocmV2aXNpb24gMjI4OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIE1hY3JvQXNzZW1ibGVyQVJNNjQgOiBw
dWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBUk02NEFzc2VtYmxlcj4gewordXNpbmcgQXNz
ZW1ibGVyID0gVEFSR0VUX0FTU0VNQkxFUjsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk02NCA6
IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlcj4gewogcHVibGljOgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1HUFJzID0gMzI7CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG51bUZQUnMgPSAzMjsKQEAgLTQ4LDE2ICs1MCwxOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CiAgICAg
fQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCBBUk02NFJlZ2lzdGVy
czo6RlBSZWdpc3RlcklEIGZwVGVtcFJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6OnEzMTsKLSAg
ICBzdGF0aWMgY29uc3QgQVJNNjRBc3NlbWJsZXI6OlNldEZsYWdzIFMgPSBBUk02NEFzc2VtYmxl
cjo6UzsKKyAgICBzdGF0aWMgY29uc3QgQXNzZW1ibGVyOjpTZXRGbGFncyBTID0gQXNzZW1ibGVy
OjpTOwogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBtYXNrSGFsZldvcmQwID0gMHhmZmZmbDsK
ICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgbWFza0hhbGZXb3JkMSA9IDB4ZmZmZjAwMDBsOwog
ICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBtYXNrVXBwZXJXb3JkID0gMHhmZmZmZmZmZjAwMDAw
MDAwbDsKIAotICAgIC8vIDQgaW5zdHJ1Y3Rpb25zIC0gMyB0byBsb2FkIHRoZSBmdW5jdGlvbiBw
b2ludGVyLCArIGJsci4KLSAgICBzdGF0aWMgY29uc3QgcHRyZGlmZl90IFJFUEFUQ0hfT0ZGU0VU
X0NBTExfVE9fUE9JTlRFUiA9IC0xNjsKLSAgICAKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBJTlNUUlVDVElPTl9TSVpFID0gNDsKKworICAgIC8vIE4gaW5zdHJ1Y3Rpb25zIHRvIGxvYWQg
dGhlIHBvaW50ZXIgKyAxIGNhbGwgaW5zdHJ1Y3Rpb24uCisgICAgc3RhdGljIGNvbnN0ZXhwciBw
dHJkaWZmX3QgUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSID0gLSgoQXNzZW1ibGVyOjpN
QVhfUE9JTlRFUl9CSVRTIC8gMTYgKyAxKSAqIElOU1RSVUNUSU9OX1NJWkUpOworCiBwdWJsaWM6
CiAgICAgTWFjcm9Bc3NlbWJsZXJBUk02NCgpCiAgICAgICAgIDogbV9kYXRhTWVtb3J5VGVtcFJl
Z2lzdGVyKHRoaXMsIGRhdGFUZW1wUmVnaXN0ZXIpCkBAIC02NiwyMSArNzAsMjEgQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAKLSAgICB0eXBlZGVmIEFSTTY0QXNzZW1ibGVyOjpMaW5rUmVjb3Jk
IExpbmtSZWNvcmQ7Ci0gICAgdHlwZWRlZiBBUk02NEFzc2VtYmxlcjo6SnVtcFR5cGUgSnVtcFR5
cGU7Ci0gICAgdHlwZWRlZiBBUk02NEFzc2VtYmxlcjo6SnVtcExpbmtUeXBlIEp1bXBMaW5rVHlw
ZTsKLSAgICB0eXBlZGVmIEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb24gQ29uZGl0aW9uOworICAg
IHR5cGVkZWYgQXNzZW1ibGVyOjpMaW5rUmVjb3JkIExpbmtSZWNvcmQ7CisgICAgdHlwZWRlZiBB
c3NlbWJsZXI6Okp1bXBUeXBlIEp1bXBUeXBlOworICAgIHR5cGVkZWYgQXNzZW1ibGVyOjpKdW1w
TGlua1R5cGUgSnVtcExpbmtUeXBlOworICAgIHR5cGVkZWYgQXNzZW1ibGVyOjpDb25kaXRpb24g
Q29uZGl0aW9uOwogCi0gICAgc3RhdGljIGNvbnN0IEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb24g
RGVmYXVsdENvbmRpdGlvbiA9IEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb25JbnZhbGlkOwotICAg
IHN0YXRpYyBjb25zdCBBUk02NEFzc2VtYmxlcjo6SnVtcFR5cGUgRGVmYXVsdEp1bXAgPSBBUk02
NEFzc2VtYmxlcjo6SnVtcE5vQ29uZGl0aW9uRml4ZWRTaXplOworICAgIHN0YXRpYyBjb25zdCBB
c3NlbWJsZXI6OkNvbmRpdGlvbiBEZWZhdWx0Q29uZGl0aW9uID0gQXNzZW1ibGVyOjpDb25kaXRp
b25JbnZhbGlkOworICAgIHN0YXRpYyBjb25zdCBBc3NlbWJsZXI6Okp1bXBUeXBlIERlZmF1bHRK
dW1wID0gQXNzZW1ibGVyOjpKdW1wTm9Db25kaXRpb25GaXhlZFNpemU7CiAKICAgICBWZWN0b3I8
TGlua1JlY29yZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBqdW1wc1RvTGluaygpIHsgcmV0
dXJuIG1fYXNzZW1ibGVyLmp1bXBzVG9MaW5rKCk7IH0KICAgICB2b2lkKiB1bmxpbmtlZENvZGUo
KSB7IHJldHVybiBtX2Fzc2VtYmxlci51bmxpbmtlZENvZGUoKTsgfQotICAgIHN0YXRpYyBib29s
IGNhbkNvbXBhY3QoSnVtcFR5cGUganVtcFR5cGUpIHsgcmV0dXJuIEFSTTY0QXNzZW1ibGVyOjpj
YW5Db21wYWN0KGp1bXBUeXBlKTsgfQotICAgIHN0YXRpYyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1
bXBUeXBlKEp1bXBUeXBlIGp1bXBUeXBlLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50
OF90KiB0bykgeyByZXR1cm4gQVJNNjRBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZShqdW1wVHlw
ZSwgZnJvbSwgdG8pOyB9Ci0gICAgc3RhdGljIEp1bXBMaW5rVHlwZSBjb21wdXRlSnVtcFR5cGUo
TGlua1JlY29yZCYgcmVjb3JkLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0
bykgeyByZXR1cm4gQVJNNjRBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZShyZWNvcmQsIGZyb20s
IHRvKTsgfQotICAgIHN0YXRpYyBpbnQganVtcFNpemVEZWx0YShKdW1wVHlwZSBqdW1wVHlwZSwg
SnVtcExpbmtUeXBlIGp1bXBMaW5rVHlwZSkgeyByZXR1cm4gQVJNNjRBc3NlbWJsZXI6Omp1bXBT
aXplRGVsdGEoanVtcFR5cGUsIGp1bXBMaW5rVHlwZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBsaW5r
KExpbmtSZWNvcmQmIHJlY29yZCwgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogZnJvbUlu
c3RydWN0aW9uLCB1aW50OF90KiB0bykgeyByZXR1cm4gQVJNNjRBc3NlbWJsZXI6OmxpbmsocmVj
b3JkLCBmcm9tLCBmcm9tSW5zdHJ1Y3Rpb24sIHRvKTsgfQorICAgIHN0YXRpYyBib29sIGNhbkNv
bXBhY3QoSnVtcFR5cGUganVtcFR5cGUpIHsgcmV0dXJuIEFzc2VtYmxlcjo6Y2FuQ29tcGFjdChq
dW1wVHlwZSk7IH0KKyAgICBzdGF0aWMgSnVtcExpbmtUeXBlIGNvbXB1dGVKdW1wVHlwZShKdW1w
VHlwZSBqdW1wVHlwZSwgY29uc3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pIHsg
cmV0dXJuIEFzc2VtYmxlcjo6Y29tcHV0ZUp1bXBUeXBlKGp1bXBUeXBlLCBmcm9tLCB0byk7IH0K
KyAgICBzdGF0aWMgSnVtcExpbmtUeXBlIGNvbXB1dGVKdW1wVHlwZShMaW5rUmVjb3JkJiByZWNv
cmQsIGNvbnN0IHVpbnQ4X3QqIGZyb20sIGNvbnN0IHVpbnQ4X3QqIHRvKSB7IHJldHVybiBBc3Nl
bWJsZXI6OmNvbXB1dGVKdW1wVHlwZShyZWNvcmQsIGZyb20sIHRvKTsgfQorICAgIHN0YXRpYyBp
bnQganVtcFNpemVEZWx0YShKdW1wVHlwZSBqdW1wVHlwZSwgSnVtcExpbmtUeXBlIGp1bXBMaW5r
VHlwZSkgeyByZXR1cm4gQXNzZW1ibGVyOjpqdW1wU2l6ZURlbHRhKGp1bXBUeXBlLCBqdW1wTGlu
a1R5cGUpOyB9CisgICAgc3RhdGljIHZvaWQgbGluayhMaW5rUmVjb3JkJiByZWNvcmQsIHVpbnQ4
X3QqIGZyb20sIGNvbnN0IHVpbnQ4X3QqIGZyb21JbnN0cnVjdGlvbiwgdWludDhfdCogdG8pIHsg
cmV0dXJuIEFzc2VtYmxlcjo6bGluayhyZWNvcmQsIGZyb20sIGZyb21JbnN0cnVjdGlvbiwgdG8p
OyB9CiAKICAgICBzdGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0VpZ2h0OwogCkBA
IC05MSw0NiArOTUsNDYgQEAgcHVibGljOgogICAgIH0KIAogICAgIGVudW0gUmVsYXRpb25hbENv
bmRpdGlvbiB7Ci0gICAgICAgIEVxdWFsID0gQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvbkVRLAot
ICAgICAgICBOb3RFcXVhbCA9IEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb25ORSwKLSAgICAgICAg
QWJvdmUgPSBBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uSEksCi0gICAgICAgIEFib3ZlT3JFcXVh
bCA9IEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb25IUywKLSAgICAgICAgQmVsb3cgPSBBUk02NEFz
c2VtYmxlcjo6Q29uZGl0aW9uTE8sCi0gICAgICAgIEJlbG93T3JFcXVhbCA9IEFSTTY0QXNzZW1i
bGVyOjpDb25kaXRpb25MUywKLSAgICAgICAgR3JlYXRlclRoYW4gPSBBUk02NEFzc2VtYmxlcjo6
Q29uZGl0aW9uR1QsCi0gICAgICAgIEdyZWF0ZXJUaGFuT3JFcXVhbCA9IEFSTTY0QXNzZW1ibGVy
OjpDb25kaXRpb25HRSwKLSAgICAgICAgTGVzc1RoYW4gPSBBUk02NEFzc2VtYmxlcjo6Q29uZGl0
aW9uTFQsCi0gICAgICAgIExlc3NUaGFuT3JFcXVhbCA9IEFSTTY0QXNzZW1ibGVyOjpDb25kaXRp
b25MRQorICAgICAgICBFcXVhbCA9IEFzc2VtYmxlcjo6Q29uZGl0aW9uRVEsCisgICAgICAgIE5v
dEVxdWFsID0gQXNzZW1ibGVyOjpDb25kaXRpb25ORSwKKyAgICAgICAgQWJvdmUgPSBBc3NlbWJs
ZXI6OkNvbmRpdGlvbkhJLAorICAgICAgICBBYm92ZU9yRXF1YWwgPSBBc3NlbWJsZXI6OkNvbmRp
dGlvbkhTLAorICAgICAgICBCZWxvdyA9IEFzc2VtYmxlcjo6Q29uZGl0aW9uTE8sCisgICAgICAg
IEJlbG93T3JFcXVhbCA9IEFzc2VtYmxlcjo6Q29uZGl0aW9uTFMsCisgICAgICAgIEdyZWF0ZXJU
aGFuID0gQXNzZW1ibGVyOjpDb25kaXRpb25HVCwKKyAgICAgICAgR3JlYXRlclRoYW5PckVxdWFs
ID0gQXNzZW1ibGVyOjpDb25kaXRpb25HRSwKKyAgICAgICAgTGVzc1RoYW4gPSBBc3NlbWJsZXI6
OkNvbmRpdGlvbkxULAorICAgICAgICBMZXNzVGhhbk9yRXF1YWwgPSBBc3NlbWJsZXI6OkNvbmRp
dGlvbkxFCiAgICAgfTsKIAogICAgIGVudW0gUmVzdWx0Q29uZGl0aW9uIHsKLSAgICAgICAgT3Zl
cmZsb3cgPSBBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uVlMsCi0gICAgICAgIFNpZ25lZCA9IEFS
TTY0QXNzZW1ibGVyOjpDb25kaXRpb25NSSwKLSAgICAgICAgUG9zaXRpdmVPclplcm8gPSBBUk02
NEFzc2VtYmxlcjo6Q29uZGl0aW9uUEwsCi0gICAgICAgIFplcm8gPSBBUk02NEFzc2VtYmxlcjo6
Q29uZGl0aW9uRVEsCi0gICAgICAgIE5vblplcm8gPSBBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9u
TkUKKyAgICAgICAgT3ZlcmZsb3cgPSBBc3NlbWJsZXI6OkNvbmRpdGlvblZTLAorICAgICAgICBT
aWduZWQgPSBBc3NlbWJsZXI6OkNvbmRpdGlvbk1JLAorICAgICAgICBQb3NpdGl2ZU9yWmVybyA9
IEFzc2VtYmxlcjo6Q29uZGl0aW9uUEwsCisgICAgICAgIFplcm8gPSBBc3NlbWJsZXI6OkNvbmRp
dGlvbkVRLAorICAgICAgICBOb25aZXJvID0gQXNzZW1ibGVyOjpDb25kaXRpb25ORQogICAgIH07
CiAKICAgICBlbnVtIFplcm9Db25kaXRpb24gewotICAgICAgICBJc1plcm8gPSBBUk02NEFzc2Vt
Ymxlcjo6Q29uZGl0aW9uRVEsCi0gICAgICAgIElzTm9uWmVybyA9IEFSTTY0QXNzZW1ibGVyOjpD
b25kaXRpb25ORQorICAgICAgICBJc1plcm8gPSBBc3NlbWJsZXI6OkNvbmRpdGlvbkVRLAorICAg
ICAgICBJc05vblplcm8gPSBBc3NlbWJsZXI6OkNvbmRpdGlvbk5FCiAgICAgfTsKIAogICAgIGVu
dW0gRG91YmxlQ29uZGl0aW9uIHsKICAgICAgICAgLy8gVGhlc2UgY29uZGl0aW9ucyB3aWxsIG9u
bHkgZXZhbHVhdGUgdG8gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiBpcyBvcmRlcmVkIC0gaS5lLiBu
ZWl0aGVyIG9wZXJhbmQgaXMgTmFOLgotICAgICAgICBEb3VibGVFcXVhbCA9IEFSTTY0QXNzZW1i
bGVyOjpDb25kaXRpb25FUSwKLSAgICAgICAgRG91YmxlTm90RXF1YWwgPSBBUk02NEFzc2VtYmxl
cjo6Q29uZGl0aW9uVkMsIC8vIE5vdCB0aGUgcmlnaHQgZmxhZyEgY2hlY2sgZm9yIHRoaXMgJiBo
YW5kbGUgZGlmZmVyZW50bHkuCi0gICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuID0gQVJNNjRBc3Nl
bWJsZXI6OkNvbmRpdGlvbkdULAotICAgICAgICBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgPSBB
Uk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uR0UsCi0gICAgICAgIERvdWJsZUxlc3NUaGFuID0gQVJN
NjRBc3NlbWJsZXI6OkNvbmRpdGlvbkxPLAotICAgICAgICBEb3VibGVMZXNzVGhhbk9yRXF1YWwg
PSBBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uTFMsCisgICAgICAgIERvdWJsZUVxdWFsID0gQXNz
ZW1ibGVyOjpDb25kaXRpb25FUSwKKyAgICAgICAgRG91YmxlTm90RXF1YWwgPSBBc3NlbWJsZXI6
OkNvbmRpdGlvblZDLCAvLyBOb3QgdGhlIHJpZ2h0IGZsYWchIGNoZWNrIGZvciB0aGlzICYgaGFu
ZGxlIGRpZmZlcmVudGx5LgorICAgICAgICBEb3VibGVHcmVhdGVyVGhhbiA9IEFzc2VtYmxlcjo6
Q29uZGl0aW9uR1QsCisgICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA9IEFzc2VtYmxl
cjo6Q29uZGl0aW9uR0UsCisgICAgICAgIERvdWJsZUxlc3NUaGFuID0gQXNzZW1ibGVyOjpDb25k
aXRpb25MTywKKyAgICAgICAgRG91YmxlTGVzc1RoYW5PckVxdWFsID0gQXNzZW1ibGVyOjpDb25k
aXRpb25MUywKICAgICAgICAgLy8gSWYgZWl0aGVyIG9wZXJhbmQgaXMgTmFOLCB0aGVzZSBjb25k
aXRpb25zIGFsd2F5cyBldmFsdWF0ZSB0byB0cnVlLgotICAgICAgICBEb3VibGVFcXVhbE9yVW5v
cmRlcmVkID0gQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvblZTLCAvLyBOb3QgdGhlIHJpZ2h0IGZs
YWchIGNoZWNrIGZvciB0aGlzICYgaGFuZGxlIGRpZmZlcmVudGx5LgotICAgICAgICBEb3VibGVO
b3RFcXVhbE9yVW5vcmRlcmVkID0gQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvbk5FLAotICAgICAg
ICBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkID0gQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlv
bkhJLAotICAgICAgICBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCA9IEFSTTY0
QXNzZW1ibGVyOjpDb25kaXRpb25IUywKLSAgICAgICAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJl
ZCA9IEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb25MVCwKLSAgICAgICAgRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQgPSBBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uTEUsCisgICAgICAg
IERvdWJsZUVxdWFsT3JVbm9yZGVyZWQgPSBBc3NlbWJsZXI6OkNvbmRpdGlvblZTLCAvLyBOb3Qg
dGhlIHJpZ2h0IGZsYWchIGNoZWNrIGZvciB0aGlzICYgaGFuZGxlIGRpZmZlcmVudGx5LgorICAg
ICAgICBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkID0gQXNzZW1ibGVyOjpDb25kaXRpb25ORSwK
KyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCA9IEFzc2VtYmxlcjo6Q29uZGl0
aW9uSEksCisgICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkID0gQXNz
ZW1ibGVyOjpDb25kaXRpb25IUywKKyAgICAgICAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCA9
IEFzc2VtYmxlcjo6Q29uZGl0aW9uTFQsCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9y
VW5vcmRlcmVkID0gQXNzZW1ibGVyOjpDb25kaXRpb25MRSwKICAgICB9OwogCiAgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgc3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6
c3A7CkBAIC0xMDQ4LDEyICsxMDUyLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGxvYWQ2NChCYXNl
SW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKCFhZGRy
ZXNzLm9mZnNldCAmJiAoIWFkZHJlc3Muc2NhbGUgfHwgYWRkcmVzcy5zY2FsZSA9PSAzKSkgewot
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJl
c3MuaW5kZXgsIEFSTTY0QXNzZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4
LCBBc3NlbWJsZXI6OlVYVFgsIGFkZHJlc3Muc2NhbGUpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJl
c3Mub2Zmc2V0KSwgZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkp
OwotICAgICAgICBtX2Fzc2VtYmxlci5hZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBBUk02NEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVz
cy5zY2FsZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVy
LCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIEFzc2VtYmxlcjo6VVhUWCwgYWRk
cmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgYWRkcmVzcy5i
YXNlLCBtZW1vcnlUZW1wUmVnaXN0ZXIpOwogICAgIH0KIApAQCAtMTA3MSw3ICsxMDc1LDcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CiAgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyV2l0aEZpeGVkV2lkdGgoYWRkcmVzcy5vZmZzZXQsIGdldENhY2hl
ZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKLSAgICAgICAgbV9hc3NlbWJs
ZXIubGRyPDY0PihkZXN0LCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3RlciwgQVJNNjRB
c3NlbWJsZXI6OlNYVFcsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIGFk
ZHJlc3MuYmFzZSwgbWVtb3J5VGVtcFJlZ2lzdGVyLCBBc3NlbWJsZXI6OlNYVFcsIDApOwogICAg
ICAgICByZXR1cm4gbGFiZWw7CiAgICAgfQogICAgIApAQCAtMTEzNywxMiArMTE0MSwxMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBsb2FkMzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIGlmICghYWRkcmVzcy5vZmZzZXQgJiYgKCFhZGRyZXNzLnNjYWxl
IHx8IGFkZHJlc3Muc2NhbGUgPT0gMikpIHsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcjwz
Mj4oZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBBUk02NEFzc2VtYmxlcjo6VVhU
WCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3Qs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgQXNzZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNj
YWxlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIHNpZ25FeHRl
bmQzMlRvUHRyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGdldENhY2hlZE1lbW9yeVRl
bXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKLSAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0
PihtZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwg
QVJNNjRBc3NlbWJsZXI6OlVYVFgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICBtX2Fzc2VtYmxl
ci5hZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVtcFJlZ2lzdGVyLCBhZGRyZXNz
LmluZGV4LCBBc3NlbWJsZXI6OlVYVFgsIGFkZHJlc3Muc2NhbGUpOwogICAgICAgICBtX2Fzc2Vt
Ymxlci5sZHI8MzI+KGRlc3QsIGFkZHJlc3MuYmFzZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAg
ICB9CiAKQEAgLTExNTUsNyArMTE1OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIERhdGFM
YWJlbDMyIGxhYmVsKHRoaXMpOwogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cldpdGhGaXhlZFdp
ZHRoKGFkZHJlc3Mub2Zmc2V0LCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFs
aWRhdGUoKSk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmxkcjwzMj4oZGVzdCwgYWRkcmVzcy5iYXNl
LCBtZW1vcnlUZW1wUmVnaXN0ZXIsIEFSTTY0QXNzZW1ibGVyOjpTWFRXLCAwKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubGRyPDMyPihkZXN0LCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rl
ciwgQXNzZW1ibGVyOjpTWFRXLCAwKTsKICAgICAgICAgcmV0dXJuIGxhYmVsOwogICAgIH0KICAg
ICAKQEAgLTExODQsMTIgKzExODgsMTIgQEAgcHVibGljOgogICAgIHZvaWQgbG9hZDE2KEJhc2VJ
bmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAoIWFkZHJl
c3Mub2Zmc2V0ICYmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDEpKSB7Ci0g
ICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHJoKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgQVJNNjRBc3NlbWJsZXI6OlVYVFgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubGRyaChkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIEFzc2Vt
Ymxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZz
ZXQpLCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7Ci0gICAg
ICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVn
aXN0ZXIsIGFkZHJlc3MuaW5kZXgsIEFSTTY0QXNzZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNjYWxl
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihtZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9y
eVRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgQXNzZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNj
YWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIubGRyaChkZXN0LCBhZGRyZXNzLmJhc2UsIG1lbW9y
eVRlbXBSZWdpc3Rlcik7CiAgICAgfQogICAgIApAQCAtMTIxNSwxMiArMTIxOSwxMiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBsb2FkMTZTaWduZWRFeHRlbmRUbzMyKEJhc2VJbmRleCBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICgh
YWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDEpKSB7Ci0gICAgICAgICAgICBtX2Fz
c2VtYmxlci5sZHJzaDwzMj4oZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBBUk02
NEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5sZHJzaDwzMj4oZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBBc3NlbWJsZXI6
OlVYVFgsIGFkZHJlc3Muc2NhbGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwg
Z2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwotICAgICAgICBt
X2Fzc2VtYmxlci5hZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmluZGV4LCBBUk02NEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1w
UmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7
CiAgICAgICAgIG1fYXNzZW1ibGVyLmxkcnNoPDMyPihkZXN0LCBhZGRyZXNzLmJhc2UsIG1lbW9y
eVRlbXBSZWdpc3Rlcik7CiAgICAgfQogCkBAIC0xMjQ2LDEyICsxMjUwLDEyIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGxvYWQ4KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewogICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICFhZGRyZXNzLnNjYWxlKSB7Ci0gICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sZHJiKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRl
eCwgQVJNNjRBc3NlbWJsZXI6OlVYVFgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubGRyYihkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIEFzc2VtYmxl
cjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQp
LCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7Ci0gICAgICAg
IG1fYXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuaW5kZXgsIEFSTTY0QXNzZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNjYWxlKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihtZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRl
bXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgQXNzZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNjYWxl
KTsKICAgICAgICAgbV9hc3NlbWJsZXIubGRyYihkZXN0LCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRl
bXBSZWdpc3Rlcik7CiAgICAgfQogICAgIApAQCAtMTI4MCwxMiArMTI4NCwxMiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBsb2FkOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmICghYWRkcmVzcy5vZmZzZXQgJiYgIWFkZHJl
c3Muc2NhbGUpIHsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcnNiPDMyPihkZXN0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIEFSTTY0QXNzZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNj
YWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcnNiPDMyPihkZXN0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihU
cnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJ
REFuZEludmFsaWRhdGUoKSk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVt
cFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIEFSTTY0QXNzZW1i
bGVyOjpVWFRYLCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0Piht
ZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgQXNz
ZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNjYWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIubGRyc2I8
MzI+KGRlc3QsIGFkZHJlc3MuYmFzZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAgICB9CiAKQEAg
LTEzMTksMTIgKzEzMjMsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklE
IHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCiAgICAgewogICAgICAgICBpZiAoIWFkZHJlc3Mub2Zm
c2V0ICYmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDMpKSB7Ci0gICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4
LCBBUk02NEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdHI8NjQ+KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBBc3NlbWJs
ZXI6OlVYVFgsIGFkZHJlc3Muc2NhbGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0
KSwgZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwotICAgICAg
ICBtX2Fzc2VtYmxlci5hZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmluZGV4LCBBUk02NEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2Fs
ZSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9y
eVRlbXBSZWdpc3Rlcik7CiAgICAgfQogICAgIApAQCAtMTM3OSw3ICsxMzgzLDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CiAgICAgICAgIHNpZ25F
eHRlbmQzMlRvUHRyV2l0aEZpeGVkV2lkdGgoYWRkcmVzcy5vZmZzZXQsIGdldENhY2hlZE1lbW9y
eVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKLSAgICAgICAgbV9hc3NlbWJsZXIuc3Ry
PDY0PihzcmMsIGFkZHJlc3MuYmFzZSwgbWVtb3J5VGVtcFJlZ2lzdGVyLCBBUk02NEFzc2VtYmxl
cjo6U1hUVywgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJh
c2UsIG1lbW9yeVRlbXBSZWdpc3RlciwgQXNzZW1ibGVyOjpTWFRXLCAwKTsKICAgICAgICAgcmV0
dXJuIGxhYmVsOwogICAgIH0KIApAQCAtMTQxNSwxMiArMTQxOSwxMiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7CiAg
ICAgICAgIGlmICghYWRkcmVzcy5vZmZzZXQgJiYgKCFhZGRyZXNzLnNjYWxlIHx8IGFkZHJlc3Mu
c2NhbGUgPT0gMikpIHsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjwzMj4oc3JjLCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIEFSTTY0QXNzZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNj
YWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjwzMj4oc3JjLCBhZGRyZXNzLmJhc2Us
IGFkZHJlc3MuaW5kZXgsIEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihUcnVz
dGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFu
ZEludmFsaWRhdGUoKSk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJl
Z2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIEFSTTY0QXNzZW1ibGVy
OjpVWFRYLCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihtZW1v
cnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgQXNzZW1i
bGVyOjpVWFRYLCBhZGRyZXNzLnNjYWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihz
cmMsIGFkZHJlc3MuYmFzZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAgICB9CiAKQEAgLTE0NzYs
NyArMTQ4MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRo
aXMpOwogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cldpdGhGaXhlZFdpZHRoKGFkZHJlc3Mub2Zm
c2V0LCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7Ci0gICAg
ICAgIG1fYXNzZW1ibGVyLnN0cjwzMj4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdp
c3RlciwgQVJNNjRBc3NlbWJsZXI6OlNYVFcsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8
MzI+KHNyYywgYWRkcmVzcy5iYXNlLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIEFzc2VtYmxlcjo6U1hU
VywgMCk7CiAgICAgICAgIHJldHVybiBsYWJlbDsKICAgICB9CiAKQEAgLTE0OTIsMjQgKzE0OTYs
MjQgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcmUxNihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4
IGFkZHJlc3MpCiAgICAgewogICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICghYWRkcmVz
cy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDEpKSB7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zdHJoKHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBBUk02NEFzc2VtYmxlcjo6
VVhUWCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHJoKHNyYywg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBBc3NlbWJsZXI6OlVYVFgsIGFkZHJlc3Muc2Nh
bGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgZ2V0Q2FjaGVkTWVtb3J5VGVt
cFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwotICAgICAgICBtX2Fzc2VtYmxlci5hZGQ8NjQ+
KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBB
Uk02NEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgIG1fYXNzZW1ibGVy
LmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mu
aW5kZXgsIEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1i
bGVyLnN0cmgoc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAgICAgfQog
CiAgICAgdm9pZCBzdG9yZTgoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQogICAg
IHsKICAgICAgICAgaWYgKCFhZGRyZXNzLm9mZnNldCAmJiAhYWRkcmVzcy5zY2FsZSkgewotICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc3RyYihzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRl
eCwgQVJNNjRBc3NlbWJsZXI6OlVYVFgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc3RyYihzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgQXNzZW1ibGVy
OjpVWFRYLCBhZGRyZXNzLnNjYWxlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCks
IGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKLSAgICAgICAg
bV9hc3NlbWJsZXIuYWRkPDY0PihtZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5pbmRleCwgQVJNNjRBc3NlbWJsZXI6OlVYVFgsIGFkZHJlc3Muc2NhbGUpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5hZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBBc3NlbWJsZXI6OlVYVFgsIGFkZHJlc3Muc2NhbGUp
OwogICAgICAgICBtX2Fzc2VtYmxlci5zdHJiKHNyYywgYWRkcmVzcy5iYXNlLCBtZW1vcnlUZW1w
UmVnaXN0ZXIpOwogICAgIH0KIApAQCAtMTU1OSw3ICsxNTYzLDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBnZXRFZmZlY3RpdmVBZGRyZXNzKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5hZGQ8NjQ+KGRlc3QsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgQVJNNjRBc3NlbWJsZXI6OkxTTCwgYWRkcmVzcy5zY2FsZSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4oZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBBc3NlbWJsZXI6OkxTTCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIGlmIChhZGRyZXNz
Lm9mZnNldCkKICAgICAgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCks
IGRlc3QpOwogICAgIH0KQEAgLTE2ODksOCArMTY5Myw4IEBAIHB1YmxpYzoKICAgICBKdW1wIGJy
YW5jaERvdWJsZU5vblplcm8oRlBSZWdpc3RlcklEIHJlZywgRlBSZWdpc3RlcklEKQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuZmNtcF8wPDY0PihyZWcpOwotICAgICAgICBKdW1wIHVub3Jk
ZXJlZCA9IG1ha2VCcmFuY2goQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKLSAgICAgICAg
SnVtcCByZXN1bHQgPSBtYWtlQnJhbmNoKEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb25ORSk7Cisg
ICAgICAgIEp1bXAgdW5vcmRlcmVkID0gbWFrZUJyYW5jaChBc3NlbWJsZXI6OkNvbmRpdGlvblZT
KTsKKyAgICAgICAgSnVtcCByZXN1bHQgPSBtYWtlQnJhbmNoKEFzc2VtYmxlcjo6Q29uZGl0aW9u
TkUpOwogICAgICAgICB1bm9yZGVyZWQubGluayh0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CkBAIC0xNjk4LDggKzE3MDIsOCBAQCBwdWJsaWM6CiAgICAgSnVtcCBicmFuY2hE
b3VibGVaZXJvT3JOYU4oRlBSZWdpc3RlcklEIHJlZywgRlBSZWdpc3RlcklEKQogICAgIHsKICAg
ICAgICAgbV9hc3NlbWJsZXIuZmNtcF8wPDY0PihyZWcpOwotICAgICAgICBKdW1wIHVub3JkZXJl
ZCA9IG1ha2VCcmFuY2goQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKLSAgICAgICAgSnVt
cCBub3RFcXVhbCA9IG1ha2VCcmFuY2goQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvbk5FKTsKKyAg
ICAgICAgSnVtcCB1bm9yZGVyZWQgPSBtYWtlQnJhbmNoKEFzc2VtYmxlcjo6Q29uZGl0aW9uVlMp
OworICAgICAgICBKdW1wIG5vdEVxdWFsID0gbWFrZUJyYW5jaChBc3NlbWJsZXI6OkNvbmRpdGlv
bk5FKTsKICAgICAgICAgdW5vcmRlcmVkLmxpbmsodGhpcyk7CiAgICAgICAgIC8vIFdlIGdldCBo
ZXJlIGlmIGVpdGhlciB1bm9yZGVyZWQgb3IgZXF1YWwuCiAgICAgICAgIEp1bXAgcmVzdWx0ID0g
anVtcCgpOwpAQCAtMTcxMyw3ICsxNzE3LDcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxl
ci5mY3Z0enM8NjQsIDY0PihnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRl
KCksIHNyYyk7CiAgICAgICAgIHplcm9FeHRlbmQzMlRvUHRyKGRhdGFUZW1wUmVnaXN0ZXIsIGRl
c3QpOwogICAgICAgICAvLyBDaGVjayB0aGUgbG93IDMyLWJpdHMgc2lnbiBleHRlbmQgdG8gYmUg
ZXF1YWwgdG8gdGhlIGZ1bGwgdmFsdWUuCi0gICAgICAgIG1fYXNzZW1ibGVyLmNtcDw2ND4oZGF0
YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgQVJNNjRBc3NlbWJsZXI6OlNYVFcsIDAp
OworICAgICAgICBtX2Fzc2VtYmxlci5jbXA8NjQ+KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1w
UmVnaXN0ZXIsIEFzc2VtYmxlcjo6U1hUVywgMCk7CiAgICAgICAgIHJldHVybiBKdW1wKG1ha2VC
cmFuY2goYnJhbmNoVHlwZSA9PSBCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCA/IEVxdWFsIDog
Tm90RXF1YWwpKTsKICAgICB9CiAKQEAgLTE4MDIsMTIgKzE4MDYsMTIgQEAgcHVibGljOgogICAg
IHZvaWQgbG9hZERvdWJsZShCYXNlSW5kZXggYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgewogICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICghYWRkcmVzcy5zY2FsZSB8fCBh
ZGRyZXNzLnNjYWxlID09IDMpKSB7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRl
c3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgQVJNNjRBc3NlbWJsZXI6OlVYVFgsIGFk
ZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBzaWduRXh0ZW5kMzJU
b1B0cihUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVn
aXN0ZXJJREFuZEludmFsaWRhdGUoKSk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVt
b3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIEFSTTY0
QXNzZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRk
PDY0PihtZW1vcnlUZW1wUmVnaXN0ZXIsIG1lbW9yeVRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRl
eCwgQXNzZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNjYWxlKTsKICAgICAgICAgbV9hc3NlbWJsZXIu
bGRyPDY0PihkZXN0LCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAgICAgfQog
ICAgIApAQCAtMTgyOSwxMiArMTgzMywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2FkRmxvYXQo
QmFzZUluZGV4IGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KCFhZGRyZXNzLm9mZnNldCAmJiAoIWFkZHJlc3Muc2NhbGUgfHwgYWRkcmVzcy5zY2FsZSA9PSAy
KSkgewotICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0LCBhZGRyZXNzLmJhc2Us
IGFkZHJlc3MuaW5kZXgsIEFSTTY0QXNzZW1ibGVyOjpVWFRYLCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcjwzMj4oZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
LmluZGV4LCBBc3NlbWJsZXI6OlVYVFgsIGFkZHJlc3Muc2NhbGUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoVHJ1c3RlZEltbTMy
KGFkZHJlc3Mub2Zmc2V0KSwgZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlk
YXRlKCkpOwotICAgICAgICBtX2Fzc2VtYmxlci5hZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3Rlciwg
bWVtb3J5VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBBUk02NEFzc2VtYmxlcjo6VVhUWCwg
YWRkcmVzcy5zY2FsZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJl
Z2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIEFzc2VtYmxlcjo6VVhU
WCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmxkcjwzMj4oZGVzdCwgYWRk
cmVzcy5iYXNlLCBtZW1vcnlUZW1wUmVnaXN0ZXIpOwogICAgIH0KIApAQCAtMTg5Niw4ICsxOTAw
LDggQEAgcHVibGljOgogICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHlBZnRlckZsb2F0aW5nUG9p
bnRDb21wYXJlKERvdWJsZUNvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTm90RXF1YWwpIHsKLSAg
ICAgICAgICAgIEp1bXAgdW5vcmRlcmVkID0gbWFrZUJyYW5jaChBUk02NEFzc2VtYmxlcjo6Q29u
ZGl0aW9uVlMpOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIuY3NlbDxkYXRhc2l6ZT4oZGVzdCwg
c3JjLCBkZXN0LCBBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uTkUpOworICAgICAgICAgICAgSnVt
cCB1bm9yZGVyZWQgPSBtYWtlQnJhbmNoKEFzc2VtYmxlcjo6Q29uZGl0aW9uVlMpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuY3NlbDxkYXRhc2l6ZT4oZGVzdCwgc3JjLCBkZXN0LCBBc3NlbWJs
ZXI6OkNvbmRpdGlvbk5FKTsKICAgICAgICAgICAgIHVub3JkZXJlZC5saW5rKHRoaXMpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xOTA2LDggKzE5MTAsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAvLyBuZXh0IGNzZWwgaGFzIGFsbCBhcmd1bWVudHMgZXF1YWwgdG8gc3Jj
LgogICAgICAgICAgICAgLy8gSWYgdGhlIGNvbXBhcmUgaXMgb3JkZXJlZCwgZGVzdCBpcyB1bmNo
YW5nZWQgYW5kIEVRIGRlY2lkZXMKICAgICAgICAgICAgIC8vIHdoYXQgdmFsdWUgdG8gc2V0Lgot
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY3NlbDxkYXRhc2l6ZT4oZGVzdCwgc3JjLCBkZXN0LCBB
Uk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uVlMpOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIuY3Nl
bDxkYXRhc2l6ZT4oZGVzdCwgc3JjLCBkZXN0LCBBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uRVEp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY3NlbDxkYXRhc2l6ZT4oZGVzdCwgc3JjLCBkZXN0
LCBBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNzZWw8
ZGF0YXNpemU+KGRlc3QsIHNyYywgZGVzdCwgQXNzZW1ibGVyOjpDb25kaXRpb25FUSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9hc3NlbWJsZXIuY3NlbDxkYXRh
c2l6ZT4oZGVzdCwgc3JjLCBkZXN0LCBBUk02NENvbmRpdGlvbihjb25kKSk7CkBAIC0xOTE3LDgg
KzE5MjEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtb3ZlQ29uZGl0aW9uYWxseUFmdGVyRmxvYXRp
bmdQb2ludENvbXBhcmUoRG91YmxlQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgdGhlbkNhc2Us
IFJlZ2lzdGVySUQgZWxzZUNhc2UsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlm
IChjb25kID09IERvdWJsZU5vdEVxdWFsKSB7Ci0gICAgICAgICAgICBKdW1wIHVub3JkZXJlZCA9
IG1ha2VCcmFuY2goQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKLSAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmNzZWw8ZGF0YXNpemU+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgQVJNNjRB
c3NlbWJsZXI6OkNvbmRpdGlvbk5FKTsKKyAgICAgICAgICAgIEp1bXAgdW5vcmRlcmVkID0gbWFr
ZUJyYW5jaChBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmNzZWw8ZGF0YXNpemU+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgQXNzZW1ibGVyOjpDb25k
aXRpb25ORSk7CiAgICAgICAgICAgICB1bm9yZGVyZWQubGluayh0aGlzKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtMTkyNyw4ICsxOTMxLDggQEAgcHVibGljOgogICAgICAg
ICAgICAgLy8gbmV4dCBjc2VsIGhhcyBhbGwgYXJndW1lbnRzIGVxdWFsIHRvIHRoZW5DYXNlLgog
ICAgICAgICAgICAgLy8gSWYgdGhlIGNvbXBhcmUgaXMgb3JkZXJlZCwgZGVzdCBpcyB1bmNoYW5n
ZWQgYW5kIEVRIGRlY2lkZXMKICAgICAgICAgICAgIC8vIHdoYXQgdmFsdWUgdG8gc2V0LgotICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY3NlbDxkYXRhc2l6ZT4oZWxzZUNhc2UsIHRoZW5DYXNlLCBl
bHNlQ2FzZSwgQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKLSAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmNzZWw8ZGF0YXNpemU+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgQVJNNjRBc3Nl
bWJsZXI6OkNvbmRpdGlvbkVRKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNzZWw8ZGF0YXNp
emU+KGVsc2VDYXNlLCB0aGVuQ2FzZSwgZWxzZUNhc2UsIEFzc2VtYmxlcjo6Q29uZGl0aW9uVlMp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY3NlbDxkYXRhc2l6ZT4oZGVzdCwgdGhlbkNhc2Us
IGVsc2VDYXNlLCBBc3NlbWJsZXI6OkNvbmRpdGlvbkVRKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICBtX2Fzc2VtYmxlci5jc2VsPGRhdGFzaXplPihkZXN0LCB0aGVu
Q2FzZSwgZWxzZUNhc2UsIEFSTTY0Q29uZGl0aW9uKGNvbmQpKTsKQEAgLTE5MzgsOCArMTk0Miw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIG1vdmVEb3VibGVDb25kaXRpb25hbGx5QWZ0ZXJGbG9hdGlu
Z1BvaW50Q29tcGFyZShEb3VibGVDb25kaXRpb24gY29uZCwgRlBSZWdpc3RlcklEIHRoZW5DYXNl
LCBGUFJlZ2lzdGVySUQgZWxzZUNhc2UsIEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAg
ICAgaWYgKGNvbmQgPT0gRG91YmxlTm90RXF1YWwpIHsKLSAgICAgICAgICAgIEp1bXAgdW5vcmRl
cmVkID0gbWFrZUJyYW5jaChBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uVlMpOwotICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuZmNzZWw8ZGF0YXNpemU+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwg
QVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvbk5FKTsKKyAgICAgICAgICAgIEp1bXAgdW5vcmRlcmVk
ID0gbWFrZUJyYW5jaChBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmZjc2VsPGRhdGFzaXplPihkZXN0LCB0aGVuQ2FzZSwgZWxzZUNhc2UsIEFzc2VtYmxl
cjo6Q29uZGl0aW9uTkUpOwogICAgICAgICAgICAgdW5vcmRlcmVkLmxpbmsodGhpcyk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTE5NDgsOCArMTk1Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIC8vIG5leHQgY3NlbCBoYXMgYWxsIGFyZ3VtZW50cyBlcXVhbCB0byB0aGVu
Q2FzZS4KICAgICAgICAgICAgIC8vIElmIHRoZSBjb21wYXJlIGlzIG9yZGVyZWQsIGRlc3QgaXMg
dW5jaGFuZ2VkIGFuZCBFUSBkZWNpZGVzCiAgICAgICAgICAgICAvLyB3aGF0IHZhbHVlIHRvIHNl
dC4KLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZjc2VsPGRhdGFzaXplPihlbHNlQ2FzZSwgdGhl
bkNhc2UsIGVsc2VDYXNlLCBBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uVlMpOwotICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuZmNzZWw8ZGF0YXNpemU+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwg
QVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvbkVRKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZj
c2VsPGRhdGFzaXplPihlbHNlQ2FzZSwgdGhlbkNhc2UsIGVsc2VDYXNlLCBBc3NlbWJsZXI6OkNv
bmRpdGlvblZTKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZjc2VsPGRhdGFzaXplPihkZXN0
LCB0aGVuQ2FzZSwgZWxzZUNhc2UsIEFzc2VtYmxlcjo6Q29uZGl0aW9uRVEpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1fYXNzZW1ibGVyLmZjc2VsPGRhdGFzaXpl
PihkZXN0LCB0aGVuQ2FzZSwgZWxzZUNhc2UsIEFSTTY0Q29uZGl0aW9uKGNvbmQpKTsKQEAgLTIw
NDYsMTIgKzIwNTAsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcmVEb3VibGUoRlBSZWdpc3Rl
cklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCiAgICAgewogICAgICAgICBpZiAoIWFkZHJlc3Mu
b2Zmc2V0ICYmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDMpKSB7Ci0gICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBBUk02NEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBBc3Nl
bWJsZXI6OlVYVFgsIGFkZHJlc3Muc2NhbGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zm
c2V0KSwgZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwotICAg
ICAgICBtX2Fzc2VtYmxlci5hZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLmluZGV4LCBBUk02NEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2Fs
ZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1v
cnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5z
Y2FsZSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIG1l
bW9yeVRlbXBSZWdpc3Rlcik7CiAgICAgfQogCkBAIC0yMDY3LDEyICsyMDcxLDEyIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHN0b3JlRmxvYXQoRlBSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJl
c3MpCiAgICAgewogICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICghYWRkcmVzcy5zY2Fs
ZSB8fCBhZGRyZXNzLnNjYWxlID09IDIpKSB7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHI8
MzI+KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBBUk02NEFzc2VtYmxlcjo6VVhU
WCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBBc3NlbWJsZXI6OlVYVFgsIGFkZHJlc3Muc2Nh
bGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgZ2V0Q2FjaGVkTWVtb3J5VGVt
cFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwotICAgICAgICBtX2Fzc2VtYmxlci5hZGQ8NjQ+
KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBB
Uk02NEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgIG1fYXNzZW1ibGVy
LmFkZDw2ND4obWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mu
aW5kZXgsIEFzc2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1i
bGVyLnN0cjwzMj4oc3JjLCBhZGRyZXNzLmJhc2UsIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAgICAg
fQogCkBAIC0zMDgwLDcgKzMwODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGludmFsaWRhdGVBbGxU
ZW1wUmVnaXN0ZXJzKCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmJscihkYXRhVGVtcFJlZ2lzdGVy
KTsKICAgICAgICAgQXNzZW1ibGVyTGFiZWwgY2FsbExhYmVsID0gbV9hc3NlbWJsZXIubGFiZWwo
KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChwb2ludGVyTGFiZWwsIEFSTTY0QXNzZW1ibGVyOjpn
ZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhjYWxsTGFiZWwsIHBvaW50ZXJMYWJlbCkgPT0gUkVQ
QVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChwb2lu
dGVyTGFiZWwsIEFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoY2FsbExhYmVs
LCBwb2ludGVyTGFiZWwpID09IFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUik7CiAgICAg
ICAgIHJldHVybiBDYWxsKGNhbGxMYWJlbCwgQ2FsbDo6TGlua2FibGUpOwogICAgIH0KIApAQCAt
MzEwMSw3ICszMTA1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQXNzZW1ibGVyTGFiZWwg
bGFiZWwgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwogICAgICAgICBtX2Fzc2VtYmxlci5iKCk7Ci0g
ICAgICAgIHJldHVybiBKdW1wKGxhYmVsLCBtX21ha2VKdW1wUGF0Y2hhYmxlID8gQVJNNjRBc3Nl
bWJsZXI6Okp1bXBOb0NvbmRpdGlvbkZpeGVkU2l6ZSA6IEFSTTY0QXNzZW1ibGVyOjpKdW1wTm9D
b25kaXRpb24pOworICAgICAgICByZXR1cm4gSnVtcChsYWJlbCwgbV9tYWtlSnVtcFBhdGNoYWJs
ZSA/IEFzc2VtYmxlcjo6SnVtcE5vQ29uZGl0aW9uRml4ZWRTaXplIDogQXNzZW1ibGVyOjpKdW1w
Tm9Db25kaXRpb24pOwogICAgIH0KIAogICAgIHZvaWQganVtcChSZWdpc3RlcklEIHRhcmdldCkK
QEAgLTMxNjUsNyArMzE2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgbW92ZVdpdGhGaXhlZFdpZHRo
KFRydXN0ZWRJbW1QdHIoMCksIGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRh
dGUoKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmJyKGRhdGFUZW1wUmVnaXN0ZXIpOwogICAgICAg
ICBBc3NlbWJsZXJMYWJlbCBjYWxsTGFiZWwgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwotICAgICAg
ICBBU1NFUlRfVU5VU0VEKHBvaW50ZXJMYWJlbCwgQVJNNjRBc3NlbWJsZXI6OmdldERpZmZlcmVu
Y2VCZXR3ZWVuTGFiZWxzKGNhbGxMYWJlbCwgcG9pbnRlckxhYmVsKSA9PSBSRVBBVENIX09GRlNF
VF9DQUxMX1RPX1BPSU5URVIpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHBvaW50ZXJMYWJlbCwg
QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhjYWxsTGFiZWwsIHBvaW50ZXJM
YWJlbCkgPT0gUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKTsKICAgICAgICAgcmV0dXJu
IENhbGwoY2FsbExhYmVsLCBDYWxsOjpMaW5rYWJsZSk7CiAgICAgfQogCkBAIC0zMjc3LDcgKzMy
ODEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldENhcnJ5KFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNzZXQ8MzI+KGRlc3QsIEFSTTY0QXNzZW1ibGVyOjpD
b25kaXRpb25DUyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNzZXQ8MzI+KGRlc3QsIEFzc2VtYmxl
cjo6Q29uZGl0aW9uQ1MpOwogICAgIH0KIAogICAgIC8vIFBhdGNoYWJsZSBvcGVyYXRpb25zCkBA
IC0zNDA0LDcgKzM0MDgsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCByZWVtaXRJbml0
aWFsTW92ZVdpdGhQYXRjaCh2b2lkKiBhZGRyZXNzLCB2b2lkKiB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIEFSTTY0QXNzZW1ibGVyOjpzZXRQb2ludGVyKHN0YXRpY19jYXN0PGludCo+KGFkZHJlc3Mp
LCB2YWx1ZSwgZGF0YVRlbXBSZWdpc3RlciwgdHJ1ZSk7CisgICAgICAgIEFzc2VtYmxlcjo6c2V0
UG9pbnRlcihzdGF0aWNfY2FzdDxpbnQqPihhZGRyZXNzKSwgdmFsdWUsIGRhdGFUZW1wUmVnaXN0
ZXIsIHRydWUpOwogICAgIH0KIAogICAgIC8vIE1pc2NlbGxhbmVvdXMgb3BlcmF0aW9uczoKQEAg
LTM0MTQsNyArMzQxOCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuYnJrKGltbSk7
CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgaXNCcmVha3BvaW50KHZvaWQqIGFkZHJlc3MpIHsg
cmV0dXJuIEFSTTY0QXNzZW1ibGVyOjppc0JyayhhZGRyZXNzKTsgfQorICAgIHN0YXRpYyBib29s
IGlzQnJlYWtwb2ludCh2b2lkKiBhZGRyZXNzKSB7IHJldHVybiBBc3NlbWJsZXI6OmlzQnJrKGFk
ZHJlc3MpOyB9CiAKICAgICB2b2lkIG5vcCgpCiAgICAgewpAQCAtMzczMSw3ICszNzM1LDcgQEAg
cHVibGljOgogICAgIC8vIEludmVydCBhIHJlbGF0aW9uYWwgY29uZGl0aW9uLCBlLmcuID09IGJl
Y29tZXMgIT0sIDwgYmVjb21lcyA+PSwgZXRjLgogICAgIHN0YXRpYyBSZWxhdGlvbmFsQ29uZGl0
aW9uIGludmVydChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQpCiAgICAgewotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVsYXRpb25hbENvbmRpdGlvbj4oQVJNNjRBc3NlbWJsZXI6OmludmVy
dChzdGF0aWNfY2FzdDxBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uPihjb25kKSkpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVsYXRpb25hbENvbmRpdGlvbj4oQXNzZW1ibGVyOjppbnZl
cnQoc3RhdGljX2Nhc3Q8QXNzZW1ibGVyOjpDb25kaXRpb24+KGNvbmQpKSk7CiAgICAgfQogCiAg
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVzdWx0Q29uZGl0aW9uPiBjb21tdXRlQ29tcGFyZVRv
WmVyb0ludG9UZXN0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCkKQEAgLTM3NTMsMjcgKzM3NTcs
MjcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENv
ZGVMb2NhdGlvbkNhbGwgY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNNjRBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0
KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQoKikoKT4oQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRh
dGFMb2NhdGlvbigpKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoVk1I
YWx0KENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQpCiAgICAgewotICAgICAgICBB
Uk02NEFzc2VtYmxlcjo6cmVwbGFjZVdpdGhWTUhhbHQoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICAgICAgQXNzZW1ibGVyOjpyZXBsYWNlV2l0aFZNSGFsdChpbnN0
cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyB2
b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBD
b2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAgIEFSTTY0QXNzZW1i
bGVyOjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydC5kYXRhTG9jYXRpb24oKSwgZGVz
dGluYXRpb24uZGF0YUxvY2F0aW9uKCkpOworICAgICAgICBBc3NlbWJsZXI6OnJlcGxhY2VXaXRo
SnVtcChpbnN0cnVjdGlvblN0YXJ0LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9j
YXRpb24oKSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4SnVtcFJlcGxh
Y2VtZW50U2l6ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gQVJNNjRBc3NlbWJsZXI6Om1heEp1
bXBSZXBsYWNlbWVudFNpemUoKTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlcjo6bWF4SnVtcFJl
cGxhY2VtZW50U2l6ZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgcGF0Y2hhYmxl
SnVtcFNpemUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEFSTTY0QXNzZW1ibGVyOjpwYXRjaGFi
bGVKdW1wU2l6ZSgpOworICAgICAgICByZXR1cm4gQXNzZW1ibGVyOjpwYXRjaGFibGVKdW1wU2l6
ZSgpOwogICAgIH0KIAogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZ2lzdGVyRm9yQmxpbmRpbmco
KQpAQCAtMzgyMCwyMSArMzgyNCwyMSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCByZXBh
dGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0
aW9uKQogICAgIHsKLSAgICAgICAgQVJNNjRBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwu
ZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKS5kYXRh
TG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFz
c2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldChSRVBBVENI
X09GRlNFVF9DQUxMX1RPX1BPSU5URVIpLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChD
b2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQogICAgIHsKLSAg
ICAgICAgQVJNNjRBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRP
ZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVz
dGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldChSRVBBVENIX09GRlNFVF9DQUxMX1RP
X1BPSU5URVIpLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KTsKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICBBTFdBWVNfSU5MSU5FIEp1bXAgbWFrZUJyYW5j
aChBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQpCisgICAgQUxXQVlTX0lOTElORSBKdW1w
IG1ha2VCcmFuY2goQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmJfY29uZChjb25kKTsKICAgICAgICAgQXNzZW1ibGVyTGFiZWwgbGFiZWwgPSBt
X2Fzc2VtYmxlci5sYWJlbCgpOwogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKLSAgICAgICAg
cmV0dXJuIEp1bXAobGFiZWwsIG1fbWFrZUp1bXBQYXRjaGFibGUgPyBBUk02NEFzc2VtYmxlcjo6
SnVtcENvbmRpdGlvbkZpeGVkU2l6ZSA6IEFSTTY0QXNzZW1ibGVyOjpKdW1wQ29uZGl0aW9uLCBj
b25kKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobGFiZWwsIG1fbWFrZUp1bXBQYXRjaGFibGUgPyBB
c3NlbWJsZXI6Okp1bXBDb25kaXRpb25GaXhlZFNpemUgOiBBc3NlbWJsZXI6Okp1bXBDb25kaXRp
b24sIGNvbmQpOwogICAgIH0KICAgICBBTFdBWVNfSU5MSU5FIEp1bXAgbWFrZUJyYW5jaChSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQpIHsgcmV0dXJuIG1ha2VCcmFuY2goQVJNNjRDb25kaXRpb24o
Y29uZCkpOyB9CiAgICAgQUxXQVlTX0lOTElORSBKdW1wIG1ha2VCcmFuY2goUmVzdWx0Q29uZGl0
aW9uIGNvbmQpIHsgcmV0dXJuIG1ha2VCcmFuY2goQVJNNjRDb25kaXRpb24oY29uZCkpOyB9CkBA
IC0zODQ5LDcgKzM4NTMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5j
Ym56PGRhdGFTaXplPihyZWcpOwogICAgICAgICBBc3NlbWJsZXJMYWJlbCBsYWJlbCA9IG1fYXNz
ZW1ibGVyLmxhYmVsKCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwotICAgICAgICByZXR1
cm4gSnVtcChsYWJlbCwgbV9tYWtlSnVtcFBhdGNoYWJsZSA/IEFSTTY0QXNzZW1ibGVyOjpKdW1w
Q29tcGFyZUFuZEJyYW5jaEZpeGVkU2l6ZSA6IEFSTTY0QXNzZW1ibGVyOjpKdW1wQ29tcGFyZUFu
ZEJyYW5jaCwgc3RhdGljX2Nhc3Q8QVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCksIGRh
dGFTaXplID09IDY0LCByZWcpOworICAgICAgICByZXR1cm4gSnVtcChsYWJlbCwgbV9tYWtlSnVt
cFBhdGNoYWJsZSA/IEFzc2VtYmxlcjo6SnVtcENvbXBhcmVBbmRCcmFuY2hGaXhlZFNpemUgOiBB
c3NlbWJsZXI6Okp1bXBDb21wYXJlQW5kQnJhbmNoLCBzdGF0aWNfY2FzdDxBc3NlbWJsZXI6OkNv
bmRpdGlvbj4oY29uZCksIGRhdGFTaXplID09IDY0LCByZWcpOwogICAgIH0KIAogICAgIEFMV0FZ
U19JTkxJTkUgSnVtcCBtYWtlVGVzdEJpdEFuZEJyYW5jaChSZWdpc3RlcklEIHJlZywgdW5zaWdu
ZWQgYml0LCBaZXJvQ29uZGl0aW9uIGNvbmQpCkBAIC0zODYyLDI1ICszODY2LDI1IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRibnoocmVnLCBiaXQpOwogICAgICAgICBB
c3NlbWJsZXJMYWJlbCBsYWJlbCA9IG1fYXNzZW1ibGVyLmxhYmVsKCk7CiAgICAgICAgIG1fYXNz
ZW1ibGVyLm5vcCgpOwotICAgICAgICByZXR1cm4gSnVtcChsYWJlbCwgbV9tYWtlSnVtcFBhdGNo
YWJsZSA/IEFSTTY0QXNzZW1ibGVyOjpKdW1wVGVzdEJpdEZpeGVkU2l6ZSA6IEFSTTY0QXNzZW1i
bGVyOjpKdW1wVGVzdEJpdCwgc3RhdGljX2Nhc3Q8QVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvbj4o
Y29uZCksIGJpdCwgcmVnKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobGFiZWwsIG1fbWFrZUp1bXBQ
YXRjaGFibGUgPyBBc3NlbWJsZXI6Okp1bXBUZXN0Qml0Rml4ZWRTaXplIDogQXNzZW1ibGVyOjpK
dW1wVGVzdEJpdCwgc3RhdGljX2Nhc3Q8QXNzZW1ibGVyOjpDb25kaXRpb24+KGNvbmQpLCBiaXQs
IHJlZyk7CiAgICAgfQogCi0gICAgQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvbiBBUk02NENvbmRp
dGlvbihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQpCisgICAgQXNzZW1ibGVyOjpDb25kaXRpb24g
QVJNNjRDb25kaXRpb24oUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb24+KGNvbmQpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXNzZW1ibGVyOjpDb25kaXRpb24+KGNvbmQpOwogICAg
IH0KIAotICAgIEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb24gQVJNNjRDb25kaXRpb24oUmVzdWx0
Q29uZGl0aW9uIGNvbmQpCisgICAgQXNzZW1ibGVyOjpDb25kaXRpb24gQVJNNjRDb25kaXRpb24o
UmVzdWx0Q29uZGl0aW9uIGNvbmQpCiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQogCi0gICAgQVJNNjRBc3Nl
bWJsZXI6OkNvbmRpdGlvbiBBUk02NENvbmRpdGlvbihEb3VibGVDb25kaXRpb24gY29uZCkKKyAg
ICBBc3NlbWJsZXI6OkNvbmRpdGlvbiBBUk02NENvbmRpdGlvbihEb3VibGVDb25kaXRpb24gY29u
ZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBUk02NEFzc2VtYmxlcjo6Q29u
ZGl0aW9uPihjb25kKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFzc2VtYmxlcjo6Q29u
ZGl0aW9uPihjb25kKTsKICAgICB9CiAgICAgCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIEFM
V0FZU19JTkxJTkUgUmVnaXN0ZXJJRCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZh
bGlkYXRlKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fYWxsb3dTY3JhdGNoUmVn
aXN0ZXIpOwpAQCAtNDAxNSw2ICs0MDE5LDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9hc3NlbWJs
ZXIubW92ejw2ND4oZGVzdCwgZ2V0SGFsZndvcmQodmFsdWUsIDApKTsKICAgICAgICAgbV9hc3Nl
bWJsZXIubW92azw2ND4oZGVzdCwgZ2V0SGFsZndvcmQodmFsdWUsIDEpLCAxNik7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdms8NjQ+KGRlc3QsIGdldEhhbGZ3b3JkKHZhbHVlLCAyKSwgMzIpOwor
ICAgICAgICBpZiAoQXNzZW1ibGVyOjpNQVhfUE9JTlRFUl9CSVRTID4gNDgpCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZrPDY0PihkZXN0LCBnZXRIYWxmd29yZCh2YWx1ZSwgMyksIDQ4KTsK
ICAgICB9CiAKICAgICB2b2lkIHNpZ25FeHRlbmQzMlRvUHRyV2l0aEZpeGVkV2lkdGgoaW50MzJf
dCB2YWx1ZSwgUmVnaXN0ZXJJRCBkZXN0KQpAQCAtNDA0MCwxMiArNDA0NiwxMiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGNhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcigpLmludmFsaWRhdGUo
KTsKIAogICAgICAgICAgICAgaWYgKGlzSW5JbnRSYW5nZShhZGRyZXNzRGVsdGEpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKEFSTTY0QXNzZW1ibGVyOjpjYW5FbmNvZGVTSW1tT2Zmc2V0KGFkZHJl
c3NEZWx0YSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoQXNzZW1ibGVyOjpjYW5FbmNvZGVTSW1t
T2Zmc2V0KGFkZHJlc3NEZWx0YSkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bGR1cjxkYXRhc2l6ZT4oZGVzdCwgIG1lbW9yeVRlbXBSZWdpc3RlciwgYWRkcmVzc0RlbHRhKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIGlmIChBUk02NEFzc2VtYmxlcjo6Y2FuRW5jb2RlUEltbU9mZnNldDxkYXRhc2l6
ZT4oYWRkcmVzc0RlbHRhKSkgeworICAgICAgICAgICAgICAgIGlmIChBc3NlbWJsZXI6OmNhbkVu
Y29kZVBJbW1PZmZzZXQ8ZGF0YXNpemU+KGFkZHJlc3NEZWx0YSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubGRyPGRhdGFzaXplPihkZXN0LCAgbWVtb3J5VGVtcFJlZ2lzdGVy
LCBhZGRyZXNzRGVsdGEpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgfQpAQCAtNDA3NywxMiArNDA4MywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW50
cHRyX3QgYWRkcmVzc0RlbHRhID0gYWRkcmVzc0FzSW50IC0gY3VycmVudFJlZ2lzdGVyQ29udGVu
dHM7CiAKICAgICAgICAgICAgIGlmIChpc0luSW50UmFuZ2UoYWRkcmVzc0RlbHRhKSkgewotICAg
ICAgICAgICAgICAgIGlmIChBUk02NEFzc2VtYmxlcjo6Y2FuRW5jb2RlU0ltbU9mZnNldChhZGRy
ZXNzRGVsdGEpKSB7CisgICAgICAgICAgICAgICAgaWYgKEFzc2VtYmxlcjo6Y2FuRW5jb2RlU0lt
bU9mZnNldChhZGRyZXNzRGVsdGEpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN0dXI8ZGF0YXNpemU+KHNyYywgbWVtb3J5VGVtcFJlZ2lzdGVyLCBhZGRyZXNzRGVsdGEpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgaWYgKEFSTTY0QXNzZW1ibGVyOjpjYW5FbmNvZGVQSW1tT2Zmc2V0PGRhdGFzaXpl
PihhZGRyZXNzRGVsdGEpKSB7CisgICAgICAgICAgICAgICAgaWYgKEFzc2VtYmxlcjo6Y2FuRW5j
b2RlUEltbU9mZnNldDxkYXRhc2l6ZT4oYWRkcmVzc0RlbHRhKSkgewogICAgICAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zdHI8ZGF0YXNpemU+KHNyYywgbWVtb3J5VGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzRGVsdGEpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQpAQCAtNDE2MiwxMSArNDE2OCwxMSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPGludCBk
YXRhc2l6ZT4KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5TG9hZFdpdGhPZmZzZXQoUmVnaXN0
ZXJJRCBydCwgUmVnaXN0ZXJJRCBybiwgaW50MzJfdCBvZmZzZXQpCiAgICAgewotICAgICAgICBp
ZiAoQVJNNjRBc3NlbWJsZXI6OmNhbkVuY29kZVNJbW1PZmZzZXQob2Zmc2V0KSkgeworICAgICAg
ICBpZiAoQXNzZW1ibGVyOjpjYW5FbmNvZGVTSW1tT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAg
ICAgIGxvYWRVbnNjYWxlZEltbWVkaWF0ZTxkYXRhc2l6ZT4ocnQsIHJuLCBvZmZzZXQpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKEFSTTY0QXNzZW1i
bGVyOjpjYW5FbmNvZGVQSW1tT2Zmc2V0PGRhdGFzaXplPihvZmZzZXQpKSB7CisgICAgICAgIGlm
IChBc3NlbWJsZXI6OmNhbkVuY29kZVBJbW1PZmZzZXQ8ZGF0YXNpemU+KG9mZnNldCkpIHsKICAg
ICAgICAgICAgIGxvYWRVbnNpZ25lZEltbWVkaWF0ZTxkYXRhc2l6ZT4ocnQsIHJuLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtNDE3NiwxMSArNDE4MiwxMSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPGludCBk
YXRhc2l6ZT4KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5TG9hZFNpZ25lZFdpdGhPZmZzZXQo
UmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBybiwgaW50MzJfdCBvZmZzZXQpCiAgICAgewotICAg
ICAgICBpZiAoQVJNNjRBc3NlbWJsZXI6OmNhbkVuY29kZVNJbW1PZmZzZXQob2Zmc2V0KSkgewor
ICAgICAgICBpZiAoQXNzZW1ibGVyOjpjYW5FbmNvZGVTSW1tT2Zmc2V0KG9mZnNldCkpIHsKICAg
ICAgICAgICAgIGxvYWRTaWduZWRBZGRyZXNzZWRCeVVuc2NhbGVkSW1tZWRpYXRlPGRhdGFzaXpl
PihydCwgcm4sIG9mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQot
ICAgICAgICBpZiAoQVJNNjRBc3NlbWJsZXI6OmNhbkVuY29kZVBJbW1PZmZzZXQ8ZGF0YXNpemU+
KG9mZnNldCkpIHsKKyAgICAgICAgaWYgKEFzc2VtYmxlcjo6Y2FuRW5jb2RlUEltbU9mZnNldDxk
YXRhc2l6ZT4ob2Zmc2V0KSkgewogICAgICAgICAgICAgbG9hZFNpZ25lZEFkZHJlc3NlZEJ5VW5z
aWduZWRJbW1lZGlhdGU8ZGF0YXNpemU+KHJ0LCBybiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9m
ZnNldCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQxOTAsMTEg
KzQxOTYsMTEgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgQUxX
QVlTX0lOTElORSBib29sIHRyeUxvYWRXaXRoT2Zmc2V0KEZQUmVnaXN0ZXJJRCBydCwgUmVnaXN0
ZXJJRCBybiwgaW50MzJfdCBvZmZzZXQpCiAgICAgewotICAgICAgICBpZiAoQVJNNjRBc3NlbWJs
ZXI6OmNhbkVuY29kZVNJbW1PZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBpZiAoQXNzZW1ibGVy
OjpjYW5FbmNvZGVTSW1tT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxkdXI8ZGF0YXNpemU+KHJ0LCBybiwgb2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChBUk02NEFzc2VtYmxlcjo6Y2FuRW5jb2RlUEltbU9m
ZnNldDxkYXRhc2l6ZT4ob2Zmc2V0KSkgeworICAgICAgICBpZiAoQXNzZW1ibGVyOjpjYW5FbmNv
ZGVQSW1tT2Zmc2V0PGRhdGFzaXplPihvZmZzZXQpKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5sZHI8ZGF0YXNpemU+KHJ0LCBybiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9mZnNldCkpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQyMDQsMTEgKzQyMTAsMTEg
QEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgQUxXQVlTX0lOTElO
RSBib29sIHRyeVN0b3JlV2l0aE9mZnNldChSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJuLCBp
bnQzMl90IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChBUk02NEFzc2VtYmxlcjo6Y2FuRW5j
b2RlU0ltbU9mZnNldChvZmZzZXQpKSB7CisgICAgICAgIGlmIChBc3NlbWJsZXI6OmNhbkVuY29k
ZVNJbW1PZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgc3RvcmVVbnNjYWxlZEltbWVkaWF0
ZTxkYXRhc2l6ZT4ocnQsIHJuLCBvZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKEFSTTY0QXNzZW1ibGVyOjpjYW5FbmNvZGVQSW1tT2Zmc2V0
PGRhdGFzaXplPihvZmZzZXQpKSB7CisgICAgICAgIGlmIChBc3NlbWJsZXI6OmNhbkVuY29kZVBJ
bW1PZmZzZXQ8ZGF0YXNpemU+KG9mZnNldCkpIHsKICAgICAgICAgICAgIHN0b3JlVW5zaWduZWRJ
bW1lZGlhdGU8ZGF0YXNpemU+KHJ0LCBybiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9mZnNldCkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQyMTgsMTEgKzQyMjQs
MTEgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgQUxXQVlTX0lO
TElORSBib29sIHRyeVN0b3JlV2l0aE9mZnNldChGUFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQg
cm4sIGludDMyX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgaWYgKEFSTTY0QXNzZW1ibGVyOjpj
YW5FbmNvZGVTSW1tT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgaWYgKEFzc2VtYmxlcjo6Y2Fu
RW5jb2RlU0ltbU9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHVy
PGRhdGFzaXplPihydCwgcm4sIG9mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQotICAgICAgICBpZiAoQVJNNjRBc3NlbWJsZXI6OmNhbkVuY29kZVBJbW1PZmZzZXQ8
ZGF0YXNpemU+KG9mZnNldCkpIHsKKyAgICAgICAgaWYgKEFzc2VtYmxlcjo6Y2FuRW5jb2RlUElt
bU9mZnNldDxkYXRhc2l6ZT4ob2Zmc2V0KSkgewogICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3Ry
PGRhdGFzaXplPihydCwgcm4sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvZmZzZXQpKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC00Mzk2LDE0ICs0NDAyLDE0IEBAIHBy
aXZhdGU6CiAgICAgewogICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVOb3RFcXVhbCkgewogICAg
ICAgICAgICAgLy8gQ29uZGl0aW9uTkUganVtcHMgaWYgTm90RXF1YWwgKm9yKiB1bm9yZGVyZWQg
LSBmb3JjZSB0aGUgdW5vcmRlcmVkIGNhc2VzIG5vdCB0byBqdW1wLgotICAgICAgICAgICAgSnVt
cCB1bm9yZGVyZWQgPSBtYWtlQnJhbmNoKEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb25WUyk7Ci0g
ICAgICAgICAgICBKdW1wIHJlc3VsdCA9IG1ha2VCcmFuY2goQVJNNjRBc3NlbWJsZXI6OkNvbmRp
dGlvbk5FKTsKKyAgICAgICAgICAgIEp1bXAgdW5vcmRlcmVkID0gbWFrZUJyYW5jaChBc3NlbWJs
ZXI6OkNvbmRpdGlvblZTKTsKKyAgICAgICAgICAgIEp1bXAgcmVzdWx0ID0gbWFrZUJyYW5jaChB
c3NlbWJsZXI6OkNvbmRpdGlvbk5FKTsKICAgICAgICAgICAgIHVub3JkZXJlZC5saW5rKHRoaXMp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICBpZiAoY29u
ZCA9PSBEb3VibGVFcXVhbE9yVW5vcmRlcmVkKSB7Ci0gICAgICAgICAgICBKdW1wIHVub3JkZXJl
ZCA9IG1ha2VCcmFuY2goQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKLSAgICAgICAgICAg
IEp1bXAgbm90RXF1YWwgPSBtYWtlQnJhbmNoKEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb25ORSk7
CisgICAgICAgICAgICBKdW1wIHVub3JkZXJlZCA9IG1ha2VCcmFuY2goQXNzZW1ibGVyOjpDb25k
aXRpb25WUyk7CisgICAgICAgICAgICBKdW1wIG5vdEVxdWFsID0gbWFrZUJyYW5jaChBc3NlbWJs
ZXI6OkNvbmRpdGlvbk5FKTsKICAgICAgICAgICAgIHVub3JkZXJlZC5saW5rKHRoaXMpOwogICAg
ICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgZWl0aGVyIHVub3JkZXJlZCBvciBlcXVhbC4KICAg
ICAgICAgICAgIEp1bXAgcmVzdWx0ID0ganVtcCgpOwpAQCAtNDQxOCwxMSArNDQyNCwxMSBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwg
RnVuY3Rpb25QdHIgZnVuY3Rpb24pCiAgICAgewogICAgICAgICBpZiAoIWNhbGwuaXNGbGFnU2V0
KENhbGw6Ok5lYXIpKQotICAgICAgICAgICAgQVJNNjRBc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNv
ZGUsIGNhbGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9J
TlRFUiksIGZ1bmN0aW9uLnZhbHVlKCkpOworICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rUG9p
bnRlcihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldChSRVBBVENIX09GRlNFVF9DQUxM
X1RPX1BPSU5URVIpLCBmdW5jdGlvbi52YWx1ZSgpKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbC5p
c0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAgICBBUk02NEFzc2VtYmxlcjo6bGlua0p1
bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICAgICAgICAgIEFz
c2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi52YWx1ZSgpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgQVJNNjRBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUs
IGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7CiAgICAgfQog
CiAgICAgQ2FjaGVkVGVtcFJlZ2lzdGVyIG1fZGF0YU1lbW9yeVRlbXBSZWdpc3RlcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNLmgJKHJldmlzaW9uIDIyODkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxOCBBcHBsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgVW5pdmVy
c2l0eSBvZiBTemVnZWQKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzQsNyArMzQs
OSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk0gOiBwdWJs
aWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBUk1Bc3NlbWJsZXI+IHsKK3VzaW5nIEFzc2VtYmxl
ciA9IFRBUkdFVF9BU1NFTUJMRVI7CisKK2NsYXNzIE1hY3JvQXNzZW1ibGVyQVJNIDogcHVibGlj
IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAgICAgc3RhdGljIGNvbnN0IGlu
dCBEb3VibGVDb25kaXRpb25NYXNrID0gMHgwZjsKICAgICBzdGF0aWMgY29uc3QgaW50IERvdWJs
ZUNvbmRpdGlvbkJpdFNwZWNpYWwgPSAweDEwOwogICAgIENPTVBJTEVfQVNTRVJUKCEoRG91Ymxl
Q29uZGl0aW9uQml0U3BlY2lhbCAmIERvdWJsZUNvbmRpdGlvbk1hc2spLCBEb3VibGVDb25kaXRp
b25CaXRTcGVjaWFsX3Nob3VsZF9ub3RfaW50ZXJmZXJlX3dpdGhfQVJNQXNzZW1ibGVyX0NvbmRp
dGlvbl9jb2Rlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMjI4OTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMyw3ICszMyw5IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBNYWNyb0Fzc2VtYmxlckFSTXY3IDogcHVibGljIEFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXI8QVJNdjdBc3NlbWJsZXI+IHsKK3VzaW5nIEFzc2VtYmxlciA9
IFRBUkdFVF9BU1NFTUJMRVI7CisKK2NsYXNzIE1hY3JvQXNzZW1ibGVyQVJNdjcgOiBwdWJsaWMg
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXI+IHsKICAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBkYXRhVGVtcFJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjppcDsKICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjpyNjsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1J
UFMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAyMjg5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBNSVBTIFRlY2hub2xvZ2ll
cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzMsNyAr
MzMsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJsZXJNSVBTIDog
cHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8TUlQU0Fzc2VtYmxlcj4gewordXNpbmcgQXNz
ZW1ibGVyID0gVEFSR0VUX0FTU0VNQkxFUjsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXJNSVBTIDog
cHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBNSVBTUmVnaXN0ZXJzOjpGUFJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOwogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBudW1HUFJzID0gMzI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5o
CShyZXZpc2lvbiAyMjg5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw5IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbiA6IHB1
YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPFg4NkFzc2VtYmxlcj4gewordXNpbmcgQXNzZW1i
bGVyID0gVEFSR0VUX0FTU0VNQkxFUjsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXJYODZDb21tb24g
OiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXI+IHsKIHB1YmxpYzoKICNp
ZiBDUFUoWDg2XzY0KQogICAgIC8vIFVzZSB0aGlzIGRpcmVjdGx5IG9ubHkgaWYgeW91J3JlIG5v
dCBnZW5lcmF0aW5nIGNvZGUgd2l0aCBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvUHJvYmVTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvUHJvYmVTdGFjay5oCShyZXZpc2lvbiAyMjg5MjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw4ICsz
NCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgUHJvYmVDb250ZXh0OwotCiBuYW1l
c3BhY2UgUHJvYmUgewogCiBjbGFzcyBQYWdlIHsK
</data>
<flag name="review"
          id="353236"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>