<?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>56814</bug_id>
          
          <creation_ts>2011-03-22 02:03:55 -0700</creation_ts>
          <short_desc>[Refactoring] Member variables of DocumentMarker should be encapsulated.</short_desc>
          <delta_ts>2011-05-19 20:38:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>56812</blocked>
    
    <blocked>58111</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>atwilson</cc>
    
    <cc>darin</cc>
    
    <cc>jiapu.mail</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>371290</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-22 02:03:55 -0700</bug_when>
    <thetext>Preparation for Bug 56812.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404361</commentid>
    <comment_count>1</comment_count>
      <attachid>93622</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-16 01:42:59 -0700</bug_when>
    <thetext>Created attachment 93622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404364</commentid>
    <comment_count>2</comment_count>
      <attachid>93624</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-16 01:45:19 -0700</bug_when>
    <thetext>Created attachment 93624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404366</commentid>
    <comment_count>3</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-16 01:46:49 -0700</bug_when>
    <thetext>This change is a preparation for DocumentMarker enhancement, 
which will allow DocumentMarkers to carry more detailed information about markers,
that includes not only existing descriptions and active-match flags, but also spelling suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404541</commentid>
    <comment_count>4</comment_count>
      <attachid>93624</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-05-16 10:00:01 -0700</bug_when>
    <thetext>Comment on attachment 93624
Patch

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

&gt; Source/WebCore/dom/DocumentMarker.h:128
&gt; +inline DocumentMarker::DocumentMarker() 

Should we create a new .cpp file for these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404850</commentid>
    <comment_count>5</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-16 17:47:51 -0700</bug_when>
    <thetext>Hi Tony, 
Thank you for reviewing this!
I&apos;ll land this shortly.

&gt; &gt; Source/WebCore/dom/DocumentMarker.h:128
&gt; &gt; +inline DocumentMarker::DocumentMarker() 
&gt; 
&gt; Should we create a new .cpp file for these?
Yes, that is my next step!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404871</commentid>
    <comment_count>6</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-16 18:11:32 -0700</bug_when>
    <thetext>Committed r86647: &lt;http://trac.webkit.org/changeset/86647&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405197</commentid>
    <comment_count>7</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2011-05-17 11:35:47 -0700</bug_when>
    <thetext>Looks like this is causing crashes downstream:

ASSERTION FAILED: i &lt; size()
third_party/WebKit/Source/JavaScriptCore/wtf/Vector.h(537) : T&amp; WTF::Vector&lt;T, inlineCapacity&gt;::at(size_t) [with T = WebCore::DocumentMarker, long unsigned int inlineCapacity = 0ul]

and

ASSERTION FAILED: newMarker.endOffset() &gt;= newMarker.startOffset()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405199</commentid>
    <comment_count>8</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-05-17 11:37:56 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Looks like this is causing crashes downstream:
&gt; 
&gt; ASSERTION FAILED: i &lt; size()
&gt; third_party/WebKit/Source/JavaScriptCore/wtf/Vector.h(537) : T&amp; WTF::Vector&lt;T, inlineCapacity&gt;::at(size_t) [with T = WebCore::DocumentMarker, long unsigned int inlineCapacity = 0ul]
&gt; 
&gt; and
&gt; 
&gt; ASSERTION FAILED: newMarker.endOffset() &gt;= newMarker.startOffset()

Feel free to revert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405263</commentid>
    <comment_count>9</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2011-05-17 13:39:28 -0700</bug_when>
    <thetext>Reverted r86647 for reason:

Broke tests downstream in Chromium

Committed r86704: &lt;http://trac.webkit.org/changeset/86704&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405268</commentid>
    <comment_count>10</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-05-17 13:47:37 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Reverted r86647 for reason:
&gt; 
&gt; Broke tests downstream in Chromium
&gt; 
&gt; Committed r86704: &lt;http://trac.webkit.org/changeset/86704&gt;

@atwilson: Which tests on which bots were broken?  That should help Morita in tracking down the failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405273</commentid>
    <comment_count>11</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2011-05-17 13:54:34 -0700</bug_when>
    <thetext>There were a ton of tests that failed. A small subset could be found here (this is just a single test runner&apos;s failures, but there were failures on nearly every browser_test runner):

http://build.chromium.org/p/chromium/builders/Linux%20Tests%20%28Views%20dbg%29%283%29/builds/90/steps/browser_tests/logs/stdio

I&apos;m guessing that simply running browser_tests and ui_tests locally (or a trybot run) would be sufficient to show them all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405424</commentid>
    <comment_count>12</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-17 17:40:28 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; There were a ton of tests that failed. A small subset could be found here (this is just a single test runner&apos;s failures, but there were failures on nearly every browser_test runner):
&gt; 
&gt; http://build.chromium.org/p/chromium/builders/Linux%20Tests%20%28Views%20dbg%29%283%29/builds/90/steps/browser_tests/logs/stdio
&gt; 
&gt; I&apos;m guessing that simply running browser_tests and ui_tests locally (or a trybot run) would be sufficient to show them all.
Will take a look. I&apos;m sorry for the break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405477</commentid>
    <comment_count>13</comment_count>
      <attachid>93860</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-17 20:22:23 -0700</bug_when>
    <thetext>Created attachment 93860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405478</commentid>
    <comment_count>14</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-17 20:25:26 -0700</bug_when>
    <thetext>The argument order of DocumentMarker constructor in addTextMatchMarker() was wrong.
Now it passes browser_tests with updated patch.

I hope we had layout tests for finding text...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405840</commentid>
    <comment_count>15</comment_count>
      <attachid>93860</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-18 10:57:00 -0700</bug_when>
    <thetext>Comment on attachment 93860
Patch

If we change it like this, we should also change it from struct to class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405882</commentid>
    <comment_count>16</comment_count>
      <attachid>93860</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-05-18 11:27:40 -0700</bug_when>
    <thetext>Comment on attachment 93860
Patch

Feel free to convert to class in this change or a follow up change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406159</commentid>
    <comment_count>17</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-18 18:02:52 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 93860 [details])
&gt; If we change it like this, we should also change it from struct to class.
Sure. I&apos;ll covert this to a class, then land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406180</commentid>
    <comment_count>18</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-18 18:38:45 -0700</bug_when>
    <thetext>Committed r86813: &lt;http://trac.webkit.org/changeset/86813&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406447</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-19 09:24:56 -0700</bug_when>
    <thetext>This broke compiling with SUPPORT_AUTOCORRECTION_PANEL on because at least one call site was missed. I tried to fix it in &lt;http://trac.webkit.org/changeset/86845&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406853</commentid>
    <comment_count>20</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-19 20:38:50 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; This broke compiling with SUPPORT_AUTOCORRECTION_PANEL on because at least one call site was missed. I tried to fix it in &lt;http://trac.webkit.org/changeset/86845&gt;.
Darin, thank you for the fix. I missed it, again...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93622</attachid>
            <date>2011-05-16 01:42:59 -0700</date>
            <delta_ts>2011-05-16 01:45:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56814-20110516174256.patch</filename>
            <type>text/plain</type>
            <size>39449</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY1NDYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkMzcwMTJhNDRlMjQ3YzEz
