<?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>109822</bug_id>
          
          <creation_ts>2013-02-14 05:57:01 -0800</creation_ts>
          <short_desc>Extending WebVTT Rendering with Regions</short_desc>
          <delta_ts>2014-03-18 10:38:35 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>109570</blocked>
    
    <blocked>128412</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Victor Carbune">vcarbune</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>rniwa</cc>
    
    <cc>sergio</cc>
    
    <cc>silviapf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>833007</commentid>
    <comment_count>0</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-02-14 05:57:01 -0800</bug_when>
    <thetext>Extend the rules for updating the display of WebVTT text tracks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833044</commentid>
    <comment_count>1</comment_count>
    <who name="Glenn Adams">glenn</who>
    <bug_when>2013-02-14 07:03:06 -0800</bug_when>
    <thetext>no spec, no extension; propose something in the W3C or WHATWG CG, get it written into a spec, then reopen this bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833072</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-02-14 07:47:39 -0800</bug_when>
    <thetext>As noted in the master bug, there is a proposed solution [1] [2] which has had a great deal of discussion in the text community group mailing list (eg. [3]).

Please don&apos;t close bugs without discussion. 

[1] https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/region.html
[2] http://www.w3.org/community/texttracks/wiki/MultiCueBox
[3] http://lists.w3.org/Archives/Public/public-texttracks/2012Dec/0000.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989833</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-12 14:08:12 -0700</bug_when>
    <thetext>This work was landed in Chromium under commit 0cdebc1d76d41bfcb9c4b022e54a4fbff132225d, and should be merged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990087</commentid>
    <comment_count>4</comment_count>
      <attachid>226603</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-13 11:35:46 -0700</bug_when>
    <thetext>Created attachment 226603
WIP Patch Not Tested Yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990618</commentid>
    <comment_count>5</comment_count>
      <attachid>226754</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-14 12:57:05 -0700</bug_when>
    <thetext>Created attachment 226754
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990628</commentid>
    <comment_count>6</comment_count>
      <attachid>226754</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-03-14 13:13:57 -0700</bug_when>
    <thetext>Comment on attachment 226754
Patch

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

&gt; Source/WebCore/html/shadow/MediaControlElements.cpp:1301
&gt; +        TextTrackRegion* region = cue-&gt;track()-&gt;regions()-&gt;getRegionById(regionId);

Both TextTrackCue::track and TextTrack::regions() can return NULL, either of which will make this crash.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:334
&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(const AtomicString, trackRegionCueContainerScrollingClass, (&quot;scrolling&quot;, AtomicString::ConstructFromLiteral));

