<?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>200632</bug_id>
          
          <creation_ts>2019-08-12 10:42:07 -0700</creation_ts>
          <short_desc>[WHLSL] TypeNamer can be simplified by replacing BaseTypeNameNode with uniqued AST::UnnamedTypes</short_desc>
          <delta_ts>2019-08-26 11:59:17 -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>New Bugs</component>
          <version>WebKit Nightly 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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mmaxfield</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>1560465</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-12 10:42:07 -0700</bug_when>
    <thetext>[WHLSL] TypeNamer can be simplified by replacing BaseTypeNameNode with uniqued AST::UnnamedTypes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560473</commentid>
    <comment_count>1</comment_count>
      <attachid>376080</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-12 11:00:52 -0700</bug_when>
    <thetext>Created attachment 376080
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560822</commentid>
    <comment_count>2</comment_count>
      <attachid>376175</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-13 09:37:13 -0700</bug_when>
    <thetext>Created attachment 376175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562380</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-16 20:11:45 -0700</bug_when>
    <thetext>Saam, any thoughts on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562397</commentid>
    <comment_count>4</comment_count>
      <attachid>376175</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-16 21:04:16 -0700</bug_when>
    <thetext>Comment on attachment 376175
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=376175&amp;action=review

&gt; Source/WebCore/ChangeLog:11
&gt; +        There is no longer a reason to keep a parallel tree of the UnnamedType-like objects
&gt; +        BaseTypeNameNodes. Instead, we can store a single HashMap mapping from UnnamedTypeKeys
&gt; +        to MangledTypeName, and use the the UnnamedType stored in the UnnamedTypeKey while 
&gt; +        emitting the metal code.        

What&apos;s the motivation for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562417</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-16 22:30:45 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #4)
&gt; Comment on attachment 376175 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=376175&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        There is no longer a reason to keep a parallel tree of the UnnamedType-like objects
&gt; &gt; +        BaseTypeNameNodes. Instead, we can store a single HashMap mapping from UnnamedTypeKeys
&gt; &gt; +        to MangledTypeName, and use the the UnnamedType stored in the UnnamedTypeKey while 
&gt; &gt; +        emitting the metal code.        
&gt; 
&gt; What&apos;s the motivation for this?

Simplifying the code. Removing unnecessary indirection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562505</commentid>
    <comment_count>6</comment_count>
      <attachid>376613</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-17 13:58:34 -0700</bug_when>
    <thetext>Created attachment 376613
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564858</commentid>
    <comment_count>7</comment_count>
      <attachid>377219</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-24 19:38:14 -0700</bug_when>
    <thetext>Created attachment 377219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565019</commentid>
    <comment_count>8</comment_count>
      <attachid>377219</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-26 11:26:12 -0700</bug_when>
    <thetext>Comment on attachment 377219
Patch

Nice. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565028</commentid>
    <comment_count>9</comment_count>
      <attachid>377219</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-26 11:58:07 -0700</bug_when>
    <thetext>Comment on attachment 377219
Patch

Clearing flags on attachment: 377219

Committed r249109: &lt;https://trac.webkit.org/changeset/249109&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565029</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-26 11:58:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565031</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-26 11:59:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/54716312&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376080</attachid>
            <date>2019-08-12 11:00:52 -0700</date>
            <delta_ts>2019-08-13 09:37:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200632-20190812110051.patch</filename>
            <type>text/plain</type>
            <size>28057</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODUzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE5LTA4LTEyICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIFR5cGVOYW1lciBjYW4g