OTkyNmMyMzM0NDFiZmFkZjc0NTQ0ZDM5Li5mMGNjM2FjMjg3MWQyZGNjYzRhOWJkYTFiODQ3Y2M5
ZjE5NjEzMjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjkgQEAKKzIwMTEtMDUtMTYgIE1PUklU
QSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1JlZmFjdG9yaW5nXSBNZW1iZXIgdmFyaWFibGVzIG9m
IERvY3VtZW50TWFya2VyIHNob3VsZCBiZSBlbmNhcHN1bGF0ZWQuICAgICAgICAKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2ODE0CisKKyAgICAgICAg
LSBNb3ZlZCBEb2N1bWVudE1hcmtlcidzIG1lbWJlciB2YXJpYWJsZXMgdG8gcHJpdmF0ZSBhbmQg
YWRkZWQgZ2V0dGVycyBmb3IgdGhlbS4KKyAgICAgICAgLSBBZGRlZCBEb2N1bWVudE1hcmtlciBz
ZXR0ZXJzIGFuZCBjb25zdHJ1Y3RvcnMsIHdoaWNoIGNvbnRhaW5zIGFzc2VydGlhb24gYWdhaW5z
IG1fdHlwZSB2YWx1ZXMKKyAgICAgICAgICBiZWNhdXNlIGRlc2NyaXB0aW9uIGFuZCBhY3RpdmVN
YXRjaCBhcmUgdXNlZCB3aXRoIHNwZWNpZmljIHR5cGUgb2YgTWFya2VyVHlwZS4KKyAgICAgICAg
LSBNb3ZlZCBjaHJvbWl1bSdzIFdlYktpdDo6V2ViRnJhbWVJbXBsOjphZGRNYXJrZXIoKSB0byBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIgYmVjYXVzZQorICAgICAgICAgIGl0IGFjY2Vzc2VzIERv
Y3VtZW50TWFya2VyIGludGVybmFscy4KKyAgICAgICAgLSBNb3ZlZCBhIHZlcnNpb24gb2YgRE1D
OjphZGRNYXJrZXIoKSB0byBwcml2YXRlIGFuZCBhZGQgYWx0ZW5hdGl2ZXMgdGhhdCBoaWRlCisg
ICAgICAgICAgaW50ZXJuYWxzIG9mIERvY3VtZW50TWFya2VyLiAoVGhlIGludGVybmFsIHdpbGwg
YmUgcmVuZXdlZCBieSB1cGNvbWluZyBjaGFuZ2UuKQorICAgICAgICAKKyAgICAgICAgKiBkb20v
RG9jdW1lbnRNYXJrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjp0eXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpzdGFydE9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6ZW5kT2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudE1hcmtlcjo6aGFzRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXI6OmFjdGl2ZU1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpj
bGVhckRlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpzZXRT
dGFydE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6c2V0RW5kT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcik6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6c2hpZnRPZmZzZXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TWFya2VyOjpzZXRBY3RpdmVNYXRjaCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmFkZE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmFkZFRleHRNYXRjaE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vycyk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVuZGVyZWRSZWN0
c0Zvck1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZW1vdmVNYXJrZXJzRnJvbUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0lu
dGVyc2VjdGluZ1JhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6c2hvd01hcmtlcnMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVByZXNl
cnZpbmdNYXJrZXJzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6b3JpZ2luYWxT
dHJpbmdGb3JBdXRvY29ycmVjdGlvbkF0QmVnaW5uaW5nT2ZTZWxlY3Rpb24pOgorICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9u
U3RhcnRIYXNNYXJrZXJGb3IpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFN0YXJ0VGltZXJGb3IpOgorICAgICAgICAqIHJl
bmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1
bHQ6OnNwZWxsaW5nVG9vbFRpcCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojpy
ZXBsYWNlZFN0cmluZyk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW1hck1h
cmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1h
cmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJl
cGxhY2VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50
RG9jdW1lbnRNYXJrZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lRmxvd0JveDo6Y29tcHV0ZVRleHRN
YXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcik6CisKIDIwMTEtMDUtMTYgIE5pa29sYXMgWmltbWVy
bWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBT
Y2h1bHplLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAppbmRleCBjODc3OGQzNDY3ZGU3
NjFlZDZlZDliMmFkZDQ4ODczY2I4ZDliMmRhLi4wNzdhYzZmYjdiOTdlZTY5MTdlZDBhZTUxMzNl
NDczM2RlMTUzOTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJr
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaApAQCAtODQsMjQg
Kzg0LDgwIEBAIHN0cnVjdCBEb2N1bWVudE1hcmtlciB7CiAgICAgICAgIHsKICAgICAgICAgfQog
ICAgIH07Ci0gICAgCi0gICAgTWFya2VyVHlwZSB0eXBlOwotICAgIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0OwotICAgIHVuc2lnbmVkIGVuZE9mZnNldDsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb247Ci0g
ICAgYm9vbCBhY3RpdmVNYXRjaDsKKworCisgICAgRG9jdW1lbnRNYXJrZXIoKTsKKyAgICBEb2N1
bWVudE1hcmtlcihNYXJrZXJUeXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0KTsKKyAgICBEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlLCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKTsKKyAg
ICBEb2N1bWVudE1hcmtlcih1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
LCBib29sIGFjdGl2ZU1hdGNoKTsKKworICAgIE1hcmtlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fZW5kT2Zmc2V0OyB9CisgICAgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZGVzY3JpcHRpb247IH0KKyAgICBib29sIGhhc0Rlc2NyaXB0aW9uKCkgY29uc3Qg
eyByZXR1cm4gIW1fZGVzY3JpcHRpb24uaXNFbXB0eSgpOyB9CisgICAgYm9vbCBhY3RpdmVNYXRj
aCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlTWF0Y2g7IH0KKworICAgIHZvaWQgc2V0QWN0aXZl
TWF0Y2goYm9vbCk7CisgICAgdm9pZCBjbGVhckRlc2NyaXB0aW9uKCkgeyBtX2Rlc2NyaXB0aW9u
ID0gU3RyaW5nKCk7IH0KKworICAgIC8vIE9mZnNldCBtb2RpZmljYXRpb25zIGFyZSBkb25lIGJ5
IERvY3VtZW50TWFya2VyQ29udHJvbGxlci4KKyAgICAvLyBPdGhlciBjbGFzc2VzIHNob3VsZCBu
b3QgY2FsbCBmb2xsb3dpbmcgc2V0dGVycy4KKyAgICB2b2lkIHNldFN0YXJ0T2Zmc2V0KHVuc2ln
bmVkIG9mZnNldCkgeyBtX3N0YXJ0T2Zmc2V0ID0gb2Zmc2V0OyB9CisgICAgdm9pZCBzZXRFbmRP
ZmZzZXQodW5zaWduZWQgb2Zmc2V0KSB7IG1fZW5kT2Zmc2V0ID0gb2Zmc2V0OyB9CisgICAgdm9p
ZCBzaGlmdE9mZnNldHMoaW50IGRlbHRhKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBE
b2N1bWVudE1hcmtlciYgbykgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlID09IG8u
dHlwZSAmJiBzdGFydE9mZnNldCA9PSBvLnN0YXJ0T2Zmc2V0ICYmIGVuZE9mZnNldCA9PSBvLmVu
ZE9mZnNldDsKKyAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBvLnR5cGUoKSAmJiBzdGFydE9mZnNl
dCgpID09IG8uc3RhcnRPZmZzZXQoKSAmJiBlbmRPZmZzZXQoKSA9PSBvLmVuZE9mZnNldCgpOwog
ICAgIH0KIAogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEb2N1bWVudE1hcmtlciYgbykgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG8pOwogICAgIH0KKworcHJpdmF0
ZTogICAgCisgICAgTWFya2VyVHlwZSBtX3R5cGU7CisgICAgdW5zaWduZWQgbV9zdGFydE9mZnNl
dDsKKyAgICB1bnNpZ25lZCBtX2VuZE9mZnNldDsKKyAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsK
KyAgICBib29sIG1fYWN0aXZlTWF0Y2g7CiB9OwogCitpbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRv
Y3VtZW50TWFya2VyKCkgCisgICAgOiBtX3R5cGUoU3BlbGxpbmcpLCBtX3N0YXJ0T2Zmc2V0KDAp
LCBtX2VuZE9mZnNldCgwKSwgbV9hY3RpdmVNYXRjaChmYWxzZSkKK3sKK30KKworaW5saW5lIERv
Y3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlIHR5cGUsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgOiBtX3R5cGUodHlwZSksIG1fc3Rh
cnRPZmZzZXQoc3RhcnRPZmZzZXQpLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpLCBtX2FjdGl2ZU1h
dGNoKGZhbHNlKQoreworfQorCitpbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFya2Vy
KE1hcmtlclR5cGUgdHlwZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbikKKyAgICA6IG1fdHlwZSh0eXBlKSwgbV9zdGFy
dE9mZnNldChzdGFydE9mZnNldCksIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCksIG1fZGVzY3JpcHRp
b24oZGVzY3JpcHRpb24pLCBtX2FjdGl2ZU1hdGNoKGZhbHNlKQoreworICAgIEFTU0VSVCh0eXBl
ID09IERvY3VtZW50TWFya2VyOjpHcmFtbWFyIHx8IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVj
dGVkKTsKK30KKworaW5saW5lIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcih1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFjdGl2ZU1hdGNoKQorICAg
IDogbV90eXBlKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0
T2Zmc2V0KSwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KSwgbV9hY3RpdmVNYXRjaChhY3RpdmVNYXRj
aCkKK3sKK30KKworaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNoaWZ0T2Zmc2V0cyhpbnQg
ZGVsdGEpCit7CisgICAgbV9zdGFydE9mZnNldCArPSBkZWx0YTsKKyAgICBtX2VuZE9mZnNldCAr
PSAgZGVsdGE7Cit9CisKK2lubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpzZXRBY3RpdmVNYXRj
aChib29sIGFjdGl2ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IERvY3VtZW50TWFya2VyOjpU
ZXh0TWF0Y2gpOworICAgIG1fYWN0aXZlTWF0Y2ggPSBhY3RpdmU7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIERvY3VtZW50TWFya2VyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKaW5kZXggNzRkNzI3ZGY4ZDY1
MDdiM2ZjNWM0ODdmMzIzMGI3ZmQ0ZGEzNDIxMC4uNDU5ODUwYjg5YTViZjU5YTBlNzVkNzM0Nzgy
NWJiNWUyYmE2NDMyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5jcHAKQEAgLTU0LDE0ICs1NCw1MCBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6ZGV0YWNoKCkKICAgICBtX21hcmtlcnMuY2xlYXIoKTsKIH0KIAotdm9pZCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlIHR5cGUsIFN0cmluZyBkZXNjcmlwdGlvbikKK3ZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQogewogICAgIC8vIFVz
ZSBhIFRleHRJdGVyYXRvciB0byB2aXNpdCB0aGUgcG90ZW50aWFsbHkgbXVsdGlwbGUgbm9kZXMg
dGhlIHJhbmdlIGNvdmVycy4KICAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdl
KTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAg
UmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CiAgICAgICAgIGlu
dCBleGNlcHRpb24gPSAwOwotICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSB7dHlwZSwg
dGV4dFBpZWNlLT5zdGFydE9mZnNldChleGNlcHRpb24pLCB0ZXh0UGllY2UtPmVuZE9mZnNldChl
eGNlcHRpb24pLCBkZXNjcmlwdGlvbiwgZmFsc2V9OwotICAgICAgICBhZGRNYXJrZXIodGV4dFBp
ZWNlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLCBtYXJrZXIpOworICAgICAgICBhZGRNYXJr
ZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLCAKKyAgICAgICAgICAgICAg
ICAgIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9u
KSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoZXhjZXB0aW9uKSwgZGVzY3JpcHRpb24pKTsKKyAgICB9
Cit9CisKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UqIHJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQoreworICAgIC8vIFVzZSBhIFRl
eHRJdGVyYXRvciB0byB2aXNpdCB0aGUgcG90ZW50aWFsbHkgbXVsdGlwbGUgbm9kZXMgdGhlIHJh
bmdlIGNvdmVycy4KKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1h
cmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICAgICAgUmVmUHRy
PFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CisgICAgICAgIGludCBleGNl
cHRpb24gPSAwOworICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcihl
eGNlcHRpb24pLCAKKyAgICAgICAgICAgICAgICAgIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQ
aWVjZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoZXhjZXB0
aW9uKSkpOworICAgIH0KKworfQorCisKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjph
ZGRUZXh0TWF0Y2hNYXJrZXIoUmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2ZU1hdGNoKQoreworICAg
IC8vIFVzZSBhIFRleHRJdGVyYXRvciB0byB2aXNpdCB0aGUgcG90ZW50aWFsbHkgbXVsdGlwbGUg
bm9kZXMgdGhlIHJhbmdlIGNvdmVycy4KKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0
KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAg
ICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CisgICAg
ICAgIGludCBleGNlcHRpb24gPSAwOworICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHRl
eHRQaWVjZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKTsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zm
c2V0ID0gdGV4dFBpZWNlLT5lbmRPZmZzZXQoZXhjZXB0aW9uKTsKKyAgICAgICAgYWRkTWFya2Vy
KHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwgRG9jdW1lbnRNYXJrZXIoYWN0
aXZlTWF0Y2gsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpKTsKKyAgICAgICAgaWYgKGVuZE9mZnNl
dCA+IHN0YXJ0T2Zmc2V0KSB7CisgICAgICAgICAgICAvLyBSZW5kZXJlZCByZWN0cyBmb3IgbWFy
a2VycyBpbiBXZWJLaXQgYXJlIG5vdCBwb3B1bGF0ZWQgdW50aWwgZWFjaCB0aW1lCisgICAgICAg
ICAgICAvLyB0aGUgbWFya2VycyBhcmUgcGFpbnRlZC4gSG93ZXZlciwgd2UgbmVlZCBpdCB0byBo
YXBwZW4gc29vbmVyLCBiZWNhdXNlCisgICAgICAgICAgICAvLyB0aGUgd2hvbGUgcHVycG9zZSBv
ZiB0aWNrbWFya3Mgb24gdGhlIHNjcm9sbGJhciBpcyB0byBzaG93IHdoZXJlCisgICAgICAgICAg
ICAvLyBtYXRjaGVzIG9mZi1zY3JlZW4gYXJlICh0aGF0IGhhdmVuJ3QgYmVlbiBwYWludGVkIHll
dCkuCisgICAgICAgICAgICBOb2RlKiBub2RlID0gdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcihl
eGNlcHRpb24pOworICAgICAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0g
bWFya2Vyc0Zvck5vZGUobm9kZSk7CisgICAgICAgICAgICBzZXRSZW5kZXJlZFJlY3RGb3JNYXJr
ZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnNbbWFya2Vycy5zaXplKCkgLSAxXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS0+Ym91bmRpbmdCb3goKSk7Cisg
ICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTg0LDExICsxMjAsMTEgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6TWFya2UKIAogdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2Rl
KiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWFya2VyKSAKIHsKLSAgICBBU1NFUlQo
bmV3TWFya2VyLmVuZE9mZnNldCA+PSBuZXdNYXJrZXIuc3RhcnRPZmZzZXQpOwotICAgIGlmIChu
ZXdNYXJrZXIuZW5kT2Zmc2V0ID09IG5ld01hcmtlci5zdGFydE9mZnNldCkKKyAgICBBU1NFUlQo
bmV3TWFya2VyLmVuZE9mZnNldCgpID49IG5ld01hcmtlci5zdGFydE9mZnNldCgpKTsKKyAgICBp
ZiAobmV3TWFya2VyLmVuZE9mZnNldCgpID09IG5ld01hcmtlci5zdGFydE9mZnNldCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5hZGQobmV3
TWFya2VyLnR5cGUpOworICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLmFkZChuZXdN
YXJrZXIudHlwZSgpKTsKIAogICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5v
ZGUpOwogCkBAIC0xMDUsMTAgKzE0MSwxMCBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6YWRkTWFya2VyKE5vZGUqIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogICAg
ICAgICAvLyAodGhlcmUgaXMgYXQgbW9zdCBvbmUpLCByZW1vdmUgaXQgYW5kIGFkanVzdCB0aGUg
bmV3IG1hcmtlcidzIHN0YXJ0IG9mZnNldCB0byBlbmNvbXBhc3MgaXQuCiAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBudW1NYXJrZXJzOyArK2kpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2Vy
IG1hcmtlciA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNl
dCA+IHRvSW5zZXJ0LnN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgaWYgKG1hcmtlci5zdGFydE9m
ZnNldCgpID4gdG9JbnNlcnQuc3RhcnRPZmZzZXQoKSkKICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSB0b0luc2VydC50eXBlICYmIG1hcmtlci5l
bmRPZmZzZXQgPj0gdG9JbnNlcnQuc3RhcnRPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICB0b0lu
c2VydC5zdGFydE9mZnNldCA9IG1hcmtlci5zdGFydE9mZnNldDsKKyAgICAgICAgICAgIGlmICht
YXJrZXIudHlwZSgpID09IHRvSW5zZXJ0LnR5cGUoKSAmJiBtYXJrZXIuZW5kT2Zmc2V0KCkgPj0g
dG9JbnNlcnQuc3RhcnRPZmZzZXQoKSkgeworICAgICAgICAgICAgICAgIHRvSW5zZXJ0LnNldFN0
YXJ0T2Zmc2V0KG1hcmtlci5zdGFydE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5y
ZW1vdmUoaSk7CiAgICAgICAgICAgICAgICAgbnVtTWFya2Vycy0tOwogICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTIwLDEyICsxNTYsMTIgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmFkZE1hcmtlcihOb2RlKiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWEKICAg
ICAgICAgLy8gYWRqdXN0aW5nIHRoZSBuZXcgbWFya2VyJ3MgZW5kIG9mZnNldCB0byBjb3ZlciB0
aGVtIGlmIG5lY2Vzc2FyeS4KICAgICAgICAgd2hpbGUgKGogPCBudW1NYXJrZXJzKSB7CiAgICAg
ICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBsaXN0LT5hdChqKTsKLSAgICAgICAgICAg
IGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPiB0b0luc2VydC5lbmRPZmZzZXQpCisgICAgICAgICAg
ICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPiB0b0luc2VydC5lbmRPZmZzZXQoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSB0b0luc2Vy
dC50eXBlKSB7CisgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUoKSA9PSB0b0luc2VydC50eXBl
KCkpIHsKICAgICAgICAgICAgICAgICBsaXN0LT5yZW1vdmUoaik7Ci0gICAgICAgICAgICAgICAg
aWYgKHRvSW5zZXJ0LmVuZE9mZnNldCA8PSBtYXJrZXIuZW5kT2Zmc2V0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRvSW5zZXJ0LmVuZE9mZnNldCA9IG1hcmtlci5lbmRPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgaWYgKHRvSW5zZXJ0LmVuZE9mZnNldCgpIDw9IG1hcmtlci5lbmRPZmZzZXQoKSkg
eworICAgICAgICAgICAgICAgICAgICB0b0luc2VydC5zZXRFbmRPZmZzZXQobWFya2VyLmVuZE9m
ZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIG51bU1hcmtlcnMtLTsKQEAgLTE2MiwyMSArMTk4LDIwIEBAIHZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwKICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+
YXQoaSk7CiAKICAgICAgICAgLy8gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmll
ZCByYW5nZQotICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID4gZW5kT2Zmc2V0KQorICAg
ICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPiBlbmRPZmZzZXQpCiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAvLyBza2lwIG1hcmtlciB0aGF0IGlzIGJlZm9yZSB0aGUgc3BlY2lm
aWVkIHJhbmdlIG9yIGlzIHRoZSB3cm9uZyB0eXBlCi0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zm
c2V0IDwgc3RhcnRPZmZzZXQpCisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPCBzdGFy
dE9mZnNldCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIHBpbiB0aGUgbWFy
a2VyIHRvIHRoZSBzcGVjaWZpZWQgcmFuZ2UgYW5kIGFwcGx5IHRoZSBzaGlmdCBkZWx0YQogICAg
ICAgICBkb2NEaXJ0eSA9IHRydWU7Ci0gICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPCBz
dGFydE9mZnNldCkKLSAgICAgICAgICAgIG1hcmtlci5zdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0
OwotICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCA+IGVuZE9mZnNldCkKLSAgICAgICAgICAg
IG1hcmtlci5lbmRPZmZzZXQgPSBlbmRPZmZzZXQ7Ci0gICAgICAgIG1hcmtlci5zdGFydE9mZnNl
dCArPSBkZWx0YTsKLSAgICAgICAgbWFya2VyLmVuZE9mZnNldCArPSBkZWx0YTsKKyAgICAgICAg
aWYgKG1hcmtlci5zdGFydE9mZnNldCgpIDwgc3RhcnRPZmZzZXQpCisgICAgICAgICAgICBtYXJr
ZXIuc2V0U3RhcnRPZmZzZXQoc3RhcnRPZmZzZXQpOworICAgICAgICBpZiAobWFya2VyLmVuZE9m
ZnNldCgpID4gZW5kT2Zmc2V0KQorICAgICAgICAgICAgbWFya2VyLnNldEVuZE9mZnNldChlbmRP
ZmZzZXQpOworICAgICAgICBtYXJrZXIuc2hpZnRPZmZzZXRzKGRlbHRhKTsKIAogICAgICAgICBh
ZGRNYXJrZXIoZHN0Tm9kZSwgbWFya2VyKTsKICAgICB9CkBAIC0yMDUsMTEgKzI0MCwxMSBAQCB2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgaQogICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBs
aXN0LT5hdChpKTsKIAogICAgICAgICAvLyBtYXJrZXJzIGFyZSByZXR1cm5lZCBpbiBvcmRlciwg
c28gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmllZCByYW5nZQotICAgICAgICBp
ZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID49IGVuZE9mZnNldCkKKyAgICAgICAgaWYgKG1hcmtlci5z
dGFydE9mZnNldCgpID49IGVuZE9mZnNldCkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IC8vIHNraXAgbWFya2VyIHRoYXQgaXMgd3JvbmcgdHlwZSBvciBiZWZvcmUgdGFyZ2V0Ci0gICAg
ICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0IDw9IHN0YXJ0T2Zmc2V0IHx8ICFtYXJrZXJUeXBlcy5j
b250YWlucyhtYXJrZXIudHlwZSkpIHsKKyAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA8
PSBzdGFydE9mZnNldCB8fCAhbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLnR5cGUoKSkpIHsK
ICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0y
MjUsMTYgKzI2MCwxNiBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFy
a2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgLy8gYWRkIGVpdGhlciBvZiB0aGUgcmVzdWx0aW5nIHNsaWNlcyB0
aGF0IGFyZSBsZWZ0IGFmdGVyIHJlbW92aW5nIHRhcmdldAotICAgICAgICBpZiAoc3RhcnRPZmZz
ZXQgPiBtYXJrZXIuc3RhcnRPZmZzZXQpIHsKKyAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4gbWFy
a2VyLnN0YXJ0T2Zmc2V0KCkpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG5ld0xlZnQg
PSBtYXJrZXI7Ci0gICAgICAgICAgICBuZXdMZWZ0LmVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0Owor
ICAgICAgICAgICAgbmV3TGVmdC5zZXRFbmRPZmZzZXQoc3RhcnRPZmZzZXQpOwogICAgICAgICAg
ICAgbGlzdC0+aW5zZXJ0KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIobmV3TGVmdCkpOwogICAg
ICAgICAgICAgLy8gaSBub3cgcG9pbnRzIHRvIHRoZSBuZXdseS1pbnNlcnRlZCBub2RlLCBidXQg
d2Ugd2FudCB0byBza2lwIHRoYXQgb25lCiAgICAgICAgICAgICBpKys7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQgPiBlbmRPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1h
cmtlci5lbmRPZmZzZXQoKSA+IGVuZE9mZnNldCkgewogICAgICAgICAgICAgRG9jdW1lbnRNYXJr
ZXIgbmV3UmlnaHQgPSBtYXJrZXI7Ci0gICAgICAgICAgICBuZXdSaWdodC5zdGFydE9mZnNldCA9
IGVuZE9mZnNldDsKKyAgICAgICAgICAgIG5ld1JpZ2h0LnNldFN0YXJ0T2Zmc2V0KGVuZE9mZnNl
dCk7CiAgICAgICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcihu
ZXdSaWdodCkpOwogICAgICAgICAgICAgLy8gaSBub3cgcG9pbnRzIHRvIHRoZSBuZXdseS1pbnNl
cnRlZCBub2RlLCBidXQgd2Ugd2FudCB0byBza2lwIHRoYXQgb25lCiAgICAgICAgICAgICBpKys7
CkBAIC0yNzAsNyArMzA1LDcgQEAgRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6bWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0IEludFBvaW50JgogICAgICAgICAgICAg
UmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwog
CiAgICAgICAgICAgICAvLyBza2lwIG1hcmtlciB0aGF0IGlzIHdyb25nIHR5cGUKLSAgICAgICAg
ICAgIGlmIChtYXJrZXIudHlwZSAhPSBtYXJrZXJUeXBlKQorICAgICAgICAgICAgaWYgKG1hcmtl
ci50eXBlKCkgIT0gbWFya2VyVHlwZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICAgICAgaWYgKG1hcmtlci5jb250YWlucyhwb2ludCkpCkBAIC0zMTEsMTEgKzM0NiwxMSBA
QCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vy
c0luUmFuZ2UoUmFuZ2UqIHJhbmdlLCBEbwogICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+
IG1hcmtlcnMgPSBtYXJrZXJzRm9yTm9kZShub2RlKTsKICAgICAgICAgVmVjdG9yPERvY3VtZW50
TWFya2VyPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFya2Vycy5lbmQoKTsKICAgICAgICAgZm9y
IChWZWN0b3I8RG9jdW1lbnRNYXJrZXI+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcmtlcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNv
bnRhaW5zKGl0LT50eXBlKSkKKyAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMo
aXQtPnR5cGUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
bm9kZSA9PSBzdGFydENvbnRhaW5lciAmJiBpdC0+ZW5kT2Zmc2V0IDw9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihyYW5nZS0+c3RhcnRPZmZzZXQoKSkpCisgICAgICAgICAgICBpZiAobm9kZSA9PSBz
dGFydENvbnRhaW5lciAmJiBpdC0+ZW5kT2Zmc2V0KCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHJhbmdlLT5zdGFydE9mZnNldCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmIChub2RlID09IGVuZENvbnRhaW5lciAmJiBpdC0+c3RhcnRPZmZzZXQgPj0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLT5lbmRPZmZzZXQoKSkpCisgICAgICAgICAgICBpZiAo
bm9kZSA9PSBlbmRDb250YWluZXIgJiYgaXQtPnN0YXJ0T2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHJhbmdlLT5lbmRPZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBmb3VuZE1hcmtlcnMuYXBwZW5kKCppdCk7CiAgICAgICAgIH0KQEAgLTM0
MSw3ICszNzYsNyBAQCBWZWN0b3I8SW50UmVjdD4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpy
ZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmtlcgogICAgICAgICAgICAgY29uc3Qg
UmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwog
CiAgICAgICAgICAgICAvLyBza2lwIG1hcmtlciB0aGF0IGlzIHdyb25nIHR5cGUKLSAgICAgICAg
ICAgIGlmIChtYXJrZXIudHlwZSAhPSBtYXJrZXJUeXBlKQorICAgICAgICAgICAgaWYgKG1hcmtl
ci50eXBlKCkgIT0gbWFya2VyVHlwZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICAgICAgaWYgKCFtYXJrZXIuaXNSZW5kZXJlZCgpKQpAQCAtMzkzLDcgKzQyOCw3IEBAIHZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzRnJvbUxpc3QoTm9kZSog
bm9kZSwgTWFya2VyTGlzdCogbGlzCiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIg
PSBsaXN0LT5hdChpKTsKIAogICAgICAgICAgICAgLy8gc2tpcCBub2RlcyB0aGF0IGFyZSBub3Qg
b2YgdGhlIHNwZWNpZmllZCB0eXBlCi0gICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRh
aW5zKG1hcmtlci50eXBlKSkgeworICAgICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5jb250YWlu
cyhtYXJrZXIudHlwZSgpKSkgewogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTQ0MCw3ICs0NzUsNyBAQCB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGVzIG1hcmtlcgogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+
YXQoaSk7CiAKICAgICAgICAgICAgIC8vIHNraXAgbm9kZXMgdGhhdCBhcmUgbm90IG9mIHRoZSBz
cGVjaWZpZWQgdHlwZQotICAgICAgICAgICAgaWYgKG1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtl
ci50eXBlKSkgeworICAgICAgICAgICAgaWYgKG1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50
eXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgbm9kZU5lZWRzUmVwYWludCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC01MDEsMTAgKzUzNiw5IEBAIHZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9kZSwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIGluCiAgICAgYm9vbCBkb2NEaXJ0eSA9IGZhbHNlOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpICE9IGxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KGkpOwotICAgICAgICBpZiAobWFy
a2VyLnN0YXJ0T2Zmc2V0ID49IHN0YXJ0T2Zmc2V0KSB7Ci0gICAgICAgICAgICBBU1NFUlQoKGlu
dCltYXJrZXIuc3RhcnRPZmZzZXQgKyBkZWx0YSA+PSAwKTsKLSAgICAgICAgICAgIG1hcmtlci5z
dGFydE9mZnNldCArPSBkZWx0YTsKLSAgICAgICAgICAgIG1hcmtlci5lbmRPZmZzZXQgKz0gZGVs
dGE7CisgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA+PSBzdGFydE9mZnNldCkgewor
ICAgICAgICAgICAgQVNTRVJUKChpbnQpbWFya2VyLnN0YXJ0T2Zmc2V0KCkgKyBkZWx0YSA+PSAw
KTsKKyAgICAgICAgICAgIG1hcmtlci5zaGlmdE9mZnNldHMoZGVsdGEpOwogICAgICAgICAgICAg
ZG9jRGlydHkgPSB0cnVlOwogCiAgICAgICAgICAgICAvLyBNYXJrZXIgbW92ZWQsIHNvIHByZXZp
b3VzbHktY29tcHV0ZWQgcmVuZGVyZWQgcmVjdGFuZ2xlIGlzIG5vdyBpbnZhbGlkCkBAIC01NDYs
MTQgKzU4MCwxNCBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0Fj
dGl2ZShOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldAogICAgICAgICBEb2N1bWVudE1h
cmtlciYgbWFya2VyID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAgLy8gTWFya2VycyBhcmUgcmV0
dXJuZWQgaW4gb3JkZXIsIHNvIHN0b3AgaWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBzcGVjaWZpZWQg
cmFuZ2UuCi0gICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPj0gZW5kT2Zmc2V0KQorICAg
ICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gZW5kT2Zmc2V0KQogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgLy8gU2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlIG9yIGJl
Zm9yZSB0YXJnZXQuCi0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0IDwgc3RhcnRPZmZzZXQg
fHwgbWFya2VyLnR5cGUgIT0gRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCkKKyAgICAgICAgaWYg
KG1hcmtlci5lbmRPZmZzZXQoKSA8IHN0YXJ0T2Zmc2V0IHx8IG1hcmtlci50eXBlKCkgIT0gRG9j
dW1lbnRNYXJrZXI6OlRleHRNYXRjaCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IG1hcmtlci5hY3RpdmVNYXRjaCA9IGFjdGl2ZTsKKyAgICAgICAgbWFya2VyLnNldEFjdGl2ZU1h
dGNoKGFjdGl2ZSk7CiAgICAgICAgIGRvY0RpcnR5ID0gdHJ1ZTsKICAgICB9CiAKQEAgLTU3OCwx
MSArNjEyLDExIEBAIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJh
bmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5CiAgICAgICAgIFZlY3RvcjxEb2N1
bWVudE1hcmtlcj4gbWFya2VycyA9IG1hcmtlcnNGb3JOb2RlKG5vZGUpOwogICAgICAgICBWZWN0
b3I8RG9jdW1lbnRNYXJrZXI+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXJrZXJzLmVuZCgpOwog
ICAgICAgICBmb3IgKFZlY3RvcjxEb2N1bWVudE1hcmtlcj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFya2Vycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmICghbWFy
a2VyVHlwZXMuY29udGFpbnMoaXQtPnR5cGUpKQorICAgICAgICAgICAgaWYgKCFtYXJrZXJUeXBl
cy5jb250YWlucyhpdC0+dHlwZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmIChub2RlID09IHN0YXJ0Q29udGFpbmVyICYmIGl0LT5lbmRPZmZzZXQgPD0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLT5zdGFydE9mZnNldCgpKSkKKyAgICAgICAgICAgIGlm
IChub2RlID09IHN0YXJ0Q29udGFpbmVyICYmIGl0LT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gZW5kQ29udGFpbmVyICYmIGl0LT5zdGFydE9m
ZnNldCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UtPmVuZE9mZnNldCgpKSkKKyAgICAg
ICAgICAgIGlmIChub2RlID09IGVuZENvbnRhaW5lciAmJiBpdC0+c3RhcnRPZmZzZXQoKSA+PSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UtPmVuZE9mZnNldCgpKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC02MTEs
MTYgKzY0NSwxNiBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNjcmlw
dGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKFJhbmdlKgogICAgICAgICAgICAgRG9jdW1l
bnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KGkpOwogCiAgICAgICAgICAgICAvLyBtYXJrZXJz
IGFyZSByZXR1cm5lZCBpbiBvcmRlciwgc28gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNw
ZWNpZmllZCByYW5nZQotICAgICAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCA+PSBlbmRP
ZmZzZXQpCisgICAgICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gZW5kT2Zmc2V0
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAvLyBza2lwIG1hcmtlciB0
aGF0IGlzIHdyb25nIHR5cGUgb3IgYmVmb3JlIHRhcmdldAotICAgICAgICAgICAgaWYgKG1hcmtl
ci5lbmRPZmZzZXQgPD0gc3RhcnRPZmZzZXQgfHwgIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtl
ci50eXBlKSkgeworICAgICAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA8PSBzdGFydE9m
ZnNldCB8fCAhbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLnR5cGUoKSkpIHsKICAgICAgICAg
ICAgICAgICBpKys7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIG1hcmtlci5kZXNjcmlwdGlvbiA9IFN0cmluZygpOworICAgICAgICAgICAg
bWFya2VyLmNsZWFyRGVzY3JpcHRpb24oKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTYzNCw4
ICs2NjgsMTEgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKCkg
Y29uc3QKICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVyYXRvci0+Zmlyc3QuZ2V0KCk7CiAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXAiLCBub2RlKTsKICAgICAgICAgTWFya2VyTGlzdCog
bGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOwotICAgICAgICBmb3IgKHVuc2lnbmVkIG1hcmtl
ckluZGV4ID0gMDsgbWFya2VySW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbWFya2VySW5kZXgpCi0g
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAlZDpbJWQ6JWRdKCVkKSIsIGxpc3QtPmF0KG1h
cmtlckluZGV4KS50eXBlLCBsaXN0LT5hdChtYXJrZXJJbmRleCkuc3RhcnRPZmZzZXQsIGxpc3Qt
PmF0KG1hcmtlckluZGV4KS5lbmRPZmZzZXQsIGxpc3QtPmF0KG1hcmtlckluZGV4KS5hY3RpdmVN
YXRjaCk7CisgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJrZXJJbmRl
eCA8IGxpc3QtPnNpemUoKTsgKyttYXJrZXJJbmRleCkgeworICAgICAgICAgICAgY29uc3QgRG9j
dW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKKyAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0oJWQpIiwgbWFya2VyLnR5cGUoKSwgbWFya2Vy
LnN0YXJ0T2Zmc2V0KCksIG1hcmtlci5lbmRPZmZzZXQoKSwgbWFya2VyLmFjdGl2ZU1hdGNoKCkp
OworICAgICAgICB9CisKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCAx
YjE1OGQ4ZjYzYjg2YTU4YTFjNGE0ZTc3M2IyNGU1Y2IwZjBkM2RiLi5lZTQxMTdkZGYwN2VlNzhh
OTEwNGI0ZWMyMzVkODIyZGNmMzk3OGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC00Nyw4ICs0NywxMCBAQCBwdWJsaWM6CiAgICAgfkRv
Y3VtZW50TWFya2VyQ29udHJvbGxlcigpIHsgZGV0YWNoKCk7IH0KIAogICAgIHZvaWQgZGV0YWNo
KCk7Ci0gICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSwgU3RyaW5nIGRlc2NyaXB0aW9uID0gU3RyaW5nKCkpOwotICAgIHZvaWQgYWRkTWFya2VyKE5v
ZGUqLCBjb25zdCBEb2N1bWVudE1hcmtlciYpOworICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOworICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOwor
ICAgIHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKFJhbmdlKiwgYm9vbCBhY3RpdmVNYXRjaCk7CisK
ICAgICB2b2lkIGNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCBpbnQgbGVuZ3RoLCBOb2RlKiBkc3ROb2RlLCBpbnQgZGVsdGEpOwogICAgIGJvb2wgaGFzTWFy
a2VycyhSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9IERvY3VtZW50TWFya2Vy
OjpBbGxNYXJrZXJzKCkpOwogCkBAIC03OSw2ICs4MSw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiBw
cml2YXRlOgorICAgIHZvaWQgYWRkTWFya2VyKE5vZGUqLCBjb25zdCBEb2N1bWVudE1hcmtlciYp
OworCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gTWFya2VyTGlz
dDsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBNYXJrZXJMaXN0Kj4gTWFya2Vy
TWFwOwogICAgIGJvb2wgcG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCmluZGV4IGRkNTA1MWIyZDlhNWM0ZTY2YTExZmI2NmJiMjM3YTRiNjQ2ZjVjNDguLjBhYjgz
YTg1MWE3YTMyMGU5N2IwNDAwYmRkMjZlZTYzNmJjZjhjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0zNDgsOCArMzQ4LDEyIEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01h
cmtlcnMoUGFzc1JlZlB0cjxUZXh0PiBwCiAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJr
ZXJzID0gbWFya2VyQ29udHJvbGxlci0+bWFya2Vyc0luUmFuZ2UoUmFuZ2U6OmNyZWF0ZShkb2N1
bWVudCgpLCBub2RlLCBvZmZzZXQsIG5vZGUsIG9mZnNldCArIGNvdW50KS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OkFsbE1hcmtlcnMoKSk7CiAgICAgcmVwbGFjZVRleHRJbk5vZGUobm9kZSwgb2Zm
c2V0LCBjb3VudCwgcmVwbGFjZW1lbnRUZXh0KTsKICAgICBSZWZQdHI8UmFuZ2U+IG5ld1Jhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBub2RlLCBvZmZzZXQsIG5vZGUsIG9mZnNldCAr
IHJlcGxhY2VtZW50VGV4dC5sZW5ndGgoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
YXJrZXJzLnNpemUoKTsgKytpKQotICAgICAgICBtYXJrZXJDb250cm9sbGVyLT5hZGRNYXJrZXIo
bmV3UmFuZ2UuZ2V0KCksIG1hcmtlcnNbaV0udHlwZSwgbWFya2Vyc1tpXS5kZXNjcmlwdGlvbik7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChtYXJrZXJzW2ldLmhhc0Rlc2NyaXB0aW9uKCkpCisgICAgICAgICAgICBtYXJrZXJD
b250cm9sbGVyLT5hZGRNYXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1hcmtlcnNbaV0udHlwZSgpLCBt
YXJrZXJzW2ldLmRlc2NyaXB0aW9uKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtYXJr
ZXJDb250cm9sbGVyLT5hZGRNYXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1hcmtlcnNbaV0udHlwZSgp
KTsKKyAgICB9CiB9CiAKIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91
dHNpZGVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJiBwb3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA3NDk5MjMwMzJjZmU4ZjRh
ZmQ5M2JjZmEyNWI1OTBhMTUyYmYwNjcxLi5hYWE2ZDk1OTdiNGM5ZWJlMGU4ZDcxYjAwZDYyZjk1
MDU5NjYxZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKQEAgLTc2Miw5ICs3NjIsOSBAQCBTdHJpbmcgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6b3JpZ2luYWxTdHJpbmdGb3JBdXRvY29ycmVjdGlvbkF0QmVnaW5uaW5nT2ZTZWxl
YwogICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9IGRvY3VtZW50KCktPm1hcmtl
cnMoKS0+bWFya2Vyc0luUmFuZ2UocmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJr
ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIg
PSBtYXJrZXJzW2ldOwotICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZz
ZXQ7CisgICAgICAgIGludCBzdGFydE9mZnNldCA9IG1hcmtlci5zdGFydE9mZnNldCgpOwogICAg
ICAgICBpZiAoc3RhcnRPZmZzZXQgPT0gc3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgp
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1hcmtlci5kZXNj
cmlwdGlvbjsKKyAgICAgICAgICAgIHJldHVybiBtYXJrZXIuZGVzY3JpcHRpb24oKTsKICAgICB9
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4
IGM2YzJmZTYzMGU2MjA3NmZkMmE1OTMzZGY2YzA4NDUzN2IxZmNiODguLmI4OWQ0MzQxMTYzNWM1
ZDY5ZDJlZTZmMmE0M2VjMzg0YjYzNTEwYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
QEAgLTMyMjAsNyArMzIyMCw3IEBAIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtl
ckZvcihEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlLCBpCiAgICAgVmVjdG9y
PERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
LT5tYXJrZXJzRm9yTm9kZShub2RlKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtl
cnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbWFya2Vy
c1tpXTsKLSAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCA8PSBzdGFydE9mZnNldCAmJiBl
bmRPZmZzZXQgPD0gbWFya2VyLmVuZE9mZnNldCAmJiBtYXJrZXIudHlwZSA9PSBtYXJrZXJUeXBl
KQorICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPD0gc3RhcnRPZmZzZXQgJiYgZW5k
T2Zmc2V0IDw9IG1hcmtlci5lbmRPZmZzZXQoKSAmJiBtYXJrZXIudHlwZSgpID09IG1hcmtlclR5
cGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4
IDAzZmFlMTIxODA5NzFkYjE3YjhhYmQzZDY1ZmI4YTBmZWUwODg3MzkuLjI2ZGZiMTBkZWFjZmEy
ZTkwOWFmODJiMDhhNjNhZTgwMTc1MDRiODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcApAQCAtNDA5LDE3ICs0
MDksMTcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3QKICAgICAgICAgY29uc3QgRG9jdW1lbnRN
YXJrZXImIG1hcmtlciA9IG1hcmtlcnNbaV07CiAgICAgICAgIGlmICghc2hvdWxkU3RhcnRUaW1l
ckZvcihtYXJrZXIsIGVuZE9mZnNldCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
UmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50
KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCk7Cisg
ICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5k
b2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9m
ZnNldCgpKTsKICAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5n
ZS5nZXQoKSk7CiAgICAgICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQgPSB3b3JkUmFuZ2U7CiAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
ZFN0cmluZyA9IGN1cnJlbnRXb3JkOwotICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nKQorICAgICAgICBpZiAobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpCiAgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVy
KENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVu
dFN0cmluZyA9IG1hcmtlci5kZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IG1hcmtlci5kZXNjcmlwdGlvbigpOwogICAgICAg
ICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVSZXZlcnNpb24pOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgKaW5kZXggN2I5MzY4NTIwZDM3
NzViYzBjOTcxOWZlNWM4Y2ZkMmY5MmVlN2VjOS4uODE1NzQ4ZjQ4NDJkZTU3OGFiZDlkODdkOGMz
MjExNDJlM2Q3NGFiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgKQEAgLTEyOCw4ICsxMjgsOCBAQCBwcml2YXRlOgog
CiAgICAgYm9vbCBzaG91bGRTdGFydFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJr
ZXIsIGludCBlbmRPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKCgobWFya2Vy
LnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJrZXIuZGVzY3JpcHRp
b24uaXNOdWxsKCkpIAotICAgICAgICAgICAgICAgICB8fCBtYXJrZXIudHlwZSA9PSBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVuZE9mZnNldCkg
PT0gZW5kT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuICgoKG1hcmtlci50eXBlKCkgPT0gRG9jdW1l
bnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJrZXIuZGVzY3JpcHRpb24oKS5pc051bGwoKSkg
CisgICAgICAgICAgICAgICAgIHx8IG1hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQoKSkgPT0gZW5kT2Zm
c2V0KTsKICAgICB9CiAKICAgICBFZGl0b3JDbGllbnQqIGNsaWVudCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4IDcxZGZlYWRmYzE4MTZlMDlhOTgw
OGQ1NTVhMDMzZjdhMTQ3NTAxZWMuLmQ1YTFiNWM4NThjYzQwZTBmZjU3N2NlMmFjMWMxODAzNDA2
MWQwZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAg
LTIwMSw3ICsyMDEsNyBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6c3BlbGxpbmdUb29sVGlwKFRl
eHREaXJlY3Rpb24mIGRpcikgY29uc3QKIAogICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIGRpciA9IHJlbmRl
cmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKTsKLSAgICByZXR1cm4gbWFya2VyLT5kZXNjcmlwdGlv
bjsKKyAgICByZXR1cm4gbWFya2VyLT5kZXNjcmlwdGlvbigpOwogfQogCiBTdHJpbmcgSGl0VGVz
dFJlc3VsdDo6cmVwbGFjZWRTdHJpbmcoKSBjb25zdApAQCAtMjE1LDcgKzIxNSw3IEBAIFN0cmlu
ZyBIaXRUZXN0UmVzdWx0OjpyZXBsYWNlZFN0cmluZygpIGNvbnN0CiAgICAgaWYgKCFtYXJrZXIp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKLSAgICByZXR1cm4gbWFya2VyLT5kZXNj
cmlwdGlvbjsKKyAgICByZXR1cm4gbWFya2VyLT5kZXNjcmlwdGlvbigpOwogfSAgICAKICAgICAK
IFN0cmluZyBIaXRUZXN0UmVzdWx0Ojp0aXRsZShUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggODliOWFjZWI2
ZjhmYzUyY2ZkZjFjN2U2NTE3OThlZjFjNTc0ZTJhNC4uOWI2MGM0MjFkMDdmYWM4NDI0NDJmNjI0
MDFiZTI4YWY0NmI3ZWU1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcApAQCAtOTkyLDE2ICs5OTIsMTYgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNw
ZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2EKIAog
ICAgIC8vIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gbWVhc3VyZSB0ZXh0CiAgICAgYm9v
bCBtYXJrZXJTcGFuc1dob2xlQm94ID0gdHJ1ZTsKLSAgICBpZiAobV9zdGFydCA8PSAoaW50KW1h
cmtlci5zdGFydE9mZnNldCkKKyAgICBpZiAobV9zdGFydCA8PSAoaW50KW1hcmtlci5zdGFydE9m
ZnNldCgpKQogICAgICAgICBtYXJrZXJTcGFuc1dob2xlQm94ID0gZmFsc2U7Ci0gICAgaWYgKChl
bmQoKSArIDEpICE9IG1hcmtlci5lbmRPZmZzZXQpICAgICAgLy8gZW5kIHBvaW50cyBhdCB0aGUg
bGFzdCBjaGFyLCBub3QgcGFzdCBpdAorICAgIGlmICgoZW5kKCkgKyAxKSAhPSBtYXJrZXIuZW5k
T2Zmc2V0KCkpIC8vIGVuZCBwb2ludHMgYXQgdGhlIGxhc3QgY2hhciwgbm90IHBhc3QgaXQKICAg
ICAgICAgbWFya2VyU3BhbnNXaG9sZUJveCA9IGZhbHNlOwogICAgIGlmIChtX3RydW5jYXRpb24g
IT0gY05vVHJ1bmNhdGlvbikKICAgICAgICAgbWFya2VyU3BhbnNXaG9sZUJveCA9IGZhbHNlOwog
CiAgICAgaWYgKCFtYXJrZXJTcGFuc1dob2xlQm94IHx8IGdyYW1tYXIpIHsKLSAgICAgICAgaW50
IHN0YXJ0UG9zaXRpb24gPSBtYXg8aW50PihtYXJrZXIuc3RhcnRPZmZzZXQgLSBtX3N0YXJ0LCAw
KTsKLSAgICAgICAgaW50IGVuZFBvc2l0aW9uID0gbWluPGludD4obWFya2VyLmVuZE9mZnNldCAt
IG1fc3RhcnQsIG1fbGVuKTsKKyAgICAgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBtYXg8aW50Piht
YXJrZXIuc3RhcnRPZmZzZXQoKSAtIG1fc3RhcnQsIDApOworICAgICAgICBpbnQgZW5kUG9zaXRp
b24gPSBtaW48aW50PihtYXJrZXIuZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCBtX2xlbik7CiAgICAg
ICAgIAogICAgICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pCiAgICAgICAg
ICAgICBlbmRQb3NpdGlvbiA9IG1pbjxpbnQ+KGVuZFBvc2l0aW9uLCBtX3RydW5jYXRpb24pOwpA
QCAtMTA0Myw3ICsxMDQzLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JH
cmFtbWFyTWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2EKICAgICAgICAgLy8g
SW4gbGFyZ2VyIGZvbnRzLCB0aG91Z2gsIHBsYWNlIHRoZSB1bmRlcmxpbmUgdXAgbmVhciB0aGUg
YmFzZWxpbmUgdG8gcHJldmVudCBhIGJpZyBnYXAuCiAgICAgICAgIHVuZGVybGluZU9mZnNldCA9
IGJhc2VsaW5lICsgMjsKICAgICB9Ci0gICAgcHQtPmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKEZs
b2F0UG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgdW5kZXJsaW5l
T2Zmc2V0KSwgd2lkdGgsIHRleHRDaGVja2luZ0xpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2Vy
LnR5cGUpKTsKKyAgICBwdC0+ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoRmxvYXRQb2ludChib3hP
cmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0
aCwgdGV4dENoZWNraW5nTGluZVN0eWxlRm9yTWFya2VyVHlwZShtYXJrZXIudHlwZSgpKSk7CiB9
CiAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250
ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBEb2N1bWVudE1hcmtl
ciYgbWFya2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCkBAIC0xMDUz
LDggKzEwNTMsOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdy
YXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgaW50IGRlbHRhWSA9IHJl
bmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlv
bkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9w
KCk7CiAgICAgaW50IHNlbEhlaWdodCA9IHNlbGVjdGlvbkhlaWdodCgpOwogCi0gICAgaW50IHNQ
b3MgPSBtYXgobWFya2VyLnN0YXJ0T2Zmc2V0IC0gbV9zdGFydCwgKHVuc2lnbmVkKTApOwotICAg
IGludCBlUG9zID0gbWluKG1hcmtlci5lbmRPZmZzZXQgLSBtX3N0YXJ0LCAodW5zaWduZWQpbV9s
ZW4pOyAgICAKKyAgICBpbnQgc1BvcyA9IG1heChtYXJrZXIuc3RhcnRPZmZzZXQoKSAtIG1fc3Rh
cnQsICh1bnNpZ25lZCkwKTsKKyAgICBpbnQgZVBvcyA9IG1pbihtYXJrZXIuZW5kT2Zmc2V0KCkg
LSBtX3N0YXJ0LCAodW5zaWduZWQpbV9sZW4pOyAgICAKICAgICBUZXh0UnVuIHJ1bih0ZXh0UmVu
ZGVyZXIoKS0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRl
cmVyKCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCksIG1fZXhwYW5zaW9uLCBleHBhbnNpb25CZWhh
dmlvcigpLCBkaXJlY3Rpb24oKSwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRl
cmVkKCkpOwogICAgIAogICAgIC8vIEFsd2F5cyBjb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBh
c3NvY2lhdGVkIHdpdGggdGhpcyBtYXJrZXIuIFRoZSBjb21wdXRlZCByZWN0IGlzIGluIGFic29s
dXRlIGNvb3JkaW5hdGVzLgpAQCAtMTA2NCw3ICsxMDY0LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94
OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBv
aW50JgogICAgIAogICAgIC8vIE9wdGlvbmFsbHkgaGlnaGxpZ2h0IHRoZSB0ZXh0CiAgICAgaWYg
KHJlbmRlcmVyKCktPmZyYW1lKCktPmVkaXRvcigpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkKCkpIHsKLSAgICAgICAgQ29sb3IgY29sb3IgPSBtYXJrZXIuYWN0aXZlTWF0Y2ggPwor
ICAgICAgICBDb2xvciBjb2xvciA9IG1hcmtlci5hY3RpdmVNYXRjaCgpID8KICAgICAgICAgICAg
IHJlbmRlcmVyKCktPnRoZW1lKCktPnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yKCkgOgogICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+cGxhdGZvcm1JbmFjdGl2
ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKnB0KTsKQEAgLTEwODAsOCArMTA4MCw4IEBAIHZvaWQgSW5saW5l
VGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihjb25zdCBEb2N1bWVudE1h
cmtlciYgbWFya2VyCiAgICAgaW50IHkgPSBzZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQgaCA9IHNl
bGVjdGlvbkhlaWdodCgpOwogICAgIAotICAgIGludCBzUG9zID0gbWF4KG1hcmtlci5zdGFydE9m
ZnNldCAtIG1fc3RhcnQsICh1bnNpZ25lZCkwKTsKLSAgICBpbnQgZVBvcyA9IG1pbihtYXJrZXIu
ZW5kT2Zmc2V0IC0gbV9zdGFydCwgKHVuc2lnbmVkKW1fbGVuKTsgICAgCisgICAgaW50IHNQb3Mg
PSBtYXgobWFya2VyLnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWduZWQpMCk7CisgICAg
aW50IGVQb3MgPSBtaW4obWFya2VyLmVuZE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKW1f
bGVuKTsgICAgCiAgICAgVGV4dFJ1biBydW4odGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hhcmFj
dGVycygpICsgbV9zdGFydCwgbV9sZW4sIHRleHRSZW5kZXJlcigpLT5hbGxvd1RhYnMoKSwgdGV4
dFBvcygpLCBtX2V4cGFuc2lvbiwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0aW9uKCksIG1f
ZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKTsKICAgICBJbnRQb2ludCBz
dGFydFBvaW50ID0gSW50UG9pbnQobV94LCB5KTsKICAgICAKQEAgLTExMDUsNyArMTEwNSw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0
KiBwdCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1h
cmtlciA9ICptYXJrZXJJdDsKICAgICAgICAgCiAgICAgICAgIC8vIFBhaW50IGVpdGhlciB0aGUg
YmFja2dyb3VuZCBtYXJrZXJzIG9yIHRoZSBmb3JlZ3JvdW5kIG1hcmtlcnMsIGJ1dCBub3QgYm90
aAotICAgICAgICBzd2l0Y2ggKG1hcmtlci50eXBlKSB7CisgICAgICAgIHN3aXRjaCAobWFya2Vy
LnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjoKICAg
ICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgogICAgICAgICAgICAgY2Fz
ZSBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcjoKQEAgLTExMjEsMTcgKzExMjEs
MTcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0Nv
bnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQgPD0gc3RhcnQoKSkKKyAg
ICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA8PSBzdGFydCgpKQogICAgICAgICAgICAgLy8g
bWFya2VyIGlzIGNvbXBsZXRlbHkgYmVmb3JlIHRoaXMgcnVuLiAgVGhpcyBtaWdodCBiZSBhIG1h
cmtlciB0aGF0IHNpdHMgYmVmb3JlIHRoZQogICAgICAgICAgICAgLy8gZmlyc3QgcnVuIHdlIGRy
YXcsIG9yIG1hcmtlcnMgdGhhdCB3ZXJlIHdpdGhpbiBydW5zIHdlIHNraXBwZWQgZHVlIHRvIHRy
dW5jYXRpb24uCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIGlmICht
YXJrZXIuc3RhcnRPZmZzZXQgPiBlbmQoKSkKKyAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNl
dCgpID4gZW5kKCkpCiAgICAgICAgICAgICAvLyBtYXJrZXIgaXMgY29tcGxldGVseSBhZnRlciB0
aGlzIHJ1biwgYmFpbC4gIEEgbGF0ZXIgcnVuIHdpbGwgcGFpbnQgaXQuCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgICAgIC8vIG1hcmtlciBpbnRlcnNlY3RzIHRoaXMgcnVuLiAg
UGFpbnQgaXQuCi0gICAgICAgIHN3aXRjaCAobWFya2VyLnR5cGUpIHsKKyAgICAgICAgc3dpdGNo
IChtYXJrZXIudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpTcGVs
bGluZzoKICAgICAgICAgICAgICAgICBwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKHB0LCBi
b3hPcmlnaW4sIG1hcmtlciwgc3R5bGUsIGZvbnQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
Rmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dC
b3guY3BwCmluZGV4IDFkMDA0M2JiZTU1ZWNiNmM2YTQ4ZDkxMDIyNzc0YWVhZGY4OGZhMjcuLmEw
MDI4NjcxMDEyZWNiMmI5ZjI5ZmI1MjFmY2QyNGRmOWM4YjE1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcApAQCAtOTksNyArOTks
NyBAQCB2b2lkIFNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0Rm9y
UmVuZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4dAogICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtl
ciYgbWFya2VyID0gKm1hcmtlckl0OwogCiAgICAgICAgIC8vIFNWRyBpcyBvbmx5IGludGVyZXNz
dGVkIGluIHRoZSBUZXh0TWF0Y2ggbWFya2VyLCBmb3Igbm93LgotICAgICAgICBpZiAobWFya2Vy
LnR5cGUgIT0gRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCkKKyAgICAgICAgaWYgKG1hcmtlci50
eXBlKCkgIT0gRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIEZsb2F0UmVjdCBtYXJrZXJSZWN0OwpAQCAtMTA5LDggKzEwOSw4IEBAIHZv
aWQgU1ZHSW5saW5lRmxvd0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJl
cihSZW5kZXJTVkdJbmxpbmVUZXh0CiAKICAgICAgICAgICAgIFNWR0lubGluZVRleHRCb3gqIHRl
eHRCb3ggPSBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oYm94KTsKIAotICAgICAgICAg
ICAgaW50IG1hcmtlclN0YXJ0UG9zaXRpb24gPSBtYXg8aW50PihtYXJrZXIuc3RhcnRPZmZzZXQg
LSB0ZXh0Qm94LT5zdGFydCgpLCAwKTsKLSAgICAgICAgICAgIGludCBtYXJrZXJFbmRQb3NpdGlv
biA9IG1pbjxpbnQ+KG1hcmtlci5lbmRPZmZzZXQgLSB0ZXh0Qm94LT5zdGFydCgpLCB0ZXh0Qm94
LT5sZW4oKSk7CisgICAgICAgICAgICBpbnQgbWFya2VyU3RhcnRQb3NpdGlvbiA9IG1heDxpbnQ+
KG1hcmtlci5zdGFydE9mZnNldCgpIC0gdGV4dEJveC0+c3RhcnQoKSwgMCk7CisgICAgICAgICAg
ICBpbnQgbWFya2VyRW5kUG9zaXRpb24gPSBtaW48aW50PihtYXJrZXIuZW5kT2Zmc2V0KCkgLSB0
ZXh0Qm94LT5zdGFydCgpLCB0ZXh0Qm94LT5sZW4oKSk7CiAKICAgICAgICAgICAgIGlmIChtYXJr
ZXJTdGFydFBvc2l0aW9uID49IG1hcmtlckVuZFBvc2l0aW9uKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0ZTA4YzE5YWRkMmU5ZjFhZDNh
MmRhZjNkZWE3OTdkNDdlYjc3ZWIzLi43OTM3Y2E3MTQ5ZDAxZGYxMzVmY2M2ZmUwN2Y4OTE0MTA3
YTBiMjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEx
LTA1LTE2ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtSZWZhY3RvcmluZ10gTWVtYmVy
IHZhcmlhYmxlcyBvZiBEb2N1bWVudE1hcmtlciBzaG91bGQgYmUgZW5jYXBzdWxhdGVkLiAgICAg
ICAgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Njgx
NAorCisgICAgICAgIE1vdmVkIGFkZE1hcmtlcigpIGltcGxlbWVudGF0aW9uIHRvCisgICAgICAg
IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkVGV4dE1hdGNoTWFya2VyKCku
CisgICAgICAgIAorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OmFkZE1hcmtlcik6CisKIDIwMTEtMDUtMTMgIFRhbyBCYWkgIDxt
aWNoYWVsYmFpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNo
ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCA5
ZWI2ZThlNDBmYjZjZTRjZjAzYTY0NTE4NjE2OTc0Y2EzZDZlYWVhLi5iNDIzZjRkZmNlMTU2NDdm
MDUxODg4NGE4YWFkMTdmYzBkOTU3M2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5jcHAKQEAgLTIyNDAsMzcgKzIyNDAsNyBAQCB2b2lkIFdlYkZyYW1lSW1w
bDo6aW52YWxpZGF0ZUFyZWEoQXJlYVRvSW52YWxpZGF0ZSBhcmVhKQogCiB2b2lkIFdlYkZyYW1l
SW1wbDo6YWRkTWFya2VyKFJhbmdlKiByYW5nZSwgYm9vbCBhY3RpdmVNYXRjaCkKIHsKLSAgICAv
LyBVc2UgYSBUZXh0SXRlcmF0b3IgdG8gdmlzaXQgdGhlIHBvdGVudGlhbGx5IG11bHRpcGxlIG5v
ZGVzIHRoZSByYW5nZQotICAgIC8vIGNvdmVycy4KLSAgICBUZXh0SXRlcmF0b3IgbWFya2VkVGV4
dChyYW5nZSk7Ci0gICAgZm9yICg7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2
YW5jZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5y
YW5nZSgpOwotICAgICAgICBpbnQgZXhjZXB0aW9uID0gMDsKLQotICAgICAgICBEb2N1bWVudE1h
cmtlciBtYXJrZXIgPSB7Ci0gICAgICAgICAgICBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoLAot
ICAgICAgICAgICAgdGV4dFBpZWNlLT5zdGFydE9mZnNldChleGNlcHRpb24pLAotICAgICAgICAg
ICAgdGV4dFBpZWNlLT5lbmRPZmZzZXQoZXhjZXB0aW9uKSwKLSAgICAgICAgICAgICIiLAotICAg
ICAgICAgICAgYWN0aXZlTWF0Y2gKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAobWFya2VyLmVu
ZE9mZnNldCA+IG1hcmtlci5zdGFydE9mZnNldCkgewotICAgICAgICAgICAgLy8gRmluZCB0aGUg
bm9kZSB0byBhZGQgYSBtYXJrZXIgdG8gYW5kIGFkZCBpdC4KLSAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSB0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICBm
cmFtZSgpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihub2RlLCBtYXJrZXIpOwot
Ci0gICAgICAgICAgICAvLyBSZW5kZXJlZCByZWN0cyBmb3IgbWFya2VycyBpbiBXZWJLaXQgYXJl
IG5vdCBwb3B1bGF0ZWQgdW50aWwgZWFjaCB0aW1lCi0gICAgICAgICAgICAvLyB0aGUgbWFya2Vy
cyBhcmUgcGFpbnRlZC4gSG93ZXZlciwgd2UgbmVlZCBpdCB0byBoYXBwZW4gc29vbmVyLCBiZWNh
dXNlCi0gICAgICAgICAgICAvLyB0aGUgd2hvbGUgcHVycG9zZSBvZiB0aWNrbWFya3Mgb24gdGhl
IHNjcm9sbGJhciBpcyB0byBzaG93IHdoZXJlCi0gICAgICAgICAgICAvLyBtYXRjaGVzIG9mZi1z
Y3JlZW4gYXJlICh0aGF0IGhhdmVuJ3QgYmVlbiBwYWludGVkIHlldCkuCi0gICAgICAgICAgICBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBmcmFtZSgpLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCktPm1hcmtlcnNGb3JOb2RlKG5vZGUpOwotICAgICAgICAgICAgZnJhbWUoKS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5zZXRSZW5kZXJlZFJlY3RGb3JNYXJrZXIoCi0gICAgICAgICAgICAg
ICAgdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLAotICAgICAgICAgICAgICAg
IG1hcmtlcnNbbWFya2Vycy5zaXplKCkgLSAxXSwKLSAgICAgICAgICAgICAgICByYW5nZS0+Ym91
bmRpbmdCb3goKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5hZGRUZXh0TWF0Y2hNYXJrZXIocmFuZ2UsIGFjdGl2ZU1hdGNoKTsKIH0KIAog
dm9pZCBXZWJGcmFtZUltcGw6OnNldE1hcmtlckFjdGl2ZShSYW5nZSogcmFuZ2UsIGJvb2wgYWN0
aXZlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93624</attachid>
            <date>2011-05-16 01:45:19 -0700</date>
            <delta_ts>2011-05-17 20:22:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56814-20110516174516.patch</filename>
            <type>text/plain</type>
            <size>39450</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY1NDYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkMzcwMTJhNDRlMjQ3YzEz