Nit: you might as well go straight to NeverDestroyed&lt;T&gt;.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:341
&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(const AtomicString, trackRegionCueContainerPseudoId,

Ditto.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:349
&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(const AtomicString, trackRegionShadowPseudoId,

Ditto.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:366
&gt; +    LOG(Media, &quot;TextTrackRegion::displayLastTextTrackCueBox&quot;);

Nit: won&apos;t this will be call really frequently? if so, you might not want to log here.

&gt; Source/WebCore/html/track/VTTCue.cpp:223
&gt; +    displayTreeInternal()-&gt;remove(ASSERT_NO_EXCEPTION);

displayTreeInternal allocates the display tree if it is NULL, so you should return &quot;if (!hasDisplayTree())&quot;

&gt; Source/WebCore/html/track/VTTCue.cpp:747
&gt; +    TextTrackRegion* region = track()-&gt;regions()-&gt;getRegionById(m_regionId);

TextTrackCue::track() and TextTrack::regions() can both return NULL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990633</commentid>
    <comment_count>7</comment_count>
      <attachid>226754</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-03-14 13:16:48 -0700</bug_when>
    <thetext>Comment on attachment 226754
Patch

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

&gt;&gt; Source/WebCore/html/track/TextTrackRegion.cpp:334
&gt;&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(const AtomicString, trackRegionCueContainerScrollingClass, (&quot;scrolling&quot;, AtomicString::ConstructFromLiteral));
&gt; 
&gt; Nit: you might as well go straight to NeverDestroyed&lt;T&gt;.

Or maybe not, see https://bugs.webkit.org/show_bug.cgi?id=130256#c3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991377</commentid>
    <comment_count>8</comment_count>
      <attachid>226754</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-17 13:58:16 -0700</bug_when>
    <thetext>Comment on attachment 226754
Patch

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

&gt;&gt; Source/WebCore/html/shadow/MediaControlElements.cpp:1301
&gt;&gt; +        TextTrackRegion* region = cue-&gt;track()-&gt;regions()-&gt;getRegionById(regionId);
&gt; 
&gt; Both TextTrackCue::track and TextTrack::regions() can return NULL, either of which will make this crash.

Yikes! cue-&gt;track() is tested a few lines above, but I&apos;ll add code for the regions() == nullptr case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991418</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-17 15:15:53 -0700</bug_when>
    <thetext>Committed r165765: &lt;http://trac.webkit.org/changeset/165765&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991724</commentid>
    <comment_count>10</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-18 10:38:35 -0700</bug_when>
    <thetext>*** Bug 117469 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226603</attachid>
            <date>2014-03-13 11:35:46 -0700</date>
            <delta_ts>2014-03-14 12:57:01 -0700</delta_ts>
            <desc>WIP Patch Not Tested Yet</desc>
            <filename>bug-109822-20140313113523.patch</filename>
            <type>text/plain</type>
            <size>32960</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTU1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE0LTAzLTEzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJWVFRdIEV4dGVuZGlu
ZyBXZWJWVFQgUmVuZGVyaW5nIHdpdGggUmVnaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5ODIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTWVyZ2VkIGZyb20gQmxpbmsgKHBhdGNoIGJ5IFZpY3Rv
ciBDYXJidW5lIHZjYXJidW5lQGNocm9taXVtLm9yZyk6CisgICAgICAgIGh0dHBzOi8vY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rLzBjZGViYzFkNzZkNDFiZmNiOWM0
YjAyMmU1NGE0ZmJmZjEzMjIyNWQKKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKwor
ICAgICAgICAqIGNzcy9tZWRpYUNvbnRyb2xzLmNzczoKKyAgICAgICAgKHZpZGVvOjotd2Via2l0
LW1lZGlhLXRleHQtdHJhY2stcmVnaW9uKToKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlh
LXRleHQtdHJhY2stcmVnaW9uLWNvbnRhaW5lcik6CisgICAgICAgICh2aWRlbzo6LXdlYmtpdC1t
ZWRpYS10ZXh0LXRyYWNrLXJlZ2lvbi1jb250YWluZXIuc2Nyb2xsaW5nKToKKyAgICAgICAgKHZp
ZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJhY2stZGlzcGxheSk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSk6CisgICAgICAg
ICogaHRtbC90cmFjay9UZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNr
Ojp+VGV4dFRyYWNrKToKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHA6Cisg
ICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrUmVnaW9uOjpUZXh0VHJhY2tSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrUmVnaW9uOjp0ZXh0VHJhY2tDdWVDb250YWluZXJTY3JvbGxpbmdDbGFzcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tSZWdpb246OnRleHRUcmFja0N1ZUNvbnRhaW5lclNo
YWRvd1BzZXVkb0lkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbjo6dGV4dFRy
YWNrUmVnaW9uU2hhZG93UHNldWRvSWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVn
aW9uOjphcHBlbmRUZXh0VHJhY2tDdWVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNr
UmVnaW9uOjpkaXNwbGF5TGFzdFRleHRUcmFja0N1ZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0VHJhY2tSZWdpb246OndpbGxSZW1vdmVUZXh0VHJhY2tDdWVCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFRyYWNrUmVnaW9uOjpnZXREaXNwbGF5VHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2tSZWdpb246OnByZXBhcmVSZWdpb25EaXNwbGF5VHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tSZWdpb246OnN0YXJ0VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrUmVnaW9uOjpzdG9wVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNr
UmVnaW9uOjpzY3JvbGxUaW1lckZpcmVkKToKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFj
a1JlZ2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjppc1Njcm9sbGluZ1JlZ2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tSZWdpb246Om93bmVyRG9jdW1lbnQpOgorICAgICAg
ICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmlkbDoKKyAgICAgICAgKiBodG1sL3RyYWNr
L1RleHRUcmFja1JlZ2lvbkxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVn
aW9uTGlzdDo6Z2V0UmVnaW9uQnlJZCk6CisgICAgICAgICogaHRtbC90cmFjay9WVFRDdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VlRUQ3VlQm94OjphcHBseUNTU1Byb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VlRUQ3VlOjp+VlRUQ3VlKToKKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1
ZTo6c2V0SXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VlRUQ3VlOjpyZW1vdmVEaXNwbGF5
VHJlZSk6CisgICAgICAgICogaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpjcmVhdGVOZXdSZWdpb24pOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJWVFRDdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVlRUQ3VlOjps
YXlvdXQpOgorCiAyMDE0LTAzLTEzICBSYWR1IFN0YXZpbGEgIDxzdGF2aWxhQGFkb2JlLmNvbT4K
IAogICAgICAgICBXZWJraXQgbm90IGJ1aWxkaW5nIG9uIFhDb2RlIDUuMSBkdWUgdG8gZ2FyYmFn
ZSBjb2xsZWN0aW9uIG5vIGxvbmdlciBiZWluZyBzdXBwb3J0ZWQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCShy
ZXZpc2lvbiAxNjU1NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJl
RGVmaW5lcy54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSw3IEBAIEVOQUJM
RV9XRUJfQVVESU8gPSBFTkFCTEVfV0VCX0FVRElPOwogRU5BQkxFX1dFQl9SRVBMQVkgPSA7CiBF
TkFCTEVfV0VCX1NPQ0tFVFMgPSBFTkFCTEVfV0VCX1NPQ0tFVFM7CiBFTkFCTEVfV0VCX1RJTUlO
RyA9IDsKK0VOQUJMRV9XRUJWVFRfUkVHSU9OUyA9IEVOQUJMRV9XRUJWVFRfUkVHSU9OUzsKIEVO
QUJMRV9YSFJfVElNRU9VVCA9IEVOQUJMRV9YSFJfVElNRU9VVDsKIEVOQUJMRV9YU0xUID0gRU5B
QkxFX1hTTFQ7CiAKQEAgLTIyMiw0ICsyMjMsNCBAQCBFTkFCTEVfRlRMX0pJVF9tYWNvc3hfMTAx
MDAwID0gRU5BQkxFX0ZUCiAKIEVOQUJMRV9MTElOVF9DX0xPT1AgPSA7CiAKLUZFQVRVUkVfREVG
SU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FO
VkFTKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpICQoRU5BQkxFX0FW
Rl9DQVBUSU9OUykgJChFTkFCTEVfQkxPQikgJChFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HKSAk
KEVOQUJMRV9DQU5WQVNfUEFUSCkgJChFTkFCTEVfQ0FOVkFTX1BST1hZKSAkKEVOQUJMRV9DSEFO
TkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JB
VElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfREVWSUNF
X0FEQVBUQVRJT04pICQoRU5BQkxFX0NTU19FWENMVVNJT05TKSAkKEVOQUJMRV9DU1NfRklMVEVS
UykgJChFTkFCTEVfQ1NTX0dSSURfTEFZT1VUKSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJ
T04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykg
JChFTkFCTEVfQ1NTX1NIQVBFUykgJChFTkFCTEVfQ1NTX1NIQVBFX0lOU0lERSkgJChFTkFCTEVf
Q1NTX1NUSUNLWV9QT1NJVElPTikgJChFTkFCTEVfQ1NTX1RSQU5TRk9STVNfQU5JTUFUSU9OU19V
TlBSRUZJWEVEKSAkKEVOQUJMRV9DU1MzX0NPTkRJVElPTkFMX1JVTEVTKSAkKEVOQUJMRV9DU1Mz
X1RFWFQpICQoRU5BQkxFX0NTUzNfVEVYVF9MSU5FX0JSRUFLKSAkKEVOQUJMRV9DVVJTT1JfVklT
SUJJTElUWSkgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9EQVNIQk9B
UkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9UUkFO
U0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVOQUJMRV9ERVZJQ0VfT1JJ
RU5UQVRJT04pICQoRU5BQkxFX0RPTTRfRVZFTlRTX0NPTlNUUlVDVE9SKSAkKEVOQUJMRV9FTkNS
WVBURURfTUVESUEpICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQV9WMikgJChFTkFCTEVfRklMVEVS
UykgJChFTkFCTEVfRk9OVF9MT0FEX0VWRU5UUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQo
RU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5fUEFH
RV9ET01fVElNRVJfVEhST1RUTElORykgJChFTkFCTEVfSElHSF9EUElfQ0FOVkFTKSAkKEVOQUJM
RV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0lNQUdFX0NPTlRST0xTKSAkKEVOQUJMRV9JTkRFWEVE
X0RBVEFCQVNFKSAkKEVOQUJMRV9JTkRJRV9VSSkgJChFTkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVO
QUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SX1BPUE9WRVIp
ICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9J
TkNPTVBMRVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lO
UFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRf
VFlQRV9XRUVLKSAkKEVOQUJMRV9JTlNQRUNUT1IpICQoRU5BQkxFX0lPU19BSVJQTEFZKSAkKEVO
QUJMRV9JT1NfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVG
SVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxFX0xFR0FDWV9WRU5E
T1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5BQkxFX0xFVFRFUlBS
RVNTKSAkKEVOQUJMRV9MSU5LX1BSRUZFVENIKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01F
RElBX0NPTlRST0xTX1NDUklQVCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJ
QV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChF
TkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFKSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElM
UykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSkg
JChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUExVR0lOX1BST1hZX0ZPUl9WSURFTykg
JChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUFJPTUlTRVMpICQoRU5BQkxFX1BS
T1hJTUlUWV9FVkVOVFMpICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkgJChFTkFCTEVfUVVP
VEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9SRU1PVEVfSU5T
UEVDVE9SKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9TQ1JJUFRF
RF9TUEVFQ0gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhF
U0lTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NVQlBJWEVMX0xBWU9VVCkgJChF
TkFCTEVfU1VCVExFX0NSWVBUTykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URUxFUEhP
TkVfTlVNQkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVNUExBVEVfRUxFTUVOVCkgJChFTkFCTEVf
VEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICQoRU5BQkxFX1RPVUNIX0lD
T05fTE9BRElORykgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1ZJREVPKSAkKEVO
QUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfVklFV19NT0RFX0NTU19NRURJQSkgJChFTkFCTEVf
V0VCR0wpICQoRU5BQkxFX1dFQl9BTklNQVRJT05TKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5B
QkxFX1dFQl9SRVBMQVkpICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5H
KSAkKEVOQUJMRV9YSFJfVElNRU9VVCkgJChFTkFCTEVfWFNMVCkgJChFTkFCTEVfRlRMX0pJVCkg
JChFTkFCTEVfTExJTlRfQ19MT09QKSAkKEZFQVRVUkVfREVGSU5FU18kKFBMQVRGT1JNX05BTUUp
KTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQUND
RUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJ
TkcpICQoRU5BQkxFX0FWRl9DQVBUSU9OUykgJChFTkFCTEVfQkxPQikgJChFTkFCTEVfQ0FDSEVf
UEFSVElUSU9OSU5HKSAkKEVOQUJMRV9DQU5WQVNfUEFUSCkgJChFTkFCTEVfQ0FOVkFTX1BST1hZ
KSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxF
X0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVO
QUJMRV9DU1NfREVWSUNFX0FEQVBUQVRJT04pICQoRU5BQkxFX0NTU19FWENMVVNJT05TKSAkKEVO
QUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0dSSURfTEFZT1VUKSAkKEVOQUJMRV9DU1Nf
SU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJM
RV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQVBFUykgJChFTkFCTEVfQ1NTX1NIQVBFX0lO
U0lERSkgJChFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElPTikgJChFTkFCTEVfQ1NTX1RSQU5TRk9S
TVNfQU5JTUFUSU9OU19VTlBSRUZJWEVEKSAkKEVOQUJMRV9DU1MzX0NPTkRJVElPTkFMX1JVTEVT
KSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NTUzNfVEVYVF9MSU5FX0JSRUFLKSAkKEVO
QUJMRV9DVVJTT1JfVklTSUJJTElUWSkgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAk
KEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChF
TkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVO
QUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RPTTRfRVZFTlRTX0NPTlNUUlVDVE9S
KSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQV9WMikg
JChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfRk9OVF9MT0FEX0VWRU5UUykgJChFTkFCTEVfRlVM
TFNDUkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVO
QUJMRV9ISURERU5fUEFHRV9ET01fVElNRVJfVEhST1RUTElORykgJChFTkFCTEVfSElHSF9EUElf
Q0FOVkFTKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0lNQUdFX0NPTlRST0xTKSAk
KEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTkRJRV9VSSkgJChFTkFCTEVfSU5Q
VVRfU1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X0NPTE9SX1BPUE9WRVIpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRf
VFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9D
QUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkg
JChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9JTlNQRUNUT1IpICQoRU5BQkxFX0lP
U19BSVJQTEFZKSAkKEVOQUJMRV9JT1NfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9MRUdBQ1lf
Q1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5B
QkxFX0xFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQo
RU5BQkxFX0xFVFRFUlBSRVNTKSAkKEVOQUJMRV9MSU5LX1BSRUZFVENIKSAkKEVOQUJMRV9NQVRI
TUwpICQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCkgJChFTkFCTEVfTUVESUFfU09VUkNF
KSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVO
QUJMRV9NSFRNTCkgJChFTkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFKSAkKEVOQUJMRV9OQVZJR0FU
T1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9W
SVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUExVR0lOX1BS
T1hZX0ZPUl9WSURFTykgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUFJPTUlT
RVMpICQoRU5BQkxFX1BST1hJTUlUWV9FVkVOVFMpICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElT
VCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVO
QUJMRV9SRU1PVEVfSU5TUEVDVE9SKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZKSAk
KEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJM
RV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NVQlBJ
WEVMX0xBWU9VVCkgJChFTkFCTEVfU1VCVExFX0NSWVBUTykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAk
KEVOQUJMRV9URUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVNUExBVEVfRUxF
TUVOVCkgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICQo
RU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5B
QkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfVklFV19NT0RFX0NTU19N
RURJQSkgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BTklNQVRJT05TKSAkKEVOQUJMRV9X
RUJfQVVESU8pICQoRU5BQkxFX1dFQl9SRVBMQVkpICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVO
QUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XRUJWVFRfUkVHSU9OUykgJChFTkFCTEVfWEhSX1RJ
TUVPVVQpICQoRU5BQkxFX1hTTFQpICQoRU5BQkxFX0ZUTF9KSVQpICQoRU5BQkxFX0xMSU5UX0Nf
TE9PUCkgJChGRUFUVVJFX0RFRklORVNfJChQTEFURk9STV9OQU1FKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL21lZGlhQ29udHJvbHMuY3NzCShyZXZpc2lvbiAxNjU1NTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjQ0LDEyICsyNDQsMzYgQEAgdmlkZW86OmN1ZSB7CiAgICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpOwogfQogCit2aWRlbzo6LXdlYmtpdC1t
ZWRpYS10ZXh0LXRyYWNrLXJlZ2lvbiB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGxp
bmUtaGVpZ2h0OiA1LjMzdmg7CisgICAgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiOworICAg
IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKKyAgICBjb2xvcjogcmdiYSgyNTUsIDI1
NSwgMjU1LCAxKTsKKyAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CisgICAgb3ZlcmZsb3ctd3Jh
cDogYnJlYWstd29yZDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworfQorCit2aWRlbzo6LXdlYmtp
dC1tZWRpYS10ZXh0LXRyYWNrLXJlZ2lvbi1jb250YWluZXIgeworICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKKworICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKKyAgICAtd2Via2l0LWZsZXgtZmxv
dzogY29sdW1uOworICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKK30KKwordmlk
ZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1yZWdpb24tY29udGFpbmVyLnNjcm9sbGluZyB7
CisgICAgLXdlYmtpdC10cmFuc2l0aW9uOiB0b3AgNDMzbXMgbGluZWFyOworfQorCiB2aWRlbzo6
LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWRpc3BsYXkgewogICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAg
ICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgZm9udDogMjJweCBzYW5zLXNl
cmlmOworICAgIC13ZWJraXQtZmxleDogMCAwIGF1dG87CiB9CiAKIHZpZGVvOjpjdWUoOmZ1dHVy
ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbEVsZW1lbnRzLmNwcAkocmV2aXNpb24gMTY1NTUxKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2
ICs1OSwxMCBAQAogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoV0VCVlRUX1JFR0lPTlMpCisjaW5jbHVkZSAiVGV4dFRyYWNrUmVnaW9uTGlzdC5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
QEAgLTEyOTIsMTEgKzEyOTYsMzIgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgUmVmUHRyPFZUVEN1ZUJv
eD4gZGlzcGxheUJveCA9IGN1ZS0+Z2V0RGlzcGxheVRyZWUobV92aWRlb0Rpc3BsYXlTaXplLnNp
emUoKSk7Ci0gICAgICAgIGlmIChkaXNwbGF5Qm94LT5oYXNDaGlsZE5vZGVzKCkgJiYgIWNvbnRh
aW5zKGRpc3BsYXlCb3guZ2V0KCkpKSB7Ci0gICAgICAgICAgICAvLyBOb3RlOiB0aGUgZGlzcGxh
eSB0cmVlIG9mIGEgY3VlIGlzIHJlbW92ZWQgd2hlbiB0aGUgYWN0aXZlIGZsYWcgb2YgdGhlIGN1
ZSBpcyB1bnNldC4KLSAgICAgICAgICAgIGFwcGVuZENoaWxkKGRpc3BsYXlCb3gsIEFTU0VSVF9O
T19FWENFUFRJT04pOwotICAgICAgICAgICAgY3VlLT5zZXRGb250U2l6ZShtX2ZvbnRTaXplLCBt
X3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2ZvbnRTaXplSXNJbXBvcnRhbnQpOworI2lmIEVO
QUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICAgICAgU3RyaW5nIHJlZ2lvbklkID0gY3VlLT5yZWdp
b25JZCgpOworICAgICAgICBUZXh0VHJhY2tSZWdpb24qIHJlZ2lvbiA9IGN1ZS0+dHJhY2soKS0+
cmVnaW9ucygpLT5nZXRSZWdpb25CeUlkKHJlZ2lvbklkKTsKKyAgICAgICAgaWYgKCFyZWdpb24p
IHsKKyAgICAgICAgICAgIC8vIElmIGN1ZSBoYXMgYW4gZW1wdHkgdGV4dCB0cmFjayBjdWUgcmVn
aW9uIGlkZW50aWZpZXIgb3IgdGhlcmUgaXMgbm8KKyAgICAgICAgICAgIC8vIFdlYlZUVCByZWdp
b24gd2hvc2UgcmVnaW9uIGlkZW50aWZpZXIgaXMgaWRlbnRpY2FsIHRvIGN1ZSdzIHRleHQKKyAg
ICAgICAgICAgIC8vIHRyYWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciwgcnVuIHRoZSBmb2xsb3dp
bmcgc3Vic3RlcHM6CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChkaXNwbGF5Qm94LT5oYXNDaGls
ZE5vZGVzKCkgJiYgIWNvbnRhaW5zKGRpc3BsYXlCb3guZ2V0KCkpKSB7CisgICAgICAgICAgICAg
ICAgLy8gTm90ZTogdGhlIGRpc3BsYXkgdHJlZSBvZiBhIGN1ZSBpcyByZW1vdmVkIHdoZW4gdGhl
IGFjdGl2ZSBmbGFnIG9mIHRoZSBjdWUgaXMgdW5zZXQuCisgICAgICAgICAgICAgICAgYXBwZW5k
Q2hpbGQoZGlzcGxheUJveCwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAg
Y3VlLT5zZXRGb250U2l6ZShtX2ZvbnRTaXplLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBt
X2ZvbnRTaXplSXNJbXBvcnRhbnQpOworICAgICAgICAgICAgfQorI2lmIEVOQUJMRShXRUJWVFRf
UkVHSU9OUykKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIExldCByZWdpb24gYmUg
dGhlIFdlYlZUVCByZWdpb24gd2hvc2UgcmVnaW9uIGlkZW50aWZpZXIKKyAgICAgICAgICAgIC8v
IG1hdGNoZXMgdGhlIHRleHQgdHJhY2sgY3VlIHJlZ2lvbiBpZGVudGlmaWVyIG9mIGN1ZS4KKyAg
ICAgICAgICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gcmVnaW9uTm9kZSA9IHJlZ2lvbi0+Z2V0
RGlzcGxheVRyZWUoKTsKKworICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSByZWdpb24gdG8gdGhl
IHZpZXdwb3J0LCBpZiBpdCB3YXMgbm90IGFscmVhZHkuCisgICAgICAgICAgICBpZiAoIWNvbnRh
aW5zKHJlZ2lvbk5vZGUuZ2V0KCkpKQorICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKHJlZ2lv
bi0+Z2V0RGlzcGxheVRyZWUoKSk7CisKKyAgICAgICAgICAgIHJlZ2lvbi0+YXBwZW5kVGV4dFRy
YWNrQ3VlQm94KGRpc3BsYXlCb3gpOwogICAgICAgICB9CisjZW5kaWYKICAgICB9CiAKICAgICAv
LyAxMS4gUmV0dXJuIG91dHB1dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFjay5jcHAJKHJldmlzaW9uIDE2NTU1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTMgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTM5LDggKzEzOSwxMCBAQCBUZXh0VHJhY2s6On5UZXh0
VHJhY2soKQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3Vlcy0+bGVuZ3RoKCk7
ICsraSkKICAgICAgICAgICAgIG1fY3Vlcy0+aXRlbShpKS0+c2V0VHJhY2soMCk7CiAjaWYgRU5B
QkxFKFdFQlZUVF9SRUdJT05TKQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVn
aW9ucy0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgICAgIG1fcmVnaW9ucy0+aXRlbShpKS0+c2V0
VHJhY2soMCk7CisgICAgICAgIGlmIChtX3JlZ2lvbnMpIHsKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9yZWdpb25zLT5sZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgICAg
IG1fcmVnaW9ucy0+aXRlbShpKS0+c2V0VHJhY2soMCk7CisgICAgICAgIH0KICNlbmRpZgogICAg
IH0KICAgICBjbGVhckNsaWVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2tDdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrQ3VlLmNwcAkocmV2aXNpb24gMTY1NTUxKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQpAQCAtNTAsNiArNTAsMTAgQEAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIEVOQUJMRShX
RUJWVFRfUkVHSU9OUykKKyNpbmNsdWRlICJUZXh0VHJhY2tSZWdpb25MaXN0LmgiCisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgaW50IGludmFsaWRDdWVJbmRl
eCA9IC0xOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVn
aW9uLmNwcAkocmV2aXNpb24gMTY1NTUxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2tSZWdpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzQsMTMgKzM1LDIwIEBACiAKICNp
bmNsdWRlICJUZXh0VHJhY2tSZWdpb24uaCIKIAorI2luY2x1ZGUgIkNsaWVudFJlY3QuaCIKKyNp
bmNsdWRlICJET01Ub2tlbkxpc3QuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xk
ZXIuaCIKKyNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlICJWVFRDdWUuaCIKICNpbmNsdWRlICJXZWJWVFRQYXJzZXIuaCIKICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIFRoZSBmb2xs
b3dpbmcgdmFsdWVzIGRlZmF1bHQgdmFsdWVzIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgV2ViVlRU
IFJlZ2lvbnMgU3BlYy4KKy8vIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvdGV4dC10cmFja3MvcmF3
LWZpbGUvZGVmYXVsdC82MDh0b1ZUVC9yZWdpb24uaHRtbAorCiAvLyBUaGUgcmVnaW9uIG9jY3Vw
aWVzIGJ5IGRlZmF1bHQgMTAwJSBvZiB0aGUgd2lkdGggb2YgdGhlIHZpZGVvIHZpZXdwb3J0Lgog
c3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRXaWR0aCA9IDEwMDsKIApAQCAtNTQsMTQgKzYyLDI1
IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0QW5jaG9yUG9pbnRZID0KIC8vIFRoZSByZWdp
b24gZG9lc24ndCBoYXZlIHNjcm9sbGluZyB0ZXh0LCBieSBkZWZhdWx0Lgogc3RhdGljIGNvbnN0
IGJvb2wgZGVmYXVsdFNjcm9sbCA9IGZhbHNlOwogCi1UZXh0VHJhY2tSZWdpb246OlRleHRUcmFj
a1JlZ2lvbigpCi0gICAgOiBtX2lkKGVtcHR5U3RyaW5nKCkpCisvLyBEZWZhdWx0IHJlZ2lvbiBs
aW5lLWhlaWdodCAodmggdW5pdHMpCitzdGF0aWMgY29uc3QgZmxvYXQgbGluZUhlaWdodCA9IDUu
MzM7CisKKy8vIERlZmF1bHQgc2Nyb2xsaW5nIGFuaW1hdGlvbiB0aW1lIHBlcmlvZCAocykuCitz
dGF0aWMgY29uc3QgZmxvYXQgc2Nyb2xsVGltZSA9IDAuNDMzOworCitUZXh0VHJhY2tSZWdpb246
OlRleHRUcmFja1JlZ2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDog
Q29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIoJmNvbnRleHQpCisgICAgLCBtX2lkKGVtcHR5U3Ry
aW5nKCkpCiAgICAgLCBtX3dpZHRoKGRlZmF1bHRXaWR0aCkKICAgICAsIG1faGVpZ2h0SW5MaW5l
cyhkZWZhdWx0SGVpZ2h0SW5MaW5lcykKICAgICAsIG1fcmVnaW9uQW5jaG9yKEZsb2F0UG9pbnQo
ZGVmYXVsdEFuY2hvclBvaW50WCwgZGVmYXVsdEFuY2hvclBvaW50WSkpCiAgICAgLCBtX3ZpZXdw
b3J0QW5jaG9yKEZsb2F0UG9pbnQoZGVmYXVsdEFuY2hvclBvaW50WCwgZGVmYXVsdEFuY2hvclBv
aW50WSkpCiAgICAgLCBtX3Njcm9sbChkZWZhdWx0U2Nyb2xsKQotICAgICwgbV90cmFjaygwKQor
ICAgICwgbV9yZWdpb25EaXNwbGF5VHJlZShudWxscHRyKQorICAgICwgbV9jdWVDb250YWluZXIo
bnVsbHB0cikKKyAgICAsIG1fdHJhY2sobnVsbHB0cikKKyAgICAsIG1fY3VycmVudFRvcCgwKQor
ICAgICwgbV9zY3JvbGxUaW1lcih0aGlzLCAmVGV4dFRyYWNrUmVnaW9uOjpzY3JvbGxUaW1lckZp
cmVkKQogewogfQogCkBAIC0zMTAsNiArMzI5LDE2NSBAQCB2b2lkIFRleHRUcmFja1JlZ2lvbjo6
cGFyc2VTZXR0aW5nKGNvbnN0CiAgICAgcGFyc2VTZXR0aW5nVmFsdWUobmFtZSwgdmFsdWUpOwog
fQogCitjb25zdCBBdG9taWNTdHJpbmcmIFRleHRUcmFja1JlZ2lvbjo6dGV4dFRyYWNrQ3VlQ29u
dGFpbmVyU2Nyb2xsaW5nQ2xhc3MoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
QXRvbWljU3RyaW5nLCB0cmFja1JlZ2lvbkN1ZUNvbnRhaW5lclNjcm9sbGluZ0NsYXNzLCAoInNj
cm9sbGluZyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKworICAgIHJl
dHVybiB0cmFja1JlZ2lvbkN1ZUNvbnRhaW5lclNjcm9sbGluZ0NsYXNzOworfQorCitjb25zdCBB
dG9taWNTdHJpbmcmIFRleHRUcmFja1JlZ2lvbjo6dGV4dFRyYWNrQ3VlQ29udGFpbmVyU2hhZG93
UHNldWRvSWQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5n
LCB0cmFja1JlZ2lvbkN1ZUNvbnRhaW5lclBzZXVkb0lkLAorICAgICAgICAoIi13ZWJraXQtbWVk
aWEtdGV4dC10cmFjay1yZWdpb24tY29udGFpbmVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCkpOworCisgICAgcmV0dXJuIHRyYWNrUmVnaW9uQ3VlQ29udGFpbmVyUHNldWRv
SWQ7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgVGV4dFRyYWNrUmVnaW9uOjp0ZXh0VHJhY2tS
ZWdpb25TaGFkb3dQc2V1ZG9JZCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBB
dG9taWNTdHJpbmcsIHRyYWNrUmVnaW9uU2hhZG93UHNldWRvSWQsCisgICAgICAgICgiLXdlYmtp
dC1tZWRpYS10ZXh0LXRyYWNrLXJlZ2lvbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKKworICAgIHJldHVybiB0cmFja1JlZ2lvblNoYWRvd1BzZXVkb0lkOworfQorCit2
b2lkIFRleHRUcmFja1JlZ2lvbjo6YXBwZW5kVGV4dFRyYWNrQ3VlQm94KFBhc3NSZWZQdHI8VlRU
Q3VlQm94PiBkaXNwbGF5Qm94KQoreworICAgIGlmIChtX2N1ZUNvbnRhaW5lci0+Y29udGFpbnMo
ZGlzcGxheUJveC5nZXQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VlQ29udGFpbmVy
LT5hcHBlbmRDaGlsZChkaXNwbGF5Qm94LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBkaXNw
bGF5TGFzdFRleHRUcmFja0N1ZUJveCgpOworfQorCit2b2lkIFRleHRUcmFja1JlZ2lvbjo6ZGlz
cGxheUxhc3RUZXh0VHJhY2tDdWVCb3goKQoreworICAgIExPRyhNZWRpYSwgIlRleHRUcmFja1Jl
Z2lvbjo6ZGlzcGxheUxhc3RUZXh0VHJhY2tDdWVCb3giKTsKKyAgICBBU1NFUlQobV9jdWVDb250
YWluZXIpOworCisgICAgLy8gVGhlIGNvbnRhaW5lciBuZWVkcyB0byBiZSByZW5kZXJlZCwgaWYg
aXQgaXMgbm90IGVtcHR5IGFuZCB0aGUgcmVnaW9uIGlzIG5vdCBjdXJyZW50bHkgc2Nyb2xsaW5n
LgorICAgIGlmICghbV9jdWVDb250YWluZXItPnJlbmRlcmVyKCkgfHwgIW1fY3VlQ29udGFpbmVy
LT5jaGlsZE5vZGVDb3VudCgpIHx8IG1fc2Nyb2xsVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gSWYgaXQncyBhIHNjcm9sbGluZyByZWdpb24sIGFkZCB0aGUgc2Ny
b2xsaW5nIGNsYXNzLgorICAgIGlmIChpc1Njcm9sbGluZ1JlZ2lvbigpKQorICAgICAgICBtX2N1
ZUNvbnRhaW5lci0+Y2xhc3NMaXN0KCktPmFkZCh0ZXh0VHJhY2tDdWVDb250YWluZXJTY3JvbGxp
bmdDbGFzcygpLCBJR05PUkVfRVhDRVBUSU9OKTsKKworICAgIGZsb2F0IHJlZ2lvbkJvdHRvbSA9
IG1fcmVnaW9uRGlzcGxheVRyZWUtPmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLT5ib3R0b20oKTsK
KworICAgIC8vIEZpbmQgZmlyc3QgY3VlIHRoYXQgaXMgbm90IGVudGlyZWx5IGRpc3BsYXllZCBh
bmQgc2Nyb2xsIGl0IHVwd2FyZHMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1ZUNv
bnRhaW5lci0+Y2hpbGROb2RlQ291bnQoKSAmJiAhbV9zY3JvbGxUaW1lci5pc0FjdGl2ZSgpOyAr
K2kpIHsKKyAgICAgICAgZmxvYXQgY2hpbGRUb3AgPSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVu
dCo+KG1fY3VlQ29udGFpbmVyLT5jaGlsZE5vZGUoaSkpLT5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KS0+dG9wKCk7CisgICAgICAgIGZsb2F0IGNoaWxkQm90dG9tID0gc3RhdGljX2Nhc3Q8SFRNTERp
dkVsZW1lbnQqPihtX2N1ZUNvbnRhaW5lci0+Y2hpbGROb2RlKGkpKS0+Z2V0Qm91bmRpbmdDbGll
bnRSZWN0KCktPmJvdHRvbSgpOworCisgICAgICAgIGlmIChyZWdpb25Cb3R0b20gPj0gY2hpbGRC
b3R0b20pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmbG9hdCBoZWlnaHQgPSBj
aGlsZEJvdHRvbSAtIGNoaWxkVG9wOworCisgICAgICAgIG1fY3VycmVudFRvcCAtPSBzdGQ6Om1p
bihoZWlnaHQsIGNoaWxkQm90dG9tIC0gcmVnaW9uQm90dG9tKTsKKyAgICAgICAgbV9jdWVDb250
YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIG1fY3VycmVudFRv
cCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisKKyAgICAgICAgc3RhcnRUaW1lcigpOwor
ICAgIH0KK30KKwordm9pZCBUZXh0VHJhY2tSZWdpb246OndpbGxSZW1vdmVUZXh0VHJhY2tDdWVC
b3goVlRUQ3VlQm94KiBib3gpCit7CisgICAgTE9HKE1lZGlhLCAiVGV4dFRyYWNrUmVnaW9uOjp3
aWxsUmVtb3ZlVGV4dFRyYWNrQ3VlQm94Iik7CisgICAgQVNTRVJUKG1fY3VlQ29udGFpbmVyLT5j
b250YWlucyhib3gpKTsKKworICAgIGRvdWJsZSBib3hIZWlnaHQgPSBib3gtPmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpLT5ib3R0b20oKSAtIGJveC0+Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCktPnRv
cCgpOworCisgICAgbV9jdWVDb250YWluZXItPmNsYXNzTGlzdCgpLT5yZW1vdmUodGV4dFRyYWNr
Q3VlQ29udGFpbmVyU2Nyb2xsaW5nQ2xhc3MoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisKKyAgICBt
X2N1cnJlbnRUb3AgKz0gYm94SGVpZ2h0OworICAgIG1fY3VlQ29udGFpbmVyLT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCBtX2N1cnJlbnRUb3AsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFgpOworfQorCitQYXNzUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBUZXh0VHJhY2tS
ZWdpb246OmdldERpc3BsYXlUcmVlKCkKK3sKKyAgICBpZiAoIW1fcmVnaW9uRGlzcGxheVRyZWUp
IHsKKyAgICAgICAgbV9yZWdpb25EaXNwbGF5VHJlZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUo
Km93bmVyRG9jdW1lbnQoKSk7CisgICAgICAgIHByZXBhcmVSZWdpb25EaXNwbGF5VHJlZSgpOwor
ICAgIH0KKworICAgIHJldHVybiBtX3JlZ2lvbkRpc3BsYXlUcmVlOworfQorCit2b2lkIFRleHRU
cmFja1JlZ2lvbjo6cHJlcGFyZVJlZ2lvbkRpc3BsYXlUcmVlKCkKK3sKKyAgICBBU1NFUlQobV9y
ZWdpb25EaXNwbGF5VHJlZSk7CisKKyAgICAvLyA3LjIgUHJlcGFyZSByZWdpb24gQ1NTIGJveGVz
CisKKyAgICAvLyBGSVhNRTogQ2hhbmdlIHRoZSBjb2RlIGJlbG93IHRvIHVzZSB2aWV3cG9ydCB1
bml0cyB3aGVuCisgICAgLy8gaHR0cDovL2NyYnVnLzI0NDYxOCBpcyBmaXhlZC4KKworICAgIC8v
IExldCByZWdpb25XaWR0aCBiZSB0aGUgdGV4dCB0cmFjayByZWdpb24gd2lkdGguCisgICAgLy8g
TGV0IHdpZHRoIGJlICdyZWdpb25XaWR0aCB2dycgKCd2dycgaXMgYSBDU1MgdW5pdCkKKyAgICBt
X3JlZ2lvbkRpc3BsYXlUcmVlLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lk
dGgsIG1fd2lkdGgsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisKKyAgICAv
LyBMZXQgbGluZUhlaWdodCBiZSAnMC4wNTMzdmgnICgndmgnIGlzIGEgQ1NTIHVuaXQpIGFuZCBy
ZWdpb25IZWlnaHQgYmUKKyAgICAvLyB0aGUgdGV4dCB0cmFjayByZWdpb24gaGVpZ2h0LiBMZXQg
aGVpZ2h0IGJlICdsaW5lSGVpZ2h0JyBtdWx0aXBsaWVkCisgICAgLy8gYnkgcmVnaW9uSGVpZ2h0
LgorICAgIGRvdWJsZSBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogbV9oZWlnaHRJbkxpbmVzOworICAg
IG1fcmVnaW9uRGlzcGxheVRyZWUtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlI
ZWlnaHQsIGhlaWdodCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WSCk7CisKKyAgICAvLyBMZXQg
dmlld3BvcnRBbmNob3JYIGJlIHRoZSB4IGRpbWVuc2lvbiBvZiB0aGUgdGV4dCB0cmFjayByZWdp
b24gdmlld3BvcnQKKyAgICAvLyBhbmNob3IgYW5kIHJlZ2lvbkFuY2hvclggYmUgdGhlIHggZGlt
ZW5zaW9uIG9mIHRoZSB0ZXh0IHRyYWNrIHJlZ2lvbgorICAgIC8vIGFuY2hvci4gTGV0IGxlZnRP
ZmZzZXQgYmUgcmVnaW9uQW5jaG9yWCBtdWx0aXBsaWVkIGJ5IHdpZHRoIGRpdmlkZWQgYnkKKyAg
ICAvLyAxMDAuMC4gTGV0IGxlZnQgYmUgbGVmdE9mZnNldCBzdWJ0cmFjdGVkIGZyb20gJ3ZpZXdw
b3J0QW5jaG9yWCB2dycuCisgICAgZG91YmxlIGxlZnRPZmZzZXQgPSBtX3JlZ2lvbkFuY2hvci54
KCkgKiBtX3dpZHRoIC8gMTAwOworICAgIG1fcmVnaW9uRGlzcGxheVRyZWUtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBtX3ZpZXdwb3J0QW5jaG9yLngoKSAtIGxlZnRP
ZmZzZXQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisKKyAgICAvLyBMZXQg
dmlld3BvcnRBbmNob3JZIGJlIHRoZSB5IGRpbWVuc2lvbiBvZiB0aGUgdGV4dCB0cmFjayByZWdp
b24gdmlld3BvcnQKKyAgICAvLyBhbmNob3IgYW5kIHJlZ2lvbkFuY2hvclkgYmUgdGhlIHkgZGlt
ZW5zaW9uIG9mIHRoZSB0ZXh0IHRyYWNrIHJlZ2lvbgorICAgIC8vIGFuY2hvci4gTGV0IHRvcE9m
ZnNldCBiZSByZWdpb25BbmNob3JZIG11bHRpcGxpZWQgYnkgaGVpZ2h0IGRpdmlkZWQgYnkKKyAg
ICAvLyAxMDAuMC4gTGV0IHRvcCBiZSB0b3BPZmZzZXQgc3VidHJhY3RlZCBmcm9tICd2aWV3cG9y
dEFuY2hvclkgdmgnLgorICAgIGRvdWJsZSB0b3BPZmZzZXQgPSBtX3JlZ2lvbkFuY2hvci55KCkg
KiBoZWlnaHQgLyAxMDA7CisgICAgbV9yZWdpb25EaXNwbGF5VHJlZS0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgbV92aWV3cG9ydEFuY2hvci55KCkgLSB0b3BPZmZzZXQs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisKKyAgICAvLyBUaGUgY3VlIGNv
bnRhaW5lciBpcyB1c2VkIHRvIHdyYXAgdGhlIGN1ZXMgYW5kIGl0IGlzIHRoZSBvYmplY3Qgd2hp
Y2ggaXMKKyAgICAvLyBncmFkdWFsbHkgc2Nyb2xsZWQgb3V0IGFzIG11bHRpcGxlIGN1ZXMgYXJl
IGFwcGVuZGVkIHRvIHRoZSByZWdpb24uCisgICAgbV9jdWVDb250YWluZXIgPSBIVE1MRGl2RWxl
bWVudDo6Y3JlYXRlKCpvd25lckRvY3VtZW50KCkpOworICAgIG1fY3VlQ29udGFpbmVyLT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCAwLjBmLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BYKTsKKworICAgIG1fY3VlQ29udGFpbmVyLT5zZXRQc2V1ZG8odGV4dFRyYWNrQ3Vl
Q29udGFpbmVyU2hhZG93UHNldWRvSWQoKSk7CisgICAgbV9yZWdpb25EaXNwbGF5VHJlZS0+YXBw
ZW5kQ2hpbGQobV9jdWVDb250YWluZXIpOworCisgICAgLy8gNy41IEV2ZXJ5IFdlYlZUVCByZWdp
b24gb2JqZWN0IGlzIGluaXRpYWxpc2VkIHdpdGggdGhlIGZvbGxvd2luZyBDU1MKKyAgICBtX3Jl
Z2lvbkRpc3BsYXlUcmVlLT5zZXRQc2V1ZG8odGV4dFRyYWNrUmVnaW9uU2hhZG93UHNldWRvSWQo
KSk7Cit9CisKK3ZvaWQgVGV4dFRyYWNrUmVnaW9uOjpzdGFydFRpbWVyKCkKK3sKKyAgICBMT0co
TWVkaWEsICJUZXh0VHJhY2tSZWdpb246OnN0YXJ0VGltZXIiKTsKKworICAgIGlmIChtX3Njcm9s
bFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRvdWJsZSBkdXJhdGlv
biA9IGlzU2Nyb2xsaW5nUmVnaW9uKCkgPyBzY3JvbGxUaW1lIDogMDsKKyAgICBtX3Njcm9sbFRp
bWVyLnN0YXJ0T25lU2hvdChkdXJhdGlvbik7Cit9CisKK3ZvaWQgVGV4dFRyYWNrUmVnaW9uOjpz
dG9wVGltZXIoKQoreworICAgIExPRyhNZWRpYSwgIlRleHRUcmFja1JlZ2lvbjo6c3RvcFRpbWVy
Iik7CisKKyAgICBpZiAobV9zY3JvbGxUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3Njcm9s
bFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBUZXh0VHJhY2tSZWdpb246OnNjcm9sbFRpbWVyRmly
ZWQoVGltZXI8VGV4dFRyYWNrUmVnaW9uPiopCit7CisgICAgTE9HKE1lZGlhLCAiVGV4dFRyYWNr
UmVnaW9uOjpzY3JvbGxUaW1lckZpcmVkIik7CisKKyAgICBzdG9wVGltZXIoKTsKKyAgICBkaXNw
bGF5TGFzdFRleHRUcmFja0N1ZUJveCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lv
bi5oCShyZXZpc2lvbiAxNjU1NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja1JlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzMsMTcgKzM0LDIyIEBACiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spICYmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKIAorI2luY2x1ZGUgIkNv
bnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNrLmgiCiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBUZXh0VHJhY2tS
ZWdpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0VHJhY2tSZWdpb24+IHsKK2NsYXNzIEhUTUxE
aXZFbGVtZW50OworY2xhc3MgVlRUQ3VlQm94OworCitjbGFzcyBUZXh0VHJhY2tSZWdpb24gOiBw
dWJsaWMgUmVmQ291bnRlZDxUZXh0VHJhY2tSZWdpb24+LCBwdWJsaWMgQ29udGV4dERlc3RydWN0
aW9uT2JzZXJ2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRUcmFja1Jl
Z2lvbj4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0VHJhY2tSZWdpb24+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUZXh0VHJhY2tSZWdpb24oKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dFRyYWNrUmVnaW9uKGNvbnRleHQpKTsKICAgICB9CiAKICAgICB2aXJ0dWFs
IH5UZXh0VHJhY2tSZWdpb24oKTsKQEAgLTgwLDggKzg2LDI1IEBAIHB1YmxpYzoKICAgICBjb25z
dCBTdHJpbmcmIHJlZ2lvblNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQog
ICAgIHZvaWQgc2V0UmVnaW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CiAKKyAgICBib29sIGlz
U2Nyb2xsaW5nUmVnaW9uKCkgeyByZXR1cm4gbV9zY3JvbGw7IH0KKworICAgIFBhc3NSZWZQdHI8
SFRNTERpdkVsZW1lbnQ+IGdldERpc3BsYXlUcmVlKCk7CisgICAgCisgICAgdm9pZCBhcHBlbmRU
ZXh0VHJhY2tDdWVCb3goUGFzc1JlZlB0cjxWVFRDdWVCb3g+KTsKKyAgICB2b2lkIGRpc3BsYXlM
YXN0VGV4dFRyYWNrQ3VlQm94KCk7CisgICAgdm9pZCB3aWxsUmVtb3ZlVGV4dFRyYWNrQ3VlQm94
KFZUVEN1ZUJveCopOworCiBwcml2YXRlOgotICAgIFRleHRUcmFja1JlZ2lvbigpOworICAgIFRl
eHRUcmFja1JlZ2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CisKKyAgICBEb2N1bWVudCog
b3duZXJEb2N1bWVudCgpIHsgcmV0dXJuIHRvRG9jdW1lbnQobV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KTsgfQorCisgICAgdm9pZCBwcmVwYXJlUmVnaW9uRGlzcGxheVRyZWUoKTsKKworICAgIC8v
IFRoZSB0aW1lciBpcyBuZWVkZWQgdG8gY29udGludWUgcHJvY2Vzc2luZyB3aGVuIGN1ZSBzY3Jv
bGxpbmcgZW5kZWQuCisgICAgdm9pZCBzdGFydFRpbWVyKCk7CisgICAgdm9pZCBzdG9wVGltZXIo
KTsKKyAgICB2b2lkIHNjcm9sbFRpbWVyRmlyZWQoVGltZXI8VGV4dFRyYWNrUmVnaW9uPiopOwog
CiAgICAgZW51bSBSZWdpb25TZXR0aW5nIHsKICAgICAgICAgTm9uZSwKQEAgLTk4LDYgKzEyMSwx
MCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VTZXR0aW5nVmFsdWUoUmVnaW9uU2V0dGluZywg
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBwYXJzZVNldHRpbmcoY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQqKTsKIAorICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHRleHRUcmFja0N1ZUNv
bnRhaW5lclNoYWRvd1BzZXVkb0lkKCk7CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYg
dGV4dFRyYWNrQ3VlQ29udGFpbmVyU2Nyb2xsaW5nQ2xhc3MoKTsKKyAgICBzdGF0aWMgY29uc3Qg
QXRvbWljU3RyaW5nJiB0ZXh0VHJhY2tSZWdpb25TaGFkb3dQc2V1ZG9JZCgpOworCiAgICAgU3Ry
aW5nIG1faWQ7CiAgICAgU3RyaW5nIG1fc2V0dGluZ3M7CiAKQEAgLTEwOSwxMSArMTM2LDI3IEBA
IHByaXZhdGU6CiAKICAgICBib29sIG1fc2Nyb2xsOwogCisgICAgUmVmUHRyPEhUTUxEaXZFbGVt
ZW50PiBtX3JlZ2lvbkRpc3BsYXlUcmVlOworCisgICAgLy8gVGhlIGN1ZSBjb250YWluZXIgaXMg
dGhlIGNvbnRhaW5lciB0aGF0IGlzIHNjcm9sbGVkIHVwIHRvIG9idGFpbiB0aGUKKyAgICAvLyBl
ZmZlY3Qgb2Ygc2Nyb2xsaW5nIGN1ZXMgd2hlbiB0aGlzIGlzIGVuYWJsZWQgZm9yIHRoZSByZWdp
b25zLgorICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gbV9jdWVDb250YWluZXI7CisKICAgICAv
LyBUaGUgbWVtYmVyIHZhcmlhYmxlIHRyYWNrIGNhbiBiZSBhIHJhdyBwb2ludGVyIGFzIGl0IHdp
bGwgbmV2ZXIKICAgICAvLyByZWZlcmVuY2UgYSBkZXN0cm95ZWQgVGV4dFRyYWNrLCBhcyB0aGlz
IG1lbWJlciB2YXJpYWJsZQogICAgIC8vIGlzIGNsZWFyZWQgaW4gdGhlIFRleHRUcmFjayBkZXN0
cnVjdG9yIGFuZCBpdCBpcyBnZW5lcmFsbHkKICAgICAvLyBzZXQvcmVzZXQgd2l0aGluIHRoZSBh
ZGRSZWdpb24gYW5kIHJlbW92ZVJlZ2lvbiBtZXRob2RzLgogICAgIFRleHRUcmFjayogbV90cmFj
azsKKworICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgbnVtZXJpYyB2YWx1ZSBvZiB0
aGUgY3NzICJ0b3AiIHByb3BlcnR5LgorICAgIGRvdWJsZSBtX2N1cnJlbnRUb3A7CisKKyAgICAv
LyBUaGUgdGltZXIgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSBuZXh0IGN1ZSBsaW5lIGFmdGVyIHRo
ZSBjdXJyZW50IG9uZSBoYXMKKyAgICAvLyBiZWVuIGRpc3BsYXllZC4gSXQncyBtYWluIHVzZSBp
cyBmb3Igc2Nyb2xsaW5nIHJlZ2lvbnMgYW5kIGl0IHRyaWdnZXJzIGFzCisgICAgLy8gc29vbiBh
cyB0aGUgYW5pbWF0aW9uIGZvciByb2xsaW5nIG91dCBvbmUgbGluZSBoYXMgZmluaXNoZWQsIGJ1
dAorICAgIC8vIGN1cnJlbnRseSBpdCBpcyB1c2VkIGFsc28gZm9yIG5vbi1zY3JvbGxpbmcgcmVn
aW9ucyB0byB1c2UgYSBzaW5nbGUKKyAgICAvLyBjb2RlIHBhdGguCisgICAgVGltZXI8VGV4dFRy
YWNrUmVnaW9uPiBtX3Njcm9sbFRpbWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmlkbAko
cmV2aXNpb24gMTY1NTUxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tS
ZWdpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNyw4IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9
VklERU9fVFJBQ0sgJiBXRUJWVFRfUkVHSU9OUywKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmpl
Y3QsCi0gICAgQ29uc3RydWN0b3IoKQorICAgIENvbnN0cnVjdG9yKCksCisgICAgQ29uc3RydWN0
b3JDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0CiBdIGludGVyZmFjZSBUZXh0VHJhY2tS
ZWdpb24gewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBUZXh0VHJhY2sgdHJhY2s7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb25MaXN0LmNw
cAkocmV2aXNpb24gMTY1NTUxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tSZWdpb25MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCwxMCArNTEsMTQgQEAgVGV4dFRyYWNrUmVn
aW9uKiBUZXh0VHJhY2tSZWdpb25MaXN0OjppdAogCiBUZXh0VHJhY2tSZWdpb24qIFRleHRUcmFj
a1JlZ2lvbkxpc3Q6OmdldFJlZ2lvbkJ5SWQoY29uc3QgU3RyaW5nJiBpZCkgY29uc3QKIHsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAobV9saXN0W2ldLT5pZCgpID09IGlkKQotICAgICAgICAgICAgcmV0dXJuIG1fbGlzdFtpXS5n
ZXQoKTsKKyAgICBpZiAoaWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZv
ciAoY29uc3QgYXV0byYgcmVnaW9uIDogbV9saXN0KSB7CisgICAgICAgIGlmIChyZWdpb24tPmlk
KCkgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4gcmVnaW9uLmdldCgpOwogICAgIH0KKwogICAg
IHJldHVybiAwOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCShy
ZXZpc2lvbiAxNjU1NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEwIEBACiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBFTkFCTEUo
V0VCVlRUX1JFR0lPTlMpCisjaW5jbHVkZSAiVGV4dFRyYWNrUmVnaW9uTGlzdC5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGludCB1bmRlZmluZWRQb3Np
dGlvbiA9IC0xOwpAQCAtMTA3LDYgKzExMSwxMiBAQCBWVFRDdWUqIFZUVEN1ZUJveDo6Z2V0Q3Vl
KCkgY29uc3QKIHZvaWQgVlRUQ3VlQm94OjphcHBseUNTU1Byb3BlcnRpZXMoY29uc3QgSW50U2l6
ZSYpCiB7CiAgICAgLy8gRklYTUU6IEFwcGx5IGFsbCB0aGUgaW5pdGlhbCBDU1MgcG9zaXRpb25p
bmcgcHJvcGVydGllcy4gaHR0cDovL3drYi51Zy83OTkxNgorI2lmIEVOQUJMRShXRUJWVFRfUkVH
SU9OUykKKyAgICBpZiAoIW1fY3VlLT5yZWdpb25JZCgpLmlzRW1wdHkoKSkgeworICAgICAgICBz
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlUmVsYXRp
dmUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCiAKICAgICAvLyAzLjUuMSBPbiB0
aGUgKHJvb3QpIExpc3Qgb2YgV2ViVlRUIE5vZGUgT2JqZWN0czoKIApAQCAtMjEwLDcgKzIyMCw3
IEBAIFZUVEN1ZTo6VlRUQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGMKIAogVlRUQ3VlOjp+
VlRUQ3VlKCkKIHsKLSAgICByZW1vdmVEaXNwbGF5VHJlZSgpOworICAgIGRpc3BsYXlUcmVlSW50
ZXJuYWwoKS0+cmVtb3ZlKEFTU0VSVF9OT19FWENFUFRJT04pOwogfQogCiBQYXNzUmVmUHRyPFZU
VEN1ZUJveD4gVlRUQ3VlOjpjcmVhdGVEaXNwbGF5VHJlZSgpCkBAIC00NTgsNyArNDY4LDcgQEAg
dm9pZCBWVFRDdWU6OnNldElzQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGlzcGxheSB0cmVlIGFzIHNvb24gYXMgdGhlIGN1
ZSBiZWNvbWVzIGluYWN0aXZlLgotICAgICAgICBkaXNwbGF5VHJlZUludGVybmFsKCktPnJlbW92
ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgcmVtb3ZlRGlzcGxheVRyZWUoKTsKICAg
ICB9CiB9CiAKQEAgLTczMiw2ICs3NDIsMTMgQEAgVlRUQ3VlQm94KiBWVFRDdWU6OmdldERpc3Bs
YXlUcmVlKGNvbnN0IAogCiB2b2lkIFZUVEN1ZTo6cmVtb3ZlRGlzcGxheVRyZWUoKQogeworI2lm
IEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICAvLyBUaGUgcmVnaW9uIG5lZWRzIHRvIGJlIGlu
Zm9ybWVkIGFib3V0IHRoZSBjdWUgcmVtb3ZhbC4KKyAgICBUZXh0VHJhY2tSZWdpb24qIHJlZ2lv
biA9IHRyYWNrKCktPnJlZ2lvbnMoKS0+Z2V0UmVnaW9uQnlJZChtX3JlZ2lvbklkKTsKKyAgICBp
ZiAocmVnaW9uKQorICAgICAgICByZWdpb24tPndpbGxSZW1vdmVUZXh0VHJhY2tDdWVCb3gobV9k
aXNwbGF5VHJlZS5nZXQoKSk7CisjZW5kaWYKKwogICAgIGlmICghaGFzRGlzcGxheVRyZWUoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGRpc3BsYXlUcmVlSW50ZXJuYWwoKS0+cmVtb3ZlKEFTU0VS
VF9OT19FWENFUFRJT04pOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRU
UGFyc2VyLmNwcAkocmV2aXNpb24gMTY1NTUxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9XZWJWVFRQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBDYWJsZSBUZWxldmlzaW9uIExhYnMsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzk4LDcgKzM5OSw3IEBAIHZvaWQg
V2ViVlRUUGFyc2VyOjpjcmVhdGVOZXdSZWdpb24oKQogICAgIGlmICghbV9jdXJyZW50SGVhZGVy
VmFsdWUubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxUZXh0VHJhY2tS
ZWdpb24+IHJlZ2lvbiA9IFRleHRUcmFja1JlZ2lvbjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRl
eHRUcmFja1JlZ2lvbj4gcmVnaW9uID0gVGV4dFRyYWNrUmVnaW9uOjpjcmVhdGUoKm1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgcmVnaW9uLT5zZXRSZWdpb25TZXR0aW5ncyhtX2N1cnJl
bnRIZWFkZXJWYWx1ZSk7CiAKICAgICAvLyAxNS41LjEwIElmIHRoZSB0ZXh0IHRyYWNrIGxpc3Qg
b2YgcmVnaW9ucyByZWdpb25zIGNvbnRhaW5zIGEgcmVnaW9uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVlRUQ3VlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVlRUQ3VlLmNwcAkocmV2aXNpb24gMTY1NTUxKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZUVEN1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIFZpY3RvciBDYXJidW5lICh2aWN0
b3JAcm9zZWR1Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw2ICs0
NywxNSBAQCB2b2lkIFJlbmRlclZUVEN1ZTo6bGF5b3V0KCkKICAgICBTdGFja1N0YXRzOjpMYXlv
dXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgUmVuZGVyQmxvY2tGbG93OjpsYXlv
dXQoKTsKIAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICAvLyBJZiBXZWJWVFQgUmVn
aW9ucyBhcmUgdXNlZCwgdGhlIHJlZ3VsYXIgV2ViVlRUIGxheW91dCBhbGdvcml0aG0gaXMgbm8K
KyAgICAvLyBsb25nZXIgbmVjZXNzYXJ5LCBzaW5jZSBjdWVzIGhhdmluZyB0aGUgcmVnaW9uIHBh
cmFtZXRlciBzZXQgZG8gbm90IGhhdmUKKyAgICAvLyBhbnkgcG9zaXRpb25pbmcgcGFyYW1ldGVy
cy4gQWxzbywgaW4gdGhpcyBjYXNlLCB0aGUgcmVnaW9ucyB0aGVtc2VsdmVzCisgICAgLy8gaGF2
ZSBwb3NpdGlvbmluZyBpbmZvcm1hdGlvbi4KKyAgICBpZiAoIW1fY3VlLT5yZWdpb25JZCgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBMYXlvdXRTdGF0ZU1haW50
YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCAqdGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFzVHJh
bnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8IHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSk7CiAgICAgCiAgICAgaWYgKG1fY3VlLT5jdWVUeXBlKCk9PSBUZXh0VHJhY2tD
dWU6OldlYlZUVCkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226754</attachid>
            <date>2014-03-14 12:57:05 -0700</date>
            <delta_ts>2014-03-17 13:58:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109822-20140314125642.patch</filename>
            <type>text/plain</type>
            <size>26447</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE0LTAzLTEzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJWVFRdIEV4dGVuZGlu
ZyBXZWJWVFQgUmVuZGVyaW5nIHdpdGggUmVnaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5ODIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTWVyZ2VkIGZyb20gQmxpbmsgKHBhdGNoIGJ5IFZpY3Rv
ciBDYXJidW5lIHZjYXJidW5lQGNocm9taXVtLm9yZyk6CisgICAgICAgIGh0dHBzOi8vY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rLzBjZGViYzFkNzZkNDFiZmNiOWM0
YjAyMmU1NGE0ZmJmZjEzMjIyNWQKKworICAgICAgICBObyBuZXcgdGVzdHMsIGFzIHRoaXMgZmVh
dHVyZSBpcyBub3QgYWN0aXZlIGluIGRlZmF1bHQgYnVpbGRzLiBOZXcgdGVzdHMgd2lsbCBiZSBh
ZGRlZAorICAgICAgICBpbiBhbiB1cGNvbWluZyBidWcuCisKKyAgICAgICAgKiBjc3MvbWVkaWFD
b250cm9scy5jc3M6CisgICAgICAgICh2aWRlbzo6LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLXJl
Z2lvbik6CisgICAgICAgICh2aWRlbzo6LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLXJlZ2lvbi1j
b250YWluZXIpOgorICAgICAgICAodmlkZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1yZWdp
b24tY29udGFpbmVyLnNjcm9sbGluZyk6CisgICAgICAgICh2aWRlbzo6LXdlYmtpdC1tZWRpYS10
ZXh0LXRyYWNrLWRpc3BsYXkpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRy
YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6flRleHRUcmFjayk6CisgICAg
ICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwOgorICAgICAgICAqIGh0bWwvdHJhY2sv
VGV4dFRyYWNrUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbjo6
VGV4dFRyYWNrUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbjo6dGV4
dFRyYWNrQ3VlQ29udGFpbmVyU2Nyb2xsaW5nQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFRyYWNrUmVnaW9uOjp0ZXh0VHJhY2tDdWVDb250YWluZXJTaGFkb3dQc2V1ZG9JZCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0VHJhY2tSZWdpb246OnRleHRUcmFja1JlZ2lvblNoYWRvd1BzZXVk
b0lkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbjo6YXBwZW5kVGV4dFRyYWNr
Q3VlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbjo6ZGlzcGxheUxhc3RU
ZXh0VHJhY2tDdWVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjp3aWxs
UmVtb3ZlVGV4dFRyYWNrQ3VlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lv
bjo6Z2V0RGlzcGxheVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpw
cmVwYXJlUmVnaW9uRGlzcGxheVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVn
aW9uOjpzdGFydFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbjo6c3Rv
cFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbjo6c2Nyb2xsVGltZXJG
aXJlZCk6CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uaDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRUcmFja1JlZ2lvbjo6aXNTY3JvbGxpbmdSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFRyYWNrUmVnaW9uOjpvd25lckRvY3VtZW50KToKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRU
cmFja1JlZ2lvbi5pZGw6CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb25MaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbkxpc3Q6OmdldFJlZ2lvbkJ5
SWQpOgorICAgICAgICAqIGh0bWwvdHJhY2svVlRUQ3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlZUVEN1ZUJveDo6YXBwbHlDU1NQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1
ZTo6flZUVEN1ZSk6CisgICAgICAgIChXZWJDb3JlOjpWVFRDdWU6OnNldElzQWN0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6cmVtb3ZlRGlzcGxheVRyZWUpOgorICAgICAgICAqIGh0
bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNl
cjo6Y3JlYXRlTmV3UmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVlRUQ3VlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZUVEN1ZTo6bGF5b3V0KToKKwogMjAxNC0wMy0x
NCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaCB3
aGVuIHVzaW5nIGEgbWl4dHVyZSBvZiBJbi1CYW5kIGFuZCBPdXQtb2YtQmFuZCBUcmFja3MKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzLmNzcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MJKHJldmlzaW9uIDE2NTYzNykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzLmNzcwkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwg
MjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDQsMTIgKzI0NCwzNiBAQCB2aWRlbzo6Y3Vl
IHsKICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiB9CiAKK3ZpZGVv
Ojotd2Via2l0LW1lZGlhLXRleHQtdHJhY2stcmVnaW9uIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgICAgbGluZS1oZWlnaHQ6IDUuMzN2aDsKKyAgICB3cml0aW5nLW1vZGU6IGhvcml6b250
YWwtdGI7CisgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOworICAgIGNvbG9yOiBy
Z2JhKDI1NSwgMjU1LCAyNTUsIDEpOworICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKKyAgICBv
dmVyZmxvdy13cmFwOiBicmVhay13b3JkOworICAgIG92ZXJmbG93OiBoaWRkZW47Cit9CisKK3Zp
ZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJhY2stcmVnaW9uLWNvbnRhaW5lciB7CisgICAgcG9z
aXRpb246IHJlbGF0aXZlOworCisgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OworICAgIC13ZWJr
aXQtZmxleC1mbG93OiBjb2x1bW47CisgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1u
OworfQorCit2aWRlbzo6LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLXJlZ2lvbi1jb250YWluZXIu
c2Nyb2xsaW5nIHsKKyAgICAtd2Via2l0LXRyYW5zaXRpb246IHRvcCA0MzNtcyBsaW5lYXI7Cit9
CisKIHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJhY2stZGlzcGxheSB7CiAgICAgcG9zaXRp
b246IGFic29sdXRlOwogICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgd2hpdGUtc3BhY2U6IHBy
ZS13cmFwOwogICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICBmb250OiAy
MnB4IHNhbnMtc2VyaWY7CisgICAgLXdlYmtpdC1mbGV4OiAwIDAgYXV0bzsKIH0KIAogdmlkZW86
OmN1ZSg6ZnV0dXJlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAxNjU2MzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDYgKzU5LDEwIEBACiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjZW5kaWYK
IAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyNpbmNsdWRlICJUZXh0VHJhY2tSZWdpb25M
aXN0LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwpAQCAtMTI5MiwxMSArMTI5NiwzMiBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBSZWZQ
dHI8VlRUQ3VlQm94PiBkaXNwbGF5Qm94ID0gY3VlLT5nZXREaXNwbGF5VHJlZShtX3ZpZGVvRGlz
cGxheVNpemUuc2l6ZSgpKTsKLSAgICAgICAgaWYgKGRpc3BsYXlCb3gtPmhhc0NoaWxkTm9kZXMo
KSAmJiAhY29udGFpbnMoZGlzcGxheUJveC5nZXQoKSkpIHsKLSAgICAgICAgICAgIC8vIE5vdGU6
IHRoZSBkaXNwbGF5IHRyZWUgb2YgYSBjdWUgaXMgcmVtb3ZlZCB3aGVuIHRoZSBhY3RpdmUgZmxh
ZyBvZiB0aGUgY3VlIGlzIHVuc2V0LgotICAgICAgICAgICAgYXBwZW5kQ2hpbGQoZGlzcGxheUJv
eCwgQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICBjdWUtPnNldEZvbnRTaXplKG1f
Zm9udFNpemUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemVJc0ltcG9ydGFu
dCk7CisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgICAgICBTdHJpbmcgcmVnaW9uSWQg
PSBjdWUtPnJlZ2lvbklkKCk7CisgICAgICAgIFRleHRUcmFja1JlZ2lvbiogcmVnaW9uID0gY3Vl
LT50cmFjaygpLT5yZWdpb25zKCktPmdldFJlZ2lvbkJ5SWQocmVnaW9uSWQpOworICAgICAgICBp
ZiAoIXJlZ2lvbikgeworICAgICAgICAgICAgLy8gSWYgY3VlIGhhcyBhbiBlbXB0eSB0ZXh0IHRy
YWNrIGN1ZSByZWdpb24gaWRlbnRpZmllciBvciB0aGVyZSBpcyBubworICAgICAgICAgICAgLy8g
V2ViVlRUIHJlZ2lvbiB3aG9zZSByZWdpb24gaWRlbnRpZmllciBpcyBpZGVudGljYWwgdG8gY3Vl
J3MgdGV4dAorICAgICAgICAgICAgLy8gdHJhY2sgY3VlIHJlZ2lvbiBpZGVudGlmaWVyLCBydW4g
dGhlIGZvbGxvd2luZyBzdWJzdGVwczoKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGRpc3BsYXlC
b3gtPmhhc0NoaWxkTm9kZXMoKSAmJiAhY29udGFpbnMoZGlzcGxheUJveC5nZXQoKSkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBOb3RlOiB0aGUgZGlzcGxheSB0cmVlIG9mIGEgY3VlIGlzIHJlbW92
ZWQgd2hlbiB0aGUgYWN0aXZlIGZsYWcgb2YgdGhlIGN1ZSBpcyB1bnNldC4KKyAgICAgICAgICAg
ICAgICBhcHBlbmRDaGlsZChkaXNwbGF5Qm94LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAg
ICAgICAgICAgICBjdWUtPnNldEZvbnRTaXplKG1fZm9udFNpemUsIG1fdmlkZW9EaXNwbGF5U2l6
ZS5zaXplKCksIG1fZm9udFNpemVJc0ltcG9ydGFudCk7CisgICAgICAgICAgICB9CisjaWYgRU5B
QkxFKFdFQlZUVF9SRUdJT05TKQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTGV0
IHJlZ2lvbiBiZSB0aGUgV2ViVlRUIHJlZ2lvbiB3aG9zZSByZWdpb24gaWRlbnRpZmllcgorICAg
ICAgICAgICAgLy8gbWF0Y2hlcyB0aGUgdGV4dCB0cmFjayBjdWUgcmVnaW9uIGlkZW50aWZpZXIg
b2YgY3VlLgorICAgICAgICAgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiByZWdpb25Ob2RlID0g
cmVnaW9uLT5nZXREaXNwbGF5VHJlZSgpOworCisgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIHJl
Z2lvbiB0byB0aGUgdmlld3BvcnQsIGlmIGl0IHdhcyBub3QgYWxyZWFkeS4KKyAgICAgICAgICAg
IGlmICghY29udGFpbnMocmVnaW9uTm9kZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgYXBwZW5k
Q2hpbGQocmVnaW9uLT5nZXREaXNwbGF5VHJlZSgpKTsKKworICAgICAgICAgICAgcmVnaW9uLT5h
cHBlbmRUZXh0VHJhY2tDdWVCb3goZGlzcGxheUJveCk7CiAgICAgICAgIH0KKyNlbmRpZgogICAg
IH0KIAogICAgIC8vIDExLiBSZXR1cm4gb3V0cHV0LgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9UZXh0VHJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVGV4dFRyYWNrLmNwcAkocmV2aXNpb24gMTY1NjM3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMzksOCArMTM5LDEwIEBAIFRleHRU
cmFjazo6flRleHRUcmFjaygpCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdWVz
LT5sZW5ndGgoKTsgKytpKQogICAgICAgICAgICAgbV9jdWVzLT5pdGVtKGkpLT5zZXRUcmFjaygw
KTsKICNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9yZWdpb25zLT5sZW5ndGgoKTsgKytpKQotICAgICAgICAgICAgbV9yZWdpb25zLT5p
dGVtKGkpLT5zZXRUcmFjaygwKTsKKyAgICAgICAgaWYgKG1fcmVnaW9ucykgeworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlZ2lvbnMtPmxlbmd0aCgpOyArK2kpCisgICAg
ICAgICAgICAgICAgbV9yZWdpb25zLT5pdGVtKGkpLT5zZXRUcmFjaygwKTsKKyAgICAgICAgfQog
I2VuZGlmCiAgICAgfQogICAgIGNsZWFyQ2xpZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCShyZXZpc2lvbiAxNjU2MzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC01MCw2ICs1MCwxMCBAQAogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisj
aWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorI2luY2x1ZGUgIlRleHRUcmFja1JlZ2lvbkxpc3Qu
aCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBpbnQgaW52
YWxpZEN1ZUluZGV4ID0gLTE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja1JlZ2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2tSZWdpb24uY3BwCShyZXZpc2lvbiAxNjU2MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNCwxMyArMzUs
MjAgQEAKIAogI2luY2x1ZGUgIlRleHRUcmFja1JlZ2lvbi5oIgogCisjaW5jbHVkZSAiQ2xpZW50
UmVjdC5oIgorI2luY2x1ZGUgIkRPTVRva2VuTGlzdC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGVQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgIlZUVEN1ZS5oIgogI2luY2x1ZGUgIldlYlZUVFBhcnNlci5o
IgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Ly8gVGhlIGZvbGxvd2luZyB2YWx1ZXMgZGVmYXVsdCB2YWx1ZXMgYXJlIGRlZmluZWQgd2l0aGlu
IHRoZSBXZWJWVFQgUmVnaW9ucyBTcGVjLgorLy8gaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy90ZXh0
LXRyYWNrcy9yYXctZmlsZS9kZWZhdWx0LzYwOHRvVlRUL3JlZ2lvbi5odG1sCisKIC8vIFRoZSBy
ZWdpb24gb2NjdXBpZXMgYnkgZGVmYXVsdCAxMDAlIG9mIHRoZSB3aWR0aCBvZiB0aGUgdmlkZW8g
dmlld3BvcnQuCiBzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFdpZHRoID0gMTAwOwogCkBAIC01
NCwxNCArNjIsMjUgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRBbmNob3JQb2ludFkgPQog
Ly8gVGhlIHJlZ2lvbiBkb2Vzbid0IGhhdmUgc2Nyb2xsaW5nIHRleHQsIGJ5IGRlZmF1bHQuCiBz
dGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0U2Nyb2xsID0gZmFsc2U7CiAKLVRleHRUcmFja1JlZ2lv
bjo6VGV4dFRyYWNrUmVnaW9uKCkKLSAgICA6IG1faWQoZW1wdHlTdHJpbmcoKSkKKy8vIERlZmF1
bHQgcmVnaW9uIGxpbmUtaGVpZ2h0ICh2aCB1bml0cykKK3N0YXRpYyBjb25zdCBmbG9hdCBsaW5l
SGVpZ2h0ID0gNS4zMzsKKworLy8gRGVmYXVsdCBzY3JvbGxpbmcgYW5pbWF0aW9uIHRpbWUgcGVy
aW9kIChzKS4KK3N0YXRpYyBjb25zdCBmbG9hdCBzY3JvbGxUaW1lID0gMC40MzM7CisKK1RleHRU
cmFja1JlZ2lvbjo6VGV4dFRyYWNrUmVnaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQpCisgICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcigmY29udGV4dCkKKyAgICAsIG1f
aWQoZW1wdHlTdHJpbmcoKSkKICAgICAsIG1fd2lkdGgoZGVmYXVsdFdpZHRoKQogICAgICwgbV9o
ZWlnaHRJbkxpbmVzKGRlZmF1bHRIZWlnaHRJbkxpbmVzKQogICAgICwgbV9yZWdpb25BbmNob3Io
RmxvYXRQb2ludChkZWZhdWx0QW5jaG9yUG9pbnRYLCBkZWZhdWx0QW5jaG9yUG9pbnRZKSkKICAg
ICAsIG1fdmlld3BvcnRBbmNob3IoRmxvYXRQb2ludChkZWZhdWx0QW5jaG9yUG9pbnRYLCBkZWZh
dWx0QW5jaG9yUG9pbnRZKSkKICAgICAsIG1fc2Nyb2xsKGRlZmF1bHRTY3JvbGwpCi0gICAgLCBt
X3RyYWNrKDApCisgICAgLCBtX3JlZ2lvbkRpc3BsYXlUcmVlKG51bGxwdHIpCisgICAgLCBtX2N1
ZUNvbnRhaW5lcihudWxscHRyKQorICAgICwgbV90cmFjayhudWxscHRyKQorICAgICwgbV9jdXJy
ZW50VG9wKDApCisgICAgLCBtX3Njcm9sbFRpbWVyKHRoaXMsICZUZXh0VHJhY2tSZWdpb246OnNj
cm9sbFRpbWVyRmlyZWQpCiB7CiB9CiAKQEAgLTMwOSw2ICszMjgsMTY1IEBAIHZvaWQgVGV4dFRy
YWNrUmVnaW9uOjpwYXJzZVNldHRpbmcoY29uc3QKIAogICAgIHBhcnNlU2V0dGluZ1ZhbHVlKG5h
bWUsIHZhbHVlKTsKIH0KKyAgICAKK2NvbnN0IEF0b21pY1N0cmluZyYgVGV4dFRyYWNrUmVnaW9u
Ojp0ZXh0VHJhY2tDdWVDb250YWluZXJTY3JvbGxpbmdDbGFzcygpCit7CisgICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgdHJhY2tSZWdpb25DdWVD
b250YWluZXJTY3JvbGxpbmdDbGFzcywgKCJzY3JvbGxpbmciLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSk7CisKKyAgICByZXR1cm4gdHJhY2tSZWdpb25DdWVDb250YWluZXJT
Y3JvbGxpbmdDbGFzczsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBUZXh0VHJhY2tSZWdpb246
OnRleHRUcmFja0N1ZUNvbnRhaW5lclNoYWRvd1BzZXVkb0lkKCkKK3sKKyAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCB0cmFja1JlZ2lvbkN1ZUNv
bnRhaW5lclBzZXVkb0lkLAorICAgICAgICAoIi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1yZWdp
b24tY29udGFpbmVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworCisg
ICAgcmV0dXJuIHRyYWNrUmVnaW9uQ3VlQ29udGFpbmVyUHNldWRvSWQ7Cit9CisKK2NvbnN0IEF0
b21pY1N0cmluZyYgVGV4dFRyYWNrUmVnaW9uOjp0ZXh0VHJhY2tSZWdpb25TaGFkb3dQc2V1ZG9J
ZCgpCit7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0
cmluZywgdHJhY2tSZWdpb25TaGFkb3dQc2V1ZG9JZCwKKyAgICAgICAgKCItd2Via2l0LW1lZGlh
LXRleHQtdHJhY2stcmVnaW9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
OworCisgICAgcmV0dXJuIHRyYWNrUmVnaW9uU2hhZG93UHNldWRvSWQ7Cit9CisKK3ZvaWQgVGV4
dFRyYWNrUmVnaW9uOjphcHBlbmRUZXh0VHJhY2tDdWVCb3goUGFzc1JlZlB0cjxWVFRDdWVCb3g+
IGRpc3BsYXlCb3gpCit7CisgICAgaWYgKG1fY3VlQ29udGFpbmVyLT5jb250YWlucyhkaXNwbGF5
Qm94LmdldCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdWVDb250YWluZXItPmFwcGVu
ZENoaWxkKGRpc3BsYXlCb3gsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIGRpc3BsYXlMYXN0
VGV4dFRyYWNrQ3VlQm94KCk7Cit9CisKK3ZvaWQgVGV4dFRyYWNrUmVnaW9uOjpkaXNwbGF5TGFz
dFRleHRUcmFja0N1ZUJveCgpCit7CisgICAgTE9HKE1lZGlhLCAiVGV4dFRyYWNrUmVnaW9uOjpk
aXNwbGF5TGFzdFRleHRUcmFja0N1ZUJveCIpOworICAgIEFTU0VSVChtX2N1ZUNvbnRhaW5lcik7
CisKKyAgICAvLyBUaGUgY29udGFpbmVyIG5lZWRzIHRvIGJlIHJlbmRlcmVkLCBpZiBpdCBpcyBu
b3QgZW1wdHkgYW5kIHRoZSByZWdpb24gaXMgbm90IGN1cnJlbnRseSBzY3JvbGxpbmcuCisgICAg
aWYgKCFtX2N1ZUNvbnRhaW5lci0+cmVuZGVyZXIoKSB8fCAhbV9jdWVDb250YWluZXItPmNoaWxk
Tm9kZUNvdW50KCkgfHwgbV9zY3JvbGxUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBJZiBpdCdzIGEgc2Nyb2xsaW5nIHJlZ2lvbiwgYWRkIHRoZSBzY3JvbGxpbmcg
Y2xhc3MuCisgICAgaWYgKGlzU2Nyb2xsaW5nUmVnaW9uKCkpCisgICAgICAgIG1fY3VlQ29udGFp
bmVyLT5jbGFzc0xpc3QoKS0+YWRkKHRleHRUcmFja0N1ZUNvbnRhaW5lclNjcm9sbGluZ0NsYXNz
KCksIElHTk9SRV9FWENFUFRJT04pOworCisgICAgZmxvYXQgcmVnaW9uQm90dG9tID0gbV9yZWdp
b25EaXNwbGF5VHJlZS0+Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCktPmJvdHRvbSgpOworCisgICAg
Ly8gRmluZCBmaXJzdCBjdWUgdGhhdCBpcyBub3QgZW50aXJlbHkgZGlzcGxheWVkIGFuZCBzY3Jv
bGwgaXQgdXB3YXJkcy4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VlQ29udGFpbmVy
LT5jaGlsZE5vZGVDb3VudCgpICYmICFtX3Njcm9sbFRpbWVyLmlzQWN0aXZlKCk7ICsraSkgewor
ICAgICAgICBmbG9hdCBjaGlsZFRvcCA9IHN0YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50Kj4obV9j
dWVDb250YWluZXItPmNoaWxkTm9kZShpKSktPmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLT50b3Ao
KTsKKyAgICAgICAgZmxvYXQgY2hpbGRCb3R0b20gPSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVu
dCo+KG1fY3VlQ29udGFpbmVyLT5jaGlsZE5vZGUoaSkpLT5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KS0+Ym90dG9tKCk7CisKKyAgICAgICAgaWYgKHJlZ2lvbkJvdHRvbSA+PSBjaGlsZEJvdHRvbSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZsb2F0IGhlaWdodCA9IGNoaWxkQm90
dG9tIC0gY2hpbGRUb3A7CisKKyAgICAgICAgbV9jdXJyZW50VG9wIC09IHN0ZDo6bWluKGhlaWdo
dCwgY2hpbGRCb3R0b20gLSByZWdpb25Cb3R0b20pOworICAgICAgICBtX2N1ZUNvbnRhaW5lci0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgbV9jdXJyZW50VG9wLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKworICAgICAgICBzdGFydFRpbWVyKCk7CisgICAgfQor
fQorCit2b2lkIFRleHRUcmFja1JlZ2lvbjo6d2lsbFJlbW92ZVRleHRUcmFja0N1ZUJveChWVFRD
dWVCb3gqIGJveCkKK3sKKyAgICBMT0coTWVkaWEsICJUZXh0VHJhY2tSZWdpb246OndpbGxSZW1v
dmVUZXh0VHJhY2tDdWVCb3giKTsKKyAgICBBU1NFUlQobV9jdWVDb250YWluZXItPmNvbnRhaW5z
KGJveCkpOworCisgICAgZG91YmxlIGJveEhlaWdodCA9IGJveC0+Z2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCktPmJvdHRvbSgpIC0gYm94LT5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS0+dG9wKCk7CisK
KyAgICBtX2N1ZUNvbnRhaW5lci0+Y2xhc3NMaXN0KCktPnJlbW92ZSh0ZXh0VHJhY2tDdWVDb250
YWluZXJTY3JvbGxpbmdDbGFzcygpLCBJR05PUkVfRVhDRVBUSU9OKTsKKworICAgIG1fY3VycmVu
dFRvcCArPSBib3hIZWlnaHQ7CisgICAgbV9jdWVDb250YWluZXItPnNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlUb3AsIG1fY3VycmVudFRvcCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCk7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTERpdkVsZW1lbnQ+IFRleHRUcmFja1JlZ2lvbjo6
Z2V0RGlzcGxheVRyZWUoKQoreworICAgIGlmICghbV9yZWdpb25EaXNwbGF5VHJlZSkgeworICAg
ICAgICBtX3JlZ2lvbkRpc3BsYXlUcmVlID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZSgqb3duZXJE
b2N1bWVudCgpKTsKKyAgICAgICAgcHJlcGFyZVJlZ2lvbkRpc3BsYXlUcmVlKCk7CisgICAgfQor
CisgICAgcmV0dXJuIG1fcmVnaW9uRGlzcGxheVRyZWU7Cit9CisKK3ZvaWQgVGV4dFRyYWNrUmVn
aW9uOjpwcmVwYXJlUmVnaW9uRGlzcGxheVRyZWUoKQoreworICAgIEFTU0VSVChtX3JlZ2lvbkRp
c3BsYXlUcmVlKTsKKworICAgIC8vIDcuMiBQcmVwYXJlIHJlZ2lvbiBDU1MgYm94ZXMKKworICAg
IC8vIEZJWE1FOiBDaGFuZ2UgdGhlIGNvZGUgYmVsb3cgdG8gdXNlIHZpZXdwb3J0IHVuaXRzIHdo
ZW4KKyAgICAvLyBodHRwOi8vY3JidWcvMjQ0NjE4IGlzIGZpeGVkLgorCisgICAgLy8gTGV0IHJl
Z2lvbldpZHRoIGJlIHRoZSB0ZXh0IHRyYWNrIHJlZ2lvbiB3aWR0aC4KKyAgICAvLyBMZXQgd2lk
dGggYmUgJ3JlZ2lvbldpZHRoIHZ3JyAoJ3Z3JyBpcyBhIENTUyB1bml0KQorICAgIG1fcmVnaW9u
RGlzcGxheVRyZWUtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgbV93
aWR0aCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKworICAgIC8vIExldCBs
aW5lSGVpZ2h0IGJlICcwLjA1MzN2aCcgKCd2aCcgaXMgYSBDU1MgdW5pdCkgYW5kIHJlZ2lvbkhl
aWdodCBiZQorICAgIC8vIHRoZSB0ZXh0IHRyYWNrIHJlZ2lvbiBoZWlnaHQuIExldCBoZWlnaHQg
YmUgJ2xpbmVIZWlnaHQnIG11bHRpcGxpZWQKKyAgICAvLyBieSByZWdpb25IZWlnaHQuCisgICAg
ZG91YmxlIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBtX2hlaWdodEluTGluZXM7CisgICAgbV9yZWdp
b25EaXNwbGF5VHJlZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwg
aGVpZ2h0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZIKTsKKworICAgIC8vIExldCB2aWV3cG9y
dEFuY2hvclggYmUgdGhlIHggZGltZW5zaW9uIG9mIHRoZSB0ZXh0IHRyYWNrIHJlZ2lvbiB2aWV3
cG9ydAorICAgIC8vIGFuY2hvciBhbmQgcmVnaW9uQW5jaG9yWCBiZSB0aGUgeCBkaW1lbnNpb24g
b2YgdGhlIHRleHQgdHJhY2sgcmVnaW9uCisgICAgLy8gYW5jaG9yLiBMZXQgbGVmdE9mZnNldCBi
ZSByZWdpb25BbmNob3JYIG11bHRpcGxpZWQgYnkgd2lkdGggZGl2aWRlZCBieQorICAgIC8vIDEw
MC4wLiBMZXQgbGVmdCBiZSBsZWZ0T2Zmc2V0IHN1YnRyYWN0ZWQgZnJvbSAndmlld3BvcnRBbmNo
b3JYIHZ3Jy4KKyAgICBkb3VibGUgbGVmdE9mZnNldCA9IG1fcmVnaW9uQW5jaG9yLngoKSAqIG1f
d2lkdGggLyAxMDA7CisgICAgbV9yZWdpb25EaXNwbGF5VHJlZS0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIG1fdmlld3BvcnRBbmNob3IueCgpIC0gbGVmdE9mZnNldCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKworICAgIC8vIExldCB2aWV3cG9y
dEFuY2hvclkgYmUgdGhlIHkgZGltZW5zaW9uIG9mIHRoZSB0ZXh0IHRyYWNrIHJlZ2lvbiB2aWV3
cG9ydAorICAgIC8vIGFuY2hvciBhbmQgcmVnaW9uQW5jaG9yWSBiZSB0aGUgeSBkaW1lbnNpb24g
b2YgdGhlIHRleHQgdHJhY2sgcmVnaW9uCisgICAgLy8gYW5jaG9yLiBMZXQgdG9wT2Zmc2V0IGJl
IHJlZ2lvbkFuY2hvclkgbXVsdGlwbGllZCBieSBoZWlnaHQgZGl2aWRlZCBieQorICAgIC8vIDEw
MC4wLiBMZXQgdG9wIGJlIHRvcE9mZnNldCBzdWJ0cmFjdGVkIGZyb20gJ3ZpZXdwb3J0QW5jaG9y
WSB2aCcuCisgICAgZG91YmxlIHRvcE9mZnNldCA9IG1fcmVnaW9uQW5jaG9yLnkoKSAqIGhlaWdo
dCAvIDEwMDsKKyAgICBtX3JlZ2lvbkRpc3BsYXlUcmVlLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5VG9wLCBtX3ZpZXdwb3J0QW5jaG9yLnkoKSAtIHRvcE9mZnNldCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKworICAgIC8vIFRoZSBjdWUgY29udGFpbmVy
IGlzIHVzZWQgdG8gd3JhcCB0aGUgY3VlcyBhbmQgaXQgaXMgdGhlIG9iamVjdCB3aGljaCBpcwor
ICAgIC8vIGdyYWR1YWxseSBzY3JvbGxlZCBvdXQgYXMgbXVsdGlwbGUgY3VlcyBhcmUgYXBwZW5k
ZWQgdG8gdGhlIHJlZ2lvbi4KKyAgICBtX2N1ZUNvbnRhaW5lciA9IEhUTUxEaXZFbGVtZW50Ojpj
cmVhdGUoKm93bmVyRG9jdW1lbnQoKSk7CisgICAgbV9jdWVDb250YWluZXItPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIDAuMGYsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpOworCisgICAgbV9jdWVDb250YWluZXItPnNldFBzZXVkbyh0ZXh0VHJhY2tDdWVDb250YWlu
ZXJTaGFkb3dQc2V1ZG9JZCgpKTsKKyAgICBtX3JlZ2lvbkRpc3BsYXlUcmVlLT5hcHBlbmRDaGls
ZChtX2N1ZUNvbnRhaW5lcik7CisKKyAgICAvLyA3LjUgRXZlcnkgV2ViVlRUIHJlZ2lvbiBvYmpl
Y3QgaXMgaW5pdGlhbGlzZWQgd2l0aCB0aGUgZm9sbG93aW5nIENTUworICAgIG1fcmVnaW9uRGlz
cGxheVRyZWUtPnNldFBzZXVkbyh0ZXh0VHJhY2tSZWdpb25TaGFkb3dQc2V1ZG9JZCgpKTsKK30K
Kwordm9pZCBUZXh0VHJhY2tSZWdpb246OnN0YXJ0VGltZXIoKQoreworICAgIExPRyhNZWRpYSwg
IlRleHRUcmFja1JlZ2lvbjo6c3RhcnRUaW1lciIpOworCisgICAgaWYgKG1fc2Nyb2xsVGltZXIu
aXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIGR1cmF0aW9uID0gaXNT
Y3JvbGxpbmdSZWdpb24oKSA/IHNjcm9sbFRpbWUgOiAwOworICAgIG1fc2Nyb2xsVGltZXIuc3Rh
cnRPbmVTaG90KGR1cmF0aW9uKTsKK30KKwordm9pZCBUZXh0VHJhY2tSZWdpb246OnN0b3BUaW1l
cigpCit7CisgICAgTE9HKE1lZGlhLCAiVGV4dFRyYWNrUmVnaW9uOjpzdG9wVGltZXIiKTsKKwor
ICAgIGlmIChtX3Njcm9sbFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fc2Nyb2xsVGltZXIu
c3RvcCgpOworfQorCit2b2lkIFRleHRUcmFja1JlZ2lvbjo6c2Nyb2xsVGltZXJGaXJlZChUaW1l
cjxUZXh0VHJhY2tSZWdpb24+KikKK3sKKyAgICBMT0coTWVkaWEsICJUZXh0VHJhY2tSZWdpb246
OnNjcm9sbFRpbWVyRmlyZWQiKTsKKworICAgIHN0b3BUaW1lcigpOworICAgIGRpc3BsYXlMYXN0
VGV4dFRyYWNrQ3VlQm94KCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5oCShyZXZpc2lvbiAx
NjU2MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQpAQCAtMzMsMTcgKzM0LDIyIEBACiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
ICYmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKIAorI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlv
bk9ic2VydmVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNrLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBUZXh0VHJhY2tSZWdpb24gOiBwdWJsaWMg
UmVmQ291bnRlZDxUZXh0VHJhY2tSZWdpb24+IHsKK2NsYXNzIEhUTUxEaXZFbGVtZW50OworY2xh
c3MgVlRUQ3VlQm94OworCitjbGFzcyBUZXh0VHJhY2tSZWdpb24gOiBwdWJsaWMgUmVmQ291bnRl
ZDxUZXh0VHJhY2tSZWdpb24+LCBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRUcmFja1JlZ2lvbj4gY3JlYXRlKCkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0VHJhY2tSZWdpb24+IGNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXh0VHJhY2tSZWdpb24oKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dFRy
YWNrUmVnaW9uKGNvbnRleHQpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5UZXh0VHJhY2tSZWdp
b24oKTsKQEAgLTgwLDggKzg2LDI1IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHJlZ2lv
blNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQogICAgIHZvaWQgc2V0UmVn
aW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CiAKKyAgICBib29sIGlzU2Nyb2xsaW5nUmVnaW9u
KCkgeyByZXR1cm4gbV9zY3JvbGw7IH0KKworICAgIFBhc3NSZWZQdHI8SFRNTERpdkVsZW1lbnQ+
IGdldERpc3BsYXlUcmVlKCk7CisgICAgCisgICAgdm9pZCBhcHBlbmRUZXh0VHJhY2tDdWVCb3go
UGFzc1JlZlB0cjxWVFRDdWVCb3g+KTsKKyAgICB2b2lkIGRpc3BsYXlMYXN0VGV4dFRyYWNrQ3Vl
Qm94KCk7CisgICAgdm9pZCB3aWxsUmVtb3ZlVGV4dFRyYWNrQ3VlQm94KFZUVEN1ZUJveCopOwor
CiBwcml2YXRlOgotICAgIFRleHRUcmFja1JlZ2lvbigpOworICAgIFRleHRUcmFja1JlZ2lvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CisKKyAgICBEb2N1bWVudCogb3duZXJEb2N1bWVudCgp
IHsgcmV0dXJuIHRvRG9jdW1lbnQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsgfQorCisgICAg
dm9pZCBwcmVwYXJlUmVnaW9uRGlzcGxheVRyZWUoKTsKKworICAgIC8vIFRoZSB0aW1lciBpcyBu
ZWVkZWQgdG8gY29udGludWUgcHJvY2Vzc2luZyB3aGVuIGN1ZSBzY3JvbGxpbmcgZW5kZWQuCisg
ICAgdm9pZCBzdGFydFRpbWVyKCk7CisgICAgdm9pZCBzdG9wVGltZXIoKTsKKyAgICB2b2lkIHNj
cm9sbFRpbWVyRmlyZWQoVGltZXI8VGV4dFRyYWNrUmVnaW9uPiopOwogCiAgICAgZW51bSBSZWdp
b25TZXR0aW5nIHsKICAgICAgICAgTm9uZSwKQEAgLTk4LDYgKzEyMSwxMCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGFyc2VTZXR0aW5nVmFsdWUoUmVnaW9uU2V0dGluZywgY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBwYXJzZVNldHRpbmcoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQqKTsKIAorICAg
IHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHRleHRUcmFja0N1ZUNvbnRhaW5lclNoYWRvd1Bz
ZXVkb0lkKCk7CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgdGV4dFRyYWNrQ3VlQ29u
dGFpbmVyU2Nyb2xsaW5nQ2xhc3MoKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiB0
ZXh0VHJhY2tSZWdpb25TaGFkb3dQc2V1ZG9JZCgpOworCiAgICAgU3RyaW5nIG1faWQ7CiAgICAg
U3RyaW5nIG1fc2V0dGluZ3M7CiAKQEAgLTEwOSwxMSArMTM2LDI3IEBAIHByaXZhdGU6CiAKICAg
ICBib29sIG1fc2Nyb2xsOwogCisgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBtX3JlZ2lvbkRp
c3BsYXlUcmVlOworCisgICAgLy8gVGhlIGN1ZSBjb250YWluZXIgaXMgdGhlIGNvbnRhaW5lciB0
aGF0IGlzIHNjcm9sbGVkIHVwIHRvIG9idGFpbiB0aGUKKyAgICAvLyBlZmZlY3Qgb2Ygc2Nyb2xs
aW5nIGN1ZXMgd2hlbiB0aGlzIGlzIGVuYWJsZWQgZm9yIHRoZSByZWdpb25zLgorICAgIFJlZlB0
cjxIVE1MRGl2RWxlbWVudD4gbV9jdWVDb250YWluZXI7CisKICAgICAvLyBUaGUgbWVtYmVyIHZh
cmlhYmxlIHRyYWNrIGNhbiBiZSBhIHJhdyBwb2ludGVyIGFzIGl0IHdpbGwgbmV2ZXIKICAgICAv
LyByZWZlcmVuY2UgYSBkZXN0cm95ZWQgVGV4dFRyYWNrLCBhcyB0aGlzIG1lbWJlciB2YXJpYWJs
ZQogICAgIC8vIGlzIGNsZWFyZWQgaW4gdGhlIFRleHRUcmFjayBkZXN0cnVjdG9yIGFuZCBpdCBp
cyBnZW5lcmFsbHkKICAgICAvLyBzZXQvcmVzZXQgd2l0aGluIHRoZSBhZGRSZWdpb24gYW5kIHJl
bW92ZVJlZ2lvbiBtZXRob2RzLgogICAgIFRleHRUcmFjayogbV90cmFjazsKKworICAgIC8vIEtl
ZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgbnVtZXJpYyB2YWx1ZSBvZiB0aGUgY3NzICJ0b3AiIHBy
b3BlcnR5LgorICAgIGRvdWJsZSBtX2N1cnJlbnRUb3A7CisKKyAgICAvLyBUaGUgdGltZXIgaXMg
dXNlZCB0byBkaXNwbGF5IHRoZSBuZXh0IGN1ZSBsaW5lIGFmdGVyIHRoZSBjdXJyZW50IG9uZSBo
YXMKKyAgICAvLyBiZWVuIGRpc3BsYXllZC4gSXQncyBtYWluIHVzZSBpcyBmb3Igc2Nyb2xsaW5n
IHJlZ2lvbnMgYW5kIGl0IHRyaWdnZXJzIGFzCisgICAgLy8gc29vbiBhcyB0aGUgYW5pbWF0aW9u
IGZvciByb2xsaW5nIG91dCBvbmUgbGluZSBoYXMgZmluaXNoZWQsIGJ1dAorICAgIC8vIGN1cnJl
bnRseSBpdCBpcyB1c2VkIGFsc28gZm9yIG5vbi1zY3JvbGxpbmcgcmVnaW9ucyB0byB1c2UgYSBz
aW5nbGUKKyAgICAvLyBjb2RlIHBhdGguCisgICAgVGltZXI8VGV4dFRyYWNrUmVnaW9uPiBtX3Nj
cm9sbFRpbWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmlkbAkocmV2aXNpb24gMTY1NjM3
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw3ICsyNyw4IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9VklERU9fVFJBQ0sgJiBX
RUJWVFRfUkVHSU9OUywKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgQ29uc3Ry
dWN0b3IoKQorICAgIENvbnN0cnVjdG9yKCksCisgICAgQ29uc3RydWN0b3JDYWxsV2l0aD1TY3Jp
cHRFeGVjdXRpb25Db250ZXh0CiBdIGludGVyZmFjZSBUZXh0VHJhY2tSZWdpb24gewogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBUZXh0VHJhY2sgdHJhY2s7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb25MaXN0LmNwcAkocmV2aXNpb24gMTY1
NjM3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb25MaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01MCwxMCArNTEsMTQgQEAgVGV4dFRyYWNrUmVnaW9uKiBUZXh0VHJhY2tS
ZWdpb25MaXN0OjppdAogCiBUZXh0VHJhY2tSZWdpb24qIFRleHRUcmFja1JlZ2lvbkxpc3Q6Omdl
dFJlZ2lvbkJ5SWQoY29uc3QgU3RyaW5nJiBpZCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fbGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9saXN0W2ldLT5p
ZCgpID09IGlkKQotICAgICAgICAgICAgcmV0dXJuIG1fbGlzdFtpXS5nZXQoKTsKKyAgICBpZiAo
aWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZvciAoY29uc3QgYXV0byYg
cmVnaW9uIDogbV9saXN0KSB7CisgICAgICAgIGlmIChyZWdpb24tPmlkKCkgPT0gaWQpCisgICAg
ICAgICAgICByZXR1cm4gcmVnaW9uLmdldCgpOwogICAgIH0KKwogICAgIHJldHVybiAwOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCShyZXZpc2lvbiAxNjU2Mzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDYgKzUxLDEwIEBACiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMp
CisjaW5jbHVkZSAiVGV4dFRyYWNrUmVnaW9uTGlzdC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGludCB1bmRlZmluZWRQb3NpdGlvbiA9IC0xOwpAQCAt
MTA3LDYgKzExMSwxMiBAQCBWVFRDdWUqIFZUVEN1ZUJveDo6Z2V0Q3VlKCkgY29uc3QKIHZvaWQg
VlRUQ3VlQm94OjphcHBseUNTU1Byb3BlcnRpZXMoY29uc3QgSW50U2l6ZSYpCiB7CiAgICAgLy8g
RklYTUU6IEFwcGx5IGFsbCB0aGUgaW5pdGlhbCBDU1MgcG9zaXRpb25pbmcgcHJvcGVydGllcy4g
aHR0cDovL3drYi51Zy83OTkxNgorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICBpZiAo
IW1fY3VlLT5yZWdpb25JZCgpLmlzRW1wdHkoKSkgeworICAgICAgICBzZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlUmVsYXRpdmUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmCiAKICAgICAvLyAzLjUuMSBPbiB0aGUgKHJvb3QpIExpc3Qg
b2YgV2ViVlRUIE5vZGUgT2JqZWN0czoKIApAQCAtMjEwLDcgKzIyMCw3IEBAIFZUVEN1ZTo6VlRU
Q3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGMKIAogVlRUQ3VlOjp+VlRUQ3VlKCkKIHsKLSAg
ICByZW1vdmVEaXNwbGF5VHJlZSgpOworICAgIGRpc3BsYXlUcmVlSW50ZXJuYWwoKS0+cmVtb3Zl
KEFTU0VSVF9OT19FWENFUFRJT04pOwogfQogCiBQYXNzUmVmUHRyPFZUVEN1ZUJveD4gVlRUQ3Vl
OjpjcmVhdGVEaXNwbGF5VHJlZSgpCkBAIC00NTgsNyArNDY4LDcgQEAgdm9pZCBWVFRDdWU6OnNl
dElzQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8v
IFJlbW92ZSB0aGUgZGlzcGxheSB0cmVlIGFzIHNvb24gYXMgdGhlIGN1ZSBiZWNvbWVzIGluYWN0
aXZlLgotICAgICAgICBkaXNwbGF5VHJlZUludGVybmFsKCktPnJlbW92ZShBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKKyAgICAgICAgcmVtb3ZlRGlzcGxheVRyZWUoKTsKICAgICB9CiB9CiAKQEAgLTcz
Miw2ICs3NDIsMTMgQEAgVlRUQ3VlQm94KiBWVFRDdWU6OmdldERpc3BsYXlUcmVlKGNvbnN0IAog
CiB2b2lkIFZUVEN1ZTo6cmVtb3ZlRGlzcGxheVRyZWUoKQogeworI2lmIEVOQUJMRShXRUJWVFRf
UkVHSU9OUykKKyAgICAvLyBUaGUgcmVnaW9uIG5lZWRzIHRvIGJlIGluZm9ybWVkIGFib3V0IHRo
ZSBjdWUgcmVtb3ZhbC4KKyAgICBUZXh0VHJhY2tSZWdpb24qIHJlZ2lvbiA9IHRyYWNrKCktPnJl
Z2lvbnMoKS0+Z2V0UmVnaW9uQnlJZChtX3JlZ2lvbklkKTsKKyAgICBpZiAocmVnaW9uKQorICAg
ICAgICByZWdpb24tPndpbGxSZW1vdmVUZXh0VHJhY2tDdWVCb3gobV9kaXNwbGF5VHJlZS5nZXQo
KSk7CisjZW5kaWYKKwogICAgIGlmICghaGFzRGlzcGxheVRyZWUoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGRpc3BsYXlUcmVlSW50ZXJuYWwoKS0+cmVtb3ZlKEFTU0VSVF9OT19FWENFUFRJT04p
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcAkocmV2
aXNpb24gMTY1NjM3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMyBDYWJsZSBUZWxldmlzaW9uIExhYnMsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQpAQCAtMzk4LDcgKzM5OSw3IEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpj
cmVhdGVOZXdSZWdpb24oKQogICAgIGlmICghbV9jdXJyZW50SGVhZGVyVmFsdWUubGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxUZXh0VHJhY2tSZWdpb24+IHJlZ2lvbiA9
IFRleHRUcmFja1JlZ2lvbjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRleHRUcmFja1JlZ2lvbj4g
cmVnaW9uID0gVGV4dFRyYWNrUmVnaW9uOjpjcmVhdGUoKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCk7CiAgICAgcmVnaW9uLT5zZXRSZWdpb25TZXR0aW5ncyhtX2N1cnJlbnRIZWFkZXJWYWx1ZSk7
CiAKICAgICAvLyAxNS41LjEwIElmIHRoZSB0ZXh0IHRyYWNrIGxpc3Qgb2YgcmVnaW9ucyByZWdp
b25zIGNvbnRhaW5zIGEgcmVnaW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVlRUQ3VlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVlRUQ3VlLmNwcAkocmV2aXNpb24gMTY1NjM3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZUVEN1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDEyIFZpY3RvciBDYXJidW5lICh2aWN0b3JAcm9zZWR1Lm9yZykK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw2ICs0NywxNSBAQCB2b2lkIFJl
bmRlclZUVEN1ZTo6bGF5b3V0KCkKICAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxh
eW91dENoZWNrUG9pbnQ7CiAgICAgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXQoKTsKIAorI2lmIEVO
QUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICAvLyBJZiBXZWJWVFQgUmVnaW9ucyBhcmUgdXNlZCwg
dGhlIHJlZ3VsYXIgV2ViVlRUIGxheW91dCBhbGdvcml0aG0gaXMgbm8KKyAgICAvLyBsb25nZXIg
bmVjZXNzYXJ5LCBzaW5jZSBjdWVzIGhhdmluZyB0aGUgcmVnaW9uIHBhcmFtZXRlciBzZXQgZG8g
bm90IGhhdmUKKyAgICAvLyBhbnkgcG9zaXRpb25pbmcgcGFyYW1ldGVycy4gQWxzbywgaW4gdGhp
cyBjYXNlLCB0aGUgcmVnaW9ucyB0aGVtc2VsdmVzCisgICAgLy8gaGF2ZSBwb3NpdGlvbmluZyBp
bmZvcm1hdGlvbi4KKyAgICBpZiAoIW1fY3VlLT5yZWdpb25JZCgpLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworI2VuZGlmCisKICAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNo
ZXIodmlldygpLCAqdGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFzVHJhbnNmb3JtKCkgfHwgaGFz
UmVmbGVjdGlvbigpIHx8IHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CiAg
ICAgCiAgICAgaWYgKG1fY3VlLT5jdWVUeXBlKCk9PSBUZXh0VHJhY2tDdWU6OldlYlZUVCkgewo=
</data>
<flag name="review"
          id="250986"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>