YmUgc2ltcGxpZmllZCBieSByZXBsYWNpbmcgQmFzZVR5cGVOYW1lTm9kZSB3aXRoIHVuaXF1ZWQg
QVNUOjpVbm5hbWVkVHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMDYzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZXJlIGlzIG5vIGxvbmdlciBhIHJlYXNvbiB0byBrZWVwIGEgcGFyYWxsZWwg
dHJlZSBvZiB0aGUgVW5uYW1lZFR5cGUtbGlrZSBvYmplY3RzCisgICAgICAgIEJhc2VUeXBlTmFt
ZU5vZGVzLiBJbnN0ZWFkLCB3ZSBjYW4gc3RvcmUgYSBzaW5nbGUgSGFzaE1hcCBtYXBwaW5nIGZy
b20gVW5uYW1lZFR5cGVLZXlzCisgICAgICAgIHRvIE1hbmdsZWRUeXBlTmFtZSwgYW5kIHVzZSB0
aGUgdGhlIFVubmFtZWRUeXBlIHN0b3JlZCBpbiB0aGUgVW5uYW1lZFR5cGVLZXkgd2hpbGUgCisg
ICAgICAgIGVtaXR0aW5nIHRoZSBtZXRhbCBjb2RlLiAgICAgICAgCisKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZUhhc2guaDoKKyAgICAgICAgRGVm
aW5lIEhhc2hUcmFpdHMgYW5kIERlZmF1bHRIYXNoIHNwZWNpYWxpemF0aW9ucyBmb3IgVW5uYW1l
ZFR5cGVLZXkgdG8gc2ltcGxpZnkKKyAgICAgICAgdXNlcyBvZiBVbm5hbWVkVHlwZUtleSBhcyBh
IGtleSBpbiBIYXNoTWFwL0hhc2hTZXQuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICBUYWtlIGFkdmFudGFn
ZSBvZiBkZWZhdWx0IEhhc2hUcmFpdHMgYW5kIERlZmF1bHRIYXNoIGZvciBVbm5hbWVkVHlwZUtl
eS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVy
Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Omluc2VydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2Vu
ZXJhdGVVbmlxdWVkVHlwZU5hbWUpOgorICAgICAgICBSZXBsYWNlIG9sZCBpbnNlcnQgZnVuY3Rp
b24gd2l0aCBnZW5lcmF0ZVVuaXF1ZWRUeXBlTmFtZSwgd2hpY2ggdW5pcXVlcyBhbmQgZ2VuZXJh
dGVzCisgICAgICAgIG5hbWVzIGZvciB0aGUgVW5uYW1lZFR5cGUgYW5kIGFueSAncGFyZW50JyBV
bm5hbWVkVHlwZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVy
Ojp2aXNpdChOYXRpdmVUeXBlRGVjbGFyYXRpb24mKSk6CisgICAgICAgIFN0b3AgYWRkaW5nIE5h
dGl2ZVR5cGVEZWNsYXJhdGlvbnMgdG8gbV9kZXBlbmRlbmN5R3JhcGguIFRoZXkgbmV2ZXIgaGF2
ZSBhbnkKKyAgICAgICAgbmVpZ2hib3JzIGFuZCBuZXZlciBlbWl0IGFueSBtZXRhbCBjb2RlLCBz
byBhcmUgY29tcGxldGUgbm8tb3BzLgorCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkJhc2VUeXBlTmFtZU5vZGUpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgQmFzZVR5cGVOYW1l
Tm9kZSBhbmQgc3ViY2xhc3Nlcy4KKworICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpU
eXBlTmFtZXI6OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFs
OjpUeXBlTmFtZXI6OmNyZWF0ZU5hbWVOb2RlKTogRGVsZXRlZC4KKyAgICAgICAgV2Ugbm8gbG9u
Z2VyIG5lZWQgdGhlIGZpbmQgb3IgY3JlYXRlTmFtZU5vZGUgZnVuY3Rpb25zLCBhcyB0aGUgVW5u
YW1lZFR5cGVzIGNhbiBiZSBub3cgYmUKKyAgICAgICAgdXNlZCBkaXJlY3RseSBldmVyeXdoZXJl
LgorCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6ZW1pdFVubmFt
ZWRUeXBlRGVmaW5pdGlvbik6CisgICAgICAgIFN3aXRjaCB0byBkaXJlY3RseSB1c2luZyB0aGUg
VW5uYW1lZFR5cGUgYW5kIGFsd2F5cyBoYXZlIHRoZSBjYWxsZXIgcGFzcyBpbiB0aGUgbWFuZ2xl
ZAorICAgICAgICBuYW1lLCBzaW5jZSBpbiB0aGUgbWFpbiBlbWl0IGxvb3AsIHdlIGFsd2F5cyBo
YXZlIGFjY2VzcyB0byB0aGUgdGhlbS4gQWxzbywgaW5saW5lIHRoZQorICAgICAgICB0aGUgcmVj
dXJzaXZlIGNhbGxzIHRvIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uIGZvciAncGFyZW50JyB0eXBl
cyB0byBhdm9pZCB1bm5lY2Vzc2FyeQorICAgICAgICBleHRyYSBzd2l0Y2ggb3ZlciB0aGUga2lu
ZCBnZXR0aW5nIHRoZSBwYXJlbnQsIGFuZCBhdm9pZCBpdCBlbnRpcmVseSBmb3IgVHlwZVJlZmVy
ZW5jZQorICAgICAgICB3aGljaCBuZXZlciBoYXMgYSBwYXJlbnQuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0
aW9uKToKKyAgICAgICAgU3dpdGNoZXMgdG8gbm93IHBhc3NpbmcgaW4gdGhlIG5laWdoYm9ycywg
c2luY2UgdGhleSBhcmUgYWx3YXlzIGF2YWlsYWJsZSBpbiB0aGUgbWFpbiAKKyAgICAgICAgZW1p
dCBsb29wLiBBbHNvIG1vdmUgdG8gYSBzd2l0Y2ggc3RhdGVtZW50IHJhdGhlciB0aGFuIGlmcyBm
b3IgY29uc2lzdGVuY3kuIAorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6VHlwZU5hbWVyOjplbWl0TWV0YWxUeXBlRGVmaW5pdGlvbnMpOgorICAgICAgICBQYXNzIGtl
eXMgYW5kIHZhbHVlcyBpbnRvIHRoZSBlbWl0IGZ1bmN0aW9ucyB0byBhdm9pZCBkb3VibGUgbG9v
a3Vwcy4KKworICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Om1hbmds
ZWROYW1lRm9yVHlwZSk6CisgICAgICAgIFVwZGF0ZSB0byBoYXNoIGxvb2t1cC4KKwogMjAxOS0w
OC0xMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEdQVUJ1ZmZl
ciBzZWVtcyB0byBiZSByZWYnZCAvIGRlcmVmJ2QgZnJvbSBtdWx0aXBsZSB0aHJlYWQgY29uY3Vy
cmVudGx5IGJ1dCBpcyBub3QgVGhyZWFkU2FmZVJlZkNvdW50ZWQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjQ4NTMyKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZpc2l0
b3I6OnZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiAgICAgfQogCi0gICAgSGFzaFNldDxV
bm5hbWVkVHlwZUtleSwgVW5uYW1lZFR5cGVLZXk6Okhhc2gsIFVubmFtZWRUeXBlS2V5OjpUcmFp
dHM+IHRha2VVbm5hbWVkVHlwZXMoKQorICAgIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXk+IHRha2VV
bm5hbWVkVHlwZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV91bm5hbWVkVHlw
ZXMpOwogICAgIH0KQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICBtX25hbWVk
VHlwZXMuYXBwZW5kKHR5cGUpOwogICAgIH0KIAotICAgIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXks
IFVubmFtZWRUeXBlS2V5OjpIYXNoLCBVbm5hbWVkVHlwZUtleTo6VHJhaXRzPiBtX3VubmFtZWRU
eXBlczsKKyAgICBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiBtX3VubmFtZWRUeXBlczsKICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IG1fbmFtZWRUeXBl
czsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFVubmFtZWRUeXBlSGFzaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlSGFzaC5oCShyZXZpc2lvbiAyNDg1
MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5h
bWVkVHlwZUhhc2guaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNCArNzQsMTMgQEAgcHJpdmF0ZToK
IAogfQogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxX
ZWJDb3JlOjpXSExTTDo6VW5uYW1lZFR5cGVLZXk+IDogV2ViQ29yZTo6V0hMU0w6OlVubmFtZWRU
eXBlS2V5OjpUcmFpdHMgeyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29y
ZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5PiB7CisgICAgdHlwZWRlZiBXZWJDb3JlOjpXSExTTDo6
VW5uYW1lZFR5cGVLZXk6Okhhc2ggSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJldmlzaW9uIDI0ODUzMikKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTI4ICs1OCw0MyBAQCBuYW1lc3BhY2UgV0hMU0wg
ewogCiBuYW1lc3BhY2UgTWV0YWwgewogCi0vLyBGSVhNRTogTG9vayBpbnRvIHJlcGxhY2luZyBC
YXNlVHlwZU5hbWVOb2RlIHdpdGggYSBzaW1wbGUgc3RydWN0IHsgUmVmUHRyPFVubmFtZWRUeXBl
PiBwYXJlbnQ7IE1hbmdsZWRUeXBlTmFtZTsgfSB0aGF0IFVubmFtZWRUeXBlS2V5cyBtYXAgdG8u
Ci1jbGFzcyBCYXNlVHlwZU5hbWVOb2RlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBCYXNlVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwg
TWFuZ2xlZFR5cGVOYW1lJiYgbWFuZ2xlZE5hbWUsIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQga2lu
ZCkKLSAgICAgICAgOiBtX3BhcmVudChwYXJlbnQpCi0gICAgICAgICwgbV9tYW5nbGVkTmFtZSht
YW5nbGVkTmFtZSkKLSAgICAgICAgLCBtX2tpbmQoa2luZCkKLSAgICB7Ci0gICAgfQotICAgIHZp
cnR1YWwgfkJhc2VUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7Ci0gICAgCi0gICAgQVNUOjpVbm5h
bWVkVHlwZTo6S2luZCBraW5kKCkgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgYm9vbCBpc1JlZmVy
ZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBBU1Q6OlVubmFtZWRU
eXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlOyB9Ci0gICAgYm9vbCBpc1BvaW50ZXJUeXBlTmFtZU5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6UG9p
bnRlcjsgfQotICAgIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCA9PSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheVJlZmVyZW5jZTsg
fQotICAgIGJvb2wgaXNBcnJheVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9
PSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheTsgfQotCi0gICAgQmFzZVR5cGVOYW1lTm9k
ZSogcGFyZW50KCkgeyByZXR1cm4gbV9wYXJlbnQ7IH0KLSAgICBNYW5nbGVkVHlwZU5hbWUgbWFu
Z2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX21hbmdsZWROYW1lOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgQmFzZVR5cGVOYW1lTm9kZSogbV9wYXJlbnQ7Ci0gICAgTWFuZ2xlZFR5cGVOYW1lIG1fbWFu
Z2xlZE5hbWU7Ci0gICAgQVNUOjpVbm5hbWVkVHlwZTo6S2luZCBtX2tpbmQ7Ci19OwotCi1jbGFz
cyBBcnJheVR5cGVOYW1lTm9kZSBmaW5hbCA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBBcnJheVR5cGVOYW1lTm9k
ZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmdsZWRUeXBlTmFtZSYmIG1hbmdsZWROYW1l
LCB1bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVu
dCwgV1RGTW92ZShtYW5nbGVkTmFtZSksIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5KQot
ICAgICAgICAsIG1fbnVtRWxlbWVudHMobnVtRWxlbWVudHMpCi0gICAgewotICAgIH0KLSAgICB2
aXJ0dWFsIH5BcnJheVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKLSAgICB1bnNpZ25lZCBudW1F
bGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxlbWVudHM7IH0KLQotcHJpdmF0ZToKLSAg
ICB1bnNpZ25lZCBtX251bUVsZW1lbnRzOwotfTsKLQotY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBl
TmFtZU5vZGUgZmluYWwgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUo
QmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBNYW5nbGVkVHlwZU5hbWUmJiBtYW5nbGVkTmFtZSwg
QVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQotICAgICAgICA6IEJhc2VUeXBlTmFtZU5v
ZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSwgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6
QXJyYXlSZWZlcmVuY2UpCi0gICAgICAgICwgbV9hZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQot
ICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSA9
IGRlZmF1bHQ7Ci0gICAgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KLQotcHJpdmF0ZToKLSAgICBBU1Q6OkFkZHJlc3NTcGFj
ZSBtX2FkZHJlc3NTcGFjZTsKLX07Ci0KLWNsYXNzIFBvaW50ZXJUeXBlTmFtZU5vZGUgZmluYWwg
OiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgUG9pbnRlclR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJl
bnQsIE1hbmdsZWRUeXBlTmFtZSYmIG1hbmdsZWROYW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRy
ZXNzU3BhY2UpCi0gICAgICAgIDogQmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFu
Z2xlZE5hbWUpLCBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpQb2ludGVyKQotICAgICAgICAsIG1f
YWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKLSAgICB7Ci0gICAgfQotICAgIHZpcnR1YWwgflBv
aW50ZXJUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7Ci0gICAgQVNUOjpBZGRyZXNzU3BhY2UgYWRk
cmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KLQotcHJpdmF0ZToK
LSAgICBBU1Q6OkFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKLX07Ci0KLWNsYXNzIFJlZmVy
ZW5jZVR5cGVOYW1lTm9kZSBmaW5hbCA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBSZWZlcmVuY2VUeXBlTmFtZU5v
ZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBNYW5nbGVkVHlwZU5hbWUmJiBtYW5nbGVkTmFt
ZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKLSAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2Rl
KHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSksIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OlR5
cGVSZWZlcmVuY2UpCi0gICAgICAgICwgbV9uYW1lZFR5cGUobmFtZWRUeXBlKQotICAgIHsKLSAg
ICB9Ci0gICAgdmlydHVhbCB+UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgPSBkZWZhdWx0OwotICAg
IEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUoKSB7IHJldHVybiBtX25hbWVkVHlwZTsgfQotCi1w
cml2YXRlOgotICAgIEFTVDo6TmFtZWRUeXBlJiBtX25hbWVkVHlwZTsKLX07Ci0KK1R5cGVOYW1l
cjo6VHlwZU5hbWVyKFByb2dyYW0mIHByb2dyYW0pCisgICAgOiBtX3Byb2dyYW0ocHJvZ3JhbSkK
K3sKIH0KIAotfQorVHlwZU5hbWVyOjp+VHlwZU5hbWVyKCkgPSBkZWZhdWx0OwogCitzdGF0aWMg
QVNUOjpVbm5hbWVkVHlwZSogcGFyZW50KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQor
eworICAgIHN3aXRjaCAodW5uYW1lZFR5cGUua2luZCgpKSB7CisgICAgY2FzZSBBU1Q6OlVubmFt
ZWRUeXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OlBvaW50ZXI6CisgICAgICAgIHJldHVybiAm
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCk7Cisg
ICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheVJlZmVyZW5jZToKKyAgICAgICAg
cmV0dXJuICZkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmVs
ZW1lbnRUeXBlKCk7CisgICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheToKKyAg
ICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUo
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KIH0KIAotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQ
RV9OQU1FRF9OT0RFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VG9WYWx1ZVR5cGVOYW1lKSBc
Ci0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QmFz
ZVR5cGVOYW1lTm9kZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JB
U0VfVFlQRV9OQU1FRF9OT0RFKEFycmF5VHlwZU5hbWVOb2RlLCBpc0FycmF5VHlwZU5hbWVOb2Rl
KCkpCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUo
QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUo
KSkKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShQ
b2ludGVyVHlwZU5hbWVOb2RlLCBpc1BvaW50ZXJUeXBlTmFtZU5vZGUoKSkKLQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShSZWZlcmVuY2VUeXBlTmFt
ZU5vZGUsIGlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotbmFtZXNwYWNlIFdITFNMIHsKLQotbmFtZXNwYWNlIE1ldGFsIHsKLQotVHlwZU5hbWVyOjpU
eXBlTmFtZXIoUHJvZ3JhbSYgcHJvZ3JhbSkKLSAgICA6IG1fcHJvZ3JhbShwcm9ncmFtKQordm9p
ZCBUeXBlTmFtZXI6OmdlbmVyYXRlVW5pcXVlZFR5cGVOYW1lKEFTVDo6VW5uYW1lZFR5cGUmIHVu
bmFtZWRUeXBlKQogewotfQorICAgIGF1dG8qIHBhcmVudFVubmFtZWRUeXBlID0gcGFyZW50KHVu
bmFtZWRUeXBlKTsKKyAgICBpZiAocGFyZW50VW5uYW1lZFR5cGUpCisgICAgICAgIGdlbmVyYXRl
VW5pcXVlZFR5cGVOYW1lKCpwYXJlbnRVbm5hbWVkVHlwZSk7CiAKLVR5cGVOYW1lcjo6flR5cGVO
YW1lcigpID0gZGVmYXVsdDsKKyAgICBtX3VubmFtZWRUeXBlTWFwcGluZy5lbnN1cmUoVW5uYW1l
ZFR5cGVLZXkgeyB1bm5hbWVkVHlwZSB9LCBbJl0geworICAgICAgICByZXR1cm4gZ2VuZXJhdGVO
ZXh0VHlwZU5hbWUoKTsKKyAgICB9KTsKK30KIAogdm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6
VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQogewotICAgIGluc2VydCh1bm5hbWVkVHlwZSk7Cisg
ICAgZ2VuZXJhdGVVbmlxdWVkVHlwZU5hbWUodW5uYW1lZFR5cGUpOwogfQogCiB2b2lkIFR5cGVO
YW1lcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikKQEAgLTE5NywxNyArMTEyLDE0IEBAIHZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uRGUKICAgICBWaXNpdG9yOjp2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOwog
CiAgICAgewotICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5h
bWVOb2RlPj4gbmVpZ2hib3JzID0geyBmaW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkp
IH07Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZlbnVt
ZXJhdGlvbkRlZmluaXRpb24sIFdURk1vdmUobmVpZ2hib3JzKSk7CisgICAgICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZlbnVtZXJhdGlvbkRlZmluaXRpb24sIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiB7IGVudW1lcmF0
aW9uRGVmaW5pdGlvbi50eXBlKCkgfSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfQogfQogCi12b2lkIFR5cGVOYW1lcjo6dmlz
aXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3Zv
aWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpCiB7CiAgICAg
Ly8gTmF0aXZlIHR5cGUgZGVjbGFyYXRpb25zIGFscmVhZHkgaGF2ZSBuYW1lcywgYW5kIGFyZSBh
bHJlYWR5IGRlY2xhcmVkIGluIE1ldGFsLgotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRl
bmN5R3JhcGguYWRkKCZuYXRpdmVUeXBlRGVjbGFyYXRpb24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+PigpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGFkZFJl
c3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCiB2b2lkIFR5cGVOYW1lcjo6dmlzaXQo
QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQpAQCAtMjE4LDEx
ICsxMzAsMTEgQEAgdm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaQogICAg
IH0KICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKICAgICB7Ci0gICAg
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+PiBuZWln
aGJvcnM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1l
ZFR5cGU+PiBuZWlnaGJvcnM7CiAgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6
IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkgewogICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nLmFkZCgmc3RydWN0dXJl
RWxlbWVudCwgZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKSk7CiAgICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgICAg
ICAgICAgbmVpZ2hib3JzLmFwcGVuZChmaW5kKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKSk7Cisg
ICAgICAgICAgICBuZWlnaGJvcnMuYXBwZW5kKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsKICAg
ICAgICAgfQogICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVwZW5kZW5jeUdyYXBoLmFkZCgm
c3RydWN0dXJlRGVmaW5pdGlvbiwgV1RGTW92ZShuZWlnaGJvcnMpKTsKICAgICAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKQEAgLTIzNywxNSArMTQ5
LDE0IEBAIHZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW8KICAgICB9CiAg
ICAgVmlzaXRvcjo6dmlzaXQodHlwZURlZmluaXRpb24pOwogICAgIHsKLSAgICAgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFzZVR5cGVOYW1lTm9kZT4+IG5laWdoYm9ycyA9IHsg
ZmluZCh0eXBlRGVmaW5pdGlvbi50eXBlKCkpIH07Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9kZXBlbmRlbmN5R3JhcGguYWRkKCZ0eXBlRGVmaW5pdGlvbiwgV1RGTW92ZShuZWlnaGJvcnMp
KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5hZGQoJnR5cGVE
ZWZpbml0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBl
Pj4geyB0eXBlRGVmaW5pdGlvbi50eXBlKCkgfSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfQogfQogCiB2b2lkIFR5cGVOYW1l
cjo6dmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQogewotICAgIGluc2VydChleHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICBnZW5lcmF0ZVVuaXF1ZWRUeXBlTmFtZShleHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKICAgICBWaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsK
IH0KIApAQCAtMjU1LDc0ICsxNjYsNiBAQCB2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpDYWxs
RXhwcmVzc2lvCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcmd1bWVudCk7CiB9CiAKLVN0
cmluZyBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQotewotICAgIHJldHVybiB3cml0ZU5hdGl2ZVR5
cGUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKLX0KLQotQmFzZVR5cGVOYW1lTm9kZSYgVHlwZU5h
bWVyOjpmaW5kKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQotewotICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3VubmFtZWRUeXBlc1VuaXF1aW5nTWFwLmZpbmQodW5uYW1lZFR5cGUpOwotICAg
IEFTU0VSVChpdGVyYXRvciAhPSBtX3VubmFtZWRUeXBlc1VuaXF1aW5nTWFwLmVuZCgpKTsKLSAg
ICByZXR1cm4gKml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEJhc2VUeXBl
TmFtZU5vZGU+IFR5cGVOYW1lcjo6Y3JlYXRlTmFtZU5vZGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5u
YW1lZFR5cGUsIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCkKLXsKLSAgICBzd2l0Y2ggKHVubmFt
ZWRUeXBlLmtpbmQoKSkgewotICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6VHlwZVJl
ZmVyZW5jZTogewotICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8QVNUOjpU
eXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgp
LCB0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKLSAgICB9Ci0gICAgY2FzZSBBU1Q6OlVu
bmFtZWRUeXBlOjpLaW5kOjpQb2ludGVyOiB7Ci0gICAgICAgIGF1dG8mIHBvaW50ZXJUeXBlID0g
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOwotICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4
dFR5cGVOYW1lKCksIHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpKTsKLSAgICB9Ci0gICAgY2Fz
ZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheVJlZmVyZW5jZTogewotICAgICAgICBhdXRv
JiBhcnJheVJlZmVyZW5jZVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
dW5uYW1lZFR5cGUpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVJlZmVy
ZW5jZVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpLCBhcnJheVJl
ZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkpOwotICAgIH0KLSAgICBjYXNlIEFTVDo6VW5uYW1l
ZFR5cGU6OktpbmQ6OkFycmF5OiB7Ci0gICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPEFycmF5VHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCks
IGFycmF5VHlwZS5udW1FbGVtZW50cygpKTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBBU1Q6OlVu
bmFtZWRUeXBlKiBwYXJlbnQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCi17Ci0gICAg
c3dpdGNoICh1bm5hbWVkVHlwZS5raW5kKCkpIHsKLSAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6
OktpbmQ6OlR5cGVSZWZlcmVuY2U6Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNhc2Ug
QVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6UG9pbnRlcjoKLSAgICAgICAgcmV0dXJuICZkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKTsKLSAgICBjYXNl
IEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5UmVmZXJlbmNlOgotICAgICAgICByZXR1cm4g
JmRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5
cGUoKTsKLSAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5OgotICAgICAgICBy
ZXR1cm4gJmRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQot
fQotCi1CYXNlVHlwZU5hbWVOb2RlKiBUeXBlTmFtZXI6Omluc2VydChBU1Q6OlVubmFtZWRUeXBl
JiB1bm5hbWVkVHlwZSkKLXsKLSAgICBpZiAoYXV0byogcmVzdWx0ID0gbV91bm5hbWVkVHlwZU1h
cHBpbmcuZ2V0KCZ1bm5hbWVkVHlwZSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBh
dXRvKiBwYXJlbnRVbm5hbWVkVHlwZSA9IHBhcmVudCh1bm5hbWVkVHlwZSk7Ci0gICAgQmFzZVR5
cGVOYW1lTm9kZSogcGFyZW50Tm9kZSA9IHBhcmVudFVubmFtZWRUeXBlID8gaW5zZXJ0KCpwYXJl
bnRVbm5hbWVkVHlwZSkgOiBudWxscHRyOwotCi0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3VubmFt
ZWRUeXBlc1VuaXF1aW5nTWFwLmVuc3VyZShVbm5hbWVkVHlwZUtleSB7IHVubmFtZWRUeXBlIH0s
IFsmXSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVOYW1lTm9kZSh1bm5hbWVkVHlwZSwgcGFyZW50
Tm9kZSk7Ci0gICAgfSk7Ci0KLSAgICBtX3VubmFtZWRUeXBlTWFwcGluZy5hZGQoJnVubmFtZWRU
eXBlLCBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKLSAgICByZXR1cm4gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQogY2xhc3MgTWV0YWxUeXBlRGVjbGFyYXRp
b25Xcml0ZXIgZmluYWwgOiBwdWJsaWMgVmlzaXRvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CkBAIC0zNTAsOTQgKzE5MywxMzEgQEAgdm9pZCBUeXBlTmFtZXI6OmVt
aXRNZXRhbFR5cGVEZWNsYXJhdGlvbgogICAgIG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyLlZp
c2l0b3I6OnZpc2l0KG1fcHJvZ3JhbSk7CiB9CiAKLXZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1l
ZFR5cGVEZWZpbml0aW9uKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIEJhc2VUeXBlTmFt
ZU5vZGUmIGJhc2VUeXBlTmFtZU5vZGUsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRl
ZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5
cGVzKQordm9pZCBUeXBlTmFtZXI6OmVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oU3RyaW5nQnVp
bGRlciYgc3RyaW5nQnVpbGRlciwgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIE1hbmds
ZWRUeXBlTmFtZSBtYW5nbGVkTmFtZSwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVk
TmFtZWRUeXBlcywgSGFzaFNldDxVbm5hbWVkVHlwZUtleT4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMp
CiB7Ci0gICAgaWYgKGVtaXR0ZWRVbm5hbWVkVHlwZXMuY29udGFpbnMoJmJhc2VUeXBlTmFtZU5v
ZGUpKQorICAgIGlmIChlbWl0dGVkVW5uYW1lZFR5cGVzLmNvbnRhaW5zKFVubmFtZWRUeXBlS2V5
IHsgdW5uYW1lZFR5cGUgfSkpCiAgICAgICAgIHJldHVybjsKLQotICAgIGlmIChiYXNlVHlwZU5h
bWVOb2RlLnBhcmVudCgpKQotICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmlu
Z0J1aWxkZXIsICpiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpLCBlbWl0dGVkTmFtZWRUeXBlcywg
ZW1pdHRlZFVubmFtZWRUeXBlcyk7CiAgICAgCi0gICAgc3dpdGNoIChiYXNlVHlwZU5hbWVOb2Rl
LmtpbmQoKSkgeworICAgIHN3aXRjaCAodW5uYW1lZFR5cGUua2luZCgpKSB7CiAgICAgY2FzZSBB
U1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlOiB7Ci0gICAgICAgIGF1dG8mIG5h
bWVkVHlwZSA9IGRvd25jYXN0PFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9k
ZSkubmFtZWRUeXBlKCk7Ci0gICAgICAgIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1
aWxkZXIsIG5hbWVkVHlwZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ0eXBlZGVmICIsIG1hbmds
ZWROYW1lRm9yVHlwZShuYW1lZFR5cGUpLCAnICcsIGJhc2VUeXBlTmFtZU5vZGUubWFuZ2xlZE5h
bWUoKSwgIjtcbiIpOworICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8QVNU
OjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisKKyAgICAgICAgYXV0byYgcGFyZW50ID0g
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgYXV0byBwYXJlbnRNYW5nbGVk
TmFtZSA9IG1hbmdsZWROYW1lRm9yVHlwZSh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsK
KyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fZGVwZW5kZW5jeUdyYXBoLmZpbmQoJnBhcmVudCk7
CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2RlcGVuZGVuY3lHcmFwaC5lbmQoKSk7Cisg
ICAgICAgIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIsIHBhcmVudCwgaXRl
cmF0b3ItPnZhbHVlLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7CisK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidHlwZWRlZiAiLCBwYXJlbnRN
YW5nbGVkTmFtZSwgJyAnLCBtYW5nbGVkTmFtZSwgIjtcbiIpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpQb2ludGVyOiB7Ci0gICAgICAg
IGF1dG8mIHBvaW50ZXJUeXBlID0gZG93bmNhc3Q8UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5
cGVOYW1lTm9kZSk7Ci0gICAgICAgIEFTU0VSVChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidHlwZWRlZiAiLCB0b1N0cmlu
Zyhwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSksICcgJywgcG9pbnRlclR5cGUucGFyZW50KCkt
Pm1hbmdsZWROYW1lKCksICIqICIsIHBvaW50ZXJUeXBlLm1hbmdsZWROYW1lKCksICI7XG4iKTsK
KyAgICAgICAgYXV0byYgcG9pbnRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkVHlwZSk7CisKKyAgICAgICAgYXV0byYgcGFyZW50ID0gcG9pbnRlclR5cGUuZWxlbWVu
dFR5cGUoKTsKKyAgICAgICAgYXV0byBwYXJlbnRNYW5nbGVkTmFtZSA9IG1hbmdsZWROYW1lRm9y
VHlwZShwYXJlbnQpOworICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1
aWxkZXIsIHBhcmVudCwgcGFyZW50TWFuZ2xlZE5hbWUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0
dGVkVW5uYW1lZFR5cGVzKTsKKworICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KCJ0eXBlZGVmICIsIHRvU3RyaW5nKHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpKSwgJyAnLCBw
YXJlbnRNYW5nbGVkTmFtZSwgIiogIiwgbWFuZ2xlZE5hbWUsICI7XG4iKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6QXJyYXlSZWZlcmVu
Y2U6IHsKLSAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUeXBlID0gZG93bmNhc3Q8QXJyYXlS
ZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOwotICAgICAgICBBU1NFUlQo
YmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSk7CisgICAgICAgIGF1dG8mIGFycmF5UmVmZXJlbmNl
VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7CisK
KyAgICAgICAgYXV0byYgcGFyZW50ID0gYXJyYXlSZWZlcmVuY2VUeXBlLmVsZW1lbnRUeXBlKCk7
CisgICAgICAgIGF1dG8gcGFyZW50TWFuZ2xlZE5hbWUgPSBtYW5nbGVkTmFtZUZvclR5cGUocGFy
ZW50KTsKKyAgICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWlsZGVyLCBw
YXJlbnQsIHBhcmVudE1hbmdsZWROYW1lLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFt
ZWRUeXBlcyk7CisKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAg
ICAgICAgICJzdHJ1Y3QgIiwgYXJyYXlSZWZlcmVuY2VUeXBlLm1hbmdsZWROYW1lKCksICJ7IFxu
IgotICAgICAgICAgICAgIiAgICAiLCB0b1N0cmluZyhhcnJheVJlZmVyZW5jZVR5cGUuYWRkcmVz
c1NwYWNlKCkpLCAnICcsIGFycmF5UmVmZXJlbmNlVHlwZS5wYXJlbnQoKS0+bWFuZ2xlZE5hbWUo
KSwgIiogcG9pbnRlcjtcbiIKKyAgICAgICAgICAgICJzdHJ1Y3QgIiwgbWFuZ2xlZE5hbWUsICJ7
IFxuIgorICAgICAgICAgICAgIiAgICAiLCB0b1N0cmluZyhhcnJheVJlZmVyZW5jZVR5cGUuYWRk
cmVzc1NwYWNlKCkpLCAnICcsIHBhcmVudE1hbmdsZWROYW1lLCAiKiBwb2ludGVyO1xuIgogICAg
ICAgICAgICAgIiAgICB1aW50MzJfdCBsZW5ndGg7XG4iCiAgICAgICAgICAgICAifTtcbiIKICAg
ICAgICAgKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlw
ZTo6S2luZDo6QXJyYXk6IHsKLSAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QXJy
YXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOwotICAgICAgICBBU1NFUlQoYmFzZVR5
cGVOYW1lTm9kZS5wYXJlbnQoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoInR5cGVkZWYgYXJyYXk8IiwgYXJyYXlUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAi
LCAiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIj4gIiwgYXJyYXlUeXBlLm1hbmdsZWROYW1l
KCksICI7XG4iKTsKKyAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJh
eVR5cGU+KHVubmFtZWRUeXBlKTsKKworICAgICAgICBhdXRvJiBwYXJlbnQgPSBhcnJheVR5cGUu
dHlwZSgpOworICAgICAgICBhdXRvIHBhcmVudE1hbmdsZWROYW1lID0gbWFuZ2xlZE5hbWVGb3JU
eXBlKHBhcmVudCk7CisgICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVp
bGRlciwgcGFyZW50LCBwYXJlbnRNYW5nbGVkTmFtZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0
ZWRVbm5hbWVkVHlwZXMpOworCisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
InR5cGVkZWYgYXJyYXk8IiwgcGFyZW50TWFuZ2xlZE5hbWUsICIsICIsIGFycmF5VHlwZS5udW1F
bGVtZW50cygpLCAiPiAiLCBtYW5nbGVkTmFtZSwgIjtcbiIpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CiAKLSAgICBlbWl0dGVkVW5uYW1lZFR5cGVzLmFkZCgmYmFzZVR5cGVOYW1lTm9kZSk7
CisgICAgZW1pdHRlZFVubmFtZWRUeXBlcy5hZGQoVW5uYW1lZFR5cGVLZXkgeyB1bm5hbWVkVHlw
ZSB9KTsKIH0KIAotdm9pZCBUeXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0aW9uKFN0cmlu
Z0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUsIEhhc2hT
ZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVO
YW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzKQordm9pZCBUeXBlTmFtZXI6OmVtaXROYW1l
ZFR5cGVEZWZpbml0aW9uKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIEFTVDo6TmFtZWRU
eXBlJiBuYW1lZFR5cGUsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1l
ZFR5cGU+PiYgbmVpZ2hib3JzLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1l
ZFR5cGVzLCBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiYgZW1pdHRlZFVubmFtZWRUeXBlcykKIHsK
ICAgICBpZiAoZW1pdHRlZE5hbWVkVHlwZXMuY29udGFpbnMoJm5hbWVkVHlwZSkpCiAgICAgICAg
IHJldHVybjsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9kZXBlbmRlbmN5R3JhcGguZmluZCgmbmFt
ZWRUeXBlKTsKLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9kZXBlbmRlbmN5R3JhcGguZW5kKCkp
OwotICAgIGZvciAoYXV0byYgYmFzZVR5cGVOYW1lTm9kZSA6IGl0ZXJhdG9yLT52YWx1ZSkKLSAg
ICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWlsZGVyLCBiYXNlVHlwZU5h
bWVOb2RlLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7Ci0gICAgaWYg
KGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7CisKKyAgICBmb3Ig
KGF1dG8mIHVubmFtZVR5cGUgOiBuZWlnaGJvcnMpCisgICAgICAgIGVtaXRVbm5hbWVkVHlwZURl
ZmluaXRpb24oc3RyaW5nQnVpbGRlciwgdW5uYW1lVHlwZSwgbWFuZ2xlZE5hbWVGb3JUeXBlKHVu
bmFtZVR5cGUpLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7CisKKyAg
ICBzd2l0Y2ggKG5hbWVkVHlwZS5raW5kKCkpIHsKKyAgICBjYXNlIEFTVDo6TmFtZWRUeXBlOjpL
aW5kOjpFbnVtZXJhdGlvbkRlZmluaXRpb246IHsKICAgICAgICAgYXV0byYgZW51bWVyYXRpb25E
ZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KG5hbWVkVHlw
ZSk7CiAgICAgICAgIGF1dG8mIGJhc2VUeXBlID0gZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUo
KS51bmlmeU5vZGUoKTsKKwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJl
bnVtIGNsYXNzICIsIG1hbmdsZWROYW1lRm9yVHlwZShlbnVtZXJhdGlvbkRlZmluaXRpb24pLCAi
IDogIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNlVHlw
ZSkpLCAiIHtcbiIpOwogICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51
bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKQogICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgICIsIG1hbmdsZWROYW1lRm9yRW51bWVyYXRp
b25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpLCAiID0gIiwgZW51bWVyYXRpb25NZW1iZXIuZ2V0
KCkudmFsdWUoKSwgIixcbiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifTtcbiIp
OwotICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlw
ZSkpIHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQVNUOjpOYW1lZFR5cGU6Oktp
bmQ6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbjogewogICAgICAgICAvLyBOYXRpdmUgdHlwZXMgYWxy
ZWFkeSBoYXZlIGRlZmluaXRpb25zLiBUaGVyZSdzIG5vdGhpbmcgdG8gZG8uCi0gICAgfSBlbHNl
IGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgQVNUOjpOYW1lZFR5cGU6OktpbmQ6OlN0cnVjdHVyZURl
ZmluaXRpb246IHsKICAgICAgICAgYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA9IGRvd25jYXN0
PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKKwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJzdHJ1Y3QgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHN0cnVj
dHVyZURlZmluaXRpb24pLCAiIHtcbiIpOwogICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVs
ZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCiAgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgIiwgbWFuZ2xlZE5hbWVGb3JU
eXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKSwgJyAnLCBtYW5nbGVkTmFtZUZvclN0cnVjdHVy
ZUVsZW1lbnQoc3RydWN0dXJlRWxlbWVudCksICI7XG4iKTsKICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIn07XG4iKTsKLSAgICB9IGVsc2UgeworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBBU1Q6Ok5hbWVkVHlwZTo6S2luZDo6VHlwZURlZmluaXRpb246IHsKICAgICAgICAg
YXV0byYgdHlwZURlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1l
ZFR5cGUpOworCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInR5cGVkZWYg
IiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uLnR5cGUoKSksICcgJywgbWFuZ2xl
ZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uKSwgIjtcbiIpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CisKICAgICBlbWl0dGVkTmFtZWRUeXBlcy5hZGQoJm5hbWVkVHlwZSk7CiB9CiAKIHZv
aWQgVHlwZU5hbWVyOjplbWl0TWV0YWxUeXBlRGVmaW5pdGlvbnMoU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlcikKIHsKICAgICBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4gZW1pdHRlZE5hbWVk
VHlwZXM7Ci0gICAgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4gZW1pdHRlZFVubmFtZWRUeXBl
czsKLSAgICBmb3IgKGF1dG8mIG5hbWVkVHlwZSA6IG1fZGVwZW5kZW5jeUdyYXBoLmtleXMoKSkK
LSAgICAgICAgZW1pdE5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgKm5hbWVkVHlw
ZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMpOwotICAgIGZvciAoYXV0
byYgbm9kZSA6IG1fdW5uYW1lZFR5cGVzVW5pcXVpbmdNYXAudmFsdWVzKCkpCi0gICAgICAgIGVt
aXRVbm5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgKm5vZGUsIGVtaXR0ZWROYW1l
ZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKKyAgICBIYXNoU2V0PFVubmFtZWRUeXBlS2V5
PiBlbWl0dGVkVW5uYW1lZFR5cGVzOworICAgIGZvciAoYXV0byYgW25hbWVkVHlwZSwgbmVpZ2hi
b3JzXSA6IG1fZGVwZW5kZW5jeUdyYXBoKQorICAgICAgICBlbWl0TmFtZWRUeXBlRGVmaW5pdGlv
bihzdHJpbmdCdWlsZGVyLCAqbmFtZWRUeXBlLCBuZWlnaGJvcnMsIGVtaXR0ZWROYW1lZFR5cGVz
LCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKKyAgICBmb3IgKGF1dG8mIFt1bm5hbWVkVHlwZUtleSwg
bWFuZ2xlZE5hbWVdIDogbV91bm5hbWVkVHlwZU1hcHBpbmcpCisgICAgICAgIGVtaXRVbm5hbWVk
VHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgdW5uYW1lZFR5cGVLZXkudW5uYW1lZFR5cGUo
KSwgbWFuZ2xlZE5hbWUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsK
K30KKworU3RyaW5nIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgcmV0dXJuIHdyaXRl
TmF0aXZlVHlwZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwogfQogCiBNYW5nbGVkVHlwZU5hbWUg
VHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5
cGUpCiB7Ci0gICAgcmV0dXJuIGZpbmQodW5uYW1lZFR5cGUpLm1hbmdsZWROYW1lKCk7CisgICAg
YXV0byBpdGVyYXRvciA9IG1fdW5uYW1lZFR5cGVNYXBwaW5nLmZpbmQoVW5uYW1lZFR5cGVLZXkg
eyB1bm5hbWVkVHlwZSB9KTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV91bm5hbWVkVHlwZU1h
cHBpbmcuZW5kKCkpOworICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7CiB9CiAKIE1hbmdsZWRP
ck5hdGl2ZVR5cGVOYW1lIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmFtZWRU
eXBlJiBuYW1lZFR5cGUpCkBAIC00NDksNyArMzI5LDYgQEAgTWFuZ2xlZE9yTmF0aXZlVHlwZU5h
bWUgVHlwZU5hbWVyOjptYW5nbAogICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7CiB9CiAKLQog
TWFuZ2xlZEVudW1lcmF0aW9uTWVtYmVyTmFtZSBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yRW51
bWVyYXRpb25NZW1iZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIp
CiB7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fZW51bWVyYXRpb25NZW1iZXJNYXBwaW5nLmZpbmQo
JmVudW1lcmF0aW9uTWVtYmVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaAkocmV2aXNpb24g
MjQ4NTMyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xUeXBlTmFtZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGVtaXRNZXRhbFR5cGVzKFN0cmluZ0J1aWxkZXImKTsKIAotICAgIC8vIE11c3Qg
YmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgbWV0YWxUeXBlcygpLgorICAgIC8vIE11c3QgYmUgY2Fs
bGVkIGFmdGVyIGNhbGxpbmcgZW1pdE1ldGFsVHlwZXMoKS4KICAgICBTdHJpbmcgbWFuZ2xlZE5h
bWVGb3JUeXBlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CiAgICAgTWFuZ2xlZFR5cGVO
YW1lIG1hbmdsZWROYW1lRm9yVHlwZShBU1Q6OlVubmFtZWRUeXBlJik7CiAgICAgTWFuZ2xlZE9y
TmF0aXZlVHlwZU5hbWUgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmFtZWRUeXBlJik7CkBAIC04
MywyMCArODMsMTcgQEAgcHJpdmF0ZToKIAogICAgIE1hbmdsZWRFbnVtZXJhdGlvbk1lbWJlck5h
bWUgZ2VuZXJhdGVOZXh0RW51bWVyYXRpb25NZW1iZXJOYW1lKCkgeyByZXR1cm4geyBtX2VudW1l
cmF0aW9uTWVtYmVyQ291bnQrKyB9OyB9CiAKLSAgICB2b2lkIGVtaXROYW1lZFR5cGVEZWZpbml0
aW9uKFN0cmluZ0J1aWxkZXImLCBBU1Q6Ok5hbWVkVHlwZSYsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5
cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0
dGVkVW5uYW1lZFR5cGVzKTsKLSAgICB2b2lkIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oU3Ry
aW5nQnVpbGRlciYsIEJhc2VUeXBlTmFtZU5vZGUmLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4m
IGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVu
bmFtZWRUeXBlcyk7CisgICAgdm9pZCBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihTdHJpbmdCdWls
ZGVyJiwgQVNUOjpOYW1lZFR5cGUmLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
OlVubmFtZWRUeXBlPj4mLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5
cGVzLCBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiYgZW1pdHRlZFVubmFtZWRUeXBlcyk7CisgICAg
dm9pZCBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKFN0cmluZ0J1aWxkZXImLCBBU1Q6OlVubmFt
ZWRUeXBlJiwgTWFuZ2xlZFR5cGVOYW1lLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0
ZWROYW1lZFR5cGVzLCBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiYgZW1pdHRlZFVubmFtZWRUeXBl
cyk7CiAgICAgdm9pZCBlbWl0TWV0YWxUeXBlRGVjbGFyYXRpb25zKFN0cmluZ0J1aWxkZXImKTsK
ICAgICB2b2lkIGVtaXRNZXRhbFR5cGVEZWZpbml0aW9ucyhTdHJpbmdCdWlsZGVyJik7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QmFzZVR5cGVOYW1lTm9kZT4gY3JlYXRlTmFtZU5vZGUoQVNUOjpV
bm5hbWVkVHlwZSYsIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCk7Ci0gICAgQmFzZVR5cGVOYW1l
Tm9kZSogaW5zZXJ0KEFTVDo6VW5uYW1lZFR5cGUmKTsKLSAgICBCYXNlVHlwZU5hbWVOb2RlJiBm
aW5kKEFTVDo6VW5uYW1lZFR5cGUmKTsKKyAgICB2b2lkIHVuaXF1ZUFuZEdlbmVyYXRlTmFtZShB
U1Q6OlVubmFtZWRUeXBlJik7CiAKICAgICBQcm9ncmFtJiBtX3Byb2dyYW07Ci0gICAgSGFzaE1h
cDxVbm5hbWVkVHlwZUtleSwgc3RkOjp1bmlxdWVfcHRyPEJhc2VUeXBlTmFtZU5vZGU+LCBVbm5h
bWVkVHlwZUtleTo6SGFzaCwgVW5uYW1lZFR5cGVLZXk6OlRyYWl0cz4gbV91bm5hbWVkVHlwZXNV
bmlxdWluZ01hcDsKLSAgICBIYXNoTWFwPEFTVDo6VW5uYW1lZFR5cGUqLCBCYXNlVHlwZU5hbWVO
b2RlKj4gbV91bm5hbWVkVHlwZU1hcHBpbmc7CisgICAgSGFzaE1hcDxVbm5hbWVkVHlwZUtleSwg
TWFuZ2xlZFR5cGVOYW1lPiBtX3VubmFtZWRUeXBlTWFwcGluZzsKICAgICBIYXNoTWFwPEFTVDo6
TmFtZWRUeXBlKiwgTWFuZ2xlZFR5cGVOYW1lPiBtX25hbWVkVHlwZU1hcHBpbmc7Ci0gICAgSGFz
aE1hcDxBU1Q6Ok5hbWVkVHlwZSosIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VU
eXBlTmFtZU5vZGU+Pj4gbV9kZXBlbmRlbmN5R3JhcGg7CisgICAgSGFzaE1hcDxBU1Q6Ok5hbWVk
VHlwZSosIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+Pj4g
bV9kZXBlbmRlbmN5R3JhcGg7CiAgICAgSGFzaE1hcDxBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKiwg
TWFuZ2xlZEVudW1lcmF0aW9uTWVtYmVyTmFtZT4gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBpbmc7
CiAgICAgSGFzaE1hcDxBU1Q6OlN0cnVjdHVyZUVsZW1lbnQqLCBNYW5nbGVkU3RydWN0dXJlRWxl
bWVudE5hbWU+IG1fc3RydWN0dXJlRWxlbWVudE1hcHBpbmc7CiAgICAgdW5zaWduZWQgbV90eXBl
Q291bnQgeyAwIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376175</attachid>
            <date>2019-08-13 09:37:13 -0700</date>
            <delta_ts>2019-08-17 13:58:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200632-20190812110051.patch</filename>
            <type>text/plain</type>
            <size>28057</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODUzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE5LTA4LTEyICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIFR5cGVOYW1lciBjYW4g
