<?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>176621</bug_id>
          
          <creation_ts>2017-09-08 11:33:46 -0700</creation_ts>
          <short_desc>Switch MediaPlayerPrivateAVFoundation to release logging</short_desc>
          <delta_ts>2017-09-13 13:03:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></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="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jer.noble</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1346889</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-09-08 11:33:46 -0700</bug_when>
    <thetext>Switch MediaPlayerPrivateAVFoundation to release logging</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346890</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-08 11:34:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/34335311&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347255</commentid>
    <comment_count>2</comment_count>
      <attachid>320397</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-09-10 10:51:03 -0700</bug_when>
    <thetext>Created attachment 320397
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347338</commentid>
    <comment_count>3</comment_count>
      <attachid>320412</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-09-10 18:55:15 -0700</bug_when>
    <thetext>Created attachment 320412
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347409</commentid>
    <comment_count>4</comment_count>
      <attachid>320430</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-09-11 08:50:50 -0700</bug_when>
    <thetext>Created attachment 320430
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347581</commentid>
    <comment_count>5</comment_count>
      <attachid>320430</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-09-11 13:47:42 -0700</bug_when>
    <thetext>Comment on attachment 320430
Patch.

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

r=me, with nit.

&gt; Source/WebCore/html/HTMLMediaElement.h:904
&gt; +    const PAL::Logger* mediaPlayerLogger() final { return &amp;logger(); }

Can we just make this a ref rather than a pointer?

&gt; Source/WebCore/platform/graphics/MediaPlayer.h:306
&gt; +    virtual const PAL::Logger* mediaPlayerLogger() { return nullptr; }

You would just make this a pure virtual. (But that&apos;s ok; the HTMLMediaElement is the only MediaPlayerClient, currently.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347628</commentid>
    <comment_count>6</comment_count>
      <attachid>320430</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-09-11 14:33:33 -0700</bug_when>
    <thetext>Comment on attachment 320430
Patch.

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

&gt;&gt; Source/WebCore/html/HTMLMediaElement.h:904
&gt;&gt; +    const PAL::Logger* mediaPlayerLogger() final { return &amp;logger(); }
&gt; 
&gt; Can we just make this a ref rather than a pointer?

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/MediaPlayer.h:306
&gt;&gt; +    virtual const PAL::Logger* mediaPlayerLogger() { return nullptr; }
&gt; 
&gt; You would just make this a pure virtual. (But that&apos;s ok; the HTMLMediaElement is the only MediaPlayerClient, currently.)

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347629</commentid>
    <comment_count>7</comment_count>
      <attachid>320481</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-09-11 14:33:59 -0700</bug_when>
    <thetext>Created attachment 320481
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347915</commentid>
    <comment_count>8</comment_count>
      <attachid>320550</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-09-12 08:59:51 -0700</bug_when>
    <thetext>Created attachment 320550
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347968</commentid>
    <comment_count>9</comment_count>
      <attachid>320550</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-12 11:34:26 -0700</bug_when>
    <thetext>Comment on attachment 320550
Patch for landing.

Clearing flags on attachment: 320550

Committed r221929: &lt;http://trac.webkit.org/changeset/221929&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320397</attachid>
            <date>2017-09-10 10:51:03 -0700</date>
            <delta_ts>2017-09-10 18:55:15 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>avfoundation_logging_patch_1.txt</filename>
            <type>text/plain</type>
            <size>59107</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvUEFML0NoYW5nZUxvZwkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA5
LTEwICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN3
aXRjaCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24gdG8gcmVsZWFzZSBsb2dnaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2MjEKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM0MzM1MzExPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGFsL0xvZ2dlci5oOgorICAgICAgICAoUEFMOjpM
b2dBcmd1bWVudDo6dG9TdHJpbmcpOgorICAgICAgICAqIHBhbC9Mb2dnZXJIZWxwZXIuaDoKKwog
MjAxNy0wOS0wNiAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXF1aXJlIExvZ2dpbmdIZWxwZXIgb3ZlcnJpZGVzIHRvIHByb3ZpZGUgaWRlbnRpZmll
cgpJbmRleDogU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL0xvZ2dlci5oCShyZXZpc2lvbiAyMjE3MTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL0xvZ2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgTG9nQXJndW1lbnQgewogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPFUsIGJvb2w+Ojp2YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhib29sIGFyZ3Vt
ZW50KSB7IHJldHVybiBhcmd1bWVudCA/IEFTQ0lJTGl0ZXJhbCgidHJ1ZSIpIDogQVNDSUlMaXRl
cmFsKCJmYWxzZSIpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0YXRpYyB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgaW50Pjo6dmFsdWUsIFN0cmluZz46
OnR5cGUgdG9TdHJpbmcoaW50IGFyZ3VtZW50KSB7IHJldHVybiBTdHJpbmc6Om51bWJlcihhcmd1
bWVudCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCB1bnNpZ25lZD46OnZhbHVlLCBTdHJpbmc+Ojp0
eXBlIHRvU3RyaW5nKHVuc2lnbmVkIGFyZ3VtZW50KSB7IHJldHVybiBTdHJpbmc6Om51bWJlcihh
cmd1bWVudCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCB1bnNpZ25lZCBsb25nPjo6dmFsdWUsIFN0
cmluZz46OnR5cGUgdG9TdHJpbmcodW5zaWduZWQgbG9uZyBhcmd1bWVudCkgeyByZXR1cm4gU3Ry
aW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0
YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgZmxvYXQ+Ojp2YWx1
ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhmbG9hdCBhcmd1bWVudCkgeyByZXR1cm4gU3RyaW5n
OjpudW1iZXIoYXJndW1lbnQpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0YXRp
YyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgZG91YmxlPjo6dmFsdWUs
IFN0cmluZz46OnR5cGUgdG9TdHJpbmcoZG91YmxlIGFyZ3VtZW50KSB7IHJldHVybiBTdHJpbmc6
Om51bWJlcihhcmd1bWVudCk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGlj
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OnJlbW92
ZV9yZWZlcmVuY2U8VT46OnR5cGUsIEF0b21pY1N0cmluZz46OnZhbHVlLCBTdHJpbmc+Ojp0eXBl
IHRvU3RyaW5nKEF0b21pY1N0cmluZyBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQuc3RyaW5n
KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvTG9nZ2VySGVscGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXJIZWxwZXIuaAkocmV2aXNpb24g
MjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXJIZWxwZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiBuYW1lc3BhY2UgUEFMIHsKIAorY2xhc3MgTG9n
Z2VyOworCiBjbGFzcyBMb2dnZXJIZWxwZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkxvZ2dl
ckhlbHBlcigpID0gZGVmYXVsdDsKQEAgLTM5LDcgKzQxLDcgQEAgcHVibGljOgogCiAjaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECiAKLSNkZWZpbmUgTE9HSURFTlRJRklFUiBMb2dnZXI6OkxvZ1Np
dGVJZGVudGlmaWVyKGxvZ0NsYXNzTmFtZSgpLCBfX2Z1bmNfXywgbG9nSWRlbnRpZmllcigpKQor
I2RlZmluZSBMT0dJREVOVElGSUVSIFBBTDo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcihsb2dD
bGFzc05hbWUoKSwgX19mdW5jX18sIGxvZ0lkZW50aWZpZXIoKSkKIAogI2RlZmluZSBBTFdBWVNf
TE9HKC4uLikgICAgIGxvZ2dlcigpLmxvZ0Fsd2F5cyhsb2dDaGFubmVsKCksIF9fVkFfQVJHU19f
KQogI2RlZmluZSBFUlJPUl9MT0coLi4uKSAgICAgIGxvZ2dlcigpLmVycm9yKGxvZ0NoYW5uZWwo
KSwgX19WQV9BUkdTX18pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE3MTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5NyBAQAorMjAx
Ny0wOS0xMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAg
ICBTd2l0Y2ggTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIHRvIHJlbGVhc2UgbG9nZ2lu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2NjIx
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDMzNTMxMT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om51bGxMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om1lZGlh
UGxheWVyTG9nZ2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5o
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJDbGllbnQ6Om1lZGlhUGxheWVyTG9nSWRl
bnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllckNsaWVudDo6bWVkaWFQbGF5
ZXJMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om1lZGlhUGxheWVyTG9n
SWRlbnRpZmllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246On5N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXRVcFZpZGVvUmVuZGVyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dGVhckRvd25WaWRlb1Jl
bmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b246OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uOjpwbGF5YWJpbGl0eUtub3duKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6cHJlcGFyZVRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmR1cmF0aW9uTWVkaWFUaW1lIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2Vla1dp
dGhUb2xlcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpzZXROYXR1cmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246Om1heE1lZGlhVGltZVNlZWthYmxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bWluTWVkaWFUaW1lU2Vl
a2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjp1cGRhdGVTdGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246OnRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2Vla0NvbXBsZXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmludmFsaWRhdGVDYWNo
ZWREdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246OnNldFByZWxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjptYWluVGhyZWFkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpk
aXNwYXRjaE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OnByb2Nlc3NOZXdBbmRSZW1vdmVkVGV4dFRyYWNrcyk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmxvZ0NoYW5uZWwgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6bG9nQ2xhc3NOYW1lIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNsZWFyTWVkaWFDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjbGVh
ck1lZGlhQ2FjaGVGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlSW1hZ2VHZW5lcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVz
dHJveUltYWdlR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveVZpZGVvTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y3JlYXRlQVZBc3NldEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVlBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVlBsYXllckl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2hl
Y2tQbGF5YWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpiZWdpbkxvYWRpbmdNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybU1lZGlhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBs
YXRmb3JtUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpwbGF0Zm9ybVBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtRHVyYXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2Vla1RvVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YXNzZXRTdGF0dXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFp
bnRXaXRoSW1hZ2VHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlSW1hZ2VGb3JUaW1lSW5SZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmdldFN1cHBvcnRl
ZFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OnRyYWNrc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlQXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlVmlkZW9UcmFja3Mp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y3JlYXRlVmlkZW9PdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveVZpZGVvT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0ZUxhc3RJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWlu
dFdpdGhWaWRlb091dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpjcmVhdGVPcGVuR0xWaWRlb091dHB1dCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95T3BlbkdMVmlk
ZW9PdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6d2FpdEZvclZpZGVvT3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwcm9jZXNzTWVk
aWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmZsdXNoQ3Vlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRDdXJyZW50VGV4dFRyYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omxhbmd1YWdl
T2ZQcmltYXJ5QXVkaW9UcmFjayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjppc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OndpcmVsZXNzUGxheWJhY2tUYXJnZXROYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OndpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdp
cmVsZXNzUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0U2hv
dWxkQnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjptZXRhZGF0YURpZEFycml2ZSk6CisgICAgICAgICgtW1dlYkNvcmVBVkZN
b3ZpZU9ic2VydmVyIG9ic2VydmVWYWx1ZUZvcktleVBhdGg6b2ZPYmplY3Q6Y2hhbmdlOmNvbnRl
eHQ6XSk6CisgICAgICAgIChXZWJDb3JlOjpib29sU3RyaW5nKTogRGVsZXRlZC4KKwogMjAxNy0w
OS0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIEZl
dGNoJ3MgUmVzcG9uc2Uuc3RhdHVzVGV4dCBpcyB1bmV4cGVjdGVkbHkgdGhlIGZ1bGwgaHR0cCBz
dGF0dXMgbGluZSBmb3IgSFRUUC8yIHJlc3BvbnNlcwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDIyMTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTksNiArODk5LDkgQEAg
cHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiSFRNTE1lZGlhRWxlbWVudCI7IH0KICAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVy
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4obV9s
b2dJZGVudGlmaWVyKTsgfQogICAgIFdURkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBm
aW5hbDsKKworICAgIGNvbnN0IHZvaWQqIG1lZGlhUGxheWVyTG9nSWRlbnRpZmllcigpIGZpbmFs
IHsgcmV0dXJuIGxvZ0lkZW50aWZpZXIoKTsgfQorICAgIGNvbnN0IFBBTDo6TG9nZ2VyKiBtZWRp
YVBsYXllckxvZ2dlcigpIGZpbmFsIHsgcmV0dXJuICZsb2dnZXIoKTsgfQogI2VuZGlmCiAKICAg
ICBib29sIHdpbGxMb2coV1RGTG9nTGV2ZWwpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkocmV2aXNpb24gMjIxNzE3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDg3LDYgKzE0ODcsMjggQEAgYm9vbCBNZWRpYVBsYXllcjo6c2hv
dWxkQ2hlY2tIYXJkd2FyZVN1cAogICAgIHJldHVybiBjbGllbnQoKS5tZWRpYVBsYXllclNob3Vs
ZENoZWNrSGFyZHdhcmVTdXBwb3J0KCk7CiB9CiAKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
K3N0YXRpYyBSZWZQdHI8UEFMOjpMb2dnZXI+JiBudWxsTG9nZ2VyKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPFBBTDo6TG9nZ2VyPj4gbG9nZ2VyOworICAgIHJldHVybiBs
b2dnZXI7Cit9CisKK2NvbnN0IFBBTDo6TG9nZ2VyJiBNZWRpYVBsYXllcjo6bWVkaWFQbGF5ZXJM
b2dnZXIoKQoreworICAgIGF1dG8gbG9nZ2VyID0gY2xpZW50KCkubWVkaWFQbGF5ZXJMb2dnZXIo
KTsKKyAgICBpZiAobG9nZ2VyKQorICAgICAgICByZXR1cm4gKmxvZ2dlcjsKKworICAgIGlmICgh
bnVsbExvZ2dlcigpLmdldCgpKSB7CisgICAgICAgIG51bGxMb2dnZXIoKSA9IFBBTDo6TG9nZ2Vy
OjpjcmVhdGUodGhpcyk7CisgICAgICAgIG51bGxMb2dnZXIoKS0+c2V0RW5hYmxlZCh0aGlzLCBm
YWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuICpudWxsTG9nZ2VyKCkuZ2V0KCk7Cit9CisjZW5k
aWYKKwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiAr
NDQsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlIDxwYWwvTG9nZ2Vy
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTI5OSw2ICszMDAsMTEgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBtZWRpYVBsYXllclNob3VsZERpc2FibGVTbGVlcCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8Q29udGVudFR5
cGU+JiBtZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBtZWRpYVBsYXllclNob3VsZENoZWNrSGFyZHdhcmVTdXBwb3J0KCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAg
IHZpcnR1YWwgY29uc3Qgdm9pZCogbWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKCkgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHZpcnR1YWwgY29uc3QgUEFMOjpMb2dnZXIqIG1lZGlhUGxheWVyTG9n
Z2VyKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmCiB9OwogCiBjbGFzcyBNZWRpYVBsYXll
clN1cHBvcnRzVHlwZUNsaWVudCB7CkBAIC02MjYsNiArNjMyLDExIEBAIHB1YmxpYzoKICAgICBj
b25zdCBWZWN0b3I8Q29udGVudFR5cGU+JiBtZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3
YXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkQ2hlY2tIYXJkd2FyZVN1cHBvcnQo
KSBjb25zdDsKIAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGNvbnN0IFBBTDo6TG9n
Z2VyJiBtZWRpYVBsYXllckxvZ2dlcigpOworICAgIGNvbnN0IHZvaWQqIG1lZGlhUGxheWVyTG9n
SWRlbnRpZmllcigpIHsgcmV0dXJuIGNsaWVudCgpLm1lZGlhUGxheWVyTG9nSWRlbnRpZmllcigp
OyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVu
dCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uLmNwcAkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJVUkwu
aCIKICNpbmNsdWRlIDxDb3JlTWVkaWEvQ29yZU1lZGlhLmg+CiAjaW5jbHVkZSA8aGVhcC9IZWFw
SW5saW5lcy5oPgorI2luY2x1ZGUgPHBhbC9Mb2dnZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Rh
dGFWaWV3Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvVWludDE2QXJyYXkuaD4KQEAgLTYwLDYgKzYxLDEwIEBAIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGEKICAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlh
UGxheWVyOjpFbXB0eSkKICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhp
bmcpCiAgICAgLCBtX3ByZWxvYWQoTWVkaWFQbGF5ZXI6OkF1dG8pCisjaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECisgICAgLCBtX2xvZ2dlcihwbGF5ZXItPm1lZGlhUGxheWVyTG9nZ2VyKCkpCisg
ICAgLCBtX2xvZ0lkZW50aWZpZXIocGxheWVyLT5tZWRpYVBsYXllckxvZ0lkZW50aWZpZXIoKSkK
KyNlbmRpZgogICAgICwgbV9jYWNoZWREdXJhdGlvbihNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkp
CiAgICAgLCBtX3JlcG9ydGVkRHVyYXRpb24oTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAg
ICwgbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzKE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKSkKQEAgLTgxLDEyICs4NiwxMiBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246Ok1lZGlhUGxhCiAgICAgLCBtX3Nob3VsZE1haW50YWluQXNwZWN0UmF0aW8odHJ1ZSkK
ICAgICAsIG1fc2Vla2luZyhmYWxzZSkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiglcCkiLCB0
aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjp+TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uKCkKIHsKLSAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246On5NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb24oJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJ
RklFUik7CiAgICAgc2V0SWdub3JlTG9hZFN0YXRlQ2hhbmdlcyh0cnVlKTsKIH0KIApAQCAtMTI2
LDEwICsxMzEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0CiAg
ICAgaWYgKGN1cnJlbnRNb2RlID09IHByZWZlcnJlZE1vZGUgJiYgY3VycmVudE1vZGUgIT0gTWVk
aWFSZW5kZXJpbmdOb25lKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldFVwVmlkZW9SZW5kZXJpbmcoJXApIC0gY3Vy
cmVudCBtb2RlID0gJWQsIHByZWZlcnJlZCBtb2RlID0gJWQiLCAKLSAgICAgICAgdGhpcywgc3Rh
dGljX2Nhc3Q8aW50PihjdXJyZW50TW9kZSksIHN0YXRpY19jYXN0PGludD4ocHJlZmVycmVkTW9k
ZSkpOwotCi0gICAgaWYgKGN1cnJlbnRNb2RlICE9IE1lZGlhUmVuZGVyaW5nTm9uZSkgIAorICAg
IGlmIChjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpCiAgICAgICAgIHRlYXJEb3du
VmlkZW9SZW5kZXJpbmcoKTsKIAogICAgIHN3aXRjaCAocHJlZmVycmVkTW9kZSkgewpAQCAtMTQ0
LDE1ICsxNDYsMTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldAog
ICAgIH0KIAogICAgIC8vIElmIHVzaW5nIGEgbW92aWUgbGF5ZXIsIGluZm9ybSB0aGUgY2xpZW50
IHNvIHRoZSBjb21wb3NpdGluZyB0cmVlIGlzIHVwZGF0ZWQuCi0gICAgaWYgKGN1cnJlbnRNb2Rl
ID09IE1lZGlhUmVuZGVyaW5nVG9MYXllciB8fCBwcmVmZXJyZWRNb2RlID09IE1lZGlhUmVuZGVy
aW5nVG9MYXllcikgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnNldFVwVmlkZW9SZW5kZXJpbmcoJXApIC0gY2FsbGluZyBtZWRpYVBsYXllclJl
bmRlcmluZ01vZGVDaGFuZ2VkKCkiLCB0aGlzKTsKKyAgICBpZiAoY3VycmVudE1vZGUgPT0gTWVk
aWFSZW5kZXJpbmdUb0xheWVyIHx8IHByZWZlcnJlZE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdUb0xh
eWVyKQogICAgICAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2Rl
Q2hhbmdlZChtX3BsYXllcik7Ci0gICAgfQogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6dGVhckRvd25WaWRlb1JlbmRlcmluZygpCiB7Ci0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCVw
KSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgZGVzdHJveUNv
bnRleHRWaWRlb1JlbmRlcmVyKCk7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6aGFzCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9hZCglcCkiLCB0aGlzKTsKKyAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgc2V0TmV0d29ya1N0YXRlKG1fcHJlbG9hZCA9
PSBNZWRpYVBsYXllcjo6Tm9uZSA/IE1lZGlhUGxheWVyOjpJZGxlIDogTWVkaWFQbGF5ZXI6Okxv
YWRpbmcpOwogICAgIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKTsKQEAg
LTE5MSwxNiArMTkxLDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjps
b2EKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXlhYmlsaXR5S25v
d24oKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
cGxheWFiaWxpdHlLbm93biglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVS
LCAibWV0YWRhdGEgbG9hZGVkID0gIiwgYXNzZXRTdGF0dXMoKSA+IE1lZGlhUGxheWVyQVZBc3Nl
dFN0YXR1c0xvYWRpbmcpOwogCiAgICAgaWYgKG1fYXNzZXRJc1BsYXlhYmxlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBOb3RoaW5nIG1vcmUgdG8gZG8gaWYgd2UgYWxyZWFkeSBoYXZlIGFs
bCBvZiB0aGUgaXRlbSdzIG1ldGFkYXRhLgotICAgIGlmIChhc3NldFN0YXR1cygpID4gTWVkaWFQ
bGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGluZykgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXlhYmlsaXR5S25vd24oJXApIC0gYWxsIG1ldGFk
YXRhIGxvYWRlZCIsIHRoaXMpOworICAgIGlmIChhc3NldFN0YXR1cygpID4gTWVkaWFQbGF5ZXJB
VkFzc2V0U3RhdHVzTG9hZGluZykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIC8vIEF0
IHRoaXMgcG9pbnQgd2UgYXJlIHN1cHBvc2VkIHRvIGxvYWQgbWV0YWRhdGEuIEl0IGlzIE9LIHRv
IGFzayB0aGUgYXNzZXQgdG8gbG9hZCB0aGUgc2FtZSAKICAgICAvLyBpbmZvcm1hdGlvbiBtdWx0
aXBsZSB0aW1lcywgYmVjYXVzZSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCB0aGUgY29t
cGxldGlvbiBoYW5kbGVyIApAQCAtMjExLDI4ICsyMDksMjcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnBsYQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbjo6cHJlcGFyZVRvUGxheSgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpwcmVwYXJlVG9QbGF5KCVwKSIsIHRoaXMpOwotCisgICAgQUxXQVlT
X0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpBdXRvKTsK
IH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXkoKQogewotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGxheSglcCkiLCB0
aGlzKTsKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgLy8gSWYgdGhlIGZp
bGUgaGFzIHZpZGVvLCBkb24ndCByZXF1ZXN0IHBsYXliYWNrIHVudGlsIHRoZSBmaXJzdCBmcmFt
ZSBvZiB2aWRlbyBpcyByZWFkeSB0byBkaXNwbGF5CiAgICAgLy8gb3IgdGhlIGF1ZGlvIG1heSBz
dGFydCBwbGF5aW5nIGJlZm9yZSB3ZSBjYW4gcmVuZGVyIHZpZGVvLgogICAgIGlmICghbV9jYWNo
ZWRIYXNWaWRlbyB8fCBoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkpCiAgICAgICAgIHBsYXRmb3Jt
UGxheSgpOwogICAgIGVsc2UgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OnBsYXkoJXApIC0gd2FpdGluZyBmb3IgZmlyc3QgdmlkZW8gZnJhbWUi
LCB0aGlzKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIndhaXRpbmcgZm9yIGZp
cnN0IHZpZGVvIGZyYW1lIik7CiAgICAgICAgIG1fcGxheVdoZW5GcmFtZXNBdmFpbGFibGUgPSB0
cnVlOwogICAgIH0KIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBh
dXNlKCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OnBhdXNlKCVwKSIsIHRoaXMpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAgICAg
bV9wbGF5V2hlbkZyYW1lc0F2YWlsYWJsZSA9IGZhbHNlOwogICAgIHBsYXRmb3JtUGF1c2UoKTsK
IH0KQEAgLTI0Nyw3ICsyNDQsNyBAQCBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uCiAgICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKICAgICBtX2Nh
Y2hlZER1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpkdXJhdGlvbiglcCkgLSBjYWNoaW5nICVzIiwgdGhpcywgdG9TdHJp
bmcobV9jYWNoZWREdXJhdGlvbikudXRmOCgpLmRhdGEoKSk7CisKICAgICByZXR1cm4gbV9jYWNo
ZWREdXJhdGlvbjsKIH0KIApAQCAtMjYxLDcgKzI1OCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpzZWUKICAgICBNZWRpYVRpbWUgdGltZSA9IG1lZGlhVGltZTsKIAog
ICAgIGlmIChtX3NlZWtpbmcpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpzZWVrV2l0aFRvbGVyYW5jZSglcCkgLSBzYXZlIHBlbmRpbmcgc2Vl
ayIsIHRoaXMpOworICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJzYXZpbmcgcGVu
ZGluZyBzZWVrIik7CiAgICAgICAgIG1fcGVuZGluZ1NlZWsgPSBbdGhpcywgdGltZSwgbmVnYXRp
dmVUb2xlcmFuY2UsIHBvc2l0aXZlVG9sZXJhbmNlXSgpIHsKICAgICAgICAgICAgIHNlZWtXaXRo
VG9sZXJhbmNlKHRpbWUsIG5lZ2F0aXZlVG9sZXJhbmNlLCBwb3NpdGl2ZVRvbGVyYW5jZSk7CiAg
ICAgICAgIH07CkBAIC0yNzgsNyArMjc1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnNlZQogICAgIGlmIChjdXJyZW50VGV4dFRyYWNrKCkpCiAgICAgICAgIGN1cnJl
bnRUZXh0VHJhY2soKS0+YmVnaW5TZWVraW5nKCk7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWsoJXApIC0gc2Vla2luZyB0byAlcyIsIHRoaXMs
IHRvU3RyaW5nKHRpbWUpLnV0ZjgoKS5kYXRhKCkpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUiwgInNlZWtpbmcgdG8gICIsIHRpbWUpOwogCiAgICAgc2Vla1RvVGltZSh0aW1lLCBuZWdh
dGl2ZVRvbGVyYW5jZSwgcG9zaXRpdmVUb2xlcmFuY2UpOwogfQpAQCAtMzE2LDEyICszMTMsMTIg
QEAgRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbgogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0TmF0dXJhbFNpemUoRmxvYXRTaXplIHNpemUp
CiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOnNldE5h
dHVyYWxTaXplKCVwKSAtIHNpemUgPSAlZiB4ICVmIiwgdGhpcywgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKLQogICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9jYWNoZWROYXR1cmFsU2l6
ZTsKICAgICBtX2NhY2hlZE5hdHVyYWxTaXplID0gc2l6ZTsKLSAgICBpZiAob2xkU2l6ZSAhPSBt
X2NhY2hlZE5hdHVyYWxTaXplKQorICAgIGlmIChvbGRTaXplICE9IG1fY2FjaGVkTmF0dXJhbFNp
emUpIHsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIndhcyAiLCBvbGRTaXplLndp
ZHRoKCksICIgeCAiLCBvbGRTaXplLmhlaWdodCgpLCAiLCBpcyAiLCBzaXplLndpZHRoKCksICIg
eCAiLCBzaXplLmhlaWdodCgpKTsKICAgICAgICAgbV9wbGF5ZXItPnNpemVDaGFuZ2VkKCk7Cisg
ICAgfQogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0SGFzVmlk
ZW8oYm9vbCBiKQpAQCAtNDAzLDExICs0MDAsMTIgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbgogICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKICAgICAgICAg
cmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotICAgIGlmICghbV9jYWNoZWRNYXhUaW1l
U2Vla2FibGUpCisgICAgaWYgKCFtX2NhY2hlZE1heFRpbWVTZWVrYWJsZSkgewogICAgICAgICBt
X2NhY2hlZE1heFRpbWVTZWVrYWJsZSA9IHBsYXRmb3JtTWF4VGltZVNlZWthYmxlKCk7CisgICAg
ICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJjYWNoaW5nICIsIG1fY2FjaGVkTWF4VGltZVNl
ZWthYmxlKTsKKyAgICB9CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246Om1heFRpbWVTZWVrYWJsZSglcCkgLSByZXR1cm5pbmcgJXMiLCB0aGlzLCB0b1N0
cmluZyhtX2NhY2hlZE1heFRpbWVTZWVrYWJsZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJu
IG1fY2FjaGVkTWF4VGltZVNlZWthYmxlOyAgIAorICAgIHJldHVybiBtX2NhY2hlZE1heFRpbWVT
ZWVrYWJsZTsKIH0KIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
bWluTWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdApAQCAtNDE1LDEwICs0MTMsMTEgQEAgTWVkaWFU
aW1lIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbgogICAgIGlmICghbWV0YURhdGFBdmFp
bGFibGUoKSkKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotICAgIGlm
ICghbV9jYWNoZWRNaW5UaW1lU2Vla2FibGUpCisgICAgaWYgKCFtX2NhY2hlZE1pblRpbWVTZWVr
YWJsZSkgewogICAgICAgICBtX2NhY2hlZE1pblRpbWVTZWVrYWJsZSA9IHBsYXRmb3JtTWluVGlt
ZVNlZWthYmxlKCk7CisgICAgICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJjYWNoaW5nICIs
IG1fY2FjaGVkTWluVGltZVNlZWthYmxlKTsKKyAgICB9CiAKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1pblRpbWVTZWVrYWJsZSglcCkgLSByZXR1cm5p
bmcgJXMiLCB0aGlzLCB0b1N0cmluZyhtX2NhY2hlZE1pblRpbWVTZWVrYWJsZSkudXRmOCgpLmRh
dGEoKSk7CiAgICAgcmV0dXJuIG1fY2FjaGVkTWluVGltZVNlZWthYmxlOwogfQogCkBAIC01NjQs
MTIgKzU2MywxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dXBkCiAg
ICAgfSBlbHNlIGlmICghaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpKQogICAgICAgICBtX2hhdmVS
ZXBvcnRlZEZpcnN0VmlkZW9GcmFtZSA9IGZhbHNlOwogCi0jaWYgIUxPR19ESVNBQkxFRAotICAg
IGlmIChtX25ldHdvcmtTdGF0ZSAhPSBuZXdOZXR3b3JrU3RhdGUgfHwgbV9yZWFkeVN0YXRlICE9
IG5ld1JlYWR5U3RhdGUpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjp1cGRhdGVTdGF0ZXMoJXApIC0gZW50ZXJlZCB3aXRoIG5ldHdvcmtTdGF0
ZSA9ICVpLCByZWFkeVN0YXRlID0gJWksICBleGl0aW5nIHdpdGggbmV0d29ya1N0YXRlID0gJWks
IHJlYWR5U3RhdGUgPSAlaSIsCi0gICAgICAgICAgICB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KG1f
bmV0d29ya1N0YXRlKSwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWR5U3RhdGUpLCBzdGF0aWNfY2Fz
dDxpbnQ+KG5ld05ldHdvcmtTdGF0ZSksIHN0YXRpY19jYXN0PGludD4obmV3UmVhZHlTdGF0ZSkp
OwotICAgIH0KLSNlbmRpZgorICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBuZXdOZXR3b3JrU3Rh
dGUpCisgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgImVudGVyZWQgd2l0aCBuZXR3
b3JrU3RhdGUgIiwgc3RhdGljX2Nhc3Q8aW50PihtX25ldHdvcmtTdGF0ZSksICIsIGV4aXRpbmcg
d2l0aCAiLCBzdGF0aWNfY2FzdDxpbnQ+KG5ld05ldHdvcmtTdGF0ZSkpOworICAgIGlmIChtX3Jl
YWR5U3RhdGUgIT0gbmV3UmVhZHlTdGF0ZSkKKyAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSLCAiZW50ZXJlZCB3aXRoIHJlYWR5U3RhdGUgIiwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWR5
U3RhdGUpLCAiLCBleGl0aW5nIHdpdGggIiwgc3RhdGljX2Nhc3Q8aW50PihuZXdSZWFkeVN0YXRl
KSk7CiAKICAgICBzZXROZXR3b3JrU3RhdGUobmV3TmV0d29ya1N0YXRlKTsKICAgICBzZXRSZWFk
eVN0YXRlKG5ld1JlYWR5U3RhdGUpOwpAQCAtNjE5LDggKzYxNiw4IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptZXQKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnJhdGVDaGFuZ2VkKCkKIHsKKwogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFD
S19UQVJHRVQpICYmIFBMQVRGT1JNKElPUykKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnJhdGVDaGFuZ2VkKCVwKSAtIHJhdGUgPSAlZiwgcmVxdWVzdGVk
IHJhdGUgPSAlZiwgaXRlbSBzdGF0dXMgPSAlaSIsIHRoaXMsIHJhdGUoKSwgcmVxdWVzdGVkUmF0
ZSgpLCBwbGF5ZXJJdGVtU3RhdHVzKCkpOwogICAgIGlmIChpc0N1cnJlbnRQbGF5YmFja1Rhcmdl
dFdpcmVsZXNzKCkgJiYgcGxheWVySXRlbVN0YXR1cygpID49IE1lZGlhUGxheWVyQVZQbGF5ZXJJ
dGVtU3RhdHVzUGxheWJhY2tCdWZmZXJGdWxsKSB7CiAgICAgICAgIGRvdWJsZSByYXRlID0gdGhp
cy0+cmF0ZSgpOwogICAgICAgICBpZiAocmF0ZSAhPSByZXF1ZXN0ZWRSYXRlKCkpIHsKQEAgLTY0
OCwxNCArNjQ1LDEzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWUK
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnRpbWVDaGFuZ2VkKGNvbnN0
IE1lZGlhVGltZSYgdGltZSkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246OnRpbWVDaGFuZ2VkKCVwKSAtIHRpbWUgPSAlcyIsIHRoaXMsIHRvU3RyaW5n
KHRpbWUpLnV0ZjgoKS5kYXRhKCkpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIs
IHRpbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aW1lKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQoYm9vbCBmaW5pc2hlZCkKIHsKLSAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQo
JXApIC0gZmluaXNoZWQgPSAlZCIsIHRoaXMsIGZpbmlzaGVkKTsKLSAgICBVTlVTRURfUEFSQU0o
ZmluaXNoZWQpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgImZpbmlzaGVkID0gIiwg
ZmluaXNoZWQpOwogCiAgICAgbV9zZWVraW5nID0gZmFsc2U7CiAKQEAgLTY2Myw3ICs2NTksNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlCiAgICAgc3RkOjpzd2Fw
KHBlbmRpbmdTZWVrLCBtX3BlbmRpbmdTZWVrKTsKIAogICAgIGlmIChwZW5kaW5nU2Vlaykgewot
ICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtD
b21wbGV0ZWQoJXApIC0gaXNzdWluZyBwZW5kaW5nIHNlZWsiLCB0aGlzKTsKKyAgICAgICAgQUxX
QVlTX0xPRyhMT0dJREVOVElGSUVSLCAiaXNzdWluZyBwZW5kaW5nIHNlZWsiKTsKICAgICAgICAg
cGVuZGluZ1NlZWsoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY5NSw2ICs2OTEsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6aW52CiAgICAgLy8gc28gcmVw
b3J0IGR1cmF0aW9uIGNoYW5nZWQgd2hlbiB0aGUgZXN0aW1hdGUgaXMgdXBhdGVkLgogICAgIE1l
ZGlhVGltZSBkdXJhdGlvbiA9IHRoaXMtPmR1cmF0aW9uTWVkaWFUaW1lKCk7CiAgICAgaWYgKGR1
cmF0aW9uICE9IG1fcmVwb3J0ZWREdXJhdGlvbikgeworICAgICAgICBJTkZPX0xPRyhMT0dJREVO
VElGSUVSLCAiLSAiLCBtX2NhY2hlZER1cmF0aW9uKTsKICAgICAgICAgaWYgKG1fcmVwb3J0ZWRE
dXJhdGlvbi5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2Vk
KCk7CiAgICAgICAgIG1fcmVwb3J0ZWREdXJhdGlvbiA9IGR1cmF0aW9uOwpAQCAtNzIwLDYgKzcx
Nyw3IEBAIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHIKIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlBy
ZWxvYWQgcHJlbG9hZCkKIHsKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICIgLSAiLCBz
dGF0aWNfY2FzdDxpbnQ+KHByZWxvYWQpKTsKICAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOwogICAg
IGlmICghbV9hc3NldFVSTC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzU0LDggKzc1
Miw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXQKIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1haW5UaHJlYWRDYWxsYmFjaygpCiB7Ci0g
ICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptYWluVGhyZWFk
Q2FsbGJhY2soJXApIiwgdGhpcyk7Ci0KICAgICBjbGVhck1haW5UaHJlYWRQZW5kaW5nRmxhZygp
OwogICAgIGRpc3BhdGNoTm90aWZpY2F0aW9uKCk7CiB9CkBAIC03NzYsNyArNzcyLDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNjaAogICAgIHNjaGVkdWxlTWFpblRo
cmVhZE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24odHlwZSwgZmluaXNoZWQpKTsKIH0KIAotI2lm
ICFMT0dfRElTQUJMRUQKKyNpZiAwCiBzdGF0aWMgY29uc3QgY2hhciogbm90aWZpY2F0aW9uTmFt
ZShNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbiYgbm90aWZpY2F0
aW9uKQogewogI2RlZmluZSBERUZJTkVfVFlQRV9TVFJJTkdfQ0FTRSh0eXBlKSBjYXNlIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjp0eXBlOiByZXR1cm4gI3R5
cGU7CkBAIC03OTIsMTAgKzc4OCw2IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBub3RpZmljYXRpb25O
YW1lKE1lZGkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNjaGVkdWxl
TWFpblRocmVhZE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24mJiBub3RpZmljYXRpb24pCiB7Ci0g
ICAgYXV0byBub3RpZmljYXRpb25UeXBlID0gbm90aWZpY2F0aW9uLnR5cGUoKTsKLSAgICBpZiAo
bm90aWZpY2F0aW9uVHlwZSAhPSBOb3RpZmljYXRpb246OkZ1bmN0aW9uVHlwZSkKLSAgICAgICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzY2hlZHVsZU1haW5U
aHJlYWROb3RpZmljYXRpb24oJXApIC0gbm90aWZpY2F0aW9uICVzIiwgdGhpcywgbm90aWZpY2F0
aW9uTmFtZShub3RpZmljYXRpb24pKTsKLQogICAgIG1fcXVldWVNdXRleC5sb2NrKCk7CiAKICAg
ICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gYWx3YXlzIHByb2Nlc3MgdGhlIHByb3BlcnRpZXMgaW4g
dGhlIG9yZGVyIHRoYXQgd2UgYXJlIG5vdGlmaWVkLApAQCAtODIwLDExICs4MTIsOCBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2NoCiAKICAgICBtX3F1ZXVlTXV0ZXgu
dW5sb2NrKCk7CiAKLSAgICBpZiAoZGVsYXlEaXNwYXRjaCkgewotICAgICAgICBpZiAobm90aWZp
Y2F0aW9uVHlwZSAhPSBOb3RpZmljYXRpb246OkZ1bmN0aW9uVHlwZSkKLSAgICAgICAgICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2NoZWR1bGVNYWluVGhy
ZWFkTm90aWZpY2F0aW9uKCVwKSAtIGVhcmx5IHJldHVybiIsIHRoaXMpOworICAgIGlmIChkZWxh
eURpc3BhdGNoKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgZGlzcGF0Y2hOb3RpZmlj
YXRpb24oKTsKIH0KQEAgLTg1OCw5ICs4NDcsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6ZGlzCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG5v
dGlmaWNhdGlvbi50eXBlKCkgIT0gTm90aWZpY2F0aW9uOjpGdW5jdGlvblR5cGUpCi0gICAgICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6ZGlzcGF0Y2hOb3Rp
ZmljYXRpb24oJXApIC0gZGlzcGF0Y2hpbmcgJXMiLCB0aGlzLCBub3RpZmljYXRpb25OYW1lKG5v
dGlmaWNhdGlvbikpOwotCiAgICAgc3dpdGNoIChub3RpZmljYXRpb24udHlwZSgpKSB7CiAgICAg
Y2FzZSBOb3RpZmljYXRpb246Okl0ZW1EaWRQbGF5VG9FbmRUaW1lOgogICAgICAgICBkaWRFbmQo
KTsKQEAgLTk4OSw4ICs5NzUsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6cHJvCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB1bnNpZ25lZCB0cmFja0NvdW50ID0gbV90
ZXh0VHJhY2tzLnNpemUoKTsKICAgICB1bnNpZ25lZCBpbkJhbmRDb3VudCA9IDA7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGV4dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0cmFja0NvdW50OyArK2kpIHsKICAgICAgICAgUmVmUHRy
PEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY+IHRyYWNrID0gbV90ZXh0VHJhY2tzW2ldOwogCiAj
aWYgRU5BQkxFKEFWRl9DQVBUSU9OUykKQEAgLTEwMDYsNyArOTkzLDkgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246OnBybwogICAgICAgICB0cmFjay0+c2V0SGFzQmVlblJl
cG9ydGVkKHRydWUpOwogICAgICAgICBwbGF5ZXIoKS0+YWRkVGV4dFRyYWNrKCp0cmFjayk7CiAg
ICAgfQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cHJv
Y2Vzc05ld0FuZFJlbW92ZWRUZXh0VHJhY2tzKCVwKSAtIGZvdW5kICVsdSB0ZXh0IHRyYWNrcyIs
IHRoaXMsIG1fdGV4dFRyYWNrcy5zaXplKCkpOworCisgICAgaWYgKHRyYWNrQ291bnQgIT0gbV90
ZXh0VHJhY2tzLnNpemUoKSkKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgImZvdW5k
ICIsIG1fdGV4dFRyYWNrcy5zaXplKCksICIgdGV4dCB0cmFja3MiKTsKIH0KIAogI2lmIEVOQUJM
RShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCkBAIC0xMTIyLDYgKzExMTEsMTMgQEAgYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmlzVQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorV1RGTG9nQ2hhbm5lbCYgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjpsb2dDaGFubmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTG9n
TWVkaWE7Cit9CisjZW5kaWYKKwogY29uc3QgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vu
c2l0aXZlSGFzaD4mIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c3RhdGljTUlNRVR5
cGVMaXN0KCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBjYWNoZSA9IG1ha2VOZXZlckRlc3Ry
b3llZChIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5o
CShyZXZpc2lvbiAyMjE3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
KyNpbmNsdWRlIDxwYWwvTG9nZ2VySGVscGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTM5
LDYgKzQwLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKK25hbWVzcGFjZSBQQUwgeworY2xhc3MgTG9nZ2VyOworfQorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRjsK
QEAgLTQ2LDYgKzUxLDkgQEAgY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjsKIGNsYXNz
IEdlbmVyaWNDdWVEYXRhOwogCiBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24g
OiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBwdWJsaWMgQVZGSW5iYW5kVHJh
Y2tQYXJlbnQKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAsIHByaXZhdGUgUEFMOjpM
b2dnZXJIZWxwZXIKKyNlbmRpZgogewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50
KCk7CkBAIC0xNDQsNiArMTUyLDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBleHRyYWN0
S2V5VVJJS2V5SURBbmRDZXJ0aWZpY2F0ZUZyb21Jbml0RGF0YShVaW50OEFycmF5KiBpbml0RGF0
YSwgU3RyaW5nJiBrZXlVUkksIFN0cmluZyYga2V5SUQsIFJlZlB0cjxVaW50OEFycmF5PiYgY2Vy
dGlmaWNhdGUpOwogI2VuZGlmCiAKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBjb25z
dCBQQUw6OkxvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0
KCk7IH0KKyAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIjsgfQorICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50
aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQq
PihtX2xvZ0lkZW50aWZpZXIpOyB9CisgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNv
bnN0IGZpbmFsOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb24oTWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24oKTsKQEAgLTMzMSw2ICszNDYsMTEgQEAgcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV9hc3NldFVSTDsKICAgICBNZWRpYVBsYXllcjo6UHJlbG9hZCBtX3ByZWxv
YWQ7CiAKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBSZWY8Y29uc3QgUEFMOjpMb2dn
ZXI+IG1fbG9nZ2VyOworICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllcjsKKyNlbmRpZgor
CiAgICAgRmxvYXRTaXplIG1fY2FjaGVkTmF0dXJhbFNpemU7CiAgICAgbXV0YWJsZSBNZWRpYVRp
bWUgbV9jYWNoZWRNYXhUaW1lTG9hZGVkOwogICAgIG11dGFibGUgTWVkaWFUaW1lIG1fY2FjaGVk
TWF4VGltZVNlZWthYmxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAkocmV2aXNpb24gMjIx
NzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzYsNiArMzM2LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFNob3VsZERpc2FibGVT
bGVlcChib29sKSBvdmVycmlkZTsKIAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGNv
bnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDIjsgfQorI2VuZGlmCisKICAgICBXZWFrUHRyRmFjdG9y
eTxNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDPiBtX3dlYWtQdHJGYWN0b3J5Owog
CiAgICAgUmV0YWluUHRyPEFWVVJMQXNzZXQ+IG1fYXZBc3NldDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5tbQkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUyLDEzICszNTIsNiBAQCBzdGF0aWMgTlNBcnJh
eSAqYXNzZXRUcmFja01ldGFkYXRhS2V5TmFtCiBzdGF0aWMgTlNBcnJheSAqcGxheWVyS1ZPUHJv
cGVydGllcygpOwogc3RhdGljIEFWQXNzZXRUcmFjayogZmlyc3RFbmFibGVkVHJhY2soTlNBcnJh
eSogdHJhY2tzKTsKIAotI2lmICFMT0dfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFyICpib29s
U3RyaW5nKGJvb2wgdmFsKQotewotICAgIHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOwot
fQotI2VuZGlmCi0KICNpZiBIQVZFKEFWRk9VTkRBVElPTl9MT0FERVJfREVMRUdBVEUpCiBzdGF0
aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYWxMb2FkZXJEZWxlZ2F0ZVF1ZXVlKCkKIHsKQEAgLTQ3
OCw4ICs0NzEsNiBAQCBzdGF0aWMgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wCiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2xlYXJNZWRpYUNhY2hl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2lu
dCBtb2RpZmllZFNpbmNlKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OmNsZWFyTWVkaWFDYWNoZSgpIik7Ci0gICAgCiAgICAgQVZBc3NldENh
Y2hlVHlwZSogYXNzZXRDYWNoZSA9IGFzc2V0Q2FjaGVGb3JQYXRoKHBhdGgpOwogICAgIAogICAg
IGZvciAoTlNTdHJpbmcgKmtleSBpbiBbYXNzZXRDYWNoZSBhbGxLZXlzXSkgewpAQCAtNTIyLDcg
KzUxMyw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjbGVhck1lZGlhQ2FjaGVGb3JP
cmlnaW5zKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+PiYgb3JpZ2lucykKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpjbGVhck1lZGlhQ2FjaGVGb3JPcmlnaW5zKCkiKTsKICAgICBBVkFz
c2V0Q2FjaGVUeXBlKiBhc3NldENhY2hlID0gYXNzZXRDYWNoZUZvclBhdGgocGF0aCk7CiAgICAg
Zm9yIChOU1N0cmluZyAqa2V5IGluIFthc3NldENhY2hlIGFsbEtleXNdKSB7CiAgICAgICAgIFVS
TCBrZXlBc1VSTCA9IFVSTChVUkwoKSwga2V5KTsKQEAgLTU5Miw3ICs1ODIsNyBAQCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp+TWVkCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2FuY2VsTG9hZCgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2FuY2VsTG9hZCglcCkiLCB0aGlzKTsK
KyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICB0ZWFyRG93blZpZGVvUmVuZGVyaW5n
KCk7CiAKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9i
c2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpXTsKQEAgLTY4MSw3ICs2NzEsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlSW1hZ2VHZW5lcmF0b3IoKQogewotICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUltYWdlR2Vu
ZXJhdG9yKCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAg
aWYgKCFtX2F2QXNzZXQgfHwgbV9pbWFnZUdlbmVyYXRvcikKICAgICAgICAgcmV0dXJuOwpAQCAt
NjkyLDggKzY4Miw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoK
ICAgICBbbV9pbWFnZUdlbmVyYXRvci5nZXQoKSBzZXRBcHBsaWVzUHJlZmVycmVkVHJhY2tUcmFu
c2Zvcm06WUVTXTsKICAgICBbbV9pbWFnZUdlbmVyYXRvci5nZXQoKSBzZXRSZXF1ZXN0ZWRUaW1l
VG9sZXJhbmNlQmVmb3JlOmtDTVRpbWVaZXJvXTsKICAgICBbbV9pbWFnZUdlbmVyYXRvci5nZXQo
KSBzZXRSZXF1ZXN0ZWRUaW1lVG9sZXJhbmNlQWZ0ZXI6a0NNVGltZVplcm9dOwotCi0gICAgTE9H
KE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlSW1hZ2VH
ZW5lcmF0b3IoJXApIC0gcmV0dXJuaW5nICVwIiwgdGhpcywgbV9pbWFnZUdlbmVyYXRvci5nZXQo
KSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJv
eUNvbnRleHRWaWRlb1JlbmRlcmVyKCkKQEAgLTcxMCw3ICs2OTgsNyBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFtX2ltYWdlR2VuZXJhdG9yKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpkZXN0cm95SW1hZ2VHZW5lcmF0b3IoJXApIC0gZGVzdHJveWluZyAgJXAi
LCB0aGlzLCBtX2ltYWdlR2VuZXJhdG9yLmdldCgpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElG
SUVSKTsKIAogICAgIG1faW1hZ2VHZW5lcmF0b3IgPSAwOwogfQpAQCAtNzU1LDcgKzc0Myw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICB1cGRhdGVWaWRl
b0xheWVyR3Jhdml0eSgpOwogICAgIFttX3ZpZGVvTGF5ZXIgc2V0Q29udGVudHNTY2FsZTpwbGF5
ZXIoKS0+Y2xpZW50KCkubWVkaWFQbGF5ZXJDb250ZW50c1NjYWxlKCldOwogICAgIEludFNpemUg
ZGVmYXVsdFNpemUgPSBzbmFwcGVkSW50UmVjdChwbGF5ZXIoKS0+Y2xpZW50KCkubWVkaWFQbGF5
ZXJDb250ZW50Qm94UmVjdCgpKS5zaXplKCk7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlVmlkZW9MYXllciglcCkgLSByZXR1cm5pbmcg
JXAiLCB0aGlzLCBtX3ZpZGVvTGF5ZXIuZ2V0KCkpOworICAgIElORk9fTE9HKExPR0lERU5USUZJ
RVIpOwogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2Vy
LT5zZXRWaWRlb0xheWVyKG1fdmlkZW9MYXllci5nZXQoKSwgZGVmYXVsdFNpemUpOwpAQCAtNzcz
LDcgKzc2MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAg
ICBpZiAoIW1fdmlkZW9MYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveVZpZGVvTGF5ZXIoJXAp
IC0gZGVzdHJveWluZyAlcCIsIHRoaXMsIG1fdmlkZW9MYXllci5nZXQoKSk7CisgICAgSU5GT19M
T0coTE9HSURFTlRJRklFUik7CiAKICAgICBbbV92aWRlb0xheWVyIHJlbW92ZU9ic2VydmVyOm1f
b2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6QCJyZWFkeUZvckRpc3BsYXkiXTsKICAgICBb
bV92aWRlb0xheWVyIHNldFBsYXllcjpuaWxdOwpAQCAtOTExLDcgKzg5OSw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBpZiAobV9hdkFzc2V0KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9yVVJMKCVwKSAtIHVybCA9ICVzIiwgdGhpcywgdXJs
LnV0ZjgoKS5kYXRhKCkpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgc2V0
RGVsYXlDYWxsYmFja3ModHJ1ZSk7CiAKQEAgLTEwNDgsNyArMTAzNiw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBpZiAobV9hdlBsYXllcikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURF
TlRJRklFUik7CiAKICAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKIApAQCAtMTA5Nyw3ICsx
MDg1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlm
IChtX2F2UGxheWVySXRlbSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKCVwKSIs
IHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgc2V0RGVsYXlDYWxs
YmFja3ModHJ1ZSk7CiAKQEAgLTExNDQsNyArMTEzMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgcmV0dXJuOwogICAgIG1faGF2ZUNoZWNrZWRQ
bGF5YWJpbGl0eSA9IHRydWU7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpjaGVja1BsYXlhYmlsaXR5KCVwKSIsIHRoaXMpOworICAgIElORk9f
TE9HKExPR0lERU5USUZJRVIpOwogICAgIGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7
CiAKICAgICBbbV9hdkFzc2V0LmdldCgpIGxvYWRWYWx1ZXNBc3luY2hyb25vdXNseUZvcktleXM6
W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpAInBsYXlhYmxlIiwgQCJ0cmFja3MiLCBuaWxdIGNv
bXBsZXRpb25IYW5kbGVyOl57CkBAIC0xMTU3LDcgKzExNDUsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6YmVnaW5Mb2FkaW5nTWV0YWRhdGEoKQogewotICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmJlZ2luTG9hZGluZ01ldGFkYXRhKCVw
KSAtIHJlcXVlc3RpbmcgbWV0YWRhdGEgbG9hZGluZyIsIHRoaXMpOworICAgIElORk9fTE9HKExP
R0lERU5USUZJRVIpOwogCiAgICAgT1NPYmplY3RQdHI8ZGlzcGF0Y2hfZ3JvdXBfdD4gbWV0YWRh
dGFMb2FkaW5nR3JvdXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2dyb3VwX2NyZWF0ZSgpKTsK
ICAgICBkaXNwYXRjaF9ncm91cF9lbnRlcihtZXRhZGF0YUxvYWRpbmdHcm91cC5nZXQoKSk7CkBA
IC0xMjA2LDcgKzExOTQsNyBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Okl0ZW1T
dGF0CiAKIFBsYXRmb3JtTWVkaWEgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
cGxhdGZvcm1NZWRpYSgpIGNvbnN0CiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1NZWRpYSglcCkiLCB0aGlzKTsKKyAgICBJTkZP
X0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBQbGF0Zm9ybU1lZGlhIHBtOwogICAgIHBtLnR5cGUg
PSBQbGF0Zm9ybU1lZGlhOjpBVkZvdW5kYXRpb25NZWRpYVBsYXllclR5cGU7CiAgICAgcG0ubWVk
aWEuYXZmTWVkaWFQbGF5ZXIgPSBtX2F2UGxheWVyLmdldCgpOwpAQCAtMTMyNCw3ICsxMzEyLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybVBsYXkoKQogewotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3Jt
UGxheSglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBpZiAo
IW1ldGFEYXRhQXZhaWxhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTMzNiw3ICsxMzI0
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtUGF1c2UoKQogewotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3Jt
UGF1c2UoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAgICAgaWYg
KCFtZXRhRGF0YUF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEzNjcsNyArMTM1
NSw3IEBAIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24KICAgICBpZiAo
Q01USU1FX0lTX0lOREVGSU5JVEUoY21EdXJhdGlvbikpCiAgICAgICAgIHJldHVybiBNZWRpYVRp
bWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybUR1cmF0aW9uKCVwKSAtIGludmFsaWQg
ZHVyYXRpb24sIHJldHVybmluZyAlcyIsIHRoaXMsIHRvU3RyaW5nKE1lZGlhVGltZTo6aW52YWxp
ZFRpbWUoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgInJl
dHVybmluZyBpbnZhbGlkIHRpbWUiKTsKICAgICByZXR1cm4gTWVkaWFUaW1lOjppbnZhbGlkVGlt
ZSgpOwogfQogCkBAIC0xNDAxLDggKzEzODksNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6CiAgICAgCiAgICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIo
KTsKIAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OnNlZWtUb1RpbWUoJXApIC0gY2FsbGluZyBzZWVrVG9UaW1lIiwgdGhpcyk7Ci0KICAgICBbbV9h
dlBsYXllckl0ZW0uZ2V0KCkgc2Vla1RvVGltZTpjbVRpbWUgdG9sZXJhbmNlQmVmb3JlOmNtQmVm
b3JlIHRvbGVyYW5jZUFmdGVyOmNtQWZ0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihCT09MIGZpbmlz
aGVkKSB7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzLCBmaW5pc2hlZF0gewog
ICAgICAgICAgICAgYXV0byBfdGhpcyA9IHdlYWtUaGlzLmdldCgpOwpAQCAtMTQzNCw3ICsxNDIw
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlmICht
X211dGVkID09IG11dGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRNdXRlZCglcCkgLSBzZXQgdG8gJXMi
LCB0aGlzLCBib29sU3RyaW5nKG11dGVkKSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwg
Ii0gIiwgbXV0ZWQpOwogCiAgICAgbV9tdXRlZCA9IG11dGVkOwogCkBAIC0xNDUxLDcgKzE0Mzcs
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFt
ZXRhRGF0YUF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2li
bGUoJXApIC0gc2V0IHRvICVzIiwgdGhpcywgYm9vbFN0cmluZyhjbG9zZWRDYXB0aW9uc1Zpc2li
bGUpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAiLSAiLCBjbG9zZWRDYXB0aW9uc1Zp
c2libGUpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNl
dFJhdGVEb3VibGUoZG91YmxlIHJhdGUpCkBAIC0xNTkzLDEwICsxNTc5LDkgQEAgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpBc3NldFN0YQogICAgIGZvciAoTlNTdHJpbmcgKmtleU5h
bWUgaW4gYXNzZXRNZXRhZGF0YUtleU5hbWVzKCkpIHsKICAgICAgICAgTlNFcnJvciAqZXJyb3Ig
PSBuaWw7CiAgICAgICAgIEFWS2V5VmFsdWVTdGF0dXMga2V5U3RhdHVzID0gW21fYXZBc3NldC5n
ZXQoKSBzdGF0dXNPZlZhbHVlRm9yS2V5OmtleU5hbWUgZXJyb3I6JmVycm9yXTsKLSNpZiAhTE9H
X0RJU0FCTEVECisKICAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjphc3NldFN0YXR1cyAtIHN0YXR1c09mVmFs
dWVGb3JLZXkgZmFpbGVkIGZvciAlcywgZXJyb3IgPSAlcyIsIFtrZXlOYW1lIFVURjhTdHJpbmdd
LCBbW2Vycm9yIGxvY2FsaXplZERlc2NyaXB0aW9uXSBVVEY4U3RyaW5nXSk7Ci0jZW5kaWYKKyAg
ICAgICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAiZmFpbGVkIGZvciAiLCBba2V5TmFt
ZSBVVEY4U3RyaW5nXSwgIiwgZXJyb3IgPSAiLCBbW2Vycm9yIGxvY2FsaXplZERlc2NyaXB0aW9u
XSBVVEY4U3RyaW5nXSk7CiAKICAgICAgICAgaWYgKGtleVN0YXR1cyA8IEFWS2V5VmFsdWVTdGF0
dXNMb2FkZWQpCiAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzTG9h
ZGluZzsvLyBBdCBsZWFzdCBvbmUga2V5IGlzIG5vdCBsb2FkZWQgeWV0LgpAQCAtMTY3Niw3ICsx
NjYxLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aEltYWdlR2VuZXJh
dG9yKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50
V2l0aEltYWdlR2VuZXJhdG9yKCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJ
RVIpOwogCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gY3JlYXRlSW1hZ2VGb3JU
aW1lSW5SZWN0KGN1cnJlbnRUaW1lKCksIHJlY3QpOwogICAgIGlmIChpbWFnZSkgewpAQCAtMTY5
NSwyNSArMTY4MCwyMCBAQCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gTWVkaWFQbGF5ZXJQcml2YXRl
CiAgICAgICAgIGNyZWF0ZUltYWdlR2VuZXJhdG9yKCk7CiAgICAgQVNTRVJUKG1faW1hZ2VHZW5l
cmF0b3IpOwogCi0jaWYgIUxPR19ESVNBQkxFRAogICAgIGRvdWJsZSBzdGFydCA9IG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpOwotI2VuZGlmCiAKICAgICBbbV9pbWFnZUdlbmVyYXRvci5n
ZXQoKSBzZXRNYXhpbXVtU2l6ZTpDR1NpemUocmVjdC5zaXplKCkpXTsKICAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gcmF3SW1hZ2UgPSBhZG9wdENGKFttX2ltYWdlR2VuZXJhdG9yLmdldCgpIGNv
cHlDR0ltYWdlQXRUaW1lOkNNVGltZU1ha2VXaXRoU2Vjb25kcyh0aW1lLCA2MDApIGFjdHVhbFRp
bWU6bmlsIGVycm9yOm5pbF0pOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFk
b3B0Q0YoQ0dJbWFnZUNyZWF0ZUNvcHlXaXRoQ29sb3JTcGFjZShyYXdJbWFnZS5nZXQoKSwgc1JH
QkNvbG9yU3BhY2VSZWYoKSkpOwogCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIGRvdWJsZSBkdXJh
dGlvbiA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gc3RhcnQ7Ci0gICAgTE9HKE1l
ZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlSW1hZ2VGb3JU
aW1lSW5SZWN0KCVwKSAtIGNyZWF0aW5nIGltYWdlIHRvb2sgJS40ZiIsIHRoaXMsIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoZHVyYXRpb24pKTsKLSNlbmRpZgorICAgIGlmIChsb2dnZXIoKS53aWxs
TG9nKGxvZ0NoYW5uZWwoKSwgV1RGTG9nTGV2ZWxJbmZvKSkKKyAgICAgICAgREVCVUdfTE9HKExP
R0lERU5USUZJRVIsICJjcmVhdGluZyBpbWFnZSB0b29rICIsIG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpIC0gc3RhcnQpOwogCiAgICAgcmV0dXJuIGltYWdlOwogfQogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8
U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBzdXBwb3J0ZWRUeXBlcykKIHsKLSAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpnZXRTdXBw
b3J0ZWRUeXBlcyIpOwogICAgIHN1cHBvcnRlZFR5cGVzID0gQVZGb3VuZGF0aW9uTUlNRVR5cGVD
YWNoZTo6c2luZ2xldG9uKCkudHlwZXMoKTsKIH0gCiAKQEAgLTIwNDIsOCArMjAyMiw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogICAgIHNldEhhc0Nsb3Nl
ZENhcHRpb25zKGhhc0NhcHRpb25zKTsKIAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjp0cmFja3NDaGFuZ2VkKCVwKSAtIGhhc1ZpZGVvID0gJXMsIGhhc0F1
ZGlvID0gJXMsIGhhc0NhcHRpb25zID0gJXMiLAotICAgICAgICB0aGlzLCBib29sU3RyaW5nKGhh
c1ZpZGVvKCkpLCBib29sU3RyaW5nKGhhc0F1ZGlvKCkpLCBib29sU3RyaW5nKGhhc0Nsb3NlZENh
cHRpb25zKCkpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAiaGFzIHZpZGVvID0gIiwg
aGFzVmlkZW8oKSwgIiwgaGFzIGF1ZGlvID0gIiwgaGFzQXVkaW8oKSwgIiwgaGFzIGNhcHRpb25z
ID0gIiwgaGFzQ2xvc2VkQ2FwdGlvbnMoKSk7CiAKICAgICBzaXplQ2hhbmdlZCgpOwogCkBAIC0y
MTcwLDkgKzIxNDksNyBAQCB2b2lkIGRldGVybWluZUNoYW5nZWRUcmFja3NGcm9tTmV3VHJhY2tz
CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlQXVkaW9U
cmFja3MoKQogewotI2lmICFMT0dfRElTQUJMRUQKICAgICBzaXplX3QgY291bnQgPSBtX2F1ZGlv
VHJhY2tzLnNpemUoKTsKLSNlbmRpZgogCiAjaWYgSEFWRShBVkZPVU5EQVRJT05fTUVESUFfU0VM
RUNUSU9OX0dST1VQKQogICAgIFZlY3RvcjxTdHJpbmc+IGNoYXJhY3RlcmlzdGljcyA9IHBsYXll
cigpLT5wcmVmZXJyZWRBdWRpb0NoYXJhY3RlcmlzdGljcygpOwpAQCAtMjE5MCwxNiArMjE2Nywx
MiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgZm9yIChh
dXRvJiB0cmFjayA6IG1fYXVkaW9UcmFja3MpCiAgICAgICAgIHRyYWNrLT5yZXNldFByb3BlcnRp
ZXNGcm9tVHJhY2soKTsKIAotI2lmICFMT0dfRElTQUJMRUQKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRhdGVBdWRpb1RyYWNrcyglcCkgLSBh
dWRpbyB0cmFjayBjb3VudCB3YXMgJWx1LCBpcyAlbHUiLCB0aGlzLCBjb3VudCwgbV9hdWRpb1Ry
YWNrcy5zaXplKCkpOwotI2VuZGlmCisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgInRyYWNr
IGNvdW50IHdhcyAiLCBjb3VudCwgIiwgaXMgIiwgbV9hdWRpb1RyYWNrcy5zaXplKCkpOwogfQog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0ZVZpZGVvVHJh
Y2tzKCkKIHsKLSNpZiAhTE9HX0RJU0FCTEVECiAgICAgc2l6ZV90IGNvdW50ID0gbV92aWRlb1Ry
YWNrcy5zaXplKCk7Ci0jZW5kaWYKIAogICAgIGRldGVybWluZUNoYW5nZWRUcmFja3NGcm9tTmV3
VHJhY2tzQW5kT2xkSXRlbXMobV9jYWNoZWRUcmFja3MuZ2V0KCksIEFWTWVkaWFUeXBlVmlkZW8s
IG1fdmlkZW9UcmFja3MsICZWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZSwgcGxheWVy
KCksICZNZWRpYVBsYXllcjo6cmVtb3ZlVmlkZW9UcmFjaywgJk1lZGlhUGxheWVyOjphZGRWaWRl
b1RyYWNrKTsKIApAQCAtMjIxNiw5ICsyMTg5LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOgogICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2F1ZGlvVHJhY2tzKQog
ICAgICAgICB0cmFjay0+cmVzZXRQcm9wZXJ0aWVzRnJvbVRyYWNrKCk7CiAKLSNpZiAhTE9HX0RJ
U0FCTEVECi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6dXBkYXRlVmlkZW9UcmFja3MoJXApIC0gdmlkZW8gdHJhY2sgY291bnQgd2FzICVsdSwgaXMg
JWx1IiwgdGhpcywgY291bnQsIG1fdmlkZW9UcmFja3Muc2l6ZSgpKTsKLSNlbmRpZgorICAgIElO
Rk9fTE9HKExPR0lERU5USUZJRVIsICJ0cmFjayBjb3VudCB3YXMgIiwgY291bnQsICIsIGlzICIs
IG1fdmlkZW9UcmFja3Muc2l6ZSgpKTsKIH0KIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3QKQEAg
LTIzMTgsNyArMjI4OSw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
QzoKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVWaWRl
b091dHB1dCgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6Y3JlYXRlVmlkZW9PdXRwdXQoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9H
SURFTlRJRklFUik7CiAKICAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtIHx8IG1fdmlkZW9PdXRwdXQp
CiAgICAgICAgIHJldHVybjsKQEAgLTIzMzQsOCArMjMwNSw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBbbV92aWRlb091dHB1dCBzZXREZWxlZ2F0ZTpt
X3ZpZGVvT3V0cHV0RGVsZWdhdGUuZ2V0KCkgcXVldWU6Z2xvYmFsUHVsbERlbGVnYXRlUXVldWUo
KV07CiAKICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT3V0cHV0Om1fdmlkZW9PdXRwdXQu
Z2V0KCldOwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzo6Y3JlYXRlVmlkZW9PdXRwdXQoJXApIC0gcmV0dXJuaW5nICVwIiwgdGhpcywgbV92aWRl
b091dHB1dC5nZXQoKSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzo6ZGVzdHJveVZpZGVvT3V0cHV0KCkKQEAgLTIzNDUsNyArMjMxNCw4IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogICAgIGlmIChtX2F2UGxheWVySXRl
bSkKICAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIHJlbW92ZU91dHB1dDptX3ZpZGVvT3V0
cHV0LmdldCgpXTsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpkZXN0cm95VmlkZW9PdXRwdXQoJXApIC0gZGVzdHJveWluZyAgJXAiLCB0aGlzLCBt
X3ZpZGVvT3V0cHV0LmdldCgpKTsKKworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAg
ICAgbV92aWRlb091dHB1dCA9IDA7CiB9CkBAIC0yMzk3LDE2ICsyMzY3LDEwIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgbV9waXhlbEJ1ZmZlckNv
bmZvcm1lciA9IHN0ZDo6bWFrZV91bmlxdWU8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4oKENGRGlj
dGlvbmFyeVJlZilhdHRyaWJ1dGVzKTsKICAgICB9CiAKLSNpZiAhTE9HX0RJU0FCTEVECiAgICAg
ZG91YmxlIHN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0jZW5kaWYKLQog
ICAgIG1fbGFzdEltYWdlID0gbV9waXhlbEJ1ZmZlckNvbmZvcm1lci0+Y3JlYXRlSW1hZ2VGcm9t
UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZ2V0KCkpOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAg
IGRvdWJsZSBkdXJhdGlvbiA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gc3RhcnQ7
Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBk
YXRlTGFzdEltYWdlKCVwKSAtIGNyZWF0aW5nIGJ1ZmZlciB0b29rICUuNGYiLCB0aGlzLCBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGR1cmF0aW9uKSk7Ci0jZW5kaWYKKyAgICBpZiAobG9nZ2VyKCku
d2lsbExvZyhsb2dDaGFubmVsKCksIFdURkxvZ0xldmVsSW5mbykpCisgICAgICAgIERFQlVHX0xP
RyhMT0dJREVOVElGSUVSLCAiY3JlYXRpbmcgYnVmZmVyIHRvb2sgIiwgbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCkgLSBzdGFydCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6cGFpbnRXaXRoVmlkZW9PdXRwdXQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIG91dHB1dFJlY3QpCkBAIC0yNDIzLDcgKzIzODcsNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFmaXJzdEVu
YWJsZWRWaWRlb1RyYWNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludFdpdGhWaWRlb091dHB1dCglcCki
LCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKIAogICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBGbG9hdFJlY3QgaW1hZ2VS
ZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChtX2xhc3RJbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRI
ZWlnaHQobV9sYXN0SW1hZ2UuZ2V0KCkpKTsKQEAgLTI0NDIsNyArMjQwNiw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVPcGVuR0xWaWRlb091dHB1dCgpCiB7Ci0gICAgTE9H
KE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlT3BlbkdM
VmlkZW9PdXRwdXQoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAK
ICAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtIHx8IG1fb3BlbkdMVmlkZW9PdXRwdXQpCiAgICAgICAg
IHJldHVybjsKQEAgLTI0NTYsOCArMjQyMCw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzoKICAgICBBU1NFUlQobV9vcGVuR0xWaWRlb091dHB1dCk7CiAKICAgICBb
bV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT3V0cHV0Om1fb3BlbkdMVmlkZW9PdXRwdXQuZ2V0KCld
OwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y3JlYXRlT3BlbkdMVmlkZW9PdXRwdXQoJXApIC0gcmV0dXJuaW5nICVwIiwgdGhpcywgbV9vcGVu
R0xWaWRlb091dHB1dC5nZXQoKSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6ZGVzdHJveU9wZW5HTFZpZGVvT3V0cHV0KCkKQEAgLTI0NjUsOSArMjQyNywx
MCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFt
X29wZW5HTFZpZGVvT3V0cHV0KQogICAgICAgICByZXR1cm47CiAKKyAgICBJTkZPX0xPRyhMT0dJ
REVOVElGSUVSKTsKKwogICAgIGlmIChtX2F2UGxheWVySXRlbSkKICAgICAgICAgW21fYXZQbGF5
ZXJJdGVtLmdldCgpIHJlbW92ZU91dHB1dDptX29wZW5HTFZpZGVvT3V0cHV0LmdldCgpXTsKLSAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95
T3BlbkdMVmlkZW9PdXRwdXQoJXApIC0gZGVzdHJveWluZyAgJXAiLCB0aGlzLCBtX3ZpZGVvT3V0
cHV0LmdldCgpKTsKIAogICAgIG1fb3BlbkdMVmlkZW9PdXRwdXQgPSAwOwogfQpAQCAtMjUzMyw3
ICsyNDk2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAg
IGxvbmcgcmVzdWx0ID0gZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQobV92aWRlb091dHB1dFNlbWFw
aG9yZSwgZGlzcGF0Y2hfdGltZSgwLCAxICogTlNFQ19QRVJfU0VDKSk7CiAKICAgICBpZiAocmVz
dWx0KQotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjp3YWl0Rm9yVmlkZW9PdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlKCVwKSB0aW1lZCBvdXQi
LCB0aGlzKTsKKyAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJ0aW1lZCBvdXQiKTsK
IH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpvdXRwdXRNZWRp
YURhdGFXaWxsQ2hhbmdlKEFWUGxheWVySXRlbVZpZGVvT3V0cHV0VHlwZSAqKQpAQCAtMjY4NCw3
ICsyNjQ3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogewog
ICAgIEFWTWVkaWFTZWxlY3Rpb25Hcm91cFR5cGUgKmxlZ2libGVHcm91cCA9IHNhZmVNZWRpYVNl
bGVjdGlvbkdyb3VwRm9yTGVnaWJsZU1lZGlhKCk7CiAgICAgaWYgKCFsZWdpYmxlR3JvdXApIHsK
LSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
cHJvY2Vzc01lZGlhU2VsZWN0aW9uT3B0aW9ucyglcCkgLSBuaWwgbWVkaWFTZWxlY3Rpb25Hcm91
cCIsIHRoaXMpOworICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAibm8gbWVkaWFTZWxl
Y3Rpb25Hcm91cCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNzU4LDcgKzI3MjEs
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Zmx1c2hDdWVzKCkKIHsKLSAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpmbHVzaEN1ZXMoJXAp
IiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAKICAgICBpZiAoIW1fY3Vy
cmVudFRleHRUcmFjaykKICAgICAgICAgcmV0dXJuOwpAQCAtMjc3Myw4ICsyNzM2LDggQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlmIChtX2N1cnJlbnRU
ZXh0VHJhY2sgPT0gdHJhY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldEN1cnJlbnRUZXh0VHJhY2soJXAp
IC0gc2VsZWN0aW5nIHRyYWNrICVwLCBsYW5ndWFnZSA9ICVzIiwgdGhpcywgdHJhY2ssIHRyYWNr
ID8gdHJhY2stPmxhbmd1YWdlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKLSAgICAg
ICAgCisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgInNlbGVjdGluZyB0cmFjayB3aXRoIGxh
bmd1YWdlICIsIHRyYWNrID8gdHJhY2stPmxhbmd1YWdlKCkgOiAiIik7CisKICAgICBtX2N1cnJl
bnRUZXh0VHJhY2sgPSB0cmFjazsKIAogICAgIGlmICh0cmFjaykgewpAQCAtMjgyMCw3ICsyNzgz
LDcgQEAgU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iagogI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHBvcAogICAgIGlmIChjdXJyZW50bHlTZWxlY3RlZEF1ZGlibGVPcHRp
b24pIHsKICAgICAgICAgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2sgPSBbW2N1cnJlbnRs
eVNlbGVjdGVkQXVkaWJsZU9wdGlvbiBsb2NhbGVdIGxvY2FsZUlkZW50aWZpZXJdOwotICAgICAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpsYW5ndWFn
ZU9mUHJpbWFyeUF1ZGlvVHJhY2soJXApIC0gcmV0dXJuaW5nIGxhbmd1YWdlIG9mIHNlbGVjdGVk
IGF1ZGlibGUgb3B0aW9uOiAlcyIsIHRoaXMsIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNr
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAibGFuZ3Vh
Z2Ugb2Ygc2VsZWN0ZWQgYXVkaWJsZSBvcHRpb24gIiwgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlv
VHJhY2spOwogCiAgICAgICAgIHJldHVybiBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjazsK
ICAgICB9CkBAIC0yODMxLDE5ICsyNzk0LDE5IEBAIFN0cmluZyBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmoKICAgICBOU0FycmF5ICp0cmFja3MgPSBbbV9hdkFzc2V0LmdldCgpIHRy
YWNrc1dpdGhNZWRpYVR5cGU6QVZNZWRpYVR5cGVBdWRpb107CiAgICAgaWYgKCF0cmFja3MgfHwg
W3RyYWNrcyBjb3VudF0gIT0gMSkgewogICAgICAgICBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9U
cmFjayA9IGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6Omxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayglcCkgLSAl
bHUgYXVkaW8gdHJhY2tzLCByZXR1cm5pbmcgZW1wdHlTdHJpbmcoKSIsIHRoaXMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KHRyYWNrcyA/IFt0cmFja3MgY291bnRdIDogMCkpOworICAgICAg
ICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCB0cmFja3MgPyBbdHJhY2tzIGNvdW50XSA6IDAsICIg
YXVkaW8gdHJhY2tzLCByZXR1cm5pbmcgZW1wdHkiKTsKICAgICAgICAgcmV0dXJuIG1fbGFuZ3Vh
Z2VPZlByaW1hcnlBdWRpb1RyYWNrOwogICAgIH0KIAogICAgIEFWQXNzZXRUcmFjayAqdHJhY2sg
PSBbdHJhY2tzIG9iamVjdEF0SW5kZXg6MF07CiAgICAgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlv
VHJhY2sgPSBBVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsOjpsYW5ndWFnZUZvckFWQXNzZXRUcmFj
ayh0cmFjayk7CiAKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgaWYgKG1fbGFuZ3VhZ2VPZlByaW1h
cnlBdWRpb1RyYWNrID09IGVtcHR5U3RyaW5nKCkpCi0gICAgICAgIExPRyhNZWRpYSwgIk1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFj
ayglcCkgLSBzaW5nbGUgYXVkaW8gdHJhY2sgaGFzIG5vIGxhbmd1YWdlLCByZXR1cm5pbmcgZW1w
dHlTdHJpbmcoKSIsIHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNr
KCVwKSAtIHJldHVybmluZyBsYW5ndWFnZSBvZiBzaW5nbGUgYXVkaW8gdHJhY2s6ICVzIiwgdGhp
cywgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2sudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYK
KyAgICBpZiAobG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIFdURkxvZ0xldmVsSW5mbykp
IHsKKyAgICAgICAgaWYgKG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrID09IGVtcHR5U3Ry
aW5nKCkpCisgICAgICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAic2luZ2xlIGF1ZGlv
IHRyYWNrIGhhcyBubyBsYW5ndWFnZSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBJTkZP
X0xPRyhMT0dJREVOVElGSUVSLCAic2luZ2xlIGF1ZGlvIHRyYWNrIGhhcyBsYW5ndWFnZSAiLCBt
X2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayk7CisgICAgfQogCiAgICAgcmV0dXJuIG1fbGFu
Z3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrOwogfQpAQCAtMjg2NCw3ICsyODI3LDcgQEAgYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIHdpcmVsZXNzVGFyZ2V0ID0g
bV9hdlBsYXllciAmJiBtX2F2UGxheWVyLmdldCgpLmV4dGVybmFsUGxheWJhY2tBY3RpdmU7CiAj
ZW5kaWYKIAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3MoJXApIC0gcmV0dXJuaW5nICVzIiwg
dGhpcywgYm9vbFN0cmluZyh3aXJlbGVzc1RhcmdldCkpOworICAgIElORk9fTE9HKExPR0lERU5U
SUZJRVIsICItICIsIHdpcmVsZXNzVGFyZ2V0KTsKIAogICAgIHJldHVybiB3aXJlbGVzc1Rhcmdl
dDsKIH0KQEAgLTI5MDQsNyArMjg2Nyw2IEBAIFN0cmluZyBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmoKICNlbHNlCiAgICAgd2lyZWxlc3NUYXJnZXROYW1lID0gd2tFeGVybmFsRGV2
aWNlRGlzcGxheU5hbWVGb3JQbGF5ZXIobV9hdlBsYXllci5nZXQoKSk7CiAjZW5kaWYKLSAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp3aXJlbGVzc1Bs
YXliYWNrVGFyZ2V0TmFtZSglcCkgLSByZXR1cm5pbmcgJXMiLCB0aGlzLCB3aXJlbGVzc1Rhcmdl
dE5hbWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICByZXR1cm4gd2lyZWxlc3NUYXJnZXROYW1lOwog
fQpAQCAtMjkxNSwxNCArMjg3NywxNCBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6CiAgICAgICAgIHJldHVybiAhbV9hbGxvd3NXaXJlbGVzc1ZpZGVvUGxheWJhY2s7
CiAKICAgICBtX2FsbG93c1dpcmVsZXNzVmlkZW9QbGF5YmFjayA9IFttX2F2UGxheWVyLmdldCgp
IGFsbG93c0V4dGVybmFsUGxheWJhY2tdOwotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCVwKSAt
IHJldHVybmluZyAlcyIsIHRoaXMsIGJvb2xTdHJpbmcoIW1fYWxsb3dzV2lyZWxlc3NWaWRlb1Bs
YXliYWNrKSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIi0gIiwgIW1fYWxsb3dzV2ly
ZWxlc3NWaWRlb1BsYXliYWNrKTsKIAogICAgIHJldHVybiAhbV9hbGxvd3NXaXJlbGVzc1ZpZGVv
UGxheWJhY2s7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKIHsKLSAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRXaXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZCglcCkgLSAlcyIsIHRoaXMsIGJvb2xTdHJpbmcoZGlzYWJs
ZWQpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAiLSAiLCBkaXNhYmxlZCk7CiAgICAg
bV9hbGxvd3NXaXJlbGVzc1ZpZGVvUGxheWJhY2sgPSAhZGlzYWJsZWQ7CiAgICAgaWYgKCFtX2F2
UGxheWVyKQogICAgICAgICByZXR1cm47CkBAIC0yOTQwLDcgKzI5MDIsNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKICAgICBtX291dHB1dENvbnRleHQgPSBt
X3BsYXliYWNrVGFyZ2V0LT50YXJnZXRUeXBlKCkgPT0gTWVkaWFQbGF5YmFja1RhcmdldDo6QVZG
b3VuZGF0aW9uID8gdG9NZWRpYVBsYXliYWNrVGFyZ2V0TWFjKG1fcGxheWJhY2tUYXJnZXQuZ2V0
KCkpLT5vdXRwdXRDb250ZXh0KCkgOiBudWxscHRyOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldCgl
cCkgLSB0YXJnZXQgPSAlcCwgZGV2aWNlIG5hbWUgPSAlcyIsIHRoaXMsIG1fb3V0cHV0Q29udGV4
dC5nZXQoKSwgbV9wbGF5YmFja1RhcmdldC0+ZGV2aWNlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgaWYgKCFtX3BsYXliYWNrVGFyZ2V0
LT5oYXNBY3RpdmVSb3V0ZSgpKQogICAgICAgICBzZXRTaG91bGRQbGF5VG9QbGF5YmFja1Rhcmdl
dChmYWxzZSk7CkBAIC0yOTU2LDExICsyOTE4LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzoKICAgICBpZiAoIW1fcGxheWJhY2tUYXJnZXQpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIsIHNob3VsZFBsYXkpOwor
CiAgICAgaWYgKG1fcGxheWJhY2tUYXJnZXQtPnRhcmdldFR5cGUoKSA9PSBNZWRpYVBsYXliYWNr
VGFyZ2V0OjpBVkZvdW5kYXRpb24pIHsKICAgICAgICAgQVZPdXRwdXRDb250ZXh0ICpuZXdDb250
ZXh0ID0gc2hvdWxkUGxheSA/IG1fb3V0cHV0Q29udGV4dC5nZXQoKSA6IG5pbDsKIAotICAgICAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRTaG91
bGRQbGF5VG9QbGF5YmFja1RhcmdldCglcCkgLSB0YXJnZXQgPSAlcCwgc2hvdWxkUGxheSA9ICVz
IiwgdGhpcywgbmV3Q29udGV4dCwgYm9vbFN0cmluZyhzaG91bGRQbGF5KSk7Ci0KICAgICAgICAg
aWYgKCFtX2F2UGxheWVyKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0yOTc3LDggKzI5Mzks
NiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKICAgICBBU1NF
UlQobV9wbGF5YmFja1RhcmdldC0+dGFyZ2V0VHlwZSgpID09IE1lZGlhUGxheWJhY2tUYXJnZXQ6
Ok1vY2spOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoJXApIC0gdGFyZ2V0ID0ge01vY2t9
LCBzaG91bGRQbGF5ID0gJXMiLCB0aGlzLCBib29sU3RyaW5nKHNob3VsZFBsYXkpKTsKLQogICAg
IHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwogICAgIGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFr
UHRyKCk7CiAgICAgc2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uKFt3ZWFrVGhpc10gewpAQCAtMzA4NCw3ICsz
MDQ0LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFNob3VsZEJ1ZmZlckRhdGEo
Ym9vbCBzaG91bGRCdWZmZXIpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6c2hvdWxkQnVmZmVyRGF0YSglcCkgLSAlcyIsIHRoaXMsIGJvb2xT
dHJpbmcoc2hvdWxkQnVmZmVyKSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIi0gIiwg
c2hvdWxkQnVmZmVyKTsKKwogICAgIGlmIChtX3Nob3VsZEJ1ZmZlckRhdGEgPT0gc2hvdWxkQnVm
ZmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTMxMjYsNyArMzA4Nyw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIHsKICAgICBtX2N1cnJlbnRNZXRhRGF0YSA9
IG1ldGFkYXRhICYmICFbbWV0YWRhdGEgaXNLaW5kT2ZDbGFzczpbTlNOdWxsIGNsYXNzXV0gPyBt
ZXRhZGF0YSA6IG5pbDsKIAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6Om1ldGFkYXRhRGlkQXJyaXZlKCVwKSAtIGFkZGluZyAlaSBjdWVzIGF0IHRp
bWUgJXMiLCB0aGlzLCBtX2N1cnJlbnRNZXRhRGF0YSA/IHN0YXRpY19jYXN0PGludD4oW21fY3Vy
cmVudE1ldGFEYXRhLmdldCgpIGNvdW50XSkgOiAwLCB0b1N0cmluZyhtZWRpYVRpbWUpLnV0Zjgo
KS5kYXRhKCkpOworICAgIERFQlVHX0xPRyhMT0dJREVOVElGSUVSLCAiYWRkaW5nICIsIG1fY3Vy
cmVudE1ldGFEYXRhID8gW21fY3VycmVudE1ldGFEYXRhLmdldCgpIGNvdW50XSA6IDAsICIgYXQg
dGltZSAiLCBtZWRpYVRpbWUpOwogCiAjaWYgRU5BQkxFKERBVEFDVUVfVkFMVUUpCiAgICAgaWYg
KHNlZWtpbmcoKSkKQEAgLTMzNjksMTYgKzMzMzAsNyBAQCAtICh2b2lkKW9ic2VydmVWYWx1ZUZv
cktleVBhdGg6a2V5UGF0aCBvCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgd2lsbENoYW5n
ZSA9IFtbY2hhbmdlIHZhbHVlRm9yS2V5Ok5TS2V5VmFsdWVDaGFuZ2VOb3RpZmljYXRpb25Jc1By
aW9yS2V5XSBib29sVmFsdWVdOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIGlmICh3aWxsQ2hh
bmdlKQotICAgICAgICBMT0coTWVkaWEsICJXZWJDb3JlQVZGTW92aWVPYnNlcnZlcjo6b2JzZXJ2
ZVZhbHVlRm9yS2V5UGF0aCglcCkgLSB3aWxsIGNoYW5nZSwga2V5UGF0aCA9ICVzIiwgc2VsZiwg
W2tleVBhdGggVVRGOFN0cmluZ10pOwotICAgIGVsc2UgewotICAgICAgICBSZXRhaW5QdHI8TlNT
dHJpbmc+IHZhbHVlU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aEZv
cm1hdDpAIiVAIiwgbmV3VmFsdWVdKTsKLSAgICAgICAgTE9HKE1lZGlhLCAiV2ViQ29yZUFWRk1v
dmllT2JzZXJ2ZXI6Om9ic2VydmVWYWx1ZUZvcktleVBhdGgoJXApIC0gZGlkIGNoYW5nZSwga2V5
UGF0aCA9ICVzLCB2YWx1ZSA9ICVzIiwgc2VsZiwgW2tleVBhdGggVVRGOFN0cmluZ10sIFt2YWx1
ZVN0cmluZy5nZXQoKSBVVEY4U3RyaW5nXSk7Ci0gICAgfQotI2VuZGlmCi0KKyAgICBib29sIHNo
b3VsZExvZ1ZhbHVlID0gdHJ1ZTsKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9u
OwogCiAgICAgaWYgKGNvbnRleHQgPT0gTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlv
bkNvbnRleHRBVlBsYXllckxheWVyKSB7CkBAIC0zNDEwLDE1ICszMzYyLDE5IEBAIC0gKHZvaWQp
b2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG8KICAgICAgICAgICAgIGZ1bmN0aW9uID0g
c3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF5YmFja0J1
ZmZlckVtcHR5RGlkQ2hhbmdlLCBtX2NhbGxiYWNrLCBbbmV3VmFsdWUgYm9vbFZhbHVlXSk7CiAg
ICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInBsYXliYWNrQnVmZmVy
RnVsbCJdKQogICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXliYWNrQnVmZmVyRnVsbERpZENoYW5nZSwgbV9jYWxs
YmFjaywgW25ld1ZhbHVlIGJvb2xWYWx1ZV0pOwotICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBp
c0VxdWFsVG9TdHJpbmc6QCJhc3NldCJdKQorICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0Vx
dWFsVG9TdHJpbmc6QCJhc3NldCJdKSB7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6Ymlu
ZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0QXNzZXQsIG1fY2FsbGJh
Y2ssIFJldGFpblB0cjxpZD4obmV3VmFsdWUpKTsKLSAgICAgICAgZWxzZSBpZiAoW2tleVBhdGgg
aXNFcXVhbFRvU3RyaW5nOkAibG9hZGVkVGltZVJhbmdlcyJdKQorICAgICAgICAgICAgc2hvdWxk
TG9nVmFsdWUgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9T
dHJpbmc6QCJsb2FkZWRUaW1lUmFuZ2VzIl0pIHsKICAgICAgICAgICAgIGZ1bmN0aW9uID0gc3Rk
OjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpsb2FkZWRUaW1lUmFu
Z2VzRGlkQ2hhbmdlLCBtX2NhbGxiYWNrLCBSZXRhaW5QdHI8TlNBcnJheT4obmV3VmFsdWUpKTsK
LSAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAic2Vla2FibGVUaW1l
UmFuZ2VzIl0pCisgICAgICAgICAgICBzaG91bGRMb2dWYWx1ZSA9IGZhbHNlOworICAgICAgICB9
IGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInNlZWthYmxlVGltZVJhbmdlcyJd
KSB7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6c2Vla2FibGVUaW1lUmFuZ2VzRGlkQ2hhbmdlLCBtX2NhbGxiYWNr
LCBSZXRhaW5QdHI8TlNBcnJheT4obmV3VmFsdWUpKTsKLSAgICAgICAgZWxzZSBpZiAoW2tleVBh
dGggaXNFcXVhbFRvU3RyaW5nOkAidHJhY2tzIl0pCisgICAgICAgICAgICBzaG91bGRMb2dWYWx1
ZSA9IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpA
InRyYWNrcyJdKSB7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6YmluZCgmTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dHJhY2tzRGlkQ2hhbmdlLCBtX2NhbGxiYWNrLCBS
ZXRhaW5QdHI8TlNBcnJheT4obmV3VmFsdWUpKTsKLSAgICAgICAgZWxzZSBpZiAoW2tleVBhdGgg
aXNFcXVhbFRvU3RyaW5nOkAiaGFzRW5hYmxlZEF1ZGlvIl0pCisgICAgICAgICAgICBzaG91bGRM
b2dWYWx1ZSA9IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0
cmluZzpAImhhc0VuYWJsZWRBdWRpbyJdKQogICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJp
bmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omhhc0VuYWJsZWRBdWRpb0Rp
ZENoYW5nZSwgbV9jYWxsYmFjaywgW25ld1ZhbHVlIGJvb2xWYWx1ZV0pOwogICAgICAgICBlbHNl
IGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJwcmVzZW50YXRpb25TaXplIl0pCiAgICAg
ICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6cHJlc2VudGF0aW9uU2l6ZURpZENoYW5nZSwgbV9jYWxsYmFjaywgRmxvYXRTaXpl
KFtuZXdWYWx1ZSBzaXplVmFsdWVdKSk7CkBAIC0zNDMwLDYgKzMzODYsNyBAQCAtICh2b2lkKW9i
c2VydmVWYWx1ZUZvcktleVBhdGg6a2V5UGF0aCBvCiAgICAgICAgICAgICBpZiAoQ01USU1FX0lT
X05VTUVSSUMoaXRlbVRpbWUpKQogICAgICAgICAgICAgICAgIG5vdyA9IHN0ZDo6bWF4KHRvTWVk
aWFUaW1lKGl0ZW1UaW1lKSwgTWVkaWFUaW1lOjp6ZXJvVGltZSgpKTsKICAgICAgICAgICAgIGZ1
bmN0aW9uID0gc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpt
ZXRhZGF0YURpZEFycml2ZSwgbV9jYWxsYmFjaywgUmV0YWluUHRyPE5TQXJyYXk+KG5ld1ZhbHVl
KSwgbm93KTsKKyAgICAgICAgICAgIHNob3VsZExvZ1ZhbHVlID0gZmFsc2U7CiAgICAgICAgIH0g
ZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAiY2FuUGxheUZhc3RSZXZlcnNlIl0p
CiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6Y2FuUGxheUZhc3RSZXZlcnNlRGlkQ2hhbmdlLCBtX2NhbGxiYWNrLCBb
bmV3VmFsdWUgYm9vbFZhbHVlXSk7CiAgICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxU
b1N0cmluZzpAImNhblBsYXlGYXN0Rm9yd2FyZCJdKQpAQCAtMzQ0OSw3ICszNDA2LDI0IEBAIC0g
KHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG8KICAgICAgICAgICAgIGZ1bmN0
aW9uID0gc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpvdXRw
dXRPYnNjdXJlZER1ZVRvSW5zdWZmaWNpZW50RXh0ZXJuYWxQcm90ZWN0aW9uQ2hhbmdlZCwgbV9j
YWxsYmFjaywgW25ld1ZhbHVlIGJvb2xWYWx1ZV0pOwogI2VuZGlmCiAgICAgfQotICAgIAorCisg
ICAgaWYgKG1fY2FsbGJhY2stPmxvZ2dlcigpLndpbGxMb2cobV9jYWxsYmFjay0+bG9nQ2hhbm5l
bCgpLCBXVEZMb2dMZXZlbERlYnVnKSkgeworCisgICAgICAgIGlmICh3aWxsQ2hhbmdlKQorICAg
ICAgICAgICAgbV9jYWxsYmFjay0+bG9nZ2VyKCkuZGVidWcobV9jYWxsYmFjay0+bG9nQ2hhbm5l
bCgpLCBQQUw6OkxvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIoIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbiIsICJvYnNlcnZlVmFsdWVGb3JLZXlQYXRoIiwgbV9jYWxsYmFjay0+bG9nSWRl
bnRpZmllcigpKSwgIndpbGwgY2hhbmdlICciLCBba2V5UGF0aCBVVEY4U3RyaW5nXSwgIiciKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkTG9nVmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAiZHVyYXRpb24iXSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9jYWxsYmFjay0+bG9nZ2VyKCkuZGVidWcobV9jYWxsYmFjay0+
bG9nQ2hhbm5lbCgpLCBQQUw6OkxvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIoIk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbiIsICJvYnNlcnZlVmFsdWVGb3JLZXlQYXRoIiwgbV9jYWxsYmFj
ay0+bG9nSWRlbnRpZmllcigpKSwgImRpZCBjaGFuZ2UgJyIsIFtrZXlQYXRoIFVURjhTdHJpbmdd
LCAiJyB0byAiLCB0b01lZGlhVGltZShbbmV3VmFsdWUgQ01UaW1lVmFsdWVdKSk7CisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4g
dmFsdWVTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRm9ybWF0OkAi
JUAiLCBuZXdWYWx1ZV0pOworICAgICAgICAgICAgICAgICAgICBtX2NhbGxiYWNrLT5sb2dnZXIo
KS5kZWJ1ZyhtX2NhbGxiYWNrLT5sb2dDaGFubmVsKCksIFBBTDo6TG9nZ2VyOjpMb2dTaXRlSWRl
bnRpZmllcigiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIiwgIm9ic2VydmVWYWx1ZUZv
cktleVBhdGgiLCBtX2NhbGxiYWNrLT5sb2dJZGVudGlmaWVyKCkpLCAiZGlkIGNoYW5nZSAnIiwg
W2tleVBhdGggVVRGOFN0cmluZ10sICInIHRvICIsIFt2YWx1ZVN0cmluZy5nZXQoKSBVVEY4U3Ry
aW5nXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgbV9jYWxsYmFjay0+bG9nZ2VyKCkuZGVidWcobV9jYWxsYmFjay0+bG9nQ2hhbm5lbCgp
LCBQQUw6OkxvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIoIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbiIsICJvYnNlcnZlVmFsdWVGb3JLZXlQYXRoIiwgbV9jYWxsYmFjay0+bG9nSWRlbnRp
ZmllcigpKSwgImRpZCBjaGFuZ2UgJyIsIFtrZXlQYXRoIFVURjhTdHJpbmddLCAiJyIpOworICAg
ICAgICB9CisgICAgfQorCiAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgcmV0dXJuOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320412</attachid>
            <date>2017-09-10 18:55:15 -0700</date>
            <delta_ts>2017-09-11 08:50:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>avfoundation_logging_patch_3.txt</filename>
            <type>text/plain</type>
            <size>59309</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisyMDE3LTA5LTEwICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN3aXRjaCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24gdG8gcmVsZWFzZSBsb2dnaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2MjEKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzM0MzM1MzExPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bnVsbExvZ2dl
cik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bWVkaWFQbGF5ZXJMb2dnZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyQ2xpZW50OjptZWRpYVBsYXllckxvZ2dlcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6fk1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnNldFVwVmlkZW9SZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp0ZWFyRG93blZpZGVvUmVuZGVyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXlhYmlsaXR5
S25vd24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjpwcmVwYXJlVG9QbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6ZHVyYXRpb25NZWRpYVRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWVrV2l0aFRvbGVyYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldE5hdHVy
YWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6bWF4TWVkaWFUaW1lU2Vla2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptaW5NZWRpYVRpbWVTZWVrYWJsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnVwZGF0ZVN0
YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6dGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpzZWVrQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6aW52YWxpZGF0ZUNhY2hlZER1cmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0UHJlbG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1h
aW5UaHJlYWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246OnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmRpc3BhdGNoTm90aWZpY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
cHJvY2Vzc05ld0FuZFJlbW92ZWRUZXh0VHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9nQ2hhbm5lbCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
Ojpsb2dDbGFzc05hbWUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2xlYXJNZWRpYUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNsZWFyTWVkaWFDYWNoZUZvck9y
aWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpjcmVhdGVJbWFnZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95SW1hZ2VHZW5lcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6Y3JlYXRlQVZQbGF5ZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95VmlkZW9MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9y
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmNyZWF0ZUFWUGxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVySXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjaGVja1BsYXlhYmlsaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmJl
Z2luTG9hZGluZ01ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTWVkaWEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1QbGF5KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRm
b3JtUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6cGxhdGZvcm1EdXJhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldE11dGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldENs
b3NlZENhcHRpb25zVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjphc3NldFN0YXR1cyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludFdpdGhJbWFnZUdlbmVy
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpjcmVhdGVJbWFnZUZvclRpbWVJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dHJhY2tzQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjp1cGRhdGVBdWRpb1RyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRhdGVWaWRlb1RyYWNrcyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVWaWRlb091dHB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpkZXN0cm95VmlkZW9PdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlTGFzdEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aFZpZGVvT3V0cHV0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OmNyZWF0ZU9wZW5HTFZpZGVvT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmRlc3Ryb3lPcGVuR0xWaWRlb091dHB1dCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp3YWl0Rm9y
VmlkZW9PdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnByb2Nlc3NNZWRpYVNlbGVjdGlvbk9wdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6Zmx1c2hDdWVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnNldEN1cnJlbnRUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1Ry
YWNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2lyZWxlc3NQ
bGF5YmFja1RhcmdldE5hbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0V2lyZWxlc3NQbGF5YmFja1Rh
cmdldCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRTaG91bGRCdWZmZXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om1l
dGFkYXRhRGlkQXJyaXZlKToKKyAgICAgICAgKC1bV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgb2Jz
ZXJ2ZVZhbHVlRm9yS2V5UGF0aDpvZk9iamVjdDpjaGFuZ2U6Y29udGV4dDpdKToKKyAgICAgICAg
KFdlYkNvcmU6OmJvb2xTdHJpbmcpOiBEZWxldGVkLgorCiAyMDE3LTA5LTA2ICBKb3NlcGggUGVj
b3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgRmV0Y2gncyBSZXNwb25zZS5z
dGF0dXNUZXh0IGlzIHVuZXhwZWN0ZWRseSB0aGUgZnVsbCBodHRwIHN0YXR1cyBsaW5lIGZvciBI
VFRQLzIgcmVzcG9uc2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTcxNykK
KysrIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAxNy0wOS0xMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNv
bT4KKworICAgICAgICBTd2l0Y2ggTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIHRvIHJl
bGVhc2UgbG9nZ2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc2NjIxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDMzNTMxMT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhbC9Mb2dnZXIuaDoK
KyAgICAgICAgKFBBTDo6TG9nQXJndW1lbnQ6OnRvU3RyaW5nKToKKyAgICAgICAgKiBwYWwvTG9n
Z2VySGVscGVyLmg6CisKIDIwMTctMDktMDYgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmVxdWlyZSBMb2dnaW5nSGVscGVyIG92ZXJyaWRlcyB0byBw
cm92aWRlIGlkZW50aWZpZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvTG9nZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIuaAkocmV2aXNpb24g
MjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IExvZ0FyZ3Vt
ZW50IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBib29sPjo6dmFsdWUsIFN0cmluZz46OnR5cGUgdG9T
dHJpbmcoYm9vbCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgPyBBU0NJSUxpdGVyYWwoInRy
dWUiKSA6IEFTQ0lJTGl0ZXJhbCgiZmFsc2UiKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUg
PSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUsIGludD46
OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGludCBhcmd1bWVudCkgeyByZXR1cm4gU3Ry
aW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0
YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgdW5zaWduZWQ+Ojp2
YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyh1bnNpZ25lZCBhcmd1bWVudCkgeyByZXR1cm4g
U3RyaW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+
IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgdW5zaWduZWQg
bG9uZz46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKHVuc2lnbmVkIGxvbmcgYXJndW1l
bnQpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKGFyZ3VtZW50KTsgfQogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PFUsIGZsb2F0Pjo6dmFsdWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmcoZmxvYXQgYXJndW1lbnQp
IHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKGFyZ3VtZW50KTsgfQogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUs
IGRvdWJsZT46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGRvdWJsZSBhcmd1bWVudCkg
eyByZXR1cm4gU3RyaW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVSA9IFQ+IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8dHlw
ZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFU+Ojp0eXBlLCBBdG9taWNTdHJpbmc+Ojp2YWx1
ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhBdG9taWNTdHJpbmcgYXJndW1lbnQpIHsgcmV0dXJu
IGFyZ3VtZW50LnN0cmluZygpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0xvZ2dl
ckhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvTG9nZ2VySGVs
cGVyLmgJKHJldmlzaW9uIDIyMTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvTG9nZ2Vy
SGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogbmFtZXNwYWNlIFBB
TCB7CiAKK2NsYXNzIExvZ2dlcjsKKwogY2xhc3MgTG9nZ2VySGVscGVyIHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5Mb2dnZXJIZWxwZXIoKSA9IGRlZmF1bHQ7CkBAIC0zOSw3ICs0MSw3IEBAIHB1
YmxpYzoKIAogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogCi0jZGVmaW5lIExPR0lERU5USUZJ
RVIgTG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcihsb2dDbGFzc05hbWUoKSwgX19mdW5jX18sIGxv
Z0lkZW50aWZpZXIoKSkKKyNkZWZpbmUgTE9HSURFTlRJRklFUiBQQUw6OkxvZ2dlcjo6TG9nU2l0
ZUlkZW50aWZpZXIobG9nQ2xhc3NOYW1lKCksIF9fZnVuY19fLCBsb2dJZGVudGlmaWVyKCkpCiAK
ICNkZWZpbmUgQUxXQVlTX0xPRyguLi4pICAgICBsb2dnZXIoKS5sb2dBbHdheXMobG9nQ2hhbm5l
bCgpLCBfX1ZBX0FSR1NfXykKICNkZWZpbmUgRVJST1JfTE9HKC4uLikgICAgICBsb2dnZXIoKS5l
cnJvcihsb2dDaGFubmVsKCksIF9fVkFfQVJHU19fKQpAQCAtNDcsNiArNDksNyBAQCBwdWJsaWM6
CiAjZGVmaW5lIE5PVElDRV9MT0coLi4uKSAgICAgbG9nZ2VyKCkubm90aWNlKGxvZ0NoYW5uZWwo
KSwgX19WQV9BUkdTX18pCiAjZGVmaW5lIElORk9fTE9HKC4uLikgICAgICAgbG9nZ2VyKCkuaW5m
byhsb2dDaGFubmVsKCksIF9fVkFfQVJHU19fKQogI2RlZmluZSBERUJVR19MT0coLi4uKSAgICAg
IGxvZ2dlcigpLmRlYnVnKGxvZ0NoYW5uZWwoKSwgX19WQV9BUkdTX18pCisjZGVmaW5lIFdJTExf
TE9HKF9sZXZlbF8pICAgbG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIF9sZXZlbF8pCiAK
ICNlbHNlCiAKQEAgLTU5LDYgKzYyLDcgQEAgcHVibGljOgogI2RlZmluZSBOT1RJQ0VfTE9HKC4u
LikgICAgICgodm9pZCkwKQogI2RlZmluZSBJTkZPX0xPRyguLi4pICAgICAgICgodm9pZCkwKQog
I2RlZmluZSBERUJVR19MT0coLi4uKSAgICAgICgodm9pZCkwKQorI2RlZmluZSBXSUxMX0xPRyhf
bGV2ZWxfKSAgIGZhbHNlCiAKICNlbmRpZgogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDIyMTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTksNiArODk5LDkgQEAg
cHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiSFRNTE1lZGlhRWxlbWVudCI7IH0KICAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVy
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4obV9s
b2dJZGVudGlmaWVyKTsgfQogICAgIFdURkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBm
aW5hbDsKKworICAgIGNvbnN0IHZvaWQqIG1lZGlhUGxheWVyTG9nSWRlbnRpZmllcigpIGZpbmFs
IHsgcmV0dXJuIGxvZ0lkZW50aWZpZXIoKTsgfQorICAgIGNvbnN0IFBBTDo6TG9nZ2VyKiBtZWRp
YVBsYXllckxvZ2dlcigpIGZpbmFsIHsgcmV0dXJuICZsb2dnZXIoKTsgfQogI2VuZGlmCiAKICAg
ICBib29sIHdpbGxMb2coV1RGTG9nTGV2ZWwpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkocmV2aXNpb24gMjIxNzE3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDg3LDYgKzE0ODcsMjggQEAgYm9vbCBNZWRpYVBsYXllcjo6c2hv
dWxkQ2hlY2tIYXJkd2FyZVN1cAogICAgIHJldHVybiBjbGllbnQoKS5tZWRpYVBsYXllclNob3Vs
ZENoZWNrSGFyZHdhcmVTdXBwb3J0KCk7CiB9CiAKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
K3N0YXRpYyBSZWZQdHI8UEFMOjpMb2dnZXI+JiBudWxsTG9nZ2VyKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPFBBTDo6TG9nZ2VyPj4gbG9nZ2VyOworICAgIHJldHVybiBs
b2dnZXI7Cit9CisKK2NvbnN0IFBBTDo6TG9nZ2VyJiBNZWRpYVBsYXllcjo6bWVkaWFQbGF5ZXJM
b2dnZXIoKQoreworICAgIGF1dG8gbG9nZ2VyID0gY2xpZW50KCkubWVkaWFQbGF5ZXJMb2dnZXIo
KTsKKyAgICBpZiAobG9nZ2VyKQorICAgICAgICByZXR1cm4gKmxvZ2dlcjsKKworICAgIGlmICgh
bnVsbExvZ2dlcigpLmdldCgpKSB7CisgICAgICAgIG51bGxMb2dnZXIoKSA9IFBBTDo6TG9nZ2Vy
OjpjcmVhdGUodGhpcyk7CisgICAgICAgIG51bGxMb2dnZXIoKS0+c2V0RW5hYmxlZCh0aGlzLCBm
YWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuICpudWxsTG9nZ2VyKCkuZ2V0KCk7Cit9CisjZW5k
aWYKKwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiAr
NDQsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlIDxwYWwvTG9nZ2Vy
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTI5OSw2ICszMDAsMTEgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBtZWRpYVBsYXllclNob3VsZERpc2FibGVTbGVlcCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8Q29udGVudFR5
cGU+JiBtZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBtZWRpYVBsYXllclNob3VsZENoZWNrSGFyZHdhcmVTdXBwb3J0KCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAg
IHZpcnR1YWwgY29uc3Qgdm9pZCogbWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKCkgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHZpcnR1YWwgY29uc3QgUEFMOjpMb2dnZXIqIG1lZGlhUGxheWVyTG9n
Z2VyKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmCiB9OwogCiBjbGFzcyBNZWRpYVBsYXll
clN1cHBvcnRzVHlwZUNsaWVudCB7CkBAIC02MjYsNiArNjMyLDExIEBAIHB1YmxpYzoKICAgICBj
b25zdCBWZWN0b3I8Q29udGVudFR5cGU+JiBtZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3
YXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkQ2hlY2tIYXJkd2FyZVN1cHBvcnQo
KSBjb25zdDsKIAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGNvbnN0IFBBTDo6TG9n
Z2VyJiBtZWRpYVBsYXllckxvZ2dlcigpOworICAgIGNvbnN0IHZvaWQqIG1lZGlhUGxheWVyTG9n
SWRlbnRpZmllcigpIHsgcmV0dXJuIGNsaWVudCgpLm1lZGlhUGxheWVyTG9nSWRlbnRpZmllcigp
OyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVu
dCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uLmNwcAkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJVUkwu
aCIKICNpbmNsdWRlIDxDb3JlTWVkaWEvQ29yZU1lZGlhLmg+CiAjaW5jbHVkZSA8aGVhcC9IZWFw
SW5saW5lcy5oPgorI2luY2x1ZGUgPHBhbC9Mb2dnZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Rh
dGFWaWV3Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvVWludDE2QXJyYXkuaD4KQEAgLTYwLDYgKzYxLDEwIEBAIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGEKICAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlh
UGxheWVyOjpFbXB0eSkKICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhp
bmcpCiAgICAgLCBtX3ByZWxvYWQoTWVkaWFQbGF5ZXI6OkF1dG8pCisjaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECisgICAgLCBtX2xvZ2dlcihwbGF5ZXItPm1lZGlhUGxheWVyTG9nZ2VyKCkpCisg
ICAgLCBtX2xvZ0lkZW50aWZpZXIocGxheWVyLT5tZWRpYVBsYXllckxvZ0lkZW50aWZpZXIoKSkK
KyNlbmRpZgogICAgICwgbV9jYWNoZWREdXJhdGlvbihNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkp
CiAgICAgLCBtX3JlcG9ydGVkRHVyYXRpb24oTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAg
ICwgbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzKE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKSkKQEAgLTgxLDEyICs4NiwxMiBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246Ok1lZGlhUGxhCiAgICAgLCBtX3Nob3VsZE1haW50YWluQXNwZWN0UmF0aW8odHJ1ZSkK
ICAgICAsIG1fc2Vla2luZyhmYWxzZSkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiglcCkiLCB0
aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjp+TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uKCkKIHsKLSAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246On5NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb24oJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJ
RklFUik7CiAgICAgc2V0SWdub3JlTG9hZFN0YXRlQ2hhbmdlcyh0cnVlKTsKIH0KIApAQCAtMTI2
LDEwICsxMzEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0CiAg
ICAgaWYgKGN1cnJlbnRNb2RlID09IHByZWZlcnJlZE1vZGUgJiYgY3VycmVudE1vZGUgIT0gTWVk
aWFSZW5kZXJpbmdOb25lKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldFVwVmlkZW9SZW5kZXJpbmcoJXApIC0gY3Vy
cmVudCBtb2RlID0gJWQsIHByZWZlcnJlZCBtb2RlID0gJWQiLCAKLSAgICAgICAgdGhpcywgc3Rh
dGljX2Nhc3Q8aW50PihjdXJyZW50TW9kZSksIHN0YXRpY19jYXN0PGludD4ocHJlZmVycmVkTW9k
ZSkpOwotCi0gICAgaWYgKGN1cnJlbnRNb2RlICE9IE1lZGlhUmVuZGVyaW5nTm9uZSkgIAorICAg
IGlmIChjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpCiAgICAgICAgIHRlYXJEb3du
VmlkZW9SZW5kZXJpbmcoKTsKIAogICAgIHN3aXRjaCAocHJlZmVycmVkTW9kZSkgewpAQCAtMTQ0
LDE1ICsxNDYsMTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldAog
ICAgIH0KIAogICAgIC8vIElmIHVzaW5nIGEgbW92aWUgbGF5ZXIsIGluZm9ybSB0aGUgY2xpZW50
IHNvIHRoZSBjb21wb3NpdGluZyB0cmVlIGlzIHVwZGF0ZWQuCi0gICAgaWYgKGN1cnJlbnRNb2Rl
ID09IE1lZGlhUmVuZGVyaW5nVG9MYXllciB8fCBwcmVmZXJyZWRNb2RlID09IE1lZGlhUmVuZGVy
aW5nVG9MYXllcikgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnNldFVwVmlkZW9SZW5kZXJpbmcoJXApIC0gY2FsbGluZyBtZWRpYVBsYXllclJl
bmRlcmluZ01vZGVDaGFuZ2VkKCkiLCB0aGlzKTsKKyAgICBpZiAoY3VycmVudE1vZGUgPT0gTWVk
aWFSZW5kZXJpbmdUb0xheWVyIHx8IHByZWZlcnJlZE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdUb0xh
eWVyKQogICAgICAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2Rl
Q2hhbmdlZChtX3BsYXllcik7Ci0gICAgfQogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6dGVhckRvd25WaWRlb1JlbmRlcmluZygpCiB7Ci0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCVw
KSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgZGVzdHJveUNv
bnRleHRWaWRlb1JlbmRlcmVyKCk7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6aGFzCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9hZCglcCkiLCB0aGlzKTsKKyAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgc2V0TmV0d29ya1N0YXRlKG1fcHJlbG9hZCA9
PSBNZWRpYVBsYXllcjo6Tm9uZSA/IE1lZGlhUGxheWVyOjpJZGxlIDogTWVkaWFQbGF5ZXI6Okxv
YWRpbmcpOwogICAgIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKTsKQEAg
LTE5MSwxNiArMTkxLDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjps
b2EKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXlhYmlsaXR5S25v
d24oKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
cGxheWFiaWxpdHlLbm93biglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVS
LCAibWV0YWRhdGEgbG9hZGVkID0gIiwgYXNzZXRTdGF0dXMoKSA+IE1lZGlhUGxheWVyQVZBc3Nl
dFN0YXR1c0xvYWRpbmcpOwogCiAgICAgaWYgKG1fYXNzZXRJc1BsYXlhYmxlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBOb3RoaW5nIG1vcmUgdG8gZG8gaWYgd2UgYWxyZWFkeSBoYXZlIGFs
bCBvZiB0aGUgaXRlbSdzIG1ldGFkYXRhLgotICAgIGlmIChhc3NldFN0YXR1cygpID4gTWVkaWFQ
bGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGluZykgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXlhYmlsaXR5S25vd24oJXApIC0gYWxsIG1ldGFk
YXRhIGxvYWRlZCIsIHRoaXMpOworICAgIGlmIChhc3NldFN0YXR1cygpID4gTWVkaWFQbGF5ZXJB
VkFzc2V0U3RhdHVzTG9hZGluZykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIC8vIEF0
IHRoaXMgcG9pbnQgd2UgYXJlIHN1cHBvc2VkIHRvIGxvYWQgbWV0YWRhdGEuIEl0IGlzIE9LIHRv
IGFzayB0aGUgYXNzZXQgdG8gbG9hZCB0aGUgc2FtZSAKICAgICAvLyBpbmZvcm1hdGlvbiBtdWx0
aXBsZSB0aW1lcywgYmVjYXVzZSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCB0aGUgY29t
cGxldGlvbiBoYW5kbGVyIApAQCAtMjExLDI4ICsyMDksMjcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnBsYQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbjo6cHJlcGFyZVRvUGxheSgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpwcmVwYXJlVG9QbGF5KCVwKSIsIHRoaXMpOwotCisgICAgQUxXQVlT
X0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpBdXRvKTsK
IH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXkoKQogewotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGxheSglcCkiLCB0
aGlzKTsKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgLy8gSWYgdGhlIGZp
bGUgaGFzIHZpZGVvLCBkb24ndCByZXF1ZXN0IHBsYXliYWNrIHVudGlsIHRoZSBmaXJzdCBmcmFt
ZSBvZiB2aWRlbyBpcyByZWFkeSB0byBkaXNwbGF5CiAgICAgLy8gb3IgdGhlIGF1ZGlvIG1heSBz
dGFydCBwbGF5aW5nIGJlZm9yZSB3ZSBjYW4gcmVuZGVyIHZpZGVvLgogICAgIGlmICghbV9jYWNo
ZWRIYXNWaWRlbyB8fCBoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkpCiAgICAgICAgIHBsYXRmb3Jt
UGxheSgpOwogICAgIGVsc2UgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OnBsYXkoJXApIC0gd2FpdGluZyBmb3IgZmlyc3QgdmlkZW8gZnJhbWUi
LCB0aGlzKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIndhaXRpbmcgZm9yIGZp
cnN0IHZpZGVvIGZyYW1lIik7CiAgICAgICAgIG1fcGxheVdoZW5GcmFtZXNBdmFpbGFibGUgPSB0
cnVlOwogICAgIH0KIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBh
dXNlKCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OnBhdXNlKCVwKSIsIHRoaXMpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAgICAg
bV9wbGF5V2hlbkZyYW1lc0F2YWlsYWJsZSA9IGZhbHNlOwogICAgIHBsYXRmb3JtUGF1c2UoKTsK
IH0KQEAgLTI0Nyw3ICsyNDQsNyBAQCBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uCiAgICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKICAgICBtX2Nh
Y2hlZER1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpkdXJhdGlvbiglcCkgLSBjYWNoaW5nICVzIiwgdGhpcywgdG9TdHJp
bmcobV9jYWNoZWREdXJhdGlvbikudXRmOCgpLmRhdGEoKSk7CisKICAgICByZXR1cm4gbV9jYWNo
ZWREdXJhdGlvbjsKIH0KIApAQCAtMjYxLDcgKzI1OCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpzZWUKICAgICBNZWRpYVRpbWUgdGltZSA9IG1lZGlhVGltZTsKIAog
ICAgIGlmIChtX3NlZWtpbmcpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpzZWVrV2l0aFRvbGVyYW5jZSglcCkgLSBzYXZlIHBlbmRpbmcgc2Vl
ayIsIHRoaXMpOworICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJzYXZpbmcgcGVu
ZGluZyBzZWVrIik7CiAgICAgICAgIG1fcGVuZGluZ1NlZWsgPSBbdGhpcywgdGltZSwgbmVnYXRp
dmVUb2xlcmFuY2UsIHBvc2l0aXZlVG9sZXJhbmNlXSgpIHsKICAgICAgICAgICAgIHNlZWtXaXRo
VG9sZXJhbmNlKHRpbWUsIG5lZ2F0aXZlVG9sZXJhbmNlLCBwb3NpdGl2ZVRvbGVyYW5jZSk7CiAg
ICAgICAgIH07CkBAIC0yNzgsNyArMjc1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnNlZQogICAgIGlmIChjdXJyZW50VGV4dFRyYWNrKCkpCiAgICAgICAgIGN1cnJl
bnRUZXh0VHJhY2soKS0+YmVnaW5TZWVraW5nKCk7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWsoJXApIC0gc2Vla2luZyB0byAlcyIsIHRoaXMs
IHRvU3RyaW5nKHRpbWUpLnV0ZjgoKS5kYXRhKCkpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUiwgInNlZWtpbmcgdG8gICIsIHRpbWUpOwogCiAgICAgc2Vla1RvVGltZSh0aW1lLCBuZWdh
dGl2ZVRvbGVyYW5jZSwgcG9zaXRpdmVUb2xlcmFuY2UpOwogfQpAQCAtMzE2LDEyICszMTMsMTIg
QEAgRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbgogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0TmF0dXJhbFNpemUoRmxvYXRTaXplIHNpemUp
CiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOnNldE5h
dHVyYWxTaXplKCVwKSAtIHNpemUgPSAlZiB4ICVmIiwgdGhpcywgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKLQogICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9jYWNoZWROYXR1cmFsU2l6
ZTsKICAgICBtX2NhY2hlZE5hdHVyYWxTaXplID0gc2l6ZTsKLSAgICBpZiAob2xkU2l6ZSAhPSBt
X2NhY2hlZE5hdHVyYWxTaXplKQorICAgIGlmIChvbGRTaXplICE9IG1fY2FjaGVkTmF0dXJhbFNp
emUpIHsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIndhcyAiLCBvbGRTaXplLndp
ZHRoKCksICIgeCAiLCBvbGRTaXplLmhlaWdodCgpLCAiLCBpcyAiLCBzaXplLndpZHRoKCksICIg
eCAiLCBzaXplLmhlaWdodCgpKTsKICAgICAgICAgbV9wbGF5ZXItPnNpemVDaGFuZ2VkKCk7Cisg
ICAgfQogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0SGFzVmlk
ZW8oYm9vbCBiKQpAQCAtNDAzLDExICs0MDAsMTIgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbgogICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKICAgICAgICAg
cmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotICAgIGlmICghbV9jYWNoZWRNYXhUaW1l
U2Vla2FibGUpCisgICAgaWYgKCFtX2NhY2hlZE1heFRpbWVTZWVrYWJsZSkgewogICAgICAgICBt
X2NhY2hlZE1heFRpbWVTZWVrYWJsZSA9IHBsYXRmb3JtTWF4VGltZVNlZWthYmxlKCk7CisgICAg
ICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJjYWNoaW5nICIsIG1fY2FjaGVkTWF4VGltZVNl
ZWthYmxlKTsKKyAgICB9CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246Om1heFRpbWVTZWVrYWJsZSglcCkgLSByZXR1cm5pbmcgJXMiLCB0aGlzLCB0b1N0
cmluZyhtX2NhY2hlZE1heFRpbWVTZWVrYWJsZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJu
IG1fY2FjaGVkTWF4VGltZVNlZWthYmxlOyAgIAorICAgIHJldHVybiBtX2NhY2hlZE1heFRpbWVT
ZWVrYWJsZTsKIH0KIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
bWluTWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdApAQCAtNDE1LDEwICs0MTMsMTEgQEAgTWVkaWFU
aW1lIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbgogICAgIGlmICghbWV0YURhdGFBdmFp
bGFibGUoKSkKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotICAgIGlm
ICghbV9jYWNoZWRNaW5UaW1lU2Vla2FibGUpCisgICAgaWYgKCFtX2NhY2hlZE1pblRpbWVTZWVr
YWJsZSkgewogICAgICAgICBtX2NhY2hlZE1pblRpbWVTZWVrYWJsZSA9IHBsYXRmb3JtTWluVGlt
ZVNlZWthYmxlKCk7CisgICAgICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJjYWNoaW5nICIs
IG1fY2FjaGVkTWluVGltZVNlZWthYmxlKTsKKyAgICB9CiAKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1pblRpbWVTZWVrYWJsZSglcCkgLSByZXR1cm5p
bmcgJXMiLCB0aGlzLCB0b1N0cmluZyhtX2NhY2hlZE1pblRpbWVTZWVrYWJsZSkudXRmOCgpLmRh
dGEoKSk7CiAgICAgcmV0dXJuIG1fY2FjaGVkTWluVGltZVNlZWthYmxlOwogfQogCkBAIC01NjQs
MTIgKzU2MywxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dXBkCiAg
ICAgfSBlbHNlIGlmICghaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpKQogICAgICAgICBtX2hhdmVS
ZXBvcnRlZEZpcnN0VmlkZW9GcmFtZSA9IGZhbHNlOwogCi0jaWYgIUxPR19ESVNBQkxFRAotICAg
IGlmIChtX25ldHdvcmtTdGF0ZSAhPSBuZXdOZXR3b3JrU3RhdGUgfHwgbV9yZWFkeVN0YXRlICE9
IG5ld1JlYWR5U3RhdGUpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjp1cGRhdGVTdGF0ZXMoJXApIC0gZW50ZXJlZCB3aXRoIG5ldHdvcmtTdGF0
ZSA9ICVpLCByZWFkeVN0YXRlID0gJWksICBleGl0aW5nIHdpdGggbmV0d29ya1N0YXRlID0gJWks
IHJlYWR5U3RhdGUgPSAlaSIsCi0gICAgICAgICAgICB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KG1f
bmV0d29ya1N0YXRlKSwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWR5U3RhdGUpLCBzdGF0aWNfY2Fz
dDxpbnQ+KG5ld05ldHdvcmtTdGF0ZSksIHN0YXRpY19jYXN0PGludD4obmV3UmVhZHlTdGF0ZSkp
OwotICAgIH0KLSNlbmRpZgorICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBuZXdOZXR3b3JrU3Rh
dGUpCisgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgImVudGVyZWQgd2l0aCBuZXR3
b3JrU3RhdGUgIiwgc3RhdGljX2Nhc3Q8aW50PihtX25ldHdvcmtTdGF0ZSksICIsIGV4aXRpbmcg
d2l0aCAiLCBzdGF0aWNfY2FzdDxpbnQ+KG5ld05ldHdvcmtTdGF0ZSkpOworICAgIGlmIChtX3Jl
YWR5U3RhdGUgIT0gbmV3UmVhZHlTdGF0ZSkKKyAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSLCAiZW50ZXJlZCB3aXRoIHJlYWR5U3RhdGUgIiwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWR5
U3RhdGUpLCAiLCBleGl0aW5nIHdpdGggIiwgc3RhdGljX2Nhc3Q8aW50PihuZXdSZWFkeVN0YXRl
KSk7CiAKICAgICBzZXROZXR3b3JrU3RhdGUobmV3TmV0d29ya1N0YXRlKTsKICAgICBzZXRSZWFk
eVN0YXRlKG5ld1JlYWR5U3RhdGUpOwpAQCAtNjE5LDggKzYxNiw4IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptZXQKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnJhdGVDaGFuZ2VkKCkKIHsKKwogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFD
S19UQVJHRVQpICYmIFBMQVRGT1JNKElPUykKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnJhdGVDaGFuZ2VkKCVwKSAtIHJhdGUgPSAlZiwgcmVxdWVzdGVk
IHJhdGUgPSAlZiwgaXRlbSBzdGF0dXMgPSAlaSIsIHRoaXMsIHJhdGUoKSwgcmVxdWVzdGVkUmF0
ZSgpLCBwbGF5ZXJJdGVtU3RhdHVzKCkpOwogICAgIGlmIChpc0N1cnJlbnRQbGF5YmFja1Rhcmdl
dFdpcmVsZXNzKCkgJiYgcGxheWVySXRlbVN0YXR1cygpID49IE1lZGlhUGxheWVyQVZQbGF5ZXJJ
dGVtU3RhdHVzUGxheWJhY2tCdWZmZXJGdWxsKSB7CiAgICAgICAgIGRvdWJsZSByYXRlID0gdGhp
cy0+cmF0ZSgpOwogICAgICAgICBpZiAocmF0ZSAhPSByZXF1ZXN0ZWRSYXRlKCkpIHsKQEAgLTY0
OCwxNCArNjQ1LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWUK
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnRpbWVDaGFuZ2VkKGNvbnN0
IE1lZGlhVGltZSYgdGltZSkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246OnRpbWVDaGFuZ2VkKCVwKSAtIHRpbWUgPSAlcyIsIHRoaXMsIHRvU3RyaW5n
KHRpbWUpLnV0ZjgoKS5kYXRhKCkpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIs
IHRpbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aW1lKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQoYm9vbCBmaW5pc2hlZCkKIHsKLSAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQo
JXApIC0gZmluaXNoZWQgPSAlZCIsIHRoaXMsIGZpbmlzaGVkKTsKICAgICBVTlVTRURfUEFSQU0o
ZmluaXNoZWQpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgImZpbmlzaGVkID0gIiwg
ZmluaXNoZWQpOwogCiAgICAgbV9zZWVraW5nID0gZmFsc2U7CiAKQEAgLTY2Myw3ICs2NjAsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlCiAgICAgc3RkOjpzd2Fw
KHBlbmRpbmdTZWVrLCBtX3BlbmRpbmdTZWVrKTsKIAogICAgIGlmIChwZW5kaW5nU2Vlaykgewot
ICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtD
b21wbGV0ZWQoJXApIC0gaXNzdWluZyBwZW5kaW5nIHNlZWsiLCB0aGlzKTsKKyAgICAgICAgQUxX
QVlTX0xPRyhMT0dJREVOVElGSUVSLCAiaXNzdWluZyBwZW5kaW5nIHNlZWsiKTsKICAgICAgICAg
cGVuZGluZ1NlZWsoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY5NSw2ICs2OTIsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6aW52CiAgICAgLy8gc28gcmVw
b3J0IGR1cmF0aW9uIGNoYW5nZWQgd2hlbiB0aGUgZXN0aW1hdGUgaXMgdXBhdGVkLgogICAgIE1l
ZGlhVGltZSBkdXJhdGlvbiA9IHRoaXMtPmR1cmF0aW9uTWVkaWFUaW1lKCk7CiAgICAgaWYgKGR1
cmF0aW9uICE9IG1fcmVwb3J0ZWREdXJhdGlvbikgeworICAgICAgICBJTkZPX0xPRyhMT0dJREVO
VElGSUVSLCAiLSAiLCBtX2NhY2hlZER1cmF0aW9uKTsKICAgICAgICAgaWYgKG1fcmVwb3J0ZWRE
dXJhdGlvbi5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2Vk
KCk7CiAgICAgICAgIG1fcmVwb3J0ZWREdXJhdGlvbiA9IGR1cmF0aW9uOwpAQCAtNzIwLDYgKzcx
OCw3IEBAIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHIKIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlBy
ZWxvYWQgcHJlbG9hZCkKIHsKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICIgLSAiLCBz
dGF0aWNfY2FzdDxpbnQ+KHByZWxvYWQpKTsKICAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOwogICAg
IGlmICghbV9hc3NldFVSTC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzU0LDggKzc1
Myw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXQKIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1haW5UaHJlYWRDYWxsYmFjaygpCiB7Ci0g
ICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptYWluVGhyZWFk
Q2FsbGJhY2soJXApIiwgdGhpcyk7Ci0KICAgICBjbGVhck1haW5UaHJlYWRQZW5kaW5nRmxhZygp
OwogICAgIGRpc3BhdGNoTm90aWZpY2F0aW9uKCk7CiB9CkBAIC03NzYsNyArNzczLDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNjaAogICAgIHNjaGVkdWxlTWFpblRo
cmVhZE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24odHlwZSwgZmluaXNoZWQpKTsKIH0KIAotI2lm
ICFMT0dfRElTQUJMRUQKKyNpZiAwCiBzdGF0aWMgY29uc3QgY2hhciogbm90aWZpY2F0aW9uTmFt
ZShNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbiYgbm90aWZpY2F0
aW9uKQogewogI2RlZmluZSBERUZJTkVfVFlQRV9TVFJJTkdfQ0FTRSh0eXBlKSBjYXNlIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjp0eXBlOiByZXR1cm4gI3R5
cGU7CkBAIC03OTIsMTAgKzc4OSw2IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBub3RpZmljYXRpb25O
YW1lKE1lZGkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNjaGVkdWxl
TWFpblRocmVhZE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24mJiBub3RpZmljYXRpb24pCiB7Ci0g
ICAgYXV0byBub3RpZmljYXRpb25UeXBlID0gbm90aWZpY2F0aW9uLnR5cGUoKTsKLSAgICBpZiAo
bm90aWZpY2F0aW9uVHlwZSAhPSBOb3RpZmljYXRpb246OkZ1bmN0aW9uVHlwZSkKLSAgICAgICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzY2hlZHVsZU1haW5U
aHJlYWROb3RpZmljYXRpb24oJXApIC0gbm90aWZpY2F0aW9uICVzIiwgdGhpcywgbm90aWZpY2F0
aW9uTmFtZShub3RpZmljYXRpb24pKTsKLQogICAgIG1fcXVldWVNdXRleC5sb2NrKCk7CiAKICAg
ICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gYWx3YXlzIHByb2Nlc3MgdGhlIHByb3BlcnRpZXMgaW4g
dGhlIG9yZGVyIHRoYXQgd2UgYXJlIG5vdGlmaWVkLApAQCAtODIwLDExICs4MTMsOCBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2NoCiAKICAgICBtX3F1ZXVlTXV0ZXgu
dW5sb2NrKCk7CiAKLSAgICBpZiAoZGVsYXlEaXNwYXRjaCkgewotICAgICAgICBpZiAobm90aWZp
Y2F0aW9uVHlwZSAhPSBOb3RpZmljYXRpb246OkZ1bmN0aW9uVHlwZSkKLSAgICAgICAgICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2NoZWR1bGVNYWluVGhy
ZWFkTm90aWZpY2F0aW9uKCVwKSAtIGVhcmx5IHJldHVybiIsIHRoaXMpOworICAgIGlmIChkZWxh
eURpc3BhdGNoKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgZGlzcGF0Y2hOb3RpZmlj
YXRpb24oKTsKIH0KQEAgLTg1OCw5ICs4NDgsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6ZGlzCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG5v
dGlmaWNhdGlvbi50eXBlKCkgIT0gTm90aWZpY2F0aW9uOjpGdW5jdGlvblR5cGUpCi0gICAgICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6ZGlzcGF0Y2hOb3Rp
ZmljYXRpb24oJXApIC0gZGlzcGF0Y2hpbmcgJXMiLCB0aGlzLCBub3RpZmljYXRpb25OYW1lKG5v
dGlmaWNhdGlvbikpOwotCiAgICAgc3dpdGNoIChub3RpZmljYXRpb24udHlwZSgpKSB7CiAgICAg
Y2FzZSBOb3RpZmljYXRpb246Okl0ZW1EaWRQbGF5VG9FbmRUaW1lOgogICAgICAgICBkaWRFbmQo
KTsKQEAgLTk4OSw4ICs5NzYsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6cHJvCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB1bnNpZ25lZCB0cmFja0NvdW50ID0gbV90
ZXh0VHJhY2tzLnNpemUoKTsKICAgICB1bnNpZ25lZCBpbkJhbmRDb3VudCA9IDA7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGV4dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0cmFja0NvdW50OyArK2kpIHsKICAgICAgICAgUmVmUHRy
PEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY+IHRyYWNrID0gbV90ZXh0VHJhY2tzW2ldOwogCiAj
aWYgRU5BQkxFKEFWRl9DQVBUSU9OUykKQEAgLTEwMDYsNyArOTk0LDkgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246OnBybwogICAgICAgICB0cmFjay0+c2V0SGFzQmVlblJl
cG9ydGVkKHRydWUpOwogICAgICAgICBwbGF5ZXIoKS0+YWRkVGV4dFRyYWNrKCp0cmFjayk7CiAg
ICAgfQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cHJv
Y2Vzc05ld0FuZFJlbW92ZWRUZXh0VHJhY2tzKCVwKSAtIGZvdW5kICVsdSB0ZXh0IHRyYWNrcyIs
IHRoaXMsIG1fdGV4dFRyYWNrcy5zaXplKCkpOworCisgICAgaWYgKHRyYWNrQ291bnQgIT0gbV90
ZXh0VHJhY2tzLnNpemUoKSkKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgImZvdW5k
ICIsIG1fdGV4dFRyYWNrcy5zaXplKCksICIgdGV4dCB0cmFja3MiKTsKIH0KIAogI2lmIEVOQUJM
RShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCkBAIC0xMTIyLDYgKzExMTIsMTMgQEAgYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmlzVQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorV1RGTG9nQ2hhbm5lbCYgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjpsb2dDaGFubmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTG9n
TWVkaWE7Cit9CisjZW5kaWYKKwogY29uc3QgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vu
c2l0aXZlSGFzaD4mIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c3RhdGljTUlNRVR5
cGVMaXN0KCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBjYWNoZSA9IG1ha2VOZXZlckRlc3Ry
b3llZChIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5o
CShyZXZpc2lvbiAyMjE3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
KyNpbmNsdWRlIDxwYWwvTG9nZ2VySGVscGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTM5
LDYgKzQwLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKK25hbWVzcGFjZSBQQUwgeworY2xhc3MgTG9nZ2VyOworfQorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRjsK
QEAgLTQ2LDYgKzUxLDkgQEAgY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjsKIGNsYXNz
IEdlbmVyaWNDdWVEYXRhOwogCiBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24g
OiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBwdWJsaWMgQVZGSW5iYW5kVHJh
Y2tQYXJlbnQKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAsIHByaXZhdGUgUEFMOjpM
b2dnZXJIZWxwZXIKKyNlbmRpZgogewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50
KCk7CkBAIC0xNDQsNiArMTUyLDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBleHRyYWN0
S2V5VVJJS2V5SURBbmRDZXJ0aWZpY2F0ZUZyb21Jbml0RGF0YShVaW50OEFycmF5KiBpbml0RGF0
YSwgU3RyaW5nJiBrZXlVUkksIFN0cmluZyYga2V5SUQsIFJlZlB0cjxVaW50OEFycmF5PiYgY2Vy
dGlmaWNhdGUpOwogI2VuZGlmCiAKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBjb25z
dCBQQUw6OkxvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0
KCk7IH0KKyAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIjsgfQorICAgIGNvbnN0IHZvaWQq
IGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNv
bnN0IHZvaWQqPihtX2xvZ0lkZW50aWZpZXIpOyB9CisgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hh
bm5lbCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24oTWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFs
IH5NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24oKTsKQEAgLTMzMSw2ICszNDYsMTEgQEAg
cHJpdmF0ZToKICAgICBTdHJpbmcgbV9hc3NldFVSTDsKICAgICBNZWRpYVBsYXllcjo6UHJlbG9h
ZCBtX3ByZWxvYWQ7CiAKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBSZWY8Y29uc3Qg
UEFMOjpMb2dnZXI+IG1fbG9nZ2VyOworICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllcjsK
KyNlbmRpZgorCiAgICAgRmxvYXRTaXplIG1fY2FjaGVkTmF0dXJhbFNpemU7CiAgICAgbXV0YWJs
ZSBNZWRpYVRpbWUgbV9jYWNoZWRNYXhUaW1lTG9hZGVkOwogICAgIG11dGFibGUgTWVkaWFUaW1l
IG1fY2FjaGVkTWF4VGltZVNlZWthYmxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAkocmV2
aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzYsNiArMzM2LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFNob3Vs
ZERpc2FibGVTbGVlcChib29sKSBvdmVycmlkZTsKIAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDIjsgfQorI2VuZGlmCisKICAgICBXZWFr
UHRyRmFjdG9yeTxNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDPiBtX3dlYWtQdHJG
YWN0b3J5OwogCiAgICAgUmV0YWluUHRyPEFWVVJMQXNzZXQ+IG1fYXZBc3NldDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbQkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUyLDEzICszNTIsNiBAQCBzdGF0
aWMgTlNBcnJheSAqYXNzZXRUcmFja01ldGFkYXRhS2V5TmFtCiBzdGF0aWMgTlNBcnJheSAqcGxh
eWVyS1ZPUHJvcGVydGllcygpOwogc3RhdGljIEFWQXNzZXRUcmFjayogZmlyc3RFbmFibGVkVHJh
Y2soTlNBcnJheSogdHJhY2tzKTsKIAotI2lmICFMT0dfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBj
aGFyICpib29sU3RyaW5nKGJvb2wgdmFsKQotewotICAgIHJldHVybiB2YWwgPyAidHJ1ZSIgOiAi
ZmFsc2UiOwotfQotI2VuZGlmCi0KICNpZiBIQVZFKEFWRk9VTkRBVElPTl9MT0FERVJfREVMRUdB
VEUpCiBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYWxMb2FkZXJEZWxlZ2F0ZVF1ZXVlKCkK
IHsKQEAgLTQ3OCw4ICs0NzEsNiBAQCBzdGF0aWMgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6
dGltZV9wCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2xlYXJN
ZWRpYUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6
dGltZV9wb2ludCBtb2RpZmllZFNpbmNlKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNsZWFyTWVkaWFDYWNoZSgpIik7Ci0gICAgCiAgICAg
QVZBc3NldENhY2hlVHlwZSogYXNzZXRDYWNoZSA9IGFzc2V0Q2FjaGVGb3JQYXRoKHBhdGgpOwog
ICAgIAogICAgIGZvciAoTlNTdHJpbmcgKmtleSBpbiBbYXNzZXRDYWNoZSBhbGxLZXlzXSkgewpA
QCAtNTIyLDcgKzUxMyw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
QzoKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjbGVhck1lZGlh
Q2FjaGVGb3JPcmlnaW5zKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgSGFzaFNldDxSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+PiYgb3JpZ2lucykKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjbGVhck1lZGlhQ2FjaGVGb3JPcmlnaW5zKCkiKTsK
ICAgICBBVkFzc2V0Q2FjaGVUeXBlKiBhc3NldENhY2hlID0gYXNzZXRDYWNoZUZvclBhdGgocGF0
aCk7CiAgICAgZm9yIChOU1N0cmluZyAqa2V5IGluIFthc3NldENhY2hlIGFsbEtleXNdKSB7CiAg
ICAgICAgIFVSTCBrZXlBc1VSTCA9IFVSTChVUkwoKSwga2V5KTsKQEAgLTU5Miw3ICs1ODIsNyBA
QCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp+TWVkCiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2FuY2VsTG9hZCgpCiB7Ci0gICAgTE9HKE1l
ZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2FuY2VsTG9hZCglcCki
LCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICB0ZWFyRG93blZpZGVv
UmVuZGVyaW5nKCk7CiAKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
IHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpXTsKQEAgLTY4MSw3ICs2NzEsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlSW1hZ2VHZW5lcmF0b3IoKQogewot
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0
ZUltYWdlR2VuZXJhdG9yKCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIp
OwogCiAgICAgaWYgKCFtX2F2QXNzZXQgfHwgbV9pbWFnZUdlbmVyYXRvcikKICAgICAgICAgcmV0
dXJuOwpAQCAtNjkyLDggKzY4Miw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzoKICAgICBbbV9pbWFnZUdlbmVyYXRvci5nZXQoKSBzZXRBcHBsaWVzUHJlZmVycmVk
VHJhY2tUcmFuc2Zvcm06WUVTXTsKICAgICBbbV9pbWFnZUdlbmVyYXRvci5nZXQoKSBzZXRSZXF1
ZXN0ZWRUaW1lVG9sZXJhbmNlQmVmb3JlOmtDTVRpbWVaZXJvXTsKICAgICBbbV9pbWFnZUdlbmVy
YXRvci5nZXQoKSBzZXRSZXF1ZXN0ZWRUaW1lVG9sZXJhbmNlQWZ0ZXI6a0NNVGltZVplcm9dOwot
Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3Jl
YXRlSW1hZ2VHZW5lcmF0b3IoJXApIC0gcmV0dXJuaW5nICVwIiwgdGhpcywgbV9pbWFnZUdlbmVy
YXRvci5nZXQoKSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6ZGVzdHJveUNvbnRleHRWaWRlb1JlbmRlcmVyKCkKQEAgLTcxMCw3ICs2OTgsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFtX2ltYWdlR2Vu
ZXJhdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95SW1hZ2VHZW5lcmF0b3IoJXApIC0gZGVzdHJv
eWluZyAgJXAiLCB0aGlzLCBtX2ltYWdlR2VuZXJhdG9yLmdldCgpKTsKKyAgICBJTkZPX0xPRyhM
T0dJREVOVElGSUVSKTsKIAogICAgIG1faW1hZ2VHZW5lcmF0b3IgPSAwOwogfQpAQCAtNzU1LDcg
Kzc0Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICB1
cGRhdGVWaWRlb0xheWVyR3Jhdml0eSgpOwogICAgIFttX3ZpZGVvTGF5ZXIgc2V0Q29udGVudHNT
Y2FsZTpwbGF5ZXIoKS0+Y2xpZW50KCkubWVkaWFQbGF5ZXJDb250ZW50c1NjYWxlKCldOwogICAg
IEludFNpemUgZGVmYXVsdFNpemUgPSBzbmFwcGVkSW50UmVjdChwbGF5ZXIoKS0+Y2xpZW50KCku
bWVkaWFQbGF5ZXJDb250ZW50Qm94UmVjdCgpKS5zaXplKCk7Ci0gICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlVmlkZW9MYXllciglcCkgLSBy
ZXR1cm5pbmcgJXAiLCB0aGlzLCBtX3ZpZGVvTGF5ZXIuZ2V0KCkpOworICAgIElORk9fTE9HKExP
R0lERU5USUZJRVIpOwogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5
ZXJNYW5hZ2VyLT5zZXRWaWRlb0xheWVyKG1fdmlkZW9MYXllci5nZXQoKSwgZGVmYXVsdFNpemUp
OwpAQCAtNzczLDcgKzc2MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKICAgICBpZiAoIW1fdmlkZW9MYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9H
KE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveVZpZGVv
TGF5ZXIoJXApIC0gZGVzdHJveWluZyAlcCIsIHRoaXMsIG1fdmlkZW9MYXllci5nZXQoKSk7Cisg
ICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAKICAgICBbbV92aWRlb0xheWVyIHJlbW92ZU9i
c2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6QCJyZWFkeUZvckRpc3BsYXki
XTsKICAgICBbbV92aWRlb0xheWVyIHNldFBsYXllcjpuaWxdOwpAQCAtOTExLDcgKzg5OSw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBpZiAobV9hdkFz
c2V0KQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9yVVJMKCVwKSAtIHVybCA9ICVzIiwg
dGhpcywgdXJsLnV0ZjgoKS5kYXRhKCkpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwog
CiAgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CiAKQEAgLTEwNDgsNyArMTAzNiw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBpZiAobV9hdlBsYXll
cikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIoJXApIiwgdGhpcyk7CisgICAgSU5GT19M
T0coTE9HSURFTlRJRklFUik7CiAKICAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKIApAQCAt
MTA5Nyw3ICsxMDg1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OgogICAgIGlmIChtX2F2UGxheWVySXRlbSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE1l
ZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJ
dGVtKCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgc2V0
RGVsYXlDYWxsYmFja3ModHJ1ZSk7CiAKQEAgLTExNDQsNyArMTEzMiw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgcmV0dXJuOwogICAgIG1faGF2
ZUNoZWNrZWRQbGF5YWJpbGl0eSA9IHRydWU7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjaGVja1BsYXlhYmlsaXR5KCVwKSIsIHRoaXMpOwor
ICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogICAgIGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVX
ZWFrUHRyKCk7CiAKICAgICBbbV9hdkFzc2V0LmdldCgpIGxvYWRWYWx1ZXNBc3luY2hyb25vdXNs
eUZvcktleXM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpAInBsYXlhYmxlIiwgQCJ0cmFja3Mi
LCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl57CkBAIC0xMTU3LDcgKzExNDUsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6YmVnaW5Mb2FkaW5nTWV0YWRhdGEoKQogewotICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmJlZ2luTG9hZGluZ01l
dGFkYXRhKCVwKSAtIHJlcXVlc3RpbmcgbWV0YWRhdGEgbG9hZGluZyIsIHRoaXMpOworICAgIElO
Rk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgT1NPYmplY3RQdHI8ZGlzcGF0Y2hfZ3JvdXBf
dD4gbWV0YWRhdGFMb2FkaW5nR3JvdXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2dyb3VwX2Ny
ZWF0ZSgpKTsKICAgICBkaXNwYXRjaF9ncm91cF9lbnRlcihtZXRhZGF0YUxvYWRpbmdHcm91cC5n
ZXQoKSk7CkBAIC0xMjA2LDcgKzExOTQsNyBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b246Okl0ZW1TdGF0CiAKIFBsYXRmb3JtTWVkaWEgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0CiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1NZWRpYSglcCkiLCB0aGlzKTsK
KyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBQbGF0Zm9ybU1lZGlhIHBtOwogICAg
IHBtLnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpBVkZvdW5kYXRpb25NZWRpYVBsYXllclR5cGU7CiAg
ICAgcG0ubWVkaWEuYXZmTWVkaWFQbGF5ZXIgPSBtX2F2UGxheWVyLmdldCgpOwpAQCAtMTMyNCw3
ICsxMzEyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAg
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybVBsYXko
KQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OnBsYXRmb3JtUGxheSglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsK
ICAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTMz
Niw3ICsxMzI0LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtUGF1c2Uo
KQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OnBsYXRmb3JtUGF1c2UoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7
CiAgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEz
NjcsNyArMTM1NSw3IEBAIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24K
ICAgICBpZiAoQ01USU1FX0lTX0lOREVGSU5JVEUoY21EdXJhdGlvbikpCiAgICAgICAgIHJldHVy
biBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7CiAKLSAgICBMT0coTWVkaWEsICJN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybUR1cmF0aW9uKCVwKSAt
IGludmFsaWQgZHVyYXRpb24sIHJldHVybmluZyAlcyIsIHRoaXMsIHRvU3RyaW5nKE1lZGlhVGlt
ZTo6aW52YWxpZFRpbWUoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJ
RklFUiwgInJldHVybmluZyBpbnZhbGlkIHRpbWUiKTsKICAgICByZXR1cm4gTWVkaWFUaW1lOjpp
bnZhbGlkVGltZSgpOwogfQogCkBAIC0xNDAxLDggKzEzODksNiBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgCiAgICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0
ZVdlYWtQdHIoKTsKIAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OnNlZWtUb1RpbWUoJXApIC0gY2FsbGluZyBzZWVrVG9UaW1lIiwgdGhpcyk7Ci0K
ICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgc2Vla1RvVGltZTpjbVRpbWUgdG9sZXJhbmNlQmVm
b3JlOmNtQmVmb3JlIHRvbGVyYW5jZUFmdGVyOmNtQWZ0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihC
T09MIGZpbmlzaGVkKSB7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzLCBmaW5p
c2hlZF0gewogICAgICAgICAgICAgYXV0byBfdGhpcyA9IHdlYWtUaGlzLmdldCgpOwpAQCAtMTQz
NCw3ICsxNDIwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgog
ICAgIGlmIChtX211dGVkID09IG11dGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVk
aWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRNdXRlZCglcCkgLSBz
ZXQgdG8gJXMiLCB0aGlzLCBib29sU3RyaW5nKG11dGVkKSk7CisgICAgSU5GT19MT0coTE9HSURF
TlRJRklFUiwgIi0gIiwgbXV0ZWQpOwogCiAgICAgbV9tdXRlZCA9IG11dGVkOwogCkBAIC0xNDUx
LDcgKzE0MzcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAg
ICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRDbG9zZWRDYXB0
aW9uc1Zpc2libGUoJXApIC0gc2V0IHRvICVzIiwgdGhpcywgYm9vbFN0cmluZyhjbG9zZWRDYXB0
aW9uc1Zpc2libGUpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAiLSAiLCBjbG9zZWRD
YXB0aW9uc1Zpc2libGUpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OnNldFJhdGVEb3VibGUoZG91YmxlIHJhdGUpCkBAIC0xNTkzLDEwICsxNTc5LDkgQEAg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpBc3NldFN0YQogICAgIGZvciAoTlNTdHJp
bmcgKmtleU5hbWUgaW4gYXNzZXRNZXRhZGF0YUtleU5hbWVzKCkpIHsKICAgICAgICAgTlNFcnJv
ciAqZXJyb3IgPSBuaWw7CiAgICAgICAgIEFWS2V5VmFsdWVTdGF0dXMga2V5U3RhdHVzID0gW21f
YXZBc3NldC5nZXQoKSBzdGF0dXNPZlZhbHVlRm9yS2V5OmtleU5hbWUgZXJyb3I6JmVycm9yXTsK
LSNpZiAhTE9HX0RJU0FCTEVECisKICAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgTE9H
KE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjphc3NldFN0YXR1cyAtIHN0
YXR1c09mVmFsdWVGb3JLZXkgZmFpbGVkIGZvciAlcywgZXJyb3IgPSAlcyIsIFtrZXlOYW1lIFVU
RjhTdHJpbmddLCBbW2Vycm9yIGxvY2FsaXplZERlc2NyaXB0aW9uXSBVVEY4U3RyaW5nXSk7Ci0j
ZW5kaWYKKyAgICAgICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAiZmFpbGVkIGZvciAi
LCBba2V5TmFtZSBVVEY4U3RyaW5nXSwgIiwgZXJyb3IgPSAiLCBbW2Vycm9yIGxvY2FsaXplZERl
c2NyaXB0aW9uXSBVVEY4U3RyaW5nXSk7CiAKICAgICAgICAgaWYgKGtleVN0YXR1cyA8IEFWS2V5
VmFsdWVTdGF0dXNMb2FkZWQpCiAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJBVkFzc2V0
U3RhdHVzTG9hZGluZzsvLyBBdCBsZWFzdCBvbmUga2V5IGlzIG5vdCBsb2FkZWQgeWV0LgpAQCAt
MTY3Niw3ICsxNjYxLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aElt
YWdlR2VuZXJhdG9yKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBhaW50V2l0aEltYWdlR2VuZXJhdG9yKCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExP
R0lERU5USUZJRVIpOwogCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gY3JlYXRl
SW1hZ2VGb3JUaW1lSW5SZWN0KGN1cnJlbnRUaW1lKCksIHJlY3QpOwogICAgIGlmIChpbWFnZSkg
ewpAQCAtMTY5NSwyNSArMTY4MCwyMCBAQCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gTWVkaWFQbGF5
ZXJQcml2YXRlCiAgICAgICAgIGNyZWF0ZUltYWdlR2VuZXJhdG9yKCk7CiAgICAgQVNTRVJUKG1f
aW1hZ2VHZW5lcmF0b3IpOwogCi0jaWYgIUxPR19ESVNBQkxFRAogICAgIGRvdWJsZSBzdGFydCA9
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotI2VuZGlmCiAKICAgICBbbV9pbWFnZUdl
bmVyYXRvci5nZXQoKSBzZXRNYXhpbXVtU2l6ZTpDR1NpemUocmVjdC5zaXplKCkpXTsKICAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gcmF3SW1hZ2UgPSBhZG9wdENGKFttX2ltYWdlR2VuZXJhdG9y
LmdldCgpIGNvcHlDR0ltYWdlQXRUaW1lOkNNVGltZU1ha2VXaXRoU2Vjb25kcyh0aW1lLCA2MDAp
IGFjdHVhbFRpbWU6bmlsIGVycm9yOm5pbF0pOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBp
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZUNvcHlXaXRoQ29sb3JTcGFjZShyYXdJbWFnZS5n
ZXQoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSkpOwogCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIGRv
dWJsZSBkdXJhdGlvbiA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gc3RhcnQ7Ci0g
ICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRl
SW1hZ2VGb3JUaW1lSW5SZWN0KCVwKSAtIGNyZWF0aW5nIGltYWdlIHRvb2sgJS40ZiIsIHRoaXMs
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZHVyYXRpb24pKTsKLSNlbmRpZgorICAgIGlmIChXSUxM
X0xPRyhXVEZMb2dMZXZlbEluZm8pKQorICAgICAgICBERUJVR19MT0coTE9HSURFTlRJRklFUiwg
ImNyZWF0aW5nIGltYWdlIHRvb2sgIiwgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBz
dGFydCk7CiAKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4mIHN1cHBvcnRlZFR5cGVzKQogewotICAgIExPRyhNZWRpYSwg
Ik1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmdldFN1cHBvcnRlZFR5cGVzIik7
CiAgICAgc3VwcG9ydGVkVHlwZXMgPSBBVkZvdW5kYXRpb25NSU1FVHlwZUNhY2hlOjpzaW5nbGV0
b24oKS50eXBlcygpOwogfSAKIApAQCAtMjA0Miw4ICsyMDIyLDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiAgICAgc2V0SGFzQ2xvc2VkQ2FwdGlvbnMoaGFz
Q2FwdGlvbnMpOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uOnRyYWNrc0NoYW5nZWQoJXApIC0gaGFzVmlkZW8gPSAlcywgaGFzQXVkaW8gPSAlcywgaGFz
Q2FwdGlvbnMgPSAlcyIsCi0gICAgICAgIHRoaXMsIGJvb2xTdHJpbmcoaGFzVmlkZW8oKSksIGJv
b2xTdHJpbmcoaGFzQXVkaW8oKSksIGJvb2xTdHJpbmcoaGFzQ2xvc2VkQ2FwdGlvbnMoKSkpOwor
ICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJoYXMgdmlkZW8gPSAiLCBoYXNWaWRlbygpLCAi
LCBoYXMgYXVkaW8gPSAiLCBoYXNBdWRpbygpLCAiLCBoYXMgY2FwdGlvbnMgPSAiLCBoYXNDbG9z
ZWRDYXB0aW9ucygpKTsKIAogICAgIHNpemVDaGFuZ2VkKCk7CiAKQEAgLTIxNzAsNyArMjE0OSw3
IEBAIHZvaWQgZGV0ZXJtaW5lQ2hhbmdlZFRyYWNrc0Zyb21OZXdUcmFja3MKIAogdm9pZCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRhdGVBdWRpb1RyYWNrcygpCiB7Ci0j
aWYgIUxPR19ESVNBQkxFRAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIHNpemVfdCBj
b3VudCA9IG1fYXVkaW9UcmFja3Muc2l6ZSgpOwogI2VuZGlmCiAKQEAgLTIxOTAsMTQgKzIxNjks
MTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGZvciAo
YXV0byYgdHJhY2sgOiBtX2F1ZGlvVHJhY2tzKQogICAgICAgICB0cmFjay0+cmVzZXRQcm9wZXJ0
aWVzRnJvbVRyYWNrKCk7CiAKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlQXVkaW9UcmFja3MoJXApIC0g
YXVkaW8gdHJhY2sgY291bnQgd2FzICVsdSwgaXMgJWx1IiwgdGhpcywgY291bnQsIG1fYXVkaW9U
cmFja3Muc2l6ZSgpKTsKLSNlbmRpZgorICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJ0cmFj
ayBjb3VudCB3YXMgIiwgY291bnQsICIsIGlzICIsIG1fYXVkaW9UcmFja3Muc2l6ZSgpKTsKIH0K
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRhdGVWaWRlb1Ry
YWNrcygpCiB7Ci0jaWYgIUxPR19ESVNBQkxFRAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAog
ICAgIHNpemVfdCBjb3VudCA9IG1fdmlkZW9UcmFja3Muc2l6ZSgpOwogI2VuZGlmCiAKQEAgLTIy
MTYsOSArMjE5Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoK
ICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9hdWRpb1RyYWNrcykKICAgICAgICAgdHJhY2stPnJl
c2V0UHJvcGVydGllc0Zyb21UcmFjaygpOwogCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0ZVZpZGVvVHJh
Y2tzKCVwKSAtIHZpZGVvIHRyYWNrIGNvdW50IHdhcyAlbHUsIGlzICVsdSIsIHRoaXMsIGNvdW50
LCBtX3ZpZGVvVHJhY2tzLnNpemUoKSk7Ci0jZW5kaWYKKyAgICBJTkZPX0xPRyhMT0dJREVOVElG
SUVSLCAidHJhY2sgY291bnQgd2FzICIsIGNvdW50LCAiLCBpcyAiLCBtX3ZpZGVvVHJhY2tzLnNp
emUoKSk7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cmVx
dWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpIGNvbnN0CkBAIC0yMzE4LDcgKzIyOTMsNyBA
QCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlVmlkZW9PdXRwdXQoKQogewotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVZp
ZGVvT3V0cHV0KCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAg
ICAgaWYgKCFtX2F2UGxheWVySXRlbSB8fCBtX3ZpZGVvT3V0cHV0KQogICAgICAgICByZXR1cm47
CkBAIC0yMzM0LDggKzIzMDksNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6CiAgICAgW21fdmlkZW9PdXRwdXQgc2V0RGVsZWdhdGU6bV92aWRlb091dHB1dERlbGVn
YXRlLmdldCgpIHF1ZXVlOmdsb2JhbFB1bGxEZWxlZ2F0ZVF1ZXVlKCldOwogCiAgICAgW21fYXZQ
bGF5ZXJJdGVtLmdldCgpIGFkZE91dHB1dDptX3ZpZGVvT3V0cHV0LmdldCgpXTsKLQotICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVZpZGVv
T3V0cHV0KCVwKSAtIHJldHVybmluZyAlcCIsIHRoaXMsIG1fdmlkZW9PdXRwdXQuZ2V0KCkpOwog
fQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmRlc3Ryb3lWaWRl
b091dHB1dCgpCkBAIC0yMzQ1LDcgKzIzMTgsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6CiAKICAgICBpZiAobV9hdlBsYXllckl0ZW0pCiAgICAgICAgIFttX2F2
UGxheWVySXRlbS5nZXQoKSByZW1vdmVPdXRwdXQ6bV92aWRlb091dHB1dC5nZXQoKV07Ci0gICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveVZp
ZGVvT3V0cHV0KCVwKSAtIGRlc3Ryb3lpbmcgICVwIiwgdGhpcywgbV92aWRlb091dHB1dC5nZXQo
KSk7CisKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKIAogICAgIG1fdmlkZW9PdXRwdXQg
PSAwOwogfQpAQCAtMjM5NywxNiArMjM3MSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6CiAgICAgICAgIG1fcGl4ZWxCdWZmZXJDb25mb3JtZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y+KChDRkRpY3Rpb25hcnlSZWYpYXR0cmli
dXRlcyk7CiAgICAgfQogCi0jaWYgIUxPR19ESVNBQkxFRAogICAgIGRvdWJsZSBzdGFydCA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotI2VuZGlmCi0KICAgICBtX2xhc3RJbWFnZSA9
IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXItPmNyZWF0ZUltYWdlRnJvbVBpeGVsQnVmZmVyKHBpeGVs
QnVmZmVyLmdldCgpKTsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICBkb3VibGUgZHVyYXRpb24g
PSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIHN0YXJ0OwotICAgIExPRyhNZWRpYSwg
Ik1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0ZUxhc3RJbWFnZSglcCkg
LSBjcmVhdGluZyBidWZmZXIgdG9vayAlLjRmIiwgdGhpcywgbmFycm93UHJlY2lzaW9uVG9GbG9h
dChkdXJhdGlvbikpOwotI2VuZGlmCisgICAgaWYgKFdJTExfTE9HKFdURkxvZ0xldmVsSW5mbykp
CisgICAgICAgIERFQlVHX0xPRyhMT0dJREVOVElGSUVSLCAiY3JlYXRpbmcgYnVmZmVyIHRvb2sg
IiwgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBzdGFydCk7CiB9CiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnRXaXRoVmlkZW9PdXRwdXQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIG91dHB1dFJlY3QpCkBAIC0y
NDIzLDcgKzIzOTEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
CiAgICAgaWYgKCFmaXJzdEVuYWJsZWRWaWRlb1RyYWNrKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludFdp
dGhWaWRlb091dHB1dCglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsK
IAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAg
ICBGbG9hdFJlY3QgaW1hZ2VSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChtX2xhc3RJbWFnZS5n
ZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQobV9sYXN0SW1hZ2UuZ2V0KCkpKTsKQEAgLTI0NDIsNyAr
MjQxMCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVPcGVuR0xWaWRlb091
dHB1dCgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzo6Y3JlYXRlT3BlbkdMVmlkZW9PdXRwdXQoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0co
TE9HSURFTlRJRklFUik7CiAKICAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtIHx8IG1fb3BlbkdMVmlk
ZW9PdXRwdXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTYsOCArMjQyNCw2IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBBU1NFUlQobV9vcGVuR0xWaWRl
b091dHB1dCk7CiAKICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT3V0cHV0Om1fb3BlbkdM
VmlkZW9PdXRwdXQuZ2V0KCldOwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlT3BlbkdMVmlkZW9PdXRwdXQoJXApIC0gcmV0dXJuaW5n
ICVwIiwgdGhpcywgbV9vcGVuR0xWaWRlb091dHB1dC5nZXQoKSk7CiB9CiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveU9wZW5HTFZpZGVvT3V0cHV0KCkK
QEAgLTI0NjUsOSArMjQzMSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6CiAgICAgaWYgKCFtX29wZW5HTFZpZGVvT3V0cHV0KQogICAgICAgICByZXR1cm47CiAK
KyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKKwogICAgIGlmIChtX2F2UGxheWVySXRlbSkK
ICAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIHJlbW92ZU91dHB1dDptX29wZW5HTFZpZGVv
T3V0cHV0LmdldCgpXTsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpkZXN0cm95T3BlbkdMVmlkZW9PdXRwdXQoJXApIC0gZGVzdHJveWluZyAgJXAi
LCB0aGlzLCBtX3ZpZGVvT3V0cHV0LmdldCgpKTsKIAogICAgIG1fb3BlbkdMVmlkZW9PdXRwdXQg
PSAwOwogfQpAQCAtMjUzMyw3ICsyNTAwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOgogICAgIGxvbmcgcmVzdWx0ID0gZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQo
bV92aWRlb091dHB1dFNlbWFwaG9yZSwgZGlzcGF0Y2hfdGltZSgwLCAxICogTlNFQ19QRVJfU0VD
KSk7CiAKICAgICBpZiAocmVzdWx0KQotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjp3YWl0Rm9yVmlkZW9PdXRwdXRNZWRpYURhdGFXaWxsQ2hh
bmdlKCVwKSB0aW1lZCBvdXQiLCB0aGlzKTsKKyAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJ
RVIsICJ0aW1lZCBvdXQiKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpvdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlKEFWUGxheWVySXRlbVZpZGVvT3V0cHV0
VHlwZSAqKQpAQCAtMjY4NCw3ICsyNjUxLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOgogewogICAgIEFWTWVkaWFTZWxlY3Rpb25Hcm91cFR5cGUgKmxlZ2libGVH
cm91cCA9IHNhZmVNZWRpYVNlbGVjdGlvbkdyb3VwRm9yTGVnaWJsZU1lZGlhKCk7CiAgICAgaWYg
KCFsZWdpYmxlR3JvdXApIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6cHJvY2Vzc01lZGlhU2VsZWN0aW9uT3B0aW9ucyglcCkgLSBuaWwg
bWVkaWFTZWxlY3Rpb25Hcm91cCIsIHRoaXMpOworICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElG
SUVSLCAibm8gbWVkaWFTZWxlY3Rpb25Hcm91cCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0yNzU4LDcgKzI3MjUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Zmx1c2hD
dWVzKCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpmbHVzaEN1ZXMoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7
CiAKICAgICBpZiAoIW1fY3VycmVudFRleHRUcmFjaykKICAgICAgICAgcmV0dXJuOwpAQCAtMjc3
Myw4ICsyNzQwLDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgog
ICAgIGlmIChtX2N1cnJlbnRUZXh0VHJhY2sgPT0gdHJhY2spCiAgICAgICAgIHJldHVybjsKIAot
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldEN1
cnJlbnRUZXh0VHJhY2soJXApIC0gc2VsZWN0aW5nIHRyYWNrICVwLCBsYW5ndWFnZSA9ICVzIiwg
dGhpcywgdHJhY2ssIHRyYWNrID8gdHJhY2stPmxhbmd1YWdlKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSA6ICIiKTsKLSAgICAgICAgCisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgInNlbGVj
dGluZyB0cmFjayB3aXRoIGxhbmd1YWdlICIsIHRyYWNrID8gdHJhY2stPmxhbmd1YWdlKCkgOiAi
Iik7CisKICAgICBtX2N1cnJlbnRUZXh0VHJhY2sgPSB0cmFjazsKIAogICAgIGlmICh0cmFjaykg
ewpAQCAtMjgyMCw3ICsyNzg3LDcgQEAgU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iagogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogICAgIGlmIChjdXJyZW50bHlT
ZWxlY3RlZEF1ZGlibGVPcHRpb24pIHsKICAgICAgICAgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlv
VHJhY2sgPSBbW2N1cnJlbnRseVNlbGVjdGVkQXVkaWJsZU9wdGlvbiBsb2NhbGVdIGxvY2FsZUlk
ZW50aWZpZXJdOwotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpsYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soJXApIC0gcmV0dXJuaW5nIGxh
bmd1YWdlIG9mIHNlbGVjdGVkIGF1ZGlibGUgb3B0aW9uOiAlcyIsIHRoaXMsIG1fbGFuZ3VhZ2VP
ZlByaW1hcnlBdWRpb1RyYWNrLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBJTkZPX0xPRyhMT0dJ
REVOVElGSUVSLCAibGFuZ3VhZ2Ugb2Ygc2VsZWN0ZWQgYXVkaWJsZSBvcHRpb24gIiwgbV9sYW5n
dWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2spOwogCiAgICAgICAgIHJldHVybiBtX2xhbmd1YWdlT2ZQ
cmltYXJ5QXVkaW9UcmFjazsKICAgICB9CkBAIC0yODMxLDE5ICsyNzk4LDE5IEBAIFN0cmluZyBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmoKICAgICBOU0FycmF5ICp0cmFja3MgPSBb
bV9hdkFzc2V0LmdldCgpIHRyYWNrc1dpdGhNZWRpYVR5cGU6QVZNZWRpYVR5cGVBdWRpb107CiAg
ICAgaWYgKCF0cmFja3MgfHwgW3RyYWNrcyBjb3VudF0gIT0gMSkgewogICAgICAgICBtX2xhbmd1
YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayA9IGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIExPRyhNZWRp
YSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omxhbmd1YWdlT2ZQcmltYXJ5
QXVkaW9UcmFjayglcCkgLSAlbHUgYXVkaW8gdHJhY2tzLCByZXR1cm5pbmcgZW1wdHlTdHJpbmco
KSIsIHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHRyYWNrcyA/IFt0cmFja3MgY291
bnRdIDogMCkpOworICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCB0cmFja3MgPyBbdHJh
Y2tzIGNvdW50XSA6IDAsICIgYXVkaW8gdHJhY2tzLCByZXR1cm5pbmcgZW1wdHkiKTsKICAgICAg
ICAgcmV0dXJuIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrOwogICAgIH0KIAogICAgIEFW
QXNzZXRUcmFjayAqdHJhY2sgPSBbdHJhY2tzIG9iamVjdEF0SW5kZXg6MF07CiAgICAgbV9sYW5n
dWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2sgPSBBVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsOjpsYW5n
dWFnZUZvckFWQXNzZXRUcmFjayh0cmFjayk7CiAKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgaWYg
KG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrID09IGVtcHR5U3RyaW5nKCkpCi0gICAgICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omxhbmd1YWdl
T2ZQcmltYXJ5QXVkaW9UcmFjayglcCkgLSBzaW5nbGUgYXVkaW8gdHJhY2sgaGFzIG5vIGxhbmd1
YWdlLCByZXR1cm5pbmcgZW1wdHlTdHJpbmcoKSIsIHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bGFuZ3VhZ2VP
ZlByaW1hcnlBdWRpb1RyYWNrKCVwKSAtIHJldHVybmluZyBsYW5ndWFnZSBvZiBzaW5nbGUgYXVk
aW8gdHJhY2s6ICVzIiwgdGhpcywgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2sudXRmOCgp
LmRhdGEoKSk7Ci0jZW5kaWYKKyAgICBpZiAoV0lMTF9MT0coV1RGTG9nTGV2ZWxJbmZvKSkgewor
ICAgICAgICBpZiAobV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2sgPT0gZW1wdHlTdHJpbmco
KSkKKyAgICAgICAgICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJzaW5nbGUgYXVkaW8gdHJh
Y2sgaGFzIG5vIGxhbmd1YWdlIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIElORk9fTE9H
KExPR0lERU5USUZJRVIsICJzaW5nbGUgYXVkaW8gdHJhY2sgaGFzIGxhbmd1YWdlICIsIG1fbGFu
Z3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKTsKKyAgICB9CiAKICAgICByZXR1cm4gbV9sYW5ndWFn
ZU9mUHJpbWFyeUF1ZGlvVHJhY2s7CiB9CkBAIC0yODY0LDcgKzI4MzEsNyBAQCBib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgd2lyZWxlc3NUYXJnZXQgPSBtX2F2
UGxheWVyICYmIG1fYXZQbGF5ZXIuZ2V0KCkuZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZTsKICNlbmRp
ZgogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcyglcCkgLSByZXR1cm5pbmcgJXMiLCB0aGlz
LCBib29sU3RyaW5nKHdpcmVsZXNzVGFyZ2V0KSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklF
UiwgIi0gIiwgd2lyZWxlc3NUYXJnZXQpOwogCiAgICAgcmV0dXJuIHdpcmVsZXNzVGFyZ2V0Owog
fQpAQCAtMjkwNCw3ICsyODcxLDYgQEAgU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iagogI2Vsc2UKICAgICB3aXJlbGVzc1RhcmdldE5hbWUgPSB3a0V4ZXJuYWxEZXZpY2VE
aXNwbGF5TmFtZUZvclBsYXllcihtX2F2UGxheWVyLmdldCgpKTsKICNlbmRpZgotICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OndpcmVsZXNzUGxheWJh
Y2tUYXJnZXROYW1lKCVwKSAtIHJldHVybmluZyAlcyIsIHRoaXMsIHdpcmVsZXNzVGFyZ2V0TmFt
ZS51dGY4KCkuZGF0YSgpKTsKIAogICAgIHJldHVybiB3aXJlbGVzc1RhcmdldE5hbWU7CiB9CkBA
IC0yOTE1LDE0ICsyODgxLDE0IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKICAgICAgICAgcmV0dXJuICFtX2FsbG93c1dpcmVsZXNzVmlkZW9QbGF5YmFjazsKIAog
ICAgIG1fYWxsb3dzV2lyZWxlc3NWaWRlb1BsYXliYWNrID0gW21fYXZQbGF5ZXIuZ2V0KCkgYWxs
b3dzRXh0ZXJuYWxQbGF5YmFja107Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoJXApIC0gcmV0
dXJuaW5nICVzIiwgdGhpcywgYm9vbFN0cmluZyghbV9hbGxvd3NXaXJlbGVzc1ZpZGVvUGxheWJh
Y2spKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAiLSAiLCAhbV9hbGxvd3NXaXJlbGVz
c1ZpZGVvUGxheWJhY2spOwogCiAgICAgcmV0dXJuICFtX2FsbG93c1dpcmVsZXNzVmlkZW9QbGF5
YmFjazsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRX
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZChib29sIGRpc2FibGVkKQogewotICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkKCVwKSAtICVzIiwgdGhpcywgYm9vbFN0cmluZyhkaXNhYmxlZCkp
OworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIsIGRpc2FibGVkKTsKICAgICBtX2Fs
bG93c1dpcmVsZXNzVmlkZW9QbGF5YmFjayA9ICFkaXNhYmxlZDsKICAgICBpZiAoIW1fYXZQbGF5
ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTI5NDAsNyArMjkwNiw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogICAgIG1fb3V0cHV0Q29udGV4dCA9IG1fcGxh
eWJhY2tUYXJnZXQtPnRhcmdldFR5cGUoKSA9PSBNZWRpYVBsYXliYWNrVGFyZ2V0OjpBVkZvdW5k
YXRpb24gPyB0b01lZGlhUGxheWJhY2tUYXJnZXRNYWMobV9wbGF5YmFja1RhcmdldC5nZXQoKSkt
Pm91dHB1dENvbnRleHQoKSA6IG51bGxwdHI7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCVwKSAt
IHRhcmdldCA9ICVwLCBkZXZpY2UgbmFtZSA9ICVzIiwgdGhpcywgbV9vdXRwdXRDb250ZXh0Lmdl
dCgpLCBtX3BsYXliYWNrVGFyZ2V0LT5kZXZpY2VOYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
SU5GT19MT0coTE9HSURFTlRJRklFUik7CiAKICAgICBpZiAoIW1fcGxheWJhY2tUYXJnZXQtPmhh
c0FjdGl2ZVJvdXRlKCkpCiAgICAgICAgIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGZh
bHNlKTsKQEAgLTI5NTYsMTEgKzI5MjIsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOgogICAgIGlmICghbV9wbGF5YmFja1RhcmdldCkKICAgICAgICAgcmV0dXJu
OwogCisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIi0gIiwgc2hvdWxkUGxheSk7CisKICAg
ICBpZiAobV9wbGF5YmFja1RhcmdldC0+dGFyZ2V0VHlwZSgpID09IE1lZGlhUGxheWJhY2tUYXJn
ZXQ6OkFWRm91bmRhdGlvbikgewogICAgICAgICBBVk91dHB1dENvbnRleHQgKm5ld0NvbnRleHQg
PSBzaG91bGRQbGF5ID8gbV9vdXRwdXRDb250ZXh0LmdldCgpIDogbmlsOwogCi0gICAgICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFNob3VsZFBs
YXlUb1BsYXliYWNrVGFyZ2V0KCVwKSAtIHRhcmdldCA9ICVwLCBzaG91bGRQbGF5ID0gJXMiLCB0
aGlzLCBuZXdDb250ZXh0LCBib29sU3RyaW5nKHNob3VsZFBsYXkpKTsKLQogICAgICAgICBpZiAo
IW1fYXZQbGF5ZXIpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTI5NzcsOCArMjk0Myw2IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogICAgIEFTU0VSVCht
X3BsYXliYWNrVGFyZ2V0LT50YXJnZXRUeXBlKCkgPT0gTWVkaWFQbGF5YmFja1RhcmdldDo6TW9j
ayk7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCglcCkgLSB0YXJnZXQgPSB7TW9ja30sIHNo
b3VsZFBsYXkgPSAlcyIsIHRoaXMsIGJvb2xTdHJpbmcoc2hvdWxkUGxheSkpOwotCiAgICAgc2V0
RGVsYXlDYWxsYmFja3ModHJ1ZSk7CiAgICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIo
KTsKICAgICBzY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb24oW3dlYWtUaGlzXSB7CkBAIC0zMDg0LDcgKzMwNDgs
OCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0U2hvdWxkQnVmZmVyRGF0YShib29s
IHNob3VsZEJ1ZmZlcikKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpzaG91bGRCdWZmZXJEYXRhKCVwKSAtICVzIiwgdGhpcywgYm9vbFN0cmlu
ZyhzaG91bGRCdWZmZXIpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAiLSAiLCBzaG91
bGRCdWZmZXIpOworCiAgICAgaWYgKG1fc2hvdWxkQnVmZmVyRGF0YSA9PSBzaG91bGRCdWZmZXIp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMzEyNiw3ICszMDkxLDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogewogICAgIG1fY3VycmVudE1ldGFEYXRhID0gbWV0
YWRhdGEgJiYgIVttZXRhZGF0YSBpc0tpbmRPZkNsYXNzOltOU051bGwgY2xhc3NdXSA/IG1ldGFk
YXRhIDogbmlsOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6bWV0YWRhdGFEaWRBcnJpdmUoJXApIC0gYWRkaW5nICVpIGN1ZXMgYXQgdGltZSAl
cyIsIHRoaXMsIG1fY3VycmVudE1ldGFEYXRhID8gc3RhdGljX2Nhc3Q8aW50PihbbV9jdXJyZW50
TWV0YURhdGEuZ2V0KCkgY291bnRdKSA6IDAsIHRvU3RyaW5nKG1lZGlhVGltZSkudXRmOCgpLmRh
dGEoKSk7CisgICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIsICJhZGRpbmcgIiwgbV9jdXJyZW50
TWV0YURhdGEgPyBbbV9jdXJyZW50TWV0YURhdGEuZ2V0KCkgY291bnRdIDogMCwgIiBhdCB0aW1l
ICIsIG1lZGlhVGltZSk7CiAKICNpZiBFTkFCTEUoREFUQUNVRV9WQUxVRSkKICAgICBpZiAoc2Vl
a2luZygpKQpAQCAtMzM2OSwxNiArMzMzNCw3IEBAIC0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5
UGF0aDprZXlQYXRoIG8KICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCB3aWxsQ2hhbmdlID0g
W1tjaGFuZ2UgdmFsdWVGb3JLZXk6TlNLZXlWYWx1ZUNoYW5nZU5vdGlmaWNhdGlvbklzUHJpb3JL
ZXldIGJvb2xWYWx1ZV07Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgaWYgKHdpbGxDaGFuZ2Up
Ci0gICAgICAgIExPRyhNZWRpYSwgIldlYkNvcmVBVkZNb3ZpZU9ic2VydmVyOjpvYnNlcnZlVmFs
dWVGb3JLZXlQYXRoKCVwKSAtIHdpbGwgY2hhbmdlLCBrZXlQYXRoID0gJXMiLCBzZWxmLCBba2V5
UGF0aCBVVEY4U3RyaW5nXSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gdmFsdWVTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRm9ybWF0
OkAiJUAiLCBuZXdWYWx1ZV0pOwotICAgICAgICBMT0coTWVkaWEsICJXZWJDb3JlQVZGTW92aWVP
YnNlcnZlcjo6b2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aCglcCkgLSBkaWQgY2hhbmdlLCBrZXlQYXRo
ID0gJXMsIHZhbHVlID0gJXMiLCBzZWxmLCBba2V5UGF0aCBVVEY4U3RyaW5nXSwgW3ZhbHVlU3Ry
aW5nLmdldCgpIFVURjhTdHJpbmddKTsKLSAgICB9Ci0jZW5kaWYKLQorICAgIGJvb2wgc2hvdWxk
TG9nVmFsdWUgPSB0cnVlOwogICAgIFdURjo6RnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb247CiAK
ICAgICBpZiAoY29udGV4dCA9PSBNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29u
dGV4dEFWUGxheWVyTGF5ZXIpIHsKQEAgLTM0MTAsMTUgKzMzNjYsMTkgQEAgLSAodm9pZClvYnNl
cnZlVmFsdWVGb3JLZXlQYXRoOmtleVBhdGggbwogICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6
OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXliYWNrQnVmZmVy
RW1wdHlEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFtuZXdWYWx1ZSBib29sVmFsdWVdKTsKICAgICAg
ICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAicGxheWJhY2tCdWZmZXJGdWxs
Il0pCiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6cGxheWJhY2tCdWZmZXJGdWxsRGlkQ2hhbmdlLCBtX2NhbGxiYWNr
LCBbbmV3VmFsdWUgYm9vbFZhbHVlXSk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1
YWxUb1N0cmluZzpAImFzc2V0Il0pCisgICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxU
b1N0cmluZzpAImFzc2V0Il0pIHsKICAgICAgICAgICAgIGZ1bmN0aW9uID0gc3RkOjpiaW5kKCZN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRBc3NldCwgbV9jYWxsYmFjaywg
UmV0YWluUHRyPGlkPihuZXdWYWx1ZSkpOwotICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0Vx
dWFsVG9TdHJpbmc6QCJsb2FkZWRUaW1lUmFuZ2VzIl0pCisgICAgICAgICAgICBzaG91bGRMb2dW
YWx1ZSA9IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmlu
ZzpAImxvYWRlZFRpbWVSYW5nZXMiXSkgewogICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJp
bmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmxvYWRlZFRpbWVSYW5nZXNE
aWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFJldGFpblB0cjxOU0FycmF5PihuZXdWYWx1ZSkpOwotICAg
ICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJzZWVrYWJsZVRpbWVSYW5n
ZXMiXSkKKyAgICAgICAgICAgIHNob3VsZExvZ1ZhbHVlID0gZmFsc2U7CisgICAgICAgIH0gZWxz
ZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAic2Vla2FibGVUaW1lUmFuZ2VzIl0pIHsK
ICAgICAgICAgICAgIGZ1bmN0aW9uID0gc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpzZWVrYWJsZVRpbWVSYW5nZXNEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFJl
dGFpblB0cjxOU0FycmF5PihuZXdWYWx1ZSkpOwotICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBp
c0VxdWFsVG9TdHJpbmc6QCJ0cmFja3MiXSkKKyAgICAgICAgICAgIHNob3VsZExvZ1ZhbHVlID0g
ZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAidHJh
Y2tzIl0pIHsKICAgICAgICAgICAgIGZ1bmN0aW9uID0gc3RkOjpiaW5kKCZNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjp0cmFja3NEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFJldGFp
blB0cjxOU0FycmF5PihuZXdWYWx1ZSkpOwotICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0Vx
dWFsVG9TdHJpbmc6QCJoYXNFbmFibGVkQXVkaW8iXSkKKyAgICAgICAgICAgIHNob3VsZExvZ1Zh
bHVlID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5n
OkAiaGFzRW5hYmxlZEF1ZGlvIl0pCiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6YmluZCgm
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6aGFzRW5hYmxlZEF1ZGlvRGlkQ2hh
bmdlLCBtX2NhbGxiYWNrLCBbbmV3VmFsdWUgYm9vbFZhbHVlXSk7CiAgICAgICAgIGVsc2UgaWYg
KFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInByZXNlbnRhdGlvblNpemUiXSkKICAgICAgICAg
ICAgIGZ1bmN0aW9uID0gc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpwcmVzZW50YXRpb25TaXplRGlkQ2hhbmdlLCBtX2NhbGxiYWNrLCBGbG9hdFNpemUoW25l
d1ZhbHVlIHNpemVWYWx1ZV0pKTsKQEAgLTM0MzAsNiArMzM5MCw3IEBAIC0gKHZvaWQpb2JzZXJ2
ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG8KICAgICAgICAgICAgIGlmIChDTVRJTUVfSVNfTlVN
RVJJQyhpdGVtVGltZSkpCiAgICAgICAgICAgICAgICAgbm93ID0gc3RkOjptYXgodG9NZWRpYVRp
bWUoaXRlbVRpbWUpLCBNZWRpYVRpbWU6Onplcm9UaW1lKCkpOwogICAgICAgICAgICAgZnVuY3Rp
b24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om1ldGFk
YXRhRGlkQXJyaXZlLCBtX2NhbGxiYWNrLCBSZXRhaW5QdHI8TlNBcnJheT4obmV3VmFsdWUpLCBu
b3cpOworICAgICAgICAgICAgc2hvdWxkTG9nVmFsdWUgPSBmYWxzZTsKICAgICAgICAgfSBlbHNl
IGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJjYW5QbGF5RmFzdFJldmVyc2UiXSkKICAg
ICAgICAgICAgIGZ1bmN0aW9uID0gc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpjYW5QbGF5RmFzdFJldmVyc2VEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFtuZXdW
YWx1ZSBib29sVmFsdWVdKTsKICAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3Ry
aW5nOkAiY2FuUGxheUZhc3RGb3J3YXJkIl0pCkBAIC0zNDQ5LDcgKzM0MTAsMjYgQEAgLSAodm9p
ZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOmtleVBhdGggbwogICAgICAgICAgICAgZnVuY3Rpb24g
PSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om91dHB1dE9i
c2N1cmVkRHVlVG9JbnN1ZmZpY2llbnRFeHRlcm5hbFByb3RlY3Rpb25DaGFuZ2VkLCBtX2NhbGxi
YWNrLCBbbmV3VmFsdWUgYm9vbFZhbHVlXSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisKKyNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAobV9jYWxsYmFjay0+bG9nZ2VyKCkud2lsbExv
ZyhtX2NhbGxiYWNrLT5sb2dDaGFubmVsKCksIFdURkxvZ0xldmVsRGVidWcpKSB7CisKKyAgICAg
ICAgaWYgKHdpbGxDaGFuZ2UpCisgICAgICAgICAgICBtX2NhbGxiYWNrLT5sb2dnZXIoKS5kZWJ1
ZyhtX2NhbGxiYWNrLT5sb2dDaGFubmVsKCksIFBBTDo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmll
cigiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIiwgIm9ic2VydmVWYWx1ZUZvcktleVBh
dGgiLCBtX2NhbGxiYWNrLT5sb2dJZGVudGlmaWVyKCkpLCAid2lsbCBjaGFuZ2UgJyIsIFtrZXlQ
YXRoIFVURjhTdHJpbmddLCAiJyIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRMb2dWYWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChba2V5UGF0aCBpc0VxdWFsVG9T
dHJpbmc6QCJkdXJhdGlvbiJdKQorICAgICAgICAgICAgICAgICAgICBtX2NhbGxiYWNrLT5sb2dn
ZXIoKS5kZWJ1ZyhtX2NhbGxiYWNrLT5sb2dDaGFubmVsKCksIFBBTDo6TG9nZ2VyOjpMb2dTaXRl
SWRlbnRpZmllcigiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIiwgIm9ic2VydmVWYWx1
ZUZvcktleVBhdGgiLCBtX2NhbGxiYWNrLT5sb2dJZGVudGlmaWVyKCkpLCAiZGlkIGNoYW5nZSAn
IiwgW2tleVBhdGggVVRGOFN0cmluZ10sICInIHRvICIsIHRvTWVkaWFUaW1lKFtuZXdWYWx1ZSBD
TVRpbWVWYWx1ZV0pKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgUmV0YWluUHRyPE5TU3RyaW5nPiB2YWx1ZVN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBh
bGxvY10gaW5pdFdpdGhGb3JtYXQ6QCIlQCIsIG5ld1ZhbHVlXSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fY2FsbGJhY2stPmxvZ2dlcigpLmRlYnVnKG1fY2FsbGJhY2stPmxvZ0NoYW5uZWwoKSwg
UEFMOjpMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKCJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb24iLCAib2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aCIsIG1fY2FsbGJhY2stPmxvZ0lkZW50aWZp
ZXIoKSksICJkaWQgY2hhbmdlICciLCBba2V5UGF0aCBVVEY4U3RyaW5nXSwgIicgdG8gIiwgW3Zh
bHVlU3RyaW5nLmdldCgpIFVURjhTdHJpbmddKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtX2NhbGxiYWNrLT5sb2dnZXIoKS5kZWJ1Zyht
X2NhbGxiYWNrLT5sb2dDaGFubmVsKCksIFBBTDo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcigi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIiwgIm9ic2VydmVWYWx1ZUZvcktleVBhdGgi
LCBtX2NhbGxiYWNrLT5sb2dJZGVudGlmaWVyKCkpLCAiZGlkIGNoYW5nZSAnIiwgW2tleVBhdGgg
VVRGOFN0cmluZ10sICInIik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIGlmICgh
ZnVuY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320430</attachid>
            <date>2017-09-11 08:50:50 -0700</date>
            <delta_ts>2017-09-13 13:03:18 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>avfoundation_logging_patch_4.txt</filename>
            <type>text/plain</type>
            <size>59909</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisyMDE3LTA5LTEwICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN3aXRjaCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24gdG8gcmVsZWFzZSBsb2dnaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2MjEKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzM0MzM1MzExPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bnVsbExvZ2dl
cik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bWVkaWFQbGF5ZXJMb2dnZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyQ2xpZW50OjptZWRpYVBsYXllckxvZ2dlcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6fk1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnNldFVwVmlkZW9SZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp0ZWFyRG93blZpZGVvUmVuZGVyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXlhYmlsaXR5
S25vd24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjpwcmVwYXJlVG9QbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6ZHVyYXRpb25NZWRpYVRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWVrV2l0aFRvbGVyYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldE5hdHVy
YWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6bWF4TWVkaWFUaW1lU2Vla2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptaW5NZWRpYVRpbWVTZWVrYWJsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnVwZGF0ZVN0
YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OnJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6dGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpzZWVrQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6aW52YWxpZGF0ZUNhY2hlZER1cmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0UHJlbG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1h
aW5UaHJlYWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246OnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmRpc3BhdGNoTm90aWZpY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
cHJvY2Vzc05ld0FuZFJlbW92ZWRUZXh0VHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9nQ2hhbm5lbCBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
Ojpsb2dDbGFzc05hbWUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2xlYXJNZWRpYUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNsZWFyTWVkaWFDYWNoZUZvck9y
aWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpjcmVhdGVJbWFnZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95SW1hZ2VHZW5lcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6Y3JlYXRlQVZQbGF5ZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95VmlkZW9MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9y
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmNyZWF0ZUFWUGxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVySXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjaGVja1BsYXlhYmlsaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmJl
Z2luTG9hZGluZ01ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTWVkaWEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1QbGF5KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRm
b3JtUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6cGxhdGZvcm1EdXJhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldE11dGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldENs
b3NlZENhcHRpb25zVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjphc3NldFN0YXR1cyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludFdpdGhJbWFnZUdlbmVy
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpjcmVhdGVJbWFnZUZvclRpbWVJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dHJhY2tzQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjp1cGRhdGVBdWRpb1RyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRhdGVWaWRlb1RyYWNrcyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVWaWRlb091dHB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpkZXN0cm95VmlkZW9PdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlTGFzdEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aFZpZGVvT3V0cHV0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OmNyZWF0ZU9wZW5HTFZpZGVvT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmRlc3Ryb3lPcGVuR0xWaWRlb091dHB1dCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp3YWl0Rm9y
VmlkZW9PdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnByb2Nlc3NNZWRpYVNlbGVjdGlvbk9wdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6Zmx1c2hDdWVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnNldEN1cnJlbnRUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1Ry
YWNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2lyZWxlc3NQ
bGF5YmFja1RhcmdldE5hbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0V2lyZWxlc3NQbGF5YmFja1Rh
cmdldCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRTaG91bGRCdWZmZXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om1l
dGFkYXRhRGlkQXJyaXZlKToKKyAgICAgICAgKC1bV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgb2Jz
ZXJ2ZVZhbHVlRm9yS2V5UGF0aDpvZk9iamVjdDpjaGFuZ2U6Y29udGV4dDpdKToKKyAgICAgICAg
KFdlYkNvcmU6OmJvb2xTdHJpbmcpOiBEZWxldGVkLgorCiAyMDE3LTA5LTA2ICBKb3NlcGggUGVj
b3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgRmV0Y2gncyBSZXNwb25zZS5z
dGF0dXNUZXh0IGlzIHVuZXhwZWN0ZWRseSB0aGUgZnVsbCBodHRwIHN0YXR1cyBsaW5lIGZvciBI
VFRQLzIgcmVzcG9uc2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTcxNykK
KysrIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAxNy0wOS0xMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNv
bT4KKworICAgICAgICBTd2l0Y2ggTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIHRvIHJl
bGVhc2UgbG9nZ2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc2NjIxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDMzNTMxMT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhbC9Mb2dnZXIuaDoK
KyAgICAgICAgKFBBTDo6TG9nQXJndW1lbnQ6OnRvU3RyaW5nKToKKyAgICAgICAgKiBwYWwvTG9n
Z2VySGVscGVyLmg6CisKIDIwMTctMDktMDYgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmVxdWlyZSBMb2dnaW5nSGVscGVyIG92ZXJyaWRlcyB0byBw
cm92aWRlIGlkZW50aWZpZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvTG9nZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIuaAkocmV2aXNpb24g
MjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IExvZ0FyZ3Vt
ZW50IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBib29sPjo6dmFsdWUsIFN0cmluZz46OnR5cGUgdG9T
dHJpbmcoYm9vbCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgPyBBU0NJSUxpdGVyYWwoInRy
dWUiKSA6IEFTQ0lJTGl0ZXJhbCgiZmFsc2UiKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUg
PSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUsIGludD46
OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGludCBhcmd1bWVudCkgeyByZXR1cm4gU3Ry
aW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0
YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgdW5zaWduZWQ+Ojp2
YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyh1bnNpZ25lZCBhcmd1bWVudCkgeyByZXR1cm4g
U3RyaW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+
IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgdW5zaWduZWQg
bG9uZz46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKHVuc2lnbmVkIGxvbmcgYXJndW1l
bnQpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKGFyZ3VtZW50KTsgfQogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PFUsIGZsb2F0Pjo6dmFsdWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmcoZmxvYXQgYXJndW1lbnQp
IHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKGFyZ3VtZW50KTsgfQogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUs
IGRvdWJsZT46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGRvdWJsZSBhcmd1bWVudCkg
eyByZXR1cm4gU3RyaW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVSA9IFQ+IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8dHlw
ZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFU+Ojp0eXBlLCBBdG9taWNTdHJpbmc+Ojp2YWx1
ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhBdG9taWNTdHJpbmcgYXJndW1lbnQpIHsgcmV0dXJu
IGFyZ3VtZW50LnN0cmluZygpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0xvZ2dl
ckhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvTG9nZ2VySGVs
cGVyLmgJKHJldmlzaW9uIDIyMTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvTG9nZ2Vy
SGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogbmFtZXNwYWNlIFBB
TCB7CiAKK2NsYXNzIExvZ2dlcjsKKwogY2xhc3MgTG9nZ2VySGVscGVyIHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5Mb2dnZXJIZWxwZXIoKSA9IGRlZmF1bHQ7CkBAIC0zOSw3ICs0MSw3IEBAIHB1
YmxpYzoKIAogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogCi0jZGVmaW5lIExPR0lERU5USUZJ
RVIgTG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcihsb2dDbGFzc05hbWUoKSwgX19mdW5jX18sIGxv
Z0lkZW50aWZpZXIoKSkKKyNkZWZpbmUgTE9HSURFTlRJRklFUiBQQUw6OkxvZ2dlcjo6TG9nU2l0
ZUlkZW50aWZpZXIobG9nQ2xhc3NOYW1lKCksIF9fZnVuY19fLCBsb2dJZGVudGlmaWVyKCkpCiAK
ICNkZWZpbmUgQUxXQVlTX0xPRyguLi4pICAgICBsb2dnZXIoKS5sb2dBbHdheXMobG9nQ2hhbm5l
bCgpLCBfX1ZBX0FSR1NfXykKICNkZWZpbmUgRVJST1JfTE9HKC4uLikgICAgICBsb2dnZXIoKS5l
cnJvcihsb2dDaGFubmVsKCksIF9fVkFfQVJHU19fKQpAQCAtNDcsNiArNDksNyBAQCBwdWJsaWM6
CiAjZGVmaW5lIE5PVElDRV9MT0coLi4uKSAgICAgbG9nZ2VyKCkubm90aWNlKGxvZ0NoYW5uZWwo
KSwgX19WQV9BUkdTX18pCiAjZGVmaW5lIElORk9fTE9HKC4uLikgICAgICAgbG9nZ2VyKCkuaW5m
byhsb2dDaGFubmVsKCksIF9fVkFfQVJHU19fKQogI2RlZmluZSBERUJVR19MT0coLi4uKSAgICAg
IGxvZ2dlcigpLmRlYnVnKGxvZ0NoYW5uZWwoKSwgX19WQV9BUkdTX18pCisjZGVmaW5lIFdJTExf
TE9HKF9sZXZlbF8pICAgbG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIF9sZXZlbF8pCiAK
ICNlbHNlCiAKQEAgLTU5LDYgKzYyLDcgQEAgcHVibGljOgogI2RlZmluZSBOT1RJQ0VfTE9HKC4u
LikgICAgICgodm9pZCkwKQogI2RlZmluZSBJTkZPX0xPRyguLi4pICAgICAgICgodm9pZCkwKQog
I2RlZmluZSBERUJVR19MT0coLi4uKSAgICAgICgodm9pZCkwKQorI2RlZmluZSBXSUxMX0xPRyhf
bGV2ZWxfKSAgIGZhbHNlCiAKICNlbmRpZgogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDIyMTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTksNiArODk5LDkgQEAg
cHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiSFRNTE1lZGlhRWxlbWVudCI7IH0KICAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVy
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4obV9s
b2dJZGVudGlmaWVyKTsgfQogICAgIFdURkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBm
aW5hbDsKKworICAgIGNvbnN0IHZvaWQqIG1lZGlhUGxheWVyTG9nSWRlbnRpZmllcigpIGZpbmFs
IHsgcmV0dXJuIGxvZ0lkZW50aWZpZXIoKTsgfQorICAgIGNvbnN0IFBBTDo6TG9nZ2VyKiBtZWRp
YVBsYXllckxvZ2dlcigpIGZpbmFsIHsgcmV0dXJuICZsb2dnZXIoKTsgfQogI2VuZGlmCiAKICAg
ICBib29sIHdpbGxMb2coV1RGTG9nTGV2ZWwpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkocmV2aXNpb24gMjIxNzE3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDg3LDYgKzE0ODcsMjggQEAgYm9vbCBNZWRpYVBsYXllcjo6c2hv
dWxkQ2hlY2tIYXJkd2FyZVN1cAogICAgIHJldHVybiBjbGllbnQoKS5tZWRpYVBsYXllclNob3Vs
ZENoZWNrSGFyZHdhcmVTdXBwb3J0KCk7CiB9CiAKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
K3N0YXRpYyBSZWZQdHI8UEFMOjpMb2dnZXI+JiBudWxsTG9nZ2VyKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPFBBTDo6TG9nZ2VyPj4gbG9nZ2VyOworICAgIHJldHVybiBs
b2dnZXI7Cit9CisKK2NvbnN0IFBBTDo6TG9nZ2VyJiBNZWRpYVBsYXllcjo6bWVkaWFQbGF5ZXJM
b2dnZXIoKQoreworICAgIGF1dG8gbG9nZ2VyID0gY2xpZW50KCkubWVkaWFQbGF5ZXJMb2dnZXIo
KTsKKyAgICBpZiAobG9nZ2VyKQorICAgICAgICByZXR1cm4gKmxvZ2dlcjsKKworICAgIGlmICgh
bnVsbExvZ2dlcigpLmdldCgpKSB7CisgICAgICAgIG51bGxMb2dnZXIoKSA9IFBBTDo6TG9nZ2Vy
OjpjcmVhdGUodGhpcyk7CisgICAgICAgIG51bGxMb2dnZXIoKS0+c2V0RW5hYmxlZCh0aGlzLCBm
YWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuICpudWxsTG9nZ2VyKCkuZ2V0KCk7Cit9CisjZW5k
aWYKKwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiAr
NDQsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlIDxwYWwvTG9nZ2Vy
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTI5OSw2ICszMDAsMTEgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBtZWRpYVBsYXllclNob3VsZERpc2FibGVTbGVlcCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8Q29udGVudFR5
cGU+JiBtZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBtZWRpYVBsYXllclNob3VsZENoZWNrSGFyZHdhcmVTdXBwb3J0KCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAg
IHZpcnR1YWwgY29uc3Qgdm9pZCogbWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKCkgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHZpcnR1YWwgY29uc3QgUEFMOjpMb2dnZXIqIG1lZGlhUGxheWVyTG9n
Z2VyKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmCiB9OwogCiBjbGFzcyBNZWRpYVBsYXll
clN1cHBvcnRzVHlwZUNsaWVudCB7CkBAIC02MjYsNiArNjMyLDExIEBAIHB1YmxpYzoKICAgICBj
b25zdCBWZWN0b3I8Q29udGVudFR5cGU+JiBtZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3
YXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkQ2hlY2tIYXJkd2FyZVN1cHBvcnQo
KSBjb25zdDsKIAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGNvbnN0IFBBTDo6TG9n
Z2VyJiBtZWRpYVBsYXllckxvZ2dlcigpOworICAgIGNvbnN0IHZvaWQqIG1lZGlhUGxheWVyTG9n
SWRlbnRpZmllcigpIHsgcmV0dXJuIGNsaWVudCgpLm1lZGlhUGxheWVyTG9nSWRlbnRpZmllcigp
OyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVu
dCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uLmNwcAkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJVUkwu
aCIKICNpbmNsdWRlIDxDb3JlTWVkaWEvQ29yZU1lZGlhLmg+CiAjaW5jbHVkZSA8aGVhcC9IZWFw
SW5saW5lcy5oPgorI2luY2x1ZGUgPHBhbC9Mb2dnZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Rh
dGFWaWV3Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvVWludDE2QXJyYXkuaD4KQEAgLTYwLDYgKzYxLDEwIEBAIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGEKICAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlh
UGxheWVyOjpFbXB0eSkKICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhp
bmcpCiAgICAgLCBtX3ByZWxvYWQoTWVkaWFQbGF5ZXI6OkF1dG8pCisjaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECisgICAgLCBtX2xvZ2dlcihwbGF5ZXItPm1lZGlhUGxheWVyTG9nZ2VyKCkpCisg
ICAgLCBtX2xvZ0lkZW50aWZpZXIocGxheWVyLT5tZWRpYVBsYXllckxvZ0lkZW50aWZpZXIoKSkK
KyNlbmRpZgogICAgICwgbV9jYWNoZWREdXJhdGlvbihNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkp
CiAgICAgLCBtX3JlcG9ydGVkRHVyYXRpb24oTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAg
ICwgbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzKE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKSkKQEAgLTgxLDEyICs4NiwxMiBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246Ok1lZGlhUGxhCiAgICAgLCBtX3Nob3VsZE1haW50YWluQXNwZWN0UmF0aW8odHJ1ZSkK
ICAgICAsIG1fc2Vla2luZyhmYWxzZSkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiglcCkiLCB0
aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjp+TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uKCkKIHsKLSAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246On5NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb24oJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJ
RklFUik7CiAgICAgc2V0SWdub3JlTG9hZFN0YXRlQ2hhbmdlcyh0cnVlKTsKIH0KIApAQCAtMTI2
LDEwICsxMzEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0CiAg
ICAgaWYgKGN1cnJlbnRNb2RlID09IHByZWZlcnJlZE1vZGUgJiYgY3VycmVudE1vZGUgIT0gTWVk
aWFSZW5kZXJpbmdOb25lKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldFVwVmlkZW9SZW5kZXJpbmcoJXApIC0gY3Vy
cmVudCBtb2RlID0gJWQsIHByZWZlcnJlZCBtb2RlID0gJWQiLCAKLSAgICAgICAgdGhpcywgc3Rh
dGljX2Nhc3Q8aW50PihjdXJyZW50TW9kZSksIHN0YXRpY19jYXN0PGludD4ocHJlZmVycmVkTW9k
ZSkpOwotCi0gICAgaWYgKGN1cnJlbnRNb2RlICE9IE1lZGlhUmVuZGVyaW5nTm9uZSkgIAorICAg
IGlmIChjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpCiAgICAgICAgIHRlYXJEb3du
VmlkZW9SZW5kZXJpbmcoKTsKIAogICAgIHN3aXRjaCAocHJlZmVycmVkTW9kZSkgewpAQCAtMTQ0
LDE1ICsxNDYsMTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldAog
ICAgIH0KIAogICAgIC8vIElmIHVzaW5nIGEgbW92aWUgbGF5ZXIsIGluZm9ybSB0aGUgY2xpZW50
IHNvIHRoZSBjb21wb3NpdGluZyB0cmVlIGlzIHVwZGF0ZWQuCi0gICAgaWYgKGN1cnJlbnRNb2Rl
ID09IE1lZGlhUmVuZGVyaW5nVG9MYXllciB8fCBwcmVmZXJyZWRNb2RlID09IE1lZGlhUmVuZGVy
aW5nVG9MYXllcikgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnNldFVwVmlkZW9SZW5kZXJpbmcoJXApIC0gY2FsbGluZyBtZWRpYVBsYXllclJl
bmRlcmluZ01vZGVDaGFuZ2VkKCkiLCB0aGlzKTsKKyAgICBpZiAoY3VycmVudE1vZGUgPT0gTWVk
aWFSZW5kZXJpbmdUb0xheWVyIHx8IHByZWZlcnJlZE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdUb0xh
eWVyKQogICAgICAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2Rl
Q2hhbmdlZChtX3BsYXllcik7Ci0gICAgfQogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6dGVhckRvd25WaWRlb1JlbmRlcmluZygpCiB7Ci0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCVw
KSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgZGVzdHJveUNv
bnRleHRWaWRlb1JlbmRlcmVyKCk7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6aGFzCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9hZCglcCkiLCB0aGlzKTsKKyAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgc2V0TmV0d29ya1N0YXRlKG1fcHJlbG9hZCA9
PSBNZWRpYVBsYXllcjo6Tm9uZSA/IE1lZGlhUGxheWVyOjpJZGxlIDogTWVkaWFQbGF5ZXI6Okxv
YWRpbmcpOwogICAgIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKTsKQEAg
LTE5MSwxNiArMTkxLDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjps
b2EKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXlhYmlsaXR5S25v
d24oKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
cGxheWFiaWxpdHlLbm93biglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVS
LCAibWV0YWRhdGEgbG9hZGVkID0gIiwgYXNzZXRTdGF0dXMoKSA+IE1lZGlhUGxheWVyQVZBc3Nl
dFN0YXR1c0xvYWRpbmcpOwogCiAgICAgaWYgKG1fYXNzZXRJc1BsYXlhYmxlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBOb3RoaW5nIG1vcmUgdG8gZG8gaWYgd2UgYWxyZWFkeSBoYXZlIGFs
bCBvZiB0aGUgaXRlbSdzIG1ldGFkYXRhLgotICAgIGlmIChhc3NldFN0YXR1cygpID4gTWVkaWFQ
bGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGluZykgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXlhYmlsaXR5S25vd24oJXApIC0gYWxsIG1ldGFk
YXRhIGxvYWRlZCIsIHRoaXMpOworICAgIGlmIChhc3NldFN0YXR1cygpID4gTWVkaWFQbGF5ZXJB
VkFzc2V0U3RhdHVzTG9hZGluZykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIC8vIEF0
IHRoaXMgcG9pbnQgd2UgYXJlIHN1cHBvc2VkIHRvIGxvYWQgbWV0YWRhdGEuIEl0IGlzIE9LIHRv
IGFzayB0aGUgYXNzZXQgdG8gbG9hZCB0aGUgc2FtZSAKICAgICAvLyBpbmZvcm1hdGlvbiBtdWx0
aXBsZSB0aW1lcywgYmVjYXVzZSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCB0aGUgY29t
cGxldGlvbiBoYW5kbGVyIApAQCAtMjExLDI4ICsyMDksMjcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnBsYQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbjo6cHJlcGFyZVRvUGxheSgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpwcmVwYXJlVG9QbGF5KCVwKSIsIHRoaXMpOwotCisgICAgQUxXQVlT
X0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpBdXRvKTsK
IH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXkoKQogewotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGxheSglcCkiLCB0
aGlzKTsKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgLy8gSWYgdGhlIGZp
bGUgaGFzIHZpZGVvLCBkb24ndCByZXF1ZXN0IHBsYXliYWNrIHVudGlsIHRoZSBmaXJzdCBmcmFt
ZSBvZiB2aWRlbyBpcyByZWFkeSB0byBkaXNwbGF5CiAgICAgLy8gb3IgdGhlIGF1ZGlvIG1heSBz
dGFydCBwbGF5aW5nIGJlZm9yZSB3ZSBjYW4gcmVuZGVyIHZpZGVvLgogICAgIGlmICghbV9jYWNo
ZWRIYXNWaWRlbyB8fCBoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkpCiAgICAgICAgIHBsYXRmb3Jt
UGxheSgpOwogICAgIGVsc2UgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OnBsYXkoJXApIC0gd2FpdGluZyBmb3IgZmlyc3QgdmlkZW8gZnJhbWUi
LCB0aGlzKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIndhaXRpbmcgZm9yIGZp
cnN0IHZpZGVvIGZyYW1lIik7CiAgICAgICAgIG1fcGxheVdoZW5GcmFtZXNBdmFpbGFibGUgPSB0
cnVlOwogICAgIH0KIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBh
dXNlKCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OnBhdXNlKCVwKSIsIHRoaXMpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAgICAg
bV9wbGF5V2hlbkZyYW1lc0F2YWlsYWJsZSA9IGZhbHNlOwogICAgIHBsYXRmb3JtUGF1c2UoKTsK
IH0KQEAgLTI0Nyw3ICsyNDQsNyBAQCBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uCiAgICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKICAgICBtX2Nh
Y2hlZER1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpkdXJhdGlvbiglcCkgLSBjYWNoaW5nICVzIiwgdGhpcywgdG9TdHJp
bmcobV9jYWNoZWREdXJhdGlvbikudXRmOCgpLmRhdGEoKSk7CisKICAgICByZXR1cm4gbV9jYWNo
ZWREdXJhdGlvbjsKIH0KIApAQCAtMjYxLDcgKzI1OCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpzZWUKICAgICBNZWRpYVRpbWUgdGltZSA9IG1lZGlhVGltZTsKIAog
ICAgIGlmIChtX3NlZWtpbmcpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpzZWVrV2l0aFRvbGVyYW5jZSglcCkgLSBzYXZlIHBlbmRpbmcgc2Vl
ayIsIHRoaXMpOworICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJzYXZpbmcgcGVu
ZGluZyBzZWVrIik7CiAgICAgICAgIG1fcGVuZGluZ1NlZWsgPSBbdGhpcywgdGltZSwgbmVnYXRp
dmVUb2xlcmFuY2UsIHBvc2l0aXZlVG9sZXJhbmNlXSgpIHsKICAgICAgICAgICAgIHNlZWtXaXRo
VG9sZXJhbmNlKHRpbWUsIG5lZ2F0aXZlVG9sZXJhbmNlLCBwb3NpdGl2ZVRvbGVyYW5jZSk7CiAg
ICAgICAgIH07CkBAIC0yNzgsNyArMjc1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnNlZQogICAgIGlmIChjdXJyZW50VGV4dFRyYWNrKCkpCiAgICAgICAgIGN1cnJl
bnRUZXh0VHJhY2soKS0+YmVnaW5TZWVraW5nKCk7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWsoJXApIC0gc2Vla2luZyB0byAlcyIsIHRoaXMs
IHRvU3RyaW5nKHRpbWUpLnV0ZjgoKS5kYXRhKCkpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUiwgInNlZWtpbmcgdG8gICIsIHRpbWUpOwogCiAgICAgc2Vla1RvVGltZSh0aW1lLCBuZWdh
dGl2ZVRvbGVyYW5jZSwgcG9zaXRpdmVUb2xlcmFuY2UpOwogfQpAQCAtMzE2LDEyICszMTMsMTIg
QEAgRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbgogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0TmF0dXJhbFNpemUoRmxvYXRTaXplIHNpemUp
CiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOnNldE5h
dHVyYWxTaXplKCVwKSAtIHNpemUgPSAlZiB4ICVmIiwgdGhpcywgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKLQogICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9jYWNoZWROYXR1cmFsU2l6
ZTsKICAgICBtX2NhY2hlZE5hdHVyYWxTaXplID0gc2l6ZTsKLSAgICBpZiAob2xkU2l6ZSAhPSBt
X2NhY2hlZE5hdHVyYWxTaXplKQorICAgIGlmIChvbGRTaXplICE9IG1fY2FjaGVkTmF0dXJhbFNp
emUpIHsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIndhcyAiLCBvbGRTaXplLndp
ZHRoKCksICIgeCAiLCBvbGRTaXplLmhlaWdodCgpLCAiLCBpcyAiLCBzaXplLndpZHRoKCksICIg
eCAiLCBzaXplLmhlaWdodCgpKTsKICAgICAgICAgbV9wbGF5ZXItPnNpemVDaGFuZ2VkKCk7Cisg
ICAgfQogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0SGFzVmlk
ZW8oYm9vbCBiKQpAQCAtNDAzLDExICs0MDAsMTIgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbgogICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKICAgICAgICAg
cmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotICAgIGlmICghbV9jYWNoZWRNYXhUaW1l
U2Vla2FibGUpCisgICAgaWYgKCFtX2NhY2hlZE1heFRpbWVTZWVrYWJsZSkgewogICAgICAgICBt
X2NhY2hlZE1heFRpbWVTZWVrYWJsZSA9IHBsYXRmb3JtTWF4VGltZVNlZWthYmxlKCk7CisgICAg
ICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJjYWNoaW5nICIsIG1fY2FjaGVkTWF4VGltZVNl
ZWthYmxlKTsKKyAgICB9CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246Om1heFRpbWVTZWVrYWJsZSglcCkgLSByZXR1cm5pbmcgJXMiLCB0aGlzLCB0b1N0
cmluZyhtX2NhY2hlZE1heFRpbWVTZWVrYWJsZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJu
IG1fY2FjaGVkTWF4VGltZVNlZWthYmxlOyAgIAorICAgIHJldHVybiBtX2NhY2hlZE1heFRpbWVT
ZWVrYWJsZTsKIH0KIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
bWluTWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdApAQCAtNDE1LDEwICs0MTMsMTEgQEAgTWVkaWFU
aW1lIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbgogICAgIGlmICghbWV0YURhdGFBdmFp
bGFibGUoKSkKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotICAgIGlm
ICghbV9jYWNoZWRNaW5UaW1lU2Vla2FibGUpCisgICAgaWYgKCFtX2NhY2hlZE1pblRpbWVTZWVr
YWJsZSkgewogICAgICAgICBtX2NhY2hlZE1pblRpbWVTZWVrYWJsZSA9IHBsYXRmb3JtTWluVGlt
ZVNlZWthYmxlKCk7CisgICAgICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJjYWNoaW5nICIs
IG1fY2FjaGVkTWluVGltZVNlZWthYmxlKTsKKyAgICB9CiAKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1pblRpbWVTZWVrYWJsZSglcCkgLSByZXR1cm5p
bmcgJXMiLCB0aGlzLCB0b1N0cmluZyhtX2NhY2hlZE1pblRpbWVTZWVrYWJsZSkudXRmOCgpLmRh
dGEoKSk7CiAgICAgcmV0dXJuIG1fY2FjaGVkTWluVGltZVNlZWthYmxlOwogfQogCkBAIC01NjQs
MTIgKzU2MywxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dXBkCiAg
ICAgfSBlbHNlIGlmICghaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpKQogICAgICAgICBtX2hhdmVS
ZXBvcnRlZEZpcnN0VmlkZW9GcmFtZSA9IGZhbHNlOwogCi0jaWYgIUxPR19ESVNBQkxFRAotICAg
IGlmIChtX25ldHdvcmtTdGF0ZSAhPSBuZXdOZXR3b3JrU3RhdGUgfHwgbV9yZWFkeVN0YXRlICE9
IG5ld1JlYWR5U3RhdGUpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjp1cGRhdGVTdGF0ZXMoJXApIC0gZW50ZXJlZCB3aXRoIG5ldHdvcmtTdGF0
ZSA9ICVpLCByZWFkeVN0YXRlID0gJWksICBleGl0aW5nIHdpdGggbmV0d29ya1N0YXRlID0gJWks
IHJlYWR5U3RhdGUgPSAlaSIsCi0gICAgICAgICAgICB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KG1f
bmV0d29ya1N0YXRlKSwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWR5U3RhdGUpLCBzdGF0aWNfY2Fz
dDxpbnQ+KG5ld05ldHdvcmtTdGF0ZSksIHN0YXRpY19jYXN0PGludD4obmV3UmVhZHlTdGF0ZSkp
OwotICAgIH0KLSNlbmRpZgorICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBuZXdOZXR3b3JrU3Rh
dGUpCisgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgImVudGVyZWQgd2l0aCBuZXR3
b3JrU3RhdGUgIiwgc3RhdGljX2Nhc3Q8aW50PihtX25ldHdvcmtTdGF0ZSksICIsIGV4aXRpbmcg
d2l0aCAiLCBzdGF0aWNfY2FzdDxpbnQ+KG5ld05ldHdvcmtTdGF0ZSkpOworICAgIGlmIChtX3Jl
YWR5U3RhdGUgIT0gbmV3UmVhZHlTdGF0ZSkKKyAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSLCAiZW50ZXJlZCB3aXRoIHJlYWR5U3RhdGUgIiwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWR5
U3RhdGUpLCAiLCBleGl0aW5nIHdpdGggIiwgc3RhdGljX2Nhc3Q8aW50PihuZXdSZWFkeVN0YXRl
KSk7CiAKICAgICBzZXROZXR3b3JrU3RhdGUobmV3TmV0d29ya1N0YXRlKTsKICAgICBzZXRSZWFk
eVN0YXRlKG5ld1JlYWR5U3RhdGUpOwpAQCAtNjE5LDggKzYxNiw4IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptZXQKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnJhdGVDaGFuZ2VkKCkKIHsKKwogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFD
S19UQVJHRVQpICYmIFBMQVRGT1JNKElPUykKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnJhdGVDaGFuZ2VkKCVwKSAtIHJhdGUgPSAlZiwgcmVxdWVzdGVk
IHJhdGUgPSAlZiwgaXRlbSBzdGF0dXMgPSAlaSIsIHRoaXMsIHJhdGUoKSwgcmVxdWVzdGVkUmF0
ZSgpLCBwbGF5ZXJJdGVtU3RhdHVzKCkpOwogICAgIGlmIChpc0N1cnJlbnRQbGF5YmFja1Rhcmdl
dFdpcmVsZXNzKCkgJiYgcGxheWVySXRlbVN0YXR1cygpID49IE1lZGlhUGxheWVyQVZQbGF5ZXJJ
dGVtU3RhdHVzUGxheWJhY2tCdWZmZXJGdWxsKSB7CiAgICAgICAgIGRvdWJsZSByYXRlID0gdGhp
cy0+cmF0ZSgpOwogICAgICAgICBpZiAocmF0ZSAhPSByZXF1ZXN0ZWRSYXRlKCkpIHsKQEAgLTY0
OCwxNCArNjQ1LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWUK
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnRpbWVDaGFuZ2VkKGNvbnN0
IE1lZGlhVGltZSYgdGltZSkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246OnRpbWVDaGFuZ2VkKCVwKSAtIHRpbWUgPSAlcyIsIHRoaXMsIHRvU3RyaW5n
KHRpbWUpLnV0ZjgoKS5kYXRhKCkpOwogICAgIFVOVVNFRF9QQVJBTSh0aW1lKTsKKyAgICBJTkZP
X0xPRyhMT0dJREVOVElGSUVSLCAiLSAiLCB0aW1lKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQoYm9vbCBmaW5pc2hlZCkKIHsKLSAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQo
JXApIC0gZmluaXNoZWQgPSAlZCIsIHRoaXMsIGZpbmlzaGVkKTsKICAgICBVTlVTRURfUEFSQU0o
ZmluaXNoZWQpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgImZpbmlzaGVkID0gIiwg
ZmluaXNoZWQpOwogCiAgICAgbV9zZWVraW5nID0gZmFsc2U7CiAKQEAgLTY2Myw3ICs2NjAsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlCiAgICAgc3RkOjpzd2Fw
KHBlbmRpbmdTZWVrLCBtX3BlbmRpbmdTZWVrKTsKIAogICAgIGlmIChwZW5kaW5nU2Vlaykgewot
ICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtD
b21wbGV0ZWQoJXApIC0gaXNzdWluZyBwZW5kaW5nIHNlZWsiLCB0aGlzKTsKKyAgICAgICAgQUxX
QVlTX0xPRyhMT0dJREVOVElGSUVSLCAiaXNzdWluZyBwZW5kaW5nIHNlZWsiKTsKICAgICAgICAg
cGVuZGluZ1NlZWsoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY5NSw2ICs2OTIsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6aW52CiAgICAgLy8gc28gcmVw
b3J0IGR1cmF0aW9uIGNoYW5nZWQgd2hlbiB0aGUgZXN0aW1hdGUgaXMgdXBhdGVkLgogICAgIE1l
ZGlhVGltZSBkdXJhdGlvbiA9IHRoaXMtPmR1cmF0aW9uTWVkaWFUaW1lKCk7CiAgICAgaWYgKGR1
cmF0aW9uICE9IG1fcmVwb3J0ZWREdXJhdGlvbikgeworICAgICAgICBJTkZPX0xPRyhMT0dJREVO
VElGSUVSLCAiLSAiLCBtX2NhY2hlZER1cmF0aW9uKTsKICAgICAgICAgaWYgKG1fcmVwb3J0ZWRE
dXJhdGlvbi5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2Vk
KCk7CiAgICAgICAgIG1fcmVwb3J0ZWREdXJhdGlvbiA9IGR1cmF0aW9uOwpAQCAtNzIwLDYgKzcx
OCw3IEBAIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHIKIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlBy
ZWxvYWQgcHJlbG9hZCkKIHsKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICIgLSAiLCBz
dGF0aWNfY2FzdDxpbnQ+KHByZWxvYWQpKTsKICAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOwogICAg
IGlmICghbV9hc3NldFVSTC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzU0LDggKzc1
Myw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXQKIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1haW5UaHJlYWRDYWxsYmFjaygpCiB7Ci0g
ICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptYWluVGhyZWFk
Q2FsbGJhY2soJXApIiwgdGhpcyk7Ci0KICAgICBjbGVhck1haW5UaHJlYWRQZW5kaW5nRmxhZygp
OwogICAgIGRpc3BhdGNoTm90aWZpY2F0aW9uKCk7CiB9CkBAIC03NzYsMjYgKzc3Myw4IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzY2gKICAgICBzY2hlZHVsZU1haW5U
aHJlYWROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uKHR5cGUsIGZpbmlzaGVkKSk7CiB9CiAKLSNp
ZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgY29uc3QgY2hhciogbm90aWZpY2F0aW9uTmFtZShNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbiYgbm90aWZpY2F0aW9uKQot
ewotI2RlZmluZSBERUZJTkVfVFlQRV9TVFJJTkdfQ0FTRSh0eXBlKSBjYXNlIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjp0eXBlOiByZXR1cm4gI3R5cGU7Ci0g
ICAgc3dpdGNoIChub3RpZmljYXRpb24udHlwZSgpKSB7Ci0gICAgRk9SX0VBQ0hfTUVESUFQTEFZ
RVJQUklWQVRFQVZGT1VOREFUSU9OX05PVElGSUNBVElPTl9UWVBFKERFRklORV9UWVBFX1NUUklO
R19DQVNFKQotICAgIGNhc2UgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmlj
YXRpb246OkZ1bmN0aW9uVHlwZTogcmV0dXJuICJGdW5jdGlvblR5cGUiOwotICAgIGRlZmF1bHQ6
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gIiI7Ci0gICAgfQotI3VuZGVmIERFRklORV9U
WVBFX1NUUklOR19DQVNFCi19Ci0jZW5kaWYgLy8gIUxPR19ESVNBQkxFRAotICAgIAotCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2NoZWR1bGVNYWluVGhyZWFkTm90aWZp
Y2F0aW9uKE5vdGlmaWNhdGlvbiYmIG5vdGlmaWNhdGlvbikKIHsKLSAgICBhdXRvIG5vdGlmaWNh
dGlvblR5cGUgPSBub3RpZmljYXRpb24udHlwZSgpOwotICAgIGlmIChub3RpZmljYXRpb25UeXBl
ICE9IE5vdGlmaWNhdGlvbjo6RnVuY3Rpb25UeXBlKQotICAgICAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlv
biglcCkgLSBub3RpZmljYXRpb24gJXMiLCB0aGlzLCBub3RpZmljYXRpb25OYW1lKG5vdGlmaWNh
dGlvbikpOwotCiAgICAgbV9xdWV1ZU11dGV4LmxvY2soKTsKIAogICAgIC8vIEl0IGlzIGltcG9y
dGFudCB0byBhbHdheXMgcHJvY2VzcyB0aGUgcHJvcGVydGllcyBpbiB0aGUgb3JkZXIgdGhhdCB3
ZSBhcmUgbm90aWZpZWQsCkBAIC04MjAsMTEgKzc5OSw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpzY2gKIAogICAgIG1fcXVldWVNdXRleC51bmxvY2soKTsKIAotICAg
IGlmIChkZWxheURpc3BhdGNoKSB7Ci0gICAgICAgIGlmIChub3RpZmljYXRpb25UeXBlICE9IE5v
dGlmaWNhdGlvbjo6RnVuY3Rpb25UeXBlKQotICAgICAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24o
JXApIC0gZWFybHkgcmV0dXJuIiwgdGhpcyk7CisgICAgaWYgKGRlbGF5RGlzcGF0Y2gpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKICAgICBkaXNwYXRjaE5vdGlmaWNhdGlvbigpOwogfQpAQCAt
ODU4LDkgKzgzNCw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpkaXMK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobm90aWZpY2F0aW9uLnR5cGUo
KSAhPSBOb3RpZmljYXRpb246OkZ1bmN0aW9uVHlwZSkKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpkaXNwYXRjaE5vdGlmaWNhdGlvbiglcCkgLSBk
aXNwYXRjaGluZyAlcyIsIHRoaXMsIG5vdGlmaWNhdGlvbk5hbWUobm90aWZpY2F0aW9uKSk7Ci0K
ICAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbi50eXBlKCkpIHsKICAgICBjYXNlIE5vdGlmaWNhdGlv
bjo6SXRlbURpZFBsYXlUb0VuZFRpbWU6CiAgICAgICAgIGRpZEVuZCgpOwpAQCAtOTg5LDggKzk2
Miw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpwcm8KICAgICAgICAg
fQogICAgIH0KIAorICAgIHVuc2lnbmVkIHRyYWNrQ291bnQgPSBtX3RleHRUcmFja3Muc2l6ZSgp
OwogICAgIHVuc2lnbmVkIGluQmFuZENvdW50ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV90ZXh0VHJhY2tzLnNpemUoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRyYWNrQ291bnQ7ICsraSkgewogICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRj4gdHJhY2sgPSBtX3RleHRUcmFja3NbaV07CiAKICNpZiBFTkFCTEUoQVZGX0NB
UFRJT05TKQpAQCAtMTAwNiwyMSArOTgwLDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjpwcm8KICAgICAgICAgdHJhY2stPnNldEhhc0JlZW5SZXBvcnRlZCh0cnVlKTsK
ICAgICAgICAgcGxheWVyKCktPmFkZFRleHRUcmFjaygqdHJhY2spOwogICAgIH0KLSAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnByb2Nlc3NOZXdBbmRSZW1v
dmVkVGV4dFRyYWNrcyglcCkgLSBmb3VuZCAlbHUgdGV4dCB0cmFja3MiLCB0aGlzLCBtX3RleHRU
cmFja3Muc2l6ZSgpKTsKKworICAgIGlmICh0cmFja0NvdW50ICE9IG1fdGV4dFRyYWNrcy5zaXpl
KCkpCisgICAgICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJmb3VuZCAiLCBtX3RleHRUcmFj
a3Muc2l6ZSgpLCAiIHRleHQgdHJhY2tzIik7CiB9CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExB
WUJBQ0tfVEFSR0VUKQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGxh
eWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCgpCiB7CiAgICAgaWYgKG1fcGxheWVyKQogICAg
ICAgICBtX3BsYXllci0+Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQoKTsK
IH0KLQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkKLQogYm9v
bCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmV4dHJhY3RLZXlVUklLZXlJREFuZENl
cnRpZmljYXRlRnJvbUluaXREYXRhKFVpbnQ4QXJyYXkqIGluaXREYXRhLCBTdHJpbmcmIGtleVVS
SSwgU3RyaW5nJiBrZXlJRCwgUmVmUHRyPFVpbnQ4QXJyYXk+JiBjZXJ0aWZpY2F0ZSkKIHsKICAg
ICAvLyBpbml0RGF0YSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIGxheW91dDoKQEAgLTEwNzAs
NyArMTA0Myw2IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpleHQKIAog
ICAgIHJldHVybiB0cnVlOwogfQotCiAjZW5kaWYKIAogVVJMIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6cmVzb2x2ZWRVUkwoKSBjb25zdApAQCAtMTEyMiw2ICsxMDk0LDEzIEBAIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjppc1UKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK1dURkxvZ0NoYW5uZWwmIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9nQ2hhbm5lbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IExvZ01lZGlhOworfQorI2VuZGlmCisKIGNvbnN0IEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+JiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnN0YXRpY01J
TUVUeXBlTGlzdCgpCiB7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gY2FjaGUgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b24uaAkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRi5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCisjaW5jbHVkZSA8cGFsL0xvZ2dlckhlbHBlci5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5o
PgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBA
IC0zOSw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3
dGYvV2Vha1B0ci5oPgogCituYW1lc3BhY2UgUEFMIHsKK2NsYXNzIExvZ2dlcjsKK30KKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVB
VkY7CkBAIC00Niw2ICs1MSw5IEBAIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY7CiBj
bGFzcyBHZW5lcmljQ3VlRGF0YTsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSwgcHVibGljIEFWRkluYmFu
ZFRyYWNrUGFyZW50CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBwcml2YXRlIFBB
TDo6TG9nZ2VySGVscGVyCisjZW5kaWYKIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVw
YWludCgpOwpAQCAtMTQ0LDYgKzE1MiwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZXh0
cmFjdEtleVVSSUtleUlEQW5kQ2VydGlmaWNhdGVGcm9tSW5pdERhdGEoVWludDhBcnJheSogaW5p
dERhdGEsIFN0cmluZyYga2V5VVJJLCBTdHJpbmcmIGtleUlELCBSZWZQdHI8VWludDhBcnJheT4m
IGNlcnRpZmljYXRlKTsKICNlbmRpZgogCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
Y29uc3QgUEFMOjpMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbG9nZ2Vy
LmdldCgpOyB9CisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiI7IH0KKyAgICBjb25zdCB2
b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB2b2lkKj4obV9sb2dJZGVudGlmaWVyKTsgfQorICAgIFdURkxvZ0NoYW5uZWwmIGxv
Z0NoYW5uZWwoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGlj
aXQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uKE1lZGlhUGxheWVyKik7CiAgICAgdmly
dHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uKCk7CkBAIC0zMzEsNiArMzQ2LDEx
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fYXNzZXRVUkw7CiAgICAgTWVkaWFQbGF5ZXI6OlBy
ZWxvYWQgbV9wcmVsb2FkOwogCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgUmVmPGNv
bnN0IFBBTDo6TG9nZ2VyPiBtX2xvZ2dlcjsKKyAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50aWZp
ZXI7CisjZW5kaWYKKwogICAgIEZsb2F0U2l6ZSBtX2NhY2hlZE5hdHVyYWxTaXplOwogICAgIG11
dGFibGUgTWVkaWFUaW1lIG1fY2FjaGVkTWF4VGltZUxvYWRlZDsKICAgICBtdXRhYmxlIE1lZGlh
VGltZSBtX2NhY2hlZE1heFRpbWVTZWVrYWJsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgJ
KHJldmlzaW9uIDIyMTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRT
aG91bGREaXNhYmxlU2xlZXAoYm9vbCkgb3ZlcnJpZGU7CiAKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyI7IH0KKyNlbmRpZgorCiAgICAg
V2Vha1B0ckZhY3Rvcnk8TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQz4gbV93ZWFr
UHRyRmFjdG9yeTsKIAogICAgIFJldGFpblB0cjxBVlVSTEFzc2V0PiBtX2F2QXNzZXQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHJldmlzaW9uIDIyMTcxNykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1MiwxMyArMzUyLDYgQEAg
c3RhdGljIE5TQXJyYXkgKmFzc2V0VHJhY2tNZXRhZGF0YUtleU5hbQogc3RhdGljIE5TQXJyYXkg
KnBsYXllcktWT1Byb3BlcnRpZXMoKTsKIHN0YXRpYyBBVkFzc2V0VHJhY2sqIGZpcnN0RW5hYmxl
ZFRyYWNrKE5TQXJyYXkqIHRyYWNrcyk7CiAKLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgY29u
c3QgY2hhciAqYm9vbFN0cmluZyhib29sIHZhbCkKLXsKLSAgICByZXR1cm4gdmFsID8gInRydWUi
IDogImZhbHNlIjsKLX0KLSNlbmRpZgotCiAjaWYgSEFWRShBVkZPVU5EQVRJT05fTE9BREVSX0RF
TEVHQVRFKQogc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgZ2xvYmFsTG9hZGVyRGVsZWdhdGVRdWV1
ZSgpCiB7CkBAIC00NzgsOCArNDcxLDYgQEAgc3RhdGljIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xv
Y2s6OnRpbWVfcAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNs
ZWFyTWVkaWFDYWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xv
Y2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjbGVhck1lZGlhQ2FjaGUoKSIpOwotICAgIAog
ICAgIEFWQXNzZXRDYWNoZVR5cGUqIGFzc2V0Q2FjaGUgPSBhc3NldENhY2hlRm9yUGF0aChwYXRo
KTsKICAgICAKICAgICBmb3IgKE5TU3RyaW5nICprZXkgaW4gW2Fzc2V0Q2FjaGUgYWxsS2V5c10p
IHsKQEAgLTUyMiw3ICs1MTMsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2xlYXJN
ZWRpYUNhY2hlRm9yT3JpZ2lucyhjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEhhc2hTZXQ8UmVm
UHRyPFNlY3VyaXR5T3JpZ2luPj4mIG9yaWdpbnMpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2xlYXJNZWRpYUNhY2hlRm9yT3JpZ2lucygp
Iik7CiAgICAgQVZBc3NldENhY2hlVHlwZSogYXNzZXRDYWNoZSA9IGFzc2V0Q2FjaGVGb3JQYXRo
KHBhdGgpOwogICAgIGZvciAoTlNTdHJpbmcgKmtleSBpbiBbYXNzZXRDYWNoZSBhbGxLZXlzXSkg
ewogICAgICAgICBVUkwga2V5QXNVUkwgPSBVUkwoVVJMKCksIGtleSk7CkBAIC01OTIsNyArNTgy
LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6fk1lZAogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQoKQogewotICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQo
JXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAgICAgdGVhckRvd25W
aWRlb1JlbmRlcmluZygpOwogCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKV07CkBAIC02ODEsNyArNjcx
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUltYWdlR2VuZXJhdG9yKCkK
IHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpj
cmVhdGVJbWFnZUdlbmVyYXRvciglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElG
SUVSKTsKIAogICAgIGlmICghbV9hdkFzc2V0IHx8IG1faW1hZ2VHZW5lcmF0b3IpCiAgICAgICAg
IHJldHVybjsKQEAgLTY5Miw4ICs2ODIsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6CiAgICAgW21faW1hZ2VHZW5lcmF0b3IuZ2V0KCkgc2V0QXBwbGllc1ByZWZl
cnJlZFRyYWNrVHJhbnNmb3JtOllFU107CiAgICAgW21faW1hZ2VHZW5lcmF0b3IuZ2V0KCkgc2V0
UmVxdWVzdGVkVGltZVRvbGVyYW5jZUJlZm9yZTprQ01UaW1lWmVyb107CiAgICAgW21faW1hZ2VH
ZW5lcmF0b3IuZ2V0KCkgc2V0UmVxdWVzdGVkVGltZVRvbGVyYW5jZUFmdGVyOmtDTVRpbWVaZXJv
XTsKLQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OmNyZWF0ZUltYWdlR2VuZXJhdG9yKCVwKSAtIHJldHVybmluZyAlcCIsIHRoaXMsIG1faW1hZ2VH
ZW5lcmF0b3IuZ2V0KCkpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OmRlc3Ryb3lDb250ZXh0VmlkZW9SZW5kZXJlcigpCkBAIC03MTAsNyArNjk4LDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlmICghbV9pbWFn
ZUdlbmVyYXRvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveUltYWdlR2VuZXJhdG9yKCVwKSAtIGRl
c3Ryb3lpbmcgICVwIiwgdGhpcywgbV9pbWFnZUdlbmVyYXRvci5nZXQoKSk7CisgICAgSU5GT19M
T0coTE9HSURFTlRJRklFUik7CiAKICAgICBtX2ltYWdlR2VuZXJhdG9yID0gMDsKIH0KQEAgLTc1
NSw3ICs3NDMsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAg
ICAgdXBkYXRlVmlkZW9MYXllckdyYXZpdHkoKTsKICAgICBbbV92aWRlb0xheWVyIHNldENvbnRl
bnRzU2NhbGU6cGxheWVyKCktPmNsaWVudCgpLm1lZGlhUGxheWVyQ29udGVudHNTY2FsZSgpXTsK
ICAgICBJbnRTaXplIGRlZmF1bHRTaXplID0gc25hcHBlZEludFJlY3QocGxheWVyKCktPmNsaWVu
dCgpLm1lZGlhUGxheWVyQ29udGVudEJveFJlY3QoKSkuc2l6ZSgpOwotICAgIExPRyhNZWRpYSwg
Ik1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVZpZGVvTGF5ZXIoJXAp
IC0gcmV0dXJuaW5nICVwIiwgdGhpcywgbV92aWRlb0xheWVyLmdldCgpKTsKKyAgICBJTkZPX0xP
RyhMT0dJREVOVElGSUVSKTsKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKICAgICBtX3ZpZGVvRnVsbHNjcmVl
bkxheWVyTWFuYWdlci0+c2V0VmlkZW9MYXllcihtX3ZpZGVvTGF5ZXIuZ2V0KCksIGRlZmF1bHRT
aXplKTsKQEAgLTc3Myw3ICs3NjEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6CiAgICAgaWYgKCFtX3ZpZGVvTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmRlc3Ryb3lW
aWRlb0xheWVyKCVwKSAtIGRlc3Ryb3lpbmcgJXAiLCB0aGlzLCBtX3ZpZGVvTGF5ZXIuZ2V0KCkp
OworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgW21fdmlkZW9MYXllciByZW1v
dmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAicmVhZHlGb3JEaXNw
bGF5Il07CiAgICAgW21fdmlkZW9MYXllciBzZXRQbGF5ZXI6bmlsXTsKQEAgLTkxMSw3ICs4OTks
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKG1f
YXZBc3NldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZBc3NldEZvclVSTCglcCkgLSB1cmwgPSAl
cyIsIHRoaXMsIHVybC51dGY4KCkuZGF0YSgpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVS
KTsKIAogICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwogCkBAIC0xMDQ4LDcgKzEwMzYsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKG1fYXZQ
bGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVyKCVwKSIsIHRoaXMpOworICAgIElO
Rk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CiAK
QEAgLTEwOTcsNyArMTA4NSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKICAgICBpZiAobV9hdlBsYXllckl0ZW0pCiAgICAgICAgIHJldHVybjsKIAotICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxh
eWVySXRlbSglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKIAogICAg
IHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwogCkBAIC0xMTQ0LDcgKzExMzIsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgICAgIHJldHVybjsKICAgICBt
X2hhdmVDaGVja2VkUGxheWFiaWxpdHkgPSB0cnVlOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2hlY2tQbGF5YWJpbGl0eSglcCkiLCB0aGlz
KTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBhdXRvIHdlYWtUaGlzID0gY3Jl
YXRlV2Vha1B0cigpOwogCiAgICAgW21fYXZBc3NldC5nZXQoKSBsb2FkVmFsdWVzQXN5bmNocm9u
b3VzbHlGb3JLZXlzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6QCJwbGF5YWJsZSIsIEAidHJh
Y2tzIiwgbmlsXSBjb21wbGV0aW9uSGFuZGxlcjpeewpAQCAtMTE1Nyw3ICsxMTQ1LDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmJlZ2luTG9hZGluZ01ldGFkYXRhKCkKIHsKLSAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpiZWdpbkxvYWRp
bmdNZXRhZGF0YSglcCkgLSByZXF1ZXN0aW5nIG1ldGFkYXRhIGxvYWRpbmciLCB0aGlzKTsKKyAg
ICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKIAogICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNoX2dy
b3VwX3Q+IG1ldGFkYXRhTG9hZGluZ0dyb3VwID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9ncm91
cF9jcmVhdGUoKSk7CiAgICAgZGlzcGF0Y2hfZ3JvdXBfZW50ZXIobWV0YWRhdGFMb2FkaW5nR3Jv
dXAuZ2V0KCkpOwpAQCAtMTIwNiw3ICsxMTk0LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpJdGVtU3RhdAogCiBQbGF0Zm9ybU1lZGlhIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnBsYXRmb3JtTWVkaWEoKSBjb25zdAogewotICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTWVkaWEoJXApIiwgdGhp
cyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAgICAgUGxhdGZvcm1NZWRpYSBwbTsK
ICAgICBwbS50eXBlID0gUGxhdGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9uTWVkaWFQbGF5ZXJUeXBl
OwogICAgIHBtLm1lZGlhLmF2Zk1lZGlhUGxheWVyID0gbV9hdlBsYXllci5nZXQoKTsKQEAgLTEz
MjQsNyArMTMxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoK
ICAgICAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1Q
bGF5KCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpwbGF0Zm9ybVBsYXkoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklF
Uik7CiAgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTEzMzYsNyArMTMyNCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
QzoKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybVBh
dXNlKCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpwbGF0Zm9ybVBhdXNlKCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJ
RVIpOwogICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0xMzY3LDcgKzEzNTUsNyBAQCBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uCiAgICAgaWYgKENNVElNRV9JU19JTkRFRklOSVRFKGNtRHVyYXRpb24pKQogICAgICAgICBy
ZXR1cm4gTWVkaWFUaW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpOwogCi0gICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1EdXJhdGlvbigl
cCkgLSBpbnZhbGlkIGR1cmF0aW9uLCByZXR1cm5pbmcgJXMiLCB0aGlzLCB0b1N0cmluZyhNZWRp
YVRpbWU6OmludmFsaWRUaW1lKCkpLnV0ZjgoKS5kYXRhKCkpOworICAgIElORk9fTE9HKExPR0lE
RU5USUZJRVIsICJyZXR1cm5pbmcgaW52YWxpZCB0aW1lIik7CiAgICAgcmV0dXJuIE1lZGlhVGlt
ZTo6aW52YWxpZFRpbWUoKTsKIH0KIApAQCAtMTQwMSw4ICsxMzg5LDYgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIAogICAgIGF1dG8gd2Vha1RoaXMgPSBj
cmVhdGVXZWFrUHRyKCk7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpzZWVrVG9UaW1lKCVwKSAtIGNhbGxpbmcgc2Vla1RvVGltZSIsIHRoaXMp
OwotCiAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIHNlZWtUb1RpbWU6Y21UaW1lIHRvbGVyYW5j
ZUJlZm9yZTpjbUJlZm9yZSB0b2xlcmFuY2VBZnRlcjpjbUFmdGVyIGNvbXBsZXRpb25IYW5kbGVy
Ol4oQk9PTCBmaW5pc2hlZCkgewogICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcywg
ZmluaXNoZWRdIHsKICAgICAgICAgICAgIGF1dG8gX3RoaXMgPSB3ZWFrVGhpcy5nZXQoKTsKQEAg
LTE0MzQsNyArMTQyMCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
QzoKICAgICBpZiAobV9tdXRlZCA9PSBtdXRlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9H
KE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0TXV0ZWQoJXAp
IC0gc2V0IHRvICVzIiwgdGhpcywgYm9vbFN0cmluZyhtdXRlZCkpOworICAgIElORk9fTE9HKExP
R0lERU5USUZJRVIsICItICIsIG11dGVkKTsKIAogICAgIG1fbXV0ZWQgPSBtdXRlZDsKIApAQCAt
MTQ1MSw3ICsxNDM3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OgogICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0Q2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKCVwKSAtIHNldCB0byAlcyIsIHRoaXMsIGJvb2xTdHJpbmcoY2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIi0gIiwgY2xv
c2VkQ2FwdGlvbnNWaXNpYmxlKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpzZXRSYXRlRG91YmxlKGRvdWJsZSByYXRlKQpAQCAtMTU5MywxMCArMTU3OSw5
IEBAIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6QXNzZXRTdGEKICAgICBmb3IgKE5T
U3RyaW5nICprZXlOYW1lIGluIGFzc2V0TWV0YWRhdGFLZXlOYW1lcygpKSB7CiAgICAgICAgIE5T
RXJyb3IgKmVycm9yID0gbmlsOwogICAgICAgICBBVktleVZhbHVlU3RhdHVzIGtleVN0YXR1cyA9
IFttX2F2QXNzZXQuZ2V0KCkgc3RhdHVzT2ZWYWx1ZUZvcktleTprZXlOYW1lIGVycm9yOiZlcnJv
cl07Ci0jaWYgIUxPR19ESVNBQkxFRAorCiAgICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6YXNzZXRTdGF0dXMg
LSBzdGF0dXNPZlZhbHVlRm9yS2V5IGZhaWxlZCBmb3IgJXMsIGVycm9yID0gJXMiLCBba2V5TmFt
ZSBVVEY4U3RyaW5nXSwgW1tlcnJvciBsb2NhbGl6ZWREZXNjcmlwdGlvbl0gVVRGOFN0cmluZ10p
OwotI2VuZGlmCisgICAgICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgImZhaWxlZCBm
b3IgIiwgW2tleU5hbWUgVVRGOFN0cmluZ10sICIsIGVycm9yID0gIiwgW1tlcnJvciBsb2NhbGl6
ZWREZXNjcmlwdGlvbl0gVVRGOFN0cmluZ10pOwogCiAgICAgICAgIGlmIChrZXlTdGF0dXMgPCBB
VktleVZhbHVlU3RhdHVzTG9hZGVkKQogICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyQVZB
c3NldFN0YXR1c0xvYWRpbmc7Ly8gQXQgbGVhc3Qgb25lIGtleSBpcyBub3QgbG9hZGVkIHlldC4K
QEAgLTE2NzYsNyArMTY2MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludFdp
dGhJbWFnZUdlbmVyYXRvcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpwYWludFdpdGhJbWFnZUdlbmVyYXRvciglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xP
RyhMT0dJREVOVElGSUVSKTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGNy
ZWF0ZUltYWdlRm9yVGltZUluUmVjdChjdXJyZW50VGltZSgpLCByZWN0KTsKICAgICBpZiAoaW1h
Z2UpIHsKQEAgLTE2OTUsNyArMTY4MCw3IEBAIFJldGFpblB0cjxDR0ltYWdlUmVmPiBNZWRpYVBs
YXllclByaXZhdGUKICAgICAgICAgY3JlYXRlSW1hZ2VHZW5lcmF0b3IoKTsKICAgICBBU1NFUlQo
bV9pbWFnZUdlbmVyYXRvcik7CiAKLSNpZiAhTE9HX0RJU0FCTEVECisjaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECiAgICAgZG91YmxlIHN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
KCk7CiAjZW5kaWYKIApAQCAtMTcwMyw5ICsxNjg4LDggQEAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IE1lZGlhUGxheWVyUHJpdmF0ZQogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiByYXdJbWFnZSA9
IGFkb3B0Q0YoW21faW1hZ2VHZW5lcmF0b3IuZ2V0KCkgY29weUNHSW1hZ2VBdFRpbWU6Q01UaW1l
TWFrZVdpdGhTZWNvbmRzKHRpbWUsIDYwMCkgYWN0dWFsVGltZTpuaWwgZXJyb3I6bmlsXSk7CiAg
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlQ29w
eVdpdGhDb2xvclNwYWNlKHJhd0ltYWdlLmdldCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpKSk7CiAK
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgZG91YmxlIGR1cmF0aW9uID0gbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCkgLSBzdGFydDsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVJbWFnZUZvclRpbWVJblJlY3QoJXApIC0gY3JlYXRp
bmcgaW1hZ2UgdG9vayAlLjRmIiwgdGhpcywgbmFycm93UHJlY2lzaW9uVG9GbG9hdChkdXJhdGlv
bikpOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIERFQlVHX0xPRyhMT0dJREVOVElG
SUVSLCAiY3JlYXRpbmcgaW1hZ2UgdG9vayAiLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KSAtIHN0YXJ0KTsKICNlbmRpZgogCiAgICAgcmV0dXJuIGltYWdlOwpAQCAtMTcxMyw3ICsxNjk3
LDYgQEAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IE1lZGlhUGxheWVyUHJpdmF0ZQogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hT
ZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBzdXBwb3J0ZWRUeXBlcykKIHsK
LSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpnZXRT
dXBwb3J0ZWRUeXBlcyIpOwogICAgIHN1cHBvcnRlZFR5cGVzID0gQVZGb3VuZGF0aW9uTUlNRVR5
cGVDYWNoZTo6c2luZ2xldG9uKCkudHlwZXMoKTsKIH0gCiAKQEAgLTIwNDIsOCArMjAyNSw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogICAgIHNldEhhc0Ns
b3NlZENhcHRpb25zKGhhc0NhcHRpb25zKTsKIAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjp0cmFja3NDaGFuZ2VkKCVwKSAtIGhhc1ZpZGVvID0gJXMsIGhh
c0F1ZGlvID0gJXMsIGhhc0NhcHRpb25zID0gJXMiLAotICAgICAgICB0aGlzLCBib29sU3RyaW5n
KGhhc1ZpZGVvKCkpLCBib29sU3RyaW5nKGhhc0F1ZGlvKCkpLCBib29sU3RyaW5nKGhhc0Nsb3Nl
ZENhcHRpb25zKCkpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAiaGFzIHZpZGVvID0g
IiwgaGFzVmlkZW8oKSwgIiwgaGFzIGF1ZGlvID0gIiwgaGFzQXVkaW8oKSwgIiwgaGFzIGNhcHRp
b25zID0gIiwgaGFzQ2xvc2VkQ2FwdGlvbnMoKSk7CiAKICAgICBzaXplQ2hhbmdlZCgpOwogCkBA
IC0yMTcwLDcgKzIxNTIsNyBAQCB2b2lkIGRldGVybWluZUNoYW5nZWRUcmFja3NGcm9tTmV3VHJh
Y2tzCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlQXVk
aW9UcmFja3MoKQogewotI2lmICFMT0dfRElTQUJMRUQKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKICAgICBzaXplX3QgY291bnQgPSBtX2F1ZGlvVHJhY2tzLnNpemUoKTsKICNlbmRpZgogCkBA
IC0yMTkwLDE0ICsyMTcyLDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9hdWRpb1RyYWNrcykKICAgICAgICAgdHJh
Y2stPnJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpOwogCi0jaWYgIUxPR19ESVNBQkxFRAotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0ZUF1
ZGlvVHJhY2tzKCVwKSAtIGF1ZGlvIHRyYWNrIGNvdW50IHdhcyAlbHUsIGlzICVsdSIsIHRoaXMs
IGNvdW50LCBtX2F1ZGlvVHJhY2tzLnNpemUoKSk7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgInRyYWNrIGNvdW50IHdhcyAiLCBjb3VudCwg
IiwgaXMgIiwgbV9hdWRpb1RyYWNrcy5zaXplKCkpOwogI2VuZGlmCiB9CiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlVmlkZW9UcmFja3MoKQogewotI2lm
ICFMT0dfRElTQUJMRUQKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBzaXplX3QgY291
bnQgPSBtX3ZpZGVvVHJhY2tzLnNpemUoKTsKICNlbmRpZgogCkBAIC0yMjE2LDggKzIxOTgsOCBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgZm9yIChhdXRv
JiB0cmFjayA6IG1fYXVkaW9UcmFja3MpCiAgICAgICAgIHRyYWNrLT5yZXNldFByb3BlcnRpZXNG
cm9tVHJhY2soKTsKIAotI2lmICFMT0dfRElTQUJMRUQKLSAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRhdGVWaWRlb1RyYWNrcyglcCkgLSB2aWRl
byB0cmFjayBjb3VudCB3YXMgJWx1LCBpcyAlbHUiLCB0aGlzLCBjb3VudCwgbV92aWRlb1RyYWNr
cy5zaXplKCkpOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIElORk9fTE9HKExPR0lE
RU5USUZJRVIsICJ0cmFjayBjb3VudCB3YXMgIiwgY291bnQsICIsIGlzICIsIG1fdmlkZW9UcmFj
a3Muc2l6ZSgpKTsKICNlbmRpZgogfQogCkBAIC0yMzE4LDcgKzIzMDAsNyBAQCBib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlVmlkZW9PdXRwdXQoKQogewotICAgIExPRyhNZWRpYSwg
Ik1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVZpZGVvT3V0cHV0KCVw
KSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgaWYgKCFtX2F2
UGxheWVySXRlbSB8fCBtX3ZpZGVvT3V0cHV0KQogICAgICAgICByZXR1cm47CkBAIC0yMzM0LDgg
KzIzMTYsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAg
W21fdmlkZW9PdXRwdXQgc2V0RGVsZWdhdGU6bV92aWRlb091dHB1dERlbGVnYXRlLmdldCgpIHF1
ZXVlOmdsb2JhbFB1bGxEZWxlZ2F0ZVF1ZXVlKCldOwogCiAgICAgW21fYXZQbGF5ZXJJdGVtLmdl
dCgpIGFkZE91dHB1dDptX3ZpZGVvT3V0cHV0LmdldCgpXTsKLQotICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVZpZGVvT3V0cHV0KCVwKSAt
IHJldHVybmluZyAlcCIsIHRoaXMsIG1fdmlkZW9PdXRwdXQuZ2V0KCkpOwogfQogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmRlc3Ryb3lWaWRlb091dHB1dCgpCkBA
IC0yMzQ1LDcgKzIzMjUsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6CiAKICAgICBpZiAobV9hdlBsYXllckl0ZW0pCiAgICAgICAgIFttX2F2UGxheWVySXRlbS5n
ZXQoKSByZW1vdmVPdXRwdXQ6bV92aWRlb091dHB1dC5nZXQoKV07Ci0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveVZpZGVvT3V0cHV0KCVw
KSAtIGRlc3Ryb3lpbmcgICVwIiwgdGhpcywgbV92aWRlb091dHB1dC5nZXQoKSk7CisKKyAgICBJ
TkZPX0xPRyhMT0dJREVOVElGSUVSKTsKIAogICAgIG1fdmlkZW9PdXRwdXQgPSAwOwogfQpAQCAt
MjM5NywxNSArMjM3OCwxNCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6CiAgICAgICAgIG1fcGl4ZWxCdWZmZXJDb25mb3JtZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFBp
eGVsQnVmZmVyQ29uZm9ybWVyQ1Y+KChDRkRpY3Rpb25hcnlSZWYpYXR0cmlidXRlcyk7CiAgICAg
fQogCi0jaWYgIUxPR19ESVNBQkxFRAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIGRv
dWJsZSBzdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwogI2VuZGlmCiAKICAg
ICBtX2xhc3RJbWFnZSA9IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXItPmNyZWF0ZUltYWdlRnJvbVBp
eGVsQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgpKTsKIAotI2lmICFMT0dfRElTQUJMRUQKLSAgICBk
b3VibGUgZHVyYXRpb24gPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIHN0YXJ0Owot
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0
ZUxhc3RJbWFnZSglcCkgLSBjcmVhdGluZyBidWZmZXIgdG9vayAlLjRmIiwgdGhpcywgbmFycm93
UHJlY2lzaW9uVG9GbG9hdChkdXJhdGlvbikpOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAor
ICAgIERFQlVHX0xPRyhMT0dJREVOVElGSUVSLCAiY3JlYXRpbmcgYnVmZmVyIHRvb2sgIiwgbW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBzdGFydCk7CiAjZW5kaWYKIH0KIApAQCAtMjQy
Myw3ICsyNDAzLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgog
ICAgIGlmICghZmlyc3RFbmFibGVkVmlkZW9UcmFjaykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnRXaXRo
VmlkZW9PdXRwdXQoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAg
RmxvYXRSZWN0IGltYWdlUmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgobV9sYXN0SW1hZ2UuZ2V0
KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KG1fbGFzdEltYWdlLmdldCgpKSk7CkBAIC0yNDQyLDcgKzI0
MjIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlT3BlbkdMVmlkZW9PdXRw
dXQoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmNyZWF0ZU9wZW5HTFZpZGVvT3V0cHV0KCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExP
R0lERU5USUZJRVIpOwogCiAgICAgaWYgKCFtX2F2UGxheWVySXRlbSB8fCBtX29wZW5HTFZpZGVv
T3V0cHV0KQogICAgICAgICByZXR1cm47CkBAIC0yNDU2LDggKzI0MzYsNiBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgQVNTRVJUKG1fb3BlbkdMVmlkZW9P
dXRwdXQpOwogCiAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIGFkZE91dHB1dDptX29wZW5HTFZp
ZGVvT3V0cHV0LmdldCgpXTsKLQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OmNyZWF0ZU9wZW5HTFZpZGVvT3V0cHV0KCVwKSAtIHJldHVybmluZyAl
cCIsIHRoaXMsIG1fb3BlbkdMVmlkZW9PdXRwdXQuZ2V0KCkpOwogfQogCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmRlc3Ryb3lPcGVuR0xWaWRlb091dHB1dCgpCkBA
IC0yNDY1LDkgKzI0NDMsMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOgogICAgIGlmICghbV9vcGVuR0xWaWRlb091dHB1dCkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CisKICAgICBpZiAobV9hdlBsYXllckl0ZW0pCiAg
ICAgICAgIFttX2F2UGxheWVySXRlbS5nZXQoKSByZW1vdmVPdXRwdXQ6bV9vcGVuR0xWaWRlb091
dHB1dC5nZXQoKV07Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6ZGVzdHJveU9wZW5HTFZpZGVvT3V0cHV0KCVwKSAtIGRlc3Ryb3lpbmcgICVwIiwg
dGhpcywgbV92aWRlb091dHB1dC5nZXQoKSk7CiAKICAgICBtX29wZW5HTFZpZGVvT3V0cHV0ID0g
MDsKIH0KQEAgLTI1MzMsNyArMjUxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzoKICAgICBsb25nIHJlc3VsdCA9IGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1f
dmlkZW9PdXRwdXRTZW1hcGhvcmUsIGRpc3BhdGNoX3RpbWUoMCwgMSAqIE5TRUNfUEVSX1NFQykp
OwogCiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2FpdEZvclZpZGVvT3V0cHV0TWVkaWFEYXRhV2lsbENoYW5n
ZSglcCkgdGltZWQgb3V0IiwgdGhpcyk7CisgICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVS
LCAidGltZWQgb3V0Iik7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzo6b3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZShBVlBsYXllckl0ZW1WaWRlb091dHB1dFR5
cGUgKikKQEAgLTI2ODQsNyArMjY2Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzoKIHsKICAgICBBVk1lZGlhU2VsZWN0aW9uR3JvdXBUeXBlICpsZWdpYmxlR3Jv
dXAgPSBzYWZlTWVkaWFTZWxlY3Rpb25Hcm91cEZvckxlZ2libGVNZWRpYSgpOwogICAgIGlmICgh
bGVnaWJsZUdyb3VwKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnByb2Nlc3NNZWRpYVNlbGVjdGlvbk9wdGlvbnMoJXApIC0gbmlsIG1l
ZGlhU2VsZWN0aW9uR3JvdXAiLCB0aGlzKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklF
UiwgIm5vIG1lZGlhU2VsZWN0aW9uR3JvdXAiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMjc1OCw3ICsyNzM3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmZsdXNoQ3Vl
cygpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6Zmx1c2hDdWVzKCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwog
CiAgICAgaWYgKCFtX2N1cnJlbnRUZXh0VHJhY2spCiAgICAgICAgIHJldHVybjsKQEAgLTI3NzMs
OCArMjc1Miw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAg
ICBpZiAobV9jdXJyZW50VGV4dFRyYWNrID09IHRyYWNrKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRDdXJy
ZW50VGV4dFRyYWNrKCVwKSAtIHNlbGVjdGluZyB0cmFjayAlcCwgbGFuZ3VhZ2UgPSAlcyIsIHRo
aXMsIHRyYWNrLCB0cmFjayA/IHRyYWNrLT5sYW5ndWFnZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkgOiAiIik7Ci0gICAgICAgIAorICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJzZWxlY3Rp
bmcgdHJhY2sgd2l0aCBsYW5ndWFnZSAiLCB0cmFjayA/IHRyYWNrLT5sYW5ndWFnZSgpIDogIiIp
OworCiAgICAgbV9jdXJyZW50VGV4dFRyYWNrID0gdHJhY2s7CiAKICAgICBpZiAodHJhY2spIHsK
QEAgLTI4MjAsNyArMjc5OSw3IEBAIFN0cmluZyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmoKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKICAgICBpZiAoY3VycmVudGx5U2Vs
ZWN0ZWRBdWRpYmxlT3B0aW9uKSB7CiAgICAgICAgIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1Ry
YWNrID0gW1tjdXJyZW50bHlTZWxlY3RlZEF1ZGlibGVPcHRpb24gbG9jYWxlXSBsb2NhbGVJZGVu
dGlmaWVyXTsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCVwKSAtIHJldHVybmluZyBsYW5n
dWFnZSBvZiBzZWxlY3RlZCBhdWRpYmxlIG9wdGlvbjogJXMiLCB0aGlzLCBtX2xhbmd1YWdlT2ZQ
cmltYXJ5QXVkaW9UcmFjay51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURF
TlRJRklFUiwgImxhbmd1YWdlIG9mIHNlbGVjdGVkIGF1ZGlibGUgb3B0aW9uICIsIG1fbGFuZ3Vh
Z2VPZlByaW1hcnlBdWRpb1RyYWNrKTsKIAogICAgICAgICByZXR1cm4gbV9sYW5ndWFnZU9mUHJp
bWFyeUF1ZGlvVHJhY2s7CiAgICAgfQpAQCAtMjgzMSwxOSArMjgxMCwxNCBAQCBTdHJpbmcgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqCiAgICAgTlNBcnJheSAqdHJhY2tzID0gW21f
YXZBc3NldC5nZXQoKSB0cmFja3NXaXRoTWVkaWFUeXBlOkFWTWVkaWFUeXBlQXVkaW9dOwogICAg
IGlmICghdHJhY2tzIHx8IFt0cmFja3MgY291bnRdICE9IDEpIHsKICAgICAgICAgbV9sYW5ndWFn
ZU9mUHJpbWFyeUF1ZGlvVHJhY2sgPSBlbXB0eVN0cmluZygpOwotICAgICAgICBMT0coTWVkaWEs
ICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpsYW5ndWFnZU9mUHJpbWFyeUF1
ZGlvVHJhY2soJXApIC0gJWx1IGF1ZGlvIHRyYWNrcywgcmV0dXJuaW5nIGVtcHR5U3RyaW5nKCki
LCB0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPih0cmFja3MgPyBbdHJhY2tzIGNvdW50
XSA6IDApKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgdHJhY2tzID8gW3RyYWNr
cyBjb3VudF0gOiAwLCAiIGF1ZGlvIHRyYWNrcywgcmV0dXJuaW5nIGVtcHR5Iik7CiAgICAgICAg
IHJldHVybiBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjazsKICAgICB9CiAKICAgICBBVkFz
c2V0VHJhY2sgKnRyYWNrID0gW3RyYWNrcyBvYmplY3RBdEluZGV4OjBdOwogICAgIG1fbGFuZ3Vh
Z2VPZlByaW1hcnlBdWRpb1RyYWNrID0gQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbDo6bGFuZ3Vh
Z2VGb3JBVkFzc2V0VHJhY2sodHJhY2spOwogCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIGlmICht
X2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayA9PSBlbXB0eVN0cmluZygpKQotICAgICAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpsYW5ndWFnZU9m
UHJpbWFyeUF1ZGlvVHJhY2soJXApIC0gc2luZ2xlIGF1ZGlvIHRyYWNrIGhhcyBubyBsYW5ndWFn
ZSwgcmV0dXJuaW5nIGVtcHR5U3RyaW5nKCkiLCB0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omxhbmd1YWdlT2ZQ
cmltYXJ5QXVkaW9UcmFjayglcCkgLSByZXR1cm5pbmcgbGFuZ3VhZ2Ugb2Ygc2luZ2xlIGF1ZGlv
IHRyYWNrOiAlcyIsIHRoaXMsIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrLnV0ZjgoKS5k
YXRhKCkpOwotI2VuZGlmCisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgInNpbmdsZSBhdWRp
byB0cmFjayBoYXMgbGFuZ3VhZ2UgXCIiLCBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaywg
IlwiIik7CiAKICAgICByZXR1cm4gbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2s7CiB9CkBA
IC0yODY0LDcgKzI4MzgsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6CiAgICAgd2lyZWxlc3NUYXJnZXQgPSBtX2F2UGxheWVyICYmIG1fYXZQbGF5ZXIuZ2V0KCku
ZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZTsKICNlbmRpZgogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJl
bGVzcyglcCkgLSByZXR1cm5pbmcgJXMiLCB0aGlzLCBib29sU3RyaW5nKHdpcmVsZXNzVGFyZ2V0
KSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIi0gIiwgd2lyZWxlc3NUYXJnZXQpOwog
CiAgICAgcmV0dXJuIHdpcmVsZXNzVGFyZ2V0OwogfQpAQCAtMjkwNCw3ICsyODc4LDYgQEAgU3Ry
aW5nIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iagogI2Vsc2UKICAgICB3aXJlbGVz
c1RhcmdldE5hbWUgPSB3a0V4ZXJuYWxEZXZpY2VEaXNwbGF5TmFtZUZvclBsYXllcihtX2F2UGxh
eWVyLmdldCgpKTsKICNlbmRpZgotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OndpcmVsZXNzUGxheWJhY2tUYXJnZXROYW1lKCVwKSAtIHJldHVybmlu
ZyAlcyIsIHRoaXMsIHdpcmVsZXNzVGFyZ2V0TmFtZS51dGY4KCkuZGF0YSgpKTsKIAogICAgIHJl
dHVybiB3aXJlbGVzc1RhcmdldE5hbWU7CiB9CkBAIC0yOTE1LDE0ICsyODg4LDE0IEBAIGJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgcmV0dXJuICFtX2Fs
bG93c1dpcmVsZXNzVmlkZW9QbGF5YmFjazsKIAogICAgIG1fYWxsb3dzV2lyZWxlc3NWaWRlb1Bs
YXliYWNrID0gW21fYXZQbGF5ZXIuZ2V0KCkgYWxsb3dzRXh0ZXJuYWxQbGF5YmFja107Ci0gICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2lyZWxlc3NW
aWRlb1BsYXliYWNrRGlzYWJsZWQoJXApIC0gcmV0dXJuaW5nICVzIiwgdGhpcywgYm9vbFN0cmlu
ZyghbV9hbGxvd3NXaXJlbGVzc1ZpZGVvUGxheWJhY2spKTsKKyAgICBJTkZPX0xPRyhMT0dJREVO
VElGSUVSLCAiLSAiLCAhbV9hbGxvd3NXaXJlbGVzc1ZpZGVvUGxheWJhY2spOwogCiAgICAgcmV0
dXJuICFtX2FsbG93c1dpcmVsZXNzVmlkZW9QbGF5YmFjazsKIH0KIAogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZChib29sIGRpc2FibGVkKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCVwKSAtICVz
IiwgdGhpcywgYm9vbFN0cmluZyhkaXNhYmxlZCkpOworICAgIElORk9fTE9HKExPR0lERU5USUZJ
RVIsICItICIsIGRpc2FibGVkKTsKICAgICBtX2FsbG93c1dpcmVsZXNzVmlkZW9QbGF5YmFjayA9
ICFkaXNhYmxlZDsKICAgICBpZiAoIW1fYXZQbGF5ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTI5
NDAsNyArMjkxMyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoK
IAogICAgIG1fb3V0cHV0Q29udGV4dCA9IG1fcGxheWJhY2tUYXJnZXQtPnRhcmdldFR5cGUoKSA9
PSBNZWRpYVBsYXliYWNrVGFyZ2V0OjpBVkZvdW5kYXRpb24gPyB0b01lZGlhUGxheWJhY2tUYXJn
ZXRNYWMobV9wbGF5YmFja1RhcmdldC5nZXQoKSktPm91dHB1dENvbnRleHQoKSA6IG51bGxwdHI7
CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpz
ZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCVwKSAtIHRhcmdldCA9ICVwLCBkZXZpY2UgbmFtZSA9
ICVzIiwgdGhpcywgbV9vdXRwdXRDb250ZXh0LmdldCgpLCBtX3BsYXliYWNrVGFyZ2V0LT5kZXZp
Y2VOYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAK
ICAgICBpZiAoIW1fcGxheWJhY2tUYXJnZXQtPmhhc0FjdGl2ZVJvdXRlKCkpCiAgICAgICAgIHNl
dFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGZhbHNlKTsKQEAgLTI5NTYsMTEgKzI5MjksMTEg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlmICghbV9w
bGF5YmFja1RhcmdldCkKICAgICAgICAgcmV0dXJuOwogCisgICAgSU5GT19MT0coTE9HSURFTlRJ
RklFUiwgIi0gIiwgc2hvdWxkUGxheSk7CisKICAgICBpZiAobV9wbGF5YmFja1RhcmdldC0+dGFy
Z2V0VHlwZSgpID09IE1lZGlhUGxheWJhY2tUYXJnZXQ6OkFWRm91bmRhdGlvbikgewogICAgICAg
ICBBVk91dHB1dENvbnRleHQgKm5ld0NvbnRleHQgPSBzaG91bGRQbGF5ID8gbV9vdXRwdXRDb250
ZXh0LmdldCgpIDogbmlsOwogCi0gICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KCVwKSAtIHRh
cmdldCA9ICVwLCBzaG91bGRQbGF5ID0gJXMiLCB0aGlzLCBuZXdDb250ZXh0LCBib29sU3RyaW5n
KHNob3VsZFBsYXkpKTsKLQogICAgICAgICBpZiAoIW1fYXZQbGF5ZXIpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKQEAgLTI5NzcsOCArMjk1MCw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzoKIAogICAgIEFTU0VSVChtX3BsYXliYWNrVGFyZ2V0LT50YXJnZXRUeXBl
KCkgPT0gTWVkaWFQbGF5YmFja1RhcmdldDo6TW9jayk7CiAKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1Rh
cmdldCglcCkgLSB0YXJnZXQgPSB7TW9ja30sIHNob3VsZFBsYXkgPSAlcyIsIHRoaXMsIGJvb2xT
dHJpbmcoc2hvdWxkUGxheSkpOwotCiAgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CiAgICAg
YXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIoKTsKICAgICBzY2hlZHVsZU1haW5UaHJlYWRO
b3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb24o
W3dlYWtUaGlzXSB7CkBAIC0zMDg0LDcgKzMwNTUsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzo6c2V0U2hvdWxkQnVmZmVyRGF0YShib29sIHNob3VsZEJ1ZmZlcikKIHsKLSAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzaG91bGRCdWZmZXJE
YXRhKCVwKSAtICVzIiwgdGhpcywgYm9vbFN0cmluZyhzaG91bGRCdWZmZXIpKTsKKyAgICBJTkZP
X0xPRyhMT0dJREVOVElGSUVSLCAiLSAiLCBzaG91bGRCdWZmZXIpOworCiAgICAgaWYgKG1fc2hv
dWxkQnVmZmVyRGF0YSA9PSBzaG91bGRCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzEy
Niw3ICszMDk4LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgog
ewogICAgIG1fY3VycmVudE1ldGFEYXRhID0gbWV0YWRhdGEgJiYgIVttZXRhZGF0YSBpc0tpbmRP
ZkNsYXNzOltOU051bGwgY2xhc3NdXSA/IG1ldGFkYXRhIDogbmlsOwogCi0gICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bWV0YWRhdGFEaWRBcnJpdmUo
JXApIC0gYWRkaW5nICVpIGN1ZXMgYXQgdGltZSAlcyIsIHRoaXMsIG1fY3VycmVudE1ldGFEYXRh
ID8gc3RhdGljX2Nhc3Q8aW50PihbbV9jdXJyZW50TWV0YURhdGEuZ2V0KCkgY291bnRdKSA6IDAs
IHRvU3RyaW5nKG1lZGlhVGltZSkudXRmOCgpLmRhdGEoKSk7CisgICAgREVCVUdfTE9HKExPR0lE
RU5USUZJRVIsICJhZGRpbmcgIiwgbV9jdXJyZW50TWV0YURhdGEgPyBbbV9jdXJyZW50TWV0YURh
dGEuZ2V0KCkgY291bnRdIDogMCwgIiBhdCB0aW1lICIsIG1lZGlhVGltZSk7CiAKICNpZiBFTkFC
TEUoREFUQUNVRV9WQUxVRSkKICAgICBpZiAoc2Vla2luZygpKQpAQCAtMzM2OSwxNiArMzM0MSw3
IEBAIC0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG8KICAgICAgICAgcmV0
dXJuOwogCiAgICAgYm9vbCB3aWxsQ2hhbmdlID0gW1tjaGFuZ2UgdmFsdWVGb3JLZXk6TlNLZXlW
YWx1ZUNoYW5nZU5vdGlmaWNhdGlvbklzUHJpb3JLZXldIGJvb2xWYWx1ZV07Ci0KLSNpZiAhTE9H
X0RJU0FCTEVECi0gICAgaWYgKHdpbGxDaGFuZ2UpCi0gICAgICAgIExPRyhNZWRpYSwgIldlYkNv
cmVBVkZNb3ZpZU9ic2VydmVyOjpvYnNlcnZlVmFsdWVGb3JLZXlQYXRoKCVwKSAtIHdpbGwgY2hh
bmdlLCBrZXlQYXRoID0gJXMiLCBzZWxmLCBba2V5UGF0aCBVVEY4U3RyaW5nXSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gdmFsdWVTdHJpbmcgPSBhZG9wdE5TKFtb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRm9ybWF0OkAiJUAiLCBuZXdWYWx1ZV0pOwotICAgICAg
ICBMT0coTWVkaWEsICJXZWJDb3JlQVZGTW92aWVPYnNlcnZlcjo6b2JzZXJ2ZVZhbHVlRm9yS2V5
UGF0aCglcCkgLSBkaWQgY2hhbmdlLCBrZXlQYXRoID0gJXMsIHZhbHVlID0gJXMiLCBzZWxmLCBb
a2V5UGF0aCBVVEY4U3RyaW5nXSwgW3ZhbHVlU3RyaW5nLmdldCgpIFVURjhTdHJpbmddKTsKLSAg
ICB9Ci0jZW5kaWYKLQorICAgIGJvb2wgc2hvdWxkTG9nVmFsdWUgPSB0cnVlOwogICAgIFdURjo6
RnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb247CiAKICAgICBpZiAoY29udGV4dCA9PSBNZWRpYVBs
YXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dEFWUGxheWVyTGF5ZXIpIHsKQEAgLTM0
MTAsMTUgKzMzNzMsMTkgQEAgLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOmtleVBhdGgg
bwogICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnBsYXliYWNrQnVmZmVyRW1wdHlEaWRDaGFuZ2UsIG1fY2FsbGJhY2ss
IFtuZXdWYWx1ZSBib29sVmFsdWVdKTsKICAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVh
bFRvU3RyaW5nOkAicGxheWJhY2tCdWZmZXJGdWxsIl0pCiAgICAgICAgICAgICBmdW5jdGlvbiA9
IHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxheWJhY2tC
dWZmZXJGdWxsRGlkQ2hhbmdlLCBtX2NhbGxiYWNrLCBbbmV3VmFsdWUgYm9vbFZhbHVlXSk7Ci0g
ICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAImFzc2V0Il0pCisgICAg
ICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAImFzc2V0Il0pIHsKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpzZXRBc3NldCwgbV9jYWxsYmFjaywgUmV0YWluUHRyPGlkPihuZXdWYWx1ZSkpOwot
ICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJsb2FkZWRUaW1lUmFu
Z2VzIl0pCisgICAgICAgICAgICBzaG91bGRMb2dWYWx1ZSA9IGZhbHNlOworICAgICAgICB9IGVs
c2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAImxvYWRlZFRpbWVSYW5nZXMiXSkgewog
ICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OmxvYWRlZFRpbWVSYW5nZXNEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFJldGFp
blB0cjxOU0FycmF5PihuZXdWYWx1ZSkpOwotICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0Vx
dWFsVG9TdHJpbmc6QCJzZWVrYWJsZVRpbWVSYW5nZXMiXSkKKyAgICAgICAgICAgIHNob3VsZExv
Z1ZhbHVlID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3Ry
aW5nOkAic2Vla2FibGVUaW1lUmFuZ2VzIl0pIHsKICAgICAgICAgICAgIGZ1bmN0aW9uID0gc3Rk
OjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZWVrYWJsZVRpbWVS
YW5nZXNEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFJldGFpblB0cjxOU0FycmF5PihuZXdWYWx1ZSkp
OwotICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJ0cmFja3MiXSkK
KyAgICAgICAgICAgIHNob3VsZExvZ1ZhbHVlID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAo
W2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAidHJhY2tzIl0pIHsKICAgICAgICAgICAgIGZ1bmN0
aW9uID0gc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp0cmFj
a3NEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFJldGFpblB0cjxOU0FycmF5PihuZXdWYWx1ZSkpOwot
ICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJoYXNFbmFibGVkQXVk
aW8iXSkKKyAgICAgICAgICAgIHNob3VsZExvZ1ZhbHVlID0gZmFsc2U7CisgICAgICAgIH0gZWxz
ZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAiaGFzRW5hYmxlZEF1ZGlvIl0pCiAgICAg
ICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6aGFzRW5hYmxlZEF1ZGlvRGlkQ2hhbmdlLCBtX2NhbGxiYWNrLCBbbmV3VmFsdWUg
Ym9vbFZhbHVlXSk7CiAgICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpA
InByZXNlbnRhdGlvblNpemUiXSkKICAgICAgICAgICAgIGZ1bmN0aW9uID0gc3RkOjpiaW5kKCZN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwcmVzZW50YXRpb25TaXplRGlkQ2hh
bmdlLCBtX2NhbGxiYWNrLCBGbG9hdFNpemUoW25ld1ZhbHVlIHNpemVWYWx1ZV0pKTsKQEAgLTM0
MzAsNiArMzM5Nyw3IEBAIC0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG8K
ICAgICAgICAgICAgIGlmIChDTVRJTUVfSVNfTlVNRVJJQyhpdGVtVGltZSkpCiAgICAgICAgICAg
ICAgICAgbm93ID0gc3RkOjptYXgodG9NZWRpYVRpbWUoaXRlbVRpbWUpLCBNZWRpYVRpbWU6Onpl
cm9UaW1lKCkpOwogICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om1ldGFkYXRhRGlkQXJyaXZlLCBtX2NhbGxiYWNrLCBS
ZXRhaW5QdHI8TlNBcnJheT4obmV3VmFsdWUpLCBub3cpOworICAgICAgICAgICAgc2hvdWxkTG9n
VmFsdWUgPSBmYWxzZTsKICAgICAgICAgfSBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJp
bmc6QCJjYW5QbGF5RmFzdFJldmVyc2UiXSkKICAgICAgICAgICAgIGZ1bmN0aW9uID0gc3RkOjpi
aW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjYW5QbGF5RmFzdFJldmVy
c2VEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFtuZXdWYWx1ZSBib29sVmFsdWVdKTsKICAgICAgICAg
ZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAiY2FuUGxheUZhc3RGb3J3YXJkIl0p
CkBAIC0zNDQ5LDcgKzM0MTcsMjYgQEAgLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOmtl
eVBhdGggbwogICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6Om91dHB1dE9ic2N1cmVkRHVlVG9JbnN1ZmZpY2llbnRFeHRl
cm5hbFByb3RlY3Rpb25DaGFuZ2VkLCBtX2NhbGxiYWNrLCBbbmV3VmFsdWUgYm9vbFZhbHVlXSk7
CiAjZW5kaWYKICAgICB9Ci0gICAgCisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBp
ZiAobV9jYWxsYmFjay0+bG9nZ2VyKCkud2lsbExvZyhtX2NhbGxiYWNrLT5sb2dDaGFubmVsKCks
IFdURkxvZ0xldmVsRGVidWcpKSB7CisKKyAgICAgICAgaWYgKHdpbGxDaGFuZ2UpCisgICAgICAg
ICAgICBtX2NhbGxiYWNrLT5sb2dnZXIoKS5kZWJ1ZyhtX2NhbGxiYWNrLT5sb2dDaGFubmVsKCks
IFBBTDo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcigiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uIiwgIm9ic2VydmVWYWx1ZUZvcktleVBhdGgiLCBtX2NhbGxiYWNrLT5sb2dJZGVudGlm
aWVyKCkpLCAid2lsbCBjaGFuZ2UgJyIsIFtrZXlQYXRoIFVURjhTdHJpbmddLCAiJyIpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRMb2dWYWx1ZSkgeworICAgICAgICAg
ICAgICAgIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJkdXJhdGlvbiJdKQorICAgICAg
ICAgICAgICAgICAgICBtX2NhbGxiYWNrLT5sb2dnZXIoKS5kZWJ1ZyhtX2NhbGxiYWNrLT5sb2dD
aGFubmVsKCksIFBBTDo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcigiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uIiwgIm9ic2VydmVWYWx1ZUZvcktleVBhdGgiLCBtX2NhbGxiYWNrLT5s
b2dJZGVudGlmaWVyKCkpLCAiZGlkIGNoYW5nZSAnIiwgW2tleVBhdGggVVRGOFN0cmluZ10sICIn
IHRvICIsIHRvTWVkaWFUaW1lKFtuZXdWYWx1ZSBDTVRpbWVWYWx1ZV0pKTsKKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiB2YWx1
ZVN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhGb3JtYXQ6QCIlQCIs
IG5ld1ZhbHVlXSk7CisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2stPmxvZ2dlcigpLmRl
YnVnKG1fY2FsbGJhY2stPmxvZ0NoYW5uZWwoKSwgUEFMOjpMb2dnZXI6OkxvZ1NpdGVJZGVudGlm
aWVyKCJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24iLCAib2JzZXJ2ZVZhbHVlRm9yS2V5
UGF0aCIsIG1fY2FsbGJhY2stPmxvZ0lkZW50aWZpZXIoKSksICJkaWQgY2hhbmdlICciLCBba2V5
UGF0aCBVVEY4U3RyaW5nXSwgIicgdG8gIiwgW3ZhbHVlU3RyaW5nLmdldCgpIFVURjhTdHJpbmdd
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBtX2NhbGxiYWNrLT5sb2dnZXIoKS5kZWJ1ZyhtX2NhbGxiYWNrLT5sb2dDaGFubmVsKCksIFBB
TDo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcigiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uIiwgIm9ic2VydmVWYWx1ZUZvcktleVBhdGgiLCBtX2NhbGxiYWNrLT5sb2dJZGVudGlmaWVy
KCkpLCAiZGlkIGNoYW5nZSAnIiwgW2tleVBhdGggVVRGOFN0cmluZ10sICInIik7CisgICAgICAg
IH0KKyAgICB9CisjZW5kaWYKKwogICAgIGlmICghZnVuY3Rpb24pCiAgICAgICAgIHJldHVybjsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320481</attachid>
            <date>2017-09-11 14:33:59 -0700</date>
            <delta_ts>2017-09-12 08:59:51 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>avfoundation_logging_patch_6.txt</filename>
            <type>text/plain</type>
            <size>60784</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisyMDE3LTA5LTExICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN3aXRjaCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24gdG8gcmVsZWFzZSBsb2dnaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2MjEKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzM0MzM1MzExPgorCisgICAgICAgIFJldmlld2VkIGJ5IEplciBOb2JsZS4KKwor
ICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om51bGxMb2dnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om1lZGlhUGxheWVyTG9nZ2VyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJDbGllbnQ6Om1lZGlhUGxheWVyTG9nSWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJMb2dnZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om1lZGlhUGxheWVyTG9nSWRlbnRpZmllcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246On5NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uOjpzZXRVcFZpZGVvUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6dGVhckRvd25WaWRlb1JlbmRlcmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmxvYWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpwbGF5YWJpbGl0eUtub3du
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cHJl
cGFyZVRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246OnBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OmR1cmF0aW9uTWVkaWFUaW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2Vla1dpdGhUb2xlcmFuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXROYXR1cmFsU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1h
eE1lZGlhVGltZVNlZWthYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6bWluTWVkaWFUaW1lU2Vla2FibGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp1cGRhdGVTdGF0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpyYXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b246OnRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6c2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246OmludmFsaWRhdGVDYWNoZWREdXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldFByZWxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptYWluVGhy
ZWFkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpzY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpkaXNwYXRjaE5vdGlmaWNhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnByb2Nl
c3NOZXdBbmRSZW1vdmVkVGV4dFRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246OmxvZ0NoYW5uZWwgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24u
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9n
Q2xhc3NOYW1lIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OmNsZWFyTWVkaWFDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjbGVhck1lZGlhQ2FjaGVGb3JPcmlnaW5z
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OmNhbmNlbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6Y3JlYXRlSW1hZ2VHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveUltYWdlR2VuZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNy
ZWF0ZUFWUGxheWVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveVZpZGVvTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZBc3NldEZvclVSTCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpj
cmVhdGVBVlBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpjcmVhdGVBVlBsYXllckl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2hlY2tQbGF5YWJpbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpiZWdpbkxv
YWRpbmdNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpwbGF0Zm9ybU1lZGlhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtUGxheSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybVBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXRmb3JtRHVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRNdXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRDbG9zZWRD
YXB0aW9uc1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6YXNzZXRTdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnRXaXRoSW1hZ2VHZW5lcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y3JlYXRlSW1hZ2VGb3JUaW1lSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmdldFN1cHBvcnRlZFR5cGVzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnRyYWNrc0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
dXBkYXRlQXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlVmlkZW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlVmlkZW9PdXRwdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVz
dHJveVZpZGVvT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnVwZGF0ZUxhc3RJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludFdpdGhWaWRlb091dHB1dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVh
dGVPcGVuR0xWaWRlb091dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95T3BlbkdMVmlkZW9PdXRwdXQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2FpdEZvclZpZGVv
T3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwcm9jZXNzTWVkaWFTZWxlY3Rpb25PcHRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmZs
dXNoQ3Vlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpzZXRDdXJyZW50VGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjppc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OndpcmVsZXNzUGxheWJh
Y2tUYXJnZXROYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNl
dFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0U2hvdWxkQnVmZmVyRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjptZXRhZGF0
YURpZEFycml2ZSk6CisgICAgICAgICgtW1dlYkNvcmVBVkZNb3ZpZU9ic2VydmVyIG9ic2VydmVW
YWx1ZUZvcktleVBhdGg6b2ZPYmplY3Q6Y2hhbmdlOmNvbnRleHQ6XSk6CisgICAgICAgIChXZWJD
b3JlOjpib29sU3RyaW5nKTogRGVsZXRlZC4KKwogMjAxNy0wOS0wNiAgSm9zZXBoIFBlY29yYXJv
ICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIEZldGNoJ3MgUmVzcG9uc2Uuc3RhdHVz
VGV4dCBpcyB1bmV4cGVjdGVkbHkgdGhlIGZ1bGwgaHR0cCBzdGF0dXMgbGluZSBmb3IgSFRUUC8y
IHJlc3BvbnNlcwpJbmRleDogU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE3MTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTctMDktMTEgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3dpdGNoIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiB0byByZWxlYXNl
IGxvZ2dpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NjYyMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzQzMzUzMTE+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgSmVyIE5vYmxlLgorCisgICAgICAgICogcGFsL0xvZ2dlci5oOgorICAgICAgICAo
UEFMOjpMb2dBcmd1bWVudDo6dG9TdHJpbmcpOgorICAgICAgICAqIHBhbC9Mb2dnZXJIZWxwZXIu
aDoKKwogMjAxNy0wOS0wNiAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXF1aXJlIExvZ2dpbmdIZWxwZXIgb3ZlcnJpZGVzIHRvIHByb3ZpZGUgaWRl
bnRpZmllcgpJbmRleDogU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0xvZ2dlci5oCShyZXZpc2lvbiAyMjE3MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0xvZ2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2
ICszOSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgTG9nQXJndW1lbnQgewogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPFUsIGJvb2w+Ojp2YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhib29s
IGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudCA/IEFTQ0lJTGl0ZXJhbCgidHJ1ZSIpIDogQVND
SUlMaXRlcmFsKCJmYWxzZSIpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0YXRp
YyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgaW50Pjo6dmFsdWUsIFN0
cmluZz46OnR5cGUgdG9TdHJpbmcoaW50IGFyZ3VtZW50KSB7IHJldHVybiBTdHJpbmc6Om51bWJl
cihhcmd1bWVudCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCB1bnNpZ25lZD46OnZhbHVlLCBTdHJp
bmc+Ojp0eXBlIHRvU3RyaW5nKHVuc2lnbmVkIGFyZ3VtZW50KSB7IHJldHVybiBTdHJpbmc6Om51
bWJlcihhcmd1bWVudCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCB1bnNpZ25lZCBsb25nPjo6dmFs
dWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmcodW5zaWduZWQgbG9uZyBhcmd1bWVudCkgeyByZXR1
cm4gU3RyaW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9
IFQ+IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgZmxvYXQ+
Ojp2YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhmbG9hdCBhcmd1bWVudCkgeyByZXR1cm4g
U3RyaW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+
IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgZG91YmxlPjo6
dmFsdWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmcoZG91YmxlIGFyZ3VtZW50KSB7IHJldHVybiBT
dHJpbmc6Om51bWJlcihhcmd1bWVudCk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4g
c3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9yZWZlcmVuY2U8VT46OnR5cGUsIEF0b21pY1N0cmluZz46OnZhbHVlLCBTdHJpbmc+
Ojp0eXBlIHRvU3RyaW5nKEF0b21pY1N0cmluZyBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQu
c3RyaW5nKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvTG9nZ2VySGVscGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXJIZWxwZXIuaAkocmV2
aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXJIZWxwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiBuYW1lc3BhY2UgUEFMIHsKIAorY2xh
c3MgTG9nZ2VyOworCiBjbGFzcyBMb2dnZXJIZWxwZXIgewogcHVibGljOgogICAgIHZpcnR1YWwg
fkxvZ2dlckhlbHBlcigpID0gZGVmYXVsdDsKQEAgLTM5LDcgKzQxLDcgQEAgcHVibGljOgogCiAj
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAKLSNkZWZpbmUgTE9HSURFTlRJRklFUiBMb2dnZXI6
OkxvZ1NpdGVJZGVudGlmaWVyKGxvZ0NsYXNzTmFtZSgpLCBfX2Z1bmNfXywgbG9nSWRlbnRpZmll
cigpKQorI2RlZmluZSBMT0dJREVOVElGSUVSIFBBTDo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmll
cihsb2dDbGFzc05hbWUoKSwgX19mdW5jX18sIGxvZ0lkZW50aWZpZXIoKSkKIAogI2RlZmluZSBB
TFdBWVNfTE9HKC4uLikgICAgIGxvZ2dlcigpLmxvZ0Fsd2F5cyhsb2dDaGFubmVsKCksIF9fVkFf
QVJHU19fKQogI2RlZmluZSBFUlJPUl9MT0coLi4uKSAgICAgIGxvZ2dlcigpLmVycm9yKGxvZ0No
YW5uZWwoKSwgX19WQV9BUkdTX18pCkBAIC00Nyw2ICs0OSw3IEBAIHB1YmxpYzoKICNkZWZpbmUg
Tk9USUNFX0xPRyguLi4pICAgICBsb2dnZXIoKS5ub3RpY2UobG9nQ2hhbm5lbCgpLCBfX1ZBX0FS
R1NfXykKICNkZWZpbmUgSU5GT19MT0coLi4uKSAgICAgICBsb2dnZXIoKS5pbmZvKGxvZ0NoYW5u
ZWwoKSwgX19WQV9BUkdTX18pCiAjZGVmaW5lIERFQlVHX0xPRyguLi4pICAgICAgbG9nZ2VyKCku
ZGVidWcobG9nQ2hhbm5lbCgpLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0lMTF9MT0coX2xldmVs
XykgICBsb2dnZXIoKS53aWxsTG9nKGxvZ0NoYW5uZWwoKSwgX2xldmVsXykKIAogI2Vsc2UKIApA
QCAtNTksNiArNjIsNyBAQCBwdWJsaWM6CiAjZGVmaW5lIE5PVElDRV9MT0coLi4uKSAgICAgKCh2
b2lkKTApCiAjZGVmaW5lIElORk9fTE9HKC4uLikgICAgICAgKCh2b2lkKTApCiAjZGVmaW5lIERF
QlVHX0xPRyguLi4pICAgICAgKCh2b2lkKTApCisjZGVmaW5lIFdJTExfTE9HKF9sZXZlbF8pICAg
ZmFsc2UKIAogI2VuZGlmCiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaAkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5OSw2ICs4OTksOSBAQCBwcml2YXRlOgog
ICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJIVE1M
TWVkaWFFbGVtZW50IjsgfQogICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBm
aW5hbCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihtX2xvZ0lkZW50aWZp
ZXIpOyB9CiAgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsOworCisg
ICAgY29uc3Qgdm9pZCogbWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKCkgZmluYWwgeyByZXR1cm4g
bG9nSWRlbnRpZmllcigpOyB9CisgICAgY29uc3QgUEFMOjpMb2dnZXImIG1lZGlhUGxheWVyTG9n
Z2VyKCkgZmluYWwgeyByZXR1cm4gbG9nZ2VyKCk7IH0KICNlbmRpZgogCiAgICAgYm9vbCB3aWxs
TG9nKFdURkxvZ0xldmVsKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAJKHJldmlzaW9uIDIyMTcxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTQsNiArOTQsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBQbGF0Zm9y
bU1lZGlhIE5vUGxhdGZvcm1NZWRpYSA9IHsgUGxhdGZvcm1NZWRpYTo6Tm9uZSwgezB9IH07CiAK
K3N0YXRpYyBSZWZQdHI8UEFMOjpMb2dnZXI+JiBudWxsTG9nZ2VyKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPFBBTDo6TG9nZ2VyPj4gbG9nZ2VyOworICAgIHJldHVybiBs
b2dnZXI7Cit9CisKIC8vIGEgbnVsbCBwbGF5ZXIgdG8gbWFrZSBNZWRpYVBsYXllciBsb2dpYyBz
aW1wbGVyCiAKIGNsYXNzIE51bGxNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5
ZXJQcml2YXRlSW50ZXJmYWNlIHsKQEAgLTE2NCw2ICsxNzAsMjEgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiB9OwogCitjbGFzcyBOdWxsTWVkaWFQbGF5ZXJDbGllbnQgOiBwdWJsaWMgTWVkaWFQbGF5
ZXJDbGllbnQgeworcHVibGljOgorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGNvbnN0
IFBBTDo6TG9nZ2VyJiBtZWRpYVBsYXllckxvZ2dlcigpIGZpbmFsCisgICAgeworICAgICAgICBp
ZiAoIW51bGxMb2dnZXIoKS5nZXQoKSkgeworICAgICAgICAgICAgbnVsbExvZ2dlcigpID0gUEFM
OjpMb2dnZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgIG51bGxMb2dnZXIoKS0+c2V0RW5h
YmxlZCh0aGlzLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKm51bGxMb2dn
ZXIoKS5nZXQoKTsKKyAgICB9CisjZW5kaWYKK307CisKIGNvbnN0IFZlY3RvcjxDb250ZW50VHlw
ZT4mIE1lZGlhUGxheWVyQ2xpZW50OjptZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJl
U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxDb250
ZW50VHlwZT4+IGNvbnRlbnRUeXBlczsKQEAgLTE3Miw3ICsxOTMsNyBAQCBjb25zdCBWZWN0b3I8
Q29udGVudFR5cGU+JiBNZWRpYVBsYXllckNsCiAKIHN0YXRpYyBNZWRpYVBsYXllckNsaWVudCYg
bnVsbE1lZGlhUGxheWVyQ2xpZW50KCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVk
aWFQbGF5ZXJDbGllbnQ+IGNsaWVudDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TnVsbE1l
ZGlhUGxheWVyQ2xpZW50PiBjbGllbnQ7CiAgICAgcmV0dXJuIGNsaWVudC5nZXQoKTsKIH0KIApA
QCAtMTQ4Nyw2ICsxNTA4LDEzIEBAIGJvb2wgTWVkaWFQbGF5ZXI6OnNob3VsZENoZWNrSGFyZHdh
cmVTdXAKICAgICByZXR1cm4gY2xpZW50KCkubWVkaWFQbGF5ZXJTaG91bGRDaGVja0hhcmR3YXJl
U3VwcG9ydCgpOwogfQogCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECitjb25zdCBQQUw6Okxv
Z2dlciYgTWVkaWFQbGF5ZXI6Om1lZGlhUGxheWVyTG9nZ2VyKCkKK3sKKyAgICByZXR1cm4gY2xp
ZW50KCkubWVkaWFQbGF5ZXJMb2dnZXIoKTsKK30KKyNlbmRpZgorCiB9CiAKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCShy
ZXZpc2lvbiAyMjE3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW5IYXNoLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJWaWRlb1Ry
YWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHBhbC9Mb2dnZXIuaD4KICNpbmNsdWRlIDxydW50aW1l
L1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgpAQCAtMjk5LDYgKzMwMCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IG1lZGlhUGxheWVyU2hvdWxkRGlzYWJsZVNsZWVwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4mIG1lZGlhQ29udGVudFR5cGVz
UmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIG1lZGlh
UGxheWVyU2hvdWxkQ2hlY2tIYXJkd2FyZVN1cHBvcnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdmlydHVhbCBjb25zdCB2b2lkKiBt
ZWRpYVBsYXllckxvZ0lkZW50aWZpZXIoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVh
bCBjb25zdCBQQUw6OkxvZ2dlciYgbWVkaWFQbGF5ZXJMb2dnZXIoKSA9IDA7CisjZW5kaWYKIH07
CiAKIGNsYXNzIE1lZGlhUGxheWVyU3VwcG9ydHNUeXBlQ2xpZW50IHsKQEAgLTYyNiw2ICs2MzIs
MTEgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4mIG1lZGlhQ29udGVu
dFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRD
aGVja0hhcmR3YXJlU3VwcG9ydCgpIGNvbnN0OwogCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CisgICAgY29uc3QgUEFMOjpMb2dnZXImIG1lZGlhUGxheWVyTG9nZ2VyKCk7CisgICAgY29uc3Qg
dm9pZCogbWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKCkgeyByZXR1cm4gY2xpZW50KCkubWVkaWFQ
bGF5ZXJMb2dJZGVudGlmaWVyKCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIE1lZGlhUGxh
eWVyKE1lZGlhUGxheWVyQ2xpZW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCShyZXZpc2lvbiAyMjE3MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEs
NyBAQAogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPENvcmVNZWRpYS9Db3JlTWVkaWEuaD4K
ICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CisjaW5jbHVkZSA8cGFsL0xvZ2dlci5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvRGF0YVZpZXcuaD4KICNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJy
YXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50MTZBcnJheS5oPgpAQCAtNjAsNiAr
NjEsMTAgQEAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVBsYQogICAgICwg
bV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQogICAgICwgbV9yZWFkeVN0YXRlKE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAsIG1fcHJlbG9hZChNZWRpYVBsYXllcjo6QXV0
bykKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAsIG1fbG9nZ2VyKHBsYXllci0+bWVk
aWFQbGF5ZXJMb2dnZXIoKSkKKyAgICAsIG1fbG9nSWRlbnRpZmllcihwbGF5ZXItPm1lZGlhUGxh
eWVyTG9nSWRlbnRpZmllcigpKQorI2VuZGlmCiAgICAgLCBtX2NhY2hlZER1cmF0aW9uKE1lZGlh
VGltZTo6aW52YWxpZFRpbWUoKSkKICAgICAsIG1fcmVwb3J0ZWREdXJhdGlvbihNZWRpYVRpbWU6
OmludmFsaWRUaW1lKCkpCiAgICAgLCBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJv
Z3Jlc3MoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQpAQCAtODEsMTIgKzg2LDEyIEBAIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGEKICAgICAsIG1fc2hvdWxkTWFpbnRh
aW5Bc3BlY3RSYXRpbyh0cnVlKQogICAgICwgbV9zZWVraW5nKGZhbHNlKQogewotICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uKCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwog
fQogCiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246On5NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb24oKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6fk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiglcCkiLCB0aGlzKTsKKyAg
ICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBzZXRJZ25vcmVMb2FkU3RhdGVDaGFuZ2Vz
KHRydWUpOwogfQogCkBAIC0xMjYsMTAgKzEzMSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjpzZXQKICAgICBpZiAoY3VycmVudE1vZGUgPT0gcHJlZmVycmVkTW9kZSAm
JiBjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0VXBWaWRl
b1JlbmRlcmluZyglcCkgLSBjdXJyZW50IG1vZGUgPSAlZCwgcHJlZmVycmVkIG1vZGUgPSAlZCIs
IAotICAgICAgICB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KGN1cnJlbnRNb2RlKSwgc3RhdGljX2Nh
c3Q8aW50PihwcmVmZXJyZWRNb2RlKSk7Ci0KLSAgICBpZiAoY3VycmVudE1vZGUgIT0gTWVkaWFS
ZW5kZXJpbmdOb25lKSAgCisgICAgaWYgKGN1cnJlbnRNb2RlICE9IE1lZGlhUmVuZGVyaW5nTm9u
ZSkKICAgICAgICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygpOwogCiAgICAgc3dpdGNoIChwcmVm
ZXJyZWRNb2RlKSB7CkBAIC0xNDQsMTUgKzE0NiwxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6c2V0CiAgICAgfQogCiAgICAgLy8gSWYgdXNpbmcgYSBtb3ZpZSBsYXll
ciwgaW5mb3JtIHRoZSBjbGllbnQgc28gdGhlIGNvbXBvc2l0aW5nIHRyZWUgaXMgdXBkYXRlZC4K
LSAgICBpZiAoY3VycmVudE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdUb0xheWVyIHx8IHByZWZlcnJl
ZE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdUb0xheWVyKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0VXBWaWRlb1JlbmRlcmluZyglcCkgLSBj
YWxsaW5nIG1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQoKSIsIHRoaXMpOworICAgIGlm
IChjdXJyZW50TW9kZSA9PSBNZWRpYVJlbmRlcmluZ1RvTGF5ZXIgfHwgcHJlZmVycmVkTW9kZSA9
PSBNZWRpYVJlbmRlcmluZ1RvTGF5ZXIpCiAgICAgICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRp
YVBsYXllclJlbmRlcmluZ01vZGVDaGFuZ2VkKG1fcGxheWVyKTsKLSAgICB9CiB9CiAKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCkK
IHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnRlYXJE
b3duVmlkZW9SZW5kZXJpbmcoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklF
Uik7CiAKICAgICBkZXN0cm95Q29udGV4dFZpZGVvUmVuZGVyZXIoKTsKIApAQCAtMTY3LDcgKzE2
Nyw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpoYXMKIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiB7
Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpsb2FkKCVw
KSIsIHRoaXMpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAKICAgICBzZXROZXR3
b3JrU3RhdGUobV9wcmVsb2FkID09IE1lZGlhUGxheWVyOjpOb25lID8gTWVkaWFQbGF5ZXI6Oklk
bGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZyk7CiAgICAgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXll
cjo6SGF2ZU5vdGhpbmcpOwpAQCAtMTkxLDE2ICsxOTEsMTQgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OmxvYQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbjo6cGxheWFiaWxpdHlLbm93bigpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjpwbGF5YWJpbGl0eUtub3duKCVwKSIsIHRoaXMpOworICAgIElO
Rk9fTE9HKExPR0lERU5USUZJRVIsICJtZXRhZGF0YSBsb2FkZWQgPSAiLCBhc3NldFN0YXR1cygp
ID4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGluZyk7CiAKICAgICBpZiAobV9hc3NldElz
UGxheWFibGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE5vdGhpbmcgbW9yZSB0byBkbyBp
ZiB3ZSBhbHJlYWR5IGhhdmUgYWxsIG9mIHRoZSBpdGVtJ3MgbWV0YWRhdGEuCi0gICAgaWYgKGFz
c2V0U3RhdHVzKCkgPiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNMb2FkaW5nKSB7Ci0gICAgICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGxheWFiaWxpdHlL
bm93biglcCkgLSBhbGwgbWV0YWRhdGEgbG9hZGVkIiwgdGhpcyk7CisgICAgaWYgKGFzc2V0U3Rh
dHVzKCkgPiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNMb2FkaW5nKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBhcmUgc3VwcG9zZWQgdG8gbG9hZCBt
ZXRhZGF0YS4gSXQgaXMgT0sgdG8gYXNrIHRoZSBhc3NldCB0byBsb2FkIHRoZSBzYW1lIAogICAg
IC8vIGluZm9ybWF0aW9uIG11bHRpcGxlIHRpbWVzLCBiZWNhdXNlIGlmIGl0IGhhcyBhbHJlYWR5
IGJlZW4gbG9hZGVkIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgCkBAIC0yMTEsMjggKzIwOSwyNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGxhCiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpwcmVwYXJlVG9QbGF5KCkKIHsKLSAgICBMT0coTWVk
aWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnByZXBhcmVUb1BsYXkoJXApIiwg
dGhpcyk7Ci0KKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwogICAgIHNldFByZWxvYWQo
TWVkaWFQbGF5ZXI6OkF1dG8pOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbjo6cGxheSgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpwbGF5KCVwKSIsIHRoaXMpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7
CiAKICAgICAvLyBJZiB0aGUgZmlsZSBoYXMgdmlkZW8sIGRvbid0IHJlcXVlc3QgcGxheWJhY2sg
dW50aWwgdGhlIGZpcnN0IGZyYW1lIG9mIHZpZGVvIGlzIHJlYWR5IHRvIGRpc3BsYXkKICAgICAv
LyBvciB0aGUgYXVkaW8gbWF5IHN0YXJ0IHBsYXlpbmcgYmVmb3JlIHdlIGNhbiByZW5kZXIgdmlk
ZW8uCiAgICAgaWYgKCFtX2NhY2hlZEhhc1ZpZGVvIHx8IGhhc0F2YWlsYWJsZVZpZGVvRnJhbWUo
KSkKICAgICAgICAgcGxhdGZvcm1QbGF5KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIExPRyhNZWRp
YSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGxheSglcCkgLSB3YWl0aW5nIGZv
ciBmaXJzdCB2aWRlbyBmcmFtZSIsIHRoaXMpOworICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElG
SUVSLCAid2FpdGluZyBmb3IgZmlyc3QgdmlkZW8gZnJhbWUiKTsKICAgICAgICAgbV9wbGF5V2hl
bkZyYW1lc0F2YWlsYWJsZSA9IHRydWU7CiAgICAgfQogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6cGF1c2UoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6cGF1c2UoJXApIiwgdGhpcyk7CisgICAgQUxXQVlTX0xPRyhM
T0dJREVOVElGSUVSKTsKICAgICBtX3BsYXlXaGVuRnJhbWVzQXZhaWxhYmxlID0gZmFsc2U7CiAg
ICAgcGxhdGZvcm1QYXVzZSgpOwogfQpAQCAtMjQ3LDcgKzI0NCw3IEBAIE1lZGlhVGltZSBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24KICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVy
b1RpbWUoKTsKIAogICAgIG1fY2FjaGVkRHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBMT0coTWVk
aWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmR1cmF0aW9uKCVwKSAtIGNhY2hp
bmcgJXMiLCB0aGlzLCB0b1N0cmluZyhtX2NhY2hlZER1cmF0aW9uKS51dGY4KCkuZGF0YSgpKTsK
KwogICAgIHJldHVybiBtX2NhY2hlZER1cmF0aW9uOwogfQogCkBAIC0yNjEsNyArMjU4LDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZQogICAgIE1lZGlhVGltZSB0
aW1lID0gbWVkaWFUaW1lOwogCiAgICAgaWYgKG1fc2Vla2luZykgewotICAgICAgICBMT0coTWVk
aWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtXaXRoVG9sZXJhbmNlKCVw
KSAtIHNhdmUgcGVuZGluZyBzZWVrIiwgdGhpcyk7CisgICAgICAgIEFMV0FZU19MT0coTE9HSURF
TlRJRklFUiwgInNhdmluZyBwZW5kaW5nIHNlZWsiKTsKICAgICAgICAgbV9wZW5kaW5nU2VlayA9
IFt0aGlzLCB0aW1lLCBuZWdhdGl2ZVRvbGVyYW5jZSwgcG9zaXRpdmVUb2xlcmFuY2VdKCkgewog
ICAgICAgICAgICAgc2Vla1dpdGhUb2xlcmFuY2UodGltZSwgbmVnYXRpdmVUb2xlcmFuY2UsIHBv
c2l0aXZlVG9sZXJhbmNlKTsKICAgICAgICAgfTsKQEAgLTI3OCw3ICsyNzUsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlCiAgICAgaWYgKGN1cnJlbnRUZXh0VHJh
Y2soKSkKICAgICAgICAgY3VycmVudFRleHRUcmFjaygpLT5iZWdpblNlZWtpbmcoKTsKIAotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlayglcCkgLSBz
ZWVraW5nIHRvICVzIiwgdGhpcywgdG9TdHJpbmcodGltZSkudXRmOCgpLmRhdGEoKSk7CisgICAg
QUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAic2Vla2luZyB0byAgIiwgdGltZSk7CiAKICAgICBz
ZWVrVG9UaW1lKHRpbWUsIG5lZ2F0aXZlVG9sZXJhbmNlLCBwb3NpdGl2ZVRvbGVyYW5jZSk7CiB9
CkBAIC0zMTYsMTIgKzMxMywxMiBAQCBGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXROYXR1cmFs
U2l6ZShGbG9hdFNpemUgc2l6ZSkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246c2V0TmF0dXJhbFNpemUoJXApIC0gc2l6ZSA9ICVmIHggJWYiLCB0aGlz
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCiAgICAgRmxvYXRTaXplIG9sZFNpemUg
PSBtX2NhY2hlZE5hdHVyYWxTaXplOwogICAgIG1fY2FjaGVkTmF0dXJhbFNpemUgPSBzaXplOwot
ICAgIGlmIChvbGRTaXplICE9IG1fY2FjaGVkTmF0dXJhbFNpemUpCisgICAgaWYgKG9sZFNpemUg
IT0gbV9jYWNoZWROYXR1cmFsU2l6ZSkgeworICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVS
LCAid2FzICIsIG9sZFNpemUud2lkdGgoKSwgIiB4ICIsIG9sZFNpemUuaGVpZ2h0KCksICIsIGlz
ICIsIHNpemUud2lkdGgoKSwgIiB4ICIsIHNpemUuaGVpZ2h0KCkpOwogICAgICAgICBtX3BsYXll
ci0+c2l6ZUNoYW5nZWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjpzZXRIYXNWaWRlbyhib29sIGIpCkBAIC00MDMsMTEgKzQwMCwxMiBAQCBNZWRp
YVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uCiAgICAgaWYgKCFtZXRhRGF0YUF2
YWlsYWJsZSgpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCi0gICAg
aWYgKCFtX2NhY2hlZE1heFRpbWVTZWVrYWJsZSkKKyAgICBpZiAoIW1fY2FjaGVkTWF4VGltZVNl
ZWthYmxlKSB7CiAgICAgICAgIG1fY2FjaGVkTWF4VGltZVNlZWthYmxlID0gcGxhdGZvcm1NYXhU
aW1lU2Vla2FibGUoKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgImNhY2hpbmcg
IiwgbV9jYWNoZWRNYXhUaW1lU2Vla2FibGUpOworICAgIH0KIAotICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bWF4VGltZVNlZWthYmxlKCVwKSAtIHJldHVy
bmluZyAlcyIsIHRoaXMsIHRvU3RyaW5nKG1fY2FjaGVkTWF4VGltZVNlZWthYmxlKS51dGY4KCku
ZGF0YSgpKTsKLSAgICByZXR1cm4gbV9jYWNoZWRNYXhUaW1lU2Vla2FibGU7ICAgCisgICAgcmV0
dXJuIG1fY2FjaGVkTWF4VGltZVNlZWthYmxlOwogfQogCiBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjptaW5NZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0CkBAIC00MTUs
MTAgKzQxMywxMSBAQCBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uCiAg
ICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6
ZXJvVGltZSgpOwogCi0gICAgaWYgKCFtX2NhY2hlZE1pblRpbWVTZWVrYWJsZSkKKyAgICBpZiAo
IW1fY2FjaGVkTWluVGltZVNlZWthYmxlKSB7CiAgICAgICAgIG1fY2FjaGVkTWluVGltZVNlZWth
YmxlID0gcGxhdGZvcm1NaW5UaW1lU2Vla2FibGUoKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURF
TlRJRklFUiwgImNhY2hpbmcgIiwgbV9jYWNoZWRNaW5UaW1lU2Vla2FibGUpOworICAgIH0KIAot
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bWluVGltZVNl
ZWthYmxlKCVwKSAtIHJldHVybmluZyAlcyIsIHRoaXMsIHRvU3RyaW5nKG1fY2FjaGVkTWluVGlt
ZVNlZWthYmxlKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gbV9jYWNoZWRNaW5UaW1lU2Vl
a2FibGU7CiB9CiAKQEAgLTU2NCwxMiArNTYzLDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjp1cGQKICAgICB9IGVsc2UgaWYgKCFoYXNBdmFpbGFibGVWaWRlb0ZyYW1l
KCkpCiAgICAgICAgIG1faGF2ZVJlcG9ydGVkRmlyc3RWaWRlb0ZyYW1lID0gZmFsc2U7CiAKLSNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG5ld05ldHdvcmtTdGF0
ZSB8fCBtX3JlYWR5U3RhdGUgIT0gbmV3UmVhZHlTdGF0ZSkgewotICAgICAgICBMT0coTWVkaWEs
ICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnVwZGF0ZVN0YXRlcyglcCkgLSBlbnRl
cmVkIHdpdGggbmV0d29ya1N0YXRlID0gJWksIHJlYWR5U3RhdGUgPSAlaSwgIGV4aXRpbmcgd2l0
aCBuZXR3b3JrU3RhdGUgPSAlaSwgcmVhZHlTdGF0ZSA9ICVpIiwKLSAgICAgICAgICAgIHRoaXMs
IHN0YXRpY19jYXN0PGludD4obV9uZXR3b3JrU3RhdGUpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVh
ZHlTdGF0ZSksIHN0YXRpY19jYXN0PGludD4obmV3TmV0d29ya1N0YXRlKSwgc3RhdGljX2Nhc3Q8
aW50PihuZXdSZWFkeVN0YXRlKSk7Ci0gICAgfQotI2VuZGlmCisgICAgaWYgKG1fbmV0d29ya1N0
YXRlICE9IG5ld05ldHdvcmtTdGF0ZSkKKyAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVS
LCAiZW50ZXJlZCB3aXRoIG5ldHdvcmtTdGF0ZSAiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fbmV0d29y
a1N0YXRlKSwgIiwgZXhpdGluZyB3aXRoICIsIHN0YXRpY19jYXN0PGludD4obmV3TmV0d29ya1N0
YXRlKSk7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBuZXdSZWFkeVN0YXRlKQorICAgICAgICBB
TFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJlbnRlcmVkIHdpdGggcmVhZHlTdGF0ZSAiLCBzdGF0
aWNfY2FzdDxpbnQ+KG1fcmVhZHlTdGF0ZSksICIsIGV4aXRpbmcgd2l0aCAiLCBzdGF0aWNfY2Fz
dDxpbnQ+KG5ld1JlYWR5U3RhdGUpKTsKIAogICAgIHNldE5ldHdvcmtTdGF0ZShuZXdOZXR3b3Jr
U3RhdGUpOwogICAgIHNldFJlYWR5U3RhdGUobmV3UmVhZHlTdGF0ZSk7CkBAIC02MTksOCArNjE2
LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1ldAogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cmF0ZUNoYW5nZWQoKQogeworCiAjaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgUExBVEZPUk0oSU9TKQotICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cmF0ZUNoYW5nZWQoJXApIC0g
cmF0ZSA9ICVmLCByZXF1ZXN0ZWQgcmF0ZSA9ICVmLCBpdGVtIHN0YXR1cyA9ICVpIiwgdGhpcywg
cmF0ZSgpLCByZXF1ZXN0ZWRSYXRlKCksIHBsYXllckl0ZW1TdGF0dXMoKSk7CiAgICAgaWYgKGlz
Q3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3MoKSAmJiBwbGF5ZXJJdGVtU3RhdHVzKCkgPj0g
TWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNQbGF5YmFja0J1ZmZlckZ1bGwpIHsKICAgICAg
ICAgZG91YmxlIHJhdGUgPSB0aGlzLT5yYXRlKCk7CiAgICAgICAgIGlmIChyYXRlICE9IHJlcXVl
c3RlZFJhdGUoKSkgewpAQCAtNjQ4LDE0ICs2NDUsMTQgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OnNlZQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6dGltZUNoYW5nZWQoY29uc3QgTWVkaWFUaW1lJiB0aW1lKQogewotICAgIExPRyhNZWRpYSwg
Ik1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dGltZUNoYW5nZWQoJXApIC0gdGltZSA9
ICVzIiwgdGhpcywgdG9TdHJpbmcodGltZSkudXRmOCgpLmRhdGEoKSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRpbWUpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIsIHRpbWUpOwogfQog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2Vla0NvbXBsZXRlZChib29s
IGZpbmlzaGVkKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbjo6c2Vla0NvbXBsZXRlZCglcCkgLSBmaW5pc2hlZCA9ICVkIiwgdGhpcywgZmluaXNoZWQp
OwogICAgIFVOVVNFRF9QQVJBTShmaW5pc2hlZCk7CisgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSLCAiZmluaXNoZWQgPSAiLCBmaW5pc2hlZCk7CiAKICAgICBtX3NlZWtpbmcgPSBmYWxzZTsK
IApAQCAtNjYzLDcgKzY2MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjpzZWUKICAgICBzdGQ6OnN3YXAocGVuZGluZ1NlZWssIG1fcGVuZGluZ1NlZWspOwogCiAgICAg
aWYgKHBlbmRpbmdTZWVrKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6c2Vla0NvbXBsZXRlZCglcCkgLSBpc3N1aW5nIHBlbmRpbmcgc2VlayIs
IHRoaXMpOworICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJpc3N1aW5nIHBlbmRp
bmcgc2VlayIpOwogICAgICAgICBwZW5kaW5nU2VlaygpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNjk1LDYgKzY5Miw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjppbnYKICAgICAvLyBzbyByZXBvcnQgZHVyYXRpb24gY2hhbmdlZCB3aGVuIHRoZSBlc3RpbWF0
ZSBpcyB1cGF0ZWQuCiAgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gdGhpcy0+ZHVyYXRpb25NZWRp
YVRpbWUoKTsKICAgICBpZiAoZHVyYXRpb24gIT0gbV9yZXBvcnRlZER1cmF0aW9uKSB7CisgICAg
ICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIsIG1fY2FjaGVkRHVyYXRpb24pOwogICAg
ICAgICBpZiAobV9yZXBvcnRlZER1cmF0aW9uLmlzVmFsaWQoKSkKICAgICAgICAgICAgIG1fcGxh
eWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKICAgICAgICAgbV9yZXBvcnRlZER1cmF0aW9uID0gZHVy
YXRpb247CkBAIC03MjAsNiArNzE4LDcgQEAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgTWVk
aWFQbGF5ZXJQcgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0UHJl
bG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQogeworICAgIEFMV0FZU19MT0coTE9H
SURFTlRJRklFUiwgIiAtICIsIHN0YXRpY19jYXN0PGludD4ocHJlbG9hZCkpOwogICAgIG1fcHJl
bG9hZCA9IHByZWxvYWQ7CiAgICAgaWYgKCFtX2Fzc2V0VVJMLmxlbmd0aCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC03NTQsOCArNzUzLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246OnNldAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bWFpblRo
cmVhZENhbGxiYWNrKCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246Om1haW5UaHJlYWRDYWxsYmFjayglcCkiLCB0aGlzKTsKLQogICAgIGNsZWFyTWFp
blRocmVhZFBlbmRpbmdGbGFnKCk7CiAgICAgZGlzcGF0Y2hOb3RpZmljYXRpb24oKTsKIH0KQEAg
LTc3NiwyNiArNzczLDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNj
aAogICAgIHNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24odHlwZSwg
ZmluaXNoZWQpKTsKIH0KIAotI2lmICFMT0dfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFyKiBu
b3RpZmljYXRpb25OYW1lKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0
aW9uJiBub3RpZmljYXRpb24pCi17Ci0jZGVmaW5lIERFRklORV9UWVBFX1NUUklOR19DQVNFKHR5
cGUpIGNhc2UgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb246OnR5
cGU6IHJldHVybiAjdHlwZTsKLSAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbi50eXBlKCkpIHsKLSAg
ICBGT1JfRUFDSF9NRURJQVBMQVlFUlBSSVZBVEVBVkZPVU5EQVRJT05fTk9USUZJQ0FUSU9OX1RZ
UEUoREVGSU5FX1RZUEVfU1RSSU5HX0NBU0UpCi0gICAgY2FzZSBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6RnVuY3Rpb25UeXBlOiByZXR1cm4gIkZ1bmN0aW9u
VHlwZSI7Ci0gICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAiIjsKLSAg
ICB9Ci0jdW5kZWYgREVGSU5FX1RZUEVfU1RSSU5HX0NBU0UKLX0KLSNlbmRpZiAvLyAhTE9HX0RJ
U0FCTEVECi0gICAgCi0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzY2hl
ZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uJiYgbm90aWZpY2F0aW9uKQog
ewotICAgIGF1dG8gbm90aWZpY2F0aW9uVHlwZSA9IG5vdGlmaWNhdGlvbi50eXBlKCk7Ci0gICAg
aWYgKG5vdGlmaWNhdGlvblR5cGUgIT0gTm90aWZpY2F0aW9uOjpGdW5jdGlvblR5cGUpCi0gICAg
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2NoZWR1bGVN
YWluVGhyZWFkTm90aWZpY2F0aW9uKCVwKSAtIG5vdGlmaWNhdGlvbiAlcyIsIHRoaXMsIG5vdGlm
aWNhdGlvbk5hbWUobm90aWZpY2F0aW9uKSk7Ci0KICAgICBtX3F1ZXVlTXV0ZXgubG9jaygpOwog
CiAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIGFsd2F5cyBwcm9jZXNzIHRoZSBwcm9wZXJ0aWVz
IGluIHRoZSBvcmRlciB0aGF0IHdlIGFyZSBub3RpZmllZCwKQEAgLTgyMCwxMSArNzk5LDggQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNjaAogCiAgICAgbV9xdWV1ZU11
dGV4LnVubG9jaygpOwogCi0gICAgaWYgKGRlbGF5RGlzcGF0Y2gpIHsKLSAgICAgICAgaWYgKG5v
dGlmaWNhdGlvblR5cGUgIT0gTm90aWZpY2F0aW9uOjpGdW5jdGlvblR5cGUpCi0gICAgICAgICAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNjaGVkdWxlTWFp
blRocmVhZE5vdGlmaWNhdGlvbiglcCkgLSBlYXJseSByZXR1cm4iLCB0aGlzKTsKKyAgICBpZiAo
ZGVsYXlEaXNwYXRjaCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGRpc3BhdGNoTm90
aWZpY2F0aW9uKCk7CiB9CkBAIC04NTgsOSArODM0LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OmRpcwogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChub3RpZmljYXRpb24udHlwZSgpICE9IE5vdGlmaWNhdGlvbjo6RnVuY3Rpb25UeXBlKQotICAg
ICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmRpc3BhdGNo
Tm90aWZpY2F0aW9uKCVwKSAtIGRpc3BhdGNoaW5nICVzIiwgdGhpcywgbm90aWZpY2F0aW9uTmFt
ZShub3RpZmljYXRpb24pKTsKLQogICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLnR5cGUoKSkgewog
ICAgIGNhc2UgTm90aWZpY2F0aW9uOjpJdGVtRGlkUGxheVRvRW5kVGltZToKICAgICAgICAgZGlk
RW5kKCk7CkBAIC05ODksOCArOTYyLDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246OnBybwogICAgICAgICB9CiAgICAgfQogCisgICAgdW5zaWduZWQgdHJhY2tDb3VudCA9
IG1fdGV4dFRyYWNrcy5zaXplKCk7CiAgICAgdW5zaWduZWQgaW5CYW5kQ291bnQgPSAwOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHRUcmFja3Muc2l6ZSgpOyArK2kpIHsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhY2tDb3VudDsgKytpKSB7CiAgICAgICAgIFJl
ZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGPiB0cmFjayA9IG1fdGV4dFRyYWNrc1tpXTsK
IAogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCkBAIC0xMDA2LDIxICs5ODAsMjAgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBybwogICAgICAgICB0cmFjay0+c2V0SGFz
QmVlblJlcG9ydGVkKHRydWUpOwogICAgICAgICBwbGF5ZXIoKS0+YWRkVGV4dFRyYWNrKCp0cmFj
ayk7CiAgICAgfQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6cHJvY2Vzc05ld0FuZFJlbW92ZWRUZXh0VHJhY2tzKCVwKSAtIGZvdW5kICVsdSB0ZXh0IHRy
YWNrcyIsIHRoaXMsIG1fdGV4dFRyYWNrcy5zaXplKCkpOworCisgICAgaWYgKHRyYWNrQ291bnQg
IT0gbV90ZXh0VHJhY2tzLnNpemUoKSkKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwg
ImZvdW5kICIsIG1fdGV4dFRyYWNrcy5zaXplKCksICIgdGV4dCB0cmFja3MiKTsKIH0KIAogI2lm
IEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpwbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKCkKIHsKICAg
ICBpZiAobV9wbGF5ZXIpCiAgICAgICAgIG1fcGxheWVyLT5jdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1dpcmVsZXNzQ2hhbmdlZCgpOwogfQotCiAjZW5kaWYKIAogI2lmIEVOQUJMRShMRUdBQ1lfRU5D
UllQVEVEX01FRElBKQotCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6ZXh0
cmFjdEtleVVSSUtleUlEQW5kQ2VydGlmaWNhdGVGcm9tSW5pdERhdGEoVWludDhBcnJheSogaW5p
dERhdGEsIFN0cmluZyYga2V5VVJJLCBTdHJpbmcmIGtleUlELCBSZWZQdHI8VWludDhBcnJheT4m
IGNlcnRpZmljYXRlKQogewogICAgIC8vIGluaXREYXRhIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dp
bmcgbGF5b3V0OgpAQCAtMTA3MCw3ICsxMDQzLDYgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246OmV4dAogCiAgICAgcmV0dXJuIHRydWU7CiB9Ci0KICNlbmRpZgogCiBVUkwg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpyZXNvbHZlZFVSTCgpIGNvbnN0CkBAIC0x
MTIyLDYgKzEwOTQsMTMgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Omlz
VQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorV1RG
TG9nQ2hhbm5lbCYgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpsb2dDaGFubmVsKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gTG9nTWVkaWE7Cit9CisjZW5kaWYKKwogY29uc3QgSGFzaFNl
dDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6c3RhdGljTUlNRVR5cGVMaXN0KCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0
byBjYWNoZSA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoPiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCShyZXZpc2lvbiAyMjE3MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRl
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxwYWwvTG9nZ2VySGVscGVyLmg+CiAj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTM5LDYgKzQwLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKK25hbWVzcGFjZSBQQUwgeworY2xh
c3MgTG9nZ2VyOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluYmFuZE1ldGFk
YXRhVGV4dFRyYWNrUHJpdmF0ZUFWRjsKQEAgLTQ2LDYgKzUxLDkgQEAgY2xhc3MgSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRjsKIGNsYXNzIEdlbmVyaWNDdWVEYXRhOwogCiBjbGFzcyBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24gOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlLCBwdWJsaWMgQVZGSW5iYW5kVHJhY2tQYXJlbnQKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKKyAgICAsIHByaXZhdGUgUEFMOjpMb2dnZXJIZWxwZXIKKyNlbmRpZgogewogcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCByZXBhaW50KCk7CkBAIC0xNDQsNiArMTUyLDEzIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBleHRyYWN0S2V5VVJJS2V5SURBbmRDZXJ0aWZpY2F0ZUZyb21Jbml0
RGF0YShVaW50OEFycmF5KiBpbml0RGF0YSwgU3RyaW5nJiBrZXlVUkksIFN0cmluZyYga2V5SUQs
IFJlZlB0cjxVaW50OEFycmF5PiYgY2VydGlmaWNhdGUpOwogI2VuZGlmCiAKKyNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKKyAgICBjb25zdCBQQUw6OkxvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05h
bWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uIjsgfQorICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihtX2xvZ0lkZW50aWZpZXIpOyB9Cisg
ICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24oTWVk
aWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24o
KTsKQEAgLTMzMSw2ICszNDYsMTEgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9hc3NldFVSTDsK
ICAgICBNZWRpYVBsYXllcjo6UHJlbG9hZCBtX3ByZWxvYWQ7CiAKKyNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKyAgICBSZWY8Y29uc3QgUEFMOjpMb2dnZXI+IG1fbG9nZ2VyOworICAgIGNvbnN0
IHZvaWQqIG1fbG9nSWRlbnRpZmllcjsKKyNlbmRpZgorCiAgICAgRmxvYXRTaXplIG1fY2FjaGVk
TmF0dXJhbFNpemU7CiAgICAgbXV0YWJsZSBNZWRpYVRpbWUgbV9jYWNoZWRNYXhUaW1lTG9hZGVk
OwogICAgIG11dGFibGUgTWVkaWFUaW1lIG1fY2FjaGVkTWF4VGltZVNlZWthYmxlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMuaAkocmV2aXNpb24gMjIxNzE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNiArMzM2LDEwIEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHNldFNob3VsZERpc2FibGVTbGVlcChib29sKSBvdmVycmlkZTsKIAor
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
IjsgfQorI2VuZGlmCisKICAgICBXZWFrUHRyRmFjdG9yeTxNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDPiBtX3dlYWtQdHJGYWN0b3J5OwogCiAgICAgUmV0YWluUHRyPEFWVVJMQXNz
ZXQ+IG1fYXZBc3NldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkocmV2aXNpb24gMjIx
NzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzUyLDEzICszNTIsNiBAQCBzdGF0aWMgTlNBcnJheSAqYXNzZXRUcmFja01ldGFkYXRhS2V5
TmFtCiBzdGF0aWMgTlNBcnJheSAqcGxheWVyS1ZPUHJvcGVydGllcygpOwogc3RhdGljIEFWQXNz
ZXRUcmFjayogZmlyc3RFbmFibGVkVHJhY2soTlNBcnJheSogdHJhY2tzKTsKIAotI2lmICFMT0df
RElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFyICpib29sU3RyaW5nKGJvb2wgdmFsKQotewotICAg
IHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOwotfQotI2VuZGlmCi0KICNpZiBIQVZFKEFW
Rk9VTkRBVElPTl9MT0FERVJfREVMRUdBVEUpCiBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9i
YWxMb2FkZXJEZWxlZ2F0ZVF1ZXVlKCkKIHsKQEAgLTQ3OCw4ICs0NzEsNiBAQCBzdGF0aWMgc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6Y2xlYXJNZWRpYUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwgc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlKQogewotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNsZWFyTWVk
aWFDYWNoZSgpIik7Ci0gICAgCiAgICAgQVZBc3NldENhY2hlVHlwZSogYXNzZXRDYWNoZSA9IGFz
c2V0Q2FjaGVGb3JQYXRoKHBhdGgpOwogICAgIAogICAgIGZvciAoTlNTdHJpbmcgKmtleSBpbiBb
YXNzZXRDYWNoZSBhbGxLZXlzXSkgewpAQCAtNTIyLDcgKzUxMyw2IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpjbGVhck1lZGlhQ2FjaGVGb3JPcmlnaW5zKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiYgb3JpZ2lucykKIHsKLSAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjbGVhck1l
ZGlhQ2FjaGVGb3JPcmlnaW5zKCkiKTsKICAgICBBVkFzc2V0Q2FjaGVUeXBlKiBhc3NldENhY2hl
ID0gYXNzZXRDYWNoZUZvclBhdGgocGF0aCk7CiAgICAgZm9yIChOU1N0cmluZyAqa2V5IGluIFth
c3NldENhY2hlIGFsbEtleXNdKSB7CiAgICAgICAgIFVSTCBrZXlBc1VSTCA9IFVSTChVUkwoKSwg
a2V5KTsKQEAgLTU5Miw3ICs1ODIsNyBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjp+TWVkCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2Fu
Y2VsTG9hZCgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6Y2FuY2VsTG9hZCglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElG
SUVSKTsKICAgICB0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCk7CiAKICAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdl
dCgpXTsKQEAgLTY4MSw3ICs2NzEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3Jl
YXRlSW1hZ2VHZW5lcmF0b3IoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUltYWdlR2VuZXJhdG9yKCVwKSIsIHRoaXMpOworICAg
IElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgaWYgKCFtX2F2QXNzZXQgfHwgbV9pbWFn
ZUdlbmVyYXRvcikKICAgICAgICAgcmV0dXJuOwpAQCAtNjkyLDggKzY4Miw2IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBbbV9pbWFnZUdlbmVyYXRvci5n
ZXQoKSBzZXRBcHBsaWVzUHJlZmVycmVkVHJhY2tUcmFuc2Zvcm06WUVTXTsKICAgICBbbV9pbWFn
ZUdlbmVyYXRvci5nZXQoKSBzZXRSZXF1ZXN0ZWRUaW1lVG9sZXJhbmNlQmVmb3JlOmtDTVRpbWVa
ZXJvXTsKICAgICBbbV9pbWFnZUdlbmVyYXRvci5nZXQoKSBzZXRSZXF1ZXN0ZWRUaW1lVG9sZXJh
bmNlQWZ0ZXI6a0NNVGltZVplcm9dOwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlSW1hZ2VHZW5lcmF0b3IoJXApIC0gcmV0dXJuaW5n
ICVwIiwgdGhpcywgbV9pbWFnZUdlbmVyYXRvci5nZXQoKSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveUNvbnRleHRWaWRlb1JlbmRlcmVyKCkK
QEAgLTcxMCw3ICs2OTgsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6CiAgICAgaWYgKCFtX2ltYWdlR2VuZXJhdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95SW1h
Z2VHZW5lcmF0b3IoJXApIC0gZGVzdHJveWluZyAgJXAiLCB0aGlzLCBtX2ltYWdlR2VuZXJhdG9y
LmdldCgpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKIAogICAgIG1faW1hZ2VHZW5l
cmF0b3IgPSAwOwogfQpAQCAtNzU1LDcgKzc0Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzoKICAgICB1cGRhdGVWaWRlb0xheWVyR3Jhdml0eSgpOwogICAgIFtt
X3ZpZGVvTGF5ZXIgc2V0Q29udGVudHNTY2FsZTpwbGF5ZXIoKS0+Y2xpZW50KCkubWVkaWFQbGF5
ZXJDb250ZW50c1NjYWxlKCldOwogICAgIEludFNpemUgZGVmYXVsdFNpemUgPSBzbmFwcGVkSW50
UmVjdChwbGF5ZXIoKS0+Y2xpZW50KCkubWVkaWFQbGF5ZXJDb250ZW50Qm94UmVjdCgpKS5zaXpl
KCk7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y3JlYXRlVmlkZW9MYXllciglcCkgLSByZXR1cm5pbmcgJXAiLCB0aGlzLCBtX3ZpZGVvTGF5ZXIu
Z2V0KCkpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAjaWYgUExBVEZPUk0oSU9T
KSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQog
ICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT5zZXRWaWRlb0xheWVyKG1fdmlkZW9M
YXllci5nZXQoKSwgZGVmYXVsdFNpemUpOwpAQCAtNzczLDcgKzc2MSw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBpZiAoIW1fdmlkZW9MYXllcikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6ZGVzdHJveVZpZGVvTGF5ZXIoJXApIC0gZGVzdHJveWluZyAlcCIsIHRoaXMs
IG1fdmlkZW9MYXllci5nZXQoKSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAKICAg
ICBbbV92aWRlb0xheWVyIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktl
eVBhdGg6QCJyZWFkeUZvckRpc3BsYXkiXTsKICAgICBbbV92aWRlb0xheWVyIHNldFBsYXllcjpu
aWxdOwpAQCAtOTExLDcgKzg5OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzoKICAgICBpZiAobV9hdkFzc2V0KQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0
Rm9yVVJMKCVwKSAtIHVybCA9ICVzIiwgdGhpcywgdXJsLnV0ZjgoKS5kYXRhKCkpOworICAgIElO
Rk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CiAK
QEAgLTEwNDgsNyArMTAzNiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKICAgICBpZiAobV9hdlBsYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE1l
ZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIo
JXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAKICAgICBzZXREZWxh
eUNhbGxiYWNrcyh0cnVlKTsKIApAQCAtMTA5Nyw3ICsxMDg1LDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlmIChtX2F2UGxheWVySXRlbSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExP
R0lERU5USUZJRVIpOwogCiAgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CiAKQEAgLTExNDQs
NyArMTEzMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAg
ICAgICAgcmV0dXJuOwogICAgIG1faGF2ZUNoZWNrZWRQbGF5YWJpbGl0eSA9IHRydWU7CiAKLSAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjaGVja1Bs
YXlhYmlsaXR5KCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogICAg
IGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7CiAKICAgICBbbV9hdkFzc2V0LmdldCgp
IGxvYWRWYWx1ZXNBc3luY2hyb25vdXNseUZvcktleXM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0
czpAInBsYXlhYmxlIiwgQCJ0cmFja3MiLCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl57CkBAIC0x
MTU3LDcgKzExNDUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YmVnaW5Mb2FkaW5n
TWV0YWRhdGEoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OmJlZ2luTG9hZGluZ01ldGFkYXRhKCVwKSAtIHJlcXVlc3RpbmcgbWV0YWRhdGEg
bG9hZGluZyIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgT1NP
YmplY3RQdHI8ZGlzcGF0Y2hfZ3JvdXBfdD4gbWV0YWRhdGFMb2FkaW5nR3JvdXAgPSBhZG9wdE9T
T2JqZWN0KGRpc3BhdGNoX2dyb3VwX2NyZWF0ZSgpKTsKICAgICBkaXNwYXRjaF9ncm91cF9lbnRl
cihtZXRhZGF0YUxvYWRpbmdHcm91cC5nZXQoKSk7CkBAIC0xMjA2LDcgKzExOTQsNyBAQCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Okl0ZW1TdGF0CiAKIFBsYXRmb3JtTWVkaWEgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0CiB7
Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxh
dGZvcm1NZWRpYSglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKICAg
ICBQbGF0Zm9ybU1lZGlhIHBtOwogICAgIHBtLnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpBVkZvdW5k
YXRpb25NZWRpYVBsYXllclR5cGU7CiAgICAgcG0ubWVkaWEuYXZmTWVkaWFQbGF5ZXIgPSBtX2F2
UGxheWVyLmdldCgpOwpAQCAtMTMyNCw3ICsxMzEyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOgogICAgIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpwbGF0Zm9ybVBsYXkoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtUGxheSglcCkiLCB0aGlzKTsKKyAgICBJ
TkZPX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTMzNiw3ICsxMzI0LDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OnBsYXRmb3JtUGF1c2UoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtUGF1c2UoJXApIiwgdGhpcyk7CisgICAg
SU5GT19MT0coTE9HSURFTlRJRklFUik7CiAgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTEzNjcsNyArMTM1NSw3IEBAIE1lZGlhVGltZSBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24KICAgICBpZiAoQ01USU1FX0lTX0lOREVGSU5JVEUoY21E
dXJhdGlvbikpCiAgICAgICAgIHJldHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1l
KCk7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpwbGF0Zm9ybUR1cmF0aW9uKCVwKSAtIGludmFsaWQgZHVyYXRpb24sIHJldHVybmluZyAlcyIs
IHRoaXMsIHRvU3RyaW5nKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkudXRmOCgpLmRhdGEoKSk7
CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBpbnZhbGlkIHRpbWUiKTsK
ICAgICByZXR1cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwogfQogCkBAIC0xNDAxLDggKzEz
ODksNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgCiAg
ICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIoKTsKIAotICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNlZWtUb1RpbWUoJXApIC0gY2FsbGlu
ZyBzZWVrVG9UaW1lIiwgdGhpcyk7Ci0KICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgc2Vla1Rv
VGltZTpjbVRpbWUgdG9sZXJhbmNlQmVmb3JlOmNtQmVmb3JlIHRvbGVyYW5jZUFmdGVyOmNtQWZ0
ZXIgY29tcGxldGlvbkhhbmRsZXI6XihCT09MIGZpbmlzaGVkKSB7CiAgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3dlYWtUaGlzLCBmaW5pc2hlZF0gewogICAgICAgICAgICAgYXV0byBfdGhpcyA9
IHdlYWtUaGlzLmdldCgpOwpAQCAtMTQzNCw3ICsxNDIwLDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlmIChtX211dGVkID09IG11dGVkKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpzZXRNdXRlZCglcCkgLSBzZXQgdG8gJXMiLCB0aGlzLCBib29sU3RyaW5nKG11dGVk
KSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIi0gIiwgbXV0ZWQpOwogCiAgICAgbV9t
dXRlZCA9IG11dGVkOwogCkBAIC0xNDUxLDcgKzE0MzcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoJXApIC0gc2V0IHRvICVzIiwgdGhp
cywgYm9vbFN0cmluZyhjbG9zZWRDYXB0aW9uc1Zpc2libGUpKTsKKyAgICBJTkZPX0xPRyhMT0dJ
REVOVElGSUVSLCAiLSAiLCBjbG9zZWRDYXB0aW9uc1Zpc2libGUpOwogfQogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFJhdGVEb3VibGUoZG91YmxlIHJhdGUp
CkBAIC0xNTkzLDEwICsxNTc5LDkgQEAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpB
c3NldFN0YQogICAgIGZvciAoTlNTdHJpbmcgKmtleU5hbWUgaW4gYXNzZXRNZXRhZGF0YUtleU5h
bWVzKCkpIHsKICAgICAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CiAgICAgICAgIEFWS2V5VmFs
dWVTdGF0dXMga2V5U3RhdHVzID0gW21fYXZBc3NldC5nZXQoKSBzdGF0dXNPZlZhbHVlRm9yS2V5
OmtleU5hbWUgZXJyb3I6JmVycm9yXTsKLSNpZiAhTE9HX0RJU0FCTEVECisKICAgICAgICAgaWYg
KGVycm9yKQotICAgICAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjphc3NldFN0YXR1cyAtIHN0YXR1c09mVmFsdWVGb3JLZXkgZmFpbGVkIGZvciAlcywg
ZXJyb3IgPSAlcyIsIFtrZXlOYW1lIFVURjhTdHJpbmddLCBbW2Vycm9yIGxvY2FsaXplZERlc2Ny
aXB0aW9uXSBVVEY4U3RyaW5nXSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIEVSUk9SX0xPRyhMT0dJ
REVOVElGSUVSLCAiZmFpbGVkIGZvciAiLCBba2V5TmFtZSBVVEY4U3RyaW5nXSwgIiwgZXJyb3Ig
PSAiLCBbW2Vycm9yIGxvY2FsaXplZERlc2NyaXB0aW9uXSBVVEY4U3RyaW5nXSk7CiAKICAgICAg
ICAgaWYgKGtleVN0YXR1cyA8IEFWS2V5VmFsdWVTdGF0dXNMb2FkZWQpCiAgICAgICAgICAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGluZzsvLyBBdCBsZWFzdCBvbmUga2V5
IGlzIG5vdCBsb2FkZWQgeWV0LgpAQCAtMTY3Niw3ICsxNjYxLDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnBhaW50V2l0aEltYWdlR2VuZXJhdG9yKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aEltYWdlR2VuZXJhdG9yKCVwKSIs
IHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGltYWdlID0gY3JlYXRlSW1hZ2VGb3JUaW1lSW5SZWN0KGN1cnJlbnRUaW1lKCks
IHJlY3QpOwogICAgIGlmIChpbWFnZSkgewpAQCAtMTY5NSw3ICsxNjgwLDcgQEAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IE1lZGlhUGxheWVyUHJpdmF0ZQogICAgICAgICBjcmVhdGVJbWFnZUdlbmVy
YXRvcigpOwogICAgIEFTU0VSVChtX2ltYWdlR2VuZXJhdG9yKTsKIAotI2lmICFMT0dfRElTQUJM
RUQKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBkb3VibGUgc3RhcnQgPSBtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICNlbmRpZgogCkBAIC0xNzAzLDkgKzE2ODgsOCBAQCBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gTWVkaWFQbGF5ZXJQcml2YXRlCiAgICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IHJhd0ltYWdlID0gYWRvcHRDRihbbV9pbWFnZUdlbmVyYXRvci5nZXQoKSBjb3B5
Q0dJbWFnZUF0VGltZTpDTVRpbWVNYWtlV2l0aFNlY29uZHModGltZSwgNjAwKSBhY3R1YWxUaW1l
Om5pbCBlcnJvcjpuaWxdKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9w
dENGKENHSW1hZ2VDcmVhdGVDb3B5V2l0aENvbG9yU3BhY2UocmF3SW1hZ2UuZ2V0KCksIHNSR0JD
b2xvclNwYWNlUmVmKCkpKTsKIAotI2lmICFMT0dfRElTQUJMRUQKLSAgICBkb3VibGUgZHVyYXRp
b24gPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIHN0YXJ0OwotICAgIExPRyhNZWRp
YSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUltYWdlRm9yVGlt
ZUluUmVjdCglcCkgLSBjcmVhdGluZyBpbWFnZSB0b29rICUuNGYiLCB0aGlzLCBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGR1cmF0aW9uKSk7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
REVCVUdfTE9HKExPR0lERU5USUZJRVIsICJjcmVhdGluZyBpbWFnZSB0b29rICIsIG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gc3RhcnQpOwogI2VuZGlmCiAKICAgICByZXR1cm4gaW1h
Z2U7CkBAIC0xNzEzLDcgKzE2OTcsNiBAQCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gTWVkaWFQbGF5
ZXJQcml2YXRlCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Z2V0
U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4m
IHN1cHBvcnRlZFR5cGVzKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OmdldFN1cHBvcnRlZFR5cGVzIik7CiAgICAgc3VwcG9ydGVkVHlwZXMg
PSBBVkZvdW5kYXRpb25NSU1FVHlwZUNhY2hlOjpzaW5nbGV0b24oKS50eXBlcygpOwogfSAKIApA
QCAtMjA0Miw4ICsyMDI1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOgogCiAgICAgc2V0SGFzQ2xvc2VkQ2FwdGlvbnMoaGFzQ2FwdGlvbnMpOwogCi0gICAgTE9H
KE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOnRyYWNrc0NoYW5nZWQoJXAp
IC0gaGFzVmlkZW8gPSAlcywgaGFzQXVkaW8gPSAlcywgaGFzQ2FwdGlvbnMgPSAlcyIsCi0gICAg
ICAgIHRoaXMsIGJvb2xTdHJpbmcoaGFzVmlkZW8oKSksIGJvb2xTdHJpbmcoaGFzQXVkaW8oKSks
IGJvb2xTdHJpbmcoaGFzQ2xvc2VkQ2FwdGlvbnMoKSkpOworICAgIElORk9fTE9HKExPR0lERU5U
SUZJRVIsICJoYXMgdmlkZW8gPSAiLCBoYXNWaWRlbygpLCAiLCBoYXMgYXVkaW8gPSAiLCBoYXNB
dWRpbygpLCAiLCBoYXMgY2FwdGlvbnMgPSAiLCBoYXNDbG9zZWRDYXB0aW9ucygpKTsKIAogICAg
IHNpemVDaGFuZ2VkKCk7CiAKQEAgLTIxNzAsNyArMjE1Miw3IEBAIHZvaWQgZGV0ZXJtaW5lQ2hh
bmdlZFRyYWNrc0Zyb21OZXdUcmFja3MKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjp1cGRhdGVBdWRpb1RyYWNrcygpCiB7Ci0jaWYgIUxPR19ESVNBQkxFRAorI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIHNpemVfdCBjb3VudCA9IG1fYXVkaW9UcmFja3Mu
c2l6ZSgpOwogI2VuZGlmCiAKQEAgLTIxOTAsMTQgKzIxNzIsMTQgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2F1ZGlv
VHJhY2tzKQogICAgICAgICB0cmFjay0+cmVzZXRQcm9wZXJ0aWVzRnJvbVRyYWNrKCk7CiAKLSNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6dXBkYXRlQXVkaW9UcmFja3MoJXApIC0gYXVkaW8gdHJhY2sgY291bnQgd2Fz
ICVsdSwgaXMgJWx1IiwgdGhpcywgY291bnQsIG1fYXVkaW9UcmFja3Muc2l6ZSgpKTsKKyNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAidHJhY2sg
Y291bnQgd2FzICIsIGNvdW50LCAiLCBpcyAiLCBtX2F1ZGlvVHJhY2tzLnNpemUoKSk7CiAjZW5k
aWYKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRhdGVW
aWRlb1RyYWNrcygpCiB7Ci0jaWYgIUxPR19ESVNBQkxFRAorI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAogICAgIHNpemVfdCBjb3VudCA9IG1fdmlkZW9UcmFja3Muc2l6ZSgpOwogI2VuZGlmCiAK
QEAgLTIyMTYsOCArMjE5OCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9hdWRpb1RyYWNrcykKICAgICAgICAgdHJh
Y2stPnJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpOwogCi0jaWYgIUxPR19ESVNBQkxFRAotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0ZVZp
ZGVvVHJhY2tzKCVwKSAtIHZpZGVvIHRyYWNrIGNvdW50IHdhcyAlbHUsIGlzICVsdSIsIHRoaXMs
IGNvdW50LCBtX3ZpZGVvVHJhY2tzLnNpemUoKSk7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgInRyYWNrIGNvdW50IHdhcyAiLCBjb3VudCwg
IiwgaXMgIiwgbV92aWRlb1RyYWNrcy5zaXplKCkpOwogI2VuZGlmCiB9CiAKQEAgLTIzMTgsNyAr
MjMwMCw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVWaWRlb091dHB1dCgp
CiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y3JlYXRlVmlkZW9PdXRwdXQoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklF
Uik7CiAKICAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtIHx8IG1fdmlkZW9PdXRwdXQpCiAgICAgICAg
IHJldHVybjsKQEAgLTIzMzQsOCArMjMxNiw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzoKICAgICBbbV92aWRlb091dHB1dCBzZXREZWxlZ2F0ZTptX3ZpZGVvT3V0
cHV0RGVsZWdhdGUuZ2V0KCkgcXVldWU6Z2xvYmFsUHVsbERlbGVnYXRlUXVldWUoKV07CiAKICAg
ICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT3V0cHV0Om1fdmlkZW9PdXRwdXQuZ2V0KCldOwot
Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3Jl
YXRlVmlkZW9PdXRwdXQoJXApIC0gcmV0dXJuaW5nICVwIiwgdGhpcywgbV92aWRlb091dHB1dC5n
ZXQoKSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVz
dHJveVZpZGVvT3V0cHV0KCkKQEAgLTIzNDUsNyArMjMyNSw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogICAgIGlmIChtX2F2UGxheWVySXRlbSkKICAgICAg
ICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIHJlbW92ZU91dHB1dDptX3ZpZGVvT3V0cHV0LmdldCgp
XTsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpk
ZXN0cm95VmlkZW9PdXRwdXQoJXApIC0gZGVzdHJveWluZyAgJXAiLCB0aGlzLCBtX3ZpZGVvT3V0
cHV0LmdldCgpKTsKKworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgbV92aWRl
b091dHB1dCA9IDA7CiB9CkBAIC0yMzk3LDE1ICsyMzc4LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgbV9waXhlbEJ1ZmZlckNvbmZvcm1lciA9
IHN0ZDo6bWFrZV91bmlxdWU8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4oKENGRGljdGlvbmFyeVJl
ZilhdHRyaWJ1dGVzKTsKICAgICB9CiAKLSNpZiAhTE9HX0RJU0FCTEVECisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECiAgICAgZG91YmxlIHN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCk7CiAjZW5kaWYKIAogICAgIG1fbGFzdEltYWdlID0gbV9waXhlbEJ1ZmZlckNvbmZvcm1l
ci0+Y3JlYXRlSW1hZ2VGcm9tUGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZ2V0KCkpOwogCi0jaWYg
IUxPR19ESVNBQkxFRAotICAgIGRvdWJsZSBkdXJhdGlvbiA9IG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpIC0gc3RhcnQ7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6dXBkYXRlTGFzdEltYWdlKCVwKSAtIGNyZWF0aW5nIGJ1ZmZlciB0b29r
ICUuNGYiLCB0aGlzLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGR1cmF0aW9uKSk7CisjaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECisgICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIsICJjcmVhdGlu
ZyBidWZmZXIgdG9vayAiLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIHN0YXJ0KTsK
ICNlbmRpZgogfQogCkBAIC0yNDIzLDcgKzI0MDMsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFmaXJzdEVuYWJsZWRWaWRlb1RyYWNrKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpwYWludFdpdGhWaWRlb091dHB1dCglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xP
RyhMT0dJREVOVElGSUVSKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihjb250ZXh0KTsKICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KDAsIDAsIENHSW1hZ2VHZXRX
aWR0aChtX2xhc3RJbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQobV9sYXN0SW1hZ2UuZ2V0
KCkpKTsKQEAgLTI0NDIsNyArMjQyMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzoKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpj
cmVhdGVPcGVuR0xWaWRlb091dHB1dCgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlT3BlbkdMVmlkZW9PdXRwdXQoJXApIiwgdGhp
cyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAKICAgICBpZiAoIW1fYXZQbGF5ZXJJ
dGVtIHx8IG1fb3BlbkdMVmlkZW9PdXRwdXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTYsOCAr
MjQzNiw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBB
U1NFUlQobV9vcGVuR0xWaWRlb091dHB1dCk7CiAKICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkg
YWRkT3V0cHV0Om1fb3BlbkdMVmlkZW9PdXRwdXQuZ2V0KCldOwotCi0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlT3BlbkdMVmlkZW9PdXRw
dXQoJXApIC0gcmV0dXJuaW5nICVwIiwgdGhpcywgbV9vcGVuR0xWaWRlb091dHB1dC5nZXQoKSk7
CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveU9w
ZW5HTFZpZGVvT3V0cHV0KCkKQEAgLTI0NjUsOSArMjQ0MywxMCBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFtX29wZW5HTFZpZGVvT3V0cHV0KQog
ICAgICAgICByZXR1cm47CiAKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKKwogICAgIGlm
IChtX2F2UGxheWVySXRlbSkKICAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIHJlbW92ZU91
dHB1dDptX29wZW5HTFZpZGVvT3V0cHV0LmdldCgpXTsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95T3BlbkdMVmlkZW9PdXRwdXQoJXAp
IC0gZGVzdHJveWluZyAgJXAiLCB0aGlzLCBtX3ZpZGVvT3V0cHV0LmdldCgpKTsKIAogICAgIG1f
b3BlbkdMVmlkZW9PdXRwdXQgPSAwOwogfQpAQCAtMjUzMyw3ICsyNTEyLDcgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGxvbmcgcmVzdWx0ID0gZGlzcGF0
Y2hfc2VtYXBob3JlX3dhaXQobV92aWRlb091dHB1dFNlbWFwaG9yZSwgZGlzcGF0Y2hfdGltZSgw
LCAxICogTlNFQ19QRVJfU0VDKSk7CiAKICAgICBpZiAocmVzdWx0KQotICAgICAgICBMT0coTWVk
aWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp3YWl0Rm9yVmlkZW9PdXRw
dXRNZWRpYURhdGFXaWxsQ2hhbmdlKCVwKSB0aW1lZCBvdXQiLCB0aGlzKTsKKyAgICAgICAgRVJS
T1JfTE9HKExPR0lERU5USUZJRVIsICJ0aW1lZCBvdXQiKTsKIH0KIAogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpvdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlKEFWUGxh
eWVySXRlbVZpZGVvT3V0cHV0VHlwZSAqKQpAQCAtMjY4NCw3ICsyNjYzLDcgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogewogICAgIEFWTWVkaWFTZWxlY3Rpb25H
cm91cFR5cGUgKmxlZ2libGVHcm91cCA9IHNhZmVNZWRpYVNlbGVjdGlvbkdyb3VwRm9yTGVnaWJs
ZU1lZGlhKCk7CiAgICAgaWYgKCFsZWdpYmxlR3JvdXApIHsKLSAgICAgICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cHJvY2Vzc01lZGlhU2VsZWN0aW9u
T3B0aW9ucyglcCkgLSBuaWwgbWVkaWFTZWxlY3Rpb25Hcm91cCIsIHRoaXMpOworICAgICAgICBJ
TkZPX0xPRyhMT0dJREVOVElGSUVSLCAibm8gbWVkaWFTZWxlY3Rpb25Hcm91cCIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0yNzU4LDcgKzI3MzcsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6Zmx1c2hDdWVzKCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjpmbHVzaEN1ZXMoJXApIiwgdGhpcyk7CisgICAgSU5GT19M
T0coTE9HSURFTlRJRklFUik7CiAKICAgICBpZiAoIW1fY3VycmVudFRleHRUcmFjaykKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjc3Myw4ICsyNzUyLDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOgogICAgIGlmIChtX2N1cnJlbnRUZXh0VHJhY2sgPT0gdHJhY2spCiAg
ICAgICAgIHJldHVybjsKIAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnNldEN1cnJlbnRUZXh0VHJhY2soJXApIC0gc2VsZWN0aW5nIHRyYWNrICVw
LCBsYW5ndWFnZSA9ICVzIiwgdGhpcywgdHJhY2ssIHRyYWNrID8gdHJhY2stPmxhbmd1YWdlKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKLSAgICAgICAgCisgICAgSU5GT19MT0coTE9H
SURFTlRJRklFUiwgInNlbGVjdGluZyB0cmFjayB3aXRoIGxhbmd1YWdlICIsIHRyYWNrID8gdHJh
Y2stPmxhbmd1YWdlKCkgOiAiIik7CisKICAgICBtX2N1cnJlbnRUZXh0VHJhY2sgPSB0cmFjazsK
IAogICAgIGlmICh0cmFjaykgewpAQCAtMjgyMCw3ICsyNzk5LDcgQEAgU3RyaW5nIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iagogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAog
ICAgIGlmIChjdXJyZW50bHlTZWxlY3RlZEF1ZGlibGVPcHRpb24pIHsKICAgICAgICAgbV9sYW5n
dWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2sgPSBbW2N1cnJlbnRseVNlbGVjdGVkQXVkaWJsZU9wdGlv
biBsb2NhbGVdIGxvY2FsZUlkZW50aWZpZXJdOwotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpsYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2so
JXApIC0gcmV0dXJuaW5nIGxhbmd1YWdlIG9mIHNlbGVjdGVkIGF1ZGlibGUgb3B0aW9uOiAlcyIs
IHRoaXMsIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAibGFuZ3VhZ2Ugb2Ygc2VsZWN0ZWQgYXVkaWJs
ZSBvcHRpb24gIiwgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2spOwogCiAgICAgICAgIHJl
dHVybiBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjazsKICAgICB9CkBAIC0yODMxLDE5ICsy
ODEwLDE0IEBAIFN0cmluZyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmoKICAgICBO
U0FycmF5ICp0cmFja3MgPSBbbV9hdkFzc2V0LmdldCgpIHRyYWNrc1dpdGhNZWRpYVR5cGU6QVZN
ZWRpYVR5cGVBdWRpb107CiAgICAgaWYgKCF0cmFja3MgfHwgW3RyYWNrcyBjb3VudF0gIT0gMSkg
ewogICAgICAgICBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayA9IGVtcHR5U3RyaW5nKCk7
Ci0gICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
Omxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayglcCkgLSAlbHUgYXVkaW8gdHJhY2tzLCByZXR1
cm5pbmcgZW1wdHlTdHJpbmcoKSIsIHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHRy
YWNrcyA/IFt0cmFja3MgY291bnRdIDogMCkpOworICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElG
SUVSLCB0cmFja3MgPyBbdHJhY2tzIGNvdW50XSA6IDAsICIgYXVkaW8gdHJhY2tzLCByZXR1cm5p
bmcgZW1wdHkiKTsKICAgICAgICAgcmV0dXJuIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNr
OwogICAgIH0KIAogICAgIEFWQXNzZXRUcmFjayAqdHJhY2sgPSBbdHJhY2tzIG9iamVjdEF0SW5k
ZXg6MF07CiAgICAgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2sgPSBBVlRyYWNrUHJpdmF0
ZUFWRk9iakNJbXBsOjpsYW5ndWFnZUZvckFWQXNzZXRUcmFjayh0cmFjayk7CiAKLSNpZiAhTE9H
X0RJU0FCTEVECi0gICAgaWYgKG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrID09IGVtcHR5
U3RyaW5nKCkpCi0gICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6Omxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayglcCkgLSBzaW5nbGUgYXVkaW8g
dHJhY2sgaGFzIG5vIGxhbmd1YWdlLCByZXR1cm5pbmcgZW1wdHlTdHJpbmcoKSIsIHRoaXMpOwot
ICAgIGVsc2UKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCVwKSAtIHJldHVybmluZyBsYW5n
dWFnZSBvZiBzaW5nbGUgYXVkaW8gdHJhY2s6ICVzIiwgdGhpcywgbV9sYW5ndWFnZU9mUHJpbWFy
eUF1ZGlvVHJhY2sudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKKyAgICBJTkZPX0xPRyhMT0dJREVO
VElGSUVSLCAic2luZ2xlIGF1ZGlvIHRyYWNrIGhhcyBsYW5ndWFnZSBcIiIsIG1fbGFuZ3VhZ2VP
ZlByaW1hcnlBdWRpb1RyYWNrLCAiXCIiKTsKIAogICAgIHJldHVybiBtX2xhbmd1YWdlT2ZQcmlt
YXJ5QXVkaW9UcmFjazsKIH0KQEAgLTI4NjQsNyArMjgzOCw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICB3aXJlbGVzc1RhcmdldCA9IG1fYXZQbGF5ZXIg
JiYgbV9hdlBsYXllci5nZXQoKS5leHRlcm5hbFBsYXliYWNrQWN0aXZlOwogI2VuZGlmCiAKLSAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjppc0N1cnJl
bnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCVwKSAtIHJldHVybmluZyAlcyIsIHRoaXMsIGJvb2xT
dHJpbmcod2lyZWxlc3NUYXJnZXQpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAiLSAi
LCB3aXJlbGVzc1RhcmdldCk7CiAKICAgICByZXR1cm4gd2lyZWxlc3NUYXJnZXQ7CiB9CkBAIC0y
OTA0LDcgKzI4NzgsNiBAQCBTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
CiAjZWxzZQogICAgIHdpcmVsZXNzVGFyZ2V0TmFtZSA9IHdrRXhlcm5hbERldmljZURpc3BsYXlO
YW1lRm9yUGxheWVyKG1fYXZQbGF5ZXIuZ2V0KCkpOwogI2VuZGlmCi0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2lyZWxlc3NQbGF5YmFja1Rhcmdl
dE5hbWUoJXApIC0gcmV0dXJuaW5nICVzIiwgdGhpcywgd2lyZWxlc3NUYXJnZXROYW1lLnV0Zjgo
KS5kYXRhKCkpOwogCiAgICAgcmV0dXJuIHdpcmVsZXNzVGFyZ2V0TmFtZTsKIH0KQEAgLTI5MTUs
MTQgKzI4ODgsMTQgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgog
ICAgICAgICByZXR1cm4gIW1fYWxsb3dzV2lyZWxlc3NWaWRlb1BsYXliYWNrOwogCiAgICAgbV9h
bGxvd3NXaXJlbGVzc1ZpZGVvUGxheWJhY2sgPSBbbV9hdlBsYXllci5nZXQoKSBhbGxvd3NFeHRl
cm5hbFBsYXliYWNrXTsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCglcCkgLSByZXR1cm5pbmcg
JXMiLCB0aGlzLCBib29sU3RyaW5nKCFtX2FsbG93c1dpcmVsZXNzVmlkZW9QbGF5YmFjaykpOwor
ICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIsICFtX2FsbG93c1dpcmVsZXNzVmlkZW9Q
bGF5YmFjayk7CiAKICAgICByZXR1cm4gIW1fYWxsb3dzV2lyZWxlc3NWaWRlb1BsYXliYWNrOwog
fQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkKGJvb2wgZGlzYWJsZWQpCiB7Ci0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0V2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQoJXApIC0gJXMiLCB0aGlzLCBib29sU3RyaW5nKGRpc2FibGVkKSk7CisgICAg
SU5GT19MT0coTE9HSURFTlRJRklFUiwgIi0gIiwgZGlzYWJsZWQpOwogICAgIG1fYWxsb3dzV2ly
ZWxlc3NWaWRlb1BsYXliYWNrID0gIWRpc2FibGVkOwogICAgIGlmICghbV9hdlBsYXllcikKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjk0MCw3ICsyOTEzLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOgogCiAgICAgbV9vdXRwdXRDb250ZXh0ID0gbV9wbGF5YmFja1Rh
cmdldC0+dGFyZ2V0VHlwZSgpID09IE1lZGlhUGxheWJhY2tUYXJnZXQ6OkFWRm91bmRhdGlvbiA/
IHRvTWVkaWFQbGF5YmFja1RhcmdldE1hYyhtX3BsYXliYWNrVGFyZ2V0LmdldCgpKS0+b3V0cHV0
Q29udGV4dCgpIDogbnVsbHB0cjsKIAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoJXApIC0gdGFyZ2V0
ID0gJXAsIGRldmljZSBuYW1lID0gJXMiLCB0aGlzLCBtX291dHB1dENvbnRleHQuZ2V0KCksIG1f
cGxheWJhY2tUYXJnZXQtPmRldmljZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBJTkZPX0xP
RyhMT0dJREVOVElGSUVSKTsKIAogICAgIGlmICghbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZl
Um91dGUoKSkKICAgICAgICAgc2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoZmFsc2UpOwpA
QCAtMjk1NiwxMSArMjkyOSwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6CiAgICAgaWYgKCFtX3BsYXliYWNrVGFyZ2V0KQogICAgICAgICByZXR1cm47CiAKKyAg
ICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAiLSAiLCBzaG91bGRQbGF5KTsKKwogICAgIGlmICht
X3BsYXliYWNrVGFyZ2V0LT50YXJnZXRUeXBlKCkgPT0gTWVkaWFQbGF5YmFja1RhcmdldDo6QVZG
b3VuZGF0aW9uKSB7CiAgICAgICAgIEFWT3V0cHV0Q29udGV4dCAqbmV3Q29udGV4dCA9IHNob3Vs
ZFBsYXkgPyBtX291dHB1dENvbnRleHQuZ2V0KCkgOiBuaWw7CiAKLSAgICAgICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0U2hvdWxkUGxheVRvUGxh
eWJhY2tUYXJnZXQoJXApIC0gdGFyZ2V0ID0gJXAsIHNob3VsZFBsYXkgPSAlcyIsIHRoaXMsIG5l
d0NvbnRleHQsIGJvb2xTdHJpbmcoc2hvdWxkUGxheSkpOwotCiAgICAgICAgIGlmICghbV9hdlBs
YXllcikKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMjk3Nyw4ICsyOTUwLDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiAgICAgQVNTRVJUKG1fcGxheWJh
Y2tUYXJnZXQtPnRhcmdldFR5cGUoKSA9PSBNZWRpYVBsYXliYWNrVGFyZ2V0OjpNb2NrKTsKIAot
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFNo
b3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KCVwKSAtIHRhcmdldCA9IHtNb2NrfSwgc2hvdWxkUGxh
eSA9ICVzIiwgdGhpcywgYm9vbFN0cmluZyhzaG91bGRQbGF5KSk7Ci0KICAgICBzZXREZWxheUNh
bGxiYWNrcyh0cnVlKTsKICAgICBhdXRvIHdlYWtUaGlzID0gY3JlYXRlV2Vha1B0cigpOwogICAg
IHNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246Ok5vdGlmaWNhdGlvbihbd2Vha1RoaXNdIHsKQEAgLTMwODQsNyArMzA1NSw4IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRTaG91bGRCdWZmZXJEYXRhKGJvb2wgc2hvdWxk
QnVmZmVyKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OnNob3VsZEJ1ZmZlckRhdGEoJXApIC0gJXMiLCB0aGlzLCBib29sU3RyaW5nKHNob3Vs
ZEJ1ZmZlcikpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIsIHNob3VsZEJ1ZmZl
cik7CisKICAgICBpZiAobV9zaG91bGRCdWZmZXJEYXRhID09IHNob3VsZEJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0zMTI2LDcgKzMwOTgsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6CiB7CiAgICAgbV9jdXJyZW50TWV0YURhdGEgPSBtZXRhZGF0YSAm
JiAhW21ldGFkYXRhIGlzS2luZE9mQ2xhc3M6W05TTnVsbCBjbGFzc11dID8gbWV0YWRhdGEgOiBu
aWw7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjptZXRhZGF0YURpZEFycml2ZSglcCkgLSBhZGRpbmcgJWkgY3VlcyBhdCB0aW1lICVzIiwgdGhp
cywgbV9jdXJyZW50TWV0YURhdGEgPyBzdGF0aWNfY2FzdDxpbnQ+KFttX2N1cnJlbnRNZXRhRGF0
YS5nZXQoKSBjb3VudF0pIDogMCwgdG9TdHJpbmcobWVkaWFUaW1lKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBERUJVR19MT0coTE9HSURFTlRJRklFUiwgImFkZGluZyAiLCBtX2N1cnJlbnRNZXRhRGF0
YSA/IFttX2N1cnJlbnRNZXRhRGF0YS5nZXQoKSBjb3VudF0gOiAwLCAiIGF0IHRpbWUgIiwgbWVk
aWFUaW1lKTsKIAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQogICAgIGlmIChzZWVraW5nKCkp
CkBAIC0zMzY5LDE2ICszMzQxLDcgQEAgLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOmtl
eVBhdGggbwogICAgICAgICByZXR1cm47CiAKICAgICBib29sIHdpbGxDaGFuZ2UgPSBbW2NoYW5n
ZSB2YWx1ZUZvcktleTpOU0tleVZhbHVlQ2hhbmdlTm90aWZpY2F0aW9uSXNQcmlvcktleV0gYm9v
bFZhbHVlXTsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICBpZiAod2lsbENoYW5nZSkKLSAgICAg
ICAgTE9HKE1lZGlhLCAiV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXI6Om9ic2VydmVWYWx1ZUZvcktl
eVBhdGgoJXApIC0gd2lsbCBjaGFuZ2UsIGtleVBhdGggPSAlcyIsIHNlbGYsIFtrZXlQYXRoIFVU
RjhTdHJpbmddKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiB2YWx1
ZVN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhGb3JtYXQ6QCIlQCIs
IG5ld1ZhbHVlXSk7Ci0gICAgICAgIExPRyhNZWRpYSwgIldlYkNvcmVBVkZNb3ZpZU9ic2VydmVy
OjpvYnNlcnZlVmFsdWVGb3JLZXlQYXRoKCVwKSAtIGRpZCBjaGFuZ2UsIGtleVBhdGggPSAlcywg
dmFsdWUgPSAlcyIsIHNlbGYsIFtrZXlQYXRoIFVURjhTdHJpbmddLCBbdmFsdWVTdHJpbmcuZ2V0
KCkgVVRGOFN0cmluZ10pOwotICAgIH0KLSNlbmRpZgotCisgICAgYm9vbCBzaG91bGRMb2dWYWx1
ZSA9IHRydWU7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbjsKIAogICAgIGlm
IChjb250ZXh0ID09IE1lZGlhUGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0QVZQ
bGF5ZXJMYXllcikgewpAQCAtMzQxMCwxNSArMzM3MywxOSBAQCAtICh2b2lkKW9ic2VydmVWYWx1
ZUZvcktleVBhdGg6a2V5UGF0aCBvCiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6YmluZCgm
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxheWJhY2tCdWZmZXJFbXB0eURp
ZENoYW5nZSwgbV9jYWxsYmFjaywgW25ld1ZhbHVlIGJvb2xWYWx1ZV0pOwogICAgICAgICBlbHNl
IGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJwbGF5YmFja0J1ZmZlckZ1bGwiXSkKICAg
ICAgICAgICAgIGZ1bmN0aW9uID0gc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpwbGF5YmFja0J1ZmZlckZ1bGxEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFtuZXdW
YWx1ZSBib29sVmFsdWVdKTsKLSAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3Ry
aW5nOkAiYXNzZXQiXSkKKyAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5n
OkAiYXNzZXQiXSkgewogICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldEFzc2V0LCBtX2NhbGxiYWNrLCBSZXRhaW5Q
dHI8aWQ+KG5ld1ZhbHVlKSk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0
cmluZzpAImxvYWRlZFRpbWVSYW5nZXMiXSkKKyAgICAgICAgICAgIHNob3VsZExvZ1ZhbHVlID0g
ZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAibG9h
ZGVkVGltZVJhbmdlcyJdKSB7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6YmluZCgmTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bG9hZGVkVGltZVJhbmdlc0RpZENoYW5n
ZSwgbV9jYWxsYmFjaywgUmV0YWluUHRyPE5TQXJyYXk+KG5ld1ZhbHVlKSk7Ci0gICAgICAgIGVs
c2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInNlZWthYmxlVGltZVJhbmdlcyJdKQor
ICAgICAgICAgICAgc2hvdWxkTG9nVmFsdWUgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChb
a2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJzZWVrYWJsZVRpbWVSYW5nZXMiXSkgewogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OnNlZWthYmxlVGltZVJhbmdlc0RpZENoYW5nZSwgbV9jYWxsYmFjaywgUmV0YWluUHRy
PE5TQXJyYXk+KG5ld1ZhbHVlKSk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxU
b1N0cmluZzpAInRyYWNrcyJdKQorICAgICAgICAgICAgc2hvdWxkTG9nVmFsdWUgPSBmYWxzZTsK
KyAgICAgICAgfSBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJ0cmFja3MiXSkg
ewogICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnRyYWNrc0RpZENoYW5nZSwgbV9jYWxsYmFjaywgUmV0YWluUHRyPE5T
QXJyYXk+KG5ld1ZhbHVlKSk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0
cmluZzpAImhhc0VuYWJsZWRBdWRpbyJdKQorICAgICAgICAgICAgc2hvdWxkTG9nVmFsdWUgPSBm
YWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJoYXNF
bmFibGVkQXVkaW8iXSkKICAgICAgICAgICAgIGZ1bmN0aW9uID0gc3RkOjpiaW5kKCZNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpoYXNFbmFibGVkQXVkaW9EaWRDaGFuZ2UsIG1f
Y2FsbGJhY2ssIFtuZXdWYWx1ZSBib29sVmFsdWVdKTsKICAgICAgICAgZWxzZSBpZiAoW2tleVBh
dGggaXNFcXVhbFRvU3RyaW5nOkAicHJlc2VudGF0aW9uU2l6ZSJdKQogICAgICAgICAgICAgZnVu
Y3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBy
ZXNlbnRhdGlvblNpemVEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIEZsb2F0U2l6ZShbbmV3VmFsdWUg
c2l6ZVZhbHVlXSkpOwpAQCAtMzQzMCw2ICszMzk3LDcgQEAgLSAodm9pZClvYnNlcnZlVmFsdWVG
b3JLZXlQYXRoOmtleVBhdGggbwogICAgICAgICAgICAgaWYgKENNVElNRV9JU19OVU1FUklDKGl0
ZW1UaW1lKSkKICAgICAgICAgICAgICAgICBub3cgPSBzdGQ6Om1heCh0b01lZGlhVGltZShpdGVt
VGltZSksIE1lZGlhVGltZTo6emVyb1RpbWUoKSk7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0
ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bWV0YWRhdGFEaWRB
cnJpdmUsIG1fY2FsbGJhY2ssIFJldGFpblB0cjxOU0FycmF5PihuZXdWYWx1ZSksIG5vdyk7Cisg
ICAgICAgICAgICBzaG91bGRMb2dWYWx1ZSA9IGZhbHNlOwogICAgICAgICB9IGVsc2UgaWYgKFtr
ZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAImNhblBsYXlGYXN0UmV2ZXJzZSJdKQogICAgICAgICAg
ICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmNhblBsYXlGYXN0UmV2ZXJzZURpZENoYW5nZSwgbV9jYWxsYmFjaywgW25ld1ZhbHVlIGJv
b2xWYWx1ZV0pOwogICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJj
YW5QbGF5RmFzdEZvcndhcmQiXSkKQEAgLTM0NDksNyArMzQxNywyNiBAQCAtICh2b2lkKW9ic2Vy
dmVWYWx1ZUZvcktleVBhdGg6a2V5UGF0aCBvCiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6
YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6b3V0cHV0T2JzY3VyZWRE
dWVUb0luc3VmZmljaWVudEV4dGVybmFsUHJvdGVjdGlvbkNoYW5nZWQsIG1fY2FsbGJhY2ssIFtu
ZXdWYWx1ZSBib29sVmFsdWVdKTsKICNlbmRpZgogICAgIH0KLSAgICAKKworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgIGlmIChtX2NhbGxiYWNrLT5sb2dnZXIoKS53aWxsTG9nKG1fY2Fs
bGJhY2stPmxvZ0NoYW5uZWwoKSwgV1RGTG9nTGV2ZWxEZWJ1ZykpIHsKKworICAgICAgICBpZiAo
d2lsbENoYW5nZSkKKyAgICAgICAgICAgIG1fY2FsbGJhY2stPmxvZ2dlcigpLmRlYnVnKG1fY2Fs
bGJhY2stPmxvZ0NoYW5uZWwoKSwgUEFMOjpMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKCJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24iLCAib2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aCIsIG1f
Y2FsbGJhY2stPmxvZ0lkZW50aWZpZXIoKSksICJ3aWxsIGNoYW5nZSAnIiwgW2tleVBhdGggVVRG
OFN0cmluZ10sICInIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHNob3VsZExv
Z1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpA
ImR1cmF0aW9uIl0pCisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2stPmxvZ2dlcigpLmRl
YnVnKG1fY2FsbGJhY2stPmxvZ0NoYW5uZWwoKSwgUEFMOjpMb2dnZXI6OkxvZ1NpdGVJZGVudGlm
aWVyKCJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24iLCAib2JzZXJ2ZVZhbHVlRm9yS2V5
UGF0aCIsIG1fY2FsbGJhY2stPmxvZ0lkZW50aWZpZXIoKSksICJkaWQgY2hhbmdlICciLCBba2V5
UGF0aCBVVEY4U3RyaW5nXSwgIicgdG8gIiwgdG9NZWRpYVRpbWUoW25ld1ZhbHVlIENNVGltZVZh
bHVlXSkpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBSZXRh
aW5QdHI8TlNTdHJpbmc+IHZhbHVlU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBp
bml0V2l0aEZvcm1hdDpAIiVAIiwgbmV3VmFsdWVdKTsKKyAgICAgICAgICAgICAgICAgICAgbV9j
YWxsYmFjay0+bG9nZ2VyKCkuZGVidWcobV9jYWxsYmFjay0+bG9nQ2hhbm5lbCgpLCBQQUw6Okxv
Z2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIoIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiIs
ICJvYnNlcnZlVmFsdWVGb3JLZXlQYXRoIiwgbV9jYWxsYmFjay0+bG9nSWRlbnRpZmllcigpKSwg
ImRpZCBjaGFuZ2UgJyIsIFtrZXlQYXRoIFVURjhTdHJpbmddLCAiJyB0byAiLCBbdmFsdWVTdHJp
bmcuZ2V0KCkgVVRGOFN0cmluZ10pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIG1fY2FsbGJhY2stPmxvZ2dlcigpLmRlYnVnKG1fY2FsbGJh
Y2stPmxvZ0NoYW5uZWwoKSwgUEFMOjpMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKCJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24iLCAib2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aCIsIG1fY2Fs
bGJhY2stPmxvZ0lkZW50aWZpZXIoKSksICJkaWQgY2hhbmdlICciLCBba2V5UGF0aCBVVEY4U3Ry
aW5nXSwgIiciKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKCFmdW5jdGlv
bikKICAgICAgICAgcmV0dXJuOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320550</attachid>
            <date>2017-09-12 08:59:51 -0700</date>
            <delta_ts>2017-09-12 11:34:26 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>avfoundation_logging_patch_7.txt</filename>
            <type>text/plain</type>
            <size>60787</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTg3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisyMDE3LTA5LTEyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN3aXRjaCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24gdG8gcmVsZWFzZSBsb2dnaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2MjEKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzM0MzM1MzExPgorCisgICAgICAgIFJldmlld2VkIGJ5IEplciBOb2JsZS4KKwor
ICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om51bGxMb2dnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om1lZGlhUGxheWVyTG9nZ2VyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJDbGllbnQ6Om1lZGlhUGxheWVyTG9nSWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJMb2dnZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om1lZGlhUGxheWVyTG9nSWRlbnRpZmllcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246On5NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uOjpzZXRVcFZpZGVvUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6dGVhckRvd25WaWRlb1JlbmRlcmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmxvYWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpwbGF5YWJpbGl0eUtub3du
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cHJl
cGFyZVRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246OnBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OmR1cmF0aW9uTWVkaWFUaW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2Vla1dpdGhUb2xlcmFuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXROYXR1cmFsU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1h
eE1lZGlhVGltZVNlZWthYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6bWluTWVkaWFUaW1lU2Vla2FibGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp1cGRhdGVTdGF0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpyYXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b246OnRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6c2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246OmludmFsaWRhdGVDYWNoZWREdXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldFByZWxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptYWluVGhy
ZWFkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpzY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpkaXNwYXRjaE5vdGlmaWNhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnByb2Nl
c3NOZXdBbmRSZW1vdmVkVGV4dFRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246OmxvZ0NoYW5uZWwgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24u
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9n
Q2xhc3NOYW1lIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OmNsZWFyTWVkaWFDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjbGVhck1lZGlhQ2FjaGVGb3JPcmlnaW5z
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OmNhbmNlbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6Y3JlYXRlSW1hZ2VHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveUltYWdlR2VuZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNy
ZWF0ZUFWUGxheWVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveVZpZGVvTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZBc3NldEZvclVSTCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpj
cmVhdGVBVlBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpjcmVhdGVBVlBsYXllckl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2hlY2tQbGF5YWJpbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpiZWdpbkxv
YWRpbmdNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpwbGF0Zm9ybU1lZGlhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtUGxheSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybVBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXRmb3JtRHVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRNdXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRDbG9zZWRD
YXB0aW9uc1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6YXNzZXRTdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnRXaXRoSW1hZ2VHZW5lcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y3JlYXRlSW1hZ2VGb3JUaW1lSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmdldFN1cHBvcnRlZFR5cGVzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnRyYWNrc0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
dXBkYXRlQXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlVmlkZW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlVmlkZW9PdXRwdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVz
dHJveVZpZGVvT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnVwZGF0ZUxhc3RJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludFdpdGhWaWRlb091dHB1dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVh
dGVPcGVuR0xWaWRlb091dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95T3BlbkdMVmlkZW9PdXRwdXQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2FpdEZvclZpZGVv
T3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwcm9jZXNzTWVkaWFTZWxlY3Rpb25PcHRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmZs
dXNoQ3Vlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpzZXRDdXJyZW50VGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjppc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OndpcmVsZXNzUGxheWJh
Y2tUYXJnZXROYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNl
dFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0U2hvdWxkQnVmZmVyRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjptZXRhZGF0
YURpZEFycml2ZSk6CisgICAgICAgICgtW1dlYkNvcmVBVkZNb3ZpZU9ic2VydmVyIG9ic2VydmVW
YWx1ZUZvcktleVBhdGg6b2ZPYmplY3Q6Y2hhbmdlOmNvbnRleHQ6XSk6CisgICAgICAgIChXZWJD
b3JlOjpib29sU3RyaW5nKTogRGVsZXRlZC4KKwogMjAxNy0wOS0xMSAgRGVhbiBKYWNrc29uICA8
ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdMIG1hY09TXSBObyBuZWVkIHRvIG11bHRp
c2FtcGxlIHdoZW4gYmxpdHRpbmcgaW50byBXZWJHTExheWVyCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9QQUwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIyMTg3MykKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0wOS0xMiAgRXJpYyBDYXJsc29uICA8
ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBTd2l0Y2ggTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uIHRvIHJlbGVhc2UgbG9nZ2luZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2NjIxCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS8zNDMzNTMxMT4KKworICAgICAgICBSZXZpZXdlZCBieSBKZXIgTm9ibGUuCisKKyAgICAgICAg
KiBwYWwvTG9nZ2VyLmg6CisgICAgICAgIChQQUw6OkxvZ0FyZ3VtZW50Ojp0b1N0cmluZyk6Cisg
ICAgICAgICogcGFsL0xvZ2dlckhlbHBlci5oOgorCiAyMDE3LTA5LTExICBBbmR5IEVzdGVzICA8
YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBVcHN0cmVhbSBRVEtpdC1yZWxhdGVk
IFdlYktpdFN5c3RlbUludGVyZmFjZSBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvTG9nZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dn
ZXIuaAkocmV2aXNpb24gMjIxODczKQorKysgU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
c3RydWN0IExvZ0FyZ3VtZW50IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGlj
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBib29sPjo6dmFsdWUsIFN0
cmluZz46OnR5cGUgdG9TdHJpbmcoYm9vbCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgPyBB
U0NJSUxpdGVyYWwoInRydWUiKSA6IEFTQ0lJTGl0ZXJhbCgiZmFsc2UiKTsgfQogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPFUsIGludD46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGludCBhcmd1bWVu
dCkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVSA9IFQ+IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
VSwgdW5zaWduZWQ+Ojp2YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyh1bnNpZ25lZCBhcmd1
bWVudCkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVSA9IFQ+IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Nh
bWU8VSwgdW5zaWduZWQgbG9uZz46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKHVuc2ln
bmVkIGxvbmcgYXJndW1lbnQpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKGFyZ3VtZW50KTsgfQog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c3RkOjppc19zYW1lPFUsIGZsb2F0Pjo6dmFsdWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmco
ZmxvYXQgYXJndW1lbnQpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKGFyZ3VtZW50KTsgfQogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPFUsIGRvdWJsZT46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGRv
dWJsZSBhcmd1bWVudCkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIoYXJndW1lbnQpOyB9CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFU+Ojp0eXBlLCBBdG9t
aWNTdHJpbmc+Ojp2YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhBdG9taWNTdHJpbmcgYXJn
dW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50LnN0cmluZygpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL0xvZ2dlckhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvTG9nZ2VySGVscGVyLmgJKHJldmlzaW9uIDIyMTg3MykKKysrIFNvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvTG9nZ2VySGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAK
IAogbmFtZXNwYWNlIFBBTCB7CiAKK2NsYXNzIExvZ2dlcjsKKwogY2xhc3MgTG9nZ2VySGVscGVy
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Mb2dnZXJIZWxwZXIoKSA9IGRlZmF1bHQ7CkBAIC0z
OSw3ICs0MSw3IEBAIHB1YmxpYzoKIAogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogCi0jZGVm
aW5lIExPR0lERU5USUZJRVIgTG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcihsb2dDbGFzc05hbWUo
KSwgX19mdW5jX18sIGxvZ0lkZW50aWZpZXIoKSkKKyNkZWZpbmUgTE9HSURFTlRJRklFUiBQQUw6
OkxvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIobG9nQ2xhc3NOYW1lKCksIF9fZnVuY19fLCBsb2dJ
ZGVudGlmaWVyKCkpCiAKICNkZWZpbmUgQUxXQVlTX0xPRyguLi4pICAgICBsb2dnZXIoKS5sb2dB
bHdheXMobG9nQ2hhbm5lbCgpLCBfX1ZBX0FSR1NfXykKICNkZWZpbmUgRVJST1JfTE9HKC4uLikg
ICAgICBsb2dnZXIoKS5lcnJvcihsb2dDaGFubmVsKCksIF9fVkFfQVJHU19fKQpAQCAtNDcsNiAr
NDksNyBAQCBwdWJsaWM6CiAjZGVmaW5lIE5PVElDRV9MT0coLi4uKSAgICAgbG9nZ2VyKCkubm90
aWNlKGxvZ0NoYW5uZWwoKSwgX19WQV9BUkdTX18pCiAjZGVmaW5lIElORk9fTE9HKC4uLikgICAg
ICAgbG9nZ2VyKCkuaW5mbyhsb2dDaGFubmVsKCksIF9fVkFfQVJHU19fKQogI2RlZmluZSBERUJV
R19MT0coLi4uKSAgICAgIGxvZ2dlcigpLmRlYnVnKGxvZ0NoYW5uZWwoKSwgX19WQV9BUkdTX18p
CisjZGVmaW5lIFdJTExfTE9HKF9sZXZlbF8pICAgbG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVs
KCksIF9sZXZlbF8pCiAKICNlbHNlCiAKQEAgLTU5LDYgKzYyLDcgQEAgcHVibGljOgogI2RlZmlu
ZSBOT1RJQ0VfTE9HKC4uLikgICAgICgodm9pZCkwKQogI2RlZmluZSBJTkZPX0xPRyguLi4pICAg
ICAgICgodm9pZCkwKQogI2RlZmluZSBERUJVR19MT0coLi4uKSAgICAgICgodm9pZCkwKQorI2Rl
ZmluZSBXSUxMX0xPRyhfbGV2ZWxfKSAgIGZhbHNlCiAKICNlbmRpZgogICAgIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDIyMTg3MykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04
OTksNiArODk5LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiSFRNTE1lZGlhRWxlbWVudCI7IH0KICAgICBjb25zdCB2b2lk
KiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB2b2lkKj4obV9sb2dJZGVudGlmaWVyKTsgfQogICAgIFdURkxvZ0NoYW5uZWwmIGxvZ0No
YW5uZWwoKSBjb25zdCBmaW5hbDsKKworICAgIGNvbnN0IHZvaWQqIG1lZGlhUGxheWVyTG9nSWRl
bnRpZmllcigpIGZpbmFsIHsgcmV0dXJuIGxvZ0lkZW50aWZpZXIoKTsgfQorICAgIGNvbnN0IFBB
TDo6TG9nZ2VyJiBtZWRpYVBsYXllckxvZ2dlcigpIGZpbmFsIHsgcmV0dXJuIGxvZ2dlcigpOyB9
CiAjZW5kaWYKIAogICAgIGJvb2wgd2lsbExvZyhXVEZMb2dMZXZlbCkgY29uc3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShy
ZXZpc2lvbiAyMjE4NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDE0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY29uc3QgUGxhdGZvcm1NZWRpYSBOb1BsYXRmb3JtTWVkaWEgPSB7IFBsYXRm
b3JtTWVkaWE6Ok5vbmUsIHswfSB9OwogCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECitzdGF0
aWMgUmVmUHRyPFBBTDo6TG9nZ2VyPiYgbnVsbExvZ2dlcigpCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJlZlB0cjxQQUw6OkxvZ2dlcj4+IGxvZ2dlcjsKKyAgICByZXR1cm4gbG9nZ2Vy
OworfQorI2VuZGlmCisKIC8vIGEgbnVsbCBwbGF5ZXIgdG8gbWFrZSBNZWRpYVBsYXllciBsb2dp
YyBzaW1wbGVyCiAKIGNsYXNzIE51bGxNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKQEAgLTE2NCw2ICsxNzIsMjEgQEAgcHVibGljOgogICAg
IGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CiB9OwogCitjbGFzcyBOdWxsTWVkaWFQbGF5ZXJDbGllbnQgOiBwdWJsaWMgTWVkaWFQ
bGF5ZXJDbGllbnQgeworcHVibGljOgorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGNv
bnN0IFBBTDo6TG9nZ2VyJiBtZWRpYVBsYXllckxvZ2dlcigpIGZpbmFsCisgICAgeworICAgICAg
ICBpZiAoIW51bGxMb2dnZXIoKS5nZXQoKSkgeworICAgICAgICAgICAgbnVsbExvZ2dlcigpID0g
UEFMOjpMb2dnZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgIG51bGxMb2dnZXIoKS0+c2V0
RW5hYmxlZCh0aGlzLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKm51bGxM
b2dnZXIoKS5nZXQoKTsKKyAgICB9CisjZW5kaWYKK307CisKIGNvbnN0IFZlY3RvcjxDb250ZW50
VHlwZT4mIE1lZGlhUGxheWVyQ2xpZW50OjptZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3
YXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxD
b250ZW50VHlwZT4+IGNvbnRlbnRUeXBlczsKQEAgLTE3Miw3ICsxOTUsNyBAQCBjb25zdCBWZWN0
b3I8Q29udGVudFR5cGU+JiBNZWRpYVBsYXllckNsCiAKIHN0YXRpYyBNZWRpYVBsYXllckNsaWVu
dCYgbnVsbE1lZGlhUGxheWVyQ2xpZW50KCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TWVkaWFQbGF5ZXJDbGllbnQ+IGNsaWVudDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TnVs
bE1lZGlhUGxheWVyQ2xpZW50PiBjbGllbnQ7CiAgICAgcmV0dXJuIGNsaWVudC5nZXQoKTsKIH0K
IApAQCAtMTQ4Nyw2ICsxNTEwLDEzIEBAIGJvb2wgTWVkaWFQbGF5ZXI6OnNob3VsZENoZWNrSGFy
ZHdhcmVTdXAKICAgICByZXR1cm4gY2xpZW50KCkubWVkaWFQbGF5ZXJTaG91bGRDaGVja0hhcmR3
YXJlU3VwcG9ydCgpOwogfQogCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECitjb25zdCBQQUw6
OkxvZ2dlciYgTWVkaWFQbGF5ZXI6Om1lZGlhUGxheWVyTG9nZ2VyKCkKK3sKKyAgICByZXR1cm4g
Y2xpZW50KCkubWVkaWFQbGF5ZXJMb2dnZXIoKTsKK30KKyNlbmRpZgorCiB9CiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5o
CShyZXZpc2lvbiAyMjE4NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW5IYXNoLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJWaWRl
b1RyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHBhbC9Mb2dnZXIuaD4KICNpbmNsdWRlIDxydW50
aW1lL1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgpAQCAtMjk5LDYgKzMwMCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIG1lZGlhUGxheWVyU2hvdWxkRGlzYWJsZVNsZWVwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4mIG1lZGlhQ29udGVudFR5
cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIG1l
ZGlhUGxheWVyU2hvdWxkQ2hlY2tIYXJkd2FyZVN1cHBvcnQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdmlydHVhbCBjb25zdCB2b2lk
KiBtZWRpYVBsYXllckxvZ0lkZW50aWZpZXIoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmly
dHVhbCBjb25zdCBQQUw6OkxvZ2dlciYgbWVkaWFQbGF5ZXJMb2dnZXIoKSA9IDA7CisjZW5kaWYK
IH07CiAKIGNsYXNzIE1lZGlhUGxheWVyU3VwcG9ydHNUeXBlQ2xpZW50IHsKQEAgLTYyNiw2ICs2
MzIsMTEgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4mIG1lZGlhQ29u
dGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgYm9vbCBzaG91
bGRDaGVja0hhcmR3YXJlU3VwcG9ydCgpIGNvbnN0OwogCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECisgICAgY29uc3QgUEFMOjpMb2dnZXImIG1lZGlhUGxheWVyTG9nZ2VyKCk7CisgICAgY29u
c3Qgdm9pZCogbWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKCkgeyByZXR1cm4gY2xpZW50KCkubWVk
aWFQbGF5ZXJMb2dJZGVudGlmaWVyKCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIE1lZGlh
UGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCShyZXZpc2lvbiAyMjE4
NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiAr
NDEsNyBAQAogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPENvcmVNZWRpYS9Db3JlTWVkaWEu
aD4KICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CisjaW5jbHVkZSA8cGFsL0xvZ2dlci5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0YVZpZXcuaD4KICNpbmNsdWRlIDxydW50aW1lL1R5cGVk
QXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50MTZBcnJheS5oPgpAQCAtNjAs
NiArNjEsMTAgQEAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVBsYQogICAg
ICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQogICAgICwgbV9yZWFkeVN0YXRl
KE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAsIG1fcHJlbG9hZChNZWRpYVBsYXllcjo6
QXV0bykKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAsIG1fbG9nZ2VyKHBsYXllci0+
bWVkaWFQbGF5ZXJMb2dnZXIoKSkKKyAgICAsIG1fbG9nSWRlbnRpZmllcihwbGF5ZXItPm1lZGlh
UGxheWVyTG9nSWRlbnRpZmllcigpKQorI2VuZGlmCiAgICAgLCBtX2NhY2hlZER1cmF0aW9uKE1l
ZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKICAgICAsIG1fcmVwb3J0ZWREdXJhdGlvbihNZWRpYVRp
bWU6OmludmFsaWRUaW1lKCkpCiAgICAgLCBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5n
UHJvZ3Jlc3MoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQpAQCAtODEsMTIgKzg2LDEyIEBAIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGEKICAgICAsIG1fc2hvdWxkTWFp
bnRhaW5Bc3BlY3RSYXRpbyh0cnVlKQogICAgICwgbV9zZWVraW5nKGZhbHNlKQogewotICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uKCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIp
OwogfQogCiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246On5NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb24oKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6fk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiglcCkiLCB0aGlzKTsK
KyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBzZXRJZ25vcmVMb2FkU3RhdGVDaGFu
Z2VzKHRydWUpOwogfQogCkBAIC0xMjYsMTAgKzEzMSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpzZXQKICAgICBpZiAoY3VycmVudE1vZGUgPT0gcHJlZmVycmVkTW9k
ZSAmJiBjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0VXBW
aWRlb1JlbmRlcmluZyglcCkgLSBjdXJyZW50IG1vZGUgPSAlZCwgcHJlZmVycmVkIG1vZGUgPSAl
ZCIsIAotICAgICAgICB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KGN1cnJlbnRNb2RlKSwgc3RhdGlj
X2Nhc3Q8aW50PihwcmVmZXJyZWRNb2RlKSk7Ci0KLSAgICBpZiAoY3VycmVudE1vZGUgIT0gTWVk
aWFSZW5kZXJpbmdOb25lKSAgCisgICAgaWYgKGN1cnJlbnRNb2RlICE9IE1lZGlhUmVuZGVyaW5n
Tm9uZSkKICAgICAgICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygpOwogCiAgICAgc3dpdGNoIChw
cmVmZXJyZWRNb2RlKSB7CkBAIC0xNDQsMTUgKzE0NiwxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6c2V0CiAgICAgfQogCiAgICAgLy8gSWYgdXNpbmcgYSBtb3ZpZSBs
YXllciwgaW5mb3JtIHRoZSBjbGllbnQgc28gdGhlIGNvbXBvc2l0aW5nIHRyZWUgaXMgdXBkYXRl
ZC4KLSAgICBpZiAoY3VycmVudE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdUb0xheWVyIHx8IHByZWZl
cnJlZE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdUb0xheWVyKSB7Ci0gICAgICAgIExPRyhNZWRpYSwg
Ik1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0VXBWaWRlb1JlbmRlcmluZyglcCkg
LSBjYWxsaW5nIG1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQoKSIsIHRoaXMpOworICAg
IGlmIChjdXJyZW50TW9kZSA9PSBNZWRpYVJlbmRlcmluZ1RvTGF5ZXIgfHwgcHJlZmVycmVkTW9k
ZSA9PSBNZWRpYVJlbmRlcmluZ1RvTGF5ZXIpCiAgICAgICAgIG1fcGxheWVyLT5jbGllbnQoKS5t
ZWRpYVBsYXllclJlbmRlcmluZ01vZGVDaGFuZ2VkKG1fcGxheWVyKTsKLSAgICB9CiB9CiAKIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp0ZWFyRG93blZpZGVvUmVuZGVyaW5n
KCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnRl
YXJEb3duVmlkZW9SZW5kZXJpbmcoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJ
RklFUik7CiAKICAgICBkZXN0cm95Q29udGV4dFZpZGVvUmVuZGVyZXIoKTsKIApAQCAtMTY3LDcg
KzE2Nyw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpoYXMKIAogdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwp
CiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpsb2Fk
KCVwKSIsIHRoaXMpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAKICAgICBzZXRO
ZXR3b3JrU3RhdGUobV9wcmVsb2FkID09IE1lZGlhUGxheWVyOjpOb25lID8gTWVkaWFQbGF5ZXI6
OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZyk7CiAgICAgc2V0UmVhZHlTdGF0ZShNZWRpYVBs
YXllcjo6SGF2ZU5vdGhpbmcpOwpAQCAtMTkxLDE2ICsxOTEsMTQgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246OmxvYQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6cGxheWFiaWxpdHlLbm93bigpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpwbGF5YWJpbGl0eUtub3duKCVwKSIsIHRoaXMpOworICAg
IElORk9fTE9HKExPR0lERU5USUZJRVIsICJtZXRhZGF0YSBsb2FkZWQgPSAiLCBhc3NldFN0YXR1
cygpID4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGluZyk7CiAKICAgICBpZiAobV9hc3Nl
dElzUGxheWFibGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE5vdGhpbmcgbW9yZSB0byBk
byBpZiB3ZSBhbHJlYWR5IGhhdmUgYWxsIG9mIHRoZSBpdGVtJ3MgbWV0YWRhdGEuCi0gICAgaWYg
KGFzc2V0U3RhdHVzKCkgPiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNMb2FkaW5nKSB7Ci0gICAg
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGxheWFiaWxp
dHlLbm93biglcCkgLSBhbGwgbWV0YWRhdGEgbG9hZGVkIiwgdGhpcyk7CisgICAgaWYgKGFzc2V0
U3RhdHVzKCkgPiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNMb2FkaW5nKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBhcmUgc3VwcG9zZWQgdG8gbG9h
ZCBtZXRhZGF0YS4gSXQgaXMgT0sgdG8gYXNrIHRoZSBhc3NldCB0byBsb2FkIHRoZSBzYW1lIAog
ICAgIC8vIGluZm9ybWF0aW9uIG11bHRpcGxlIHRpbWVzLCBiZWNhdXNlIGlmIGl0IGhhcyBhbHJl
YWR5IGJlZW4gbG9hZGVkIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgCkBAIC0yMTEsMjggKzIwOSwy
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGxhCiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpwcmVwYXJlVG9QbGF5KCkKIHsKLSAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnByZXBhcmVUb1BsYXkoJXAp
IiwgdGhpcyk7Ci0KKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwogICAgIHNldFByZWxv
YWQoTWVkaWFQbGF5ZXI6OkF1dG8pOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6cGxheSgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjpwbGF5KCVwKSIsIHRoaXMpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
Uik7CiAKICAgICAvLyBJZiB0aGUgZmlsZSBoYXMgdmlkZW8sIGRvbid0IHJlcXVlc3QgcGxheWJh
Y2sgdW50aWwgdGhlIGZpcnN0IGZyYW1lIG9mIHZpZGVvIGlzIHJlYWR5IHRvIGRpc3BsYXkKICAg
ICAvLyBvciB0aGUgYXVkaW8gbWF5IHN0YXJ0IHBsYXlpbmcgYmVmb3JlIHdlIGNhbiByZW5kZXIg
dmlkZW8uCiAgICAgaWYgKCFtX2NhY2hlZEhhc1ZpZGVvIHx8IGhhc0F2YWlsYWJsZVZpZGVvRnJh
bWUoKSkKICAgICAgICAgcGxhdGZvcm1QbGF5KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGxheSglcCkgLSB3YWl0aW5n
IGZvciBmaXJzdCB2aWRlbyBmcmFtZSIsIHRoaXMpOworICAgICAgICBJTkZPX0xPRyhMT0dJREVO
VElGSUVSLCAid2FpdGluZyBmb3IgZmlyc3QgdmlkZW8gZnJhbWUiKTsKICAgICAgICAgbV9wbGF5
V2hlbkZyYW1lc0F2YWlsYWJsZSA9IHRydWU7CiAgICAgfQogfQogCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6cGF1c2UoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGF1c2UoJXApIiwgdGhpcyk7CisgICAgQUxXQVlTX0xP
RyhMT0dJREVOVElGSUVSKTsKICAgICBtX3BsYXlXaGVuRnJhbWVzQXZhaWxhYmxlID0gZmFsc2U7
CiAgICAgcGxhdGZvcm1QYXVzZSgpOwogfQpAQCAtMjQ3LDcgKzI0NCw3IEBAIE1lZGlhVGltZSBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24KICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6
emVyb1RpbWUoKTsKIAogICAgIG1fY2FjaGVkRHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmR1cmF0aW9uKCVwKSAtIGNh
Y2hpbmcgJXMiLCB0aGlzLCB0b1N0cmluZyhtX2NhY2hlZER1cmF0aW9uKS51dGY4KCkuZGF0YSgp
KTsKKwogICAgIHJldHVybiBtX2NhY2hlZER1cmF0aW9uOwogfQogCkBAIC0yNjEsNyArMjU4LDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZQogICAgIE1lZGlhVGlt
ZSB0aW1lID0gbWVkaWFUaW1lOwogCiAgICAgaWYgKG1fc2Vla2luZykgewotICAgICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtXaXRoVG9sZXJhbmNl
KCVwKSAtIHNhdmUgcGVuZGluZyBzZWVrIiwgdGhpcyk7CisgICAgICAgIEFMV0FZU19MT0coTE9H
SURFTlRJRklFUiwgInNhdmluZyBwZW5kaW5nIHNlZWsiKTsKICAgICAgICAgbV9wZW5kaW5nU2Vl
ayA9IFt0aGlzLCB0aW1lLCBuZWdhdGl2ZVRvbGVyYW5jZSwgcG9zaXRpdmVUb2xlcmFuY2VdKCkg
ewogICAgICAgICAgICAgc2Vla1dpdGhUb2xlcmFuY2UodGltZSwgbmVnYXRpdmVUb2xlcmFuY2Us
IHBvc2l0aXZlVG9sZXJhbmNlKTsKICAgICAgICAgfTsKQEAgLTI3OCw3ICsyNzUsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlCiAgICAgaWYgKGN1cnJlbnRUZXh0
VHJhY2soKSkKICAgICAgICAgY3VycmVudFRleHRUcmFjaygpLT5iZWdpblNlZWtpbmcoKTsKIAot
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlayglcCkg
LSBzZWVraW5nIHRvICVzIiwgdGhpcywgdG9TdHJpbmcodGltZSkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAic2Vla2luZyB0byAgIiwgdGltZSk7CiAKICAg
ICBzZWVrVG9UaW1lKHRpbWUsIG5lZ2F0aXZlVG9sZXJhbmNlLCBwb3NpdGl2ZVRvbGVyYW5jZSk7
CiB9CkBAIC0zMTYsMTIgKzMxMywxMiBAQCBGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXROYXR1
cmFsU2l6ZShGbG9hdFNpemUgc2l6ZSkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246c2V0TmF0dXJhbFNpemUoJXApIC0gc2l6ZSA9ICVmIHggJWYiLCB0
aGlzLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCiAgICAgRmxvYXRTaXplIG9sZFNp
emUgPSBtX2NhY2hlZE5hdHVyYWxTaXplOwogICAgIG1fY2FjaGVkTmF0dXJhbFNpemUgPSBzaXpl
OwotICAgIGlmIChvbGRTaXplICE9IG1fY2FjaGVkTmF0dXJhbFNpemUpCisgICAgaWYgKG9sZFNp
emUgIT0gbV9jYWNoZWROYXR1cmFsU2l6ZSkgeworICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElG
SUVSLCAid2FzICIsIG9sZFNpemUud2lkdGgoKSwgIiB4ICIsIG9sZFNpemUuaGVpZ2h0KCksICIs
IGlzICIsIHNpemUud2lkdGgoKSwgIiB4ICIsIHNpemUuaGVpZ2h0KCkpOwogICAgICAgICBtX3Bs
YXllci0+c2l6ZUNoYW5nZWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjpzZXRIYXNWaWRlbyhib29sIGIpCkBAIC00MDMsMTEgKzQwMCwxMiBAQCBN
ZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uCiAgICAgaWYgKCFtZXRhRGF0
YUF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCi0g
ICAgaWYgKCFtX2NhY2hlZE1heFRpbWVTZWVrYWJsZSkKKyAgICBpZiAoIW1fY2FjaGVkTWF4VGlt
ZVNlZWthYmxlKSB7CiAgICAgICAgIG1fY2FjaGVkTWF4VGltZVNlZWthYmxlID0gcGxhdGZvcm1N
YXhUaW1lU2Vla2FibGUoKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgImNhY2hp
bmcgIiwgbV9jYWNoZWRNYXhUaW1lU2Vla2FibGUpOworICAgIH0KIAotICAgIExPRyhNZWRpYSwg
Ik1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bWF4VGltZVNlZWthYmxlKCVwKSAtIHJl
dHVybmluZyAlcyIsIHRoaXMsIHRvU3RyaW5nKG1fY2FjaGVkTWF4VGltZVNlZWthYmxlKS51dGY4
KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gbV9jYWNoZWRNYXhUaW1lU2Vla2FibGU7ICAgCisgICAg
cmV0dXJuIG1fY2FjaGVkTWF4VGltZVNlZWthYmxlOwogfQogCiBNZWRpYVRpbWUgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptaW5NZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0CkBAIC00
MTUsMTAgKzQxMywxMSBAQCBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
CiAgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1l
Ojp6ZXJvVGltZSgpOwogCi0gICAgaWYgKCFtX2NhY2hlZE1pblRpbWVTZWVrYWJsZSkKKyAgICBp
ZiAoIW1fY2FjaGVkTWluVGltZVNlZWthYmxlKSB7CiAgICAgICAgIG1fY2FjaGVkTWluVGltZVNl
ZWthYmxlID0gcGxhdGZvcm1NaW5UaW1lU2Vla2FibGUoKTsKKyAgICAgICAgSU5GT19MT0coTE9H
SURFTlRJRklFUiwgImNhY2hpbmcgIiwgbV9jYWNoZWRNaW5UaW1lU2Vla2FibGUpOworICAgIH0K
IAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bWluVGlt
ZVNlZWthYmxlKCVwKSAtIHJldHVybmluZyAlcyIsIHRoaXMsIHRvU3RyaW5nKG1fY2FjaGVkTWlu
VGltZVNlZWthYmxlKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gbV9jYWNoZWRNaW5UaW1l
U2Vla2FibGU7CiB9CiAKQEAgLTU2NCwxMiArNTYzLDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjp1cGQKICAgICB9IGVsc2UgaWYgKCFoYXNBdmFpbGFibGVWaWRlb0Zy
YW1lKCkpCiAgICAgICAgIG1faGF2ZVJlcG9ydGVkRmlyc3RWaWRlb0ZyYW1lID0gZmFsc2U7CiAK
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG5ld05ldHdvcmtT
dGF0ZSB8fCBtX3JlYWR5U3RhdGUgIT0gbmV3UmVhZHlTdGF0ZSkgewotICAgICAgICBMT0coTWVk
aWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnVwZGF0ZVN0YXRlcyglcCkgLSBl
bnRlcmVkIHdpdGggbmV0d29ya1N0YXRlID0gJWksIHJlYWR5U3RhdGUgPSAlaSwgIGV4aXRpbmcg
d2l0aCBuZXR3b3JrU3RhdGUgPSAlaSwgcmVhZHlTdGF0ZSA9ICVpIiwKLSAgICAgICAgICAgIHRo
aXMsIHN0YXRpY19jYXN0PGludD4obV9uZXR3b3JrU3RhdGUpLCBzdGF0aWNfY2FzdDxpbnQ+KG1f
cmVhZHlTdGF0ZSksIHN0YXRpY19jYXN0PGludD4obmV3TmV0d29ya1N0YXRlKSwgc3RhdGljX2Nh
c3Q8aW50PihuZXdSZWFkeVN0YXRlKSk7Ci0gICAgfQotI2VuZGlmCisgICAgaWYgKG1fbmV0d29y
a1N0YXRlICE9IG5ld05ldHdvcmtTdGF0ZSkKKyAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSLCAiZW50ZXJlZCB3aXRoIG5ldHdvcmtTdGF0ZSAiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fbmV0
d29ya1N0YXRlKSwgIiwgZXhpdGluZyB3aXRoICIsIHN0YXRpY19jYXN0PGludD4obmV3TmV0d29y
a1N0YXRlKSk7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBuZXdSZWFkeVN0YXRlKQorICAgICAg
ICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJlbnRlcmVkIHdpdGggcmVhZHlTdGF0ZSAiLCBz
dGF0aWNfY2FzdDxpbnQ+KG1fcmVhZHlTdGF0ZSksICIsIGV4aXRpbmcgd2l0aCAiLCBzdGF0aWNf
Y2FzdDxpbnQ+KG5ld1JlYWR5U3RhdGUpKTsKIAogICAgIHNldE5ldHdvcmtTdGF0ZShuZXdOZXR3
b3JrU3RhdGUpOwogICAgIHNldFJlYWR5U3RhdGUobmV3UmVhZHlTdGF0ZSk7CkBAIC02MTksOCAr
NjE2LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1ldAogCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cmF0ZUNoYW5nZWQoKQogeworCiAjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgUExBVEZPUk0oSU9TKQotICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cmF0ZUNoYW5nZWQoJXAp
IC0gcmF0ZSA9ICVmLCByZXF1ZXN0ZWQgcmF0ZSA9ICVmLCBpdGVtIHN0YXR1cyA9ICVpIiwgdGhp
cywgcmF0ZSgpLCByZXF1ZXN0ZWRSYXRlKCksIHBsYXllckl0ZW1TdGF0dXMoKSk7CiAgICAgaWYg
KGlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3MoKSAmJiBwbGF5ZXJJdGVtU3RhdHVzKCkg
Pj0gTWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNQbGF5YmFja0J1ZmZlckZ1bGwpIHsKICAg
ICAgICAgZG91YmxlIHJhdGUgPSB0aGlzLT5yYXRlKCk7CiAgICAgICAgIGlmIChyYXRlICE9IHJl
cXVlc3RlZFJhdGUoKSkgewpAQCAtNjQ4LDE0ICs2NDUsMTQgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnNlZQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbjo6dGltZUNoYW5nZWQoY29uc3QgTWVkaWFUaW1lJiB0aW1lKQogewotICAgIExPRyhNZWRp
YSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dGltZUNoYW5nZWQoJXApIC0gdGlt
ZSA9ICVzIiwgdGhpcywgdG9TdHJpbmcodGltZSkudXRmOCgpLmRhdGEoKSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRpbWUpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIsIHRpbWUpOwog
fQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2Vla0NvbXBsZXRlZChi
b29sIGZpbmlzaGVkKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6c2Vla0NvbXBsZXRlZCglcCkgLSBmaW5pc2hlZCA9ICVkIiwgdGhpcywgZmluaXNo
ZWQpOwogICAgIFVOVVNFRF9QQVJBTShmaW5pc2hlZCk7CisgICAgQUxXQVlTX0xPRyhMT0dJREVO
VElGSUVSLCAiZmluaXNoZWQgPSAiLCBmaW5pc2hlZCk7CiAKICAgICBtX3NlZWtpbmcgPSBmYWxz
ZTsKIApAQCAtNjYzLDcgKzY2MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uOjpzZWUKICAgICBzdGQ6OnN3YXAocGVuZGluZ1NlZWssIG1fcGVuZGluZ1NlZWspOwogCiAg
ICAgaWYgKHBlbmRpbmdTZWVrKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6c2Vla0NvbXBsZXRlZCglcCkgLSBpc3N1aW5nIHBlbmRpbmcgc2Vl
ayIsIHRoaXMpOworICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJpc3N1aW5nIHBl
bmRpbmcgc2VlayIpOwogICAgICAgICBwZW5kaW5nU2VlaygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtNjk1LDYgKzY5Miw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uOjppbnYKICAgICAvLyBzbyByZXBvcnQgZHVyYXRpb24gY2hhbmdlZCB3aGVuIHRoZSBlc3Rp
bWF0ZSBpcyB1cGF0ZWQuCiAgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gdGhpcy0+ZHVyYXRpb25N
ZWRpYVRpbWUoKTsKICAgICBpZiAoZHVyYXRpb24gIT0gbV9yZXBvcnRlZER1cmF0aW9uKSB7Cisg
ICAgICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIsIG1fY2FjaGVkRHVyYXRpb24pOwog
ICAgICAgICBpZiAobV9yZXBvcnRlZER1cmF0aW9uLmlzVmFsaWQoKSkKICAgICAgICAgICAgIG1f
cGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKICAgICAgICAgbV9yZXBvcnRlZER1cmF0aW9uID0g
ZHVyYXRpb247CkBAIC03MjAsNiArNzE4LDcgQEAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUg
TWVkaWFQbGF5ZXJQcgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0
UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQogeworICAgIEFMV0FZU19MT0co
TE9HSURFTlRJRklFUiwgIiAtICIsIHN0YXRpY19jYXN0PGludD4ocHJlbG9hZCkpOwogICAgIG1f
cHJlbG9hZCA9IHByZWxvYWQ7CiAgICAgaWYgKCFtX2Fzc2V0VVJMLmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm47CkBAIC03NTQsOCArNzUzLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnNldAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bWFp
blRocmVhZENhbGxiYWNrKCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246Om1haW5UaHJlYWRDYWxsYmFjayglcCkiLCB0aGlzKTsKLQogICAgIGNsZWFy
TWFpblRocmVhZFBlbmRpbmdGbGFnKCk7CiAgICAgZGlzcGF0Y2hOb3RpZmljYXRpb24oKTsKIH0K
QEAgLTc3NiwyNiArNzczLDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OnNjaAogICAgIHNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24odHlw
ZSwgZmluaXNoZWQpKTsKIH0KIAotI2lmICFMT0dfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFy
KiBub3RpZmljYXRpb25OYW1lKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZp
Y2F0aW9uJiBub3RpZmljYXRpb24pCi17Ci0jZGVmaW5lIERFRklORV9UWVBFX1NUUklOR19DQVNF
KHR5cGUpIGNhc2UgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb246
OnR5cGU6IHJldHVybiAjdHlwZTsKLSAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbi50eXBlKCkpIHsK
LSAgICBGT1JfRUFDSF9NRURJQVBMQVlFUlBSSVZBVEVBVkZPVU5EQVRJT05fTk9USUZJQ0FUSU9O
X1RZUEUoREVGSU5FX1RZUEVfU1RSSU5HX0NBU0UpCi0gICAgY2FzZSBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6RnVuY3Rpb25UeXBlOiByZXR1cm4gIkZ1bmN0
aW9uVHlwZSI7Ci0gICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAiIjsK
LSAgICB9Ci0jdW5kZWYgREVGSU5FX1RZUEVfU1RSSU5HX0NBU0UKLX0KLSNlbmRpZiAvLyAhTE9H
X0RJU0FCTEVECi0gICAgCi0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpz
Y2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uJiYgbm90aWZpY2F0aW9u
KQogewotICAgIGF1dG8gbm90aWZpY2F0aW9uVHlwZSA9IG5vdGlmaWNhdGlvbi50eXBlKCk7Ci0g
ICAgaWYgKG5vdGlmaWNhdGlvblR5cGUgIT0gTm90aWZpY2F0aW9uOjpGdW5jdGlvblR5cGUpCi0g
ICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2NoZWR1
bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKCVwKSAtIG5vdGlmaWNhdGlvbiAlcyIsIHRoaXMsIG5v
dGlmaWNhdGlvbk5hbWUobm90aWZpY2F0aW9uKSk7Ci0KICAgICBtX3F1ZXVlTXV0ZXgubG9jaygp
OwogCiAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIGFsd2F5cyBwcm9jZXNzIHRoZSBwcm9wZXJ0
aWVzIGluIHRoZSBvcmRlciB0aGF0IHdlIGFyZSBub3RpZmllZCwKQEAgLTgyMCwxMSArNzk5LDgg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNjaAogCiAgICAgbV9xdWV1
ZU11dGV4LnVubG9jaygpOwogCi0gICAgaWYgKGRlbGF5RGlzcGF0Y2gpIHsKLSAgICAgICAgaWYg
KG5vdGlmaWNhdGlvblR5cGUgIT0gTm90aWZpY2F0aW9uOjpGdW5jdGlvblR5cGUpCi0gICAgICAg
ICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNjaGVkdWxl
TWFpblRocmVhZE5vdGlmaWNhdGlvbiglcCkgLSBlYXJseSByZXR1cm4iLCB0aGlzKTsKKyAgICBp
ZiAoZGVsYXlEaXNwYXRjaCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGRpc3BhdGNo
Tm90aWZpY2F0aW9uKCk7CiB9CkBAIC04NTgsOSArODM0LDYgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OmRpcwogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChub3RpZmljYXRpb24udHlwZSgpICE9IE5vdGlmaWNhdGlvbjo6RnVuY3Rpb25UeXBlKQot
ICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmRpc3Bh
dGNoTm90aWZpY2F0aW9uKCVwKSAtIGRpc3BhdGNoaW5nICVzIiwgdGhpcywgbm90aWZpY2F0aW9u
TmFtZShub3RpZmljYXRpb24pKTsKLQogICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLnR5cGUoKSkg
ewogICAgIGNhc2UgTm90aWZpY2F0aW9uOjpJdGVtRGlkUGxheVRvRW5kVGltZToKICAgICAgICAg
ZGlkRW5kKCk7CkBAIC05ODksOCArOTYyLDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnBybwogICAgICAgICB9CiAgICAgfQogCisgICAgdW5zaWduZWQgdHJhY2tDb3Vu
dCA9IG1fdGV4dFRyYWNrcy5zaXplKCk7CiAgICAgdW5zaWduZWQgaW5CYW5kQ291bnQgPSAwOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHRUcmFja3Muc2l6ZSgpOyArK2kpIHsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhY2tDb3VudDsgKytpKSB7CiAgICAgICAg
IFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGPiB0cmFjayA9IG1fdGV4dFRyYWNrc1tp
XTsKIAogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCkBAIC0xMDA2LDIxICs5ODAsMjAgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBybwogICAgICAgICB0cmFjay0+c2V0
SGFzQmVlblJlcG9ydGVkKHRydWUpOwogICAgICAgICBwbGF5ZXIoKS0+YWRkVGV4dFRyYWNrKCp0
cmFjayk7CiAgICAgfQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbjo6cHJvY2Vzc05ld0FuZFJlbW92ZWRUZXh0VHJhY2tzKCVwKSAtIGZvdW5kICVsdSB0ZXh0
IHRyYWNrcyIsIHRoaXMsIG1fdGV4dFRyYWNrcy5zaXplKCkpOworCisgICAgaWYgKHRyYWNrQ291
bnQgIT0gbV90ZXh0VHJhY2tzLnNpemUoKSkKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklF
UiwgImZvdW5kICIsIG1fdGV4dFRyYWNrcy5zaXplKCksICIgdGV4dCB0cmFja3MiKTsKIH0KIAog
I2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0KIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjpwbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKCkKIHsK
ICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAgIG1fcGxheWVyLT5jdXJyZW50UGxheWJhY2tUYXJn
ZXRJc1dpcmVsZXNzQ2hhbmdlZCgpOwogfQotCiAjZW5kaWYKIAogI2lmIEVOQUJMRShMRUdBQ1lf
RU5DUllQVEVEX01FRElBKQotCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
ZXh0cmFjdEtleVVSSUtleUlEQW5kQ2VydGlmaWNhdGVGcm9tSW5pdERhdGEoVWludDhBcnJheSog
aW5pdERhdGEsIFN0cmluZyYga2V5VVJJLCBTdHJpbmcmIGtleUlELCBSZWZQdHI8VWludDhBcnJh
eT4mIGNlcnRpZmljYXRlKQogewogICAgIC8vIGluaXREYXRhIHNob3VsZCBoYXZlIHRoZSBmb2xs
b3dpbmcgbGF5b3V0OgpAQCAtMTA3MCw3ICsxMDQzLDYgQEAgYm9vbCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OmV4dAogCiAgICAgcmV0dXJuIHRydWU7CiB9Ci0KICNlbmRpZgogCiBV
UkwgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpyZXNvbHZlZFVSTCgpIGNvbnN0CkBA
IC0xMTIyLDYgKzEwOTQsMTMgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OmlzVQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAor
V1RGTG9nQ2hhbm5lbCYgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpsb2dDaGFubmVs
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTG9nTWVkaWE7Cit9CisjZW5kaWYKKwogY29uc3QgSGFz
aFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6c3RhdGljTUlNRVR5cGVMaXN0KCkKIHsKICAgICBzdGF0aWMgY29uc3Qg
YXV0byBjYWNoZSA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCShyZXZpc2lvbiAyMjE4NzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2
YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxwYWwvTG9nZ2VySGVscGVyLmg+
CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTM5LDYgKzQwLDEwIEBACiAjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKK25hbWVzcGFjZSBQQUwgewor
Y2xhc3MgTG9nZ2VyOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluYmFuZE1l
dGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRjsKQEAgLTQ2LDYgKzUxLDkgQEAgY2xhc3MgSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRjsKIGNsYXNzIEdlbmVyaWNDdWVEYXRhOwogCiBjbGFzcyBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24gOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50
ZXJmYWNlLCBwdWJsaWMgQVZGSW5iYW5kVHJhY2tQYXJlbnQKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICAsIHByaXZhdGUgUEFMOjpMb2dnZXJIZWxwZXIKKyNlbmRpZgogewogcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50KCk7CkBAIC0xNDQsNiArMTUyLDEzIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgYm9vbCBleHRyYWN0S2V5VVJJS2V5SURBbmRDZXJ0aWZpY2F0ZUZyb21J
bml0RGF0YShVaW50OEFycmF5KiBpbml0RGF0YSwgU3RyaW5nJiBrZXlVUkksIFN0cmluZyYga2V5
SUQsIFJlZlB0cjxVaW50OEFycmF5PiYgY2VydGlmaWNhdGUpOwogI2VuZGlmCiAKKyNpZiAhUkVM
RUFTRV9MT0dfRElTQUJMRUQKKyAgICBjb25zdCBQQUw6OkxvZ2dlciYgbG9nZ2VyKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCBjaGFyKiBsb2dDbGFz
c05hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uIjsgfQorICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7
IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihtX2xvZ0lkZW50aWZpZXIpOyB9
CisgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisK
IHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24o
TWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b24oKTsKQEAgLTMzMSw2ICszNDYsMTEgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9hc3NldFVS
TDsKICAgICBNZWRpYVBsYXllcjo6UHJlbG9hZCBtX3ByZWxvYWQ7CiAKKyNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKKyAgICBSZWY8Y29uc3QgUEFMOjpMb2dnZXI+IG1fbG9nZ2VyOworICAgIGNv
bnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllcjsKKyNlbmRpZgorCiAgICAgRmxvYXRTaXplIG1fY2Fj
aGVkTmF0dXJhbFNpemU7CiAgICAgbXV0YWJsZSBNZWRpYVRpbWUgbV9jYWNoZWRNYXhUaW1lTG9h
ZGVkOwogICAgIG11dGFibGUgTWVkaWFUaW1lIG1fY2FjaGVkTWF4VGltZVNlZWthYmxlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMuaAkocmV2aXNpb24gMjIxODczKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNiArMzM2LDEwIEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHNldFNob3VsZERpc2FibGVTbGVlcChib29sKSBvdmVycmlkZTsK
IAorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDIjsgfQorI2VuZGlmCisKICAgICBXZWFrUHRyRmFjdG9yeTxNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDPiBtX3dlYWtQdHJGYWN0b3J5OwogCiAgICAgUmV0YWluUHRyPEFWVVJM
QXNzZXQ+IG1fYXZBc3NldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkocmV2aXNpb24g
MjIxODczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzUyLDEzICszNTIsNiBAQCBzdGF0aWMgTlNBcnJheSAqYXNzZXRUcmFja01ldGFkYXRh
S2V5TmFtCiBzdGF0aWMgTlNBcnJheSAqcGxheWVyS1ZPUHJvcGVydGllcygpOwogc3RhdGljIEFW
QXNzZXRUcmFjayogZmlyc3RFbmFibGVkVHJhY2soTlNBcnJheSogdHJhY2tzKTsKIAotI2lmICFM
T0dfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFyICpib29sU3RyaW5nKGJvb2wgdmFsKQotewot
ICAgIHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOwotfQotI2VuZGlmCi0KICNpZiBIQVZF
KEFWRk9VTkRBVElPTl9MT0FERVJfREVMRUdBVEUpCiBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBn
bG9iYWxMb2FkZXJEZWxlZ2F0ZVF1ZXVlKCkKIHsKQEAgLTQ3OCw4ICs0NzEsNiBAQCBzdGF0aWMg
c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2xlYXJNZWRpYUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwg
c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlKQogewot
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNsZWFy
TWVkaWFDYWNoZSgpIik7Ci0gICAgCiAgICAgQVZBc3NldENhY2hlVHlwZSogYXNzZXRDYWNoZSA9
IGFzc2V0Q2FjaGVGb3JQYXRoKHBhdGgpOwogICAgIAogICAgIGZvciAoTlNTdHJpbmcgKmtleSBp
biBbYXNzZXRDYWNoZSBhbGxLZXlzXSkgewpAQCAtNTIyLDcgKzUxMyw2IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpjbGVhck1lZGlhQ2FjaGVGb3JPcmlnaW5zKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiYgb3JpZ2lucykKIHsK
LSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjbGVh
ck1lZGlhQ2FjaGVGb3JPcmlnaW5zKCkiKTsKICAgICBBVkFzc2V0Q2FjaGVUeXBlKiBhc3NldENh
Y2hlID0gYXNzZXRDYWNoZUZvclBhdGgocGF0aCk7CiAgICAgZm9yIChOU1N0cmluZyAqa2V5IGlu
IFthc3NldENhY2hlIGFsbEtleXNdKSB7CiAgICAgICAgIFVSTCBrZXlBc1VSTCA9IFVSTChVUkwo
KSwga2V5KTsKQEAgLTU5Miw3ICs1ODIsNyBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjp+TWVkCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y2FuY2VsTG9hZCgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6Y2FuY2VsTG9hZCglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVO
VElGSUVSKTsKICAgICB0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCk7CiAKICAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVy
LmdldCgpXTsKQEAgLTY4MSw3ICs2NzEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y3JlYXRlSW1hZ2VHZW5lcmF0b3IoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUltYWdlR2VuZXJhdG9yKCVwKSIsIHRoaXMpOwor
ICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgaWYgKCFtX2F2QXNzZXQgfHwgbV9p
bWFnZUdlbmVyYXRvcikKICAgICAgICAgcmV0dXJuOwpAQCAtNjkyLDggKzY4Miw2IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBbbV9pbWFnZUdlbmVyYXRv
ci5nZXQoKSBzZXRBcHBsaWVzUHJlZmVycmVkVHJhY2tUcmFuc2Zvcm06WUVTXTsKICAgICBbbV9p
bWFnZUdlbmVyYXRvci5nZXQoKSBzZXRSZXF1ZXN0ZWRUaW1lVG9sZXJhbmNlQmVmb3JlOmtDTVRp
bWVaZXJvXTsKICAgICBbbV9pbWFnZUdlbmVyYXRvci5nZXQoKSBzZXRSZXF1ZXN0ZWRUaW1lVG9s
ZXJhbmNlQWZ0ZXI6a0NNVGltZVplcm9dOwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlSW1hZ2VHZW5lcmF0b3IoJXApIC0gcmV0dXJu
aW5nICVwIiwgdGhpcywgbV9pbWFnZUdlbmVyYXRvci5nZXQoKSk7CiB9CiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveUNvbnRleHRWaWRlb1JlbmRlcmVy
KCkKQEAgLTcxMCw3ICs2OTgsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6CiAgICAgaWYgKCFtX2ltYWdlR2VuZXJhdG9yKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95
SW1hZ2VHZW5lcmF0b3IoJXApIC0gZGVzdHJveWluZyAgJXAiLCB0aGlzLCBtX2ltYWdlR2VuZXJh
dG9yLmdldCgpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKIAogICAgIG1faW1hZ2VH
ZW5lcmF0b3IgPSAwOwogfQpAQCAtNzU1LDcgKzc0Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICB1cGRhdGVWaWRlb0xheWVyR3Jhdml0eSgpOwogICAg
IFttX3ZpZGVvTGF5ZXIgc2V0Q29udGVudHNTY2FsZTpwbGF5ZXIoKS0+Y2xpZW50KCkubWVkaWFQ
bGF5ZXJDb250ZW50c1NjYWxlKCldOwogICAgIEludFNpemUgZGVmYXVsdFNpemUgPSBzbmFwcGVk
SW50UmVjdChwbGF5ZXIoKS0+Y2xpZW50KCkubWVkaWFQbGF5ZXJDb250ZW50Qm94UmVjdCgpKS5z
aXplKCk7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6Y3JlYXRlVmlkZW9MYXllciglcCkgLSByZXR1cm5pbmcgJXAiLCB0aGlzLCBtX3ZpZGVvTGF5
ZXIuZ2V0KCkpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAjaWYgUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUp
KQogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT5zZXRWaWRlb0xheWVyKG1fdmlk
ZW9MYXllci5nZXQoKSwgZGVmYXVsdFNpemUpOwpAQCAtNzczLDcgKzc2MSw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBpZiAoIW1fdmlkZW9MYXllcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6ZGVzdHJveVZpZGVvTGF5ZXIoJXApIC0gZGVzdHJveWluZyAlcCIsIHRo
aXMsIG1fdmlkZW9MYXllci5nZXQoKSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAK
ICAgICBbbV92aWRlb0xheWVyIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZv
cktleVBhdGg6QCJyZWFkeUZvckRpc3BsYXkiXTsKICAgICBbbV92aWRlb0xheWVyIHNldFBsYXll
cjpuaWxdOwpAQCAtOTExLDcgKzg5OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzoKICAgICBpZiAobV9hdkFzc2V0KQogICAgICAgICByZXR1cm47CiAKLSAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFz
c2V0Rm9yVVJMKCVwKSAtIHVybCA9ICVzIiwgdGhpcywgdXJsLnV0ZjgoKS5kYXRhKCkpOworICAg
IElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7
CiAKQEAgLTEwNDgsNyArMTAzNiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzoKICAgICBpZiAobV9hdlBsYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9H
KE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5
ZXIoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAKICAgICBzZXRE
ZWxheUNhbGxiYWNrcyh0cnVlKTsKIApAQCAtMTA5Nyw3ICsxMDg1LDcgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlmIChtX2F2UGxheWVySXRlbSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKCVwKSIsIHRoaXMpOworICAgIElORk9fTE9H
KExPR0lERU5USUZJRVIpOwogCiAgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CiAKQEAgLTEx
NDQsNyArMTEzMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoK
ICAgICAgICAgcmV0dXJuOwogICAgIG1faGF2ZUNoZWNrZWRQbGF5YWJpbGl0eSA9IHRydWU7CiAK
LSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjaGVj
a1BsYXlhYmlsaXR5KCVwKSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwog
ICAgIGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7CiAKICAgICBbbV9hdkFzc2V0Lmdl
dCgpIGxvYWRWYWx1ZXNBc3luY2hyb25vdXNseUZvcktleXM6W05TQXJyYXkgYXJyYXlXaXRoT2Jq
ZWN0czpAInBsYXlhYmxlIiwgQCJ0cmFja3MiLCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl57CkBA
IC0xMTU3LDcgKzExNDUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YmVnaW5Mb2Fk
aW5nTWV0YWRhdGEoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OmJlZ2luTG9hZGluZ01ldGFkYXRhKCVwKSAtIHJlcXVlc3RpbmcgbWV0YWRh
dGEgbG9hZGluZyIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAg
T1NPYmplY3RQdHI8ZGlzcGF0Y2hfZ3JvdXBfdD4gbWV0YWRhdGFMb2FkaW5nR3JvdXAgPSBhZG9w
dE9TT2JqZWN0KGRpc3BhdGNoX2dyb3VwX2NyZWF0ZSgpKTsKICAgICBkaXNwYXRjaF9ncm91cF9l
bnRlcihtZXRhZGF0YUxvYWRpbmdHcm91cC5nZXQoKSk7CkBAIC0xMjA2LDcgKzExOTQsNyBAQCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Okl0ZW1TdGF0CiAKIFBsYXRmb3JtTWVkaWEg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0
CiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
cGxhdGZvcm1NZWRpYSglcCkiLCB0aGlzKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsK
ICAgICBQbGF0Zm9ybU1lZGlhIHBtOwogICAgIHBtLnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpBVkZv
dW5kYXRpb25NZWRpYVBsYXllclR5cGU7CiAgICAgcG0ubWVkaWEuYXZmTWVkaWFQbGF5ZXIgPSBt
X2F2UGxheWVyLmdldCgpOwpAQCAtMTMyNCw3ICsxMzEyLDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpwbGF0Zm9ybVBsYXkoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtUGxheSglcCkiLCB0aGlzKTsKKyAg
ICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMTMzNiw3ICsxMzI0LDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnBsYXRmb3JtUGF1c2UoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtUGF1c2UoJXApIiwgdGhpcyk7Cisg
ICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgp
KQogICAgICAgICByZXR1cm47CiAKQEAgLTEzNjcsNyArMTM1NSw3IEBAIE1lZGlhVGltZSBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24KICAgICBpZiAoQ01USU1FX0lTX0lOREVGSU5JVEUo
Y21EdXJhdGlvbikpCiAgICAgICAgIHJldHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVU
aW1lKCk7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpwbGF0Zm9ybUR1cmF0aW9uKCVwKSAtIGludmFsaWQgZHVyYXRpb24sIHJldHVybmluZyAl
cyIsIHRoaXMsIHRvU3RyaW5nKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkudXRmOCgpLmRhdGEo
KSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBpbnZhbGlkIHRpbWUi
KTsKICAgICByZXR1cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwogfQogCkBAIC0xNDAxLDgg
KzEzODksNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAg
CiAgICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIoKTsKIAotICAgIExPRyhNZWRpYSwg
Ik1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNlZWtUb1RpbWUoJXApIC0gY2Fs
bGluZyBzZWVrVG9UaW1lIiwgdGhpcyk7Ci0KICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgc2Vl
a1RvVGltZTpjbVRpbWUgdG9sZXJhbmNlQmVmb3JlOmNtQmVmb3JlIHRvbGVyYW5jZUFmdGVyOmNt
QWZ0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihCT09MIGZpbmlzaGVkKSB7CiAgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoW3dlYWtUaGlzLCBmaW5pc2hlZF0gewogICAgICAgICAgICAgYXV0byBfdGhp
cyA9IHdlYWtUaGlzLmdldCgpOwpAQCAtMTQzNCw3ICsxNDIwLDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlmIChtX211dGVkID09IG11dGVkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpzZXRNdXRlZCglcCkgLSBzZXQgdG8gJXMiLCB0aGlzLCBib29sU3RyaW5nKG11
dGVkKSk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIi0gIiwgbXV0ZWQpOwogCiAgICAg
bV9tdXRlZCA9IG11dGVkOwogCkBAIC0xNDUxLDcgKzE0MzcsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoJXApIC0gc2V0IHRvICVzIiwg
dGhpcywgYm9vbFN0cmluZyhjbG9zZWRDYXB0aW9uc1Zpc2libGUpKTsKKyAgICBJTkZPX0xPRyhM
T0dJREVOVElGSUVSLCAiLSAiLCBjbG9zZWRDYXB0aW9uc1Zpc2libGUpOwogfQogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFJhdGVEb3VibGUoZG91YmxlIHJh
dGUpCkBAIC0xNTkzLDEwICsxNTc5LDkgQEAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjpBc3NldFN0YQogICAgIGZvciAoTlNTdHJpbmcgKmtleU5hbWUgaW4gYXNzZXRNZXRhZGF0YUtl
eU5hbWVzKCkpIHsKICAgICAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CiAgICAgICAgIEFWS2V5
VmFsdWVTdGF0dXMga2V5U3RhdHVzID0gW21fYXZBc3NldC5nZXQoKSBzdGF0dXNPZlZhbHVlRm9y
S2V5OmtleU5hbWUgZXJyb3I6JmVycm9yXTsKLSNpZiAhTE9HX0RJU0FCTEVECisKICAgICAgICAg
aWYgKGVycm9yKQotICAgICAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjphc3NldFN0YXR1cyAtIHN0YXR1c09mVmFsdWVGb3JLZXkgZmFpbGVkIGZvciAl
cywgZXJyb3IgPSAlcyIsIFtrZXlOYW1lIFVURjhTdHJpbmddLCBbW2Vycm9yIGxvY2FsaXplZERl
c2NyaXB0aW9uXSBVVEY4U3RyaW5nXSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIEVSUk9SX0xPRyhM
T0dJREVOVElGSUVSLCAiZmFpbGVkIGZvciAiLCBba2V5TmFtZSBVVEY4U3RyaW5nXSwgIiwgZXJy
b3IgPSAiLCBbW2Vycm9yIGxvY2FsaXplZERlc2NyaXB0aW9uXSBVVEY4U3RyaW5nXSk7CiAKICAg
ICAgICAgaWYgKGtleVN0YXR1cyA8IEFWS2V5VmFsdWVTdGF0dXNMb2FkZWQpCiAgICAgICAgICAg
ICByZXR1cm4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGluZzsvLyBBdCBsZWFzdCBvbmUg
a2V5IGlzIG5vdCBsb2FkZWQgeWV0LgpAQCAtMTY3Niw3ICsxNjYxLDcgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnBhaW50V2l0aEltYWdlR2VuZXJhdG9yKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIExPRyhNZWRpYSwgIk1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aEltYWdlR2VuZXJhdG9yKCVw
KSIsIHRoaXMpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IGltYWdlID0gY3JlYXRlSW1hZ2VGb3JUaW1lSW5SZWN0KGN1cnJlbnRUaW1l
KCksIHJlY3QpOwogICAgIGlmIChpbWFnZSkgewpAQCAtMTY5NSw3ICsxNjgwLDcgQEAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IE1lZGlhUGxheWVyUHJpdmF0ZQogICAgICAgICBjcmVhdGVJbWFnZUdl
bmVyYXRvcigpOwogICAgIEFTU0VSVChtX2ltYWdlR2VuZXJhdG9yKTsKIAotI2lmICFMT0dfRElT
QUJMRUQKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBkb3VibGUgc3RhcnQgPSBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICNlbmRpZgogCkBAIC0xNzAzLDkgKzE2ODgsOCBA
QCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gTWVkaWFQbGF5ZXJQcml2YXRlCiAgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IHJhd0ltYWdlID0gYWRvcHRDRihbbV9pbWFnZUdlbmVyYXRvci5nZXQoKSBj
b3B5Q0dJbWFnZUF0VGltZTpDTVRpbWVNYWtlV2l0aFNlY29uZHModGltZSwgNjAwKSBhY3R1YWxU
aW1lOm5pbCBlcnJvcjpuaWxdKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBh
ZG9wdENGKENHSW1hZ2VDcmVhdGVDb3B5V2l0aENvbG9yU3BhY2UocmF3SW1hZ2UuZ2V0KCksIHNS
R0JDb2xvclNwYWNlUmVmKCkpKTsKIAotI2lmICFMT0dfRElTQUJMRUQKLSAgICBkb3VibGUgZHVy
YXRpb24gPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIHN0YXJ0OwotICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUltYWdlRm9y
VGltZUluUmVjdCglcCkgLSBjcmVhdGluZyBpbWFnZSB0b29rICUuNGYiLCB0aGlzLCBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KGR1cmF0aW9uKSk7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisg
ICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIsICJjcmVhdGluZyBpbWFnZSB0b29rICIsIG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gc3RhcnQpOwogI2VuZGlmCiAKICAgICByZXR1cm4g
aW1hZ2U7CkBAIC0xNzEzLDcgKzE2OTcsNiBAQCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gTWVkaWFQ
bGF5ZXJQcml2YXRlCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFz
aD4mIHN1cHBvcnRlZFR5cGVzKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmdldFN1cHBvcnRlZFR5cGVzIik7CiAgICAgc3VwcG9ydGVkVHlw
ZXMgPSBBVkZvdW5kYXRpb25NSU1FVHlwZUNhY2hlOjpzaW5nbGV0b24oKS50eXBlcygpOwogfSAK
IApAQCAtMjA0Miw4ICsyMDI1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOgogCiAgICAgc2V0SGFzQ2xvc2VkQ2FwdGlvbnMoaGFzQ2FwdGlvbnMpOwogCi0gICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOnRyYWNrc0NoYW5nZWQo
JXApIC0gaGFzVmlkZW8gPSAlcywgaGFzQXVkaW8gPSAlcywgaGFzQ2FwdGlvbnMgPSAlcyIsCi0g
ICAgICAgIHRoaXMsIGJvb2xTdHJpbmcoaGFzVmlkZW8oKSksIGJvb2xTdHJpbmcoaGFzQXVkaW8o
KSksIGJvb2xTdHJpbmcoaGFzQ2xvc2VkQ2FwdGlvbnMoKSkpOworICAgIElORk9fTE9HKExPR0lE
RU5USUZJRVIsICJoYXMgdmlkZW8gPSAiLCBoYXNWaWRlbygpLCAiLCBoYXMgYXVkaW8gPSAiLCBo
YXNBdWRpbygpLCAiLCBoYXMgY2FwdGlvbnMgPSAiLCBoYXNDbG9zZWRDYXB0aW9ucygpKTsKIAog
ICAgIHNpemVDaGFuZ2VkKCk7CiAKQEAgLTIxNzAsNyArMjE1Miw3IEBAIHZvaWQgZGV0ZXJtaW5l
Q2hhbmdlZFRyYWNrc0Zyb21OZXdUcmFja3MKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjp1cGRhdGVBdWRpb1RyYWNrcygpCiB7Ci0jaWYgIUxPR19ESVNBQkxFRAor
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIHNpemVfdCBjb3VudCA9IG1fYXVkaW9UcmFj
a3Muc2l6ZSgpOwogI2VuZGlmCiAKQEAgLTIxOTAsMTQgKzIxNzIsMTQgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2F1
ZGlvVHJhY2tzKQogICAgICAgICB0cmFjay0+cmVzZXRQcm9wZXJ0aWVzRnJvbVRyYWNrKCk7CiAK
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6dXBkYXRlQXVkaW9UcmFja3MoJXApIC0gYXVkaW8gdHJhY2sgY291bnQg
d2FzICVsdSwgaXMgJWx1IiwgdGhpcywgY291bnQsIG1fYXVkaW9UcmFja3Muc2l6ZSgpKTsKKyNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAidHJh
Y2sgY291bnQgd2FzICIsIGNvdW50LCAiLCBpcyAiLCBtX2F1ZGlvVHJhY2tzLnNpemUoKSk7CiAj
ZW5kaWYKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRh
dGVWaWRlb1RyYWNrcygpCiB7Ci0jaWYgIUxPR19ESVNBQkxFRAorI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAogICAgIHNpemVfdCBjb3VudCA9IG1fdmlkZW9UcmFja3Muc2l6ZSgpOwogI2VuZGlm
CiAKQEAgLTIyMTYsOCArMjE5OCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzoKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9hdWRpb1RyYWNrcykKICAgICAgICAg
dHJhY2stPnJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpOwogCi0jaWYgIUxPR19ESVNBQkxFRAot
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0
ZVZpZGVvVHJhY2tzKCVwKSAtIHZpZGVvIHRyYWNrIGNvdW50IHdhcyAlbHUsIGlzICVsdSIsIHRo
aXMsIGNvdW50LCBtX3ZpZGVvVHJhY2tzLnNpemUoKSk7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgInRyYWNrIGNvdW50IHdhcyAiLCBjb3Vu
dCwgIiwgaXMgIiwgbV92aWRlb1RyYWNrcy5zaXplKCkpOwogI2VuZGlmCiB9CiAKQEAgLTIzMTgs
NyArMjMwMCw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAog
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVWaWRlb091dHB1
dCgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6Y3JlYXRlVmlkZW9PdXRwdXQoJXApIiwgdGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJ
RklFUik7CiAKICAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtIHx8IG1fdmlkZW9PdXRwdXQpCiAgICAg
ICAgIHJldHVybjsKQEAgLTIzMzQsOCArMjMxNiw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzoKICAgICBbbV92aWRlb091dHB1dCBzZXREZWxlZ2F0ZTptX3ZpZGVv
T3V0cHV0RGVsZWdhdGUuZ2V0KCkgcXVldWU6Z2xvYmFsUHVsbERlbGVnYXRlUXVldWUoKV07CiAK
ICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT3V0cHV0Om1fdmlkZW9PdXRwdXQuZ2V0KCld
OwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y3JlYXRlVmlkZW9PdXRwdXQoJXApIC0gcmV0dXJuaW5nICVwIiwgdGhpcywgbV92aWRlb091dHB1
dC5nZXQoKSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
ZGVzdHJveVZpZGVvT3V0cHV0KCkKQEAgLTIzNDUsNyArMjMyNSw4IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogICAgIGlmIChtX2F2UGxheWVySXRlbSkKICAg
ICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIHJlbW92ZU91dHB1dDptX3ZpZGVvT3V0cHV0Lmdl
dCgpXTsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpkZXN0cm95VmlkZW9PdXRwdXQoJXApIC0gZGVzdHJveWluZyAgJXAiLCB0aGlzLCBtX3ZpZGVv
T3V0cHV0LmdldCgpKTsKKworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgbV92
aWRlb091dHB1dCA9IDA7CiB9CkBAIC0yMzk3LDE1ICsyMzc4LDE0IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgbV9waXhlbEJ1ZmZlckNvbmZvcm1l
ciA9IHN0ZDo6bWFrZV91bmlxdWU8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4oKENGRGljdGlvbmFy
eVJlZilhdHRyaWJ1dGVzKTsKICAgICB9CiAKLSNpZiAhTE9HX0RJU0FCTEVECisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECiAgICAgZG91YmxlIHN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKCk7CiAjZW5kaWYKIAogICAgIG1fbGFzdEltYWdlID0gbV9waXhlbEJ1ZmZlckNvbmZv
cm1lci0+Y3JlYXRlSW1hZ2VGcm9tUGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZ2V0KCkpOwogCi0j
aWYgIUxPR19ESVNBQkxFRAotICAgIGRvdWJsZSBkdXJhdGlvbiA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpIC0gc3RhcnQ7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlTGFzdEltYWdlKCVwKSAtIGNyZWF0aW5nIGJ1ZmZlciB0
b29rICUuNGYiLCB0aGlzLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGR1cmF0aW9uKSk7CisjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIsICJjcmVh
dGluZyBidWZmZXIgdG9vayAiLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIHN0YXJ0
KTsKICNlbmRpZgogfQogCkBAIC0yNDIzLDcgKzI0MDMsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFmaXJzdEVuYWJsZWRWaWRlb1RyYWNrKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpwYWludFdpdGhWaWRlb091dHB1dCglcCkiLCB0aGlzKTsKKyAgICBJTkZP
X0xPRyhMT0dJREVOVElGSUVSKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihjb250ZXh0KTsKICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KDAsIDAsIENHSW1hZ2VH
ZXRXaWR0aChtX2xhc3RJbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQobV9sYXN0SW1hZ2Uu
Z2V0KCkpKTsKQEAgLTI0NDIsNyArMjQyMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzoKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpjcmVhdGVPcGVuR0xWaWRlb091dHB1dCgpCiB7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlT3BlbkdMVmlkZW9PdXRwdXQoJXApIiwg
dGhpcyk7CisgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAKICAgICBpZiAoIW1fYXZQbGF5
ZXJJdGVtIHx8IG1fb3BlbkdMVmlkZW9PdXRwdXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NTYs
OCArMjQzNiw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAg
ICBBU1NFUlQobV9vcGVuR0xWaWRlb091dHB1dCk7CiAKICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0
KCkgYWRkT3V0cHV0Om1fb3BlbkdMVmlkZW9PdXRwdXQuZ2V0KCldOwotCi0gICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlT3BlbkdMVmlkZW9P
dXRwdXQoJXApIC0gcmV0dXJuaW5nICVwIiwgdGhpcywgbV9vcGVuR0xWaWRlb091dHB1dC5nZXQo
KSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJv
eU9wZW5HTFZpZGVvT3V0cHV0KCkKQEAgLTI0NjUsOSArMjQ0MywxMCBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFtX29wZW5HTFZpZGVvT3V0cHV0
KQogICAgICAgICByZXR1cm47CiAKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKKwogICAg
IGlmIChtX2F2UGxheWVySXRlbSkKICAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIHJlbW92
ZU91dHB1dDptX29wZW5HTFZpZGVvT3V0cHV0LmdldCgpXTsKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95T3BlbkdMVmlkZW9PdXRwdXQo
JXApIC0gZGVzdHJveWluZyAgJXAiLCB0aGlzLCBtX3ZpZGVvT3V0cHV0LmdldCgpKTsKIAogICAg
IG1fb3BlbkdMVmlkZW9PdXRwdXQgPSAwOwogfQpAQCAtMjUzMCw3ICsyNTA5LDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGxvbmcgcmVzdWx0ID0gZGlz
cGF0Y2hfc2VtYXBob3JlX3dhaXQobV92aWRlb091dHB1dFNlbWFwaG9yZSwgZGlzcGF0Y2hfdGlt
ZSgwLCAxICogTlNFQ19QRVJfU0VDKSk7CiAKICAgICBpZiAocmVzdWx0KQotICAgICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp3YWl0Rm9yVmlkZW9P
dXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlKCVwKSB0aW1lZCBvdXQiLCB0aGlzKTsKKyAgICAgICAg
RVJST1JfTE9HKExPR0lERU5USUZJRVIsICJ0aW1lZCBvdXQiKTsKIH0KIAogdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpvdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlKEFW
UGxheWVySXRlbVZpZGVvT3V0cHV0VHlwZSAqKQpAQCAtMjY4MSw3ICsyNjYwLDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogewogICAgIEFWTWVkaWFTZWxlY3Rp
b25Hcm91cFR5cGUgKmxlZ2libGVHcm91cCA9IHNhZmVNZWRpYVNlbGVjdGlvbkdyb3VwRm9yTGVn
aWJsZU1lZGlhKCk7CiAgICAgaWYgKCFsZWdpYmxlR3JvdXApIHsKLSAgICAgICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cHJvY2Vzc01lZGlhU2VsZWN0
aW9uT3B0aW9ucyglcCkgLSBuaWwgbWVkaWFTZWxlY3Rpb25Hcm91cCIsIHRoaXMpOworICAgICAg
ICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAibm8gbWVkaWFTZWxlY3Rpb25Hcm91cCIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNzU1LDcgKzI3MzQsNyBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6Zmx1c2hDdWVzKCkKIHsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpmbHVzaEN1ZXMoJXApIiwgdGhpcyk7CisgICAgSU5G
T19MT0coTE9HSURFTlRJRklFUik7CiAKICAgICBpZiAoIW1fY3VycmVudFRleHRUcmFjaykKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjc3MCw4ICsyNzQ5LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlmIChtX2N1cnJlbnRUZXh0VHJhY2sgPT0gdHJhY2sp
CiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnNldEN1cnJlbnRUZXh0VHJhY2soJXApIC0gc2VsZWN0aW5nIHRyYWNr
ICVwLCBsYW5ndWFnZSA9ICVzIiwgdGhpcywgdHJhY2ssIHRyYWNrID8gdHJhY2stPmxhbmd1YWdl
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKLSAgICAgICAgCisgICAgSU5GT19MT0co
TE9HSURFTlRJRklFUiwgInNlbGVjdGluZyB0cmFjayB3aXRoIGxhbmd1YWdlICIsIHRyYWNrID8g
dHJhY2stPmxhbmd1YWdlKCkgOiAiIik7CisKICAgICBtX2N1cnJlbnRUZXh0VHJhY2sgPSB0cmFj
azsKIAogICAgIGlmICh0cmFjaykgewpAQCAtMjgxNyw3ICsyNzk2LDcgQEAgU3RyaW5nIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iagogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBv
cAogICAgIGlmIChjdXJyZW50bHlTZWxlY3RlZEF1ZGlibGVPcHRpb24pIHsKICAgICAgICAgbV9s
YW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2sgPSBbW2N1cnJlbnRseVNlbGVjdGVkQXVkaWJsZU9w
dGlvbiBsb2NhbGVdIGxvY2FsZUlkZW50aWZpZXJdOwotICAgICAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpsYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJh
Y2soJXApIC0gcmV0dXJuaW5nIGxhbmd1YWdlIG9mIHNlbGVjdGVkIGF1ZGlibGUgb3B0aW9uOiAl
cyIsIHRoaXMsIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAibGFuZ3VhZ2Ugb2Ygc2VsZWN0ZWQgYXVk
aWJsZSBvcHRpb24gIiwgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2spOwogCiAgICAgICAg
IHJldHVybiBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjazsKICAgICB9CkBAIC0yODI4LDE5
ICsyODA3LDE0IEBAIFN0cmluZyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmoKICAg
ICBOU0FycmF5ICp0cmFja3MgPSBbbV9hdkFzc2V0LmdldCgpIHRyYWNrc1dpdGhNZWRpYVR5cGU6
QVZNZWRpYVR5cGVBdWRpb107CiAgICAgaWYgKCF0cmFja3MgfHwgW3RyYWNrcyBjb3VudF0gIT0g
MSkgewogICAgICAgICBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayA9IGVtcHR5U3RyaW5n
KCk7Ci0gICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6Omxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayglcCkgLSAlbHUgYXVkaW8gdHJhY2tzLCBy
ZXR1cm5pbmcgZW1wdHlTdHJpbmcoKSIsIHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+
KHRyYWNrcyA/IFt0cmFja3MgY291bnRdIDogMCkpOworICAgICAgICBJTkZPX0xPRyhMT0dJREVO
VElGSUVSLCB0cmFja3MgPyBbdHJhY2tzIGNvdW50XSA6IDAsICIgYXVkaW8gdHJhY2tzLCByZXR1
cm5pbmcgZW1wdHkiKTsKICAgICAgICAgcmV0dXJuIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1Ry
YWNrOwogICAgIH0KIAogICAgIEFWQXNzZXRUcmFjayAqdHJhY2sgPSBbdHJhY2tzIG9iamVjdEF0
SW5kZXg6MF07CiAgICAgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2sgPSBBVlRyYWNrUHJp
dmF0ZUFWRk9iakNJbXBsOjpsYW5ndWFnZUZvckFWQXNzZXRUcmFjayh0cmFjayk7CiAKLSNpZiAh
TE9HX0RJU0FCTEVECi0gICAgaWYgKG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrID09IGVt
cHR5U3RyaW5nKCkpCi0gICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6Omxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayglcCkgLSBzaW5nbGUgYXVk
aW8gdHJhY2sgaGFzIG5vIGxhbmd1YWdlLCByZXR1cm5pbmcgZW1wdHlTdHJpbmcoKSIsIHRoaXMp
OwotICAgIGVsc2UKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCVwKSAtIHJldHVybmluZyBs
YW5ndWFnZSBvZiBzaW5nbGUgYXVkaW8gdHJhY2s6ICVzIiwgdGhpcywgbV9sYW5ndWFnZU9mUHJp
bWFyeUF1ZGlvVHJhY2sudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKKyAgICBJTkZPX0xPRyhMT0dJ
REVOVElGSUVSLCAic2luZ2xlIGF1ZGlvIHRyYWNrIGhhcyBsYW5ndWFnZSBcIiIsIG1fbGFuZ3Vh
Z2VPZlByaW1hcnlBdWRpb1RyYWNrLCAiXCIiKTsKIAogICAgIHJldHVybiBtX2xhbmd1YWdlT2ZQ
cmltYXJ5QXVkaW9UcmFjazsKIH0KQEAgLTI4NjEsNyArMjgzNSw3IEBAIGJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICB3aXJlbGVzc1RhcmdldCA9IG1fYXZQbGF5
ZXIgJiYgbV9hdlBsYXllci5nZXQoKS5leHRlcm5hbFBsYXliYWNrQWN0aXZlOwogI2VuZGlmCiAK
LSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjppc0N1
cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCVwKSAtIHJldHVybmluZyAlcyIsIHRoaXMsIGJv
b2xTdHJpbmcod2lyZWxlc3NUYXJnZXQpKTsKKyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAi
LSAiLCB3aXJlbGVzc1RhcmdldCk7CiAKICAgICByZXR1cm4gd2lyZWxlc3NUYXJnZXQ7CiB9CkBA
IC0yOTAxLDcgKzI4NzUsNiBAQCBTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqCiAjZWxzZQogICAgIHdpcmVsZXNzVGFyZ2V0TmFtZSA9IHdrRXhlcm5hbERldmljZURpc3Bs
YXlOYW1lRm9yUGxheWVyKG1fYXZQbGF5ZXIuZ2V0KCkpOwogI2VuZGlmCi0gICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2lyZWxlc3NQbGF5YmFja1Rh
cmdldE5hbWUoJXApIC0gcmV0dXJuaW5nICVzIiwgdGhpcywgd2lyZWxlc3NUYXJnZXROYW1lLnV0
ZjgoKS5kYXRhKCkpOwogCiAgICAgcmV0dXJuIHdpcmVsZXNzVGFyZ2V0TmFtZTsKIH0KQEAgLTI5
MTIsMTQgKzI4ODUsMTQgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OgogICAgICAgICByZXR1cm4gIW1fYWxsb3dzV2lyZWxlc3NWaWRlb1BsYXliYWNrOwogCiAgICAg
bV9hbGxvd3NXaXJlbGVzc1ZpZGVvUGxheWJhY2sgPSBbbV9hdlBsYXllci5nZXQoKSBhbGxvd3NF
eHRlcm5hbFBsYXliYWNrXTsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCglcCkgLSByZXR1cm5p
bmcgJXMiLCB0aGlzLCBib29sU3RyaW5nKCFtX2FsbG93c1dpcmVsZXNzVmlkZW9QbGF5YmFjaykp
OworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIsICFtX2FsbG93c1dpcmVsZXNzVmlk
ZW9QbGF5YmFjayk7CiAKICAgICByZXR1cm4gIW1fYWxsb3dzV2lyZWxlc3NWaWRlb1BsYXliYWNr
OwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKGJvb2wgZGlzYWJsZWQpCiB7Ci0gICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0V2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQoJXApIC0gJXMiLCB0aGlzLCBib29sU3RyaW5nKGRpc2FibGVkKSk7Cisg
ICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgIi0gIiwgZGlzYWJsZWQpOwogICAgIG1fYWxsb3dz
V2lyZWxlc3NWaWRlb1BsYXliYWNrID0gIWRpc2FibGVkOwogICAgIGlmICghbV9hdlBsYXllcikK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjkzNyw3ICsyOTEwLDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiAgICAgbV9vdXRwdXRDb250ZXh0ID0gbV9wbGF5YmFj
a1RhcmdldC0+dGFyZ2V0VHlwZSgpID09IE1lZGlhUGxheWJhY2tUYXJnZXQ6OkFWRm91bmRhdGlv
biA/IHRvTWVkaWFQbGF5YmFja1RhcmdldE1hYyhtX3BsYXliYWNrVGFyZ2V0LmdldCgpKS0+b3V0
cHV0Q29udGV4dCgpIDogbnVsbHB0cjsKIAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoJXApIC0gdGFy
Z2V0ID0gJXAsIGRldmljZSBuYW1lID0gJXMiLCB0aGlzLCBtX291dHB1dENvbnRleHQuZ2V0KCks
IG1fcGxheWJhY2tUYXJnZXQtPmRldmljZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBJTkZP
X0xPRyhMT0dJREVOVElGSUVSKTsKIAogICAgIGlmICghbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0
aXZlUm91dGUoKSkKICAgICAgICAgc2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoZmFsc2Up
OwpAQCAtMjk1MywxMSArMjkyNiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6CiAgICAgaWYgKCFtX3BsYXliYWNrVGFyZ2V0KQogICAgICAgICByZXR1cm47CiAK
KyAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAiLSAiLCBzaG91bGRQbGF5KTsKKwogICAgIGlm
IChtX3BsYXliYWNrVGFyZ2V0LT50YXJnZXRUeXBlKCkgPT0gTWVkaWFQbGF5YmFja1RhcmdldDo6
QVZGb3VuZGF0aW9uKSB7CiAgICAgICAgIEFWT3V0cHV0Q29udGV4dCAqbmV3Q29udGV4dCA9IHNo
b3VsZFBsYXkgPyBtX291dHB1dENvbnRleHQuZ2V0KCkgOiBuaWw7CiAKLSAgICAgICAgTE9HKE1l
ZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0U2hvdWxkUGxheVRv
UGxheWJhY2tUYXJnZXQoJXApIC0gdGFyZ2V0ID0gJXAsIHNob3VsZFBsYXkgPSAlcyIsIHRoaXMs
IG5ld0NvbnRleHQsIGJvb2xTdHJpbmcoc2hvdWxkUGxheSkpOwotCiAgICAgICAgIGlmICghbV9h
dlBsYXllcikKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMjk3NCw4ICsyOTQ3LDYgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiAgICAgQVNTRVJUKG1fcGxh
eWJhY2tUYXJnZXQtPnRhcmdldFR5cGUoKSA9PSBNZWRpYVBsYXliYWNrVGFyZ2V0OjpNb2NrKTsK
IAotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNl
dFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KCVwKSAtIHRhcmdldCA9IHtNb2NrfSwgc2hvdWxk
UGxheSA9ICVzIiwgdGhpcywgYm9vbFN0cmluZyhzaG91bGRQbGF5KSk7Ci0KICAgICBzZXREZWxh
eUNhbGxiYWNrcyh0cnVlKTsKICAgICBhdXRvIHdlYWtUaGlzID0gY3JlYXRlV2Vha1B0cigpOwog
ICAgIHNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246Ok5vdGlmaWNhdGlvbihbd2Vha1RoaXNdIHsKQEAgLTMwODEsNyArMzA1Miw4IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRTaG91bGRCdWZmZXJEYXRhKGJvb2wgc2hv
dWxkQnVmZmVyKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OnNob3VsZEJ1ZmZlckRhdGEoJXApIC0gJXMiLCB0aGlzLCBib29sU3RyaW5nKHNo
b3VsZEJ1ZmZlcikpOworICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICItICIsIHNob3VsZEJ1
ZmZlcik7CisKICAgICBpZiAobV9zaG91bGRCdWZmZXJEYXRhID09IHNob3VsZEJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zMTIzLDcgKzMwOTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6CiB7CiAgICAgbV9jdXJyZW50TWV0YURhdGEgPSBtZXRhZGF0
YSAmJiAhW21ldGFkYXRhIGlzS2luZE9mQ2xhc3M6W05TTnVsbCBjbGFzc11dID8gbWV0YWRhdGEg
OiBuaWw7CiAKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjptZXRhZGF0YURpZEFycml2ZSglcCkgLSBhZGRpbmcgJWkgY3VlcyBhdCB0aW1lICVzIiwg
dGhpcywgbV9jdXJyZW50TWV0YURhdGEgPyBzdGF0aWNfY2FzdDxpbnQ+KFttX2N1cnJlbnRNZXRh
RGF0YS5nZXQoKSBjb3VudF0pIDogMCwgdG9TdHJpbmcobWVkaWFUaW1lKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBERUJVR19MT0coTE9HSURFTlRJRklFUiwgImFkZGluZyAiLCBtX2N1cnJlbnRNZXRh
RGF0YSA/IFttX2N1cnJlbnRNZXRhRGF0YS5nZXQoKSBjb3VudF0gOiAwLCAiIGF0IHRpbWUgIiwg
bWVkaWFUaW1lKTsKIAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQogICAgIGlmIChzZWVraW5n
KCkpCkBAIC0zMzY2LDE2ICszMzM4LDcgQEAgLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRo
OmtleVBhdGggbwogICAgICAgICByZXR1cm47CiAKICAgICBib29sIHdpbGxDaGFuZ2UgPSBbW2No
YW5nZSB2YWx1ZUZvcktleTpOU0tleVZhbHVlQ2hhbmdlTm90aWZpY2F0aW9uSXNQcmlvcktleV0g
Ym9vbFZhbHVlXTsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICBpZiAod2lsbENoYW5nZSkKLSAg
ICAgICAgTE9HKE1lZGlhLCAiV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXI6Om9ic2VydmVWYWx1ZUZv
cktleVBhdGgoJXApIC0gd2lsbCBjaGFuZ2UsIGtleVBhdGggPSAlcyIsIHNlbGYsIFtrZXlQYXRo
IFVURjhTdHJpbmddKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiB2
YWx1ZVN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhGb3JtYXQ6QCIl
QCIsIG5ld1ZhbHVlXSk7Ci0gICAgICAgIExPRyhNZWRpYSwgIldlYkNvcmVBVkZNb3ZpZU9ic2Vy
dmVyOjpvYnNlcnZlVmFsdWVGb3JLZXlQYXRoKCVwKSAtIGRpZCBjaGFuZ2UsIGtleVBhdGggPSAl
cywgdmFsdWUgPSAlcyIsIHNlbGYsIFtrZXlQYXRoIFVURjhTdHJpbmddLCBbdmFsdWVTdHJpbmcu
Z2V0KCkgVVRGOFN0cmluZ10pOwotICAgIH0KLSNlbmRpZgotCisgICAgYm9vbCBzaG91bGRMb2dW
YWx1ZSA9IHRydWU7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbjsKIAogICAg
IGlmIChjb250ZXh0ID09IE1lZGlhUGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0
QVZQbGF5ZXJMYXllcikgewpAQCAtMzQwNywxNSArMzM3MCwxOSBAQCAtICh2b2lkKW9ic2VydmVW
YWx1ZUZvcktleVBhdGg6a2V5UGF0aCBvCiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6Ymlu
ZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxheWJhY2tCdWZmZXJFbXB0
eURpZENoYW5nZSwgbV9jYWxsYmFjaywgW25ld1ZhbHVlIGJvb2xWYWx1ZV0pOwogICAgICAgICBl
bHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJwbGF5YmFja0J1ZmZlckZ1bGwiXSkK
ICAgICAgICAgICAgIGZ1bmN0aW9uID0gc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpwbGF5YmFja0J1ZmZlckZ1bGxEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFtu
ZXdWYWx1ZSBib29sVmFsdWVdKTsKLSAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRv
U3RyaW5nOkAiYXNzZXQiXSkKKyAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3Ry
aW5nOkAiYXNzZXQiXSkgewogICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldEFzc2V0LCBtX2NhbGxiYWNrLCBSZXRh
aW5QdHI8aWQ+KG5ld1ZhbHVlKSk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxU
b1N0cmluZzpAImxvYWRlZFRpbWVSYW5nZXMiXSkKKyAgICAgICAgICAgIHNob3VsZExvZ1ZhbHVl
ID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAi
bG9hZGVkVGltZVJhbmdlcyJdKSB7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0ZDo6YmluZCgm
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bG9hZGVkVGltZVJhbmdlc0RpZENo
YW5nZSwgbV9jYWxsYmFjaywgUmV0YWluUHRyPE5TQXJyYXk+KG5ld1ZhbHVlKSk7Ci0gICAgICAg
IGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInNlZWthYmxlVGltZVJhbmdlcyJd
KQorICAgICAgICAgICAgc2hvdWxkTG9nVmFsdWUgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlm
IChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJzZWVrYWJsZVRpbWVSYW5nZXMiXSkgewogICAg
ICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OnNlZWthYmxlVGltZVJhbmdlc0RpZENoYW5nZSwgbV9jYWxsYmFjaywgUmV0YWlu
UHRyPE5TQXJyYXk+KG5ld1ZhbHVlKSk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1
YWxUb1N0cmluZzpAInRyYWNrcyJdKQorICAgICAgICAgICAgc2hvdWxkTG9nVmFsdWUgPSBmYWxz
ZTsKKyAgICAgICAgfSBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJ0cmFja3Mi
XSkgewogICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnRyYWNrc0RpZENoYW5nZSwgbV9jYWxsYmFjaywgUmV0YWluUHRy
PE5TQXJyYXk+KG5ld1ZhbHVlKSk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxU
b1N0cmluZzpAImhhc0VuYWJsZWRBdWRpbyJdKQorICAgICAgICAgICAgc2hvdWxkTG9nVmFsdWUg
PSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJo
YXNFbmFibGVkQXVkaW8iXSkKICAgICAgICAgICAgIGZ1bmN0aW9uID0gc3RkOjpiaW5kKCZNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpoYXNFbmFibGVkQXVkaW9EaWRDaGFuZ2Us
IG1fY2FsbGJhY2ssIFtuZXdWYWx1ZSBib29sVmFsdWVdKTsKICAgICAgICAgZWxzZSBpZiAoW2tl
eVBhdGggaXNFcXVhbFRvU3RyaW5nOkAicHJlc2VudGF0aW9uU2l6ZSJdKQogICAgICAgICAgICAg
ZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OnByZXNlbnRhdGlvblNpemVEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIEZsb2F0U2l6ZShbbmV3VmFs
dWUgc2l6ZVZhbHVlXSkpOwpAQCAtMzQyNyw2ICszMzk0LDcgQEAgLSAodm9pZClvYnNlcnZlVmFs
dWVGb3JLZXlQYXRoOmtleVBhdGggbwogICAgICAgICAgICAgaWYgKENNVElNRV9JU19OVU1FUklD
KGl0ZW1UaW1lKSkKICAgICAgICAgICAgICAgICBub3cgPSBzdGQ6Om1heCh0b01lZGlhVGltZShp
dGVtVGltZSksIE1lZGlhVGltZTo6emVyb1RpbWUoKSk7CiAgICAgICAgICAgICBmdW5jdGlvbiA9
IHN0ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bWV0YWRhdGFE
aWRBcnJpdmUsIG1fY2FsbGJhY2ssIFJldGFpblB0cjxOU0FycmF5PihuZXdWYWx1ZSksIG5vdyk7
CisgICAgICAgICAgICBzaG91bGRMb2dWYWx1ZSA9IGZhbHNlOwogICAgICAgICB9IGVsc2UgaWYg
KFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAImNhblBsYXlGYXN0UmV2ZXJzZSJdKQogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OmNhblBsYXlGYXN0UmV2ZXJzZURpZENoYW5nZSwgbV9jYWxsYmFjaywgW25ld1ZhbHVl
IGJvb2xWYWx1ZV0pOwogICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6
QCJjYW5QbGF5RmFzdEZvcndhcmQiXSkKQEAgLTM0NDYsNyArMzQxNCwyNiBAQCAtICh2b2lkKW9i
c2VydmVWYWx1ZUZvcktleVBhdGg6a2V5UGF0aCBvCiAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0
ZDo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6b3V0cHV0T2JzY3Vy
ZWREdWVUb0luc3VmZmljaWVudEV4dGVybmFsUHJvdGVjdGlvbkNoYW5nZWQsIG1fY2FsbGJhY2ss
IFtuZXdWYWx1ZSBib29sVmFsdWVdKTsKICNlbmRpZgogICAgIH0KLSAgICAKKworI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAorICAgIGlmIChtX2NhbGxiYWNrLT5sb2dnZXIoKS53aWxsTG9nKG1f
Y2FsbGJhY2stPmxvZ0NoYW5uZWwoKSwgV1RGTG9nTGV2ZWxEZWJ1ZykpIHsKKworICAgICAgICBp
ZiAod2lsbENoYW5nZSkKKyAgICAgICAgICAgIG1fY2FsbGJhY2stPmxvZ2dlcigpLmRlYnVnKG1f
Y2FsbGJhY2stPmxvZ0NoYW5uZWwoKSwgUEFMOjpMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKCJN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24iLCAib2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aCIs
IG1fY2FsbGJhY2stPmxvZ0lkZW50aWZpZXIoKSksICJ3aWxsIGNoYW5nZSAnIiwgW2tleVBhdGgg
VVRGOFN0cmluZ10sICInIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHNob3Vs
ZExvZ1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmlu
ZzpAImR1cmF0aW9uIl0pCisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2stPmxvZ2dlcigp
LmRlYnVnKG1fY2FsbGJhY2stPmxvZ0NoYW5uZWwoKSwgUEFMOjpMb2dnZXI6OkxvZ1NpdGVJZGVu
dGlmaWVyKCJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24iLCAib2JzZXJ2ZVZhbHVlRm9y
S2V5UGF0aCIsIG1fY2FsbGJhY2stPmxvZ0lkZW50aWZpZXIoKSksICJkaWQgY2hhbmdlICciLCBb
a2V5UGF0aCBVVEY4U3RyaW5nXSwgIicgdG8gIiwgdG9NZWRpYVRpbWUoW25ld1ZhbHVlIENNVGlt
ZVZhbHVlXSkpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBS
ZXRhaW5QdHI8TlNTdHJpbmc+IHZhbHVlU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9j
XSBpbml0V2l0aEZvcm1hdDpAIiVAIiwgbmV3VmFsdWVdKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9jYWxsYmFjay0+bG9nZ2VyKCkuZGVidWcobV9jYWxsYmFjay0+bG9nQ2hhbm5lbCgpLCBQQUw6
OkxvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIoIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
biIsICJvYnNlcnZlVmFsdWVGb3JLZXlQYXRoIiwgbV9jYWxsYmFjay0+bG9nSWRlbnRpZmllcigp
KSwgImRpZCBjaGFuZ2UgJyIsIFtrZXlQYXRoIFVURjhTdHJpbmddLCAiJyB0byAiLCBbdmFsdWVT
dHJpbmcuZ2V0KCkgVVRGOFN0cmluZ10pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIG1fY2FsbGJhY2stPmxvZ2dlcigpLmRlYnVnKG1fY2Fs
bGJhY2stPmxvZ0NoYW5uZWwoKSwgUEFMOjpMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKCJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24iLCAib2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aCIsIG1f
Y2FsbGJhY2stPmxvZ0lkZW50aWZpZXIoKSksICJkaWQgY2hhbmdlICciLCBba2V5UGF0aCBVVEY4
U3RyaW5nXSwgIiciKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKCFmdW5j
dGlvbikKICAgICAgICAgcmV0dXJuOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>