OTkyNmMyMzM0NDFiZmFkZjc0NTQ0ZDM5Li45MjExNDY3MGZjN2U1MGE4NjVlMzA5YzIyZGU2NmQ3
NGQ3ZDk3YzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjkgQEAKKzIwMTEtMDUtMTYgIE1PUklU
QSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1JlZmFjdG9yaW5nXSBNZW1iZXIgdmFyaWFibGVzIG9m
IERvY3VtZW50TWFya2VyIHNob3VsZCBiZSBlbmNhcHN1bGF0ZWQuICAgICAgICAKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2ODE0CisKKyAgICAgICAg
LSBNb3ZlZCBEb2N1bWVudE1hcmtlcidzIG1lbWJlciB2YXJpYWJsZXMgdG8gcHJpdmF0ZSBhbmQg
YWRkZWQgZ2V0dGVycyBmb3IgdGhlbS4KKyAgICAgICAgLSBBZGRlZCBEb2N1bWVudE1hcmtlciBz
ZXR0ZXJzIGFuZCBjb25zdHJ1Y3RvcnMsIHdoaWNoIGNvbnRhaW4gYXNzZXJ0aW9ucyBhZ2FpbnN0
IG1fdHlwZSB2YWx1ZXMKKyAgICAgICAgICBiZWNhdXNlIGRlc2NyaXB0aW9uIGFuZCBhY3RpdmVN
YXRjaCBhcmUgdXNlZCB3aXRoIHNwZWNpZmljIHR5cGUgb2YgTWFya2VyVHlwZS4KKyAgICAgICAg
LSBNb3ZlZCBjaHJvbWl1bSdzIFdlYktpdDo6V2ViRnJhbWVJbXBsOjphZGRNYXJrZXIoKSB0byBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIgYmVjYXVzZQorICAgICAgICAgIGl0IGFjY2Vzc2VzIERv
Y3VtZW50TWFya2VyIGludGVybmFscy4KKyAgICAgICAgLSBNb3ZlZCBhIHZlcnNpb24gb2YgRE1D
OjphZGRNYXJrZXIoKSB0byBwcml2YXRlIGFuZCBhZGQgYWx0ZXJuYXRpdmVzIHRoYXQgaGlkZQor
ICAgICAgICAgIGludGVybmFscyBvZiBEb2N1bWVudE1hcmtlci4gKFRoZSBpbnRlcm5hbCB3aWxs
IGJlIHJlbmV3ZWQgYnkgdXBjb21pbmcgY2hhbmdlLikKKyAgICAgICAgCisgICAgICAgICogZG9t
L0RvY3VtZW50TWFya2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6c3RhcnRPZmZzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OmVuZE9mZnNldCk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudE1hcmtlcjo6ZGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXI6Omhhc0Rlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyOjphY3RpdmVNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6
Y2xlYXJEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6c2V0
U3RhcnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OnNldEVuZE9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OnNoaWZ0T2Zmc2V0cyk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudE1hcmtlcjo6c2V0QWN0aXZlTWF0Y2gpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjphZGRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbmRlcmVkUmVj
dHNGb3JNYXJrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6cmVtb3ZlTWFya2Vyc0Zyb21MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFzTWFya2Vycyk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJ
bnRlcnNlY3RpbmdSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnNob3dNYXJrZXJzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmg6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbk5vZGVQcmVz
ZXJ2aW5nTWFya2Vycyk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om9yaWdpbmFs
U3RyaW5nRm9yQXV0b2NvcnJlY3Rpb25BdEJlZ2lubmluZ09mU2VsZWN0aW9uKToKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlv
blN0YXJ0SGFzTWFya2VyRm9yKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgICogZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG91bGRTdGFydFRpbWVyRm9yKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVz
dWx0OjpzcGVsbGluZ1Rvb2xUaXApOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6
cmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdyYW1tYXJN
YXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hN
YXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JS
ZXBsYWNlbWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWlu
dERvY3VtZW50TWFya2Vycyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0
TWF0Y2hNYXJrZXJSZWN0Rm9yUmVuZGVyZXIpOgorCiAyMDExLTA1LTE2ICBOaWtvbGFzIFppbW1l
cm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsg
U2NodWx6ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgKaW5kZXggYzg3NzhkMzQ2N2Rl
NzYxZWQ2ZWQ5YjJhZGQ0ODg3M2NiOGQ5YjJkYS4uMDc3YWM2ZmI3Yjk3ZWU2OTE3ZWQwYWU1MTMz
ZTQ3MzNkZTE1MzkwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgKQEAgLTg0LDI0
ICs4NCw4MCBAQCBzdHJ1Y3QgRG9jdW1lbnRNYXJrZXIgewogICAgICAgICB7CiAgICAgICAgIH0K
ICAgICB9OwotICAgIAotICAgIE1hcmtlclR5cGUgdHlwZTsKLSAgICB1bnNpZ25lZCBzdGFydE9m
ZnNldDsKLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQ7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uOwot
ICAgIGJvb2wgYWN0aXZlTWF0Y2g7CisKKworICAgIERvY3VtZW50TWFya2VyKCk7CisgICAgRG9j
dW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCk7CisgICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7Cisg
ICAgRG9jdW1lbnRNYXJrZXIodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCwgYm9vbCBhY3RpdmVNYXRjaCk7CisKKyAgICBNYXJrZXJUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhcnRPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX2VuZE9mZnNldDsgfQorICAgIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24oKSBjb25zdCB7
IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CisgICAgYm9vbCBoYXNEZXNjcmlwdGlvbigpIGNvbnN0
IHsgcmV0dXJuICFtX2Rlc2NyaXB0aW9uLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgYWN0aXZlTWF0
Y2goKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZU1hdGNoOyB9CisKKyAgICB2b2lkIHNldEFjdGl2
ZU1hdGNoKGJvb2wpOworICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbigpIHsgbV9kZXNjcmlwdGlv
biA9IFN0cmluZygpOyB9CisKKyAgICAvLyBPZmZzZXQgbW9kaWZpY2F0aW9ucyBhcmUgZG9uZSBi
eSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuCisgICAgLy8gT3RoZXIgY2xhc3NlcyBzaG91bGQg
bm90IGNhbGwgZm9sbG93aW5nIHNldHRlcnMuCisgICAgdm9pZCBzZXRTdGFydE9mZnNldCh1bnNp
Z25lZCBvZmZzZXQpIHsgbV9zdGFydE9mZnNldCA9IG9mZnNldDsgfQorICAgIHZvaWQgc2V0RW5k
T2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgeyBtX2VuZE9mZnNldCA9IG9mZnNldDsgfQorICAgIHZv
aWQgc2hpZnRPZmZzZXRzKGludCBkZWx0YSk7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
RG9jdW1lbnRNYXJrZXImIG8pIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdHlwZSA9PSBv
LnR5cGUgJiYgc3RhcnRPZmZzZXQgPT0gby5zdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPT0gby5l
bmRPZmZzZXQ7CisgICAgICAgIHJldHVybiB0eXBlKCkgPT0gby50eXBlKCkgJiYgc3RhcnRPZmZz
ZXQoKSA9PSBvLnN0YXJ0T2Zmc2V0KCkgJiYgZW5kT2Zmc2V0KCkgPT0gby5lbmRPZmZzZXQoKTsK
ICAgICB9CiAKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRG9jdW1lbnRNYXJrZXImIG8pIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKICAgICB9CisKK3ByaXZh
dGU6ICAgIAorICAgIE1hcmtlclR5cGUgbV90eXBlOworICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZz
ZXQ7CisgICAgdW5zaWduZWQgbV9lbmRPZmZzZXQ7CisgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247
CisgICAgYm9vbCBtX2FjdGl2ZU1hdGNoOwogfTsKIAoraW5saW5lIERvY3VtZW50TWFya2VyOjpE
b2N1bWVudE1hcmtlcigpIAorICAgIDogbV90eXBlKFNwZWxsaW5nKSwgbV9zdGFydE9mZnNldCgw
KSwgbV9lbmRPZmZzZXQoMCksIG1fYWN0aXZlTWF0Y2goZmFsc2UpCit7Cit9CisKK2lubGluZSBE
b2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSB0eXBlLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgIDogbV90eXBlKHR5cGUpLCBtX3N0
YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KSwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KSwgbV9hY3RpdmVN
YXRjaChmYWxzZSkKK3sKK30KKworaW5saW5lIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtl
cihNYXJrZXJUeXBlIHR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pCisgICAgOiBtX3R5cGUodHlwZSksIG1fc3Rh
cnRPZmZzZXQoc3RhcnRPZmZzZXQpLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpLCBtX2Rlc2NyaXB0
aW9uKGRlc2NyaXB0aW9uKSwgbV9hY3RpdmVNYXRjaChmYWxzZSkKK3sKKyAgICBBU1NFUlQodHlw
ZSA9PSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciB8fCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJl
Y3RlZCk7Cit9CisKK2lubGluZSBEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJrZXIodW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCBhY3RpdmVNYXRjaCkKKyAg
ICA6IG1fdHlwZShEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKSwgbV9zdGFydE9mZnNldChzdGFy
dE9mZnNldCksIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCksIG1fYWN0aXZlTWF0Y2goYWN0aXZlTWF0
Y2gpCit7Cit9CisKK2lubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpzaGlmdE9mZnNldHMoaW50
IGRlbHRhKQoreworICAgIG1fc3RhcnRPZmZzZXQgKz0gZGVsdGE7CisgICAgbV9lbmRPZmZzZXQg
Kz0gIGRlbHRhOworfQorCitpbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2V0QWN0aXZlTWF0
Y2goYm9vbCBhY3RpdmUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6
VGV4dE1hdGNoKTsKKyAgICBtX2FjdGl2ZU1hdGNoID0gYWN0aXZlOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBEb2N1bWVudE1hcmtlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IDc0ZDcyN2RmOGQ2
NTA3YjNmYzVjNDg3ZjMyMzBiN2ZkNGRhMzQyMTAuLjQ1OTg1MGI4OWE1YmY1OWEwZTc1ZDczNDc4
MjViYjVlMmJhNjQzMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwCkBAIC01NCwxNCArNTQsNTAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OmRldGFjaCgpCiAgICAgbV9tYXJrZXJzLmNsZWFyKCk7CiB9CiAKLXZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSB0eXBlLCBTdHJpbmcgZGVzY3JpcHRpb24pCit2b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbikKIHsKICAgICAvLyBV
c2UgYSBUZXh0SXRlcmF0b3IgdG8gdmlzaXQgdGhlIHBvdGVudGlhbGx5IG11bHRpcGxlIG5vZGVz
IHRoZSByYW5nZSBjb3ZlcnMuCiAgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5n
ZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAg
IFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwogICAgICAgICBp
bnQgZXhjZXB0aW9uID0gMDsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0ge3R5cGUs
IHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQo
ZXhjZXB0aW9uKSwgZGVzY3JpcHRpb24sIGZhbHNlfTsKLSAgICAgICAgYWRkTWFya2VyKHRleHRQ
aWVjZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwgbWFya2VyKTsKKyAgICAgICAgYWRkTWFy
a2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwgCisgICAgICAgICAgICAg
ICAgICBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlv
biksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksIGRlc2NyaXB0aW9uKSk7CisgICAg
fQorfQorCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJhbmdlKiBy
YW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKK3sKKyAgICAvLyBVc2UgYSBU
ZXh0SXRlcmF0b3IgdG8gdmlzaXQgdGhlIHBvdGVudGlhbGx5IG11bHRpcGxlIG5vZGVzIHRoZSBy
YW5nZSBjb3ZlcnMuCisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5nZSk7ICFt
YXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgICAgIFJlZlB0
cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOworICAgICAgICBpbnQgZXhj
ZXB0aW9uID0gMDsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIo
ZXhjZXB0aW9uKSwgCisgICAgICAgICAgICAgICAgICBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0
UGllY2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbiksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KGV4Y2Vw
dGlvbikpKTsKKyAgICB9CisKK30KKworCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
YWRkVGV4dE1hdGNoTWFya2VyKFJhbmdlKiByYW5nZSwgYm9vbCBhY3RpdmVNYXRjaCkKK3sKKyAg
ICAvLyBVc2UgYSBUZXh0SXRlcmF0b3IgdG8gdmlzaXQgdGhlIHBvdGVudGlhbGx5IG11bHRpcGxl
IG5vZGVzIHRoZSByYW5nZSBjb3ZlcnMuCisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4
dChyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7Cisg
ICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOworICAg
ICAgICBpbnQgZXhjZXB0aW9uID0gMDsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSB0
ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbik7CisgICAgICAgIHVuc2lnbmVkIGVuZE9m
ZnNldCA9IHRleHRQaWVjZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbik7CisgICAgICAgIGFkZE1hcmtl
cih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksIERvY3VtZW50TWFya2VyKGFj
dGl2ZU1hdGNoLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KSk7CisgICAgICAgIGlmIChlbmRPZmZz
ZXQgPiBzdGFydE9mZnNldCkgeworICAgICAgICAgICAgLy8gUmVuZGVyZWQgcmVjdHMgZm9yIG1h
cmtlcnMgaW4gV2ViS2l0IGFyZSBub3QgcG9wdWxhdGVkIHVudGlsIGVhY2ggdGltZQorICAgICAg
ICAgICAgLy8gdGhlIG1hcmtlcnMgYXJlIHBhaW50ZWQuIEhvd2V2ZXIsIHdlIG5lZWQgaXQgdG8g
aGFwcGVuIHNvb25lciwgYmVjYXVzZQorICAgICAgICAgICAgLy8gdGhlIHdob2xlIHB1cnBvc2Ug
b2YgdGlja21hcmtzIG9uIHRoZSBzY3JvbGxiYXIgaXMgdG8gc2hvdyB3aGVyZQorICAgICAgICAg
ICAgLy8gbWF0Y2hlcyBvZmYtc2NyZWVuIGFyZSAodGhhdCBoYXZlbid0IGJlZW4gcGFpbnRlZCB5
ZXQpLgorICAgICAgICAgICAgTm9kZSogbm9kZSA9IHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIo
ZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9
IG1hcmtlcnNGb3JOb2RlKG5vZGUpOworICAgICAgICAgICAgc2V0UmVuZGVyZWRSZWN0Rm9yTWFy
a2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzW21hcmtlcnMuc2l6ZSgpIC0gMV0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPmJvdW5kaW5nQm94KCkpOwor
ICAgICAgICB9CiAgICAgfQogfQogCkBAIC04NCwxMSArMTIwLDExIEBAIHZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlCiAKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9k
ZSogbm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hcmtlcikgCiB7Ci0gICAgQVNTRVJU
KG5ld01hcmtlci5lbmRPZmZzZXQgPj0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KTsKLSAgICBpZiAo
bmV3TWFya2VyLmVuZE9mZnNldCA9PSBuZXdNYXJrZXIuc3RhcnRPZmZzZXQpCisgICAgQVNTRVJU
KG5ld01hcmtlci5lbmRPZmZzZXQoKSA+PSBuZXdNYXJrZXIuc3RhcnRPZmZzZXQoKSk7CisgICAg
aWYgKG5ld01hcmtlci5lbmRPZmZzZXQoKSA9PSBuZXdNYXJrZXIuc3RhcnRPZmZzZXQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuYWRkKG5l
d01hcmtlci50eXBlKTsKKyAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5hZGQobmV3
TWFya2VyLnR5cGUoKSk7CiAKICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChu
b2RlKTsKIApAQCAtMTA1LDEwICsxNDEsMTAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmFkZE1hcmtlcihOb2RlKiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWEKICAg
ICAgICAgLy8gKHRoZXJlIGlzIGF0IG1vc3Qgb25lKSwgcmVtb3ZlIGl0IGFuZCBhZGp1c3QgdGhl
IG5ldyBtYXJrZXIncyBzdGFydCBvZmZzZXQgdG8gZW5jb21wYXNzIGl0LgogICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbnVtTWFya2VyczsgKytpKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtl
ciBtYXJrZXIgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZz
ZXQgPiB0b0luc2VydC5zdGFydE9mZnNldCkKKyAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRP
ZmZzZXQoKSA+IHRvSW5zZXJ0LnN0YXJ0T2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gdG9JbnNlcnQudHlwZSAmJiBtYXJrZXIu
ZW5kT2Zmc2V0ID49IHRvSW5zZXJ0LnN0YXJ0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgdG9J
bnNlcnQuc3RhcnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZzZXQ7CisgICAgICAgICAgICBpZiAo
bWFya2VyLnR5cGUoKSA9PSB0b0luc2VydC50eXBlKCkgJiYgbWFya2VyLmVuZE9mZnNldCgpID49
IHRvSW5zZXJ0LnN0YXJ0T2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICB0b0luc2VydC5zZXRT
dGFydE9mZnNldChtYXJrZXIuc3RhcnRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgbGlzdC0+
cmVtb3ZlKGkpOwogICAgICAgICAgICAgICAgIG51bU1hcmtlcnMtLTsKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTEyMCwxMiArMTU2LDEyIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjphZGRNYXJrZXIoTm9kZSogbm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hCiAg
ICAgICAgIC8vIGFkanVzdGluZyB0aGUgbmV3IG1hcmtlcidzIGVuZCBvZmZzZXQgdG8gY292ZXIg
dGhlbSBpZiBuZWNlc3NhcnkuCiAgICAgICAgIHdoaWxlIChqIDwgbnVtTWFya2VycykgewogICAg
ICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+YXQoaik7Ci0gICAgICAgICAg
ICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID4gdG9JbnNlcnQuZW5kT2Zmc2V0KQorICAgICAgICAg
ICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID4gdG9JbnNlcnQuZW5kT2Zmc2V0KCkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gdG9JbnNl
cnQudHlwZSkgeworICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlKCkgPT0gdG9JbnNlcnQudHlw
ZSgpKSB7CiAgICAgICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKGopOwotICAgICAgICAgICAgICAg
IGlmICh0b0luc2VydC5lbmRPZmZzZXQgPD0gbWFya2VyLmVuZE9mZnNldCkgewotICAgICAgICAg
ICAgICAgICAgICB0b0luc2VydC5lbmRPZmZzZXQgPSBtYXJrZXIuZW5kT2Zmc2V0OworICAgICAg
ICAgICAgICAgIGlmICh0b0luc2VydC5lbmRPZmZzZXQoKSA8PSBtYXJrZXIuZW5kT2Zmc2V0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgdG9JbnNlcnQuc2V0RW5kT2Zmc2V0KG1hcmtlci5lbmRP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBudW1NYXJrZXJzLS07CkBAIC0xNjIsMjEgKzE5OCwyMCBAQCB2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSogc3JjTm9kZSwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsCiAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxpc3Qt
PmF0KGkpOwogCiAgICAgICAgIC8vIHN0b3AgaWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBzcGVjaWZp
ZWQgcmFuZ2UKLSAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCA+IGVuZE9mZnNldCkKKyAg
ICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID4gZW5kT2Zmc2V0KQogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgLy8gc2tpcCBtYXJrZXIgdGhhdCBpcyBiZWZvcmUgdGhlIHNwZWNp
ZmllZCByYW5nZSBvciBpcyB0aGUgd3JvbmcgdHlwZQotICAgICAgICBpZiAobWFya2VyLmVuZE9m
ZnNldCA8IHN0YXJ0T2Zmc2V0KQorICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDwgc3Rh
cnRPZmZzZXQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBwaW4gdGhlIG1h
cmtlciB0byB0aGUgc3BlY2lmaWVkIHJhbmdlIGFuZCBhcHBseSB0aGUgc2hpZnQgZGVsdGEKICAg
ICAgICAgZG9jRGlydHkgPSB0cnVlOwotICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0IDwg
c3RhcnRPZmZzZXQpCi0gICAgICAgICAgICBtYXJrZXIuc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNl
dDsKLSAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQgPiBlbmRPZmZzZXQpCi0gICAgICAgICAg
ICBtYXJrZXIuZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwotICAgICAgICBtYXJrZXIuc3RhcnRPZmZz
ZXQgKz0gZGVsdGE7Ci0gICAgICAgIG1hcmtlci5lbmRPZmZzZXQgKz0gZGVsdGE7CisgICAgICAg
IGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA8IHN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgbWFy
a2VyLnNldFN0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgaWYgKG1hcmtlci5lbmRP
ZmZzZXQoKSA+IGVuZE9mZnNldCkKKyAgICAgICAgICAgIG1hcmtlci5zZXRFbmRPZmZzZXQoZW5k
T2Zmc2V0KTsKKyAgICAgICAgbWFya2VyLnNoaWZ0T2Zmc2V0cyhkZWx0YSk7CiAKICAgICAgICAg
YWRkTWFya2VyKGRzdE5vZGUsIG1hcmtlcik7CiAgICAgfQpAQCAtMjA1LDExICsyNDAsMTEgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIGkKICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0g
bGlzdC0+YXQoaSk7CiAKICAgICAgICAgLy8gbWFya2VycyBhcmUgcmV0dXJuZWQgaW4gb3JkZXIs
IHNvIHN0b3AgaWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBzcGVjaWZpZWQgcmFuZ2UKLSAgICAgICAg
aWYgKG1hcmtlci5zdGFydE9mZnNldCA+PSBlbmRPZmZzZXQpCisgICAgICAgIGlmIChtYXJrZXIu
c3RhcnRPZmZzZXQoKSA+PSBlbmRPZmZzZXQpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICAvLyBza2lwIG1hcmtlciB0aGF0IGlzIHdyb25nIHR5cGUgb3IgYmVmb3JlIHRhcmdldAotICAg
ICAgICBpZiAobWFya2VyLmVuZE9mZnNldCA8PSBzdGFydE9mZnNldCB8fCAhbWFya2VyVHlwZXMu
Y29udGFpbnMobWFya2VyLnR5cGUpKSB7CisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkg
PD0gc3RhcnRPZmZzZXQgfHwgIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBlKCkpKSB7
CiAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAt
MjI1LDE2ICsyNjAsMTYgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1h
cmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIC8vIGFkZCBlaXRoZXIgb2YgdGhlIHJlc3VsdGluZyBzbGljZXMg
dGhhdCBhcmUgbGVmdCBhZnRlciByZW1vdmluZyB0YXJnZXQKLSAgICAgICAgaWYgKHN0YXJ0T2Zm
c2V0ID4gbWFya2VyLnN0YXJ0T2Zmc2V0KSB7CisgICAgICAgIGlmIChzdGFydE9mZnNldCA+IG1h
cmtlci5zdGFydE9mZnNldCgpKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlciBuZXdMZWZ0
ID0gbWFya2VyOwotICAgICAgICAgICAgbmV3TGVmdC5lbmRPZmZzZXQgPSBzdGFydE9mZnNldDsK
KyAgICAgICAgICAgIG5ld0xlZnQuc2V0RW5kT2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKICAgICAgICAg
ICAgIGxpc3QtPmluc2VydChpLCBSZW5kZXJlZERvY3VtZW50TWFya2VyKG5ld0xlZnQpKTsKICAg
ICAgICAgICAgIC8vIGkgbm93IHBvaW50cyB0byB0aGUgbmV3bHktaW5zZXJ0ZWQgbm9kZSwgYnV0
IHdlIHdhbnQgdG8gc2tpcCB0aGF0IG9uZQogICAgICAgICAgICAgaSsrOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0ID4gZW5kT2Zmc2V0KSB7CisgICAgICAgIGlmICht
YXJrZXIuZW5kT2Zmc2V0KCkgPiBlbmRPZmZzZXQpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFy
a2VyIG5ld1JpZ2h0ID0gbWFya2VyOwotICAgICAgICAgICAgbmV3UmlnaHQuc3RhcnRPZmZzZXQg
PSBlbmRPZmZzZXQ7CisgICAgICAgICAgICBuZXdSaWdodC5zZXRTdGFydE9mZnNldChlbmRPZmZz
ZXQpOwogICAgICAgICAgICAgbGlzdC0+aW5zZXJ0KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIo
bmV3UmlnaHQpKTsKICAgICAgICAgICAgIC8vIGkgbm93IHBvaW50cyB0byB0aGUgbmV3bHktaW5z
ZXJ0ZWQgbm9kZSwgYnV0IHdlIHdhbnQgdG8gc2tpcCB0aGF0IG9uZQogICAgICAgICAgICAgaSsr
OwpAQCAtMjcwLDcgKzMwNSw3IEBAIERvY3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBJbnRQb2ludCYKICAgICAgICAgICAg
IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsK
IAogICAgICAgICAgICAgLy8gc2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlCi0gICAgICAg
ICAgICBpZiAobWFya2VyLnR5cGUgIT0gbWFya2VyVHlwZSkKKyAgICAgICAgICAgIGlmIChtYXJr
ZXIudHlwZSgpICE9IG1hcmtlclR5cGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgICAgIGlmIChtYXJrZXIuY29udGFpbnMocG9pbnQpKQpAQCAtMzExLDExICszNDYsMTEg
QEAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtl
cnNJblJhbmdlKFJhbmdlKiByYW5nZSwgRG8KICAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2Vy
PiBtYXJrZXJzID0gbWFya2Vyc0Zvck5vZGUobm9kZSk7CiAgICAgICAgIFZlY3RvcjxEb2N1bWVu
dE1hcmtlcj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcmtlcnMuZW5kKCk7CiAgICAgICAgIGZv
ciAoVmVjdG9yPERvY3VtZW50TWFya2VyPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXJrZXJzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5j
b250YWlucyhpdC0+dHlwZSkpCisgICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5z
KGl0LT50eXBlKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYg
KG5vZGUgPT0gc3RhcnRDb250YWluZXIgJiYgaXQtPmVuZE9mZnNldCA8PSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpKQorICAgICAgICAgICAgaWYgKG5vZGUgPT0g
c3RhcnRDb250YWluZXIgJiYgaXQtPmVuZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihyYW5nZS0+c3RhcnRPZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAobm9kZSA9PSBlbmRDb250YWluZXIgJiYgaXQtPnN0YXJ0T2Zmc2V0ID49IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS0+ZW5kT2Zmc2V0KCkpKQorICAgICAgICAgICAgaWYg
KG5vZGUgPT0gZW5kQ29udGFpbmVyICYmIGl0LT5zdGFydE9mZnNldCgpID49IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihyYW5nZS0+ZW5kT2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgZm91bmRNYXJrZXJzLmFwcGVuZCgqaXQpOwogICAgICAgICB9CkBAIC0z
NDEsNyArMzc2LDcgQEAgVmVjdG9yPEludFJlY3Q+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXIKICAgICAgICAgICAgIGNvbnN0
IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsK
IAogICAgICAgICAgICAgLy8gc2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlCi0gICAgICAg
ICAgICBpZiAobWFya2VyLnR5cGUgIT0gbWFya2VyVHlwZSkKKyAgICAgICAgICAgIGlmIChtYXJr
ZXIudHlwZSgpICE9IG1hcmtlclR5cGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgICAgIGlmICghbWFya2VyLmlzUmVuZGVyZWQoKSkKQEAgLTM5Myw3ICs0MjgsNyBAQCB2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vyc0Zyb21MaXN0KE5vZGUq
IG5vZGUsIE1hcmtlckxpc3QqIGxpcwogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2Vy
ID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAgICAgIC8vIHNraXAgbm9kZXMgdGhhdCBhcmUgbm90
IG9mIHRoZSBzcGVjaWZpZWQgdHlwZQotICAgICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5jb250
YWlucyhtYXJrZXIudHlwZSkpIHsKKyAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFp
bnMobWFya2VyLnR5cGUoKSkpIHsKICAgICAgICAgICAgICAgICArK2k7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC00NDAsNyArNDc1LDcgQEAgdm9pZCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlcyBtYXJrZXIKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxpc3Qt
PmF0KGkpOwogCiAgICAgICAgICAgICAvLyBza2lwIG5vZGVzIHRoYXQgYXJlIG5vdCBvZiB0aGUg
c3BlY2lmaWVkIHR5cGUKLSAgICAgICAgICAgIGlmIChtYXJrZXJUeXBlcy5jb250YWlucyhtYXJr
ZXIudHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXIu
dHlwZSgpKSkgewogICAgICAgICAgICAgICAgIG5vZGVOZWVkc1JlcGFpbnQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNTAxLDEwICs1MzYsOSBAQCB2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5vZGUsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbgogICAgIGJvb2wgZG9jRGlydHkgPSBmYWxzZTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSAhPSBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICBSZW5k
ZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgaWYgKG1h
cmtlci5zdGFydE9mZnNldCA+PSBzdGFydE9mZnNldCkgewotICAgICAgICAgICAgQVNTRVJUKChp
bnQpbWFya2VyLnN0YXJ0T2Zmc2V0ICsgZGVsdGEgPj0gMCk7Ci0gICAgICAgICAgICBtYXJrZXIu
c3RhcnRPZmZzZXQgKz0gZGVsdGE7Ci0gICAgICAgICAgICBtYXJrZXIuZW5kT2Zmc2V0ICs9IGRl
bHRhOworICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gc3RhcnRPZmZzZXQpIHsK
KyAgICAgICAgICAgIEFTU0VSVCgoaW50KW1hcmtlci5zdGFydE9mZnNldCgpICsgZGVsdGEgPj0g
MCk7CisgICAgICAgICAgICBtYXJrZXIuc2hpZnRPZmZzZXRzKGRlbHRhKTsKICAgICAgICAgICAg
IGRvY0RpcnR5ID0gdHJ1ZTsKIAogICAgICAgICAgICAgLy8gTWFya2VyIG1vdmVkLCBzbyBwcmV2
aW91c2x5LWNvbXB1dGVkIHJlbmRlcmVkIHJlY3RhbmdsZSBpcyBub3cgaW52YWxpZApAQCAtNTQ2
LDE0ICs1ODAsMTQgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNB
Y3RpdmUoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQKICAgICAgICAgRG9jdW1lbnRN
YXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KGkpOwogCiAgICAgICAgIC8vIE1hcmtlcnMgYXJlIHJl
dHVybmVkIGluIG9yZGVyLCBzbyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVk
IHJhbmdlLgotICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID49IGVuZE9mZnNldCkKKyAg
ICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID49IGVuZE9mZnNldCkKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIC8vIFNraXAgbWFya2VyIHRoYXQgaXMgd3JvbmcgdHlwZSBvciBi
ZWZvcmUgdGFyZ2V0LgotICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCA8IHN0YXJ0T2Zmc2V0
IHx8IG1hcmtlci50eXBlICE9IERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCisgICAgICAgIGlm
IChtYXJrZXIuZW5kT2Zmc2V0KCkgPCBzdGFydE9mZnNldCB8fCBtYXJrZXIudHlwZSgpICE9IERv
Y3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBtYXJrZXIuYWN0aXZlTWF0Y2ggPSBhY3RpdmU7CisgICAgICAgIG1hcmtlci5zZXRBY3RpdmVN
YXRjaChhY3RpdmUpOwogICAgICAgICBkb2NEaXJ0eSA9IHRydWU7CiAgICAgfQogCkBAIC01Nzgs
MTEgKzYxMiwxMSBAQCBib29sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFzTWFya2VycyhS
YW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeQogICAgICAgICBWZWN0b3I8RG9j
dW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBtYXJrZXJzRm9yTm9kZShub2RlKTsKICAgICAgICAgVmVj
dG9yPERvY3VtZW50TWFya2VyPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFya2Vycy5lbmQoKTsK
ICAgICAgICAgZm9yIChWZWN0b3I8RG9jdW1lbnRNYXJrZXI+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcmtlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoIW1h
cmtlclR5cGVzLmNvbnRhaW5zKGl0LT50eXBlKSkKKyAgICAgICAgICAgIGlmICghbWFya2VyVHlw
ZXMuY29udGFpbnMoaXQtPnR5cGUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAobm9kZSA9PSBzdGFydENvbnRhaW5lciAmJiBpdC0+ZW5kT2Zmc2V0IDw9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS0+c3RhcnRPZmZzZXQoKSkpCisgICAgICAgICAgICBp
ZiAobm9kZSA9PSBzdGFydENvbnRhaW5lciAmJiBpdC0+ZW5kT2Zmc2V0KCkgPD0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHJhbmdlLT5zdGFydE9mZnNldCgpKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGVuZENvbnRhaW5lciAmJiBpdC0+c3RhcnRP
ZmZzZXQgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLT5lbmRPZmZzZXQoKSkpCisgICAg
ICAgICAgICBpZiAobm9kZSA9PSBlbmRDb250YWluZXIgJiYgaXQtPnN0YXJ0T2Zmc2V0KCkgPj0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLT5lbmRPZmZzZXQoKSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNjEx
LDE2ICs2NDUsMTYgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzY3Jp
cHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZShSYW5nZSoKICAgICAgICAgICAgIERvY3Vt
ZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChpKTsKIAogICAgICAgICAgICAgLy8gbWFya2Vy
cyBhcmUgcmV0dXJuZWQgaW4gb3JkZXIsIHNvIHN0b3AgaWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBz
cGVjaWZpZWQgcmFuZ2UKLSAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPj0gZW5k
T2Zmc2V0KQorICAgICAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID49IGVuZE9mZnNl
dCkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgLy8gc2tpcCBtYXJrZXIg
dGhhdCBpcyB3cm9uZyB0eXBlIG9yIGJlZm9yZSB0YXJnZXQKLSAgICAgICAgICAgIGlmIChtYXJr
ZXIuZW5kT2Zmc2V0IDw9IHN0YXJ0T2Zmc2V0IHx8ICFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJr
ZXIudHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPD0gc3RhcnRP
ZmZzZXQgfHwgIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBlKCkpKSB7CiAgICAgICAg
ICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBtYXJrZXIuZGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKKyAgICAgICAgICAg
IG1hcmtlci5jbGVhckRlc2NyaXB0aW9uKCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC02MzQs
OCArNjY4LDExIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaG93TWFya2Vycygp
IGNvbnN0CiAgICAgICAgIE5vZGUqIG5vZGUgPSBub2RlSXRlcmF0b3ItPmZpcnN0LmdldCgpOwog
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9kZSk7CiAgICAgICAgIE1hcmtlckxpc3Qq
IGxpc3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJr
ZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK21hcmtlckluZGV4KQot
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgJWQ6WyVkOiVkXSglZCkiLCBsaXN0LT5hdCht
YXJrZXJJbmRleCkudHlwZSwgbGlzdC0+YXQobWFya2VySW5kZXgpLnN0YXJ0T2Zmc2V0LCBsaXN0
LT5hdChtYXJrZXJJbmRleCkuZW5kT2Zmc2V0LCBsaXN0LT5hdChtYXJrZXJJbmRleCkuYWN0aXZl
TWF0Y2gpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG1hcmtlckluZGV4ID0gMDsgbWFya2VySW5k
ZXggPCBsaXN0LT5zaXplKCk7ICsrbWFya2VySW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IERv
Y3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7CisgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiAlZDpbJWQ6JWRdKCVkKSIsIG1hcmtlci50eXBlKCksIG1hcmtl
ci5zdGFydE9mZnNldCgpLCBtYXJrZXIuZW5kT2Zmc2V0KCksIG1hcmtlci5hY3RpdmVNYXRjaCgp
KTsKKyAgICAgICAgfQorCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKaW5kZXgg
MWIxNThkOGY2M2I4NmE1OGExYzRhNGU3NzNiMjRlNWNiMGYwZDNkYi4uZWU0MTE3ZGRmMDdlZTc4
YTkxMDRiNGVjMjM1ZDgyMmRjZjM5NzhkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuaApAQCAtNDcsOCArNDcsMTAgQEAgcHVibGljOgogICAgIH5E
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIoKSB7IGRldGFjaCgpOyB9CiAKICAgICB2b2lkIGRldGFj
aCgpOwotICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGUsIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0cmluZygpKTsKLSAgICB2b2lkIGFkZE1hcmtlcihO
b2RlKiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKKyAgICB2b2lkIGFkZE1hcmtlcihSYW5nZSos
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKKyAgICB2b2lkIGFkZE1hcmtlcihSYW5nZSos
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKTsK
KyAgICB2b2lkIGFkZFRleHRNYXRjaE1hcmtlcihSYW5nZSosIGJvb2wgYWN0aXZlTWF0Y2gpOwor
CiAgICAgdm9pZCBjb3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgaW50IGxlbmd0aCwgTm9kZSogZHN0Tm9kZSwgaW50IGRlbHRhKTsKICAgICBib29sIGhhc01h
cmtlcnMoUmFuZ2UqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgPSBEb2N1bWVudE1hcmtl
cjo6QWxsTWFya2VycygpKTsKIApAQCAtNzksNiArODEsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
cHJpdmF0ZToKKyAgICB2b2lkIGFkZE1hcmtlcihOb2RlKiwgY29uc3QgRG9jdW1lbnRNYXJrZXIm
KTsKKwogICAgIHR5cGVkZWYgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IE1hcmtlckxp
c3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgTWFya2VyTGlzdCo+IE1hcmtl
ck1hcDsKICAgICBib29sIHBvc3NpYmx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcAppbmRleCBkZDUwNTFiMmQ5YTVjNGU2NmExMWZiNjZiYjIzN2E0YjY0NmY1YzQ4Li4wYWI4
M2E4NTFhN2EzMjBlOTdiMDQwMGJkZDI2ZWU2MzZiY2Y4Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMzQ4LDggKzM0OCwxMiBA
QCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdN
YXJrZXJzKFBhc3NSZWZQdHI8VGV4dD4gcAogICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFy
a2VycyA9IG1hcmtlckNvbnRyb2xsZXItPm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgbm9kZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQgKyBjb3VudCkuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpOwogICAgIHJlcGxhY2VUZXh0SW5Ob2RlKG5vZGUsIG9m
ZnNldCwgY291bnQsIHJlcGxhY2VtZW50VGV4dCk7CiAgICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbm9kZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQg
KyByZXBsYWNlbWVudFRleHQubGVuZ3RoKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bWFya2Vycy5zaXplKCk7ICsraSkKLSAgICAgICAgbWFya2VyQ29udHJvbGxlci0+YWRkTWFya2Vy
KG5ld1JhbmdlLmdldCgpLCBtYXJrZXJzW2ldLnR5cGUsIG1hcmtlcnNbaV0uZGVzY3JpcHRpb24p
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAobWFya2Vyc1tpXS5oYXNEZXNjcmlwdGlvbigpKQorICAgICAgICAgICAgbWFya2Vy
Q29udHJvbGxlci0+YWRkTWFya2VyKG5ld1JhbmdlLmdldCgpLCBtYXJrZXJzW2ldLnR5cGUoKSwg
bWFya2Vyc1tpXS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWFy
a2VyQ29udHJvbGxlci0+YWRkTWFya2VyKG5ld1JhbmdlLmdldCgpLCBtYXJrZXJzW2ldLnR5cGUo
KSk7CisgICAgfQogfQogCiBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25P
dXRzaWRlVGFiU3Bhbihjb25zdCBQb3NpdGlvbiYgcG9zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNzQ5OTIzMDMyY2ZlOGY0
YWZkOTNiY2ZhMjViNTkwYTE1MmJmMDY3MS4uYWFhNmQ5NTk3YjRjOWViZTBlOGQ3MWIwMGQ2MmY5
NTA1OTY2MWZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC03NjIsOSArNzYyLDkgQEAgU3RyaW5nIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6Om9yaWdpbmFsU3RyaW5nRm9yQXV0b2NvcnJlY3Rpb25BdEJlZ2lubmluZ09mU2Vs
ZWMKICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBkb2N1bWVudCgpLT5tYXJr
ZXJzKCktPm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZGaXJzdENoYXJhY3Rlci5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFy
a2Vycy5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2Vy
ID0gbWFya2Vyc1tpXTsKLSAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbWFya2VyLnN0YXJ0T2Zm
c2V0OworICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZzZXQoKTsKICAg
ICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID09IHN0YXJ0T2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQo
KS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBtYXJrZXIuZGVz
Y3JpcHRpb247CisgICAgICAgICAgICByZXR1cm4gbWFya2VyLmRlc2NyaXB0aW9uKCk7CiAgICAg
fQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRl
eCBjNmMyZmU2MzBlNjIwNzZmZDJhNTkzM2RmNmMwODQ1MzdiMWZjYjg4Li5iODlkNDM0MTE2MzVj
NWQ2OWQyZWU2ZjJhNDNlYzM4NGI2MzUxMGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CkBAIC0zMjIwLDcgKzMyMjAsNyBAQCBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNNYXJr
ZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaQogICAgIFZlY3Rv
cjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMo
KS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJr
ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IG1hcmtl
cnNbaV07Ci0gICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPD0gc3RhcnRPZmZzZXQgJiYg
ZW5kT2Zmc2V0IDw9IG1hcmtlci5lbmRPZmZzZXQgJiYgbWFya2VyLnR5cGUgPT0gbWFya2VyVHlw
ZSkKKyAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpIDw9IHN0YXJ0T2Zmc2V0ICYmIGVu
ZE9mZnNldCA8PSBtYXJrZXIuZW5kT2Zmc2V0KCkgJiYgbWFya2VyLnR5cGUoKSA9PSBtYXJrZXJU
eXBlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAppbmRl
eCAwM2ZhZTEyMTgwOTcxZGIxN2I4YWJkM2Q2NWZiOGEwZmVlMDg4NzM5Li4yNmRmYjEwZGVhY2Zh
MmU5MDlhZjgyYjA4YTYzYWU4MDE3NTA0YjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKQEAgLTQwOSwxNyAr
NDA5LDE3IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0CiAgICAgICAgIGNvbnN0IERvY3VtZW50
TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOwogICAgICAgICBpZiAoIXNob3VsZFN0YXJ0VGlt
ZXJGb3IobWFya2VyLCBlbmRPZmZzZXQpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVu
dCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQsIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQpOwor
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+
ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci5lbmRP
ZmZzZXQoKSk7CiAgICAgICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFu
Z2UuZ2V0KCkpOwogICAgICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkID0gd29yZFJhbmdlOwogICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFj
ZWRTdHJpbmcgPSBjdXJyZW50V29yZDsKLSAgICAgICAgaWYgKG1hcmtlci50eXBlID09IERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZykKKyAgICAgICAgaWYgKG1hcmtlci50eXBlKCkgPT0gRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nKQogICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1l
cihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1l
bnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb247CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb24oKTsKICAgICAg
ICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlUmV2ZXJzaW9uKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCmluZGV4IDdiOTM2ODUyMGQz
Nzc1YmMwYzk3MTlmZTVjOGNmZDJmOTJlZTdlYzkuLjgxNTc0OGY0ODQyZGU1NzhhYmQ5ZDg3ZDhj
MzIxMTQyZTNkNzRhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCkBAIC0xMjgsOCArMTI4LDggQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgc2hvdWxkU3RhcnRUaW1lckZvcihjb25zdCBEb2N1bWVudE1hcmtlciYgbWFy
a2VyLCBpbnQgZW5kT2Zmc2V0KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICgoKG1hcmtl
ci50eXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCAmJiAhbWFya2VyLmRlc2NyaXB0
aW9uLmlzTnVsbCgpKSAKLSAgICAgICAgICAgICAgICAgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQp
ID09IGVuZE9mZnNldCk7CisgICAgICAgIHJldHVybiAoKChtYXJrZXIudHlwZSgpID09IERvY3Vt
ZW50TWFya2VyOjpSZXBsYWNlbWVudCAmJiAhbWFya2VyLmRlc2NyaXB0aW9uKCkuaXNOdWxsKCkp
IAorICAgICAgICAgICAgICAgICB8fCBtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpT
cGVsbGluZykgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0KCkpID09IGVuZE9m
ZnNldCk7CiAgICAgfQogCiAgICAgRWRpdG9yQ2xpZW50KiBjbGllbnQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCA3MWRmZWFkZmMxODE2ZTA5YTk4
MDhkNTU1YTAzM2Y3YTE0NzUwMWVjLi5kNWExYjVjODU4Y2M0MGUwZmY1NzdjZTJhYzFjMTgwMzQw
NjFkMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBA
IC0yMDEsNyArMjAxLDcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNwZWxsaW5nVG9vbFRpcChU
ZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiAKICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IG1faW5uZXJOb25TaGFyZWROb2RlLT5yZW5kZXJlcigpKQogICAgICAgICBkaXIgPSByZW5k
ZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7Ci0gICAgcmV0dXJuIG1hcmtlci0+ZGVzY3JpcHRp
b247CisgICAgcmV0dXJuIG1hcmtlci0+ZGVzY3JpcHRpb24oKTsKIH0KIAogU3RyaW5nIEhpdFRl
c3RSZXN1bHQ6OnJlcGxhY2VkU3RyaW5nKCkgY29uc3QKQEAgLTIxNSw3ICsyMTUsNyBAQCBTdHJp
bmcgSGl0VGVzdFJlc3VsdDo6cmVwbGFjZWRTdHJpbmcoKSBjb25zdAogICAgIGlmICghbWFya2Vy
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCi0gICAgcmV0dXJuIG1hcmtlci0+ZGVz
Y3JpcHRpb247CisgICAgcmV0dXJuIG1hcmtlci0+ZGVzY3JpcHRpb24oKTsKIH0gICAgCiAgICAg
CiBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6dGl0bGUoVGV4dERpcmVjdGlvbiYgZGlyKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IDg5YjlhY2Vi
NmY4ZmM1MmNmZGYxYzdlNjUxNzk4ZWYxYzU3NGUyYTQuLjliNjBjNDIxZDA3ZmFjODQyNDQyZjYy
NDAxYmUyOGFmNDZiN2VlNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAKQEAgLTk5MiwxNiArOTkyLDE2IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRT
cGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hCiAK
ICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIG1lYXN1cmUgdGV4dAogICAgIGJv
b2wgbWFya2VyU3BhbnNXaG9sZUJveCA9IHRydWU7Ci0gICAgaWYgKG1fc3RhcnQgPD0gKGludClt
YXJrZXIuc3RhcnRPZmZzZXQpCisgICAgaWYgKG1fc3RhcnQgPD0gKGludCltYXJrZXIuc3RhcnRP
ZmZzZXQoKSkKICAgICAgICAgbWFya2VyU3BhbnNXaG9sZUJveCA9IGZhbHNlOwotICAgIGlmICgo
ZW5kKCkgKyAxKSAhPSBtYXJrZXIuZW5kT2Zmc2V0KSAgICAgIC8vIGVuZCBwb2ludHMgYXQgdGhl
IGxhc3QgY2hhciwgbm90IHBhc3QgaXQKKyAgICBpZiAoKGVuZCgpICsgMSkgIT0gbWFya2VyLmVu
ZE9mZnNldCgpKSAvLyBlbmQgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBwYXN0IGl0CiAg
ICAgICAgIG1hcmtlclNwYW5zV2hvbGVCb3ggPSBmYWxzZTsKICAgICBpZiAobV90cnVuY2F0aW9u
ICE9IGNOb1RydW5jYXRpb24pCiAgICAgICAgIG1hcmtlclNwYW5zV2hvbGVCb3ggPSBmYWxzZTsK
IAogICAgIGlmICghbWFya2VyU3BhbnNXaG9sZUJveCB8fCBncmFtbWFyKSB7Ci0gICAgICAgIGlu
dCBzdGFydFBvc2l0aW9uID0gbWF4PGludD4obWFya2VyLnN0YXJ0T2Zmc2V0IC0gbV9zdGFydCwg
MCk7Ci0gICAgICAgIGludCBlbmRQb3NpdGlvbiA9IG1pbjxpbnQ+KG1hcmtlci5lbmRPZmZzZXQg
LSBtX3N0YXJ0LCBtX2xlbik7CisgICAgICAgIGludCBzdGFydFBvc2l0aW9uID0gbWF4PGludD4o
bWFya2VyLnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0LCAwKTsKKyAgICAgICAgaW50IGVuZFBvc2l0
aW9uID0gbWluPGludD4obWFya2VyLmVuZE9mZnNldCgpIC0gbV9zdGFydCwgbV9sZW4pOwogICAg
ICAgICAKICAgICAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKQogICAgICAg
ICAgICAgZW5kUG9zaXRpb24gPSBtaW48aW50PihlbmRQb3NpdGlvbiwgbV90cnVuY2F0aW9uKTsK
QEAgLTEwNDMsNyArMTA0Myw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09y
R3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hCiAgICAgICAgIC8v
IEluIGxhcmdlciBmb250cywgdGhvdWdoLCBwbGFjZSB0aGUgdW5kZXJsaW5lIHVwIG5lYXIgdGhl
IGJhc2VsaW5lIHRvIHByZXZlbnQgYSBiaWcgZ2FwLgogICAgICAgICB1bmRlcmxpbmVPZmZzZXQg
PSBiYXNlbGluZSArIDI7CiAgICAgfQotICAgIHB0LT5kcmF3TGluZUZvclRleHRDaGVja2luZyhG
bG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIHVuZGVybGlu
ZU9mZnNldCksIHdpZHRoLCB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JNYXJrZXJUeXBlKG1hcmtl
ci50eXBlKSk7CisgICAgcHQtPmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKEZsb2F0UG9pbnQoYm94
T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lk
dGgsIHRleHRDaGVja2luZ0xpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLnR5cGUoKSkpOwog
fQogCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29u
dGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgRG9jdW1lbnRNYXJr
ZXImIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250KQpAQCAtMTA1
Myw4ICsxMDUzLDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihH
cmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JgogICAgIGludCBkZWx0YVkgPSBy
ZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rp
b25Cb3R0b20oKSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRv
cCgpOwogICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQoKTsKIAotICAgIGludCBz
UG9zID0gbWF4KG1hcmtlci5zdGFydE9mZnNldCAtIG1fc3RhcnQsICh1bnNpZ25lZCkwKTsKLSAg
ICBpbnQgZVBvcyA9IG1pbihtYXJrZXIuZW5kT2Zmc2V0IC0gbV9zdGFydCwgKHVuc2lnbmVkKW1f
bGVuKTsgICAgCisgICAgaW50IHNQb3MgPSBtYXgobWFya2VyLnN0YXJ0T2Zmc2V0KCkgLSBtX3N0
YXJ0LCAodW5zaWduZWQpMCk7CisgICAgaW50IGVQb3MgPSBtaW4obWFya2VyLmVuZE9mZnNldCgp
IC0gbV9zdGFydCwgKHVuc2lnbmVkKW1fbGVuKTsgICAgCiAgICAgVGV4dFJ1biBydW4odGV4dFJl
bmRlcmVyKCktPnRleHQoKS0+Y2hhcmFjdGVycygpICsgbV9zdGFydCwgbV9sZW4sIHRleHRSZW5k
ZXJlcigpLT5hbGxvd1RhYnMoKSwgdGV4dFBvcygpLCBtX2V4cGFuc2lvbiwgZXhwYW5zaW9uQmVo
YXZpb3IoKSwgZGlyZWN0aW9uKCksIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3Jk
ZXJlZCgpKTsKICAgICAKICAgICAvLyBBbHdheXMgY29tcHV0ZSBhbmQgc3RvcmUgdGhlIHJlY3Qg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFya2VyLiBUaGUgY29tcHV0ZWQgcmVjdCBpcyBpbiBhYnNv
bHV0ZSBjb29yZGluYXRlcy4KQEAgLTEwNjQsNyArMTA2NCw3IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQ
b2ludCYKICAgICAKICAgICAvLyBPcHRpb25hbGx5IGhpZ2hsaWdodCB0aGUgdGV4dAogICAgIGlm
IChyZW5kZXJlcigpLT5mcmFtZSgpLT5lZGl0b3IoKS0+bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZCgpKSB7Ci0gICAgICAgIENvbG9yIGNvbG9yID0gbWFya2VyLmFjdGl2ZU1hdGNoID8K
KyAgICAgICAgQ29sb3IgY29sb3IgPSBtYXJrZXIuYWN0aXZlTWF0Y2goKSA/CiAgICAgICAgICAg
ICByZW5kZXJlcigpLT50aGVtZSgpLT5wbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRD
b2xvcigpIDoKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCktPnBsYXRmb3JtSW5hY3Rp
dmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpwdCk7CkBAIC0xMDgwLDggKzEwODAsOCBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoY29uc3QgRG9jdW1lbnRN
YXJrZXImIG1hcmtlcgogICAgIGludCB5ID0gc2VsZWN0aW9uVG9wKCk7CiAgICAgaW50IGggPSBz
ZWxlY3Rpb25IZWlnaHQoKTsKICAgICAKLSAgICBpbnQgc1BvcyA9IG1heChtYXJrZXIuc3RhcnRP
ZmZzZXQgLSBtX3N0YXJ0LCAodW5zaWduZWQpMCk7Ci0gICAgaW50IGVQb3MgPSBtaW4obWFya2Vy
LmVuZE9mZnNldCAtIG1fc3RhcnQsICh1bnNpZ25lZCltX2xlbik7ICAgIAorICAgIGludCBzUG9z
ID0gbWF4KG1hcmtlci5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKTApOworICAg
IGludCBlUG9zID0gbWluKG1hcmtlci5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsICh1bnNpZ25lZClt
X2xlbik7ICAgIAogICAgIFRleHRSdW4gcnVuKHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJh
Y3RlcnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRl
eHRQb3MoKSwgbV9leHBhbnNpb24sIGV4cGFuc2lvbkJlaGF2aW9yKCksIGRpcmVjdGlvbigpLCBt
X2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7CiAgICAgSW50UG9pbnQg
c3RhcnRQb2ludCA9IEludFBvaW50KG1feCwgeSk7CiAgICAgCkBAIC0xMTA1LDcgKzExMDUsNyBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4
dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBt
YXJrZXIgPSAqbWFya2VySXQ7CiAgICAgICAgIAogICAgICAgICAvLyBQYWludCBlaXRoZXIgdGhl
IGJhY2tncm91bmQgbWFya2VycyBvciB0aGUgZm9yZWdyb3VuZCBtYXJrZXJzLCBidXQgbm90IGJv
dGgKLSAgICAgICAgc3dpdGNoIChtYXJrZXIudHlwZSkgeworICAgICAgICBzd2l0Y2ggKG1hcmtl
ci50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI6CiAg
ICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpTcGVsbGluZzoKICAgICAgICAgICAgIGNh
c2UgRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3I6CkBAIC0xMTIxLDE3ICsxMTIx
LDE3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3ND
b250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0IDw9IHN0YXJ0KCkpCisg
ICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPD0gc3RhcnQoKSkKICAgICAgICAgICAgIC8v
IG1hcmtlciBpcyBjb21wbGV0ZWx5IGJlZm9yZSB0aGlzIHJ1bi4gIFRoaXMgbWlnaHQgYmUgYSBt
YXJrZXIgdGhhdCBzaXRzIGJlZm9yZSB0aGUKICAgICAgICAgICAgIC8vIGZpcnN0IHJ1biB3ZSBk
cmF3LCBvciBtYXJrZXJzIHRoYXQgd2VyZSB3aXRoaW4gcnVucyB3ZSBza2lwcGVkIGR1ZSB0byB0
cnVuY2F0aW9uLgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBpZiAo
bWFya2VyLnN0YXJ0T2Zmc2V0ID4gZW5kKCkpCisgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZz
ZXQoKSA+IGVuZCgpKQogICAgICAgICAgICAgLy8gbWFya2VyIGlzIGNvbXBsZXRlbHkgYWZ0ZXIg
dGhpcyBydW4sIGJhaWwuICBBIGxhdGVyIHJ1biB3aWxsIHBhaW50IGl0LgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgICAgICAvLyBtYXJrZXIgaW50ZXJzZWN0cyB0aGlzIHJ1bi4g
IFBhaW50IGl0LgotICAgICAgICBzd2l0Y2ggKG1hcmtlci50eXBlKSB7CisgICAgICAgIHN3aXRj
aCAobWFya2VyLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmc6CiAgICAgICAgICAgICAgICAgcGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihwdCwg
Ym94T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBmb250LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93
Qm94LmNwcAppbmRleCAxZDAwNDNiYmU1NWVjYjZjNmE0OGQ5MTAyMjc3NGFlYWRmODhmYTI3Li5h
MDAyODY3MTAxMmVjYjJiOWYyOWZiNTIxZmNkMjRkZjljOGIxNTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKQEAgLTk5LDcgKzk5
LDcgQEAgdm9pZCBTVkdJbmxpbmVGbG93Qm94Ojpjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdEZv
clJlbmRlcmVyKFJlbmRlclNWR0lubGluZVRleHQKICAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJr
ZXImIG1hcmtlciA9ICptYXJrZXJJdDsKIAogICAgICAgICAvLyBTVkcgaXMgb25seSBpbnRlcmVz
c3RlZCBpbiB0aGUgVGV4dE1hdGNoIG1hcmtlciwgZm9yIG5vdy4KLSAgICAgICAgaWYgKG1hcmtl
ci50eXBlICE9IERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCisgICAgICAgIGlmIChtYXJrZXIu
dHlwZSgpICE9IERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBGbG9hdFJlY3QgbWFya2VyUmVjdDsKQEAgLTEwOSw4ICsxMDksOCBAQCB2
b2lkIFNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0Rm9yUmVuZGVy
ZXIoUmVuZGVyU1ZHSW5saW5lVGV4dAogCiAgICAgICAgICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0
ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGJveCk7CiAKLSAgICAgICAg
ICAgIGludCBtYXJrZXJTdGFydFBvc2l0aW9uID0gbWF4PGludD4obWFya2VyLnN0YXJ0T2Zmc2V0
IC0gdGV4dEJveC0+c3RhcnQoKSwgMCk7Ci0gICAgICAgICAgICBpbnQgbWFya2VyRW5kUG9zaXRp
b24gPSBtaW48aW50PihtYXJrZXIuZW5kT2Zmc2V0IC0gdGV4dEJveC0+c3RhcnQoKSwgdGV4dEJv
eC0+bGVuKCkpOworICAgICAgICAgICAgaW50IG1hcmtlclN0YXJ0UG9zaXRpb24gPSBtYXg8aW50
PihtYXJrZXIuc3RhcnRPZmZzZXQoKSAtIHRleHRCb3gtPnN0YXJ0KCksIDApOworICAgICAgICAg
ICAgaW50IG1hcmtlckVuZFBvc2l0aW9uID0gbWluPGludD4obWFya2VyLmVuZE9mZnNldCgpIC0g
dGV4dEJveC0+c3RhcnQoKSwgdGV4dEJveC0+bGVuKCkpOwogCiAgICAgICAgICAgICBpZiAobWFy
a2VyU3RhcnRQb3NpdGlvbiA+PSBtYXJrZXJFbmRQb3NpdGlvbikKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNGUwOGMxOWFkZDJlOWYxYWQz
YTJkYWYzZGVhNzk3ZDQ3ZWI3N2ViMy4uNzkzN2NhNzE0OWQwMWRmMTM1ZmNjNmZlMDdmODkxNDEw
N2EwYjI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAx
MS0wNS0xNiAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIE1lbWJl
ciB2YXJpYWJsZXMgb2YgRG9jdW1lbnRNYXJrZXIgc2hvdWxkIGJlIGVuY2Fwc3VsYXRlZC4gICAg
ICAgIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY4
MTQKKworICAgICAgICBNb3ZlZCBhZGRNYXJrZXIoKSBpbXBsZW1lbnRhdGlvbiB0bworICAgICAg
ICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZFRleHRNYXRjaE1hcmtlcigp
LgorICAgICAgICAKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWVJbXBsOjphZGRNYXJrZXIpOgorCiAyMDExLTA1LTEzICBUYW8gQmFpICA8
bWljaGFlbGJhaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlz
aGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXgg
OWViNmU4ZTQwZmI2Y2U0Y2YwM2E2NDUxODYxNjk3NGNhM2Q2ZWFlYS4uYjQyM2Y0ZGZjZTE1NjQ3
ZjA1MTg4ODRhOGFhZDE3ZmMwZDk1NzNkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGcmFtZUltcGwuY3BwCkBAIC0yMjQwLDM3ICsyMjQwLDcgQEAgdm9pZCBXZWJGcmFtZUlt
cGw6OmludmFsaWRhdGVBcmVhKEFyZWFUb0ludmFsaWRhdGUgYXJlYSkKIAogdm9pZCBXZWJGcmFt
ZUltcGw6OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIGJvb2wgYWN0aXZlTWF0Y2gpCiB7Ci0gICAg
Ly8gVXNlIGEgVGV4dEl0ZXJhdG9yIHRvIHZpc2l0IHRoZSBwb3RlbnRpYWxseSBtdWx0aXBsZSBu
b2RlcyB0aGUgcmFuZ2UKLSAgICAvLyBjb3ZlcnMuCi0gICAgVGV4dEl0ZXJhdG9yIG1hcmtlZFRl
eHQocmFuZ2UpOwotICAgIGZvciAoOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFk
dmFuY2UoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQu
cmFuZ2UoKTsKLSAgICAgICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0KLSAgICAgICAgRG9jdW1lbnRN
YXJrZXIgbWFya2VyID0gewotICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCwK
LSAgICAgICAgICAgIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwKLSAgICAgICAg
ICAgIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksCi0gICAgICAgICAgICAiIiwKLSAg
ICAgICAgICAgIGFjdGl2ZU1hdGNoCi0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKG1hcmtlci5l
bmRPZmZzZXQgPiBtYXJrZXIuc3RhcnRPZmZzZXQpIHsKLSAgICAgICAgICAgIC8vIEZpbmQgdGhl
IG5vZGUgdG8gYWRkIGEgbWFya2VyIHRvIGFuZCBhZGQgaXQuCi0gICAgICAgICAgICBOb2RlKiBu
b2RlID0gdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOwotICAgICAgICAgICAg
ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIobm9kZSwgbWFya2VyKTsK
LQotICAgICAgICAgICAgLy8gUmVuZGVyZWQgcmVjdHMgZm9yIG1hcmtlcnMgaW4gV2ViS2l0IGFy
ZSBub3QgcG9wdWxhdGVkIHVudGlsIGVhY2ggdGltZQotICAgICAgICAgICAgLy8gdGhlIG1hcmtl
cnMgYXJlIHBhaW50ZWQuIEhvd2V2ZXIsIHdlIG5lZWQgaXQgdG8gaGFwcGVuIHNvb25lciwgYmVj
YXVzZQotICAgICAgICAgICAgLy8gdGhlIHdob2xlIHB1cnBvc2Ugb2YgdGlja21hcmtzIG9uIHRo
ZSBzY3JvbGxiYXIgaXMgdG8gc2hvdyB3aGVyZQotICAgICAgICAgICAgLy8gbWF0Y2hlcyBvZmYt
c2NyZWVuIGFyZSAodGhhdCBoYXZlbid0IGJlZW4gcGFpbnRlZCB5ZXQpLgotICAgICAgICAgICAg
VmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpLT5tYXJrZXJzRm9yTm9kZShub2RlKTsKLSAgICAgICAgICAgIGZyYW1lKCktPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+c2V0UmVuZGVyZWRSZWN0Rm9yTWFya2VyKAotICAgICAgICAgICAg
ICAgIHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwKLSAgICAgICAgICAgICAg
ICBtYXJrZXJzW21hcmtlcnMuc2l6ZSgpIC0gMV0sCi0gICAgICAgICAgICAgICAgcmFuZ2UtPmJv
dW5kaW5nQm94KCkpOwotICAgICAgICB9Ci0gICAgfQorICAgIGZyYW1lKCktPmRvY3VtZW50KCkt
Pm1hcmtlcnMoKS0+YWRkVGV4dE1hdGNoTWFya2VyKHJhbmdlLCBhY3RpdmVNYXRjaCk7CiB9CiAK
IHZvaWQgV2ViRnJhbWVJbXBsOjpzZXRNYXJrZXJBY3RpdmUoUmFuZ2UqIHJhbmdlLCBib29sIGFj
dGl2ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93860</attachid>
            <date>2011-05-17 20:22:23 -0700</date>
            <delta_ts>2011-05-18 11:27:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56814-20110518122221.patch</filename>
            <type>text/plain</type>
            <size>39444</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY3MjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxM2MwODA2ODFkNmVkMDAy