YmUgc2ltcGxpZmllZCBieSByZXBsYWNpbmcgQmFzZVR5cGVOYW1lTm9kZSB3aXRoIHVuaXF1ZWQg
QVNUOjpVbm5hbWVkVHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMDYzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZXJlIGlzIG5vIGxvbmdlciBhIHJlYXNvbiB0byBrZWVwIGEgcGFyYWxsZWwg
dHJlZSBvZiB0aGUgVW5uYW1lZFR5cGUtbGlrZSBvYmplY3RzCisgICAgICAgIEJhc2VUeXBlTmFt
ZU5vZGVzLiBJbnN0ZWFkLCB3ZSBjYW4gc3RvcmUgYSBzaW5nbGUgSGFzaE1hcCBtYXBwaW5nIGZy
b20gVW5uYW1lZFR5cGVLZXlzCisgICAgICAgIHRvIE1hbmdsZWRUeXBlTmFtZSwgYW5kIHVzZSB0
aGUgdGhlIFVubmFtZWRUeXBlIHN0b3JlZCBpbiB0aGUgVW5uYW1lZFR5cGVLZXkgd2hpbGUgCisg
ICAgICAgIGVtaXR0aW5nIHRoZSBtZXRhbCBjb2RlLiAgICAgICAgCisKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZUhhc2guaDoKKyAgICAgICAgRGVm
aW5lIEhhc2hUcmFpdHMgYW5kIERlZmF1bHRIYXNoIHNwZWNpYWxpemF0aW9ucyBmb3IgVW5uYW1l
ZFR5cGVLZXkgdG8gc2ltcGxpZnkKKyAgICAgICAgdXNlcyBvZiBVbm5hbWVkVHlwZUtleSBhcyBh
IGtleSBpbiBIYXNoTWFwL0hhc2hTZXQuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICBUYWtlIGFkdmFudGFn
ZSBvZiBkZWZhdWx0IEhhc2hUcmFpdHMgYW5kIERlZmF1bHRIYXNoIGZvciBVbm5hbWVkVHlwZUtl
eS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVy
Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Omluc2VydCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2Vu
ZXJhdGVVbmlxdWVkVHlwZU5hbWUpOgorICAgICAgICBSZXBsYWNlIG9sZCBpbnNlcnQgZnVuY3Rp
b24gd2l0aCBnZW5lcmF0ZVVuaXF1ZWRUeXBlTmFtZSwgd2hpY2ggdW5pcXVlcyBhbmQgZ2VuZXJh
dGVzCisgICAgICAgIG5hbWVzIGZvciB0aGUgVW5uYW1lZFR5cGUgYW5kIGFueSAncGFyZW50JyBV
bm5hbWVkVHlwZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVy
Ojp2aXNpdChOYXRpdmVUeXBlRGVjbGFyYXRpb24mKSk6CisgICAgICAgIFN0b3AgYWRkaW5nIE5h
dGl2ZVR5cGVEZWNsYXJhdGlvbnMgdG8gbV9kZXBlbmRlbmN5R3JhcGguIFRoZXkgbmV2ZXIgaGF2
ZSBhbnkKKyAgICAgICAgbmVpZ2hib3JzIGFuZCBuZXZlciBlbWl0IGFueSBtZXRhbCBjb2RlLCBz
byBhcmUgY29tcGxldGUgbm8tb3BzLgorCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkJhc2VUeXBlTmFtZU5vZGUpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgQmFzZVR5cGVOYW1l
Tm9kZSBhbmQgc3ViY2xhc3Nlcy4KKworICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpU
eXBlTmFtZXI6OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFs
OjpUeXBlTmFtZXI6OmNyZWF0ZU5hbWVOb2RlKTogRGVsZXRlZC4KKyAgICAgICAgV2Ugbm8gbG9u
Z2VyIG5lZWQgdGhlIGZpbmQgb3IgY3JlYXRlTmFtZU5vZGUgZnVuY3Rpb25zLCBhcyB0aGUgVW5u
YW1lZFR5cGVzIGNhbiBiZSBub3cgYmUKKyAgICAgICAgdXNlZCBkaXJlY3RseSBldmVyeXdoZXJl
LgorCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6ZW1pdFVubmFt
ZWRUeXBlRGVmaW5pdGlvbik6CisgICAgICAgIFN3aXRjaCB0byBkaXJlY3RseSB1c2luZyB0aGUg
VW5uYW1lZFR5cGUgYW5kIGFsd2F5cyBoYXZlIHRoZSBjYWxsZXIgcGFzcyBpbiB0aGUgbWFuZ2xl
ZAorICAgICAgICBuYW1lLCBzaW5jZSBpbiB0aGUgbWFpbiBlbWl0IGxvb3AsIHdlIGFsd2F5cyBo
YXZlIGFjY2VzcyB0byB0aGUgdGhlbS4gQWxzbywgaW5saW5lIHRoZQorICAgICAgICB0aGUgcmVj
dXJzaXZlIGNhbGxzIHRvIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uIGZvciAncGFyZW50JyB0eXBl
cyB0byBhdm9pZCB1bm5lY2Vzc2FyeQorICAgICAgICBleHRyYSBzd2l0Y2ggb3ZlciB0aGUga2lu
ZCBnZXR0aW5nIHRoZSBwYXJlbnQsIGFuZCBhdm9pZCBpdCBlbnRpcmVseSBmb3IgVHlwZVJlZmVy
ZW5jZQorICAgICAgICB3aGljaCBuZXZlciBoYXMgYSBwYXJlbnQuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0
aW9uKToKKyAgICAgICAgU3dpdGNoZXMgdG8gbm93IHBhc3NpbmcgaW4gdGhlIG5laWdoYm9ycywg
c2luY2UgdGhleSBhcmUgYWx3YXlzIGF2YWlsYWJsZSBpbiB0aGUgbWFpbiAKKyAgICAgICAgZW1p
dCBsb29wLiBBbHNvIG1vdmUgdG8gYSBzd2l0Y2ggc3RhdGVtZW50IHJhdGhlciB0aGFuIGlmcyBm
b3IgY29uc2lzdGVuY3kuIAorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6VHlwZU5hbWVyOjplbWl0TWV0YWxUeXBlRGVmaW5pdGlvbnMpOgorICAgICAgICBQYXNzIGtl
eXMgYW5kIHZhbHVlcyBpbnRvIHRoZSBlbWl0IGZ1bmN0aW9ucyB0byBhdm9pZCBkb3VibGUgbG9v
a3Vwcy4KKworICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Om1hbmds
ZWROYW1lRm9yVHlwZSk6CisgICAgICAgIFVwZGF0ZSB0byBoYXNoIGxvb2t1cC4KKwogMjAxOS0w
OC0xMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEdQVUJ1ZmZl
ciBzZWVtcyB0byBiZSByZWYnZCAvIGRlcmVmJ2QgZnJvbSBtdWx0aXBsZSB0aHJlYWQgY29uY3Vy
cmVudGx5IGJ1dCBpcyBub3QgVGhyZWFkU2FmZVJlZkNvdW50ZWQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjQ4NTMyKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZpc2l0
b3I6OnZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiAgICAgfQogCi0gICAgSGFzaFNldDxV
bm5hbWVkVHlwZUtleSwgVW5uYW1lZFR5cGVLZXk6Okhhc2gsIFVubmFtZWRUeXBlS2V5OjpUcmFp
dHM+IHRha2VVbm5hbWVkVHlwZXMoKQorICAgIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXk+IHRha2VV
bm5hbWVkVHlwZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV91bm5hbWVkVHlw
ZXMpOwogICAgIH0KQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICBtX25hbWVk
VHlwZXMuYXBwZW5kKHR5cGUpOwogICAgIH0KIAotICAgIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXks
IFVubmFtZWRUeXBlS2V5OjpIYXNoLCBVbm5hbWVkVHlwZUtleTo6VHJhaXRzPiBtX3VubmFtZWRU
eXBlczsKKyAgICBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiBtX3VubmFtZWRUeXBlczsKICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IG1fbmFtZWRUeXBl
czsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFVubmFtZWRUeXBlSGFzaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlSGFzaC5oCShyZXZpc2lvbiAyNDg1
MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5h
bWVkVHlwZUhhc2guaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNCArNzQsMTMgQEAgcHJpdmF0ZToK
IAogfQogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxX
ZWJDb3JlOjpXSExTTDo6VW5uYW1lZFR5cGVLZXk+IDogV2ViQ29yZTo6V0hMU0w6OlVubmFtZWRU
eXBlS2V5OjpUcmFpdHMgeyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29y
ZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5PiB7CisgICAgdHlwZWRlZiBXZWJDb3JlOjpXSExTTDo6
VW5uYW1lZFR5cGVLZXk6Okhhc2ggSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJldmlzaW9uIDI0ODUzMikKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTI4ICs1OCw0MyBAQCBuYW1lc3BhY2UgV0hMU0wg
ewogCiBuYW1lc3BhY2UgTWV0YWwgewogCi0vLyBGSVhNRTogTG9vayBpbnRvIHJlcGxhY2luZyBC
YXNlVHlwZU5hbWVOb2RlIHdpdGggYSBzaW1wbGUgc3RydWN0IHsgUmVmUHRyPFVubmFtZWRUeXBl
PiBwYXJlbnQ7IE1hbmdsZWRUeXBlTmFtZTsgfSB0aGF0IFVubmFtZWRUeXBlS2V5cyBtYXAgdG8u
Ci1jbGFzcyBCYXNlVHlwZU5hbWVOb2RlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBCYXNlVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwg
TWFuZ2xlZFR5cGVOYW1lJiYgbWFuZ2xlZE5hbWUsIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQga2lu
ZCkKLSAgICAgICAgOiBtX3BhcmVudChwYXJlbnQpCi0gICAgICAgICwgbV9tYW5nbGVkTmFtZSht
YW5nbGVkTmFtZSkKLSAgICAgICAgLCBtX2tpbmQoa2luZCkKLSAgICB7Ci0gICAgfQotICAgIHZp
cnR1YWwgfkJhc2VUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7Ci0gICAgCi0gICAgQVNUOjpVbm5h
bWVkVHlwZTo6S2luZCBraW5kKCkgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgYm9vbCBpc1JlZmVy
ZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBBU1Q6OlVubmFtZWRU
eXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlOyB9Ci0gICAgYm9vbCBpc1BvaW50ZXJUeXBlTmFtZU5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6UG9p
bnRlcjsgfQotICAgIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCA9PSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheVJlZmVyZW5jZTsg
fQotICAgIGJvb2wgaXNBcnJheVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9
PSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheTsgfQotCi0gICAgQmFzZVR5cGVOYW1lTm9k
ZSogcGFyZW50KCkgeyByZXR1cm4gbV9wYXJlbnQ7IH0KLSAgICBNYW5nbGVkVHlwZU5hbWUgbWFu
Z2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX21hbmdsZWROYW1lOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgQmFzZVR5cGVOYW1lTm9kZSogbV9wYXJlbnQ7Ci0gICAgTWFuZ2xlZFR5cGVOYW1lIG1fbWFu
Z2xlZE5hbWU7Ci0gICAgQVNUOjpVbm5hbWVkVHlwZTo6S2luZCBtX2tpbmQ7Ci19OwotCi1jbGFz
cyBBcnJheVR5cGVOYW1lTm9kZSBmaW5hbCA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBBcnJheVR5cGVOYW1lTm9k
ZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmdsZWRUeXBlTmFtZSYmIG1hbmdsZWROYW1l
LCB1bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVu
dCwgV1RGTW92ZShtYW5nbGVkTmFtZSksIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5KQot
ICAgICAgICAsIG1fbnVtRWxlbWVudHMobnVtRWxlbWVudHMpCi0gICAgewotICAgIH0KLSAgICB2
aXJ0dWFsIH5BcnJheVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKLSAgICB1bnNpZ25lZCBudW1F
bGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxlbWVudHM7IH0KLQotcHJpdmF0ZToKLSAg
ICB1bnNpZ25lZCBtX251bUVsZW1lbnRzOwotfTsKLQotY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBl
TmFtZU5vZGUgZmluYWwgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUo
QmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBNYW5nbGVkVHlwZU5hbWUmJiBtYW5nbGVkTmFtZSwg
QVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQotICAgICAgICA6IEJhc2VUeXBlTmFtZU5v
ZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSwgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6
QXJyYXlSZWZlcmVuY2UpCi0gICAgICAgICwgbV9hZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQot
ICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSA9
IGRlZmF1bHQ7Ci0gICAgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KLQotcHJpdmF0ZToKLSAgICBBU1Q6OkFkZHJlc3NTcGFj
ZSBtX2FkZHJlc3NTcGFjZTsKLX07Ci0KLWNsYXNzIFBvaW50ZXJUeXBlTmFtZU5vZGUgZmluYWwg
OiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgUG9pbnRlclR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJl
bnQsIE1hbmdsZWRUeXBlTmFtZSYmIG1hbmdsZWROYW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRy
ZXNzU3BhY2UpCi0gICAgICAgIDogQmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFu
Z2xlZE5hbWUpLCBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpQb2ludGVyKQotICAgICAgICAsIG1f
YWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKLSAgICB7Ci0gICAgfQotICAgIHZpcnR1YWwgflBv
aW50ZXJUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7Ci0gICAgQVNUOjpBZGRyZXNzU3BhY2UgYWRk
cmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KLQotcHJpdmF0ZToK
LSAgICBBU1Q6OkFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKLX07Ci0KLWNsYXNzIFJlZmVy
ZW5jZVR5cGVOYW1lTm9kZSBmaW5hbCA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBSZWZlcmVuY2VUeXBlTmFtZU5v
ZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBNYW5nbGVkVHlwZU5hbWUmJiBtYW5nbGVkTmFt
ZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKLSAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2Rl
KHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSksIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OlR5
cGVSZWZlcmVuY2UpCi0gICAgICAgICwgbV9uYW1lZFR5cGUobmFtZWRUeXBlKQotICAgIHsKLSAg
ICB9Ci0gICAgdmlydHVhbCB+UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgPSBkZWZhdWx0OwotICAg
IEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUoKSB7IHJldHVybiBtX25hbWVkVHlwZTsgfQotCi1w
cml2YXRlOgotICAgIEFTVDo6TmFtZWRUeXBlJiBtX25hbWVkVHlwZTsKLX07Ci0KK1R5cGVOYW1l
cjo6VHlwZU5hbWVyKFByb2dyYW0mIHByb2dyYW0pCisgICAgOiBtX3Byb2dyYW0ocHJvZ3JhbSkK
K3sKIH0KIAotfQorVHlwZU5hbWVyOjp+VHlwZU5hbWVyKCkgPSBkZWZhdWx0OwogCitzdGF0aWMg
QVNUOjpVbm5hbWVkVHlwZSogcGFyZW50KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQor
eworICAgIHN3aXRjaCAodW5uYW1lZFR5cGUua2luZCgpKSB7CisgICAgY2FzZSBBU1Q6OlVubmFt
ZWRUeXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OlBvaW50ZXI6CisgICAgICAgIHJldHVybiAm
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCk7Cisg
ICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheVJlZmVyZW5jZToKKyAgICAgICAg
cmV0dXJuICZkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmVs
ZW1lbnRUeXBlKCk7CisgICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheToKKyAg
ICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUo
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KIH0KIAotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQ
RV9OQU1FRF9OT0RFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VG9WYWx1ZVR5cGVOYW1lKSBc
Ci0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QmFz
ZVR5cGVOYW1lTm9kZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JB
U0VfVFlQRV9OQU1FRF9OT0RFKEFycmF5VHlwZU5hbWVOb2RlLCBpc0FycmF5VHlwZU5hbWVOb2Rl
KCkpCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUo
QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUo
KSkKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShQ
b2ludGVyVHlwZU5hbWVOb2RlLCBpc1BvaW50ZXJUeXBlTmFtZU5vZGUoKSkKLQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShSZWZlcmVuY2VUeXBlTmFt
ZU5vZGUsIGlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotbmFtZXNwYWNlIFdITFNMIHsKLQotbmFtZXNwYWNlIE1ldGFsIHsKLQotVHlwZU5hbWVyOjpU
eXBlTmFtZXIoUHJvZ3JhbSYgcHJvZ3JhbSkKLSAgICA6IG1fcHJvZ3JhbShwcm9ncmFtKQordm9p
ZCBUeXBlTmFtZXI6OmdlbmVyYXRlVW5pcXVlZFR5cGVOYW1lKEFTVDo6VW5uYW1lZFR5cGUmIHVu
bmFtZWRUeXBlKQogewotfQorICAgIGF1dG8qIHBhcmVudFVubmFtZWRUeXBlID0gcGFyZW50KHVu
bmFtZWRUeXBlKTsKKyAgICBpZiAocGFyZW50VW5uYW1lZFR5cGUpCisgICAgICAgIGdlbmVyYXRl
VW5pcXVlZFR5cGVOYW1lKCpwYXJlbnRVbm5hbWVkVHlwZSk7CiAKLVR5cGVOYW1lcjo6flR5cGVO
YW1lcigpID0gZGVmYXVsdDsKKyAgICBtX3VubmFtZWRUeXBlTWFwcGluZy5lbnN1cmUoVW5uYW1l
ZFR5cGVLZXkgeyB1bm5hbWVkVHlwZSB9LCBbJl0geworICAgICAgICByZXR1cm4gZ2VuZXJhdGVO
ZXh0VHlwZU5hbWUoKTsKKyAgICB9KTsKK30KIAogdm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6
VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQogewotICAgIGluc2VydCh1bm5hbWVkVHlwZSk7Cisg
ICAgZ2VuZXJhdGVVbmlxdWVkVHlwZU5hbWUodW5uYW1lZFR5cGUpOwogfQogCiB2b2lkIFR5cGVO
YW1lcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikKQEAgLTE5NywxNyArMTEyLDE0IEBAIHZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uRGUKICAgICBWaXNpdG9yOjp2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOwog
CiAgICAgewotICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5h
bWVOb2RlPj4gbmVpZ2hib3JzID0geyBmaW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkp
IH07Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZlbnVt
ZXJhdGlvbkRlZmluaXRpb24sIFdURk1vdmUobmVpZ2hib3JzKSk7CisgICAgICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZlbnVtZXJhdGlvbkRlZmluaXRpb24sIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiB7IGVudW1lcmF0
aW9uRGVmaW5pdGlvbi50eXBlKCkgfSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfQogfQogCi12b2lkIFR5cGVOYW1lcjo6dmlz
aXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3Zv
aWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpCiB7CiAgICAg
Ly8gTmF0aXZlIHR5cGUgZGVjbGFyYXRpb25zIGFscmVhZHkgaGF2ZSBuYW1lcywgYW5kIGFyZSBh
bHJlYWR5IGRlY2xhcmVkIGluIE1ldGFsLgotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRl
bmN5R3JhcGguYWRkKCZuYXRpdmVUeXBlRGVjbGFyYXRpb24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+PigpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGFkZFJl
c3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCiB2b2lkIFR5cGVOYW1lcjo6dmlzaXQo
QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQpAQCAtMjE4LDEx
ICsxMzAsMTEgQEAgdm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaQogICAg
IH0KICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKICAgICB7Ci0gICAg
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+PiBuZWln
aGJvcnM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1l
ZFR5cGU+PiBuZWlnaGJvcnM7CiAgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6
IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkgewogICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nLmFkZCgmc3RydWN0dXJl
RWxlbWVudCwgZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKSk7CiAgICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgICAg
ICAgICAgbmVpZ2hib3JzLmFwcGVuZChmaW5kKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKSk7Cisg
ICAgICAgICAgICBuZWlnaGJvcnMuYXBwZW5kKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsKICAg
ICAgICAgfQogICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVwZW5kZW5jeUdyYXBoLmFkZCgm
c3RydWN0dXJlRGVmaW5pdGlvbiwgV1RGTW92ZShuZWlnaGJvcnMpKTsKICAgICAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKQEAgLTIzNywxNSArMTQ5
LDE0IEBAIHZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW8KICAgICB9CiAg
ICAgVmlzaXRvcjo6dmlzaXQodHlwZURlZmluaXRpb24pOwogICAgIHsKLSAgICAgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFzZVR5cGVOYW1lTm9kZT4+IG5laWdoYm9ycyA9IHsg
ZmluZCh0eXBlRGVmaW5pdGlvbi50eXBlKCkpIH07Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9kZXBlbmRlbmN5R3JhcGguYWRkKCZ0eXBlRGVmaW5pdGlvbiwgV1RGTW92ZShuZWlnaGJvcnMp
KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5hZGQoJnR5cGVE
ZWZpbml0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBl
Pj4geyB0eXBlRGVmaW5pdGlvbi50eXBlKCkgfSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfQogfQogCiB2b2lkIFR5cGVOYW1l
cjo6dmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQogewotICAgIGluc2VydChleHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICBnZW5lcmF0ZVVuaXF1ZWRUeXBlTmFtZShleHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKICAgICBWaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsK
IH0KIApAQCAtMjU1LDc0ICsxNjYsNiBAQCB2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpDYWxs
RXhwcmVzc2lvCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcmd1bWVudCk7CiB9CiAKLVN0
cmluZyBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQotewotICAgIHJldHVybiB3cml0ZU5hdGl2ZVR5
cGUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKLX0KLQotQmFzZVR5cGVOYW1lTm9kZSYgVHlwZU5h
bWVyOjpmaW5kKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQotewotICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3VubmFtZWRUeXBlc1VuaXF1aW5nTWFwLmZpbmQodW5uYW1lZFR5cGUpOwotICAg
IEFTU0VSVChpdGVyYXRvciAhPSBtX3VubmFtZWRUeXBlc1VuaXF1aW5nTWFwLmVuZCgpKTsKLSAg
ICByZXR1cm4gKml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEJhc2VUeXBl
TmFtZU5vZGU+IFR5cGVOYW1lcjo6Y3JlYXRlTmFtZU5vZGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5u
YW1lZFR5cGUsIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCkKLXsKLSAgICBzd2l0Y2ggKHVubmFt
ZWRUeXBlLmtpbmQoKSkgewotICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6VHlwZVJl
ZmVyZW5jZTogewotICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8QVNUOjpU
eXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgp
LCB0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKLSAgICB9Ci0gICAgY2FzZSBBU1Q6OlVu
bmFtZWRUeXBlOjpLaW5kOjpQb2ludGVyOiB7Ci0gICAgICAgIGF1dG8mIHBvaW50ZXJUeXBlID0g
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOwotICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4
dFR5cGVOYW1lKCksIHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpKTsKLSAgICB9Ci0gICAgY2Fz
ZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheVJlZmVyZW5jZTogewotICAgICAgICBhdXRv
JiBhcnJheVJlZmVyZW5jZVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
dW5uYW1lZFR5cGUpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVJlZmVy
ZW5jZVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpLCBhcnJheVJl
ZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkpOwotICAgIH0KLSAgICBjYXNlIEFTVDo6VW5uYW1l
ZFR5cGU6OktpbmQ6OkFycmF5OiB7Ci0gICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPEFycmF5VHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCks
IGFycmF5VHlwZS5udW1FbGVtZW50cygpKTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBBU1Q6OlVu
bmFtZWRUeXBlKiBwYXJlbnQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCi17Ci0gICAg
c3dpdGNoICh1bm5hbWVkVHlwZS5raW5kKCkpIHsKLSAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6
OktpbmQ6OlR5cGVSZWZlcmVuY2U6Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNhc2Ug
QVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6UG9pbnRlcjoKLSAgICAgICAgcmV0dXJuICZkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKTsKLSAgICBjYXNl
IEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5UmVmZXJlbmNlOgotICAgICAgICByZXR1cm4g
JmRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5
cGUoKTsKLSAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5OgotICAgICAgICBy
ZXR1cm4gJmRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQot
fQotCi1CYXNlVHlwZU5hbWVOb2RlKiBUeXBlTmFtZXI6Omluc2VydChBU1Q6OlVubmFtZWRUeXBl
JiB1bm5hbWVkVHlwZSkKLXsKLSAgICBpZiAoYXV0byogcmVzdWx0ID0gbV91bm5hbWVkVHlwZU1h
cHBpbmcuZ2V0KCZ1bm5hbWVkVHlwZSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBh
dXRvKiBwYXJlbnRVbm5hbWVkVHlwZSA9IHBhcmVudCh1bm5hbWVkVHlwZSk7Ci0gICAgQmFzZVR5
cGVOYW1lTm9kZSogcGFyZW50Tm9kZSA9IHBhcmVudFVubmFtZWRUeXBlID8gaW5zZXJ0KCpwYXJl
bnRVbm5hbWVkVHlwZSkgOiBudWxscHRyOwotCi0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3VubmFt
ZWRUeXBlc1VuaXF1aW5nTWFwLmVuc3VyZShVbm5hbWVkVHlwZUtleSB7IHVubmFtZWRUeXBlIH0s
IFsmXSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVOYW1lTm9kZSh1bm5hbWVkVHlwZSwgcGFyZW50
Tm9kZSk7Ci0gICAgfSk7Ci0KLSAgICBtX3VubmFtZWRUeXBlTWFwcGluZy5hZGQoJnVubmFtZWRU
eXBlLCBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKLSAgICByZXR1cm4gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQogY2xhc3MgTWV0YWxUeXBlRGVjbGFyYXRp
b25Xcml0ZXIgZmluYWwgOiBwdWJsaWMgVmlzaXRvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CkBAIC0zNTAsOTQgKzE5MywxMzEgQEAgdm9pZCBUeXBlTmFtZXI6OmVt
aXRNZXRhbFR5cGVEZWNsYXJhdGlvbgogICAgIG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyLlZp
c2l0b3I6OnZpc2l0KG1fcHJvZ3JhbSk7CiB9CiAKLXZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1l
ZFR5cGVEZWZpbml0aW9uKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIEJhc2VUeXBlTmFt
ZU5vZGUmIGJhc2VUeXBlTmFtZU5vZGUsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRl
ZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5
cGVzKQordm9pZCBUeXBlTmFtZXI6OmVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oU3RyaW5nQnVp
bGRlciYgc3RyaW5nQnVpbGRlciwgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIE1hbmds
ZWRUeXBlTmFtZSBtYW5nbGVkTmFtZSwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVk
TmFtZWRUeXBlcywgSGFzaFNldDxVbm5hbWVkVHlwZUtleT4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMp
CiB7Ci0gICAgaWYgKGVtaXR0ZWRVbm5hbWVkVHlwZXMuY29udGFpbnMoJmJhc2VUeXBlTmFtZU5v
ZGUpKQorICAgIGlmIChlbWl0dGVkVW5uYW1lZFR5cGVzLmNvbnRhaW5zKFVubmFtZWRUeXBlS2V5
IHsgdW5uYW1lZFR5cGUgfSkpCiAgICAgICAgIHJldHVybjsKLQotICAgIGlmIChiYXNlVHlwZU5h
bWVOb2RlLnBhcmVudCgpKQotICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmlu
Z0J1aWxkZXIsICpiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpLCBlbWl0dGVkTmFtZWRUeXBlcywg
ZW1pdHRlZFVubmFtZWRUeXBlcyk7CiAgICAgCi0gICAgc3dpdGNoIChiYXNlVHlwZU5hbWVOb2Rl
LmtpbmQoKSkgeworICAgIHN3aXRjaCAodW5uYW1lZFR5cGUua2luZCgpKSB7CiAgICAgY2FzZSBB
U1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlOiB7Ci0gICAgICAgIGF1dG8mIG5h
bWVkVHlwZSA9IGRvd25jYXN0PFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9k
ZSkubmFtZWRUeXBlKCk7Ci0gICAgICAgIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1
aWxkZXIsIG5hbWVkVHlwZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ0eXBlZGVmICIsIG1hbmds
ZWROYW1lRm9yVHlwZShuYW1lZFR5cGUpLCAnICcsIGJhc2VUeXBlTmFtZU5vZGUubWFuZ2xlZE5h
bWUoKSwgIjtcbiIpOworICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8QVNU
OjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisKKyAgICAgICAgYXV0byYgcGFyZW50ID0g
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgYXV0byBwYXJlbnRNYW5nbGVk
TmFtZSA9IG1hbmdsZWROYW1lRm9yVHlwZSh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsK
KyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fZGVwZW5kZW5jeUdyYXBoLmZpbmQoJnBhcmVudCk7
CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2RlcGVuZGVuY3lHcmFwaC5lbmQoKSk7Cisg
ICAgICAgIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIsIHBhcmVudCwgaXRl
cmF0b3ItPnZhbHVlLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7CisK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidHlwZWRlZiAiLCBwYXJlbnRN
YW5nbGVkTmFtZSwgJyAnLCBtYW5nbGVkTmFtZSwgIjtcbiIpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpQb2ludGVyOiB7Ci0gICAgICAg
IGF1dG8mIHBvaW50ZXJUeXBlID0gZG93bmNhc3Q8UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5
cGVOYW1lTm9kZSk7Ci0gICAgICAgIEFTU0VSVChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidHlwZWRlZiAiLCB0b1N0cmlu
Zyhwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSksICcgJywgcG9pbnRlclR5cGUucGFyZW50KCkt
Pm1hbmdsZWROYW1lKCksICIqICIsIHBvaW50ZXJUeXBlLm1hbmdsZWROYW1lKCksICI7XG4iKTsK
KyAgICAgICAgYXV0byYgcG9pbnRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkVHlwZSk7CisKKyAgICAgICAgYXV0byYgcGFyZW50ID0gcG9pbnRlclR5cGUuZWxlbWVu
dFR5cGUoKTsKKyAgICAgICAgYXV0byBwYXJlbnRNYW5nbGVkTmFtZSA9IG1hbmdsZWROYW1lRm9y
VHlwZShwYXJlbnQpOworICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1
aWxkZXIsIHBhcmVudCwgcGFyZW50TWFuZ2xlZE5hbWUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0
dGVkVW5uYW1lZFR5cGVzKTsKKworICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KCJ0eXBlZGVmICIsIHRvU3RyaW5nKHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpKSwgJyAnLCBw
YXJlbnRNYW5nbGVkTmFtZSwgIiogIiwgbWFuZ2xlZE5hbWUsICI7XG4iKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6QXJyYXlSZWZlcmVu
Y2U6IHsKLSAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUeXBlID0gZG93bmNhc3Q8QXJyYXlS
ZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOwotICAgICAgICBBU1NFUlQo
YmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSk7CisgICAgICAgIGF1dG8mIGFycmF5UmVmZXJlbmNl
VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7CisK
KyAgICAgICAgYXV0byYgcGFyZW50ID0gYXJyYXlSZWZlcmVuY2VUeXBlLmVsZW1lbnRUeXBlKCk7
CisgICAgICAgIGF1dG8gcGFyZW50TWFuZ2xlZE5hbWUgPSBtYW5nbGVkTmFtZUZvclR5cGUocGFy
ZW50KTsKKyAgICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWlsZGVyLCBw
YXJlbnQsIHBhcmVudE1hbmdsZWROYW1lLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFt
ZWRUeXBlcyk7CisKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAg
ICAgICAgICJzdHJ1Y3QgIiwgYXJyYXlSZWZlcmVuY2VUeXBlLm1hbmdsZWROYW1lKCksICJ7IFxu
IgotICAgICAgICAgICAgIiAgICAiLCB0b1N0cmluZyhhcnJheVJlZmVyZW5jZVR5cGUuYWRkcmVz
c1NwYWNlKCkpLCAnICcsIGFycmF5UmVmZXJlbmNlVHlwZS5wYXJlbnQoKS0+bWFuZ2xlZE5hbWUo
KSwgIiogcG9pbnRlcjtcbiIKKyAgICAgICAgICAgICJzdHJ1Y3QgIiwgbWFuZ2xlZE5hbWUsICJ7
IFxuIgorICAgICAgICAgICAgIiAgICAiLCB0b1N0cmluZyhhcnJheVJlZmVyZW5jZVR5cGUuYWRk
cmVzc1NwYWNlKCkpLCAnICcsIHBhcmVudE1hbmdsZWROYW1lLCAiKiBwb2ludGVyO1xuIgogICAg
ICAgICAgICAgIiAgICB1aW50MzJfdCBsZW5ndGg7XG4iCiAgICAgICAgICAgICAifTtcbiIKICAg
ICAgICAgKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlw
ZTo6S2luZDo6QXJyYXk6IHsKLSAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QXJy
YXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOwotICAgICAgICBBU1NFUlQoYmFzZVR5
cGVOYW1lTm9kZS5wYXJlbnQoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoInR5cGVkZWYgYXJyYXk8IiwgYXJyYXlUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAi
LCAiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIj4gIiwgYXJyYXlUeXBlLm1hbmdsZWROYW1l
KCksICI7XG4iKTsKKyAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJh
eVR5cGU+KHVubmFtZWRUeXBlKTsKKworICAgICAgICBhdXRvJiBwYXJlbnQgPSBhcnJheVR5cGUu
dHlwZSgpOworICAgICAgICBhdXRvIHBhcmVudE1hbmdsZWROYW1lID0gbWFuZ2xlZE5hbWVGb3JU
eXBlKHBhcmVudCk7CisgICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVp
bGRlciwgcGFyZW50LCBwYXJlbnRNYW5nbGVkTmFtZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0
ZWRVbm5hbWVkVHlwZXMpOworCisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
InR5cGVkZWYgYXJyYXk8IiwgcGFyZW50TWFuZ2xlZE5hbWUsICIsICIsIGFycmF5VHlwZS5udW1F
bGVtZW50cygpLCAiPiAiLCBtYW5nbGVkTmFtZSwgIjtcbiIpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CiAKLSAgICBlbWl0dGVkVW5uYW1lZFR5cGVzLmFkZCgmYmFzZVR5cGVOYW1lTm9kZSk7
CisgICAgZW1pdHRlZFVubmFtZWRUeXBlcy5hZGQoVW5uYW1lZFR5cGVLZXkgeyB1bm5hbWVkVHlw
ZSB9KTsKIH0KIAotdm9pZCBUeXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0aW9uKFN0cmlu
Z0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUsIEhhc2hT
ZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVO
YW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzKQordm9pZCBUeXBlTmFtZXI6OmVtaXROYW1l
ZFR5cGVEZWZpbml0aW9uKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIEFTVDo6TmFtZWRU
eXBlJiBuYW1lZFR5cGUsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1l
ZFR5cGU+PiYgbmVpZ2hib3JzLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1l
ZFR5cGVzLCBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiYgZW1pdHRlZFVubmFtZWRUeXBlcykKIHsK
ICAgICBpZiAoZW1pdHRlZE5hbWVkVHlwZXMuY29udGFpbnMoJm5hbWVkVHlwZSkpCiAgICAgICAg
IHJldHVybjsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9kZXBlbmRlbmN5R3JhcGguZmluZCgmbmFt
ZWRUeXBlKTsKLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9kZXBlbmRlbmN5R3JhcGguZW5kKCkp
OwotICAgIGZvciAoYXV0byYgYmFzZVR5cGVOYW1lTm9kZSA6IGl0ZXJhdG9yLT52YWx1ZSkKLSAg
ICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWlsZGVyLCBiYXNlVHlwZU5h
bWVOb2RlLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7Ci0gICAgaWYg
KGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7CisKKyAgICBmb3Ig
KGF1dG8mIHVubmFtZVR5cGUgOiBuZWlnaGJvcnMpCisgICAgICAgIGVtaXRVbm5hbWVkVHlwZURl
ZmluaXRpb24oc3RyaW5nQnVpbGRlciwgdW5uYW1lVHlwZSwgbWFuZ2xlZE5hbWVGb3JUeXBlKHVu
bmFtZVR5cGUpLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7CisKKyAg
ICBzd2l0Y2ggKG5hbWVkVHlwZS5raW5kKCkpIHsKKyAgICBjYXNlIEFTVDo6TmFtZWRUeXBlOjpL
aW5kOjpFbnVtZXJhdGlvbkRlZmluaXRpb246IHsKICAgICAgICAgYXV0byYgZW51bWVyYXRpb25E
ZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KG5hbWVkVHlw
ZSk7CiAgICAgICAgIGF1dG8mIGJhc2VUeXBlID0gZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUo
KS51bmlmeU5vZGUoKTsKKwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJl
bnVtIGNsYXNzICIsIG1hbmdsZWROYW1lRm9yVHlwZShlbnVtZXJhdGlvbkRlZmluaXRpb24pLCAi
IDogIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNlVHlw
ZSkpLCAiIHtcbiIpOwogICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51
bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKQogICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgICIsIG1hbmdsZWROYW1lRm9yRW51bWVyYXRp
b25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpLCAiID0gIiwgZW51bWVyYXRpb25NZW1iZXIuZ2V0
KCkudmFsdWUoKSwgIixcbiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifTtcbiIp
OwotICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlw
ZSkpIHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQVNUOjpOYW1lZFR5cGU6Oktp
bmQ6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbjogewogICAgICAgICAvLyBOYXRpdmUgdHlwZXMgYWxy
ZWFkeSBoYXZlIGRlZmluaXRpb25zLiBUaGVyZSdzIG5vdGhpbmcgdG8gZG8uCi0gICAgfSBlbHNl
IGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgQVNUOjpOYW1lZFR5cGU6OktpbmQ6OlN0cnVjdHVyZURl
ZmluaXRpb246IHsKICAgICAgICAgYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA9IGRvd25jYXN0
PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKKwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJzdHJ1Y3QgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHN0cnVj
dHVyZURlZmluaXRpb24pLCAiIHtcbiIpOwogICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVs
ZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCiAgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgIiwgbWFuZ2xlZE5hbWVGb3JU
eXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKSwgJyAnLCBtYW5nbGVkTmFtZUZvclN0cnVjdHVy
ZUVsZW1lbnQoc3RydWN0dXJlRWxlbWVudCksICI7XG4iKTsKICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIn07XG4iKTsKLSAgICB9IGVsc2UgeworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBBU1Q6Ok5hbWVkVHlwZTo6S2luZDo6VHlwZURlZmluaXRpb246IHsKICAgICAgICAg
YXV0byYgdHlwZURlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1l
ZFR5cGUpOworCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInR5cGVkZWYg
IiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uLnR5cGUoKSksICcgJywgbWFuZ2xl
ZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uKSwgIjtcbiIpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CisKICAgICBlbWl0dGVkTmFtZWRUeXBlcy5hZGQoJm5hbWVkVHlwZSk7CiB9CiAKIHZv
aWQgVHlwZU5hbWVyOjplbWl0TWV0YWxUeXBlRGVmaW5pdGlvbnMoU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlcikKIHsKICAgICBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4gZW1pdHRlZE5hbWVk
VHlwZXM7Ci0gICAgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4gZW1pdHRlZFVubmFtZWRUeXBl
czsKLSAgICBmb3IgKGF1dG8mIG5hbWVkVHlwZSA6IG1fZGVwZW5kZW5jeUdyYXBoLmtleXMoKSkK
LSAgICAgICAgZW1pdE5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgKm5hbWVkVHlw
ZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMpOwotICAgIGZvciAoYXV0
byYgbm9kZSA6IG1fdW5uYW1lZFR5cGVzVW5pcXVpbmdNYXAudmFsdWVzKCkpCi0gICAgICAgIGVt
aXRVbm5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgKm5vZGUsIGVtaXR0ZWROYW1l
ZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKKyAgICBIYXNoU2V0PFVubmFtZWRUeXBlS2V5
PiBlbWl0dGVkVW5uYW1lZFR5cGVzOworICAgIGZvciAoYXV0byYgW25hbWVkVHlwZSwgbmVpZ2hi
b3JzXSA6IG1fZGVwZW5kZW5jeUdyYXBoKQorICAgICAgICBlbWl0TmFtZWRUeXBlRGVmaW5pdGlv
bihzdHJpbmdCdWlsZGVyLCAqbmFtZWRUeXBlLCBuZWlnaGJvcnMsIGVtaXR0ZWROYW1lZFR5cGVz
LCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKKyAgICBmb3IgKGF1dG8mIFt1bm5hbWVkVHlwZUtleSwg
bWFuZ2xlZE5hbWVdIDogbV91bm5hbWVkVHlwZU1hcHBpbmcpCisgICAgICAgIGVtaXRVbm5hbWVk
VHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgdW5uYW1lZFR5cGVLZXkudW5uYW1lZFR5cGUo
KSwgbWFuZ2xlZE5hbWUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsK
K30KKworU3RyaW5nIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgcmV0dXJuIHdyaXRl
TmF0aXZlVHlwZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwogfQogCiBNYW5nbGVkVHlwZU5hbWUg
VHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5
cGUpCiB7Ci0gICAgcmV0dXJuIGZpbmQodW5uYW1lZFR5cGUpLm1hbmdsZWROYW1lKCk7CisgICAg
YXV0byBpdGVyYXRvciA9IG1fdW5uYW1lZFR5cGVNYXBwaW5nLmZpbmQoVW5uYW1lZFR5cGVLZXkg
eyB1bm5hbWVkVHlwZSB9KTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV91bm5hbWVkVHlwZU1h
cHBpbmcuZW5kKCkpOworICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7CiB9CiAKIE1hbmdsZWRP
ck5hdGl2ZVR5cGVOYW1lIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmFtZWRU
eXBlJiBuYW1lZFR5cGUpCkBAIC00NDksNyArMzI5LDYgQEAgTWFuZ2xlZE9yTmF0aXZlVHlwZU5h
bWUgVHlwZU5hbWVyOjptYW5nbAogICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7CiB9CiAKLQog
TWFuZ2xlZEVudW1lcmF0aW9uTWVtYmVyTmFtZSBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yRW51
bWVyYXRpb25NZW1iZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIp
CiB7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fZW51bWVyYXRpb25NZW1iZXJNYXBwaW5nLmZpbmQo
JmVudW1lcmF0aW9uTWVtYmVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaAkocmV2aXNpb24g
MjQ4NTMyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xUeXBlTmFtZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGVtaXRNZXRhbFR5cGVzKFN0cmluZ0J1aWxkZXImKTsKIAotICAgIC8vIE11c3Qg
YmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgbWV0YWxUeXBlcygpLgorICAgIC8vIE11c3QgYmUgY2Fs
bGVkIGFmdGVyIGNhbGxpbmcgZW1pdE1ldGFsVHlwZXMoKS4KICAgICBTdHJpbmcgbWFuZ2xlZE5h
bWVGb3JUeXBlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CiAgICAgTWFuZ2xlZFR5cGVO
YW1lIG1hbmdsZWROYW1lRm9yVHlwZShBU1Q6OlVubmFtZWRUeXBlJik7CiAgICAgTWFuZ2xlZE9y
TmF0aXZlVHlwZU5hbWUgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmFtZWRUeXBlJik7CkBAIC04
MywyMCArODMsMTcgQEAgcHJpdmF0ZToKIAogICAgIE1hbmdsZWRFbnVtZXJhdGlvbk1lbWJlck5h
bWUgZ2VuZXJhdGVOZXh0RW51bWVyYXRpb25NZW1iZXJOYW1lKCkgeyByZXR1cm4geyBtX2VudW1l
cmF0aW9uTWVtYmVyQ291bnQrKyB9OyB9CiAKLSAgICB2b2lkIGVtaXROYW1lZFR5cGVEZWZpbml0
aW9uKFN0cmluZ0J1aWxkZXImLCBBU1Q6Ok5hbWVkVHlwZSYsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5
cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0
dGVkVW5uYW1lZFR5cGVzKTsKLSAgICB2b2lkIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oU3Ry
aW5nQnVpbGRlciYsIEJhc2VUeXBlTmFtZU5vZGUmLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4m
IGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVu
bmFtZWRUeXBlcyk7CisgICAgdm9pZCBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihTdHJpbmdCdWls
ZGVyJiwgQVNUOjpOYW1lZFR5cGUmLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
OlVubmFtZWRUeXBlPj4mLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5
cGVzLCBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiYgZW1pdHRlZFVubmFtZWRUeXBlcyk7CisgICAg
dm9pZCBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKFN0cmluZ0J1aWxkZXImLCBBU1Q6OlVubmFt
ZWRUeXBlJiwgTWFuZ2xlZFR5cGVOYW1lLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0
ZWROYW1lZFR5cGVzLCBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiYgZW1pdHRlZFVubmFtZWRUeXBl
cyk7CiAgICAgdm9pZCBlbWl0TWV0YWxUeXBlRGVjbGFyYXRpb25zKFN0cmluZ0J1aWxkZXImKTsK
ICAgICB2b2lkIGVtaXRNZXRhbFR5cGVEZWZpbml0aW9ucyhTdHJpbmdCdWlsZGVyJik7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QmFzZVR5cGVOYW1lTm9kZT4gY3JlYXRlTmFtZU5vZGUoQVNUOjpV
bm5hbWVkVHlwZSYsIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCk7Ci0gICAgQmFzZVR5cGVOYW1l
Tm9kZSogaW5zZXJ0KEFTVDo6VW5uYW1lZFR5cGUmKTsKLSAgICBCYXNlVHlwZU5hbWVOb2RlJiBm
aW5kKEFTVDo6VW5uYW1lZFR5cGUmKTsKKyAgICB2b2lkIHVuaXF1ZUFuZEdlbmVyYXRlTmFtZShB
U1Q6OlVubmFtZWRUeXBlJik7CiAKICAgICBQcm9ncmFtJiBtX3Byb2dyYW07Ci0gICAgSGFzaE1h
cDxVbm5hbWVkVHlwZUtleSwgc3RkOjp1bmlxdWVfcHRyPEJhc2VUeXBlTmFtZU5vZGU+LCBVbm5h
bWVkVHlwZUtleTo6SGFzaCwgVW5uYW1lZFR5cGVLZXk6OlRyYWl0cz4gbV91bm5hbWVkVHlwZXNV
bmlxdWluZ01hcDsKLSAgICBIYXNoTWFwPEFTVDo6VW5uYW1lZFR5cGUqLCBCYXNlVHlwZU5hbWVO
b2RlKj4gbV91bm5hbWVkVHlwZU1hcHBpbmc7CisgICAgSGFzaE1hcDxVbm5hbWVkVHlwZUtleSwg
TWFuZ2xlZFR5cGVOYW1lPiBtX3VubmFtZWRUeXBlTWFwcGluZzsKICAgICBIYXNoTWFwPEFTVDo6
TmFtZWRUeXBlKiwgTWFuZ2xlZFR5cGVOYW1lPiBtX25hbWVkVHlwZU1hcHBpbmc7Ci0gICAgSGFz
aE1hcDxBU1Q6Ok5hbWVkVHlwZSosIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VU
eXBlTmFtZU5vZGU+Pj4gbV9kZXBlbmRlbmN5R3JhcGg7CisgICAgSGFzaE1hcDxBU1Q6Ok5hbWVk
VHlwZSosIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+Pj4g
bV9kZXBlbmRlbmN5R3JhcGg7CiAgICAgSGFzaE1hcDxBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKiwg
TWFuZ2xlZEVudW1lcmF0aW9uTWVtYmVyTmFtZT4gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBpbmc7
CiAgICAgSGFzaE1hcDxBU1Q6OlN0cnVjdHVyZUVsZW1lbnQqLCBNYW5nbGVkU3RydWN0dXJlRWxl
bWVudE5hbWU+IG1fc3RydWN0dXJlRWxlbWVudE1hcHBpbmc7CiAgICAgdW5zaWduZWQgbV90eXBl
Q291bnQgeyAwIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376613</attachid>
            <date>2019-08-17 13:58:34 -0700</date>
            <delta_ts>2019-08-17 15:01:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200632-20190817135833.patch</filename>
            <type>text/plain</type>
            <size>26444</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODgyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE5LTA4LTE3ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIFR5cGVOYW1lciBjYW4g
