<?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>203667</bug_id>
          
          <creation_ts>2019-10-31 00:40:16 -0700</creation_ts>
          <short_desc>Integrate media code to use HTML5 event loop</short_desc>
          <delta_ts>2023-08-05 22:27:30 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>203714</dependson>
    
    <dependson>204335</dependson>
          <blocked>202843</blocked>
    
    <blocked>164193</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jonlee</cc>
    
    <cc>kangil.han</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1585816</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-31 00:40:16 -0700</bug_when>
    <thetext>WindowEventLoop and WorkerEventLoop has the nice property to preserve the order of events
even when the documents go into a page cache.

Make media code use WindowEventLoop instead of GenericEventQueue.

This will also allow us to avoid triggering idle callback while there is a pending media events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585819</commentid>
    <comment_count>1</comment_count>
      <attachid>382438</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-31 01:01:55 -0700</bug_when>
    <thetext>Created attachment 382438
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585820</commentid>
    <comment_count>2</comment_count>
      <attachid>382438</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-31 01:03:23 -0700</bug_when>
    <thetext>Comment on attachment 382438
WIP

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

&gt; Source/WebCore/html/track/TrackListBase.cpp:103
&gt; +    m_element-&gt;document().eventLoop().queueTaskToDispatchEvent(TaskSource::MediaElementEventTaskSource, *this,

This is a bit verbose. I think we can add a helper function on ActiveDOMObject so that we can call it like this:
queueTaskToDispatchEventOnThis(TaskSource::MediaElementEventTaskSource,
    TrackEvent::create(eventName, Event::CanBubble::No, Event::IsCancelable::No, WTFMove(track)));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586210</commentid>
    <comment_count>3</comment_count>
      <attachid>382539</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-31 19:14:49 -0700</bug_when>
    <thetext>Created attachment 382539
WIP2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1587281</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-04 19:44:05 -0800</bug_when>
    <thetext>&lt;rdar://problem/56891008&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1587489</commentid>
    <comment_count>5</comment_count>
      <attachid>382539</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-11-05 11:45:07 -0800</bug_when>
    <thetext>Comment on attachment 382539
WIP2

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

&gt; Source/WebCore/dom/ActiveDOMObject.h:122
&gt; +    void queueTaskToDispatchEventOnThis(EventTargetType&amp; target, TaskSource source, Ref&lt;EventType&gt;&amp;&amp; event,

No need to say &quot;OnThis&quot;, since you pass the target explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1587554</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-05 14:52:02 -0800</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #5)
&gt; Comment on attachment 382539 [details]
&gt; WIP2
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=382539&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ActiveDOMObject.h:122
&gt; &gt; +    void queueTaskToDispatchEventOnThis(EventTargetType&amp; target, TaskSource source, Ref&lt;EventType&gt;&amp;&amp; event,
&gt; 
&gt; No need to say &quot;OnThis&quot;, since you pass the target explicitly.

Oh yeah, that suffix got removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588586</commentid>
    <comment_count>7</comment_count>
      <attachid>383116</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-08 00:28:15 -0800</bug_when>
    <thetext>Created attachment 383116
WIP3

A few observations:
 * Media elements can move from one document to another so we need to support event loop&apos;s task changing its associated script execution context (otherwise media/adopt-node-crash.html would crash)
 * We need to make DeferrableTask work with EventLoop.
 * We need a way of grouping tasks together so that we can later cancel them all, or check if there is a pending task in the same group or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588587</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-08 00:30:16 -0800</bug_when>
    <thetext>I&apos;ve started to think that we may want to make &quot;EventLoopGroup&quot; which can be suspended or stopped, which is implemented by ScriptExecutionContext.

This way, the mechanism by which a group of tasks are suspended or stopped is shared between script execution context &amp; other kinds of grouping.

One complication is that we&apos;d have to support a task moving from one group to another (so that media elements that move from one document to another would belong to the right group after the move).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588588</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-08 00:34:38 -0800</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #8)
&gt; I&apos;ve started to think that we may want to make &quot;EventLoopGroup&quot; which can be
&gt; suspended or stopped, which is implemented by ScriptExecutionContext.
&gt; 
&gt; This way, the mechanism by which a group of tasks are suspended or stopped
&gt; is shared between script execution context &amp; other kinds of grouping.
&gt; 
&gt; One complication is that we&apos;d have to support a task moving from one group
&gt; to another (so that media elements that move from one document to another
&gt; would belong to the right group after the move).

What&apos;s interesting about this approach is that this will allow us to merge WorkerEventLoop and WindowEventLoop implementations as well; because in this world, what suspends, resumes, or stops will be a EventLoopGroup, not ScriptExecutionContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588982</commentid>
    <comment_count>10</comment_count>
      <attachid>383205</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-09 00:18:37 -0800</bug_when>
    <thetext>Created attachment 383205
WIP4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588983</commentid>
    <comment_count>11</comment_count>
      <attachid>383206</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-09 00:42:22 -0800</bug_when>
    <thetext>Created attachment 383206
WIP5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1969829</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2023-08-05 22:27:30 -0700</bug_when>
    <thetext>Chris has done this already.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382438</attachid>
            <date>2019-10-31 01:01:55 -0700</date>
            <delta_ts>2019-10-31 19:14:49 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip203667.patch</filename>
            <type>text/plain</type>
            <size>10269</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BYnN0cmFjdEV2ZW50TG9vcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BYnN0cmFjdEV2ZW50TG9vcC5oCShyZXZpc2lvbiAyNTE4
MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQWJzdHJhY3RFdmVudExvb3AuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNyArMzUsOCBAQAogZW51bSBjbGFzcyBUYXNrU291cmNlIDogdWludDhfdCB7
CiAgICAgSWRsZVRhc2ssCiAgICAgTmV0d29ya2luZywKLSAgICBVc2VySW50ZXJhY3Rpb24KKyAg
ICBVc2VySW50ZXJhY3Rpb24sCisgICAgTWVkaWFFbGVtZW50RXZlbnRUYXNrU291cmNlLAogfTsK
IAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5o
dG1sI2V2ZW50LWxvb3AKQEAgLTQ2LDYgKzQ3LDIwIEBACiAgICAgdHlwZWRlZiBXVEY6OkZ1bmN0
aW9uPHZvaWQgKCk+IFRhc2tGdW5jdGlvbjsKICAgICB2aXJ0dWFsIHZvaWQgcXVldWVUYXNrKFRh
c2tTb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUYXNrRnVuY3Rpb24mJikgPSAwOwog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXZlbnRUYXJnZXRUeXBlLCB0eXBlbmFtZSBFdmVudFR5
cGU+CisgICAgdm9pZCBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoVGFza1NvdXJjZSBzb3VyY2Us
IEV2ZW50VGFyZ2V0VHlwZSYgdGFyZ2V0LCBSZWY8RXZlbnRUeXBlPiYmIGV2ZW50LCBXVEY6OkZ1
bmN0aW9uPHZvaWQgKEV2ZW50VGFyZ2V0VHlwZSYpPiBwb3N0RGlzcGF0Y2hXb3JrID0geyB9KQor
ICAgIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IHRhcmdldC5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICAgICAgQVNTRVJUKCFldmVudC0+
dGFyZ2V0KCkpOworICAgICAgICBxdWV1ZVRhc2soc291cmNlLCAqY29udGV4dCwgW3Byb3RlY3Rl
ZFRhcmdldCA9IG1ha2VSZWYodGFyZ2V0KSwgbW92ZWRFdmVudCA9IFdURk1vdmUoZXZlbnQpLCBk
b1dvcmsgPSBXVEZNb3ZlKHBvc3REaXNwYXRjaFdvcmspLCBhY3Rpdml0eSA9IHRhcmdldC5tYWtl
UGVuZGluZ0FjdGl2aXR5KHRhcmdldCldICgpIHsKKyAgICAgICAgICAgIG1vdmVkRXZlbnQtPnNl
dFRhcmdldChwcm90ZWN0ZWRUYXJnZXQucHRyKCkpOworICAgICAgICAgICAgcHJvdGVjdGVkVGFy
Z2V0LT5kaXNwYXRjaEV2ZW50KG1vdmVkRXZlbnQuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGRv
V29yaykKKyAgICAgICAgICAgICAgICBkb1dvcmsocHJvdGVjdGVkVGFyZ2V0LmdldCgpKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RFdmVudExvb3AoKSA9
IGRlZmF1bHQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNTE4
MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjM0LDYgKzI2MzQsOCBAQAogCiB2b2lkIERvY3VtZW50OjpzdXNwZW5kQWN0aXZlRE9NT2Jq
ZWN0cyhSZWFzb25Gb3JTdXNwZW5zaW9uIHdoeSkKIHsKKyAgICBpZiAobV9ldmVudExvb3ApCisg
ICAgICAgIG1fZXZlbnRMb29wLT5zdXNwZW5kKCp0aGlzKTsKICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyh3aHkpOwogICAgIHN1c3BlbmREZXZpY2VN
b3Rpb25BbmRPcmllbnRhdGlvblVwZGF0ZXMoKTsKICAgICBwbGF0Zm9ybVN1c3BlbmRPclN0b3BB
Y3RpdmVET01PYmplY3RzKCk7CkBAIC0yNjQxLDYgKzI2NDMsOCBAQAogCiB2b2lkIERvY3VtZW50
OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKFJlYXNvbkZvclN1c3BlbnNpb24gd2h5KQogeworICAg
IGlmIChtX2V2ZW50TG9vcCkKKyAgICAgICAgbV9ldmVudExvb3AtPnJlc3VtZSgqdGhpcyk7CiAg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyh3aHkpOwog
ICAgIHJlc3VtZURldmljZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBkYXRlcygpOwogICAgIC8vIEZJ
WE1FOiBGb3IgaU9TLCBkbyB3ZSBuZWVkIHRvIGFkZCBjb250ZW50IGNoYW5nZSBvYnNlcnZlcnMg
dGhhdCB3ZXJlIHJlbW92ZWQgaW4gRG9jdW1lbnQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKCk/
CkBAIC0yNjQ4LDYgKzI2NTIsOCBAQAogCiB2b2lkIERvY3VtZW50OjpzdG9wQWN0aXZlRE9NT2Jq
ZWN0cygpCiB7CisgICAgaWYgKG1fZXZlbnRMb29wKQorICAgICAgICBtX2V2ZW50TG9vcC0+c3Rv
cCgqdGhpcyk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9iamVj
dHMoKTsKICAgICBwbGF0Zm9ybVN1c3BlbmRPclN0b3BBY3RpdmVET01PYmplY3RzKCk7CiB9CkBA
IC02MTMyLDEzICs2MTM4LDE0IEBACiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBpZiAoIW1fZXZlbnRMb29wKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHREb2N1bWVudCkKKyAg
ICAgICAgaWYgKG1fY29udGV4dERvY3VtZW50KSB7CisgICAgICAgICAgICBpZiAoIW1fY29udGV4
dERvY3VtZW50LT5tX2V2ZW50TG9vcCkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHREb2N1bWVu
dC0+bV9ldmVudExvb3AgPSBXaW5kb3dFdmVudExvb3A6OmNyZWF0ZSgpOwogICAgICAgICAgICAg
bV9ldmVudExvb3AgPSBtX2NvbnRleHREb2N1bWVudC0+bV9ldmVudExvb3A7Ci0gICAgICAgIGVs
c2UgLy8gRklYTUU6IERvY3VtZW50cyBvZiBzaW1pbGFyIG9yaWdpbiBzaG91bGQgc2hhcmUgdGhl
IHNhbWUgZXZlbnQgbG9vcC4KKyAgICAgICAgfSBlbHNlIC8vIEZJWE1FOiBEb2N1bWVudHMgb2Yg
c2ltaWxhciBvcmlnaW4gc2hvdWxkIHNoYXJlIHRoZSBzYW1lIGV2ZW50IGxvb3AuCiAgICAgICAg
ICAgICBtX2V2ZW50TG9vcCA9IFdpbmRvd0V2ZW50TG9vcDo6Y3JlYXRlKCk7CiAgICAgfQogICAg
IHJldHVybiAqbV9ldmVudExvb3A7Ci0KIH0KIAogdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVk
dWxlZFRhc2tzKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHJldmlzaW9uIDI1MTgzMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYzLDcgKzEwNjMsNyBAQAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcG9zdFRhc2soVGFzayYmKSBmaW5hbDsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29u
dGV4dCdzIHRocmVhZCBhc3luY2hyb25vdXNseS4KIAogICAgIEFic3RyYWN0RXZlbnRMb29wJiBl
dmVudExvb3AoKSBmaW5hbDsKLSAgICBXaW5kb3dFdmVudExvb3AqIGV2ZW50TG9vcElmRXhpc3Rz
KCkgeyByZXR1cm4gbV9ldmVudExvb3AuZ2V0KCk7IH0KKyAgICBXaW5kb3dFdmVudExvb3AqIHdp
bmRvd0V2ZW50TG9vcCgpOwogCiAgICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKiBzY3Jp
cHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVybiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlci5nZXQoKTsgfQogICAgIHZvaWQgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlckNhbGxiYWNrcygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9v
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5j
cHAJKHJldmlzaW9uIDI1MTgzMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExv
b3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxMiBAQAogICAgIHNjaGVkdWxlVG9S
dW5JZk5lZWRlZCgpOwogfQogCit2b2lkIFdpbmRvd0V2ZW50TG9vcDo6c3RvcChEb2N1bWVudCYg
ZG9jdW1lbnQpCit7CisgICAgYXV0byBkb2N1bWVudElkZW50aWZpZXIgPSBkb2N1bWVudC5pZGVu
dGlmaWVyKCk7CisgICAgbV90YXNrcy5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGF1dG8mIHRhc2sp
IHsgcmV0dXJuIHRhc2suZG9jdW1lbnRJZGVudGlmaWVyID09IGRvY3VtZW50SWRlbnRpZmllcjsg
fSk7Cit9CisKIHZvaWQgV2luZG93RXZlbnRMb29wOjpzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKQog
ewogICAgIGlmIChtX2lzU2NoZWR1bGVkVG9SdW4pCkBAIC03MCw2ICs3Niw5IEBACiAKIHZvaWQg
V2luZG93RXZlbnRMb29wOjpydW4oKQogeworICAgIGlmIChtX3Rhc2tzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgVmVjdG9yPFRhc2s+IHRhc2tzID0gV1RGTW92ZShtX3Rhc2tz
KTsKICAgICBtX2RvY3VtZW50SWRlbnRpZmllcnNGb3JTdXNwZW5kZWRUYXNrcy5jbGVhcigpOwog
ICAgIFZlY3RvcjxUYXNrPiByZW1haW5pbmdUYXNrczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9XaW5kb3dFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2lu
ZG93RXZlbnRMb29wLmgJKHJldmlzaW9uIDI1MTgzMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9X
aW5kb3dFdmVudExvb3AuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDE0IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkFic3RyYWN0RXZlbnRMb29wLmgiCisjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRJZGVudGlmaWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBY3RpdmVE
T01PYmplY3Q7CitjbGFzcyBOb2RlOwogY2xhc3MgRG9jdW1lbnQ7CiAKIC8vIGh0dHBzOi8vaHRt
bC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN3aW5kb3ctZXZlbnQt
bG9vcApAQCAtMzgsMTAgKzQxLDExIEBACiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxXaW5kb3dF
dmVudExvb3A+IGNyZWF0ZSgpOwogCi0gICAgdm9pZCBxdWV1ZVRhc2soVGFza1NvdXJjZSwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIFRhc2tGdW5jdGlvbiYmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHF1ZXVlVGFzayhUYXNrU291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgVGFza0Z1bmN0
aW9uJiYpIGZpbmFsOwogCiAgICAgdm9pZCBzdXNwZW5kKERvY3VtZW50Jik7CiAgICAgdm9pZCBy
ZXN1bWUoRG9jdW1lbnQmKTsKKyAgICB2b2lkIHN0b3AoRG9jdW1lbnQmKTsKIAogcHJpdmF0ZToK
ICAgICBXaW5kb3dFdmVudExvb3AoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
aXN0b3J5L0NhY2hlZEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L0NhY2hlZEZyYW1lLmNwcAkocmV2aXNpb24gMjUxODMyKQorKysgU291cmNlL1dlYkNvcmUv
aGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw5ICsxMDcsNiBA
QAogICAgICAgICBpZiAobV9kb2N1bWVudC0+c3ZnRXh0ZW5zaW9ucygpKQogICAgICAgICAgICAg
bV9kb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnVucGF1c2VBbmltYXRpb25zKCk7CiAK
LSAgICAgICAgaWYgKGF1dG8qIGV2ZW50TG9vcCA9IG1fZG9jdW1lbnQtPmV2ZW50TG9vcElmRXhp
c3RzKCkpCi0gICAgICAgICAgICBldmVudExvb3AtPnJlc3VtZSgqbV9kb2N1bWVudCk7Ci0KICAg
ICAgICAgbV9kb2N1bWVudC0+cmVzdW1lKFJlYXNvbkZvclN1c3BlbnNpb246OkJhY2tGb3J3YXJk
Q2FjaGUpOwogCiAgICAgICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byB1cGRhdGUgYW55IHBsYXRm
b3JtIHNjcmlwdCBvYmplY3RzIGFmdGVyIHJlc3RvcmluZyB0aGUKQEAgLTE3NSw5ICsxNzIsNiBA
QAogICAgIC8vIEFjdGl2ZSBET00gb2JqZWN0cyBtdXN0IGJlIHN1c3BlbmRlZCBiZWZvcmUgd2Ug
Y2FjaGUgdGhlIGZyYW1lIHNjcmlwdCBkYXRhLgogICAgIG1fZG9jdW1lbnQtPnN1c3BlbmQoUmVh
c29uRm9yU3VzcGVuc2lvbjo6QmFja0ZvcndhcmRDYWNoZSk7CiAKLSAgICBpZiAoYXV0byogZXZl
bnRMb29wID0gbV9kb2N1bWVudC0+ZXZlbnRMb29wSWZFeGlzdHMoKSkKLSAgICAgICAgZXZlbnRM
b29wLT5zdXNwZW5kKCptX2RvY3VtZW50KTsKLQogICAgIG1fY2FjaGVkRnJhbWVTY3JpcHREYXRh
ID0gbWFrZVVuaXF1ZTxTY3JpcHRDYWNoZWRGcmFtZURhdGE+KGZyYW1lKTsKIAogICAgIG1fZG9j
dW1lbnQtPmRvbVdpbmRvdygpLT5zdXNwZW5kRm9yQmFja0ZvcndhcmRDYWNoZSgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCShyZXZpc2lvbiAy
NTE4MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJUcmFja0xpc3RCYXNl
LmgiCiAKKyNpbmNsdWRlICJBYnN0cmFjdEV2ZW50TG9vcC5oIgogI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgpAQCAtNDIsNyArNDMsNiBAQAogVHJhY2tMaXN0QmFzZTo6VHJhY2tM
aXN0QmFzZShIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQpCiAgICAgLCBtX2VsZW1l
bnQoZWxlbWVudCkKLSAgICAsIG1fYXN5bmNFdmVudFF1ZXVlKE1haW5UaHJlYWRHZW5lcmljRXZl
bnRRdWV1ZTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBBU1NFUlQoIWNvbnRleHQgfHwgaXM8RG9j
dW1lbnQ+KGNvbnRleHQpKTsKICAgICBzdXNwZW5kSWZOZWVkZWQoKTsKQEAgLTk4LDcgKzk4LDEw
IEBACiAKIHZvaWQgVHJhY2tMaXN0QmFzZTo6c2NoZWR1bGVUcmFja0V2ZW50KGNvbnN0IEF0b21T
dHJpbmcmIGV2ZW50TmFtZSwgUmVmPFRyYWNrQmFzZT4mJiB0cmFjaykKIHsKLSAgICBtX2FzeW5j
RXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KFRyYWNrRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIEV2
ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObywgV1RGTW92ZSh0cmFj
aykpKTsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZWxlbWVu
dC0+ZG9jdW1lbnQoKS5ldmVudExvb3AoKS5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoVGFza1Nv
dXJjZTo6TWVkaWFFbGVtZW50RXZlbnRUYXNrU291cmNlLCAqdGhpcywKKyAgICAgICAgVHJhY2tF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0Nh
bmNlbGFibGU6Ok5vLCBXVEZNb3ZlKHRyYWNrKSkpOwogfQogCiB2b2lkIFRyYWNrTGlzdEJhc2U6
OnNjaGVkdWxlQWRkVHJhY2tFdmVudChSZWY8VHJhY2tCYXNlPiYmIHRyYWNrKQpAQCAtMTYxLDE0
ICsxNjQsMTUgQEAKICAgICAvLyBXaGVuZXZlciBhIHRyYWNrIGluIGEgVmlkZW9UcmFja0xpc3Qg
dGhhdCB3YXMgcHJldmlvdXNseSBub3Qgc2VsZWN0ZWQgaXMKICAgICAvLyBzZWxlY3RlZCwgdGhl
IHVzZXIgYWdlbnQgbXVzdCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1l
ZAogICAgIC8vIGNoYW5nZSBhdCB0aGUgVmlkZW9UcmFja0xpc3Qgb2JqZWN0LgotICAgIG1fYXN5
bmNFdmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2hh
bmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykp
OworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgbV9oYXNQZW5kaW5n
Q2hhbmdlRXZlbnQgPSB0cnVlOworICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS5ldmVudExvb3Ao
KS5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQ8VHJhY2tMaXN0QmFzZSwgRXZlbnQ+KFRhc2tTb3Vy
Y2U6Ok1lZGlhRWxlbWVudEV2ZW50VGFza1NvdXJjZSwgKnRoaXMsCisgICAgICAgIEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZl
bnQ6OklzQ2FuY2VsYWJsZTo6Tm8pLCBbXSAoVHJhY2tMaXN0QmFzZSYgdGhpc09iamVjdCkgewor
ICAgICAgICB0aGlzT2JqZWN0Lm1faGFzUGVuZGluZ0NoYW5nZUV2ZW50ID0gZmFsc2U7CisgICAg
fSk7CiB9CiAKLWJvb2wgVHJhY2tMaXN0QmFzZTo6aXNDaGFuZ2VFdmVudFNjaGVkdWxlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fYXN5bmNFdmVudFF1ZXVlLT5oYXNQZW5kaW5nRXZlbnRzT2ZU
eXBlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCk7Ci19Ci0KIGJvb2wgVHJhY2tMaXN0QmFzZTo6
aXNBbnlUcmFja0VuYWJsZWQoKSBjb25zdAogewogICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2lu
YmFuZFRyYWNrcykgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RC
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RC
YXNlLmgJKHJldmlzaW9uIDI1MTgzMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJh
Y2tMaXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBACiAKICAgICAvLyBO
ZWVkcyB0byBiZSBwdWJsaWMgc28gdHJhY2tzIGNhbiBjYWxsIGl0CiAgICAgdm9pZCBzY2hlZHVs
ZUNoYW5nZUV2ZW50KCk7Ci0gICAgYm9vbCBpc0NoYW5nZUV2ZW50U2NoZWR1bGVkKCkgY29uc3Q7
CisgICAgYm9vbCBpc0NoYW5nZUV2ZW50U2NoZWR1bGVkKCkgY29uc3QgeyByZXR1cm4gbV9oYXNQ
ZW5kaW5nQ2hhbmdlRXZlbnQ7IH0KIAogICAgIGJvb2wgaXNBbnlUcmFja0VuYWJsZWQoKSBjb25z
dDsKIApAQCAtODAsOCArODAsNyBAQAogICAgIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIGZpbmFs
IHsgZGVyZWYoKTsgfQogCiAgICAgSFRNTE1lZGlhRWxlbWVudCogbV9lbGVtZW50OwotCi0gICAg
VW5pcXVlUmVmPE1haW5UaHJlYWRHZW5lcmljRXZlbnRRdWV1ZT4gbV9hc3luY0V2ZW50UXVldWU7
CisgICAgYm9vbCBtX2hhc1BlbmRpbmdDaGFuZ2VFdmVudCB7IGZhbHNlIH07CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2
ZW50TG9vcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZl
bnRMb29wLmgJKHJldmlzaW9uIDI1MTgzMikKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyRXZlbnRMb29wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICAgICBzdGF0
aWMgUmVmPFdvcmtlckV2ZW50TG9vcD4gY3JlYXRlKFdvcmtsZXRHbG9iYWxTY29wZSYpOwogI2Vu
ZGlmCiAKLSAgICB2b2lkIHF1ZXVlVGFzayhUYXNrU291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgVGFza0Z1bmN0aW9uJiYpIG92ZXJyaWRlOworICAgIHZvaWQgcXVldWVUYXNrKFRhc2tT
b3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUYXNrRnVuY3Rpb24mJikgZmluYWw7CiAK
IHByaXZhdGU6CiAgICAgZXhwbGljaXQgV29ya2VyRXZlbnRMb29wKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382539</attachid>
            <date>2019-10-31 19:14:49 -0700</date>
            <delta_ts>2019-11-05 14:52:07 -0800</delta_ts>
            <desc>WIP2</desc>
            <filename>wip203667b.patch</filename>
            <type>text/plain</type>
            <size>12711</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2aXNpb24gMjUxODMyKQorKysgU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSw3IEBACiAgICAg
ZG9tL1NwYWNlU3BsaXRTdHJpbmcuaAogICAgIGRvbS9TdHlsZWRFbGVtZW50LmgKICAgICBkb20v
U3VjY2Vzc09yLmgKKyAgICBkb20vVGFza1NvdXJjZS5oCiAgICAgZG9tL1RleHQuaAogICAgIGRv
bS9UZXh0RXZlbnQuaAogICAgIGRvbS9UZXh0RXZlbnRJbnB1dFR5cGUuaApJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjUxODMyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODU0LDYgKzI4NTQsNyBAQAogCQk5QTUyOEU4NDE3
RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTUyOEU4MjE3RDdGNTJGMDBBQTk1MTggLyogRmxv
YXRpbmdPYmplY3RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJOUFCMUYzODAxOEUyNDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlB
QjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUIwMkUwQzgy
MzVFQUQyQTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAyRTBDMzIzNUU3NkFBMDA0
MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5QjBBQkNBRTIzNkJCNDMxMDBCNDUwODUg
LyogVGFza1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOUIwQUJDQUMyMzZCQjQwQTAwQjQ1MDg1IC8qIFRhc2tTb3VyY2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QjI0REU4RTE1MTk0Qjk1
MDBDNTlDMjcgLyogSFRNTEJESUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCMjRERThDMTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxl
bWVudC5oICovOyB9OwogCQk5QjI3RkM2MDIzNEQ5QURCMDAzOTRBNDYgLyogV2luZG93RXZlbnRM
b29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjI3
RkM1RTIzNEQ5QURBMDAzOTRBNDYgLyogV2luZG93RXZlbnRMb29wLmggKi87IH07CiAJCTlCMkQ4
QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyRDhBNzgxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9T
dGVwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTExMTA2LDYgKzExMTA3LDcgQEAKIAkJOUIwQUJDQTEyMzY3OUFCMzAwQjQ1MDg1IC8qIEFic3Ry
YWN0RXZlbnRMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0
RXZlbnRMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMEFCQ0EzMjM2NzlB
Q0YwMEI0NTA4NSAvKiBXb3JrZXJFdmVudExvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV29ya2VyRXZlbnRMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUIwQUJDQTQyMzY3OUFDRjAwQjQ1MDg1IC8qIFdvcmtlckV2ZW50TG9vcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrZXJFdmVudExvb3AuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwQUJDQUMyMzZCQjQwQTAwQjQ1MDg1IC8qIFRhc2tT
b3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGFza1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5QjBGRTg3MzFEOUUwMkRGMDA0QThBQ0IgLyogRG9jdW1lbnRPclNoYWRvd1Jv
b3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERvY3VtZW50T3JTaGFkb3dSb290LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIxMzI1N0IxRjNEMkFCQTAwREFBQjY5IC8q
IERhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOUIxOUI2N0UxQjk2NEU1MjAwMzQ4NzQ1IC8qIFNoYWRvd1Jvb3QuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFNoYWRvd1Jvb3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTIxNDMsOCArMTIxNDUsNiBAQAogCQlBQUNDODNENjIzMTY1NjlFMDBFQjZCRjUgLyog
SFRNTE9yRm9yZWlnbkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxPckZvcmVpZ25FbGVtZW50LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUFDQzgzRDcyMzE2NTc2QTAwRUI2QkY1IC8q
IEpTSFRNTE9yRm9yZWlnbkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MT3JGb3JlaWdu
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQUNDODNEODIzMTY1NzZC
MDBFQjZCRjUgLyogSlNIVE1MT3JGb3JlaWduRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0hUTUxPckZvcmVpZ25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQUFEOUQwQjEyMURGQTgwQzAwMUIxMUM3IC8qIExhenlMb2FkSW1hZ2VPYnNlcnZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXp5TG9hZEltYWdlT2JzZXJ2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQUQ5RDBCMzIxREZBODBFMDAx
QjExQzcgLyogTGF6eUxvYWRJbWFnZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExhenlMb2FkSW1hZ2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBQUUyN0I3NDE2Q0JGQzBEMDA2MjMwNDMgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVz
aXplck1vY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXplck1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBQUUyN0I3NTE2Q0JGQzBEMDA2MjMwNDMgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1v
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplck1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUFFMzc1NUQxNzQy
OUJDQzAwNjIwMEMyIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVy
SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjgxNjQsNiArMjgxNjQsNyBA
QAogCQkJCUE4QzRBN0VDMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmNwcCAqLywK
IAkJCQlBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5oICovLAogCQkJ
CUM5OTA1ODEyMUUzMkI3MzQwMDczQkREQSAvKiBTdWNjZXNzT3IuaCAqLywKKwkJCQk5QjBBQkNB
QzIzNkJCNDBBMDBCNDUwODUgLyogVGFza1NvdXJjZS5oICovLAogCQkJCTQ2M0VCNjIwMUI4Nzg5
Q0IwMDk2RUQ1MSAvKiBUYWdDb2xsZWN0aW9uLmNwcCAqLywKIAkJCQk0NjNFQjYyMTFCODc4OUNC
MDA5NkVENTEgLyogVGFnQ29sbGVjdGlvbi5oICovLAogCQkJCTBGMjZBN0E3MjA1NEMyMjcwMDkw
QTE0MSAvKiBUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50LmNwcCAqLywKQEAgLTMyMDIw
LDYgKzMyMDIxLDcgQEAKIAkJCQk1MTdBNTMyOTFGNEI5MEI5MDBEQ0RDMEEgLyogU2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbktleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGMTc1NjkxRjNFQkM4
MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PcHRpb25zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUJDQ0UzMDFGOEYxNzlFMDA2QkEwRUQgLyogU2VydmljZVdvcmtlclRocmVh
ZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUIwQUJDQUUyMzZCQjQzMTAwQjQ1MDg1IC8qIFRhc2tT
b3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMTJCNTQzMUY5RjlDQTAwMEU2Nzg3NSAvKiBT
ZXJ2aWNlV29ya2VyVGhyZWFkUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUUzN0Y2MUZB
QTk0MDIwMEQ3RjIyQSAvKiBTZXJ2aWNlV29ya2VyVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxRjE3NTZDMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyVXBkYXRlVmlhQ2FjaGUu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Fic3RyYWN0RXZlbnRM
b29wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Fic3RyYWN0RXZlbnRMb29w
LmgJKHJldmlzaW9uIDI1MTgzMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BYnN0cmFjdEV2ZW50
TG9vcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiVGFza1NvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTMyLDEyICszMyw2IEBACiAKIGNsYXNzIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKLWVudW0gY2xhc3MgVGFza1NvdXJjZSA6IHVpbnQ4X3Qg
ewotICAgIElkbGVUYXNrLAotICAgIE5ldHdvcmtpbmcsCi0gICAgVXNlckludGVyYWN0aW9uCi19
OwotCiAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlz
Lmh0bWwjZXZlbnQtbG9vcAogY2xhc3MgQWJzdHJhY3RFdmVudExvb3AgOiBwdWJsaWMgUmVmQ291
bnRlZDxBYnN0cmFjdEV2ZW50TG9vcD4gewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0FjdGl2ZURPTU9iamVjdC5jcHAJKHJldmlzaW9uIDI1MTgzMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9BY3RpdmVET01PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAKKyNp
bmNsdWRlICJBYnN0cmFjdEV2ZW50TG9vcC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCkBAIC0xMzAsNCArMTMxLDEyIEBACiAg
ICAgcmV0dXJuIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSAmJiAhc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgpICYmICFzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKTsKIH0KIAordm9pZCBBY3Rp
dmVET01PYmplY3Q6OnF1ZXVlVGFza0luRXZlbnRMb29wKFRhc2tTb3VyY2Ugc291cmNlLCBXVEY6
OkZ1bmN0aW9uPHZvaWQgKCk+JiYgdGFzaykKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNvbnRleHQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhzb3VyY2UsICpjb250ZXh0LCBXVEZN
b3ZlKHRhc2spKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9BY3RpdmVET01PYmplY3QuaAkocmV2aXNpb24gMjUxODMyKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0FjdGl2ZURPTU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgi
CisjaW5jbHVkZSAiVGFza1NvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAt
MTE3LDYgKzExOCwyMiBAQAogICAgIGV4cGxpY2l0IEFjdGl2ZURPTU9iamVjdChEb2N1bWVudCYp
OwogICAgIHZpcnR1YWwgfkFjdGl2ZURPTU9iamVjdCgpOwogCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXZlbnRUYXJnZXRUeXBlLCB0eXBlbmFtZSBFdmVudFR5cGU+CisgICAgdm9pZCBxdWV1ZVRh
c2tUb0Rpc3BhdGNoRXZlbnRPblRoaXMoRXZlbnRUYXJnZXRUeXBlJiB0YXJnZXQsIFRhc2tTb3Vy
Y2Ugc291cmNlLCBSZWY8RXZlbnRUeXBlPiYmIGV2ZW50LAorICAgICAgICBXVEY6OkZ1bmN0aW9u
PHZvaWQgKEV2ZW50VGFyZ2V0VHlwZSYpPiYmIHBvc3REaXNwYXRjaFdvcmsgPSB7IH0pCisgICAg
eworICAgICAgICBBU1NFUlQodGhpcyA9PSAmdGFyZ2V0KTsKKyAgICAgICAgQVNTRVJUKCFldmVu
dC0+dGFyZ2V0KCkpOworICAgICAgICBxdWV1ZVRhc2tJbkV2ZW50TG9vcChzb3VyY2UsIFtwcm90
ZWN0ZWRUYXJnZXQgPSBtYWtlUmVmKHRhcmdldCksIG1vdmVkRXZlbnQgPSBXVEZNb3ZlKGV2ZW50
KSwgZG9Xb3JrID0gV1RGTW92ZShwb3N0RGlzcGF0Y2hXb3JrKSwgYWN0aXZpdHkgPSBtYWtlUGVu
ZGluZ0FjdGl2aXR5KHRhcmdldCldICgpIHsKKyAgICAgICAgICAgIG1vdmVkRXZlbnQtPnNldFRh
cmdldChwcm90ZWN0ZWRUYXJnZXQucHRyKCkpOworICAgICAgICAgICAgcHJvdGVjdGVkVGFyZ2V0
LT5kaXNwYXRjaEV2ZW50KG1vdmVkRXZlbnQuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGRvV29y
aykKKyAgICAgICAgICAgICAgICBkb1dvcmsocHJvdGVjdGVkVGFyZ2V0LmdldCgpKTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgdm9pZCBxdWV1ZVRhc2tJbkV2ZW50TG9vcChUYXNrU291cmNl
LCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYpOworCiBwcml2YXRlOgogICAgIGVudW0gQ2hlY2tl
ZFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRUeXBlIHsgQ2hlY2tlZFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQgfTsKICAgICBBY3RpdmVET01PYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENoZWNr
ZWRTY3JpcHRFeGVjdXRpb25Db250ZXh0VHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHJldmlzaW9uIDI1MTgzMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMzIsMTMgKzYxMzIsMTQgQEAKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIGlmICghbV9ldmVudExvb3ApIHsKLSAgICAgICAgaWYgKG1fY29u
dGV4dERvY3VtZW50KQorICAgICAgICBpZiAobV9jb250ZXh0RG9jdW1lbnQpIHsKKyAgICAgICAg
ICAgIGlmICghbV9jb250ZXh0RG9jdW1lbnQtPm1fZXZlbnRMb29wKQorICAgICAgICAgICAgICAg
IG1fY29udGV4dERvY3VtZW50LT5tX2V2ZW50TG9vcCA9IFdpbmRvd0V2ZW50TG9vcDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICBtX2V2ZW50TG9vcCA9IG1fY29udGV4dERvY3VtZW50LT5tX2V2ZW50
TG9vcDsKLSAgICAgICAgZWxzZSAvLyBGSVhNRTogRG9jdW1lbnRzIG9mIHNpbWlsYXIgb3JpZ2lu
IHNob3VsZCBzaGFyZSB0aGUgc2FtZSBldmVudCBsb29wLgorICAgICAgICB9IGVsc2UgLy8gRklY
TUU6IERvY3VtZW50cyBvZiBzaW1pbGFyIG9yaWdpbiBzaG91bGQgc2hhcmUgdGhlIHNhbWUgZXZl
bnQgbG9vcC4KICAgICAgICAgICAgIG1fZXZlbnRMb29wID0gV2luZG93RXZlbnRMb29wOjpjcmVh
dGUoKTsKICAgICB9CiAgICAgcmV0dXJuICptX2V2ZW50TG9vcDsKLQogfQogCiB2b2lkIERvY3Vt
ZW50OjpzdXNwZW5kU2NoZWR1bGVkVGFza3MoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAJKHJldmlz
aW9uIDI1MTgzMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIlRyYWNrTGlz
dEJhc2UuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0RXZlbnRMb29wLmgiCiAjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC00Miw3ICs0Myw2IEBACiBUcmFja0xpc3RCYXNlOjpU
cmFja0xpc3RCYXNlKEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCkKICAgICAsIG1f
ZWxlbWVudChlbGVtZW50KQotICAgICwgbV9hc3luY0V2ZW50UXVldWUoTWFpblRocmVhZEdlbmVy
aWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQogewogICAgIEFTU0VSVCghY29udGV4dCB8fCBp
czxEb2N1bWVudD4oY29udGV4dCkpOwogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwpAQCAtOTgsNyAr
OTgsOSBAQAogCiB2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlVHJhY2tFdmVudChjb25zdCBB
dG9tU3RyaW5nJiBldmVudE5hbWUsIFJlZjxUcmFja0Jhc2U+JiYgdHJhY2spCiB7Ci0gICAgbV9h
c3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVudChUcmFja0V2ZW50OjpjcmVhdGUoZXZlbnROYW1l
LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8sIFdURk1vdmUo
dHJhY2spKSk7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICBxdWV1
ZVRhc2tUb0Rpc3BhdGNoRXZlbnRPblRoaXMoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVu
dEV2ZW50VGFza1NvdXJjZSwgVHJhY2tFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgRXZlbnQ6OkNh
bkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vLCBXVEZNb3ZlKHRyYWNrKSkpOwog
fQogCiB2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlQWRkVHJhY2tFdmVudChSZWY8VHJhY2tC
YXNlPiYmIHRyYWNrKQpAQCAtMTYxLDE0ICsxNjMsMTcgQEAKICAgICAvLyBXaGVuZXZlciBhIHRy
YWNrIGluIGEgVmlkZW9UcmFja0xpc3QgdGhhdCB3YXMgcHJldmlvdXNseSBub3Qgc2VsZWN0ZWQg
aXMKICAgICAvLyBzZWxlY3RlZCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBxdWV1ZSBhIHRhc2sgdG8g
ZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZAogICAgIC8vIGNoYW5nZSBhdCB0aGUgVmlkZW9UcmFj
a0xpc3Qgb2JqZWN0LgotICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBF
dmVudDo6SXNDYW5jZWxhYmxlOjpObykpOworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICBy
ZXR1cm47CisgICAgKyttX3BlbmRpbmdDaGFuZ2VFdmVudENvdW50OworICAgIHF1ZXVlVGFza1Rv
RGlzcGF0Y2hFdmVudE9uVGhpczxUcmFja0xpc3RCYXNlPigqdGhpcywgVGFza1NvdXJjZTo6TWVk
aWFFbGVtZW50RXZlbnRUYXNrU291cmNlLAorICAgICAgICBFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFi
bGU6Ok5vKSwKKyAgICAgICAgW10gKGF1dG8mIHRoaXNPYmplY3QpIHsKKyAgICAgICBBU1NFUlQo
dGhpc09iamVjdC5tX3BlbmRpbmdDaGFuZ2VFdmVudENvdW50KTsKKyAgICAgICAtLXRoaXNPYmpl
Y3QubV9wZW5kaW5nQ2hhbmdlRXZlbnRDb3VudDsKKyAgIH0pOwogfQogCi1ib29sIFRyYWNrTGlz
dEJhc2U6OmlzQ2hhbmdlRXZlbnRTY2hlZHVsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2Fz
eW5jRXZlbnRRdWV1ZS0+aGFzUGVuZGluZ0V2ZW50c09mVHlwZShldmVudE5hbWVzKCkuY2hhbmdl
RXZlbnQpOwotfQotCiBib29sIFRyYWNrTGlzdEJhc2U6OmlzQW55VHJhY2tFbmFibGVkKCkgY29u
c3QKIHsKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9pbmJhbmRUcmFja3MpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCShyZXZpc2lvbiAyNTE4MzIp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNjAsNyArNjAsNyBAQAogCiAgICAgLy8gTmVlZHMgdG8gYmUgcHVibGljIHNvIHRy
YWNrcyBjYW4gY2FsbCBpdAogICAgIHZvaWQgc2NoZWR1bGVDaGFuZ2VFdmVudCgpOwotICAgIGJv
b2wgaXNDaGFuZ2VFdmVudFNjaGVkdWxlZCgpIGNvbnN0OworICAgIGJvb2wgaXNDaGFuZ2VFdmVu
dFNjaGVkdWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ0NoYW5nZUV2ZW50Q291bnQ7IH0K
IAogICAgIGJvb2wgaXNBbnlUcmFja0VuYWJsZWQoKSBjb25zdDsKIApAQCAtODAsOCArODAsNyBA
QAogICAgIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgZGVyZWYoKTsgfQogCiAgICAg
SFRNTE1lZGlhRWxlbWVudCogbV9lbGVtZW50OwotCi0gICAgVW5pcXVlUmVmPE1haW5UaHJlYWRH
ZW5lcmljRXZlbnRRdWV1ZT4gbV9hc3luY0V2ZW50UXVldWU7CisgICAgdW5zaWduZWQgbV9wZW5k
aW5nQ2hhbmdlRXZlbnRDb3VudCB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383116</attachid>
            <date>2019-11-08 00:28:15 -0800</date>
            <delta_ts>2019-11-09 00:18:37 -0800</delta_ts>
            <desc>WIP3</desc>
            <filename>wip203667c.patch</filename>
            <type>text/plain</type>
            <size>49178</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2UuY3BwCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL01lZGlhU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw2
IEBACiAgICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCiAgICAgLCBtX2R1cmF0aW9uKE1l
ZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKICAgICAsIG1fcGVuZGluZ1NlZWtUaW1lKE1lZGlhVGlt
ZTo6aW52YWxpZFRpbWUoKSkKLSAgICAsIG1fYXN5bmNFdmVudFF1ZXVlKE1haW5UaHJlYWRHZW5l
cmljRXZlbnRRdWV1ZTo6Y3JlYXRlKCp0aGlzKSkKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
ICAgICAsIG1fbG9nZ2VyKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5sb2dnZXIoKSkKICNl
bmRpZgpAQCAtOTczLDggKzk3Miw3IEBACiAKIGJvb2wgTWVkaWFTb3VyY2U6Omhhc1BlbmRpbmdB
Y3Rpdml0eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZSB8fCBtX2FzeW5jRXZlbnRR
dWV1ZS0+aGFzUGVuZGluZ0V2ZW50cygpCi0gICAgICAgIHx8IEFjdGl2ZURPTU9iamVjdDo6aGFz
UGVuZGluZ0FjdGl2aXR5KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZSB8fCBBY3RpdmVET01PYmpl
Y3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOwogfQogCiB2b2lkIE1lZGlhU291cmNlOjpzdG9wKCkK
QEAgLTEwNDgsMTAgKzEwNDYsNyBAQAogewogICAgIERFQlVHX0xPRyhMT0dJREVOVElGSUVSLCAi
c2NoZWR1bGluZyAnIiwgZXZlbnROYW1lLCAiJyIpOwogCi0gICAgYXV0byBldmVudCA9IEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lLCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2Vs
YWJsZTo6Tm8pOwotICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0KLSAgICBtX2FzeW5jRXZl
bnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsKKyAgICBxdWV1ZVRhc2tUb0Rp
c3BhdGNoRXZlbnQoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZSwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFi
bGU6Ok5vKSk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIE1lZGlhU291cmNlOjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmgJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNpbmNsdWRl
ICJHZW5lcmljRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dC5oIgogI2luY2x1ZGUgIlVSTFJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL0xvZ2dlckhlbHBl
ci5oPgpAQCAtMTY1LDcgKzE2NCw2IEBACiAgICAgTWVkaWFUaW1lIG1fZHVyYXRpb247CiAgICAg
TWVkaWFUaW1lIG1fcGVuZGluZ1NlZWtUaW1lOwogICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRl
IHsgUmVhZHlTdGF0ZTo6Q2xvc2VkIH07Ci0gICAgVW5pcXVlUmVmPE1haW5UaHJlYWRHZW5lcmlj
RXZlbnRRdWV1ZT4gbV9hc3luY0V2ZW50UXVldWU7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CiAgICAgUmVmPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CiAgICAgY29uc3Qgdm9pZCogbV9sb2dJ
ZGVudGlmaWVyIHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAkocmV2aXNpb24gMjUyMjIxKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCiAj
aW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiR2Vu
ZXJpY0V2ZW50UXVldWUuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSW5iYW5kVGV4dFRyYWNrLmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5o
IgpAQCAtMTA4LDcgKzEwNyw2IEBACiAgICAgOiBBY3RpdmVET01PYmplY3Qoc291cmNlLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgLCBtX3ByaXZhdGUoV1RGTW92ZShzb3VyY2VCdWZm
ZXJQcml2YXRlKSkKICAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fYXN5bmNFdmVudFF1
ZXVlKE1haW5UaHJlYWRHZW5lcmljRXZlbnRRdWV1ZTo6Y3JlYXRlKCp0aGlzKSkKICAgICAsIG1f
YXBwZW5kQnVmZmVyVGltZXIoKnRoaXMsICZTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1ZmZlclRpbWVy
RmlyZWQpCiAgICAgLCBtX2FwcGVuZFdpbmRvd1N0YXJ0KE1lZGlhVGltZTo6emVyb1RpbWUoKSkK
ICAgICAsIG1fYXBwZW5kV2luZG93RW5kKE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUo
KSkKQEAgLTUyOSw3ICs1MjcsNyBAQAogCiBib29sIFNvdXJjZUJ1ZmZlcjo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zb3VyY2UgfHwgbV9hc3luY0V2ZW50UXVl
dWUtPmhhc1BlbmRpbmdFdmVudHMoKTsKKyAgICByZXR1cm4gbV9zb3VyY2UgfHwgQWN0aXZlRE9N
T2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXI6OnN0
b3AoKQpAQCAtNTUwLDEwICs1NDgsNyBAQAogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6c2NoZWR1bGVF
dmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAgYXV0byBldmVudCA9IEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2Fu
Y2VsYWJsZTo6Tm8pOwotICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0KLSAgICBtX2FzeW5j
RXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsKKyAgICBxdWV1ZVRhc2tU
b0Rpc3BhdGNoRXZlbnQoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZSwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNl
bGFibGU6Ok5vKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNvdXJjZUJ1ZmZlcjo6YXBwZW5k
QnVmZmVySW50ZXJuYWwoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VC
dWZmZXIuaAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBAQAog
I2luY2x1ZGUgIkF1ZGlvVHJhY2suaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVldWUuaCIKICNpbmNs
dWRlICJTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNrLmgi
CiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTIxNyw3ICsyMTYsNiBAQAogCiAgICAgUmVmPFNvdXJj
ZUJ1ZmZlclByaXZhdGU+IG1fcHJpdmF0ZTsKICAgICBNZWRpYVNvdXJjZSogbV9zb3VyY2U7Ci0g
ICAgVW5pcXVlUmVmPE1haW5UaHJlYWRHZW5lcmljRXZlbnRRdWV1ZT4gbV9hc3luY0V2ZW50UXVl
dWU7CiAgICAgQXBwZW5kTW9kZSBtX21vZGUgeyBBcHBlbmRNb2RlOjpTZWdtZW50cyB9OwogCiAg
ICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1fcGVuZGluZ0FwcGVuZERhdGE7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVy
TGlzdC5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDYgQEAKIAogU291cmNlQnVmZmVyTGlzdDo6U291cmNlQnVmZmVyTGlzdChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQpCi0gICAg
LCBtX2FzeW5jRXZlbnRRdWV1ZShNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU6OmNyZWF0ZSgq
dGhpcykpCiB7CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CkBAIC05NSwxMCArOTQsNyBAQAog
CiB2b2lkIFNvdXJjZUJ1ZmZlckxpc3Q6OnNjaGVkdWxlRXZlbnQoY29uc3QgQXRvbVN0cmluZyYg
ZXZlbnROYW1lKQogewotICAgIGF1dG8gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwg
RXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKTsKLSAgICBldmVu
dC0+c2V0VGFyZ2V0KHRoaXMpOwotCi0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVu
dChXVEZNb3ZlKGV2ZW50KSk7CisgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCp0aGlzLCBU
YXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIEV2
ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwogfQogCiBjb25z
dCBjaGFyKiBTb3VyY2VCdWZmZXJMaXN0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNl
QnVmZmVyTGlzdC5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNiBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRU
YXJnZXQuaCIKLSNpbmNsdWRlICJHZW5lcmljRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC04MCw4ICs3OSw2IEBA
CiAKICAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QgZmluYWw7CiAK
LSAgICBVbmlxdWVSZWY8TWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlPiBtX2FzeW5jRXZlbnRR
dWV1ZTsKLQogICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj4gbV9saXN0OwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9SZW1vdGVQbGF5YmFj
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFj
ay9SZW1vdGVQbGF5YmFjay5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvcmVtb3RlcGxheWJhY2svUmVtb3RlUGxheWJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw3ICs1MCw2IEBACiBSZW1vdGVQbGF5YmFjazo6UmVtb3RlUGxheWJhY2soSFRNTE1l
ZGlhRWxlbWVudCYgZWxlbWVudCkKICAgICA6IFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdChlbGVt
ZW50LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKICAgICAsIG1fbWVkaWFFbGVtZW50KG1ha2VX
ZWFrUHRyKGVsZW1lbnQpKQotICAgICwgbV9ldmVudFF1ZXVlKE1haW5UaHJlYWRHZW5lcmljRXZl
bnRRdWV1ZTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBzdXNwZW5kSWZOZWVkZWQoKTsKIH0KQEAg
LTY3LDggKzY2LDggQEAKIAogICAgIC8vIDEuIExldCBwcm9taXNlIGJlIGEgbmV3IHByb21pc2Ut
PgogICAgIC8vIDIuIFJldHVybiBwcm9taXNlLCBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMg
YmVsb3c6Ci0gICAgCi0gICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXMsIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIHByb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSAoKSBtdXRh
YmxlIHsKKworICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJj
ZTo6TWVkaWFFbGVtZW50RXZlbnQsIFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
LCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIC8vIDMu
IElmIHRoZSBkaXNhYmxlUmVtb3RlUGxheWJhY2sgYXR0cmlidXRlIGlzIHByZXNlbnQgZm9yIHRo
ZSBtZWRpYSBlbGVtZW50LCByZWplY3QgdGhlIHByb21pc2Ugd2l0aAogICAgICAgICAvLyAgICBJ
bnZhbGlkU3RhdGVFcnJvciBhbmQgYWJvcnQgYWxsIHRoZSByZW1haW5pbmcgc3RlcHMuCiAgICAg
ICAgIGlmICghbV9tZWRpYUVsZW1lbnQKQEAgLTk2LDcgKzk1LDcgQEAKICAgICAgICAgLy8gOC4g
RnVsZmlsbCBwcm9taXNlIHdpdGggdGhlIGNhbGxiYWNrSWQgYW5kIHJ1biB0aGUgZm9sbG93aW5n
IHN0ZXBzIGluIHBhcmFsbGVsOgogICAgICAgICBwcm9taXNlLT53aGVuU2V0dGxlZChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWZQdHIodGhpcyksIGNhbGxiYWNrSWRdIHsKICAgICAgICAg
ICAgIC8vIDguMSBRdWV1ZSBhIHRhc2sgdG8gaW52b2tlIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBj
dXJyZW50IGF2YWlsYWJpbGl0eSBmb3IgdGhlIG1lZGlhIGVsZW1lbnQuCi0gICAgICAgICAgICBt
X3Rhc2tRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpcywgY2FsbGJhY2tJZF0geworICAgICAgICAgICAg
cXVldWVUYXNrS2VlcGluZ09iamVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1l
bnRFdmVudCwgW3RoaXMsIGNhbGxiYWNrSWRdIHsKICAgICAgICAgICAgICAgICBhdXRvIGZvdW5k
Q2FsbGJhY2sgPSBtX2NhbGxiYWNrTWFwLmZpbmQoY2FsbGJhY2tJZCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGZvdW5kQ2FsbGJhY2sgPT0gbV9jYWxsYmFja01hcC5lbmQoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMTIxLDcgKzEyMCw3IEBACiAgICAgLy8gMS4gTGV0IHByb21p
c2UgYmUgYSBuZXcgcHJvbWlzZS0+CiAgICAgLy8gMi4gUmV0dXJuIHByb21pc2UsIGFuZCBydW4g
dGhlIGZvbGxvd2luZyBzdGVwcyBiZWxvdzoKIAotICAgIG1fdGFza1F1ZXVlLmVucXVldWVUYXNr
KFt0aGlzLCBpZCA9IFdURk1vdmUoaWQpLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gewor
ICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFF
bGVtZW50RXZlbnQsIFt0aGlzLCBpZCA9IFdURk1vdmUoaWQpLCBwcm9taXNlID0gV1RGTW92ZShw
cm9taXNlKV0gewogICAgICAgICAvLyAzLiBJZiB0aGUgZGlzYWJsZVJlbW90ZVBsYXliYWNrIGF0
dHJpYnV0ZSBpcyBwcmVzZW50IGZvciB0aGUgbWVkaWEgZWxlbWVudCwgcmVqZWN0IHByb21pc2Ug
d2l0aAogICAgICAgICAvLyAgICBJbnZhbGlkU3RhdGVFcnJvciBhbmQgYWJvcnQgYWxsIHRoZSBy
ZW1haW5pbmcgc3RlcHMuCiAgICAgICAgIGlmICghbV9tZWRpYUVsZW1lbnQKQEAgLTE2NCw3ICsx
NjMsNyBAQAogICAgIC8vIDEuIExldCBwcm9taXNlIGJlIGEgbmV3IHByb21pc2UtPgogICAgIC8v
IDIuIFJldHVybiBwcm9taXNlLCBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgYmVsb3c6CiAK
LSAgICBtX3Rhc2tRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpcywgcHJvbWlzZSA9IFdURk1vdmUocHJv
bWlzZSksIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKV0gKCkgbXV0YWJsZSB7CisgICAgcXVldWVUYXNrS2VlcGluZ09i
amVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXMsIHBy
b21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCBwcm9jZXNzaW5nVXNlckdlc3R1cmUgPSBVc2VyR2Vz
dHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCldICgpIG11dGFibGUgewogICAg
ICAgICAvLyAzLiBJZiB0aGUgZGlzYWJsZVJlbW90ZVBsYXliYWNrIGF0dHJpYnV0ZSBpcyBwcmVz
ZW50IGZvciB0aGUgbWVkaWEgZWxlbWVudCwgcmVqZWN0IHRoZSBwcm9taXNlIHdpdGgKICAgICAg
ICAgLy8gICAgSW52YWxpZFN0YXRlRXJyb3IgYW5kIGFib3J0IGFsbCB0aGUgcmVtYWluaW5nIHN0
ZXBzLgogICAgICAgICBpZiAoIW1fbWVkaWFFbGVtZW50CkBAIC0yNjcsMTUgKzI2NiwxNiBAQAog
CiAgICAgbV9zdGF0ZSA9IHN0YXRlOwogCisgICAgLy8gRklYTUU6IFRoZSBzcGVjIGRvZXNuJ3Qg
c2F5IHdoaWNoIHRhc2sgc291cmNlLiBodHRwczovL2dpdGh1Yi5jb20vdzNjL3JlbW90ZS1wbGF5
YmFjay9pc3N1ZXMvMTI4CiAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgY2FzZSBTdGF0ZTo6
Q29ubmVjdGVkOgotICAgICAgICBtX2V2ZW50UXVldWUtPmVucXVldWVFdmVudChFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5jb25uZWN0RXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVu
dDo6SXNDYW5jZWxhYmxlOjpObykpOworICAgICAgICBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQo
KnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5jb25uZWN0RXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5j
ZWxhYmxlOjpObykpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YXRlOjpDb25uZWN0aW5n
OgotICAgICAgICBtX2V2ZW50UXVldWUtPmVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5jb25uZWN0aW5nRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXND
YW5jZWxhYmxlOjpObykpOworICAgICAgICBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKnRoaXMs
IFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5jb25uZWN0aW5nRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxh
YmxlOjpObykpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YXRlOjpEaXNjb25uZWN0ZWQ6
Ci0gICAgICAgIG1fZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLmRpc2Nvbm5lY3RFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0Nh
bmNlbGFibGU6Ok5vKSk7CisgICAgICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywg
VGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmRpc2Nvbm5lY3RFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFi
bGU6Ok5vKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTMwNyw3ICszMDcsNyBAQAog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyAyLiBRdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xs
b3dpbmcgc3RlcHM6Ci0gICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdIHsKKyAgICBx
dWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVu
dEV2ZW50LCBbdGhpc10gewogICAgICAgICAvLyAyLjEgUmVxdWVzdCBkaXNjb25uZWN0aW9uIG9m
IHJlbW90ZSBmcm9tIHRoZSBkZXZpY2UuIEltcGxlbWVudGF0aW9uIGlzIHVzZXIgYWdlbnQgc3Bl
Y2lmaWMuCiAgICAgICAgIC8vIE5PVEU6IEltcGxlbWVudGVkIGJ5IE1lZGlhUGxheWVyOjpzZXRX
aXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkKICAgICAgICAgLy8gMi4yIENoYW5nZSB0aGUgcmVtb3Rl
J3Mgc3RhdGUgdG8gZGlzY29ubmVjdGVkLgpAQCAtMzgwLDcgKzM4MCw3IEBACiAgICAgICAgIHJl
dHVybjsKICAgICBtX2F2YWlsYWJsZSA9IGF2YWlsYWJsZTsKIAotICAgIG1fdGFza1F1ZXVlLmVu
cXVldWVUYXNrKFt0aGlzXSB7CisgICAgcXVldWVUYXNrS2VlcGluZ09iamVjdEFsaXZlKCp0aGlz
LCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXNdIHsKICAgICAgICAgLy8gUHJv
dGVjdCBtX2NhbGxiYWNrTWFwIGFnYWluc3QgbXV0YXRpb24gd2hpbGUgaXQncyBiZWluZyBpdGVy
YXRlZCBvdmVyLgogICAgICAgICBWZWN0b3I8UmVmPFJlbW90ZVBsYXliYWNrQXZhaWxhYmlsaXR5
Q2FsbGJhY2s+PiBjYWxsYmFja3M7CiAgICAgICAgIGNhbGxiYWNrcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1fY2FsbGJhY2tNYXAuc2l6ZSgpKTsKQEAgLTQwMywxMiArNDAzLDYgQEAKICAgICBy
ZXR1cm4gIlJlbW90ZVBsYXliYWNrIjsKIH0KIAotdm9pZCBSZW1vdGVQbGF5YmFjazo6c3RvcCgp
Ci17Ci0gICAgbV90YXNrUXVldWUuY2xvc2UoKTsKLSAgICBtX2V2ZW50UXVldWUtPmNsb3NlKCk7
CiB9CiAKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3JlbW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9S
ZW1vdGVQbGF5YmFjay5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3JlbW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2
ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVldWUuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgpAQCAtODcsNyArODYsNiBAQAogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0LgogICAg
IGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lk
IHN0b3AoKSBmaW5hbDsKIAogICAgIC8vIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEuCiAgICAg
RXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBSZW1vdGVQbGF5YmFja0V2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQpAQCAtMTA1
LDkgKzEwMyw2IEBACiAgICAgUHJvbWlzZVZlY3RvciBtX3Byb21wdFByb21pc2VzOwogICAgIFN0
YXRlIG1fc3RhdGUgeyBTdGF0ZTo6RGlzY29ubmVjdGVkIH07CiAgICAgYm9vbCBtX2F2YWlsYWJs
ZSB7IGZhbHNlIH07Ci0KLSAgICBVbmlxdWVSZWY8TWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVl
PiBtX2V2ZW50UXVldWU7Ci0gICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV90YXNrUXVldWU7
CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29u
dGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUx
LDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5j
bHVkZSAiR2Fpbk5vZGUuaCIKLSNpbmNsdWRlICJHZW5lcmljRXZlbnRRdWV1ZS5oIgogI2luY2x1
ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5oIgogI2luY2x1ZGUgIkhSVEZQYW5uZXIuaCIKICNpbmNs
dWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgpAQCAtMTQwLDcgKzEzOSw2IEBACiAgICAgLCBt
X2xvZ0lkZW50aWZpZXIodW5pcXVlTG9nSWRlbnRpZmllcigpKQogI2VuZGlmCiAgICAgLCBtX21l
ZGlhU2Vzc2lvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzKSkKLSAgICAsIG1f
ZXZlbnRRdWV1ZShNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU6OmNyZWF0ZSgqdGhpcykpCiB7
CiAgICAgLy8gQWNjb3JkaW5nIHRvIHNwZWMgQXVkaW9Db250ZXh0IG11c3QgZGllIG9ubHkgYWZ0
ZXIgcGFnZSBuYXZpZ2F0ZS4KICAgICAvLyBMZXRzIG1hcmsgaXQgYXMgQWN0aXZlRE9NT2JqZWN0
IHdpdGggcGVuZGluZyBhY3Rpdml0eSBhbmQgdW5tYXJrIGl0IGluIGNsZWFyIG1ldGhvZC4KQEAg
LTE2Niw3ICsxNjQsNiBAQAogI2VuZGlmCiAgICAgLCBtX2lzT2ZmbGluZUNvbnRleHQodHJ1ZSkK
ICAgICAsIG1fbWVkaWFTZXNzaW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpjcmVhdGUoKnRoaXMp
KQotICAgICwgbV9ldmVudFF1ZXVlKE1haW5UaHJlYWRHZW5lcmljRXZlbnRRdWV1ZTo6Y3JlYXRl
KCp0aGlzKSkKICAgICAsIG1fcmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkKIHsKICAgICBjb25z
dHJ1Y3RDb21tb24oKTsKQEAgLTMwOSw4ICszMDYsMTAgQEAKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9zdGF0ZSA9IHN0YXRlOwotICAgIG1fZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0YXRlY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6
OlllcywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKIAorICAgIC8vIEZJWE1FOiBXZWJBdWRp
byBkb2Vzbid0IHNwZWNpZnkgd2hpY2ggdGFzayBzb3VyY2UgdG8gdXNlLiBTZWUgaHR0cHM6Ly9n
aXRodWIuY29tL1dlYkF1ZGlvL3dlYi1hdWRpby1hcGkvaXNzdWVzLzIwOTUKKyAgICBxdWV1ZVRh
c2tUb0Rpc3BhdGNoRXZlbnQoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdGF0ZWNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnVi
YmxlOjpZZXMsIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CisKICAgICBzaXplX3Qgc3RhdGVJ
bmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc3RhdGUpOwogICAgIGlmIChzdGF0ZUluZGV4ID49
IG1fc3RhdGVSZWFjdGlvbnMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjE5LDcgKzEy
MTgsOSBAQAogICAgICAgICByZXR1cm47CiAKICAgICBjbGVhclBlbmRpbmdBY3Rpdml0eUlmRXhp
dEVhcmx5LnJlbGVhc2UoKTsKLSAgICBtX2V2ZW50UXVldWUtPmVucXVldWVFdmVudChPZmZsaW5l
QXVkaW9Db21wbGV0aW9uRXZlbnQ6OmNyZWF0ZShyZW5kZXJlZEJ1ZmZlcikpOworCisgICAgLy8g
RklYTUU6IFdlYkF1ZGlvIGRvZXNuJ3Qgc3BlY2lmeSB3aGljaCB0YXNrIHNvdXJjZSB0byB1c2Uu
IFNlZSBodHRwczovL2dpdGh1Yi5jb20vV2ViQXVkaW8vd2ViLWF1ZGlvLWFwaS9pc3N1ZXMvMjA5
NQorICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFF
bGVtZW50RXZlbnQsIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3JlYXRlKHJlbmRlcmVk
QnVmZmVyKSk7CiB9CiAKIHZvaWQgQXVkaW9Db250ZXh0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBl
dmVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuaAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNiBAQAogY2xh
c3MgRHluYW1pY3NDb21wcmVzc29yTm9kZTsKIGNsYXNzIEdhaW5Ob2RlOwogY2xhc3MgSFRNTE1l
ZGlhRWxlbWVudDsKLWNsYXNzIE1haW5UaHJlYWRHZW5lcmljRXZlbnRRdWV1ZTsKIGNsYXNzIE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTsKIGNsYXNzIE1lZGlhU3RyZWFtOwogY2xhc3MgTWVk
aWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTsKQEAgLTI1Miw2ICsyNTEsNyBAQAogCiAgICAg
Ly8gRXZlbnRUYXJnZXQKICAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVy
ZmFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEF1ZGlvQ29udGV4dEV2ZW50VGFyZ2V0SW50ZXJm
YWNlVHlwZTsgfQorICAgIHZvaWQgZGlzcGF0Y2hFdmVudChFdmVudCYpIGZpbmFsOwogCiAgICAg
Ly8gUmVjb25jaWxlIHJlZi9kZXJlZiB3aGljaCBhcmUgZGVmaW5lZCBib3RoIGluIFRocmVhZFNh
ZmVSZWZDb3VudGVkIGFuZCBFdmVudFRhcmdldC4KICAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291
bnRlZDo6cmVmOwpAQCAtMzIxLDcgKzMyMSw2IEBACiAKICAgICAvLyBFdmVudFRhcmdldAogICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBm
aW5hbDsKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBmaW5hbDsKIAogICAgIC8vIE1l
ZGlhUHJvZHVjZXIKICAgICBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbWVkaWFTdGF0
ZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNDE3LDcgKzQxNiw2IEBACiAgICAgVmVjdG9yPFZlY3Rv
cjxET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4+PiBtX3N0YXRlUmVhY3Rpb25zOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFBsYXRmb3JtTWVkaWFTZXNzaW9uPiBtX21lZGlhU2Vzc2lvbjsKLSAgICBV
bmlxdWVSZWY8TWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlPiBtX2V2ZW50UXVldWU7CiAKICAg
ICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyVGFyZ2V0OwogICAgIFJlZlB0cjxBdWRpb0Rl
c3RpbmF0aW9uTm9kZT4gbV9kZXN0aW5hdGlvbk5vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vQWJzdHJhY3RFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
QWJzdHJhY3RFdmVudExvb3AuaAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0Fic3RyYWN0RXZlbnRMb29wLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwzNyBA
QAogI2luY2x1ZGUgIlRhc2tTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IEV2ZW50TG9vcFRhc2tHcm91cDsKK2NsYXNzIEV2ZW50VGFyZ2V0OwogY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKIAorY2xhc3MgRXZlbnRMb29wVGFzayB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoRXZlbnRMb29wVGFzayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FdmVudExvb3BUYXNrKCkgPSBkZWZhdWx0OworCisgICAg
VGFza1NvdXJjZSB0YXNrU291cmNlKCkgeyByZXR1cm4gbV90YXNrU291cmNlOyB9CisgICAgdm9p
ZCogZ3JvdXBJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9ncm91cElkZW50aWZpZXI7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZSgpID0gMDsKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBF
dmVudExvb3BUYXNrKFRhc2tTb3VyY2Ugc291cmNlLCB2b2lkKiBncm91cElkZW50aWZpZXIgPSBu
dWxscHRyKQorICAgICAgICA6IG1fdGFza1NvdXJjZShzb3VyY2UpCisgICAgICAgICwgbV9ncm91
cElkZW50aWZpZXIoZ3JvdXBJZGVudGlmaWVyKQorICAgIHsgfQorCisgICAgY29uc3QgVGFza1Nv
dXJjZSBtX3Rhc2tTb3VyY2U7CisgICAgdm9pZCogbV9ncm91cElkZW50aWZpZXI7Cit9OworCiAv
LyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwj
ZXZlbnQtbG9vcAogY2xhc3MgQWJzdHJhY3RFdmVudExvb3AgOiBwdWJsaWMgUmVmQ291bnRlZDxB
YnN0cmFjdEV2ZW50TG9vcD4gewogcHVibGljOgpAQCAtNDEsNiArNjcsMTEgQEAKICAgICB0eXBl
ZGVmIFdURjo6RnVuY3Rpb248dm9pZCAoKT4gVGFza0Z1bmN0aW9uOwogICAgIHZpcnR1YWwgdm9p
ZCBxdWV1ZVRhc2soVGFza1NvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFRhc2tGdW5j
dGlvbiYmKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgcXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0
cjxFdmVudExvb3BUYXNrPiYmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcXVldWVHcm91cGVk
VGFzayhUYXNrU291cmNlLCBFdmVudFRhcmdldCYsIFRhc2tGdW5jdGlvbiYmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUFsbFRhc2tzRm9yR3JvdXAoRXZlbnRUYXJnZXQmKSA9IDA7CisK
IHByb3RlY3RlZDoKICAgICBBYnN0cmFjdEV2ZW50TG9vcCgpID0gZGVmYXVsdDsKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMjUyMjIxKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMSwxMiArMTMxLDcwIEBACiAgICAgcmV0dXJuIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSAmJiAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBl
ZCgpICYmICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFjdGl2ZURPTU9iamVjdHNBcmVTdXNw
ZW5kZWQoKTsKIH0KIAotdm9pZCBBY3RpdmVET01PYmplY3Q6OnF1ZXVlVGFza0luRXZlbnRMb29w
KFRhc2tTb3VyY2Ugc291cmNlLCBGdW5jdGlvbjx2b2lkICgpPiYmIHRhc2spCitjbGFzcyBBY3Rp
dmVET01PYmplY3RUYXNrIDogcHVibGljIEV2ZW50TG9vcFRhc2sgeworcHVibGljOgorICAgIEFj
dGl2ZURPTU9iamVjdFRhc2soVGFza1NvdXJjZSBzb3VyY2UsIEFjdGl2ZURPTU9iamVjdCYgb2Jq
ZWN0LCBGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQorICAgICAgICA6IEV2ZW50TG9vcFRh
c2soc291cmNlKQorICAgICAgICAsIG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2Z1bmN0
aW9uKFdURk1vdmUoZnVuY3Rpb24pKQorICAgIHsKKyAgICB9CisKKyAgICB+QWN0aXZlRE9NT2Jq
ZWN0VGFzaygpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZSgpIGZpbmFsIHsgbV9m
dW5jdGlvbigpOyB9CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGZpbmFsIHsgcmV0dXJuIG1fb2JqZWN0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsgfQorCitwcml2YXRlOgorICAgIEFjdGl2ZURPTU9iamVjdCYgbV9vYmplY3Q7CisgICAgQWJz
dHJhY3RFdmVudExvb3A6OlRhc2tGdW5jdGlvbiBtX2Z1bmN0aW9uOworfTsKKwordm9pZCBBY3Rp
dmVET01PYmplY3Q6OnF1ZXVlVGFza0luRXZlbnRMb29wKFRhc2tTb3VyY2Ugc291cmNlLCBGdW5j
dGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogewogICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47Ci0g
ICAgY29udGV4dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKHNvdXJjZSwgKmNvbnRleHQsIFdURk1v
dmUodGFzaykpOworICAgIGF1dG8gdGFzayA9IG1ha2VVbmlxdWU8QWN0aXZlRE9NT2JqZWN0VGFz
az4oc291cmNlLCAqdGhpcywgV1RGTW92ZShmdW5jdGlvbikpOworICAgIGNvbnRleHQtPmV2ZW50
TG9vcCgpLnF1ZXVlVGFzayhXVEZNb3ZlKHRhc2spKTsKIH0KIAorY2xhc3MgQWN0aXZlRE9NT2Jq
ZWN0RXZlbnREaXNwYXRjaFRhc2sgOiBwdWJsaWMgRXZlbnRMb29wVGFzayB7CitwdWJsaWM6Cisg
ICAgQWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRjaFRhc2soVGFza1NvdXJjZSBzb3VyY2UsIHZv
aWQqIGdyb3VwSWRlbnRpZmllciwgQWN0aXZlRE9NT2JqZWN0JiBvYmplY3QsIEV2ZW50VGFyZ2V0
JiB0YXJnZXQsIFJlZjxFdmVudD4mJiBldmVudCkKKyAgICAgICAgOiBFdmVudExvb3BUYXNrKHNv
dXJjZSwgZ3JvdXBJZGVudGlmaWVyKQorICAgICAgICAsIG1fb2JqZWN0KG9iamVjdCkKKyAgICAg
ICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgICAgICwgbV9ldmVudChXVEZNb3ZlKGV2ZW50KSkK
KyAgICB7CisgICAgICAgICsrbV9vYmplY3QubV9wZW5kaW5nQWN0aXZpdHlDb3VudDsKKyAgICB9
CisKKyAgICB+QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRjaFRhc2soKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fb2JqZWN0Lm1fcGVuZGluZ0FjdGl2aXR5Q291bnQpOworICAgICAgICAtLW1f
b2JqZWN0Lm1fcGVuZGluZ0FjdGl2aXR5Q291bnQ7CisgICAgfQorCisgICAgdm9pZCBleGVjdXRl
KCkgZmluYWwgeyBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChtX2V2ZW50LmdldCgpKTsgfQorICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBmaW5hbCB7
IHJldHVybiBtX29iamVjdC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KKworcHJpdmF0ZToK
KyAgICBBY3RpdmVET01PYmplY3QmIG1fb2JqZWN0OworICAgIFJlZjxFdmVudFRhcmdldD4gbV90
YXJnZXQ7CisgICAgUmVmPEV2ZW50PiBtX2V2ZW50OworfTsKKwordm9pZCBBY3RpdmVET01PYmpl
Y3Q6OnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudChFdmVudFRhcmdldCYgdGFyZ2V0LCBUYXNrU291
cmNlIHNvdXJjZSwgUmVmPEV2ZW50PiYmIGV2ZW50LCB2b2lkKiBncm91cElkZW50aWZpZXIpCit7
CisgICAgQVNTRVJUKCFldmVudC0+dGFyZ2V0KCkgfHwgJnRhcmdldCA9PSBldmVudC0+dGFyZ2V0
KCkpOworICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgYXV0byB0YXNrID0gbWFrZVVuaXF1
ZTxBY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFzaz4oc291cmNlLCBncm91cElkZW50aWZp
ZXIsICp0aGlzLCB0YXJnZXQsIFdURk1vdmUoZXZlbnQpKTsKKyAgICBjb250ZXh0LT5ldmVudExv
b3AoKS5xdWV1ZVRhc2soV1RGTW92ZSh0YXNrKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgJKHJldmlzaW9uIDI1MjIy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVu
dDsKK2NsYXNzIEV2ZW50OworY2xhc3MgRXZlbnRUYXJnZXQ7CiAKIGVudW0gY2xhc3MgUmVhc29u
Rm9yU3VzcGVuc2lvbiB7CiAgICAgSmF2YVNjcmlwdERlYnVnZ2VyUGF1c2VkLApAQCAtMTE2LDcg
KzExOCw3IEBACiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBzdGF0aWMgdm9pZCBxdWV1
ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoVCYgb2JqZWN0LCBUYXNrU291cmNlIHNvdXJjZSwgRnVu
Y3Rpb248dm9pZCAoKT4mJiB0YXNrKQogICAgIHsKLSAgICAgICAgb2JqZWN0LnF1ZXVlVGFza0lu
RXZlbnRMb29wKHNvdXJjZSwgW3Byb3RlY3RlZE9iamVjdCA9IG1ha2VSZWYob2JqZWN0KSwgYWN0
aXZpdHkgPSBvYmplY3QubWFrZVBlbmRpbmdBY3Rpdml0eShvYmplY3QpLCB0YXNrID0gV1RGTW92
ZSh0YXNrKV0gKCkgeworICAgICAgICBvYmplY3QucXVldWVUYXNrSW5FdmVudExvb3Aoc291cmNl
LCBbcHJvdGVjdGVkT2JqZWN0ID0gbWFrZVJlZihvYmplY3QpLCBhY3Rpdml0eSA9IG9iamVjdC5B
Y3RpdmVET01PYmplY3Q6Om1ha2VQZW5kaW5nQWN0aXZpdHkob2JqZWN0KSwgdGFzayA9IFdURk1v
dmUodGFzayldICgpIHsKICAgICAgICAgICAgIHRhc2soKTsKICAgICAgICAgfSk7CiAgICAgfQpA
QCAtMTI0LDEyICsxMjYsMTUgQEAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFdmVudFRhcmdldFR5
cGUsIHR5cGVuYW1lIEV2ZW50VHlwZT4KICAgICBzdGF0aWMgdm9pZCBxdWV1ZVRhc2tUb0Rpc3Bh
dGNoRXZlbnQoRXZlbnRUYXJnZXRUeXBlJiB0YXJnZXQsIFRhc2tTb3VyY2Ugc291cmNlLCBSZWY8
RXZlbnRUeXBlPiYmIGV2ZW50KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFldmVudC0+dGFyZ2V0
KCkgfHwgJnRhcmdldCA9PSBldmVudC0+dGFyZ2V0KCkpOwotICAgICAgICBxdWV1ZVRhc2tLZWVw
aW5nT2JqZWN0QWxpdmUodGFyZ2V0LCBzb3VyY2UsIFsmdGFyZ2V0LCBldmVudCA9IFdURk1vdmUo
ZXZlbnQpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2
ZW50LmdldCgpKTsKLSAgICAgICAgfSk7CisgICAgICAgIHRhcmdldC5xdWV1ZVRhc2tUb0Rpc3Bh
dGNoRXZlbnQodGFyZ2V0LCBzb3VyY2UsIFdURk1vdmUoZXZlbnQpLCBudWxscHRyKTsKICAgICB9
CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFdmVudFRhcmdldFR5cGUsIHR5cGVuYW1lIEV2ZW50
VHlwZT4KKyAgICBzdGF0aWMgdm9pZCBxdWV1ZUdyb3VwZWRUYXNrVG9EaXNwYXRjaEV2ZW50KEV2
ZW50VGFyZ2V0VHlwZSYgdGFyZ2V0LCBUYXNrU291cmNlIHNvdXJjZSwgUmVmPEV2ZW50VHlwZT4m
JiBldmVudCkKKyAgICB7CisgICAgICAgIHRhcmdldC5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQo
dGFyZ2V0LCBzb3VyY2UsIFdURk1vdmUoZXZlbnQpLCAmdGFyZ2V0KTsKKyAgICB9CisKIHByb3Rl
Y3RlZDoKICAgICBleHBsaWNpdCBBY3RpdmVET01PYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwogICAgIGV4cGxpY2l0IEFjdGl2ZURPTU9iamVjdChEb2N1bWVudCopOwpAQCAtMTQxLDYg
KzE0Niw3IEBACiAgICAgQWN0aXZlRE9NT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBD
aGVja2VkU2NyaXB0RXhlY3V0aW9uQ29udGV4dFR5cGUpOwogCiAgICAgdm9pZCBxdWV1ZVRhc2tJ
bkV2ZW50TG9vcChUYXNrU291cmNlLCBGdW5jdGlvbjx2b2lkICgpPiYmKTsKKyAgICB2b2lkIHF1
ZXVlVGFza1RvRGlzcGF0Y2hFdmVudChFdmVudFRhcmdldCYsIFRhc2tTb3VyY2UsIFJlZjxFdmVu
dD4mJiwgdm9pZCogZ3JvdXBJZGVudGlmaWVyKTsKIAogICAgIHVuc2lnbmVkIG1fcGVuZGluZ0Fj
dGl2aXR5Q291bnQgeyAwIH07CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApAQCAtMTQ3LDYgKzE1Myw4
IEBACiAgICAgYm9vbCBtX3N1c3BlbmRJZk5lZWRlZFdhc0NhbGxlZCB7IGZhbHNlIH07CiAgICAg
UmVmPFRocmVhZD4gbV9jcmVhdGlvblRocmVhZCB7IFRocmVhZDo6Y3VycmVudCgpIH07CiAjZW5k
aWYKKworICAgIGZyaWVuZCBjbGFzcyBBY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFzazsK
IH07CiAKICNpZiBBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UYXNr
U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Rhc2tTb3VyY2UuaAko
cmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Rhc2tTb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogICAgIEZpbGVSZWFkaW5nLAogICAgIEZvbnRM
b2FkaW5nLAogICAgIElkbGVUYXNrLAorICAgIE1lZGlhRWxlbWVudEV2ZW50LAogICAgIE5ldHdv
cmtpbmcsCiAgICAgUG9zdGVkTWVzc2FnZVF1ZXVlLAogICAgIFVzZXJJbnRlcmFjdGlvbgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5jcHAJKHJldmlzaW9uIDI1MjIyMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCwyOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZ1bmN0
aW9uVGFzayBmaW5hbCA6IHB1YmxpYyBFdmVudExvb3BUYXNrIHsKK3B1YmxpYzoKKyAgICBGdW5j
dGlvblRhc2soVGFza1NvdXJjZSBzb3VyY2UsIEFic3RyYWN0RXZlbnRMb29wOjpUYXNrRnVuY3Rp
b24mJiBmdW5jdGlvbiwgRG9jdW1lbnQmIGRvY3VtZW50LCB2b2lkKiBncm91cElkZW50aWZpZXIp
CisgICAgICAgIDogRXZlbnRMb29wVGFzayhzb3VyY2UsIGdyb3VwSWRlbnRpZmllcikKKyAgICAg
ICAgLCBtX2Z1bmN0aW9uKFdURk1vdmUoZnVuY3Rpb24pKQorICAgICAgICAsIG1fZG9jdW1lbnRJ
ZGVudGlmaWVyKGRvY3VtZW50LmlkZW50aWZpZXIoKSkKKyAgICB7IH0KKworICAgIHZvaWQgZXhl
Y3V0ZSgpIGZpbmFsCisgICAgeworICAgICAgICBtX2Z1bmN0aW9uKCk7CisgICAgfQorCisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGZpbmFsCisg
ICAgeworICAgICAgICByZXR1cm4gRG9jdW1lbnQ6OmFsbERvY3VtZW50c01hcCgpLmdldChtX2Rv
Y3VtZW50SWRlbnRpZmllcik7CisgICAgfQorCitwcml2YXRlOgorICAgIEFic3RyYWN0RXZlbnRM
b29wOjpUYXNrRnVuY3Rpb24gbV9mdW5jdGlvbjsKKyAgICBEb2N1bWVudElkZW50aWZpZXIgbV9k
b2N1bWVudElkZW50aWZpZXI7Cit9OworCiBzdGF0aWMgSGFzaE1hcDxSZWdpc3RyYWJsZURvbWFp
biwgV2luZG93RXZlbnRMb29wKj4mIHdpbmRvd0V2ZW50TG9vcE1hcCgpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtNjQsOSArODcsMzggQEAKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChpczxEb2N1bWVudD4oY29udGV4dCkpOwogICAg
IHNjaGVkdWxlVG9SdW5JZk5lZWRlZCgpOwotICAgIG1fdGFza3MuYXBwZW5kKFRhc2sgeyBzb3Vy
Y2UsIFdURk1vdmUodGFzayksIGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5pZGVudGlmaWVy
KCkgfSk7CisgICAgbV90YXNrcy5hcHBlbmQobWFrZVVuaXF1ZTxGdW5jdGlvblRhc2s+KHNvdXJj
ZSwgV1RGTW92ZSh0YXNrKSwgZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLCBudWxscHRyKSk7
CiB9CiAKK3ZvaWQgV2luZG93RXZlbnRMb29wOjpxdWV1ZVRhc2soc3RkOjp1bmlxdWVfcHRyPEV2
ZW50TG9vcFRhc2s+JiYgdGFzaykKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0gdGFzay0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIEFTU0VSVChpczxEb2N1bWVudD4oY29udGV4dCkpOworICAgIHNj
aGVkdWxlVG9SdW5JZk5lZWRlZCgpOworICAgIG1fdGFza3MuYXBwZW5kKFdURk1vdmUodGFzaykp
OworfQorCit2b2lkIFdpbmRvd0V2ZW50TG9vcDo6cXVldWVHcm91cGVkVGFzayhUYXNrU291cmNl
IHNvdXJjZSwgRXZlbnRUYXJnZXQmIHRhc2tHcm91cCwgVGFza0Z1bmN0aW9uJiYgdGFzaykKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8qIGNvbnRleHQgPSB0YXNrR3Jv
dXAuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKGlzPERvY3VtZW50PigqY29udGV4dCkpOworICAgIHNjaGVk
dWxlVG9SdW5JZk5lZWRlZCgpOworICAgIG1fdGFza3MuYXBwZW5kKG1ha2VVbmlxdWU8RnVuY3Rp
b25UYXNrPihzb3VyY2UsIFdURk1vdmUodGFzayksIGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCksICZ0YXNrR3JvdXApKTsKK30KKwordm9pZCBXaW5kb3dFdmVudExvb3A6OnJlbW92ZUFsbFRh
c2tzRm9yR3JvdXAoRXZlbnRUYXJnZXQmIHRhc2tHcm91cCkKK3sKKyAgICBtX3Rhc2tzLnJlbW92
ZUFsbE1hdGNoaW5nKFtpZGVudGlmaWVyID0gJnRhc2tHcm91cF0gKGF1dG8mIHRhc2spIHsKKyAg
ICAgICAgcmV0dXJuIHRhc2stPmdyb3VwSWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7CisgICAg
fSk7Cit9CisKIHZvaWQgV2luZG93RXZlbnRMb29wOjpzdXNwZW5kKERvY3VtZW50JikKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtODIsOCArMTM0LDkgQEAKIAogdm9pZCBXaW5k
b3dFdmVudExvb3A6OnN0b3AoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIG1fdGFza3MucmVt
b3ZlQWxsTWF0Y2hpbmcoW2lkZW50aWZpZXIgPSBkb2N1bWVudC5pZGVudGlmaWVyKCldIChhdXRv
JiB0YXNrKSB7Ci0gICAgICAgIHJldHVybiB0YXNrLmRvY3VtZW50SWRlbnRpZmllciA9PSBpZGVu
dGlmaWVyOworICAgIG1fdGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoWyZkb2N1bWVudF0gKGF1dG8m
IHRhc2spIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IHRhc2stPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuICFjb250ZXh0IHx8IGNvbnRleHQgPT0gJmRvY3VtZW50
OwogICAgIH0pOwogfQogCkBAIC0xMDQsMTkgKzE1NywyNyBAQAogICAgIGlmIChtX3Rhc2tzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFRhc2s+IHRhc2tzID0gV1RG
TW92ZShtX3Rhc2tzKTsKKyAgICBhdXRvIHRhc2tzID0gc3RkOjpleGNoYW5nZShtX3Rhc2tzLCB7
IH0pOwogICAgIG1fZG9jdW1lbnRJZGVudGlmaWVyc0ZvclN1c3BlbmRlZFRhc2tzLmNsZWFyKCk7
Ci0gICAgVmVjdG9yPFRhc2s+IHJlbWFpbmluZ1Rhc2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8RXZlbnRMb29wVGFzaz4+IHJlbWFpbmluZ1Rhc2tzOwogICAgIGZvciAoYXV0byYgdGFz
ayA6IHRhc2tzKSB7Ci0gICAgICAgIGF1dG8qIGRvY3VtZW50ID0gRG9jdW1lbnQ6OmFsbERvY3Vt
ZW50c01hcCgpLmdldCh0YXNrLmRvY3VtZW50SWRlbnRpZmllcik7Ci0gICAgICAgIGlmICghZG9j
dW1lbnQgfHwgZG9jdW1lbnQtPmFjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKCkpCisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSB0YXNrLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghY29udGV4dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZG9jdW1l
bnQtPmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSkgewotICAgICAgICAgICAgbV9kb2N1
bWVudElkZW50aWZpZXJzRm9yU3VzcGVuZGVkVGFza3MuYWRkKHRhc2suZG9jdW1lbnRJZGVudGlm
aWVyKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCFjb250ZXh0IHx8IGlzPERvY3VtZW50Pihjb250ZXh0KSk7CisgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKworICAgICAgICBpZiAoZG9jdW1l
bnQuYWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKSB7Cisg
ICAgICAgICAgICAvLyBBIHN1c3BlbmVkIEFjdGl2ZURPTU9iamVjdCBkb2VzIG5vdCBjaGFuZ2Ug
aXRzIHNjcmlwdCBleGVjdXRpb24gY29udGV4dCB1bnRpbCByZXN1bWUuCisgICAgICAgICAgICBt
X2RvY3VtZW50SWRlbnRpZmllcnNGb3JTdXNwZW5kZWRUYXNrcy5hZGQoZG9jdW1lbnQuaWRlbnRp
ZmllcigpKTsKICAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLmFwcGVuZChXVEZNb3ZlKHRhc2sp
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIHRhc2sudGFzaygp
OworCisgICAgICAgIHRhc2stPmV4ZWN1dGUoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiB0YXNr
IDogbV90YXNrcykKICAgICAgICAgcmVtYWluaW5nVGFza3MuYXBwZW5kKFdURk1vdmUodGFzaykp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuaAkocmV2aXNpb24gMjUyMjIx
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw4ICs0MSwxMyBAQAogCiAgICAgfldpbmRvd0V2ZW50TG9vcCgpOwogCi0gICAgdm9p
ZCBxdWV1ZVRhc2soVGFza1NvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFRhc2tGdW5j
dGlvbiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHF1ZXVlVGFzayhUYXNrU291cmNlLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgVGFza0Z1bmN0aW9uJiYpIGZpbmFsOwogCisgICAgdm9pZCBxdWV1
ZVRhc2soc3RkOjp1bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2s+JiYpIGZpbmFsOworCisgICAgdm9p
ZCBxdWV1ZUdyb3VwZWRUYXNrKFRhc2tTb3VyY2UsIEV2ZW50VGFyZ2V0JiB0YXNrR3JvdXAsIFRh
c2tGdW5jdGlvbiYmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZUFsbFRhc2tzRm9yR3JvdXAoRXZl
bnRUYXJnZXQmKSBmaW5hbDsKKwogICAgIHZvaWQgc3VzcGVuZChEb2N1bWVudCYpOwogICAgIHZv
aWQgcmVzdW1lKERvY3VtZW50Jik7CiAgICAgdm9pZCBzdG9wKERvY3VtZW50Jik7CkBAIC01Mywx
NCArNTgsOCBAQAogICAgIHZvaWQgc2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7CiAgICAgdm9pZCBy
dW4oKTsKIAotICAgIHN0cnVjdCBUYXNrIHsKLSAgICAgICAgVGFza1NvdXJjZSBzb3VyY2U7Ci0g
ICAgICAgIFRhc2tGdW5jdGlvbiB0YXNrOwotICAgICAgICBEb2N1bWVudElkZW50aWZpZXIgZG9j
dW1lbnRJZGVudGlmaWVyOwotICAgIH07Ci0KICAgICAvLyBVc2UgYSBnbG9iYWwgcXVldWUgaW5z
dGVhZCBvZiBtdWx0aXBsZSB0YXNrIHF1ZXVlcyBzaW5jZSBIVE1MNSBzcGVjIGFsbG93cyBVQSB0
byBwaWNrIGFyYml0cmFyeSBxdWV1ZS4KLSAgICBWZWN0b3I8VGFzaz4gbV90YXNrczsKKyAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2s+PiBtX3Rhc2tzOwogICAgIEhhc2hT
ZXQ8RG9jdW1lbnRJZGVudGlmaWVyPiBtX2RvY3VtZW50SWRlbnRpZmllcnNGb3JTdXNwZW5kZWRU
YXNrczsKICAgICBSZWdpc3RyYWJsZURvbWFpbiBtX2RvbWFpbjsKICAgICBib29sIG1faXNTY2hl
ZHVsZWRUb1J1biB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lm
IEVOQUJMRShWSURFTykKIAorI2luY2x1ZGUgIkFic3RyYWN0RXZlbnRMb29wLmgiCiAjaW5jbHVk
ZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UuaCIKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKQEAgLTQyOCw3ICs0MjksNiBAQAogICAg
ICwgbV9zY2FuVGltZXIoKnRoaXMsICZIVE1MTWVkaWFFbGVtZW50OjpzY2FuVGltZXJGaXJlZCkK
ICAgICAsIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXJCZWhhdmlvclJlc3RyaWN0aW9uc1RpbWVy
KCp0aGlzLCAmSFRNTE1lZGlhRWxlbWVudDo6cGxheWJhY2tDb250cm9sc01hbmFnZXJCZWhhdmlv
clJlc3RyaWN0aW9uc1RpbWVyRmlyZWQpCiAgICAgLCBtX3NlZWtUb1BsYXliYWNrUG9zaXRpb25F
bmRlZFRpbWVyKCp0aGlzLCAmSFRNTE1lZGlhRWxlbWVudDo6c2Vla1RvUGxheWJhY2tQb3NpdGlv
bkVuZGVkVGltZXJGaXJlZCkKLSAgICAsIG1fYXN5bmNFdmVudFF1ZXVlKE1haW5UaHJlYWRHZW5l
cmljRXZlbnRRdWV1ZTo6Y3JlYXRlKCp0aGlzKSkKICAgICAsIG1fbGFzdFRpbWVVcGRhdGVFdmVu
dE1vdmllVGltZShNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCkpCiAgICAgLCBtX2Zp
cnN0VGltZVBsYXlpbmcodHJ1ZSkKICAgICAsIG1fcGxheWluZyhmYWxzZSkKQEAgLTU2Miw4ICs1
NjIsNiBAQAogICAgIGJlZ2luSWdub3JpbmdUcmFja0Rpc3BsYXlVcGRhdGVSZXF1ZXN0cygpOwog
ICAgIGFsbE1lZGlhRWxlbWVudHMoKS5yZW1vdmUodGhpcyk7CiAKLSAgICBtX2FzeW5jRXZlbnRR
dWV1ZS0+Y2xvc2UoKTsKLQogICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNlKTsKICAg
ICB1bnJlZ2lzdGVyV2l0aERvY3VtZW50KGRvY3VtZW50KCkpOwogCkBAIC02MjUsMTEgKzYyMyw4
IEBACiAKICAgICBtX3NlZWtUYXNrUXVldWUuY2xvc2UoKTsKICAgICBtX3Jlc3VtZVRhc2tRdWV1
ZS5jbG9zZSgpOwotICAgIG1fcHJvbWlzZVRhc2tRdWV1ZS5jbG9zZSgpOwotICAgIG1fcGF1c2VB
ZnRlckRldGFjaGVkVGFza1F1ZXVlLmNsb3NlKCk7CiAgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFu
YWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zUXVldWUuY2xvc2UoKTsKICAgICBtX3Jlc291cmNlU2Vs
ZWN0aW9uVGFza1F1ZXVlLmNsb3NlKCk7Ci0gICAgbV92aXNpYmlsaXR5Q2hhbmdlVGFza1F1ZXVl
LmNsb3NlKCk7CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICAgICBtX2VuY3J5cHRlZE1l
ZGlhUXVldWUuY2xvc2UoKTsKICNlbmRpZgpAQCAtOTQ0LDcgKzkzOSw5IEBACiAgICAgc2V0SW5B
Y3RpdmVEb2N1bWVudChmYWxzZSk7CiAgICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZy
b21Eb2N1bWVudCkgewogICAgICAgICAvLyBQYXVzZSBhc3luY2hyb25vdXNseSB0byBsZXQgdGhl
IG9wZXJhdGlvbiB0aGF0IHJlbW92ZWQgdXMgZmluaXNoLCBpbiBjYXNlIHdlIGdldCBpbnNlcnRl
ZCBiYWNrIGludG8gYSBkb2N1bWVudC4KLSAgICAgICAgbV9wYXVzZUFmdGVyRGV0YWNoZWRUYXNr
UXVldWUuZW5xdWV1ZVRhc2soc3RkOjpiaW5kKCZIVE1MTWVkaWFFbGVtZW50OjpwYXVzZUFmdGVy
RGV0YWNoZWRUYXNrLCB0aGlzKSk7CisgICAgICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2
ZSgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIFt0aGlzXSB7CisgICAgICAg
ICAgICBwYXVzZUFmdGVyRGV0YWNoZWRUYXNrKCk7CisgICAgICAgIH0pOwogICAgIH0KIAogICAg
IGlmIChtX21lZGlhU2Vzc2lvbikKQEAgLTEwMTEsMjQgKzEwMDgsMTcgQEAKIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpzY2hlZHVsZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50TmFtZSkK
IHsKLSAgICBhdXRvIGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIEV2ZW50OjpDYW5C
dWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpZZXMpOwotCi0gICAgLy8gRG9uJ3Qgc2V0
IHRoZSBldmVudCB0YXJnZXQsIHRoZSBldmVudCBxdWV1ZSB3aWxsIHNldCBpdCBpbiBHZW5lcmlj
RXZlbnRRdWV1ZTo6dGltZXJGaXJlZCBhbmQgc2V0dGluZyBpdCBoZXJlCi0gICAgLy8gd2lsbCB0
cmlnZ2VyIGFuIEFTU0VSVCBpZiB0aGlzIGVsZW1lbnQgaGFzIGJlZW4gbWFya2VkIGZvciBkZWxl
dGlvbi4KLQotICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoV1RGTW92ZShldmVu
dCkpOworICAgIHF1ZXVlR3JvdXBlZFRhc2tUb0Rpc3BhdGNoRXZlbnQoKnRoaXMsIFRhc2tTb3Vy
Y2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgRXZlbnQ6OkNh
bkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6OlllcykpOwogfQogCi0jaWYgRU5BQkxF
KFBJQ1RVUkVfSU5fUElDVFVSRV9BUEkpCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNjaGVkdWxl
RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewotICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5lbnF1
ZXVlRXZlbnQoV1RGTW92ZShldmVudCkpOworICAgIHF1ZXVlR3JvdXBlZFRhc2tUb0Rpc3BhdGNo
RXZlbnQoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBXVEZNb3ZlKGV2ZW50
KSk7CiB9Ci0jZW5kaWYKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzY2hlZHVsZVJlc29sdmVQ
ZW5kaW5nUGxheVByb21pc2VzKCkKIHsKLSAgICBtX3Byb21pc2VUYXNrUXVldWUuZW5xdWV1ZVRh
c2soW3RoaXMsIHBlbmRpbmdQbGF5UHJvbWlzZXMgPSBXVEZNb3ZlKG1fcGVuZGluZ1BsYXlQcm9t
aXNlcyldICgpIG11dGFibGUgeworICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhp
cywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIFt0aGlzLCBwZW5kaW5nUGxheVByb21p
c2VzID0gV1RGTW92ZShtX3BlbmRpbmdQbGF5UHJvbWlzZXMpXSAoKSBtdXRhYmxlIHsKICAgICAg
ICAgcmVzb2x2ZVBlbmRpbmdQbGF5UHJvbWlzZXMoV1RGTW92ZShwZW5kaW5nUGxheVByb21pc2Vz
KSk7CiAgICAgfSk7CiB9CkBAIC0xMDM1LDcgKzEwMjUsNyBAQAogCiB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNjaGVkdWxlUmVqZWN0UGVuZGluZ1BsYXlQcm9taXNlcyhSZWY8RE9NRXhjZXB0aW9u
PiYmIGVycm9yKQogewotICAgIG1fcHJvbWlzZVRhc2tRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpcywg
ZXJyb3IgPSBXVEZNb3ZlKGVycm9yKSwgcGVuZGluZ1BsYXlQcm9taXNlcyA9IFdURk1vdmUobV9w
ZW5kaW5nUGxheVByb21pc2VzKV0gKCkgbXV0YWJsZSB7CisgICAgcXVldWVUYXNrS2VlcGluZ09i
amVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXMsIGVy
cm9yID0gV1RGTW92ZShlcnJvciksIHBlbmRpbmdQbGF5UHJvbWlzZXMgPSBXVEZNb3ZlKG1fcGVu
ZGluZ1BsYXlQcm9taXNlcyldICgpIG11dGFibGUgewogICAgICAgICByZWplY3RQZW5kaW5nUGxh
eVByb21pc2VzKFdURk1vdmUocGVuZGluZ1BsYXlQcm9taXNlcyksIFdURk1vdmUoZXJyb3IpKTsK
ICAgICB9KTsKIH0KQEAgLTEwNTQsNyArMTA0NCw3IEBACiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c2NoZWR1bGVOb3RpZnlBYm91dFBsYXlpbmcoKQogewotICAgIG1fcHJvbWlzZVRhc2tRdWV1
ZS5lbnF1ZXVlVGFzayhbdGhpcywgcGVuZGluZ1BsYXlQcm9taXNlcyA9IFdURk1vdmUobV9wZW5k
aW5nUGxheVByb21pc2VzKV0gKCkgbXV0YWJsZSB7CisgICAgcXVldWVUYXNrS2VlcGluZ09iamVj
dEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXMsIHBlbmRp
bmdQbGF5UHJvbWlzZXMgPSBXVEZNb3ZlKG1fcGVuZGluZ1BsYXlQcm9taXNlcyldICgpIG11dGFi
bGUgewogICAgICAgICBub3RpZnlBYm91dFBsYXlpbmcoV1RGTW92ZShwZW5kaW5nUGxheVByb21p
c2VzKSk7CiAgICAgfSk7CiB9CkBAIC0xODM1LDYgKzE4MjUsMTUgQEAKICAgICAvLyB0aW1lcyBm
aXJzdCkuCiAgICAgc3RkOjpzb3J0KGV2ZW50VGFza3MuYmVnaW4oKSwgZXZlbnRUYXNrcy5lbmQo
KSwgZXZlbnRUaW1lQ3VlQ29tcGFyZSk7CiAKKyAgICAvLyBGSVhNRTogTWFrZSBUZXh0VHJhY2tD
dWUgYW4gYWN0aXZlIERPTSBvYmplY3QgYW5kIHNjaGVkdWxlIGFuIGV2ZW50IHRoZXJlIGluc3Rl
YWQuCisgICAgYXV0byBzY2hlZHVsZUV2ZW50ID0gW3RoaXNdIChUZXh0VHJhY2tDdWUmIGN1ZSwg
UmVmPEV2ZW50PiYmIGV2ZW50KSB7CisgICAgICAgIGF1dG8mIGNvbnRleHQgPSBkb2N1bWVudCgp
OworICAgICAgICBjb250ZXh0LmV2ZW50TG9vcCgpLnF1ZXVlR3JvdXBlZFRhc2soVGFza1NvdXJj
ZTo6TWVkaWFFbGVtZW50RXZlbnQsICp0aGlzLCBbZXZlbnQgPSBXVEZNb3ZlKGV2ZW50KSwgY3Vl
ID0gbWFrZVJlZihjdWUpXSB7CisgICAgICAgICAgICBjdWUtPkV2ZW50VGFyZ2V0OjpkaXNwYXRj
aEV2ZW50KGV2ZW50KTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGF1dG8gZXZlbnRMb29w
ID0gbWFrZVJlZihkb2N1bWVudCgpLmV2ZW50TG9vcCgpKTsKICAgICBmb3IgKGF1dG8mIGV2ZW50
VGFzayA6IGV2ZW50VGFza3MpIHsKICAgICAgICAgaWYgKCFhZmZlY3RlZFRyYWNrcy5jb250YWlu
cyhldmVudFRhc2suc2Vjb25kLT50cmFjaygpKSkKICAgICAgICAgICAgIGFmZmVjdGVkVHJhY2tz
LmFwcGVuZChldmVudFRhc2suc2Vjb25kLT50cmFjaygpKTsKQEAgLTE4NDYsMjEgKzE4NDUsMTMg
QEAKICAgICAgICAgLy8gY29ycmVjdGx5IGlkZW50aWZpZXMgdGhlIHR5cGUgb2YgdGhlIGV2ZW50
LCBpZiB0aGUgc3RhcnRUaW1lIGlzCiAgICAgICAgIC8vIGxlc3MgdGhhbiB0aGUgZW5kVGltZSBp
biB0aGUgY3VlLgogICAgICAgICBpZiAoZXZlbnRUYXNrLnNlY29uZC0+c3RhcnRUaW1lKCkgPj0g
ZXZlbnRUYXNrLnNlY29uZC0+ZW5kVGltZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGVudGVyRXZl
bnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbnRlckV2ZW50LCBFdmVudDo6Q2FuQnVi
YmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pOwotICAgICAgICAgICAgZW50ZXJFdmVu
dC0+c2V0VGFyZ2V0KGV2ZW50VGFzay5zZWNvbmQpOwotICAgICAgICAgICAgbV9hc3luY0V2ZW50
UXVldWUtPmVucXVldWVFdmVudChXVEZNb3ZlKGVudGVyRXZlbnQpKTsKLQotICAgICAgICAgICAg
YXV0byBleGl0RXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5leGl0RXZlbnQsIEV2
ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObyk7Ci0gICAgICAgICAg
ICBleGl0RXZlbnQtPnNldFRhcmdldChldmVudFRhc2suc2Vjb25kKTsKLSAgICAgICAgICAgIG1f
YXN5bmNFdmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoV1RGTW92ZShleGl0RXZlbnQpKTsKKyAgICAg
ICAgICAgIHNjaGVkdWxlRXZlbnQoKmV2ZW50VGFzay5zZWNvbmQsIEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmVudGVyRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5j
ZWxhYmxlOjpObykpOworICAgICAgICAgICAgc2NoZWR1bGVFdmVudCgqZXZlbnRUYXNrLnNlY29u
ZCwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXhpdEV2ZW50LCBFdmVudDo6Q2FuQnViYmxl
OjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxFdmVudD4gZXZlbnQ7CiAgICAgICAgICAgICBpZiAoZXZlbnRUYXNrLmZp
cnN0ID09IGV2ZW50VGFzay5zZWNvbmQtPnN0YXJ0TWVkaWFUaW1lKCkpCi0gICAgICAgICAgICAg
ICAgZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbnRlckV2ZW50LCBFdmVudDo6
Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pOworICAgICAgICAgICAgICAg
IHNjaGVkdWxlRXZlbnQoKmV2ZW50VGFzay5zZWNvbmQsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLmVudGVyRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxl
OjpObykpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGV2ZW50ID0gRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkuZXhpdEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZl
bnQ6OklzQ2FuY2VsYWJsZTo6Tm8pOwotICAgICAgICAgICAgZXZlbnQtPnNldFRhcmdldChldmVu
dFRhc2suc2Vjb25kKTsKLSAgICAgICAgICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5lbnF1ZXVlRXZl
bnQoV1RGTW92ZShldmVudCkpOworICAgICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoKmV2ZW50
VGFzay5zZWNvbmQsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmV4aXRFdmVudCwgRXZlbnQ6
OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTE4NzEsMTkgKzE4NjIsMTkgQEAKICAgICAvLyAxNSAtIEZvciBlYWNoIHRleHQg
dHJhY2sgaW4gYWZmZWN0ZWQgdHJhY2tzLCBpbiB0aGUgbGlzdCBvcmRlciwgcXVldWUgYQogICAg
IC8vIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBjdWVjaGFuZ2UgYXQgdGhlIFRl
eHRUcmFjayBvYmplY3QsIGFuZCwgLi4uCiAgICAgZm9yIChhdXRvJiBhZmZlY3RlZFRyYWNrIDog
YWZmZWN0ZWRUcmFja3MpIHsKLSAgICAgICAgYXV0byBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmN1ZWNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6Oklz
Q2FuY2VsYWJsZTo6Tm8pOwotICAgICAgICBldmVudC0+c2V0VGFyZ2V0KGFmZmVjdGVkVHJhY2sp
OwotICAgICAgICBtX2FzeW5jRXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQp
KTsKKyAgICAgICAgYXV0byYgY29udGV4dCA9IGRvY3VtZW50KCk7CisgICAgICAgIGNvbnRleHQu
ZXZlbnRMb29wKCkucXVldWVHcm91cGVkVGFzayhUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVu
dCwgKnRoaXMsIFt0cmFjayA9IG1ha2VSZWYoKmFmZmVjdGVkVHJhY2spXSB7CisgICAgICAgICAg
ICB0cmFjay0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jdWVjaGFu
Z2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7
CisgICAgICAgIH0pOwogCiAgICAgICAgIC8vIC4uLiBpZiB0aGUgdGV4dCB0cmFjayBoYXMgYSBj
b3JyZXNwb25kaW5nIHRyYWNrIGVsZW1lbnQsIHRvIHRoZW4gZmlyZSBhCiAgICAgICAgIC8vIHNp
bXBsZSBldmVudCBuYW1lZCBjdWVjaGFuZ2UgYXQgdGhlIHRyYWNrIGVsZW1lbnQgYXMgd2VsbC4K
LSAgICAgICAgaWYgKGlzPExvYWRhYmxlVGV4dFRyYWNrPigqYWZmZWN0ZWRUcmFjaykpIHsKLSAg
ICAgICAgICAgIGF1dG8gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jdWVjaGFu
Z2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKTsK
LSAgICAgICAgICAgIGF1dG8gdHJhY2tFbGVtZW50ID0gbWFrZVJlZlB0cihkb3duY2FzdDxMb2Fk
YWJsZVRleHRUcmFjaz4oKmFmZmVjdGVkVHJhY2spLnRyYWNrRWxlbWVudCgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVCh0cmFja0VsZW1lbnQpOwotICAgICAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0
cmFja0VsZW1lbnQpOwotICAgICAgICAgICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVu
dChXVEZNb3ZlKGV2ZW50KSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFpczxMb2FkYWJsZVRl
eHRUcmFjaz4oKmFmZmVjdGVkVHJhY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgY29udGV4dC5ldmVudExvb3AoKS5xdWV1ZUdyb3VwZWRUYXNrKFRhc2tTb3VyY2U6Ok1lZGlh
RWxlbWVudEV2ZW50LCAqdGhpcywgW3RyYWNrRWxlbWVudCA9IG1ha2VSZWYoKmRvd25jYXN0PExv
YWRhYmxlVGV4dFRyYWNrPigqYWZmZWN0ZWRUcmFjaykudHJhY2tFbGVtZW50KCkpXSB7CisgICAg
ICAgICAgICB0cmFja0VsZW1lbnQtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuY3VlY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5j
ZWxhYmxlOjpObykpOworICAgICAgICB9KTsKICAgICB9CiAKICAgICAvLyAxNiAtIFNldCB0aGUg
dGV4dCB0cmFjayBjdWUgYWN0aXZlIGZsYWcgb2YgYWxsIHRoZSBjdWVzIGluIHRoZSBjdXJyZW50
CkBAIC0yMjIyLDcgKzIyMTMsNyBAQAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjYW5jZWxQZW5k
aW5nRXZlbnRzQW5kQ2FsbGJhY2tzKCkKIHsKICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsK
LSAgICBtX2FzeW5jRXZlbnRRdWV1ZS0+Y2FuY2VsQWxsRXZlbnRzKCk7CisgICAgZG9jdW1lbnQo
KS5ldmVudExvb3AoKS5yZW1vdmVBbGxUYXNrc0Zvckdyb3VwKCp0aGlzKTsKIAogICAgIGZvciAo
YXV0byYgc291cmNlIDogY2hpbGRyZW5PZlR5cGU8SFRNTFNvdXJjZUVsZW1lbnQ+KCp0aGlzKSkK
ICAgICAgICAgc291cmNlLmNhbmNlbFBlbmRpbmdFcnJvckV2ZW50KCk7CkBAIC0yNjE2LDkgKzI2
MDcsNyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYXV0byBldmVudCA9
IFdlYktpdE1lZGlhS2V5TmVlZGVkRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0bmVl
ZGtleUV2ZW50LCBpbml0RGF0YSk7Ci0gICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBt
X2FzeW5jRXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsKKyAgICBzY2hl
ZHVsZUV2ZW50KFdlYktpdE1lZGlhS2V5TmVlZGVkRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
d2Via2l0bmVlZGtleUV2ZW50LCBpbml0RGF0YSkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBA
IC0yNzY1LDcgKzI3NTQsNyBAQAogICAgIC8vICAgICAgaW5pdERhdGFUeXBlID0gaW5pdERhdGFU
eXBlCiAgICAgLy8gICAgICBpbml0RGF0YSA9IGluaXREYXRhCiAgICAgTWVkaWFFbmNyeXB0ZWRF
dmVudEluaXQgaW5pdGlhbGl6ZXIgeyBpbml0RGF0YVR5cGUsIFdURk1vdmUoaW5pdERhdGEpIH07
Ci0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVudChNZWRpYUVuY3J5cHRlZEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuY3J5cHRlZEV2ZW50LCBpbml0aWFsaXplciwgRXZlbnQ6
OklzVHJ1c3RlZDo6WWVzKSk7CisgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCp0aGlzLCBU
YXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgTWVkaWFFbmNyeXB0ZWRFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5lbmNyeXB0ZWRFdmVudCwgaW5pdGlhbGl6ZXIsIEV2ZW50OjpJc1RydXN0
ZWQ6OlllcykpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyV2FpdGlu
Z0ZvcktleUNoYW5nZWQoKQpAQCAtNTcxMywxNCArNTcwMiwxMSBAQAogICAgIG1fcGxheWJhY2tD
b250cm9sc01hbmFnZXJCZWhhdmlvclJlc3RyaWN0aW9uc1F1ZXVlLmNsb3NlKCk7CiAgICAgbV9z
ZWVrVGFza1F1ZXVlLmNsb3NlKCk7CiAgICAgbV9yZXN1bWVUYXNrUXVldWUuY2xvc2UoKTsKLSAg
ICBtX3Byb21pc2VUYXNrUXVldWUuY2xvc2UoKTsKLSAgICBtX3BhdXNlQWZ0ZXJEZXRhY2hlZFRh
c2tRdWV1ZS5jbG9zZSgpOwogICAgIG1fcmVzb3VyY2VTZWxlY3Rpb25UYXNrUXVldWUuY2xvc2Uo
KTsKLSAgICBtX3Zpc2liaWxpdHlDaGFuZ2VUYXNrUXVldWUuY2xvc2UoKTsKICNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKQogICAgIG1fZW5jcnlwdGVkTWVkaWFRdWV1ZS5jbG9zZSgpOwogI2Vu
ZGlmCi0gICAgbV9hc3luY0V2ZW50UXVldWUtPmNsb3NlKCk7CisgICAgZG9jdW1lbnQoKS5ldmVu
dExvb3AoKS5yZW1vdmVBbGxUYXNrc0Zvckdyb3VwKCp0aGlzKTsKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgIG1fdm9sdW1lUmV2ZXJ0VGFza1F1ZXVlLmNsb3NlKCk7CiAjZW5kaWYKQEAg
LTU4MDAsNyArNTc4Niw3IEBACiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKGhhc0F1ZGlvKCkgJiYgaXNQbGF5aW5nKCkp
IHx8IG1fYXN5bmNFdmVudFF1ZXVlLT5oYXNQZW5kaW5nRXZlbnRzKCkgfHwgbV9jcmVhdGluZ0Nv
bnRyb2xzOworICAgIHJldHVybiAoaGFzQXVkaW8oKSAmJiBpc1BsYXlpbmcoKSkgfHwgbV9jcmVh
dGluZ0NvbnRyb2xzIHx8IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7CiB9
CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKQpAQCAtNTg3
OCw3ICs1ODY0LDggQEAKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRJc1BsYXlpbmdUb1dp
cmVsZXNzVGFyZ2V0KGJvb2wgaXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldCkKIHsKLSAgICBtX3Bs
YXliYWNrVGFyZ2V0SXNXaXJlbGVzc1F1ZXVlLmVucXVldWVUYXNrKFt0aGlzLCBpc1BsYXlpbmdU
b1dpcmVsZXNzVGFyZ2V0XSB7CisgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIG5vdCBhIHBhcnQg
b2YgdGhpcyBtZWRpYSBlbGVtZW50J3MgdGFzayBncm91cD8KKyAgICBxdWV1ZVRhc2tLZWVwaW5n
T2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBbdGhpcywg
aXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldF0gewogICAgICAgICBpZiAoaXNQbGF5aW5nVG9XaXJl
bGVzc1RhcmdldCA9PSBtX2lzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIG1faXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldCA9IG1fcGxheWVyICYm
IG1fcGxheWVyLT5pc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCk7CkBAIC01OTUxLDkg
KzU5MzgsNyBAQAogewogICAgIGJvb2wgaGFzVGFyZ2V0cyA9IG1fbWVkaWFTZXNzaW9uLT5oYXNX
aXJlbGVzc1BsYXliYWNrVGFyZ2V0cygpOwogICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJo
YXNUYXJnZXRzID0gIiwgaGFzVGFyZ2V0cyk7Ci0gICAgYXV0byBldmVudCA9IFdlYktpdFBsYXli
YWNrVGFyZ2V0QXZhaWxhYmlsaXR5RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0cGxh
eWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQsIGhhc1RhcmdldHMpOwotICAgIGV2
ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVu
dChXVEZNb3ZlKGV2ZW50KSk7CisgICAgc2NoZWR1bGVFdmVudChXZWJLaXRQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFy
Z2V0YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50LCBoYXNUYXJnZXRzKSk7CiAgICAgc2NoZWR1bGVV
cGRhdGVNZWRpYVN0YXRlKCk7CiB9CiAKQEAgLTYwNzAsNyArNjA1NSw3IEBACiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBtX2Z1bGxzY3JlZW5UYXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXMsIG1vZGVd
IHsKKyAgICBxdWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3VyY2U6Ok1l
ZGlhRWxlbWVudEV2ZW50LCBbdGhpcywgbW9kZV0gewogICAgICAgICBpZiAoZG9jdW1lbnQoKS5o
aWRkZW4oKSkgewogICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiICByZXR1
cm5pbmcgYmVjYXVzZSBkb2N1bWVudCBpcyBoaWRkZW4iKTsKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTgwMzksNyArODAyNCw3IEBACiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6aXNWaXNpYmxl
SW5WaWV3cG9ydENoYW5nZWQoKQogewotICAgIG1fdmlzaWJpbGl0eUNoYW5nZVRhc2tRdWV1ZS5l
bnF1ZXVlVGFzayhbdGhpc10geworICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhp
cywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIFt0aGlzXSB7CiAgICAgICAgIG1fbWVk
aWFTZXNzaW9uLT5pc1Zpc2libGVJblZpZXdwb3J0Q2hhbmdlZCgpOwogICAgICAgICB1cGRhdGVT
aG91bGRBdXRvcGxheSgpOwogICAgICAgICBzY2hlZHVsZVBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
VXBkYXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkocmV2
aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU3OSw5ICs1NzksNyBAQAogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZGlkQmVjb21lRnVsbHNjcmVlbkVsZW1lbnQoKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHdpbGxFeGl0RnVsbHNjcmVlbigpOwogCi0jaWYgRU5BQkxFKFBJQ1RVUkVfSU5f
UElDVFVSRV9BUEkpCiAgICAgdm9pZCBzY2hlZHVsZUV2ZW50KFJlZjxFdmVudD4mJik7Ci0jZW5k
aWYKIAogICAgIGVudW0gY2xhc3MgQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGUgeyBOb25lLCBQ
cmV2ZW50ZWRBdXRvcGxheSwgU3RhcnRlZFdpdGhVc2VyR2VzdHVyZSwgU3RhcnRlZFdpdGhvdXRV
c2VyR2VzdHVyZSB9OwogCkBAIC05NzYsMTQgKzk3NCw4IEBACiAgICAgRGVmZXJyYWJsZVRhc2s8
VGltZXI+IG1fcmVzdW1lVGFza1F1ZXVlOwogICAgIERlZmVycmFibGVUYXNrPFRpbWVyPiBtX3Nl
ZWtUYXNrUXVldWU7CiAgICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+IG1fcGxheWJhY2tDb250cm9s
c01hbmFnZXJCZWhhdmlvclJlc3RyaWN0aW9uc1F1ZXVlOwotICAgIEdlbmVyaWNUYXNrUXVldWU8
VGltZXI+IG1fcHJvbWlzZVRhc2tRdWV1ZTsKLSAgICBHZW5lcmljVGFza1F1ZXVlPFRpbWVyPiBt
X3BhdXNlQWZ0ZXJEZXRhY2hlZFRhc2tRdWV1ZTsKICAgICBHZW5lcmljVGFza1F1ZXVlPFRpbWVy
PiBtX3Jlc291cmNlU2VsZWN0aW9uVGFza1F1ZXVlOwotICAgIEdlbmVyaWNUYXNrUXVldWU8VGlt
ZXI+IG1fdmlzaWJpbGl0eUNoYW5nZVRhc2tRdWV1ZTsKLSAgICBHZW5lcmljVGFza1F1ZXVlPFRp
bWVyPiBtX2Z1bGxzY3JlZW5UYXNrUXVldWU7Ci0gICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4g
bV9wbGF5YmFja1RhcmdldElzV2lyZWxlc3NRdWV1ZTsKICAgICBSZWZQdHI8VGltZVJhbmdlcz4g
bV9wbGF5ZWRUaW1lUmFuZ2VzOwotICAgIFVuaXF1ZVJlZjxNYWluVGhyZWFkR2VuZXJpY0V2ZW50
UXVldWU+IG1fYXN5bmNFdmVudFF1ZXVlOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAg
RGVmZXJyYWJsZVRhc2s8VGltZXI+IG1fdm9sdW1lUmV2ZXJ0VGFza1F1ZXVlOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAJKHJldmlz
aW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIlRyYWNrTGlz
dEJhc2UuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0RXZlbnRMb29wLmgiCiAjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC00Miw3ICs0Myw2IEBACiBUcmFja0xpc3RCYXNlOjpU
cmFja0xpc3RCYXNlKEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCkKICAgICAsIG1f
ZWxlbWVudChlbGVtZW50KQotICAgICwgbV9hc3luY0V2ZW50UXVldWUoTWFpblRocmVhZEdlbmVy
aWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQogewogICAgIEFTU0VSVCghY29udGV4dCB8fCBp
czxEb2N1bWVudD4oY29udGV4dCkpOwogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwpAQCAtOTgsNyAr
OTgsOSBAQAogCiB2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlVHJhY2tFdmVudChjb25zdCBB
dG9tU3RyaW5nJiBldmVudE5hbWUsIFJlZjxUcmFja0Jhc2U+JiYgdHJhY2spCiB7Ci0gICAgbV9h
c3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVudChUcmFja0V2ZW50OjpjcmVhdGUoZXZlbnROYW1l
LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8sIFdURk1vdmUo
dHJhY2spKSk7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICBxdWV1
ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50
LCBUcmFja0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZl
bnQ6OklzQ2FuY2VsYWJsZTo6Tm8sIFdURk1vdmUodHJhY2spKSk7CiB9CiAKIHZvaWQgVHJhY2tM
aXN0QmFzZTo6c2NoZWR1bGVBZGRUcmFja0V2ZW50KFJlZjxUcmFja0Jhc2U+JiYgdHJhY2spCkBA
IC0xNjEsMTQgKzE2MywxNiBAQAogICAgIC8vIFdoZW5ldmVyIGEgdHJhY2sgaW4gYSBWaWRlb1Ry
YWNrTGlzdCB0aGF0IHdhcyBwcmV2aW91c2x5IG5vdCBzZWxlY3RlZCBpcwogICAgIC8vIHNlbGVj
dGVkLCB0aGUgdXNlciBhZ2VudCBtdXN0IHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2
ZW50IG5hbWVkCiAgICAgLy8gY2hhbmdlIGF0IHRoZSBWaWRlb1RyYWNrTGlzdCBvYmplY3QuCi0g
ICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFi
bGU6Ok5vKSk7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICArK21f
cGVuZGluZ0NoYW5nZUV2ZW50Q291bnQ7CisgICAgcXVldWVUYXNrS2VlcGluZ09iamVjdEFsaXZl
KCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXNdIHsKKyAgICAgICAg
ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgRXZl
bnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CisgICAgICAgIEFT
U0VSVChtX3BlbmRpbmdDaGFuZ2VFdmVudENvdW50KTsKKyAgICAgICAgLS1tX3BlbmRpbmdDaGFu
Z2VFdmVudENvdW50OworICAgIH0pOwogfQogCi1ib29sIFRyYWNrTGlzdEJhc2U6OmlzQ2hhbmdl
RXZlbnRTY2hlZHVsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2FzeW5jRXZlbnRRdWV1ZS0+
aGFzUGVuZGluZ0V2ZW50c09mVHlwZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQpOwotfQotCiBi
b29sIFRyYWNrTGlzdEJhc2U6OmlzQW55VHJhY2tFbmFibGVkKCkgY29uc3QKIHsKICAgICBmb3Ig
KGF1dG8mIHRyYWNrIDogbV9pbmJhbmRUcmFja3MpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNiBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRU
YXJnZXQuaCIKLSNpbmNsdWRlICJHZW5lcmljRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02MCw3ICs1OSw3IEBA
CiAKICAgICAvLyBOZWVkcyB0byBiZSBwdWJsaWMgc28gdHJhY2tzIGNhbiBjYWxsIGl0CiAgICAg
dm9pZCBzY2hlZHVsZUNoYW5nZUV2ZW50KCk7Ci0gICAgYm9vbCBpc0NoYW5nZUV2ZW50U2NoZWR1
bGVkKCkgY29uc3Q7CisgICAgYm9vbCBpc0NoYW5nZUV2ZW50U2NoZWR1bGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9wZW5kaW5nQ2hhbmdlRXZlbnRDb3VudDsgfQogCiAgICAgYm9vbCBpc0FueVRyYWNr
RW5hYmxlZCgpIGNvbnN0OwogCkBAIC04MCw4ICs3OSw3IEBACiAgICAgdm9pZCBkZXJlZkV2ZW50
VGFyZ2V0KCkgZmluYWwgeyBkZXJlZigpOyB9CiAKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtX2Vs
ZW1lbnQ7Ci0KLSAgICBVbmlxdWVSZWY8TWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlPiBtX2Fz
eW5jRXZlbnRRdWV1ZTsKKyAgICB1bnNpZ25lZCBtX3BlbmRpbmdDaGFuZ2VFdmVudENvdW50IHsg
MCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJFdmVudExvb3AuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyRXZlbnRMb29wLmNwcAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudExvb3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZ1bmN0aW9uVGFz
ayBmaW5hbCA6IHB1YmxpYyBFdmVudExvb3BUYXNrIHsKK3B1YmxpYzoKKyAgICBGdW5jdGlvblRh
c2soVGFza1NvdXJjZSBzb3VyY2UsIEFic3RyYWN0RXZlbnRMb29wOjpUYXNrRnVuY3Rpb24mJiBm
dW5jdGlvbiwgdm9pZCogZ3JvdXBJZGVudGlmaWVyID0gbnVsbHB0cikKKyAgICAgICAgOiBFdmVu
dExvb3BUYXNrKHNvdXJjZSwgZ3JvdXBJZGVudGlmaWVyKQorICAgICAgICAsIG1fZnVuY3Rpb24o
V1RGTW92ZShmdW5jdGlvbikpCisgICAgeyB9CisKKyAgICB2b2lkIGV4ZWN1dGUoKSBmaW5hbCB7
IG1fZnVuY3Rpb24oKTsgfQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9CisKK3ByaXZhdGU6CisgICAg
QWJzdHJhY3RFdmVudExvb3A6OlRhc2tGdW5jdGlvbiBtX2Z1bmN0aW9uOworfTsKKwogUmVmPFdv
cmtlckV2ZW50TG9vcD4gV29ya2VyRXZlbnRMb29wOjpjcmVhdGUoV29ya2VyR2xvYmFsU2NvcGUm
IGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV29ya2VyRXZlbnRMb29wKGNv
bnRleHQpKTsKQEAgLTU1LDEwICs2OSwzNyBAQAogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJU
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIEFTU0VS
VF9VTlVTRUQoY29udGV4dCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09ICZjb250ZXh0KTsK
LSAgICBtX3Rhc2tzLmFwcGVuZCh7IHNvdXJjZSwgV1RGTW92ZShmdW5jdGlvbikgfSk7CisgICAg
bV90YXNrcy5hcHBlbmQobWFrZVVuaXF1ZTxGdW5jdGlvblRhc2s+KHNvdXJjZSwgV1RGTW92ZShm
dW5jdGlvbikpKTsKICAgICBzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKIH0KIAordm9pZCBXb3Jr
ZXJFdmVudExvb3A6OnF1ZXVlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFzaz4mJiB0
YXNrKQoreworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1
cm47CisgICAgQVNTRVJUKHRhc2stPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX3Rhc2tzLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsK
KyAgICBzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKK30KKwordm9pZCBXb3JrZXJFdmVudExvb3A6
OnF1ZXVlR3JvdXBlZFRhc2soVGFza1NvdXJjZSBzb3VyY2UsIEV2ZW50VGFyZ2V0JiB0YXNrR3Jv
dXAsIFRhc2tGdW5jdGlvbiYmIGZ1bmN0aW9uKQoreworICAgIGlmICghc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVCh0YXNrR3JvdXAuc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpID09IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgbV90
YXNrcy5hcHBlbmQobWFrZVVuaXF1ZTxGdW5jdGlvblRhc2s+KHNvdXJjZSwgV1RGTW92ZShmdW5j
dGlvbiksICZ0YXNrR3JvdXApKTsKKyAgICBzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKK30KKwor
dm9pZCBXb3JrZXJFdmVudExvb3A6OnJlbW92ZUFsbFRhc2tzRm9yR3JvdXAoRXZlbnRUYXJnZXQm
IHRhc2tHcm91cCkKK3sKKyAgICBtX3Rhc2tzLnJlbW92ZUFsbE1hdGNoaW5nKFtpZGVudGlmaWVy
ID0gJnRhc2tHcm91cF0gKGF1dG8mIHRhc2spIHsKKyAgICAgICAgcmV0dXJuIHRhc2stPmdyb3Vw
SWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7CisgICAgfSk7Cit9CisKIGNvbnN0IGNoYXIqIFdv
cmtlckV2ZW50TG9vcDo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
ICJXb3JrZXJFdmVudExvb3AiOwpAQCAtOTgsOSArMTM5LDEyIEBACiAgICAgYXV0byogY29udGV4
dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4
dC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSB8fCBjb250ZXh0LT5hY3RpdmVET01PYmpl
Y3RzQXJlU3VzcGVuZGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIHRhc2tzID0gc3Rk
OjpleGNoYW5nZShtX3Rhc2tzLCBWZWN0b3I8VGFzaz4oKSk7Ci0gICAgZm9yIChhdXRvJiB0YXNr
IDogdGFza3MpCi0gICAgICAgIHRhc2sudGFzaygpOworICAgIGF1dG8gdGFza3MgPSBzdGQ6OmV4
Y2hhbmdlKG1fdGFza3MsIHsgfSk7CisgICAgZm9yIChhdXRvJiB0YXNrIDogdGFza3MpIHsKKyAg
ICAgICAgYXV0byogdGFza0NvbnRleHQgPSB0YXNrLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQodGFza0NvbnRleHQsICF0YXNrQ29udGV4dCB8fCB0YXNr
Q29udGV4dCA9PSBjb250ZXh0KTsKKyAgICAgICAgdGFzay0+ZXhlY3V0ZSgpOworICAgIH0KIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckV2ZW50TG9vcC5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckV2ZW50TG9vcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0MiwxMiBAQAog
ICAgIHN0YXRpYyBSZWY8V29ya2VyRXZlbnRMb29wPiBjcmVhdGUoV29ya2xldEdsb2JhbFNjb3Bl
Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgcXVldWVUYXNrKFRhc2tTb3VyY2UsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBUYXNrRnVuY3Rpb24mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBxdWV1ZVRh
c2soVGFza1NvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFRhc2tGdW5jdGlvbiYmKSBm
aW5hbDsKKyAgICB2b2lkIHF1ZXVlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFzaz4m
JikgZmluYWw7CiAKKyAgICB2b2lkIHF1ZXVlR3JvdXBlZFRhc2soVGFza1NvdXJjZSwgRXZlbnRU
YXJnZXQmLCBUYXNrRnVuY3Rpb24mJikgZmluYWw7CisgICAgdm9pZCByZW1vdmVBbGxUYXNrc0Zv
ckdyb3VwKEV2ZW50VGFyZ2V0JikgZmluYWw7CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV29y
a2VyRXZlbnRMb29wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKIApAQCAtNTYsMTIgKzYwLDcg
QEAKICAgICB2b2lkIHJlc3VtZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRl
OwogCi0gICAgc3RydWN0IFRhc2sgewotICAgICAgICBUYXNrU291cmNlIHNvdXJjZTsKLSAgICAg
ICAgVGFza0Z1bmN0aW9uIHRhc2s7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxUYXNrPiBtX3Rhc2tz
OworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFzaz4+IG1fdGFza3M7CiAg
ICAgYm9vbCBtX2lzU2NoZWR1bGVkVG9SdW4geyBmYWxzZSB9OwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383205</attachid>
            <date>2019-11-09 00:18:37 -0800</date>
            <delta_ts>2019-11-09 00:42:22 -0800</delta_ts>
            <desc>WIP4</desc>
            <filename>wip203667d.patch</filename>
            <type>text/plain</type>
            <size>77627</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCShyZXZpc2lv
biAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjEyLDcgKzYxMiw3IEBACiAgICAgYXV0byogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKLSAgICBjb250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6RE9NTWFu
aXB1bGF0aW9uLCAqY29udGV4dCwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVu
ZGluZ0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRhc2sgPSBXVEZNb3Zl
KHRhc2spXSB7CisgICAgY29udGV4dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6
OkRPTU1hbmlwdWxhdGlvbiwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVuZGlu
Z0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRhc2sgPSBXVEZNb3ZlKHRh
c2spXSB7CiAgICAgICAgIHRhc2soKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvY2FjaGUvRE9NQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDI1MjIy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGVTdG9yYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBACiAgICAgYXV0byogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKLSAgICBjb250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6RE9NTWFu
aXB1bGF0aW9uLCAqY29udGV4dCwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVu
ZGluZ0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRhc2sgPSBXVEZNb3Zl
KHRhc2spXSB7CisgICAgY29udGV4dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6
OkRPTU1hbmlwdWxhdGlvbiwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVuZGlu
Z0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRhc2sgPSBXVEZNb3ZlKHRh
c2spXSB7CiAgICAgICAgIHRhc2soKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5cy5jcHAJKHJldmlzaW9u
IDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFL
ZXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgLy8gNC4gTGV0
IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS4KICAgICAvLyA1LiBSdW4gdGhlIGZvbGxvd2luZyBz
dGVwcyBpbiBwYXJhbGxlbDoKIAotICAgIGNvbnRleHQuZXZlbnRMb29wKCkucXVldWVUYXNrKFRh
c2tTb3VyY2U6Ok5ldHdvcmtpbmcsIGNvbnRleHQsIFt0aGlzLCBjZXJ0aWZpY2F0ZSA9IFdURk1v
dmUoY2VydGlmaWNhdGUpLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0YWJsZSB7
CisgICAgY29udGV4dC5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2lu
ZywgW3RoaXMsIGNlcnRpZmljYXRlID0gV1RGTW92ZShjZXJ0aWZpY2F0ZSksIHByb21pc2UgPSBX
VEZNb3ZlKHByb21pc2UpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgLy8gNS4xLiBVc2UgdGhpcyBv
YmplY3QncyBjZG0gaW5zdGFuY2UgdG8gcHJvY2VzcyBjZXJ0aWZpY2F0ZS4KICAgICAgICAgaWYg
KG1faW5zdGFuY2UtPnNldFNlcnZlckNlcnRpZmljYXRlKFdURk1vdmUoY2VydGlmaWNhdGUpKSA9
PSBDRE1JbnN0YW5jZTo6RmFpbGVkKSB7CiAgICAgICAgICAgICAvLyA1LjIuIElmIHRoZSBwcmVj
ZWRpbmcgc3RlcCBmYWlsZWQsIHJlc29sdmUgcHJvbWlzZSB3aXRoIGEgbmV3IERPTUV4Y2VwdGlv
biB3aG9zZSBuYW1lIGlzIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBuYW1lLgpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0
ZW1EaXJlY3RvcnlFbnRyeS5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIGF1dG8qIGRvY3VtZW50ID0gdGhpcy0+
ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAg
ICAgICAgaWYgKGVycm9yQ2FsbGJhY2sgJiYgZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBk
b2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpk
b2N1bWVudCwgW2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCBleGNlcHRp
b24gPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3Zl
KHBlbmRpbmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQt
PmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbZXJyb3JDYWxs
YmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIGV4Y2VwdGlvbiA9IHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5KV0o
KSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZl
bnQoRE9NRXhjZXB0aW9uOjpjcmVhdGUoV1RGTW92ZShleGNlcHRpb24pKSk7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgIGF1dG8g
ZW50cnkgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgIGlmICghbWF0Y2hl
cyhlbnRyeSkpIHsKICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrICYmIGRvY3VtZW50KSB7
Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291
cmNlOjpOZXR3b3JraW5nLCAqZG9jdW1lbnQsIFtlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJv
ckNhbGxiYWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgp
IG11dGFibGUgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRh
c2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9y
Q2FsbGJhY2spLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkg
bXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50
KERPTUV4Y2VwdGlvbjo6Y3JlYXRlKEV4Y2VwdGlvbiB7IFR5cGVNaXNtYXRjaEVycm9yLCAiRW50
cnkgYXQgZ2l2ZW4gcGF0aCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCB0eXBlIl9zIH0pKTsKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KQEAgLTczLDcgKzczLDcgQEAKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrICYm
IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNr
KFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpkb2N1bWVudCwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdU
Rk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgZW50cnkgPSBXVEZNb3ZlKGVudHJ5KSwgcGVuZGluZ0Fj
dGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAgICAgICAg
ICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5n
LCBbc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBlbnRyeSA9IFdU
Rk1vdmUoZW50cnkpLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSld
KCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVu
dChXVEZNb3ZlKGVudHJ5KSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxl
U3lzdGVtRGlyZWN0b3J5UmVhZGVyLmNwcAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgbV9lcnJvciA9IHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ2FsbGJhY2sgJiYgZG9jdW1l
bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFz
ayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqZG9jdW1lbnQsIFt0aGlzLCBlcnJvckNhbGxiYWNr
ID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5k
aW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC0+
ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFt0aGlzLCBlcnJv
ckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RG
TW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoRE9NRXhjZXB0aW9uOjpjcmVhdGUoKm1fZXJy
b3IpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtOTcs
NyArOTcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9pc0RvbmUgPSB0cnVlOwog
ICAgICAgICAgICAgaWYgKGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmV2
ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqZG9jdW1lbnQsIFtz
dWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIHBlbmRpbmdBY3Rpdml0
eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5KSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LT5ldmVudExv
b3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxsYmFjayA9
IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5k
aW5nQWN0aXZpdHkpLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCldKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQo
V1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRW50cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lz
dGVtRW50cnkuY3BwCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2VudHJpZXNhcGkvRmlsZVN5c3RlbUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyAr
NzcsNyBAQAogICAgICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29y
a2luZywgKmRvY3VtZW50LCBbc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJh
Y2spLCBlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgcmVzdWx0ID0gV1RG
TW92ZShyZXN1bHQpLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSld
KCkgbXV0YWJsZSB7CisgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0Nh
bGxiYWNrKSwgZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIHJlc3VsdCA9
IFdURk1vdmUocmVzdWx0KSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZp
dHkpXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkg
ewogICAgICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrKQogICAgICAgICAgICAgICAgICAg
ICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChET01FeGNlcHRpb246OmNyZWF0ZShyZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJp
ZXNhcGkvRmlsZVN5c3RlbUZpbGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1GaWxlRW50cnkuY3BwCShyZXZpc2lvbiAy
NTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbUZp
bGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgaWYg
KCFkb2N1bWVudCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBkb2N1bWVudC0+ZXZl
bnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpkb2N1bWVudCwgW3N1
Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgZXJyb3JDYWxsYmFjayA9
IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgcGVuZGlu
Z0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAgICAg
ICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcs
IFtzdWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIGVycm9yQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksIHBl
bmRpbmdBY3Rpdml0eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5KV0oKSBtdXRhYmxlIHsKICAg
ICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAoZXJyb3JDYWxsYmFjaykKICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFu
ZGxlRXZlbnQoRE9NRXhjZXB0aW9uOjpjcmVhdGUocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25l
ci5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5T3duZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAgICAg
aWYgKCFjb250ZXh0IHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFjdGl2ZURPTU9iamVj
dHNBcmVTdXNwZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIHRhc2soKTsKIAotICAgIGNvbnRleHQt
PmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqY29udGV4dCwg
W3BlbmRpbmdBY3Rpdml0eSA9IG1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpLCB0YXNrID0gV1RG
TW92ZSh0YXNrKV0geworICAgIGNvbnRleHQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291
cmNlOjpOZXR3b3JraW5nLCBbcGVuZGluZ0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgq
dGhpcyksIHRhc2sgPSBXVEZNb3ZlKHRhc2spXSB7CiAgICAgICAgIHRhc2soKTsKICAgICB9KTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFyZWNvcmRlci9NZWRpYVJlY29y
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVjb3Jk
ZXIvTWVkaWFSZWNvcmRlci5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFyZWNvcmRlci9NZWRpYVJlY29yZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE2LDcgKzIxNiw3IEBACiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3Jr
aW5nLCAqZG9jdW1lbnQsIFtwZW5kaW5nQWN0aXZpdHkgPSBtYWtlUGVuZGluZ0FjdGl2aXR5KCp0
aGlzKSwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0geworICAgIGRvY3VtZW50LT5ldmVu
dExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3BlbmRpbmdBY3Rpdml0
eSA9IG1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpLCBmdW5jdGlvbiA9IFdURk1vdmUoZnVuY3Rp
b24pXSB7CiAgICAgICAgIGZ1bmN0aW9uKCk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAkocmV2aXNp
b24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNiBAQAogICAgIDogQWN0aXZl
RE9NT2JqZWN0KCZjb250ZXh0KQogICAgICwgbV9kdXJhdGlvbihNZWRpYVRpbWU6OmludmFsaWRU
aW1lKCkpCiAgICAgLCBtX3BlbmRpbmdTZWVrVGltZShNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkp
Ci0gICAgLCBtX2FzeW5jRXZlbnRRdWV1ZShNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU6OmNy
ZWF0ZSgqdGhpcykpCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgLCBtX2xvZ2dlcihk
b3duY2FzdDxEb2N1bWVudD4oY29udGV4dCkubG9nZ2VyKCkpCiAjZW5kaWYKQEAgLTk3Myw4ICs5
NzIsNyBAQAogCiBib29sIE1lZGlhU291cmNlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAog
ewotICAgIHJldHVybiBtX3ByaXZhdGUgfHwgbV9hc3luY0V2ZW50UXVldWUtPmhhc1BlbmRpbmdF
dmVudHMoKQotICAgICAgICB8fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgp
OworICAgIHJldHVybiBtX3ByaXZhdGUgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0
aXZpdHkoKTsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZTo6c3RvcCgpCkBAIC0xMDQ4LDEwICsxMDQ2
LDcgQEAKIHsKICAgICBERUJVR19MT0coTE9HSURFTlRJRklFUiwgInNjaGVkdWxpbmcgJyIsIGV2
ZW50TmFtZSwgIiciKTsKIAotICAgIGF1dG8gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZSwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKTsKLSAgICBl
dmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotCi0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVF
dmVudChXVEZNb3ZlKGV2ZW50KSk7CisgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCp0aGlz
LCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUs
IEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwogfQogCiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBNZWRpYVNvdXJjZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlh
U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9NZWRpYVNvdXJjZS5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDYgQEAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJFdmVudFRhcmdl
dC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVl
dWUuaCIKICNpbmNsdWRlICJNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCIKICNpbmNsdWRlICJV
UkxSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KQEAgLTE2NSw3ICsx
NjQsNiBAQAogICAgIE1lZGlhVGltZSBtX2R1cmF0aW9uOwogICAgIE1lZGlhVGltZSBtX3BlbmRp
bmdTZWVrVGltZTsKICAgICBSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZSB7IFJlYWR5U3RhdGU6OkNs
b3NlZCB9OwotICAgIFVuaXF1ZVJlZjxNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU+IG1fYXN5
bmNFdmVudFF1ZXVlOwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIFJlZjxjb25zdCBM
b2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxw
dHIgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNiBAQAogI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgogI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkdlbmVyaWNFdmVudFF1ZXVlLmgi
CiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFj
ay5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUuaCIKQEAgLTEwOCw3ICsxMDcs
NiBAQAogICAgIDogQWN0aXZlRE9NT2JqZWN0KHNvdXJjZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKQogICAgICwgbV9wcml2YXRlKFdURk1vdmUoc291cmNlQnVmZmVyUHJpdmF0ZSkpCiAgICAg
LCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2FzeW5jRXZlbnRRdWV1ZShNYWluVGhyZWFkR2Vu
ZXJpY0V2ZW50UXVldWU6OmNyZWF0ZSgqdGhpcykpCiAgICAgLCBtX2FwcGVuZEJ1ZmZlclRpbWVy
KCp0aGlzLCAmU291cmNlQnVmZmVyOjphcHBlbmRCdWZmZXJUaW1lckZpcmVkKQogICAgICwgbV9h
cHBlbmRXaW5kb3dTdGFydChNZWRpYVRpbWU6Onplcm9UaW1lKCkpCiAgICAgLCBtX2FwcGVuZFdp
bmRvd0VuZChNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCkpCkBAIC01MjksNyArNTI3
LDcgQEAKIAogYm9vbCBTb3VyY2VCdWZmZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fc291cmNlIHx8IG1fYXN5bmNFdmVudFF1ZXVlLT5oYXNQZW5kaW5nRXZl
bnRzKCk7CisgICAgcmV0dXJuIG1fc291cmNlIHx8IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGlu
Z0FjdGl2aXR5KCk7CiB9CiAKIHZvaWQgU291cmNlQnVmZmVyOjpzdG9wKCkKQEAgLTU1MCwxMCAr
NTQ4LDcgQEAKIAogdm9pZCBTb3VyY2VCdWZmZXI6OnNjaGVkdWxlRXZlbnQoY29uc3QgQXRvbVN0
cmluZyYgZXZlbnROYW1lKQogewotICAgIGF1dG8gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZSwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKTsKLSAg
ICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotCi0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVl
dWVFdmVudChXVEZNb3ZlKGV2ZW50KSk7CisgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCp0
aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWUsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwogfQog
CiBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1ZmZlckludGVybmFsKGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgJKHJldmlzaW9u
IDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJBdWRpb1Ry
YWNrLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Pci5o
IgotI2luY2x1ZGUgIkdlbmVyaWNFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiU291cmNlQnVmZmVy
UHJpdmF0ZUNsaWVudC5oIgogI2luY2x1ZGUgIlRleHRUcmFjay5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCkBAIC0yMTcsNyArMjE2LDYgQEAKIAogICAgIFJlZjxTb3VyY2VCdWZmZXJQcml2YXRlPiBt
X3ByaXZhdGU7CiAgICAgTWVkaWFTb3VyY2UqIG1fc291cmNlOwotICAgIFVuaXF1ZVJlZjxNYWlu
VGhyZWFkR2VuZXJpY0V2ZW50UXVldWU+IG1fYXN5bmNFdmVudFF1ZXVlOwogICAgIEFwcGVuZE1v
ZGUgbV9tb2RlIHsgQXBwZW5kTW9kZTo6U2VnbWVudHMgfTsKIAogICAgIFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiBtX3BlbmRpbmdBcHBlbmREYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3BwCShyZXZpc2lv
biAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlckxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw2IEBACiAKIFNvdXJjZUJ1
ZmZlckxpc3Q6OlNvdXJjZUJ1ZmZlckxpc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0KQotICAgICwgbV9hc3luY0V2ZW50UXVl
dWUoTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQogewogICAgIHN1
c3BlbmRJZk5lZWRlZCgpOwogfQpAQCAtOTUsMTAgKzk0LDcgQEAKIAogdm9pZCBTb3VyY2VCdWZm
ZXJMaXN0OjpzY2hlZHVsZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50TmFtZSkKIHsKLSAg
ICBhdXRvIGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIEV2ZW50OjpDYW5CdWJibGU6
Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObyk7Ci0gICAgZXZlbnQtPnNldFRhcmdldCh0aGlz
KTsKLQotICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoV1RGTW92ZShldmVudCkp
OworICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFF
bGVtZW50RXZlbnQsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBFdmVudDo6Q2FuQnViYmxlOjpO
bywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKIH0KIAogY29uc3QgY2hhciogU291cmNlQnVm
ZmVyTGlzdDo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAkocmV2
aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVk
ZSAiR2VuZXJpY0V2ZW50UXVldWUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtODAsOCArNzksNiBAQAogCiAgICAgY29uc3QgY2hh
ciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IGZpbmFsOwogCi0gICAgVW5pcXVlUmVmPE1h
aW5UaHJlYWRHZW5lcmljRXZlbnRRdWV1ZT4gbV9hc3luY0V2ZW50UXVldWU7Ci0KICAgICBWZWN0
b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+IG1fbGlzdDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhUmVxdWVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNw
cAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBA
CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiAKLSAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OlVzZXJJ
bnRlcmFjdGlvbiwgKmRvY3VtZW50LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBhdWRpb0RldmljZSA9IFdURk1vdmUoYXVkaW9EZXZpY2UpLCB2aWRlb0RldmljZSA9IFdU
Rk1vdmUodmlkZW9EZXZpY2UpLCBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQgPSBXVEZNb3ZlKGRl
dmljZUlkZW50aWZpZXJIYXNoU2FsdCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1
ZXVlVGFzayhUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGF1ZGlvRGV2aWNlID0gV1RGTW92ZShhdWRpb0RldmljZSksIHZp
ZGVvRGV2aWNlID0gV1RGTW92ZSh2aWRlb0RldmljZSksIGRldmljZUlkZW50aWZpZXJIYXNoU2Fs
dCA9IFdURk1vdmUoZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0KSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byBj
YWxsYmFjayA9IFt0aGlzLCBwcm90ZWN0b3IgPSBtYWtlUGVuZGluZ0FjdGl2aXR5KCp0aGlzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oUmVmUHRyPE1l
ZGlhU3RyZWFtUHJpdmF0ZT4mJiBwcml2YXRlU3RyZWFtKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IGF1dG8gc2NvcGVFeGl0ID0gbWFrZVNjb3BlRXhpdChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwpAQCAtMzI0LDcgKzMyNCw3IEBACiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGRvY3VtZW50KCktPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpV
c2VySW50ZXJhY3Rpb24sICpkb2N1bWVudCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb2RlLCBtZXNzYWdlXSgpIG11dGFibGUgeworICAgIGRvY3VtZW50KCktPmV2
ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvZGUsIG1lc3NhZ2VdKCkgbXV0YWJsZSB7
CiAgICAgICAgIGlmICghbWVzc2FnZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3Byb21pc2Ut
PnJlamVjdChjb2RlLCBtZXNzYWdlKTsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAJKHJl
dmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICBp
ZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2N1bWVudC0+ZXZlbnRMb29w
KCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgKmRvY3VtZW50LCBXVEZN
b3ZlKHRhc2spKTsKKyAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3Vy
Y2U6OlVzZXJJbnRlcmFjdGlvbiwgV1RGTW92ZSh0YXNrKSk7CiB9CiAKIHZvaWQgTm90aWZpY2F0
aW9uOjpkaXNwYXRjaFNob3dFdmVudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Jl
bW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3JlbW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNrLmNwcAkocmV2aXNpb24g
MjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9SZW1vdGVQ
bGF5YmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAKIFJlbW90ZVBsYXli
YWNrOjpSZW1vdGVQbGF5YmFjayhIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQogICAgIDogV2Vi
Q29yZTo6QWN0aXZlRE9NT2JqZWN0KGVsZW1lbnQuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQog
ICAgICwgbV9tZWRpYUVsZW1lbnQobWFrZVdlYWtQdHIoZWxlbWVudCkpCi0gICAgLCBtX2V2ZW50
UXVldWUoTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQogewogICAg
IHN1c3BlbmRJZk5lZWRlZCgpOwogfQpAQCAtNjcsOCArNjYsOCBAQAogCiAgICAgLy8gMS4gTGV0
IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS0+CiAgICAgLy8gMi4gUmV0dXJuIHByb21pc2UsIGFu
ZCBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBiZWxvdzoKLSAgICAKLSAgICBtX3Rhc2tRdWV1ZS5l
bnF1ZXVlVGFzayhbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcHJvbWlzZSA9
IFdURk1vdmUocHJvbWlzZSldICgpIG11dGFibGUgeworCisgICAgcXVldWVUYXNrS2VlcGluZ09i
amVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXMsIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHByb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSAo
KSBtdXRhYmxlIHsKICAgICAgICAgLy8gMy4gSWYgdGhlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBh
dHRyaWJ1dGUgaXMgcHJlc2VudCBmb3IgdGhlIG1lZGlhIGVsZW1lbnQsIHJlamVjdCB0aGUgcHJv
bWlzZSB3aXRoCiAgICAgICAgIC8vICAgIEludmFsaWRTdGF0ZUVycm9yIGFuZCBhYm9ydCBhbGwg
dGhlIHJlbWFpbmluZyBzdGVwcy4KICAgICAgICAgaWYgKCFtX21lZGlhRWxlbWVudApAQCAtOTYs
NyArOTUsNyBAQAogICAgICAgICAvLyA4LiBGdWxmaWxsIHByb21pc2Ugd2l0aCB0aGUgY2FsbGJh
Y2tJZCBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgaW4gcGFyYWxsZWw6CiAgICAgICAgIHBy
b21pc2UtPndoZW5TZXR0bGVkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cih0aGlz
KSwgY2FsbGJhY2tJZF0gewogICAgICAgICAgICAgLy8gOC4xIFF1ZXVlIGEgdGFzayB0byBpbnZv
a2UgdGhlIGNhbGxiYWNrIHdpdGggdGhlIGN1cnJlbnQgYXZhaWxhYmlsaXR5IGZvciB0aGUgbWVk
aWEgZWxlbWVudC4KLSAgICAgICAgICAgIG1fdGFza1F1ZXVlLmVucXVldWVUYXNrKFt0aGlzLCBj
YWxsYmFja0lkXSB7CisgICAgICAgICAgICBxdWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRo
aXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBbdGhpcywgY2FsbGJhY2tJZF0gewog
ICAgICAgICAgICAgICAgIGF1dG8gZm91bmRDYWxsYmFjayA9IG1fY2FsbGJhY2tNYXAuZmluZChj
YWxsYmFja0lkKTsKICAgICAgICAgICAgICAgICBpZiAoZm91bmRDYWxsYmFjayA9PSBtX2NhbGxi
YWNrTWFwLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjEsNyArMTIw
LDcgQEAKICAgICAvLyAxLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBwcm9taXNlLT4KICAgICAvLyAy
LiBSZXR1cm4gcHJvbWlzZSwgYW5kIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzIGJlbG93OgogCi0g
ICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXMsIGlkID0gV1RGTW92ZShpZCksIHByb21p
c2UgPSBXVEZNb3ZlKHByb21pc2UpXSB7CisgICAgcXVldWVUYXNrS2VlcGluZ09iamVjdEFsaXZl
KCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXMsIGlkID0gV1RGTW92
ZShpZCksIHByb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSB7CiAgICAgICAgIC8vIDMuIElmIHRo
ZSBkaXNhYmxlUmVtb3RlUGxheWJhY2sgYXR0cmlidXRlIGlzIHByZXNlbnQgZm9yIHRoZSBtZWRp
YSBlbGVtZW50LCByZWplY3QgcHJvbWlzZSB3aXRoCiAgICAgICAgIC8vICAgIEludmFsaWRTdGF0
ZUVycm9yIGFuZCBhYm9ydCBhbGwgdGhlIHJlbWFpbmluZyBzdGVwcy4KICAgICAgICAgaWYgKCFt
X21lZGlhRWxlbWVudApAQCAtMTY0LDcgKzE2Myw3IEBACiAgICAgLy8gMS4gTGV0IHByb21pc2Ug
YmUgYSBuZXcgcHJvbWlzZS0+CiAgICAgLy8gMi4gUmV0dXJuIHByb21pc2UsIGFuZCBydW4gdGhl
IGZvbGxvd2luZyBzdGVwcyBiZWxvdzoKIAotICAgIG1fdGFza1F1ZXVlLmVucXVldWVUYXNrKFt0
aGlzLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlID0g
VXNlckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpXSAoKSBtdXRhYmxl
IHsKKyAgICBxdWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3VyY2U6Ok1l
ZGlhRWxlbWVudEV2ZW50LCBbdGhpcywgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSksIHByb2Nl
c3NpbmdVc2VyR2VzdHVyZSA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdl
c3R1cmUoKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIC8vIDMuIElmIHRoZSBkaXNhYmxlUmVtb3Rl
UGxheWJhY2sgYXR0cmlidXRlIGlzIHByZXNlbnQgZm9yIHRoZSBtZWRpYSBlbGVtZW50LCByZWpl
Y3QgdGhlIHByb21pc2Ugd2l0aAogICAgICAgICAvLyAgICBJbnZhbGlkU3RhdGVFcnJvciBhbmQg
YWJvcnQgYWxsIHRoZSByZW1haW5pbmcgc3RlcHMuCiAgICAgICAgIGlmICghbV9tZWRpYUVsZW1l
bnQKQEAgLTI2NywxNSArMjY2LDE2IEBACiAKICAgICBtX3N0YXRlID0gc3RhdGU7CiAKKyAgICAv
LyBGSVhNRTogVGhlIHNwZWMgZG9lc24ndCBzYXkgd2hpY2ggdGFzayBzb3VyY2UuIGh0dHBzOi8v
Z2l0aHViLmNvbS93M2MvcmVtb3RlLXBsYXliYWNrL2lzc3Vlcy8xMjgKICAgICBzd2l0Y2ggKG1f
c3RhdGUpIHsKICAgICBjYXNlIFN0YXRlOjpDb25uZWN0ZWQ6Ci0gICAgICAgIG1fZXZlbnRRdWV1
ZS0+ZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbm5lY3RFdmVudCwg
RXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CisgICAgICAg
IHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50
RXZlbnQsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbm5lY3RFdmVudCwgRXZlbnQ6OkNh
bkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU3RhdGU6OkNvbm5lY3Rpbmc6Ci0gICAgICAgIG1fZXZlbnRRdWV1ZS0+ZW5xdWV1
ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbm5lY3RpbmdFdmVudCwgRXZlbnQ6
OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CisgICAgICAgIHF1ZXVl
VGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQs
IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbm5lY3RpbmdFdmVudCwgRXZlbnQ6OkNhbkJ1
YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU3RhdGU6OkRpc2Nvbm5lY3RlZDoKLSAgICAgICAgbV9ldmVudFF1ZXVlLT5lbnF1ZXVl
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGlzY29ubmVjdEV2ZW50LCBFdmVudDo6
Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKyAgICAgICAgcXVldWVU
YXNrVG9EaXNwYXRjaEV2ZW50KCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwg
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGlzY29ubmVjdEV2ZW50LCBFdmVudDo6Q2FuQnVi
YmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogfQpAQCAtMzA3LDcgKzMwNyw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIDIuIFF1
ZXVlIGEgdGFzayB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICBtX3Rhc2tRdWV1ZS5l
bnF1ZXVlVGFzayhbdGhpc10geworICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhp
cywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIFt0aGlzXSB7CiAgICAgICAgIC8vIDIu
MSBSZXF1ZXN0IGRpc2Nvbm5lY3Rpb24gb2YgcmVtb3RlIGZyb20gdGhlIGRldmljZS4gSW1wbGVt
ZW50YXRpb24gaXMgdXNlciBhZ2VudCBzcGVjaWZpYy4KICAgICAgICAgLy8gTk9URTogSW1wbGVt
ZW50ZWQgYnkgTWVkaWFQbGF5ZXI6OnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoKQogICAgICAg
ICAvLyAyLjIgQ2hhbmdlIHRoZSByZW1vdGUncyBzdGF0ZSB0byBkaXNjb25uZWN0ZWQuCkBAIC0z
ODAsNyArMzgwLDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIG1fYXZhaWxhYmxlID0gYXZhaWxh
YmxlOwogCi0gICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdIHsKKyAgICBxdWV1ZVRh
c2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50
LCBbdGhpc10gewogICAgICAgICAvLyBQcm90ZWN0IG1fY2FsbGJhY2tNYXAgYWdhaW5zdCBtdXRh
dGlvbiB3aGlsZSBpdCdzIGJlaW5nIGl0ZXJhdGVkIG92ZXIuCiAgICAgICAgIFZlY3RvcjxSZWY8
UmVtb3RlUGxheWJhY2tBdmFpbGFiaWxpdHlDYWxsYmFjaz4+IGNhbGxiYWNrczsKICAgICAgICAg
Y2FsbGJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jYWxsYmFja01hcC5zaXplKCkpOwpA
QCAtNDAzLDEyICs0MDMsNiBAQAogICAgIHJldHVybiAiUmVtb3RlUGxheWJhY2siOwogfQogCi12
b2lkIFJlbW90ZVBsYXliYWNrOjpzdG9wKCkKLXsKLSAgICBtX3Rhc2tRdWV1ZS5jbG9zZSgpOwot
ICAgIG1fZXZlbnRRdWV1ZS0+Y2xvc2UoKTsKIH0KIAotfQotCiAjZW5kaWYgLy8gRU5BQkxFKFdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcmVt
b3RlcGxheWJhY2svUmVtb3RlUGxheWJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3JlbW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNrLmgJKHJldmlzaW9uIDI1MjIy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcmVtb3RlcGxheWJhY2svUmVtb3RlUGxheWJh
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJHZW5lcmlj
RXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
Zi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC04Nyw3ICs4Niw2IEBACiAKICAg
ICAvLyBBY3RpdmVET01PYmplY3QuCiAgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFt
ZSgpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc3RvcCgpIGZpbmFsOwogCiAgICAgLy8gRXZlbnRU
YXJnZXRXaXRoSW5saW5lRGF0YS4KICAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdl
dEludGVyZmFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlbW90ZVBsYXliYWNrRXZlbnRUYXJn
ZXRJbnRlcmZhY2VUeXBlOyB9CkBAIC0xMDUsOSArMTAzLDYgQEAKICAgICBQcm9taXNlVmVjdG9y
IG1fcHJvbXB0UHJvbWlzZXM7CiAgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpEaXNjb25uZWN0
ZWQgfTsKICAgICBib29sIG1fYXZhaWxhYmxlIHsgZmFsc2UgfTsKLQotICAgIFVuaXF1ZVJlZjxN
YWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU+IG1fZXZlbnRRdWV1ZTsKLSAgICBHZW5lcmljVGFz
a1F1ZXVlPFRpbWVyPiBtX3Rhc2tRdWV1ZTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHJldmlzaW9uIDI1MjIy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJHYWluTm9kZS5oIgotI2luY2x1ZGUgIkdl
bmVyaWNFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9hZGVyLmgiCiAjaW5j
bHVkZSAiSFJURlBhbm5lci5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCkBA
IC0xNDAsNyArMTM5LDYgQEAKICAgICAsIG1fbG9nSWRlbnRpZmllcih1bmlxdWVMb2dJZGVudGlm
aWVyKCkpCiAjZW5kaWYKICAgICAsIG1fbWVkaWFTZXNzaW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9u
OjpjcmVhdGUoKnRoaXMpKQotICAgICwgbV9ldmVudFF1ZXVlKE1haW5UaHJlYWRHZW5lcmljRXZl
bnRRdWV1ZTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICAvLyBBY2NvcmRpbmcgdG8gc3BlYyBBdWRp
b0NvbnRleHQgbXVzdCBkaWUgb25seSBhZnRlciBwYWdlIG5hdmlnYXRlLgogICAgIC8vIExldHMg
bWFyayBpdCBhcyBBY3RpdmVET01PYmplY3Qgd2l0aCBwZW5kaW5nIGFjdGl2aXR5IGFuZCB1bm1h
cmsgaXQgaW4gY2xlYXIgbWV0aG9kLgpAQCAtMTY2LDcgKzE2NCw2IEBACiAjZW5kaWYKICAgICAs
IG1faXNPZmZsaW5lQ29udGV4dCh0cnVlKQogICAgICwgbV9tZWRpYVNlc3Npb24oUGxhdGZvcm1N
ZWRpYVNlc3Npb246OmNyZWF0ZSgqdGhpcykpCi0gICAgLCBtX2V2ZW50UXVldWUoTWFpblRocmVh
ZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQogICAgICwgbV9yZW5kZXJUYXJnZXQo
cmVuZGVyVGFyZ2V0KQogewogICAgIGNvbnN0cnVjdENvbW1vbigpOwpAQCAtMzA5LDggKzMwNiwx
MCBAQAogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0YXRlID0gc3RhdGU7Ci0gICAgbV9ldmVu
dFF1ZXVlLT5lbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RhdGVjaGFu
Z2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6WWVzLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykp
OwogCisgICAgLy8gRklYTUU6IFdlYkF1ZGlvIGRvZXNuJ3Qgc3BlY2lmeSB3aGljaCB0YXNrIHNv
dXJjZSB0byB1c2UuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vV2ViQXVkaW8vd2ViLWF1ZGlvLWFw
aS9pc3N1ZXMvMjA5NQorICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1Nv
dXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0YXRl
Y2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6OlllcywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6
Tm8pKTsKKwogICAgIHNpemVfdCBzdGF0ZUluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0
ZSk7CiAgICAgaWYgKHN0YXRlSW5kZXggPj0gbV9zdGF0ZVJlYWN0aW9ucy5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEyMTksNyArMTIxOCw5IEBACiAgICAgICAgIHJldHVybjsKIAogICAg
IGNsZWFyUGVuZGluZ0FjdGl2aXR5SWZFeGl0RWFybHkucmVsZWFzZSgpOwotICAgIG1fZXZlbnRR
dWV1ZS0+ZW5xdWV1ZUV2ZW50KE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3JlYXRlKHJl
bmRlcmVkQnVmZmVyKSk7CisKKyAgICAvLyBGSVhNRTogV2ViQXVkaW8gZG9lc24ndCBzcGVjaWZ5
IHdoaWNoIHRhc2sgc291cmNlIHRvIHVzZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBdWRp
by93ZWItYXVkaW8tYXBpL2lzc3Vlcy8yMDk1CisgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50
KCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50OjpjcmVhdGUocmVuZGVyZWRCdWZmZXIpKTsKIH0KIAogdm9pZCBBdWRpb0NvbnRl
eHQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw2IEBACiBjbGFzcyBEeW5hbWljc0NvbXByZXNzb3JOb2RlOwogY2xh
c3MgR2Fpbk5vZGU7CiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50OwotY2xhc3MgTWFpblRocmVhZEdl
bmVyaWNFdmVudFF1ZXVlOwogY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOwogY2xh
c3MgTWVkaWFTdHJlYW07CiBjbGFzcyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOwpA
QCAtMjUyLDYgKzI1MSw3IEBACiAKICAgICAvLyBFdmVudFRhcmdldAogICAgIEV2ZW50VGFyZ2V0
SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQXVk
aW9Db250ZXh0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9CisgICAgdm9pZCBkaXNwYXRjaEV2
ZW50KEV2ZW50JikgZmluYWw7CiAKICAgICAvLyBSZWNvbmNpbGUgcmVmL2RlcmVmIHdoaWNoIGFy
ZSBkZWZpbmVkIGJvdGggaW4gVGhyZWFkU2FmZVJlZkNvdW50ZWQgYW5kIEV2ZW50VGFyZ2V0Lgog
ICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkOjpyZWY7CkBAIC0zMjEsNyArMzIxLDYgQEAK
IAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgZGlzcGF0Y2hFdmVudChF
dmVudCYpIGZpbmFsOwogCiAgICAgLy8gTWVkaWFQcm9kdWNlcgogICAgIE1lZGlhUHJvZHVjZXI6
Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC00MTcsNyAr
NDE2LDYgQEAKICAgICBWZWN0b3I8VmVjdG9yPERPTVByb21pc2VEZWZlcnJlZDx2b2lkPj4+IG1f
c3RhdGVSZWFjdGlvbnM7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1NZWRpYVNlc3Np
b24+IG1fbWVkaWFTZXNzaW9uOwotICAgIFVuaXF1ZVJlZjxNYWluVGhyZWFkR2VuZXJpY0V2ZW50
UXVldWU+IG1fZXZlbnRRdWV1ZTsKIAogICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9yZW5kZXJU
YXJnZXQ7CiAgICAgUmVmUHRyPEF1ZGlvRGVzdGluYXRpb25Ob2RlPiBtX2Rlc3RpbmF0aW9uTm9k
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2UuY3BwCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg5LDcgKzY4OSw3IEBACiAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7CiAgICAg
aWYgKCFtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQpIHsKICAgICAgICAgaWYgKGVycm9yQ2Fs
bGJhY2spIHsKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhU
YXNrU291cmNlOjpOZXR3b3JraW5nLCBtX2RvY3VtZW50LCBbZXJyb3JDYWxsYmFjayA9IG1ha2VS
ZWYoKmVycm9yQ2FsbGJhY2spXSgpIHsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPmV2ZW50TG9v
cCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbZXJyb3JDYWxsYmFjayA9IG1h
a2VSZWYoKmVycm9yQ2FsbGJhY2spXSgpIHsKICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNr
LT5oYW5kbGVFdmVudChTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgImRh
dGFiYXNlIGhhcyBiZWVuIGNsb3NlZCIpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
MCw3ICsyMTAsNyBAQAogICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxi
YWNrLmdldCgpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBEYXRhYmFz
ZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIGZvciBkYXRhYmFzZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkp
OwogICAgICAgICBkYXRhYmFzZS0+c2V0SGFzUGVuZGluZ0NyZWF0aW9uRXZlbnQodHJ1ZSk7Ci0g
ICAgICAgIGRhdGFiYXNlLT5tX2RvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1Nv
dXJjZTo6TmV0d29ya2luZywgZGF0YWJhc2UtPm1fZG9jdW1lbnQsIFtjcmVhdGlvbkNhbGxiYWNr
LCBkYXRhYmFzZV0oKSB7CisgICAgICAgIGRhdGFiYXNlLT5tX2RvY3VtZW50LT5ldmVudExvb3Ao
KS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW2NyZWF0aW9uQ2FsbGJhY2ssIGRh
dGFiYXNlXSgpIHsKICAgICAgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCpk
YXRhYmFzZSk7CiAgICAgICAgICAgICBkYXRhYmFzZS0+c2V0SGFzUGVuZGluZ0NyZWF0aW9uRXZl
bnQoZmFsc2UpOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAyNTIyMjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgaWYgKCFlcnJvckNhbGxi
YWNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLmV2ZW50
TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBtX2RhdGFiYXNlLT5kb2N1
bWVudCgpLCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayldKCkgbXV0YWJs
ZSB7CisgICAgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgW2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJh
Y2spXSgpIG11dGFibGUgewogICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChTUUxF
cnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJ0aGUgZGF0YWJhc2Ugd2FzIGNs
b3NlZCIpKTsKICAgICB9KTsKIH0KQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgIC8vIGVycm9yIHRv
IGhhdmUgb2NjdXJyZWQgaW4gdGhpcyB0cmFuc2FjdGlvbi4KICAgICBSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gbV9lcnJvckNhbGxiYWNrV3JhcHBl
ci51bndyYXAoKTsKICAgICBpZiAoZXJyb3JDYWxsYmFjaykgewotICAgICAgICBtX2RhdGFiYXNl
LT5kb2N1bWVudCgpLmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5n
LCBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JD
YWxsYmFjayksIHRyYW5zYWN0aW9uRXJyb3IgPSBtX3RyYW5zYWN0aW9uRXJyb3JdKCkgbXV0YWJs
ZSB7CisgICAgICAgIG1fZGF0YWJhc2UtPmRvY3VtZW50KCkuZXZlbnRMb29wKCkucXVldWVUYXNr
KFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNh
bGxiYWNrKSwgdHJhbnNhY3Rpb25FcnJvciA9IG1fdHJhbnNhY3Rpb25FcnJvcl0oKSBtdXRhYmxl
IHsKICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCp0cmFuc2FjdGlvbkVy
cm9yKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDY2LDcgKzQ2Niw3IEBACiAgICAgLy8gU3Bl
YyA0LjMuMi44OiBEZWxpdmVyIHN1Y2Nlc3MgY2FsbGJhY2suCiAgICAgUmVmUHRyPFZvaWRDYWxs
YmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgp
OwogICAgIGlmIChzdWNjZXNzQ2FsbGJhY2spIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+ZG9jdW1l
bnQoKS5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgbV9kYXRh
YmFzZS0+ZG9jdW1lbnQoKSwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxi
YWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS5ldmVudExv
b3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxsYmFjayA9
IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHN1Y2Nl
c3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoKTsKICAgICAgICAgfSk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0Fic3RyYWN0RXZlbnRMb29wLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0Fic3RyYWN0RXZlbnRMb29wLmgJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9BYnN0cmFjdEV2ZW50TG9vcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwyMSArMjgsMTU0IEBACiAjaW5jbHVkZSAiVGFza1NvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOworY2xhc3MgRXZlbnRUYXJnZXQ7CiBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCitjbGFzcyBFdmVudExvb3BUYXNrIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShFdmVudExvb3BUYXNrKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIHZpcnR1YWwgfkV2ZW50TG9vcFRhc2soKSA9IGRl
ZmF1bHQ7CisKKyAgICBUYXNrU291cmNlIHRhc2tTb3VyY2UoKSB7IHJldHVybiBtX3Rhc2tTb3Vy
Y2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZSgpID0gMDsKKworICAgIEV2ZW50TG9vcFRh
c2tHcm91cCogZ3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2dyb3VwLmdldCgpOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBFdmVudExvb3BUYXNrKFRhc2tTb3VyY2Ugc291cmNlKQorICAgICAgICA6IG1f
dGFza1NvdXJjZShzb3VyY2UpCisgICAgeyB9CisKKyAgICBjb25zdCBUYXNrU291cmNlIG1fdGFz
a1NvdXJjZTsKKyAgICBXZWFrUHRyPEV2ZW50TG9vcFRhc2tHcm91cD4gbV9ncm91cDsKKworICAg
IGZyaWVuZCBjbGFzcyBFdmVudExvb3BUYXNrR3JvdXA7Cit9OworCiAvLyBodHRwczovL2h0bWwu
c3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjZXZlbnQtbG9vcAotY2xh
c3MgQWJzdHJhY3RFdmVudExvb3AgOiBwdWJsaWMgUmVmQ291bnRlZDxBYnN0cmFjdEV2ZW50TG9v
cD4geworY2xhc3MgQWJzdHJhY3RFdmVudExvb3AgOiBwdWJsaWMgUmVmQ291bnRlZDxBYnN0cmFj
dEV2ZW50TG9vcD4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxBYnN0cmFjdEV2ZW50TG9vcD4gewog
cHVibGljOgogICAgIHZpcnR1YWwgfkFic3RyYWN0RXZlbnRMb29wKCkgPSBkZWZhdWx0OwogCi0g
ICAgdHlwZWRlZiBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+IFRhc2tGdW5jdGlvbjsKLSAgICB2aXJ0
dWFsIHZvaWQgcXVldWVUYXNrKFRhc2tTb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBU
YXNrRnVuY3Rpb24mJikgPSAwOworICAgIHR5cGVkZWYgRnVuY3Rpb248dm9pZCAoKT4gVGFza0Z1
bmN0aW9uOworICAgIHZpcnR1YWwgdm9pZCBxdWV1ZVRhc2soc3RkOjp1bmlxdWVfcHRyPEV2ZW50
TG9vcFRhc2s+JiYpID0gMDsKIAorICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcHVyZSB2
aXJ0dWFsLgorICAgIHZpcnR1YWwgdm9pZCBzdG9wR3JvdXAoRXZlbnRMb29wVGFza0dyb3VwJikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRHcm91cChFdmVudExvb3BUYXNrR3JvdXAmKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lR3JvdXAoRXZlbnRMb29wVGFza0dyb3VwJikgeyB9
CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbEFsbEZvckdyb3VwKEV2ZW50TG9vcFRhc2tHcm91cCYp
IHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RFdmVudExvb3AoKSA9IGRlZmF1bHQ7CiB9
OwogCitjbGFzcyBFdmVudExvb3BUYXNrR3JvdXAgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8RXZl
bnRMb29wVGFza0dyb3VwPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnRMb29wVGFz
a0dyb3VwKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIGV4
cGxpY2l0IEV2ZW50TG9vcFRhc2tHcm91cCgpID0gZGVmYXVsdDsKKworICAgIEV2ZW50TG9vcFRh
c2tHcm91cChFdmVudExvb3BUYXNrR3JvdXAmIHBhcmVudEdyb3VwKQorICAgICAgICA6IG1fcGFy
ZW50R3JvdXAobWFrZVdlYWtQdHIocGFyZW50R3JvdXApKQorICAgIHsKKyAgICAgICAgLy8gV2Ug
b25seSBzdXBwb3J0IGp1c3Qgb25lIGxldmVsIG9mIGNoaWxkLXBhcmVudCByZWxhdGlvbnNoaXAs
IG5vdCBhIHRyZWUgb2YgZ3JvdXBzLgorICAgICAgICBBU1NFUlQoIXBhcmVudEdyb3VwLm1fcGFy
ZW50R3JvdXApOworICAgIH0KKworICAgIEV2ZW50TG9vcFRhc2tHcm91cCogcGFyZW50R3JvdXAo
KSB7IHJldHVybiBtX3BhcmVudEdyb3VwLmdldCgpOyB9CisgICAgYm9vbCBtYXRjaGVzVGFzayhF
dmVudExvb3BUYXNrJiB0YXNrKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byogZ3JvdXAgPSB0
YXNrLmdyb3VwKCk7CisgICAgICAgIHJldHVybiBncm91cCA9PSB0aGlzIHx8IGdyb3VwID09IG1f
cGFyZW50R3JvdXA7CisgICAgfQorCisgICAgdm9pZCBzdGFydFJ1bm5pbmdXaXRoUGFyZW50KCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3BhcmVudEdyb3VwKTsKKyAgICAgICAgQVNTRVJUKG1f
cGFyZW50R3JvdXAtPmhhc1N0YXJ0ZWRSdW5uaW5nKCkpOworICAgICAgICBtX2V2ZW50TG9vcCA9
IG1fcGFyZW50R3JvdXAtPm1fZXZlbnRMb29wOworICAgICAgICBtX3N0YXJ0ZWRSdW5uaW5nID0g
dHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHN0YXJ0UnVubmluZyhBYnN0cmFjdEV2ZW50TG9vcCYg
ZXZlbnRMb29wKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3BhcmVudEdyb3VwKTsKKyAgICAg
ICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlN0b3BwZWQpOworICAgICAgICBtX2V2ZW50TG9v
cCA9IG1ha2VXZWFrUHRyKGV2ZW50TG9vcCk7CisgICAgICAgIG1fc3RhcnRlZFJ1bm5pbmcgPSB0
cnVlOworICAgIH0KKworICAgIGJvb2wgaGFzU3RhcnRlZFJ1bm5pbmcoKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0ZWRSdW5uaW5nOyB9CisKKyAgICB2b2lkIHN0b3BBbmREaXNjYXJkQWxsVGFza3Mo
KQorICAgIHsKKyAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpTdG9wcGVkOworICAgICAgICBpZiAo
YXV0byogZXZlbnRMb29wID0gbV9ldmVudExvb3AuZ2V0KCkpCisgICAgICAgICAgICBldmVudExv
b3AtPnN0b3BHcm91cCgqdGhpcyk7CisgICAgfQorCisgICAgdm9pZCBzdXNwZW5kKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpTdG9wcGVkKTsKKyAgICAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpTdXNwZW5kZWQ7CisgICAgICAgIC8vIEV2ZW50TG9vcCBkb2Vzbid0IGRv
IGFueXRoaW5nIHVwb24gc3VzcGVuc2lvbi4KKyAgICB9CisKKyAgICB2b2lkIHJlc3VtZSgpCisg
ICAgeworICAgICAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6U3RvcHBlZCk7CisgICAgICAg
IG1fc3RhdGUgPSBTdGF0ZTo6UnVubmluZzsKKyAgICAgICAgaWYgKGF1dG8qIGV2ZW50TG9vcCA9
IG1fZXZlbnRMb29wLmdldCgpKQorICAgICAgICAgICAgZXZlbnRMb29wLT5yZXN1bWVHcm91cCgq
dGhpcyk7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWxBbGxFeGlzdGluZ1Rhc2tzKCkKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBldmVudExvb3AgPSBtX2V2ZW50TG9vcC5nZXQoKSkKKyAgICAg
ICAgICAgIGV2ZW50TG9vcC0+Y2FuY2VsQWxsRm9yR3JvdXAoKnRoaXMpOworICAgIH0KKworICAg
IGJvb2wgaXNTdG9wcGVkUGVybWFuZW50bHkoKSB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpT
dG9wcGVkIHx8IChtX3BhcmVudEdyb3VwICYmIG1fcGFyZW50R3JvdXAtPm1fc3RhdGUgPT0gU3Rh
dGU6OlN0b3BwZWQpOyB9CisgICAgYm9vbCBpc1N1c3BlbmRlZCgpIHsgcmV0dXJuIGlzU2VsZlN1
c3BlbmRlZCgpIHx8IChtX3BhcmVudEdyb3VwICYmIG1fcGFyZW50R3JvdXAtPmlzU2VsZlN1c3Bl
bmRlZCgpKTsgfQorCisgICAgYm9vbCBoYXNTY2hlZHVsZWRUYXNrcygpIGNvbnN0IHsgcmV0dXJu
IG1fc2NoZWR1bGVkVGFza3M7IH0KKworICAgIHZvaWQgcXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0
cjxFdmVudExvb3BUYXNrPiYmIHRhc2spCisgICAgeworICAgICAgICBBU1NFUlQobV9zdGFydGVk
UnVubmluZyk7CisgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpTdG9wcGVkIHx8ICFtX2V2
ZW50TG9vcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKCF0YXNrLT5tX2dy
b3VwKTsKKyAgICAgICAgdGFzay0+bV9ncm91cCA9IG1ha2VXZWFrUHRyKCp0aGlzKTsKKyAgICAg
ICAgbV9ldmVudExvb3AtPnF1ZXVlVGFzayhXVEZNb3ZlKHRhc2spKTsKKyAgICB9CisKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHF1ZXVlVGFzayhUYXNrU291cmNlLCBBYnN0cmFjdEV2ZW50TG9v
cDo6VGFza0Z1bmN0aW9uJiYpOworCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1
aW50OF90IHsgUnVubmluZywgU3VzcGVuZGVkLCBTdG9wcGVkIH07CisKKyAgICBib29sIGlzU2Vs
ZlN1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU3RhdGU6OlN1c3BlbmRlZDsg
fQorCisgICAgV2Vha1B0cjxFdmVudExvb3BUYXNrR3JvdXA+IG1fcGFyZW50R3JvdXA7CisgICAg
V2Vha1B0cjxBYnN0cmFjdEV2ZW50TG9vcD4gbV9ldmVudExvb3A7CisgICAgU3RhdGUgbV9zdGF0
ZSB7IFN0YXRlOjpSdW5uaW5nIH07CisgICAgYm9vbCBtX3N0YXJ0ZWRSdW5uaW5nIHsgZmFsc2Ug
fTsKKyAgICB1bnNpZ25lZCBtX3NjaGVkdWxlZFRhc2tzIHsgMCB9OworCisgICAgZnJpZW5kIGNs
YXNzIEFic3RyYWN0RXZlbnRMb29wOworICAgIGZyaWVuZCBjbGFzcyBXaW5kb3dFdmVudExvb3A7
CisgICAgZnJpZW5kIGNsYXNzIFdvcmtlckV2ZW50TG9vcDsKK307CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCShyZXZp
c2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMxLDEyICsxMzEsNDkgQEAKICAgICByZXR1cm4gc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpICYmICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFjdGl2ZURPTU9i
amVjdHNBcmVTdG9wcGVkKCkgJiYgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWN0aXZlRE9N
T2JqZWN0c0FyZVN1c3BlbmRlZCgpOwogfQogCi12b2lkIEFjdGl2ZURPTU9iamVjdDo6cXVldWVU
YXNrSW5FdmVudExvb3AoVGFza1NvdXJjZSBzb3VyY2UsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgdGFz
aykKK3ZvaWQgQWN0aXZlRE9NT2JqZWN0OjpxdWV1ZVRhc2tJbkV2ZW50TG9vcChUYXNrU291cmNl
IHNvdXJjZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBhdXRvKiBjb250
ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAg
ICAgcmV0dXJuOwotICAgIGNvbnRleHQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhzb3VyY2UsICpj
b250ZXh0LCBXVEZNb3ZlKHRhc2spKTsKKyAgICBjb250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRh
c2soc291cmNlLCBXVEZNb3ZlKGZ1bmN0aW9uKSk7CiB9CiAKK2NsYXNzIEFjdGl2ZURPTU9iamVj
dEV2ZW50RGlzcGF0Y2hUYXNrIDogcHVibGljIEV2ZW50TG9vcFRhc2sgeworcHVibGljOgorICAg
IEFjdGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hUYXNrKFRhc2tTb3VyY2Ugc291cmNlLCBBY3Rp
dmVET01PYmplY3QmIG9iamVjdCwgRXZlbnRUYXJnZXQmIHRhcmdldCwgUmVmPEV2ZW50PiYmIGV2
ZW50KQorICAgICAgICA6IEV2ZW50TG9vcFRhc2soc291cmNlKQorICAgICAgICAsIG1fb2JqZWN0
KG9iamVjdCkKKyAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgICAgICwgbV9ldmVudChX
VEZNb3ZlKGV2ZW50KSkKKyAgICB7CisgICAgICAgICsrbV9vYmplY3QubV9wZW5kaW5nQWN0aXZp
dHlDb3VudDsKKyAgICB9CisKKyAgICB+QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRjaFRhc2so
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb2JqZWN0Lm1fcGVuZGluZ0FjdGl2aXR5Q291bnQp
OworICAgICAgICAtLW1fb2JqZWN0Lm1fcGVuZGluZ0FjdGl2aXR5Q291bnQ7CisgICAgfQorCisg
ICAgdm9pZCBleGVjdXRlKCkgZmluYWwgeyBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChtX2V2ZW50
LmdldCgpKTsgfQorCitwcml2YXRlOgorICAgIEFjdGl2ZURPTU9iamVjdCYgbV9vYmplY3Q7Cisg
ICAgUmVmPEV2ZW50VGFyZ2V0PiBtX3RhcmdldDsKKyAgICBSZWY8RXZlbnQ+IG1fZXZlbnQ7Cit9
OworCit2b2lkIEFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KEV2ZW50
VGFyZ2V0JiB0YXJnZXQsIFRhc2tTb3VyY2Ugc291cmNlLCBSZWY8RXZlbnQ+JiYgZXZlbnQsIEV2
ZW50TG9vcFRhc2tHcm91cCogZ3JvdXApCit7CisgICAgQVNTRVJUKCFldmVudC0+dGFyZ2V0KCkg
fHwgJnRhcmdldCA9PSBldmVudC0+dGFyZ2V0KCkpOworICAgIGF1dG8qIGNvbnRleHQgPSBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKCFncm91cCB8fCBncm91cC0+cGFyZW50R3JvdXAoKSA9PSAmY29udGV4dC0+
ZXZlbnRMb29wKCkpOworICAgIGF1dG8mIGV2ZW50TG9vcCA9IGdyb3VwID8gKmdyb3VwIDogY29u
dGV4dC0+ZXZlbnRMb29wKCk7CisgICAgYXV0byB0YXNrID0gbWFrZVVuaXF1ZTxBY3RpdmVET01P
YmplY3RFdmVudERpc3BhdGNoVGFzaz4oc291cmNlLCAqdGhpcywgdGFyZ2V0LCBXVEZNb3ZlKGV2
ZW50KSk7CisgICAgZXZlbnRMb29wLnF1ZXVlVGFzayhXVEZNb3ZlKHRhc2spKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3Qu
aAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIERvY3VtZW50OworY2xhc3MgRXZlbnQ7CitjbGFzcyBFdmVudExvb3BUYXNrR3Jv
dXA7CitjbGFzcyBFdmVudFRhcmdldDsKIAogZW51bSBjbGFzcyBSZWFzb25Gb3JTdXNwZW5zaW9u
IHsKICAgICBKYXZhU2NyaXB0RGVidWdnZXJQYXVzZWQsCkBAIC0xMTYsNyArMTE5LDcgQEAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHN0YXRpYyB2b2lkIHF1ZXVlVGFza0tlZXBpbmdP
YmplY3RBbGl2ZShUJiBvYmplY3QsIFRhc2tTb3VyY2Ugc291cmNlLCBGdW5jdGlvbjx2b2lkICgp
PiYmIHRhc2spCiAgICAgewotICAgICAgICBvYmplY3QucXVldWVUYXNrSW5FdmVudExvb3Aoc291
cmNlLCBbcHJvdGVjdGVkT2JqZWN0ID0gbWFrZVJlZihvYmplY3QpLCBhY3Rpdml0eSA9IG9iamVj
dC5tYWtlUGVuZGluZ0FjdGl2aXR5KG9iamVjdCksIHRhc2sgPSBXVEZNb3ZlKHRhc2spXSAoKSB7
CisgICAgICAgIG9iamVjdC5xdWV1ZVRhc2tJbkV2ZW50TG9vcChzb3VyY2UsIFtwcm90ZWN0ZWRP
YmplY3QgPSBtYWtlUmVmKG9iamVjdCksIGFjdGl2aXR5ID0gb2JqZWN0LkFjdGl2ZURPTU9iamVj
dDo6bWFrZVBlbmRpbmdBY3Rpdml0eShvYmplY3QpLCB0YXNrID0gV1RGTW92ZSh0YXNrKV0gKCkg
ewogICAgICAgICAgICAgdGFzaygpOwogICAgICAgICB9KTsKICAgICB9CkBAIC0xMjQsMTIgKzEy
NywxNSBAQAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV2ZW50VGFyZ2V0VHlwZSwgdHlwZW5hbWUg
RXZlbnRUeXBlPgogICAgIHN0YXRpYyB2b2lkIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudChFdmVu
dFRhcmdldFR5cGUmIHRhcmdldCwgVGFza1NvdXJjZSBzb3VyY2UsIFJlZjxFdmVudFR5cGU+JiYg
ZXZlbnQpCiAgICAgewotICAgICAgICBBU1NFUlQoIWV2ZW50LT50YXJnZXQoKSB8fCAmdGFyZ2V0
ID09IGV2ZW50LT50YXJnZXQoKSk7Ci0gICAgICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2
ZSh0YXJnZXQsIHNvdXJjZSwgWyZ0YXJnZXQsIGV2ZW50ID0gV1RGTW92ZShldmVudCldICgpIG11
dGFibGUgewotICAgICAgICAgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOwot
ICAgICAgICB9KTsKKyAgICAgICAgdGFyZ2V0LnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCh0YXJn
ZXQsIHNvdXJjZSwgV1RGTW92ZShldmVudCksIG51bGxwdHIpOwogICAgIH0KIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV2ZW50VGFyZ2V0VHlwZSwgdHlwZW5hbWUgRXZlbnRUeXBlPgorICAgIHN0
YXRpYyB2b2lkIHF1ZXVlR3JvdXBlZFRhc2tUb0Rpc3BhdGNoRXZlbnQoRXZlbnRMb29wVGFza0dy
b3VwJiBncm91cCwgRXZlbnRUYXJnZXRUeXBlJiB0YXJnZXQsIFRhc2tTb3VyY2Ugc291cmNlLCBS
ZWY8RXZlbnRUeXBlPiYmIGV2ZW50KQorICAgIHsKKyAgICAgICAgdGFyZ2V0LnF1ZXVlVGFza1Rv
RGlzcGF0Y2hFdmVudCh0YXJnZXQsIHNvdXJjZSwgV1RGTW92ZShldmVudCksICZncm91cCk7Cisg
ICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQWN0aXZlRE9NT2JqZWN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKTsKICAgICBleHBsaWNpdCBBY3RpdmVET01PYmplY3QoRG9jdW1lbnQq
KTsKQEAgLTE0MSw2ICsxNDcsNyBAQAogICAgIEFjdGl2ZURPTU9iamVjdChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgQ2hlY2tlZFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRUeXBlKTsKIAogICAgIHZv
aWQgcXVldWVUYXNrSW5FdmVudExvb3AoVGFza1NvdXJjZSwgRnVuY3Rpb248dm9pZCAoKT4mJik7
CisgICAgdm9pZCBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoRXZlbnRUYXJnZXQmLCBUYXNrU291
cmNlLCBSZWY8RXZlbnQ+JiYsIEV2ZW50TG9vcFRhc2tHcm91cCogZ3JvdXApOwogCiAgICAgdW5z
aWduZWQgbV9wZW5kaW5nQWN0aXZpdHlDb3VudCB7IDAgfTsKICNpZiAhQVNTRVJUX0RJU0FCTEVE
CkBAIC0xNDcsNiArMTU0LDggQEAKICAgICBib29sIG1fc3VzcGVuZElmTmVlZGVkV2FzQ2FsbGVk
IHsgZmFsc2UgfTsKICAgICBSZWY8VGhyZWFkPiBtX2NyZWF0aW9uVGhyZWFkIHsgVGhyZWFkOjpj
dXJyZW50KCkgfTsKICNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIEFjdGl2ZURPTU9iamVjdEV2
ZW50RGlzcGF0Y2hUYXNrOwogfTsKIAogI2lmIEFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjM1LDggKzI2MzUsOCBAQAogCiB2b2lk
IERvY3VtZW50OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhSZWFzb25Gb3JTdXNwZW5zaW9uIHdo
eSkKIHsKLSAgICBpZiAobV9ldmVudExvb3ApCi0gICAgICAgIG1fZXZlbnRMb29wLT5zdXNwZW5k
KCp0aGlzKTsKKyAgICBpZiAobV9kb2N1bWVudFRhc2tHcm91cCkKKyAgICAgICAgbV9kb2N1bWVu
dFRhc2tHcm91cC0+c3VzcGVuZCgpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzKHdoeSk7CiAgICAgc3VzcGVuZERldmljZU1vdGlvbkFuZE9yaWVu
dGF0aW9uVXBkYXRlcygpOwogICAgIHBsYXRmb3JtU3VzcGVuZE9yU3RvcEFjdGl2ZURPTU9iamVj
dHMoKTsKQEAgLTI2NDQsOCArMjY0NCw4IEBACiAKIHZvaWQgRG9jdW1lbnQ6OnJlc3VtZUFjdGl2
ZURPTU9iamVjdHMoUmVhc29uRm9yU3VzcGVuc2lvbiB3aHkpCiB7Ci0gICAgaWYgKG1fZXZlbnRM
b29wKQotICAgICAgICBtX2V2ZW50TG9vcC0+cmVzdW1lKCp0aGlzKTsKKyAgICBpZiAobV9kb2N1
bWVudFRhc2tHcm91cCkKKyAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91cC0+cmVzdW1lKCk7CiAg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyh3aHkpOwog
ICAgIHJlc3VtZURldmljZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBkYXRlcygpOwogICAgIC8vIEZJ
WE1FOiBGb3IgaU9TLCBkbyB3ZSBuZWVkIHRvIGFkZCBjb250ZW50IGNoYW5nZSBvYnNlcnZlcnMg
dGhhdCB3ZXJlIHJlbW92ZWQgaW4gRG9jdW1lbnQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKCk/
CkBAIC0yNjUzLDggKzI2NTMsOCBAQAogCiB2b2lkIERvY3VtZW50OjpzdG9wQWN0aXZlRE9NT2Jq
ZWN0cygpCiB7Ci0gICAgaWYgKG1fZXZlbnRMb29wKQotICAgICAgICBtX2V2ZW50TG9vcC0+c3Rv
cCgqdGhpcyk7CisgICAgaWYgKG1fZG9jdW1lbnRUYXNrR3JvdXApCisgICAgICAgIG1fZG9jdW1l
bnRUYXNrR3JvdXAtPnN0b3BBbmREaXNjYXJkQWxsVGFza3MoKTsKICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cygpOwogICAgIHBsYXRmb3JtU3VzcGVuZE9y
U3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKIH0KQEAgLTYyMjEsMTIgKzYyMjEsMTUgQEAKICAgICAg
ICAgdGFzay5wZXJmb3JtVGFzaygqdGhpcyk7CiB9CiAKLUFic3RyYWN0RXZlbnRMb29wJiBEb2N1
bWVudDo6ZXZlbnRMb29wKCkKK0V2ZW50TG9vcFRhc2tHcm91cCYgRG9jdW1lbnQ6OmV2ZW50TG9v
cCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoVU5MSUtFTFkoIW1f
ZXZlbnRMb29wKSkKKyAgICBpZiAoVU5MSUtFTFkoIW1fZG9jdW1lbnRUYXNrR3JvdXApKSB7CiAg
ICAgICAgIG1fZXZlbnRMb29wID0gV2luZG93RXZlbnRMb29wOjplbnN1cmVGb3JSZWdpc3RyYWJs
ZURvbWFpbihSZWdpc3RyYWJsZURvbWFpbiB7IHNlY3VyaXR5T3JpZ2luKCkuZGF0YSgpIH0pOwot
ICAgIHJldHVybiAqbV9ldmVudExvb3A7CisgICAgICAgIG1fZG9jdW1lbnRUYXNrR3JvdXAgPSBt
YWtlVW5pcXVlPEV2ZW50TG9vcFRhc2tHcm91cD4oKTsKKyAgICAgICAgbV9kb2N1bWVudFRhc2tH
cm91cC0+c3RhcnRSdW5uaW5nKCptX2V2ZW50TG9vcCk7CisgICAgfQorICAgIHJldHVybiAqbV9k
b2N1bWVudFRhc2tHcm91cDsKIH0KIAogdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVkdWxlZFRh
c2tzKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAKIGNsYXNzIERvY3VtZW50VGltZWxpbmU7CiBj
bGFzcyBEb2N1bWVudFR5cGU7CiBjbGFzcyBFZGl0aW5nQmVoYXZpb3I7CitjbGFzcyBFdmVudExv
b3BUYXNrR3JvdXA7CiBjbGFzcyBFeHRlbnNpb25TdHlsZVNoZWV0czsKIGNsYXNzIEZsb2F0UXVh
ZDsKIGNsYXNzIEZsb2F0UmVjdDsKQEAgLTEwNjMsNyArMTA2NCw3IEBACiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHBvc3RUYXNrKFRhc2smJikgZmluYWw7IC8vIEV4ZWN1dGVzIHRoZSB0YXNr
IG9uIGNvbnRleHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCiAKLSAgICBBYnN0cmFjdEV2ZW50
TG9vcCYgZXZlbnRMb29wKCkgZmluYWw7CisgICAgRXZlbnRMb29wVGFza0dyb3VwJiBldmVudExv
b3AoKSBmaW5hbDsKIAogICAgIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciogc2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyKCkgeyByZXR1cm4gbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXIuZ2V0KCk7IH0KICAgICB2b2lkIHN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJD
YWxsYmFja3MoKTsKQEAgLTIwNjIsNiArMjA2Myw3IEBACiAgICAgRG9jdW1lbnRJZGVudGlmaWVy
IG1faWRlbnRpZmllcjsKIAogICAgIFJlZlB0cjxXaW5kb3dFdmVudExvb3A+IG1fZXZlbnRMb29w
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrR3JvdXA+IG1fZG9jdW1lbnRUYXNr
R3JvdXA7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgUmVmUHRyPFNXQ2xpZW50
Q29ubmVjdGlvbj4gbV9zZXJ2aWNlV29ya2VyQ29ubmVjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9JZGxlQ2FsbGJhY2tDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vSWRsZUNhbGxiYWNrQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI1MjIyMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9JZGxlQ2FsbGJhY2tDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQAogCiB2b2lkIElkbGVDYWxsYmFja0NvbnRyb2xsZXI6
OnF1ZXVlVGFza1RvU3RhcnRJZGxlUGVyaW9kKCkKIHsKLSAgICBtX2RvY3VtZW50LT5ldmVudExv
b3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6SWRsZVRhc2ssICptX2RvY3VtZW50LCBbcHJvdGVj
dGVkRG9jdW1lbnQgPSBtYWtlUmVmKCptX2RvY3VtZW50KSwgdGhpc10oKSB7CisgICAgbV9kb2N1
bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OklkbGVUYXNrLCBbcHJvdGVj
dGVkRG9jdW1lbnQgPSBtYWtlUmVmKCptX2RvY3VtZW50KSwgdGhpc10oKSB7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHByb3RlY3RlZERvY3VtZW50LT5pZGxlQ2FsbGJhY2tDb250cm9sbGVyKCkg
PT0gdGhpcyk7CiAgICAgICAgIHN0YXJ0SWRsZVBlcmlvZCgpOwogICAgIH0pOwpAQCAtMTAwLDcg
KzEwMCw3IEBACiAKIHZvaWQgSWRsZUNhbGxiYWNrQ29udHJvbGxlcjo6cXVldWVUYXNrVG9JbnZv
a2VJZGxlQ2FsbGJhY2tzKE1vbm90b25pY1RpbWUgZGVhZGxpbmUpCiB7Ci0gICAgbV9kb2N1bWVu
dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OklkbGVUYXNrLCAqbV9kb2N1bWVu
dCwgW3Byb3RlY3RlZERvY3VtZW50ID0gbWFrZVJlZigqbV9kb2N1bWVudCksIGRlYWRsaW5lLCB0
aGlzXSgpIHsKKyAgICBtX2RvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJj
ZTo6SWRsZVRhc2ssIFtwcm90ZWN0ZWREb2N1bWVudCA9IG1ha2VSZWYoKm1fZG9jdW1lbnQpLCBk
ZWFkbGluZSwgdGhpc10oKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByb3RlY3RlZERvY3Vt
ZW50LT5pZGxlQ2FsbGJhY2tDb250cm9sbGVyKCkgPT0gdGhpcyk7CiAgICAgICAgIGludm9rZUlk
bGVDYWxsYmFja3MoZGVhZGxpbmUpOwogICAgIH0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw2ICs1OCw3IEBACiBjbGFzcyBDYWNoZWRTY3JpcHQ7CiBjbGFzcyBEYXRhYmFzZUNvbnRleHQ7
CiBjbGFzcyBFdmVudFF1ZXVlOworY2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXZl
bnRUYXJnZXQ7CiBjbGFzcyBNZXNzYWdlUG9ydDsKIGNsYXNzIFB1YmxpY1VSTE1hbmFnZXI7CkBA
IC02NSw2ICs2Niw3IEBACiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBTZWN1cml0eU9y
aWdpbjsKIGNsYXNzIFNvY2tldFByb3ZpZGVyOworZW51bSBjbGFzcyBUYXNrU291cmNlIDogdWlu
dDhfdDsKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIGNsYXNzIFNlcnZpY2VXb3JrZXI7
CkBAIC05MCw3ICs5Miw3IEBACiAgICAgdmlydHVhbCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNKU0V4ZWN1dGlvbkZvcmJp
ZGRlbigpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgQWJzdHJhY3RFdmVudExvb3AmIGV2ZW50
TG9vcCgpID0gMDsKKyAgICB2aXJ0dWFsIEV2ZW50TG9vcFRhc2tHcm91cCYgZXZlbnRMb29wKCkg
PSAwOwogCiAgICAgdmlydHVhbCBjb25zdCBVUkwmIHVybCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIFVSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QgPSAwOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1Rhc2tTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vVGFza1NvdXJjZS5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vVGFza1NvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAgICAg
RmlsZVJlYWRpbmcsCiAgICAgRm9udExvYWRpbmcsCiAgICAgSWRsZVRhc2ssCisgICAgTWVkaWFF
bGVtZW50RXZlbnQsCiAgICAgTmV0d29ya2luZywKICAgICBQb3N0ZWRNZXNzYWdlUXVldWUsCiAg
ICAgVXNlckludGVyYWN0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRM
b29wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29w
LmNwcAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50
TG9vcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDMyICs1OSw0NSBAQAogICAgIFJFTEVBU0Vf
QVNTRVJUKGRpZFJlbW92ZSk7CiB9CiAKLXZvaWQgV2luZG93RXZlbnRMb29wOjpxdWV1ZVRhc2so
VGFza1NvdXJjZSBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFRhc2tG
dW5jdGlvbiYmIHRhc2spCit2b2lkIFdpbmRvd0V2ZW50TG9vcDo6cXVldWVUYXNrKHN0ZDo6dW5p
cXVlX3B0cjxFdmVudExvb3BUYXNrPiYmIHRhc2spCiB7CisgICAgQVNTRVJUKHRhc2stPmdyb3Vw
KCkpOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGlzPERvY3VtZW50
Pihjb250ZXh0KSk7CisgICAgKyt0YXNrLT5ncm91cCgpLT5tX3NjaGVkdWxlZFRhc2tzOwogICAg
IHNjaGVkdWxlVG9SdW5JZk5lZWRlZCgpOwotICAgIG1fdGFza3MuYXBwZW5kKFRhc2sgeyBzb3Vy
Y2UsIFdURk1vdmUodGFzayksIGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5pZGVudGlmaWVy
KCkgfSk7CisgICAgbV90YXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiB9CiAKLXZvaWQgV2lu
ZG93RXZlbnRMb29wOjpzdXNwZW5kKERvY3VtZW50JikKK3ZvaWQgV2luZG93RXZlbnRMb29wOjpz
dG9wR3JvdXAoRXZlbnRMb29wVGFza0dyb3VwJiBncm91cCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIGF1dG8gcmVtb3ZlZFRhc2tzID0gbV90YXNrcy5yZW1vdmVBbGxNYXRj
aGluZyhbJmdyb3VwXSAoYXV0byYgdGFzaykgeworICAgICAgICByZXR1cm4gZ3JvdXAubWF0Y2hl
c1Rhc2soKnRhc2spOworICAgIH0pOworICAgIEFTU0VSVChyZW1vdmVkVGFza3MgPD0gZ3JvdXAu
bV9zY2hlZHVsZWRUYXNrcyk7CisgICAgZ3JvdXAubV9zY2hlZHVsZWRUYXNrcyAtPSByZW1vdmVk
VGFza3M7CiB9CiAKLXZvaWQgV2luZG93RXZlbnRMb29wOjpyZXN1bWUoRG9jdW1lbnQmIGRvY3Vt
ZW50KQordm9pZCBXaW5kb3dFdmVudExvb3A6OnN1c3BlbmRHcm91cChFdmVudExvb3BUYXNrR3Jv
dXAmKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2RvY3VtZW50
SWRlbnRpZmllcnNGb3JTdXNwZW5kZWRUYXNrcy5jb250YWlucyhkb2N1bWVudC5pZGVudGlmaWVy
KCkpKQotICAgICAgICByZXR1cm47Ci0gICAgc2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7CiB9CiAK
LXZvaWQgV2luZG93RXZlbnRMb29wOjpzdG9wKERvY3VtZW50JiBkb2N1bWVudCkKK3ZvaWQgV2lu
ZG93RXZlbnRMb29wOjpyZXN1bWVHcm91cChFdmVudExvb3BUYXNrR3JvdXAmIGdyb3VwKQogewot
ICAgIG1fdGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoW2lkZW50aWZpZXIgPSBkb2N1bWVudC5pZGVu
dGlmaWVyKCldIChhdXRvJiB0YXNrKSB7Ci0gICAgICAgIHJldHVybiB0YXNrLmRvY3VtZW50SWRl
bnRpZmllciA9PSBpZGVudGlmaWVyOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
aWYgKG1fZ3JvdXBzV2l0aFN1c3BlbmVkVGFza3MucmVtb3ZlKGdyb3VwKSkKKyAgICAgICAgc2No
ZWR1bGVUb1J1bklmTmVlZGVkKCk7Cit9CisKK3ZvaWQgV2luZG93RXZlbnRMb29wOjpjYW5jZWxB
bGxGb3JHcm91cChFdmVudExvb3BUYXNrR3JvdXAmIGdyb3VwKQoreworICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIGNhbmNlbCBvbmdvaW5nIHRhc2tzLgorICAgIGF1dG8gcmVtb3ZlZFRhc2tzID0gbV90
YXNrcy5yZW1vdmVBbGxNYXRjaGluZyhbJmdyb3VwXSAoYXV0byYgdGFzaykgeworICAgICAgICBy
ZXR1cm4gdGFzay0+Z3JvdXAoKSA9PSAmZ3JvdXA7CiAgICAgfSk7CisgICAgQVNTRVJUKHJlbW92
ZWRUYXNrcyA8PSBncm91cC5tX3NjaGVkdWxlZFRhc2tzKTsKKyAgICBncm91cC5tX3NjaGVkdWxl
ZFRhc2tzIC09IHJlbW92ZWRUYXNrczsKIH0KIAogdm9pZCBXaW5kb3dFdmVudExvb3A6OnNjaGVk
dWxlVG9SdW5JZk5lZWRlZCgpCkBAIC0xMDQsMTkgKzExNywzMyBAQAogICAgIGlmIChtX3Rhc2tz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFRhc2s+IHRhc2tzID0g
V1RGTW92ZShtX3Rhc2tzKTsKLSAgICBtX2RvY3VtZW50SWRlbnRpZmllcnNGb3JTdXNwZW5kZWRU
YXNrcy5jbGVhcigpOwotICAgIFZlY3RvcjxUYXNrPiByZW1haW5pbmdUYXNrczsKKyAgICBhdXRv
IHRhc2tzID0gc3RkOjpleGNoYW5nZShtX3Rhc2tzLCB7IH0pOworICAgIG1fZ3JvdXBzV2l0aFN1
c3BlbmVkVGFza3MuY2xlYXIoKTsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV2ZW50TG9v
cFRhc2s+PiByZW1haW5pbmdUYXNrczsKICAgICBmb3IgKGF1dG8mIHRhc2sgOiB0YXNrcykgewot
ICAgICAgICBhdXRvKiBkb2N1bWVudCA9IERvY3VtZW50OjphbGxEb2N1bWVudHNNYXAoKS5nZXQo
dGFzay5kb2N1bWVudElkZW50aWZpZXIpOwotICAgICAgICBpZiAoIWRvY3VtZW50IHx8IGRvY3Vt
ZW50LT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgpKQorICAgICAgICBhdXRvKiBncm91cCA9
IHRhc2stPmdyb3VwKCk7CisgICAgICAgIGlmICghZ3JvdXApCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGRvY3VtZW50LT5hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkp
IHsKLSAgICAgICAgICAgIG1fZG9jdW1lbnRJZGVudGlmaWVyc0ZvclN1c3BlbmRlZFRhc2tzLmFk
ZCh0YXNrLmRvY3VtZW50SWRlbnRpZmllcik7CisKKyAgICAgICAgYXV0byBjaGVja1NlbGZTdXNw
ZW5kZWQgPSBbdGhpc10gKEV2ZW50TG9vcFRhc2tHcm91cCogZ3JvdXApIHsKKyAgICAgICAgICAg
IGlmICghZ3JvdXAgfHwgIWdyb3VwLT5pc1NlbGZTdXNwZW5kZWQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBtX2dyb3Vwc1dpdGhTdXNwZW5lZFRhc2tzLmFk
ZChncm91cCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoY2hlY2tTZWxmU3VzcGVuZGVkKGdyb3VwKSB8fCBjaGVja1NlbGZTdXNwZW5kZWQoZ3Jv
dXAtPnBhcmVudEdyb3VwKCkpKSB7CiAgICAgICAgICAgICByZW1haW5pbmdUYXNrcy5hcHBlbmQo
V1RGTW92ZSh0YXNrKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAg
ICB0YXNrLnRhc2soKTsKKworICAgICAgICBBU1NFUlQoZ3JvdXAtPm1fc2NoZWR1bGVkVGFza3Mp
OworICAgICAgICBncm91cC0+bV9zY2hlZHVsZWRUYXNrcy0tOworCisgICAgICAgIGlmIChncm91
cC0+aXNTdG9wcGVkUGVybWFuZW50bHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIHRhc2stPmV4ZWN1dGUoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiB0YXNrIDogbV90YXNr
cykKICAgICAgICAgcmVtYWluaW5nVGFza3MuYXBwZW5kKFdURk1vdmUodGFzaykpOwpAQCAtMTIz
LDQgKzE1MCwyMyBAQAogICAgIG1fdGFza3MgPSBXVEZNb3ZlKHJlbWFpbmluZ1Rhc2tzKTsKIH0K
IAorY2xhc3MgRXZlbnRMb29wRnVuY3Rpb25EaXNwYXRjaFRhc2sgOiBwdWJsaWMgRXZlbnRMb29w
VGFzayB7CitwdWJsaWM6CisgICAgRXZlbnRMb29wRnVuY3Rpb25EaXNwYXRjaFRhc2soVGFza1Nv
dXJjZSBzb3VyY2UsIEFic3RyYWN0RXZlbnRMb29wOjpUYXNrRnVuY3Rpb24mJiBmdW5jdGlvbikK
KyAgICAgICAgOiBFdmVudExvb3BUYXNrKHNvdXJjZSkKKyAgICAgICAgLCBtX2Z1bmN0aW9uKFdU
Rk1vdmUoZnVuY3Rpb24pKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGUoKSBmaW5h
bCB7IG1fZnVuY3Rpb24oKTsgfQorCitwcml2YXRlOgorICAgIEFic3RyYWN0RXZlbnRMb29wOjpU
YXNrRnVuY3Rpb24gbV9mdW5jdGlvbjsKK307CisKK3ZvaWQgRXZlbnRMb29wVGFza0dyb3VwOjpx
dWV1ZVRhc2soVGFza1NvdXJjZSBzb3VyY2UsIEFic3RyYWN0RXZlbnRMb29wOjpUYXNrRnVuY3Rp
b24mJiBmdW5jdGlvbikKK3sKKyAgICByZXR1cm4gcXVldWVUYXNrKG1ha2VVbmlxdWU8RXZlbnRM
b29wRnVuY3Rpb25EaXNwYXRjaFRhc2s+KHNvdXJjZSwgV1RGTW92ZShmdW5jdGlvbikpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dpbmRv
d0V2ZW50TG9vcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVu
dExvb3AuaAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2
ZW50TG9vcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyNyArNDEsMjIgQEAKIAogICAgIH5XaW5k
b3dFdmVudExvb3AoKTsKIAotICAgIHZvaWQgcXVldWVUYXNrKFRhc2tTb3VyY2UsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBUYXNrRnVuY3Rpb24mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBxdWV1
ZVRhc2soc3RkOjp1bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2s+JiYpIGZpbmFsOwogCi0gICAgdm9p
ZCBzdXNwZW5kKERvY3VtZW50Jik7Ci0gICAgdm9pZCByZXN1bWUoRG9jdW1lbnQmKTsKLSAgICB2
b2lkIHN0b3AoRG9jdW1lbnQmKTsKLQogcHJpdmF0ZToKICAgICBXaW5kb3dFdmVudExvb3AoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKTsKIAorICAgIHZvaWQgc3RvcEdyb3VwKEV2ZW50TG9vcFRh
c2tHcm91cCYpIGZpbmFsOworICAgIHZvaWQgc3VzcGVuZEdyb3VwKEV2ZW50TG9vcFRhc2tHcm91
cCYpIGZpbmFsOworICAgIHZvaWQgcmVzdW1lR3JvdXAoRXZlbnRMb29wVGFza0dyb3VwJikgZmlu
YWw7CisgICAgdm9pZCBjYW5jZWxBbGxGb3JHcm91cChFdmVudExvb3BUYXNrR3JvdXAmKSBmaW5h
bDsKKwogICAgIHZvaWQgc2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7CiAgICAgdm9pZCBydW4oKTsK
IAotICAgIHN0cnVjdCBUYXNrIHsKLSAgICAgICAgVGFza1NvdXJjZSBzb3VyY2U7Ci0gICAgICAg
IFRhc2tGdW5jdGlvbiB0YXNrOwotICAgICAgICBEb2N1bWVudElkZW50aWZpZXIgZG9jdW1lbnRJ
ZGVudGlmaWVyOwotICAgIH07Ci0KICAgICAvLyBVc2UgYSBnbG9iYWwgcXVldWUgaW5zdGVhZCBv
ZiBtdWx0aXBsZSB0YXNrIHF1ZXVlcyBzaW5jZSBIVE1MNSBzcGVjIGFsbG93cyBVQSB0byBwaWNr
IGFyYml0cmFyeSBxdWV1ZS4KLSAgICBWZWN0b3I8VGFzaz4gbV90YXNrczsKLSAgICBIYXNoU2V0
PERvY3VtZW50SWRlbnRpZmllcj4gbV9kb2N1bWVudElkZW50aWZpZXJzRm9yU3VzcGVuZGVkVGFz
a3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPj4gbV90YXNrczsK
KyAgICBXZWFrSGFzaFNldDxFdmVudExvb3BUYXNrR3JvdXA+IG1fZ3JvdXBzV2l0aFN1c3BlbmVk
VGFza3M7CiAgICAgUmVnaXN0cmFibGVEb21haW4gbV9kb21haW47CiAgICAgYm9vbCBtX2lzU2No
ZWR1bGVkVG9SdW4geyBmYWxzZSB9OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
UmVhZGVyLmNwcAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9G
aWxlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBACiAgICAgc3Rh
dGljIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyU2VlZCA9IDA7CiAgICAgdWludDY0X3QgdGFza0lk
ZW50aWZpZXIgPSArK3Rhc2tJZGVudGlmaWVyU2VlZDsKICAgICBtX3BlbmRpbmdUYXNrcy5hZGQo
dGFza0lkZW50aWZpZXIsIFdURk1vdmUodGFzaykpOwotICAgIGNvbnRleHQtPmV2ZW50TG9vcCgp
LnF1ZXVlVGFzayhUYXNrU291cmNlOjpGaWxlUmVhZGluZywgKmNvbnRleHQsIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBlbmRpbmdBY3Rpdml0eSA9IG1ha2VQZW5kaW5n
QWN0aXZpdHkoKnRoaXMpLCB0YXNrSWRlbnRpZmllcl0geworICAgIGNvbnRleHQtPmV2ZW50TG9v
cCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpGaWxlUmVhZGluZywgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVuZGluZ0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0
eSgqdGhpcyksIHRhc2tJZGVudGlmaWVyXSB7CiAgICAgICAgIGF1dG8gdGFzayA9IG1fcGVuZGlu
Z1Rhc2tzLnRha2UodGFza0lkZW50aWZpZXIpOwogICAgICAgICBpZiAodGFzaykKICAgICAgICAg
ICAgIHRhc2soKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFZJ
REVPKQogCisjaW5jbHVkZSAiQWJzdHJhY3RFdmVudExvb3AuaCIKICNpbmNsdWRlICJBcHBsaWNh
dGlvbkNhY2hlSG9zdC5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgpAQCAtNDI4LDcgKzQyOSw2IEBACiAgICAgLCBtX3NjYW5U
aW1lcigqdGhpcywgJkhUTUxNZWRpYUVsZW1lbnQ6OnNjYW5UaW1lckZpcmVkKQogICAgICwgbV9w
bGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zVGltZXIoKnRoaXMsICZI
VE1MTWVkaWFFbGVtZW50OjpwbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rp
b25zVGltZXJGaXJlZCkKICAgICAsIG1fc2Vla1RvUGxheWJhY2tQb3NpdGlvbkVuZGVkVGltZXIo
KnRoaXMsICZIVE1MTWVkaWFFbGVtZW50OjpzZWVrVG9QbGF5YmFja1Bvc2l0aW9uRW5kZWRUaW1l
ckZpcmVkKQotICAgICwgbV9hc3luY0V2ZW50UXVldWUoTWFpblRocmVhZEdlbmVyaWNFdmVudFF1
ZXVlOjpjcmVhdGUoKnRoaXMpKQogICAgICwgbV9sYXN0VGltZVVwZGF0ZUV2ZW50TW92aWVUaW1l
KE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUoKSkKICAgICAsIG1fZmlyc3RUaW1lUGxh
eWluZyh0cnVlKQogICAgICwgbV9wbGF5aW5nKGZhbHNlKQpAQCAtNTYyLDggKzU2Miw2IEBACiAg
ICAgYmVnaW5JZ25vcmluZ1RyYWNrRGlzcGxheVVwZGF0ZVJlcXVlc3RzKCk7CiAgICAgYWxsTWVk
aWFFbGVtZW50cygpLnJlbW92ZSh0aGlzKTsKIAotICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5jbG9z
ZSgpOwotCiAgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQoZmFsc2UpOwogICAgIHVucmVnaXN0
ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAKQEAgLTYyNSwxMSArNjIzLDggQEAKIAogICAg
IG1fc2Vla1Rhc2tRdWV1ZS5jbG9zZSgpOwogICAgIG1fcmVzdW1lVGFza1F1ZXVlLmNsb3NlKCk7
Ci0gICAgbV9wcm9taXNlVGFza1F1ZXVlLmNsb3NlKCk7Ci0gICAgbV9wYXVzZUFmdGVyRGV0YWNo
ZWRUYXNrUXVldWUuY2xvc2UoKTsKICAgICBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZp
b3JSZXN0cmljdGlvbnNRdWV1ZS5jbG9zZSgpOwogICAgIG1fcmVzb3VyY2VTZWxlY3Rpb25UYXNr
UXVldWUuY2xvc2UoKTsKLSAgICBtX3Zpc2liaWxpdHlDaGFuZ2VUYXNrUXVldWUuY2xvc2UoKTsK
ICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIG1fZW5jcnlwdGVkTWVkaWFRdWV1ZS5j
bG9zZSgpOwogI2VuZGlmCkBAIC02NDQsNiArNjM5LDE2IEBACiAgICAgbV9tZWRpYVNlc3Npb24g
PSBudWxscHRyOwogICAgIHNjaGVkdWxlUGxheWJhY2tDb250cm9sc01hbmFnZXJVcGRhdGUoKTsK
IH0KKworRXZlbnRMb29wVGFza0dyb3VwJiBIVE1MTWVkaWFFbGVtZW50Ojphc3luY0V2ZW50R3Jv
dXAoKQoreworICAgIGlmIChVTkxJS0VMWSghbV9hc3luY0V2ZW50R3JvdXApKSB7CisgICAgICAg
IG1fYXN5bmNFdmVudEdyb3VwID0gbWFrZVVuaXF1ZTxFdmVudExvb3BUYXNrR3JvdXA+KGRvY3Vt
ZW50KCkuZXZlbnRMb29wKCkpOworICAgICAgICBtX2FzeW5jRXZlbnRHcm91cC0+c3RhcnRSdW5u
aW5nV2l0aFBhcmVudCgpOworICAgIH0KKyAgICByZXR1cm4gKm1fYXN5bmNFdmVudEdyb3VwOwor
fQorCiBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gSFRNTE1lZGlhRWxlbWVudDo6YmVzdE1lZGlh
RWxlbWVudEZvclNob3dpbmdQbGF5YmFja0NvbnRyb2xzTWFuYWdlcihNZWRpYUVsZW1lbnRTZXNz
aW9uOjpQbGF5YmFja0NvbnRyb2xzUHVycG9zZSBwdXJwb3NlKQogewogICAgIFZlY3RvcjxNZWRp
YUVsZW1lbnRTZXNzaW9uSW5mbz4gY2FuZGlkYXRlU2Vzc2lvbnM7CkBAIC05NDQsNyArOTQ5LDkg
QEAKICAgICBzZXRJbkFjdGl2ZURvY3VtZW50KGZhbHNlKTsKICAgICBpZiAocmVtb3ZhbFR5cGUu
ZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KSB7CiAgICAgICAgIC8vIFBhdXNlIGFzeW5jaHJvbm91
c2x5IHRvIGxldCB0aGUgb3BlcmF0aW9uIHRoYXQgcmVtb3ZlZCB1cyBmaW5pc2gsIGluIGNhc2Ug
d2UgZ2V0IGluc2VydGVkIGJhY2sgaW50byBhIGRvY3VtZW50LgotICAgICAgICBtX3BhdXNlQWZ0
ZXJEZXRhY2hlZFRhc2tRdWV1ZS5lbnF1ZXVlVGFzayhzdGQ6OmJpbmQoJkhUTUxNZWRpYUVsZW1l
bnQ6OnBhdXNlQWZ0ZXJEZXRhY2hlZFRhc2ssIHRoaXMpKTsKKyAgICAgICAgcXVldWVUYXNrS2Vl
cGluZ09iamVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3Ro
aXNdIHsKKyAgICAgICAgICAgIHBhdXNlQWZ0ZXJEZXRhY2hlZFRhc2soKTsKKyAgICAgICAgfSk7
CiAgICAgfQogCiAgICAgaWYgKG1fbWVkaWFTZXNzaW9uKQpAQCAtMTAxMSwyNCArMTAxOCwxOSBA
QAogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNjaGVkdWxlRXZlbnQoY29uc3QgQXRvbVN0cmlu
ZyYgZXZlbnROYW1lKQogewotICAgIGF1dG8gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZSwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Olllcyk7Ci0KLSAg
ICAvLyBEb24ndCBzZXQgdGhlIGV2ZW50IHRhcmdldCwgdGhlIGV2ZW50IHF1ZXVlIHdpbGwgc2V0
IGl0IGluIEdlbmVyaWNFdmVudFF1ZXVlOjp0aW1lckZpcmVkIGFuZCBzZXR0aW5nIGl0IGhlcmUK
LSAgICAvLyB3aWxsIHRyaWdnZXIgYW4gQVNTRVJUIGlmIHRoaXMgZWxlbWVudCBoYXMgYmVlbiBt
YXJrZWQgZm9yIGRlbGV0aW9uLgotCi0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVu
dChXVEZNb3ZlKGV2ZW50KSk7CisgICAgLy8gRklYTUU6CisgICAgcXVldWVHcm91cGVkVGFza1Rv
RGlzcGF0Y2hFdmVudChhc3luY0V2ZW50R3JvdXAoKSwgKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlh
RWxlbWVudEV2ZW50LCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgRXZlbnQ6OkNhbkJ1YmJsZTo6
Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6OlllcykpOwogfQogCi0jaWYgRU5BQkxFKFBJQ1RVUkVf
SU5fUElDVFVSRV9BUEkpCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNjaGVkdWxlRXZlbnQoUmVm
PEV2ZW50PiYmIGV2ZW50KQogewotICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQo
V1RGTW92ZShldmVudCkpOworICAgIC8vIEZJWE1FOgorICAgIHF1ZXVlR3JvdXBlZFRhc2tUb0Rp
c3BhdGNoRXZlbnQoYXN5bmNFdmVudEdyb3VwKCksICp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVs
ZW1lbnRFdmVudCwgV1RGTW92ZShldmVudCkpOwogfQotI2VuZGlmCiAKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6c2NoZWR1bGVSZXNvbHZlUGVuZGluZ1BsYXlQcm9taXNlcygpCiB7Ci0gICAgbV9w
cm9taXNlVGFza1F1ZXVlLmVucXVldWVUYXNrKFt0aGlzLCBwZW5kaW5nUGxheVByb21pc2VzID0g
V1RGTW92ZShtX3BlbmRpbmdQbGF5UHJvbWlzZXMpXSAoKSBtdXRhYmxlIHsKKyAgICBxdWV1ZVRh
c2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50
LCBbdGhpcywgcGVuZGluZ1BsYXlQcm9taXNlcyA9IFdURk1vdmUobV9wZW5kaW5nUGxheVByb21p
c2VzKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIHJlc29sdmVQZW5kaW5nUGxheVByb21pc2VzKFdU
Rk1vdmUocGVuZGluZ1BsYXlQcm9taXNlcykpOwogICAgIH0pOwogfQpAQCAtMTAzNSw3ICsxMDM3
LDcgQEAKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzY2hlZHVsZVJlamVjdFBlbmRpbmdQbGF5
UHJvbWlzZXMoUmVmPERPTUV4Y2VwdGlvbj4mJiBlcnJvcikKIHsKLSAgICBtX3Byb21pc2VUYXNr
UXVldWUuZW5xdWV1ZVRhc2soW3RoaXMsIGVycm9yID0gV1RGTW92ZShlcnJvciksIHBlbmRpbmdQ
bGF5UHJvbWlzZXMgPSBXVEZNb3ZlKG1fcGVuZGluZ1BsYXlQcm9taXNlcyldICgpIG11dGFibGUg
eworICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJjZTo6TWVk
aWFFbGVtZW50RXZlbnQsIFt0aGlzLCBlcnJvciA9IFdURk1vdmUoZXJyb3IpLCBwZW5kaW5nUGxh
eVByb21pc2VzID0gV1RGTW92ZShtX3BlbmRpbmdQbGF5UHJvbWlzZXMpXSAoKSBtdXRhYmxlIHsK
ICAgICAgICAgcmVqZWN0UGVuZGluZ1BsYXlQcm9taXNlcyhXVEZNb3ZlKHBlbmRpbmdQbGF5UHJv
bWlzZXMpLCBXVEZNb3ZlKGVycm9yKSk7CiAgICAgfSk7CiB9CkBAIC0xMDU0LDcgKzEwNTYsNyBA
QAogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNjaGVkdWxlTm90aWZ5QWJvdXRQbGF5aW5nKCkK
IHsKLSAgICBtX3Byb21pc2VUYXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXMsIHBlbmRpbmdQbGF5
UHJvbWlzZXMgPSBXVEZNb3ZlKG1fcGVuZGluZ1BsYXlQcm9taXNlcyldICgpIG11dGFibGUgewor
ICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFF
bGVtZW50RXZlbnQsIFt0aGlzLCBwZW5kaW5nUGxheVByb21pc2VzID0gV1RGTW92ZShtX3BlbmRp
bmdQbGF5UHJvbWlzZXMpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgbm90aWZ5QWJvdXRQbGF5aW5n
KFdURk1vdmUocGVuZGluZ1BsYXlQcm9taXNlcykpOwogICAgIH0pOwogfQpAQCAtMTgzNSw2ICsx
ODM3LDEzIEBACiAgICAgLy8gdGltZXMgZmlyc3QpLgogICAgIHN0ZDo6c29ydChldmVudFRhc2tz
LmJlZ2luKCksIGV2ZW50VGFza3MuZW5kKCksIGV2ZW50VGltZUN1ZUNvbXBhcmUpOwogCisgICAg
Ly8gRklYTUU6IE1ha2UgVGV4dFRyYWNrQ3VlIGFuIGFjdGl2ZSBET00gb2JqZWN0IGFuZCBzY2hl
ZHVsZSBhbiBldmVudCB0aGVyZSBpbnN0ZWFkLgorICAgIGF1dG8gc2NoZWR1bGVFdmVudCA9IFt0
aGlzXSAoVGV4dFRyYWNrQ3VlJiBjdWUsIFJlZjxFdmVudD4mJiBldmVudCkgeworICAgICAgICBh
c3luY0V2ZW50R3JvdXAoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQs
IFtldmVudCA9IFdURk1vdmUoZXZlbnQpLCBjdWUgPSBtYWtlUmVmKGN1ZSldIHsKKyAgICAgICAg
ICAgIGN1ZS0+RXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgICAgICB9KTsK
KyAgICB9OworCiAgICAgZm9yIChhdXRvJiBldmVudFRhc2sgOiBldmVudFRhc2tzKSB7CiAgICAg
ICAgIGlmICghYWZmZWN0ZWRUcmFja3MuY29udGFpbnMoZXZlbnRUYXNrLnNlY29uZC0+dHJhY2so
KSkpCiAgICAgICAgICAgICBhZmZlY3RlZFRyYWNrcy5hcHBlbmQoZXZlbnRUYXNrLnNlY29uZC0+
dHJhY2soKSk7CkBAIC0xODQ2LDIxICsxODU1LDEzIEBACiAgICAgICAgIC8vIGNvcnJlY3RseSBp
ZGVudGlmaWVzIHRoZSB0eXBlIG9mIHRoZSBldmVudCwgaWYgdGhlIHN0YXJ0VGltZSBpcwogICAg
ICAgICAvLyBsZXNzIHRoYW4gdGhlIGVuZFRpbWUgaW4gdGhlIGN1ZS4KICAgICAgICAgaWYgKGV2
ZW50VGFzay5zZWNvbmQtPnN0YXJ0VGltZSgpID49IGV2ZW50VGFzay5zZWNvbmQtPmVuZFRpbWUo
KSkgewotICAgICAgICAgICAgYXV0byBlbnRlckV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuZW50ZXJFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFi
bGU6Ok5vKTsKLSAgICAgICAgICAgIGVudGVyRXZlbnQtPnNldFRhcmdldChldmVudFRhc2suc2Vj
b25kKTsKLSAgICAgICAgICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoV1RGTW92
ZShlbnRlckV2ZW50KSk7Ci0KLSAgICAgICAgICAgIGF1dG8gZXhpdEV2ZW50ID0gRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuZXhpdEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6
OklzQ2FuY2VsYWJsZTo6Tm8pOwotICAgICAgICAgICAgZXhpdEV2ZW50LT5zZXRUYXJnZXQoZXZl
bnRUYXNrLnNlY29uZCk7Ci0gICAgICAgICAgICBtX2FzeW5jRXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2
ZW50KFdURk1vdmUoZXhpdEV2ZW50KSk7CisgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KCpldmVu
dFRhc2suc2Vjb25kLCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbnRlckV2ZW50LCBFdmVu
dDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKyAgICAgICAgICAg
IHNjaGVkdWxlRXZlbnQoKmV2ZW50VGFzay5zZWNvbmQsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLmV4aXRFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6
Ok5vKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50
OwogICAgICAgICAgICAgaWYgKGV2ZW50VGFzay5maXJzdCA9PSBldmVudFRhc2suc2Vjb25kLT5z
dGFydE1lZGlhVGltZSgpKQotICAgICAgICAgICAgICAgIGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkuZW50ZXJFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0Nh
bmNlbGFibGU6Ok5vKTsKKyAgICAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KCpldmVudFRhc2su
c2Vjb25kLCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbnRlckV2ZW50LCBFdmVudDo6Q2Fu
QnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmV4aXRF
dmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKTsKLSAg
ICAgICAgICAgIGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXNrLnNlY29uZCk7Ci0gICAgICAgICAg
ICBtX2FzeW5jRXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsKKyAgICAg
ICAgICAgICAgICBzY2hlZHVsZUV2ZW50KCpldmVudFRhc2suc2Vjb25kLCBFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5leGl0RXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXND
YW5jZWxhYmxlOjpObykpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xODcxLDE5ICsxODcyLDE4
IEBACiAgICAgLy8gMTUgLSBGb3IgZWFjaCB0ZXh0IHRyYWNrIGluIGFmZmVjdGVkIHRyYWNrcywg
aW4gdGhlIGxpc3Qgb3JkZXIsIHF1ZXVlIGEKICAgICAvLyB0YXNrIHRvIGZpcmUgYSBzaW1wbGUg
ZXZlbnQgbmFtZWQgY3VlY2hhbmdlIGF0IHRoZSBUZXh0VHJhY2sgb2JqZWN0LCBhbmQsIC4uLgog
ICAgIGZvciAoYXV0byYgYWZmZWN0ZWRUcmFjayA6IGFmZmVjdGVkVHJhY2tzKSB7Ci0gICAgICAg
IGF1dG8gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jdWVjaGFuZ2VFdmVudCwg
RXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKTsKLSAgICAgICAg
ZXZlbnQtPnNldFRhcmdldChhZmZlY3RlZFRyYWNrKTsKLSAgICAgICAgbV9hc3luY0V2ZW50UXVl
dWUtPmVucXVldWVFdmVudChXVEZNb3ZlKGV2ZW50KSk7CisgICAgICAgIGFzeW5jRXZlbnRHcm91
cCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RyYWNrID0gbWFr
ZVJlZigqYWZmZWN0ZWRUcmFjayldIHsKKyAgICAgICAgICAgIHRyYWNrLT5kaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmN1ZWNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnVi
YmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKyAgICAgICAgfSk7CiAKICAgICAg
ICAgLy8gLi4uIGlmIHRoZSB0ZXh0IHRyYWNrIGhhcyBhIGNvcnJlc3BvbmRpbmcgdHJhY2sgZWxl
bWVudCwgdG8gdGhlbiBmaXJlIGEKICAgICAgICAgLy8gc2ltcGxlIGV2ZW50IG5hbWVkIGN1ZWNo
YW5nZSBhdCB0aGUgdHJhY2sgZWxlbWVudCBhcyB3ZWxsLgotICAgICAgICBpZiAoaXM8TG9hZGFi
bGVUZXh0VHJhY2s+KCphZmZlY3RlZFRyYWNrKSkgewotICAgICAgICAgICAgYXV0byBldmVudCA9
IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmN1ZWNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnVi
YmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pOwotICAgICAgICAgICAgYXV0byB0cmFj
a0VsZW1lbnQgPSBtYWtlUmVmUHRyKGRvd25jYXN0PExvYWRhYmxlVGV4dFRyYWNrPigqYWZmZWN0
ZWRUcmFjaykudHJhY2tFbGVtZW50KCkpOwotICAgICAgICAgICAgQVNTRVJUKHRyYWNrRWxlbWVu
dCk7Ci0gICAgICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRyYWNrRWxlbWVudCk7Ci0gICAgICAg
ICAgICBtX2FzeW5jRXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsKLSAg
ICAgICAgfQorICAgICAgICBpZiAoIWlzPExvYWRhYmxlVGV4dFRyYWNrPigqYWZmZWN0ZWRUcmFj
aykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhc3luY0V2ZW50R3JvdXAoKS5x
dWV1ZVRhc2soVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIFt0cmFja0VsZW1lbnQgPSBt
YWtlUmVmKCpkb3duY2FzdDxMb2FkYWJsZVRleHRUcmFjaz4oKmFmZmVjdGVkVHJhY2spLnRyYWNr
RWxlbWVudCgpKV0geworICAgICAgICAgICAgdHJhY2tFbGVtZW50LT5kaXNwYXRjaEV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmN1ZWNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxl
OjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKyAgICAgICAgfSk7CiAgICAgfQogCiAg
ICAgLy8gMTYgLSBTZXQgdGhlIHRleHQgdHJhY2sgY3VlIGFjdGl2ZSBmbGFnIG9mIGFsbCB0aGUg
Y3VlcyBpbiB0aGUgY3VycmVudApAQCAtMjIyMiw3ICsyMjIyLDcgQEAKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6Y2FuY2VsUGVuZGluZ0V2ZW50c0FuZENhbGxiYWNrcygpCiB7CiAgICAgSU5GT19M
T0coTE9HSURFTlRJRklFUik7Ci0gICAgbV9hc3luY0V2ZW50UXVldWUtPmNhbmNlbEFsbEV2ZW50
cygpOworICAgIGFzeW5jRXZlbnRHcm91cCgpLmNhbmNlbEFsbEV4aXN0aW5nVGFza3MoKTsKIAog
ICAgIGZvciAoYXV0byYgc291cmNlIDogY2hpbGRyZW5PZlR5cGU8SFRNTFNvdXJjZUVsZW1lbnQ+
KCp0aGlzKSkKICAgICAgICAgc291cmNlLmNhbmNlbFBlbmRpbmdFcnJvckV2ZW50KCk7CkBAIC0y
NjE2LDkgKzI2MTYsNyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYXV0
byBldmVudCA9IFdlYktpdE1lZGlhS2V5TmVlZGVkRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
d2Via2l0bmVlZGtleUV2ZW50LCBpbml0RGF0YSk7Ci0gICAgZXZlbnQtPnNldFRhcmdldCh0aGlz
KTsKLSAgICBtX2FzeW5jRXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsK
KyAgICBzY2hlZHVsZUV2ZW50KFdlYktpdE1lZGlhS2V5TmVlZGVkRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkud2Via2l0bmVlZGtleUV2ZW50LCBpbml0RGF0YSkpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0yNzY1LDcgKzI3NjMsNyBAQAogICAgIC8vICAgICAgaW5pdERhdGFUeXBlID0g
aW5pdERhdGFUeXBlCiAgICAgLy8gICAgICBpbml0RGF0YSA9IGluaXREYXRhCiAgICAgTWVkaWFF
bmNyeXB0ZWRFdmVudEluaXQgaW5pdGlhbGl6ZXIgeyBpbml0RGF0YVR5cGUsIFdURk1vdmUoaW5p
dERhdGEpIH07Ci0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVudChNZWRpYUVuY3J5
cHRlZEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuY3J5cHRlZEV2ZW50LCBpbml0aWFsaXpl
ciwgRXZlbnQ6OklzVHJ1c3RlZDo6WWVzKSk7CisgICAgc2NoZWR1bGVFdmVudChNZWRpYUVuY3J5
cHRlZEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuY3J5cHRlZEV2ZW50LCBpbml0aWFsaXpl
ciwgRXZlbnQ6OklzVHJ1c3RlZDo6WWVzKSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
bWVkaWFQbGF5ZXJXYWl0aW5nRm9yS2V5Q2hhbmdlZCgpCkBAIC01NzEzLDE0ICs1NzExLDExIEBA
CiAgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zUXVldWUu
Y2xvc2UoKTsKICAgICBtX3NlZWtUYXNrUXVldWUuY2xvc2UoKTsKICAgICBtX3Jlc3VtZVRhc2tR
dWV1ZS5jbG9zZSgpOwotICAgIG1fcHJvbWlzZVRhc2tRdWV1ZS5jbG9zZSgpOwotICAgIG1fcGF1
c2VBZnRlckRldGFjaGVkVGFza1F1ZXVlLmNsb3NlKCk7CiAgICAgbV9yZXNvdXJjZVNlbGVjdGlv
blRhc2tRdWV1ZS5jbG9zZSgpOwotICAgIG1fdmlzaWJpbGl0eUNoYW5nZVRhc2tRdWV1ZS5jbG9z
ZSgpOwogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgbV9lbmNyeXB0ZWRNZWRpYVF1
ZXVlLmNsb3NlKCk7CiAjZW5kaWYKLSAgICBtX2FzeW5jRXZlbnRRdWV1ZS0+Y2xvc2UoKTsKKyAg
ICBhc3luY0V2ZW50R3JvdXAoKS5zdG9wQW5kRGlzY2FyZEFsbFRhc2tzKCk7CiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBtX3ZvbHVtZVJldmVydFRhc2tRdWV1ZS5jbG9zZSgpOwogI2Vu
ZGlmCkBAIC01ODAwLDcgKzU3OTUsNyBAQAogCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6Omhhc1Bl
bmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChoYXNBdWRpbygpICYmIGlzUGxh
eWluZygpKSB8fCBtX2FzeW5jRXZlbnRRdWV1ZS0+aGFzUGVuZGluZ0V2ZW50cygpIHx8IG1fY3Jl
YXRpbmdDb250cm9sczsKKyAgICByZXR1cm4gKGhhc0F1ZGlvKCkgJiYgaXNQbGF5aW5nKCkpIHx8
IG1fY3JlYXRpbmdDb250cm9scyB8fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0
eSgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhVm9sdW1lRGlkQ2hhbmdlKCkK
QEAgLTU4NzgsNyArNTg3Myw4IEBACiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0SXNQbGF5
aW5nVG9XaXJlbGVzc1RhcmdldChib29sIGlzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQpCiB7Ci0g
ICAgbV9wbGF5YmFja1RhcmdldElzV2lyZWxlc3NRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpcywgaXNQ
bGF5aW5nVG9XaXJlbGVzc1RhcmdldF0geworICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBub3Qg
YSBwYXJ0IG9mIHRoaXMgbWVkaWEgZWxlbWVudCdzIHRhc2sgZ3JvdXA/CisgICAgcXVldWVUYXNr
S2VlcGluZ09iamVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwg
W3RoaXMsIGlzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXRdIHsKICAgICAgICAgaWYgKGlzUGxheWlu
Z1RvV2lyZWxlc3NUYXJnZXQgPT0gbV9pc1BsYXlpbmdUb1dpcmVsZXNzVGFyZ2V0KQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBtX2lzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQgPSBtX3Bs
YXllciAmJiBtX3BsYXllci0+aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpOwpAQCAt
NTk1MSw5ICs1OTQ3LDcgQEAKIHsKICAgICBib29sIGhhc1RhcmdldHMgPSBtX21lZGlhU2Vzc2lv
bi0+aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKTsKICAgICBJTkZPX0xPRyhMT0dJREVOVElG
SUVSLCAiaGFzVGFyZ2V0cyA9ICIsIGhhc1RhcmdldHMpOwotICAgIGF1dG8gZXZlbnQgPSBXZWJL
aXRQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndl
YmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50LCBoYXNUYXJnZXRzKTsK
LSAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5lbnF1
ZXVlRXZlbnQoV1RGTW92ZShldmVudCkpOworICAgIHNjaGVkdWxlRXZlbnQoV2ViS2l0UGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5
YmFja3RhcmdldGF2YWlsYWJpbGl0eWNoYW5nZWRFdmVudCwgaGFzVGFyZ2V0cykpOwogICAgIHNj
aGVkdWxlVXBkYXRlTWVkaWFTdGF0ZSgpOwogfQogCkBAIC02MDcwLDcgKzYwNjQsNyBAQAogICAg
IH0KICNlbmRpZgogCi0gICAgbV9mdWxsc2NyZWVuVGFza1F1ZXVlLmVucXVldWVUYXNrKFt0aGlz
LCBtb2RlXSB7CisgICAgcXVldWVUYXNrS2VlcGluZ09iamVjdEFsaXZlKCp0aGlzLCBUYXNrU291
cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXMsIG1vZGVdIHsKICAgICAgICAgaWYgKGRvY3Vt
ZW50KCkuaGlkZGVuKCkpIHsKICAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwg
IiAgcmV0dXJuaW5nIGJlY2F1c2UgZG9jdW1lbnQgaXMgaGlkZGVuIik7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC04MDM5LDcgKzgwMzMsNyBAQAogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Omlz
VmlzaWJsZUluVmlld3BvcnRDaGFuZ2VkKCkKIHsKLSAgICBtX3Zpc2liaWxpdHlDaGFuZ2VUYXNr
UXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdIHsKKyAgICBxdWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxp
dmUoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBbdGhpc10gewogICAgICAg
ICBtX21lZGlhU2Vzc2lvbi0+aXNWaXNpYmxlSW5WaWV3cG9ydENoYW5nZWQoKTsKICAgICAgICAg
dXBkYXRlU2hvdWxkQXV0b3BsYXkoKTsKICAgICAgICAgc2NoZWR1bGVQbGF5YmFja0NvbnRyb2xz
TWFuYWdlclVwZGF0ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBACiBjbGFzcyBET01XcmFwcGVy
V29ybGQ7CiBjbGFzcyBEZWZlcnJlZFByb21pc2U7CiBjbGFzcyBFdmVudDsKK2NsYXNzIEV2ZW50
TG9vcFRhc2tHcm91cDsKIGNsYXNzIEhUTUxTb3VyY2VFbGVtZW50OwogY2xhc3MgSFRNTFRyYWNr
RWxlbWVudDsKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7CkBAIC01NzksOSArNTgwLDcg
QEAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZEJlY29tZUZ1bGxzY3JlZW5FbGVtZW50KCkg
b3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3aWxsRXhpdEZ1bGxzY3JlZW4oKTsK
IAotI2lmIEVOQUJMRShQSUNUVVJFX0lOX1BJQ1RVUkVfQVBJKQogICAgIHZvaWQgc2NoZWR1bGVF
dmVudChSZWY8RXZlbnQ+JiYpOwotI2VuZGlmCiAKICAgICBlbnVtIGNsYXNzIEF1dG9wbGF5RXZl
bnRQbGF5YmFja1N0YXRlIHsgTm9uZSwgUHJldmVudGVkQXV0b3BsYXksIFN0YXJ0ZWRXaXRoVXNl
ckdlc3R1cmUsIFN0YXJ0ZWRXaXRob3V0VXNlckdlc3R1cmUgfTsKIApAQCAtNjI4LDYgKzYyNyw4
IEBACiAgICAgdm9pZCBzY2hlZHVsZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcmKTsKIAogcHJpdmF0
ZToKKyAgICBFdmVudExvb3BUYXNrR3JvdXAmIGFzeW5jRXZlbnRHcm91cCgpOworCiAgICAgdm9p
ZCBjcmVhdGVNZWRpYVBsYXllcigpOwogCiAgICAgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Qg
b3ZlcnJpZGU7CkBAIC05NTcsNyArOTU4LDcgQEAKICAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVj
b21lQWN0aXZlKCkgZmluYWw7CiAKICAgICB2b2lkIHNldEluQWN0aXZlRG9jdW1lbnQoYm9vbCk7
Ci0KKyAgICAKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBjb25zdCB2b2lkKiBtZWRp
YVBsYXllckxvZ0lkZW50aWZpZXIoKSBmaW5hbCB7IHJldHVybiBsb2dJZGVudGlmaWVyKCk7IH0K
ICAgICBjb25zdCBMb2dnZXImIG1lZGlhUGxheWVyTG9nZ2VyKCkgZmluYWwgeyByZXR1cm4gbG9n
Z2VyKCk7IH0KQEAgLTk3NiwxNCArOTc3LDEwIEBACiAgICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+
IG1fcmVzdW1lVGFza1F1ZXVlOwogICAgIERlZmVycmFibGVUYXNrPFRpbWVyPiBtX3NlZWtUYXNr
UXVldWU7CiAgICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+IG1fcGxheWJhY2tDb250cm9sc01hbmFn
ZXJCZWhhdmlvclJlc3RyaWN0aW9uc1F1ZXVlOwotICAgIEdlbmVyaWNUYXNrUXVldWU8VGltZXI+
IG1fcHJvbWlzZVRhc2tRdWV1ZTsKLSAgICBHZW5lcmljVGFza1F1ZXVlPFRpbWVyPiBtX3BhdXNl
QWZ0ZXJEZXRhY2hlZFRhc2tRdWV1ZTsKICAgICBHZW5lcmljVGFza1F1ZXVlPFRpbWVyPiBtX3Jl
c291cmNlU2VsZWN0aW9uVGFza1F1ZXVlOwotICAgIEdlbmVyaWNUYXNrUXVldWU8VGltZXI+IG1f
dmlzaWJpbGl0eUNoYW5nZVRhc2tRdWV1ZTsKLSAgICBHZW5lcmljVGFza1F1ZXVlPFRpbWVyPiBt
X2Z1bGxzY3JlZW5UYXNrUXVldWU7Ci0gICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV9wbGF5
YmFja1RhcmdldElzV2lyZWxlc3NRdWV1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29w
VGFza0dyb3VwPiBtX2FzeW5jRXZlbnRHcm91cDsKKyAgICAKICAgICBSZWZQdHI8VGltZVJhbmdl
cz4gbV9wbGF5ZWRUaW1lUmFuZ2VzOwotICAgIFVuaXF1ZVJlZjxNYWluVGhyZWFkR2VuZXJpY0V2
ZW50UXVldWU+IG1fYXN5bmNFdmVudFF1ZXVlOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+IG1fdm9sdW1lUmV2ZXJ0VGFza1F1ZXVlOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAJKHJl
dmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIlRyYWNr
TGlzdEJhc2UuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0RXZlbnRMb29wLmgiCiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC00Miw3ICs0Myw2IEBACiBUcmFja0xpc3RCYXNl
OjpUcmFja0xpc3RCYXNlKEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCkKICAgICAs
IG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9hc3luY0V2ZW50UXVldWUoTWFpblRocmVhZEdl
bmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQogewogICAgIEFTU0VSVCghY29udGV4dCB8
fCBpczxEb2N1bWVudD4oY29udGV4dCkpOwogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwpAQCAtOTgs
NyArOTgsOSBAQAogCiB2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlVHJhY2tFdmVudChjb25z
dCBBdG9tU3RyaW5nJiBldmVudE5hbWUsIFJlZjxUcmFja0Jhc2U+JiYgdHJhY2spCiB7Ci0gICAg
bV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVudChUcmFja0V2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lLCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8sIFdURk1v
dmUodHJhY2spKSk7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICBx
dWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2
ZW50LCBUcmFja0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBFdmVudDo6Q2FuQnViYmxlOjpObywg
RXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8sIFdURk1vdmUodHJhY2spKSk7CiB9CiAKIHZvaWQgVHJh
Y2tMaXN0QmFzZTo6c2NoZWR1bGVBZGRUcmFja0V2ZW50KFJlZjxUcmFja0Jhc2U+JiYgdHJhY2sp
CkBAIC0xNjEsMTQgKzE2MywxNiBAQAogICAgIC8vIFdoZW5ldmVyIGEgdHJhY2sgaW4gYSBWaWRl
b1RyYWNrTGlzdCB0aGF0IHdhcyBwcmV2aW91c2x5IG5vdCBzZWxlY3RlZCBpcwogICAgIC8vIHNl
bGVjdGVkLCB0aGUgdXNlciBhZ2VudCBtdXN0IHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxl
IGV2ZW50IG5hbWVkCiAgICAgLy8gY2hhbmdlIGF0IHRoZSBWaWRlb1RyYWNrTGlzdCBvYmplY3Qu
Ci0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNl
bGFibGU6Ok5vKSk7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICAr
K21fcGVuZGluZ0NoYW5nZUV2ZW50Q291bnQ7CisgICAgcXVldWVUYXNrS2VlcGluZ09iamVjdEFs
aXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXNdIHsKKyAgICAg
ICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwg
RXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CisgICAgICAg
IEFTU0VSVChtX3BlbmRpbmdDaGFuZ2VFdmVudENvdW50KTsKKyAgICAgICAgLS1tX3BlbmRpbmdD
aGFuZ2VFdmVudENvdW50OworICAgIH0pOwogfQogCi1ib29sIFRyYWNrTGlzdEJhc2U6OmlzQ2hh
bmdlRXZlbnRTY2hlZHVsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2FzeW5jRXZlbnRRdWV1
ZS0+aGFzUGVuZGluZ0V2ZW50c09mVHlwZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQpOwotfQot
CiBib29sIFRyYWNrTGlzdEJhc2U6OmlzQW55VHJhY2tFbmFibGVkKCkgY29uc3QKIHsKICAgICBm
b3IgKGF1dG8mIHRyYWNrIDogbV9pbmJhbmRUcmFja3MpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNiBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZl
bnRUYXJnZXQuaCIKLSNpbmNsdWRlICJHZW5lcmljRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02MCw3ICs1OSw3
IEBACiAKICAgICAvLyBOZWVkcyB0byBiZSBwdWJsaWMgc28gdHJhY2tzIGNhbiBjYWxsIGl0CiAg
ICAgdm9pZCBzY2hlZHVsZUNoYW5nZUV2ZW50KCk7Ci0gICAgYm9vbCBpc0NoYW5nZUV2ZW50U2No
ZWR1bGVkKCkgY29uc3Q7CisgICAgYm9vbCBpc0NoYW5nZUV2ZW50U2NoZWR1bGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9wZW5kaW5nQ2hhbmdlRXZlbnRDb3VudDsgfQogCiAgICAgYm9vbCBpc0FueVRy
YWNrRW5hYmxlZCgpIGNvbnN0OwogCkBAIC04MCw4ICs3OSw3IEBACiAgICAgdm9pZCBkZXJlZkV2
ZW50VGFyZ2V0KCkgZmluYWwgeyBkZXJlZigpOyB9CiAKICAgICBIVE1MTWVkaWFFbGVtZW50KiBt
X2VsZW1lbnQ7Ci0KLSAgICBVbmlxdWVSZWY8TWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlPiBt
X2FzeW5jRXZlbnRRdWV1ZTsKKyAgICB1bnNpZ25lZCBtX3BlbmRpbmdDaGFuZ2VFdmVudENvdW50
IHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Njg0LDcgKzQ2ODQsNyBA
QAogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9y
IH07CiAKLSAgICBjb250ZXh0LmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhzb3VyY2UsIGNvbnRleHQs
IFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIHsKKyAgICBjb250ZXh0LmV2ZW50TG9v
cCgpLnF1ZXVlVGFzayhzb3VyY2UsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIHsK
ICAgICAgICAgY2FsbGJhY2stPmhhbmRsZUV2ZW50KCk7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRMb29wLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5jcHAJKHJldmlzaW9uIDI1MjIyMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRMb29wLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksMTYgKzQ5LDMxIEBACiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CiAKLXZv
aWQgV29ya2VyRXZlbnRMb29wOjpxdWV1ZVRhc2soVGFza1NvdXJjZSBzb3VyY2UsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFRhc2tGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBX
b3JrZXJFdmVudExvb3A6OnF1ZXVlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFzaz4m
JiB0YXNrKQogewogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhy
ZWFkKCkpOwotICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpID09ICZjb250ZXh0KTsKLSAgICBtX3Rhc2tzLmFwcGVuZCh7IHNvdXJjZSwgV1RGTW92ZShm
dW5jdGlvbikgfSk7CisgICAgbV90YXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAgICAgc2No
ZWR1bGVUb1J1bklmTmVlZGVkKCk7CiB9CiAKK3ZvaWQgV29ya2VyRXZlbnRMb29wOjpzdG9wR3Jv
dXAoRXZlbnRMb29wVGFza0dyb3VwJikKK3sKK30KKwordm9pZCBXb3JrZXJFdmVudExvb3A6OnN1
c3BlbmRHcm91cChFdmVudExvb3BUYXNrR3JvdXAmKQoreworfQorCit2b2lkIFdvcmtlckV2ZW50
TG9vcDo6cmVzdW1lR3JvdXAoRXZlbnRMb29wVGFza0dyb3VwJikKK3sKK30KKwordm9pZCBXb3Jr
ZXJFdmVudExvb3A6OmNhbmNlbEFsbEZvckdyb3VwKEV2ZW50TG9vcFRhc2tHcm91cCYpCit7Cit9
CisKIGNvbnN0IGNoYXIqIFdvcmtlckV2ZW50TG9vcDo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuICJXb3JrZXJFdmVudExvb3AiOwpAQCAtOTgsOSArMTEzLDkgQEAK
ICAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICgh
Y29udGV4dCB8fCBjb250ZXh0LT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgpIHx8IGNvbnRl
eHQtPmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGF1dG8gdGFza3MgPSBzdGQ6OmV4Y2hhbmdlKG1fdGFza3MsIFZlY3RvcjxUYXNrPigpKTsKKyAg
ICBhdXRvIHRhc2tzID0gc3RkOjpleGNoYW5nZShtX3Rhc2tzLCB7IH0pOwogICAgIGZvciAoYXV0
byYgdGFzayA6IHRhc2tzKQotICAgICAgICB0YXNrLnRhc2soKTsKKyAgICAgICAgdGFzay0+ZXhl
Y3V0ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyRXZlbnRMb29wLmgJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRMb29wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDcgQEAKICAgICBzdGF0aWMgUmVmPFdvcmtlckV2ZW50TG9vcD4gY3JlYXRlKFdvcmtsZXRH
bG9iYWxTY29wZSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIHF1ZXVlVGFzayhUYXNrU291cmNlLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgVGFza0Z1bmN0aW9uJiYpIG92ZXJyaWRlOworICAgIHZv
aWQgcXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPiYmKSBmaW5hbDsKIAog
cHJpdmF0ZToKICAgICBleHBsaWNpdCBXb3JrZXJFdmVudExvb3AoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYpOwpAQCAtNTAsNiArNTAsMTEgQEAKICAgICB2b2lkIHNjaGVkdWxlVG9SdW5JZk5lZWRl
ZCgpOwogICAgIHZvaWQgcnVuKCk7CiAKKyAgICB2b2lkIHN0b3BHcm91cChFdmVudExvb3BUYXNr
R3JvdXAmKSBmaW5hbDsKKyAgICB2b2lkIHN1c3BlbmRHcm91cChFdmVudExvb3BUYXNrR3JvdXAm
KSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZUdyb3VwKEV2ZW50TG9vcFRhc2tHcm91cCYpIGZpbmFs
OworICAgIHZvaWQgY2FuY2VsQWxsRm9yR3JvdXAoRXZlbnRMb29wVGFza0dyb3VwJikgZmluYWw7
CisKICAgICAvLyBBY3RpdmVET01PYmplY3Q7CiAgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2Jq
ZWN0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgc3VzcGVuZChSZWFzb25Gb3JTdXNw
ZW5zaW9uKSBvdmVycmlkZTsKQEAgLTU2LDEyICs2MSw3IEBACiAgICAgdm9pZCByZXN1bWUoKSBv
dmVycmlkZTsKICAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKIAotICAgIHN0cnVjdCBUYXNrIHsK
LSAgICAgICAgVGFza1NvdXJjZSBzb3VyY2U7Ci0gICAgICAgIFRhc2tGdW5jdGlvbiB0YXNrOwot
ICAgIH07Ci0KLSAgICBWZWN0b3I8VGFzaz4gbV90YXNrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEV2ZW50TG9vcFRhc2s+PiBtX3Rhc2tzOwogICAgIGJvb2wgbV9pc1NjaGVkdWxlZFRv
UnVuIHsgZmFsc2UgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
R2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDEyICsx
MDUsMTUgQEAKICAgICB0aHJlYWQoKS53b3JrZXJSZXBvcnRpbmdQcm94eSgpLndvcmtlckdsb2Jh
bFNjb3BlRGVzdHJveWVkKCk7CiB9CiAKLUFic3RyYWN0RXZlbnRMb29wJiBXb3JrZXJHbG9iYWxT
Y29wZTo6ZXZlbnRMb29wKCkKK0V2ZW50TG9vcFRhc2tHcm91cCYgV29ya2VyR2xvYmFsU2NvcGU6
OmV2ZW50TG9vcCgpCiB7CiAgICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBpZiAo
IW1fZXZlbnRMb29wKQorICAgIGlmIChVTkxJS0VMWSghbV9kZWZhdWx0VGFza0dyb3VwKSkgewog
ICAgICAgICBtX2V2ZW50TG9vcCA9IFdvcmtlckV2ZW50TG9vcDo6Y3JlYXRlKCp0aGlzKTsKLSAg
ICByZXR1cm4gKm1fZXZlbnRMb29wOworICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAgPSBtYWtl
VW5pcXVlPEV2ZW50TG9vcFRhc2tHcm91cD4oKTsKKyAgICAgICAgbV9kZWZhdWx0VGFza0dyb3Vw
LT5zdGFydFJ1bm5pbmcoKm1fZXZlbnRMb29wKTsKKyAgICB9CisgICAgcmV0dXJuICptX2RlZmF1
bHRUYXNrR3JvdXA7CiB9CiAKIFN0cmluZyBXb3JrZXJHbG9iYWxTY29wZTo6b3JpZ2luKCkgY29u
c3QKQEAgLTEyNSw2ICsxMjgsOCBAQAogICAgIHN0b3BJbmRleGVkRGF0YWJhc2UoKTsKICNlbmRp
ZgogCisgICAgaWYgKG1fZGVmYXVsdFRhc2tHcm91cCkKKyAgICAgICAgbV9kZWZhdWx0VGFza0dy
b3VwLT5zdG9wQW5kRGlzY2FyZEFsbFRhc2tzKCk7CiAgICAgc3RvcEFjdGl2ZURPTU9iamVjdHMo
KTsKIAogICAgIGlmIChtX2NhY2hlU3RvcmFnZUNvbm5lY3Rpb24pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDcgKzY3LDcgQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIEFi
c3RyYWN0RXZlbnRMb29wJiBldmVudExvb3AoKSBmaW5hbDsKKyAgICBFdmVudExvb3BUYXNrR3Jv
dXAmIGV2ZW50TG9vcCgpIGZpbmFsOwogCiAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3VybDsgfQogICAgIFN0cmluZyBvcmlnaW4oKSBjb25zdCBmaW5hbDsKQEAg
LTE5OCw2ICsxOTgsNyBAQAogICAgIGJvb2wgbV9zaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50
U2VjdXJpdHlQb2xpY3k7CiAKICAgICBSZWZQdHI8V29ya2VyRXZlbnRMb29wPiBtX2V2ZW50TG9v
cDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFza0dyb3VwPiBtX2RlZmF1bHRUYXNr
R3JvdXA7CiAKICAgICBtdXRhYmxlIFdvcmtlckV2ZW50UXVldWUgbV9ldmVudFF1ZXVlOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0R2xvYmFsU2NvcGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5jcHAJ
KHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRHbG9i
YWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDExICs5MCwxNCBAQAogICAgIHJldHVy
biBzY29wZXM7CiB9CiAKLUFic3RyYWN0RXZlbnRMb29wJiBXb3JrbGV0R2xvYmFsU2NvcGU6OmV2
ZW50TG9vcCgpCitFdmVudExvb3BUYXNrR3JvdXAmIFdvcmtsZXRHbG9iYWxTY29wZTo6ZXZlbnRM
b29wKCkKIHsKLSAgICBpZiAoIW1fZXZlbnRMb29wKQorICAgIGlmIChVTkxJS0VMWSghbV9kZWZh
dWx0VGFza0dyb3VwKSkgewogICAgICAgICBtX2V2ZW50TG9vcCA9IFdvcmtlckV2ZW50TG9vcDo6
Y3JlYXRlKCp0aGlzKTsKLSAgICByZXR1cm4gKm1fZXZlbnRMb29wOworICAgICAgICBtX2RlZmF1
bHRUYXNrR3JvdXAgPSBtYWtlVW5pcXVlPEV2ZW50TG9vcFRhc2tHcm91cD4oKTsKKyAgICAgICAg
bV9kZWZhdWx0VGFza0dyb3VwLT5zdGFydFJ1bm5pbmcoKm1fZXZlbnRMb29wKTsKKyAgICB9Cisg
ICAgcmV0dXJuICptX2RlZmF1bHRUYXNrR3JvdXA7CiB9CiAKIFN0cmluZyBXb3JrbGV0R2xvYmFs
U2NvcGU6Om9yaWdpbigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3Jr
bGV0R2xvYmFsU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9X
b3JrbGV0R2xvYmFsU2NvcGUuaAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUv
d29ya2xldHMvV29ya2xldEdsb2JhbFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDcgQEAKIAogICAgIHZpcnR1YWwgYm9vbCBpc1BhaW50V29ya2xldEdsb2JhbFNjb3BlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIEFic3RyYWN0RXZlbnRMb29wJiBldmVudExvb3Ao
KSBmaW5hbDsKKyAgICBFdmVudExvb3BUYXNrR3JvdXAmIGV2ZW50TG9vcCgpIGZpbmFsOwogCiAg
ICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvZGUudXJsKCk7IH0K
ICAgICBTdHJpbmcgb3JpZ2luKCkgY29uc3QgZmluYWw7CkBAIC0xMzUsNiArMTM1LDcgQEAKICAg
ICBSZWY8U2VjdXJpdHlPcmlnaW4+IG1fdG9wT3JpZ2luOwogCiAgICAgUmVmUHRyPFdvcmtlckV2
ZW50TG9vcD4gbV9ldmVudExvb3A7CisgICAgc3RkOjp1bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2tH
cm91cD4gbV9kZWZhdWx0VGFza0dyb3VwOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGlt
cGxlbWVudGVkIHByb3Blcmx5LCBpdCBqdXN0IHNhdGlzZmllcyB0aGUgY29tcGlsZXIuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTEzNgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383206</attachid>
            <date>2019-11-09 00:42:22 -0800</date>
            <delta_ts>2019-11-09 00:42:22 -0800</delta_ts>
            <desc>WIP5</desc>
            <filename>wip203667f.patch</filename>
            <type>text/plain</type>
            <size>78139</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCShyZXZpc2lv
biAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjEyLDcgKzYxMiw3IEBACiAgICAgYXV0byogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKLSAgICBjb250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6RE9NTWFu
aXB1bGF0aW9uLCAqY29udGV4dCwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVu
ZGluZ0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRhc2sgPSBXVEZNb3Zl
KHRhc2spXSB7CisgICAgY29udGV4dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6
OkRPTU1hbmlwdWxhdGlvbiwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVuZGlu
Z0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRhc2sgPSBXVEZNb3ZlKHRh
c2spXSB7CiAgICAgICAgIHRhc2soKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvY2FjaGUvRE9NQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDI1MjIy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGVTdG9yYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBACiAgICAgYXV0byogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKLSAgICBjb250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6RE9NTWFu
aXB1bGF0aW9uLCAqY29udGV4dCwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVu
ZGluZ0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRhc2sgPSBXVEZNb3Zl
KHRhc2spXSB7CisgICAgY29udGV4dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6
OkRPTU1hbmlwdWxhdGlvbiwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVuZGlu
Z0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRhc2sgPSBXVEZNb3ZlKHRh
c2spXSB7CiAgICAgICAgIHRhc2soKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5cy5jcHAJKHJldmlzaW9u
IDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFL
ZXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgLy8gNC4gTGV0
IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS4KICAgICAvLyA1LiBSdW4gdGhlIGZvbGxvd2luZyBz
dGVwcyBpbiBwYXJhbGxlbDoKIAotICAgIGNvbnRleHQuZXZlbnRMb29wKCkucXVldWVUYXNrKFRh
c2tTb3VyY2U6Ok5ldHdvcmtpbmcsIGNvbnRleHQsIFt0aGlzLCBjZXJ0aWZpY2F0ZSA9IFdURk1v
dmUoY2VydGlmaWNhdGUpLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0YWJsZSB7
CisgICAgY29udGV4dC5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2lu
ZywgW3RoaXMsIGNlcnRpZmljYXRlID0gV1RGTW92ZShjZXJ0aWZpY2F0ZSksIHByb21pc2UgPSBX
VEZNb3ZlKHByb21pc2UpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgLy8gNS4xLiBVc2UgdGhpcyBv
YmplY3QncyBjZG0gaW5zdGFuY2UgdG8gcHJvY2VzcyBjZXJ0aWZpY2F0ZS4KICAgICAgICAgaWYg
KG1faW5zdGFuY2UtPnNldFNlcnZlckNlcnRpZmljYXRlKFdURk1vdmUoY2VydGlmaWNhdGUpKSA9
PSBDRE1JbnN0YW5jZTo6RmFpbGVkKSB7CiAgICAgICAgICAgICAvLyA1LjIuIElmIHRoZSBwcmVj
ZWRpbmcgc3RlcCBmYWlsZWQsIHJlc29sdmUgcHJvbWlzZSB3aXRoIGEgbmV3IERPTUV4Y2VwdGlv
biB3aG9zZSBuYW1lIGlzIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBuYW1lLgpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0
ZW1EaXJlY3RvcnlFbnRyeS5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIGF1dG8qIGRvY3VtZW50ID0gdGhpcy0+
ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAg
ICAgICAgaWYgKGVycm9yQ2FsbGJhY2sgJiYgZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBk
b2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpk
b2N1bWVudCwgW2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCBleGNlcHRp
b24gPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3Zl
KHBlbmRpbmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQt
PmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbZXJyb3JDYWxs
YmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIGV4Y2VwdGlvbiA9IHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5KV0o
KSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZl
bnQoRE9NRXhjZXB0aW9uOjpjcmVhdGUoV1RGTW92ZShleGNlcHRpb24pKSk7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgIGF1dG8g
ZW50cnkgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgIGlmICghbWF0Y2hl
cyhlbnRyeSkpIHsKICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrICYmIGRvY3VtZW50KSB7
Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291
cmNlOjpOZXR3b3JraW5nLCAqZG9jdW1lbnQsIFtlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJv
ckNhbGxiYWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgp
IG11dGFibGUgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRh
c2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9y
Q2FsbGJhY2spLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkg
bXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50
KERPTUV4Y2VwdGlvbjo6Y3JlYXRlKEV4Y2VwdGlvbiB7IFR5cGVNaXNtYXRjaEVycm9yLCAiRW50
cnkgYXQgZ2l2ZW4gcGF0aCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCB0eXBlIl9zIH0pKTsKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KQEAgLTczLDcgKzczLDcgQEAKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrICYm
IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNr
KFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpkb2N1bWVudCwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdU
Rk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgZW50cnkgPSBXVEZNb3ZlKGVudHJ5KSwgcGVuZGluZ0Fj
dGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAgICAgICAg
ICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5n
LCBbc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBlbnRyeSA9IFdU
Rk1vdmUoZW50cnkpLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSld
KCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVu
dChXVEZNb3ZlKGVudHJ5KSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxl
U3lzdGVtRGlyZWN0b3J5UmVhZGVyLmNwcAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgbV9lcnJvciA9IHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ2FsbGJhY2sgJiYgZG9jdW1l
bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFz
ayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqZG9jdW1lbnQsIFt0aGlzLCBlcnJvckNhbGxiYWNr
ID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5k
aW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC0+
ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFt0aGlzLCBlcnJv
ckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RG
TW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoRE9NRXhjZXB0aW9uOjpjcmVhdGUoKm1fZXJy
b3IpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtOTcs
NyArOTcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9pc0RvbmUgPSB0cnVlOwog
ICAgICAgICAgICAgaWYgKGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmV2
ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqZG9jdW1lbnQsIFtz
dWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIHBlbmRpbmdBY3Rpdml0
eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5KSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LT5ldmVudExv
b3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxsYmFjayA9
IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5k
aW5nQWN0aXZpdHkpLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCldKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQo
V1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRW50cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lz
dGVtRW50cnkuY3BwCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2VudHJpZXNhcGkvRmlsZVN5c3RlbUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyAr
NzcsNyBAQAogICAgICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29y
a2luZywgKmRvY3VtZW50LCBbc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJh
Y2spLCBlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgcmVzdWx0ID0gV1RG
TW92ZShyZXN1bHQpLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSld
KCkgbXV0YWJsZSB7CisgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0Nh
bGxiYWNrKSwgZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIHJlc3VsdCA9
IFdURk1vdmUocmVzdWx0KSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZp
dHkpXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkg
ewogICAgICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrKQogICAgICAgICAgICAgICAgICAg
ICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChET01FeGNlcHRpb246OmNyZWF0ZShyZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJp
ZXNhcGkvRmlsZVN5c3RlbUZpbGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1GaWxlRW50cnkuY3BwCShyZXZpc2lvbiAy
NTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbUZp
bGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgaWYg
KCFkb2N1bWVudCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBkb2N1bWVudC0+ZXZl
bnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpkb2N1bWVudCwgW3N1
Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgZXJyb3JDYWxsYmFjayA9
IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgcGVuZGlu
Z0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAgICAg
ICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcs
IFtzdWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIGVycm9yQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksIHBl
bmRpbmdBY3Rpdml0eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5KV0oKSBtdXRhYmxlIHsKICAg
ICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAoZXJyb3JDYWxsYmFjaykKICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFu
ZGxlRXZlbnQoRE9NRXhjZXB0aW9uOjpjcmVhdGUocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25l
ci5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5T3duZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAgICAg
aWYgKCFjb250ZXh0IHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFjdGl2ZURPTU9iamVj
dHNBcmVTdXNwZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIHRhc2soKTsKIAotICAgIGNvbnRleHQt
PmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqY29udGV4dCwg
W3BlbmRpbmdBY3Rpdml0eSA9IG1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpLCB0YXNrID0gV1RG
TW92ZSh0YXNrKV0geworICAgIGNvbnRleHQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291
cmNlOjpOZXR3b3JraW5nLCBbcGVuZGluZ0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgq
dGhpcyksIHRhc2sgPSBXVEZNb3ZlKHRhc2spXSB7CiAgICAgICAgIHRhc2soKTsKICAgICB9KTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFyZWNvcmRlci9NZWRpYVJlY29y
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVjb3Jk
ZXIvTWVkaWFSZWNvcmRlci5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFyZWNvcmRlci9NZWRpYVJlY29yZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE2LDcgKzIxNiw3IEBACiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3Jr
aW5nLCAqZG9jdW1lbnQsIFtwZW5kaW5nQWN0aXZpdHkgPSBtYWtlUGVuZGluZ0FjdGl2aXR5KCp0
aGlzKSwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0geworICAgIGRvY3VtZW50LT5ldmVu
dExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3BlbmRpbmdBY3Rpdml0
eSA9IG1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpLCBmdW5jdGlvbiA9IFdURk1vdmUoZnVuY3Rp
b24pXSB7CiAgICAgICAgIGZ1bmN0aW9uKCk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAkocmV2aXNp
b24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNiBAQAogICAgIDogQWN0aXZl
RE9NT2JqZWN0KCZjb250ZXh0KQogICAgICwgbV9kdXJhdGlvbihNZWRpYVRpbWU6OmludmFsaWRU
aW1lKCkpCiAgICAgLCBtX3BlbmRpbmdTZWVrVGltZShNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkp
Ci0gICAgLCBtX2FzeW5jRXZlbnRRdWV1ZShNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU6OmNy
ZWF0ZSgqdGhpcykpCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgLCBtX2xvZ2dlcihk
b3duY2FzdDxEb2N1bWVudD4oY29udGV4dCkubG9nZ2VyKCkpCiAjZW5kaWYKQEAgLTk3Myw4ICs5
NzIsNyBAQAogCiBib29sIE1lZGlhU291cmNlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAog
ewotICAgIHJldHVybiBtX3ByaXZhdGUgfHwgbV9hc3luY0V2ZW50UXVldWUtPmhhc1BlbmRpbmdF
dmVudHMoKQotICAgICAgICB8fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgp
OworICAgIHJldHVybiBtX3ByaXZhdGUgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0
aXZpdHkoKTsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZTo6c3RvcCgpCkBAIC0xMDQ4LDEwICsxMDQ2
LDcgQEAKIHsKICAgICBERUJVR19MT0coTE9HSURFTlRJRklFUiwgInNjaGVkdWxpbmcgJyIsIGV2
ZW50TmFtZSwgIiciKTsKIAotICAgIGF1dG8gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZSwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKTsKLSAgICBl
dmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotCi0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVF
dmVudChXVEZNb3ZlKGV2ZW50KSk7CisgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCp0aGlz
LCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUs
IEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwogfQogCiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBNZWRpYVNvdXJjZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlh
U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9NZWRpYVNvdXJjZS5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDYgQEAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJFdmVudFRhcmdl
dC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVl
dWUuaCIKICNpbmNsdWRlICJNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCIKICNpbmNsdWRlICJV
UkxSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KQEAgLTE2NSw3ICsx
NjQsNiBAQAogICAgIE1lZGlhVGltZSBtX2R1cmF0aW9uOwogICAgIE1lZGlhVGltZSBtX3BlbmRp
bmdTZWVrVGltZTsKICAgICBSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZSB7IFJlYWR5U3RhdGU6OkNs
b3NlZCB9OwotICAgIFVuaXF1ZVJlZjxNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU+IG1fYXN5
bmNFdmVudFF1ZXVlOwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIFJlZjxjb25zdCBM
b2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxw
dHIgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNiBAQAogI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgogI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkdlbmVyaWNFdmVudFF1ZXVlLmgi
CiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFj
ay5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUuaCIKQEAgLTEwOCw3ICsxMDcs
NiBAQAogICAgIDogQWN0aXZlRE9NT2JqZWN0KHNvdXJjZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKQogICAgICwgbV9wcml2YXRlKFdURk1vdmUoc291cmNlQnVmZmVyUHJpdmF0ZSkpCiAgICAg
LCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2FzeW5jRXZlbnRRdWV1ZShNYWluVGhyZWFkR2Vu
ZXJpY0V2ZW50UXVldWU6OmNyZWF0ZSgqdGhpcykpCiAgICAgLCBtX2FwcGVuZEJ1ZmZlclRpbWVy
KCp0aGlzLCAmU291cmNlQnVmZmVyOjphcHBlbmRCdWZmZXJUaW1lckZpcmVkKQogICAgICwgbV9h
cHBlbmRXaW5kb3dTdGFydChNZWRpYVRpbWU6Onplcm9UaW1lKCkpCiAgICAgLCBtX2FwcGVuZFdp
bmRvd0VuZChNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCkpCkBAIC01MjksNyArNTI3
LDcgQEAKIAogYm9vbCBTb3VyY2VCdWZmZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fc291cmNlIHx8IG1fYXN5bmNFdmVudFF1ZXVlLT5oYXNQZW5kaW5nRXZl
bnRzKCk7CisgICAgcmV0dXJuIG1fc291cmNlIHx8IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGlu
Z0FjdGl2aXR5KCk7CiB9CiAKIHZvaWQgU291cmNlQnVmZmVyOjpzdG9wKCkKQEAgLTU1MCwxMCAr
NTQ4LDcgQEAKIAogdm9pZCBTb3VyY2VCdWZmZXI6OnNjaGVkdWxlRXZlbnQoY29uc3QgQXRvbVN0
cmluZyYgZXZlbnROYW1lKQogewotICAgIGF1dG8gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZSwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKTsKLSAg
ICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotCi0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVl
dWVFdmVudChXVEZNb3ZlKGV2ZW50KSk7CisgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCp0
aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWUsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwogfQog
CiBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1ZmZlckludGVybmFsKGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgJKHJldmlzaW9u
IDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJBdWRpb1Ry
YWNrLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Pci5o
IgotI2luY2x1ZGUgIkdlbmVyaWNFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiU291cmNlQnVmZmVy
UHJpdmF0ZUNsaWVudC5oIgogI2luY2x1ZGUgIlRleHRUcmFjay5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCkBAIC0yMTcsNyArMjE2LDYgQEAKIAogICAgIFJlZjxTb3VyY2VCdWZmZXJQcml2YXRlPiBt
X3ByaXZhdGU7CiAgICAgTWVkaWFTb3VyY2UqIG1fc291cmNlOwotICAgIFVuaXF1ZVJlZjxNYWlu
VGhyZWFkR2VuZXJpY0V2ZW50UXVldWU+IG1fYXN5bmNFdmVudFF1ZXVlOwogICAgIEFwcGVuZE1v
ZGUgbV9tb2RlIHsgQXBwZW5kTW9kZTo6U2VnbWVudHMgfTsKIAogICAgIFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiBtX3BlbmRpbmdBcHBlbmREYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3BwCShyZXZpc2lv
biAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlckxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw2IEBACiAKIFNvdXJjZUJ1
ZmZlckxpc3Q6OlNvdXJjZUJ1ZmZlckxpc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0KQotICAgICwgbV9hc3luY0V2ZW50UXVl
dWUoTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQogewogICAgIHN1
c3BlbmRJZk5lZWRlZCgpOwogfQpAQCAtOTUsMTAgKzk0LDcgQEAKIAogdm9pZCBTb3VyY2VCdWZm
ZXJMaXN0OjpzY2hlZHVsZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50TmFtZSkKIHsKLSAg
ICBhdXRvIGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIEV2ZW50OjpDYW5CdWJibGU6
Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObyk7Ci0gICAgZXZlbnQtPnNldFRhcmdldCh0aGlz
KTsKLQotICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoV1RGTW92ZShldmVudCkp
OworICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFF
bGVtZW50RXZlbnQsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBFdmVudDo6Q2FuQnViYmxlOjpO
bywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKIH0KIAogY29uc3QgY2hhciogU291cmNlQnVm
ZmVyTGlzdDo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAkocmV2
aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVk
ZSAiR2VuZXJpY0V2ZW50UXVldWUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtODAsOCArNzksNiBAQAogCiAgICAgY29uc3QgY2hh
ciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IGZpbmFsOwogCi0gICAgVW5pcXVlUmVmPE1h
aW5UaHJlYWRHZW5lcmljRXZlbnRRdWV1ZT4gbV9hc3luY0V2ZW50UXVldWU7Ci0KICAgICBWZWN0
b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+IG1fbGlzdDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhUmVxdWVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNw
cAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBA
CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiAKLSAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OlVzZXJJ
bnRlcmFjdGlvbiwgKmRvY3VtZW50LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBhdWRpb0RldmljZSA9IFdURk1vdmUoYXVkaW9EZXZpY2UpLCB2aWRlb0RldmljZSA9IFdU
Rk1vdmUodmlkZW9EZXZpY2UpLCBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQgPSBXVEZNb3ZlKGRl
dmljZUlkZW50aWZpZXJIYXNoU2FsdCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1
ZXVlVGFzayhUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGF1ZGlvRGV2aWNlID0gV1RGTW92ZShhdWRpb0RldmljZSksIHZp
ZGVvRGV2aWNlID0gV1RGTW92ZSh2aWRlb0RldmljZSksIGRldmljZUlkZW50aWZpZXJIYXNoU2Fs
dCA9IFdURk1vdmUoZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0KSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byBj
YWxsYmFjayA9IFt0aGlzLCBwcm90ZWN0b3IgPSBtYWtlUGVuZGluZ0FjdGl2aXR5KCp0aGlzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oUmVmUHRyPE1l
ZGlhU3RyZWFtUHJpdmF0ZT4mJiBwcml2YXRlU3RyZWFtKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IGF1dG8gc2NvcGVFeGl0ID0gbWFrZVNjb3BlRXhpdChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwpAQCAtMzI0LDcgKzMyNCw3IEBACiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGRvY3VtZW50KCktPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpV
c2VySW50ZXJhY3Rpb24sICpkb2N1bWVudCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb2RlLCBtZXNzYWdlXSgpIG11dGFibGUgeworICAgIGRvY3VtZW50KCktPmV2
ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvZGUsIG1lc3NhZ2VdKCkgbXV0YWJsZSB7
CiAgICAgICAgIGlmICghbWVzc2FnZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3Byb21pc2Ut
PnJlamVjdChjb2RlLCBtZXNzYWdlKTsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAJKHJl
dmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICBp
ZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2N1bWVudC0+ZXZlbnRMb29w
KCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgKmRvY3VtZW50LCBXVEZN
b3ZlKHRhc2spKTsKKyAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3Vy
Y2U6OlVzZXJJbnRlcmFjdGlvbiwgV1RGTW92ZSh0YXNrKSk7CiB9CiAKIHZvaWQgTm90aWZpY2F0
aW9uOjpkaXNwYXRjaFNob3dFdmVudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Jl
bW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3JlbW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNrLmNwcAkocmV2aXNpb24g
MjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9SZW1vdGVQ
bGF5YmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAKIFJlbW90ZVBsYXli
YWNrOjpSZW1vdGVQbGF5YmFjayhIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQogICAgIDogV2Vi
Q29yZTo6QWN0aXZlRE9NT2JqZWN0KGVsZW1lbnQuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQog
ICAgICwgbV9tZWRpYUVsZW1lbnQobWFrZVdlYWtQdHIoZWxlbWVudCkpCi0gICAgLCBtX2V2ZW50
UXVldWUoTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQogewogICAg
IHN1c3BlbmRJZk5lZWRlZCgpOwogfQpAQCAtNjcsOCArNjYsOCBAQAogCiAgICAgLy8gMS4gTGV0
IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS0+CiAgICAgLy8gMi4gUmV0dXJuIHByb21pc2UsIGFu
ZCBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBiZWxvdzoKLSAgICAKLSAgICBtX3Rhc2tRdWV1ZS5l
bnF1ZXVlVGFzayhbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcHJvbWlzZSA9
IFdURk1vdmUocHJvbWlzZSldICgpIG11dGFibGUgeworCisgICAgcXVldWVUYXNrS2VlcGluZ09i
amVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXMsIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHByb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSAo
KSBtdXRhYmxlIHsKICAgICAgICAgLy8gMy4gSWYgdGhlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBh
dHRyaWJ1dGUgaXMgcHJlc2VudCBmb3IgdGhlIG1lZGlhIGVsZW1lbnQsIHJlamVjdCB0aGUgcHJv
bWlzZSB3aXRoCiAgICAgICAgIC8vICAgIEludmFsaWRTdGF0ZUVycm9yIGFuZCBhYm9ydCBhbGwg
dGhlIHJlbWFpbmluZyBzdGVwcy4KICAgICAgICAgaWYgKCFtX21lZGlhRWxlbWVudApAQCAtOTYs
NyArOTUsNyBAQAogICAgICAgICAvLyA4LiBGdWxmaWxsIHByb21pc2Ugd2l0aCB0aGUgY2FsbGJh
Y2tJZCBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgaW4gcGFyYWxsZWw6CiAgICAgICAgIHBy
b21pc2UtPndoZW5TZXR0bGVkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cih0aGlz
KSwgY2FsbGJhY2tJZF0gewogICAgICAgICAgICAgLy8gOC4xIFF1ZXVlIGEgdGFzayB0byBpbnZv
a2UgdGhlIGNhbGxiYWNrIHdpdGggdGhlIGN1cnJlbnQgYXZhaWxhYmlsaXR5IGZvciB0aGUgbWVk
aWEgZWxlbWVudC4KLSAgICAgICAgICAgIG1fdGFza1F1ZXVlLmVucXVldWVUYXNrKFt0aGlzLCBj
YWxsYmFja0lkXSB7CisgICAgICAgICAgICBxdWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRo
aXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBbdGhpcywgY2FsbGJhY2tJZF0gewog
ICAgICAgICAgICAgICAgIGF1dG8gZm91bmRDYWxsYmFjayA9IG1fY2FsbGJhY2tNYXAuZmluZChj
YWxsYmFja0lkKTsKICAgICAgICAgICAgICAgICBpZiAoZm91bmRDYWxsYmFjayA9PSBtX2NhbGxi
YWNrTWFwLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjEsNyArMTIw
LDcgQEAKICAgICAvLyAxLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBwcm9taXNlLT4KICAgICAvLyAy
LiBSZXR1cm4gcHJvbWlzZSwgYW5kIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzIGJlbG93OgogCi0g
ICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXMsIGlkID0gV1RGTW92ZShpZCksIHByb21p
c2UgPSBXVEZNb3ZlKHByb21pc2UpXSB7CisgICAgcXVldWVUYXNrS2VlcGluZ09iamVjdEFsaXZl
KCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXMsIGlkID0gV1RGTW92
ZShpZCksIHByb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSB7CiAgICAgICAgIC8vIDMuIElmIHRo
ZSBkaXNhYmxlUmVtb3RlUGxheWJhY2sgYXR0cmlidXRlIGlzIHByZXNlbnQgZm9yIHRoZSBtZWRp
YSBlbGVtZW50LCByZWplY3QgcHJvbWlzZSB3aXRoCiAgICAgICAgIC8vICAgIEludmFsaWRTdGF0
ZUVycm9yIGFuZCBhYm9ydCBhbGwgdGhlIHJlbWFpbmluZyBzdGVwcy4KICAgICAgICAgaWYgKCFt
X21lZGlhRWxlbWVudApAQCAtMTY0LDcgKzE2Myw3IEBACiAgICAgLy8gMS4gTGV0IHByb21pc2Ug
YmUgYSBuZXcgcHJvbWlzZS0+CiAgICAgLy8gMi4gUmV0dXJuIHByb21pc2UsIGFuZCBydW4gdGhl
IGZvbGxvd2luZyBzdGVwcyBiZWxvdzoKIAotICAgIG1fdGFza1F1ZXVlLmVucXVldWVUYXNrKFt0
aGlzLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlID0g
VXNlckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpXSAoKSBtdXRhYmxl
IHsKKyAgICBxdWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3VyY2U6Ok1l
ZGlhRWxlbWVudEV2ZW50LCBbdGhpcywgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSksIHByb2Nl
c3NpbmdVc2VyR2VzdHVyZSA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdl
c3R1cmUoKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIC8vIDMuIElmIHRoZSBkaXNhYmxlUmVtb3Rl
UGxheWJhY2sgYXR0cmlidXRlIGlzIHByZXNlbnQgZm9yIHRoZSBtZWRpYSBlbGVtZW50LCByZWpl
Y3QgdGhlIHByb21pc2Ugd2l0aAogICAgICAgICAvLyAgICBJbnZhbGlkU3RhdGVFcnJvciBhbmQg
YWJvcnQgYWxsIHRoZSByZW1haW5pbmcgc3RlcHMuCiAgICAgICAgIGlmICghbV9tZWRpYUVsZW1l
bnQKQEAgLTI2NywxNSArMjY2LDE2IEBACiAKICAgICBtX3N0YXRlID0gc3RhdGU7CiAKKyAgICAv
LyBGSVhNRTogVGhlIHNwZWMgZG9lc24ndCBzYXkgd2hpY2ggdGFzayBzb3VyY2UuIGh0dHBzOi8v
Z2l0aHViLmNvbS93M2MvcmVtb3RlLXBsYXliYWNrL2lzc3Vlcy8xMjgKICAgICBzd2l0Y2ggKG1f
c3RhdGUpIHsKICAgICBjYXNlIFN0YXRlOjpDb25uZWN0ZWQ6Ci0gICAgICAgIG1fZXZlbnRRdWV1
ZS0+ZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbm5lY3RFdmVudCwg
RXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CisgICAgICAg
IHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50
RXZlbnQsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbm5lY3RFdmVudCwgRXZlbnQ6OkNh
bkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU3RhdGU6OkNvbm5lY3Rpbmc6Ci0gICAgICAgIG1fZXZlbnRRdWV1ZS0+ZW5xdWV1
ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbm5lY3RpbmdFdmVudCwgRXZlbnQ6
OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CisgICAgICAgIHF1ZXVl
VGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQs
IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbm5lY3RpbmdFdmVudCwgRXZlbnQ6OkNhbkJ1
YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU3RhdGU6OkRpc2Nvbm5lY3RlZDoKLSAgICAgICAgbV9ldmVudFF1ZXVlLT5lbnF1ZXVl
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGlzY29ubmVjdEV2ZW50LCBFdmVudDo6
Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKyAgICAgICAgcXVldWVU
YXNrVG9EaXNwYXRjaEV2ZW50KCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwg
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGlzY29ubmVjdEV2ZW50LCBFdmVudDo6Q2FuQnVi
YmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogfQpAQCAtMzA3LDcgKzMwNyw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIDIuIFF1
ZXVlIGEgdGFzayB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICBtX3Rhc2tRdWV1ZS5l
bnF1ZXVlVGFzayhbdGhpc10geworICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhp
cywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIFt0aGlzXSB7CiAgICAgICAgIC8vIDIu
MSBSZXF1ZXN0IGRpc2Nvbm5lY3Rpb24gb2YgcmVtb3RlIGZyb20gdGhlIGRldmljZS4gSW1wbGVt
ZW50YXRpb24gaXMgdXNlciBhZ2VudCBzcGVjaWZpYy4KICAgICAgICAgLy8gTk9URTogSW1wbGVt
ZW50ZWQgYnkgTWVkaWFQbGF5ZXI6OnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoKQogICAgICAg
ICAvLyAyLjIgQ2hhbmdlIHRoZSByZW1vdGUncyBzdGF0ZSB0byBkaXNjb25uZWN0ZWQuCkBAIC0z
ODAsNyArMzgwLDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIG1fYXZhaWxhYmxlID0gYXZhaWxh
YmxlOwogCi0gICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdIHsKKyAgICBxdWV1ZVRh
c2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50
LCBbdGhpc10gewogICAgICAgICAvLyBQcm90ZWN0IG1fY2FsbGJhY2tNYXAgYWdhaW5zdCBtdXRh
dGlvbiB3aGlsZSBpdCdzIGJlaW5nIGl0ZXJhdGVkIG92ZXIuCiAgICAgICAgIFZlY3RvcjxSZWY8
UmVtb3RlUGxheWJhY2tBdmFpbGFiaWxpdHlDYWxsYmFjaz4+IGNhbGxiYWNrczsKICAgICAgICAg
Y2FsbGJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jYWxsYmFja01hcC5zaXplKCkpOwpA
QCAtNDAzLDEyICs0MDMsNiBAQAogICAgIHJldHVybiAiUmVtb3RlUGxheWJhY2siOwogfQogCi12
b2lkIFJlbW90ZVBsYXliYWNrOjpzdG9wKCkKLXsKLSAgICBtX3Rhc2tRdWV1ZS5jbG9zZSgpOwot
ICAgIG1fZXZlbnRRdWV1ZS0+Y2xvc2UoKTsKIH0KIAotfQotCiAjZW5kaWYgLy8gRU5BQkxFKFdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcmVt
b3RlcGxheWJhY2svUmVtb3RlUGxheWJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3JlbW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNrLmgJKHJldmlzaW9uIDI1MjIy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcmVtb3RlcGxheWJhY2svUmVtb3RlUGxheWJh
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJHZW5lcmlj
RXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
Zi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC04Nyw3ICs4Niw2IEBACiAKICAg
ICAvLyBBY3RpdmVET01PYmplY3QuCiAgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFt
ZSgpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc3RvcCgpIGZpbmFsOwogCiAgICAgLy8gRXZlbnRU
YXJnZXRXaXRoSW5saW5lRGF0YS4KICAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdl
dEludGVyZmFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlbW90ZVBsYXliYWNrRXZlbnRUYXJn
ZXRJbnRlcmZhY2VUeXBlOyB9CkBAIC0xMDUsOSArMTAzLDYgQEAKICAgICBQcm9taXNlVmVjdG9y
IG1fcHJvbXB0UHJvbWlzZXM7CiAgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpEaXNjb25uZWN0
ZWQgfTsKICAgICBib29sIG1fYXZhaWxhYmxlIHsgZmFsc2UgfTsKLQotICAgIFVuaXF1ZVJlZjxN
YWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU+IG1fZXZlbnRRdWV1ZTsKLSAgICBHZW5lcmljVGFz
a1F1ZXVlPFRpbWVyPiBtX3Rhc2tRdWV1ZTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHJldmlzaW9uIDI1MjIy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJHYWluTm9kZS5oIgotI2luY2x1ZGUgIkdl
bmVyaWNFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9hZGVyLmgiCiAjaW5j
bHVkZSAiSFJURlBhbm5lci5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCkBA
IC0xNDAsNyArMTM5LDYgQEAKICAgICAsIG1fbG9nSWRlbnRpZmllcih1bmlxdWVMb2dJZGVudGlm
aWVyKCkpCiAjZW5kaWYKICAgICAsIG1fbWVkaWFTZXNzaW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9u
OjpjcmVhdGUoKnRoaXMpKQotICAgICwgbV9ldmVudFF1ZXVlKE1haW5UaHJlYWRHZW5lcmljRXZl
bnRRdWV1ZTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICAvLyBBY2NvcmRpbmcgdG8gc3BlYyBBdWRp
b0NvbnRleHQgbXVzdCBkaWUgb25seSBhZnRlciBwYWdlIG5hdmlnYXRlLgogICAgIC8vIExldHMg
bWFyayBpdCBhcyBBY3RpdmVET01PYmplY3Qgd2l0aCBwZW5kaW5nIGFjdGl2aXR5IGFuZCB1bm1h
cmsgaXQgaW4gY2xlYXIgbWV0aG9kLgpAQCAtMTY2LDcgKzE2NCw2IEBACiAjZW5kaWYKICAgICAs
IG1faXNPZmZsaW5lQ29udGV4dCh0cnVlKQogICAgICwgbV9tZWRpYVNlc3Npb24oUGxhdGZvcm1N
ZWRpYVNlc3Npb246OmNyZWF0ZSgqdGhpcykpCi0gICAgLCBtX2V2ZW50UXVldWUoTWFpblRocmVh
ZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQogICAgICwgbV9yZW5kZXJUYXJnZXQo
cmVuZGVyVGFyZ2V0KQogewogICAgIGNvbnN0cnVjdENvbW1vbigpOwpAQCAtMzA5LDggKzMwNiwx
MCBAQAogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0YXRlID0gc3RhdGU7Ci0gICAgbV9ldmVu
dFF1ZXVlLT5lbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RhdGVjaGFu
Z2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6WWVzLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykp
OwogCisgICAgLy8gRklYTUU6IFdlYkF1ZGlvIGRvZXNuJ3Qgc3BlY2lmeSB3aGljaCB0YXNrIHNv
dXJjZSB0byB1c2UuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vV2ViQXVkaW8vd2ViLWF1ZGlvLWFw
aS9pc3N1ZXMvMjA5NQorICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1Nv
dXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0YXRl
Y2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6OlllcywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6
Tm8pKTsKKwogICAgIHNpemVfdCBzdGF0ZUluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0
ZSk7CiAgICAgaWYgKHN0YXRlSW5kZXggPj0gbV9zdGF0ZVJlYWN0aW9ucy5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEyMTksNyArMTIxOCw5IEBACiAgICAgICAgIHJldHVybjsKIAogICAg
IGNsZWFyUGVuZGluZ0FjdGl2aXR5SWZFeGl0RWFybHkucmVsZWFzZSgpOwotICAgIG1fZXZlbnRR
dWV1ZS0+ZW5xdWV1ZUV2ZW50KE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3JlYXRlKHJl
bmRlcmVkQnVmZmVyKSk7CisKKyAgICAvLyBGSVhNRTogV2ViQXVkaW8gZG9lc24ndCBzcGVjaWZ5
IHdoaWNoIHRhc2sgc291cmNlIHRvIHVzZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBdWRp
by93ZWItYXVkaW8tYXBpL2lzc3Vlcy8yMDk1CisgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50
KCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50OjpjcmVhdGUocmVuZGVyZWRCdWZmZXIpKTsKIH0KIAogdm9pZCBBdWRpb0NvbnRl
eHQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw2IEBACiBjbGFzcyBEeW5hbWljc0NvbXByZXNzb3JOb2RlOwogY2xh
c3MgR2Fpbk5vZGU7CiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50OwotY2xhc3MgTWFpblRocmVhZEdl
bmVyaWNFdmVudFF1ZXVlOwogY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOwogY2xh
c3MgTWVkaWFTdHJlYW07CiBjbGFzcyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOwpA
QCAtMjUyLDYgKzI1MSw3IEBACiAKICAgICAvLyBFdmVudFRhcmdldAogICAgIEV2ZW50VGFyZ2V0
SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQXVk
aW9Db250ZXh0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9CisgICAgdm9pZCBkaXNwYXRjaEV2
ZW50KEV2ZW50JikgZmluYWw7CiAKICAgICAvLyBSZWNvbmNpbGUgcmVmL2RlcmVmIHdoaWNoIGFy
ZSBkZWZpbmVkIGJvdGggaW4gVGhyZWFkU2FmZVJlZkNvdW50ZWQgYW5kIEV2ZW50VGFyZ2V0Lgog
ICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkOjpyZWY7CkBAIC0zMjEsNyArMzIxLDYgQEAK
IAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgZGlzcGF0Y2hFdmVudChF
dmVudCYpIGZpbmFsOwogCiAgICAgLy8gTWVkaWFQcm9kdWNlcgogICAgIE1lZGlhUHJvZHVjZXI6
Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC00MTcsNyAr
NDE2LDYgQEAKICAgICBWZWN0b3I8VmVjdG9yPERPTVByb21pc2VEZWZlcnJlZDx2b2lkPj4+IG1f
c3RhdGVSZWFjdGlvbnM7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1NZWRpYVNlc3Np
b24+IG1fbWVkaWFTZXNzaW9uOwotICAgIFVuaXF1ZVJlZjxNYWluVGhyZWFkR2VuZXJpY0V2ZW50
UXVldWU+IG1fZXZlbnRRdWV1ZTsKIAogICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9yZW5kZXJU
YXJnZXQ7CiAgICAgUmVmUHRyPEF1ZGlvRGVzdGluYXRpb25Ob2RlPiBtX2Rlc3RpbmF0aW9uTm9k
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2UuY3BwCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg5LDcgKzY4OSw3IEBACiAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7CiAgICAg
aWYgKCFtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQpIHsKICAgICAgICAgaWYgKGVycm9yQ2Fs
bGJhY2spIHsKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhU
YXNrU291cmNlOjpOZXR3b3JraW5nLCBtX2RvY3VtZW50LCBbZXJyb3JDYWxsYmFjayA9IG1ha2VS
ZWYoKmVycm9yQ2FsbGJhY2spXSgpIHsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPmV2ZW50TG9v
cCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbZXJyb3JDYWxsYmFjayA9IG1h
a2VSZWYoKmVycm9yQ2FsbGJhY2spXSgpIHsKICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNr
LT5oYW5kbGVFdmVudChTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgImRh
dGFiYXNlIGhhcyBiZWVuIGNsb3NlZCIpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
MCw3ICsyMTAsNyBAQAogICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxi
YWNrLmdldCgpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBEYXRhYmFz
ZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIGZvciBkYXRhYmFzZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkp
OwogICAgICAgICBkYXRhYmFzZS0+c2V0SGFzUGVuZGluZ0NyZWF0aW9uRXZlbnQodHJ1ZSk7Ci0g
ICAgICAgIGRhdGFiYXNlLT5tX2RvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1Nv
dXJjZTo6TmV0d29ya2luZywgZGF0YWJhc2UtPm1fZG9jdW1lbnQsIFtjcmVhdGlvbkNhbGxiYWNr
LCBkYXRhYmFzZV0oKSB7CisgICAgICAgIGRhdGFiYXNlLT5tX2RvY3VtZW50LT5ldmVudExvb3Ao
KS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW2NyZWF0aW9uQ2FsbGJhY2ssIGRh
dGFiYXNlXSgpIHsKICAgICAgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCpk
YXRhYmFzZSk7CiAgICAgICAgICAgICBkYXRhYmFzZS0+c2V0SGFzUGVuZGluZ0NyZWF0aW9uRXZl
bnQoZmFsc2UpOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAyNTIyMjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgaWYgKCFlcnJvckNhbGxi
YWNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLmV2ZW50
TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBtX2RhdGFiYXNlLT5kb2N1
bWVudCgpLCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayldKCkgbXV0YWJs
ZSB7CisgICAgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgW2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJh
Y2spXSgpIG11dGFibGUgewogICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChTUUxF
cnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJ0aGUgZGF0YWJhc2Ugd2FzIGNs
b3NlZCIpKTsKICAgICB9KTsKIH0KQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgIC8vIGVycm9yIHRv
IGhhdmUgb2NjdXJyZWQgaW4gdGhpcyB0cmFuc2FjdGlvbi4KICAgICBSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gbV9lcnJvckNhbGxiYWNrV3JhcHBl
ci51bndyYXAoKTsKICAgICBpZiAoZXJyb3JDYWxsYmFjaykgewotICAgICAgICBtX2RhdGFiYXNl
LT5kb2N1bWVudCgpLmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5n
LCBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JD
YWxsYmFjayksIHRyYW5zYWN0aW9uRXJyb3IgPSBtX3RyYW5zYWN0aW9uRXJyb3JdKCkgbXV0YWJs
ZSB7CisgICAgICAgIG1fZGF0YWJhc2UtPmRvY3VtZW50KCkuZXZlbnRMb29wKCkucXVldWVUYXNr
KFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNh
bGxiYWNrKSwgdHJhbnNhY3Rpb25FcnJvciA9IG1fdHJhbnNhY3Rpb25FcnJvcl0oKSBtdXRhYmxl
IHsKICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCp0cmFuc2FjdGlvbkVy
cm9yKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDY2LDcgKzQ2Niw3IEBACiAgICAgLy8gU3Bl
YyA0LjMuMi44OiBEZWxpdmVyIHN1Y2Nlc3MgY2FsbGJhY2suCiAgICAgUmVmUHRyPFZvaWRDYWxs
YmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgp
OwogICAgIGlmIChzdWNjZXNzQ2FsbGJhY2spIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+ZG9jdW1l
bnQoKS5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgbV9kYXRh
YmFzZS0+ZG9jdW1lbnQoKSwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxi
YWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS5ldmVudExv
b3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxsYmFjayA9
IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHN1Y2Nl
c3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoKTsKICAgICAgICAgfSk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0Fic3RyYWN0RXZlbnRMb29wLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0Fic3RyYWN0RXZlbnRMb29wLmgJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9BYnN0cmFjdEV2ZW50TG9vcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwyMSArMjgsMTY2IEBACiAjaW5jbHVkZSAiVGFza1NvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRXZlbnRMb29wVGFz
a0dyb3VwOworY2xhc3MgRXZlbnRUYXJnZXQ7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogCitjbGFzcyBFdmVudExvb3BUYXNrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFdmVu
dExvb3BUYXNrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAg
IHZpcnR1YWwgfkV2ZW50TG9vcFRhc2soKSA9IGRlZmF1bHQ7CisKKyAgICBUYXNrU291cmNlIHRh
c2tTb3VyY2UoKSB7IHJldHVybiBtX3Rhc2tTb3VyY2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZSgpID0gMDsKKworICAgIEV2ZW50TG9vcFRhc2tHcm91cCogZ3JvdXAoKSBjb25zdCB7IHJl
dHVybiBtX2dyb3VwLmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBFdmVudExvb3BUYXNrKFRh
c2tTb3VyY2Ugc291cmNlKQorICAgICAgICA6IG1fdGFza1NvdXJjZShzb3VyY2UpCisgICAgeyB9
CisKK3ByaXZhdGU6CisgICAgY29uc3QgVGFza1NvdXJjZSBtX3Rhc2tTb3VyY2U7CisgICAgV2Vh
a1B0cjxFdmVudExvb3BUYXNrR3JvdXA+IG1fZ3JvdXA7CisKKyAgICBmcmllbmQgY2xhc3MgRXZl
bnRMb29wVGFza0dyb3VwOworfTsKKwogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9t
dWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2V2ZW50LWxvb3AKLWNsYXNzIEFic3RyYWN0RXZlbnRM
b29wIDogcHVibGljIFJlZkNvdW50ZWQ8QWJzdHJhY3RFdmVudExvb3A+IHsKK2NsYXNzIEFic3Ry
YWN0RXZlbnRMb29wIDogcHVibGljIFJlZkNvdW50ZWQ8QWJzdHJhY3RFdmVudExvb3A+LCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8QWJzdHJhY3RFdmVudExvb3A+IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5BYnN0cmFjdEV2ZW50TG9vcCgpID0gZGVmYXVsdDsKIAotICAgIHR5cGVkZWYgV1RGOjpG
dW5jdGlvbjx2b2lkICgpPiBUYXNrRnVuY3Rpb247Ci0gICAgdmlydHVhbCB2b2lkIHF1ZXVlVGFz
ayhUYXNrU291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgVGFza0Z1bmN0aW9uJiYpID0g
MDsKKyAgICB0eXBlZGVmIEZ1bmN0aW9uPHZvaWQgKCk+IFRhc2tGdW5jdGlvbjsKKyAgICB2b2lk
IHF1ZXVlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFzaz4mJik7CiAKKyAgICB2b2lk
IHN1c3BlbmRHcm91cChFdmVudExvb3BUYXNrR3JvdXAmKTsKKyAgICB2b2lkIHJlc3VtZUdyb3Vw
KEV2ZW50TG9vcFRhc2tHcm91cCYpOworICAgIHZvaWQgc3RvcEdyb3VwKEV2ZW50TG9vcFRhc2tH
cm91cCYpOworICAgIHZvaWQgY2FuY2VsQWxsRm9yR3JvdXAoRXZlbnRMb29wVGFza0dyb3VwJik7
CisKIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdEV2ZW50TG9vcCgpID0gZGVmYXVsdDsKKyAgICB2
b2lkIHJ1bigpOworICAgIHZvaWQgY2xlYXJBbGxUYXNrcygpOworCitwcml2YXRlOgorICAgIHZv
aWQgc2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlVG9S
dW4oKSA9IDA7CisKKyAgICAvLyBVc2UgYSBnbG9iYWwgcXVldWUgaW5zdGVhZCBvZiBtdWx0aXBs
ZSB0YXNrIHF1ZXVlcyBzaW5jZSBIVE1MNSBzcGVjIGFsbG93cyBVQSB0byBwaWNrIGFyYml0cmFy
eSBxdWV1ZS4KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2s+PiBtX3Rh
c2tzOworICAgIFdlYWtIYXNoU2V0PEV2ZW50TG9vcFRhc2tHcm91cD4gbV9ncm91cHNXaXRoU3Vz
cGVuZWRUYXNrczsKKyAgICBib29sIG1faXNTY2hlZHVsZWRUb1J1biB7IGZhbHNlIH07CiB9Owog
CitjbGFzcyBFdmVudExvb3BUYXNrR3JvdXAgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8RXZlbnRM
b29wVGFza0dyb3VwPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnRMb29wVGFza0dy
b3VwKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIGV4cGxp
Y2l0IEV2ZW50TG9vcFRhc2tHcm91cCgpID0gZGVmYXVsdDsKKworICAgIEV2ZW50TG9vcFRhc2tH
cm91cChFdmVudExvb3BUYXNrR3JvdXAmIHBhcmVudEdyb3VwKQorICAgICAgICA6IG1fcGFyZW50
R3JvdXAobWFrZVdlYWtQdHIocGFyZW50R3JvdXApKQorICAgIHsKKyAgICAgICAgLy8gV2Ugb25s
eSBzdXBwb3J0IGp1c3Qgb25lIGxldmVsIG9mIGNoaWxkLXBhcmVudCByZWxhdGlvbnNoaXAsIG5v
dCBhIHRyZWUgb2YgZ3JvdXBzLgorICAgICAgICBBU1NFUlQoIXBhcmVudEdyb3VwLm1fcGFyZW50
R3JvdXApOworICAgIH0KKworICAgIEV2ZW50TG9vcFRhc2tHcm91cCogcGFyZW50R3JvdXAoKSB7
IHJldHVybiBtX3BhcmVudEdyb3VwLmdldCgpOyB9CisgICAgYm9vbCBtYXRjaGVzVGFzayhFdmVu
dExvb3BUYXNrJiB0YXNrKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byogZ3JvdXAgPSB0YXNr
Lmdyb3VwKCk7CisgICAgICAgIHJldHVybiBncm91cCA9PSB0aGlzIHx8IGdyb3VwID09IG1fcGFy
ZW50R3JvdXA7CisgICAgfQorCisgICAgdm9pZCBzdGFydFJ1bm5pbmdXaXRoUGFyZW50KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3BhcmVudEdyb3VwKTsKKyAgICAgICAgQVNTRVJUKG1fcGFy
ZW50R3JvdXAtPmhhc1N0YXJ0ZWRSdW5uaW5nKCkpOworICAgICAgICBtX2V2ZW50TG9vcCA9IG1f
cGFyZW50R3JvdXAtPm1fZXZlbnRMb29wOworICAgICAgICBtX3N0YXJ0ZWRSdW5uaW5nID0gdHJ1
ZTsKKyAgICB9CisKKyAgICB2b2lkIHN0YXJ0UnVubmluZyhBYnN0cmFjdEV2ZW50TG9vcCYgZXZl
bnRMb29wKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3BhcmVudEdyb3VwKTsKKyAgICAgICAg
QVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlN0b3BwZWQpOworICAgICAgICBtX2V2ZW50TG9vcCA9
IG1ha2VXZWFrUHRyKGV2ZW50TG9vcCk7CisgICAgICAgIG1fc3RhcnRlZFJ1bm5pbmcgPSB0cnVl
OworICAgIH0KKworICAgIGJvb2wgaGFzU3RhcnRlZFJ1bm5pbmcoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0ZWRSdW5uaW5nOyB9CisKKyAgICB2b2lkIHN0b3BBbmREaXNjYXJkQWxsVGFza3MoKQor
ICAgIHsKKyAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpTdG9wcGVkOworICAgICAgICBpZiAoYXV0
byogZXZlbnRMb29wID0gbV9ldmVudExvb3AuZ2V0KCkpCisgICAgICAgICAgICBldmVudExvb3At
PnN0b3BHcm91cCgqdGhpcyk7CisgICAgfQorCisgICAgdm9pZCBzdXNwZW5kKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpTdG9wcGVkKTsKKyAgICAgICAgbV9zdGF0
ZSA9IFN0YXRlOjpTdXNwZW5kZWQ7CisgICAgICAgIC8vIEV2ZW50TG9vcCBkb2Vzbid0IGRvIGFu
eXRoaW5nIHVwb24gc3VzcGVuc2lvbi4KKyAgICB9CisKKyAgICB2b2lkIHJlc3VtZSgpCisgICAg
eworICAgICAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6U3RvcHBlZCk7CisgICAgICAgIG1f
c3RhdGUgPSBTdGF0ZTo6UnVubmluZzsKKyAgICAgICAgaWYgKGF1dG8qIGV2ZW50TG9vcCA9IG1f
ZXZlbnRMb29wLmdldCgpKQorICAgICAgICAgICAgZXZlbnRMb29wLT5yZXN1bWVHcm91cCgqdGhp
cyk7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWxBbGxFeGlzdGluZ1Rhc2tzKCkKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBldmVudExvb3AgPSBtX2V2ZW50TG9vcC5nZXQoKSkKKyAgICAgICAg
ICAgIGV2ZW50TG9vcC0+Y2FuY2VsQWxsRm9yR3JvdXAoKnRoaXMpOworICAgIH0KKworICAgIGJv
b2wgaXNTdG9wcGVkUGVybWFuZW50bHkoKSB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpTdG9w
cGVkIHx8IChtX3BhcmVudEdyb3VwICYmIG1fcGFyZW50R3JvdXAtPm1fc3RhdGUgPT0gU3RhdGU6
OlN0b3BwZWQpOyB9CisgICAgYm9vbCBpc1N1c3BlbmRlZCgpIHsgcmV0dXJuIGlzU2VsZlN1c3Bl
bmRlZCgpIHx8IChtX3BhcmVudEdyb3VwICYmIG1fcGFyZW50R3JvdXAtPmlzU2VsZlN1c3BlbmRl
ZCgpKTsgfQorCisgICAgYm9vbCBoYXNTY2hlZHVsZWRUYXNrcygpIGNvbnN0IHsgcmV0dXJuIG1f
c2NoZWR1bGVkVGFza3M7IH0KKworICAgIHZvaWQgcXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0cjxF
dmVudExvb3BUYXNrPiYmIHRhc2spCisgICAgeworICAgICAgICBBU1NFUlQobV9zdGFydGVkUnVu
bmluZyk7CisgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpTdG9wcGVkIHx8ICFtX2V2ZW50
TG9vcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKCF0YXNrLT5tX2dyb3Vw
KTsKKyAgICAgICAgdGFzay0+bV9ncm91cCA9IG1ha2VXZWFrUHRyKCp0aGlzKTsKKyAgICAgICAg
bV9ldmVudExvb3AtPnF1ZXVlVGFzayhXVEZNb3ZlKHRhc2spKTsKKyAgICB9CisKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHF1ZXVlVGFzayhUYXNrU291cmNlLCBBYnN0cmFjdEV2ZW50TG9vcDo6
VGFza0Z1bmN0aW9uJiYpOworCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50
OF90IHsgUnVubmluZywgU3VzcGVuZGVkLCBTdG9wcGVkIH07CisKKyAgICBib29sIGlzU2VsZlN1
c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU3RhdGU6OlN1c3BlbmRlZDsgfQor
CisgICAgV2Vha1B0cjxFdmVudExvb3BUYXNrR3JvdXA+IG1fcGFyZW50R3JvdXA7CisgICAgV2Vh
a1B0cjxBYnN0cmFjdEV2ZW50TG9vcD4gbV9ldmVudExvb3A7CisgICAgU3RhdGUgbV9zdGF0ZSB7
IFN0YXRlOjpSdW5uaW5nIH07CisgICAgYm9vbCBtX3N0YXJ0ZWRSdW5uaW5nIHsgZmFsc2UgfTsK
KyAgICB1bnNpZ25lZCBtX3NjaGVkdWxlZFRhc2tzIHsgMCB9OworCisgICAgZnJpZW5kIGNsYXNz
IEFic3RyYWN0RXZlbnRMb29wOworICAgIGZyaWVuZCBjbGFzcyBXaW5kb3dFdmVudExvb3A7Cisg
ICAgZnJpZW5kIGNsYXNzIFdvcmtlckV2ZW50TG9vcDsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lv
biAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMxLDEyICsxMzEsNDkgQEAKICAgICByZXR1cm4gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpICYmICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFjdGl2ZURPTU9iamVj
dHNBcmVTdG9wcGVkKCkgJiYgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWN0aXZlRE9NT2Jq
ZWN0c0FyZVN1c3BlbmRlZCgpOwogfQogCi12b2lkIEFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNr
SW5FdmVudExvb3AoVGFza1NvdXJjZSBzb3VyY2UsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgdGFzaykK
K3ZvaWQgQWN0aXZlRE9NT2JqZWN0OjpxdWV1ZVRhc2tJbkV2ZW50TG9vcChUYXNrU291cmNlIHNv
dXJjZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBhdXRvKiBjb250ZXh0
ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAg
cmV0dXJuOwotICAgIGNvbnRleHQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhzb3VyY2UsICpjb250
ZXh0LCBXVEZNb3ZlKHRhc2spKTsKKyAgICBjb250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2so
c291cmNlLCBXVEZNb3ZlKGZ1bmN0aW9uKSk7CiB9CiAKK2NsYXNzIEFjdGl2ZURPTU9iamVjdEV2
ZW50RGlzcGF0Y2hUYXNrIDogcHVibGljIEV2ZW50TG9vcFRhc2sgeworcHVibGljOgorICAgIEFj
dGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hUYXNrKFRhc2tTb3VyY2Ugc291cmNlLCBBY3RpdmVE
T01PYmplY3QmIG9iamVjdCwgRXZlbnRUYXJnZXQmIHRhcmdldCwgUmVmPEV2ZW50PiYmIGV2ZW50
KQorICAgICAgICA6IEV2ZW50TG9vcFRhc2soc291cmNlKQorICAgICAgICAsIG1fb2JqZWN0KG9i
amVjdCkKKyAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgICAgICwgbV9ldmVudChXVEZN
b3ZlKGV2ZW50KSkKKyAgICB7CisgICAgICAgICsrbV9vYmplY3QubV9wZW5kaW5nQWN0aXZpdHlD
b3VudDsKKyAgICB9CisKKyAgICB+QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRjaFRhc2soKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb2JqZWN0Lm1fcGVuZGluZ0FjdGl2aXR5Q291bnQpOwor
ICAgICAgICAtLW1fb2JqZWN0Lm1fcGVuZGluZ0FjdGl2aXR5Q291bnQ7CisgICAgfQorCisgICAg
dm9pZCBleGVjdXRlKCkgZmluYWwgeyBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChtX2V2ZW50Lmdl
dCgpKTsgfQorCitwcml2YXRlOgorICAgIEFjdGl2ZURPTU9iamVjdCYgbV9vYmplY3Q7CisgICAg
UmVmPEV2ZW50VGFyZ2V0PiBtX3RhcmdldDsKKyAgICBSZWY8RXZlbnQ+IG1fZXZlbnQ7Cit9Owor
Cit2b2lkIEFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KEV2ZW50VGFy
Z2V0JiB0YXJnZXQsIFRhc2tTb3VyY2Ugc291cmNlLCBSZWY8RXZlbnQ+JiYgZXZlbnQsIEV2ZW50
TG9vcFRhc2tHcm91cCogZ3JvdXApCit7CisgICAgQVNTRVJUKCFldmVudC0+dGFyZ2V0KCkgfHwg
JnRhcmdldCA9PSBldmVudC0+dGFyZ2V0KCkpOworICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47Cisg
ICAgQVNTRVJUKCFncm91cCB8fCBncm91cC0+cGFyZW50R3JvdXAoKSA9PSAmY29udGV4dC0+ZXZl
bnRMb29wKCkpOworICAgIGF1dG8mIGV2ZW50TG9vcCA9IGdyb3VwID8gKmdyb3VwIDogY29udGV4
dC0+ZXZlbnRMb29wKCk7CisgICAgYXV0byB0YXNrID0gbWFrZVVuaXF1ZTxBY3RpdmVET01PYmpl
Y3RFdmVudERpc3BhdGNoVGFzaz4oc291cmNlLCAqdGhpcywgdGFyZ2V0LCBXVEZNb3ZlKGV2ZW50
KSk7CisgICAgZXZlbnRMb29wLnF1ZXVlVGFzayhXVEZNb3ZlKHRhc2spKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuaAko
cmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIERvY3VtZW50OworY2xhc3MgRXZlbnQ7CitjbGFzcyBFdmVudExvb3BUYXNrR3JvdXA7
CitjbGFzcyBFdmVudFRhcmdldDsKIAogZW51bSBjbGFzcyBSZWFzb25Gb3JTdXNwZW5zaW9uIHsK
ICAgICBKYXZhU2NyaXB0RGVidWdnZXJQYXVzZWQsCkBAIC0xMTYsNyArMTE5LDcgQEAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHN0YXRpYyB2b2lkIHF1ZXVlVGFza0tlZXBpbmdPYmpl
Y3RBbGl2ZShUJiBvYmplY3QsIFRhc2tTb3VyY2Ugc291cmNlLCBGdW5jdGlvbjx2b2lkICgpPiYm
IHRhc2spCiAgICAgewotICAgICAgICBvYmplY3QucXVldWVUYXNrSW5FdmVudExvb3Aoc291cmNl
LCBbcHJvdGVjdGVkT2JqZWN0ID0gbWFrZVJlZihvYmplY3QpLCBhY3Rpdml0eSA9IG9iamVjdC5t
YWtlUGVuZGluZ0FjdGl2aXR5KG9iamVjdCksIHRhc2sgPSBXVEZNb3ZlKHRhc2spXSAoKSB7Cisg
ICAgICAgIG9iamVjdC5xdWV1ZVRhc2tJbkV2ZW50TG9vcChzb3VyY2UsIFtwcm90ZWN0ZWRPYmpl
Y3QgPSBtYWtlUmVmKG9iamVjdCksIGFjdGl2aXR5ID0gb2JqZWN0LkFjdGl2ZURPTU9iamVjdDo6
bWFrZVBlbmRpbmdBY3Rpdml0eShvYmplY3QpLCB0YXNrID0gV1RGTW92ZSh0YXNrKV0gKCkgewog
ICAgICAgICAgICAgdGFzaygpOwogICAgICAgICB9KTsKICAgICB9CkBAIC0xMjQsMTIgKzEyNywx
NSBAQAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV2ZW50VGFyZ2V0VHlwZSwgdHlwZW5hbWUgRXZl
bnRUeXBlPgogICAgIHN0YXRpYyB2b2lkIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudChFdmVudFRh
cmdldFR5cGUmIHRhcmdldCwgVGFza1NvdXJjZSBzb3VyY2UsIFJlZjxFdmVudFR5cGU+JiYgZXZl
bnQpCiAgICAgewotICAgICAgICBBU1NFUlQoIWV2ZW50LT50YXJnZXQoKSB8fCAmdGFyZ2V0ID09
IGV2ZW50LT50YXJnZXQoKSk7Ci0gICAgICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSh0
YXJnZXQsIHNvdXJjZSwgWyZ0YXJnZXQsIGV2ZW50ID0gV1RGTW92ZShldmVudCldICgpIG11dGFi
bGUgewotICAgICAgICAgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOwotICAg
ICAgICB9KTsKKyAgICAgICAgdGFyZ2V0LnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCh0YXJnZXQs
IHNvdXJjZSwgV1RGTW92ZShldmVudCksIG51bGxwdHIpOwogICAgIH0KIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEV2ZW50VGFyZ2V0VHlwZSwgdHlwZW5hbWUgRXZlbnRUeXBlPgorICAgIHN0YXRp
YyB2b2lkIHF1ZXVlR3JvdXBlZFRhc2tUb0Rpc3BhdGNoRXZlbnQoRXZlbnRMb29wVGFza0dyb3Vw
JiBncm91cCwgRXZlbnRUYXJnZXRUeXBlJiB0YXJnZXQsIFRhc2tTb3VyY2Ugc291cmNlLCBSZWY8
RXZlbnRUeXBlPiYmIGV2ZW50KQorICAgIHsKKyAgICAgICAgdGFyZ2V0LnF1ZXVlVGFza1RvRGlz
cGF0Y2hFdmVudCh0YXJnZXQsIHNvdXJjZSwgV1RGTW92ZShldmVudCksICZncm91cCk7CisgICAg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQWN0aXZlRE9NT2JqZWN0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqKTsKICAgICBleHBsaWNpdCBBY3RpdmVET01PYmplY3QoRG9jdW1lbnQqKTsK
QEAgLTE0MSw2ICsxNDcsNyBAQAogICAgIEFjdGl2ZURPTU9iamVjdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgQ2hlY2tlZFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRUeXBlKTsKIAogICAgIHZvaWQg
cXVldWVUYXNrSW5FdmVudExvb3AoVGFza1NvdXJjZSwgRnVuY3Rpb248dm9pZCAoKT4mJik7Cisg
ICAgdm9pZCBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoRXZlbnRUYXJnZXQmLCBUYXNrU291cmNl
LCBSZWY8RXZlbnQ+JiYsIEV2ZW50TG9vcFRhc2tHcm91cCogZ3JvdXApOwogCiAgICAgdW5zaWdu
ZWQgbV9wZW5kaW5nQWN0aXZpdHlDb3VudCB7IDAgfTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBA
IC0xNDcsNiArMTU0LDggQEAKICAgICBib29sIG1fc3VzcGVuZElmTmVlZGVkV2FzQ2FsbGVkIHsg
ZmFsc2UgfTsKICAgICBSZWY8VGhyZWFkPiBtX2NyZWF0aW9uVGhyZWFkIHsgVGhyZWFkOjpjdXJy
ZW50KCkgfTsKICNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIEFjdGl2ZURPTU9iamVjdEV2ZW50
RGlzcGF0Y2hUYXNrOwogfTsKIAogI2lmIEFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjM1LDggKzI2MzUsOCBAQAogCiB2b2lkIERv
Y3VtZW50OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhSZWFzb25Gb3JTdXNwZW5zaW9uIHdoeSkK
IHsKLSAgICBpZiAobV9ldmVudExvb3ApCi0gICAgICAgIG1fZXZlbnRMb29wLT5zdXNwZW5kKCp0
aGlzKTsKKyAgICBpZiAobV9kb2N1bWVudFRhc2tHcm91cCkKKyAgICAgICAgbV9kb2N1bWVudFRh
c2tHcm91cC0+c3VzcGVuZCgpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRB
Y3RpdmVET01PYmplY3RzKHdoeSk7CiAgICAgc3VzcGVuZERldmljZU1vdGlvbkFuZE9yaWVudGF0
aW9uVXBkYXRlcygpOwogICAgIHBsYXRmb3JtU3VzcGVuZE9yU3RvcEFjdGl2ZURPTU9iamVjdHMo
KTsKQEAgLTI2NDQsOCArMjY0NCw4IEBACiAKIHZvaWQgRG9jdW1lbnQ6OnJlc3VtZUFjdGl2ZURP
TU9iamVjdHMoUmVhc29uRm9yU3VzcGVuc2lvbiB3aHkpCiB7Ci0gICAgaWYgKG1fZXZlbnRMb29w
KQotICAgICAgICBtX2V2ZW50TG9vcC0+cmVzdW1lKCp0aGlzKTsKKyAgICBpZiAobV9kb2N1bWVu
dFRhc2tHcm91cCkKKyAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91cC0+cmVzdW1lKCk7CiAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyh3aHkpOwogICAg
IHJlc3VtZURldmljZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBkYXRlcygpOwogICAgIC8vIEZJWE1F
OiBGb3IgaU9TLCBkbyB3ZSBuZWVkIHRvIGFkZCBjb250ZW50IGNoYW5nZSBvYnNlcnZlcnMgdGhh
dCB3ZXJlIHJlbW92ZWQgaW4gRG9jdW1lbnQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKCk/CkBA
IC0yNjUzLDggKzI2NTMsOCBAQAogCiB2b2lkIERvY3VtZW50OjpzdG9wQWN0aXZlRE9NT2JqZWN0
cygpCiB7Ci0gICAgaWYgKG1fZXZlbnRMb29wKQotICAgICAgICBtX2V2ZW50TG9vcC0+c3RvcCgq
dGhpcyk7CisgICAgaWYgKG1fZG9jdW1lbnRUYXNrR3JvdXApCisgICAgICAgIG1fZG9jdW1lbnRU
YXNrR3JvdXAtPnN0b3BBbmREaXNjYXJkQWxsVGFza3MoKTsKICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cygpOwogICAgIHBsYXRmb3JtU3VzcGVuZE9yU3Rv
cEFjdGl2ZURPTU9iamVjdHMoKTsKIH0KQEAgLTYyMjEsMTIgKzYyMjEsMTUgQEAKICAgICAgICAg
dGFzay5wZXJmb3JtVGFzaygqdGhpcyk7CiB9CiAKLUFic3RyYWN0RXZlbnRMb29wJiBEb2N1bWVu
dDo6ZXZlbnRMb29wKCkKK0V2ZW50TG9vcFRhc2tHcm91cCYgRG9jdW1lbnQ6OmV2ZW50TG9vcCgp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoVU5MSUtFTFkoIW1fZXZl
bnRMb29wKSkKKyAgICBpZiAoVU5MSUtFTFkoIW1fZG9jdW1lbnRUYXNrR3JvdXApKSB7CiAgICAg
ICAgIG1fZXZlbnRMb29wID0gV2luZG93RXZlbnRMb29wOjplbnN1cmVGb3JSZWdpc3RyYWJsZURv
bWFpbihSZWdpc3RyYWJsZURvbWFpbiB7IHNlY3VyaXR5T3JpZ2luKCkuZGF0YSgpIH0pOwotICAg
IHJldHVybiAqbV9ldmVudExvb3A7CisgICAgICAgIG1fZG9jdW1lbnRUYXNrR3JvdXAgPSBtYWtl
VW5pcXVlPEV2ZW50TG9vcFRhc2tHcm91cD4oKTsKKyAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91
cC0+c3RhcnRSdW5uaW5nKCptX2V2ZW50TG9vcCk7CisgICAgfQorICAgIHJldHVybiAqbV9kb2N1
bWVudFRhc2tHcm91cDsKIH0KIAogdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVkdWxlZFRhc2tz
KFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJl
dmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAKIGNsYXNzIERvY3VtZW50VGltZWxpbmU7CiBjbGFz
cyBEb2N1bWVudFR5cGU7CiBjbGFzcyBFZGl0aW5nQmVoYXZpb3I7CitjbGFzcyBFdmVudExvb3BU
YXNrR3JvdXA7CiBjbGFzcyBFeHRlbnNpb25TdHlsZVNoZWV0czsKIGNsYXNzIEZsb2F0UXVhZDsK
IGNsYXNzIEZsb2F0UmVjdDsKQEAgLTEwNjMsNyArMTA2NCw3IEBACiAKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHBvc3RUYXNrKFRhc2smJikgZmluYWw7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9u
IGNvbnRleHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCiAKLSAgICBBYnN0cmFjdEV2ZW50TG9v
cCYgZXZlbnRMb29wKCkgZmluYWw7CisgICAgRXZlbnRMb29wVGFza0dyb3VwJiBldmVudExvb3Ao
KSBmaW5hbDsKIAogICAgIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciogc2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyKCkgeyByZXR1cm4gbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIu
Z2V0KCk7IH0KICAgICB2b2lkIHN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxs
YmFja3MoKTsKQEAgLTIwNjIsNiArMjA2Myw3IEBACiAgICAgRG9jdW1lbnRJZGVudGlmaWVyIG1f
aWRlbnRpZmllcjsKIAogICAgIFJlZlB0cjxXaW5kb3dFdmVudExvb3A+IG1fZXZlbnRMb29wOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrR3JvdXA+IG1fZG9jdW1lbnRUYXNrR3Jv
dXA7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgUmVmUHRyPFNXQ2xpZW50Q29u
bmVjdGlvbj4gbV9zZXJ2aWNlV29ya2VyQ29ubmVjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9JZGxlQ2FsbGJhY2tDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vSWRsZUNhbGxiYWNrQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9JZGxlQ2FsbGJhY2tDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzEsNyArNzEsNyBAQAogCiB2b2lkIElkbGVDYWxsYmFja0NvbnRyb2xsZXI6OnF1
ZXVlVGFza1RvU3RhcnRJZGxlUGVyaW9kKCkKIHsKLSAgICBtX2RvY3VtZW50LT5ldmVudExvb3Ao
KS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6SWRsZVRhc2ssICptX2RvY3VtZW50LCBbcHJvdGVjdGVk
RG9jdW1lbnQgPSBtYWtlUmVmKCptX2RvY3VtZW50KSwgdGhpc10oKSB7CisgICAgbV9kb2N1bWVu
dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OklkbGVUYXNrLCBbcHJvdGVjdGVk
RG9jdW1lbnQgPSBtYWtlUmVmKCptX2RvY3VtZW50KSwgdGhpc10oKSB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHByb3RlY3RlZERvY3VtZW50LT5pZGxlQ2FsbGJhY2tDb250cm9sbGVyKCkgPT0g
dGhpcyk7CiAgICAgICAgIHN0YXJ0SWRsZVBlcmlvZCgpOwogICAgIH0pOwpAQCAtMTAwLDcgKzEw
MCw3IEBACiAKIHZvaWQgSWRsZUNhbGxiYWNrQ29udHJvbGxlcjo6cXVldWVUYXNrVG9JbnZva2VJ
ZGxlQ2FsbGJhY2tzKE1vbm90b25pY1RpbWUgZGVhZGxpbmUpCiB7Ci0gICAgbV9kb2N1bWVudC0+
ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OklkbGVUYXNrLCAqbV9kb2N1bWVudCwg
W3Byb3RlY3RlZERvY3VtZW50ID0gbWFrZVJlZigqbV9kb2N1bWVudCksIGRlYWRsaW5lLCB0aGlz
XSgpIHsKKyAgICBtX2RvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6
SWRsZVRhc2ssIFtwcm90ZWN0ZWREb2N1bWVudCA9IG1ha2VSZWYoKm1fZG9jdW1lbnQpLCBkZWFk
bGluZSwgdGhpc10oKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByb3RlY3RlZERvY3VtZW50
LT5pZGxlQ2FsbGJhY2tDb250cm9sbGVyKCkgPT0gdGhpcyk7CiAgICAgICAgIGludm9rZUlkbGVD
YWxsYmFja3MoZGVhZGxpbmUpOwogICAgIH0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2
ICs1OCw3IEBACiBjbGFzcyBDYWNoZWRTY3JpcHQ7CiBjbGFzcyBEYXRhYmFzZUNvbnRleHQ7CiBj
bGFzcyBFdmVudFF1ZXVlOworY2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXZlbnRU
YXJnZXQ7CiBjbGFzcyBNZXNzYWdlUG9ydDsKIGNsYXNzIFB1YmxpY1VSTE1hbmFnZXI7CkBAIC02
NSw2ICs2Niw3IEBACiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBTZWN1cml0eU9yaWdp
bjsKIGNsYXNzIFNvY2tldFByb3ZpZGVyOworZW51bSBjbGFzcyBUYXNrU291cmNlIDogdWludDhf
dDsKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIGNsYXNzIFNlcnZpY2VXb3JrZXI7CkBA
IC05MCw3ICs5Miw3IEBACiAgICAgdmlydHVhbCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNKU0V4ZWN1dGlvbkZvcmJpZGRl
bigpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgQWJzdHJhY3RFdmVudExvb3AmIGV2ZW50TG9v
cCgpID0gMDsKKyAgICB2aXJ0dWFsIEV2ZW50TG9vcFRhc2tHcm91cCYgZXZlbnRMb29wKCkgPSAw
OwogCiAgICAgdmlydHVhbCBjb25zdCBVUkwmIHVybCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IFVSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QgPSAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL1Rhc2tTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vVGFza1NvdXJjZS5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vVGFza1NvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAgICAgRmls
ZVJlYWRpbmcsCiAgICAgRm9udExvYWRpbmcsCiAgICAgSWRsZVRhc2ssCisgICAgTWVkaWFFbGVt
ZW50RXZlbnQsCiAgICAgTmV0d29ya2luZywKICAgICBQb3N0ZWRNZXNzYWdlUXVldWUsCiAgICAg
VXNlckludGVyYWN0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29w
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmNw
cAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9v
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDY0ICs1OSw5NCBAQAogICAgIFJFTEVBU0VfQVNT
RVJUKGRpZFJlbW92ZSk7CiB9CiAKLXZvaWQgV2luZG93RXZlbnRMb29wOjpxdWV1ZVRhc2soVGFz
a1NvdXJjZSBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFRhc2tGdW5j
dGlvbiYmIHRhc2spCit2b2lkIEFic3RyYWN0RXZlbnRMb29wOjpxdWV1ZVRhc2soc3RkOjp1bmlx
dWVfcHRyPEV2ZW50TG9vcFRhc2s+JiYgdGFzaykKIHsKKyAgICBBU1NFUlQodGFzay0+Z3JvdXAo
KSk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoaXM8RG9jdW1lbnQ+
KGNvbnRleHQpKTsKKyAgICArK3Rhc2stPmdyb3VwKCktPm1fc2NoZWR1bGVkVGFza3M7CiAgICAg
c2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7Ci0gICAgbV90YXNrcy5hcHBlbmQoVGFzayB7IHNvdXJj
ZSwgV1RGTW92ZSh0YXNrKSwgZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLmlkZW50aWZpZXIo
KSB9KTsKKyAgICBtX3Rhc2tzLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKIH0KIAotdm9pZCBXaW5k
b3dFdmVudExvb3A6OnN1c3BlbmQoRG9jdW1lbnQmKQordm9pZCBBYnN0cmFjdEV2ZW50TG9vcDo6
c3VzcGVuZEdyb3VwKEV2ZW50TG9vcFRhc2tHcm91cCYpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKIH0KIAotdm9pZCBXaW5kb3dFdmVudExvb3A6OnJlc3VtZShEb2N1bWVudCYgZG9j
dW1lbnQpCit2b2lkIEFic3RyYWN0RXZlbnRMb29wOjpyZXN1bWVHcm91cChFdmVudExvb3BUYXNr
R3JvdXAmIGdyb3VwKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFt
X2RvY3VtZW50SWRlbnRpZmllcnNGb3JTdXNwZW5kZWRUYXNrcy5jb250YWlucyhkb2N1bWVudC5p
ZGVudGlmaWVyKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgc2NoZWR1bGVUb1J1bklmTmVlZGVk
KCk7CisgICAgaWYgKG1fZ3JvdXBzV2l0aFN1c3BlbmVkVGFza3MucmVtb3ZlKGdyb3VwKSkKKyAg
ICAgICAgc2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7CiB9CiAKLXZvaWQgV2luZG93RXZlbnRMb29w
OjpzdG9wKERvY3VtZW50JiBkb2N1bWVudCkKK3ZvaWQgQWJzdHJhY3RFdmVudExvb3A6OnN0b3BH
cm91cChFdmVudExvb3BUYXNrR3JvdXAmIGdyb3VwKQogewotICAgIG1fdGFza3MucmVtb3ZlQWxs
TWF0Y2hpbmcoW2lkZW50aWZpZXIgPSBkb2N1bWVudC5pZGVudGlmaWVyKCldIChhdXRvJiB0YXNr
KSB7Ci0gICAgICAgIHJldHVybiB0YXNrLmRvY3VtZW50SWRlbnRpZmllciA9PSBpZGVudGlmaWVy
OworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byByZW1vdmVkVGFza3MgPSBt
X3Rhc2tzLnJlbW92ZUFsbE1hdGNoaW5nKFsmZ3JvdXBdIChhdXRvJiB0YXNrKSB7CisgICAgICAg
IHJldHVybiBncm91cC5tYXRjaGVzVGFzaygqdGFzayk7CiAgICAgfSk7CisgICAgQVNTRVJUKHJl
bW92ZWRUYXNrcyA8PSBncm91cC5tX3NjaGVkdWxlZFRhc2tzKTsKKyAgICBncm91cC5tX3NjaGVk
dWxlZFRhc2tzIC09IHJlbW92ZWRUYXNrczsKIH0KIAotdm9pZCBXaW5kb3dFdmVudExvb3A6OnNj
aGVkdWxlVG9SdW5JZk5lZWRlZCgpCit2b2lkIEFic3RyYWN0RXZlbnRMb29wOjpjYW5jZWxBbGxG
b3JHcm91cChFdmVudExvb3BUYXNrR3JvdXAmIGdyb3VwKQogeworICAgIC8vIEZJWE1FOiBOZWVk
IHRvIGNhbmNlbCBvbmdvaW5nIHRhc2tzLgorICAgIGF1dG8gcmVtb3ZlZFRhc2tzID0gbV90YXNr
cy5yZW1vdmVBbGxNYXRjaGluZyhbJmdyb3VwXSAoYXV0byYgdGFzaykgeworICAgICAgICByZXR1
cm4gdGFzay0+Z3JvdXAoKSA9PSAmZ3JvdXA7CisgICAgfSk7CisgICAgQVNTRVJUKHJlbW92ZWRU
YXNrcyA8PSBncm91cC5tX3NjaGVkdWxlZFRhc2tzKTsKKyAgICBncm91cC5tX3NjaGVkdWxlZFRh
c2tzIC09IHJlbW92ZWRUYXNrczsKK30KKwordm9pZCBBYnN0cmFjdEV2ZW50TG9vcDo6c2NoZWR1
bGVUb1J1bklmTmVlZGVkKCkKK3sKICAgICBpZiAobV9pc1NjaGVkdWxlZFRvUnVuKQogICAgICAg
ICByZXR1cm47CisgICAgbV9pc1NjaGVkdWxlZFRvUnVuID0gdHJ1ZTsKKyAgICBzY2hlZHVsZVRv
UnVuKCk7Cit9CiAKLSAgICBtX2lzU2NoZWR1bGVkVG9SdW4gPSB0cnVlOwordm9pZCBXaW5kb3dF
dmVudExvb3A6OnNjaGVkdWxlVG9SdW4oKQorewogICAgIGNhbGxPbk1haW5UaHJlYWQoW2V2ZW50
TG9vcCA9IG1ha2VSZWYoKnRoaXMpXSAoKSB7Ci0gICAgICAgIGV2ZW50TG9vcC0+bV9pc1NjaGVk
dWxlZFRvUnVuID0gZmFsc2U7CiAgICAgICAgIGV2ZW50TG9vcC0+cnVuKCk7CiAgICAgfSk7CiB9
CiAKLXZvaWQgV2luZG93RXZlbnRMb29wOjpydW4oKQordm9pZCBBYnN0cmFjdEV2ZW50TG9vcDo6
cnVuKCkKIHsKICAgICBpZiAobV90YXNrcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFZlY3RvcjxUYXNrPiB0YXNrcyA9IFdURk1vdmUobV90YXNrcyk7Ci0gICAgbV9kb2N1bWVu
dElkZW50aWZpZXJzRm9yU3VzcGVuZGVkVGFza3MuY2xlYXIoKTsKLSAgICBWZWN0b3I8VGFzaz4g
cmVtYWluaW5nVGFza3M7CisgICAgYXV0byB0YXNrcyA9IHN0ZDo6ZXhjaGFuZ2UobV90YXNrcywg
eyB9KTsKKyAgICBtX2dyb3Vwc1dpdGhTdXNwZW5lZFRhc2tzLmNsZWFyKCk7CisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPj4gcmVtYWluaW5nVGFza3M7CiAgICAgZm9y
IChhdXRvJiB0YXNrIDogdGFza3MpIHsKLSAgICAgICAgYXV0byogZG9jdW1lbnQgPSBEb2N1bWVu
dDo6YWxsRG9jdW1lbnRzTWFwKCkuZ2V0KHRhc2suZG9jdW1lbnRJZGVudGlmaWVyKTsKLSAgICAg
ICAgaWYgKCFkb2N1bWVudCB8fCBkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQo
KSkKKyAgICAgICAgYXV0byogZ3JvdXAgPSB0YXNrLT5ncm91cCgpOworICAgICAgICBpZiAoIWdy
b3VwKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChkb2N1bWVudC0+YWN0aXZl
RE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKSB7Ci0gICAgICAgICAgICBtX2RvY3VtZW50SWRlbnRp
ZmllcnNGb3JTdXNwZW5kZWRUYXNrcy5hZGQodGFzay5kb2N1bWVudElkZW50aWZpZXIpOworCisg
ICAgICAgIGF1dG8gY2hlY2tTZWxmU3VzcGVuZGVkID0gW3RoaXNdIChFdmVudExvb3BUYXNrR3Jv
dXAqIGdyb3VwKSB7CisgICAgICAgICAgICBpZiAoIWdyb3VwIHx8ICFncm91cC0+aXNTZWxmU3Vz
cGVuZGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbV9n
cm91cHNXaXRoU3VzcGVuZWRUYXNrcy5hZGQoZ3JvdXApOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGNoZWNrU2VsZlN1c3BlbmRlZChncm91cCkg
fHwgY2hlY2tTZWxmU3VzcGVuZGVkKGdyb3VwLT5wYXJlbnRHcm91cCgpKSkgewogICAgICAgICAg
ICAgcmVtYWluaW5nVGFza3MuYXBwZW5kKFdURk1vdmUodGFzaykpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KLSAgICAgICAgdGFzay50YXNrKCk7CisKKyAgICAgICAgQVNTRVJU
KGdyb3VwLT5tX3NjaGVkdWxlZFRhc2tzKTsKKyAgICAgICAgZ3JvdXAtPm1fc2NoZWR1bGVkVGFz
a3MtLTsKKworICAgICAgICBpZiAoZ3JvdXAtPmlzU3RvcHBlZFBlcm1hbmVudGx5KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0YXNrLT5leGVjdXRlKCk7CiAgICAgfQogICAg
IGZvciAoYXV0byYgdGFzayA6IG1fdGFza3MpCiAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLmFwcGVu
ZChXVEZNb3ZlKHRhc2spKTsKQEAgLTEyMyw0ICsxNTMsMjkgQEAKICAgICBtX3Rhc2tzID0gV1RG
TW92ZShyZW1haW5pbmdUYXNrcyk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RFdmVudExvb3A6OmNsZWFy
QWxsVGFza3MoKQoreworICAgIG1fdGFza3MuY2xlYXIoKTsKKyAgICBtX2dyb3Vwc1dpdGhTdXNw
ZW5lZFRhc2tzLmNsZWFyKCk7Cit9CisKK2NsYXNzIEV2ZW50TG9vcEZ1bmN0aW9uRGlzcGF0Y2hU
YXNrIDogcHVibGljIEV2ZW50TG9vcFRhc2sgeworcHVibGljOgorICAgIEV2ZW50TG9vcEZ1bmN0
aW9uRGlzcGF0Y2hUYXNrKFRhc2tTb3VyY2Ugc291cmNlLCBBYnN0cmFjdEV2ZW50TG9vcDo6VGFz
a0Z1bmN0aW9uJiYgZnVuY3Rpb24pCisgICAgICAgIDogRXZlbnRMb29wVGFzayhzb3VyY2UpCisg
ICAgICAgICwgbV9mdW5jdGlvbihXVEZNb3ZlKGZ1bmN0aW9uKSkKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCBleGVjdXRlKCkgZmluYWwgeyBtX2Z1bmN0aW9uKCk7IH0KKworcHJpdmF0ZToKKyAg
ICBBYnN0cmFjdEV2ZW50TG9vcDo6VGFza0Z1bmN0aW9uIG1fZnVuY3Rpb247Cit9OworCit2b2lk
IEV2ZW50TG9vcFRhc2tHcm91cDo6cXVldWVUYXNrKFRhc2tTb3VyY2Ugc291cmNlLCBBYnN0cmFj
dEV2ZW50TG9vcDo6VGFza0Z1bmN0aW9uJiYgZnVuY3Rpb24pCit7CisgICAgcmV0dXJuIHF1ZXVl
VGFzayhtYWtlVW5pcXVlPEV2ZW50TG9vcEZ1bmN0aW9uRGlzcGF0Y2hUYXNrPihzb3VyY2UsIFdU
Rk1vdmUoZnVuY3Rpb24pKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmgJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjkg
KzQxLDEyIEBACiAKICAgICB+V2luZG93RXZlbnRMb29wKCk7CiAKLSAgICB2b2lkIHF1ZXVlVGFz
ayhUYXNrU291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgVGFza0Z1bmN0aW9uJiYpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBzdXNwZW5kKERvY3VtZW50Jik7Ci0gICAgdm9pZCByZXN1bWUo
RG9jdW1lbnQmKTsKLSAgICB2b2lkIHN0b3AoRG9jdW1lbnQmKTsKLQogcHJpdmF0ZToKICAgICBX
aW5kb3dFdmVudExvb3AoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKIAotICAgIHZvaWQgc2No
ZWR1bGVUb1J1bklmTmVlZGVkKCk7Ci0gICAgdm9pZCBydW4oKTsKKyAgICB2b2lkIHNjaGVkdWxl
VG9SdW4oKSBmaW5hbDsKIAotICAgIHN0cnVjdCBUYXNrIHsKLSAgICAgICAgVGFza1NvdXJjZSBz
b3VyY2U7Ci0gICAgICAgIFRhc2tGdW5jdGlvbiB0YXNrOwotICAgICAgICBEb2N1bWVudElkZW50
aWZpZXIgZG9jdW1lbnRJZGVudGlmaWVyOwotICAgIH07Ci0KLSAgICAvLyBVc2UgYSBnbG9iYWwg
cXVldWUgaW5zdGVhZCBvZiBtdWx0aXBsZSB0YXNrIHF1ZXVlcyBzaW5jZSBIVE1MNSBzcGVjIGFs
bG93cyBVQSB0byBwaWNrIGFyYml0cmFyeSBxdWV1ZS4KLSAgICBWZWN0b3I8VGFzaz4gbV90YXNr
czsKLSAgICBIYXNoU2V0PERvY3VtZW50SWRlbnRpZmllcj4gbV9kb2N1bWVudElkZW50aWZpZXJz
Rm9yU3VzcGVuZGVkVGFza3M7CiAgICAgUmVnaXN0cmFibGVEb21haW4gbV9kb21haW47Ci0gICAg
Ym9vbCBtX2lzU2NoZWR1bGVkVG9SdW4geyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCShyZXZpc2lv
biAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDcgQEAKICAgICBzdGF0aWMgdWludDY0X3QgdGFza0lk
ZW50aWZpZXJTZWVkID0gMDsKICAgICB1aW50NjRfdCB0YXNrSWRlbnRpZmllciA9ICsrdGFza0lk
ZW50aWZpZXJTZWVkOwogICAgIG1fcGVuZGluZ1Rhc2tzLmFkZCh0YXNrSWRlbnRpZmllciwgV1RG
TW92ZSh0YXNrKSk7Ci0gICAgY29udGV4dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3Vy
Y2U6OkZpbGVSZWFkaW5nLCAqY29udGV4dCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgcGVuZGluZ0FjdGl2aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRh
c2tJZGVudGlmaWVyXSB7CisgICAgY29udGV4dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tT
b3VyY2U6OkZpbGVSZWFkaW5nLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBwZW5kaW5nQWN0aXZpdHkgPSBtYWtlUGVuZGluZ0FjdGl2aXR5KCp0aGlzKSwgdGFza0lkZW50
aWZpZXJdIHsKICAgICAgICAgYXV0byB0YXNrID0gbV9wZW5kaW5nVGFza3MudGFrZSh0YXNrSWRl
bnRpZmllcik7CiAgICAgICAgIGlmICh0YXNrKQogICAgICAgICAgICAgdGFzaygpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNTIyMjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVklERU8pCiAKKyNpbmNsdWRlICJB
YnN0cmFjdEV2ZW50TG9vcC5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAj
aW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRl
LmgiCkBAIC00MjgsNyArNDI5LDYgQEAKICAgICAsIG1fc2NhblRpbWVyKCp0aGlzLCAmSFRNTE1l
ZGlhRWxlbWVudDo6c2NhblRpbWVyRmlyZWQpCiAgICAgLCBtX3BsYXliYWNrQ29udHJvbHNNYW5h
Z2VyQmVoYXZpb3JSZXN0cmljdGlvbnNUaW1lcigqdGhpcywgJkhUTUxNZWRpYUVsZW1lbnQ6OnBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZpb3JSZXN0cmljdGlvbnNUaW1lckZpcmVkKQogICAg
ICwgbV9zZWVrVG9QbGF5YmFja1Bvc2l0aW9uRW5kZWRUaW1lcigqdGhpcywgJkhUTUxNZWRpYUVs
ZW1lbnQ6OnNlZWtUb1BsYXliYWNrUG9zaXRpb25FbmRlZFRpbWVyRmlyZWQpCi0gICAgLCBtX2Fz
eW5jRXZlbnRRdWV1ZShNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU6OmNyZWF0ZSgqdGhpcykp
CiAgICAgLCBtX2xhc3RUaW1lVXBkYXRlRXZlbnRNb3ZpZVRpbWUoTWVkaWFUaW1lOjpwb3NpdGl2
ZUluZmluaXRlVGltZSgpKQogICAgICwgbV9maXJzdFRpbWVQbGF5aW5nKHRydWUpCiAgICAgLCBt
X3BsYXlpbmcoZmFsc2UpCkBAIC01NjIsOCArNTYyLDYgQEAKICAgICBiZWdpbklnbm9yaW5nVHJh
Y2tEaXNwbGF5VXBkYXRlUmVxdWVzdHMoKTsKICAgICBhbGxNZWRpYUVsZW1lbnRzKCkucmVtb3Zl
KHRoaXMpOwogCi0gICAgbV9hc3luY0V2ZW50UXVldWUtPmNsb3NlKCk7Ci0KICAgICBzZXRTaG91
bGREZWxheUxvYWRFdmVudChmYWxzZSk7CiAgICAgdW5yZWdpc3RlcldpdGhEb2N1bWVudChkb2N1
bWVudCgpKTsKIApAQCAtNjI1LDExICs2MjMsOCBAQAogCiAgICAgbV9zZWVrVGFza1F1ZXVlLmNs
b3NlKCk7CiAgICAgbV9yZXN1bWVUYXNrUXVldWUuY2xvc2UoKTsKLSAgICBtX3Byb21pc2VUYXNr
UXVldWUuY2xvc2UoKTsKLSAgICBtX3BhdXNlQWZ0ZXJEZXRhY2hlZFRhc2tRdWV1ZS5jbG9zZSgp
OwogICAgIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXJCZWhhdmlvclJlc3RyaWN0aW9uc1F1ZXVl
LmNsb3NlKCk7CiAgICAgbV9yZXNvdXJjZVNlbGVjdGlvblRhc2tRdWV1ZS5jbG9zZSgpOwotICAg
IG1fdmlzaWJpbGl0eUNoYW5nZVRhc2tRdWV1ZS5jbG9zZSgpOwogI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCiAgICAgbV9lbmNyeXB0ZWRNZWRpYVF1ZXVlLmNsb3NlKCk7CiAjZW5kaWYKQEAg
LTY0NCw2ICs2MzksMTYgQEAKICAgICBtX21lZGlhU2Vzc2lvbiA9IG51bGxwdHI7CiAgICAgc2No
ZWR1bGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclVwZGF0ZSgpOwogfQorCitFdmVudExvb3BUYXNr
R3JvdXAmIEhUTUxNZWRpYUVsZW1lbnQ6OmFzeW5jRXZlbnRHcm91cCgpCit7CisgICAgaWYgKFVO
TElLRUxZKCFtX2FzeW5jRXZlbnRHcm91cCkpIHsKKyAgICAgICAgbV9hc3luY0V2ZW50R3JvdXAg
PSBtYWtlVW5pcXVlPEV2ZW50TG9vcFRhc2tHcm91cD4oZG9jdW1lbnQoKS5ldmVudExvb3AoKSk7
CisgICAgICAgIG1fYXN5bmNFdmVudEdyb3VwLT5zdGFydFJ1bm5pbmdXaXRoUGFyZW50KCk7Cisg
ICAgfQorICAgIHJldHVybiAqbV9hc3luY0V2ZW50R3JvdXA7Cit9CisKIFJlZlB0cjxIVE1MTWVk
aWFFbGVtZW50PiBIVE1MTWVkaWFFbGVtZW50OjpiZXN0TWVkaWFFbGVtZW50Rm9yU2hvd2luZ1Bs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKE1lZGlhRWxlbWVudFNlc3Npb246OlBsYXliYWNrQ29udHJv
bHNQdXJwb3NlIHB1cnBvc2UpCiB7CiAgICAgVmVjdG9yPE1lZGlhRWxlbWVudFNlc3Npb25JbmZv
PiBjYW5kaWRhdGVTZXNzaW9uczsKQEAgLTk0NCw3ICs5NDksOSBAQAogICAgIHNldEluQWN0aXZl
RG9jdW1lbnQoZmFsc2UpOwogICAgIGlmIChyZW1vdmFsVHlwZS5kaXNjb25uZWN0ZWRGcm9tRG9j
dW1lbnQpIHsKICAgICAgICAgLy8gUGF1c2UgYXN5bmNocm9ub3VzbHkgdG8gbGV0IHRoZSBvcGVy
YXRpb24gdGhhdCByZW1vdmVkIHVzIGZpbmlzaCwgaW4gY2FzZSB3ZSBnZXQgaW5zZXJ0ZWQgYmFj
ayBpbnRvIGEgZG9jdW1lbnQuCi0gICAgICAgIG1fcGF1c2VBZnRlckRldGFjaGVkVGFza1F1ZXVl
LmVucXVldWVUYXNrKHN0ZDo6YmluZCgmSFRNTE1lZGlhRWxlbWVudDo6cGF1c2VBZnRlckRldGFj
aGVkVGFzaywgdGhpcykpOworICAgICAgICBxdWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRo
aXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBbdGhpc10geworICAgICAgICAgICAg
cGF1c2VBZnRlckRldGFjaGVkVGFzaygpOworICAgICAgICB9KTsKICAgICB9CiAKICAgICBpZiAo
bV9tZWRpYVNlc3Npb24pCkBAIC0xMDExLDI0ICsxMDE4LDE5IEBACiAKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6c2NoZWR1bGVFdmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVudE5hbWUpCiB7Ci0g
ICAgYXV0byBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBFdmVudDo6Q2FuQnViYmxl
OjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzKTsKLQotICAgIC8vIERvbid0IHNldCB0aGUg
ZXZlbnQgdGFyZ2V0LCB0aGUgZXZlbnQgcXVldWUgd2lsbCBzZXQgaXQgaW4gR2VuZXJpY0V2ZW50
UXVldWU6OnRpbWVyRmlyZWQgYW5kIHNldHRpbmcgaXQgaGVyZQotICAgIC8vIHdpbGwgdHJpZ2dl
ciBhbiBBU1NFUlQgaWYgdGhpcyBlbGVtZW50IGhhcyBiZWVuIG1hcmtlZCBmb3IgZGVsZXRpb24u
Ci0KLSAgICBtX2FzeW5jRXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsK
KyAgICAvLyBGSVhNRToKKyAgICBxdWV1ZUdyb3VwZWRUYXNrVG9EaXNwYXRjaEV2ZW50KGFzeW5j
RXZlbnRHcm91cCgpLCAqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lLCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2Vs
YWJsZTo6WWVzKSk7CiB9CiAKLSNpZiBFTkFCTEUoUElDVFVSRV9JTl9QSUNUVVJFX0FQSSkKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2NoZWR1bGVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7
Ci0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVudChXVEZNb3ZlKGV2ZW50KSk7Cisg
ICAgLy8gRklYTUU6CisgICAgcXVldWVHcm91cGVkVGFza1RvRGlzcGF0Y2hFdmVudChhc3luY0V2
ZW50R3JvdXAoKSwgKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBXVEZNb3Zl
KGV2ZW50KSk7CiB9Ci0jZW5kaWYKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzY2hlZHVsZVJl
c29sdmVQZW5kaW5nUGxheVByb21pc2VzKCkKIHsKLSAgICBtX3Byb21pc2VUYXNrUXVldWUuZW5x
dWV1ZVRhc2soW3RoaXMsIHBlbmRpbmdQbGF5UHJvbWlzZXMgPSBXVEZNb3ZlKG1fcGVuZGluZ1Bs
YXlQcm9taXNlcyldICgpIG11dGFibGUgeworICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2
ZSgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIFt0aGlzLCBwZW5kaW5nUGxh
eVByb21pc2VzID0gV1RGTW92ZShtX3BlbmRpbmdQbGF5UHJvbWlzZXMpXSAoKSBtdXRhYmxlIHsK
ICAgICAgICAgcmVzb2x2ZVBlbmRpbmdQbGF5UHJvbWlzZXMoV1RGTW92ZShwZW5kaW5nUGxheVBy
b21pc2VzKSk7CiAgICAgfSk7CiB9CkBAIC0xMDM1LDcgKzEwMzcsNyBAQAogCiB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnNjaGVkdWxlUmVqZWN0UGVuZGluZ1BsYXlQcm9taXNlcyhSZWY8RE9NRXhj
ZXB0aW9uPiYmIGVycm9yKQogewotICAgIG1fcHJvbWlzZVRhc2tRdWV1ZS5lbnF1ZXVlVGFzayhb
dGhpcywgZXJyb3IgPSBXVEZNb3ZlKGVycm9yKSwgcGVuZGluZ1BsYXlQcm9taXNlcyA9IFdURk1v
dmUobV9wZW5kaW5nUGxheVByb21pc2VzKV0gKCkgbXV0YWJsZSB7CisgICAgcXVldWVUYXNrS2Vl
cGluZ09iamVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3Ro
aXMsIGVycm9yID0gV1RGTW92ZShlcnJvciksIHBlbmRpbmdQbGF5UHJvbWlzZXMgPSBXVEZNb3Zl
KG1fcGVuZGluZ1BsYXlQcm9taXNlcyldICgpIG11dGFibGUgewogICAgICAgICByZWplY3RQZW5k
aW5nUGxheVByb21pc2VzKFdURk1vdmUocGVuZGluZ1BsYXlQcm9taXNlcyksIFdURk1vdmUoZXJy
b3IpKTsKICAgICB9KTsKIH0KQEAgLTEwNTQsNyArMTA1Niw3IEBACiAKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6c2NoZWR1bGVOb3RpZnlBYm91dFBsYXlpbmcoKQogewotICAgIG1fcHJvbWlzZVRh
c2tRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpcywgcGVuZGluZ1BsYXlQcm9taXNlcyA9IFdURk1vdmUo
bV9wZW5kaW5nUGxheVByb21pc2VzKV0gKCkgbXV0YWJsZSB7CisgICAgcXVldWVUYXNrS2VlcGlu
Z09iamVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW3RoaXMs
IHBlbmRpbmdQbGF5UHJvbWlzZXMgPSBXVEZNb3ZlKG1fcGVuZGluZ1BsYXlQcm9taXNlcyldICgp
IG11dGFibGUgewogICAgICAgICBub3RpZnlBYm91dFBsYXlpbmcoV1RGTW92ZShwZW5kaW5nUGxh
eVByb21pc2VzKSk7CiAgICAgfSk7CiB9CkBAIC0xODM1LDYgKzE4MzcsMTMgQEAKICAgICAvLyB0
aW1lcyBmaXJzdCkuCiAgICAgc3RkOjpzb3J0KGV2ZW50VGFza3MuYmVnaW4oKSwgZXZlbnRUYXNr
cy5lbmQoKSwgZXZlbnRUaW1lQ3VlQ29tcGFyZSk7CiAKKyAgICAvLyBGSVhNRTogTWFrZSBUZXh0
VHJhY2tDdWUgYW4gYWN0aXZlIERPTSBvYmplY3QgYW5kIHNjaGVkdWxlIGFuIGV2ZW50IHRoZXJl
IGluc3RlYWQuCisgICAgYXV0byBzY2hlZHVsZUV2ZW50ID0gW3RoaXNdIChUZXh0VHJhY2tDdWUm
IGN1ZSwgUmVmPEV2ZW50PiYmIGV2ZW50KSB7CisgICAgICAgIGFzeW5jRXZlbnRHcm91cCgpLnF1
ZXVlVGFzayhUYXNrU291cmNlOjpNZWRpYUVsZW1lbnRFdmVudCwgW2V2ZW50ID0gV1RGTW92ZShl
dmVudCksIGN1ZSA9IG1ha2VSZWYoY3VlKV0geworICAgICAgICAgICAgY3VlLT5FdmVudFRhcmdl
dDo6ZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgICAgIH0pOworICAgIH07CisKICAgICBmb3Ig
KGF1dG8mIGV2ZW50VGFzayA6IGV2ZW50VGFza3MpIHsKICAgICAgICAgaWYgKCFhZmZlY3RlZFRy
YWNrcy5jb250YWlucyhldmVudFRhc2suc2Vjb25kLT50cmFjaygpKSkKICAgICAgICAgICAgIGFm
ZmVjdGVkVHJhY2tzLmFwcGVuZChldmVudFRhc2suc2Vjb25kLT50cmFjaygpKTsKQEAgLTE4NDYs
MjEgKzE4NTUsMTMgQEAKICAgICAgICAgLy8gY29ycmVjdGx5IGlkZW50aWZpZXMgdGhlIHR5cGUg
b2YgdGhlIGV2ZW50LCBpZiB0aGUgc3RhcnRUaW1lIGlzCiAgICAgICAgIC8vIGxlc3MgdGhhbiB0
aGUgZW5kVGltZSBpbiB0aGUgY3VlLgogICAgICAgICBpZiAoZXZlbnRUYXNrLnNlY29uZC0+c3Rh
cnRUaW1lKCkgPj0gZXZlbnRUYXNrLnNlY29uZC0+ZW5kVGltZSgpKSB7Ci0gICAgICAgICAgICBh
dXRvIGVudGVyRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbnRlckV2ZW50LCBF
dmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pOwotICAgICAgICAg
ICAgZW50ZXJFdmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFzay5zZWNvbmQpOwotICAgICAgICAgICAg
bV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVudChXVEZNb3ZlKGVudGVyRXZlbnQpKTsKLQot
ICAgICAgICAgICAgYXV0byBleGl0RXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5l
eGl0RXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObyk7
Ci0gICAgICAgICAgICBleGl0RXZlbnQtPnNldFRhcmdldChldmVudFRhc2suc2Vjb25kKTsKLSAg
ICAgICAgICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoV1RGTW92ZShleGl0RXZl
bnQpKTsKKyAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoKmV2ZW50VGFzay5zZWNvbmQsIEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmVudGVyRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBF
dmVudDo6SXNDYW5jZWxhYmxlOjpObykpOworICAgICAgICAgICAgc2NoZWR1bGVFdmVudCgqZXZl
bnRUYXNrLnNlY29uZCwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXhpdEV2ZW50LCBFdmVu
dDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxFdmVudD4gZXZlbnQ7CiAgICAgICAgICAgICBpZiAo
ZXZlbnRUYXNrLmZpcnN0ID09IGV2ZW50VGFzay5zZWNvbmQtPnN0YXJ0TWVkaWFUaW1lKCkpCi0g
ICAgICAgICAgICAgICAgZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbnRlckV2
ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pOworICAg
ICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoKmV2ZW50VGFzay5zZWNvbmQsIEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLmVudGVyRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6
SXNDYW5jZWxhYmxlOjpObykpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGV2
ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXhpdEV2ZW50LCBFdmVudDo6Q2FuQnVi
YmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pOwotICAgICAgICAgICAgZXZlbnQtPnNl
dFRhcmdldChldmVudFRhc2suc2Vjb25kKTsKLSAgICAgICAgICAgIG1fYXN5bmNFdmVudFF1ZXVl
LT5lbnF1ZXVlRXZlbnQoV1RGTW92ZShldmVudCkpOworICAgICAgICAgICAgICAgIHNjaGVkdWxl
RXZlbnQoKmV2ZW50VGFzay5zZWNvbmQsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmV4aXRF
dmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTE4NzEsMTkgKzE4NzIsMTggQEAKICAgICAvLyAxNSAtIEZv
ciBlYWNoIHRleHQgdHJhY2sgaW4gYWZmZWN0ZWQgdHJhY2tzLCBpbiB0aGUgbGlzdCBvcmRlciwg
cXVldWUgYQogICAgIC8vIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBjdWVjaGFu
Z2UgYXQgdGhlIFRleHRUcmFjayBvYmplY3QsIGFuZCwgLi4uCiAgICAgZm9yIChhdXRvJiBhZmZl
Y3RlZFRyYWNrIDogYWZmZWN0ZWRUcmFja3MpIHsKLSAgICAgICAgYXV0byBldmVudCA9IEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmN1ZWNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpO
bywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pOwotICAgICAgICBldmVudC0+c2V0VGFyZ2V0KGFm
ZmVjdGVkVHJhY2spOwotICAgICAgICBtX2FzeW5jRXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KFdU
Rk1vdmUoZXZlbnQpKTsKKyAgICAgICAgYXN5bmNFdmVudEdyb3VwKCkucXVldWVUYXNrKFRhc2tT
b3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBbdHJhY2sgPSBtYWtlUmVmKCphZmZlY3RlZFRyYWNr
KV0geworICAgICAgICAgICAgdHJhY2stPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuY3VlY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXND
YW5jZWxhYmxlOjpObykpOworICAgICAgICB9KTsKIAogICAgICAgICAvLyAuLi4gaWYgdGhlIHRl
eHQgdHJhY2sgaGFzIGEgY29ycmVzcG9uZGluZyB0cmFjayBlbGVtZW50LCB0byB0aGVuIGZpcmUg
YQogICAgICAgICAvLyBzaW1wbGUgZXZlbnQgbmFtZWQgY3VlY2hhbmdlIGF0IHRoZSB0cmFjayBl
bGVtZW50IGFzIHdlbGwuCi0gICAgICAgIGlmIChpczxMb2FkYWJsZVRleHRUcmFjaz4oKmFmZmVj
dGVkVHJhY2spKSB7Ci0gICAgICAgICAgICBhdXRvIGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuY3VlY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXND
YW5jZWxhYmxlOjpObyk7Ci0gICAgICAgICAgICBhdXRvIHRyYWNrRWxlbWVudCA9IG1ha2VSZWZQ
dHIoZG93bmNhc3Q8TG9hZGFibGVUZXh0VHJhY2s+KCphZmZlY3RlZFRyYWNrKS50cmFja0VsZW1l
bnQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQodHJhY2tFbGVtZW50KTsKLSAgICAgICAgICAgIGV2
ZW50LT5zZXRUYXJnZXQodHJhY2tFbGVtZW50KTsKLSAgICAgICAgICAgIG1fYXN5bmNFdmVudFF1
ZXVlLT5lbnF1ZXVlRXZlbnQoV1RGTW92ZShldmVudCkpOwotICAgICAgICB9CisgICAgICAgIGlm
ICghaXM8TG9hZGFibGVUZXh0VHJhY2s+KCphZmZlY3RlZFRyYWNrKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGFzeW5jRXZlbnRHcm91cCgpLnF1ZXVlVGFzayhUYXNrU291cmNl
OjpNZWRpYUVsZW1lbnRFdmVudCwgW3RyYWNrRWxlbWVudCA9IG1ha2VSZWYoKmRvd25jYXN0PExv
YWRhYmxlVGV4dFRyYWNrPigqYWZmZWN0ZWRUcmFjaykudHJhY2tFbGVtZW50KCkpXSB7CisgICAg
ICAgICAgICB0cmFja0VsZW1lbnQtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuY3VlY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5j
ZWxhYmxlOjpObykpOworICAgICAgICB9KTsKICAgICB9CiAKICAgICAvLyAxNiAtIFNldCB0aGUg
dGV4dCB0cmFjayBjdWUgYWN0aXZlIGZsYWcgb2YgYWxsIHRoZSBjdWVzIGluIHRoZSBjdXJyZW50
CkBAIC0yMjIyLDcgKzIyMjIsNyBAQAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjYW5jZWxQZW5k
aW5nRXZlbnRzQW5kQ2FsbGJhY2tzKCkKIHsKICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsK
LSAgICBtX2FzeW5jRXZlbnRRdWV1ZS0+Y2FuY2VsQWxsRXZlbnRzKCk7CisgICAgYXN5bmNFdmVu
dEdyb3VwKCkuY2FuY2VsQWxsRXhpc3RpbmdUYXNrcygpOwogCiAgICAgZm9yIChhdXRvJiBzb3Vy
Y2UgOiBjaGlsZHJlbk9mVHlwZTxIVE1MU291cmNlRWxlbWVudD4oKnRoaXMpKQogICAgICAgICBz
b3VyY2UuY2FuY2VsUGVuZGluZ0Vycm9yRXZlbnQoKTsKQEAgLTI2MTYsOSArMjYxNiw3IEBACiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBhdXRvIGV2ZW50ID0gV2ViS2l0TWVk
aWFLZXlOZWVkZWRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRuZWVka2V5RXZlbnQs
IGluaXREYXRhKTsKLSAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIG1fYXN5bmNFdmVu
dFF1ZXVlLT5lbnF1ZXVlRXZlbnQoV1RGTW92ZShldmVudCkpOworICAgIHNjaGVkdWxlRXZlbnQo
V2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRuZWVk
a2V5RXZlbnQsIGluaXREYXRhKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI3NjUsNyAr
Mjc2Myw3IEBACiAgICAgLy8gICAgICBpbml0RGF0YVR5cGUgPSBpbml0RGF0YVR5cGUKICAgICAv
LyAgICAgIGluaXREYXRhID0gaW5pdERhdGEKICAgICBNZWRpYUVuY3J5cHRlZEV2ZW50SW5pdCBp
bml0aWFsaXplciB7IGluaXREYXRhVHlwZSwgV1RGTW92ZShpbml0RGF0YSkgfTsKLSAgICBtX2Fz
eW5jRXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KE1lZGlhRW5jcnlwdGVkRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkuZW5jcnlwdGVkRXZlbnQsIGluaXRpYWxpemVyLCBFdmVudDo6SXNUcnVzdGVk
OjpZZXMpKTsKKyAgICBzY2hlZHVsZUV2ZW50KE1lZGlhRW5jcnlwdGVkRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkuZW5jcnlwdGVkRXZlbnQsIGluaXRpYWxpemVyLCBFdmVudDo6SXNUcnVzdGVk
OjpZZXMpKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllcldhaXRpbmdG
b3JLZXlDaGFuZ2VkKCkKQEAgLTU3MTMsMTQgKzU3MTEsMTEgQEAKICAgICBtX3BsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyQmVoYXZpb3JSZXN0cmljdGlvbnNRdWV1ZS5jbG9zZSgpOwogICAgIG1fc2Vl
a1Rhc2tRdWV1ZS5jbG9zZSgpOwogICAgIG1fcmVzdW1lVGFza1F1ZXVlLmNsb3NlKCk7Ci0gICAg
bV9wcm9taXNlVGFza1F1ZXVlLmNsb3NlKCk7Ci0gICAgbV9wYXVzZUFmdGVyRGV0YWNoZWRUYXNr
UXVldWUuY2xvc2UoKTsKICAgICBtX3Jlc291cmNlU2VsZWN0aW9uVGFza1F1ZXVlLmNsb3NlKCk7
Ci0gICAgbV92aXNpYmlsaXR5Q2hhbmdlVGFza1F1ZXVlLmNsb3NlKCk7CiAjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKICAgICBtX2VuY3J5cHRlZE1lZGlhUXVldWUuY2xvc2UoKTsKICNlbmRp
ZgotICAgIG1fYXN5bmNFdmVudFF1ZXVlLT5jbG9zZSgpOworICAgIGFzeW5jRXZlbnRHcm91cCgp
LnN0b3BBbmREaXNjYXJkQWxsVGFza3MoKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IG1fdm9sdW1lUmV2ZXJ0VGFza1F1ZXVlLmNsb3NlKCk7CiAjZW5kaWYKQEAgLTU4MDAsNyArNTc5
NSw3IEBACiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gKGhhc0F1ZGlvKCkgJiYgaXNQbGF5aW5nKCkpIHx8IG1fYXN5bmNF
dmVudFF1ZXVlLT5oYXNQZW5kaW5nRXZlbnRzKCkgfHwgbV9jcmVhdGluZ0NvbnRyb2xzOworICAg
IHJldHVybiAoaGFzQXVkaW8oKSAmJiBpc1BsYXlpbmcoKSkgfHwgbV9jcmVhdGluZ0NvbnRyb2xz
IHx8IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7CiB9CiAKIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKQpAQCAtNTg3OCw3ICs1ODczLDgg
QEAKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRJc1BsYXlpbmdUb1dpcmVsZXNzVGFyZ2V0
KGJvb2wgaXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldCkKIHsKLSAgICBtX3BsYXliYWNrVGFyZ2V0
SXNXaXJlbGVzc1F1ZXVlLmVucXVldWVUYXNrKFt0aGlzLCBpc1BsYXlpbmdUb1dpcmVsZXNzVGFy
Z2V0XSB7CisgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIG5vdCBhIHBhcnQgb2YgdGhpcyBtZWRp
YSBlbGVtZW50J3MgdGFzayBncm91cD8KKyAgICBxdWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUo
KnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBbdGhpcywgaXNQbGF5aW5nVG9X
aXJlbGVzc1RhcmdldF0gewogICAgICAgICBpZiAoaXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldCA9
PSBtX2lzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIG1faXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldCA9IG1fcGxheWVyICYmIG1fcGxheWVyLT5p
c0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCk7CkBAIC01OTUxLDkgKzU5NDcsNyBAQAog
ewogICAgIGJvb2wgaGFzVGFyZ2V0cyA9IG1fbWVkaWFTZXNzaW9uLT5oYXNXaXJlbGVzc1BsYXli
YWNrVGFyZ2V0cygpOwogICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJoYXNUYXJnZXRzID0g
IiwgaGFzVGFyZ2V0cyk7Ci0gICAgYXV0byBldmVudCA9IFdlYktpdFBsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0cGxheWJhY2t0YXJnZXRh
dmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQsIGhhc1RhcmdldHMpOwotICAgIGV2ZW50LT5zZXRUYXJn
ZXQodGhpcyk7Ci0gICAgbV9hc3luY0V2ZW50UXVldWUtPmVucXVldWVFdmVudChXVEZNb3ZlKGV2
ZW50KSk7CisgICAgc2NoZWR1bGVFdmVudChXZWJLaXRQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmls
aXR5Y2hhbmdlZEV2ZW50LCBoYXNUYXJnZXRzKSk7CiAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0
YXRlKCk7CiB9CiAKQEAgLTYwNzAsNyArNjA2NCw3IEBACiAgICAgfQogI2VuZGlmCiAKLSAgICBt
X2Z1bGxzY3JlZW5UYXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXMsIG1vZGVdIHsKKyAgICBxdWV1
ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudEV2
ZW50LCBbdGhpcywgbW9kZV0gewogICAgICAgICBpZiAoZG9jdW1lbnQoKS5oaWRkZW4oKSkgewog
ICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiICByZXR1cm5pbmcgYmVjYXVz
ZSBkb2N1bWVudCBpcyBoaWRkZW4iKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTgwMzksNyAr
ODAzMyw3IEBACiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6aXNWaXNpYmxlSW5WaWV3cG9ydENo
YW5nZWQoKQogewotICAgIG1fdmlzaWJpbGl0eUNoYW5nZVRhc2tRdWV1ZS5lbnF1ZXVlVGFzayhb
dGhpc10geworICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJj
ZTo6TWVkaWFFbGVtZW50RXZlbnQsIFt0aGlzXSB7CiAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5p
c1Zpc2libGVJblZpZXdwb3J0Q2hhbmdlZCgpOwogICAgICAgICB1cGRhdGVTaG91bGRBdXRvcGxh
eSgpOwogICAgICAgICBzY2hlZHVsZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVXBkYXRlKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkocmV2aXNpb24gMjUyMjIx
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgwLDYgKzgwLDcgQEAKIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKIGNsYXNzIERlZmVy
cmVkUHJvbWlzZTsKIGNsYXNzIEV2ZW50OworY2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOwogY2xh
c3MgSFRNTFNvdXJjZUVsZW1lbnQ7CiBjbGFzcyBIVE1MVHJhY2tFbGVtZW50OwogY2xhc3MgSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZTsKQEAgLTU3OSw5ICs1ODAsNyBAQAogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZGlkQmVjb21lRnVsbHNjcmVlbkVsZW1lbnQoKSBvdmVycmlkZTsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHdpbGxFeGl0RnVsbHNjcmVlbigpOwogCi0jaWYgRU5BQkxFKFBJQ1RV
UkVfSU5fUElDVFVSRV9BUEkpCiAgICAgdm9pZCBzY2hlZHVsZUV2ZW50KFJlZjxFdmVudD4mJik7
Ci0jZW5kaWYKIAogICAgIGVudW0gY2xhc3MgQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGUgeyBO
b25lLCBQcmV2ZW50ZWRBdXRvcGxheSwgU3RhcnRlZFdpdGhVc2VyR2VzdHVyZSwgU3RhcnRlZFdp
dGhvdXRVc2VyR2VzdHVyZSB9OwogCkBAIC02MjgsNiArNjI3LDggQEAKICAgICB2b2lkIHNjaGVk
dWxlRXZlbnQoY29uc3QgQXRvbVN0cmluZyYpOwogCiBwcml2YXRlOgorICAgIEV2ZW50TG9vcFRh
c2tHcm91cCYgYXN5bmNFdmVudEdyb3VwKCk7CisKICAgICB2b2lkIGNyZWF0ZU1lZGlhUGxheWVy
KCk7CiAKICAgICBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdCBvdmVycmlkZTsKQEAgLTk1Nyw3
ICs5NTgsNyBAQAogICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKSBmaW5hbDsK
IAogICAgIHZvaWQgc2V0SW5BY3RpdmVEb2N1bWVudChib29sKTsKLQorICAgIAogI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAogICAgIGNvbnN0IHZvaWQqIG1lZGlhUGxheWVyTG9nSWRlbnRpZmll
cigpIGZpbmFsIHsgcmV0dXJuIGxvZ0lkZW50aWZpZXIoKTsgfQogICAgIGNvbnN0IExvZ2dlciYg
bWVkaWFQbGF5ZXJMb2dnZXIoKSBmaW5hbCB7IHJldHVybiBsb2dnZXIoKTsgfQpAQCAtOTc2LDE0
ICs5NzcsMTAgQEAKICAgICBEZWZlcnJhYmxlVGFzazxUaW1lcj4gbV9yZXN1bWVUYXNrUXVldWU7
CiAgICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+IG1fc2Vla1Rhc2tRdWV1ZTsKICAgICBEZWZlcnJh
YmxlVGFzazxUaW1lcj4gbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rp
b25zUXVldWU7Ci0gICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV9wcm9taXNlVGFza1F1ZXVl
OwotICAgIEdlbmVyaWNUYXNrUXVldWU8VGltZXI+IG1fcGF1c2VBZnRlckRldGFjaGVkVGFza1F1
ZXVlOwogICAgIEdlbmVyaWNUYXNrUXVldWU8VGltZXI+IG1fcmVzb3VyY2VTZWxlY3Rpb25UYXNr
UXVldWU7Ci0gICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV92aXNpYmlsaXR5Q2hhbmdlVGFz
a1F1ZXVlOwotICAgIEdlbmVyaWNUYXNrUXVldWU8VGltZXI+IG1fZnVsbHNjcmVlblRhc2tRdWV1
ZTsKLSAgICBHZW5lcmljVGFza1F1ZXVlPFRpbWVyPiBtX3BsYXliYWNrVGFyZ2V0SXNXaXJlbGVz
c1F1ZXVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrR3JvdXA+IG1fYXN5bmNF
dmVudEdyb3VwOworICAgIAogICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBtX3BsYXllZFRpbWVSYW5n
ZXM7Ci0gICAgVW5pcXVlUmVmPE1haW5UaHJlYWRHZW5lcmljRXZlbnRRdWV1ZT4gbV9hc3luY0V2
ZW50UXVldWU7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBEZWZlcnJhYmxlVGFzazxU
aW1lcj4gbV92b2x1bWVSZXZlcnRUYXNrUXVldWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmNwcAkocmV2aXNpb24gMjUyMjIxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiVHJhY2tMaXN0QmFzZS5oIgogCisjaW5j
bHVkZSAiQWJzdHJhY3RFdmVudExvb3AuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKQEAgLTQyLDcgKzQzLDYgQEAKIFRyYWNrTGlzdEJhc2U6OlRyYWNrTGlzdEJhc2UoSFRN
TE1lZGlhRWxlbWVudCogZWxlbWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
ICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0KQogICAgICwgbV9lbGVtZW50KGVsZW1lbnQp
Ci0gICAgLCBtX2FzeW5jRXZlbnRRdWV1ZShNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU6OmNy
ZWF0ZSgqdGhpcykpCiB7CiAgICAgQVNTRVJUKCFjb250ZXh0IHx8IGlzPERvY3VtZW50Pihjb250
ZXh0KSk7CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CkBAIC05OCw3ICs5OCw5IEBACiAKIHZvaWQg
VHJhY2tMaXN0QmFzZTo6c2NoZWR1bGVUcmFja0V2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50
TmFtZSwgUmVmPFRyYWNrQmFzZT4mJiB0cmFjaykKIHsKLSAgICBtX2FzeW5jRXZlbnRRdWV1ZS0+
ZW5xdWV1ZUV2ZW50KFRyYWNrRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIEV2ZW50OjpDYW5CdWJi
bGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObywgV1RGTW92ZSh0cmFjaykpKTsKKyAgICBp
ZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hF
dmVudCgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50RXZlbnQsIFRyYWNrRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWUsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxl
OjpObywgV1RGTW92ZSh0cmFjaykpKTsKIH0KIAogdm9pZCBUcmFja0xpc3RCYXNlOjpzY2hlZHVs
ZUFkZFRyYWNrRXZlbnQoUmVmPFRyYWNrQmFzZT4mJiB0cmFjaykKQEAgLTE2MSwxNCArMTYzLDE2
IEBACiAgICAgLy8gV2hlbmV2ZXIgYSB0cmFjayBpbiBhIFZpZGVvVHJhY2tMaXN0IHRoYXQgd2Fz
IHByZXZpb3VzbHkgbm90IHNlbGVjdGVkIGlzCiAgICAgLy8gc2VsZWN0ZWQsIHRoZSB1c2VyIGFn
ZW50IG11c3QgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQKICAgICAv
LyBjaGFuZ2UgYXQgdGhlIFZpZGVvVHJhY2tMaXN0IG9iamVjdC4KLSAgICBtX2FzeW5jRXZlbnRR
dWV1ZS0+ZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50
LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKyAgICBp
ZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgICsrbV9wZW5kaW5nQ2hhbmdlRXZl
bnRDb3VudDsKKyAgICBxdWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3Vy
Y2U6Ok1lZGlhRWxlbWVudEV2ZW50LCBbdGhpc10geworICAgICAgICBkaXNwYXRjaEV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpO
bywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKyAgICAgICAgQVNTRVJUKG1fcGVuZGluZ0No
YW5nZUV2ZW50Q291bnQpOworICAgICAgICAtLW1fcGVuZGluZ0NoYW5nZUV2ZW50Q291bnQ7Cisg
ICAgfSk7CiB9CiAKLWJvb2wgVHJhY2tMaXN0QmFzZTo6aXNDaGFuZ2VFdmVudFNjaGVkdWxlZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYXN5bmNFdmVudFF1ZXVlLT5oYXNQZW5kaW5nRXZlbnRz
T2ZUeXBlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCk7Ci19Ci0KIGJvb2wgVHJhY2tMaXN0QmFz
ZTo6aXNBbnlUcmFja0VuYWJsZWQoKSBjb25zdAogewogICAgIGZvciAoYXV0byYgdHJhY2sgOiBt
X2luYmFuZFRyYWNrcykgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xp
c3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xp
c3RCYXNlLmgJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VHJhY2tMaXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1
ZGUgIkdlbmVyaWNFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTYwLDcgKzU5LDcgQEAKIAogICAgIC8vIE5lZWRz
IHRvIGJlIHB1YmxpYyBzbyB0cmFja3MgY2FuIGNhbGwgaXQKICAgICB2b2lkIHNjaGVkdWxlQ2hh
bmdlRXZlbnQoKTsKLSAgICBib29sIGlzQ2hhbmdlRXZlbnRTY2hlZHVsZWQoKSBjb25zdDsKKyAg
ICBib29sIGlzQ2hhbmdlRXZlbnRTY2hlZHVsZWQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdD
aGFuZ2VFdmVudENvdW50OyB9CiAKICAgICBib29sIGlzQW55VHJhY2tFbmFibGVkKCkgY29uc3Q7
CiAKQEAgLTgwLDggKzc5LDcgQEAKICAgICB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7
IGRlcmVmKCk7IH0KIAogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1fZWxlbWVudDsKLQotICAgIFVu
aXF1ZVJlZjxNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU+IG1fYXN5bmNFdmVudFF1ZXVlOwor
ICAgIHVuc2lnbmVkIG1fcGVuZGluZ0NoYW5nZUV2ZW50Q291bnQgeyAwIH07CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2ODQsNyArNDY4NCw3IEBACiAgICAgZWxzZQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAotICAgIGNvbnRleHQu
ZXZlbnRMb29wKCkucXVldWVUYXNrKHNvdXJjZSwgY29udGV4dCwgW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKCkgeworICAgIGNvbnRleHQuZXZlbnRMb29wKCkucXVldWVUYXNrKHNvdXJj
ZSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgewogICAgICAgICBjYWxsYmFjay0+
aGFuZGxlRXZlbnQoKTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJFdmVudExvb3AuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyRXZlbnRMb29wLmNwcAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJFdmVudExvb3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNiArNDks
NiBAQAogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogfQogCi12b2lkIFdvcmtlckV2ZW50TG9vcDo6
cXVldWVUYXNrKFRhc2tTb3VyY2Ugc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBUYXNrRnVuY3Rpb24mJiBmdW5jdGlvbikKLXsKLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQs
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSAmY29udGV4dCk7Ci0gICAgbV90YXNrcy5hcHBl
bmQoeyBzb3VyY2UsIFdURk1vdmUoZnVuY3Rpb24pIH0pOwotICAgIHNjaGVkdWxlVG9SdW5JZk5l
ZWRlZCgpOwotfQotCiBjb25zdCBjaGFyKiBXb3JrZXJFdmVudExvb3A6OmFjdGl2ZURPTU9iamVj
dE5hbWUoKSBjb25zdAogewogICAgIHJldHVybiAiV29ya2VyRXZlbnRMb29wIjsKQEAgLTc2LDMy
ICs2NiwxNiBAQAogCiB2b2lkIFdvcmtlckV2ZW50TG9vcDo6c3RvcCgpCiB7Ci0gICAgbV90YXNr
cy5jbGVhcigpOworICAgIGNsZWFyQWxsVGFza3MoKTsKIH0KIAotdm9pZCBXb3JrZXJFdmVudExv
b3A6OnNjaGVkdWxlVG9SdW5JZk5lZWRlZCgpCit2b2lkIFdvcmtlckV2ZW50TG9vcDo6c2NoZWR1
bGVUb1J1bigpCiB7Ci0gICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0gICAgaWYgKG1faXNTY2hlZHVsZWRUb1J1biB8fCBt
X3Rhc2tzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1NjaGVkdWxlZFRv
UnVuID0gdHJ1ZTsKLSAgICBjb250ZXh0LT5wb3N0VGFzayhbZXZlbnRMb29wID0gbWFrZVJlZigq
dGhpcyldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewotICAgICAgICBldmVudExvb3AtPm1f
aXNTY2hlZHVsZWRUb1J1biA9IGZhbHNlOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soW2V2ZW50TG9v
cCA9IG1ha2VSZWYoKnRoaXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAg
ZXZlbnRMb29wLT5ydW4oKTsKICAgICB9KTsKIH0KIAotdm9pZCBXb3JrZXJFdmVudExvb3A6OnJ1
bigpCi17Ci0gICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAg
ICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSB8
fCBjb250ZXh0LT5hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBhdXRvIHRhc2tzID0gc3RkOjpleGNoYW5nZShtX3Rhc2tzLCBWZWN0b3I8VGFzaz4o
KSk7Ci0gICAgZm9yIChhdXRvJiB0YXNrIDogdGFza3MpCi0gICAgICAgIHRhc2sudGFzaygpOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyRXZlbnRMb29wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJFdmVudExvb3AuaAkocmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJFdmVudExvb3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDEw
IEBACiAgICAgc3RhdGljIFJlZjxXb3JrZXJFdmVudExvb3A+IGNyZWF0ZShXb3JrbGV0R2xvYmFs
U2NvcGUmKTsKICNlbmRpZgogCi0gICAgdm9pZCBxdWV1ZVRhc2soVGFza1NvdXJjZSwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIFRhc2tGdW5jdGlvbiYmKSBvdmVycmlkZTsKLQogcHJpdmF0ZToK
ICAgICBleHBsaWNpdCBXb3JrZXJFdmVudExvb3AoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwog
Ci0gICAgdm9pZCBzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKLSAgICB2b2lkIHJ1bigpOworICAg
IHZvaWQgc2NoZWR1bGVUb1J1bigpIGZpbmFsOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0Owog
ICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKQEAg
LTU1LDE0ICs1Miw2IEBACiAgICAgdm9pZCBzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pIG92
ZXJyaWRlOwogICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdG9wKCkgb3Zl
cnJpZGU7Ci0KLSAgICBzdHJ1Y3QgVGFzayB7Ci0gICAgICAgIFRhc2tTb3VyY2Ugc291cmNlOwot
ICAgICAgICBUYXNrRnVuY3Rpb24gdGFzazsKLSAgICB9OwotCi0gICAgVmVjdG9yPFRhc2s+IG1f
dGFza3M7Ci0gICAgYm9vbCBtX2lzU2NoZWR1bGVkVG9SdW4geyBmYWxzZSB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJH
bG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTIgKzEw
NSwxNSBAQAogICAgIHRocmVhZCgpLndvcmtlclJlcG9ydGluZ1Byb3h5KCkud29ya2VyR2xvYmFs
U2NvcGVEZXN0cm95ZWQoKTsKIH0KIAotQWJzdHJhY3RFdmVudExvb3AmIFdvcmtlckdsb2JhbFNj
b3BlOjpldmVudExvb3AoKQorRXZlbnRMb29wVGFza0dyb3VwJiBXb3JrZXJHbG9iYWxTY29wZTo6
ZXZlbnRMb29wKCkKIHsKICAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGlmICgh
bV9ldmVudExvb3ApCisgICAgaWYgKFVOTElLRUxZKCFtX2RlZmF1bHRUYXNrR3JvdXApKSB7CiAg
ICAgICAgIG1fZXZlbnRMb29wID0gV29ya2VyRXZlbnRMb29wOjpjcmVhdGUoKnRoaXMpOwotICAg
IHJldHVybiAqbV9ldmVudExvb3A7CisgICAgICAgIG1fZGVmYXVsdFRhc2tHcm91cCA9IG1ha2VV
bmlxdWU8RXZlbnRMb29wVGFza0dyb3VwPigpOworICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAt
PnN0YXJ0UnVubmluZygqbV9ldmVudExvb3ApOworICAgIH0KKyAgICByZXR1cm4gKm1fZGVmYXVs
dFRhc2tHcm91cDsKIH0KIAogU3RyaW5nIFdvcmtlckdsb2JhbFNjb3BlOjpvcmlnaW4oKSBjb25z
dApAQCAtMTI1LDYgKzEyOCw4IEBACiAgICAgc3RvcEluZGV4ZWREYXRhYmFzZSgpOwogI2VuZGlm
CiAKKyAgICBpZiAobV9kZWZhdWx0VGFza0dyb3VwKQorICAgICAgICBtX2RlZmF1bHRUYXNrR3Jv
dXAtPnN0b3BBbmREaXNjYXJkQWxsVGFza3MoKTsKICAgICBzdG9wQWN0aXZlRE9NT2JqZWN0cygp
OwogCiAgICAgaWYgKG1fY2FjaGVTdG9yYWdlQ29ubmVjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgJKHJldmlzaW9uIDI1MjIyMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNyArNjcsNyBAQAogICAgIHZpcnR1YWwgYm9vbCBpc0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgQWJz
dHJhY3RFdmVudExvb3AmIGV2ZW50TG9vcCgpIGZpbmFsOworICAgIEV2ZW50TG9vcFRhc2tHcm91
cCYgZXZlbnRMb29wKCkgZmluYWw7CiAKICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fdXJsOyB9CiAgICAgU3RyaW5nIG9yaWdpbigpIGNvbnN0IGZpbmFsOwpAQCAt
MTk4LDYgKzE5OCw3IEBACiAgICAgYm9vbCBtX3Nob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRT
ZWN1cml0eVBvbGljeTsKIAogICAgIFJlZlB0cjxXb3JrZXJFdmVudExvb3A+IG1fZXZlbnRMb29w
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrR3JvdXA+IG1fZGVmYXVsdFRhc2tH
cm91cDsKIAogICAgIG11dGFibGUgV29ya2VyRXZlbnRRdWV1ZSBtX2V2ZW50UXVldWU7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xldEdsb2JhbFNjb3BlLmNwcAko
cmV2aXNpb24gMjUyMjIxKQorKysgU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xldEdsb2Jh
bFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTEgKzkwLDE0IEBACiAgICAgcmV0dXJu
IHNjb3BlczsKIH0KIAotQWJzdHJhY3RFdmVudExvb3AmIFdvcmtsZXRHbG9iYWxTY29wZTo6ZXZl
bnRMb29wKCkKK0V2ZW50TG9vcFRhc2tHcm91cCYgV29ya2xldEdsb2JhbFNjb3BlOjpldmVudExv
b3AoKQogewotICAgIGlmICghbV9ldmVudExvb3ApCisgICAgaWYgKFVOTElLRUxZKCFtX2RlZmF1
bHRUYXNrR3JvdXApKSB7CiAgICAgICAgIG1fZXZlbnRMb29wID0gV29ya2VyRXZlbnRMb29wOjpj
cmVhdGUoKnRoaXMpOwotICAgIHJldHVybiAqbV9ldmVudExvb3A7CisgICAgICAgIG1fZGVmYXVs
dFRhc2tHcm91cCA9IG1ha2VVbmlxdWU8RXZlbnRMb29wVGFza0dyb3VwPigpOworICAgICAgICBt
X2RlZmF1bHRUYXNrR3JvdXAtPnN0YXJ0UnVubmluZygqbV9ldmVudExvb3ApOworICAgIH0KKyAg
ICByZXR1cm4gKm1fZGVmYXVsdFRhc2tHcm91cDsKIH0KIAogU3RyaW5nIFdvcmtsZXRHbG9iYWxT
Y29wZTo6b3JpZ2luKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmts
ZXRHbG9iYWxTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dv
cmtsZXRHbG9iYWxTY29wZS5oCShyZXZpc2lvbiAyNTIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS93
b3JrbGV0cy9Xb3JrbGV0R2xvYmFsU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAs
NyBAQAogCiAgICAgdmlydHVhbCBib29sIGlzUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgQWJzdHJhY3RFdmVudExvb3AmIGV2ZW50TG9vcCgp
IGZpbmFsOworICAgIEV2ZW50TG9vcFRhc2tHcm91cCYgZXZlbnRMb29wKCkgZmluYWw7CiAKICAg
ICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY29kZS51cmwoKTsgfQog
ICAgIFN0cmluZyBvcmlnaW4oKSBjb25zdCBmaW5hbDsKQEAgLTEzNSw2ICsxMzUsNyBAQAogICAg
IFJlZjxTZWN1cml0eU9yaWdpbj4gbV90b3BPcmlnaW47CiAKICAgICBSZWZQdHI8V29ya2VyRXZl
bnRMb29wPiBtX2V2ZW50TG9vcDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFza0dy
b3VwPiBtX2RlZmF1bHRUYXNrR3JvdXA7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgaW1w
bGVtZW50ZWQgcHJvcGVybHksIGl0IGp1c3Qgc2F0aXNmaWVzIHRoZSBjb21waWxlci4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMTM2Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>