MzA0NTJkZDcxYzExZDczMGQ0NDAyNTk0Li5hZWQxNTgwOTRmNGFlNTNjYTBmOTMxYzAxYjQyMjc2
NTQyMzg2ZjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjkgQEAKKzIwMTEtMDUtMTcgIE1PUklU
QSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9u
eSBDaGFuZy4KKworICAgICAgICBbUmVmYWN0b3JpbmddIE1lbWJlciB2YXJpYWJsZXMgb2YgRG9j
dW1lbnRNYXJrZXIgc2hvdWxkIGJlIGVuY2Fwc3VsYXRlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2ODE0CisKKyAgICAgICAgLSBNb3ZlZCBEb2N1
bWVudE1hcmtlcidzIG1lbWJlciB2YXJpYWJsZXMgdG8gcHJpdmF0ZSBhbmQgYWRkZWQgZ2V0dGVy
cyBmb3IgdGhlbS4KKyAgICAgICAgLSBBZGRlZCBEb2N1bWVudE1hcmtlciBzZXR0ZXJzIGFuZCBj
b25zdHJ1Y3RvcnMsIHdoaWNoIGNvbnRhaW4gYXNzZXJ0aW9ucyBhZ2FpbnN0IG1fdHlwZSB2YWx1
ZXMKKyAgICAgICAgICBiZWNhdXNlIGRlc2NyaXB0aW9uIGFuZCBhY3RpdmVNYXRjaCBhcmUgdXNl
ZCB3aXRoIHNwZWNpZmljIHR5cGUgb2YgTWFya2VyVHlwZS4KKyAgICAgICAgLSBNb3ZlZCBjaHJv
bWl1bSdzIFdlYktpdDo6V2ViRnJhbWVJbXBsOjphZGRNYXJrZXIoKSB0byBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmFkZFRleHRNYXRjaE1hcmtlcigpCisgICAgICAgICAgYmVjYXVzZSBpdCBh
Y2Nlc3NlcyBEb2N1bWVudE1hcmtlciBpbnRlcm5hbHMuCisgICAgICAgIC0gTW92ZWQgYSB2ZXJz
aW9uIG9mIERNQzo6YWRkTWFya2VyKCkgdG8gcHJpdmF0ZSBhbmQgYWRkIGFsdGVybmF0aXZlcyB0
aGF0IGhpZGUKKyAgICAgICAgICBpbnRlcm5hbHMgb2YgRG9jdW1lbnRNYXJrZXIuIChUaGUgaW50
ZXJuYWwgd2lsbCBiZSByZW5ld2VkIGJ5IHVwY29taW5nIGNoYW5nZS4pCisgICAgICAgIAorICAg
ICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXI6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OnN0YXJ0T2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjplbmRPZmZzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OmRlc2NyaXB0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyOjpoYXNEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlcjo6YWN0aXZlTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXI6OmNsZWFyRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXI6OnNldFN0YXJ0T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
OjpzZXRFbmRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFya2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpzaGlmdE9mZnNldHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OnNldEFjdGl2ZU1hdGNoKToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkVGV4dE1hdGNoTWFya2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1Bv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vy
c0luUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpy
ZW5kZXJlZFJlY3RzRm9yTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnNGcm9tTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpzaG93TWFya2Vycyk6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0
SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVjdGlvbik6
CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcik6CisgICAgICAgICogZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAq
IGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkU3RhcnRUaW1lckZvcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdDo6c3BlbGxpbmdUb29sVGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6OnJlcGxhY2VkU3RyaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5n
T3JHcmFtbWFyTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50
VGV4dE1hdGNoTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvbXB1
dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
SW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVGbG93Qm94Ojpj
b21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdEZvclJlbmRlcmVyKToKKwogMjAxMS0wNS0xNyAgQ3Jp
cyBOZWNrYXIgIDxjZG5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0g
QmFydGguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCmluZGV4IGM4Nzc4ZDM0NjdkZTc2
MWVkNmVkOWIyYWRkNDg4NzNjYjhkOWIyZGEuLjA3N2FjNmZiN2I5N2VlNjkxN2VkMGFlNTEzM2U0
NzMzZGUxNTM5MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCkBAIC04NCwyNCAr
ODQsODAgQEAgc3RydWN0IERvY3VtZW50TWFya2VyIHsKICAgICAgICAgewogICAgICAgICB9CiAg
ICAgfTsKLSAgICAKLSAgICBNYXJrZXJUeXBlIHR5cGU7Ci0gICAgdW5zaWduZWQgc3RhcnRPZmZz
ZXQ7Ci0gICAgdW5zaWduZWQgZW5kT2Zmc2V0OwotICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKLSAg
ICBib29sIGFjdGl2ZU1hdGNoOworCisKKyAgICBEb2N1bWVudE1hcmtlcigpOworICAgIERvY3Vt
ZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQpOworICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOworICAg
IERvY3VtZW50TWFya2VyKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IGJvb2wgYWN0aXZlTWF0Y2gpOworCisgICAgTWFya2VyVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0T2Zmc2V0OyB9CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9lbmRPZmZzZXQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQorICAgIGJvb2wgaGFzRGVzY3JpcHRpb24oKSBjb25zdCB7
IHJldHVybiAhbV9kZXNjcmlwdGlvbi5pc0VtcHR5KCk7IH0KKyAgICBib29sIGFjdGl2ZU1hdGNo
KCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVNYXRjaDsgfQorCisgICAgdm9pZCBzZXRBY3RpdmVN
YXRjaChib29sKTsKKyAgICB2b2lkIGNsZWFyRGVzY3JpcHRpb24oKSB7IG1fZGVzY3JpcHRpb24g
PSBTdHJpbmcoKTsgfQorCisgICAgLy8gT2Zmc2V0IG1vZGlmaWNhdGlvbnMgYXJlIGRvbmUgYnkg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLgorICAgIC8vIE90aGVyIGNsYXNzZXMgc2hvdWxkIG5v
dCBjYWxsIGZvbGxvd2luZyBzZXR0ZXJzLgorICAgIHZvaWQgc2V0U3RhcnRPZmZzZXQodW5zaWdu
ZWQgb2Zmc2V0KSB7IG1fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7IH0KKyAgICB2b2lkIHNldEVuZE9m
ZnNldCh1bnNpZ25lZCBvZmZzZXQpIHsgbV9lbmRPZmZzZXQgPSBvZmZzZXQ7IH0KKyAgICB2b2lk
IHNoaWZ0T2Zmc2V0cyhpbnQgZGVsdGEpOwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERv
Y3VtZW50TWFya2VyJiBvKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGUgPT0gby50
eXBlICYmIHN0YXJ0T2Zmc2V0ID09IG8uc3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0ID09IG8uZW5k
T2Zmc2V0OworICAgICAgICByZXR1cm4gdHlwZSgpID09IG8udHlwZSgpICYmIHN0YXJ0T2Zmc2V0
KCkgPT0gby5zdGFydE9mZnNldCgpICYmIGVuZE9mZnNldCgpID09IG8uZW5kT2Zmc2V0KCk7CiAg
ICAgfQogCiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERvY3VtZW50TWFya2VyJiBvKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7CiAgICAgfQorCitwcml2YXRl
OiAgICAKKyAgICBNYXJrZXJUeXBlIG1fdHlwZTsKKyAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0
OworICAgIHVuc2lnbmVkIG1fZW5kT2Zmc2V0OworICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOwor
ICAgIGJvb2wgbV9hY3RpdmVNYXRjaDsKIH07CiAKK2lubGluZSBEb2N1bWVudE1hcmtlcjo6RG9j
dW1lbnRNYXJrZXIoKSAKKyAgICA6IG1fdHlwZShTcGVsbGluZyksIG1fc3RhcnRPZmZzZXQoMCks
IG1fZW5kT2Zmc2V0KDApLCBtX2FjdGl2ZU1hdGNoKGZhbHNlKQoreworfQorCitpbmxpbmUgRG9j
dW1lbnRNYXJrZXI6OkRvY3VtZW50TWFya2VyKE1hcmtlclR5cGUgdHlwZSwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICA6IG1fdHlwZSh0eXBlKSwgbV9zdGFy
dE9mZnNldChzdGFydE9mZnNldCksIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCksIG1fYWN0aXZlTWF0
Y2goZmFsc2UpCit7Cit9CisKK2lubGluZSBEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJrZXIo
TWFya2VyVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQorICAgIDogbV90eXBlKHR5cGUpLCBtX3N0YXJ0
T2Zmc2V0KHN0YXJ0T2Zmc2V0KSwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KSwgbV9kZXNjcmlwdGlv
bihkZXNjcmlwdGlvbiksIG1fYWN0aXZlTWF0Y2goZmFsc2UpCit7CisgICAgQVNTRVJUKHR5cGUg
PT0gRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIgfHwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0
ZWQpOworfQorCitpbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFya2VyKHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgYWN0aXZlTWF0Y2gpCisgICAg
OiBtX3R5cGUoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCksIG1fc3RhcnRPZmZzZXQoc3RhcnRP
ZmZzZXQpLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpLCBtX2FjdGl2ZU1hdGNoKGFjdGl2ZU1hdGNo
KQoreworfQorCitpbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2hpZnRPZmZzZXRzKGludCBk
ZWx0YSkKK3sKKyAgICBtX3N0YXJ0T2Zmc2V0ICs9IGRlbHRhOworICAgIG1fZW5kT2Zmc2V0ICs9
ICBkZWx0YTsKK30KKworaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldEFjdGl2ZU1hdGNo
KGJvb2wgYWN0aXZlKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlRl
eHRNYXRjaCk7CisgICAgbV9hY3RpdmVNYXRjaCA9IGFjdGl2ZTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRG9jdW1lbnRNYXJrZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCA3NGQ3MjdkZjhkNjUw
N2IzZmM1YzQ4N2YzMjMwYjdmZDRkYTM0MjEwLi4xOTMzNDk5NDYzNDMwN2ZiZWUyMDQ5YjA4Mzk4
NzJmNTMzNzcyMWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcApAQCAtNTQsMTQgKzU0LDUwIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpkZXRhY2goKQogICAgIG1fbWFya2Vycy5jbGVhcigpOwogfQogCi12b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUgdHlwZSwgU3RyaW5nIGRlc2NyaXB0aW9uKQordm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pCiB7CiAgICAgLy8gVXNl
IGEgVGV4dEl0ZXJhdG9yIHRvIHZpc2l0IHRoZSBwb3RlbnRpYWxseSBtdWx0aXBsZSBub2RlcyB0
aGUgcmFuZ2UgY292ZXJzLgogICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2Up
OyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewogICAgICAgICBS
ZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKICAgICAgICAgaW50
IGV4Y2VwdGlvbiA9IDA7Ci0gICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IHt0eXBlLCB0
ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbiksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KGV4
Y2VwdGlvbiksIGRlc2NyaXB0aW9uLCBmYWxzZX07Ci0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGll
Y2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksIG1hcmtlcik7CisgICAgICAgIGFkZE1hcmtl
cih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksIAorICAgICAgICAgICAgICAg
ICAgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldChleGNlcHRpb24p
LCB0ZXh0UGllY2UtPmVuZE9mZnNldChleGNlcHRpb24pLCBkZXNjcmlwdGlvbikpOworICAgIH0K
K30KKwordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSogcmFu
Z2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCit7CisgICAgLy8gVXNlIGEgVGV4
dEl0ZXJhdG9yIHRvIHZpc2l0IHRoZSBwb3RlbnRpYWxseSBtdWx0aXBsZSBub2RlcyB0aGUgcmFu
Z2UgY292ZXJzLgorICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UpOyAhbWFy
a2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAgICAgICBSZWZQdHI8
UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKKyAgICAgICAgaW50IGV4Y2Vw
dGlvbiA9IDA7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKGV4
Y2VwdGlvbiksIAorICAgICAgICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBp
ZWNlLT5zdGFydE9mZnNldChleGNlcHRpb24pLCB0ZXh0UGllY2UtPmVuZE9mZnNldChleGNlcHRp
b24pKSk7CisgICAgfQorCit9CisKKwordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFk
ZFRleHRNYXRjaE1hcmtlcihSYW5nZSogcmFuZ2UsIGJvb2wgYWN0aXZlTWF0Y2gpCit7CisgICAg
Ly8gVXNlIGEgVGV4dEl0ZXJhdG9yIHRvIHZpc2l0IHRoZSBwb3RlbnRpYWxseSBtdWx0aXBsZSBu
b2RlcyB0aGUgcmFuZ2UgY292ZXJzLgorICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQo
cmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKKyAgICAg
ICAgaW50IGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gdGV4
dFBpZWNlLT5zdGFydE9mZnNldChleGNlcHRpb24pOworICAgICAgICB1bnNpZ25lZCBlbmRPZmZz
ZXQgPSB0ZXh0UGllY2UtPmVuZE9mZnNldChleGNlcHRpb24pOworICAgICAgICBhZGRNYXJrZXIo
dGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLCBEb2N1bWVudE1hcmtlcihzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0LCBhY3RpdmVNYXRjaCkpOworICAgICAgICBpZiAoZW5kT2Zmc2V0
ID4gc3RhcnRPZmZzZXQpIHsKKyAgICAgICAgICAgIC8vIFJlbmRlcmVkIHJlY3RzIGZvciBtYXJr
ZXJzIGluIFdlYktpdCBhcmUgbm90IHBvcHVsYXRlZCB1bnRpbCBlYWNoIHRpbWUKKyAgICAgICAg
ICAgIC8vIHRoZSBtYXJrZXJzIGFyZSBwYWludGVkLiBIb3dldmVyLCB3ZSBuZWVkIGl0IHRvIGhh
cHBlbiBzb29uZXIsIGJlY2F1c2UKKyAgICAgICAgICAgIC8vIHRoZSB3aG9sZSBwdXJwb3NlIG9m
IHRpY2ttYXJrcyBvbiB0aGUgc2Nyb2xsYmFyIGlzIHRvIHNob3cgd2hlcmUKKyAgICAgICAgICAg
IC8vIG1hdGNoZXMgb2ZmLXNjcmVlbiBhcmUgKHRoYXQgaGF2ZW4ndCBiZWVuIHBhaW50ZWQgeWV0
KS4KKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSB0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKGV4
Y2VwdGlvbik7CisgICAgICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBt
YXJrZXJzRm9yTm9kZShub2RlKTsKKyAgICAgICAgICAgIHNldFJlbmRlcmVkUmVjdEZvck1hcmtl
cih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJzLnNpemUoKSAtIDFdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLT5ib3VuZGluZ0JveCgpKTsKKyAg
ICAgICAgfQogICAgIH0KIH0KIApAQCAtODQsMTEgKzEyMCwxMSBAQCB2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpNYXJrZQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUq
IG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJrZXIpIAogewotICAgIEFTU0VSVChu
ZXdNYXJrZXIuZW5kT2Zmc2V0ID49IG5ld01hcmtlci5zdGFydE9mZnNldCk7Ci0gICAgaWYgKG5l
d01hcmtlci5lbmRPZmZzZXQgPT0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KQorICAgIEFTU0VSVChu
ZXdNYXJrZXIuZW5kT2Zmc2V0KCkgPj0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkpOworICAgIGlm
IChuZXdNYXJrZXIuZW5kT2Zmc2V0KCkgPT0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLmFkZChuZXdN
YXJrZXIudHlwZSk7CisgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuYWRkKG5ld01h
cmtlci50eXBlKCkpOwogCiAgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9k
ZSk7CiAKQEAgLTEwNSwxMCArMTQxLDEwIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRNYXJrZXIoTm9kZSogbm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hCiAgICAg
ICAgIC8vICh0aGVyZSBpcyBhdCBtb3N0IG9uZSksIHJlbW92ZSBpdCBhbmQgYWRqdXN0IHRoZSBu
ZXcgbWFya2VyJ3Mgc3RhcnQgb2Zmc2V0IHRvIGVuY29tcGFzcyBpdC4KICAgICAgICAgZm9yIChp
ID0gMDsgaSA8IG51bU1hcmtlcnM7ICsraSkgewogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIg
bWFya2VyID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0
ID4gdG9JbnNlcnQuc3RhcnRPZmZzZXQpCisgICAgICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zm
c2V0KCkgPiB0b0luc2VydC5zdGFydE9mZnNldCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlID09IHRvSW5zZXJ0LnR5cGUgJiYgbWFya2VyLmVu
ZE9mZnNldCA+PSB0b0luc2VydC5zdGFydE9mZnNldCkgewotICAgICAgICAgICAgICAgIHRvSW5z
ZXJ0LnN0YXJ0T2Zmc2V0ID0gbWFya2VyLnN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgaWYgKG1h
cmtlci50eXBlKCkgPT0gdG9JbnNlcnQudHlwZSgpICYmIG1hcmtlci5lbmRPZmZzZXQoKSA+PSB0
b0luc2VydC5zdGFydE9mZnNldCgpKSB7CisgICAgICAgICAgICAgICAgdG9JbnNlcnQuc2V0U3Rh
cnRPZmZzZXQobWFya2VyLnN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGxpc3QtPnJl
bW92ZShpKTsKICAgICAgICAgICAgICAgICBudW1NYXJrZXJzLS07CiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0xMjAsMTIgKzE1NiwxMiBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6YWRkTWFya2VyKE5vZGUqIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogICAg
ICAgICAvLyBhZGp1c3RpbmcgdGhlIG5ldyBtYXJrZXIncyBlbmQgb2Zmc2V0IHRvIGNvdmVyIHRo
ZW0gaWYgbmVjZXNzYXJ5LgogICAgICAgICB3aGlsZSAoaiA8IG51bU1hcmtlcnMpIHsKICAgICAg
ICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxpc3QtPmF0KGopOwotICAgICAgICAgICAg
aWYgKG1hcmtlci5zdGFydE9mZnNldCA+IHRvSW5zZXJ0LmVuZE9mZnNldCkKKyAgICAgICAgICAg
IGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA+IHRvSW5zZXJ0LmVuZE9mZnNldCgpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlID09IHRvSW5zZXJ0
LnR5cGUpIHsKKyAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSgpID09IHRvSW5zZXJ0LnR5cGUo
KSkgewogICAgICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShqKTsKLSAgICAgICAgICAgICAgICBp
ZiAodG9JbnNlcnQuZW5kT2Zmc2V0IDw9IG1hcmtlci5lbmRPZmZzZXQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdG9JbnNlcnQuZW5kT2Zmc2V0ID0gbWFya2VyLmVuZE9mZnNldDsKKyAgICAgICAg
ICAgICAgICBpZiAodG9JbnNlcnQuZW5kT2Zmc2V0KCkgPD0gbWFya2VyLmVuZE9mZnNldCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIHRvSW5zZXJ0LnNldEVuZE9mZnNldChtYXJrZXIuZW5kT2Zm
c2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgbnVtTWFya2Vycy0tOwpAQCAtMTYyLDIxICsxOTgsMjAgQEAgdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LAogICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBsaXN0LT5h
dChpKTsKIAogICAgICAgICAvLyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVk
IHJhbmdlCi0gICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPiBlbmRPZmZzZXQpCisgICAg
ICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA+IGVuZE9mZnNldCkKICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIC8vIHNraXAgbWFya2VyIHRoYXQgaXMgYmVmb3JlIHRoZSBzcGVjaWZp
ZWQgcmFuZ2Ugb3IgaXMgdGhlIHdyb25nIHR5cGUKLSAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZz
ZXQgPCBzdGFydE9mZnNldCkKKyAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA8IHN0YXJ0
T2Zmc2V0KQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gcGluIHRoZSBtYXJr
ZXIgdG8gdGhlIHNwZWNpZmllZCByYW5nZSBhbmQgYXBwbHkgdGhlIHNoaWZ0IGRlbHRhCiAgICAg
ICAgIGRvY0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCA8IHN0
YXJ0T2Zmc2V0KQotICAgICAgICAgICAgbWFya2VyLnN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7
Ci0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0ID4gZW5kT2Zmc2V0KQotICAgICAgICAgICAg
bWFya2VyLmVuZE9mZnNldCA9IGVuZE9mZnNldDsKLSAgICAgICAgbWFya2VyLnN0YXJ0T2Zmc2V0
ICs9IGRlbHRhOwotICAgICAgICBtYXJrZXIuZW5kT2Zmc2V0ICs9IGRlbHRhOworICAgICAgICBp
ZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPCBzdGFydE9mZnNldCkKKyAgICAgICAgICAgIG1hcmtl
ci5zZXRTdGFydE9mZnNldChzdGFydE9mZnNldCk7CisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zm
c2V0KCkgPiBlbmRPZmZzZXQpCisgICAgICAgICAgICBtYXJrZXIuc2V0RW5kT2Zmc2V0KGVuZE9m
ZnNldCk7CisgICAgICAgIG1hcmtlci5zaGlmdE9mZnNldHMoZGVsdGEpOwogCiAgICAgICAgIGFk
ZE1hcmtlcihkc3ROb2RlLCBtYXJrZXIpOwogICAgIH0KQEAgLTIwNSwxMSArMjQwLDExIEBAIHZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUqIG5vZGUsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCBpCiAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxp
c3QtPmF0KGkpOwogCiAgICAgICAgIC8vIG1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9yZGVyLCBz
byBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlCi0gICAgICAgIGlm
IChtYXJrZXIuc3RhcnRPZmZzZXQgPj0gZW5kT2Zmc2V0KQorICAgICAgICBpZiAobWFya2VyLnN0
YXJ0T2Zmc2V0KCkgPj0gZW5kT2Zmc2V0KQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
Ly8gc2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlIG9yIGJlZm9yZSB0YXJnZXQKLSAgICAg
ICAgaWYgKG1hcmtlci5lbmRPZmZzZXQgPD0gc3RhcnRPZmZzZXQgfHwgIW1hcmtlclR5cGVzLmNv
bnRhaW5zKG1hcmtlci50eXBlKSkgeworICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDw9
IHN0YXJ0T2Zmc2V0IHx8ICFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgewog
ICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTIy
NSwxNiArMjYwLDE2IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJr
ZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICAvLyBhZGQgZWl0aGVyIG9mIHRoZSByZXN1bHRpbmcgc2xpY2VzIHRo
YXQgYXJlIGxlZnQgYWZ0ZXIgcmVtb3ZpbmcgdGFyZ2V0Ci0gICAgICAgIGlmIChzdGFydE9mZnNl
dCA+IG1hcmtlci5zdGFydE9mZnNldCkgeworICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPiBtYXJr
ZXIuc3RhcnRPZmZzZXQoKSkgewogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbmV3TGVmdCA9
IG1hcmtlcjsKLSAgICAgICAgICAgIG5ld0xlZnQuZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7Cisg
ICAgICAgICAgICBuZXdMZWZ0LnNldEVuZE9mZnNldChzdGFydE9mZnNldCk7CiAgICAgICAgICAg
ICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcihuZXdMZWZ0KSk7CiAgICAg
ICAgICAgICAvLyBpIG5vdyBwb2ludHMgdG8gdGhlIG5ld2x5LWluc2VydGVkIG5vZGUsIGJ1dCB3
ZSB3YW50IHRvIHNraXAgdGhhdCBvbmUKICAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQotICAg
ICAgICBpZiAobWFya2VyLmVuZE9mZnNldCA+IGVuZE9mZnNldCkgeworICAgICAgICBpZiAobWFy
a2VyLmVuZE9mZnNldCgpID4gZW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtl
ciBuZXdSaWdodCA9IG1hcmtlcjsKLSAgICAgICAgICAgIG5ld1JpZ2h0LnN0YXJ0T2Zmc2V0ID0g
ZW5kT2Zmc2V0OworICAgICAgICAgICAgbmV3UmlnaHQuc2V0U3RhcnRPZmZzZXQoZW5kT2Zmc2V0
KTsKICAgICAgICAgICAgIGxpc3QtPmluc2VydChpLCBSZW5kZXJlZERvY3VtZW50TWFya2VyKG5l
d1JpZ2h0KSk7CiAgICAgICAgICAgICAvLyBpIG5vdyBwb2ludHMgdG8gdGhlIG5ld2x5LWluc2Vy
dGVkIG5vZGUsIGJ1dCB3ZSB3YW50IHRvIHNraXAgdGhhdCBvbmUKICAgICAgICAgICAgIGkrKzsK
QEAgLTI3MCw3ICszMDUsNyBAQCBEb2N1bWVudE1hcmtlciogRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQoY29uc3QgSW50UG9pbnQmCiAgICAgICAgICAgICBS
ZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7CiAK
ICAgICAgICAgICAgIC8vIHNraXAgbWFya2VyIHRoYXQgaXMgd3JvbmcgdHlwZQotICAgICAgICAg
ICAgaWYgKG1hcmtlci50eXBlICE9IG1hcmtlclR5cGUpCisgICAgICAgICAgICBpZiAobWFya2Vy
LnR5cGUoKSAhPSBtYXJrZXJUeXBlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICBpZiAobWFya2VyLmNvbnRhaW5zKHBvaW50KSkKQEAgLTMxMSwxMSArMzQ2LDExIEBA
IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJz
SW5SYW5nZShSYW5nZSogcmFuZ2UsIERvCiAgICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4g
bWFya2VycyA9IG1hcmtlcnNGb3JOb2RlKG5vZGUpOwogICAgICAgICBWZWN0b3I8RG9jdW1lbnRN
YXJrZXI+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXJrZXJzLmVuZCgpOwogICAgICAgICBmb3Ig
KFZlY3RvcjxEb2N1bWVudE1hcmtlcj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFya2Vycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29u
dGFpbnMoaXQtPnR5cGUpKQorICAgICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5jb250YWlucyhp
dC0+dHlwZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChu
b2RlID09IHN0YXJ0Q29udGFpbmVyICYmIGl0LT5lbmRPZmZzZXQgPD0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHJhbmdlLT5zdGFydE9mZnNldCgpKSkKKyAgICAgICAgICAgIGlmIChub2RlID09IHN0
YXJ0Q29udGFpbmVyICYmIGl0LT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKG5vZGUgPT0gZW5kQ29udGFpbmVyICYmIGl0LT5zdGFydE9mZnNldCA+PSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UtPmVuZE9mZnNldCgpKSkKKyAgICAgICAgICAgIGlmIChu
b2RlID09IGVuZENvbnRhaW5lciAmJiBpdC0+c3RhcnRPZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocmFuZ2UtPmVuZE9mZnNldCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIGZvdW5kTWFya2Vycy5hcHBlbmQoKml0KTsKICAgICAgICAgfQpAQCAtMzQx
LDcgKzM3Niw3IEBAIFZlY3RvcjxJbnRSZWN0PiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bmRlcmVkUmVjdHNGb3JNYXJrZXJzKERvY3VtZW50TWFya2VyCiAgICAgICAgICAgICBjb25zdCBS
ZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7CiAK
ICAgICAgICAgICAgIC8vIHNraXAgbWFya2VyIHRoYXQgaXMgd3JvbmcgdHlwZQotICAgICAgICAg
ICAgaWYgKG1hcmtlci50eXBlICE9IG1hcmtlclR5cGUpCisgICAgICAgICAgICBpZiAobWFya2Vy
LnR5cGUoKSAhPSBtYXJrZXJUeXBlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICBpZiAoIW1hcmtlci5pc1JlbmRlcmVkKCkpCkBAIC0zOTMsNyArNDI4LDcgQEAgdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnNGcm9tTGlzdChOb2RlKiBu
b2RlLCBNYXJrZXJMaXN0KiBsaXMKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9
IGxpc3QtPmF0KGkpOwogCiAgICAgICAgICAgICAvLyBza2lwIG5vZGVzIHRoYXQgYXJlIG5vdCBv
ZiB0aGUgc3BlY2lmaWVkIHR5cGUKLSAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFp
bnMobWFya2VyLnR5cGUpKSB7CisgICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5z
KG1hcmtlci50eXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtNDQwLDcgKzQ3NSw3IEBAIHZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZXMgbWFya2VyCiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBsaXN0LT5h
dChpKTsKIAogICAgICAgICAgICAgLy8gc2tpcCBub2RlcyB0aGF0IGFyZSBub3Qgb2YgdGhlIHNw
ZWNpZmllZCB0eXBlCi0gICAgICAgICAgICBpZiAobWFya2VyVHlwZXMuY29udGFpbnMobWFya2Vy
LnR5cGUpKSB7CisgICAgICAgICAgICBpZiAobWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLnR5
cGUoKSkpIHsKICAgICAgICAgICAgICAgICBub2RlTmVlZHNSZXBhaW50ID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTUwMSwxMCArNTM2LDkgQEAgdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlKiBub2RlLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgaW4KICAgICBib29sIGRvY0RpcnR5ID0gZmFsc2U7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVuZGVy
ZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgIGlmIChtYXJr
ZXIuc3RhcnRPZmZzZXQgPj0gc3RhcnRPZmZzZXQpIHsKLSAgICAgICAgICAgIEFTU0VSVCgoaW50
KW1hcmtlci5zdGFydE9mZnNldCArIGRlbHRhID49IDApOwotICAgICAgICAgICAgbWFya2VyLnN0
YXJ0T2Zmc2V0ICs9IGRlbHRhOwotICAgICAgICAgICAgbWFya2VyLmVuZE9mZnNldCArPSBkZWx0
YTsKKyAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID49IHN0YXJ0T2Zmc2V0KSB7Cisg
ICAgICAgICAgICBBU1NFUlQoKGludCltYXJrZXIuc3RhcnRPZmZzZXQoKSArIGRlbHRhID49IDAp
OworICAgICAgICAgICAgbWFya2VyLnNoaWZ0T2Zmc2V0cyhkZWx0YSk7CiAgICAgICAgICAgICBk
b2NEaXJ0eSA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIE1hcmtlciBtb3ZlZCwgc28gcHJldmlv
dXNseS1jb21wdXRlZCByZW5kZXJlZCByZWN0YW5nbGUgaXMgbm93IGludmFsaWQKQEAgLTU0Niwx
NCArNTgwLDE0IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0
aXZlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0CiAgICAgICAgIERvY3VtZW50TWFy
a2VyJiBtYXJrZXIgPSBsaXN0LT5hdChpKTsKIAogICAgICAgICAvLyBNYXJrZXJzIGFyZSByZXR1
cm5lZCBpbiBvcmRlciwgc28gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmllZCBy
YW5nZS4KLSAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCA+PSBlbmRPZmZzZXQpCisgICAg
ICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA+PSBlbmRPZmZzZXQpCiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAvLyBTa2lwIG1hcmtlciB0aGF0IGlzIHdyb25nIHR5cGUgb3IgYmVm
b3JlIHRhcmdldC4KLSAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQgPCBzdGFydE9mZnNldCB8
fCBtYXJrZXIudHlwZSAhPSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKQorICAgICAgICBpZiAo
bWFya2VyLmVuZE9mZnNldCgpIDwgc3RhcnRPZmZzZXQgfHwgbWFya2VyLnR5cGUoKSAhPSBEb2N1
bWVudE1hcmtlcjo6VGV4dE1hdGNoKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
bWFya2VyLmFjdGl2ZU1hdGNoID0gYWN0aXZlOworICAgICAgICBtYXJrZXIuc2V0QWN0aXZlTWF0
Y2goYWN0aXZlKTsKICAgICAgICAgZG9jRGlydHkgPSB0cnVlOwogICAgIH0KIApAQCAtNTc4LDEx
ICs2MTIsMTEgQEAgYm9vbCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFu
Z2UqIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHkKICAgICAgICAgVmVjdG9yPERvY3Vt
ZW50TWFya2VyPiBtYXJrZXJzID0gbWFya2Vyc0Zvck5vZGUobm9kZSk7CiAgICAgICAgIFZlY3Rv
cjxEb2N1bWVudE1hcmtlcj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcmtlcnMuZW5kKCk7CiAg
ICAgICAgIGZvciAoVmVjdG9yPERvY3VtZW50TWFya2VyPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
YXJrZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCFtYXJr
ZXJUeXBlcy5jb250YWlucyhpdC0+dHlwZSkpCisgICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVz
LmNvbnRhaW5zKGl0LT50eXBlKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKG5vZGUgPT0gc3RhcnRDb250YWluZXIgJiYgaXQtPmVuZE9mZnNldCA8PSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpKQorICAgICAgICAgICAgaWYg
KG5vZGUgPT0gc3RhcnRDb250YWluZXIgJiYgaXQtPmVuZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihyYW5nZS0+c3RhcnRPZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBlbmRDb250YWluZXIgJiYgaXQtPnN0YXJ0T2Zm
c2V0ID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS0+ZW5kT2Zmc2V0KCkpKQorICAgICAg
ICAgICAgaWYgKG5vZGUgPT0gZW5kQ29udGFpbmVyICYmIGl0LT5zdGFydE9mZnNldCgpID49IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS0+ZW5kT2Zmc2V0KCkpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTYxMSwx
NiArNjQ1LDE2IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0
aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UqCiAgICAgICAgICAgICBEb2N1bWVu
dE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAgICAgIC8vIG1hcmtlcnMg
YXJlIHJldHVybmVkIGluIG9yZGVyLCBzbyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3Bl
Y2lmaWVkIHJhbmdlCi0gICAgICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID49IGVuZE9m
ZnNldCkKKyAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA+PSBlbmRPZmZzZXQp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIC8vIHNraXAgbWFya2VyIHRo
YXQgaXMgd3JvbmcgdHlwZSBvciBiZWZvcmUgdGFyZ2V0Ci0gICAgICAgICAgICBpZiAobWFya2Vy
LmVuZE9mZnNldCA8PSBzdGFydE9mZnNldCB8fCAhbWFya2VyVHlwZXMuY29udGFpbnMobWFya2Vy
LnR5cGUpKSB7CisgICAgICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDw9IHN0YXJ0T2Zm
c2V0IHx8ICFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgewogICAgICAgICAg
ICAgICAgIGkrKzsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgbWFya2VyLmRlc2NyaXB0aW9uID0gU3RyaW5nKCk7CisgICAgICAgICAgICBt
YXJrZXIuY2xlYXJEZXNjcmlwdGlvbigpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNjM0LDgg
KzY2OCwxMSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMoKSBj
b25zdAogICAgICAgICBOb2RlKiBub2RlID0gbm9kZUl0ZXJhdG9yLT5maXJzdC5nZXQoKTsKICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIlcCIsIG5vZGUpOwogICAgICAgICBNYXJrZXJMaXN0KiBs
aXN0ID0gbm9kZUl0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbWFya2Vy
SW5kZXggPSAwOyBtYXJrZXJJbmRleCA8IGxpc3QtPnNpemUoKTsgKyttYXJrZXJJbmRleCkKLSAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0oJWQpIiwgbGlzdC0+YXQobWFy
a2VySW5kZXgpLnR5cGUsIGxpc3QtPmF0KG1hcmtlckluZGV4KS5zdGFydE9mZnNldCwgbGlzdC0+
YXQobWFya2VySW5kZXgpLmVuZE9mZnNldCwgbGlzdC0+YXQobWFya2VySW5kZXgpLmFjdGl2ZU1h
dGNoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4
IDwgbGlzdC0+c2l6ZSgpOyArK21hcmtlckluZGV4KSB7CisgICAgICAgICAgICBjb25zdCBEb2N1
bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOworICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIgJWQ6WyVkOiVkXSglZCkiLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIu
c3RhcnRPZmZzZXQoKSwgbWFya2VyLmVuZE9mZnNldCgpLCBtYXJrZXIuYWN0aXZlTWF0Y2goKSk7
CisgICAgICAgIH0KKwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCmluZGV4IDFi
MTU4ZDhmNjNiODZhNThhMWM0YTRlNzczYjI0ZTVjYjBmMGQzZGIuLmVlNDExN2RkZjA3ZWU3OGE5
MTA0YjRlYzIzNWQ4MjJkY2YzOTc4ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTQ3LDggKzQ3LDEwIEBAIHB1YmxpYzoKICAgICB+RG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyKCkgeyBkZXRhY2goKTsgfQogCiAgICAgdm9pZCBkZXRhY2go
KTsKLSAgICB2b2lkIGFkZE1hcmtlcihSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
LCBTdHJpbmcgZGVzY3JpcHRpb24gPSBTdHJpbmcoKSk7Ci0gICAgdm9pZCBhZGRNYXJrZXIoTm9k
ZSosIGNvbnN0IERvY3VtZW50TWFya2VyJik7CisgICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7CisgICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7Cisg
ICAgdm9pZCBhZGRUZXh0TWF0Y2hNYXJrZXIoUmFuZ2UqLCBib29sIGFjdGl2ZU1hdGNoKTsKKwog
ICAgIHZvaWQgY29weU1hcmtlcnMoTm9kZSogc3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IGludCBsZW5ndGgsIE5vZGUqIGRzdE5vZGUsIGludCBkZWx0YSk7CiAgICAgYm9vbCBoYXNNYXJr
ZXJzKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzID0gRG9jdW1lbnRNYXJrZXI6
OkFsbE1hcmtlcnMoKSk7CiAKQEAgLTc5LDYgKzgxLDggQEAgcHVibGljOgogI2VuZGlmCiAKIHBy
aXZhdGU6CisgICAgdm9pZCBhZGRNYXJrZXIoTm9kZSosIGNvbnN0IERvY3VtZW50TWFya2VyJik7
CisKICAgICB0eXBlZGVmIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyPiBNYXJrZXJMaXN0
OwogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIE1hcmtlckxpc3QqPiBNYXJrZXJN
YXA7CiAgICAgYm9vbCBwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAKaW5kZXggZGQ1MDUxYjJkOWE1YzRlNjZhMTFmYjY2YmIyMzdhNGI2NDZmNWM0OC4uMGFiODNh
ODUxYTdhMzIwZTk3YjA0MDBiZGQyNmVlNjM2YmNmOGNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTM0OCw4ICszNDgsMTIgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFy
a2VycyhQYXNzUmVmUHRyPFRleHQ+IHAKICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtl
cnMgPSBtYXJrZXJDb250cm9sbGVyLT5tYXJrZXJzSW5SYW5nZShSYW5nZTo6Y3JlYXRlKGRvY3Vt
ZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0ICsgY291bnQpLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6QWxsTWFya2VycygpKTsKICAgICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBvZmZz
ZXQsIGNvdW50LCByZXBsYWNlbWVudFRleHQpOwogICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0ICsg
cmVwbGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1h
cmtlcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1hcmtlckNvbnRyb2xsZXItPmFkZE1hcmtlcihu
ZXdSYW5nZS5nZXQoKSwgbWFya2Vyc1tpXS50eXBlLCBtYXJrZXJzW2ldLmRlc2NyaXB0aW9uKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1hcmtlcnNbaV0uaGFzRGVzY3JpcHRpb24oKSkKKyAgICAgICAgICAgIG1hcmtlckNv
bnRyb2xsZXItPmFkZE1hcmtlcihuZXdSYW5nZS5nZXQoKSwgbWFya2Vyc1tpXS50eXBlKCksIG1h
cmtlcnNbaV0uZGVzY3JpcHRpb24oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1hcmtl
ckNvbnRyb2xsZXItPmFkZE1hcmtlcihuZXdSYW5nZS5nZXQoKSwgbWFya2Vyc1tpXS50eXBlKCkp
OworICAgIH0KIH0KIAogUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uT3V0
c2lkZVRhYlNwYW4oY29uc3QgUG9zaXRpb24mIHBvcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDc0OTkyMzAzMmNmZThmNGFm
ZDkzYmNmYTI1YjU5MGExNTJiZjA2NzEuLmFhYTZkOTU5N2I0YzllYmUwZThkNzFiMDBkNjJmOTUw
NTk2NjFmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rp
b25Db21tYW5kLmNwcApAQCAtNzYyLDkgKzc2Miw5IEBAIFN0cmluZyBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVj
CiAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0gZG9jdW1lbnQoKS0+bWFya2Vy
cygpLT5tYXJrZXJzSW5SYW5nZShyYW5nZU9mRmlyc3RDaGFyYWN0ZXIuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtl
cnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9
IG1hcmtlcnNbaV07Ci0gICAgICAgIGludCBzdGFydE9mZnNldCA9IG1hcmtlci5zdGFydE9mZnNl
dDsKKyAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbWFya2VyLnN0YXJ0T2Zmc2V0KCk7CiAgICAg
ICAgIGlmIChzdGFydE9mZnNldCA9PSBzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCku
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gbWFya2VyLmRlc2Ny
aXB0aW9uOworICAgICAgICAgICAgcmV0dXJuIG1hcmtlci5kZXNjcmlwdGlvbigpOwogICAgIH0K
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXgg
OWU3MDZjMDE1NmQyYThhMzcxZDE2ZjgzMjIyZjYwYWRkOTY5YjhmNS4uYzcwZGY5YzNiMjBiNmMw
MmY0ZTYzMTE4ZDEzNzEzMDA3NTZjNDkyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApA
QCAtMzIxOSw3ICszMjE5LDcgQEAgYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2Vy
Rm9yKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUsIGkKICAgICBWZWN0b3I8
RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkt
Pm1hcmtlcnNGb3JOb2RlKG5vZGUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2Vy
cy5zaXplKCk7ICsraSkgewogICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBtYXJrZXJz
W2ldOwotICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0IDw9IHN0YXJ0T2Zmc2V0ICYmIGVu
ZE9mZnNldCA8PSBtYXJrZXIuZW5kT2Zmc2V0ICYmIG1hcmtlci50eXBlID09IG1hcmtlclR5cGUp
CisgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA8PSBzdGFydE9mZnNldCAmJiBlbmRP
ZmZzZXQgPD0gbWFya2VyLmVuZE9mZnNldCgpICYmIG1hcmtlci50eXBlKCkgPT0gbWFya2VyVHlw
ZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKaW5kZXgg
MDNmYWUxMjE4MDk3MWRiMTdiOGFiZDNkNjVmYjhhMGZlZTA4ODczOS4uMjZkZmIxMGRlYWNmYTJl
OTA5YWY4MmIwOGE2M2FlODAxNzUwNGI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC00MDksMTcgKzQw
OSwxNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdAogICAgICAgICBjb25zdCBEb2N1bWVudE1h
cmtlciYgbWFya2VyID0gbWFya2Vyc1tpXTsKICAgICAgICAgaWYgKCFzaG91bGRTdGFydFRpbWVy
Rm9yKG1hcmtlciwgZW5kT2Zmc2V0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBS
ZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQo
KSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0LCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KTsKKyAg
ICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRv
Y3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zm
c2V0KCkpOwogICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdl
LmdldCgpKTsKICAgICAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCA9IHdvcmRSYW5nZTsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vk
U3RyaW5nID0gY3VycmVudFdvcmQ7Ci0gICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpCisgICAgICAgIGlmIChtYXJrZXIudHlwZSgpID09IERvY3VtZW50
TWFya2VyOjpTcGVsbGluZykKICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIo
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50
U3RyaW5nID0gbWFya2VyLmRlc2NyaXB0aW9uOworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gbWFya2VyLmRlc2NyaXB0aW9uKCk7CiAgICAgICAg
ICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZVJldmVyc2lvbik7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAppbmRleCA3YjkzNjg1MjBkMzc3
NWJjMGM5NzE5ZmU1YzhjZmQyZjkyZWU3ZWM5Li44MTU3NDhmNDg0MmRlNTc4YWJkOWQ4N2Q4YzMy
MTE0MmUzZDc0YWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaApAQCAtMTI4LDggKzEyOCw4IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIHNob3VsZFN0YXJ0VGltZXJGb3IoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtl
ciwgaW50IGVuZE9mZnNldCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAoKChtYXJrZXIu
dHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci5kZXNjcmlwdGlv
bi5pc051bGwoKSkgCi0gICAgICAgICAgICAgICAgIHx8IG1hcmtlci50eXBlID09IERvY3VtZW50
TWFya2VyOjpTcGVsbGluZykgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0KSA9
PSBlbmRPZmZzZXQpOworICAgICAgICByZXR1cm4gKCgobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci5kZXNjcmlwdGlvbigpLmlzTnVsbCgpKSAK
KyAgICAgICAgICAgICAgICAgfHwgbWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcpICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVuZE9mZnNldCgpKSA9PSBlbmRPZmZz
ZXQpOwogICAgIH0KIAogICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggNzFkZmVhZGZjMTgxNmUwOWE5ODA4
ZDU1NWEwMzNmN2ExNDc1MDFlYy4uZDVhMWI1Yzg1OGNjNDBlMGZmNTc3Y2UyYWMxYzE4MDM0MDYx
ZDBkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAt
MjAxLDcgKzIwMSw3IEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0OjpzcGVsbGluZ1Rvb2xUaXAoVGV4
dERpcmVjdGlvbiYgZGlyKSBjb25zdAogCiAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBtX2lubmVyTm9uU2hhcmVkTm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgZGlyID0gcmVuZGVy
ZXItPnN0eWxlKCktPmRpcmVjdGlvbigpOwotICAgIHJldHVybiBtYXJrZXItPmRlc2NyaXB0aW9u
OworICAgIHJldHVybiBtYXJrZXItPmRlc2NyaXB0aW9uKCk7CiB9CiAKIFN0cmluZyBIaXRUZXN0
UmVzdWx0OjpyZXBsYWNlZFN0cmluZygpIGNvbnN0CkBAIC0yMTUsNyArMjE1LDcgQEAgU3RyaW5n
IEhpdFRlc3RSZXN1bHQ6OnJlcGxhY2VkU3RyaW5nKCkgY29uc3QKICAgICBpZiAoIW1hcmtlcikK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIAotICAgIHJldHVybiBtYXJrZXItPmRlc2Ny
aXB0aW9uOworICAgIHJldHVybiBtYXJrZXItPmRlc2NyaXB0aW9uKCk7CiB9ICAgIAogICAgIAog
U3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCAxY2VlMWZjZTRk
ZmZlYmU0NzI5M2JkNTFiNTI2ZGQ5NzdjNWUzNjhiLi4wZWRhN2ViZjRkMzEwNWMzMmRhNzFhZjg3
MDc4OTE2ZTEzODQ4MjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCkBAIC05OTIsMTYgKzk5MiwxNiBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3Bl
bGxpbmdPckdyYW1tYXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYQogCiAg
ICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBtZWFzdXJlIHRleHQKICAgICBib29s
IG1hcmtlclNwYW5zV2hvbGVCb3ggPSB0cnVlOwotICAgIGlmIChtX3N0YXJ0IDw9IChpbnQpbWFy
a2VyLnN0YXJ0T2Zmc2V0KQorICAgIGlmIChtX3N0YXJ0IDw9IChpbnQpbWFya2VyLnN0YXJ0T2Zm
c2V0KCkpCiAgICAgICAgIG1hcmtlclNwYW5zV2hvbGVCb3ggPSBmYWxzZTsKLSAgICBpZiAoKGVu
ZCgpICsgMSkgIT0gbWFya2VyLmVuZE9mZnNldCkgICAgICAvLyBlbmQgcG9pbnRzIGF0IHRoZSBs
YXN0IGNoYXIsIG5vdCBwYXN0IGl0CisgICAgaWYgKChlbmQoKSArIDEpICE9IG1hcmtlci5lbmRP
ZmZzZXQoKSkgLy8gZW5kIHBvaW50cyBhdCB0aGUgbGFzdCBjaGFyLCBub3QgcGFzdCBpdAogICAg
ICAgICBtYXJrZXJTcGFuc1dob2xlQm94ID0gZmFsc2U7CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAh
PSBjTm9UcnVuY2F0aW9uKQogICAgICAgICBtYXJrZXJTcGFuc1dob2xlQm94ID0gZmFsc2U7CiAK
ICAgICBpZiAoIW1hcmtlclNwYW5zV2hvbGVCb3ggfHwgZ3JhbW1hcikgewotICAgICAgICBpbnQg
c3RhcnRQb3NpdGlvbiA9IG1heDxpbnQ+KG1hcmtlci5zdGFydE9mZnNldCAtIG1fc3RhcnQsIDAp
OwotICAgICAgICBpbnQgZW5kUG9zaXRpb24gPSBtaW48aW50PihtYXJrZXIuZW5kT2Zmc2V0IC0g
bV9zdGFydCwgbV9sZW4pOworICAgICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IG1heDxpbnQ+KG1h
cmtlci5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgMCk7CisgICAgICAgIGludCBlbmRQb3NpdGlv
biA9IG1pbjxpbnQ+KG1hcmtlci5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsIG1fbGVuKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikKICAgICAgICAg
ICAgIGVuZFBvc2l0aW9uID0gbWluPGludD4oZW5kUG9zaXRpb24sIG1fdHJ1bmNhdGlvbik7CkBA
IC0xMDQzLDcgKzEwNDMsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdy
YW1tYXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYQogICAgICAgICAvLyBJ
biBsYXJnZXIgZm9udHMsIHRob3VnaCwgcGxhY2UgdGhlIHVuZGVybGluZSB1cCBuZWFyIHRoZSBi
YXNlbGluZSB0byBwcmV2ZW50IGEgYmlnIGdhcC4KICAgICAgICAgdW5kZXJsaW5lT2Zmc2V0ID0g
YmFzZWxpbmUgKyAyOwogICAgIH0KLSAgICBwdC0+ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoRmxv
YXRQb2ludChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyB1bmRlcmxpbmVP
ZmZzZXQpLCB3aWR0aCwgdGV4dENoZWNraW5nTGluZVN0eWxlRm9yTWFya2VyVHlwZShtYXJrZXIu
dHlwZSkpOworICAgIHB0LT5kcmF3TGluZUZvclRleHRDaGVja2luZyhGbG9hdFBvaW50KGJveE9y
aWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRo
LCB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JNYXJrZXJUeXBlKG1hcmtlci50eXBlKCkpKTsKIH0K
IAogdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRl
eHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IERvY3VtZW50TWFya2Vy
JiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKQEAgLTEwNTMs
OCArMTA1Myw4IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3Jh
cGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYKICAgICBpbnQgZGVsdGFZID0gcmVu
ZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9u
Qm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3Ao
KTsKICAgICBpbnQgc2VsSGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7CiAKLSAgICBpbnQgc1Bv
cyA9IG1heChtYXJrZXIuc3RhcnRPZmZzZXQgLSBtX3N0YXJ0LCAodW5zaWduZWQpMCk7Ci0gICAg
aW50IGVQb3MgPSBtaW4obWFya2VyLmVuZE9mZnNldCAtIG1fc3RhcnQsICh1bnNpZ25lZCltX2xl
bik7ICAgIAorICAgIGludCBzUG9zID0gbWF4KG1hcmtlci5zdGFydE9mZnNldCgpIC0gbV9zdGFy
dCwgKHVuc2lnbmVkKTApOworICAgIGludCBlUG9zID0gbWluKG1hcmtlci5lbmRPZmZzZXQoKSAt
IG1fc3RhcnQsICh1bnNpZ25lZCltX2xlbik7ICAgIAogICAgIFRleHRSdW4gcnVuKHRleHRSZW5k
ZXJlcigpLT50ZXh0KCktPmNoYXJhY3RlcnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVy
ZXIoKS0+YWxsb3dUYWJzKCksIHRleHRQb3MoKSwgbV9leHBhbnNpb24sIGV4cGFuc2lvbkJlaGF2
aW9yKCksIGRpcmVjdGlvbigpLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVy
ZWQoKSk7CiAgICAgCiAgICAgLy8gQWx3YXlzIGNvbXB1dGUgYW5kIHN0b3JlIHRoZSByZWN0IGFz
c29jaWF0ZWQgd2l0aCB0aGlzIG1hcmtlci4gVGhlIGNvbXB1dGVkIHJlY3QgaXMgaW4gYWJzb2x1
dGUgY29vcmRpbmF0ZXMuCkBAIC0xMDY0LDcgKzEwNjQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9p
bnQmCiAgICAgCiAgICAgLy8gT3B0aW9uYWxseSBoaWdobGlnaHQgdGhlIHRleHQKICAgICBpZiAo
cmVuZGVyZXIoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxp
Z2h0ZWQoKSkgewotICAgICAgICBDb2xvciBjb2xvciA9IG1hcmtlci5hY3RpdmVNYXRjaCA/Cisg
ICAgICAgIENvbG9yIGNvbG9yID0gbWFya2VyLmFjdGl2ZU1hdGNoKCkgPwogICAgICAgICAgICAg
cmVuZGVyZXIoKS0+dGhlbWUoKS0+cGxhdGZvcm1BY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29s
b3IoKSA6CiAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5wbGF0Zm9ybUluYWN0aXZl
VGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqcHQpOwpAQCAtMTA4MCw4ICsxMDgwLDggQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKGNvbnN0IERvY3VtZW50TWFy
a2VyJiBtYXJrZXIKICAgICBpbnQgeSA9IHNlbGVjdGlvblRvcCgpOwogICAgIGludCBoID0gc2Vs
ZWN0aW9uSGVpZ2h0KCk7CiAgICAgCi0gICAgaW50IHNQb3MgPSBtYXgobWFya2VyLnN0YXJ0T2Zm
c2V0IC0gbV9zdGFydCwgKHVuc2lnbmVkKTApOwotICAgIGludCBlUG9zID0gbWluKG1hcmtlci5l
bmRPZmZzZXQgLSBtX3N0YXJ0LCAodW5zaWduZWQpbV9sZW4pOyAgICAKKyAgICBpbnQgc1BvcyA9
IG1heChtYXJrZXIuc3RhcnRPZmZzZXQoKSAtIG1fc3RhcnQsICh1bnNpZ25lZCkwKTsKKyAgICBp
bnQgZVBvcyA9IG1pbihtYXJrZXIuZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWduZWQpbV9s
ZW4pOyAgICAKICAgICBUZXh0UnVuIHJ1bih0ZXh0UmVuZGVyZXIoKS0+dGV4dCgpLT5jaGFyYWN0
ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0
UG9zKCksIG1fZXhwYW5zaW9uLCBleHBhbnNpb25CZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgbV9k
aXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpOwogICAgIEludFBvaW50IHN0
YXJ0UG9pbnQgPSBJbnRQb2ludChtX3gsIHkpOwogICAgIApAQCAtMTEwNSw3ICsxMTA1LDcgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQq
IHB0LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFy
a2VyID0gKm1hcmtlckl0OwogICAgICAgICAKICAgICAgICAgLy8gUGFpbnQgZWl0aGVyIHRoZSBi
YWNrZ3JvdW5kIG1hcmtlcnMgb3IgdGhlIGZvcmVncm91bmQgbWFya2VycywgYnV0IG5vdCBib3Ro
Ci0gICAgICAgIHN3aXRjaCAobWFya2VyLnR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChtYXJrZXIu
dHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpHcmFtbWFyOgogICAg
ICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6CiAgICAgICAgICAgICBjYXNl
IERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yOgpAQCAtMTEyMSwxNyArMTEyMSwx
NyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29u
dGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCA8PSBzdGFydCgpKQorICAg
ICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDw9IHN0YXJ0KCkpCiAgICAgICAgICAgICAvLyBt
YXJrZXIgaXMgY29tcGxldGVseSBiZWZvcmUgdGhpcyBydW4uICBUaGlzIG1pZ2h0IGJlIGEgbWFy
a2VyIHRoYXQgc2l0cyBiZWZvcmUgdGhlCiAgICAgICAgICAgICAvLyBmaXJzdCBydW4gd2UgZHJh
dywgb3IgbWFya2VycyB0aGF0IHdlcmUgd2l0aGluIHJ1bnMgd2Ugc2tpcHBlZCBkdWUgdG8gdHJ1
bmNhdGlvbi4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKG1h
cmtlci5zdGFydE9mZnNldCA+IGVuZCgpKQorICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0
KCkgPiBlbmQoKSkKICAgICAgICAgICAgIC8vIG1hcmtlciBpcyBjb21wbGV0ZWx5IGFmdGVyIHRo
aXMgcnVuLCBiYWlsLiAgQSBsYXRlciBydW4gd2lsbCBwYWludCBpdC4KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICAgICAgLy8gbWFya2VyIGludGVyc2VjdHMgdGhpcyBydW4uICBQ
YWludCBpdC4KLSAgICAgICAgc3dpdGNoIChtYXJrZXIudHlwZSkgeworICAgICAgICBzd2l0Y2gg
KG1hcmtlci50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
aW5nOgogICAgICAgICAgICAgICAgIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIocHQsIGJv
eE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVG
bG93Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0Jv
eC5jcHAKaW5kZXggMWQwMDQzYmJlNTVlY2I2YzZhNDhkOTEwMjI3NzRhZWFkZjg4ZmEyNy4uYTAw
Mjg2NzEwMTJlY2IyYjlmMjlmYjUyMWZjZDI0ZGY5YzhiMTUxZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCkBAIC05OSw3ICs5OSw3
IEBAIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JS
ZW5kZXJlcihSZW5kZXJTVkdJbmxpbmVUZXh0CiAgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2Vy
JiBtYXJrZXIgPSAqbWFya2VySXQ7CiAKICAgICAgICAgLy8gU1ZHIGlzIG9ubHkgaW50ZXJlc3N0
ZWQgaW4gdGhlIFRleHRNYXRjaCBtYXJrZXIsIGZvciBub3cuCi0gICAgICAgIGlmIChtYXJrZXIu
dHlwZSAhPSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKQorICAgICAgICBpZiAobWFya2VyLnR5
cGUoKSAhPSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgRmxvYXRSZWN0IG1hcmtlclJlY3Q7CkBAIC0xMDksOCArMTA5LDggQEAgdm9p
ZCBTVkdJbmxpbmVGbG93Qm94Ojpjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdEZvclJlbmRlcmVy
KFJlbmRlclNWR0lubGluZVRleHQKIAogICAgICAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogdGV4
dEJveCA9IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihib3gpOwogCi0gICAgICAgICAg
ICBpbnQgbWFya2VyU3RhcnRQb3NpdGlvbiA9IG1heDxpbnQ+KG1hcmtlci5zdGFydE9mZnNldCAt
IHRleHRCb3gtPnN0YXJ0KCksIDApOwotICAgICAgICAgICAgaW50IG1hcmtlckVuZFBvc2l0aW9u
ID0gbWluPGludD4obWFya2VyLmVuZE9mZnNldCAtIHRleHRCb3gtPnN0YXJ0KCksIHRleHRCb3gt
PmxlbigpKTsKKyAgICAgICAgICAgIGludCBtYXJrZXJTdGFydFBvc2l0aW9uID0gbWF4PGludD4o
bWFya2VyLnN0YXJ0T2Zmc2V0KCkgLSB0ZXh0Qm94LT5zdGFydCgpLCAwKTsKKyAgICAgICAgICAg
IGludCBtYXJrZXJFbmRQb3NpdGlvbiA9IG1pbjxpbnQ+KG1hcmtlci5lbmRPZmZzZXQoKSAtIHRl
eHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPmxlbigpKTsKIAogICAgICAgICAgICAgaWYgKG1hcmtl
clN0YXJ0UG9zaXRpb24gPj0gbWFya2VyRW5kUG9zaXRpb24pCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDE5MjE5NmU0YTkyZTUxMmQ0OWUw
NThmM2JlODA1MDExZDVlZGJhZWUuLmMyNjA2MWI5Zjk5MmUzMzlhY2M2NWU3ZTNkMDQ0MGMzYzZm
NzdkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEt
MDUtMTcgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgVG9ueSBDaGFuZy4KKworICAgICAgICBbUmVmYWN0b3JpbmddIE1lbWJlciB2YXJp
YWJsZXMgb2YgRG9jdW1lbnRNYXJrZXIgc2hvdWxkIGJlIGVuY2Fwc3VsYXRlZC4gICAgICAgIAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY4MTQKKwor
ICAgICAgICBNb3ZlZCBhZGRNYXJrZXIoKSBpbXBsZW1lbnRhdGlvbiB0bworICAgICAgICBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZFRleHRNYXRjaE1hcmtlcigpLgorICAg
ICAgICAKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjphZGRNYXJrZXIpOgorCiAyMDExLTA1LTE3ICBUYW8gQmFpICA8bWljaGFl
bGJhaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggM2VjZGZk
OTJlMTUxOTRlMGFkMDQyM2M0Mjg2YWEwNGM4ZDAwZDNkMS4uNTI5N2U5ODU3ZDc4MWVhOTgxZTg3
MTRkNWVkYWU5NDY4ODkwMDJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuY3BwCkBAIC0yMjMyLDM3ICsyMjMyLDcgQEAgdm9pZCBXZWJGcmFtZUltcGw6Omlu
dmFsaWRhdGVBcmVhKEFyZWFUb0ludmFsaWRhdGUgYXJlYSkKIAogdm9pZCBXZWJGcmFtZUltcGw6
OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIGJvb2wgYWN0aXZlTWF0Y2gpCiB7Ci0gICAgLy8gVXNl
IGEgVGV4dEl0ZXJhdG9yIHRvIHZpc2l0IHRoZSBwb3RlbnRpYWxseSBtdWx0aXBsZSBub2RlcyB0
aGUgcmFuZ2UKLSAgICAvLyBjb3ZlcnMuCi0gICAgVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFu
Z2UpOwotICAgIGZvciAoOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2Uo
KSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2Uo
KTsKLSAgICAgICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0KLSAgICAgICAgRG9jdW1lbnRNYXJrZXIg
bWFya2VyID0gewotICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCwKLSAgICAg
ICAgICAgIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwKLSAgICAgICAgICAgIHRl
eHRQaWVjZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksCi0gICAgICAgICAgICAiIiwKLSAgICAgICAg
ICAgIGFjdGl2ZU1hdGNoCi0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZz
ZXQgPiBtYXJrZXIuc3RhcnRPZmZzZXQpIHsKLSAgICAgICAgICAgIC8vIEZpbmQgdGhlIG5vZGUg
dG8gYWRkIGEgbWFya2VyIHRvIGFuZCBhZGQgaXQuCi0gICAgICAgICAgICBOb2RlKiBub2RlID0g
dGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOwotICAgICAgICAgICAgZnJhbWUo
KS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIobm9kZSwgbWFya2VyKTsKLQotICAg
ICAgICAgICAgLy8gUmVuZGVyZWQgcmVjdHMgZm9yIG1hcmtlcnMgaW4gV2ViS2l0IGFyZSBub3Qg
cG9wdWxhdGVkIHVudGlsIGVhY2ggdGltZQotICAgICAgICAgICAgLy8gdGhlIG1hcmtlcnMgYXJl
IHBhaW50ZWQuIEhvd2V2ZXIsIHdlIG5lZWQgaXQgdG8gaGFwcGVuIHNvb25lciwgYmVjYXVzZQot
ICAgICAgICAgICAgLy8gdGhlIHdob2xlIHB1cnBvc2Ugb2YgdGlja21hcmtzIG9uIHRoZSBzY3Jv
bGxiYXIgaXMgdG8gc2hvdyB3aGVyZQotICAgICAgICAgICAgLy8gbWF0Y2hlcyBvZmYtc2NyZWVu
IGFyZSAodGhhdCBoYXZlbid0IGJlZW4gcGFpbnRlZCB5ZXQpLgotICAgICAgICAgICAgVmVjdG9y
PERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
LT5tYXJrZXJzRm9yTm9kZShub2RlKTsKLSAgICAgICAgICAgIGZyYW1lKCktPmRvY3VtZW50KCkt
Pm1hcmtlcnMoKS0+c2V0UmVuZGVyZWRSZWN0Rm9yTWFya2VyKAotICAgICAgICAgICAgICAgIHRl
eHRQaWVjZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwKLSAgICAgICAgICAgICAgICBtYXJr
ZXJzW21hcmtlcnMuc2l6ZSgpIC0gMV0sCi0gICAgICAgICAgICAgICAgcmFuZ2UtPmJvdW5kaW5n
Qm94KCkpOwotICAgICAgICB9Ci0gICAgfQorICAgIGZyYW1lKCktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+YWRkVGV4dE1hdGNoTWFya2VyKHJhbmdlLCBhY3RpdmVNYXRjaCk7CiB9CiAKIHZvaWQg
V2ViRnJhbWVJbXBsOjpzZXRNYXJrZXJBY3RpdmUoUmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2ZSkK
</data>
<flag name="review"
          id="87088"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>