YmUgc2ltcGxpZmllZCBieSByZXBsYWNpbmcgQmFzZVR5cGVOYW1lTm9kZSB3aXRoIHVuaXF1ZWQg
QVNUOjpVbm5hbWVkVHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMDYzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZXJlIGlzIG5vIGxvbmdlciBhIHJlYXNvbiB0byBrZWVwIGEgcGFyYWxsZWwg
dHJlZSBvZiB0aGUgVW5uYW1lZFR5cGUtbGlrZSBvYmplY3RzCisgICAgICAgIEJhc2VUeXBlTmFt
ZU5vZGVzLiBJbnN0ZWFkLCB3ZSBjYW4gc3RvcmUgYSBzaW5nbGUgSGFzaE1hcCBtYXBwaW5nIGZy
b20gVW5uYW1lZFR5cGVLZXlzCisgICAgICAgIHRvIE1hbmdsZWRUeXBlTmFtZSwgYW5kIHVzZSB0
aGUgdGhlIFVubmFtZWRUeXBlIHN0b3JlZCBpbiB0aGUgVW5uYW1lZFR5cGVLZXkgd2hpbGUgCisg
ICAgICAgIGVtaXR0aW5nIHRoZSBtZXRhbCBjb2RlLgorCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGVIYXNoLmg6CisgICAgICAgIERlZmluZSBIYXNo
VHJhaXRzIGFuZCBEZWZhdWx0SGFzaCBzcGVjaWFsaXphdGlvbnMgZm9yIFVubmFtZWRUeXBlS2V5
IHRvIHNpbXBsaWZ5CisgICAgICAgIHVzZXMgb2YgVW5uYW1lZFR5cGVLZXkgYXMgYSBrZXkgaW4g
SGFzaE1hcC9IYXNoU2V0LgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplQ29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgVGFrZSBhZHZhbnRhZ2Ugb2YgZGVm
YXVsdCBIYXNoVHJhaXRzIGFuZCBEZWZhdWx0SGFzaCBmb3IgVW5uYW1lZFR5cGVLZXkuCisKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjppbnNlcnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmdlbmVyYXRlVW5p
cXVlZFR5cGVOYW1lKToKKyAgICAgICAgUmVwbGFjZSBvbGQgaW5zZXJ0IGZ1bmN0aW9uIHdpdGgg
Z2VuZXJhdGVVbmlxdWVkVHlwZU5hbWUsIHdoaWNoIHVuaXF1ZXMgYW5kIGdlbmVyYXRlcworICAg
ICAgICBuYW1lcyBmb3IgdGhlIFVubmFtZWRUeXBlIGFuZCBhbnkgJ3BhcmVudCcgVW5uYW1lZFR5
cGVzLgorCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6dmlzaXQo
TmF0aXZlVHlwZURlY2xhcmF0aW9uJikpOgorICAgICAgICBTdG9wIGFkZGluZyBOYXRpdmVUeXBl
RGVjbGFyYXRpb25zIHRvIG1fZGVwZW5kZW5jeUdyYXBoLiBUaGV5IG5ldmVyIGhhdmUgYW55Cisg
ICAgICAgIG5laWdoYm9ycyBhbmQgbmV2ZXIgZW1pdCBhbnkgbWV0YWwgY29kZSwgc28gYXJlIGNv
bXBsZXRlIG5vLW9wcy4KKworICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlw
ZU5hbWVOb2RlKTogRGVsZXRlZC4KKyAgICAgICAgUmVtb3ZlIEJhc2VUeXBlTmFtZU5vZGUgYW5k
IHN1YmNsYXNzZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVy
OjpmaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5h
bWVyOjpjcmVhdGVOYW1lTm9kZSk6IERlbGV0ZWQuCisgICAgICAgIFdlIG5vIGxvbmdlciBuZWVk
IHRoZSBmaW5kIG9yIGNyZWF0ZU5hbWVOb2RlIGZ1bmN0aW9ucywgYXMgdGhlIFVubmFtZWRUeXBl
cyBjYW4gYmUgbm93IGJlCisgICAgICAgIHVzZWQgZGlyZWN0bHkgZXZlcnl3aGVyZS4KKworICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmVtaXRVbm5hbWVkVHlwZURl
ZmluaXRpb24pOgorICAgICAgICBTd2l0Y2ggdG8gZGlyZWN0bHkgdXNpbmcgdGhlIFVubmFtZWRU
eXBlIGFuZCBhbHdheXMgaGF2ZSB0aGUgY2FsbGVyIHBhc3MgaW4gdGhlIG1hbmdsZWQKKyAgICAg
ICAgbmFtZSwgc2luY2UgaW4gdGhlIG1haW4gZW1pdCBsb29wLCB3ZSBhbHdheXMgaGF2ZSBhY2Nl
c3MgdG8gdGhlIHRoZW0uIEFsc28sIGlubGluZSB0aGUKKyAgICAgICAgdGhlIHJlY3Vyc2l2ZSBj
YWxscyB0byBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbiBmb3IgJ3BhcmVudCcgdHlwZXMgdG8gYXZv
aWQgdW5uZWNlc3NhcnkKKyAgICAgICAgZXh0cmEgc3dpdGNoIG92ZXIgdGhlIGtpbmQgZ2V0dGlu
ZyB0aGUgcGFyZW50LCBhbmQgYXZvaWQgaXQgZW50aXJlbHkgZm9yIFR5cGVSZWZlcmVuY2UKKyAg
ICAgICAgd2hpY2ggbmV2ZXIgaGFzIGEgcGFyZW50LgorICAgICAgICAKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjplbWl0TmFtZWRUeXBlRGVmaW5pdGlvbik6Cisg
ICAgICAgIFN3aXRjaGVzIHRvIG5vdyBwYXNzaW5nIGluIHRoZSBuZWlnaGJvcnMsIHNpbmNlIHRo
ZXkgYXJlIGFsd2F5cyBhdmFpbGFibGUgaW4gdGhlIG1haW4gCisgICAgICAgIGVtaXQgbG9vcC4g
QWxzbyBtb3ZlIHRvIGEgc3dpdGNoIHN0YXRlbWVudCByYXRoZXIgdGhhbiBpZnMgZm9yIGNvbnNp
c3RlbmN5LiAKKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVO
YW1lcjo6ZW1pdE1ldGFsVHlwZURlZmluaXRpb25zKToKKyAgICAgICAgUGFzcyBrZXlzIGFuZCB2
YWx1ZXMgaW50byB0aGUgZW1pdCBmdW5jdGlvbnMgdG8gYXZvaWQgZG91YmxlIGxvb2t1cHMuCisK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjptYW5nbGVkTmFtZUZv
clR5cGUpOgorICAgICAgICBVcGRhdGUgdG8gaGFzaCBsb29rdXAuCisKIDIwMTktMDgtMTcgIFNh
bSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBTdHJpbmdCdWls
ZGVyOjpmbGV4aWJsZUFwcGVuZCguLi4pIHRvIFN0cmluZ0J1aWxkZXI6OmFwcGVuZCguLi4pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDI0ODgy
MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZUNvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGlj
OgogICAgICAgICBWaXNpdG9yOjp2aXNpdChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwogICAgIH0K
IAotICAgIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXksIFVubmFtZWRUeXBlS2V5OjpIYXNoLCBVbm5h
bWVkVHlwZUtleTo6VHJhaXRzPiB0YWtlVW5uYW1lZFR5cGVzKCkKKyAgICBIYXNoU2V0PFVubmFt
ZWRUeXBlS2V5PiB0YWtlVW5uYW1lZFR5cGVzKCkKICAgICB7CiAgICAgICAgIHJldHVybiBXVEZN
b3ZlKG1fdW5uYW1lZFR5cGVzKTsKICAgICB9CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZCh0eXBlKTsKICAgICB9CiAKLSAgICBIYXNoU2V0
PFVubmFtZWRUeXBlS2V5LCBVbm5hbWVkVHlwZUtleTo6SGFzaCwgVW5uYW1lZFR5cGVLZXk6OlRy
YWl0cz4gbV91bm5hbWVkVHlwZXM7CisgICAgSGFzaFNldDxVbm5hbWVkVHlwZUtleT4gbV91bm5h
bWVkVHlwZXM7CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5
cGU+PiBtX25hbWVkVHlwZXM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZUhhc2guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZUhhc2gu
aAkocmV2aXNpb24gMjQ4ODIzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5uYW1lZFR5cGVIYXNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDQgKzc0
LDEzIEBAIHByaXZhdGU6CiAKIH0KIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5PiA6IFdlYkNvcmU6
OldITFNMOjpVbm5hbWVkVHlwZUtleTo6VHJhaXRzIHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IERl
ZmF1bHRIYXNoPFdlYkNvcmU6OldITFNMOjpVbm5hbWVkVHlwZUtleT4geworICAgIHR5cGVkZWYg
V2ViQ29yZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5OjpIYXNoIEhhc2g7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCShyZXZp
c2lvbiAyNDg4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTFR5cGVOYW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDExOCArNTgsNiBAQCBu
YW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgTWV0YWwgewogCi0vLyBGSVhNRTogTG9vayBp
bnRvIHJlcGxhY2luZyBCYXNlVHlwZU5hbWVOb2RlIHdpdGggYSBzaW1wbGUgc3RydWN0IHsgUmVm
UHRyPFVubmFtZWRUeXBlPiBwYXJlbnQ7IE1hbmdsZWRUeXBlTmFtZTsgfSB0aGF0IFVubmFtZWRU
eXBlS2V5cyBtYXAgdG8uCi1jbGFzcyBCYXNlVHlwZU5hbWVOb2RlIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBCYXNlVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFt
ZU5vZGUqIHBhcmVudCwgTWFuZ2xlZFR5cGVOYW1lJiYgbWFuZ2xlZE5hbWUsIEFTVDo6VW5uYW1l
ZFR5cGU6OktpbmQga2luZCkKLSAgICAgICAgOiBtX3BhcmVudChwYXJlbnQpCi0gICAgICAgICwg
bV9tYW5nbGVkTmFtZShtYW5nbGVkTmFtZSkKLSAgICAgICAgLCBtX2tpbmQoa2luZCkKLSAgICB7
Ci0gICAgfQotICAgIHZpcnR1YWwgfkJhc2VUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7Ci0gICAg
Ci0gICAgQVNUOjpVbm5hbWVkVHlwZTo6S2luZCBraW5kKCkgeyByZXR1cm4gbV9raW5kOyB9Ci0g
ICAgYm9vbCBpc1JlZmVyZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9
PSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlOyB9Ci0gICAgYm9vbCBpc1Bv
aW50ZXJUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gQVNUOjpVbm5hbWVk
VHlwZTo6S2luZDo6UG9pbnRlcjsgfQotICAgIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGVOYW1l
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpB
cnJheVJlZmVyZW5jZTsgfQotICAgIGJvb2wgaXNBcnJheVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCA9PSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheTsgfQotCi0gICAg
QmFzZVR5cGVOYW1lTm9kZSogcGFyZW50KCkgeyByZXR1cm4gbV9wYXJlbnQ7IH0KLSAgICBNYW5n
bGVkVHlwZU5hbWUgbWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX21hbmdsZWROYW1lOyB9
Ci0KLXByaXZhdGU6Ci0gICAgQmFzZVR5cGVOYW1lTm9kZSogbV9wYXJlbnQ7Ci0gICAgTWFuZ2xl
ZFR5cGVOYW1lIG1fbWFuZ2xlZE5hbWU7Ci0gICAgQVNUOjpVbm5hbWVkVHlwZTo6S2luZCBtX2tp
bmQ7Ci19OwotCi1jbGFzcyBBcnJheVR5cGVOYW1lTm9kZSBmaW5hbCA6IHB1YmxpYyBCYXNlVHlw
ZU5hbWVOb2RlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBB
cnJheVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmdsZWRUeXBlTmFt
ZSYmIG1hbmdsZWROYW1lLCB1bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBCYXNlVHlw
ZU5hbWVOb2RlKHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSksIEFTVDo6VW5uYW1lZFR5cGU6
OktpbmQ6OkFycmF5KQotICAgICAgICAsIG1fbnVtRWxlbWVudHMobnVtRWxlbWVudHMpCi0gICAg
ewotICAgIH0KLSAgICB2aXJ0dWFsIH5BcnJheVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKLSAg
ICB1bnNpZ25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxlbWVudHM7IH0K
LQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX251bUVsZW1lbnRzOwotfTsKLQotY2xhc3MgQXJy
YXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUgZmluYWwgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQXJyYXlSZWZlcmVu
Y2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBNYW5nbGVkVHlwZU5hbWUm
JiBtYW5nbGVkTmFtZSwgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQotICAgICAgICA6
IEJhc2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSwgQVNUOjpVbm5h
bWVkVHlwZTo6S2luZDo6QXJyYXlSZWZlcmVuY2UpCi0gICAgICAgICwgbV9hZGRyZXNzU3BhY2Uo
YWRkcmVzc1NwYWNlKQotICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+QXJyYXlSZWZlcmVuY2VU
eXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7Ci0gICAgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1Nw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KLQotcHJpdmF0ZToKLSAgICBB
U1Q6OkFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKLX07Ci0KLWNsYXNzIFBvaW50ZXJUeXBl
TmFtZU5vZGUgZmluYWwgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUG9pbnRlclR5cGVOYW1lTm9kZShCYXNlVHlw
ZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmdsZWRUeXBlTmFtZSYmIG1hbmdsZWROYW1lLCBBU1Q6OkFk
ZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCi0gICAgICAgIDogQmFzZVR5cGVOYW1lTm9kZShwYXJl
bnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpLCBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpQb2ludGVy
KQotICAgICAgICAsIG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKLSAgICB7Ci0gICAgfQot
ICAgIHZpcnR1YWwgflBvaW50ZXJUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7Ci0gICAgQVNUOjpB
ZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7
IH0KLQotcHJpdmF0ZToKLSAgICBBU1Q6OkFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKLX07
Ci0KLWNsYXNzIFJlZmVyZW5jZVR5cGVOYW1lTm9kZSBmaW5hbCA6IHB1YmxpYyBCYXNlVHlwZU5h
bWVOb2RlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBSZWZl
cmVuY2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBNYW5nbGVkVHlwZU5h
bWUmJiBtYW5nbGVkTmFtZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKLSAgICAgICAgOiBC
YXNlVHlwZU5hbWVOb2RlKHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSksIEFTVDo6VW5uYW1l
ZFR5cGU6OktpbmQ6OlR5cGVSZWZlcmVuY2UpCi0gICAgICAgICwgbV9uYW1lZFR5cGUobmFtZWRU
eXBlKQotICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkg
PSBkZWZhdWx0OwotICAgIEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUoKSB7IHJldHVybiBtX25h
bWVkVHlwZTsgfQotCi1wcml2YXRlOgotICAgIEFTVDo6TmFtZWRUeXBlJiBtX25hbWVkVHlwZTsK
LX07Ci0KLX0KLQotfQotCi19Ci0KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExT
TF9CQVNFX1RZUEVfTkFNRURfTk9ERShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlRvVmFsdWVU
eXBlTmFtZSkgXAotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGUmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9
IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShBcnJheVR5cGVOYW1lTm9kZSwgaXNBcnJheVR5
cGVOYW1lTm9kZSgpKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9O
QU1FRF9OT0RFKEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlLCBpc0FycmF5UmVmZXJlbmNlVHlw
ZU5hbWVOb2RlKCkpCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05B
TUVEX05PREUoUG9pbnRlclR5cGVOYW1lTm9kZSwgaXNQb2ludGVyVHlwZU5hbWVOb2RlKCkpCi0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUoUmVmZXJl
bmNlVHlwZU5hbWVOb2RlLCBpc1JlZmVyZW5jZVR5cGVOYW1lTm9kZSgpKQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBXSExTTCB7Ci0KLW5hbWVzcGFjZSBNZXRhbCB7Ci0KIFR5
cGVOYW1lcjo6VHlwZU5hbWVyKFByb2dyYW0mIHByb2dyYW0pCiAgICAgOiBtX3Byb2dyYW0ocHJv
Z3JhbSkKIHsKQEAgLTE3OSw3ICs2Nyw3IEBAIFR5cGVOYW1lcjo6flR5cGVOYW1lcigpID0gZGVm
YXVsdDsKIAogdm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRU
eXBlKQogewotICAgIGluc2VydCh1bm5hbWVkVHlwZSk7CisgICAgZ2VuZXJhdGVVbmlxdWVkVHlw
ZU5hbWUodW5uYW1lZFR5cGUpOwogfQogCiB2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKQEAgLTE5NywxNyArODUs
MTQgQEAgdm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZQogICAgIFZpc2l0
b3I6OnZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CiAKICAgICB7Ci0gICAgICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+PiBuZWlnaGJvcnMgPSB7
IGZpbmQoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSkgfTsKLSAgICAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5hZGQoJmVudW1lcmF0aW9uRGVmaW5pdGlvbiwgV1RG
TW92ZShuZWlnaGJvcnMpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lH
cmFwaC5hZGQoJmVudW1lcmF0aW9uRGVmaW5pdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpVbm5hbWVkVHlwZT4+IHsgZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSB9
KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKICAgICB9CiB9CiAKLXZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJikKIHsKICAgICAvLyBOYXRpdmUgdHlwZSBkZWNsYXJh
dGlvbnMgYWxyZWFkeSBoYXZlIG5hbWVzLCBhbmQgYXJlIGFscmVhZHkgZGVjbGFyZWQgaW4gTWV0
YWwuCi0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5hZGQoJm5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFzZVR5cGVOYW1l
Tm9kZT4+KCkpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CiB9CiAKIHZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24mIHN0cnVjdHVyZURlZmluaXRpb24pCkBAIC0yMTgsMTEgKzEwMywxMSBAQCB2b2lkIFR5cGVO
YW1lcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpCiAgICAgfQogICAgIFZpc2l0b3I6OnZpc2l0
KHN0cnVjdHVyZURlZmluaXRpb24pOwogICAgIHsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QmFzZVR5cGVOYW1lTm9kZT4+IG5laWdoYm9yczsKKyAgICAgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpVbm5hbWVkVHlwZT4+IG5laWdoYm9yczsKICAg
ICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5z
dHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc3Ry
dWN0dXJlRWxlbWVudE1hcHBpbmcuYWRkKCZzdHJ1Y3R1cmVFbGVtZW50LCBnZW5lcmF0ZU5leHRT
dHJ1Y3R1cmVFbGVtZW50TmFtZSgpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVz
dWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgICAgICAgICBuZWlnaGJvcnMuYXBwZW5k
KGZpbmQoc3RydWN0dXJlRWxlbWVudC50eXBlKCkpKTsKKyAgICAgICAgICAgIG5laWdoYm9ycy5h
cHBlbmQoc3RydWN0dXJlRWxlbWVudC50eXBlKCkpOwogICAgICAgICB9CiAgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZzdHJ1Y3R1cmVEZWZpbml0aW9uLCBX
VEZNb3ZlKG5laWdoYm9ycykpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRk
UmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtMjM3LDE1ICsxMjIsMTQgQEAgdm9pZCBUeXBlTmFtZXI6
OnZpc2l0KEFTVDo6VHlwZURlZmluaXRpbwogICAgIH0KICAgICBWaXNpdG9yOjp2aXNpdCh0eXBl
RGVmaW5pdGlvbik7CiAgICAgewotICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxCYXNlVHlwZU5hbWVOb2RlPj4gbmVpZ2hib3JzID0geyBmaW5kKHR5cGVEZWZpbml0aW9uLnR5
cGUoKSkgfTsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5hZGQo
JnR5cGVEZWZpbml0aW9uLCBXVEZNb3ZlKG5laWdoYm9ycykpOworICAgICAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fZGVwZW5kZW5jeUdyYXBoLmFkZCgmdHlwZURlZmluaXRpb24sIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiB7IHR5cGVEZWZpbml0aW9uLnR5
cGUoKSB9KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05l
d0VudHJ5KTsKICAgICB9CiB9CiAKIHZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OkV4cHJlc3Np
b24mIGV4cHJlc3Npb24pCiB7Ci0gICAgaW5zZXJ0KGV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkp
OworICAgIGdlbmVyYXRlVW5pcXVlZFR5cGVOYW1lKGV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkp
OwogICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOwogfQogCkBAIC0yNjAsMzcgKzE0NCw2
IEBAIFN0cmluZyBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1QKICAgICByZXR1cm4g
d3JpdGVOYXRpdmVUeXBlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiB9CiAKLUJhc2VUeXBlTmFt
ZU5vZGUmIFR5cGVOYW1lcjo6ZmluZChBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKLXsK
LSAgICBhdXRvIGl0ZXJhdG9yID0gbV91bm5hbWVkVHlwZXNVbmlxdWluZ01hcC5maW5kKHVubmFt
ZWRUeXBlKTsKLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV91bm5hbWVkVHlwZXNVbmlxdWluZ01h
cC5lbmQoKSk7Ci0gICAgcmV0dXJuICppdGVyYXRvci0+dmFsdWU7Ci19Ci0KLXN0ZDo6dW5pcXVl
X3B0cjxCYXNlVHlwZU5hbWVOb2RlPiBUeXBlTmFtZXI6OmNyZWF0ZU5hbWVOb2RlKEFTVDo6VW5u
YW1lZFR5cGUmIHVubmFtZWRUeXBlLCBCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQpCi17Ci0gICAg
c3dpdGNoICh1bm5hbWVkVHlwZS5raW5kKCkpIHsKLSAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6
OktpbmQ6OlR5cGVSZWZlcmVuY2U6IHsKLSAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRv
d25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOwotICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KHBhcmVudCwgZ2VuZXJhdGVO
ZXh0VHlwZU5hbWUoKSwgdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgfQotICAg
IGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6UG9pbnRlcjogewotICAgICAgICBhdXRvJiBw
b2ludGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKTsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UG9pbnRlclR5cGVOYW1lTm9kZT4ocGFyZW50
LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpLCBwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSk7Ci0g
ICAgfQotICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6QXJyYXlSZWZlcmVuY2U6IHsK
LSAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KHBhcmVudCwgZ2VuZXJhdGVOZXh0VHlwZU5h
bWUoKSwgYXJyYXlSZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgpKTsKLSAgICB9Ci0gICAgY2Fz
ZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheTogewotICAgICAgICBhdXRvJiBhcnJheVR5
cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpOwotICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5lcmF0ZU5l
eHRUeXBlTmFtZSgpLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSk7Ci0gICAgfQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCiBz
dGF0aWMgQVNUOjpVbm5hbWVkVHlwZSogcGFyZW50KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRU
eXBlKQogewogICAgIHN3aXRjaCAodW5uYW1lZFR5cGUua2luZCgpKSB7CkBAIC0zMDcsMjAgKzE2
MCwxNSBAQCBzdGF0aWMgQVNUOjpVbm5hbWVkVHlwZSogcGFyZW50KEFTVDo6VW5uCiAgICAgfQog
fQogCi1CYXNlVHlwZU5hbWVOb2RlKiBUeXBlTmFtZXI6Omluc2VydChBU1Q6OlVubmFtZWRUeXBl
JiB1bm5hbWVkVHlwZSkKK3ZvaWQgVHlwZU5hbWVyOjpnZW5lcmF0ZVVuaXF1ZWRUeXBlTmFtZShB
U1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKIHsKLSAgICBpZiAoYXV0byogcmVzdWx0ID0g
bV91bm5hbWVkVHlwZU1hcHBpbmcuZ2V0KCZ1bm5hbWVkVHlwZSkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0KICAgICBhdXRvKiBwYXJlbnRVbm5hbWVkVHlwZSA9IHBhcmVudCh1bm5hbWVkVHlw
ZSk7Ci0gICAgQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50Tm9kZSA9IHBhcmVudFVubmFtZWRUeXBl
ID8gaW5zZXJ0KCpwYXJlbnRVbm5hbWVkVHlwZSkgOiBudWxscHRyOworICAgIGlmIChwYXJlbnRV
bm5hbWVkVHlwZSkKKyAgICAgICAgZ2VuZXJhdGVVbmlxdWVkVHlwZU5hbWUoKnBhcmVudFVubmFt
ZWRUeXBlKTsKIAotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV91bm5hbWVkVHlwZXNVbmlxdWluZ01h
cC5lbnN1cmUoVW5uYW1lZFR5cGVLZXkgeyB1bm5hbWVkVHlwZSB9LCBbJl0gewotICAgICAgICBy
ZXR1cm4gY3JlYXRlTmFtZU5vZGUodW5uYW1lZFR5cGUsIHBhcmVudE5vZGUpOworICAgIG1fdW5u
YW1lZFR5cGVNYXBwaW5nLmVuc3VyZShVbm5hbWVkVHlwZUtleSB7IHVubmFtZWRUeXBlIH0sIFsm
XSB7CisgICAgICAgIHJldHVybiBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpOwogICAgIH0pOwotCi0g
ICAgbV91bm5hbWVkVHlwZU1hcHBpbmcuYWRkKCZ1bm5hbWVkVHlwZSwgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
Z2V0KCk7CiB9CiAKIGNsYXNzIE1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyIGZpbmFsIDogcHVi
bGljIFZpc2l0b3IgewpAQCAtMzUwLDk0ICsxOTgsMTI2IEBAIHZvaWQgVHlwZU5hbWVyOjplbWl0
TWV0YWxUeXBlRGVjbGFyYXRpb24KICAgICBtZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlci5WaXNp
dG9yOjp2aXNpdChtX3Byb2dyYW0pOwogfQogCi12b2lkIFR5cGVOYW1lcjo6ZW1pdFVubmFtZWRU
eXBlRGVmaW5pdGlvbihTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBCYXNlVHlwZU5hbWVO
b2RlJiBiYXNlVHlwZU5hbWVOb2RlLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWRO
YW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVubmFtZWRUeXBl
cykKK3ZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKFN0cmluZ0J1aWxk
ZXImIHN0cmluZ0J1aWxkZXIsIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBNYW5nbGVk
VHlwZU5hbWUgbWFuZ2xlZE5hbWUsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5h
bWVkVHlwZXMsIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXk+JiBlbWl0dGVkVW5uYW1lZFR5cGVzKQog
ewotICAgIGlmIChlbWl0dGVkVW5uYW1lZFR5cGVzLmNvbnRhaW5zKCZiYXNlVHlwZU5hbWVOb2Rl
KSkKKyAgICBpZiAoZW1pdHRlZFVubmFtZWRUeXBlcy5jb250YWlucyhVbm5hbWVkVHlwZUtleSB7
IHVubmFtZWRUeXBlIH0pKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYmFzZVR5cGVOYW1l
Tm9kZS5wYXJlbnQoKSkKLSAgICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdC
dWlsZGVyLCAqYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVt
aXR0ZWRVbm5hbWVkVHlwZXMpOwogICAgIAotICAgIHN3aXRjaCAoYmFzZVR5cGVOYW1lTm9kZS5r
aW5kKCkpIHsKKyAgICBzd2l0Y2ggKHVubmFtZWRUeXBlLmtpbmQoKSkgewogICAgIGNhc2UgQVNU
OjpVbm5hbWVkVHlwZTo6S2luZDo6VHlwZVJlZmVyZW5jZTogewotICAgICAgICBhdXRvJiBuYW1l
ZFR5cGUgPSBkb3duY2FzdDxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUp
Lm5hbWVkVHlwZSgpOwotICAgICAgICBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWls
ZGVyLCBuYW1lZFR5cGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInR5cGVkZWYgIiwgbWFuZ2xlZE5hbWVGb3JU
eXBlKG5hbWVkVHlwZSksICcgJywgYmFzZVR5cGVOYW1lTm9kZS5tYW5nbGVkTmFtZSgpLCAiO1xu
Iik7CisgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZl
cmVuY2U+KHVubmFtZWRUeXBlKTsKKworICAgICAgICBhdXRvJiBwYXJlbnQgPSB0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpOworICAgICAgICBhdXRvIHBhcmVudE1hbmdsZWROYW1lID0gbWFu
Z2xlZE5hbWVGb3JUeXBlKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBh
dXRvIGl0ZXJhdG9yID0gbV9kZXBlbmRlbmN5R3JhcGguZmluZCgmcGFyZW50KTsKKyAgICAgICAg
QVNTRVJUKGl0ZXJhdG9yICE9IG1fZGVwZW5kZW5jeUdyYXBoLmVuZCgpKTsKKyAgICAgICAgZW1p
dE5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgcGFyZW50LCBpdGVyYXRvci0+dmFs
dWUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKKworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgidHlwZWRlZiAiLCBwYXJlbnRNYW5nbGVkTmFtZSwgJyAnLCBt
YW5nbGVkTmFtZSwgIjtcbiIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBU1Q6
OlVubmFtZWRUeXBlOjpLaW5kOjpQb2ludGVyOiB7Ci0gICAgICAgIGF1dG8mIHBvaW50ZXJUeXBl
ID0gZG93bmNhc3Q8UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSk7Ci0gICAg
ICAgIEFTU0VSVChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoInR5cGVkZWYgIiwgdG9TdHJpbmcocG9pbnRlclR5cGUuYWRkcmVzc1NwYWNl
KCkpLCAnICcsIHBvaW50ZXJUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAiKiAiLCBwb2lu
dGVyVHlwZS5tYW5nbGVkTmFtZSgpLCAiO1xuIik7CisgICAgICAgIGF1dG8mIHBvaW50ZXJUeXBl
ID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOworCisgICAgICAgIGF1
dG8mIHBhcmVudCA9IHBvaW50ZXJUeXBlLmVsZW1lbnRUeXBlKCk7CisgICAgICAgIGF1dG8gcGFy
ZW50TWFuZ2xlZE5hbWUgPSBtYW5nbGVkTmFtZUZvclR5cGUocGFyZW50KTsKKyAgICAgICAgZW1p
dFVubmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWlsZGVyLCBwYXJlbnQsIHBhcmVudE1hbmds
ZWROYW1lLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7CisKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInR5cGVkZWYgIiwgdG9TdHJpbmcocG9pbnRlclR5cGUu
YWRkcmVzc1NwYWNlKCkpLCAnICcsIHBhcmVudE1hbmdsZWROYW1lLCAiKiAiLCBtYW5nbGVkTmFt
ZSwgIjtcbiIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBU1Q6OlVubmFtZWRU
eXBlOjpLaW5kOjpBcnJheVJlZmVyZW5jZTogewotICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5j
ZVR5cGUgPSBkb3duY2FzdDxBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1l
Tm9kZSk7Ci0gICAgICAgIEFTU0VSVChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKTsKKyAgICAg
ICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHVubmFtZWRUeXBlKTsKKworICAgICAgICBhdXRvJiBwYXJlbnQgPSBhcnJheVJlZmVy
ZW5jZVR5cGUuZWxlbWVudFR5cGUoKTsKKyAgICAgICAgYXV0byBwYXJlbnRNYW5nbGVkTmFtZSA9
IG1hbmdsZWROYW1lRm9yVHlwZShwYXJlbnQpOworICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZp
bml0aW9uKHN0cmluZ0J1aWxkZXIsIHBhcmVudCwgcGFyZW50TWFuZ2xlZE5hbWUsIGVtaXR0ZWRO
YW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKKwogICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgKLSAgICAgICAgICAgICJzdHJ1Y3QgIiwgYXJyYXlSZWZlcmVuY2VUeXBlLm1hbmds
ZWROYW1lKCksICJ7IFxuIgotICAgICAgICAgICAgIiAgICAiLCB0b1N0cmluZyhhcnJheVJlZmVy
ZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkpLCAnICcsIGFycmF5UmVmZXJlbmNlVHlwZS5wYXJlbnQo
KS0+bWFuZ2xlZE5hbWUoKSwgIiogcG9pbnRlcjtcbiIKKyAgICAgICAgICAgICJzdHJ1Y3QgIiwg
bWFuZ2xlZE5hbWUsICJ7IFxuIgorICAgICAgICAgICAgIiAgICAiLCB0b1N0cmluZyhhcnJheVJl
ZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkpLCAnICcsIHBhcmVudE1hbmdsZWROYW1lLCAiKiBw
b2ludGVyO1xuIgogICAgICAgICAgICAgIiAgICB1aW50MzJfdCBsZW5ndGg7XG4iCiAgICAgICAg
ICAgICAifTtcbiIKICAgICAgICAgKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
QVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6QXJyYXk6IHsKLSAgICAgICAgYXV0byYgYXJyYXlUeXBl
ID0gZG93bmNhc3Q8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOwotICAgICAg
ICBBU1NFUlQoYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJ0eXBlZGVmIGFycmF5PCIsIGFycmF5VHlwZS5wYXJlbnQoKS0+bWFuZ2xlZE5h
bWUoKSwgIiwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICI+ICIsIGFycmF5VHlwZS5tYW5n
bGVkTmFtZSgpLCAiO1xuIik7CisgICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFT
VDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7CisKKyAgICAgICAgYXV0byYgcGFyZW50ID0gYXJy
YXlUeXBlLnR5cGUoKTsKKyAgICAgICAgYXV0byBwYXJlbnRNYW5nbGVkTmFtZSA9IG1hbmdsZWRO
YW1lRm9yVHlwZShwYXJlbnQpOworICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0
cmluZ0J1aWxkZXIsIHBhcmVudCwgcGFyZW50TWFuZ2xlZE5hbWUsIGVtaXR0ZWROYW1lZFR5cGVz
LCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKKworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
dHlwZWRlZiBhcnJheTwiLCBwYXJlbnRNYW5nbGVkTmFtZSwgIiwgIiwgYXJyYXlUeXBlLm51bUVs
ZW1lbnRzKCksICI+ICIsIG1hbmdsZWROYW1lLCAiO1xuIik7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIH0KIAotICAgIGVtaXR0ZWRVbm5hbWVkVHlwZXMuYWRkKCZiYXNlVHlwZU5hbWVOb2RlKTsK
KyAgICBlbWl0dGVkVW5uYW1lZFR5cGVzLmFkZChVbm5hbWVkVHlwZUtleSB7IHVubmFtZWRUeXBl
IH0pOwogfQogCi12b2lkIFR5cGVOYW1lcjo6ZW1pdE5hbWVkVHlwZURlZmluaXRpb24oU3RyaW5n
QnVpbGRlciYgc3RyaW5nQnVpbGRlciwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSwgSGFzaFNl
dDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5h
bWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMpCit2b2lkIFR5cGVOYW1lcjo6ZW1pdE5hbWVk
VHlwZURlZmluaXRpb24oU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgQVNUOjpOYW1lZFR5
cGUmIG5hbWVkVHlwZSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpVbm5hbWVk
VHlwZT4+JiBuZWlnaGJvcnMsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVk
VHlwZXMsIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXk+JiBlbWl0dGVkVW5uYW1lZFR5cGVzKQogewog
ICAgIGlmIChlbWl0dGVkTmFtZWRUeXBlcy5jb250YWlucygmbmFtZWRUeXBlKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2RlcGVuZGVuY3lHcmFwaC5maW5kKCZuYW1l
ZFR5cGUpOwotICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2RlcGVuZGVuY3lHcmFwaC5lbmQoKSk7
Ci0gICAgZm9yIChhdXRvJiBiYXNlVHlwZU5hbWVOb2RlIDogaXRlcmF0b3ItPnZhbHVlKQotICAg
ICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIsIGJhc2VUeXBlTmFt
ZU5vZGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKLSAgICBpZiAo
aXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKworICAgIGZvciAo
YXV0byYgdW5uYW1lVHlwZSA6IG5laWdoYm9ycykKKyAgICAgICAgZW1pdFVubmFtZWRUeXBlRGVm
aW5pdGlvbihzdHJpbmdCdWlsZGVyLCB1bm5hbWVUeXBlLCBtYW5nbGVkTmFtZUZvclR5cGUodW5u
YW1lVHlwZSksIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKKworICAg
IHN3aXRjaCAobmFtZWRUeXBlLmtpbmQoKSkgeworICAgIGNhc2UgQVNUOjpOYW1lZFR5cGU6Oktp
bmQ6OkVudW1lcmF0aW9uRGVmaW5pdGlvbjogewogICAgICAgICBhdXRvJiBlbnVtZXJhdGlvbkRl
ZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4obmFtZWRUeXBl
KTsKICAgICAgICAgYXV0byYgYmFzZVR5cGUgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgp
LnVuaWZ5Tm9kZSgpOworCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJlbnVtIGNsYXNz
ICIsIG1hbmdsZWROYW1lRm9yVHlwZShlbnVtZXJhdGlvbkRlZmluaXRpb24pLCAiIDogIiwgbWFu
Z2xlZE5hbWVGb3JUeXBlKGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNlVHlwZSkpLCAiIHtc
biIpOwogICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25E
ZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKQogICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIiAgICAiLCBtYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKGVudW1lcmF0
aW9uTWVtYmVyKSwgIiA9ICIsIGVudW1lcmF0aW9uTWVtYmVyLmdldCgpLnZhbHVlKCksICIsXG4i
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKLSAgICB9IGVsc2UgaWYg
KGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKSB7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEFTVDo6TmFtZWRUeXBlOjpLaW5kOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb246IHsKICAgICAgICAgLy8gTmF0aXZlIHR5cGVzIGFscmVhZHkgaGF2ZSBkZWZpbml0
aW9ucy4gVGhlcmUncyBub3RoaW5nIHRvIGRvLgotICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEFTVDo6TmFtZWRUeXBlOjpLaW5kOjpTdHJ1Y3R1cmVEZWZpbml0aW9uOiB7CiAgICAg
ICAgIGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24+KG5hbWVkVHlwZSk7CisKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInN0
cnVjdCAiLCBtYW5nbGVkTmFtZUZvclR5cGUoc3RydWN0dXJlRGVmaW5pdGlvbiksICIge1xuIik7
CiAgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRp
b24uc3RydWN0dXJlRWxlbWVudHMoKSkKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCIgICAgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKSwgJyAn
LCBtYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoc3RydWN0dXJlRWxlbWVudCksICI7XG4i
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKLSAgICB9IGVsc2Ugewor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBU1Q6Ok5hbWVkVHlwZTo6S2luZDo6VHlw
ZURlZmluaXRpb246IHsKICAgICAgICAgYXV0byYgdHlwZURlZmluaXRpb24gPSBkb3duY2FzdDxB
U1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworCiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCJ0eXBlZGVmICIsIG1hbmdsZWROYW1lRm9yVHlwZSh0eXBlRGVmaW5pdGlvbi50eXBl
KCkpLCAnICcsIG1hbmdsZWROYW1lRm9yVHlwZSh0eXBlRGVmaW5pdGlvbiksICI7XG4iKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQorCiAgICAgZW1pdHRlZE5hbWVkVHlwZXMuYWRkKCZuYW1l
ZFR5cGUpOwogfQogCiB2b2lkIFR5cGVOYW1lcjo6ZW1pdE1ldGFsVHlwZURlZmluaXRpb25zKFN0
cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7CiAgICAgSGFzaFNldDxBU1Q6Ok5hbWVkVHlw
ZSo+IGVtaXR0ZWROYW1lZFR5cGVzOwotICAgIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+IGVt
aXR0ZWRVbm5hbWVkVHlwZXM7Ci0gICAgZm9yIChhdXRvJiBuYW1lZFR5cGUgOiBtX2RlcGVuZGVu
Y3lHcmFwaC5rZXlzKCkpCi0gICAgICAgIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1
aWxkZXIsICpuYW1lZFR5cGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVz
KTsKLSAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX3VubmFtZWRUeXBlc1VuaXF1aW5nTWFwLnZhbHVl
cygpKQotICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIsICpu
b2RlLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7CisgICAgSGFzaFNl
dDxVbm5hbWVkVHlwZUtleT4gZW1pdHRlZFVubmFtZWRUeXBlczsKKyAgICBmb3IgKGF1dG8mIFtu
YW1lZFR5cGUsIG5laWdoYm9yc10gOiBtX2RlcGVuZGVuY3lHcmFwaCkKKyAgICAgICAgZW1pdE5h
bWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgKm5hbWVkVHlwZSwgbmVpZ2hib3JzLCBl
bWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7CisgICAgZm9yIChhdXRvJiBb
dW5uYW1lZFR5cGVLZXksIG1hbmdsZWROYW1lXSA6IG1fdW5uYW1lZFR5cGVNYXBwaW5nKQorICAg
ICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIsIHVubmFtZWRUeXBl
S2V5LnVubmFtZWRUeXBlKCksIG1hbmdsZWROYW1lLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRl
ZFVubmFtZWRUeXBlcyk7CiB9CiAKIE1hbmdsZWRUeXBlTmFtZSBUeXBlTmFtZXI6Om1hbmdsZWRO
YW1lRm9yVHlwZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKIHsKLSAgICByZXR1cm4g
ZmluZCh1bm5hbWVkVHlwZSkubWFuZ2xlZE5hbWUoKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV91
bm5hbWVkVHlwZU1hcHBpbmcuZmluZChVbm5hbWVkVHlwZUtleSB7IHVubmFtZWRUeXBlIH0pOwor
ICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3VubmFtZWRUeXBlTWFwcGluZy5lbmQoKSk7CisgICAg
cmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKIH0KIAogTWFuZ2xlZE9yTmF0aXZlVHlwZU5hbWUgVHlw
ZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKQEAg
LTQ0OSw3ICszMjksNiBAQCBNYW5nbGVkT3JOYXRpdmVUeXBlTmFtZSBUeXBlTmFtZXI6Om1hbmds
CiAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKIH0KIAotCiBNYW5nbGVkRW51bWVyYXRpb25N
ZW1iZXJOYW1lIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihBU1Q6
OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKIHsKICAgICBhdXRvIGl0ZXJh
dG9yID0gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBpbmcuZmluZCgmZW51bWVyYXRpb25NZW1iZXIp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xU
eXBlTmFtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oCShyZXZpc2lvbiAyNDg4MjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW1pdE1ldGFs
VHlwZXMoU3RyaW5nQnVpbGRlciYpOwogCi0gICAgLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY2Fs
bGluZyBtZXRhbFR5cGVzKCkuCisgICAgLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY2FsbGluZyBl
bWl0TWV0YWxUeXBlcygpLgogICAgIFN0cmluZyBtYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mKTsKICAgICBNYW5nbGVkVHlwZU5hbWUgbWFuZ2xlZE5hbWVGb3JU
eXBlKEFTVDo6VW5uYW1lZFR5cGUmKTsKICAgICBNYW5nbGVkT3JOYXRpdmVUeXBlTmFtZSBtYW5n
bGVkTmFtZUZvclR5cGUoQVNUOjpOYW1lZFR5cGUmKTsKQEAgLTgzLDIwICs4MywxNyBAQCBwcml2
YXRlOgogCiAgICAgTWFuZ2xlZEVudW1lcmF0aW9uTWVtYmVyTmFtZSBnZW5lcmF0ZU5leHRFbnVt
ZXJhdGlvbk1lbWJlck5hbWUoKSB7IHJldHVybiB7IG1fZW51bWVyYXRpb25NZW1iZXJDb3VudCsr
IH07IH0KIAotICAgIHZvaWQgZW1pdE5hbWVkVHlwZURlZmluaXRpb24oU3RyaW5nQnVpbGRlciYs
IEFTVDo6TmFtZWRUeXBlJiwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRU
eXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMpOwot
ICAgIHZvaWQgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihTdHJpbmdCdWlsZGVyJiwgQmFzZVR5
cGVOYW1lTm9kZSYsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMs
IEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKKyAgICB2
b2lkIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKFN0cmluZ0J1aWxkZXImLCBBU1Q6Ok5hbWVkVHlw
ZSYsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiYsIEhh
c2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8VW5uYW1l
ZFR5cGVLZXk+JiBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKKyAgICB2b2lkIGVtaXRVbm5hbWVkVHlw
ZURlZmluaXRpb24oU3RyaW5nQnVpbGRlciYsIEFTVDo6VW5uYW1lZFR5cGUmLCBNYW5nbGVkVHlw
ZU5hbWUsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hT
ZXQ8VW5uYW1lZFR5cGVLZXk+JiBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKICAgICB2b2lkIGVtaXRN
ZXRhbFR5cGVEZWNsYXJhdGlvbnMoU3RyaW5nQnVpbGRlciYpOwogICAgIHZvaWQgZW1pdE1ldGFs
VHlwZURlZmluaXRpb25zKFN0cmluZ0J1aWxkZXImKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxC
YXNlVHlwZU5hbWVOb2RlPiBjcmVhdGVOYW1lTm9kZShBU1Q6OlVubmFtZWRUeXBlJiwgQmFzZVR5
cGVOYW1lTm9kZSogcGFyZW50KTsKLSAgICBCYXNlVHlwZU5hbWVOb2RlKiBpbnNlcnQoQVNUOjpV
bm5hbWVkVHlwZSYpOwotICAgIEJhc2VUeXBlTmFtZU5vZGUmIGZpbmQoQVNUOjpVbm5hbWVkVHlw
ZSYpOworICAgIHZvaWQgZ2VuZXJhdGVVbmlxdWVkVHlwZU5hbWUoQVNUOjpVbm5hbWVkVHlwZSYp
OwogCiAgICAgUHJvZ3JhbSYgbV9wcm9ncmFtOwotICAgIEhhc2hNYXA8VW5uYW1lZFR5cGVLZXks
IHN0ZDo6dW5pcXVlX3B0cjxCYXNlVHlwZU5hbWVOb2RlPiwgVW5uYW1lZFR5cGVLZXk6Okhhc2gs
IFVubmFtZWRUeXBlS2V5OjpUcmFpdHM+IG1fdW5uYW1lZFR5cGVzVW5pcXVpbmdNYXA7Ci0gICAg
SGFzaE1hcDxBU1Q6OlVubmFtZWRUeXBlKiwgQmFzZVR5cGVOYW1lTm9kZSo+IG1fdW5uYW1lZFR5
cGVNYXBwaW5nOworICAgIEhhc2hNYXA8VW5uYW1lZFR5cGVLZXksIE1hbmdsZWRUeXBlTmFtZT4g
bV91bm5hbWVkVHlwZU1hcHBpbmc7CiAgICAgSGFzaE1hcDxBU1Q6Ok5hbWVkVHlwZSosIE1hbmds
ZWRUeXBlTmFtZT4gbV9uYW1lZFR5cGVNYXBwaW5nOwotICAgIEhhc2hNYXA8QVNUOjpOYW1lZFR5
cGUqLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5hbWVOb2RlPj4+IG1f
ZGVwZW5kZW5jeUdyYXBoOworICAgIEhhc2hNYXA8QVNUOjpOYW1lZFR5cGUqLCBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4+IG1fZGVwZW5kZW5jeUdyYXBo
OwogICAgIEhhc2hNYXA8QVNUOjpFbnVtZXJhdGlvbk1lbWJlciosIE1hbmdsZWRFbnVtZXJhdGlv
bk1lbWJlck5hbWU+IG1fZW51bWVyYXRpb25NZW1iZXJNYXBwaW5nOwogICAgIEhhc2hNYXA8QVNU
OjpTdHJ1Y3R1cmVFbGVtZW50KiwgTWFuZ2xlZFN0cnVjdHVyZUVsZW1lbnROYW1lPiBtX3N0cnVj
dHVyZUVsZW1lbnRNYXBwaW5nOwogICAgIHVuc2lnbmVkIG1fdHlwZUNvdW50IHsgMCB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377219</attachid>
            <date>2019-08-24 19:38:14 -0700</date>
            <delta_ts>2019-08-26 11:58:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200632-20190824193813.patch</filename>
            <type>text/plain</type>
            <size>26350</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE5LTA4LTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIFR5cGVOYW1lciBjYW4g
