<?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>131280</bug_id>
          
          <creation_ts>2014-04-06 10:57:36 -0700</creation_ts>
          <short_desc>Rework CSS calc logic, fixing some reference count mistakes in Length</short_desc>
          <delta_ts>2015-12-08 14:07:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>998016</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-06 10:57:36 -0700</bug_when>
    <thetext>Rework calculation logic, fixing some reference count mistakes in Length</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998018</commentid>
    <comment_count>1</comment_count>
      <attachid>228701</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-06 11:29:14 -0700</bug_when>
    <thetext>Created attachment 228701
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998019</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-06 11:33:36 -0700</bug_when>
    <thetext>The following commit in Blink drew my attention to the problems in Length:

http://src.chromium.org/viewvc/blink?view=revision&amp;revision=170739

That fixes one particular reference counting problem, but not the other I found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998031</commentid>
    <comment_count>3</comment_count>
      <attachid>228701</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-04-06 14:43:32 -0700</bug_when>
    <thetext>Comment on attachment 228701
Patch

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

r=me

&gt; Source/WebCore/css/CSSCalculationValue.h:94
&gt; +    PassRef&lt;CalculationValue&gt; toCalcValue(const RenderStyle* currentStyle, const RenderStyle* rootStyle, double zoom = 1.0) const;

This name seems a bit evil, since doing someValue-&gt;toCalcValue().get().something(); would leak and assert.

&gt; Source/WebCore/platform/Length.h:411
&gt; +// FIXME: Is it really valuable to inline this?

I wonder if the compiler even bothers.

&gt; Source/WebCore/rendering/style/RenderStyle.cpp:1357
&gt;      case Auto:
&gt;          fontWordSpacing = 0;
&gt; -        FALLTHROUGH;
&gt; +        break;

Huh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998045</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-06 17:17:02 -0700</bug_when>
    <thetext>Committed r166860: &lt;http://trac.webkit.org/changeset/166860&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998093</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-04-07 00:18:26 -0700</bug_when>
    <thetext>It looks like this is causing crashes on the debug bots: http://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK2%20(Tests)/r166860%20(3814)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998205</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-07 12:34:34 -0700</bug_when>
    <thetext>This patch introduced some test failures due to the new assertions triggering. Could you please take a look at them?

For example, see the four crash logs in &lt;http://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK2%20(Tests)/r166860%20(3814)/results.html&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998249</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-07 14:54:17 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; This patch introduced some test failures due to the new assertions triggering. Could you please take a look at them?
&gt; 
&gt; For example, see the four crash logs in &lt;http://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK2%20(Tests)/r166860%20(3814)/results.html&gt;.

Please remove the new assertions that are triggering. I have no doubt that they are showing us real pre-existing bugs, but they were not firing on my local machine, or I would have held off on adding them until the problems were fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998250</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-07 15:00:32 -0700</bug_when>
    <thetext>Darn it, it looks like only one or two of the failures is due to a new assertion. The other failure seems to be due to hash table related assertions caused by the new code and I have no idea what the root cause is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998273</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-07 16:08:17 -0700</bug_when>
    <thetext>There seems to be some dependency on prior tests. For example, running the test &quot;fast/shapes/shape-outside-floats/shape-outside-boxes-001.html&quot; by itself does not generate the crash due to a missing hash table.

However, if you run the &quot;fast/shapes/shape-outside-floats/shape-outside-animation.html&quot; first, then you will encounter the error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998438</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-07 22:41:56 -0700</bug_when>
    <thetext>A fix for the isCalculated() assertion is in bug 131346.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998440</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-07 22:56:53 -0700</bug_when>
    <thetext>Now, fixes for all the assertions are in the patch attached to bug 131346.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999452</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-09 23:39:00 -0700</bug_when>
    <thetext>One test is still crashing with this assertion, filed bug 131480.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147459</commentid>
    <comment_count>13</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-12-08 13:56:40 -0800</bug_when>
    <thetext>Part of the fix for CVE-2014-4410.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228701</attachid>
            <date>2014-04-06 11:29:14 -0700</date>
            <delta_ts>2014-04-06 14:43:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131280-20140406112856.patch</filename>
            <type>text/plain</type>
            <size>119020</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2ODQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhkYzM3MWYzYmIxZDAx
ZWRlNWZhNWFiZmRjODM3YWQ2ZmRkNGQ3OC4uYzNmODY2N2I1MmNhZjhmOWRiNWUwZWE2YjJkY2Mw
OGEzZTc4Njg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxNC0wNC0wNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNhbGN1bGF0aW9u
IGxvZ2ljLCBmaXhpbmcgc29tZSByZWZlcmVuY2UgY291bnQgbWlzdGFrZXMgaW4gTGVuZ3RoCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzEyODAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdW5pdCB0
ZXN0IGluIFRlc3RXZWJLaXRBUEkuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgY2xhc3NlcyByZWxh
dGVkIHRvIENTUyAiY2FsYyIgdG8gbWFrZSB0aGUgY29kZSBhIGJpdCBlYXNpZXIgdG8gcmVhZCBi
eQorICAgICAgICBtb3ZpbmcgY29kZSBvdXQgb2YgY2xhc3MgZGVmaW5pdGlvbnMuIEFsc28gdXNl
ZCBmaW5hbCBzb21lIG1vcmUsIG1hZGUgbW9yZSB0aGluZ3MgcHJpdmF0ZSwKKyAgICAgICAgdXNl
ZCByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMsIGFuZCBvdGhlciBzdWNoIGNoYW5nZXMu
IEJpZ2dlc3QgY2hhbmdlLCB0aG91Z2gsIGlzIHRvCisgICAgICAgIExlbmd0aCwgd2hpY2ggaGFk
IGEgYnJva2VuIHN5c3RlbSBmb3IgbWFuYWdpbmcgcmVmZXJlbmNlIGNvdW50ZWQgY2FsY3VsYXRl
ZCBvYmplY3RzLgorICAgICAgICBUaGVyZSB3ZXJlIG11bHRpcGxlIGJ1Z3MgaW5jbHVkaW5nIGEg
YmFzaWMgZGVzaWduIG1pc3Rha2Ugb2Ygbm90IGhhdmluZyBhIHJlZmVyZW5jZSBjb3VudAorICAg
ICAgICBhbmQgdHJ5aW5nIHRvIHVzZSB0aGUgcmVmZXJlbmNlIGNvdW50IGluIHRoZSBvYmplY3Qg
aXRzZWxmLiBGaXhlZCBhbmQgY292ZXJlZCBieSB0aGUgdW5pdAorICAgICAgICB0ZXN0IG5vdzsg
dGVzdCBmb3VuZCBtdWx0aXBsZSBwcm9ibGVtcyBpbiBib3RoIHRoZSBvbGQgYW5kIG5ldyBpbXBs
ZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogVXBkYXRlZCBleHBvcnRz
LCBpbmNsdWRpbmcgc3ltYm9scyB0byBtYWtlIHRoZSB1bml0IHRlc3QgcHJhY3RpY2FsLgorCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBNYWRlIENhbGN1bGF0
aW9uVmFsdWUuaCBhIFByaXZhdGUgZmlsZSBzbyBpdCBjYW4KKyAgICAgICAgYmUgdXNlZCBpbiBh
IHVuaXQgdGVzdC4gQWxzbyBsZXQgWGNvZGUgdXBkYXRlIHRoZSBmaWxlIHR5cGUgZm9yIGEgZ3Bl
cmYgZmlsZS4KKworICAgICAgICAqIGNzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6ZXF1YWxzKTogVXBkYXRlZCBzaW5jZSBtX2V4cHJl
c3Npb24gaXMgYSBSZWYgbm93LgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjbGFt
cFRvUGVybWl0dGVkUmFuZ2UpOiBNYXJrZWQgaW5saW5lIGFuZCB1cGRhdGVkIGZvciBkYXRhIG1l
bWJlcgorICAgICAgICBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OmlzSW50ZWdlclJl
c3VsdCk6IENoYW5nZWQgYXJndW1lbnQgb3JkZXIgdG8gcHV0IHRoZSBvcGVyYXRvciBmaXJzdCBh
bmQgdXNlCisgICAgICAgIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycy4gQWxzbyBtYXJr
ZWQgaW5saW5lLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQmxlbmRIYWxmKTogQWRkZWQuIEhl
bHBlciB0byBtYWtlIHRoZSBvdGhlciBmdW5jdGlvbnMgbW9yZSByZWFkYWJsZS4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUV4cHJlc3Npb25Ob2RlKTogTWFkZSBub24tbWVtYmVyIGZ1bmN0aW9u
IHByaXZhdGUgdG8gdGhpcyBmaWxlLiBBbHNvIG1hZGUKKyAgICAgICAgbWFueSBzbWFsbCBpbXBy
b3ZlbWVudHMuCisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNyZWF0ZSk6IFVwZGF0
ZWQgc28gYm90aCBvZiB0aGVzZSBjYWxsIHRoZSBzYW1lIGNvbnN0cnVjdG9yLgorCisgICAgICAg
ICogY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaDogQ3V0IGRvd24gQ1NTQ2FsY1ZhbHVlIGNsYXNz
IGJ5IG1ha2luZyBtb3JlIHRoaW5ncyBwcml2YXRlCisgICAgICAgIGFuZCBkZWxldGluZyB1bm5l
ZWRlZCB0aGluZ3MuIEFsc28gdXNlIFJlZiBpbnN0ZWFkIG9mIFJlZlB0ci4KKworICAgICAgICAq
IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0UG9zaXRpb25PZmZzZXRWYWx1ZSk6IFVzZSBpc0ZpeGVkIGZ1bmN0aW9uIGluc3RlYWQgb2Yg
dHlwZSBmdW5jdGlvbi4KKworICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKTogVXBkYXRlZCBjb2Rl
IHNpbmNlIHRvQ2FsY1ZhbHVlIG5vdyByZXR1cm5zIFBhc3NSZWYKKyAgICAgICAgaW5zdGVhZCBv
ZiBQYXNzUmVmUHRyLiBVbmZvcnR1bmF0ZWx5IHRoZSBuZXcgY29kZSBpcyBhIGJpdCBtb3JlIHZl
cmJvc2UuCisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkZyb21WYWx1ZSk6IERpdHRvLgorCisg
ICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnBhcnNlQ2FsY3VsYXRpb24pOgorCisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1
ZSk6IFVwZGF0ZWQgdG8gcGFzcyByZWZlcmVuY2UgcmF0aGVyIHRoYW4gcG9pbnRlci4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjppbml0KTogRGl0dG8uCisKKyAgICAgICAg
KiBjc3MvQ1NTVG9TdHlsZU1hcC5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YgTGVuZ3Ro
Qm94LmguCisKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TGVuZ3RoOjphcHBseVZhbHVlKTogVXBkYXRlZCBm
b3IgZnVuY3Rpb24gbmFtZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Qm9yZGVyUmFkaXVzOjphcHBseVZhbHVlKTogUmVtb3ZlZCBleHRyYSBwYXJlbnRoZXNlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlWYWx1ZSk6IERpdHRv
LiBBbHNvIHVwZGF0ZWQgc2luY2UgdG9DYWxjVmFsdWUgcmV0dXJucyBSZWYuCisKKyAgICAgICAg
KiBjc3MvTGVuZ3RoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZsb2F0VmFsdWVG
b3JMZW5ndGgpOiBVcGRhdGVkIHRvIGNhbGwgdmFsdWUgaW5zdGVhZCBvZiBnZXRGbG9hdFZhbHVl
OyBib3RoIGFyZSB0aGUgc2FtZS4KKworICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmFkZEludHJpbnNpY01hcmdpbnMpOiBVcGRhdGVkIGZvciBmdW5j
dGlvbiBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFk
dGgpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKTogQ2hhbmdlZCB0byBy
ZXR1cm4gUGFzc1JlZi4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTnVtYmVyOjpl
dmFsdWF0ZSk6IE1vdmVkIHRoaXMgZnVuY3Rpb24gb3V0IG9mIHRoZSBoZWFkZXIsIHNpbmNlIGl0
J3MKKyAgICAgICAgdmlydHVhbCBhbmQgbm90IHJlYWxseSBnb2luZyB0byBiZSBpbmxpbmVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OdW1iZXI6Om9wZXJhdG9yPT0pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGN1bGF0aW9uVmFsdWU6OmV2YWx1YXRlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbkJpbmFyeU9wZXJhdGlvbjo6b3BlcmF0
b3I9PSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25MZW5ndGg6OmV2
YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbkxlbmd0aDo6
b3BlcmF0b3I9PSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25CbGVu
ZExlbmd0aDo6ZXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNz
aW9uQmxlbmRMZW5ndGg6Om9wZXJhdG9yPT0pOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3Jt
L0NhbGN1bGF0aW9uVmFsdWUuaDogTW92ZWQgbW9zdCBmdW5jdGlvbnMgb3V0IG9mIHRoZSBjbGFz
cyBib2RpZXMgc28gdGhlIGNsYXNzZXMgYXJlCisgICAgICAgIGVhc2llciB0byBzZWUuIE1hZGUg
YWxsIHRoZSA9PSBvcGVyYXRvciBmdW5jdGlvbnMgbm9uLW1lbWJlciBvbmVzIGV4Y2VwdCBmb3Ig
dGhlIHBvbHltb3JwaGljCisgICAgICAgIG9uZSBmcm9tIHRoZSBiYXNlIGNsYXNzLiBDaGFuZ2Vk
IHRoZSBjYXN0aW5nIGZ1bmN0aW9ucyB0byB3b3JrIG9uIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBw
b2ludGVycy4KKyAgICAgICAgVHdlYWtlZCBuYW1lIG9mIHNvbWUgbWVtYmVycy4KKworICAgICAg
ICAqIHBsYXRmb3JtL0xlbmd0aC5jcHA6IFJld29ya2VkIHRoZSBDYWxjdWxhdGlvblZhbHVlTWFw
IChmb3JtZXJseSBDYWxjdWxhdGlvblZhbHVlSGFuZGxlTWFwKSB0bworICAgICAgICB1c2UgdW5z
aWduZWQgaW5zdGVhZCBvZiBpbnQsIGFuZCBzdG9yZSByZWZlcmVuY2UgY291bnRzIGluIHRoZSBt
YXAgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIHNoYXJlIHRoZQorICAgICAgICByZWZlcmVuY2UgY291
bnQgb2YgdGhlIHVuZGVybHlpbmcgQ2FsY3VsYXRpb25WYWx1ZSBvYmplY3QsIHdoaWNoIGNhbiBs
ZWFkIHRvIHN0b3JhZ2UgbGVha3Mgd2hlcmUKKyAgICAgICAgaGFuZGxlcyBlbmQgdXAgaW4gdGhl
IG1hcCBwZXJtYW5lbnRseS4KKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0aW9uVmFsdWVzKTog
VXNlIE5ldmVyRGVzdHJveWVkIGluc3RlYWQgb2YgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xP
Q0FMLgorICAgICAgICAoV2ViQ29yZTo6TGVuZ3RoOjpMZW5ndGgpOiBVcGRhdGVkIHNvbWUgZGF0
YSBtZW1iZXIgbmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpMZW5ndGg6OmNhbGN1bGF0aW9uVmFs
dWUpOiBVcGRhdGVkIHRvIHJldHVybiBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgUGFzc1JlZlB0
ci4KKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6cmVmKTogUmVuYW1lZCBhbmQgdXBkYXRlZCBm
b3IgbmV3IGludGVyZmFjZSB0byB0aGUgbWFwLgorICAgICAgICAoV2ViQ29yZTo6TGVuZ3RoOjpk
ZXJlZik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TGVuZ3RoOjpub25OYW5DYWxjdWxhdGVk
VmFsdWUpOiBVcGRhdGVkIHRvIHVzZSBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlci4K
KyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6aXNDYWxjdWxhdGVkRXF1YWwpOiBVcGRhdGVkIHNp
bmNlIHRoaXMgaXMgbm93IG9ubHkgY2FsbGVkIGlmIGJvdGggb2JqZWN0cyBhcmUKKyAgICAgICAg
a25vd24gdG8gYmUgY2FsY3VsYXRlZCB2YWx1ZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5n
dGguaDogTW92ZWQgbW9zdCBmdW5jdGlvbnMgb3V0IG9mIHRoZSBjbGFzcyBkZWZpbml0aW9uIHRv
IG1ha2UgdGhlIGNsYXNzIGRlZmluaXRpb24KKyAgICAgICAgZWFzaWVyIHRvIHJlYWQuIFJld29y
a2VkIHRoZSBjb25zdHJ1Y3RvcnMgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3JzIHRvIGhhbmRsZSB0
aGUgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgICAgIGNvcnJlY3RseS4gQWRkZWQgdmFyaW91cyBG
SVhNRXMgYW5kIGFzc2VydGlvbnMuIFJlbW92ZWQgc29tZSB1bnVzZWQgZnVuY3Rpb25zLCBtYWRl
IG90aGVycyBwcml2YXRlLgorCisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoQm94Lmg6IFJlbmFt
ZWQgc29tZSBvbmUtbGV0dGVyIGFyZ3VtZW50cyB0byB1c2Ugd29yZHMgaW5zdGVhZC4KKworICAg
ICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4pOiBVcGRhdGVkIGZvciBjaGFuZ2UgdG8gTGVu
Z3RoOjpzZXRWYWx1ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheSk6IERp
dHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oOgorICAgICAgICAo
V2ViQ29yZTo6RmlsbExheWVyOjppbml0aWFsRmlsbFhQb3NpdGlvbik6IFVwZGF0ZWQgdG8gbm90
IGNvbnZlcnQgYSBkb3VibGUgdG8gYSBmbG9hdCBhdCBydW50aW1lLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsbExheWVyOjppbml0aWFsRmlsbFlQb3NpdGlvbik6IERpdHRvLgorCisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clN0eWxlOjpzZXRXb3JkU3BhY2luZyk6IFJlbW92ZWQgYSBib2d1cyBGQUxMVEhST1VHSCB0aGF0
IHdhcyBjbGVhcmx5IHdyb25nLCBidXQKKyAgICAgICAgaGFybWxlc3MuIFVwZGF0ZWQgZm9yIGNo
YW5nZXMgdG8gTGVuZ3RoLgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
Lmg6IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlcyBhbmQgdG8gYXZvaWQgY29udmVydGluZyBkb3Vi
bGVzIHRvIGZsb2F0cworICAgICAgICBhdCBydW50aW1lLgorCiAyMDE0LTA0LTA1ICBCcmlhbiBK
LiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiByZW1vdmUgdW51c2VkIHRlc3QgaG9vayBzZXRJbnNwZWN0b3JSZXNvdXJjZXNEYXRhU2l6ZUxp
bWl0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA2MDhiYzVlYjA1ZTQzZTg5MzFjZjM5MmZhNGUz
NzdmZDNhNzIyMmYxLi42MzFlMGMzNTBhZTY3ODM5Mjc3YjNjZTE4YjI1YzQ3ZjFiY2MyMWI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtNjQ5LDYgKzY0OSw3IEBAIF9fWk43V2ViQ29yZTE1dmlz
aXRlZExpbmtIYXNoRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTZBcHBsaWNhdGlvbkNh
Y2hlMThkaXNrVXNhZ2VGb3JPcmlnaW5FUE5TXzE0U2VjdXJpdHlPcmlnaW5FCiBfX1pON1dlYkNv
cmUxNkFwcGxpY2F0aW9uQ2FjaGUyMGRlbGV0ZUNhY2hlRm9yT3JpZ2luRVBOU18xNFNlY3VyaXR5
T3JpZ2luRQogX19aTjdXZWJDb3JlMTZDU1NQYXJzZXJDb250ZXh0QzFFUk5TXzhEb2N1bWVudEVS
S05TXzNVUkxFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxNkNhbGN1bGF0aW9uVmFsdWU2
Y3JlYXRlRU5TdDNfXzExMHVuaXF1ZV9wdHJJTlNfMThDYWxjRXhwcmVzc2lvbk5vZGVFTlMxXzE0
ZGVmYXVsdF9kZWxldGVJUzNfRUVFRU5TXzMwQ2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdl
RQogX19aTjdXZWJDb3JlMTZEYXRhYmFzZVN0cmF0ZWd5MTdnZXREYXRhYmFzZVNlcnZlckV2CiBf
X1pON1dlYkNvcmUxNkRhdGFiYXNlU3RyYXRlZ3kyM2NyZWF0ZUlEQkZhY3RvcnlCYWNrZW5kRVJL
TjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTZEZXZpY2VNb3Rpb25EYXRhMTJBY2NlbGVyYXRp
b242Y3JlYXRlRWJkYmRiZApAQCAtMTE3MSw2ICsxMTcyLDcgQEAgX19aTjdXZWJDb3JlNkVkaXRv
cjdjb21tYW5kRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjdjb3B5VVJMRVJL
TlNfM1VSTEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3I3b3V0ZGVudEV2CiBf
X1pON1dlYkNvcmU2SlNOb2RlNnNfaW5mb0UKK19fWk43V2ViQ29yZTZMZW5ndGhDMUVOM1dURjdQ
YXNzUmVmSU5TXzE2Q2FsY3VsYXRpb25WYWx1ZUVFRQogX19aTjdXZWJDb3JlNlJlZ2lvbjIxdXBk
YXRlQm91bmRzRnJvbVNoYXBlRXYKIF9fWk43V2ViQ29yZTZSZWdpb241dW5pdGVFUktTMF8KIF9f
Wk43V2ViQ29yZTZSZWdpb244c3VidHJhY3RFUktTMF8KQEAgLTE4NTQsOCArMTg1Niw4IEBAIF9f
Wk5LN1dlYkNvcmU2RWRpdG9yN2NhbkNvcHlFdgogX19aTks3V2ViQ29yZTZFZGl0b3I3Y2FuRWRp
dEV2CiBfX1pOSzdXZWJDb3JlNkVkaXRvcjhjYW5QYXN0ZUV2CiBfX1pOSzdXZWJDb3JlNkVkaXRv
cjljYW5EZWxldGVFdgotX19aTks3V2ViQ29yZTZMZW5ndGgyMmRlY3JlbWVudENhbGN1bGF0ZWRS
ZWZFdgotX19aTks3V2ViQ29yZTZMZW5ndGgyMmluY3JlbWVudENhbGN1bGF0ZWRSZWZFdgorX19a
Tks3V2ViQ29yZTZMZW5ndGgzcmVmRXYKK19fWk5LN1dlYkNvcmU2TGVuZ3RoNWRlcmVmRXYKIF9f
Wk5LN1dlYkNvcmU2UmVnaW9uNVNoYXBlN2lzVmFsaWRFdgogX19aTks3V2ViQ29yZTZSZWdpb241
cmVjdHNFdgogX19aTks3V2ViQ29yZTZSZWdpb244Y29udGFpbnNFUktTMF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MDU1OWVk
MTEzMzNhNjM3OGY5YWU5YjQ0MzhhZWRmZWQwMmM1YzViLi45ZGY2YWIzMzU5Njg0YWNjM2IwZjJi
OWFhOWJiMGJhZDY3N2YxNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTk4LDcgKzE1OTgsNyBAQAogCQk0OUFFMkQ4RTEz
NEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUFFMkQ4QzEzNEVFNTBDMDA3MjkyMEEg
LyogQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi87IH07CiAJCTQ5QUUyRDhGMTM0RUU1MEMwMDcy
OTIwQSAvKiBDU1NDYWxjdWxhdGlvblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUFFMkQ4RDEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3Vs
YXRpb25WYWx1ZS5oICovOyB9OwogCQk0OUFFMkQ5NjEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3Vs
YXRpb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUFFMkQ5NDEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi87
IH07Ci0JCTQ5QUUyRDk3MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUFFMkQ5NTEzNEVF
NUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICovOyB9OworCQk0OUFFMkQ5NzEzNEVF
NUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1
bGF0aW9uVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk0OUFGMkQ2OTE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUFGMkQ2
ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlBRjJENkMxNDQzNUQyMTAw
MTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUFGMkQ2QjE0NDM1RDIxMDAxNkE3ODQgLyog
RGlzcGxheVJlZnJlc2hNb25pdG9yTWFjLmNwcCAqLzsgfTsKIAkJNDlCMzc2MEMxNUM2QzY4NDAw
NTkxMzFEIC8qIEFycmF5VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlCMzc2MEExNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuY3Bw
ICovOyB9OwpAQCAtODQzMiw3ICs4NDMyLDcgQEAKIAkJNDNBNjI2NjYxM0IzRDExMDAwQUM5NEI4
IC8qIFNWR0FuaW1hdGVkU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNWR0FuaW1hdGVkU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDNCODVFRDAxOENCRUFDRTAwRTMxQUY0IC8qIG1ha2VTZWxlY3RvclBzZXVkb0NsYXNzQW5k
Q29tcGF0aWJpbGl0eUVsZW1lbnRNYXAucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IHBhdGggPSBtYWtlU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFw
LnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0M0I4NUVEMjE4Q0JFQzUyMDBFMzFB
RjQgLyogU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdG9yUHNldWRvQ2xhc3NB
bmRDb21wYXRpYmlsaXR5RWxlbWVudE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQzQjg1RUQzMThDQkVDNTIwMEUzMUFGNCAvKiBTZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29t
cGF0aWJpbGl0eUVsZW1lbnRNYXAuZ3BlcmYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gU2VsZWN0
b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmdwZXJmOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0M0I4NUVEMzE4Q0JFQzUyMDBFMzFBRjQgLyogU2VsZWN0b3JQ
c2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmdwZXJmICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFNlbGVjdG9yUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudE1hcC5n
cGVyZjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDNCODVFRDYxOENCRUM5NzAwRTMx
QUY0IC8qIFNlbGVjdG9yUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudE1hcC5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0
eUVsZW1lbnRNYXAuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzQjkzMzY3MTNC
MjYxQjEwMDQ1ODRCRiAvKiBTVkdBbmltYXRlZFBvaW50TGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFBvaW50TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0M0I5MzM2ODEzQjI2MUIxMDA0NTg0QkYgLyogU1ZHQW5pbWF0ZWRQb2lu
dExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHQW5pbWF0
ZWRQb2ludExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCmluZGV4IDUwZTUzMGQyMDZiYmZjYWZkZTdh
OGU0OWUxMjI5NjZiNTE4NDY5NDMuLjI4NDk1ODUxMmY5NWJjYThhNzRkOTkxYmMzMTcyMTEwZTU4
MGVlMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpA
QCAtMzIsMTAgKzMzLDcgQEAKICNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCiAKICNp
bmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVM
aXN0LmgiCi0jaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgot
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CiAKQEAgLTQ5LDYgKzQ3LDkgQEAgZW51bSBQYXJzZVN0YXRlIHsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IGNyZWF0ZUV4cHJlc3Npb25Ob2RlKGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYsIGNvbnN0IFJl
bmRlclN0eWxlJik7CitzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNy
ZWF0ZUV4cHJlc3Npb25Ob2RlKGNvbnN0IExlbmd0aCYsIGNvbnN0IFJlbmRlclN0eWxlJik7CisK
IHN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IHVuaXRDYXRlZ29yeShDU1NQcmltaXRpdmVWYWx1
ZTo6VW5pdFR5cGVzIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xNTcsMTIgKzE1
OCwxMiBAQCBTdHJpbmcgQ1NTQ2FsY1ZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKIAogYm9v
bCBDU1NDYWxjVmFsdWU6OmVxdWFscyhjb25zdCBDU1NDYWxjVmFsdWUmIG90aGVyKSBjb25zdAog
ewotICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVQdHIobV9leHByZXNzaW9uLCBvdGhlci5tX2V4
cHJlc3Npb24pOworICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWUobV9leHByZXNzaW9uLCBvdGhl
ci5tX2V4cHJlc3Npb24pOwogfQogCi1kb3VibGUgQ1NTQ2FsY1ZhbHVlOjpjbGFtcFRvUGVybWl0
dGVkUmFuZ2UoZG91YmxlIHZhbHVlKSBjb25zdAoraW5saW5lIGRvdWJsZSBDU1NDYWxjVmFsdWU6
OmNsYW1wVG9QZXJtaXR0ZWRSYW5nZShkb3VibGUgdmFsdWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fbm9uTmVnYXRpdmUgJiYgdmFsdWUgPCAwID8gMCA6IHZhbHVlOworICAgIHJldHVybiBtX3No
b3VsZENsYW1wVG9Ob25OZWdhdGl2ZSAmJiB2YWx1ZSA8IDAgPyAwIDogdmFsdWU7CiB9CiAKIGRv
dWJsZSBDU1NDYWxjVmFsdWU6OmRvdWJsZVZhbHVlKCkgY29uc3QKQEAgLTE3NSwzOSArMTc2LDM1
IEBAIGRvdWJsZSBDU1NDYWxjVmFsdWU6OmNvbXB1dGVMZW5ndGhQeChjb25zdCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kCiAgICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRS
YW5nZShtX2V4cHJlc3Npb24tPmNvbXB1dGVMZW5ndGhQeChjdXJyZW50U3R5bGUsIHJvb3RTdHls
ZSwgbXVsdGlwbGllciwgY29tcHV0aW5nRm9udFNpemUpKTsKIH0KIAotQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlOjp+Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKCkKLXsKLX0KLQotY2xhc3MgQ1NTQ2FsY1By
aW1pdGl2ZVZhbHVlIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7CitjbGFzcyBDU1ND
YWxjUHJpbWl0aXZlVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLQotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENTU0NhbGNQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHZhbHVlLCBib29sIGlzSW50ZWdlcikKKyAgICBzdGF0aWMgUGFzc1JlZjxDU1ND
YWxjUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2
YWx1ZSwgYm9vbCBpc0ludGVnZXIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENTU0NhbGNQcmltaXRpdmVWYWx1ZSh2YWx1ZSwgaXNJbnRlZ2VyKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZSh2YWx1ZSwgaXNJbnRlZ2VyKSk7
CiAgICAgfQogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlPiBj
cmVhdGUoZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUsIGJv
b2wgaXNJbnRlZ2VyKQogICAgIHsKICAgICAgICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHN0
ZDo6aXNpbmYodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjUHJpbWl0aXZl
VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgdHlwZSksIGlzSW50ZWdlcikp
OwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc1plcm8oKSBjb25zdAorcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNaZXJvKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJl
dHVybiAhbV92YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFN0
cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3QKKyAgICB2aXJ0dWFsIFN0cmluZyBjdXN0b21DU1NU
ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlLT5jc3NU
ZXh0KCk7CiAgICAgfQogCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Np
b25Ob2RlPiB0b0NhbGNWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRl
clN0eWxlKiByb290U3R5bGUsIGRvdWJsZSB6b29tKSBjb25zdAorICAgIHZpcnR1YWwgc3RkOjp1
bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gdG9DYWxjVmFsdWUoY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgem9vbSkgY29u
c3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9jYXRlZ29yeSkgeworICAgICAg
ICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKICAgICAgICAgY2FzZSBDYWxjTnVtYmVyOgogICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q2FsY0V4cHJlc3Npb25OdW1iZXI+KG1fdmFs
dWUtPmdldEZsb2F0VmFsdWUoKSk7CiAgICAgICAgIGNhc2UgQ2FsY0xlbmd0aDoKQEAgLTIyNyw3
ICsyMjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3QKKyAgICB2aXJ0dWFsIGRvdWJsZSBk
b3VibGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoaGFzRG91Ymxl
VmFsdWUocHJpbWl0aXZlVHlwZSgpKSkKICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLT5nZXRE
b3VibGVWYWx1ZSgpOwpAQCAtMjM1LDkgKzIzMiw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogCi0gICAgdmlydHVhbCBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRv
dWJsZSBtdWx0aXBsaWVyLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplKSBjb25zdAorICAgIHZpcnR1
YWwgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciwgYm9vbCBj
b21wdXRpbmdGb250U2l6ZSkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHN3aXRjaCAo
bV9jYXRlZ29yeSkgeworICAgICAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKICAgICAgICAgY2Fz
ZSBDYWxjTGVuZ3RoOgogICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8
ZG91YmxlPihjdXJyZW50U3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllciwgY29tcHV0aW5nRm9u
dFNpemUpOwogICAgICAgICBjYXNlIENhbGNQZXJjZW50OgpAQCAtMjUzLDcgKzI1MCw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGVxdWFs
cyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAorICAgIHZpcnR1YWwg
Ym9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYxLDggKzI1OCw4IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGNvbXBhcmVDU1NWYWx1ZVB0cihtX3ZhbHVlLCBzdGF0aWNfY2FzdDxjb25zdCBDU1ND
YWxjUHJpbWl0aXZlVmFsdWUmPihvdGhlcikubV92YWx1ZSk7CiAgICAgfQogCi0gICAgdmlydHVh
bCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBDc3NDYWxjUHJpbWl0aXZlVmFsdWU7IH0KLSAg
ICB2aXJ0dWFsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgcHJpbWl0aXZlVHlwZSgpIGNv
bnN0CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDc3ND
YWxjUHJpbWl0aXZlVmFsdWU7IH0KKyAgICB2aXJ0dWFsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0
VHlwZXMgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1
cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyhtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkp
OwogICAgIH0KQEAgLTMxMiw0MCArMzA5LDQwIEBAIHN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5
IGRldGVybWluZUNhdGVnb3J5KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpCiAg
ICAgcmV0dXJuIENhbGNPdGhlcjsKIH0KIAotc3RhdGljIGJvb2wgaXNJbnRlZ2VyUmVzdWx0KGNv
bnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSogbGVmdFNpZGUsIGNvbnN0IENTU0NhbGNFeHByZXNz
aW9uTm9kZSogcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3ApCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNJbnRlZ2VyUmVzdWx0KENhbGNPcGVyYXRvciBvcCwgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlJiBsZWZ0U2lkZSwgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiByaWdodFNpZGUpCiB7
CiAgICAgLy8gUGVyZm9ybXMgVzNDIHNwZWMncyB0eXBlIGNoZWNraW5nIGZvciBjYWxjIGludGVn
ZXJzLgogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNjYWxjLXR5cGUt
Y2hlY2tpbmcKLSAgICByZXR1cm4gb3AgIT0gQ2FsY0RpdmlkZSAmJiBsZWZ0U2lkZS0+aXNJbnRl
Z2VyKCkgJiYgcmlnaHRTaWRlLT5pc0ludGVnZXIoKTsKKyAgICByZXR1cm4gb3AgIT0gQ2FsY0Rp
dmlkZSAmJiBsZWZ0U2lkZS5pc0ludGVnZXIoKSAmJiByaWdodFNpZGUuaXNJbnRlZ2VyKCk7CiB9
CiAKLWNsYXNzIENTU0NhbGNCaW5hcnlPcGVyYXRpb24gOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlIHsKLQorY2xhc3MgQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBD
U1NDYWxjRXhwcmVzc2lvbk5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRl
KFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNCaW5hcnlPcGVyYXRpb24+IGNyZWF0ZShDYWxjT3BlcmF0
b3Igb3AsIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1Jl
ZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0U2lkZSkKICAgICB7CiAgICAgICAgIEFT
U0VSVChsZWZ0U2lkZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjT3RoZXIgJiYgcmlnaHRTaWRlLT5jYXRl
Z29yeSgpICE9IENhbGNPdGhlcik7CiAKICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBuZXdD
YXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KCpsZWZ0U2lkZSwgKnJpZ2h0U2lkZSwgb3ApOwog
CiAgICAgICAgIGlmIChuZXdDYXRlZ29yeSA9PSBDYWxjT3RoZXIpCi0gICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbihsZWZ0U2lkZSwgcmlnaHRTaWRlLCBvcCwg
bmV3Q2F0ZWdvcnkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjQmluYXJ5
T3BlcmF0aW9uKG5ld0NhdGVnb3J5LCBvcCwgbGVmdFNpZGUsIHJpZ2h0U2lkZSkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlU2lt
cGxpZmllZChQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbGVmdFNpZGUsIFBhc3NS
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZVNpbXBs
aWZpZWQoQ2FsY09wZXJhdG9yIG9wLCBQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4g
bGVmdFNpZGUsIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNpZGUpCiAg
ICAgewogICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGxlZnRDYXRlZ29yeSA9IGxlZnRTaWRl
LT5jYXRlZ29yeSgpOwogICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IHJpZ2h0Q2F0ZWdvcnkg
PSByaWdodFNpZGUtPmNhdGVnb3J5KCk7CiAgICAgICAgIEFTU0VSVChsZWZ0Q2F0ZWdvcnkgIT0g
Q2FsY090aGVyICYmIHJpZ2h0Q2F0ZWdvcnkgIT0gQ2FsY090aGVyKTsKIAotICAgICAgICBib29s
IGlzSW50ZWdlciA9IGlzSW50ZWdlclJlc3VsdChsZWZ0U2lkZS5nZXQoKSwgcmlnaHRTaWRlLmdl
dCgpLCBvcCk7CisgICAgICAgIGJvb2wgaXNJbnRlZ2VyID0gaXNJbnRlZ2VyUmVzdWx0KG9wLCAq
bGVmdFNpZGUsICpyaWdodFNpZGUpOwogCiAgICAgICAgIC8vIFNpbXBsaWZ5IG51bWJlcnMuCiAg
ICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgPT0gQ2FsY051bWJlciAmJiByaWdodENhdGVnb3J5ID09
IENhbGNOdW1iZXIpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMg
ZXZhbHVhdGlvblR5cGUgPSBpc0ludGVnZXIgPyBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNF
Ul9JTlRFR0VSIDogQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI7Ci0gICAgICAgICAgICBy
ZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoZXZhbHVhdGVPcGVyYXRvcihsZWZ0
U2lkZS0+ZG91YmxlVmFsdWUoKSwgcmlnaHRTaWRlLT5kb3VibGVWYWx1ZSgpLCBvcCksIGV2YWx1
YXRpb25UeXBlLCBpc0ludGVnZXIpOworICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3Iob3AsIGxlZnRTaWRlLT5kb3VibGVWYWx1
ZSgpLCByaWdodFNpZGUtPmRvdWJsZVZhbHVlKCkpLCBldmFsdWF0aW9uVHlwZSwgaXNJbnRlZ2Vy
KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFNpbXBsaWZ5IGFkZGl0aW9uIGFuZCBzdWJ0cmFj
dGlvbiBiZXR3ZWVuIHNhbWUgdHlwZXMuCkBAIC0zNTUsMTQgKzM1MiwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgaWYgKGhhc0RvdWJsZVZhbHVlKGxlZnRUeXBlKSkgewogICAgICAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHJpZ2h0VHlwZSA9IHJpZ2h0
U2lkZS0+cHJpbWl0aXZlVHlwZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAobGVmdFR5cGUg
PT0gcmlnaHRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3IobGVmdFNpZGUtPmRvdWJsZVZhbHVl
KCksIHJpZ2h0U2lkZS0+ZG91YmxlVmFsdWUoKSwgb3ApLCBsZWZ0VHlwZSwgaXNJbnRlZ2VyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShldmFsdWF0ZU9wZXJhdG9yKG9wLCBsZWZ0U2lkZS0+ZG91YmxlVmFsdWUoKSwgcmlnaHRT
aWRlLT5kb3VibGVWYWx1ZSgpKSwgbGVmdFR5cGUsIGlzSW50ZWdlcik7CiAgICAgICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0Q2F0ZWdvcnkgbGVmdFVuaXRDYXRlZ29yeSA9
IENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0Q2F0ZWdvcnkobGVmdFR5cGUpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAobGVmdFVuaXRDYXRlZ29yeSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6VU90aGVy
ICYmIGxlZnRVbml0Q2F0ZWdvcnkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRDYXRlZ29yeShy
aWdodFR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGVzIGNhbm9uaWNhbFR5cGUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y2Fub25pY2FsVW5p
dFR5cGVGb3JDYXRlZ29yeShsZWZ0VW5pdENhdGVnb3J5KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjYW5vbmljYWxUeXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsZWZ0VmFsdWUgPSBsZWZ0U2lk
ZS0+ZG91YmxlVmFsdWUoKSAqIENTU1ByaW1pdGl2ZVZhbHVlOjpjb252ZXJzaW9uVG9DYW5vbmlj
YWxVbml0c1NjYWxlRmFjdG9yKGxlZnRUeXBlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgcmlnaHRWYWx1ZSA9IHJpZ2h0U2lkZS0+ZG91YmxlVmFsdWUoKSAqIENTU1ByaW1p
dGl2ZVZhbHVlOjpjb252ZXJzaW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKHJpZ2h0VHlw
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3IobGVmdFZhbHVlLCByaWdodFZhbHVlLCBvcCks
IGNhbm9uaWNhbFR5cGUsIGlzSW50ZWdlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3Iob3As
IGxlZnRWYWx1ZSwgcmlnaHRWYWx1ZSksIGNhbm9uaWNhbFR5cGUsIGlzSW50ZWdlcik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CkBAIC0zNzAsMzMgKzM2NywzNCBAQCBwdWJsaWM6CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyBTaW1wbGlmeSBtdWx0aXBseWluZyBvciBkaXZpZGluZyBieSBhIG51bWJl
ciBmb3Igc2ltcGxpZmlhYmxlIHR5cGVzLgogICAgICAgICAgICAgQVNTRVJUKG9wID09IENhbGNN
dWx0aXBseSB8fCBvcCA9PSBDYWxjRGl2aWRlKTsKLSAgICAgICAgICAgIENTU0NhbGNFeHByZXNz
aW9uTm9kZSogbnVtYmVyU2lkZSA9IGdldE51bWJlclNpZGUobGVmdFNpZGUuZ2V0KCksIHJpZ2h0
U2lkZS5nZXQoKSk7CisgICAgICAgICAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIG51bWJlclNp
ZGUgPSBnZXROdW1iZXJTaWRlKCpsZWZ0U2lkZSwgKnJpZ2h0U2lkZSk7CiAgICAgICAgICAgICBp
ZiAoIW51bWJlclNpZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZShsZWZ0U2lkZSwg
cmlnaHRTaWRlLCBvcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZShvcCwgbGVmdFNp
ZGUsIHJpZ2h0U2lkZSk7CiAgICAgICAgICAgICBpZiAobnVtYmVyU2lkZSA9PSBsZWZ0U2lkZSAm
JiBvcCA9PSBDYWxjRGl2aWRlKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
KiBvdGhlclNpZGUgPSBsZWZ0U2lkZSA9PSBudW1iZXJTaWRlID8gcmlnaHRTaWRlLmdldCgpIDog
bGVmdFNpZGUuZ2V0KCk7CiAKICAgICAgICAgICAgIGRvdWJsZSBudW1iZXIgPSBudW1iZXJTaWRl
LT5kb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4obnVtYmVyKSB8fCBz
dGQ6OmlzaW5mKG51bWJlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBpZiAob3AgPT0gQ2FsY0RpdmlkZSAm
JiAhbnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVz
IG90aGVyVHlwZSA9IG90aGVyU2lkZS0+cHJpbWl0aXZlVHlwZSgpOwogICAgICAgICAgICAgaWYg
KGhhc0RvdWJsZVZhbHVlKG90aGVyVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENTU0Nh
bGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3Iob3RoZXJTaWRlLT5kb3Vi
bGVWYWx1ZSgpLCBudW1iZXIsIG9wKSwgb3RoZXJUeXBlLCBpc0ludGVnZXIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShldmFsdWF0ZU9wZXJh
dG9yKG9wLCBvdGhlclNpZGUtPmRvdWJsZVZhbHVlKCksIG51bWJlciksIG90aGVyVHlwZSwgaXNJ
bnRlZ2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBjcmVhdGUobGVmdFNpZGUsIHJp
Z2h0U2lkZSwgb3ApOworICAgICAgICByZXR1cm4gY3JlYXRlKG9wLCBsZWZ0U2lkZSwgcmlnaHRT
aWRlKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNaZXJvKCkgY29uc3QKK3ByaXZhdGU6
CisgICAgdmlydHVhbCBib29sIGlzWmVybygpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAg
ICByZXR1cm4gIWRvdWJsZVZhbHVlKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiB0b0NhbGNWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSB6b29tKSBjb25zdAor
ICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gdG9DYWxjVmFs
dWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxl
LCBkb3VibGUgem9vbSkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGxlZnQobV9sZWZ0U2lkZS0+dG9DYWxjVmFsdWUoc3R5
bGUsIHJvb3RTdHlsZSwgem9vbSkpOwogICAgICAgICBpZiAoIWxlZnQpCkBAIC00MDcsMTIgKzQw
NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENhbGNFeHBy
ZXNzaW9uQmluYXJ5T3BlcmF0aW9uPihzdGQ6Om1vdmUobGVmdCksIHN0ZDo6bW92ZShyaWdodCks
IG1fb3BlcmF0b3IpOwogICAgIH0KIAotICAgIHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKCkg
Y29uc3QKKyAgICB2aXJ0dWFsIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlCiAg
ICAgewogICAgICAgICByZXR1cm4gZXZhbHVhdGUobV9sZWZ0U2lkZS0+ZG91YmxlVmFsdWUoKSwg
bV9yaWdodFNpZGUtPmRvdWJsZVZhbHVlKCkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgZG91Ymxl
IGNvbXB1dGVMZW5ndGhQeChjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBS
ZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciwgYm9vbCBjb21wdXRpbmdG
b250U2l6ZSkgY29uc3QKKyAgICB2aXJ0dWFsIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwg
ZG91YmxlIG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewogICAgICAgICBjb25zdCBkb3VibGUgbGVmdFZhbHVlID0gbV9sZWZ0U2lkZS0+Y29t
cHV0ZUxlbmd0aFB4KGN1cnJlbnRTdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBsaWVyLCBjb21wdXRp
bmdGb250U2l6ZSk7CiAgICAgICAgIGNvbnN0IGRvdWJsZSByaWdodFZhbHVlID0gbV9yaWdodFNp
ZGUtPmNvbXB1dGVMZW5ndGhQeChjdXJyZW50U3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllciwg
Y29tcHV0aW5nRm9udFNpemUpOwpAQCAtNDMzLDEzICs0MzEsMTIgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCBTdHJpbmcg
Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CisgICAgdmlydHVhbCBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgp
IGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1cm4gYnVpbGRDc3NUZXh0KG1fbGVm
dFNpZGUtPmN1c3RvbUNTU1RleHQoKSwgbV9yaWdodFNpZGUtPmN1c3RvbUNTU1RleHQoKSwgbV9v
cGVyYXRvcik7CiAgICAgfQogCi0KLSAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IENTU0Nh
bGNFeHByZXNzaW9uTm9kZSYgZXhwKSBjb25zdAorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29u
c3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBleHApIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAg
ICAgICBpZiAodHlwZSgpICE9IGV4cC50eXBlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC00NTAsMTQgKzQ0NywxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAmJiBtX29wZXJhdG9y
ID09IG90aGVyLm1fb3BlcmF0b3I7CiAgICAgfQogCi0gICAgdmlydHVhbCBUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBDc3NDYWxjQmluYXJ5T3BlcmF0aW9uOyB9CisgICAgdmlydHVhbCBUeXBl
IHR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDc3NDYWxjQmluYXJ5T3BlcmF0aW9uOyB9
CiAKLSAgICB2aXJ0dWFsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgcHJpbWl0aXZlVHlw
ZSgpIGNvbnN0CisgICAgdmlydHVhbCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHByaW1p
dGl2ZVR5cGUoKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgc3dpdGNoIChtX2NhdGVn
b3J5KSB7CisgICAgICAgIHN3aXRjaCAoY2F0ZWdvcnkoKSkgewogICAgICAgICBjYXNlIENhbGNO
dW1iZXI6CiAgICAgICAgICAgICBBU1NFUlQobV9sZWZ0U2lkZS0+Y2F0ZWdvcnkoKSA9PSBDYWxj
TnVtYmVyICYmIG1fcmlnaHRTaWRlLT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIpOwotICAgICAg
ICAgICAgaWYgKG1faXNJbnRlZ2VyKQorICAgICAgICAgICAgaWYgKGlzSW50ZWdlcigpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VS
OwogICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOwogICAg
ICAgICBjYXNlIENhbGNMZW5ndGg6CkBAIC00ODAsMzAgKzQ3NywyOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047CiAgICAgfQogCi1wcml2
YXRlOgotICAgIENTU0NhbGNCaW5hcnlPcGVyYXRpb24oUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+IGxlZnRTaWRlLCBQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcmln
aHRTaWRlLCBDYWxjT3BlcmF0b3Igb3AsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkpCi0g
ICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhdGVnb3J5LCBpc0ludGVnZXJSZXN1bHQo
bGVmdFNpZGUuZ2V0KCksIHJpZ2h0U2lkZS5nZXQoKSwgb3ApKQorICAgIENTU0NhbGNCaW5hcnlP
cGVyYXRpb24oQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJhdG9yIG9wLCBQ
YXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbGVmdFNpZGUsIFBhc3NSZWZQdHI8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNpZGUpCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlKGNhdGVnb3J5LCBpc0ludGVnZXJSZXN1bHQob3AsICpsZWZ0U2lkZSwgKnJpZ2h0U2lk
ZSkpCiAgICAgICAgICwgbV9sZWZ0U2lkZShsZWZ0U2lkZSkKICAgICAgICAgLCBtX3JpZ2h0U2lk
ZShyaWdodFNpZGUpCiAgICAgICAgICwgbV9vcGVyYXRvcihvcCkKICAgICB7CiAgICAgfQogCi0g
ICAgc3RhdGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSogZ2V0TnVtYmVyU2lkZShDU1NDYWxjRXhw
cmVzc2lvbk5vZGUqIGxlZnRTaWRlLCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIHJpZ2h0U2lkZSkK
KyAgICBzdGF0aWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBnZXROdW1iZXJTaWRlKENTU0NhbGNF
eHByZXNzaW9uTm9kZSYgbGVmdFNpZGUsIENTU0NhbGNFeHByZXNzaW9uTm9kZSYgcmlnaHRTaWRl
KQogICAgIHsKLSAgICAgICAgaWYgKGxlZnRTaWRlLT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIp
Ci0gICAgICAgICAgICByZXR1cm4gbGVmdFNpZGU7Ci0gICAgICAgIGlmIChyaWdodFNpZGUtPmNh
dGVnb3J5KCkgPT0gQ2FsY051bWJlcikKLSAgICAgICAgICAgIHJldHVybiByaWdodFNpZGU7Ci0g
ICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAobGVmdFNpZGUuY2F0ZWdvcnkoKSA9PSBDYWxj
TnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuICZsZWZ0U2lkZTsKKyAgICAgICAgaWYgKHJpZ2h0
U2lkZS5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gJnJpZ2h0
U2lkZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgZG91YmxlIGV2YWx1
YXRlKGRvdWJsZSBsZWZ0U2lkZSwgZG91YmxlIHJpZ2h0U2lkZSkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBldmFsdWF0ZU9wZXJhdG9yKGxlZnRTaWRlLCByaWdodFNpZGUsIG1fb3BlcmF0
b3IpOworICAgICAgICByZXR1cm4gZXZhbHVhdGVPcGVyYXRvcihtX29wZXJhdG9yLCBsZWZ0U2lk
ZSwgcmlnaHRTaWRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgZG91YmxlIGV2YWx1YXRlT3BlcmF0
b3IoZG91YmxlIGxlZnRWYWx1ZSwgZG91YmxlIHJpZ2h0VmFsdWUsIENhbGNPcGVyYXRvciBvcCkK
KyAgICBzdGF0aWMgZG91YmxlIGV2YWx1YXRlT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wLCBkb3Vi
bGUgbGVmdFZhbHVlLCBkb3VibGUgcmlnaHRWYWx1ZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
b3ApIHsKICAgICAgICAgY2FzZSBDYWxjQWRkOgpAQCAtNTE3LDYgKzUxMyw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnRWYWx1ZSAvIHJpZ2h0VmFsdWU7CiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKICAg
ICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCkBAIC01NDQsNyArNTQxLDcgQEAgcHVibGljOgogICAgICAgICBib29sIG9rID0g
cGFyc2VWYWx1ZUV4cHJlc3Npb24odG9rZW5zLCAwLCAmaW5kZXgsICZyZXN1bHQpOwogICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8PSB0b2tlbnMtPnNpemUo
KSk7CiAgICAgICAgIGlmICghb2sgfHwgaW5kZXggIT0gdG9rZW5zLT5zaXplKCkpCi0gICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1
cm4gcmVzdWx0LnZhbHVlOwogICAgIH0KIApAQCAtNjE4LDcgKzYxNSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVUZXJtKHRva2VucywgZGVwdGgsIGluZGV4LCAmcmhz
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJlc3VsdC0+
dmFsdWUgPSBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGVTaW1wbGlmaWVkKHJlc3VsdC0+
dmFsdWUsIHJocy52YWx1ZSwgc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRvckNoYXJh
Y3RlcikpOworICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRp
b246OmNyZWF0ZVNpbXBsaWZpZWQoc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRvckNo
YXJhY3RlciksIHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSk7CiAgICAgICAgICAgICBpZiAoIXJl
c3VsdC0+dmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBA
IC02NDUsNyArNjQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZU11
bHRpcGxpY2F0aXZlRXhwcmVzc2lvbih0b2tlbnMsIGRlcHRoLCBpbmRleCwgJnJocykpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXN1bHQtPnZhbHVlID0g
Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlU2ltcGxpZmllZChyZXN1bHQtPnZhbHVlLCBy
aHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpKTsK
KyAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVh
dGVTaW1wbGlmaWVkKHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIp
LCByZXN1bHQtPnZhbHVlLCByaHMudmFsdWUpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQtPnZh
bHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNjYwLDU0
ICs2NTcsNDIgQEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi1QYXNzUmVmUHRyPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGVFeHByZXNzaW9uTm9kZShQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZSwgYm9vbCBpc0ludGVnZXIpCi17Ci0gICAgcmV0dXJu
IENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLCBpc0ludGVnZXIpOwotfQotCi1Q
YXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGVFeHBy
ZXNzaW9uTm9kZShQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbGVmdFNpZGUsIFBh
c3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBv
cCkKK3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxDU1NDYWxjQmluYXJ5T3BlcmF0aW9uPiBjcmVh
dGVCbGVuZEhhbGYoY29uc3QgTGVuZ3RoJiBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgcmV0dXJuIENTU0NhbGNCaW5hcnlPcGVyYXRpb246
OmNyZWF0ZShsZWZ0U2lkZSwgcmlnaHRTaWRlLCBvcCk7CisgICAgcmV0dXJuIENTU0NhbGNCaW5h
cnlPcGVyYXRpb246OmNyZWF0ZShDYWxjTXVsdGlwbHksIGNyZWF0ZUV4cHJlc3Npb25Ob2RlKGxl
bmd0aCwgc3R5bGUpLAorICAgICAgICBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByb2dyZXNzLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUiksICFwcm9ncmVzcyB8fCBwcm9ncmVzcyA9PSAxKSk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZUV4cHJlc3Npb25Ob2RlKGNv
bnN0IENhbGNFeHByZXNzaW9uTm9kZSogbm9kZSwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQor
c3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVFeHByZXNzaW9u
Tm9kZShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSkKIHsKLSAgICBzd2l0Y2ggKG5vZGUtPnR5cGUoKSkgeworICAgIHN3aXRjaCAobm9kZS50
eXBlKCkpIHsKICAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZU51bWJlcjogewotICAgICAgICBm
bG9hdCB2YWx1ZSA9IHRvQ2FsY0V4cHJlc3Npb25OdW1iZXIobm9kZSktPnZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBjcmVhdGVFeHByZXNzaW9uTm9kZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIHZhbHVlID09IHRydW5jKHZh
bHVlKSk7CisgICAgICAgIGZsb2F0IHZhbHVlID0gdG9DYWxjRXhwcmVzc2lvbk51bWJlcihub2Rl
KS52YWx1ZSgpOworICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpLCB2YWx1ZSA9PSB0cnVuY2YodmFsdWUpKTsKICAgICB9CiAgICAgY2FzZSBDYWxjRXhw
cmVzc2lvbk5vZGVMZW5ndGg6Ci0gICAgICAgIHJldHVybiBjcmVhdGVFeHByZXNzaW9uTm9kZSh0
b0NhbGNFeHByZXNzaW9uTGVuZ3RoKG5vZGUpLT5sZW5ndGgoKSwgc3R5bGUpOworICAgICAgICBy
ZXR1cm4gY3JlYXRlRXhwcmVzc2lvbk5vZGUodG9DYWxjRXhwcmVzc2lvbkxlbmd0aChub2RlKS5s
ZW5ndGgoKSwgc3R5bGUpOwogICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlQmluYXJ5T3BlcmF0
aW9uOiB7Ci0gICAgICAgIGNvbnN0IENhbGNFeHByZXNzaW9uQmluYXJ5T3BlcmF0aW9uKiBiaW5h
cnlOb2RlID0gdG9DYWxjRXhwcmVzc2lvbkJpbmFyeU9wZXJhdGlvbihub2RlKTsKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZUV4cHJlc3Npb25Ob2RlKGNyZWF0ZUV4cHJlc3Npb25Ob2RlKGJpbmFyeU5v
ZGUtPmxlZnRTaWRlKCksIHN0eWxlKSwgY3JlYXRlRXhwcmVzc2lvbk5vZGUoYmluYXJ5Tm9kZS0+
cmlnaHRTaWRlKCksIHN0eWxlKSwgYmluYXJ5Tm9kZS0+Z2V0T3BlcmF0b3IoKSk7CisgICAgICAg
IGF1dG8mIGJpbmFyeU5vZGUgPSB0b0NhbGNFeHByZXNzaW9uQmluYXJ5T3BlcmF0aW9uKG5vZGUp
OworICAgICAgICByZXR1cm4gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlKGJpbmFyeU5v
ZGUuZ2V0T3BlcmF0b3IoKSwKKyAgICAgICAgICAgIGNyZWF0ZUV4cHJlc3Npb25Ob2RlKGJpbmFy
eU5vZGUubGVmdFNpZGUoKSwgc3R5bGUpLCBjcmVhdGVFeHByZXNzaW9uTm9kZShiaW5hcnlOb2Rl
LnJpZ2h0U2lkZSgpLCBzdHlsZSkpOwogICAgIH0KICAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9k
ZUJsZW5kTGVuZ3RoOiB7CiAgICAgICAgIC8vIEZJWE1FOiAoaHR0cDovL3dlYmtpdC5vcmcvYi8x
MjIwMzYpIENyZWF0ZSBhIENTU0NhbGNFeHByZXNzaW9uTm9kZSBlcXVpdmFsZW50IG9mIENhbGNF
eHByZXNzaW9uQmxlbmRMZW5ndGguCi0gICAgICAgIGNvbnN0IENhbGNFeHByZXNzaW9uQmxlbmRM
ZW5ndGgqIGJsZW5kTm9kZSA9IHRvQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aChub2RlKTsKLSAg
ICAgICAgY29uc3QgZG91YmxlIHByb2dyZXNzID0gYmxlbmROb2RlLT5wcm9ncmVzcygpOwotICAg
ICAgICBjb25zdCBib29sIGlzSW50ZWdlciA9ICFwcm9ncmVzcyB8fCAocHJvZ3Jlc3MgPT0gMSk7
Ci0gICAgICAgIHJldHVybiBjcmVhdGVFeHByZXNzaW9uTm9kZSgKLSAgICAgICAgICAgIGNyZWF0
ZUV4cHJlc3Npb25Ob2RlKAotICAgICAgICAgICAgICAgIGNyZWF0ZUV4cHJlc3Npb25Ob2RlKGJs
ZW5kTm9kZS0+ZnJvbSgpLCBzdHlsZSksCi0gICAgICAgICAgICAgICAgY3JlYXRlRXhwcmVzc2lv
bk5vZGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgxIC0gcHJvZ3Jlc3MsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKSwgaXNJbnRlZ2VyKSwKLSAgICAgICAgICAgICAgICBDYWxjTXVs
dGlwbHkpLAotICAgICAgICAgICAgY3JlYXRlRXhwcmVzc2lvbk5vZGUoCi0gICAgICAgICAgICAg
ICAgY3JlYXRlRXhwcmVzc2lvbk5vZGUoYmxlbmROb2RlLT50bygpLCBzdHlsZSksCi0gICAgICAg
ICAgICAgICAgY3JlYXRlRXhwcmVzc2lvbk5vZGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShw
cm9ncmVzcywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpc0ludGVnZXIpLAotICAg
ICAgICAgICAgICAgIENhbGNNdWx0aXBseSksCi0gICAgICAgICAgICBDYWxjQWRkKTsKKyAgICAg
ICAgYXV0byYgYmxlbmQgPSB0b0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgobm9kZSk7CisgICAg
ICAgIGZsb2F0IHByb2dyZXNzID0gYmxlbmQucHJvZ3Jlc3MoKTsKKyAgICAgICAgcmV0dXJuIENT
U0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZShDYWxjQWRkLAorICAgICAgICAgICAgY3JlYXRl
QmxlbmRIYWxmKGJsZW5kLmZyb20oKSwgc3R5bGUsIDEgLSBwcm9ncmVzcyksIGNyZWF0ZUJsZW5k
SGFsZihibGVuZC50bygpLCBzdHlsZSwgcHJvZ3Jlc3MpKTsKICAgICB9CiAgICAgY2FzZSBDYWxj
RXhwcmVzc2lvbk5vZGVVbmRlZmluZWQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwog
fQogCi1QYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVh
dGVFeHByZXNzaW9uTm9kZShjb25zdCBMZW5ndGgmIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVF
eHByZXNzaW9uTm9kZShjb25zdCBMZW5ndGgmIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlKQogewogICAgIHN3aXRjaCAobGVuZ3RoLnR5cGUoKSkgewogICAgIGNhc2UgUGVyY2VudDoK
QEAgLTcxNiw5ICs3MDEsOSBAQCBQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NT
Q2FsY1ZhbHVlOjpjcmVhdGVFeHByZXNzaW9uTm9kZShjb25zdCBMZW5ndAogICAgIGNhc2UgVmll
d3BvcnRQZXJjZW50YWdlTWluOgogICAgIGNhc2UgVmlld3BvcnRQZXJjZW50YWdlTWF4OgogICAg
IGNhc2UgRml4ZWQ6Ci0gICAgICAgIHJldHVybiBjcmVhdGVFeHByZXNzaW9uTm9kZShDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKGxlbmd0aCwgc3R5bGUpLCBsZW5ndGgudmFsdWUoKSA9PSB0cnVu
YyhsZW5ndGgudmFsdWUoKSkpOworICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShsZW5ndGgsICZzdHlsZSksIGxlbmd0
aC52YWx1ZSgpID09IHRydW5jKGxlbmd0aC52YWx1ZSgpKSk7CiAgICAgY2FzZSBDYWxjdWxhdGVk
OgotICAgICAgICByZXR1cm4gY3JlYXRlRXhwcmVzc2lvbk5vZGUobGVuZ3RoLmNhbGN1bGF0aW9u
VmFsdWUoKS0+ZXhwcmVzc2lvbigpLCBzdHlsZSk7CisgICAgICAgIHJldHVybiBjcmVhdGVFeHBy
ZXNzaW9uTm9kZShsZW5ndGguY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSwgc3R5bGUp
OwogICAgIGNhc2UgQXV0bzoKICAgICBjYXNlIEludHJpbnNpYzoKICAgICBjYXNlIE1pbkludHJp
bnNpYzoKQEAgLTcyOSwyNyArNzE0LDMwIEBAIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZUV4cHJlc3Npb25Ob2RlKGNvbnN0IExlbmd0CiAgICAg
Y2FzZSBSZWxhdGl2ZToKICAgICBjYXNlIFVuZGVmaW5lZDoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNy
ZWF0ZShDU1NQYXJzZXJTdHJpbmcgbmFtZSwgQ1NTUGFyc2VyVmFsdWVMaXN0KiBwYXJzZXJWYWx1
ZUxpc3QsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5nZSByYW5nZSkKK1Bhc3NSZWZQdHI8
Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZShDU1NQYXJzZXJTdHJpbmcgbmFtZSwg
Q1NTUGFyc2VyVmFsdWVMaXN0JiBwYXJzZXJWYWx1ZUxpc3QsIENhbGN1bGF0aW9uUGVybWl0dGVk
VmFsdWVSYW5nZSByYW5nZSkKIHsKICAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIgcGFy
c2VyOwogICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGV4cHJlc3Npb247CiAKICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgImNhbGMoIikgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgIi13ZWJraXQtY2FsYygiKSkKLSAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlci5w
YXJzZUNhbGMocGFyc2VyVmFsdWVMaXN0KTsKKyAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlci5w
YXJzZUNhbGMoJnBhcnNlclZhbHVlTGlzdCk7CiAgICAgLy8gRklYTUU6IGNhbGMgKGh0dHA6Ly93
ZWJraXQub3JnL2IvMTY2NjIpIEFkZCBwYXJzaW5nIGZvciBtaW4gYW5kIG1heCBoZXJlCiAKLSAg
ICByZXR1cm4gZXhwcmVzc2lvbiA/IGFkb3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoZXhwcmVzc2lv
biwgcmFuZ2UpKSA6IDA7CisgICAgcmV0dXJuIGV4cHJlc3Npb24gPyBhZG9wdFJlZihuZXcgQ1NT
Q2FsY1ZhbHVlKGV4cHJlc3Npb24ucmVsZWFzZU5vbk51bGwoKSwgcmFuZ2UgIT0gQ2FsY3VsYXRp
b25SYW5nZUFsbCkpIDogbnVsbHB0cjsKIH0KIAotUGFzc1JlZjxDU1NDYWxjVmFsdWU+IENTU0Nh
bGNWYWx1ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBleHByZXNz
aW9uLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UgcmFuZ2UpCitQYXNzUmVmUHRyPENT
U0NhbGNWYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYg
dmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBDU1NDYWxjVmFsdWUoZXhwcmVzc2lvbiwgcmFuZ2UpKTsKKyAgICBSZWZQdHI8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiBleHByZXNzaW9uID0gY3JlYXRlRXhwcmVzc2lvbk5vZGUodmFsdWUu
ZXhwcmVzc2lvbigpLCBzdHlsZSk7CisgICAgaWYgKCFleHByZXNzaW9uKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNWYWx1ZShleHByZXNz
aW9uLnJlbGVhc2VOb25OdWxsKCksIHZhbHVlLnNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSgpKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3Vs
YXRpb25WYWx1ZS5oCmluZGV4IDA0MWM3YjM3MDc4M2UyYzJlNjk3MzhjMjE5ODQ4NGE0NDcwZTAx
MjUuLjc5MzIyNjY0YWYyMDI4MWViY2EyNjlmNGYyODQzOWIzY2RiZThhNGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaApAQCAtMzMsMjAgKzMzLDExIEBACiAKICNp
bmNsdWRlICJDU1NQYXJzZXJWYWx1ZXMuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5o
IgotI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5oIgot
I2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NQYXJzZXJW
YWx1ZUxpc3Q7Ci1jbGFzcyBDU1NWYWx1ZUxpc3Q7Ci1jbGFzcyBDYWxjdWxhdGlvblZhbHVlOwot
Y2xhc3MgQ2FsY0V4cHJlc3Npb25Ob2RlOwogY2xhc3MgUmVuZGVyU3R5bGU7Ci1zdHJ1Y3QgTGVu
Z3RoOwogCiBlbnVtIENhbGN1bGF0aW9uQ2F0ZWdvcnkgewogICAgIENhbGNOdW1iZXIgPSAwLApA
QCAtNjQsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIENzc0NhbGNCaW5hcnlPcGVyYXRpb24K
ICAgICB9OwogCi0gICAgdmlydHVhbCB+Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKCkgPSAwOworICAg
IHZpcnR1YWwgfkNTU0NhbGNFeHByZXNzaW9uTm9kZSgpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1plcm8oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiB0b0NhbGNWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0
eWxlKiByb290U3R5bGUsIGRvdWJsZSB6b29tID0gMS4wKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdCA9IDA7CkBAIC03Miw5ICs2Myw5IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9jYXRlZ29yeSA9PSBvdGhlci5tX2NhdGVnb3J5ICYmIG1faXNJbnRlZ2Vy
ID09IG90aGVyLm1faXNJbnRlZ2VyOyB9CiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHByaW1pdGl2ZVR5
cGUoKSBjb25zdCA9IDA7CiAKICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KCkgY29u
c3QgeyByZXR1cm4gbV9jYXRlZ29yeTsgfQotICAgIHZpcnR1YWwgQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyBwcmltaXRpdmVUeXBlKCkgY29uc3QgPSAwOwogICAgIGJvb2wgaXNJbnRlZ2Vy
KCkgY29uc3QgeyByZXR1cm4gbV9pc0ludGVnZXI7IH0KIAogcHJvdGVjdGVkOgpAQCAtODQsNTYg
Kzc1LDQ5IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCitwcml2YXRlOgogICAgIENhbGN1
bGF0aW9uQ2F0ZWdvcnkgbV9jYXRlZ29yeTsKICAgICBib29sIG1faXNJbnRlZ2VyOwogfTsKIAog
Y2xhc3MgQ1NTQ2FsY1ZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShDU1NQYXJzZXJTdHJpbmcgbmFtZSwg
Q1NTUGFyc2VyVmFsdWVMaXN0KiwgQ2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShQYXNzUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4sIENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5nZSA9IENhbGN1bGF0
aW9uUmFuZ2VBbGwpOwotICAgIHN0YXRpYyBQYXNzUmVmPENTU0NhbGNWYWx1ZT4gY3JlYXRlKGNv
bnN0IENhbGN1bGF0aW9uVmFsdWUqIHZhbHVlLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIHsg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY1ZhbHVlKHZhbHVlLCBzdHlsZSkpOyB9CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUoQ1NTUGFyc2VyU3RyaW5nIG5h
bWUsIENTU1BhcnNlclZhbHVlTGlzdCYgYXJndW1lbnRzLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZh
bHVlUmFuZ2UpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKGNv
bnN0IENhbGN1bGF0aW9uVmFsdWUmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVFeHByZXNzaW9uTm9kZShQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiwgYm9vbCBpc0ludGVnZXIgPSBmYWxzZSk7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVFeHByZXNz
aW9uTm9kZShQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4sIFBhc3NSZWZQdHI8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiwgQ2FsY09wZXJhdG9yKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUV4cHJlc3Npb25Ob2RlKGNvbnN0IENhbGNF
eHByZXNzaW9uTm9kZSosIGNvbnN0IFJlbmRlclN0eWxlKik7Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVFeHByZXNzaW9uTm9kZShjb25zdCBMZW5n
dGgmLCBjb25zdCBSZW5kZXJTdHlsZSopOwotCi0gICAgUGFzc1JlZlB0cjxDYWxjdWxhdGlvblZh
bHVlPiB0b0NhbGNWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0
eWxlKiByb290U3R5bGUsIGRvdWJsZSB6b29tID0gMS4wKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0ZShtX2V4cHJlc3Npb24tPnRvQ2FsY1ZhbHVl
KHN0eWxlLCByb290U3R5bGUsIHpvb20pLCBtX25vbk5lZ2F0aXZlID8gQ2FsY3VsYXRpb25SYW5n
ZU5vbk5lZ2F0aXZlIDogQ2FsY3VsYXRpb25SYW5nZUFsbCk7Ci0gICAgfQogICAgIENhbGN1bGF0
aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb24tPmNhdGVn
b3J5KCk7IH0KICAgICBib29sIGlzSW50KCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uLT5p
c0ludGVnZXIoKTsgfQogICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0OwogICAgIGJvb2wg
aXNOZWdhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbi0+ZG91YmxlVmFsdWUoKSA8
IDA7IH0KLSAgICBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UgcGVybWl0dGVkVmFsdWVS
YW5nZSgpIHsgcmV0dXJuIG1fbm9uTmVnYXRpdmUgPyBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRp
dmUgOiBDYWxjdWxhdGlvblJhbmdlQWxsOyB9CiAgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChj
b25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEuMCwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSA9IGZh
bHNlKSBjb25zdDsKLSAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Npb25Ob2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uLmdldCgpOyB9CisKKyAgICBQYXNzUmVmPENhbGN1
bGF0aW9uVmFsdWU+IHRvQ2FsY1ZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSB6b29tID0gMS4wKSBjb25zdDsK
IAogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBlcXVhbHMoY29u
c3QgQ1NTQ2FsY1ZhbHVlJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgQ1NTQ2FsY1ZhbHVlKFBh
c3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBleHByZXNzaW9uLCBDYWxjdWxhdGlvblBl
cm1pdHRlZFZhbHVlUmFuZ2UgcmFuZ2UpCi0gICAgICAgIDogQ1NTVmFsdWUoQ2FsY3VsYXRpb25D
bGFzcykKLSAgICAgICAgLCBtX2V4cHJlc3Npb24oZXhwcmVzc2lvbikKLSAgICAgICAgLCBtX25v
bk5lZ2F0aXZlKHJhbmdlID09IENhbGN1bGF0aW9uUmFuZ2VOb25OZWdhdGl2ZSkKLSAgICB7Ci0g
ICAgfQotICAgIENTU0NhbGNWYWx1ZShjb25zdCBDYWxjdWxhdGlvblZhbHVlKiB2YWx1ZSwgY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKQotICAgICAgICA6IENTU1ZhbHVlKENhbGN1bGF0aW9uQ2xh
c3MpCi0gICAgICAgICwgbV9leHByZXNzaW9uKGNyZWF0ZUV4cHJlc3Npb25Ob2RlKHZhbHVlLT5l
eHByZXNzaW9uKCksIHN0eWxlKSkKLSAgICAgICAgLCBtX25vbk5lZ2F0aXZlKHZhbHVlLT5pc05v
bk5lZ2F0aXZlKCkpCi0gICAgewotICAgIH0KKyAgICBDU1NDYWxjVmFsdWUoUGFzc1JlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+LCBib29sIHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSk7CiAKICAg
ICBkb3VibGUgY2xhbXBUb1Blcm1pdHRlZFJhbmdlKGRvdWJsZSkgY29uc3Q7CiAKLSAgICBjb25z
dCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2V4cHJlc3Npb247Ci0gICAgY29uc3Qg
Ym9vbCBtX25vbk5lZ2F0aXZlOworICAgIGNvbnN0IFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IG1fZXhwcmVzc2lvbjsKKyAgICBjb25zdCBib29sIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZl
OwogfTsKIAoraW5saW5lIENTU0NhbGNWYWx1ZTo6Q1NTQ2FsY1ZhbHVlKFBhc3NSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiBleHByZXNzaW9uLCBib29sIHNob3VsZENsYW1wVG9Ob25OZWdhdGl2
ZSkKKyAgICA6IENTU1ZhbHVlKENhbGN1bGF0aW9uQ2xhc3MpCisgICAgLCBtX2V4cHJlc3Npb24o
c3RkOjptb3ZlKGV4cHJlc3Npb24pKQorICAgICwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUo
c2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKQoreworfQorCitpbmxpbmUgUGFzc1JlZjxDYWxjdWxh
dGlvblZhbHVlPiBDU1NDYWxjVmFsdWU6OnRvQ2FsY1ZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIHpvb20pIGNvbnN0Cit7
CisgICAgcmV0dXJuIENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0ZShtX2V4cHJlc3Npb24tPnRvQ2Fs
Y1ZhbHVlKHN0eWxlLCByb290U3R5bGUsIHpvb20pLAorICAgICAgICBtX3Nob3VsZENsYW1wVG9O
b25OZWdhdGl2ZSA/IENhbGN1bGF0aW9uUmFuZ2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFu
Z2VBbGwpOworfQorCiBDU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NDYWxjVmFsdWUsIGlzQ2FsY1Zh
bHVlKCkpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggNDg0YzNkOTI1MWZlZWYy
Njk2YTMzZWQ5YzRlZTlkNjZiNmM4ZWIzNy4uYzI5OTgzYTI2NzZkMWIwZTgyODQ1MGJjN2MwNDYx
ZjYyOWI3MmFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTY3Nyw5ICs2NzcsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gZ2V0UG9zaXRpb25PZmZzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIENTU1By
b3BlcgogICAgIH0KIAogICAgIGlmIChzdHlsZS0+aGFzT3V0T2ZGbG93UG9zaXRpb24oKSkgewot
ICAgICAgICBpZiAobC50eXBlKCkgPT0gV2ViQ29yZTo6Rml4ZWQpCisgICAgICAgIGlmIChsLmlz
Rml4ZWQoKSkKICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKGwudmFs
dWUoKSwgc3R5bGUpOwotICAgICAgICBlbHNlIGlmIChsLmlzVmlld3BvcnRQZXJjZW50YWdlKCkp
CisgICAgICAgIGlmIChsLmlzVmlld3BvcnRQZXJjZW50YWdlKCkpCiAgICAgICAgICAgICByZXR1
cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZSh2YWx1ZUZvckxlbmd0aChsLCAwLCByZW5kZXJWaWV3
KSwgc3R5bGUpOwogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobCk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IGQxNzlk
ZWQ5OWJlNzZhN2FkYjMyOTIwM2FjMTM5MWMwYmYwMjE5ZWIuLjdmMTA1Y2VhNjYzMjhmYjQyMzk1
ZDhhN2NhMGFmODhlNmZlY2Q2NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHAKQEAgLTE4Miw4ICsxODIsMTAgQEAgdm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9w
cyhHcmFkaWVudCogZ3JhZGllbnQsIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb24KICAgICAg
ICAgICAgICAgICBmbG9hdCBsZW5ndGg7CiAgICAgICAgICAgICAgICAgaWYgKHN0b3AubV9wb3Np
dGlvbi0+aXNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gc3RvcC5tX3Bv
c2l0aW9uLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pigmc3R5bGUsICZyb290U3R5bGUsIHN0eWxlLmVm
ZmVjdGl2ZVpvb20oKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoID0gc3RvcC5tX3Bvc2l0aW9uLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUo
JnN0eWxlLCAmcm9vdFN0eWxlLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpLT5ldmFsdWF0ZShncmFk
aWVudExlbmd0aCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IFJlZjxDYWxjdWxhdGlvblZhbHVlPiBjYWxjdWxhdGlvblZhbHVlIHsgc3RvcC5tX3Bvc2l0aW9u
LT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoJnN0eWxlLCAmcm9vdFN0eWxlLCBzdHlsZS5l
ZmZlY3RpdmVab29tKCkpIH07CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGNhbGN1bGF0
aW9uVmFsdWUtPmV2YWx1YXRlKGdyYWRpZW50TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gKGdyYWRpZW50TGVuZ3RoID4gMCkgPyBs
ZW5ndGggLyBncmFkaWVudExlbmd0aCA6IDA7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDAxLDggKzQwMywxMCBAQCBzdGF0
aWMgZmxvYXQgcG9zaXRpb25Gcm9tVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bAogICAgIGlmICh2YWx1ZS0+aXNQZXJjZW50YWdlKCkpCiAgICAg
ICAgIHJldHVybiB2YWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpIC8gMTAwLmYgKiBlZGdlRGlzdGFuY2U7
CiAKLSAgICBpZiAodmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0g
ICAgICAgIHJldHVybiB2YWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKCZzdHlsZSwg
JnJvb3RTdHlsZSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKS0+ZXZhbHVhdGUoZWRnZURpc3RhbmNl
KTsKKyAgICBpZiAodmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpIHsK
KyAgICAgICAgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNhbGN1bGF0aW9uVmFsdWUgeyB2YWx1ZS0+
Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKCZzdHlsZSwgJnJvb3RTdHlsZSwgc3R5bGUuZWZm
ZWN0aXZlWm9vbSgpKSB9OworICAgICAgICByZXR1cm4gY2FsY3VsYXRpb25WYWx1ZS0+ZXZhbHVh
dGUoZWRnZURpc3RhbmNlKTsKKyAgICB9CiAKICAgICBzd2l0Y2ggKHZhbHVlLT5nZXRWYWx1ZUlE
KCkpIHsKICAgICBjYXNlIENTU1ZhbHVlVG9wOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRl
eCBiZDc0YmY2ZWE3ZWIzZmI5OTQ3YmEyOWUyY2M3Mjc1OGYzNDcxZTMwLi5lODhmYjM5OWJjODIz
YWY3ZWQwZDVhOTdmMWNkMmQ4MDdhN2Q0MGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApA
QCAtOTU2OSw3ICs5NTY5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ2FsY3VsYXRpb24oQ1NT
UGFyc2VyVmFsdWUqIHZhbHVlLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHUKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgQVNTRVJUKCFtX3BhcnNlZENhbGN1bGF0aW9uKTsKLSAgICBtX3Bh
cnNlZENhbGN1bGF0aW9uID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUodmFsdWUtPmZ1bmN0aW9uLT5u
YW1lLCBhcmdzLCByYW5nZSk7CisgICAgbV9wYXJzZWRDYWxjdWxhdGlvbiA9IENTU0NhbGNWYWx1
ZTo6Y3JlYXRlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgKmFyZ3MsIHJhbmdlKTsKICAgICAKICAg
ICBpZiAoIW1fcGFyc2VkQ2FsY3VsYXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCmluZGV4IDg2NGVjNjNiNWFmYWUxMTU1
Njc4NmU4OGEyNDdlZTFhY2M5ZjcwNTkuLmYyMjgwY2RlNjhjNjQ5Yzc1NDFmNGM3NmI0YmY3NTEz
MzFhM2MxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcApAQCAt
MzA1LDE1ICszMDUsMTYgQEAgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKGNv
bnN0IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSogc3QKICAgICAgICAgbV92YWx1
ZS5udW0gPSBhZGp1c3RGbG9hdEZvckFic29sdXRlWm9vbShsZW5ndGgudmFsdWUoKSwgc3R5bGUp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDYWxjdWxhdGVkOiB7Ci0gICAgICAgIFJlZlB0
cjxDU1NDYWxjVmFsdWU+IGNhbGNWYWx1ZSA9IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKGxlbmd0aC5j
YWxjdWxhdGlvblZhbHVlKCkuZ2V0KCksIHN0eWxlKTsKKyAgICAgICAgUmVmUHRyPENTU0NhbGNW
YWx1ZT4gY2FsY1ZhbHVlID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUobGVuZ3RoLmNhbGN1bGF0aW9u
VmFsdWUoKSwgKnN0eWxlKTsKICAgICAgICAgaW5pdChjYWxjVmFsdWUucmVsZWFzZSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIFJlbGF0aXZlOgogICAgIGNhc2UgVW5kZWZp
bmVkOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7CisgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShjb25zdCBMZW5ndGhTaXplJiBsZW5ndGhT
aXplKQpAQCAtMzI4LDYyICszMjksNjMgQEAgdm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6aW5pdChj
b25zdCBMZW5ndGgmIGxlbmd0aCkKICAgICBjYXNlIEF1dG86CiAgICAgICAgIG1fcHJpbWl0aXZl
VW5pdFR5cGUgPSBDU1NfVkFMVUVfSUQ7CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1Zh
bHVlQXV0bzsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFdlYkNv
cmU6OkZpeGVkOgogICAgICAgICBtX3ByaW1pdGl2ZVVuaXRUeXBlID0gQ1NTX1BYOwogICAgICAg
ICBtX3ZhbHVlLm51bSA9IGxlbmd0aC52YWx1ZSgpOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgSW50cmluc2ljOgogICAgICAgICBtX3ByaW1pdGl2ZVVuaXRUeXBl
ID0gQ1NTX1ZBTFVFX0lEOwogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUludHJp
bnNpYzsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE1pbkludHJp
bnNpYzoKICAgICAgICAgbV9wcmltaXRpdmVVbml0VHlwZSA9IENTU19WQUxVRV9JRDsKICAgICAg
ICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVNaW5JbnRyaW5zaWM7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBNaW5Db250ZW50OgogICAgICAgICBtX3ByaW1p
dGl2ZVVuaXRUeXBlID0gQ1NTX1ZBTFVFX0lEOwogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBD
U1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQ7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBNYXhDb250ZW50OgogICAgICAgICBtX3ByaW1pdGl2ZVVuaXRUeXBlID0gQ1NT
X1ZBTFVFX0lEOwogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVdlYmtpdE1heENv
bnRlbnQ7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBGaWxsQXZh
aWxhYmxlOgogICAgICAgICBtX3ByaW1pdGl2ZVVuaXRUeXBlID0gQ1NTX1ZBTFVFX0lEOwogICAg
ICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVdlYmtpdEZpbGxBdmFpbGFibGU7Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBGaXRDb250ZW50OgogICAgICAg
ICBtX3ByaW1pdGl2ZVVuaXRUeXBlID0gQ1NTX1ZBTFVFX0lEOwogICAgICAgICBtX3ZhbHVlLnZh
bHVlSUQgPSBDU1NWYWx1ZVdlYmtpdEZpdENvbnRlbnQ7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBQZXJjZW50OgogICAgICAgICBtX3ByaW1pdGl2ZVVuaXRUeXBl
ID0gQ1NTX1BFUkNFTlRBR0U7CiAgICAgICAgIEFTU0VSVChzdGQ6OmlzZmluaXRlKGxlbmd0aC5w
ZXJjZW50KCkpKTsKICAgICAgICAgbV92YWx1ZS5udW0gPSBsZW5ndGgucGVyY2VudCgpOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVmlld3BvcnRQZXJjZW50YWdl
V2lkdGg6CiAgICAgICAgIG1fcHJpbWl0aXZlVW5pdFR5cGUgPSBDU1NfVlc7CiAgICAgICAgIG1f
dmFsdWUubnVtID0gbGVuZ3RoLnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVmlld3BvcnRQZXJjZW50YWdlSGVpZ2h0
OgogICAgICAgICBtX3ByaW1pdGl2ZVVuaXRUeXBlID0gQ1NTX1ZIOwogICAgICAgICBtX3ZhbHVl
Lm51bSA9IGxlbmd0aC52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFZpZXdwb3J0UGVyY2VudGFnZU1pbjoKICAgICAg
ICAgbV9wcmltaXRpdmVVbml0VHlwZSA9IENTU19WTUlOOwogICAgICAgICBtX3ZhbHVlLm51bSA9
IGxlbmd0aC52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7CisgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIFZpZXdwb3J0UGVyY2VudGFnZU1heDoKICAgICAgICAgbV9w
cmltaXRpdmVVbml0VHlwZSA9IENTU19WTUFYOwogICAgICAgICBtX3ZhbHVlLm51bSA9IGxlbmd0
aC52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENhbGN1bGF0ZWQ6CiAgICAgY2FzZSBSZWxhdGl2ZToKICAgICBjYXNl
IFVuZGVmaW5lZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiB2b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjppbml0KGNvbnN0IExlbmd0aFNpemUmIGxlbmd0aFNp
emUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaAppbmRleCAxYTEzZDgzNzZlZjFkYTRjNjZl
NThkOTZlMGYyYzZmMjc5NmNjZDM4Li42MTdkZmFkZDk4NGNmMzhmZDc0MTAxNTEwZDA1NjI4ODEy
MjNiYTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKQEAgLTIzLDIwICsyMywyMSBA
QAogI2RlZmluZSBDU1NUb1N0eWxlTWFwX2gKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMu
aCIKLSNpbmNsdWRlICJMZW5ndGhCb3guaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEZpbGxMYXllcjsKLWNsYXNzIENTU1ZhbHVlOwogY2xhc3MgQW5pbWF0aW9uOworY2xhc3Mg
Q1NTVmFsdWU7CitjbGFzcyBGaWxsTGF5ZXI7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFN0
eWxlSW1hZ2U7CiBjbGFzcyBTdHlsZVJlc29sdmVyOwogY2xhc3MgTmluZVBpZWNlSW1hZ2U7CiAK
K3N0cnVjdCBMZW5ndGhCb3g7CisKIGNsYXNzIENTU1RvU3R5bGVNYXAgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENTU1RvU3R5bGVNYXApOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCmluZGV4
IDIwMDc1OTgyNTI1OTU0MzY2ZWJkY2I0NDdlM2ZlNzVkOWUwMDFjMmYuLjllZGYzODQxMGMyNjY4
OWZhNzNkNTQyOWZmMDMxNmJiNzYwOTIxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKQEAgLTM4OCw3ICszODgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7CiAgICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7CiAgICAgICAgICAgICBM
ZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgICAgICAgICBsZW5n
dGguc2V0UXVpcmsocHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1ZSgpKTsKKyAgICAgICAgICAg
IGxlbmd0aC5zZXRIYXNRdWlyayhwcmltaXRpdmVWYWx1ZS0+aXNRdWlya1ZhbHVlKCkpOwogICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbGVuZ3RoKTsKICAgICAg
ICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUt
PmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpKTsKQEAgLTQ0OSw3ICs0NDksNyBAQCBwdWJsaWM6
CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPmZpcnN0KCktPmlzVmlld3BvcnRQZXJjZW50YWdlTGVu
Z3RoKCkpCiAgICAgICAgICAgICByYWRpdXNXaWR0aCA9IExlbmd0aChzdHlsZVJlc29sdmVyLT52
aWV3cG9ydFBlcmNlbnRhZ2VWYWx1ZSgqcGFpci0+Zmlyc3QoKSwgcGFpci0+Zmlyc3QoKS0+Z2V0
SW50VmFsdWUoKSksIEZpeGVkKTsKICAgICAgICAgZWxzZSBpZiAocGFpci0+Zmlyc3QoKS0+aXND
YWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHJhZGl1c1dpZHRo
ID0gTGVuZ3RoKChwYWlyLT5maXJzdCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgICAgICBy
YWRpdXNXaWR0aCA9IExlbmd0aChwYWlyLT5maXJzdCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxj
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRT
dHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgcmFkaXVzV2lkdGggPSBwYWlyLT5maXJzdCgpLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
OwogICAgICAgICBpZiAocGFpci0+c2Vjb25kKCktPmlzUGVyY2VudGFnZSgpKQpAQCAtNDU3LDcg
KzQ1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgZWxzZSBpZiAocGFpci0+c2Vjb25kKCktPmlzVmll
d3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5n
dGgoc3R5bGVSZXNvbHZlci0+dmlld3BvcnRQZXJjZW50YWdlVmFsdWUoKnBhaXItPnNlY29uZCgp
LCBwYWlyLT5zZWNvbmQoKS0+Z2V0SW50VmFsdWUoKSksIEZpeGVkKTsKICAgICAgICAgZWxzZSBp
ZiAocGFpci0+c2Vjb25kKCktPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0g
ICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5jc3NDYWxj
VmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpKSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgocGFpci0+c2Vjb25k
KCktPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByYWRpdXNIZWln
aHQgPSBwYWlyLT5zZWNvbmQoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaW50IHdpZHRoID0gcmFkaXVz
V2lkdGgudmFsdWUoKTsKQEAgLTg4Myw5ICs4ODMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAx
LjAsIHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2Vu
dGFnZSgpKQogICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0
VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOwotICAgICAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAg
ICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFs
dWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKKyAgICAgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0
aCgpKSB7CisgICAgICAgICAgICAgICAgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNhbGN1bGF0aW9u
VmFsdWUgeyBwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUo
KSkgfTsKKyAgICAgICAgICAgICAgICBzaXplID0gY2FsY3VsYXRpb25WYWx1ZS0+ZXZhbHVhdGUo
cGFyZW50U2l6ZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1Zp
ZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHNpemUgPSB2YWx1ZUZv
ckxlbmd0aChwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCksIDAsIHN0
eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkucmVuZGVyVmlldygpKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TGVuZ3RoRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMu
Y3BwCmluZGV4IDU3NDljODk0NjY0YzJiYzZlZWJhYjA4MmY2MjI5NGJkOWJiNTQwNTQuLmJkNjdi
MTA3ZjEwYjMxZDBjMzcxZmYzMmE1MDA1ZDg1NmMwNDhhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9M
ZW5ndGhGdW5jdGlvbnMuY3BwCkBAIC0xMjIsNyArMTIyLDcgQEAgZmxvYXQgZmxvYXRWYWx1ZUZv
ckxlbmd0aChjb25zdCBMZW5ndGgmIGxlbmd0aCwgTGF5b3V0VW5pdCBtYXhpbXVtVmFsdWUsIFJl
bmRlclYKIHsKICAgICBzd2l0Y2ggKGxlbmd0aC50eXBlKCkpIHsKICAgICBjYXNlIEZpeGVkOgot
ICAgICAgICByZXR1cm4gbGVuZ3RoLmdldEZsb2F0VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGxl
bmd0aC52YWx1ZSgpOwogICAgIGNhc2UgUGVyY2VudDoKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihtYXhpbXVtVmFsdWUgKiBsZW5ndGgucGVyY2VudCgpIC8gMTAwLjBmKTsKICAg
ICBjYXNlIEZpbGxBdmFpbGFibGU6CkBAIC0xNjgsNyArMTY4LDcgQEAgZmxvYXQgZmxvYXRWYWx1
ZUZvckxlbmd0aChjb25zdCBMZW5ndGgmIGxlbmd0aCwgZmxvYXQgbWF4aW11bVZhbHVlLCBSZW5k
ZXJWaWV3KgogewogICAgIHN3aXRjaCAobGVuZ3RoLnR5cGUoKSkgewogICAgIGNhc2UgRml4ZWQ6
Ci0gICAgICAgIHJldHVybiBsZW5ndGguZ2V0RmxvYXRWYWx1ZSgpOworICAgICAgICByZXR1cm4g
bGVuZ3RoLnZhbHVlKCk7CiAgICAgY2FzZSBQZXJjZW50OgogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1heGltdW1WYWx1ZSAqIGxlbmd0aC5wZXJjZW50KCkgLyAxMDAuMGYpOwog
ICAgIGNhc2UgRmlsbEF2YWlsYWJsZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApp
bmRleCBmZTkwZGU0ZWZmMjRjOTQ3MzE3MWNmMTRiM2Q3ZDNiNjMyNWE1M2IxLi4xZGE4MzhiNGU3
YzZkYWRhMzUzYzA2YjMxZTViNzI1NzljYzVlODkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCkBAIC0xMDQxLDE4ICsxMDQxLDE4IEBAIHN0YXRpYyB2b2lkIGFkZEludHJpbnNp
Y01hcmdpbnMoUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIGNvbnN0IGludCBpbnRyaW5zaWNNYXJn
aW4gPSAyICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIHdp
ZHRoL2hlaWdodCBhbG9uZSBhbmQgbm90IGFsc28gZGVhbGluZyB3aXRoIG1pbi13aWR0aC9tYXgt
d2lkdGggaXMgZmxhd2VkLgotICAgIC8vIEZJWE1FOiBVc2luZyAicXVpcmsiIHRvIGRlY2lkZSB0
aGUgbWFyZ2luIHdhc24ndCBzZXQgaXMga2luZCBvZiBsYW1lLgorICAgIC8vIEZJWE1FOiBVc2lu
ZyAiaGFzUXVpcmsiIHRvIGRlY2lkZSB0aGUgbWFyZ2luIHdhc24ndCBzZXQgaXMga2luZCBvZiBs
YW1lLgogICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsKLSAgICAg
ICAgaWYgKHN0eWxlLm1hcmdpbkxlZnQoKS5xdWlyaygpKQorICAgICAgICBpZiAoc3R5bGUubWFy
Z2luTGVmdCgpLmhhc1F1aXJrKCkpCiAgICAgICAgICAgICBzdHlsZS5zZXRNYXJnaW5MZWZ0KExl
bmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7Ci0gICAgICAgIGlmIChzdHlsZS5tYXJnaW5S
aWdodCgpLnF1aXJrKCkpCisgICAgICAgIGlmIChzdHlsZS5tYXJnaW5SaWdodCgpLmhhc1F1aXJr
KCkpCiAgICAgICAgICAgICBzdHlsZS5zZXRNYXJnaW5SaWdodChMZW5ndGgoaW50cmluc2ljTWFy
Z2luLCBGaXhlZCkpOwogICAgIH0KIAogICAgIGlmIChzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkg
ewotICAgICAgICBpZiAoc3R5bGUubWFyZ2luVG9wKCkucXVpcmsoKSkKKyAgICAgICAgaWYgKHN0
eWxlLm1hcmdpblRvcCgpLmhhc1F1aXJrKCkpCiAgICAgICAgICAgICBzdHlsZS5zZXRNYXJnaW5U
b3AoTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKLSAgICAgICAgaWYgKHN0eWxlLm1h
cmdpbkJvdHRvbSgpLnF1aXJrKCkpCisgICAgICAgIGlmIChzdHlsZS5tYXJnaW5Cb3R0b20oKS5o
YXNRdWlyaygpKQogICAgICAgICAgICAgc3R5bGUuc2V0TWFyZ2luQm90dG9tKExlbmd0aChpbnRy
aW5zaWNNYXJnaW4sIEZpeGVkKSk7CiAgICAgfQogfQpAQCAtMTg2MCw3ICsxODYwLDcgQEAgc3Rh
dGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUsIGNvbnN0IFN0eWwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICB3b3JraW5nTGVuZ3RoLmxlbmd0aCgp
LnNldFF1aXJrKHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSk7CisgICAgICAgIHdvcmtp
bmdMZW5ndGgubGVuZ3RoKCkuc2V0SGFzUXVpcmsocHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1
ZSgpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
YWxjdWxhdGlvblZhbHVlLmNwcAppbmRleCBkODBhYWJjZmNkMzM0MjI2MDc3NWQ4OGUzYjU0ODFi
ODRkMTMwYTAyLi44ZDk2NWIwMGVkYWQ2MWJhNDhhMzU4YTA4NzUyMjk4YzZhNzI5NzJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmNwcApAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNSw2ICszNiwz
MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWY8Q2FsY3VsYXRpb25WYWx1ZT4g
Q2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5v
ZGU+IHZhbHVlLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UgcmFuZ2UpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FsY3VsYXRpb25WYWx1ZShzdGQ6Om1vdmUodmFsdWUpLCBy
YW5nZSkpOworfQorCitmbG9hdCBDYWxjRXhwcmVzc2lvbk51bWJlcjo6ZXZhbHVhdGUoZmxvYXQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsdWU7Cit9CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25O
dW1iZXI6Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QK
K3sKKyAgICByZXR1cm4gb3RoZXIudHlwZSgpID09IENhbGNFeHByZXNzaW9uTm9kZU51bWJlciAm
JiAqdGhpcyA9PSB0b0NhbGNFeHByZXNzaW9uTnVtYmVyKG90aGVyKTsKK30KKworZmxvYXQgQ2Fs
Y3VsYXRpb25WYWx1ZTo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgZmxv
YXQgcmVzdWx0ID0gbV9leHByZXNzaW9uLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgLy8gRklY
TUU6IFRoaXMgdGVzdCB3YXMgb3JpZ2luYWxseSBuZWVkZWQgd2hlbiB3ZSBkaWQgbm90IGRldGVj
dCBkaXZpc2lvbiBieSB6ZXJvIGF0IHBhcnNlIHRpbWUuCisgICAgLy8gSXQncyBwb3NzaWJsZSB0
aGF0IHRoaXMgaXMgbm93IHVubmVlZGVkIGNvZGUgYW5kIGNhbiBiZSByZW1vdmVkLgorICAgIGlm
IChzdGQ6OmlzbmFuKHJlc3VsdCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3No
b3VsZENsYW1wVG9Ob25OZWdhdGl2ZSAmJiByZXN1bHQgPCAwID8gMCA6IHJlc3VsdDsKK30KKwog
ZmxvYXQgQ2FsY0V4cHJlc3Npb25CaW5hcnlPcGVyYXRpb246OmV2YWx1YXRlKGZsb2F0IG1heFZh
bHVlKSBjb25zdAogewogICAgIGZsb2F0IGxlZnQgPSBtX2xlZnRTaWRlLT5ldmFsdWF0ZShtYXhW
YWx1ZSk7CkBAIC01NSwxOSArODEsMjkgQEAgZmxvYXQgQ2FsY0V4cHJlc3Npb25CaW5hcnlPcGVy
YXRpb246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAogICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CiB9CiAKLVBhc3NSZWZQdHI8Q2FsY3Vs
YXRpb25WYWx1ZT4gQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+IHZhbHVlLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UgcmFu
Z2UpCitib29sIENhbGNFeHByZXNzaW9uQmluYXJ5T3BlcmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0
IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDYWxjdWxhdGlvblZhbHVlKHN0ZDo6bW92ZSh2YWx1ZSksIHJhbmdlKSk7CisgICAgcmV0
dXJuIG90aGVyLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVCaW5hcnlPcGVyYXRpb24gJiYg
KnRoaXMgPT0gdG9DYWxjRXhwcmVzc2lvbkJpbmFyeU9wZXJhdGlvbihvdGhlcik7CiB9CiAKLWZs
b2F0IENhbGN1bGF0aW9uVmFsdWU6OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAorZmxv
YXQgQ2FsY0V4cHJlc3Npb25MZW5ndGg6OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAog
ewotICAgIGZsb2F0IHJlc3VsdCA9IG1fdmFsdWUtPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAv
LyBGSVhNRSBjYWxjIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzgwNDExIDogcmVzdWx0IGlzIE5hTiB3
aGVuIHRoZXJlIGlzIGEgZGl2aXNpb24gCi0gICAgLy8gYnkgemVybyB3aGljaCBpc24ndCBmb3Vu
ZCBhdCBwYXJzZSB0aW1lLiAKLSAgICBpZiAoc3RkOjppc25hbihyZXN1bHQpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gbV9pc05vbk5lZ2F0aXZlICYmIHJlc3VsdCA8IDAgPyAwIDog
cmVzdWx0OworICAgIHJldHVybiBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fbGVuZ3RoLCBtYXhWYWx1
ZSk7Cit9CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25MZW5ndGg6Om9wZXJhdG9yPT0oY29uc3QgQ2Fs
Y0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIudHlwZSgp
ID09IENhbGNFeHByZXNzaW9uTm9kZUxlbmd0aCAmJiAqdGhpcyA9PSB0b0NhbGNFeHByZXNzaW9u
TGVuZ3RoKG90aGVyKTsKK30KKworZmxvYXQgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZXZh
bHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuICgxLjBmIC0gbV9wcm9n
cmVzcykgKiBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fZnJvbSwgbWF4VmFsdWUpICsgbV9wcm9ncmVz
cyAqIGZsb2F0VmFsdWVGb3JMZW5ndGgobV90bywgbWF4VmFsdWUpOworfQorCitib29sIENhbGNF
eHByZXNzaW9uQmxlbmRMZW5ndGg6Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2Rl
JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIudHlwZSgpID09IENhbGNFeHByZXNz
aW9uTm9kZUJsZW5kTGVuZ3RoICYmICp0aGlzID09IHRvQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0
aChvdGhlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaAppbmRleCBmNmFlNjc2ZWFhMDllNmMzYmE2YWQwMGJm
OTEyZGY2Nzg0YWM3YTJjLi40NDE3MzIwN2RjNzM3MGZlYTZhNDk1N2EyYzA4M2NmMjhlOGMwZjU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5oCkBAIC02Miwx
OTUgKzYyLDE3OSBAQCBlbnVtIENhbGNFeHByZXNzaW9uTm9kZVR5cGUgewogY2xhc3MgQ2FsY0V4
cHJlc3Npb25Ob2RlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBDYWxjRXhwcmVzc2lvbk5vZGUoKQotICAgICAgICA6IG1fdHlwZShDYWxjRXhwcmVzc2lvbk5v
ZGVVbmRlZmluZWQpCi0gICAgewotICAgIH0KKyAgICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbk5v
ZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSA9IENhbGNFeHByZXNzaW9uTm9kZVVuZGVmaW5lZCk7
CisgICAgdmlydHVhbCB+Q2FsY0V4cHJlc3Npb25Ob2RlKCkgeyB9CiAKLSAgICB2aXJ0dWFsIH5D
YWxjRXhwcmVzc2lvbk5vZGUoKQotICAgIHsKLSAgICB9CisgICAgQ2FsY0V4cHJlc3Npb25Ob2Rl
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKICAgICB2aXJ0dWFsIGZsb2F0
IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgPSAwOwogCi0gICAgQ2Fs
Y0V4cHJlc3Npb25Ob2RlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLXBy
b3RlY3RlZDoKLSAgICBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIG1fdHlwZTsKLX07Ci0KLWNsYXNz
IENhbGN1bGF0aW9uVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWxjdWxhdGlvblZhbHVlPiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FsY3VsYXRpb25WYWx1ZT4gY3JlYXRl
KHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IHZhbHVlLCBDYWxjdWxhdGlvblBl
cm1pdHRlZFZhbHVlUmFuZ2UpOwotICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBj
b25zdDsKLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiBvKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICoobV92YWx1ZS5nZXQoKSkgPT0gKihvLm1fdmFs
dWUuZ2V0KCkpOwotICAgIH0KLQotICAgIGJvb2wgaXNOb25OZWdhdGl2ZSgpIGNvbnN0IHsgcmV0
dXJuIG1faXNOb25OZWdhdGl2ZTsgfQotICAgIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSogZXhw
cmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLQogcHJpdmF0ZToKLSAg
ICBDYWxjdWxhdGlvblZhbHVlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IHZh
bHVlLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UgcmFuZ2UpCi0gICAgICAgIDogbV92
YWx1ZShzdGQ6Om1vdmUodmFsdWUpKQotICAgICAgICAsIG1faXNOb25OZWdhdGl2ZShyYW5nZSA9
PSBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRpdmUpCi0gICAgewotICAgIH0KLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fdmFsdWU7Ci0gICAgYm9vbCBtX2lzTm9u
TmVnYXRpdmU7CisgICAgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSBtX3R5cGU7CiB9OwogCi1jbGFz
cyBDYWxjRXhwcmVzc2lvbk51bWJlciA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworY2xh
c3MgQ2FsY0V4cHJlc3Npb25OdW1iZXIgZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2Rl
IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbk51bWJlcihmbG9hdCB2YWx1
ZSkKLSAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotICAgIHsKLSAgICAgICAgbV90eXBlID0gQ2Fs
Y0V4cHJlc3Npb25Ob2RlTnVtYmVyOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBDYWxjRXhwcmVzc2lvbk51bWJlciYgbykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X3ZhbHVlID09IG8ubV92YWx1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG8pIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICByZXR1cm4gdHlwZSgpID09IG8udHlwZSgpICYmICp0aGlzID09IHN0YXRpY19jYXN0PGNv
bnN0IENhbGNFeHByZXNzaW9uTnVtYmVyJj4obyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBmbG9h
dCBldmFsdWF0ZShmbG9hdCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X3ZhbHVlOwotICAgIH0KKyAgICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbk51bWJlcihmbG9hdCk7
CiAKICAgICBmbG9hdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIGZsb2F0IGV2YWx1YXRlKGZsb2F0KSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25z
dCBvdmVycmlkZTsKKwogICAgIGZsb2F0IG1fdmFsdWU7CiB9OwogCi1pbmxpbmUgY29uc3QgQ2Fs
Y0V4cHJlc3Npb25OdW1iZXIqIHRvQ2FsY0V4cHJlc3Npb25OdW1iZXIoY29uc3QgQ2FsY0V4cHJl
c3Npb25Ob2RlKiB2YWx1ZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TighdmFsdWUgfHwgdmFsdWUtPnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVOdW1iZXIpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDYWxjRXhwcmVzc2lvbk51bWJlcio+KHZhbHVl
KTsKLX0KLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25MZW5ndGggOiBwdWJsaWMgQ2FsY0V4cHJlc3Np
b25Ob2RlIHsKK2NsYXNzIENhbGNFeHByZXNzaW9uTGVuZ3RoIGZpbmFsIDogcHVibGljIENhbGNF
eHByZXNzaW9uTm9kZSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ2FsY0V4cHJlc3Npb25MZW5n
dGgoTGVuZ3RoIGxlbmd0aCkKLSAgICAgICAgOiBtX2xlbmd0aChsZW5ndGgpCi0gICAgewotICAg
ICAgICBtX3R5cGUgPSBDYWxjRXhwcmVzc2lvbk5vZGVMZW5ndGg7Ci0gICAgfQotCi0gICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTGVuZ3RoJiBvKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fbGVuZ3RoID09IG8ubV9sZW5ndGg7Ci0gICAgfQotCi0gICAgdmly
dHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvKSBjb25zdCBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBvLnR5cGUoKSAmJiAqdGhp
cyA9PSBzdGF0aWNfY2FzdDxjb25zdCBDYWxjRXhwcmVzc2lvbkxlbmd0aCY+KG8pOwotICAgIH0K
LQotICAgIHZpcnR1YWwgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICByZXR1cm4gZmxvYXRWYWx1ZUZvckxlbmd0aChtX2xlbmd0aCwg
bWF4VmFsdWUpOwotICAgIH0KKyAgICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbkxlbmd0aChMZW5n
dGgpOwogCiAgICAgY29uc3QgTGVuZ3RoJiBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aDsgfQogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFs
dWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENh
bGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IG92ZXJyaWRlOworCiAgICAgTGVuZ3RoIG1fbGVuZ3Ro
OwogfTsKIAotaW5saW5lIGNvbnN0IENhbGNFeHByZXNzaW9uTGVuZ3RoKiB0b0NhbGNFeHByZXNz
aW9uTGVuZ3RoKGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSogdmFsdWUpCi17Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXZhbHVlIHx8IHZhbHVlLT50eXBlKCkgPT0gQ2Fs
Y0V4cHJlc3Npb25Ob2RlTGVuZ3RoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ2Fs
Y0V4cHJlc3Npb25MZW5ndGgqPih2YWx1ZSk7Ci19Ci0KLWNsYXNzIENhbGNFeHByZXNzaW9uQmlu
YXJ5T3BlcmF0aW9uIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7CitjbGFzcyBDYWxjRXhw
cmVzc2lvbkJpbmFyeU9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUg
ewogcHVibGljOgotICAgIENhbGNFeHByZXNzaW9uQmluYXJ5T3BlcmF0aW9uKHN0ZDo6dW5pcXVl
X3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGxlZnRTaWRlLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkKLSAgICAgICAgOiBtX2xl
ZnRTaWRlKHN0ZDo6bW92ZShsZWZ0U2lkZSkpCi0gICAgICAgICwgbV9yaWdodFNpZGUoc3RkOjpt
b3ZlKHJpZ2h0U2lkZSkpCi0gICAgICAgICwgbV9vcGVyYXRvcihvcCkKLSAgICB7Ci0gICAgICAg
IG1fdHlwZSA9IENhbGNFeHByZXNzaW9uTm9kZUJpbmFyeU9wZXJhdGlvbjsKLSAgICB9Ci0KLSAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25CaW5hcnlPcGVyYXRpb24mIG8p
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9vcGVyYXRvciA9PSBvLm1fb3BlcmF0b3Ig
JiYgKm1fbGVmdFNpZGUgPT0gKm8ubV9sZWZ0U2lkZSAmJiAqbV9yaWdodFNpZGUgPT0gKm8ubV9y
aWdodFNpZGU7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2Fs
Y0V4cHJlc3Npb25Ob2RlJiBvKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHR5cGUoKSA9PSBvLnR5cGUoKSAmJiAqdGhpcyA9PSBzdGF0aWNfY2FzdDxjb25zdCBDYWxjRXhw
cmVzc2lvbkJpbmFyeU9wZXJhdGlvbiY+KG8pOwotICAgIH0KKyAgICBDYWxjRXhwcmVzc2lvbkJp
bmFyeU9wZXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lk
ZSwgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gcmlnaHRTaWRlLCBDYWxjT3Bl
cmF0b3IpOwogCi0gICAgdmlydHVhbCBmbG9hdCBldmFsdWF0ZShmbG9hdCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUqIGxlZnRTaWRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZWZ0U2lkZS5nZXQoKTsgfQotICAgIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSog
cmlnaHRTaWRlKCkgY29uc3QgeyByZXR1cm4gbV9yaWdodFNpZGUuZ2V0KCk7IH0KKyAgICBjb25z
dCBDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRlKCkgY29uc3QgeyByZXR1cm4gKm1fbGVmdFNp
ZGU7IH0KKyAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSgpIGNvbnN0IHsg
cmV0dXJuICptX3JpZ2h0U2lkZTsgfQogICAgIENhbGNPcGVyYXRvciBnZXRPcGVyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmF0b3I7IH0KIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGZsb2F0
IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBvdmVycmlkZTsK
KwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fbGVmdFNpZGU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gbV9yaWdodFNpZGU7CiAgICAg
Q2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7CiB9OwogCi1pbmxpbmUgY29uc3QgQ2FsY0V4cHJlc3Np
b25CaW5hcnlPcGVyYXRpb24qIHRvQ2FsY0V4cHJlc3Npb25CaW5hcnlPcGVyYXRpb24oY29uc3Qg
Q2FsY0V4cHJlc3Npb25Ob2RlKiB2YWx1ZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTighdmFsdWUgfHwgdmFsdWUtPnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVC
aW5hcnlPcGVyYXRpb24pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDYWxjRXhwcmVz
c2lvbkJpbmFyeU9wZXJhdGlvbio+KHZhbHVlKTsKLX0KLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25C
bGVuZExlbmd0aCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworY2xhc3MgQ2FsY0V4cHJl
c3Npb25CbGVuZExlbmd0aCBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgewogcHVi
bGljOgotICAgIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgoTGVuZ3RoIGZyb20sIExlbmd0aCB0
bywgZmxvYXQgcHJvZ3Jlc3MpCi0gICAgICAgIDogbV9mcm9tKGZyb20pCi0gICAgICAgICwgbV90
byh0bykKLSAgICAgICAgLCBtX3Byb2dyZXNzKHByb2dyZXNzKQotICAgIHsKLSAgICAgICAgbV90
eXBlID0gQ2FsY0V4cHJlc3Npb25Ob2RlQmxlbmRMZW5ndGg7Ci0gICAgfQotCi0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgmIG8pIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9wcm9ncmVzcyA9PSBvLm1fcHJvZ3Jlc3MgJiYgbV9mcm9tID09
IG8ubV9mcm9tICYmIG1fdG8gPT0gby5tX3RvOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgbykgY29uc3Qgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0eXBlKCkgPT0gby50eXBlKCkgJiYgKnRoaXMgPT0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCY+KG8pOwotICAgIH0KLQotICAg
IHZpcnR1YWwgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICByZXR1cm4gKDEuMGYgLSBtX3Byb2dyZXNzKSAqIGZsb2F0VmFsdWVGb3JM
ZW5ndGgobV9mcm9tLCBtYXhWYWx1ZSkgKyBtX3Byb2dyZXNzICogZmxvYXRWYWx1ZUZvckxlbmd0
aChtX3RvLCBtYXhWYWx1ZSk7Ci0gICAgfQorICAgIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgo
TGVuZ3RoIGZyb20sIExlbmd0aCB0bywgZmxvYXQgcHJvZ3Jlc3MpOwogCiAgICAgY29uc3QgTGVu
Z3RoJiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9CiAgICAgY29uc3QgTGVuZ3RoJiB0
bygpIGNvbnN0IHsgcmV0dXJuIG1fdG87IH0KICAgICBmbG9hdCBwcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvZ3Jlc3M7IH0KIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGZsb2F0IGV2YWx1
YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBvdmVycmlkZTsKKwogICAg
IExlbmd0aCBtX2Zyb207CiAgICAgTGVuZ3RoIG1fdG87CiAgICAgZmxvYXQgbV9wcm9ncmVzczsK
IH07CiAKLWlubGluZSBjb25zdCBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoKiB0b0NhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGgoY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlKiB2YWx1ZSkKK2NsYXNz
IENhbGN1bGF0aW9uVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWxjdWxhdGlvblZhbHVlPiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY3JlYXRlKHN0
ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+LCBDYWxjdWxhdGlvblBlcm1pdHRlZFZh
bHVlUmFuZ2UpOworICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdDsKKwor
ICAgIGJvb2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRDbGFtcFRvTm9uTmVnYXRpdmU7IH0KKyAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIGV4
cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiAqbV9leHByZXNzaW9uOyB9CisKK3ByaXZhdGU6Cisg
ICAgQ2FsY3VsYXRpb25WYWx1ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiwg
Q2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxjRXhwcmVzc2lvbk5vZGU+IG1fZXhwcmVzc2lvbjsKKyAgICBib29sIG1fc2hvdWxkQ2xhbXBU
b05vbk5lZ2F0aXZlOworfTsKKworaW5saW5lIENhbGNFeHByZXNzaW9uTm9kZTo6Q2FsY0V4cHJl
c3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBl
KQoreworfQorCitpbmxpbmUgQ2FsY3VsYXRpb25WYWx1ZTo6Q2FsY3VsYXRpb25WYWx1ZShzdGQ6
OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBleHByZXNzaW9uLCBDYWxjdWxhdGlvblBl
cm1pdHRlZFZhbHVlUmFuZ2UgcmFuZ2UpCisgICAgOiBtX2V4cHJlc3Npb24oc3RkOjptb3ZlKGV4
cHJlc3Npb24pKQorICAgICwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUocmFuZ2UgPT0gQ2Fs
Y3VsYXRpb25SYW5nZU5vbk5lZ2F0aXZlKQoreworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIGEsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIGIpCit7
CisgICAgcmV0dXJuIGEuZXhwcmVzc2lvbigpID09IGIuZXhwcmVzc2lvbigpOworfQorCitpbmxp
bmUgQ2FsY0V4cHJlc3Npb25OdW1iZXI6OkNhbGNFeHByZXNzaW9uTnVtYmVyKGZsb2F0IHZhbHVl
KQorICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZU51bWJlcikKKyAg
ICAsIG1fdmFsdWUodmFsdWUpCit7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25OdW1iZXImIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uTnVtYmVyJiBiKQor
eworICAgIHJldHVybiBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOworfQorCitpbmxpbmUgY29uc3Qg
Q2FsY0V4cHJlc3Npb25OdW1iZXImIHRvQ2FsY0V4cHJlc3Npb25OdW1iZXIoY29uc3QgQ2FsY0V4
cHJlc3Npb25Ob2RlJiB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTih2YWx1ZS50eXBlKCkgPT0gQ2FsY0V4cHJlc3Npb25Ob2RlTnVtYmVyKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ2FsY0V4cHJlc3Npb25OdW1iZXImPih2YWx1ZSk7Cit9CisK
K2lubGluZSBDYWxjRXhwcmVzc2lvbkxlbmd0aDo6Q2FsY0V4cHJlc3Npb25MZW5ndGgoTGVuZ3Ro
IGxlbmd0aCkKKyAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVMZW5n
dGgpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgQ2FsY0V4cHJlc3Npb25MZW5ndGgmIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uTGVu
Z3RoJiBiKQoreworICAgIHJldHVybiBhLmxlbmd0aCgpID09IGIubGVuZ3RoKCk7Cit9CisKK2lu
bGluZSBjb25zdCBDYWxjRXhwcmVzc2lvbkxlbmd0aCYgdG9DYWxjRXhwcmVzc2lvbkxlbmd0aChj
b25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIHZhbHVlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKHZhbHVlLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVMZW5ndGgp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDYWxjRXhwcmVzc2lvbkxlbmd0aCY+KHZh
bHVlKTsKK30KKworaW5saW5lIENhbGNFeHByZXNzaW9uQmluYXJ5T3BlcmF0aW9uOjpDYWxjRXhw
cmVzc2lvbkJpbmFyeU9wZXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2Rl
PiBsZWZ0U2lkZSwgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gcmlnaHRTaWRl
LCBDYWxjT3BlcmF0b3Igb3ApCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Np
b25Ob2RlQmluYXJ5T3BlcmF0aW9uKQorICAgICwgbV9sZWZ0U2lkZShzdGQ6Om1vdmUobGVmdFNp
ZGUpKQorICAgICwgbV9yaWdodFNpZGUoc3RkOjptb3ZlKHJpZ2h0U2lkZSkpCisgICAgLCBtX29w
ZXJhdG9yKG9wKQoreworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHBy
ZXNzaW9uQmluYXJ5T3BlcmF0aW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbkJpbmFyeU9wZXJh
dGlvbiYgYikKK3sKKyAgICByZXR1cm4gYS5nZXRPcGVyYXRvcigpID09IGIuZ2V0T3BlcmF0b3Io
KSAmJiBhLmxlZnRTaWRlKCkgPT0gYi5sZWZ0U2lkZSgpICYmIGEucmlnaHRTaWRlKCkgPT0gYi5y
aWdodFNpZGUoKTsKK30KKworaW5saW5lIGNvbnN0IENhbGNFeHByZXNzaW9uQmluYXJ5T3BlcmF0
aW9uJiB0b0NhbGNFeHByZXNzaW9uQmluYXJ5T3BlcmF0aW9uKGNvbnN0IENhbGNFeHByZXNzaW9u
Tm9kZSYgdmFsdWUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04odmFs
dWUudHlwZSgpID09IENhbGNFeHByZXNzaW9uTm9kZUJpbmFyeU9wZXJhdGlvbik7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IENhbGNFeHByZXNzaW9uQmluYXJ5T3BlcmF0aW9uJj4odmFs
dWUpOworfQorCitpbmxpbmUgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6Q2FsY0V4cHJlc3Np
b25CbGVuZExlbmd0aChMZW5ndGggZnJvbSwgTGVuZ3RoIHRvLCBmbG9hdCBwcm9ncmVzcykKKyAg
ICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVCbGVuZExlbmd0aCkKKyAg
ICAsIG1fZnJvbShmcm9tKQorICAgICwgbV90byh0bykKKyAgICAsIG1fcHJvZ3Jlc3MocHJvZ3Jl
c3MpCit7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25C
bGVuZExlbmd0aCYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCYgYikKK3sKKyAg
ICByZXR1cm4gYS5wcm9ncmVzcygpID09IGIucHJvZ3Jlc3MoKSAmJiBhLmZyb20oKSA9PSBiLmZy
b20oKSAmJiBhLnRvKCkgPT0gYi50bygpOworfQorCitpbmxpbmUgY29uc3QgQ2FsY0V4cHJlc3Np
b25CbGVuZExlbmd0aCYgdG9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoKGNvbnN0IENhbGNFeHBy
ZXNzaW9uTm9kZSYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIXZhbHVlIHx8IHZhbHVlLT50eXBlKCkgPT0gQ2FsY0V4cHJlc3Npb25Ob2RlQmxlbmRMZW5n
dGgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDYWxjRXhwcmVzc2lvbkJsZW5kTGVu
Z3RoKj4odmFsdWUpOworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVl
LnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVCbGVuZExlbmd0aCk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgmPih2YWx1ZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCmluZGV4
IGY4NDA0YjBjN2YzNGY2MDNkN2Y1M2Y5ZGEyYzBkMmY4ZmFiNWExYzIuLjgyMTJmN2I0ZmRiNjcx
YzdjNGFhZjJmNWMxZmM5OWQ0ZGFhZDk3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xlbmd0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNw
cApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAoIG11ZWxsZXJA
a2RlLm9yZyApCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbmRyZXcgV2VsbGluZ3RvbiAo
cHJvdG9uQHdpcmV0YXBwZWQubmV0KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI3LDcgKzI3LDggQEAKIAog
I2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVmlldy5oPgpAQCAtMTUxLDcwICsxNTIsMTAyIEBAIHN0ZDo6dW5pcXVlX3B0
cjxMZW5ndGhbXT4gbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVu
KQogCiAgICAgcmV0dXJuIHI7CiB9Ci0gICAgICAgIAotY2xhc3MgQ2FsY3VsYXRpb25WYWx1ZUhh
bmRsZU1hcCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK2NsYXNzIENhbGN1bGF0
aW9uVmFsdWVNYXAgewogcHVibGljOgotICAgIENhbGN1bGF0aW9uVmFsdWVIYW5kbGVNYXAoKSAK
LSAgICAgICAgOiBtX2luZGV4KDEpIAotICAgIHsKLSAgICB9CisgICAgQ2FsY3VsYXRpb25WYWx1
ZU1hcCgpOworCisgICAgdW5zaWduZWQgaW5zZXJ0KFBhc3NSZWY8Q2FsY3VsYXRpb25WYWx1ZT4p
OworICAgIHZvaWQgcmVmKHVuc2lnbmVkIGhhbmRsZSk7CisgICAgdm9pZCBkZXJlZih1bnNpZ25l
ZCBoYW5kbGUpOworCisgICAgQ2FsY3VsYXRpb25WYWx1ZSYgZ2V0KHVuc2lnbmVkIGhhbmRsZSkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgdWludDY0X3Qg
cmVmZXJlbmNlQ291bnRNaW51c09uZTsKKyAgICAgICAgQ2FsY3VsYXRpb25WYWx1ZSogdmFsdWU7
CisgICAgICAgIEVudHJ5KCk7CisgICAgICAgIEVudHJ5KENhbGN1bGF0aW9uVmFsdWUmKTsKKyAg
ICB9OworCisgICAgdW5zaWduZWQgbV9uZXh0QXZhaWxhYmxlSGFuZGxlOworICAgIEhhc2hNYXA8
dW5zaWduZWQsIEVudHJ5PiBtX21hcDsKK307CisKK2lubGluZSBDYWxjdWxhdGlvblZhbHVlTWFw
OjpFbnRyeTo6RW50cnkoKQorICAgIDogcmVmZXJlbmNlQ291bnRNaW51c09uZSgwKQorICAgICwg
dmFsdWUobnVsbHB0cikKK3sKK30KKworaW5saW5lIENhbGN1bGF0aW9uVmFsdWVNYXA6OkVudHJ5
OjpFbnRyeShDYWxjdWxhdGlvblZhbHVlJiB2YWx1ZSkKKyAgICA6IHJlZmVyZW5jZUNvdW50TWlu
dXNPbmUoMCkKKyAgICAsIHZhbHVlKCZ2YWx1ZSkKK3sKK30KKworaW5saW5lIENhbGN1bGF0aW9u
VmFsdWVNYXA6OkNhbGN1bGF0aW9uVmFsdWVNYXAoKQorICAgIDogbV9uZXh0QXZhaWxhYmxlSGFu
ZGxlKDEpCit7Cit9CiAgICAgCi0gICAgaW50IGluc2VydChQYXNzUmVmUHRyPENhbGN1bGF0aW9u
VmFsdWU+IGNhbGNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2luZGV4KTsKLSAgICAg
ICAgLy8gRklYTUUgY2FsYygpOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODA0ODkKLSAgICAgICAgLy8gVGhpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgaGFuZGxl
IGdlbmVyYXRpb24gc2NoZW1lIGlzIHBvdGVudGlhbGx5IHdhc3RlZnVsCi0gICAgICAgIC8vIG9m
IHRoZSBoYW5kbGUgc3BhY2UuIENvbnNpZGVyIHJldXNpbmcgZW1wdHkgaGFuZGxlcy4KLSAgICAg
ICAgd2hpbGUgKG1fbWFwLmNvbnRhaW5zKG1faW5kZXgpKQotICAgICAgICAgICAgbV9pbmRleCsr
OwotICAgICAgICAKLSAgICAgICAgbV9tYXAuc2V0KG1faW5kZXgsIGNhbGNWYWx1ZSk7ICAgICAg
IAotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1faW5kZXg7Ci0gICAgfQoraW5saW5lIHVuc2ln
bmVkIENhbGN1bGF0aW9uVmFsdWVNYXA6Omluc2VydChQYXNzUmVmPENhbGN1bGF0aW9uVmFsdWU+
IHZhbHVlKQoreworICAgIEFTU0VSVChtX25leHRBdmFpbGFibGVIYW5kbGUpOwogCi0gICAgdm9p
ZCByZW1vdmUoaW50IGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbWFwLmNvbnRhaW5z
KGluZGV4KSk7Ci0gICAgICAgIG1fbWFwLnJlbW92ZShpbmRleCk7Ci0gICAgfQorICAgIC8vIFRo
ZSBsZWFrUmVmIGJlbG93IGlzIGJhbGFuY2VkIGJ5IHRoZSBkZXJlZiBpbiB0aGUgZGVyZWYgbWVt
YmVyIGZ1bmN0aW9uLgorICAgIEVudHJ5IGxlYWtlZFZhbHVlID0gdmFsdWUubGVha1JlZigpOwog
Ci0gICAgdm9pZCByZW1vdmUoSGFzaE1hcDxpbnQsIFJlZlB0cjxDYWxjdWxhdGlvblZhbHVlPj46
Oml0ZXJhdG9yIGl0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGl0ICE9IG1fbWFwLmVuZCgpKTsK
LSAgICAgICAgbV9tYXAucmVtb3ZlKGl0KTsKLSAgICB9CisgICAgLy8gRklYTUU6IFRoaXMgbW9u
b3RvbmljYWxseSBpbmNyZWFzaW5nIGhhbmRsZSBnZW5lcmF0aW9uIHNjaGVtZSBpcyBwb3RlbnRp
YWxseSB3YXN0ZWZ1bAorICAgIC8vIG9mIHRoZSBoYW5kbGUgc3BhY2UuIENvbnNpZGVyIHJldXNp
bmcgZW1wdHkgaGFuZGxlcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTgwNDg5CisgICAgd2hpbGUgKCFtX21hcC5pc1ZhbGlkS2V5KG1fbmV4dEF2YWlsYWJsZUhhbmRs
ZSkgfHwgIW1fbWFwLmFkZChtX25leHRBdmFpbGFibGVIYW5kbGUsIGxlYWtlZFZhbHVlKS5pc05l
d0VudHJ5KQorICAgICAgICArK21fbmV4dEF2YWlsYWJsZUhhbmRsZTsKIAotICAgIFBhc3NSZWZQ
dHI8Q2FsY3VsYXRpb25WYWx1ZT4gZ2V0KGludCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX21hcC5jb250YWlucyhpbmRleCkpOwotICAgICAgICByZXR1cm4gbV9tYXAuZ2V0KGluZGV4
KTsKLSAgICB9CisgICAgcmV0dXJuIG1fbmV4dEF2YWlsYWJsZUhhbmRsZSsrOworfQorCitpbmxp
bmUgQ2FsY3VsYXRpb25WYWx1ZSYgQ2FsY3VsYXRpb25WYWx1ZU1hcDo6Z2V0KHVuc2lnbmVkIGhh
bmRsZSkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9tYXAuY29udGFpbnMoaGFuZGxlKSk7CisKKyAg
ICByZXR1cm4gKm1fbWFwLmZpbmQoaGFuZGxlKS0+dmFsdWUudmFsdWU7Cit9CisKK2lubGluZSB2
b2lkIENhbGN1bGF0aW9uVmFsdWVNYXA6OnJlZih1bnNpZ25lZCBoYW5kbGUpCit7CisgICAgQVNT
RVJUKG1fbWFwLmNvbnRhaW5zKGhhbmRsZSkpOworCisgICAgKyttX21hcC5maW5kKGhhbmRsZSkt
PnZhbHVlLnJlZmVyZW5jZUNvdW50TWludXNPbmU7Cit9CisKK2lubGluZSB2b2lkIENhbGN1bGF0
aW9uVmFsdWVNYXA6OmRlcmVmKHVuc2lnbmVkIGhhbmRsZSkKK3sKKyAgICBBU1NFUlQobV9tYXAu
Y29udGFpbnMoaGFuZGxlKSk7CiAKLSAgICBIYXNoTWFwPGludCwgUmVmUHRyPENhbGN1bGF0aW9u
VmFsdWU+Pjo6aXRlcmF0b3IgZmluZChpbnQgaW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQo
bV9tYXAuY29udGFpbnMoaW5kZXgpKTsKLSAgICAgICAgcmV0dXJuIG1fbWFwLmZpbmQoaW5kZXgp
OworICAgIGF1dG8gaXQgPSBtX21hcC5maW5kKGhhbmRsZSk7CisgICAgaWYgKGl0LT52YWx1ZS5y
ZWZlcmVuY2VDb3VudE1pbnVzT25lKSB7CisgICAgICAgIC0taXQtPnZhbHVlLnJlZmVyZW5jZUNv
dW50TWludXNPbmU7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLXByaXZhdGU6ICAgICAgICAK
LSAgICBpbnQgbV9pbmRleDsKLSAgICBIYXNoTWFwPGludCwgUmVmUHRyPENhbGN1bGF0aW9uVmFs
dWU+PiBtX21hcDsKLX07Ci0gICAgCi1zdGF0aWMgQ2FsY3VsYXRpb25WYWx1ZUhhbmRsZU1hcCYg
Y2FsY0hhbmRsZXMoKQorICAgIC8vIFRoZSBkZXJlZiBiZWxvdyBpcyBiYWxhbmNlZCBieSB0aGUg
bGVha1JlZiBpbiB0aGUgaW5zZXJ0IG1lbWJlciBmdW5jdGlvbi4KKyAgICBpdC0+dmFsdWUudmFs
dWUtPmRlcmVmKCk7CisgICAgbV9tYXAucmVtb3ZlKGl0KTsKK30KKworc3RhdGljIENhbGN1bGF0
aW9uVmFsdWVNYXAmIGNhbGN1bGF0aW9uVmFsdWVzKCkKIHsKLSAgICBERVBSRUNBVEVEX0RFRklO
RV9TVEFUSUNfTE9DQUwoQ2FsY3VsYXRpb25WYWx1ZUhhbmRsZU1hcCwgaGFuZGxlTWFwLCAoKSk7
Ci0gICAgcmV0dXJuIGhhbmRsZU1hcDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2FsY3Vs
YXRpb25WYWx1ZU1hcD4gbWFwOworICAgIHJldHVybiBtYXA7CiB9CiAKLUxlbmd0aDo6TGVuZ3Ro
KFBhc3NSZWZQdHI8Q2FsY3VsYXRpb25WYWx1ZT4gY2FsYykKLSAgICA6IG1fcXVpcmsoZmFsc2Up
CitMZW5ndGg6Okxlbmd0aChQYXNzUmVmPENhbGN1bGF0aW9uVmFsdWU+IHZhbHVlKQorICAgIDog
bV9oYXNRdWlyayhmYWxzZSkKICAgICAsIG1fdHlwZShDYWxjdWxhdGVkKQogICAgICwgbV9pc0Zs
b2F0KGZhbHNlKQogewotICAgIG1faW50VmFsdWUgPSBjYWxjSGFuZGxlcygpLmluc2VydChjYWxj
KTsKKyAgICBtX2NhbGN1bGF0aW9uVmFsdWVIYW5kbGUgPSBjYWxjdWxhdGlvblZhbHVlcygpLmlu
c2VydChzdGQ6Om1vdmUodmFsdWUpKTsKIH0KICAgICAgICAgCiBMZW5ndGggTGVuZ3RoOjpibGVu
ZE1peGVkVHlwZXMoY29uc3QgTGVuZ3RoJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CkBA
IC0yMjgsMzkgKzI2MSwzNyBAQCBMZW5ndGggTGVuZ3RoOjpibGVuZE1peGVkVHlwZXMoY29uc3Qg
TGVuZ3RoJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CiAgICAgYXV0byBibGVuZCA9IHN0
ZDo6bWFrZV91bmlxdWU8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4oZnJvbSwgKnRoaXMsIHBy
b2dyZXNzKTsKICAgICByZXR1cm4gTGVuZ3RoKENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0ZShzdGQ6
Om1vdmUoYmxlbmQpLCBDYWxjdWxhdGlvblJhbmdlQWxsKSk7CiB9Ci0gICAgICAgICAgCi1QYXNz
UmVmUHRyPENhbGN1bGF0aW9uVmFsdWU+IExlbmd0aDo6Y2FsY3VsYXRpb25WYWx1ZSgpIGNvbnN0
CisKK0NhbGN1bGF0aW9uVmFsdWUmIExlbmd0aDo6Y2FsY3VsYXRpb25WYWx1ZSgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGlzQ2FsY3VsYXRlZCgpKTsKLSAgICByZXR1cm4gY2FsY0hhbmRsZXMoKS5n
ZXQoY2FsY3VsYXRpb25IYW5kbGUoKSk7CisgICAgcmV0dXJuIGNhbGN1bGF0aW9uVmFsdWVzKCku
Z2V0KG1fY2FsY3VsYXRpb25WYWx1ZUhhbmRsZSk7CiB9CiAgICAgCi12b2lkIExlbmd0aDo6aW5j
cmVtZW50Q2FsY3VsYXRlZFJlZigpIGNvbnN0Cit2b2lkIExlbmd0aDo6cmVmKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoaXNDYWxjdWxhdGVkKCkpOwotICAgIGNhbGN1bGF0aW9uVmFsdWUoKS0+cmVm
KCk7CisgICAgY2FsY3VsYXRpb25WYWx1ZXMoKS5yZWYobV9jYWxjdWxhdGlvblZhbHVlSGFuZGxl
KTsKIH0KIAotdm9pZCBMZW5ndGg6OmRlY3JlbWVudENhbGN1bGF0ZWRSZWYoKSBjb25zdAordm9p
ZCBMZW5ndGg6OmRlcmVmKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNDYWxjdWxhdGVkKCkpOwot
ICAgIGF1dG8gaXQgPSBjYWxjSGFuZGxlcygpLmZpbmQoY2FsY3VsYXRpb25IYW5kbGUoKSk7Ci0g
ICAgaWYgKGl0LT52YWx1ZS0+aGFzT25lUmVmKCkpCi0gICAgICAgIGNhbGNIYW5kbGVzKCkucmVt
b3ZlKGl0KTsKKyAgICBjYWxjdWxhdGlvblZhbHVlcygpLmRlcmVmKG1fY2FsY3VsYXRpb25WYWx1
ZUhhbmRsZSk7CiB9CiAKIGZsb2F0IExlbmd0aDo6bm9uTmFuQ2FsY3VsYXRlZFZhbHVlKGludCBt
YXhWYWx1ZSkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNDYWxjdWxhdGVkKCkpOwotICAgIGZsb2F0
IHJlc3VsdCA9IGNhbGN1bGF0aW9uVmFsdWUoKS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgIGZs
b2F0IHJlc3VsdCA9IGNhbGN1bGF0aW9uVmFsdWUoKS5ldmFsdWF0ZShtYXhWYWx1ZSk7CiAgICAg
aWYgKHN0ZDo6aXNuYW4ocmVzdWx0KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotYm9vbCBMZW5ndGg6OmlzQ2FsY3VsYXRlZEVxdWFsKGNvbnN0IExlbmd0aCYg
bykgY29uc3QKK2Jvb2wgTGVuZ3RoOjppc0NhbGN1bGF0ZWRFcXVhbChjb25zdCBMZW5ndGgmIG90
aGVyKSBjb25zdAogewotICAgIHJldHVybiBpc0NhbGN1bGF0ZWQoKSAmJiAoY2FsY3VsYXRpb25W
YWx1ZSgpID09IG8uY2FsY3VsYXRpb25WYWx1ZSgpIHx8ICpjYWxjdWxhdGlvblZhbHVlKCkgPT0g
Km8uY2FsY3VsYXRpb25WYWx1ZSgpKTsKKyAgICByZXR1cm4gY2FsY3VsYXRpb25WYWx1ZSgpID09
IG90aGVyLmNhbGN1bGF0aW9uVmFsdWUoKTsKIH0KIAogc3RydWN0IFNhbWVTaXplQXNMZW5ndGgg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAppbmRleCA3MWU3OWYwNjZjMmViZTYzZmJlNGRmMDMx
YmJhMmVkOTgyMWExZTI0Li42ODcxNzA3MDE5MGIyMThjNWM4ODQzMjk4YWVjYzNhYzFhMWE0Zjc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICAgIENvcHlyaWdodCAoQykgMjAxMSBSaWsgQ2FiYW5pZXIgKGNhYmFuaWVyQGFkb2JlLmNv
bSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMTEgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTI5LDggKzI5LDYgQEAKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsMjg1ICs0NiwzOTQgQEAgY2xh
c3MgQ2FsY3VsYXRpb25WYWx1ZTsKIHN0cnVjdCBMZW5ndGggewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIExlbmd0aCgpCi0gICAgICAgIDogIG1faW50VmFsdWUo
MCksIG1fcXVpcmsoZmFsc2UpLCBtX3R5cGUoQXV0byksIG1faXNGbG9hdChmYWxzZSkKLSAgICB7
Ci0gICAgfQotCi0gICAgTGVuZ3RoKExlbmd0aFR5cGUgdCkKLSAgICAgICAgOiBtX2ludFZhbHVl
KDApLCBtX3F1aXJrKGZhbHNlKSwgbV90eXBlKHQpLCBtX2lzRmxvYXQoZmFsc2UpCi0gICAgewot
ICAgICAgICBBU1NFUlQodCAhPSBDYWxjdWxhdGVkKTsKLSAgICB9Ci0KLSAgICBMZW5ndGgoaW50
IHYsIExlbmd0aFR5cGUgdCwgYm9vbCBxID0gZmFsc2UpCi0gICAgICAgIDogbV9pbnRWYWx1ZSh2
KSwgbV9xdWlyayhxKSwgbV90eXBlKHQpLCBtX2lzRmxvYXQoZmFsc2UpCi0gICAgewotICAgICAg
ICBBU1NFUlQodCAhPSBDYWxjdWxhdGVkKTsKLSAgICB9Ci0gICAgCi0gICAgTGVuZ3RoKExheW91
dFVuaXQgdiwgTGVuZ3RoVHlwZSB0LCBib29sIHEgPSBmYWxzZSkKLSAgICAgICAgOiBtX2Zsb2F0
VmFsdWUodi50b0Zsb2F0KCkpLCBtX3F1aXJrKHEpLCBtX3R5cGUodCksIG1faXNGbG9hdCh0cnVl
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHQgIT0gQ2FsY3VsYXRlZCk7Ci0gICAgfQotICAgIAot
ICAgIExlbmd0aChmbG9hdCB2LCBMZW5ndGhUeXBlIHQsIGJvb2wgcSA9IGZhbHNlKQotICAgICAg
ICA6IG1fZmxvYXRWYWx1ZSh2KSwgbV9xdWlyayhxKSwgbV90eXBlKHQpLCBtX2lzRmxvYXQodHJ1
ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0ICE9IENhbGN1bGF0ZWQpOwotICAgIH0KLQotICAg
IExlbmd0aChkb3VibGUgdiwgTGVuZ3RoVHlwZSB0LCBib29sIHEgPSBmYWxzZSkKLSAgICAgICAg
OiBtX3F1aXJrKHEpLCBtX3R5cGUodCksIG1faXNGbG9hdCh0cnVlKQotICAgIHsKLSAgICAgICAg
bV9mbG9hdFZhbHVlID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYpOyAgICAKLSAgICB9Ci0KLSAgICBl
eHBsaWNpdCBMZW5ndGgoUGFzc1JlZlB0cjxDYWxjdWxhdGlvblZhbHVlPik7Ci0KLSAgICBMZW5n
dGgoY29uc3QgTGVuZ3RoJiBsZW5ndGgpCi0gICAgewotICAgICAgICBpbml0RnJvbUxlbmd0aChs
ZW5ndGgpOwotICAgIH0KLQotICAgIExlbmd0aChMZW5ndGgmJiBvdGhlcikKLSAgICB7Ci0gICAg
ICAgIG1vdmVGcm9tTGVuZ3RoKHN0ZDo6bW92ZShvdGhlcikpOwotICAgIH0KLQotICAgIExlbmd0
aCYgb3BlcmF0b3I9KGNvbnN0IExlbmd0aCYgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgaW5pdEZy
b21MZW5ndGgobGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KKyAgICBMZW5n
dGgoTGVuZ3RoVHlwZSA9IEF1dG8pOwogCi0gICAgTGVuZ3RoJiBvcGVyYXRvcj0oTGVuZ3RoJiYg
b3RoZXIpCi0gICAgewotICAgICAgICBpZiAodGhpcyAhPSAmb3RoZXIpCi0gICAgICAgICAgICBt
b3ZlRnJvbUxlbmd0aChzdGQ6Om1vdmUob3RoZXIpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgIH0KKyAgICBMZW5ndGgoaW50IHZhbHVlLCBMZW5ndGhUeXBlLCBib29sIGhhc1F1aXJrID0g
ZmFsc2UpOworICAgIExlbmd0aChMYXlvdXRVbml0IHZhbHVlLCBMZW5ndGhUeXBlLCBib29sIGhh
c1F1aXJrID0gZmFsc2UpOworICAgIExlbmd0aChmbG9hdCB2YWx1ZSwgTGVuZ3RoVHlwZSwgYm9v
bCBoYXNRdWlyayA9IGZhbHNlKTsKKyAgICBMZW5ndGgoZG91YmxlIHZhbHVlLCBMZW5ndGhUeXBl
LCBib29sIGhhc1F1aXJrID0gZmFsc2UpOwogCi0gICAgfkxlbmd0aCgpCi0gICAgewotICAgICAg
ICBpZiAoaXNDYWxjdWxhdGVkKCkpCi0gICAgICAgICAgICBkZWNyZW1lbnRDYWxjdWxhdGVkUmVm
KCk7Ci0gICAgfSAgCi0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExlbmd0aCYgbykg
Y29uc3QgeyByZXR1cm4gKG1fdHlwZSA9PSBvLm1fdHlwZSkgJiYgKG1fcXVpcmsgPT0gby5tX3F1
aXJrKSAmJiAoaXNVbmRlZmluZWQoKSB8fCAoZ2V0RmxvYXRWYWx1ZSgpID09IG8uZ2V0RmxvYXRW
YWx1ZSgpKSB8fCBpc0NhbGN1bGF0ZWRFcXVhbChvKSk7IH0KLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgTGVuZ3RoJiBvKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9Ci0KLSAgICBj
b25zdCBMZW5ndGgmIG9wZXJhdG9yKj0oZmxvYXQgdikKLSAgICB7ICAgICAgIAotICAgICAgICBp
ZiAoaXNDYWxjdWxhdGVkKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAobV9pc0Zsb2F0KQotICAgICAgICAgICAgbV9mbG9hdFZhbHVlID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1fZmxvYXRWYWx1ZSAqIHYpOwotICAgICAgICBlbHNlICAgICAgICAKLSAgICAgICAgICAg
IG1faW50VmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KG1faW50VmFsdWUgKiB2KTsKLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIGZsb2F0IHZh
bHVlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFZhbHVlKCk7Ci0gICAg
fQotCi0gICAgIGludCBpbnRWYWx1ZSgpIGNvbnN0Ci0gICAgIHsKLSAgICAgICAgaWYgKGlzQ2Fs
Y3VsYXRlZCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBnZXRJbnRWYWx1ZSgpOwot
ICAgIH0KLQotICAgIGZsb2F0IHBlcmNlbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzUGVyY2VudCgpKTsKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0VmFsdWUoKTsKLSAgICB9Cisg
ICAgZXhwbGljaXQgTGVuZ3RoKFBhc3NSZWY8Q2FsY3VsYXRpb25WYWx1ZT4pOwogCi0gICAgUGFz
c1JlZlB0cjxDYWxjdWxhdGlvblZhbHVlPiBjYWxjdWxhdGlvblZhbHVlKCkgY29uc3Q7CisgICAg
TGVuZ3RoKGNvbnN0IExlbmd0aCYpOworICAgIExlbmd0aChMZW5ndGgmJik7CisgICAgTGVuZ3Ro
JiBvcGVyYXRvcj0oY29uc3QgTGVuZ3RoJik7CisgICAgTGVuZ3RoJiBvcGVyYXRvcj0oTGVuZ3Ro
JiYpOwogCi0gICAgTGVuZ3RoVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
TGVuZ3RoVHlwZT4obV90eXBlKTsgfQotICAgIGJvb2wgcXVpcmsoKSBjb25zdCB7IHJldHVybiBt
X3F1aXJrOyB9CisgICAgfkxlbmd0aCgpOwogCi0gICAgdm9pZCBzZXRRdWlyayhib29sIHF1aXJr
KQotICAgIHsKLSAgICAgICAgbV9xdWlyayA9IHF1aXJrOwotICAgIH0KKyAgICB2b2lkIHNldFZh
bHVlKExlbmd0aFR5cGUsIGludCB2YWx1ZSk7CisgICAgdm9pZCBzZXRWYWx1ZShMZW5ndGhUeXBl
LCBmbG9hdCB2YWx1ZSk7CisgICAgdm9pZCBzZXRWYWx1ZShMZW5ndGhUeXBlLCBMYXlvdXRVbml0
IHZhbHVlKTsKKyAgICBMZW5ndGgmIG9wZXJhdG9yKj0oZmxvYXQpOwogCi0gICAgdm9pZCBzZXRW
YWx1ZShMZW5ndGhUeXBlIHQsIGludCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1fdHlwZSA9IHQ7
Ci0gICAgICAgIG1faW50VmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgbV9pc0Zsb2F0ID0gZmFsc2U7
Ci0gICAgfQorICAgIHZvaWQgc2V0SGFzUXVpcmsoYm9vbCk7CiAKLSAgICB2b2lkIHNldFZhbHVl
KGludCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0NhbGN1bGF0ZWQoKSkgewotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgc2V0VmFsdWUoRml4ZWQsIHZhbHVlKTsKLSAgICB9CisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExlbmd0aCYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBM
ZW5ndGgmKSBjb25zdDsKIAotICAgIHZvaWQgc2V0VmFsdWUoTGVuZ3RoVHlwZSB0LCBmbG9hdCB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1fdHlwZSA9IHQ7Ci0gICAgICAgIG1fZmxvYXRWYWx1ZSA9
IHZhbHVlOwotICAgICAgICBtX2lzRmxvYXQgPSB0cnVlOyAgICAKLSAgICB9CisgICAgZmxvYXQg
dmFsdWUoKSBjb25zdDsKKyAgICBpbnQgaW50VmFsdWUoKSBjb25zdDsKKyAgICBmbG9hdCBwZXJj
ZW50KCkgY29uc3Q7CisgICAgZmxvYXQgdmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkgY29uc3Q7
CisgICAgQ2FsY3VsYXRpb25WYWx1ZSYgY2FsY3VsYXRpb25WYWx1ZSgpIGNvbnN0OwogCi0gICAg
dm9pZCBzZXRWYWx1ZShMZW5ndGhUeXBlIHQsIExheW91dFVuaXQgdmFsdWUpCi0gICAgewotICAg
ICAgICBtX3R5cGUgPSB0OwotICAgICAgICBtX2Zsb2F0VmFsdWUgPSB2YWx1ZTsKLSAgICAgICAg
bV9pc0Zsb2F0ID0gdHJ1ZTsgICAgCi0gICAgfQorICAgIExlbmd0aFR5cGUgdHlwZSgpIGNvbnN0
OwogCi0gICAgdm9pZCBzZXRWYWx1ZShmbG9hdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgICp0aGlz
ID0gTGVuZ3RoKHZhbHVlLCBGaXhlZCk7Ci0gICAgfQorICAgIGJvb2wgaXNBdXRvKCkgY29uc3Q7
CisgICAgYm9vbCBpc0ZpeGVkKCkgY29uc3Q7CisgICAgYm9vbCBpc01heENvbnRlbnQoKSBjb25z
dDsKKyAgICBib29sIGlzTWluQ29udGVudCgpIGNvbnN0OworICAgIGJvb2wgaXNSZWxhdGl2ZSgp
IGNvbnN0OworICAgIGJvb2wgaXNVbmRlZmluZWQoKSBjb25zdDsKIAotICAgIGJvb2wgaXNVbmRl
ZmluZWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVW5kZWZpbmVkOyB9CisgICAgYm9vbCBo
YXNRdWlyaygpIGNvbnN0OwogCi0gICAgLy8gRklYTUUgY2FsYzogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMzU3LiBBIGNhbGN1bGF0ZWQgTGVuZ3RoIAorICAgIC8v
IEZJWE1FIGNhbGM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDM1
Ny4gQSBjYWxjdWxhdGVkIExlbmd0aAogICAgIC8vIGFsd2F5cyBjb250YWlucyBhIHBlcmNlbnRh
Z2UsIGFuZCB3aXRob3V0IGEgbWF4VmFsdWUgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucwotICAg
IC8vIGl0J3MgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHNpZ24gb3IgemVyby1uZXNzLiBX
ZSBhc3N1bWUgYWxsIGNhbGMgdmFsdWVzCi0gICAgLy8gYXJlIHBvc2l0aXZlIGFuZCBub24temVy
byBmb3Igbm93LiAgICAKLSAgICBib29sIGlzWmVybygpIGNvbnN0IAotICAgIHsKLSAgICAgICAg
QVNTRVJUKCFpc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgaWYgKGlzQ2FsY3VsYXRlZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX2lz
RmxvYXQgPyAhbV9mbG9hdFZhbHVlIDogIW1faW50VmFsdWU7Ci0gICAgfQotICAgIGJvb2wgaXNQ
b3NpdGl2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNVbmRlZmluZWQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGlzQ2FsY3VsYXRlZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiBnZXRG
bG9hdFZhbHVlKCkgPiAwOwotICAgIH0KLSAgICBib29sIGlzTmVnYXRpdmUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKGlzVW5kZWZpbmVkKCkgfHwgaXNDYWxjdWxhdGVkKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0
VmFsdWUoKSA8IDA7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNBdXRvKCkgY29uc3QgeyByZXR1
cm4gdHlwZSgpID09IEF1dG87IH0KLSAgICBib29sIGlzUmVsYXRpdmUoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gUmVsYXRpdmU7IH0KLSAgICBib29sIGlzUGVyY2VudCgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBQZXJjZW50IHx8IHR5cGUoKSA9PSBDYWxjdWxhdGVkOyB9Ci0gICAgYm9v
bCBpc0ZpeGVkKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEZpeGVkOyB9Ci0gICAgYm9vbCBp
c0ludHJpbnNpY09yQXV0bygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBBdXRvIHx8IGlzTGVn
YWN5SW50cmluc2ljKCkgfHwgaXNJbnRyaW5zaWMoKTsgfQotICAgIGJvb2wgaXNMZWdhY3lJbnRy
aW5zaWMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSW50cmluc2ljIHx8IHR5cGUoKSA9PSBN
aW5JbnRyaW5zaWM7IH0KLSAgICBib29sIGlzSW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gdHlw
ZSgpID09IE1pbkNvbnRlbnQgfHwgdHlwZSgpID09IE1heENvbnRlbnQgfHwgdHlwZSgpID09IEZp
bGxBdmFpbGFibGUgfHwgdHlwZSgpID09IEZpdENvbnRlbnQ7IH0KLSAgICBib29sIGlzU3BlY2lm
aWVkKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEZpeGVkIHx8IHR5cGUoKSA9PSBQZXJjZW50
IHx8IHR5cGUoKSA9PSBDYWxjdWxhdGVkIHx8IGlzVmlld3BvcnRQZXJjZW50YWdlKCk7IH0KLSAg
ICBib29sIGlzU3BlY2lmaWVkT3JJbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBpc1NwZWNpZmll
ZCgpIHx8IGlzSW50cmluc2ljKCk7IH0KLSAgICBib29sIGlzQ2FsY3VsYXRlZCgpIGNvbnN0IHsg
cmV0dXJuIHR5cGUoKSA9PSBDYWxjdWxhdGVkOyB9Ci0gICAgYm9vbCBpc0NhbGN1bGF0ZWRFcXVh
bChjb25zdCBMZW5ndGgmKSBjb25zdDsKLSAgICBib29sIGlzTWluQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIHR5cGUoKSA9PSBNaW5Db250ZW50OyB9Ci0gICAgYm9vbCBpc01heENvbnRlbnQoKSBj
b25zdCB7IHJldHVybiB0eXBlKCkgPT0gTWF4Q29udGVudDsgfQotCi0gICAgTGVuZ3RoIGJsZW5k
KGNvbnN0IExlbmd0aCYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAotICAgIHsKLSAgICAg
ICAgLy8gQmxlbmQgdHdvIGxlbmd0aHMgdG8gcHJvZHVjZSBhIG5ldyBsZW5ndGggdGhhdCBpcyBp
biBiZXR3ZWVuIHRoZW0uICBVc2VkIGZvciBhbmltYXRpb24uCi0gICAgICAgIGlmIChmcm9tLnR5
cGUoKSA9PSBDYWxjdWxhdGVkIHx8IHR5cGUoKSA9PSBDYWxjdWxhdGVkKQotICAgICAgICAgICAg
cmV0dXJuIGJsZW5kTWl4ZWRUeXBlcyhmcm9tLCBwcm9ncmVzcyk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoIWZyb20uaXNaZXJvKCkgJiYgIWlzWmVybygpICYmIGZyb20udHlwZSgpICE9IHR5cGUo
KSkKLSAgICAgICAgICAgIHJldHVybiBibGVuZE1peGVkVHlwZXMoZnJvbSwgcHJvZ3Jlc3MpOwot
Ci0gICAgICAgIGlmIChmcm9tLmlzWmVybygpICYmIGlzWmVybygpKQotICAgICAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgICAgICAKLSAgICAgICAgTGVuZ3RoVHlwZSByZXN1bHRUeXBlID0gdHlw
ZSgpOwotICAgICAgICBpZiAoaXNaZXJvKCkpCi0gICAgICAgICAgICByZXN1bHRUeXBlID0gZnJv
bS50eXBlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBQZXJjZW50KSB7
Ci0gICAgICAgICAgICBmbG9hdCBmcm9tUGVyY2VudCA9IGZyb20uaXNaZXJvKCkgPyAwIDogZnJv
bS5wZXJjZW50KCk7Ci0gICAgICAgICAgICBmbG9hdCB0b1BlcmNlbnQgPSBpc1plcm8oKSA/IDAg
OiBwZXJjZW50KCk7Ci0gICAgICAgICAgICByZXR1cm4gTGVuZ3RoKFdlYkNvcmU6OmJsZW5kKGZy
b21QZXJjZW50LCB0b1BlcmNlbnQsIHByb2dyZXNzKSwgUGVyY2VudCk7Ci0gICAgICAgIH0gCi0K
LSAgICAgICAgZmxvYXQgZnJvbVZhbHVlID0gZnJvbS5pc1plcm8oKSA/IDAgOiBmcm9tLnZhbHVl
KCk7Ci0gICAgICAgIGZsb2F0IHRvVmFsdWUgPSBpc1plcm8oKSA/IDAgOiB2YWx1ZSgpOwotICAg
ICAgICByZXR1cm4gTGVuZ3RoKFdlYkNvcmU6OmJsZW5kKGZyb21WYWx1ZSwgdG9WYWx1ZSwgcHJv
Z3Jlc3MpLCByZXN1bHRUeXBlKTsKLSAgICB9CisgICAgLy8gaXQncyBpbXBvc3NpYmxlIHRvIGRl
dGVybWluZSB0aGUgc2lnbiBvciB6ZXJvLW5lc3MuIFRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rp
b25zCisgICAgLy8gYWN0IGFzIGlmIGFsbCBjYWxjdWxhdGVkIHZhbHVlcyBhcmUgcG9zaXRpdmUu
CisgICAgYm9vbCBpc1plcm8oKSBjb25zdDsKKyAgICBib29sIGlzUG9zaXRpdmUoKSBjb25zdDsK
KyAgICBib29sIGlzTmVnYXRpdmUoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBmb3Ig
Ym90aCBQZXJjZW50IGFuZCBDYWxjdWxhdGVkLgorICAgIC8vIEZJWE1FOiBEb2Vzbid0IHJlYWxs
eSBzZWVtIE9LIHRvIHJldHVybiB0cnVlIGZvciBDYWxjdWxhdGVkIGdpdmVuIHRoaXMgZnVuY3Rp
b24ncyBuYW1lLAorICAgIC8vIGV2ZW4gdGhvdWdoIGFsbCBjYWxjdWxhdGVkIHZhbHVlcyBhcmUg
dHJlYXRlZCBhcyBwZXJjZW50YWdlcy4gQ2FsbGVycyBjYW4gdGVsbCBQZXJjZW50CisgICAgLy8g
ZnJvbSBhIENhbGN1bGF0ZWQgYWxyZWFkeSBieSBsb29raW5nIGF0IHR5cGUsIHNvIHRoaXMgZnVu
Y3Rpb24gb25seSBoYWxmLWhpZGVzIHRoZSBkaXN0aW5jdGlvbi4KKyAgICBib29sIGlzUGVyY2Vu
dCgpIGNvbnN0OworCisgICAgYm9vbCBpc0ludHJpbnNpYygpIGNvbnN0OworICAgIGJvb2wgaXNJ
bnRyaW5zaWNPckF1dG8oKSBjb25zdDsKKyAgICBib29sIGlzU3BlY2lmaWVkKCkgY29uc3Q7Cisg
ICAgYm9vbCBpc1NwZWNpZmllZE9ySW50cmluc2ljKCkgY29uc3Q7CisgICAgYm9vbCBpc1ZpZXdw
b3J0UGVyY2VudGFnZSgpIGNvbnN0OworCisgICAgLy8gQmxlbmQgdHdvIGxlbmd0aHMgdG8gcHJv
ZHVjZSBhIG5ldyBsZW5ndGggdGhhdCBpcyBpbiBiZXR3ZWVuIHRoZW0uIFVzZWQgZm9yIGFuaW1h
dGlvbi4KKyAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSBtZW1iZXIgZnVuY3Rpb24/CisgICAg
TGVuZ3RoIGJsZW5kKGNvbnN0IExlbmd0aCYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdDsK
IAotICAgIGZsb2F0IGdldEZsb2F0VmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KCFpc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIG1faXNGbG9hdCA/IG1fZmxvYXRWYWx1
ZSA6IG1faW50VmFsdWU7Ci0gICAgfQogICAgIGZsb2F0IG5vbk5hbkNhbGN1bGF0ZWRWYWx1ZShp
bnQgbWF4VmFsdWUpIGNvbnN0OwogCi0gICAgYm9vbCBpc1ZpZXdwb3J0UGVyY2VudGFnZSgpIGNv
bnN0Ci0gICAgewotICAgICAgICBMZW5ndGhUeXBlIGxlbmd0aFR5cGUgPSB0eXBlKCk7Ci0gICAg
ICAgIHJldHVybiBsZW5ndGhUeXBlID49IFZpZXdwb3J0UGVyY2VudGFnZVdpZHRoICYmIGxlbmd0
aFR5cGUgPD0gVmlld3BvcnRQZXJjZW50YWdlTWF4OwotICAgIH0KLSAgICBmbG9hdCB2aWV3cG9y
dFBlcmNlbnRhZ2VMZW5ndGgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmlld3Bv
cnRQZXJjZW50YWdlKCkpOwotICAgICAgICByZXR1cm4gZ2V0RmxvYXRWYWx1ZSgpOwotICAgIH0K
IHByaXZhdGU6Ci0gICAgaW50IGdldEludFZhbHVlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFT
U0VSVCghaXNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2lzRmxvYXQgPyBzdGF0aWNf
Y2FzdDxpbnQ+KG1fZmxvYXRWYWx1ZSkgOiBtX2ludFZhbHVlOwotICAgIH0KLSAgICB2b2lkIGlu
aXRGcm9tTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgbWVtY3B5
KHRoaXMsICZsZW5ndGgsIHNpemVvZihMZW5ndGgpKTsKLSAgICAgICAgaWYgKGlzQ2FsY3VsYXRl
ZCgpKQotICAgICAgICAgICAgaW5jcmVtZW50Q2FsY3VsYXRlZFJlZigpOwotICAgIH0KLQotICAg
IHZvaWQgbW92ZUZyb21MZW5ndGgoTGVuZ3RoJiYgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKHRoaXMgIT0gJmxlbmd0aCk7Ci0gICAgICAgIG1lbWNweSh0aGlzLCAmbGVuZ3RoLCBzaXpl
b2YoTGVuZ3RoKSk7Ci0gICAgICAgIGxlbmd0aC5tX3R5cGUgPSBBdXRvOwotICAgIH0KKyAgICBi
b29sIGlzQ2FsY3VsYXRlZCgpIGNvbnN0OworICAgIGJvb2wgaXNMZWdhY3lJbnRyaW5zaWMoKSBj
b25zdDsKIAorICAgIGJvb2wgaXNDYWxjdWxhdGVkRXF1YWwoY29uc3QgTGVuZ3RoJikgY29uc3Q7
CiAgICAgTGVuZ3RoIGJsZW5kTWl4ZWRUeXBlcyhjb25zdCBMZW5ndGgmIGZyb20sIGRvdWJsZSBw
cm9ncmVzcykgY29uc3Q7CiAKLSAgICBpbnQgY2FsY3VsYXRpb25IYW5kbGUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzQ2FsY3VsYXRlZCgpKTsKLSAgICAgICAgcmV0dXJuIGdldElu
dFZhbHVlKCk7Ci0gICAgfQotICAgIHZvaWQgaW5jcmVtZW50Q2FsY3VsYXRlZFJlZigpIGNvbnN0
OwotICAgIHZvaWQgZGVjcmVtZW50Q2FsY3VsYXRlZFJlZigpIGNvbnN0OyAgICAKKyAgICB2b2lk
IHJlZigpIGNvbnN0OworICAgIHZvaWQgZGVyZWYoKSBjb25zdDsKICAgICAKICAgICB1bmlvbiB7
CiAgICAgICAgIGludCBtX2ludFZhbHVlOwogICAgICAgICBmbG9hdCBtX2Zsb2F0VmFsdWU7Cisg
ICAgICAgIHVuc2lnbmVkIG1fY2FsY3VsYXRpb25WYWx1ZUhhbmRsZTsKICAgICB9OwotICAgIGJv
b2wgbV9xdWlyazsKKyAgICBib29sIG1faGFzUXVpcms7CiAgICAgdW5zaWduZWQgY2hhciBtX3R5
cGU7CiAgICAgYm9vbCBtX2lzRmxvYXQ7CiB9OwogCi1zdGQ6OnVuaXF1ZV9wdHI8TGVuZ3RoW10+
IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYsIGludCYgbGVuKTsKLXN0ZDo6dW5pcXVlX3B0
cjxMZW5ndGhbXT4gbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5nJiwgaW50JiBsZW4pOworc3Rk
Ojp1bmlxdWVfcHRyPExlbmd0aFtdPiBuZXdDb29yZHNBcnJheShjb25zdCBTdHJpbmcmLCBpbnQm
IGxlbmd0aCk7CitzdGQ6OnVuaXF1ZV9wdHI8TGVuZ3RoW10+IG5ld0xlbmd0aEFycmF5KGNvbnN0
IFN0cmluZyYsIGludCYgbGVuZ3RoKTsKKworaW5saW5lIExlbmd0aDo6TGVuZ3RoKExlbmd0aFR5
cGUgdHlwZSkKKyAgICA6IG1faW50VmFsdWUoMCksIG1faGFzUXVpcmsoZmFsc2UpLCBtX3R5cGUo
dHlwZSksIG1faXNGbG9hdChmYWxzZSkKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBDYWxjdWxhdGVk
KTsKK30KKworaW5saW5lIExlbmd0aDo6TGVuZ3RoKGludCB2YWx1ZSwgTGVuZ3RoVHlwZSB0eXBl
LCBib29sIGhhc1F1aXJrKQorICAgIDogbV9pbnRWYWx1ZSh2YWx1ZSksIG1faGFzUXVpcmsoaGFz
UXVpcmspLCBtX3R5cGUodHlwZSksIG1faXNGbG9hdChmYWxzZSkKK3sKKyAgICBBU1NFUlQodHlw
ZSAhPSBDYWxjdWxhdGVkKTsKK30KKworaW5saW5lIExlbmd0aDo6TGVuZ3RoKExheW91dFVuaXQg
dmFsdWUsIExlbmd0aFR5cGUgdHlwZSwgYm9vbCBoYXNRdWlyaykKKyAgICA6IG1fZmxvYXRWYWx1
ZSh2YWx1ZS50b0Zsb2F0KCkpLCBtX2hhc1F1aXJrKGhhc1F1aXJrKSwgbV90eXBlKHR5cGUpLCBt
X2lzRmxvYXQodHJ1ZSkKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBDYWxjdWxhdGVkKTsKK30KKwor
aW5saW5lIExlbmd0aDo6TGVuZ3RoKGZsb2F0IHZhbHVlLCBMZW5ndGhUeXBlIHR5cGUsIGJvb2wg
aGFzUXVpcmspCisgICAgOiBtX2Zsb2F0VmFsdWUodmFsdWUpLCBtX2hhc1F1aXJrKGhhc1F1aXJr
KSwgbV90eXBlKHR5cGUpLCBtX2lzRmxvYXQodHJ1ZSkKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBD
YWxjdWxhdGVkKTsKK30KKworaW5saW5lIExlbmd0aDo6TGVuZ3RoKGRvdWJsZSB2YWx1ZSwgTGVu
Z3RoVHlwZSB0eXBlLCBib29sIGhhc1F1aXJrKQorICAgIDogbV9mbG9hdFZhbHVlKHN0YXRpY19j
YXN0PGZsb2F0Pih2YWx1ZSkpLCBtX2hhc1F1aXJrKGhhc1F1aXJrKSwgbV90eXBlKHR5cGUpLCBt
X2lzRmxvYXQodHJ1ZSkKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBDYWxjdWxhdGVkKTsKK30KKwor
aW5saW5lIExlbmd0aDo6TGVuZ3RoKGNvbnN0IExlbmd0aCYgb3RoZXIpCit7CisgICAgaWYgKG90
aGVyLmlzQ2FsY3VsYXRlZCgpKQorICAgICAgICBvdGhlci5yZWYoKTsKKworICAgIG1lbWNweSh0
aGlzLCAmb3RoZXIsIHNpemVvZihMZW5ndGgpKTsKK30KKworaW5saW5lIExlbmd0aDo6TGVuZ3Ro
KExlbmd0aCYmIG90aGVyKQoreworICAgIG1lbWNweSh0aGlzLCAmb3RoZXIsIHNpemVvZihMZW5n
dGgpKTsKKyAgICBvdGhlci5tX3R5cGUgPSBBdXRvOworfQorCitpbmxpbmUgTGVuZ3RoJiBMZW5n
dGg6Om9wZXJhdG9yPShjb25zdCBMZW5ndGgmIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc0Nh
bGN1bGF0ZWQoKSkKKyAgICAgICAgb3RoZXIucmVmKCk7CisgICAgaWYgKGlzQ2FsY3VsYXRlZCgp
KQorICAgICAgICBkZXJlZigpOworCisgICAgbWVtY3B5KHRoaXMsICZvdGhlciwgc2l6ZW9mKExl
bmd0aCkpOworICAgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIExlbmd0aCYgTGVuZ3RoOjpv
cGVyYXRvcj0oTGVuZ3RoJiYgb3RoZXIpCit7CisgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAg
ICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBpZiAoaXNDYWxjdWxhdGVkKCkpCisgICAgICAgIGRl
cmVmKCk7CisKKyAgICBtZW1jcHkodGhpcywgJm90aGVyLCBzaXplb2YoTGVuZ3RoKSk7CisgICAg
b3RoZXIubV90eXBlID0gQXV0bzsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBMZW5n
dGg6On5MZW5ndGgoKQoreworICAgIGlmIChpc0NhbGN1bGF0ZWQoKSkKKyAgICAgICAgZGVyZWYo
KTsKK30KKworaW5saW5lIGJvb2wgTGVuZ3RoOjpvcGVyYXRvcj09KGNvbnN0IExlbmd0aCYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgbWlnaHQgYmUgdG9vIGxvbmcgdG8gYmUg
aW5saW5lLgorICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpIHx8IGhhc1F1aXJrKCkgIT0g
b3RoZXIuaGFzUXVpcmsoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1VuZGVm
aW5lZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaXNDYWxjdWxhdGVkKCkpCisg
ICAgICAgIHJldHVybiBpc0NhbGN1bGF0ZWRFcXVhbChvdGhlcik7CisgICAgcmV0dXJuIHZhbHVl
KCkgPT0gb3RoZXIudmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgTGVuZ3RoOjpvcGVyYXRvciE9
KGNvbnN0IExlbmd0aCYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworfQorCitpbmxpbmUgTGVuZ3RoJiBMZW5ndGg6Om9wZXJhdG9yKj0oZmxvYXQgdmFsdWUp
Cit7CisgICAgQVNTRVJUKCFpc0NhbGN1bGF0ZWQoKSk7CisgICAgaWYgKGlzQ2FsY3VsYXRlZCgp
KQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBpZiAobV9pc0Zsb2F0KQorICAgICAgICBt
X2Zsb2F0VmFsdWUgKj0gdmFsdWU7CisgICAgZWxzZQorICAgICAgICBtX2ludFZhbHVlICo9IHZh
bHVlOworCisgICAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgZmxvYXQgTGVuZ3RoOjp2YWx1
ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc1VuZGVmaW5lZCgpKTsKKyAgICBBU1NFUlQoIWlz
Q2FsY3VsYXRlZCgpKTsKKyAgICByZXR1cm4gbV9pc0Zsb2F0ID8gbV9mbG9hdFZhbHVlIDogbV9p
bnRWYWx1ZTsKK30KKworaW5saW5lIGludCBMZW5ndGg6OmludFZhbHVlKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoIWlzVW5kZWZpbmVkKCkpOworICAgIEFTU0VSVCghaXNDYWxjdWxhdGVkKCkpOwor
ICAgIC8vIEZJWE1FOiBNYWtlcyBubyBzZW5zZSB0byByZXR1cm4gMCBoZXJlIGJ1dCBub3QgaW4g
dGhlIHZhbHVlKCkgZnVuY3Rpb24gYWJvdmUuCisgICAgaWYgKGlzQ2FsY3VsYXRlZCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9pc0Zsb2F0ID8gc3RhdGljX2Nhc3Q8aW50Piht
X2Zsb2F0VmFsdWUpIDogbV9pbnRWYWx1ZTsKK30KKworaW5saW5lIGZsb2F0IExlbmd0aDo6cGVy
Y2VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzUGVyY2VudCgpKTsKKyAgICByZXR1cm4gdmFs
dWUoKTsKK30KKworaW5saW5lIGZsb2F0IExlbmd0aDo6dmlld3BvcnRQZXJjZW50YWdlTGVuZ3Ro
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWaWV3cG9ydFBlcmNlbnRhZ2UoKSk7CisgICAgcmV0
dXJuIHZhbHVlKCk7Cit9CisKK2lubGluZSBMZW5ndGhUeXBlIExlbmd0aDo6dHlwZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PExlbmd0aFR5cGU+KG1fdHlwZSk7Cit9CisKK2lu
bGluZSBib29sIExlbmd0aDo6aGFzUXVpcmsoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc1F1
aXJrOworfQorCitpbmxpbmUgdm9pZCBMZW5ndGg6OnNldEhhc1F1aXJrKGJvb2wgaGFzUXVpcmsp
Cit7CisgICAgbV9oYXNRdWlyayA9IGhhc1F1aXJrOworfQorCitpbmxpbmUgdm9pZCBMZW5ndGg6
OnNldFZhbHVlKExlbmd0aFR5cGUgdHlwZSwgaW50IHZhbHVlKQoreworICAgIEFTU0VSVChtX3R5
cGUgIT0gQ2FsY3VsYXRlZCk7CisgICAgQVNTRVJUKHR5cGUgIT0gQ2FsY3VsYXRlZCk7CisgICAg
bV90eXBlID0gdHlwZTsKKyAgICBtX2ludFZhbHVlID0gdmFsdWU7CisgICAgbV9pc0Zsb2F0ID0g
ZmFsc2U7Cit9CisKK2lubGluZSB2b2lkIExlbmd0aDo6c2V0VmFsdWUoTGVuZ3RoVHlwZSB0eXBl
LCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlICE9IENhbGN1bGF0ZWQpOworICAg
IEFTU0VSVCh0eXBlICE9IENhbGN1bGF0ZWQpOworICAgIG1fdHlwZSA9IHR5cGU7CisgICAgbV9m
bG9hdFZhbHVlID0gdmFsdWU7CisgICAgbV9pc0Zsb2F0ID0gdHJ1ZTsKK30KKworaW5saW5lIHZv
aWQgTGVuZ3RoOjpzZXRWYWx1ZShMZW5ndGhUeXBlIHR5cGUsIExheW91dFVuaXQgdmFsdWUpCit7
CisgICAgQVNTRVJUKG1fdHlwZSAhPSBDYWxjdWxhdGVkKTsKKyAgICBBU1NFUlQodHlwZSAhPSBD
YWxjdWxhdGVkKTsKKyAgICBtX3R5cGUgPSB0eXBlOworICAgIG1fZmxvYXRWYWx1ZSA9IHZhbHVl
OworICAgIG1faXNGbG9hdCA9IHRydWU7Cit9CisKK2lubGluZSBib29sIExlbmd0aDo6aXNBdXRv
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHlwZSgpID09IEF1dG87Cit9CisKK2lubGluZSBib29s
IExlbmd0aDo6aXNGaXhlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHR5cGUoKSA9PSBGaXhlZDsK
K30KKworaW5saW5lIGJvb2wgTGVuZ3RoOjppc01heENvbnRlbnQoKSBjb25zdAoreworICAgIHJl
dHVybiB0eXBlKCkgPT0gTWF4Q29udGVudDsKK30KKworaW5saW5lIGJvb2wgTGVuZ3RoOjppc01p
bkNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiB0eXBlKCkgPT0gTWluQ29udGVudDsKK30K
KworaW5saW5lIGJvb2wgTGVuZ3RoOjppc05lZ2F0aXZlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNV
bmRlZmluZWQoKSB8fCBpc0NhbGN1bGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBtX2lzRmxvYXQgPyAobV9mbG9hdFZhbHVlIDwgMCkgOiAobV9pbnRWYWx1ZSA8IDAp
OworfQorCitpbmxpbmUgYm9vbCBMZW5ndGg6OmlzUmVsYXRpdmUoKSBjb25zdAoreworICAgIHJl
dHVybiB0eXBlKCkgPT0gUmVsYXRpdmU7Cit9CisKK2lubGluZSBib29sIExlbmd0aDo6aXNVbmRl
ZmluZWQoKSBjb25zdAoreworICAgIHJldHVybiB0eXBlKCkgPT0gVW5kZWZpbmVkOworfQorCitp
bmxpbmUgYm9vbCBMZW5ndGg6OmlzUGVyY2VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHR5cGUo
KSA9PSBQZXJjZW50IHx8IGlzQ2FsY3VsYXRlZCgpOworfQorCitpbmxpbmUgYm9vbCBMZW5ndGg6
OmlzUG9zaXRpdmUoKSBjb25zdAoreworICAgIGlmIChpc1VuZGVmaW5lZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzQ2FsY3VsYXRlZCgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gbV9pc0Zsb2F0ID8gKG1fZmxvYXRWYWx1ZSA+IDApIDogKG1faW50VmFs
dWUgPiAwKTsKK30KKworaW5saW5lIGJvb2wgTGVuZ3RoOjppc1plcm8oKSBjb25zdAoreworICAg
IEFTU0VSVCghaXNVbmRlZmluZWQoKSk7CisgICAgaWYgKGlzQ2FsY3VsYXRlZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1faXNGbG9hdCA/ICFtX2Zsb2F0VmFsdWUgOiAh
bV9pbnRWYWx1ZTsKK30KKworaW5saW5lIGJvb2wgTGVuZ3RoOjppc0NhbGN1bGF0ZWQoKSBjb25z
dAoreworICAgIHJldHVybiB0eXBlKCkgPT0gQ2FsY3VsYXRlZDsKK30KKworaW5saW5lIGJvb2wg
TGVuZ3RoOjppc0xlZ2FjeUludHJpbnNpYygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHR5cGUoKSA9
PSBJbnRyaW5zaWMgfHwgdHlwZSgpID09IE1pbkludHJpbnNpYzsKK30KKworaW5saW5lIGJvb2wg
TGVuZ3RoOjppc0ludHJpbnNpYygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHR5cGUoKSA9PSBNaW5D
b250ZW50IHx8IHR5cGUoKSA9PSBNYXhDb250ZW50IHx8IHR5cGUoKSA9PSBGaWxsQXZhaWxhYmxl
IHx8IHR5cGUoKSA9PSBGaXRDb250ZW50OworfQorCitpbmxpbmUgYm9vbCBMZW5ndGg6OmlzSW50
cmluc2ljT3JBdXRvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNBdXRvKCkgfHwgaXNJbnRyaW5z
aWMoKSB8fCBpc0xlZ2FjeUludHJpbnNpYygpOworfQorCitpbmxpbmUgYm9vbCBMZW5ndGg6Omlz
U3BlY2lmaWVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNGaXhlZCgpIHx8IHR5cGUoKSA9PSBQ
ZXJjZW50IHx8IGlzQ2FsY3VsYXRlZCgpIHx8IGlzVmlld3BvcnRQZXJjZW50YWdlKCk7Cit9CisK
K2lubGluZSBib29sIExlbmd0aDo6aXNTcGVjaWZpZWRPckludHJpbnNpYygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGlzU3BlY2lmaWVkKCkgfHwgaXNJbnRyaW5zaWMoKTsKK30KKworaW5saW5lIGJv
b2wgTGVuZ3RoOjppc1ZpZXdwb3J0UGVyY2VudGFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHR5
cGUoKSA+PSBWaWV3cG9ydFBlcmNlbnRhZ2VXaWR0aCAmJiB0eXBlKCkgPD0gVmlld3BvcnRQZXJj
ZW50YWdlTWF4OworfQorCisvLyBGSVhNRTogSXMgaXQgcmVhbGx5IHZhbHVhYmxlIHRvIGlubGlu
ZSB0aGlzPworaW5saW5lIExlbmd0aCBMZW5ndGg6OmJsZW5kKGNvbnN0IExlbmd0aCYgZnJvbSwg
ZG91YmxlIHByb2dyZXNzKSBjb25zdAoreworICAgIGlmIChmcm9tLnR5cGUoKSA9PSBDYWxjdWxh
dGVkIHx8IHR5cGUoKSA9PSBDYWxjdWxhdGVkKQorICAgICAgICByZXR1cm4gYmxlbmRNaXhlZFR5
cGVzKGZyb20sIHByb2dyZXNzKTsKKworICAgIGlmICghZnJvbS5pc1plcm8oKSAmJiAhaXNaZXJv
KCkgJiYgZnJvbS50eXBlKCkgIT0gdHlwZSgpKQorICAgICAgICByZXR1cm4gYmxlbmRNaXhlZFR5
cGVzKGZyb20sIHByb2dyZXNzKTsKKworICAgIGlmIChmcm9tLmlzWmVybygpICYmIGlzWmVybygp
KQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBMZW5ndGhUeXBlIHJlc3VsdFR5cGUgPSB0
eXBlKCk7CisgICAgaWYgKGlzWmVybygpKQorICAgICAgICByZXN1bHRUeXBlID0gZnJvbS50eXBl
KCk7CisKKyAgICBpZiAocmVzdWx0VHlwZSA9PSBQZXJjZW50KSB7CisgICAgICAgIGZsb2F0IGZy
b21QZXJjZW50ID0gZnJvbS5pc1plcm8oKSA/IDAgOiBmcm9tLnBlcmNlbnQoKTsKKyAgICAgICAg
ZmxvYXQgdG9QZXJjZW50ID0gaXNaZXJvKCkgPyAwIDogcGVyY2VudCgpOworICAgICAgICByZXR1
cm4gTGVuZ3RoKFdlYkNvcmU6OmJsZW5kKGZyb21QZXJjZW50LCB0b1BlcmNlbnQsIHByb2dyZXNz
KSwgUGVyY2VudCk7CisgICAgfQorCisgICAgZmxvYXQgZnJvbVZhbHVlID0gZnJvbS5pc1plcm8o
KSA/IDAgOiBmcm9tLnZhbHVlKCk7CisgICAgZmxvYXQgdG9WYWx1ZSA9IGlzWmVybygpID8gMCA6
IHZhbHVlKCk7CisgICAgcmV0dXJuIExlbmd0aChXZWJDb3JlOjpibGVuZChmcm9tVmFsdWUsIHRv
VmFsdWUsIHByb2dyZXNzKSwgcmVzdWx0VHlwZSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoQm94LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhCb3guaAppbmRleCA5YWRkYWJkMjMyNmM2ZDUy
OWQzNWJkM2U3NzYxYjlhZGI2ZTQ5OTljLi4yNjU1ZjZkNjdhY2E5MjlkMDA5NDExZWJjYzdiNTQ5
ZDliZjdhY2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhCb3guaApAQCAtMjgsMjIgKzI4
LDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KIHN0
cnVjdCBMZW5ndGhCb3ggewogICAgIExlbmd0aEJveCgpCiAgICAgewogICAgIH0KIAotICAgIExl
bmd0aEJveChMZW5ndGhUeXBlIHQpCi0gICAgICAgIDogbV9sZWZ0KHQpCi0gICAgICAgICwgbV9y
aWdodCh0KQotICAgICAgICAsIG1fdG9wKHQpCi0gICAgICAgICwgbV9ib3R0b20odCkKKyAgICBl
eHBsaWNpdCBMZW5ndGhCb3goTGVuZ3RoVHlwZSB0eXBlKQorICAgICAgICA6IG1fbGVmdCh0eXBl
KQorICAgICAgICAsIG1fcmlnaHQodHlwZSkKKyAgICAgICAgLCBtX3RvcCh0eXBlKQorICAgICAg
ICAsIG1fYm90dG9tKHR5cGUpCiAgICAgewogICAgIH0KIAotICAgIExlbmd0aEJveChpbnQgdikK
KyAgICBleHBsaWNpdCBMZW5ndGhCb3goaW50IHYpCiAgICAgICAgIDogbV9sZWZ0KExlbmd0aCh2
LCBGaXhlZCkpCiAgICAgICAgICwgbV9yaWdodChMZW5ndGgodiwgRml4ZWQpKQogICAgICAgICAs
IG1fdG9wKExlbmd0aCh2LCBGaXhlZCkpCkBAIC01MSwxOSArNDksMTkgQEAgc3RydWN0IExlbmd0
aEJveCB7CiAgICAgewogICAgIH0KIAotICAgIExlbmd0aEJveChMZW5ndGggdCwgTGVuZ3RoIHIs
IExlbmd0aCBiLCBMZW5ndGggbCkKLSAgICAgICAgOiBtX2xlZnQoc3RkOjptb3ZlKGwpKQotICAg
ICAgICAsIG1fcmlnaHQoc3RkOjptb3ZlKHIpKQotICAgICAgICAsIG1fdG9wKHN0ZDo6bW92ZSh0
KSkKLSAgICAgICAgLCBtX2JvdHRvbShzdGQ6Om1vdmUoYikpCisgICAgTGVuZ3RoQm94KExlbmd0
aCB0b3AsIExlbmd0aCByaWdodCwgTGVuZ3RoIGJvdHRvbSwgTGVuZ3RoIGxlZnQpCisgICAgICAg
IDogbV9sZWZ0KHN0ZDo6bW92ZShsZWZ0KSkKKyAgICAgICAgLCBtX3JpZ2h0KHN0ZDo6bW92ZShy
aWdodCkpCisgICAgICAgICwgbV90b3Aoc3RkOjptb3ZlKHRvcCkpCisgICAgICAgICwgbV9ib3R0
b20oc3RkOjptb3ZlKGJvdHRvbSkpCiAgICAgewogICAgIH0KLSAgICAKLSAgICBMZW5ndGhCb3go
aW50IHQsIGludCByLCBpbnQgYiwgaW50IGwpCi0gICAgICAgIDogbV9sZWZ0KExlbmd0aChsLCBG
aXhlZCkpCi0gICAgICAgICwgbV9yaWdodChMZW5ndGgociwgRml4ZWQpKQotICAgICAgICAsIG1f
dG9wKExlbmd0aCh0LCBGaXhlZCkpCi0gICAgICAgICwgbV9ib3R0b20oTGVuZ3RoKGIsIEZpeGVk
KSkKKworICAgIExlbmd0aEJveChpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20sIGludCBs
ZWZ0KQorICAgICAgICA6IG1fbGVmdChMZW5ndGgobGVmdCwgRml4ZWQpKQorICAgICAgICAsIG1f
cmlnaHQoTGVuZ3RoKHJpZ2h0LCBGaXhlZCkpCisgICAgICAgICwgbV90b3AoTGVuZ3RoKHRvcCwg
Rml4ZWQpKQorICAgICAgICAsIG1fYm90dG9tKExlbmd0aChib3R0b20sIEZpeGVkKSkKICAgICB7
CiAgICAgfQogCkBAIC04MCwxNCArNzgsMTQgQEAgc3RydWN0IExlbmd0aEJveCB7CiAgICAgY29u
c3QgTGVuZ3RoJiBzdGFydChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7CiAgICAg
Y29uc3QgTGVuZ3RoJiBlbmQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0OwogCi0g
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExlbmd0aEJveCYgbykgY29uc3QKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgTGVuZ3RoQm94JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2xlZnQgPT0gby5tX2xlZnQgJiYgbV9yaWdodCA9PSBvLm1fcmlnaHQgJiYgbV90b3Ag
PT0gby5tX3RvcCAmJiBtX2JvdHRvbSA9PSBvLm1fYm90dG9tOworICAgICAgICByZXR1cm4gbV9s
ZWZ0ID09IG90aGVyLm1fbGVmdCAmJiBtX3JpZ2h0ID09IG90aGVyLm1fcmlnaHQgJiYgbV90b3Ag
PT0gb3RoZXIubV90b3AgJiYgbV9ib3R0b20gPT0gb3RoZXIubV9ib3R0b207CiAgICAgfQogCi0g
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExlbmd0aEJveCYgbykgY29uc3QKKyAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgTGVuZ3RoQm94JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG8pOworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAg
ICAgfQogCiAgICAgYm9vbCBub25aZXJvKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0F1dG9UYWJsZUxheW91dC5jcHAKaW5kZXggNGNkOGY4NzY0MmI4ZTkxYzUxNzQ3MTY0NjNk
ODFlYTE0ZjY1OGUxNC4uZGU1ZjA0MTdlMmY0MTc1MTJlZTAzZWMyYTlhMjk1ODUyOWMxM2QwNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAKQEAgLTg1
LDkgKzg1LDkgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbih1bnNpZ25lZCBl
ZmZDb2wpCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBjQ2VsbE1heFdpZHRoID0gMzI3
NjA7CiAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBjZWxsTG9naWNhbFdpZHRoID0gY2VsbC0+
c3R5bGVPckNvbExvZ2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbExv
Z2ljYWxXaWR0aC52YWx1ZSgpID4gY0NlbGxNYXhXaWR0aCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNlbGxMb2dpY2FsV2lkdGguc2V0VmFsdWUoY0NlbGxNYXhXaWR0aCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjZWxsTG9naWNhbFdpZHRoLnNldFZhbHVlKEZpeGVkLCBjQ2VsbE1heFdp
ZHRoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxMb2dpY2FsV2lkdGguaXNOZWdhdGl2
ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY2VsbExvZ2ljYWxXaWR0aC5zZXRWYWx1ZSgw
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxMb2dpY2FsV2lkdGguc2V0VmFsdWUoRml4
ZWQsIDApOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNlbGxMb2dpY2FsV2lkdGgudHlw
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRml4ZWQ6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpZ25vcmUgd2lkdGg9MApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zp
eGVkVGFibGVMYXlvdXQuY3BwCmluZGV4IGE0NjBmOGMwZjgwZDlhOGQ5MzY0NWQxNDk5NWY3YTNh
OTczYzUxNmIuLmNlY2VhNzIxNTcxNjE4ZDUzZjAwZjFkN2Q1NmU3MzcwYjliYjY5MzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKQEAgLTE0Myw3
ICsxNDMsNyBAQCBpbnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXkoKQogICAgICAg
ICAvLyBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nIHRvIGNvbXB1
dGUgdGhlIHdpZHRoLgogICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzRml4ZWQoKSAmJiBsb2dp
Y2FsV2lkdGguaXNQb3NpdGl2ZSgpKSB7CiAgICAgICAgICAgICBmaXhlZEJvcmRlckJveExvZ2lj
YWxXaWR0aCA9IGNlbGwtPmFkanVzdEJvcmRlckJveExvZ2ljYWxXaWR0aEZvckJveFNpemluZyhs
b2dpY2FsV2lkdGgudmFsdWUoKSk7Ci0gICAgICAgICAgICBsb2dpY2FsV2lkdGguc2V0VmFsdWUo
Zml4ZWRCb3JkZXJCb3hMb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgbG9naWNhbFdpZHRoLnNl
dFZhbHVlKEZpeGVkLCBmaXhlZEJvcmRlckJveExvZ2ljYWxXaWR0aCk7CiAgICAgICAgIH0KIAog
ICAgICAgICB1bnNpZ25lZCB1c2VkU3BhbiA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvRmlsbExheWVyLmgKaW5kZXggYmU0ODE4ZmZmZDVmMjY0MWFlNWZmNDUxOWQxNTc5YTJh
YWYyMWExMy4uZDQ5YTVjMmM3NjcwM2ZmZTY4NTM5MDc1MjhjMmE0NzRiZTVjZTE2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaApAQCAtMTg3LDggKzE4Nyw4
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRUZpbGxTaXplVHlwZSBpbml0aWFsRmlsbFNpemVUeXBl
KEVGaWxsTGF5ZXJUeXBlKSB7IHJldHVybiBTaXplTm9uZTsgfQogICAgIHN0YXRpYyBMZW5ndGhT
aXplIGluaXRpYWxGaWxsU2l6ZUxlbmd0aChFRmlsbExheWVyVHlwZSkgeyByZXR1cm4gTGVuZ3Ro
U2l6ZSgpOyB9CiAgICAgc3RhdGljIEZpbGxTaXplIGluaXRpYWxGaWxsU2l6ZShFRmlsbExheWVy
VHlwZSB0eXBlKSB7IHJldHVybiBGaWxsU2l6ZShpbml0aWFsRmlsbFNpemVUeXBlKHR5cGUpLCBp
bml0aWFsRmlsbFNpemVMZW5ndGgodHlwZSkpOyB9Ci0gICAgc3RhdGljIExlbmd0aCBpbml0aWFs
RmlsbFhQb3NpdGlvbihFRmlsbExheWVyVHlwZSkgeyByZXR1cm4gTGVuZ3RoKDAuMCwgUGVyY2Vu
dCk7IH0KLSAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxGaWxsWVBvc2l0aW9uKEVGaWxsTGF5ZXJU
eXBlKSB7IHJldHVybiBMZW5ndGgoMC4wLCBQZXJjZW50KTsgfQorICAgIHN0YXRpYyBMZW5ndGgg
aW5pdGlhbEZpbGxYUG9zaXRpb24oRUZpbGxMYXllclR5cGUpIHsgcmV0dXJuIExlbmd0aCgwLjBm
LCBQZXJjZW50KTsgfQorICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbEZpbGxZUG9zaXRpb24oRUZp
bGxMYXllclR5cGUpIHsgcmV0dXJuIExlbmd0aCgwLjBmLCBQZXJjZW50KTsgfQogICAgIHN0YXRp
YyBTdHlsZUltYWdlKiBpbml0aWFsRmlsbEltYWdlKEVGaWxsTGF5ZXJUeXBlKSB7IHJldHVybiAw
OyB9CiAgICAgc3RhdGljIEVNYXNrU291cmNlVHlwZSBpbml0aWFsTWFza1NvdXJjZVR5cGUoRUZp
bGxMYXllclR5cGUpIHsgcmV0dXJuIE1hc2tBbHBoYTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCA0Y2Q4ZDg2YjkyNTI3MWY0ZGQ5
YWYzYTY2NTc0NDk3MGFhZDJiM2QzLi45YmVlZDUyNDQzODg1ZTg4N2RjMGJkYmY5MDY2ZTA1MjVm
MDQ5MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5jcHAKQEAgLTEzNDgsMTggKzEzNDgsMTggQEAgaW50IFJlbmRlclN0eWxlOjpjb21wdXRlZExp
bmVIZWlnaHQoUmVuZGVyVmlldyogcmVuZGVyVmlldykgY29uc3QKICAgICByZXR1cm4gbGgudmFs
dWUoKTsKIH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcoTGVuZ3RoIHYpCit2
b2lkIFJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyhMZW5ndGggdmFsdWUpCiB7CiAgICAgZmxv
YXQgZm9udFdvcmRTcGFjaW5nOwotICAgIHN3aXRjaCAodi50eXBlKCkpIHsKKyAgICBzd2l0Y2gg
KHZhbHVlLnR5cGUoKSkgewogICAgIGNhc2UgQXV0bzoKICAgICAgICAgZm9udFdvcmRTcGFjaW5n
ID0gMDsKLSAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUGVy
Y2VudDoKLSAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gdi5nZXRGbG9hdFZhbHVlKCkgKiBmb250
KCkuc3BhY2VXaWR0aCgpIC8gMTAwOworICAgICAgICBmb250V29yZFNwYWNpbmcgPSB2YWx1ZS5w
ZXJjZW50KCkgKiBmb250KCkuc3BhY2VXaWR0aCgpIC8gMTAwOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEZpeGVkOgotICAgICAgICBmb250V29yZFNwYWNpbmcgPSB2LmdldEZsb2F0VmFsdWUo
KTsKKyAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gdmFsdWUudmFsdWUoKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzY3
LDcgKzEzNjcsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyhMZW5ndGggdikK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udC5zZXRX
b3JkU3BhY2luZyhmb250V29yZFNwYWNpbmcpOwotICAgIHJhcmVJbmhlcml0ZWREYXRhLmFjY2Vz
cygpLT53b3JkU3BhY2luZyA9IHN0ZDo6bW92ZSh2KTsKKyAgICByYXJlSW5oZXJpdGVkRGF0YS5h
Y2Nlc3MoKS0+d29yZFNwYWNpbmcgPSBzdGQ6Om1vdmUodmFsdWUpOwogfQogCiB2b2lkIFJlbmRl
clN0eWxlOjpzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHYpIHsgaW5oZXJpdGVkLmFjY2VzcygpLT5m
b250LnNldExldHRlclNwYWNpbmcodik7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggNWJkMmI5NDFkZTBhOWU1NWIyYjFjNjY3NzA1MDk2ZjA4
NmQ0OWY3ZC4uODRlYTk0MjA1MzJmNDY1N2Y2YjNjYjUwMjQxMWU5MTZhM2RlNjMxMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTUyMiw4ICs1
MjIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNCb3JkZXIoKSBjb25zdCB7IHJldHVybiBzdXJy
b3VuZC0+Ym9yZGVyLmhhc0JvcmRlcigpOyB9CiAgICAgYm9vbCBoYXNQYWRkaW5nKCkgY29uc3Qg
eyByZXR1cm4gc3Vycm91bmQtPnBhZGRpbmcubm9uWmVybygpOyB9CiAgICAgYm9vbCBoYXNPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+b2Zmc2V0Lm5vblplcm8oKTsgfQotICAgIGJv
b2wgaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSBjb25zdCB7IHJldHVybiBtYXJnaW5CZWZvcmUoKS5x
dWlyaygpOyB9Ci0gICAgYm9vbCBoYXNNYXJnaW5BZnRlclF1aXJrKCkgY29uc3QgeyByZXR1cm4g
bWFyZ2luQWZ0ZXIoKS5xdWlyaygpOyB9CisgICAgYm9vbCBoYXNNYXJnaW5CZWZvcmVRdWlyaygp
IGNvbnN0IHsgcmV0dXJuIG1hcmdpbkJlZm9yZSgpLmhhc1F1aXJrKCk7IH0KKyAgICBib29sIGhh
c01hcmdpbkFmdGVyUXVpcmsoKSBjb25zdCB7IHJldHVybiBtYXJnaW5BZnRlcigpLmhhc1F1aXJr
KCk7IH0KIAogICAgIGJvb2wgaGFzQmFja2dyb3VuZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZ3JvdW5kLT5iYWNrZ3JvdW5kKCkuaGFzSW1hZ2UoKTsgfQogICAgIGJvb2wgaGFzRml4ZWRC
YWNrZ3JvdW5kSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmQtPmJhY2tncm91bmQo
KS5oYXNGaXhlZEltYWdlKCk7IH0KQEAgLTE3NzUsOSArMTc3NSw5IEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIHN0YXRpYyBzaG9ydCBpbml0aWFsV2lkb3dzKCkgeyByZXR1cm4gMjsgfQogICAgIHN0
YXRpYyBzaG9ydCBpbml0aWFsT3JwaGFucygpIHsgcmV0dXJuIDI7IH0KLSAgICBzdGF0aWMgTGVu
Z3RoIGluaXRpYWxMaW5lSGVpZ2h0KCkgeyByZXR1cm4gTGVuZ3RoKC0xMDAuMCwgUGVyY2VudCk7
IH0KKyAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxMaW5lSGVpZ2h0KCkgeyByZXR1cm4gTGVuZ3Ro
KC0xMDAuMGYsIFBlcmNlbnQpOyB9CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0g
ICAgc3RhdGljIExlbmd0aCBpbml0aWFsU3BlY2lmaWVkTGluZUhlaWdodCgpIHsgcmV0dXJuIExl
bmd0aCgtMTAwLCBQZXJjZW50KTsgfQorICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbFNwZWNpZmll
ZExpbmVIZWlnaHQoKSB7IHJldHVybiBMZW5ndGgoLTEwMC4wZiwgUGVyY2VudCk7IH0KICNlbmRp
ZgogICAgIHN0YXRpYyBFVGV4dEFsaWduIGluaXRpYWxUZXh0QWxpZ24oKSB7IHJldHVybiBUQVNU
QVJUOyB9CiAgICAgc3RhdGljIFRleHREZWNvcmF0aW9uIGluaXRpYWxUZXh0RGVjb3JhdGlvbigp
IHsgcmV0dXJuIFRleHREZWNvcmF0aW9uTm9uZTsgfQpAQCAtMTg0NiwxNSArMTg0NiwxNSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIENvbHVtbkZpbGwgaW5pdGlhbENvbHVtbkZpbGwoKSB7IHJldHVy
biBDb2x1bW5GaWxsQmFsYW5jZTsgfQogICAgIHN0YXRpYyBDb2x1bW5TcGFuIGluaXRpYWxDb2x1
bW5TcGFuKCkgeyByZXR1cm4gQ29sdW1uU3Bhbk5vbmU7IH0KICAgICBzdGF0aWMgY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyYgaW5pdGlhbFRyYW5zZm9ybSgpIHsgREVQUkVDQVRFRF9ERUZJTkVf
U1RBVElDX0xPQ0FMKFRyYW5zZm9ybU9wZXJhdGlvbnMsIG9wcywgKCkpOyByZXR1cm4gb3BzOyB9
Ci0gICAgc3RhdGljIExlbmd0aCBpbml0aWFsVHJhbnNmb3JtT3JpZ2luWCgpIHsgcmV0dXJuIExl
bmd0aCg1MC4wLCBQZXJjZW50KTsgfQotICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbFRyYW5zZm9y
bU9yaWdpblkoKSB7IHJldHVybiBMZW5ndGgoNTAuMCwgUGVyY2VudCk7IH0KKyAgICBzdGF0aWMg
TGVuZ3RoIGluaXRpYWxUcmFuc2Zvcm1PcmlnaW5YKCkgeyByZXR1cm4gTGVuZ3RoKDUwLjBmLCBQ
ZXJjZW50KTsgfQorICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbFRyYW5zZm9ybU9yaWdpblkoKSB7
IHJldHVybiBMZW5ndGgoNTAuMGYsIFBlcmNlbnQpOyB9CiAgICAgc3RhdGljIEVQb2ludGVyRXZl
bnRzIGluaXRpYWxQb2ludGVyRXZlbnRzKCkgeyByZXR1cm4gUEVfQVVUTzsgfQogICAgIHN0YXRp
YyBmbG9hdCBpbml0aWFsVHJhbnNmb3JtT3JpZ2luWigpIHsgcmV0dXJuIDA7IH0KICAgICBzdGF0
aWMgRVRyYW5zZm9ybVN0eWxlM0QgaW5pdGlhbFRyYW5zZm9ybVN0eWxlM0QoKSB7IHJldHVybiBU
cmFuc2Zvcm1TdHlsZTNERmxhdDsgfQogICAgIHN0YXRpYyBFQmFja2ZhY2VWaXNpYmlsaXR5IGlu
aXRpYWxCYWNrZmFjZVZpc2liaWxpdHkoKSB7IHJldHVybiBCYWNrZmFjZVZpc2liaWxpdHlWaXNp
YmxlOyB9CiAgICAgc3RhdGljIGZsb2F0IGluaXRpYWxQZXJzcGVjdGl2ZSgpIHsgcmV0dXJuIDA7
IH0KLSAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxQZXJzcGVjdGl2ZU9yaWdpblgoKSB7IHJldHVy
biBMZW5ndGgoNTAuMCwgUGVyY2VudCk7IH0KLSAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxQZXJz
cGVjdGl2ZU9yaWdpblkoKSB7IHJldHVybiBMZW5ndGgoNTAuMCwgUGVyY2VudCk7IH0KKyAgICBz
dGF0aWMgTGVuZ3RoIGluaXRpYWxQZXJzcGVjdGl2ZU9yaWdpblgoKSB7IHJldHVybiBMZW5ndGgo
NTAuMGYsIFBlcmNlbnQpOyB9CisgICAgc3RhdGljIExlbmd0aCBpbml0aWFsUGVyc3BlY3RpdmVP
cmlnaW5ZKCkgeyByZXR1cm4gTGVuZ3RoKDUwLjBmLCBQZXJjZW50KTsgfQogICAgIHN0YXRpYyBD
b2xvciBpbml0aWFsQmFja2dyb3VuZENvbG9yKCkgeyByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50
OyB9CiAgICAgc3RhdGljIENvbG9yIGluaXRpYWxUZXh0RW1waGFzaXNDb2xvcigpIHsgcmV0dXJu
IFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQ7IH0KICAgICBzdGF0aWMgVGV4dEVtcGhhc2lzRmlsbCBp
bml0aWFsVGV4dEVtcGhhc2lzRmlsbCgpIHsgcmV0dXJuIFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQ7
IH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBi
ZGEwNjY0NzdiN2ZmZTkzMTEwOWJlOWUyMjhmZTljMGE3OTlkMmY2Li44ZjhmOWMxYjU4MzdlM2Ix
YmM1N2IxZDRhNTVjZTRkNDllZjVlODA4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDQtMDYgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJld29yayBjYWxjdWxhdGlvbiBsb2dp
YywgZml4aW5nIHNvbWUgcmVmZXJlbmNlIGNvdW50IG1pc3Rha2VzIGluIExlbmd0aAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMjgwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgQ2FsY3VsYXRp
b25WYWx1ZS5jcHAuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NhbGN1
bGF0aW9uVmFsdWUuY3BwOiBBZGRlZC4KKwogMjAxNC0wNC0wNSAgUmFwaGFlbCBLdWJvIGRhIENv
c3RhICA8cmFwaGFlbC5rdWJvLmRhLmNvc3RhQGludGVsLmNvbT4KIAogICAgICAgICBbQ01ha2Vd
IEluY2x1ZGUgWDExJ3MgaW5jbHVkZSBkaXJzIGluIFRlc3ROZXRzY2FwZVBsdWdpbgpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBhMDJiYzUwODQ5MDJmMGUwYjkyODgwYjdkYzQ2MjZhZTg0YWU2
YzA0Li5kMzBiZDNiNzkyNjM5NWMxM2RmZjBjOTU3ZTQxNzQzMjBlYTYwZmY4IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTI4LDYgKzEyOCw3IEBACiAJCTkzOUJGRTNBMThFNTU0ODkwMDg4
MzI3NSAvKiBTdHJpbmdUcnVuY2F0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzlCRkUzOTE4RTU1NDg5MDA4ODMyNzUgLyogU3RyaW5nVHJ1bmNh
dG9yLm1tICovOyB9OwogCQk5M0E0MjdBOTE4MEQ5QjA3MDBDRDI0RDcgLyogUmVmUHRyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQTQyN0E4MTgw
RDlCMDcwMENEMjRENyAvKiBSZWZQdHIuY3BwICovOyB9OwogCQk5M0E0MjdBQjE4MERBMjY0MDBD
RDI0RDcgLyogUmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQTQyN0FBMTgwREEyNjQwMENEMjRENyAvKiBSZWYuY3BwICovOyB9OworCQk5M0E3
MjBFNjE4RjFBMEU4MDBBODQ4RTEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E3MjBFNTE4RjFBMEU4MDBBODQ4
RTEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi87IH07CiAJCTkzQUJBODA5MTZEREFCOTEwMDJE
QjJGQSAvKiBTdHJpbmdIYXNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNBQkE4MDgxNkREQUI5MTAwMkRCMkZBIC8qIFN0cmluZ0hhc2hlci5j
cHAgKi87IH07CiAJCTkzQUY0RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLzsgfTsKIAkJ
OTNBRjRFRDAxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNGMTUwNkYxMjMw
MDdGRDU3RSAvKiBsb3RzLW9mLWltYWdlcy5odG1sICovOyB9OwpAQCAtNDU4LDYgKzQ1OSw3IEBA
CiAJCTkzQTQyN0FBMTgwREEyNjQwMENEMjRENyAvKiBSZWYuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNBNDI3QUMxODBEQTYwRjAwQ0QyNEQ3IC8qIE1vdmVPbmx5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1vdmVPbmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQTQyN0FEMTgwREE2
MEYwMENEMjRENyAvKiBSZWZMb2dnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmTG9nZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQTcyMEU1MThGMUEwRTgwMEE4NDhFMSAvKiBD
YWxjdWxhdGlvblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGN1bGF0aW9uVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FC
QTgwODE2RERBQjkxMDAyREIyRkEgLyogU3RyaW5nSGFzaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ0hhc2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzQUY0RUNBMTUwNkYwMzUwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBRjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5l
d0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02
OTYsNiArNjk4LDcgQEAKIAkJNDQwQTFEMzYxNEEwMTAwMDAwOEE2NkYyIC8qIFdlYkNvcmUgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTkzQTcyMEU1MThG
MUEwRTgwMEE4NDhFMSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCAqLywKIAkJCQlDREMyQzcxNDE3
OTcwODlEMDBFNjI3RkIgLyogVGltZVJhbmdlcy5jcHAgKi8sCiAJCQkJNDQwQTFEMzgxNEEwMTAz
QTAwOEE2NkYyIC8qIFVSTC5jcHAgKi8sCiAJCQkJMTQ0NjQwMTIxNjdBODMwNTAwMEJEMjE4IC8q
IExheW91dFVuaXQuY3BwICovLApAQCAtMTI1NSw2ICsxMjU4LDcgQEAKIAkJCQkzNzIyQzg2OTE0
NjFFMDNFMDBDNDVEMDAgLyogUmVuZGVyZWRJbWFnZUZyb21ET01SYW5nZS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUMwQkQ2NjlEMTMxRDNDRjcwMEUxOEYyQSAvKiBSZXNwb25zaXZlbmVzc1RpbWVy
RG9lc250RmlyZUVhcmx5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMwQURCRTgzMTJGQ0E2QUEw
MEQyQzEyOSAvKiBSZXN0b3JlU2Vzc2lvblN0YXRlQ29udGFpbmluZ0Zvcm1EYXRhLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTkzQTcyMEU2MThGMUEwRTgwMEE4NDhFMSAvKiBDYWxjdWxhdGlvblZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRUY5OTQ5MTdBMDlGNTQwMDk5OEVGMCAvKiBH
ZXRQSURBZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
MDI5QjE4MTQ4NkFENjQwMDgxN0RBOSAvKiBSZXRhaW5QdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkMwMjlCMUMxNDg2QjI1OTAwODE3REE5IC8qIFJldGFpblB0ci5tbSBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NhbGN1bGF0
aW9uVmFsdWUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NhbGN1bGF0
aW9uVmFsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ZTc1MDQzMjBhMjIwZjA4NDU5Y2E2N2EwNmY5Y2I5
N2E5ZGZkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvQ2FsY3VsYXRpb25WYWx1ZS5jcHAKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NhbGN1bGF0aW9uVmFs
dWUuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdGF0aWMgdW5zaWduZWQgZGVs
ZXRpb25Db3VudDsKKworY2xhc3MgQ2FsY3VsYXRpb25EZWxldGlvblRlc3ROb2RlIDogcHVibGlj
IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2Fs
Y3VsYXRpb25EZWxldGlvblRlc3ROb2RlKCkKKyAgICB7CisgICAgICAgICsrZGVsZXRpb25Db3Vu
dDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGZsb2F0IGV2YWx1YXRlKGZsb2F0KSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiAwOyB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNz
aW9uTm9kZSYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQor
fTsKKworc3RhdGljIFBhc3NSZWY8V2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1ZT4gY3JlYXRlVGVz
dFZhbHVlKCkKK3sKKyAgICBhdXRvIG5vZGUgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGN1bGF0aW9u
RGVsZXRpb25UZXN0Tm9kZT4oKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1
ZTo6Y3JlYXRlKHN0ZDo6bW92ZShub2RlKSwgV2ViQ29yZTo6Q2FsY3VsYXRpb25SYW5nZUFsbCk7
Cit9CisKK1RFU1QoQ2FsY3VsYXRpb25WYWx1ZSwgTGVuZ3RoQ29uc3RydWN0aW9uKQoreworICAg
IFJlZlB0cjxXZWJDb3JlOjpDYWxjdWxhdGlvblZhbHVlPiB2YWx1ZSA9IGNyZWF0ZVRlc3RWYWx1
ZSgpOworCisgICAgRVhQRUNUX0VRKDFVLCB2YWx1ZS0+cmVmQ291bnQoKSk7CisKKyAgICB7Cisg
ICAgICAgIFdlYkNvcmU6Okxlbmd0aCBsZW5ndGgoKnZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VR
KDJVLCB2YWx1ZS0+cmVmQ291bnQoKSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDFVLCB2YWx1
ZS0+cmVmQ291bnQoKSk7CisKKyAgICB7CisgICAgICAgIFdlYkNvcmU6Okxlbmd0aCBsZW5ndGhB
KCp2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgyVSwgdmFsdWUtPnJlZkNvdW50KCkpOworICAg
ICAgICBXZWJDb3JlOjpMZW5ndGggbGVuZ3RoQihsZW5ndGhBKTsKKyAgICAgICAgRVhQRUNUX0VR
KDJVLCB2YWx1ZS0+cmVmQ291bnQoKSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDFVLCB2YWx1
ZS0+cmVmQ291bnQoKSk7CisKKyAgICB7CisgICAgICAgIFdlYkNvcmU6Okxlbmd0aCBsZW5ndGhD
KCp2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgyVSwgdmFsdWUtPnJlZkNvdW50KCkpOworICAg
ICAgICBXZWJDb3JlOjpMZW5ndGggbGVuZ3RoRChzdGQ6Om1vdmUobGVuZ3RoQykpOworICAgICAg
ICBFWFBFQ1RfRVEoMlUsIHZhbHVlLT5yZWZDb3VudCgpKTsKKyAgICB9CisKKyAgICBFWFBFQ1Rf
RVEoMVUsIHZhbHVlLT5yZWZDb3VudCgpKTsKKworICAgIEVYUEVDVF9FUSgwVSwgZGVsZXRpb25D
b3VudCk7CisgICAgdmFsdWUgPSBudWxscHRyOworICAgIEVYUEVDVF9FUSgxVSwgZGVsZXRpb25D
b3VudCk7CisgICAgZGVsZXRpb25Db3VudCA9IDA7Cit9CisKK1RFU1QoQ2FsY3VsYXRpb25WYWx1
ZSwgTGVuZ3RoQ29uc3RydWN0aW9uUmVsZWFzZWRWYWx1ZSkKK3sKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6Q2FsY3VsYXRpb25WYWx1ZT4gdmFsdWUgPSBjcmVhdGVUZXN0VmFsdWUoKTsKKworICAgIEVY
UEVDVF9FUSgxVSwgdmFsdWUtPnJlZkNvdW50KCkpOworCisgICAgeworICAgICAgICBhdXRvKiBy
YXdWYWx1ZSA9IHZhbHVlLmdldCgpOworICAgICAgICBXZWJDb3JlOjpMZW5ndGggbGVuZ3RoKHZh
bHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBFWFBFQ1RfRVEoMVUsIHJhd1ZhbHVlLT5y
ZWZDb3VudCgpKTsKKworICAgICAgICBFWFBFQ1RfRVEoMFUsIGRlbGV0aW9uQ291bnQpOworICAg
IH0KKworICAgIEVYUEVDVF9FUSgxVSwgZGVsZXRpb25Db3VudCk7CisgICAgZGVsZXRpb25Db3Vu
dCA9IDA7CisKKyAgICB2YWx1ZSA9IGNyZWF0ZVRlc3RWYWx1ZSgpOworCisgICAgeworICAgICAg
ICBhdXRvKiByYXdWYWx1ZSA9IHZhbHVlLmdldCgpOworICAgICAgICBXZWJDb3JlOjpMZW5ndGgg
bGVuZ3RoQSh2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDFVLCBy
YXdWYWx1ZS0+cmVmQ291bnQoKSk7CisgICAgICAgIFdlYkNvcmU6Okxlbmd0aCBsZW5ndGhCKGxl
bmd0aEEpOworICAgICAgICBFWFBFQ1RfRVEoMVUsIHJhd1ZhbHVlLT5yZWZDb3VudCgpKTsKKwor
ICAgICAgICBFWFBFQ1RfRVEoMFUsIGRlbGV0aW9uQ291bnQpOworICAgIH0KKworICAgIEVYUEVD
VF9FUSgxVSwgZGVsZXRpb25Db3VudCk7CisgICAgZGVsZXRpb25Db3VudCA9IDA7CisKKyAgICB2
YWx1ZSA9IGNyZWF0ZVRlc3RWYWx1ZSgpOworCisgICAgeworICAgICAgICBhdXRvKiByYXdWYWx1
ZSA9IHZhbHVlLmdldCgpOworICAgICAgICBXZWJDb3JlOjpMZW5ndGggbGVuZ3RoQyh2YWx1ZS5y
ZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDFVLCByYXdWYWx1ZS0+cmVmQ291
bnQoKSk7CisgICAgICAgIFdlYkNvcmU6Okxlbmd0aCBsZW5ndGhEKHN0ZDo6bW92ZShsZW5ndGhD
KSk7CisgICAgICAgIEVYUEVDVF9FUSgxVSwgcmF3VmFsdWUtPnJlZkNvdW50KCkpOworCisgICAg
ICAgIEVYUEVDVF9FUSgwVSwgZGVsZXRpb25Db3VudCk7CisgICAgfQorCisgICAgRVhQRUNUX0VR
KDFVLCBkZWxldGlvbkNvdW50KTsKKyAgICBkZWxldGlvbkNvdW50ID0gMDsKK30KKworVEVTVChD
YWxjdWxhdGlvblZhbHVlLCBMZW5ndGhBc3NpZ25tZW50KQoreworICAgIFJlZlB0cjxXZWJDb3Jl
OjpDYWxjdWxhdGlvblZhbHVlPiB2YWx1ZSA9IGNyZWF0ZVRlc3RWYWx1ZSgpOworCisgICAgRVhQ
RUNUX0VRKDFVLCB2YWx1ZS0+cmVmQ291bnQoKSk7CisKKyAgICB7CisgICAgICAgIFdlYkNvcmU6
Okxlbmd0aCBsZW5ndGhBKCp2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgyVSwgdmFsdWUtPnJl
ZkNvdW50KCkpOworICAgICAgICBXZWJDb3JlOjpMZW5ndGggbGVuZ3RoQjsKKyAgICAgICAgbGVu
Z3RoQiA9IGxlbmd0aEE7CisgICAgICAgIEVYUEVDVF9FUSgyVSwgdmFsdWUtPnJlZkNvdW50KCkp
OworICAgIH0KKworICAgIEVYUEVDVF9FUSgxVSwgdmFsdWUtPnJlZkNvdW50KCkpOworCisgICAg
eworICAgICAgICBXZWJDb3JlOjpMZW5ndGggbGVuZ3RoQygqdmFsdWUpOworICAgICAgICBFWFBF
Q1RfRVEoMlUsIHZhbHVlLT5yZWZDb3VudCgpKTsKKyAgICAgICAgV2ViQ29yZTo6TGVuZ3RoIGxl
bmd0aEQ7CisgICAgICAgIGxlbmd0aEQgPSBzdGQ6Om1vdmUobGVuZ3RoQyk7CisgICAgICAgIEVY
UEVDVF9FUSgyVSwgdmFsdWUtPnJlZkNvdW50KCkpOworICAgIH0KKworICAgIEVYUEVDVF9FUSgx
VSwgdmFsdWUtPnJlZkNvdW50KCkpOworCisgICAgRVhQRUNUX0VRKDBVLCBkZWxldGlvbkNvdW50
KTsKKyAgICB2YWx1ZSA9IG51bGxwdHI7CisgICAgRVhQRUNUX0VRKDFVLCBkZWxldGlvbkNvdW50
KTsKKyAgICBkZWxldGlvbkNvdW50ID0gMDsKKworICAgIHZhbHVlID0gY3JlYXRlVGVzdFZhbHVl
KCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNhbGN1bGF0aW9uVmFsdWU+IHZhbHVlMiA9IGNyZWF0
ZVRlc3RWYWx1ZSgpOworCisgICAgRVhQRUNUX0VRKDFVLCB2YWx1ZS0+cmVmQ291bnQoKSk7Cisg
ICAgRVhQRUNUX0VRKDFVLCB2YWx1ZTItPnJlZkNvdW50KCkpOworCisgICAgeworICAgICAgICBX
ZWJDb3JlOjpMZW5ndGggbGVuZ3RoRSgqdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoMlUsIHZh
bHVlLT5yZWZDb3VudCgpKTsKKyAgICAgICAgV2ViQ29yZTo6TGVuZ3RoIGxlbmd0aEYoKnZhbHVl
Mik7CisgICAgICAgIEVYUEVDVF9FUSgyVSwgdmFsdWUyLT5yZWZDb3VudCgpKTsKKyAgICAgICAg
bGVuZ3RoRSA9IGxlbmd0aEY7CisgICAgICAgIEVYUEVDVF9FUSgxVSwgdmFsdWUtPnJlZkNvdW50
KCkpOworICAgICAgICBFWFBFQ1RfRVEoMlUsIHZhbHVlMi0+cmVmQ291bnQoKSk7CisgICAgfQor
CisgICAgRVhQRUNUX0VRKDFVLCB2YWx1ZS0+cmVmQ291bnQoKSk7CisgICAgRVhQRUNUX0VRKDFV
LCB2YWx1ZTItPnJlZkNvdW50KCkpOworCisgICAgeworICAgICAgICBXZWJDb3JlOjpMZW5ndGgg
bGVuZ3RoRygqdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoMlUsIHZhbHVlLT5yZWZDb3VudCgp
KTsKKyAgICAgICAgV2ViQ29yZTo6TGVuZ3RoIGxlbmd0aEgoKnZhbHVlMik7CisgICAgICAgIEVY
UEVDVF9FUSgyVSwgdmFsdWUyLT5yZWZDb3VudCgpKTsKKyAgICAgICAgbGVuZ3RoRyA9IHN0ZDo6
bW92ZShsZW5ndGhIKTsKKyAgICAgICAgRVhQRUNUX0VRKDFVLCB2YWx1ZS0+cmVmQ291bnQoKSk7
CisgICAgICAgIEVYUEVDVF9FUSgyVSwgdmFsdWUyLT5yZWZDb3VudCgpKTsKKyAgICB9CisKKyAg
ICBFWFBFQ1RfRVEoMFUsIGRlbGV0aW9uQ291bnQpOworICAgIHZhbHVlID0gbnVsbHB0cjsKKyAg
ICBFWFBFQ1RfRVEoMVUsIGRlbGV0aW9uQ291bnQpOworICAgIHZhbHVlMiA9IG51bGxwdHI7Cisg
ICAgRVhQRUNUX0VRKDJVLCBkZWxldGlvbkNvdW50KTsKKyAgICBkZWxldGlvbkNvdW50ID0gMDsK
K30KKworVEVTVChDYWxjdWxhdGlvblZhbHVlLCBMZW5ndGhBc3NpZ25tZW50UmVsZWFzZWRWYWx1
ZSkKK3sKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1ZT4gdmFsdWUgPSBjcmVh
dGVUZXN0VmFsdWUoKTsKKworICAgIHsKKyAgICAgICAgYXV0byogcmF3VmFsdWUgPSB2YWx1ZS5n
ZXQoKTsKKyAgICAgICAgV2ViQ29yZTo6TGVuZ3RoIGxlbmd0aEEodmFsdWUucmVsZWFzZU5vbk51
bGwoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxVSwgcmF3VmFsdWUtPnJlZkNvdW50KCkpOworICAg
ICAgICBXZWJDb3JlOjpMZW5ndGggbGVuZ3RoQjsKKyAgICAgICAgbGVuZ3RoQiA9IGxlbmd0aEE7
CisgICAgICAgIEVYUEVDVF9FUSgxVSwgcmF3VmFsdWUtPnJlZkNvdW50KCkpOworCisgICAgICAg
IEVYUEVDVF9FUSgwVSwgZGVsZXRpb25Db3VudCk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDFV
LCBkZWxldGlvbkNvdW50KTsKKyAgICBkZWxldGlvbkNvdW50ID0gMDsKKworICAgIHZhbHVlID0g
Y3JlYXRlVGVzdFZhbHVlKCk7CisKKyAgICB7CisgICAgICAgIGF1dG8qIHJhd1ZhbHVlID0gdmFs
dWUuZ2V0KCk7CisgICAgICAgIFdlYkNvcmU6Okxlbmd0aCBsZW5ndGhDKHZhbHVlLnJlbGVhc2VO
b25OdWxsKCkpOworICAgICAgICBFWFBFQ1RfRVEoMVUsIHJhd1ZhbHVlLT5yZWZDb3VudCgpKTsK
KyAgICAgICAgV2ViQ29yZTo6TGVuZ3RoIGxlbmd0aEQ7CisgICAgICAgIGxlbmd0aEQgPSBzdGQ6
Om1vdmUobGVuZ3RoQyk7CisgICAgICAgIEVYUEVDVF9FUSgxVSwgcmF3VmFsdWUtPnJlZkNvdW50
KCkpOworCisgICAgICAgIEVYUEVDVF9FUSgwVSwgZGVsZXRpb25Db3VudCk7CisgICAgfQorCisg
ICAgRVhQRUNUX0VRKDFVLCBkZWxldGlvbkNvdW50KTsKKyAgICBkZWxldGlvbkNvdW50ID0gMDsK
KworICAgIHZhbHVlID0gY3JlYXRlVGVzdFZhbHVlKCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNh
bGN1bGF0aW9uVmFsdWU+IHZhbHVlMiA9IGNyZWF0ZVRlc3RWYWx1ZSgpOworCisgICAgRVhQRUNU
X0VRKDFVLCB2YWx1ZS0+cmVmQ291bnQoKSk7CisgICAgRVhQRUNUX0VRKDFVLCB2YWx1ZTItPnJl
ZkNvdW50KCkpOworCisgICAgeworICAgICAgICBhdXRvKiByYXdWYWx1ZSA9IHZhbHVlLmdldCgp
OworICAgICAgICBXZWJDb3JlOjpMZW5ndGggbGVuZ3RoRSh2YWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDFVLCByYXdWYWx1ZS0+cmVmQ291bnQoKSk7CisgICAgICAg
IGF1dG8qIHJhd1ZhbHVlMiA9IHZhbHVlMi5nZXQoKTsKKyAgICAgICAgV2ViQ29yZTo6TGVuZ3Ro
IGxlbmd0aEYodmFsdWUyLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBFWFBFQ1RfRVEoMVUs
IHJhd1ZhbHVlMi0+cmVmQ291bnQoKSk7CisKKyAgICAgICAgbGVuZ3RoRSA9IGxlbmd0aEY7Cisg
ICAgICAgIEVYUEVDVF9FUSgxVSwgZGVsZXRpb25Db3VudCk7CisgICAgICAgIEVYUEVDVF9FUSgx
VSwgcmF3VmFsdWUyLT5yZWZDb3VudCgpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoMlUsIGRl
bGV0aW9uQ291bnQpOworICAgIGRlbGV0aW9uQ291bnQgPSAwOworCisgICAgdmFsdWUgPSBjcmVh
dGVUZXN0VmFsdWUoKTsKKyAgICB2YWx1ZTIgPSBjcmVhdGVUZXN0VmFsdWUoKTsKKworICAgIEVY
UEVDVF9FUSgxVSwgdmFsdWUtPnJlZkNvdW50KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdmFsdWUy
LT5yZWZDb3VudCgpKTsKKworICAgIHsKKyAgICAgICAgYXV0byogcmF3VmFsdWUgPSB2YWx1ZS5n
ZXQoKTsKKyAgICAgICAgV2ViQ29yZTo6TGVuZ3RoIGxlbmd0aEcodmFsdWUucmVsZWFzZU5vbk51
bGwoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxVSwgcmF3VmFsdWUtPnJlZkNvdW50KCkpOworICAg
ICAgICBhdXRvKiByYXdWYWx1ZTIgPSB2YWx1ZTIuZ2V0KCk7CisgICAgICAgIFdlYkNvcmU6Okxl
bmd0aCBsZW5ndGhIKHZhbHVlMi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDFVLCByYXdWYWx1ZTItPnJlZkNvdW50KCkpOworCisgICAgICAgIGxlbmd0aEcgPSBzdGQ6Om1v
dmUobGVuZ3RoSCk7CisgICAgICAgIEVYUEVDVF9FUSgxVSwgZGVsZXRpb25Db3VudCk7CisgICAg
ICAgIEVYUEVDVF9FUSgxVSwgcmF3VmFsdWUyLT5yZWZDb3VudCgpKTsKKyAgICB9CisKKyAgICBF
WFBFQ1RfRVEoMlUsIGRlbGV0aW9uQ291bnQpOworICAgIGRlbGV0aW9uQ291bnQgPSAwOworfQor
Cit9Cg==
</data>
<flag name="review"
          id="253022"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>