YmUgc2ltcGxpZmllZCBieSByZXBsYWNpbmcgQmFzZVR5cGVOYW1lTm9kZSB3aXRoIHVuaXF1ZWQg
QVNUOjpVbm5hbWVkVHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMDYzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZXJlIGlzIG5vIGxvbmdlciBhIHJlYXNvbiB0byBrZWVwIGEgcGFyYWxsZWwg
dHJlZSBvZiB0aGUgVW5uYW1lZFR5cGUtbGlrZSBvYmplY3RzCisgICAgICAgIEJhc2VUeXBlTmFt
ZU5vZGVzLiBJbnN0ZWFkLCB3ZSBjYW4gc3RvcmUgYSBzaW5nbGUgSGFzaE1hcCBtYXBwaW5nIGZy
b20gVW5uYW1lZFR5cGVLZXlzCisgICAgICAgIHRvIE1hbmdsZWRUeXBlTmFtZSwgYW5kIHVzZSB0
aGUgdGhlIFVubmFtZWRUeXBlIHN0b3JlZCBpbiB0aGUgVW5uYW1lZFR5cGVLZXkgd2hpbGUgCisg
ICAgICAgIGVtaXR0aW5nIHRoZSBtZXRhbCBjb2RlLiBUaGlzIHJlbW92ZXMgdGhlIHBhcmFsbGVs
IEJhc2VUeXBlTmFtZU5vZGUgdHlwZSBoaWVyYXJjaHkKKyAgICAgICAgYW5kIHJlbW92ZXMgYW4g
ZXh0cmEgYWxsb2NhdGlvbiBmb3IgZWFjaCBVbm5hbWVkVHlwZS4gCisKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZUhhc2guaDoKKyAgICAgICAgRGVm
aW5lIEhhc2hUcmFpdHMgYW5kIERlZmF1bHRIYXNoIHNwZWNpYWxpemF0aW9ucyBmb3IgVW5uYW1l
ZFR5cGVLZXkgdG8gc2ltcGxpZnkKKyAgICAgICAgdXNlcyBvZiBVbm5hbWVkVHlwZUtleSBhcyBh
IGtleSBpbiBIYXNoTWFwL0hhc2hTZXQuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTFR5cGVOYW1lci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6VHlwZU5hbWVyOjppbnNlcnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpUeXBlTmFtZXI6OmdlbmVyYXRlVW5pcXVlZFR5cGVOYW1lKToKKyAgICAgICAgUmVw
bGFjZSBvbGQgaW5zZXJ0IGZ1bmN0aW9uIHdpdGggZ2VuZXJhdGVVbmlxdWVkVHlwZU5hbWUsIHdo
aWNoIHVuaXF1ZXMgYW5kIGdlbmVyYXRlcworICAgICAgICBuYW1lcyBmb3IgdGhlIFVubmFtZWRU
eXBlIGFuZCBhbnkgJ3BhcmVudCcgVW5uYW1lZFR5cGVzLgorCisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGUpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUg
QmFzZVR5cGVOYW1lTm9kZSBhbmQgc3ViY2xhc3Nlcy4KKworICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmNyZWF0ZU5hbWVOb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIGZpbmQgb3IgY3JlYXRlTmFtZU5vZGUgZnVuY3Rpb25z
LCBhcyB0aGUgVW5uYW1lZFR5cGVzIGNhbiBiZSBub3cgYmUKKyAgICAgICAgdXNlZCBkaXJlY3Rs
eSBldmVyeXdoZXJlLgorCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1l
cjo6ZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbik6CisgICAgICAgIFN3aXRjaCB0byBkaXJlY3Rs
eSB1c2luZyB0aGUgVW5uYW1lZFR5cGUgYW5kIGFsd2F5cyBoYXZlIHRoZSBjYWxsZXIgcGFzcyBp
biB0aGUgbWFuZ2xlZAorICAgICAgICBuYW1lLCBzaW5jZSBpbiB0aGUgbWFpbiBlbWl0IGxvb3As
IHdlIGFsd2F5cyBoYXZlIGFjY2VzcyB0byB0aGUgdGhlbS4gQWxzbywgaW5saW5lIHRoZQorICAg
ICAgICB0aGUgcmVjdXJzaXZlIGNhbGxzIHRvIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uIGZvciAn
cGFyZW50JyB0eXBlcyB0byBhdm9pZCB1bm5lY2Vzc2FyeQorICAgICAgICBleHRyYSBzd2l0Y2gg
b3ZlciB0aGUga2luZCBnZXR0aW5nIHRoZSBwYXJlbnQsIGFuZCBhdm9pZCBpdCBlbnRpcmVseSBm
b3IgVHlwZVJlZmVyZW5jZQorICAgICAgICB3aGljaCBuZXZlciBoYXMgYSBwYXJlbnQuCisgICAg
ICAgIAorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmVtaXROYW1l
ZFR5cGVEZWZpbml0aW9uKToKKyAgICAgICAgU3dpdGNoZXMgdG8gbm93IHBhc3NpbmcgaW4gdGhl
IG5laWdoYm9ycywgc2luY2UgdGhleSBhcmUgYWx3YXlzIGF2YWlsYWJsZSBpbiB0aGUgbWFpbiAK
KyAgICAgICAgZW1pdCBsb29wLiBBbHNvIG1vdmUgdG8gYSBzd2l0Y2ggc3RhdGVtZW50IHJhdGhl
ciB0aGFuIGlmcyBmb3IgY29uc2lzdGVuY3kuIAorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjplbWl0TWV0YWxUeXBlRGVmaW5pdGlvbnMpOgorICAg
ICAgICBQYXNzIGtleXMgYW5kIHZhbHVlcyBpbnRvIHRoZSBlbWl0IGZ1bmN0aW9ucyB0byBhdm9p
ZCBkb3VibGUgbG9va3Vwcy4KKworICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBl
TmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZSk6CisgICAgICAgIFVwZGF0ZSB0byBoYXNoIGxvb2t1
cC4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0
cnVjdG9ycy5jcHA6CisgICAgICAgIFRha2UgYWR2YW50YWdlIG9mIGRlZmF1bHQgSGFzaFRyYWl0
cyBhbmQgRGVmYXVsdEhhc2ggZm9yIFVubmFtZWRUeXBlS2V5LgorCiAyMDE5LTA4LTI0ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFBhZ2UgY3Jhc2hl
cyB1bmRlciBDR1BhdGhBZGRVbmV2ZW5Db3JuZXJzUm91bmRlZFJlY3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjQ5MDkwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZp
c2l0b3I6OnZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiAgICAgfQogCi0gICAgSGFzaFNl
dDxVbm5hbWVkVHlwZUtleSwgVW5uYW1lZFR5cGVLZXk6Okhhc2gsIFVubmFtZWRUeXBlS2V5OjpU
cmFpdHM+IHRha2VVbm5hbWVkVHlwZXMoKQorICAgIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXk+IHRh
a2VVbm5hbWVkVHlwZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV91bm5hbWVk
VHlwZXMpOwogICAgIH0KQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICBtX25h
bWVkVHlwZXMuYXBwZW5kKHR5cGUpOwogICAgIH0KIAotICAgIEhhc2hTZXQ8VW5uYW1lZFR5cGVL
ZXksIFVubmFtZWRUeXBlS2V5OjpIYXNoLCBVbm5hbWVkVHlwZUtleTo6VHJhaXRzPiBtX3VubmFt
ZWRUeXBlczsKKyAgICBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiBtX3VubmFtZWRUeXBlczsKICAg
ICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IG1fbmFtZWRU
eXBlczsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFVubmFtZWRUeXBlSGFzaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlSGFzaC5oCShyZXZpc2lvbiAy
NDkwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xV
bm5hbWVkVHlwZUhhc2guaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNCArNzQsMTMgQEAgcHJpdmF0
ZToKIAogfQogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxXZWJDb3JlOjpXSExTTDo6VW5uYW1lZFR5cGVLZXk+IDogV2ViQ29yZTo6V0hMU0w6OlVubmFt
ZWRUeXBlS2V5OjpUcmFpdHMgeyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2Vi
Q29yZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5PiB7CisgICAgdHlwZWRlZiBXZWJDb3JlOjpXSExT
TDo6VW5uYW1lZFR5cGVLZXk6Okhhc2ggSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJldmlzaW9uIDI0OTA5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5h
bWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTE4ICs1OCw2IEBAIG5hbWVzcGFjZSBXSExT
TCB7CiAKIG5hbWVzcGFjZSBNZXRhbCB7CiAKLS8vIEZJWE1FOiBMb29rIGludG8gcmVwbGFjaW5n
IEJhc2VUeXBlTmFtZU5vZGUgd2l0aCBhIHNpbXBsZSBzdHJ1Y3QgeyBSZWZQdHI8VW5uYW1lZFR5
cGU+IHBhcmVudDsgTWFuZ2xlZFR5cGVOYW1lOyB9IHRoYXQgVW5uYW1lZFR5cGVLZXlzIG1hcCB0
by4KLWNsYXNzIEJhc2VUeXBlTmFtZU5vZGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIEJhc2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50
LCBNYW5nbGVkVHlwZU5hbWUmJiBtYW5nbGVkTmFtZSwgQVNUOjpVbm5hbWVkVHlwZTo6S2luZCBr
aW5kKQotICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKLSAgICAgICAgLCBtX21hbmdsZWROYW1l
KG1hbmdsZWROYW1lKQotICAgICAgICAsIG1fa2luZChraW5kKQotICAgIHsKLSAgICB9Ci0gICAg
dmlydHVhbCB+QmFzZVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKLSAgICAKLSAgICBBU1Q6OlVu
bmFtZWRUeXBlOjpLaW5kIGtpbmQoKSB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICBib29sIGlzUmVm
ZXJlbmNlVHlwZU5hbWVOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEFTVDo6VW5uYW1l
ZFR5cGU6OktpbmQ6OlR5cGVSZWZlcmVuY2U7IH0KLSAgICBib29sIGlzUG9pbnRlclR5cGVOYW1l
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpQ
b2ludGVyOyB9Ci0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kID09IEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5UmVmZXJlbmNl
OyB9Ci0gICAgYm9vbCBpc0FycmF5VHlwZU5hbWVOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
ID09IEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5OyB9Ci0KLSAgICBCYXNlVHlwZU5hbWVO
b2RlKiBwYXJlbnQoKSB7IHJldHVybiBtX3BhcmVudDsgfQotICAgIE1hbmdsZWRUeXBlTmFtZSBt
YW5nbGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFuZ2xlZE5hbWU7IH0KLQotcHJpdmF0ZToK
LSAgICBCYXNlVHlwZU5hbWVOb2RlKiBtX3BhcmVudDsKLSAgICBNYW5nbGVkVHlwZU5hbWUgbV9t
YW5nbGVkTmFtZTsKLSAgICBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kIG1fa2luZDsKLX07Ci0KLWNs
YXNzIEFycmF5VHlwZU5hbWVOb2RlIGZpbmFsIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEFycmF5VHlwZU5hbWVO
b2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgTWFuZ2xlZFR5cGVOYW1lJiYgbWFuZ2xlZE5h
bWUsIHVuc2lnbmVkIG51bUVsZW1lbnRzKQotICAgICAgICA6IEJhc2VUeXBlTmFtZU5vZGUocGFy
ZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSwgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6QXJyYXkp
Ci0gICAgICAgICwgbV9udW1FbGVtZW50cyhudW1FbGVtZW50cykKLSAgICB7Ci0gICAgfQotICAg
IHZpcnR1YWwgfkFycmF5VHlwZU5hbWVOb2RlKCkgPSBkZWZhdWx0OwotICAgIHVuc2lnbmVkIG51
bUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50czsgfQotCi1wcml2YXRlOgot
ICAgIHVuc2lnbmVkIG1fbnVtRWxlbWVudHM7Ci19OwotCi1jbGFzcyBBcnJheVJlZmVyZW5jZVR5
cGVOYW1lTm9kZSBmaW5hbCA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9k
ZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmdsZWRUeXBlTmFtZSYmIG1hbmdsZWROYW1l
LCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCi0gICAgICAgIDogQmFzZVR5cGVOYW1l
Tm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpLCBBU1Q6OlVubmFtZWRUeXBlOjpLaW5k
OjpBcnJheVJlZmVyZW5jZSkKLSAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2Up
Ci0gICAgewotICAgIH0KLSAgICB2aXJ0dWFsIH5BcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSgp
ID0gZGVmYXVsdDsKLSAgICBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX2FkZHJlc3NTcGFjZTsgfQotCi1wcml2YXRlOgotICAgIEFTVDo6QWRkcmVzc1Nw
YWNlIG1fYWRkcmVzc1NwYWNlOwotfTsKLQotY2xhc3MgUG9pbnRlclR5cGVOYW1lTm9kZSBmaW5h
bCA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBQb2ludGVyVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBh
cmVudCwgTWFuZ2xlZFR5cGVOYW1lJiYgbWFuZ2xlZE5hbWUsIEFTVDo6QWRkcmVzc1NwYWNlIGFk
ZHJlc3NTcGFjZSkKLSAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVudCwgV1RGTW92ZSht
YW5nbGVkTmFtZSksIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OlBvaW50ZXIpCi0gICAgICAgICwg
bV9hZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQotICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+
UG9pbnRlclR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKLSAgICBBU1Q6OkFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3NTcGFjZTsgfQotCi1wcml2YXRl
OgotICAgIEFTVDo6QWRkcmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOwotfTsKLQotY2xhc3MgUmVm
ZXJlbmNlVHlwZU5hbWVOb2RlIGZpbmFsIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFJlZmVyZW5jZVR5cGVOYW1l
Tm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmdsZWRUeXBlTmFtZSYmIG1hbmdsZWRO
YW1lLCBBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQotICAgICAgICA6IEJhc2VUeXBlTmFtZU5v
ZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSwgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6
VHlwZVJlZmVyZW5jZSkKLSAgICAgICAgLCBtX25hbWVkVHlwZShuYW1lZFR5cGUpCi0gICAgewot
ICAgIH0KLSAgICB2aXJ0dWFsIH5SZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7Ci0g
ICAgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSgpIHsgcmV0dXJuIG1fbmFtZWRUeXBlOyB9Ci0K
LXByaXZhdGU6Ci0gICAgQVNUOjpOYW1lZFR5cGUmIG1fbmFtZWRUeXBlOwotfTsKLQotfQotCi19
Ci0KLX0KLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9O
QU1FRF9OT0RFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VG9WYWx1ZVR5cGVOYW1lKSBcCi0g
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QmFzZVR5
cGVOYW1lTm9kZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0Vf
VFlQRV9OQU1FRF9OT0RFKEFycmF5VHlwZU5hbWVOb2RlLCBpc0FycmF5VHlwZU5hbWVOb2RlKCkp
Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUoQXJy
YXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSkK
LQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShQb2lu
dGVyVHlwZU5hbWVOb2RlLCBpc1BvaW50ZXJUeXBlTmFtZU5vZGUoKSkKLQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShSZWZlcmVuY2VUeXBlTmFtZU5v
ZGUsIGlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
bmFtZXNwYWNlIFdITFNMIHsKLQotbmFtZXNwYWNlIE1ldGFsIHsKLQogVHlwZU5hbWVyOjpUeXBl
TmFtZXIoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICA6IG1fcHJvZ3JhbShwcm9ncmFtKQogewpAQCAt
MTc5LDcgKzY3LDcgQEAgVHlwZU5hbWVyOjp+VHlwZU5hbWVyKCkgPSBkZWZhdWx0OwogCiB2b2lk
IFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCiB7Ci0gICAg
aW5zZXJ0KHVubmFtZWRUeXBlKTsKKyAgICBnZW5lcmF0ZVVuaXF1ZWRUeXBlTmFtZSh1bm5hbWVk
VHlwZSk7CiB9CiAKIHZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQpAQCAtMTk3LDggKzg1LDcgQEAgdm9pZCBUeXBl
TmFtZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZQogICAgIFZpc2l0b3I6OnZpc2l0KGVudW1l
cmF0aW9uRGVmaW5pdGlvbik7CiAKICAgICB7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+PiBuZWlnaGJvcnMgPSB7IGZpbmQoZW51bWVyYXRp
b25EZWZpbml0aW9uLnR5cGUoKSkgfTsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlcGVu
ZGVuY3lHcmFwaC5hZGQoJmVudW1lcmF0aW9uRGVmaW5pdGlvbiwgV1RGTW92ZShuZWlnaGJvcnMp
KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5hZGQoJmVudW1l
cmF0aW9uRGVmaW5pdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpVbm5h
bWVkVHlwZT4+IHsgZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSB9KTsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKICAgICB9CiB9CkBA
IC0yMDYsNyArOTMsNyBAQCB2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRl
CiB2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbikKIHsKICAgICAvLyBOYXRpdmUgdHlwZSBkZWNsYXJhdGlvbnMgYWxy
ZWFkeSBoYXZlIG5hbWVzLCBhbmQgYXJlIGFscmVhZHkgZGVjbGFyZWQgaW4gTWV0YWwuCi0gICAg
YXV0byBhZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5hZGQoJm5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFzZVR5cGVOYW1lTm9kZT4+KCkp
OworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZuYXRpdmVUeXBl
RGVjbGFyYXRpb24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5
cGU+PiB7IH0pOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CiB9CiAKQEAgLTIxOCwxMSArMTA1LDExIEBAIHZvaWQgVHlwZU5hbWVyOjp2aXNpdChB
U1Q6OlN0cnVjdHVyZURlZmkKICAgICB9CiAgICAgVmlzaXRvcjo6dmlzaXQoc3RydWN0dXJlRGVm
aW5pdGlvbik7CiAgICAgewotICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxC
YXNlVHlwZU5hbWVOb2RlPj4gbmVpZ2hib3JzOworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4gbmVpZ2hib3JzOwogICAgICAgICBmb3IgKGF1
dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1l
bnRzKCkpIHsKICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zdHJ1Y3R1cmVFbGVtZW50
TWFwcGluZy5hZGQoJnN0cnVjdHVyZUVsZW1lbnQsIGdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1l
bnROYW1lKCkpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKLSAgICAgICAgICAgIG5laWdoYm9ycy5hcHBlbmQoZmluZChzdHJ1Y3R1
cmVFbGVtZW50LnR5cGUoKSkpOworICAgICAgICAgICAgbmVpZ2hib3JzLmFwcGVuZChzdHJ1Y3R1
cmVFbGVtZW50LnR5cGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X2RlcGVuZGVuY3lHcmFwaC5hZGQoJnN0cnVjdHVyZURlZmluaXRpb24sIFdURk1vdmUobmVpZ2hi
b3JzKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CkBAIC0yMzcsMTUgKzEyNCwxNCBAQCB2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpU
eXBlRGVmaW5pdGlvCiAgICAgfQogICAgIFZpc2l0b3I6OnZpc2l0KHR5cGVEZWZpbml0aW9uKTsK
ICAgICB7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VUeXBlTmFt
ZU5vZGU+PiBuZWlnaGJvcnMgPSB7IGZpbmQodHlwZURlZmluaXRpb24udHlwZSgpKSB9OwotICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVwZW5kZW5jeUdyYXBoLmFkZCgmdHlwZURlZmluaXRp
b24sIFdURk1vdmUobmVpZ2hib3JzKSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBl
bmRlbmN5R3JhcGguYWRkKCZ0eXBlRGVmaW5pdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpVbm5hbWVkVHlwZT4+IHsgdHlwZURlZmluaXRpb24udHlwZSgpIH0pOwogICAg
ICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogICAg
IH0KIH0KIAogdm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lv
bikKIHsKLSAgICBpbnNlcnQoZXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgZ2VuZXJh
dGVVbmlxdWVkVHlwZU5hbWUoZXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgVmlzaXRv
cjo6dmlzaXQoZXhwcmVzc2lvbik7CiB9CiAKQEAgLTI2MCwzNyArMTQ2LDYgQEAgU3RyaW5nIFR5
cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVAogICAgIHJldHVybiB3cml0ZU5hdGl2ZVR5
cGUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKIH0KIAotQmFzZVR5cGVOYW1lTm9kZSYgVHlwZU5h
bWVyOjpmaW5kKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQotewotICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3VubmFtZWRUeXBlc1VuaXF1aW5nTWFwLmZpbmQodW5uYW1lZFR5cGUpOwotICAg
IEFTU0VSVChpdGVyYXRvciAhPSBtX3VubmFtZWRUeXBlc1VuaXF1aW5nTWFwLmVuZCgpKTsKLSAg
ICByZXR1cm4gKml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEJhc2VUeXBl
TmFtZU5vZGU+IFR5cGVOYW1lcjo6Y3JlYXRlTmFtZU5vZGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5u
YW1lZFR5cGUsIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCkKLXsKLSAgICBzd2l0Y2ggKHVubmFt
ZWRUeXBlLmtpbmQoKSkgewotICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6VHlwZVJl
ZmVyZW5jZTogewotICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8QVNUOjpU
eXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJl
ZmVyZW5jZVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpLCB0eXBl
UmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKLSAgICB9Ci0gICAgY2FzZSBBU1Q6OlVubmFtZWRU
eXBlOjpLaW5kOjpQb2ludGVyOiB7Ci0gICAgICAgIGF1dG8mIHBvaW50ZXJUeXBlID0gZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOwotICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxQb2ludGVyVHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCks
IHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpKTsKLSAgICB9Ci0gICAgY2FzZSBBU1Q6OlVubmFt
ZWRUeXBlOjpLaW5kOjpBcnJheVJlZmVyZW5jZTogewotICAgICAgICBhdXRvJiBhcnJheVJlZmVy
ZW5jZVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUp
OwotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4o
cGFyZW50LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpLCBhcnJheVJlZmVyZW5jZVR5cGUuYWRkcmVz
c1NwYWNlKCkpOwotICAgIH0KLSAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5
OiB7Ci0gICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1
bm5hbWVkVHlwZSk7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEFycmF5VHlwZU5hbWVOb2Rl
PihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksIGFycmF5VHlwZS5udW1FbGVtZW50cygp
KTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICB9Ci19Ci0KIHN0YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBwYXJlbnQoQVNUOjpV
bm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCiB7CiAgICAgc3dpdGNoICh1bm5hbWVkVHlwZS5raW5k
KCkpIHsKQEAgLTMwNywyMCArMTYyLDE1IEBAIHN0YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBwYXJl
bnQoQVNUOjpVbm4KICAgICB9CiB9CiAKLUJhc2VUeXBlTmFtZU5vZGUqIFR5cGVOYW1lcjo6aW5z
ZXJ0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQordm9pZCBUeXBlTmFtZXI6OmdlbmVy
YXRlVW5pcXVlZFR5cGVOYW1lKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQogewotICAg
IGlmIChhdXRvKiByZXN1bHQgPSBtX3VubmFtZWRUeXBlTWFwcGluZy5nZXQoJnVubmFtZWRUeXBl
KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQogICAgIGF1dG8qIHBhcmVudFVubmFtZWRUeXBl
ID0gcGFyZW50KHVubmFtZWRUeXBlKTsKLSAgICBCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnROb2Rl
ID0gcGFyZW50VW5uYW1lZFR5cGUgPyBpbnNlcnQoKnBhcmVudFVubmFtZWRUeXBlKSA6IG51bGxw
dHI7CisgICAgaWYgKHBhcmVudFVubmFtZWRUeXBlKQorICAgICAgICBnZW5lcmF0ZVVuaXF1ZWRU
eXBlTmFtZSgqcGFyZW50VW5uYW1lZFR5cGUpOwogCi0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3Vu
bmFtZWRUeXBlc1VuaXF1aW5nTWFwLmVuc3VyZShVbm5hbWVkVHlwZUtleSB7IHVubmFtZWRUeXBl
IH0sIFsmXSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVOYW1lTm9kZSh1bm5hbWVkVHlwZSwgcGFy
ZW50Tm9kZSk7CisgICAgbV91bm5hbWVkVHlwZU1hcHBpbmcuZW5zdXJlKFVubmFtZWRUeXBlS2V5
IHsgdW5uYW1lZFR5cGUgfSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlTmV4dFR5cGVO
YW1lKCk7CiAgICAgfSk7Ci0KLSAgICBtX3VubmFtZWRUeXBlTWFwcGluZy5hZGQoJnVubmFtZWRU
eXBlLCBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKLSAgICByZXR1cm4gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAogY2xhc3MgTWV0YWxUeXBlRGVjbGFyYXRp
b25Xcml0ZXIgZmluYWwgOiBwdWJsaWMgVmlzaXRvciB7CkBAIC0zNTAsOTQgKzIwMCwxMjYgQEAg
dm9pZCBUeXBlTmFtZXI6OmVtaXRNZXRhbFR5cGVEZWNsYXJhdGlvbgogICAgIG1ldGFsVHlwZURl
Y2xhcmF0aW9uV3JpdGVyLlZpc2l0b3I6OnZpc2l0KG1fcHJvZ3JhbSk7CiB9CiAKLXZvaWQgVHlw
ZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1
aWxkZXIsIEJhc2VUeXBlTmFtZU5vZGUmIGJhc2VUeXBlTmFtZU5vZGUsIEhhc2hTZXQ8QVNUOjpO
YW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+
JiBlbWl0dGVkVW5uYW1lZFR5cGVzKQordm9pZCBUeXBlTmFtZXI6OmVtaXRVbm5hbWVkVHlwZURl
ZmluaXRpb24oU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgQVNUOjpVbm5hbWVkVHlwZSYg
dW5uYW1lZFR5cGUsIE1hbmdsZWRUeXBlTmFtZSBtYW5nbGVkTmFtZSwgSGFzaFNldDxBU1Q6Ok5h
bWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxVbm5hbWVkVHlwZUtleT4mIGVt
aXR0ZWRVbm5hbWVkVHlwZXMpCiB7Ci0gICAgaWYgKGVtaXR0ZWRVbm5hbWVkVHlwZXMuY29udGFp
bnMoJmJhc2VUeXBlTmFtZU5vZGUpKQorICAgIGlmIChlbWl0dGVkVW5uYW1lZFR5cGVzLmNvbnRh
aW5zKFVubmFtZWRUeXBlS2V5IHsgdW5uYW1lZFR5cGUgfSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKQotICAgICAgICBlbWl0VW5uYW1lZFR5
cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIsICpiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpLCBl
bWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7Ci0gICAgCi0gICAgc3dpdGNo
IChiYXNlVHlwZU5hbWVOb2RlLmtpbmQoKSkgeworICAgIHN3aXRjaCAodW5uYW1lZFR5cGUua2lu
ZCgpKSB7CiAgICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlOiB7
Ci0gICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PFJlZmVyZW5jZVR5cGVOYW1lTm9k
ZT4oYmFzZVR5cGVOYW1lTm9kZSkubmFtZWRUeXBlKCk7Ci0gICAgICAgIGVtaXROYW1lZFR5cGVE
ZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIsIG5hbWVkVHlwZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVt
aXR0ZWRVbm5hbWVkVHlwZXMpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgidHlwZWRl
ZiAiLCBtYW5nbGVkTmFtZUZvclR5cGUobmFtZWRUeXBlKSwgJyAnLCBiYXNlVHlwZU5hbWVOb2Rl
Lm1hbmdsZWROYW1lKCksICI7XG4iKTsKKyAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRv
d25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOworCisgICAgICAgIGF1dG8m
IHBhcmVudCA9IHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgIGF1dG8gcGFy
ZW50TWFuZ2xlZE5hbWUgPSBtYW5nbGVkTmFtZUZvclR5cGUodHlwZVJlZmVyZW5jZS5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2RlcGVuZGVuY3lHcmFwaC5maW5k
KCZwYXJlbnQpOworICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9kZXBlbmRlbmN5R3JhcGgu
ZW5kKCkpOworICAgICAgICBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWlsZGVyLCBw
YXJlbnQsIGl0ZXJhdG9yLT52YWx1ZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVk
VHlwZXMpOworCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ0eXBlZGVmICIsIHBhcmVu
dE1hbmdsZWROYW1lLCAnICcsIG1hbmdsZWROYW1lLCAiO1xuIik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OlBvaW50ZXI6IHsKLSAgICAg
ICAgYXV0byYgcG9pbnRlclR5cGUgPSBkb3duY2FzdDxQb2ludGVyVHlwZU5hbWVOb2RlPihiYXNl
VHlwZU5hbWVOb2RlKTsKLSAgICAgICAgQVNTRVJUKGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgidHlwZWRlZiAiLCB0b1N0cmluZyhwb2lu
dGVyVHlwZS5hZGRyZXNzU3BhY2UoKSksICcgJywgcG9pbnRlclR5cGUucGFyZW50KCktPm1hbmds
ZWROYW1lKCksICIqICIsIHBvaW50ZXJUeXBlLm1hbmdsZWROYW1lKCksICI7XG4iKTsKKyAgICAg
ICAgYXV0byYgcG9pbnRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSk7CisKKyAgICAgICAgYXV0byYgcGFyZW50ID0gcG9pbnRlclR5cGUuZWxlbWVudFR5cGUo
KTsKKyAgICAgICAgYXV0byBwYXJlbnRNYW5nbGVkTmFtZSA9IG1hbmdsZWROYW1lRm9yVHlwZShw
YXJlbnQpOworICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIs
IHBhcmVudCwgcGFyZW50TWFuZ2xlZE5hbWUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5u
YW1lZFR5cGVzKTsKKworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgidHlwZWRlZiAiLCB0
b1N0cmluZyhwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSksICcgJywgcGFyZW50TWFuZ2xlZE5h
bWUsICIqICIsIG1hbmdsZWROYW1lLCAiO1xuIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5UmVmZXJlbmNlOiB7Ci0gICAgICAg
IGF1dG8mIGFycmF5UmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PEFycmF5UmVmZXJlbmNlVHlwZU5h
bWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKTsKLSAgICAgICAgQVNTRVJUKGJhc2VUeXBlTmFtZU5v
ZGUucGFyZW50KCkpOworICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZVR5cGUgPSBkb3duY2Fz
dDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpOworCisgICAgICAgIGF1dG8m
IHBhcmVudCA9IGFycmF5UmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpOworICAgICAgICBhdXRv
IHBhcmVudE1hbmdsZWROYW1lID0gbWFuZ2xlZE5hbWVGb3JUeXBlKHBhcmVudCk7CisgICAgICAg
IGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgcGFyZW50LCBwYXJlbnRN
YW5nbGVkTmFtZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMpOworCiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgInN0cnVjdCAiLCBhcnJh
eVJlZmVyZW5jZVR5cGUubWFuZ2xlZE5hbWUoKSwgIiB7XG4iCi0gICAgICAgICAgICAiICAgICIs
IHRvU3RyaW5nKGFycmF5UmVmZXJlbmNlVHlwZS5hZGRyZXNzU3BhY2UoKSksICcgJywgYXJyYXlS
ZWZlcmVuY2VUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAiKiBwb2ludGVyO1xuIgorICAg
ICAgICAgICAgInN0cnVjdCAiLCBtYW5nbGVkTmFtZSwgIiB7XG4iCisgICAgICAgICAgICAiICAg
ICIsIHRvU3RyaW5nKGFycmF5UmVmZXJlbmNlVHlwZS5hZGRyZXNzU3BhY2UoKSksICcgJywgcGFy
ZW50TWFuZ2xlZE5hbWUsICIqIHBvaW50ZXI7XG4iCiAgICAgICAgICAgICAiICAgIHVpbnQzMl90
IGxlbmd0aDtcbiIKICAgICAgICAgICAgICJ9O1xuIgogICAgICAgICApOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheTogewotICAg
ICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBcnJheVR5cGVOYW1lTm9kZT4oYmFzZVR5
cGVOYW1lTm9kZSk7Ci0gICAgICAgIEFTU0VSVChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInR5cGVkZWYgYXJyYXk8IiwgYXJyYXlUeXBl
LnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAiLCAiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwg
Ij4gIiwgYXJyYXlUeXBlLm1hbmdsZWROYW1lKCksICI7XG4iKTsKKyAgICAgICAgYXV0byYgYXJy
YXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsKKworICAgICAg
ICBhdXRvJiBwYXJlbnQgPSBhcnJheVR5cGUudHlwZSgpOworICAgICAgICBhdXRvIHBhcmVudE1h
bmdsZWROYW1lID0gbWFuZ2xlZE5hbWVGb3JUeXBlKHBhcmVudCk7CisgICAgICAgIGVtaXRVbm5h
bWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgcGFyZW50LCBwYXJlbnRNYW5nbGVkTmFt
ZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMpOworCisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCJ0eXBlZGVmIGFycmF5PCIsIHBhcmVudE1hbmdsZWROYW1lLCAi
LCAiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIj4gIiwgbWFuZ2xlZE5hbWUsICI7XG4iKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgZW1pdHRlZFVubmFtZWRUeXBlcy5hZGQo
JmJhc2VUeXBlTmFtZU5vZGUpOworICAgIGVtaXR0ZWRVbm5hbWVkVHlwZXMuYWRkKFVubmFtZWRU
eXBlS2V5IHsgdW5uYW1lZFR5cGUgfSk7CiB9CiAKLXZvaWQgVHlwZU5hbWVyOjplbWl0TmFtZWRU
eXBlRGVmaW5pdGlvbihTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBBU1Q6Ok5hbWVkVHlw
ZSYgbmFtZWRUeXBlLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVz
LCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVubmFtZWRUeXBlcykKK3ZvaWQg
VHlwZU5hbWVyOjplbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihTdHJpbmdCdWlsZGVyJiBzdHJpbmdC
dWlsZGVyLCBBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4mIG5laWdoYm9ycywgSGFzaFNldDxBU1Q6Ok5hbWVk
VHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxVbm5hbWVkVHlwZUtleT4mIGVtaXR0
ZWRVbm5hbWVkVHlwZXMpCiB7CiAgICAgaWYgKGVtaXR0ZWROYW1lZFR5cGVzLmNvbnRhaW5zKCZu
YW1lZFR5cGUpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fZGVwZW5k
ZW5jeUdyYXBoLmZpbmQoJm5hbWVkVHlwZSk7Ci0gICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZGVw
ZW5kZW5jeUdyYXBoLmVuZCgpKTsKLSAgICBmb3IgKGF1dG8mIGJhc2VUeXBlTmFtZU5vZGUgOiBp
dGVyYXRvci0+dmFsdWUpCi0gICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5n
QnVpbGRlciwgYmFzZVR5cGVOYW1lTm9kZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5h
bWVkVHlwZXMpOwotICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4obmFtZWRU
eXBlKSkgeworCisgICAgZm9yIChhdXRvJiB1bm5hbWVUeXBlIDogbmVpZ2hib3JzKQorICAgICAg
ICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIsIHVubmFtZVR5cGUsIG1h
bmdsZWROYW1lRm9yVHlwZSh1bm5hbWVUeXBlKSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRV
bm5hbWVkVHlwZXMpOworCisgICAgc3dpdGNoIChuYW1lZFR5cGUua2luZCgpKSB7CisgICAgY2Fz
ZSBBU1Q6Ok5hbWVkVHlwZTo6S2luZDo6RW51bWVyYXRpb25EZWZpbml0aW9uOiB7CiAgICAgICAg
IGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uPihuYW1lZFR5cGUpOwogICAgICAgICBhdXRvJiBiYXNlVHlwZSA9IGVudW1lcmF0
aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7CisKICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoImVudW0gY2xhc3MgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKGVudW1lcmF0aW9uRGVm
aW5pdGlvbiksICIgOiAiLCBtYW5nbGVkTmFtZUZvclR5cGUoZG93bmNhc3Q8QVNUOjpOYW1lZFR5
cGU+KGJhc2VUeXBlKSksICIge1xuIik7CiAgICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25N
ZW1iZXIgOiBlbnVtZXJhdGlvbkRlZmluaXRpb24uZW51bWVyYXRpb25NZW1iZXJzKCkpCiAgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgICIsIG1hbmdsZWROYW1lRm9yRW51bWVy
YXRpb25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpLCAiID0gIiwgZW51bWVyYXRpb25NZW1iZXIu
Z2V0KCkudmFsdWUoKSwgIixcbiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifTtc
biIpOwotICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVk
VHlwZSkpIHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQVNUOjpOYW1lZFR5cGU6
OktpbmQ6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbjogewogICAgICAgICAvLyBOYXRpdmUgdHlwZXMg
YWxyZWFkeSBoYXZlIGRlZmluaXRpb25zLiBUaGVyZSdzIG5vdGhpbmcgdG8gZG8uCi0gICAgfSBl
bHNlIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQVNUOjpOYW1lZFR5cGU6OktpbmQ6OlN0cnVjdHVy
ZURlZmluaXRpb246IHsKICAgICAgICAgYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA9IGRvd25j
YXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKKwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgic3RydWN0ICIsIG1hbmdsZWROYW1lRm9yVHlwZShzdHJ1Y3R1cmVE
ZWZpbml0aW9uKSwgIiB7XG4iKTsKICAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50
IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKQogICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICAiLCBtYW5nbGVkTmFtZUZvclR5cGUoc3RydWN0dXJl
RWxlbWVudC50eXBlKCkpLCAnICcsIG1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudChzdHJ1
Y3R1cmVFbGVtZW50KSwgIjtcbiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifTtc
biIpOwotICAgIH0gZWxzZSB7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFTVDo6
TmFtZWRUeXBlOjpLaW5kOjpUeXBlRGVmaW5pdGlvbjogewogICAgICAgICBhdXRvJiB0eXBlRGVm
aW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSk7CisKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInR5cGVkZWYgIiwgbWFuZ2xlZE5hbWVGb3JUeXBl
KHR5cGVEZWZpbml0aW9uLnR5cGUoKSksICcgJywgbWFuZ2xlZE5hbWVGb3JUeXBlKHR5cGVEZWZp
bml0aW9uKSwgIjtcbiIpOworICAgICAgICBicmVhazsKICAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKICAgICBlbWl0dGVk
TmFtZWRUeXBlcy5hZGQoJm5hbWVkVHlwZSk7CiB9CiAKIHZvaWQgVHlwZU5hbWVyOjplbWl0TWV0
YWxUeXBlRGVmaW5pdGlvbnMoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKICAgICBI
YXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4gZW1pdHRlZE5hbWVkVHlwZXM7Ci0gICAgSGFzaFNldDxC
YXNlVHlwZU5hbWVOb2RlKj4gZW1pdHRlZFVubmFtZWRUeXBlczsKLSAgICBmb3IgKGF1dG8mIG5h
bWVkVHlwZSA6IG1fZGVwZW5kZW5jeUdyYXBoLmtleXMoKSkKLSAgICAgICAgZW1pdE5hbWVkVHlw
ZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgKm5hbWVkVHlwZSwgZW1pdHRlZE5hbWVkVHlwZXMs
IGVtaXR0ZWRVbm5hbWVkVHlwZXMpOwotICAgIGZvciAoYXV0byYgbm9kZSA6IG1fdW5uYW1lZFR5
cGVzVW5pcXVpbmdNYXAudmFsdWVzKCkpCi0gICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRp
b24oc3RyaW5nQnVpbGRlciwgKm5vZGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1l
ZFR5cGVzKTsKKyAgICBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiBlbWl0dGVkVW5uYW1lZFR5cGVz
OworICAgIGZvciAoYXV0byYgW25hbWVkVHlwZSwgbmVpZ2hib3JzXSA6IG1fZGVwZW5kZW5jeUdy
YXBoKQorICAgICAgICBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWlsZGVyLCAqbmFt
ZWRUeXBlLCBuZWlnaGJvcnMsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVz
KTsKKyAgICBmb3IgKGF1dG8mIFt1bm5hbWVkVHlwZUtleSwgbWFuZ2xlZE5hbWVdIDogbV91bm5h
bWVkVHlwZU1hcHBpbmcpCisgICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5n
QnVpbGRlciwgdW5uYW1lZFR5cGVLZXkudW5uYW1lZFR5cGUoKSwgbWFuZ2xlZE5hbWUsIGVtaXR0
ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKIH0KIAogTWFuZ2xlZFR5cGVOYW1l
IFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRU
eXBlKQogewotICAgIHJldHVybiBmaW5kKHVubmFtZWRUeXBlKS5tYW5nbGVkTmFtZSgpOworICAg
IGF1dG8gaXRlcmF0b3IgPSBtX3VubmFtZWRUeXBlTWFwcGluZy5maW5kKFVubmFtZWRUeXBlS2V5
IHsgdW5uYW1lZFR5cGUgfSk7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdW5uYW1lZFR5cGVN
YXBwaW5nLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwogfQogCiBNYW5nbGVk
T3JOYXRpdmVUeXBlTmFtZSBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hbWVk
VHlwZSYgbmFtZWRUeXBlKQpAQCAtNDQ5LDcgKzMzMSw2IEBAIE1hbmdsZWRPck5hdGl2ZVR5cGVO
YW1lIFR5cGVOYW1lcjo6bWFuZ2wKICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwogfQogCi0K
IE1hbmdsZWRFbnVtZXJhdGlvbk1lbWJlck5hbWUgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvckVu
dW1lcmF0aW9uTWVtYmVyKEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVy
KQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZy5maW5k
KCZlbnVtZXJhdGlvbk1lbWJlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmgJKHJldmlzaW9u
IDI0OTA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMVHlwZU5hbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBlbWl0TWV0YWxUeXBlcyhTdHJpbmdCdWlsZGVyJik7CiAKLSAgICAvLyBNdXN0
IGJlIGNhbGxlZCBhZnRlciBjYWxsaW5nIG1ldGFsVHlwZXMoKS4KKyAgICAvLyBNdXN0IGJlIGNh
bGxlZCBhZnRlciBjYWxsaW5nIGVtaXRNZXRhbFR5cGVzKCkuCiAgICAgU3RyaW5nIG1hbmdsZWRO
YW1lRm9yVHlwZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOwogICAgIE1hbmdsZWRUeXBl
TmFtZSBtYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYpOwogICAgIE1hbmdsZWRP
ck5hdGl2ZVR5cGVOYW1lIG1hbmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hbWVkVHlwZSYpOwpAQCAt
ODMsMjAgKzgzLDE3IEBAIHByaXZhdGU6CiAKICAgICBNYW5nbGVkRW51bWVyYXRpb25NZW1iZXJO
YW1lIGdlbmVyYXRlTmV4dEVudW1lcmF0aW9uTWVtYmVyTmFtZSgpIHsgcmV0dXJuIHsgbV9lbnVt
ZXJhdGlvbk1lbWJlckNvdW50KysgfTsgfQogCi0gICAgdm9pZCBlbWl0TmFtZWRUeXBlRGVmaW5p
dGlvbihTdHJpbmdCdWlsZGVyJiwgQVNUOjpOYW1lZFR5cGUmLCBIYXNoU2V0PEFTVDo6TmFtZWRU
eXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1p
dHRlZFVubmFtZWRUeXBlcyk7Ci0gICAgdm9pZCBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKFN0
cmluZ0J1aWxkZXImLCBCYXNlVHlwZU5hbWVOb2RlJiwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+
JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRV
bm5hbWVkVHlwZXMpOworICAgIHZvaWQgZW1pdE5hbWVkVHlwZURlZmluaXRpb24oU3RyaW5nQnVp
bGRlciYsIEFTVDo6TmFtZWRUeXBlJiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpVbm5hbWVkVHlwZT4+JiwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRU
eXBlcywgSGFzaFNldDxVbm5hbWVkVHlwZUtleT4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMpOworICAg
IHZvaWQgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihTdHJpbmdCdWlsZGVyJiwgQVNUOjpVbm5h
bWVkVHlwZSYsIE1hbmdsZWRUeXBlTmFtZSwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0
dGVkTmFtZWRUeXBlcywgSGFzaFNldDxVbm5hbWVkVHlwZUtleT4mIGVtaXR0ZWRVbm5hbWVkVHlw
ZXMpOwogICAgIHZvaWQgZW1pdE1ldGFsVHlwZURlY2xhcmF0aW9ucyhTdHJpbmdCdWlsZGVyJik7
CiAgICAgdm9pZCBlbWl0TWV0YWxUeXBlRGVmaW5pdGlvbnMoU3RyaW5nQnVpbGRlciYpOwogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEJhc2VUeXBlTmFtZU5vZGU+IGNyZWF0ZU5hbWVOb2RlKEFTVDo6
VW5uYW1lZFR5cGUmLCBCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQpOwotICAgIEJhc2VUeXBlTmFt
ZU5vZGUqIGluc2VydChBU1Q6OlVubmFtZWRUeXBlJik7Ci0gICAgQmFzZVR5cGVOYW1lTm9kZSYg
ZmluZChBU1Q6OlVubmFtZWRUeXBlJik7CisgICAgdm9pZCBnZW5lcmF0ZVVuaXF1ZWRUeXBlTmFt
ZShBU1Q6OlVubmFtZWRUeXBlJik7CiAKICAgICBQcm9ncmFtJiBtX3Byb2dyYW07Ci0gICAgSGFz
aE1hcDxVbm5hbWVkVHlwZUtleSwgc3RkOjp1bmlxdWVfcHRyPEJhc2VUeXBlTmFtZU5vZGU+LCBV
bm5hbWVkVHlwZUtleTo6SGFzaCwgVW5uYW1lZFR5cGVLZXk6OlRyYWl0cz4gbV91bm5hbWVkVHlw
ZXNVbmlxdWluZ01hcDsKLSAgICBIYXNoTWFwPEFTVDo6VW5uYW1lZFR5cGUqLCBCYXNlVHlwZU5h
bWVOb2RlKj4gbV91bm5hbWVkVHlwZU1hcHBpbmc7CisgICAgSGFzaE1hcDxVbm5hbWVkVHlwZUtl
eSwgTWFuZ2xlZFR5cGVOYW1lPiBtX3VubmFtZWRUeXBlTWFwcGluZzsKICAgICBIYXNoTWFwPEFT
VDo6TmFtZWRUeXBlKiwgTWFuZ2xlZFR5cGVOYW1lPiBtX25hbWVkVHlwZU1hcHBpbmc7Ci0gICAg
SGFzaE1hcDxBU1Q6Ok5hbWVkVHlwZSosIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJh
c2VUeXBlTmFtZU5vZGU+Pj4gbV9kZXBlbmRlbmN5R3JhcGg7CisgICAgSGFzaE1hcDxBU1Q6Ok5h
bWVkVHlwZSosIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+
Pj4gbV9kZXBlbmRlbmN5R3JhcGg7CiAgICAgSGFzaE1hcDxBU1Q6OkVudW1lcmF0aW9uTWVtYmVy
KiwgTWFuZ2xlZEVudW1lcmF0aW9uTWVtYmVyTmFtZT4gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBp
bmc7CiAgICAgSGFzaE1hcDxBU1Q6OlN0cnVjdHVyZUVsZW1lbnQqLCBNYW5nbGVkU3RydWN0dXJl
RWxlbWVudE5hbWU+IG1fc3RydWN0dXJlRWxlbWVudE1hcHBpbmc7CiAgICAgdW5zaWduZWQgbV90
eXBlQ291bnQgeyAwIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>