<?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>41300</bug_id>
          
          <creation_ts>2010-06-28 14:00:47 -0700</creation_ts>
          <short_desc>Implement OpenGL ES 2.0 semantics for vertex attribute 0</short_desc>
          <delta_ts>2010-07-03 15:03:54 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41572</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gman</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>243883</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-28 14:00:47 -0700</bug_when>
    <thetext>Vertex attribute 0 has special semantics in desktop OpenGL, but in OpenGL ES 2.0 it behaves the same as any other generic vertex attribute. The differences are as follows:

 - On desktop GL, if vertex attribute 0 is not enabled as an array, then no rendering results are produced.
 - On desktop GL, vertex attribute 0 does not have any persistent state -- that is, it can not be set to a constant value.

The WebGL working group decided during a recent face-to-face that the OpenGL ES 2.0 semantics are the best ones to implement because they are the most consistent and easiest to explain. This requires a certain amount of emulation to be performed, but is tractable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245034</commentid>
    <comment_count>1</comment_count>
      <attachid>60175</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-30 17:48:00 -0700</bug_when>
    <thetext>Created attachment 60175
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245044</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-30 18:19:10 -0700</bug_when>
    <thetext>Attachment 60175 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/html/canvas/WebGLProgram.cpp:89:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245045</commentid>
    <comment_count>3</comment_count>
      <attachid>60179</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-30 18:26:18 -0700</bug_when>
    <thetext>Created attachment 60179
revised patch: fix style issue

I really DISLIKE this (x == 0) has to be written as (!x).

Sometimes 0 is just a number instead of the equivalence of false/null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245060</commentid>
    <comment_count>4</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-30 19:37:51 -0700</bug_when>
    <thetext>Comments from Gregg Tavares &lt;gman@google.com&gt;

http://wkrietveld.appspot.com/41300/diff/1/8
File WebCore/html/canvas/WebGLRenderingContext.cpp (right):

http://wkrietveld.appspot.com/41300/diff/1/8#newcode1693
WebCore/html/canvas/WebGLRenderingContext.cpp:1693: if (!isGLES2Compliant() &amp;&amp;
!index &amp;&amp; m_vertexAttribState[0].bufferBinding == m_vertexAttrib0Buffer
Is the check &quot;m_vertexAttribState[0].bufferBinding == m_vertexAttrib0Buffer&quot; 
valid? I know initially that&apos;s true but if I go

bindBuffer(ARRAY_BUFFER, someBuffer);
ctx.vertexAttribPointer(0, 4, ctx.FLOAT, FALSE, 0, 0);
ctx.deleteBuffer(ARRAY_BUFFER, someBuffer);

What will this return?

http://wkrietveld.appspot.com/41300/diff/1/8#newcode1714
WebCore/html/canvas/WebGLRenderingContext.cpp:1714: return
WebGLGetInfo(m_vertexAttribState[index].stride);
This stride is wrong. Below in VertexAttribPointer you store the validated
stride, not the user&apos;s stride.

http://wkrietveld.appspot.com/41300/diff/1/8#newcode3725
WebCore/html/canvas/WebGLRenderingContext.cpp:3725:
m_vertexAttribState[index].value[ii] = v[ii];
The spec says unset values are set to 0.0f except the last value which is set to
1.0f

That means this should probably be add

before this loop OR do something after to make unset values get set back to the
correct values.
m_vertexAttribState[index].value[0] = 0.0f;
m_vertexAttribState[index].value[1] = 0.0f;
m_vertexAttribState[index].value[2] = 0.0f;
m_vertexAttribState[index].value[3] = 1.0f;

same for the others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245064</commentid>
    <comment_count>5</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-30 20:02:31 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comments from Gregg Tavares &lt;gman@google.com&gt;
&gt; 
&gt; http://wkrietveld.appspot.com/41300/diff/1/8
&gt; File WebCore/html/canvas/WebGLRenderingContext.cpp (right):
&gt; 
&gt; http://wkrietveld.appspot.com/41300/diff/1/8#newcode1693
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:1693: if (!isGLES2Compliant() &amp;&amp;
&gt; !index &amp;&amp; m_vertexAttribState[0].bufferBinding == m_vertexAttrib0Buffer
&gt; Is the check &quot;m_vertexAttribState[0].bufferBinding == m_vertexAttrib0Buffer&quot; 
&gt; valid? I know initially that&apos;s true but if I go
&gt; 
&gt; bindBuffer(ARRAY_BUFFER, someBuffer);
&gt; ctx.vertexAttribPointer(0, 4, ctx.FLOAT, FALSE, 0, 0);
&gt; ctx.deleteBuffer(ARRAY_BUFFER, someBuffer);
&gt; 
&gt; What will this return?

So in this case, there is another condition says !m_vertexAttribState[index].bufferBinding-&gt;object(), which will be true if the buffer has been deleted.

Will fix the rest.

&gt; 
&gt; http://wkrietveld.appspot.com/41300/diff/1/8#newcode1714
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:1714: return
&gt; WebGLGetInfo(m_vertexAttribState[index].stride);
&gt; This stride is wrong. Below in VertexAttribPointer you store the validated
&gt; stride, not the user&apos;s stride.
&gt; 
&gt; http://wkrietveld.appspot.com/41300/diff/1/8#newcode3725
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:3725:
&gt; m_vertexAttribState[index].value[ii] = v[ii];
&gt; The spec says unset values are set to 0.0f except the last value which is set to
&gt; 1.0f
&gt; 
&gt; That means this should probably be add
&gt; 
&gt; before this loop OR do something after to make unset values get set back to the
&gt; correct values.
&gt; m_vertexAttribState[index].value[0] = 0.0f;
&gt; m_vertexAttribState[index].value[1] = 0.0f;
&gt; m_vertexAttribState[index].value[2] = 0.0f;
&gt; m_vertexAttribState[index].value[3] = 1.0f;
&gt; 
&gt; same for the others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245069</commentid>
    <comment_count>6</comment_count>
      <attachid>60189</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-30 20:19:13 -0700</bug_when>
    <thetext>Created attachment 60189
revised patch: responding to gman&apos;s review

Revised according to Gregg&apos;s review.  Also add some code in deleteBuffer() to reset the vertex attrib 0 states if the deleted buffer was its current binding buffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245137</commentid>
    <comment_count>7</comment_count>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2010-06-30 23:43:20 -0700</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245624</commentid>
    <comment_count>8</comment_count>
      <attachid>60306</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-01 15:59:55 -0700</bug_when>
    <thetext>Created attachment 60306
revised patch: add a new test gl-vertex-attrib.html

This patch is exactly the same as the previous one except the added test gl-vertex-attrib.html.

The test is copied from conformance tests.

It is necessary to add this test because it tests against the modifications this patch made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245629</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-01 16:11:16 -0700</bug_when>
    <thetext>Generally looks good. A few issues.


WebCore/html/canvas/WebGLRenderingContext.cpp:3045
 +      if (index || isGLES2Compliant()) {
Throughout this patch I find this structure really confusing. Could you please restructure it like this:

if (!index &amp;&amp; !isGLES2Compliant() {
  // vertex attrib 0 emulation code, likely containing early return.
}
// Normal case


WebCore/html/canvas/WebGLRenderingContext.cpp:3157
 +          m_context-&gt;synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
This switch duplicates code -- you should use sizeInBytes to determine the element size and return early if the result is &lt;= 0. (sizeInBytes already checks for and raises INVALID_ENUM.)


WebCore/html/canvas/WebGLRenderingContext.cpp:3729
 +          switch (size) {
You should be switching on expectedSize here.


WebCore/html/canvas/WebGLRenderingContext.cpp:3743
 +          cleanupAfterGraphicsCall(false);
Did you mean to return early here?

WebCore/html/canvas/WebGLRenderingContext.cpp:3748
 +      m_vertexAttribState[index].value[3] = 1.0f;
Can you factor this out into an &quot;initValue()&quot; method on the VertexAttribState class, and call that from the constructor as well?


WebCore/html/canvas/WebGLRenderingContext.h:373
 +                  value[3] = 1.0f;
Add and call &quot;initValue()&quot; instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245657</commentid>
    <comment_count>10</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-01 16:48:58 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Generally looks good. A few issues.
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:3045
&gt;  +      if (index || isGLES2Compliant()) {
&gt; Throughout this patch I find this structure really confusing. Could you please restructure it like this:
&gt; 
&gt; if (!index &amp;&amp; !isGLES2Compliant() {
&gt;   // vertex attrib 0 emulation code, likely containing early return.
&gt; }
&gt; // Normal case

Actually the situation is the opposite: if it&apos;s vertex attrib 0 and it&apos;s GL, we skip the call of glVertexAttrib*().

I added comments above these logics and made it like this for readability:

if (index || (!index &amp;&amp; isGLES2Compliant())

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:3157
&gt;  +          m_context-&gt;synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
&gt; This switch duplicates code -- you should use sizeInBytes to determine the element size and return early if the result is &lt;= 0. (sizeInBytes already checks for and raises INVALID_ENUM.)

Done.

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:3729
&gt;  +          switch (size) {
&gt; You should be switching on expectedSize here.

Done.

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:3743
&gt;  +          cleanupAfterGraphicsCall(false);
&gt; Did you mean to return early here?

No.  Explained above.

&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:3748
&gt;  +      m_vertexAttribState[index].value[3] = 1.0f;
&gt; Can you factor this out into an &quot;initValue()&quot; method on the VertexAttribState class, and call that from the constructor as well?

Done.

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.h:373
&gt;  +                  value[3] = 1.0f;
&gt; Add and call &quot;initValue()&quot; instead.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245658</commentid>
    <comment_count>11</comment_count>
      <attachid>60315</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-01 16:49:36 -0700</bug_when>
    <thetext>Created attachment 60315
revised patch : responding to Ken Russell&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245664</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-01 17:04:12 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Generally looks good. A few issues.
&gt; &gt; 
&gt; &gt; 
&gt; &gt; WebCore/html/canvas/WebGLRenderingContext.cpp:3045
&gt; &gt;  +      if (index || isGLES2Compliant()) {
&gt; &gt; Throughout this patch I find this structure really confusing. Could you please restructure it like this:
&gt; &gt; 
&gt; &gt; if (!index &amp;&amp; !isGLES2Compliant() {
&gt; &gt;   // vertex attrib 0 emulation code, likely containing early return.
&gt; &gt; }
&gt; &gt; // Normal case
&gt; 
&gt; Actually the situation is the opposite: if it&apos;s vertex attrib 0 and it&apos;s GL, we skip the call of glVertexAttrib*().
&gt; 
&gt; I added comments above these logics and made it like this for readability:
&gt; 
&gt; if (index || (!index &amp;&amp; isGLES2Compliant())

I understand what you&apos;re doing. I was suggesting to turn the logic around and put the fall-through case in the &quot;if&quot; clause. However I didn&apos;t realize you&apos;re always using the value in the VertexAttribState for getVertexAttrib. In that case the logic is cleaner the way you had it; sorry, but can you please put it back the way it was?

A couple more issues:

WebCore/ChangeLog:21
 +          (WebCore::WebGLRenderingContext::getVertexAttrib): Use cached value instead call glGetVertextAtrtrib.
Typo in glGetVertexAttrib. Also &quot;instead of calling&quot;.


WebCore/html/canvas/WebGLRenderingContext.cpp:3741
 +      for (int ii = 0; ii &lt; size; ++ii)
This loop needs to be from 0..expectedSize as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245674</commentid>
    <comment_count>13</comment_count>
      <attachid>60319</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-01 17:21:33 -0700</bug_when>
    <thetext>Created attachment 60319
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245676</commentid>
    <comment_count>14</comment_count>
      <attachid>60319</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-01 17:29:18 -0700</bug_when>
    <thetext>Comment on attachment 60319
revised patch

Looks good. Thanks for your patience with the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245923</commentid>
    <comment_count>15</comment_count>
      <attachid>60319</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-07-02 08:45:01 -0700</bug_when>
    <thetext>Comment on attachment 60319
revised patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245933</commentid>
    <comment_count>16</comment_count>
      <attachid>60319</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-02 09:35:14 -0700</bug_when>
    <thetext>Comment on attachment 60319
revised patch

Clearing flags on attachment: 60319

Committed r62385: &lt;http://trac.webkit.org/changeset/62385&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245934</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-02 09:35:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60175</attachid>
            <date>2010-06-30 17:48:00 -0700</date>
            <delta_ts>2010-06-30 18:26:18 -0700</delta_ts>
            <desc>patch</desc>
            <filename>va0.patch</filename>
            <type>text/plain</type>
            <size>36794</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgT3BlbkdMIEVTIDIuMCBzZW1hbnRpY3MgZm9yIHZlcnRleCBhdHRyaWJ1dGUgMAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzMDAKKworICAgICAg
ICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0
bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyk6IGNvbnN0Lgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbik6
IGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjppc1VzaW5nVmVydGV4QXR0
cmliMCk6IERldGVybWluZSB3aGV0aGVyIHZlcnRleCBhdHRyaWIgMCBpcyB1c2VkIGJ5IHRoZSBw
cm9ncmFtLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oOiBEZWNsYXJlIGlz
VXNpbmdWZXJ0ZXhBdHRyaWIwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dCk6IERlYWwgd2l0aCB2ZXJ0ZXggYXR0cmliIDAuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3
QXJyYXlzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdFbGVtZW50cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIpOiBVc2UgY2FjaGVkIHZhbHVlIGluc3RlYWQgY2FsbCBn
bEdldFZlcnRleHRBdHJ0cmliLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZik6IFZhbGlkYXRlIGlucHV0LCBkZWFsIHdpdGggdmVydGV4IGF0
dHJpYiAwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWIxZnYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMmYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0Zik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWI0ZnYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliUG9pbnRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpoYW5kbGVOUE9UVGV4dHVyZXMpOiBNb3ZlIGlzR0xFUzJDb21wbGlh
bnQoKSB0byBjYWxsZXIuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYkltcGwpOiBIZWxwZXIgZm9yIHZlcnRleEF0dHJpYk5mdi4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdFZlcnRleEF0dHJpYjApOiBJbml0
aWFsaXplIHZlcnRleCBhdHRyaWIgMC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKTogU2ltdWxhdGUgdmVydGV4IGF0dHJpYiAw
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVz
QWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbik6IFJlc3RvcmUgc3RhdGVzIGFmdGVyIHNpbXVs
YXRpbmcgdmVydGV4IGF0dHJpYiAwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpW
ZXJ0ZXhBdHRyaWJTdGF0ZTo6VmVydGV4QXR0cmliU3RhdGUpOiBUcmFja2luZyBmdWxsIHZlcnRl
eHQgYXR0cmliIHN0YXRlcy4KKwogMjAxMC0wNi0zMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3Nz
eUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGRmaXggYWZ0ZXIgcjYyMTk2
IGFuZCByNjIyMTQuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZp
c2lvbiA2MjE1OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsMTggKzcxLDI3IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpjYWNoZUFj
dGl2ZUF0dHJpYkxvY2EKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFdlYkdMUHJvZ3JhbTo6
bnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkKK2ludCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0
dHJpYkxvY2F0aW9ucygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9h
Y3RpdmVBdHRyaWJMb2NhdGlvbnMuc2l6ZSgpKTsKIH0KIAotaW50IFdlYkdMUHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmliTG9jYXRpb24oaW50IGluZGV4KQoraW50IFdlYkdMUHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmliTG9jYXRpb24oaW50IGluZGV4KSBjb25zdAogewogICAgIGlmIChpbmRleCA8IDAg
fHwgaW5kZXggPj0gbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkpCiAgICAgICAgIHJldHVybiAt
MTsKICAgICByZXR1cm4gbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90
PihpbmRleCldOwogfQogCitib29sIFdlYkdMUHJvZ3JhbTo6aXNVc2luZ1ZlcnRleEF0dHJpYjAo
KSBjb25zdAoreworICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCBudW1BY3RpdmVBdHRyaWJMb2Nh
dGlvbnMoKTsgKytpaSkgeworICAgICAgICBpZiAoZ2V0QWN0aXZlQXR0cmliTG9jYXRpb24oaWkp
ID09IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiA2MjE1OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xQcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbigpIGlz
IG9ubHkgY2FsbGVkIG9uY2UgYWZ0ZXIgbGlua1Byb2dyYW0oKQogICAgICAgICAvLyBzdWNjZWVk
cy4KICAgICAgICAgYm9vbCBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwotICAgICAgICBp
bnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7Ci0gICAgICAgIGludCBnZXRBY3RpdmVBdHRy
aWJMb2NhdGlvbihpbnQgaW5kZXgpOworICAgICAgICBpbnQgbnVtQWN0aXZlQXR0cmliTG9jYXRp
b25zKCkgY29uc3Q7CisgICAgICAgIGludCBnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpbnQgaW5k
ZXgpIGNvbnN0OworCisgICAgICAgIGJvb2wgaXNVc2luZ1ZlcnRleEF0dHJpYjAoKSBjb25zdDsK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCopOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gNjIxNTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw4ICsxMjEsMTAgQEAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZt
YXhDdWJlTWFwVGV4dHVyZVNpemUpOwogICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplID0gbWF4
Q3ViZU1hcFRleHR1cmVTaXplOwogCi0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCisgICAg
aWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKICAgICAgICAgY3JlYXRlRmFsbGJhY2tCbGFja1Rl
eHR1cmVzMXgxKCk7CisgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisgICAgfQogICAgIG1f
Y29udGV4dC0+cmVzaGFwZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsK
ICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMo
KS0+aGVpZ2h0KCkpOwogfQpAQCAtNjY5LDkgKzY3MSwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZGlzYWJsZVZlcnRlCiAgICAgCiAgICAgaWYgKGluZGV4IDwgbV92ZXJ0ZXhBdHRy
aWJTdGF0ZS5zaXplKCkpCiAgICAgICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmVuYWJs
ZWQgPSBmYWxzZTsKLSAgICAKLSAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShpbmRleCk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKworICAgIGlm
IChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIG1fY29udGV4dC0+
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKKyAgICAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKKyAgICB9CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUodW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQg
bG9uZyB0eXBlLCBsb25nIG9mZnNldCkKQEAgLTg1Myw5ICs4NTcsMTcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXModQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaGFuZGxlTlBPVFRleHR1cmVzKHRydWUpOworICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVs
YXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIHZl
cnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3Vu
dCAtIDEpOworICAgICAgICBoYW5kbGVOUE9UVGV4dHVyZXModHJ1ZSk7CisgICAgfQogICAgIG1f
Y29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwotICAgIGhhbmRsZU5QT1RU
ZXh0dXJlcyhmYWxzZSk7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAg
aGFuZGxlTlBPVFRleHR1cmVzKGZhbHNlKTsKKyAgICAgICAgaWYgKHZlcnRleEF0dHJpYjBTaW11
bGF0ZWQpCisgICAgICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxh
dGlvbigpOworICAgIH0KICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAK
QEAgLTg5Nyw5ICs5MDksMTcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVt
ZW50cwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICBoYW5kbGVOUE9UVGV4
dHVyZXModHJ1ZSk7CisgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7Cisg
ICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVs
YXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7CisgICAgICAgIGhhbmRs
ZU5QT1RUZXh0dXJlcyh0cnVlKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMo
bW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCk7Ci0gICAgaGFuZGxlTlBPVFRleHR1cmVzKGZhbHNl
KTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBoYW5kbGVOUE9UVGV4
dHVyZXMoZmFsc2UpOworICAgICAgICBpZiAodmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAg
ICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAg
fQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIApAQCAtMTY2NCwzOSAr
MTY4NCw0OCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2Up
OwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiB7Ci0gICAgICAgIGludCBuYW1lID0gMDsK
LSAgICAgICAgbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsICZuYW1l
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihm
aW5kQnVmZmVyKHN0YXRpY19jYXN0PFBsYXRmb3JtM0RPYmplY3Q+KG5hbWUpKSkpOworICAgIGlm
IChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CisgICAgc3dpdGNoIChwbmFtZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6CisgICAgICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmICFpbmRleCAmJiBtX3ZlcnRl
eEF0dHJpYlN0YXRlWzBdLmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyCisg
ICAgICAgICAgICB8fCBpbmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKQorICAgICAg
ICAgICAgfHwgIW1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmJ1ZmZlckJpbmRpbmcKKyAgICAg
ICAgICAgIHx8ICFtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5idWZmZXJCaW5kaW5nLT5vYmpl
Y3QoKSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihtX3ZlcnRleEF0dHJpYlN0YXRl
W2luZGV4XS5idWZmZXJCaW5kaW5nKSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZF
UlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDogewotICAgICAgICBpbnQgdmFsdWUgPSAwOwot
ICAgICAgICBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgJnZhbHVl
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkp
OwotICAgIH0KKyAgICAgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgp
KQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZW5hYmxlZCk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgor
ICAgICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCisgICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5ub3JtYWxpemVkKTsKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6IHsKLSAgICAgICAgaW50
IHZhbHVlID0gMDsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwg
cG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8
bG9uZz4odmFsdWUpKTsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X0FUVFJJQl9BUlJBWV9UWVBFOiB7Ci0gICAgICAgIGludCB2YWx1ZSA9IDA7Ci0gICAgICAgIG1f
Y29udGV4dC0+Z2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCAmdmFsdWUpOwotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHZhbHVlKSk7
Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVSVEVYX0FUVFJJ
QjogewotICAgICAgICBmbG9hdCB2YWx1ZVs0XSA9IHswfTsKLSAgICAgICAgbV9jb250ZXh0LT5n
ZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgNCkpOwotICAgIH0KLSAgICBk
ZWZhdWx0OiB7CisgICAgICAgIGlmIChpbmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4oNCkp
OworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhd
LnNpemUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlf
U1RSSURFOgorICAgICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkp
CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGxvbmc+KDApKTsK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5z
dHJpZGUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlf
VFlQRToKKyAgICAgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
PihHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQpKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS50eXBlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpDVVJSRU5UX1ZFUlRFWF9BVFRSSUI6CisgICAgICAgIGlmIChpbmRleCA+PSBtX3Zl
cnRleEF0dHJpYlN0YXRlLnNpemUoKSkgeworICAgICAgICAgICAgZmxvYXQgdmFsdWVbNF0gPSB7
IDAuMGYsIDAuMGYsIDAuMGYsIDEuMGYgfTsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oRmxvYXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIDQpKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKG1fdmVydGV4QXR0cmliU3Rh
dGVbaW5kZXhdLnZhbHVlLCA0KSk7CisgICAgZGVmYXVsdDoKICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KLSAgICB9CiB9CiAKIGxvbmcgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRl
eCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKQEAgLTI5OTcsMTIzICszMDI2LDEzNiBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9nCiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjApCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMWYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgdjApCiB7
Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZihpbmR4LCB2MCk7Ci0gICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFu
dCgpKSB7CisgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKKyAg
ICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB9CisgICAgbV92ZXJ0
ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMF0gPSB2MDsKIH0KIAotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIEZsb2F0MzJB
cnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYodW5z
aWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQogewotICAgIC8vIEZJWE1FOiBOZWVk
IHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0
Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwgdi0+ZGF0YSgpKTsKLSAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHZlcnRleEF0dHJpYkltcGwoaW5k
ZXgsIHYsIDEpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
MWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9h
dCogdiwgaW50IHNpemUpCiB7Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5
IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQKLSAgICBVTlVTRURfUEFSQU0o
c2l6ZSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwgdik7Ci0g
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB2ZXJ0ZXhBdHRyaWJJbXBs
KGluZGV4LCB2LCBzaXplLCAxKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxKQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIGZsb2F0IHYwLCBmbG9hdCB2MSkKIHsKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJm
KGluZHgsIHYwLCB2MSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAg
ICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIG1fY29udGV4dC0+
dmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CisgICAgICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CisgICAgfQorICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZh
bHVlWzBdID0gdjA7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMV0gPSB2
MTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdih1bnNp
Z25lZCBsb25nIGluZHgsIEZsb2F0MzJBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2
KQogewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdo
IGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYo
aW5keCwgdi0+ZGF0YSgpKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwor
ICAgIHZlcnRleEF0dHJpYkltcGwoaW5kZXgsIHYsIDIpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHYs
IGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdih1
bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAgLy8gRklYTUU6
IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWlu
ZyBzZXQKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWIyZnYoaW5keCwgdik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKKyAgICB2ZXJ0ZXhBdHRyaWJJbXBsKGluZGV4LCB2LCBzaXplLCAyKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwg
ZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB2MCwgZmxvYXQgdjEs
IGZsb2F0IHYyKQogewotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2YoaW5keCwgdjAsIHYx
LCB2Mik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICBpZiAoaW5k
ZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0
cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworICAgIH0KKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVsw
XSA9IHYwOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZhbHVlWzFdID0gdjE7Cisg
ICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMl0gPSB2MjsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgs
IEZsb2F0MzJBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWIzZnYodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQogewotICAgIC8vIEZJ
WE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUg
YmVpbmcgc2V0Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5keCwgdi0+ZGF0YSgp
KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHZlcnRleEF0dHJp
YkltcGwoaW5kZXgsIHYsIDMpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHYsIGludCBzaXplKQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGlu
ZGV4LCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gbWFrZSBz
dXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQKLSAgICBVTlVT
RURfUEFSQU0oc2l6ZSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5k
eCwgdik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB2ZXJ0ZXhB
dHRyaWJJbXBsKGluZGV4LCB2LCBzaXplLCAzKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0
IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9h
dCB2MiwgZmxvYXQgdjMpCiB7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZihpbmR4LCB2
MCwgdjEsIHYyLCB2Myk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAg
ICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIG1fY29udGV4dC0+
dmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKKyAgICAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB9CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtp
bmRleF0udmFsdWVbMF0gPSB2MDsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1
ZVsxXSA9IHYxOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZhbHVlWzJdID0gdjI7
CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbM10gPSB2MzsKIH0KIAotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGlu
ZHgsIEZsb2F0MzJBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQogewotICAgIC8v
IEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1
dGUgYmVpbmcgc2V0Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgdi0+ZGF0
YSgpKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHZlcnRleEF0
dHJpYkltcGwoaW5kZXgsIHYsIDQpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHYsIGludCBzaXplKQor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25n
IGluZGV4LCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gbWFr
ZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQKLSAgICBV
TlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYo
aW5keCwgdik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB2ZXJ0
ZXhBdHRyaWJJbXBsKGluZGV4LCB2LCBzaXplLCA0KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBsb25nIHNp
emUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0
cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmRl
eCwgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwgbG9uZyBz
dHJpZGUsIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVyIHx8IGluZHggPj0gbV9tYXhWZXJ0
ZXhBdHRyaWJzKSB7CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewogICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBpZiAoaW5keCA+
PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0
ZS5yZXNpemUoaW5keCArIDEpOwotCisgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0IHx8IHN0
cmlkZSA8IDAgfHwgb2Zmc2V0IDwgMCkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgeworICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIg
b2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhlIG9mZnNldCwg
c2l6ZSwgdHlwZSBhbmQgc3RyaWRlCi0gICAgbG9uZyBieXRlc1BlckVsZW1lbnQgPSBzaXplICog
c2l6ZUluQnl0ZXModHlwZSwgZWMpOwotICAgIGlmIChieXRlc1BlckVsZW1lbnQgPD0gMCkKKyAg
ICBsb25nIGJ5dGVzUGVyRWxlbWVudCA9IDA7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZJWEVEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAg
ICAgICBieXRlc1BlckVsZW1lbnQgPSBzaXplICogc2l6ZUluQnl0ZXModHlwZSwgZWMpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKKyAg
ICAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5yZXNpemUoaW5kZXggKyAxKTsKKwogICAgIGxvbmcg
dmFsaWRhdGVkU3RyaWRlID0gYnl0ZXNQZXJFbGVtZW50OwogICAgIGlmIChzdHJpZGUgIT0gMCkg
ewogICAgICAgICBpZiAoKGxvbmcpIHN0cmlkZSA8IGJ5dGVzUGVyRWxlbWVudCkgewogICAgICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCiAg
ICAgICAgIHZhbGlkYXRlZFN0cmlkZSA9IHN0cmlkZTsKICAgICB9Ci0gICAgbV92ZXJ0ZXhBdHRy
aWJTdGF0ZVtpbmR4XS5idWZmZXJCaW5kaW5nID0gbV9ib3VuZEFycmF5QnVmZmVyOwotICAgIG1f
dmVydGV4QXR0cmliU3RhdGVbaW5keF0uYnl0ZXNQZXJFbGVtZW50ID0gYnl0ZXNQZXJFbGVtZW50
OwotICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5keF0uc3RyaWRlID0gdmFsaWRhdGVkU3RyaWRl
OwotICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5keF0ub2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIG9mZnNldCk7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uYnVmZmVy
QmluZGluZyA9IG1fYm91bmRBcnJheUJ1ZmZlcjsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2lu
ZGV4XS5ieXRlc1BlckVsZW1lbnQgPSBieXRlc1BlckVsZW1lbnQ7CisgICAgbV92ZXJ0ZXhBdHRy
aWJTdGF0ZVtpbmRleF0uc2l6ZSA9IHNpemU7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRl
eF0udHlwZSA9IHR5cGU7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0ubm9ybWFsaXpl
ZCA9IG5vcm1hbGl6ZWQ7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uc3RyaWRlID0g
dmFsaWRhdGVkU3RyaWRlOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLm9mZnNldCA9
IG9mZnNldDsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUs
IHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0zMjkzLDggKzMzMzUsNiBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aXNHTEVTMkNvbXBsCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpoYW5kbGVOUE9UVGV4dHVyZXMoYm9vbCBwcmVwYXJlVG9EcmF3KQogewotICAgIGlmIChpc0dM
RVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHJldHVybjsKICAgICBib29sIHJlc2V0QWN0aXZlVW5p
dCA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IG1fdGV4dHVyZVVuaXRz
LnNpemUoKTsgKytpaSkgewogICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVy
ZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0ubV90ZXh0dXJlMkRCaW5kaW5nLT5uZWVk
VG9Vc2VCbGFja1RleHR1cmUoKQpAQCAtMzY0NSw2ICszNjg1LDEwNCBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJJbXBsKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIEZsb2F0MzJBcnJheSogdiwgaW50IGV4cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsK
KyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmVydGV4QXR0cmli
SW1wbChpbmRleCwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgZXhwZWN0ZWRTaXplKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYkltcGwodW5zaWduZWQgbG9u
ZyBpbmRleCwgZmxvYXQqIHYsIGludCBzaXplLCBpbnQgZXhwZWN0ZWRTaXplKQoreworICAgIGlm
ICghdikgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
c2l6ZSA8IGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIHN3
aXRjaCAoc2l6ZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjFmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHYpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIDQ6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmRleCwg
dik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOworICAgIH0KKyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgc2l6
ZTsgKytpaSkKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbaWldID0g
dltpaV07Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmli
MCgpCit7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5yZXNpemUoMSk7CisgICAgbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyID0gY3JlYXRlQnVmZmVyKCk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci5n
ZXQoKSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJB
WV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQs
IGZhbHNlLCAwLCAwKTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlWzBdLmJ1ZmZlckJpbmRpbmcg
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoMCk7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IDA7Cisg
ICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0gPSAwLjBmOworICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzFdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVsyXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSAxLjBmOwor
fQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGxv
bmcgbnVtVmVydGV4KQoreworICAgIGNvbnN0IFZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1f
dmVydGV4QXR0cmliU3RhdGVbMF07CisgICAgaWYgKHN0YXRlLmVuYWJsZWQgfHwgIW1fY3VycmVu
dFByb2dyYW0gfHwgIW1fY3VycmVudFByb2dyYW0tPm9iamVjdCgpCisgICAgICAgIHx8ICFtX2N1
cnJlbnRQcm9ncmFtLT5pc1VzaW5nVmVydGV4QXR0cmliMCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci5nZXQoKSk7CisgICAgbG9uZyBidWZmZXJEYXRh
U2l6ZSA9IChudW1WZXJ0ZXggKyAxKSAqIDQgKiBzaXplb2YoZmxvYXQpOworICAgIGlmIChidWZm
ZXJEYXRhU2l6ZSA+IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUKKyAgICAgICAgfHwgc3RhdGUu
dmFsdWVbMF0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0KKyAgICAgICAgfHwgc3Rh
dGUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0KKyAgICAgICAgfHwg
c3RhdGUudmFsdWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KKyAgICAgICAg
fHwgc3RhdGUudmFsdWVbM10gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10pIHsKKyAg
ICAgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gYnVmZmVyRGF0YSA9IEZsb2F0MzJBcnJheTo6Y3Jl
YXRlKChudW1WZXJ0ZXggKyAxKSAqIDQpOworICAgICAgICBmb3IgKGxvbmcgaWkgPSAwOyBpaSA8
IG51bVZlcnRleCArIDE7ICsraWkpIHsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGEtPnNldChpaSAq
IDQsIHN0YXRlLnZhbHVlWzBdKTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGEtPnNldChpaSAqIDQg
KyAxLCBzdGF0ZS52YWx1ZVsxXSk7CisgICAgICAgICAgICBidWZmZXJEYXRhLT5zZXQoaWkgKiA0
ICsgMiwgc3RhdGUudmFsdWVbMl0pOworICAgICAgICAgICAgYnVmZmVyRGF0YS0+c2V0KGlpICog
NCArIDMsIHN0YXRlLnZhbHVlWzNdKTsKKyAgICAgICAgfQorICAgICAgICBtX2NvbnRleHQtPmJ1
ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgYnVmZmVyRGF0YS5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVyk7CisgICAgICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclNpemUgPSBidWZmZXJEYXRhU2l6ZTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyVmFsdWVbMF0gPSBzdGF0ZS52YWx1ZVswXTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyVmFsdWVbMV0gPSBzdGF0ZS52YWx1ZVsxXTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyVmFsdWVbMl0gPSBzdGF0ZS52YWx1ZVsyXTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyVmFsdWVbM10gPSBzdGF0ZS52YWx1ZVszXTsKKyAgICB9CisgICAgbV9jb250ZXh0LT52
ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2Us
IDAsIDApOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQoreworICAgIGNv
bnN0IFZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliU3RhdGVbMF07Cisg
ICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVG
RkVSLCBzdGF0ZS5idWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6
ZWQsIHN0YXRlLnN0cmlkZSwgc3RhdGUub2Zmc2V0KTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5i
aW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fYm91bmRBcnJheUJ1
ZmZlci5nZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgJKHJldmlzaW9uIDYyMTU4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDIwICsyODMsMjAgQEAg
Y2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgICAgICB2b2lkIHVzZVByb2dyYW0oV2ViR0xQcm9n
cmFtKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJH
TFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIx
Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJp
YjFmdih1bnNpZ25lZCBsb25nIGluZHgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAgICAgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBp
bnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWdu
ZWQgbG9uZyBpbmR4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgICAgIHZvaWQgdmVydGV4
QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOwot
ICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgeik7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVk
IGxvbmcgaW5keCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgICAgICB2b2lkIHZlcnRleEF0
dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKLSAg
ICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjRmdih1
bnNpZ25lZCBsb25nIGluZHgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAgICAgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6
ZSk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgs
IGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQg
bG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIx
Zih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB4KTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIxZnYodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgICAg
ICB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdmFsdWVz
LCBpbnQgc2l6ZSk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliMmYodW5zaWduZWQgbG9uZyBp
bmRleCwgZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KHVu
c2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHZhbHVlcywgaW50IHNp
emUpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjNmdih1
bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgICAgIHZvaWQg
dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMsIGludCBz
aXplKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZGV4LCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAg
ICAgICB2b2lkIHZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdmFs
dWVzLCBpbnQgc2l6ZSk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25l
ZCBsb25nIGluZGV4LCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxp
emVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdHJpZGUsIGxvbmcg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICAgICAgdm9pZCB2aWV3cG9ydChsb25nIHgs
IGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogCkBA
IC0zNTcsMTYgKzM1NywzNiBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgIC8vIENh
Y2hlZCB2YWx1ZXMgZm9yIHZlcnRleCBhdHRyaWIgcmFuZ2UgY2hlY2tzCiAgICAgICAgIGNsYXNz
IFZlcnRleEF0dHJpYlN0YXRlIHsKICAgICAgICAgcHVibGljOgotICAgICAgICAgICAgVmVydGV4
QXR0cmliU3RhdGUoKSA6IGVuYWJsZWQoZmFsc2UpLCBieXRlc1BlckVsZW1lbnQoMCksIHN0cmlk
ZSgwKSwgb2Zmc2V0KDApIHsgfQorICAgICAgICAgICAgVmVydGV4QXR0cmliU3RhdGUoKQorICAg
ICAgICAgICAgICAgIDogZW5hYmxlZChmYWxzZSkKKyAgICAgICAgICAgICAgICAsIGJ5dGVzUGVy
RWxlbWVudCgwKQorICAgICAgICAgICAgICAgICwgc2l6ZSg0KQorICAgICAgICAgICAgICAgICwg
dHlwZShHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQpCisgICAgICAgICAgICAgICAgLCBub3JtYWxp
emVkKGZhbHNlKQorICAgICAgICAgICAgICAgICwgc3RyaWRlKDApCisgICAgICAgICAgICAgICAg
LCBvZmZzZXQoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVswXSA9IDAu
MGY7CisgICAgICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOworICAgICAgICAgICAgICAgIHZh
bHVlWzJdID0gMC4wZjsKKyAgICAgICAgICAgICAgICB2YWx1ZVszXSA9IDEuMGY7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBib29sIGVuYWJsZWQ7CiAgICAgICAgICAgICBSZWZQdHI8V2Vi
R0xCdWZmZXI+IGJ1ZmZlckJpbmRpbmc7CiAgICAgICAgICAgICBsb25nIGJ5dGVzUGVyRWxlbWVu
dDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlOwotICAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQ7CisgICAgICAgICAgICBsb25nIHNpemU7CisgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIHR5cGU7CisgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQ7CisgICAgICAgICAg
ICBsb25nIHN0cmlkZTsKKyAgICAgICAgICAgIGxvbmcgb2Zmc2V0OworICAgICAgICAgICAgZmxv
YXQgdmFsdWVbNF07CiAgICAgICAgIH07CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VmVydGV4
QXR0cmliU3RhdGU+IG1fdmVydGV4QXR0cmliU3RhdGU7CiAgICAgICAgIHVuc2lnbmVkIG1fbWF4
VmVydGV4QXR0cmliczsKKyAgICAgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX3ZlcnRleEF0dHJp
YjBCdWZmZXI7CisgICAgICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZTsKKyAgICAg
ICAgZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07CiAKICAgICAgICAgUmVmUHRy
PFdlYkdMUHJvZ3JhbT4gbV9jdXJyZW50UHJvZ3JhbTsKICAgICAgICAgUmVmUHRyPFdlYkdMRnJh
bWVidWZmZXI+IG1fZnJhbWVidWZmZXJCaW5kaW5nOwpAQCAtNDY5LDYgKzQ4OSwxNSBAQCBjbGFz
cyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0
ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtTWF0cml4IGZ1bmN0aW9ucy4KICAgICAgICAg
Ym9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIHZvaWQqIHYpOwogCisgICAgICAgIC8v
IEhlbHBlciBmdW5jdGlvbnMgZm9yIHZlcnRleEF0dHJpYk5mdi4KKyAgICAgICAgdm9pZCB2ZXJ0
ZXhBdHRyaWJJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdiwgaW50IGV4
cGVjdGVkU2l6ZSk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliSW1wbCh1bnNpZ25lZCBsb25n
IGluZGV4LCBmbG9hdCogdiwgaW50IHNpemUsIGludCBleHBlY3RlZFNpemUpOworCisgICAgICAg
IC8vIEhlbHBlcnMgZm9yIHNpbXVsYXRpbmcgdmVydGV4QXR0cmliMAorICAgICAgICB2b2lkIGlu
aXRWZXJ0ZXhBdHRyaWIwKCk7CisgICAgICAgIGJvb2wgc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGxv
bmcgbnVtVmVydGV4KTsKKyAgICAgICAgdm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRy
aWIwU2ltdWxhdGlvbigpOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBXZWJHTFN0YXRlUmVzdG9y
ZXI7CiAgICAgfTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjIyMjMpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNi0zMCAgWmhl
bnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBPcGVuR0wgRVMgMi4wIHNlbWFudGljcyBmb3Ig
dmVydGV4IGF0dHJpYnV0ZSAwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MTMwMAorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1h
dHRyaWItbG9jYXRpb24tdGVzdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3QuaHRtbDogQWRkZWQuCisK
IDIwMTAtMDYtMzAgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkIGZpeC4gVXBkYXRlIFF0IHNwZWNpZmljIGV4cGVjdGVkIGZpbGVzIGFm
dGVyIHI2MjIxNS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWJpbmQt
YXR0cmliLWxvY2F0aW9uLXRlc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3QtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wt
YmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzAgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIFdlYkdMIGltcGxlbWVudGF0aW9ucyBkb24n
dCBhbGxvdyBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggJ2dsXycgd2hlbiBjYWxsaW5nIGJpbmRBdHRy
aWJMb2NhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0NhbnZhcy5nZXRD
b250ZXh0CitQQVNTIFtvYmplY3QgSFRNTENhbnZhc0VsZW1lbnRdIGlzIG5vbi1udWxsLgorUEFT
UyBbb2JqZWN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dF0gaXMgbm9uLW51bGwuCisKK0NoZWNraW5n
IGdsLmJpbmRBdHRyaWJMb2NhdGlvbi4KK1BBU1MgYmluZEF0dHJpYkxvY2F0aW9uIHNob3VsZCBy
ZXR1cm4gSU5WQUxJRF9PUEVSQVRJT04gaWYgbmFtZSBzdGFydHMgd2l0aCAnZ2xfJworUEFTUyBi
aW5kQXR0cmliTG9jYXRpb24gc2hvdWxkIHJldHVybiBJTlZBTElEX09QRVJBVElPTiBpZiBuYW1l
IHN0YXJ0cyB3aXRoICdnbF8nCitQQVNTIHByb2dyYW0gbGlua2VkIHN1Y2Nlc3NmdWxseQordlBv
c2l0aW9uOjMKK3ZDb2xvciAgIDoyCitQQVNTIGxvY2F0aW9uIG9mIHZQb3NpdG9uIHNob3VsZCBi
ZSAzCitQQVNTIGxvY2F0aW9uIG9mIHZDb2xvciBzaG91bGQgYmUgMgorUEFTUyBkcmF3aW5nIGlz
IGNvcnJlY3QKK1BBU1MgcHJvZ3JhbSBsaW5rZWQgc3VjY2Vzc2Z1bGx5Cit2UG9zaXRpb246Mwor
dkNvbG9yICAgOjAKK1BBU1MgbG9jYXRpb24gb2YgdlBvc2l0b24gc2hvdWxkIGJlIDMKK1BBU1Mg
bG9jYXRpb24gb2YgdkNvbG9yIHNob3VsZCBiZSAwCitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdAor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24t
dGVzdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Z2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE5NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJh
bnNpdGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50
PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPldlYkdMIEJpbmRBdHRyaWJMb2Nh
dGlvbiBDb25mb3JtYW5jZSBUZXN0czwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxj
YW52YXMgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyIgaWQ9ImNhbnZhcyIgd2lkdGg9
IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5cGU9InRl
eHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsK
K2F0dHJpYnV0ZSB2ZWM0IHZDb2xvcjsKK3ZhcnlpbmcgdmVjNCBjb2xvcjsKK3ZvaWQgbWFpbigp
Cit7CisgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247CisgICAgY29sb3IgPSB2Q29sb3I7Cit9
Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9InRleHQvc29tZXRoaW5nLW5v
dC1qYXZhc2NyaXB0Ij4KK3ZhcnlpbmcgdmVjNCBjb2xvcjsKK3ZvaWQgbWFpbigpCit7CisgICAg
Z2xfRnJhZ0NvbG9yID0gY29sb3I7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQ+CitkZXNjcmlwdGlv
bigiVGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50YXRpb25zIGRvbid0IGFsbG93IG5h
bWVzIHRoYXQgc3RhcnQgd2l0aCAnZ2xfJyB3aGVuIGNhbGxpbmcgYmluZEF0dHJpYkxvY2F0aW9u
LiIpOworCitkZWJ1ZygiIik7CitkZWJ1ZygiQ2FudmFzLmdldENvbnRleHQiKTsKKwordmFyIGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK3Nob3VsZEJlTm9uTnVs
bChjYW52YXMpOwordmFyIGdsID0gY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJn
bCIpOworc2hvdWxkQmVOb25OdWxsKGdsKTsKKworZnVuY3Rpb24gZmFpbCh4LHksIGJ1Ziwgc2hv
dWxkQmUpCit7CisgICAgdmFyIGkgPSAoeSo1MCt4KSAqIDQ7CisgICAgdmFyIHJlYXNvbiA9ICJw
aXhlbCBhdCAoIit4KyIsIit5KyIpIGlzICgiK2J1ZltpXSsiLCIrYnVmW2krMV0rIiwiK2J1Zltp
KzJdKyIsIitidWZbaSszXSsiKSwgc2hvdWxkIGJlICIrc2hvdWxkQmU7CisgICAgdGVzdEZhaWxl
ZChyZWFzb24pOworfQorCitmdW5jdGlvbiBwYXNzKCkKK3sKKyAgICB0ZXN0UGFzc2VkKCJkcmF3
aW5nIGlzIGNvcnJlY3QiKTsKK30KKworZnVuY3Rpb24gbG9hZFNoYWRlcihzaGFkZXJUeXBlLCBz
aGFkZXJJZCkgeworICAvLyBHZXQgdGhlIHNoYWRlciBzb3VyY2UuCisgIHZhciBzaGFkZXJTb3Vy
Y2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzaGFkZXJJZCkudGV4dDsKKworICAvLyBDcmVh
dGUgdGhlIHNoYWRlciBvYmplY3QKKyAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihzaGFk
ZXJUeXBlKTsKKyAgaWYgKHNoYWRlciA9PSBudWxsKSB7CisgICAgICBkZWJ1ZygiKioqIEVycm9y
OiB1bmFibGUgdG8gY3JlYXRlIHNoYWRlciAnIitzaGFkZXJJZCsiJyIpOworICAgICAgcmV0dXJu
IG51bGw7CisgIH0KKworICAvLyBMb2FkIHRoZSBzaGFkZXIgc291cmNlCisgIGdsLnNoYWRlclNv
dXJjZShzaGFkZXIsIHNoYWRlclNvdXJjZSk7CisKKyAgLy8gQ29tcGlsZSB0aGUgc2hhZGVyCisg
IGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKworICAvLyBDaGVjayB0aGUgY29tcGlsZSBzdGF0
dXMKKyAgdmFyIGNvbXBpbGVkID0gZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09N
UElMRV9TVEFUVVMpOworICBpZiAoIWNvbXBpbGVkKSB7CisgICAgICAvLyBTb21ldGhpbmcgd2Vu
dCB3cm9uZyBkdXJpbmcgY29tcGlsYXRpb247IGdldCB0aGUgZXJyb3IKKyAgICAgIHZhciBlcnJv
ciA9IGdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAgICAgIGRlYnVnKCIqKiogRXJyb3Ig
Y29tcGlsaW5nIHNoYWRlciAnIitzaGFkZXIrIic6IitlcnJvcik7CisgICAgICBnbC5kZWxldGVT
aGFkZXIoc2hhZGVyKTsKKyAgICAgIHJldHVybiBudWxsOworICB9CisgIHJldHVybiBzaGFkZXI7
Cit9CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJDaGVja2luZyBnbC5iaW5kQXR0cmliTG9jYXRpb24u
Iik7CisKK3ZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworZ2wuYmluZEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIDAsICJnbF9mb28iKTsKK2Fzc2VydE1zZyhnbC5nZXRFcnJvcigpID09
IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICJiaW5kQXR0cmliTG9jYXRpb24gc2hv
dWxkIHJldHVybiBJTlZBTElEX09QRVJBVElPTiBpZiBuYW1lIHN0YXJ0cyB3aXRoICdnbF8nIik7
CitnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgImdsX1RleENvb3JkMCIpOworYXNz
ZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAg
ImJpbmRBdHRyaWJMb2NhdGlvbiBzaG91bGQgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OIGlmIG5h
bWUgc3RhcnRzIHdpdGggJ2dsXyciKTsKKwordmFyIHZzID0gbG9hZFNoYWRlcihnbC5WRVJURVhf
U0hBREVSLCAidnNoYWRlciIpOwordmFyIGZzID0gbG9hZFNoYWRlcihnbC5GUkFHTUVOVF9TSEFE
RVIsICJmc2hhZGVyIik7CitnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdnMpOworZ2wuYXR0YWNo
U2hhZGVyKHByb2dyYW0sIGZzKTsKKwordmFyIHBvc2l0aW9ucyA9IGdsLmNyZWF0ZUJ1ZmZlcigp
OworZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHBvc2l0aW9ucyk7CitnbC5idWZmZXJE
YXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbIDAsMC41LDAsIC0wLjUsLTAu
NSwwLCAwLjUsLTAuNSwwIF0pLCBnbC5TVEFUSUNfRFJBVyk7CisKK3ZhciBjb2xvcnMgPSBnbC5j
cmVhdGVCdWZmZXIoKTsKK2dsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvcnMpOwor
Z2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWworICAgMCwx
LDAsMSwKKyAgIDAsMSwwLDEsCisgICAwLDEsMCwxXSksIGdsLlNUQVRJQ19EUkFXKTsKKworZnVu
Y3Rpb24gc2V0QmluZExvY2F0aW9ucyhjb2xvckxvY2F0aW9uLCBwb3NpdGlvbkxvY2F0aW9uKSB7
CisgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBwb3NpdGlvbkxvY2F0aW9uLCAidlBv
c2l0aW9uIik7CisgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBjb2xvckxvY2F0aW9u
LCAidkNvbG9yIik7CisgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pOworICBnbC51c2VQcm9ncmFt
KHByb2dyYW0pOworICB2YXIgbGlua2VkID0gKGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3Jh
bSwgZ2wuTElOS19TVEFUVVMpICE9IDApOworICBhc3NlcnRNc2cobGlua2VkLCAicHJvZ3JhbSBs
aW5rZWQgc3VjY2Vzc2Z1bGx5Iik7CisKKyAgZGVidWcoInZQb3NpdGlvbjoiICsgZ2wuZ2V0QXR0
cmliTG9jYXRpb24ocHJvZ3JhbSwgInZQb3NpdGlvbiIpKQorICBkZWJ1ZygidkNvbG9yICAgOiIg
KyBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidkNvbG9yIikpCisgIGFzc2VydE1zZyhn
bC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidlBvc2l0aW9uIikgPT0gcG9zaXRpb25Mb2Nh
dGlvbiwKKyAgICAgICAgICAgICJsb2NhdGlvbiBvZiB2UG9zaXRvbiBzaG91bGQgYmUgIiArIHBv
c2l0aW9uTG9jYXRpb24pOworICBhc3NlcnRNc2coZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3Jh
bSwgInZDb2xvciIpID09IGNvbG9yTG9jYXRpb24sCisgICAgICAgICAgICAibG9jYXRpb24gb2Yg
dkNvbG9yIHNob3VsZCBiZSAiICsgY29sb3JMb2NhdGlvbik7CisKKyAgdmFyIHBsb2MgPSBnbC5n
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidlBvc2l0aW9uIik7CisgIHZhciBjbG9jID0gZ2wu
Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInZDb2xvciIpOworICBnbC5iaW5kQnVmZmVyKGds
LkFSUkFZX0JVRkZFUiwgcG9zaXRpb25zKTsKKyAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
cG9zaXRpb25Mb2NhdGlvbik7CisgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocG9zaXRpb25Mb2Nh
dGlvbiwgMywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJB
WV9CVUZGRVIsIGNvbG9ycyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGNvbG9yTG9j
YXRpb24pOworICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGNvbG9yTG9jYXRpb24sIDQsIGdsLkZM
T0FULCBmYWxzZSwgMCwgMCk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrRHJhdyhjb2xvckxvY2F0aW9u
LCBwb3NpdGlvbkxvY2F0aW9uLCByLCBnLCBiLCBhKSB7CisgIGdsLmNsZWFyQ29sb3IoMCwgMCwg
MCwgMSk7CisgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJf
QklUKTsKKyAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDMpOworCisgIHZhciB3aWR0
aCA9IDUwOworICB2YXIgaGVpZ2h0ID0gNTA7CisgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSh3
aWR0aCAqIGhlaWdodCAqIDQpOworICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQs
IGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisKKyAgZnVuY3Rpb24gY2hlY2tQaXhl
bCh4LCB5LCByLCBnLCBiLCBhKSB7CisgICAgdmFyIG9mZnNldCA9ICh5ICogd2lkdGggKyB4KSAq
IDQ7CisgICAgaWYgKGJ1ZltvZmZzZXQgKyAwXSAhPSByIHx8CisgICAgICAgIGJ1ZltvZmZzZXQg
KyAxXSAhPSBnIHx8CisgICAgICAgIGJ1ZltvZmZzZXQgKyAyXSAhPSBiIHx8CisgICAgICAgIGJ1
ZltvZmZzZXQgKyAzXSAhPSBhKSB7CisgICAgICAgIGZhaWwoeCwgeSwgYnVmLCAiKCIgKyByICsg
IiwiICsgZyArICIsIiArIGIgKyAiLCIgKyBhICsgIikiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIC8vIFRlc3Qgc2V2ZXJhbCBsb2Nh
dGlvbnMKKyAgLy8gRmlyc3QgbGluZSBzaG91bGQgYmUgYWxsIGJsYWNrCisgIHZhciBzdWNjZXNz
ID0gdHJ1ZTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKQorICAgIHN1Y2Nlc3MgPSBz
dWNjZXNzICYmIGNoZWNrUGl4ZWwoaSwgMCwgMCwgMCwgMCwgMjU1KTsKKworICAvLyBMaW5lIDE1
IHNob3VsZCBiZSByZWQgZm9yIGF0IGxlYXN0IDEwIHJnYmEgcGl4ZWxzIHN0YXJ0aW5nIDIwIHBp
eGVscyBpbgorICB2YXIgb2Zmc2V0ID0gKDE1ICogNTAgKyAyMCkgKiA0OworICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwOyArK2kpCisgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY2hlY2tQaXhlbCgy
MCArIGksIDE1LCByLCBnLCBiLCBhKTsKKworICAvLyBMYXN0IGxpbmUgc2hvdWxkIGJlIGFsbCBi
bGFjaworICBmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpCisgICAgc3VjY2VzcyA9IHN1Y2Nl
c3MgJiYgY2hlY2tQaXhlbChpLCA0OSwgMCwgMCwgMCwgMjU1KTsKKworICBpZiAoc3VjY2VzcykK
KyAgICBwYXNzKCk7CisKKyAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHBvc2l0aW9uTG9j
YXRpb24pOworICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoY29sb3JMb2NhdGlvbik7Cit9
CisKK3NldEJpbmRMb2NhdGlvbnMoMiwgMyk7CitjaGVja0RyYXcoMiwgMywgMCwgMjU1LCAwLCAy
NTUpOworCitzZXRCaW5kTG9jYXRpb25zKDAsIDMpOworZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KDApOworZ2wudmVydGV4QXR0cmliNGYoMCwgMSwgMCwgMCwgMSk7CitjaGVja0RyYXcoMCwg
MywgMjU1LCAwLCAwLCAyNTUpOworCitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19F
UlJPUiIpOworCitkZWJ1ZygiIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60179</attachid>
            <date>2010-06-30 18:26:18 -0700</date>
            <delta_ts>2010-06-30 20:19:13 -0700</delta_ts>
            <desc>revised patch: fix style issue</desc>
            <filename>va0.patch</filename>
            <type>text/plain</type>
            <size>36790</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgT3BlbkdMIEVTIDIuMCBzZW1hbnRpY3MgZm9yIHZlcnRleCBhdHRyaWJ1dGUgMAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzMDAKKworICAgICAg
ICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0
bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyk6IGNvbnN0Lgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbik6
IGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjppc1VzaW5nVmVydGV4QXR0
cmliMCk6IERldGVybWluZSB3aGV0aGVyIHZlcnRleCBhdHRyaWIgMCBpcyB1c2VkIGJ5IHRoZSBw
cm9ncmFtLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oOiBEZWNsYXJlIGlz
VXNpbmdWZXJ0ZXhBdHRyaWIwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dCk6IERlYWwgd2l0aCB2ZXJ0ZXggYXR0cmliIDAuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3
QXJyYXlzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdFbGVtZW50cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIpOiBVc2UgY2FjaGVkIHZhbHVlIGluc3RlYWQgY2FsbCBn
bEdldFZlcnRleHRBdHJ0cmliLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZik6IFZhbGlkYXRlIGlucHV0LCBkZWFsIHdpdGggdmVydGV4IGF0
dHJpYiAwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWIxZnYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMmYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0Zik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWI0ZnYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliUG9pbnRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpoYW5kbGVOUE9UVGV4dHVyZXMpOiBNb3ZlIGlzR0xFUzJDb21wbGlh
bnQoKSB0byBjYWxsZXIuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYkltcGwpOiBIZWxwZXIgZm9yIHZlcnRleEF0dHJpYk5mdi4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdFZlcnRleEF0dHJpYjApOiBJbml0
aWFsaXplIHZlcnRleCBhdHRyaWIgMC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKTogU2ltdWxhdGUgdmVydGV4IGF0dHJpYiAw
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVz
QWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbik6IFJlc3RvcmUgc3RhdGVzIGFmdGVyIHNpbXVs
YXRpbmcgdmVydGV4IGF0dHJpYiAwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpW
ZXJ0ZXhBdHRyaWJTdGF0ZTo6VmVydGV4QXR0cmliU3RhdGUpOiBUcmFja2luZyBmdWxsIHZlcnRl
eHQgYXR0cmliIHN0YXRlcy4KKwogMjAxMC0wNi0zMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3Nz
eUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGRmaXggYWZ0ZXIgcjYyMTk2
IGFuZCByNjIyMTQuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZp
c2lvbiA2MjE1OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsMTggKzcxLDI3IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpjYWNoZUFj
dGl2ZUF0dHJpYkxvY2EKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFdlYkdMUHJvZ3JhbTo6
bnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkKK2ludCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0
dHJpYkxvY2F0aW9ucygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9h
Y3RpdmVBdHRyaWJMb2NhdGlvbnMuc2l6ZSgpKTsKIH0KIAotaW50IFdlYkdMUHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmliTG9jYXRpb24oaW50IGluZGV4KQoraW50IFdlYkdMUHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmliTG9jYXRpb24oaW50IGluZGV4KSBjb25zdAogewogICAgIGlmIChpbmRleCA8IDAg
fHwgaW5kZXggPj0gbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkpCiAgICAgICAgIHJldHVybiAt
MTsKICAgICByZXR1cm4gbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90
PihpbmRleCldOwogfQogCitib29sIFdlYkdMUHJvZ3JhbTo6aXNVc2luZ1ZlcnRleEF0dHJpYjAo
KSBjb25zdAoreworICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCBudW1BY3RpdmVBdHRyaWJMb2Nh
dGlvbnMoKTsgKytpaSkgeworICAgICAgICBpZiAoIWdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGlp
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xQcm9ncmFtLmgJKHJldmlzaW9uIDYyMTU4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAvLyBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9uKCkgaXMgb25s
eSBjYWxsZWQgb25jZSBhZnRlciBsaW5rUHJvZ3JhbSgpCiAgICAgICAgIC8vIHN1Y2NlZWRzLgog
ICAgICAgICBib29sIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7Ci0gICAgICAgIGludCBu
dW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKLSAgICAgICAgaW50IGdldEFjdGl2ZUF0dHJpYkxv
Y2F0aW9uKGludCBpbmRleCk7CisgICAgICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KSBjb25zdDsKKyAgICAgICAgaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGludCBpbmRleCkg
Y29uc3Q7CisKKyAgICAgICAgYm9vbCBpc1VzaW5nVmVydGV4QXR0cmliMCgpIGNvbnN0OwogCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCShyZXZpc2lvbiA2MjE1OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDggKzEyMSwxMCBAQCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSwgJm1heEN1
YmVNYXBUZXh0dXJlU2l6ZSk7CiAgICAgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUgPSBtYXhDdWJl
TWFwVGV4dHVyZVNpemU7CiAKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSkgewogICAgICAgICBjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVy
ZXMxeDEoKTsKKyAgICAgICAgaW5pdFZlcnRleEF0dHJpYjAoKTsKKyAgICB9CiAgICAgbV9jb250
ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogICAg
IG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5o
ZWlnaHQoKSk7CiB9CkBAIC02NjksOSArNjcxLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkaXNhYmxlVmVydGUKICAgICAKICAgICBpZiAoaW5kZXggPCBtX3ZlcnRleEF0dHJpYlN0
YXRlLnNpemUoKSkKICAgICAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9
IGZhbHNlOwotICAgIAotICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworCisgICAgaWYgKGlu
ZGV4ID4gMCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOworICAgIH0KIH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlRWxlbWVudEFycmF5U2l6ZSh1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25n
IHR5cGUsIGxvbmcgb2Zmc2V0KQpAQCAtODUzLDkgKzg1NywxNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZHJhd0FycmF5cyh1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBo
YW5kbGVOUE9UVGV4dHVyZXModHJ1ZSk7CisgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVk
ID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgdmVydGV4
QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0g
MSk7CisgICAgICAgIGhhbmRsZU5QT1RUZXh0dXJlcyh0cnVlKTsKKyAgICB9CiAgICAgbV9jb250
ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0gICAgaGFuZGxlTlBPVFRleHR1
cmVzKGZhbHNlKTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBoYW5k
bGVOUE9UVGV4dHVyZXMoZmFsc2UpOworICAgICAgICBpZiAodmVydGV4QXR0cmliMFNpbXVsYXRl
ZCkKKyAgICAgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9u
KCk7CisgICAgfQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIApAQCAt
ODk3LDkgKzkwOSwxNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRz
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgIGhhbmRsZU5QT1RUZXh0dXJl
cyh0cnVlKTsKKyAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBp
ZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVk
ID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKKyAgICAgICAgaGFuZGxlTlBP
VFRleHR1cmVzKHRydWUpOworICAgIH0KICAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2Rl
LCBjb3VudCwgdHlwZSwgb2Zmc2V0KTsKLSAgICBoYW5kbGVOUE9UVGV4dHVyZXMoZmFsc2UpOwor
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGhhbmRsZU5QT1RUZXh0dXJl
cyhmYWxzZSk7CisgICAgICAgIGlmICh2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICAg
ICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICB9CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQogCkBAIC0xNjY0LDM5ICsxNjg0
LDQ4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFYKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7Ci0g
ICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9B
VFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6IHsKLSAgICAgICAgaW50IG5hbWUgPSAwOwotICAg
ICAgICBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgJm5hbWUpOwot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KGZpbmRC
dWZmZXIoc3RhdGljX2Nhc3Q8UGxhdGZvcm0zRE9iamVjdD4obmFtZSkpKSk7CisgICAgaWYgKGlu
ZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoK
KyAgICAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgIWluZGV4ICYmIG1fdmVydGV4QXR0
cmliU3RhdGVbMF0uYnVmZmVyQmluZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIKKyAgICAg
ICAgICAgIHx8IGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpCisgICAgICAgICAg
ICB8fCAhbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uYnVmZmVyQmluZGluZworICAgICAgICAg
ICAgfHwgIW1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmJ1ZmZlckJpbmRpbmctPm9iamVjdCgp
KQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fdmVydGV4QXR0cmliU3RhdGVbaW5k
ZXhdLmJ1ZmZlckJpbmRpbmcpKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOiB7Ci0gICAgICAgIGludCB2YWx1ZSA9IDA7Ci0gICAg
ICAgIG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCAmdmFsdWUpOwot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci0g
ICAgfQorICAgICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCisg
ICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5lbmFibGVkKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAg
ICAgIGlmIChpbmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKKyAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLm5vcm1hbGl6ZWQpOwogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERTogewotICAgICAgICBpbnQgdmFs
dWUgPSAwOwotICAgICAgICBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFt
ZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxsb25n
Pih2YWx1ZSkpOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRU
UklCX0FSUkFZX1RZUEU6IHsKLSAgICAgICAgaW50IHZhbHVlID0gMDsKLSAgICAgICAgbV9jb250
ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmFsdWUpKTsKLSAg
ICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOiB7
Ci0gICAgICAgIGZsb2F0IHZhbHVlWzRdID0gezB9OwotICAgICAgICBtX2NvbnRleHQtPmdldFZl
cnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCA0KSk7Ci0gICAgfQotICAgIGRlZmF1
bHQ6IHsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxsb25nPig0KSk7Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uc2l6
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJ
REU6CisgICAgICAgIGlmIChpbmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4oMCkpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnN0cmlk
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBF
OgorICAgICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCisgICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVCkpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1f
dmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnR5cGUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgaWYgKGluZGV4ID49IG1fdmVydGV4
QXR0cmliU3RhdGUuc2l6ZSgpKSB7CisgICAgICAgICAgICBmbG9hdCB2YWx1ZVs0XSA9IHsgMC4w
ZiwgMC4wZiwgMC4wZiwgMS4wZiB9OworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhG
bG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgNCkpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJTdGF0ZVtp
bmRleF0udmFsdWUsIDQpKTsKKyAgICBkZWZhdWx0OgogICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQotICAgIH0KIH0KIAogbG9uZyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1
bnNpZ25lZCBsb25nIHBuYW1lKQpAQCAtMjk5NywxMjMgKzMwMjYsMTM2IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2cKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
MWYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB2MCkKIHsKLSAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmKGluZHgsIHYwKTsKLSAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOworICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkp
IHsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOworICAgICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIH0KKyAgICBtX3ZlcnRleEF0
dHJpYlN0YXRlW2luZGV4XS52YWx1ZVswXSA9IHYwOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgRmxvYXQzMkFycmF5
KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25l
ZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8g
bWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQKLSAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmR4LCB2LT5kYXRhKCkpOwotICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgdmVydGV4QXR0cmliSW1wbChpbmRleCwg
diwgMSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2
LCBpbnQgc2l6ZSkKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMg
YmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIFVOVVNFRF9QQVJBTShzaXpl
KTsKLSAgICAKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmR4LCB2KTsKLSAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHZlcnRleEF0dHJpYkltcGwoaW5k
ZXgsIHYsIHNpemUsIDEpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmRleCwg
ZmxvYXQgdjAsIGZsb2F0IHYxKQogewotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmYoaW5k
eCwgdjAsIHYxKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIGlm
IChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKKyAgICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKKyAgICB9CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVb
MF0gPSB2MDsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVsxXSA9IHYxOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVk
IGxvbmcgaW5keCwgRmxvYXQzMkFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7
Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9y
IGF0dHJpYnV0ZSBiZWluZyBzZXQKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmR4
LCB2LT5kYXRhKCkpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAg
dmVydGV4QXR0cmliSW1wbChpbmRleCwgdiwgMik7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdiwgaW50
IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KHVuc2ln
bmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICAvLyBGSVhNRTogTmVl
ZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNl
dAotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICAKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYjJmdihpbmR4LCB2KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwor
ICAgIHZlcnRleEF0dHJpYkltcGwoaW5kZXgsIHYsIHNpemUsIDIpOwogfQogCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9h
dCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxv
YXQgdjIpCiB7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmR4LCB2MCwgdjEsIHYy
KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIGlmIChpbmRleCB8
fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIz
ZihpbmRleCwgdjAsIHYxLCB2Mik7CisgICAgICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CisgICAgfQorICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZhbHVlWzBdID0g
djA7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMV0gPSB2MTsKKyAgICBt
X3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVsyXSA9IHYyOwogfQogCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgRmxv
YXQzMkFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNm
dih1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0gICAgLy8gRklYTUU6
IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWlu
ZyBzZXQKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmR4LCB2LT5kYXRhKCkpOwot
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgdmVydGV4QXR0cmliSW1w
bChpbmRleCwgdiwgMyk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdiwgaW50IHNpemUpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5kZXgs
IGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUg
YXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIFVOVVNFRF9Q
QVJBTShzaXplKTsKLSAgICAKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmR4LCB2
KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHZlcnRleEF0dHJp
YkltcGwoaW5kZXgsIHYsIHNpemUsIDMpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEs
IGZsb2F0IHYyLCBmbG9hdCB2MykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYy
LCBmbG9hdCB2MykKIHsKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmKGluZHgsIHYwLCB2
MSwgdjIsIHYzKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIGlm
IChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOworICAgICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOworICAgIH0KKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4
XS52YWx1ZVswXSA9IHYwOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZhbHVlWzFd
ID0gdjE7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMl0gPSB2MjsKKyAg
ICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVszXSA9IHYzOwogfQogCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwg
RmxvYXQzMkFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjRmdih1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0gICAgLy8gRklY
TUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBi
ZWluZyBzZXQKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmR4LCB2LT5kYXRhKCkp
OwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgdmVydGV4QXR0cmli
SW1wbChpbmRleCwgdiwgNCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdiwgaW50IHNpemUpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1
cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIFVOVVNF
RF9QQVJBTShzaXplKTsKLSAgICAKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmR4
LCB2KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHZlcnRleEF0
dHJpYkltcGwoaW5kZXgsIHYsIHNpemUsIDQpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGxvbmcgc2l6ZSwg
dW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGxvbmcgc3RyaWRl
LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZGV4LCBs
b25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLCBsb25nIHN0cmlk
ZSwgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXIgfHwgaW5keCA+PSBtX21heFZlcnRleEF0
dHJpYnMpIHsKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIGlmIChpbmR4ID49IG1f
dmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQotICAgICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlLnJl
c2l6ZShpbmR4ICsgMSk7Ci0KKyAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQgfHwgc3RyaWRl
IDwgMCB8fCBvZmZzZXQgPCAwKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAvLyBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBl
bGVtZW50cyB0aGUgYm91bmQgYnVmZmVyIGNhbiBob2xkLCBnaXZlbiB0aGUgb2Zmc2V0LCBzaXpl
LCB0eXBlIGFuZCBzdHJpZGUKLSAgICBsb25nIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiBzaXpl
SW5CeXRlcyh0eXBlLCBlYyk7Ci0gICAgaWYgKGJ5dGVzUGVyRWxlbWVudCA8PSAwKQorICAgIGxv
bmcgYnl0ZXNQZXJFbGVtZW50ID0gMDsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RklYRUQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAg
IGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiBzaXplSW5CeXRlcyh0eXBlLCBlYyk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQorICAgICAg
ICBtX3ZlcnRleEF0dHJpYlN0YXRlLnJlc2l6ZShpbmRleCArIDEpOworCiAgICAgbG9uZyB2YWxp
ZGF0ZWRTdHJpZGUgPSBieXRlc1BlckVsZW1lbnQ7CiAgICAgaWYgKHN0cmlkZSAhPSAwKSB7CiAg
ICAgICAgIGlmICgobG9uZykgc3RyaWRlIDwgYnl0ZXNQZXJFbGVtZW50KSB7CiAgICAgICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKICAgICAg
ICAgdmFsaWRhdGVkU3RyaWRlID0gc3RyaWRlOwogICAgIH0KLSAgICBtX3ZlcnRleEF0dHJpYlN0
YXRlW2luZHhdLmJ1ZmZlckJpbmRpbmcgPSBtX2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAgbV92ZXJ0
ZXhBdHRyaWJTdGF0ZVtpbmR4XS5ieXRlc1BlckVsZW1lbnQgPSBieXRlc1BlckVsZW1lbnQ7Ci0g
ICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4XS5zdHJpZGUgPSB2YWxpZGF0ZWRTdHJpZGU7Ci0g
ICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4XS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0
cmlkZSwgb2Zmc2V0KTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5idWZmZXJCaW5k
aW5nID0gbV9ib3VuZEFycmF5QnVmZmVyOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhd
LmJ5dGVzUGVyRWxlbWVudCA9IGJ5dGVzUGVyRWxlbWVudDsKKyAgICBtX3ZlcnRleEF0dHJpYlN0
YXRlW2luZGV4XS5zaXplID0gc2l6ZTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS50
eXBlID0gdHlwZTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5ub3JtYWxpemVkID0g
bm9ybWFsaXplZDsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5zdHJpZGUgPSB2YWxp
ZGF0ZWRTdHJpZGU7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0ub2Zmc2V0ID0gb2Zm
c2V0OworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlw
ZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKQEAgLTMyOTMsOCArMzMzNSw2IEBAIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojppc0dMRVMyQ29tcGwKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omhh
bmRsZU5QT1RUZXh0dXJlcyhib29sIHByZXBhcmVUb0RyYXcpCiB7Ci0gICAgaWYgKGlzR0xFUzJD
b21wbGlhbnQoKSkKLSAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgcmVzZXRBY3RpdmVVbml0ID0g
ZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5pdHMuc2l6
ZSgpOyArK2lpKSB7CiAgICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0ubV90ZXh0dXJlMkRC
aW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS5tX3RleHR1cmUyREJpbmRpbmctPm5lZWRUb1Vz
ZUJsYWNrVGV4dHVyZSgpCkBAIC0zNjQ1LDYgKzM2ODUsMTA0IEBAIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYkltcGwodW5zaWduZWQgbG9uZyBpbmRleCwg
RmxvYXQzMkFycmF5KiB2LCBpbnQgZXhwZWN0ZWRTaXplKQoreworICAgIGlmICghdikgeworICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2ZXJ0ZXhBdHRyaWJJbXBs
KGluZGV4LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCBleHBlY3RlZFNpemUpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliSW1wbCh1bnNpZ25lZCBsb25nIGlu
ZGV4LCBmbG9hdCogdiwgaW50IHNpemUsIGludCBleHBlY3RlZFNpemUpCit7CisgICAgaWYgKCF2
KSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzaXpl
IDwgZXhwZWN0ZWRTaXplKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgc3dpdGNo
IChzaXplKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliMWZ2KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6
CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmRleCwgdik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgbV9jb250ZXh0LT52
ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgNDoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCB2KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CisgICAgfQorICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCBzaXplOyAr
K2lpKQorICAgICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVtpaV0gPSB2W2lp
XTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIwKCkK
K3sKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlLnJlc2l6ZSgxKTsKKyAgICBtX3ZlcnRleEF0dHJp
YjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLmdldCgp
KTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JV
RkZFUiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVyk7CisgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFs
c2UsIDAsIDApOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbMF0uYnVmZmVyQmluZGluZyA9IG1f
dmVydGV4QXR0cmliMEJ1ZmZlcjsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCk7CisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheSgwKTsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gMDsKKyAgICBt
X3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyVmFsdWVbMV0gPSAwLjBmOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJd
ID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IDEuMGY7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaW11bGF0ZVZlcnRleEF0dHJpYjAobG9uZyBu
dW1WZXJ0ZXgpCit7CisgICAgY29uc3QgVmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV92ZXJ0
ZXhBdHRyaWJTdGF0ZVswXTsKKyAgICBpZiAoc3RhdGUuZW5hYmxlZCB8fCAhbV9jdXJyZW50UHJv
Z3JhbSB8fCAhbV9jdXJyZW50UHJvZ3JhbS0+b2JqZWN0KCkKKyAgICAgICAgfHwgIW1fY3VycmVu
dFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLmdldCgpKTsKKyAgICBsb25nIGJ1ZmZlckRhdGFTaXpl
ID0gKG51bVZlcnRleCArIDEpICogNCAqIHNpemVvZihmbG9hdCk7CisgICAgaWYgKGJ1ZmZlckRh
dGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZQorICAgICAgICB8fCBzdGF0ZS52YWx1
ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQorICAgICAgICB8fCBzdGF0ZS52
YWx1ZVsxXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXQorICAgICAgICB8fCBzdGF0
ZS52YWx1ZVsyXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXQorICAgICAgICB8fCBz
dGF0ZS52YWx1ZVszXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkgeworICAgICAg
ICBSZWZQdHI8RmxvYXQzMkFycmF5PiBidWZmZXJEYXRhID0gRmxvYXQzMkFycmF5OjpjcmVhdGUo
KG51bVZlcnRleCArIDEpICogNCk7CisgICAgICAgIGZvciAobG9uZyBpaSA9IDA7IGlpIDwgbnVt
VmVydGV4ICsgMTsgKytpaSkgeworICAgICAgICAgICAgYnVmZmVyRGF0YS0+c2V0KGlpICogNCwg
c3RhdGUudmFsdWVbMF0pOworICAgICAgICAgICAgYnVmZmVyRGF0YS0+c2V0KGlpICogNCArIDEs
IHN0YXRlLnZhbHVlWzFdKTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGEtPnNldChpaSAqIDQgKyAy
LCBzdGF0ZS52YWx1ZVsyXSk7CisgICAgICAgICAgICBidWZmZXJEYXRhLT5zZXQoaWkgKiA0ICsg
Mywgc3RhdGUudmFsdWVbM10pOworICAgICAgICB9CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVy
RGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBidWZmZXJEYXRhLmdldCgpLCBH
cmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFTaXplOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVswXSA9IHN0YXRlLnZhbHVlWzBdOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVsxXSA9IHN0YXRlLnZhbHVlWzFdOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVsyXSA9IHN0YXRlLnZhbHVlWzJdOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVszXSA9IHN0YXRlLnZhbHVlWzNdOworICAgIH0KKyAgICBtX2NvbnRleHQtPnZlcnRl
eEF0dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwg
MCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpCit7CisgICAgY29uc3Qg
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVswXTsKKyAgICBp
ZiAoc3RhdGUuYnVmZmVyQmluZGluZyAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpIHsKKyAgICAg
ICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIs
IHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYlBvaW50ZXIoMCwgc3RhdGUuc2l6ZSwgc3RhdGUudHlwZSwgc3RhdGUubm9ybWFsaXplZCwg
c3RhdGUuc3RyaWRlLCBzdGF0ZS5vZmZzZXQpOworICAgIH0KKyAgICBtX2NvbnRleHQtPmJpbmRC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9ib3VuZEFycmF5QnVmZmVy
LmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaAkocmV2aXNpb24gNjIxNTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsMjAgKzI4MywyMCBAQCBjbGFz
cyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0q
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJv
Z3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVu
c2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2
KHVuc2lnbmVkIGxvbmcgaW5keCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgICAgICB2b2lk
IHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMsIGludCBz
aXplKTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZs
b2F0IHgsIGZsb2F0IHkpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBs
b25nIGluZHgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7Ci0gICAg
ICAgIHZvaWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB6KTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9u
ZyBpbmR4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmli
M2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOwotICAgICAg
ICB2b2lkIHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgeiwgZmxvYXQgdyk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2ln
bmVkIGxvbmcgaW5keCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgICAgICB2b2lkIHZlcnRl
eEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsK
LSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgbG9u
ZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25n
IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVu
c2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHgpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFm
dih1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgICAgIHZv
aWQgdmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMsIGlu
dCBzaXplKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZGV4
LCBmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWdu
ZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgICAgICB2b2lkIHZlcnRl
eEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7
CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgeik7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2ln
bmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2ZXJ0
ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUp
OworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJp
YjRmdih1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgICAg
IHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMs
IGludCBzaXplKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxv
bmcgaW5kZXgsIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0cmlkZSwgbG9uZyBvZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKQEAgLTM1
NywxNiArMzU3LDM2IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgLy8gQ2FjaGVk
IHZhbHVlcyBmb3IgdmVydGV4IGF0dHJpYiByYW5nZSBjaGVja3MKICAgICAgICAgY2xhc3MgVmVy
dGV4QXR0cmliU3RhdGUgewogICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBWZXJ0ZXhBdHRy
aWJTdGF0ZSgpIDogZW5hYmxlZChmYWxzZSksIGJ5dGVzUGVyRWxlbWVudCgwKSwgc3RyaWRlKDAp
LCBvZmZzZXQoMCkgeyB9CisgICAgICAgICAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSgpCisgICAgICAg
ICAgICAgICAgOiBlbmFibGVkKGZhbHNlKQorICAgICAgICAgICAgICAgICwgYnl0ZXNQZXJFbGVt
ZW50KDApCisgICAgICAgICAgICAgICAgLCBzaXplKDQpCisgICAgICAgICAgICAgICAgLCB0eXBl
KEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCkKKyAgICAgICAgICAgICAgICAsIG5vcm1hbGl6ZWQo
ZmFsc2UpCisgICAgICAgICAgICAgICAgLCBzdHJpZGUoMCkKKyAgICAgICAgICAgICAgICAsIG9m
ZnNldCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhbHVlWzBdID0gMC4wZjsK
KyAgICAgICAgICAgICAgICB2YWx1ZVsxXSA9IDAuMGY7CisgICAgICAgICAgICAgICAgdmFsdWVb
Ml0gPSAwLjBmOworICAgICAgICAgICAgICAgIHZhbHVlWzNdID0gMS4wZjsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJvb2wgZW5hYmxlZDsKICAgICAgICAgICAgIFJlZlB0cjxXZWJHTEJ1
ZmZlcj4gYnVmZmVyQmluZGluZzsKICAgICAgICAgICAgIGxvbmcgYnl0ZXNQZXJFbGVtZW50Owot
ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGU7Ci0gICAgICAgICAgICB1bnNpZ25lZCBs
b25nIG9mZnNldDsKKyAgICAgICAgICAgIGxvbmcgc2l6ZTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgdHlwZTsKKyAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZDsKKyAgICAgICAgICAgIGxv
bmcgc3RyaWRlOworICAgICAgICAgICAgbG9uZyBvZmZzZXQ7CisgICAgICAgICAgICBmbG9hdCB2
YWx1ZVs0XTsKICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxWZXJ0ZXhBdHRy
aWJTdGF0ZT4gbV92ZXJ0ZXhBdHRyaWJTdGF0ZTsKICAgICAgICAgdW5zaWduZWQgbV9tYXhWZXJ0
ZXhBdHRyaWJzOworICAgICAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG1fdmVydGV4QXR0cmliMEJ1
ZmZlcjsKKyAgICAgICAgbG9uZyBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplOworICAgICAgICBm
bG9hdCBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVs0XTsKIAogICAgICAgICBSZWZQdHI8V2Vi
R0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOwogICAgICAgICBSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CkBAIC00NjksNiArNDg5LDE1IEBAIGNsYXNzIFdl
YktpdENTU01hdHJpeDsKICAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlu
cHV0IHBhcmFtZXRlcnMgZm9yIHVuaWZvcm1NYXRyaXggZnVuY3Rpb25zLgogICAgICAgICBib29s
IHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgdm9pZCogdik7CiAKKyAgICAgICAgLy8gSGVs
cGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ2LgorICAgICAgICB2b2lkIHZlcnRleEF0
dHJpYkltcGwodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBpbnQgZXhwZWN0
ZWRTaXplKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJJbXBsKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgaW50IGV4cGVjdGVkU2l6ZSk7CisKKyAgICAgICAgLy8g
SGVscGVycyBmb3Igc2ltdWxhdGluZyB2ZXJ0ZXhBdHRyaWIwCisgICAgICAgIHZvaWQgaW5pdFZl
cnRleEF0dHJpYjAoKTsKKyAgICAgICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAobG9uZyBu
dW1WZXJ0ZXgpOworICAgICAgICB2b2lkIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBT
aW11bGF0aW9uKCk7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIFdlYkdMU3RhdGVSZXN0b3JlcjsK
ICAgICB9OwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjIyMykKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA2LTMwICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50IE9wZW5HTCBFUyAyLjAgc2VtYW50aWNzIGZvciB2ZXJ0
ZXggYXR0cmlidXRlIDAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQxMzAwCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJp
Yi1sb2NhdGlvbi10ZXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sOiBBZGRlZC4KKwogMjAx
MC0wNi0zMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQgZml4LiBVcGRhdGUgUXQgc3BlY2lmaWMgZXhwZWN0ZWQgZmlsZXMgYWZ0ZXIg
cjYyMjE1LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1hdHRy
aWItbG9jYXRpb24tdGVzdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5k
LWF0dHJpYi1sb2NhdGlvbi10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzMCBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50YXRpb25zIGRvbid0IGFs
bG93IG5hbWVzIHRoYXQgc3RhcnQgd2l0aCAnZ2xfJyB3aGVuIGNhbGxpbmcgYmluZEF0dHJpYkxv
Y2F0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ2FudmFzLmdldENvbnRl
eHQKK1BBU1MgW29iamVjdCBIVE1MQ2FudmFzRWxlbWVudF0gaXMgbm9uLW51bGwuCitQQVNTIFtv
YmplY3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0XSBpcyBub24tbnVsbC4KKworQ2hlY2tpbmcgZ2wu
YmluZEF0dHJpYkxvY2F0aW9uLgorUEFTUyBiaW5kQXR0cmliTG9jYXRpb24gc2hvdWxkIHJldHVy
biBJTlZBTElEX09QRVJBVElPTiBpZiBuYW1lIHN0YXJ0cyB3aXRoICdnbF8nCitQQVNTIGJpbmRB
dHRyaWJMb2NhdGlvbiBzaG91bGQgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OIGlmIG5hbWUgc3Rh
cnRzIHdpdGggJ2dsXycKK1BBU1MgcHJvZ3JhbSBsaW5rZWQgc3VjY2Vzc2Z1bGx5Cit2UG9zaXRp
b246MwordkNvbG9yICAgOjIKK1BBU1MgbG9jYXRpb24gb2YgdlBvc2l0b24gc2hvdWxkIGJlIDMK
K1BBU1MgbG9jYXRpb24gb2YgdkNvbG9yIHNob3VsZCBiZSAyCitQQVNTIGRyYXdpbmcgaXMgY29y
cmVjdAorUEFTUyBwcm9ncmFtIGxpbmtlZCBzdWNjZXNzZnVsbHkKK3ZQb3NpdGlvbjozCit2Q29s
b3IgICA6MAorUEFTUyBsb2NhdGlvbiBvZiB2UG9zaXRvbiBzaG91bGQgYmUgMworUEFTUyBsb2Nh
dGlvbiBvZiB2Q29sb3Igc2hvdWxkIGJlIDAKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0CitQQVNT
IGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1i
aW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk3
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0
aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxo
dG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl
eHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+V2ViR0wgQmluZEF0dHJpYkxvY2F0aW9u
IENvbmZvcm1hbmNlIFRlc3RzPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGNhbnZh
cyBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IiBpZD0iY2FudmFzIiB3aWR0aD0iNTAi
IGhlaWdodD0iNTAiPjwvY2FudmFzPgorPHNjcmlwdCBpZD0idnNoYWRlciIgdHlwZT0idGV4dC9z
b21ldGhpbmctbm90LWphdmFzY3JpcHQiPgorYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOworYXR0
cmlidXRlIHZlYzQgdkNvbG9yOwordmFyeWluZyB2ZWM0IGNvbG9yOwordm9pZCBtYWluKCkKK3sK
KyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsKKyAgICBjb2xvciA9IHZDb2xvcjsKK30KKzwv
c2NyaXB0PgorPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWph
dmFzY3JpcHQiPgordmFyeWluZyB2ZWM0IGNvbG9yOwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9G
cmFnQ29sb3IgPSBjb2xvcjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
aGlzIHRlc3QgZW5zdXJlcyBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgYWxsb3cgbmFtZXMg
dGhhdCBzdGFydCB3aXRoICdnbF8nIHdoZW4gY2FsbGluZyBiaW5kQXR0cmliTG9jYXRpb24uIik7
CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJDYW52YXMuZ2V0Q29udGV4dCIpOworCit2YXIgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworc2hvdWxkQmVOb25OdWxsKGNh
bnZhcyk7Cit2YXIgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIik7
CitzaG91bGRCZU5vbk51bGwoZ2wpOworCitmdW5jdGlvbiBmYWlsKHgseSwgYnVmLCBzaG91bGRC
ZSkKK3sKKyAgICB2YXIgaSA9ICh5KjUwK3gpICogNDsKKyAgICB2YXIgcmVhc29uID0gInBpeGVs
IGF0ICgiK3grIiwiK3krIikgaXMgKCIrYnVmW2ldKyIsIitidWZbaSsxXSsiLCIrYnVmW2krMl0r
IiwiK2J1ZltpKzNdKyIpLCBzaG91bGQgYmUgIitzaG91bGRCZTsKKyAgICB0ZXN0RmFpbGVkKHJl
YXNvbik7Cit9CisKK2Z1bmN0aW9uIHBhc3MoKQoreworICAgIHRlc3RQYXNzZWQoImRyYXdpbmcg
aXMgY29ycmVjdCIpOworfQorCitmdW5jdGlvbiBsb2FkU2hhZGVyKHNoYWRlclR5cGUsIHNoYWRl
cklkKSB7CisgIC8vIEdldCB0aGUgc2hhZGVyIHNvdXJjZS4KKyAgdmFyIHNoYWRlclNvdXJjZSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNoYWRlcklkKS50ZXh0OworCisgIC8vIENyZWF0ZSB0
aGUgc2hhZGVyIG9iamVjdAorICB2YXIgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKHNoYWRlclR5
cGUpOworICBpZiAoc2hhZGVyID09IG51bGwpIHsKKyAgICAgIGRlYnVnKCIqKiogRXJyb3I6IHVu
YWJsZSB0byBjcmVhdGUgc2hhZGVyICciK3NoYWRlcklkKyInIik7CisgICAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIC8vIExvYWQgdGhlIHNoYWRlciBzb3VyY2UKKyAgZ2wuc2hhZGVyU291cmNl
KHNoYWRlciwgc2hhZGVyU291cmNlKTsKKworICAvLyBDb21waWxlIHRoZSBzaGFkZXIKKyAgZ2wu
Y29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgIC8vIENoZWNrIHRoZSBjb21waWxlIHN0YXR1cwor
ICB2YXIgY29tcGlsZWQgPSBnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxF
X1NUQVRVUyk7CisgIGlmICghY29tcGlsZWQpIHsKKyAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHdy
b25nIGR1cmluZyBjb21waWxhdGlvbjsgZ2V0IHRoZSBlcnJvcgorICAgICAgdmFyIGVycm9yID0g
Z2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpOworICAgICAgZGVidWcoIioqKiBFcnJvciBjb21w
aWxpbmcgc2hhZGVyICciK3NoYWRlcisiJzoiK2Vycm9yKTsKKyAgICAgIGdsLmRlbGV0ZVNoYWRl
cihzaGFkZXIpOworICAgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgcmV0dXJuIHNoYWRlcjsKK30K
KworZGVidWcoIiIpOworZGVidWcoIkNoZWNraW5nIGdsLmJpbmRBdHRyaWJMb2NhdGlvbi4iKTsK
KwordmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CitnbC5iaW5kQXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgMCwgImdsX2ZvbyIpOworYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wu
SU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgImJpbmRBdHRyaWJMb2NhdGlvbiBzaG91bGQg
cmV0dXJuIElOVkFMSURfT1BFUkFUSU9OIGlmIG5hbWUgc3RhcnRzIHdpdGggJ2dsXyciKTsKK2ds
LmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCAiZ2xfVGV4Q29vcmQwIik7Cithc3NlcnRN
c2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAgICAgICAgICAiYmlu
ZEF0dHJpYkxvY2F0aW9uIHNob3VsZCByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT04gaWYgbmFtZSBz
dGFydHMgd2l0aCAnZ2xfJyIpOworCit2YXIgdnMgPSBsb2FkU2hhZGVyKGdsLlZFUlRFWF9TSEFE
RVIsICJ2c2hhZGVyIik7Cit2YXIgZnMgPSBsb2FkU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUiwg
ImZzaGFkZXIiKTsKK2dsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2cyk7CitnbC5hdHRhY2hTaGFk
ZXIocHJvZ3JhbSwgZnMpOworCit2YXIgcG9zaXRpb25zID0gZ2wuY3JlYXRlQnVmZmVyKCk7Citn
bC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRpb25zKTsKK2dsLmJ1ZmZlckRhdGEo
Z2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsgMCwwLjUsMCwgLTAuNSwtMC41LDAs
IDAuNSwtMC41LDAgXSksIGdsLlNUQVRJQ19EUkFXKTsKKwordmFyIGNvbG9ycyA9IGdsLmNyZWF0
ZUJ1ZmZlcigpOworZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGNvbG9ycyk7CitnbC5i
dWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbCisgICAwLDEsMCwx
LAorICAgMCwxLDAsMSwKKyAgIDAsMSwwLDFdKSwgZ2wuU1RBVElDX0RSQVcpOworCitmdW5jdGlv
biBzZXRCaW5kTG9jYXRpb25zKGNvbG9yTG9jYXRpb24sIHBvc2l0aW9uTG9jYXRpb24pIHsKKyAg
Z2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIHBvc2l0aW9uTG9jYXRpb24sICJ2UG9zaXRp
b24iKTsKKyAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGNvbG9yTG9jYXRpb24sICJ2
Q29sb3IiKTsKKyAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7CisgIGdsLnVzZVByb2dyYW0ocHJv
Z3JhbSk7CisgIHZhciBsaW5rZWQgPSAoZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBn
bC5MSU5LX1NUQVRVUykgIT0gMCk7CisgIGFzc2VydE1zZyhsaW5rZWQsICJwcm9ncmFtIGxpbmtl
ZCBzdWNjZXNzZnVsbHkiKTsKKworICBkZWJ1ZygidlBvc2l0aW9uOiIgKyBnbC5nZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCAidlBvc2l0aW9uIikpCisgIGRlYnVnKCJ2Q29sb3IgICA6IiArIGds
LmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJ2Q29sb3IiKSkKKyAgYXNzZXJ0TXNnKGdsLmdl
dEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJ2UG9zaXRpb24iKSA9PSBwb3NpdGlvbkxvY2F0aW9u
LAorICAgICAgICAgICAgImxvY2F0aW9uIG9mIHZQb3NpdG9uIHNob3VsZCBiZSAiICsgcG9zaXRp
b25Mb2NhdGlvbik7CisgIGFzc2VydE1zZyhnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAi
dkNvbG9yIikgPT0gY29sb3JMb2NhdGlvbiwKKyAgICAgICAgICAgICJsb2NhdGlvbiBvZiB2Q29s
b3Igc2hvdWxkIGJlICIgKyBjb2xvckxvY2F0aW9uKTsKKworICB2YXIgcGxvYyA9IGdsLmdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sICJ2UG9zaXRpb24iKTsKKyAgdmFyIGNsb2MgPSBnbC5nZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidkNvbG9yIik7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJS
QVlfQlVGRkVSLCBwb3NpdGlvbnMpOworICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwb3Np
dGlvbkxvY2F0aW9uKTsKKyAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwb3NpdGlvbkxvY2F0aW9u
LCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JV
RkZFUiwgY29sb3JzKTsKKyAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoY29sb3JMb2NhdGlv
bik7CisgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoY29sb3JMb2NhdGlvbiwgNCwgZ2wuRkxPQVQs
IGZhbHNlLCAwLCAwKTsKK30KKworZnVuY3Rpb24gY2hlY2tEcmF3KGNvbG9yTG9jYXRpb24sIHBv
c2l0aW9uTG9jYXRpb24sIHIsIGcsIGIsIGEpIHsKKyAgZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAx
KTsKKyAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQp
OworICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgMyk7CisKKyAgdmFyIHdpZHRoID0g
NTA7CisgIHZhciBoZWlnaHQgPSA1MDsKKyAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KHdpZHRo
ICogaGVpZ2h0ICogNCk7CisgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wu
UkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsKKworICBmdW5jdGlvbiBjaGVja1BpeGVsKHgs
IHksIHIsIGcsIGIsIGEpIHsKKyAgICB2YXIgb2Zmc2V0ID0gKHkgKiB3aWR0aCArIHgpICogNDsK
KyAgICBpZiAoYnVmW29mZnNldCArIDBdICE9IHIgfHwKKyAgICAgICAgYnVmW29mZnNldCArIDFd
ICE9IGcgfHwKKyAgICAgICAgYnVmW29mZnNldCArIDJdICE9IGIgfHwKKyAgICAgICAgYnVmW29m
ZnNldCArIDNdICE9IGEpIHsKKyAgICAgICAgZmFpbCh4LCB5LCBidWYsICIoIiArIHIgKyAiLCIg
KyBnICsgIiwiICsgYiArICIsIiArIGEgKyAiKSIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisKKyAgLy8gVGVzdCBzZXZlcmFsIGxvY2F0aW9u
cworICAvLyBGaXJzdCBsaW5lIHNob3VsZCBiZSBhbGwgYmxhY2sKKyAgdmFyIHN1Y2Nlc3MgPSB0
cnVlOworICBmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpCisgICAgc3VjY2VzcyA9IHN1Y2Nl
c3MgJiYgY2hlY2tQaXhlbChpLCAwLCAwLCAwLCAwLCAyNTUpOworCisgIC8vIExpbmUgMTUgc2hv
dWxkIGJlIHJlZCBmb3IgYXQgbGVhc3QgMTAgcmdiYSBwaXhlbHMgc3RhcnRpbmcgMjAgcGl4ZWxz
IGluCisgIHZhciBvZmZzZXQgPSAoMTUgKiA1MCArIDIwKSAqIDQ7CisgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTA7ICsraSkKKyAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjaGVja1BpeGVsKDIwICsg
aSwgMTUsIHIsIGcsIGIsIGEpOworCisgIC8vIExhc3QgbGluZSBzaG91bGQgYmUgYWxsIGJsYWNr
CisgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkKKyAgICBzdWNjZXNzID0gc3VjY2VzcyAm
JiBjaGVja1BpeGVsKGksIDQ5LCAwLCAwLCAwLCAyNTUpOworCisgIGlmIChzdWNjZXNzKQorICAg
IHBhc3MoKTsKKworICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocG9zaXRpb25Mb2NhdGlv
bik7CisgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShjb2xvckxvY2F0aW9uKTsKK30KKwor
c2V0QmluZExvY2F0aW9ucygyLCAzKTsKK2NoZWNrRHJhdygyLCAzLCAwLCAyNTUsIDAsIDI1NSk7
CisKK3NldEJpbmRMb2NhdGlvbnMoMCwgMyk7CitnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
MCk7CitnbC52ZXJ0ZXhBdHRyaWI0ZigwLCAxLCAwLCAwLCAxKTsKK2NoZWNrRHJhdygwLCAzLCAy
NTUsIDAsIDAsIDI1NSk7CisKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9S
Iik7CisKK2RlYnVnKCIiKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60189</attachid>
            <date>2010-06-30 20:19:13 -0700</date>
            <delta_ts>2010-07-01 15:59:55 -0700</delta_ts>
            <desc>revised patch: responding to gman&apos;s review</desc>
            <filename>va0.patch</filename>
            <type>text/plain</type>
            <size>38100</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgT3BlbkdMIEVTIDIuMCBzZW1hbnRpY3MgZm9yIHZlcnRleCBhdHRyaWJ1dGUgMAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzMDAKKworICAgICAg
ICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0
bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyk6IGNvbnN0Lgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbik6
IGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjppc1VzaW5nVmVydGV4QXR0
cmliMCk6IERldGVybWluZSB3aGV0aGVyIHZlcnRleCBhdHRyaWIgMCBpcyB1c2VkIGJ5IHRoZSBw
cm9ncmFtLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oOiBEZWNsYXJlIGlz
VXNpbmdWZXJ0ZXhBdHRyaWIwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dCk6IERlYWwgd2l0aCB2ZXJ0ZXggYXR0cmliIDAuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3
QXJyYXlzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdFbGVtZW50cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIpOiBVc2UgY2FjaGVkIHZhbHVlIGluc3RlYWQgY2FsbCBn
bEdldFZlcnRleHRBdHJ0cmliLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZik6IFZhbGlkYXRlIGlucHV0LCBkZWFsIHdpdGggdmVydGV4IGF0
dHJpYiAwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWIxZnYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMmYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0Zik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWI0ZnYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliUG9pbnRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpoYW5kbGVOUE9UVGV4dHVyZXMpOiBNb3ZlIGlzR0xFUzJDb21wbGlh
bnQoKSB0byBjYWxsZXIuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYkltcGwpOiBIZWxwZXIgZm9yIHZlcnRleEF0dHJpYk5mdi4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdFZlcnRleEF0dHJpYjApOiBJbml0
aWFsaXplIHZlcnRleCBhdHRyaWIgMC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKTogU2ltdWxhdGUgdmVydGV4IGF0dHJpYiAw
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVz
QWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbik6IFJlc3RvcmUgc3RhdGVzIGFmdGVyIHNpbXVs
YXRpbmcgdmVydGV4IGF0dHJpYiAwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpW
ZXJ0ZXhBdHRyaWJTdGF0ZTo6VmVydGV4QXR0cmliU3RhdGUpOiBUcmFja2luZyBmdWxsIHZlcnRl
eHQgYXR0cmliIHN0YXRlcy4KKwogMjAxMC0wNi0zMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3Nz
eUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGRmaXggYWZ0ZXIgcjYyMTk2
IGFuZCByNjIyMTQuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZp
c2lvbiA2MjE1OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsMTggKzcxLDI3IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpjYWNoZUFj
dGl2ZUF0dHJpYkxvY2EKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFdlYkdMUHJvZ3JhbTo6
bnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkKK2ludCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0
dHJpYkxvY2F0aW9ucygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9h
Y3RpdmVBdHRyaWJMb2NhdGlvbnMuc2l6ZSgpKTsKIH0KIAotaW50IFdlYkdMUHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmliTG9jYXRpb24oaW50IGluZGV4KQoraW50IFdlYkdMUHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmliTG9jYXRpb24oaW50IGluZGV4KSBjb25zdAogewogICAgIGlmIChpbmRleCA8IDAg
fHwgaW5kZXggPj0gbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkpCiAgICAgICAgIHJldHVybiAt
MTsKICAgICByZXR1cm4gbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90
PihpbmRleCldOwogfQogCitib29sIFdlYkdMUHJvZ3JhbTo6aXNVc2luZ1ZlcnRleEF0dHJpYjAo
KSBjb25zdAoreworICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCBudW1BY3RpdmVBdHRyaWJMb2Nh
dGlvbnMoKTsgKytpaSkgeworICAgICAgICBpZiAoIWdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGlp
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xQcm9ncmFtLmgJKHJldmlzaW9uIDYyMTU4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAvLyBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9uKCkgaXMgb25s
eSBjYWxsZWQgb25jZSBhZnRlciBsaW5rUHJvZ3JhbSgpCiAgICAgICAgIC8vIHN1Y2NlZWRzLgog
ICAgICAgICBib29sIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7Ci0gICAgICAgIGludCBu
dW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKLSAgICAgICAgaW50IGdldEFjdGl2ZUF0dHJpYkxv
Y2F0aW9uKGludCBpbmRleCk7CisgICAgICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KSBjb25zdDsKKyAgICAgICAgaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGludCBpbmRleCkg
Y29uc3Q7CisKKyAgICAgICAgYm9vbCBpc1VzaW5nVmVydGV4QXR0cmliMCgpIGNvbnN0OwogCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCShyZXZpc2lvbiA2MjE1OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDggKzEyMSwxMCBAQCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSwgJm1heEN1
YmVNYXBUZXh0dXJlU2l6ZSk7CiAgICAgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUgPSBtYXhDdWJl
TWFwVGV4dHVyZVNpemU7CiAKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSkgewogICAgICAgICBjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVy
ZXMxeDEoKTsKKyAgICAgICAgaW5pdFZlcnRleEF0dHJpYjAoKTsKKyAgICB9CiAgICAgbV9jb250
ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogICAg
IG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5o
ZWlnaHQoKSk7CiB9CkBAIC01NzUsNiArNTc3LDIwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVCdWZmZXIKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGJ1ZmZlci0+ZGVs
ZXRlT2JqZWN0KCk7CisKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBW
ZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX3ZlcnRleEF0dHJpYlN0YXRlWzBdOworICAgICAg
ICBpZiAoYnVmZmVyID09IHN0YXRlLmJ1ZmZlckJpbmRpbmcpIHsKKyAgICAgICAgICAgIHN0YXRl
LmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAgICAgICAgICBzdGF0
ZS5ieXRlc1BlckVsZW1lbnQgPSAwOworICAgICAgICAgICAgc3RhdGUuc2l6ZSA9IDQ7CisgICAg
ICAgICAgICBzdGF0ZS50eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICAg
ICAgc3RhdGUubm9ybWFsaXplZCA9IGZhbHNlOworICAgICAgICAgICAgc3RhdGUuc3RyaWRlID0g
MTY7CisgICAgICAgICAgICBzdGF0ZS5vcmlnaW5hbFN0cmlkZSA9IDA7CisgICAgICAgICAgICBz
dGF0ZS5vZmZzZXQgPSAwOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZm
ZXIpCkBAIC02NjksOSArNjg1LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNh
YmxlVmVydGUKICAgICAKICAgICBpZiAoaW5kZXggPCBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUo
KSkKICAgICAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IGZhbHNlOwot
ICAgIAotICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLSAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworCisgICAgaWYgKGluZGV4ID4gMCB8
fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoaW5kZXgpOworICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOworICAgIH0KIH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRWxl
bWVudEFycmF5U2l6ZSh1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxv
bmcgb2Zmc2V0KQpAQCAtODUzLDkgKzg3MSwxNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd0FycmF5cyh1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBoYW5kbGVOUE9U
VGV4dHVyZXModHJ1ZSk7CisgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7
CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgdmVydGV4QXR0cmliMFNp
bXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CisgICAg
ICAgIGhhbmRsZU5QT1RUZXh0dXJlcyh0cnVlKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0gICAgaGFuZGxlTlBPVFRleHR1cmVzKGZhbHNl
KTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBoYW5kbGVOUE9UVGV4
dHVyZXMoZmFsc2UpOworICAgICAgICBpZiAodmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAg
ICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAg
fQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIApAQCAtODk3LDkgKzky
MywxNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgIGhhbmRsZU5QT1RUZXh0dXJlcyh0cnVlKTsK
KyAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkgeworICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxh
dGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKKyAgICAgICAgaGFuZGxlTlBPVFRleHR1cmVz
KHRydWUpOworICAgIH0KICAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwg
dHlwZSwgb2Zmc2V0KTsKLSAgICBoYW5kbGVOUE9UVGV4dHVyZXMoZmFsc2UpOworICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGhhbmRsZU5QT1RUZXh0dXJlcyhmYWxzZSk7
CisgICAgICAgIGlmICh2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICAgICAgcmVzdG9y
ZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICB9CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQogCkBAIC0xNjY0LDM5ICsxNjk4LDQ4IEBAIFdl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFYKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7Ci0gICAgc3dpdGNo
IChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6IHsKLSAgICAgICAgaW50IG5hbWUgPSAwOwotICAgICAgICBtX2Nv
bnRleHQtPmdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgJm5hbWUpOwotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KGZpbmRCdWZmZXIoc3Rh
dGljX2Nhc3Q8UGxhdGZvcm0zRE9iamVjdD4obmFtZSkpKSk7CisgICAgaWYgKGluZGV4ID49IG1f
bWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwogICAgIH0KKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAg
aWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgIWluZGV4ICYmIG1fdmVydGV4QXR0cmliU3RhdGVb
MF0uYnVmZmVyQmluZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIKKyAgICAgICAgICAgIHx8
IGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpCisgICAgICAgICAgICB8fCAhbV92
ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uYnVmZmVyQmluZGluZworICAgICAgICAgICAgfHwgIW1f
dmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmJ1ZmZl
ckJpbmRpbmcpKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FS
UkFZX0VOQUJMRUQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9B
UlJBWV9OT1JNQUxJWkVEOiB7Ci0gICAgICAgIGludCB2YWx1ZSA9IDA7Ci0gICAgICAgIG1fY29u
dGV4dC0+Z2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci0gICAgfQorICAg
ICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5lbmFibGVkKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgIGlmIChp
bmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oZmFsc2UpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdmVydGV4
QXR0cmliU3RhdGVbaW5kZXhdLm5vcm1hbGl6ZWQpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERTogewotICAgICAgICBpbnQgdmFsdWUgPSAwOwot
ICAgICAgICBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgJnZhbHVl
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxsb25nPih2YWx1ZSkp
OwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZ
X1RZUEU6IHsKLSAgICAgICAgaW50IHZhbHVlID0gMDsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRW
ZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmFsdWUpKTsKLSAgICB9Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOiB7Ci0gICAgICAg
IGZsb2F0IHZhbHVlWzRdID0gezB9OwotICAgICAgICBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJp
YmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZs
b2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCA0KSk7Ci0gICAgfQotICAgIGRlZmF1bHQ6IHsKKyAg
ICAgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxsb25nPig0KSk7CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8obV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uc2l6ZSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CisgICAg
ICAgIGlmIChpbmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKKyAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4oMCkpOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLm9yaWdpbmFsU3RyaWRl
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6
CisgICAgICAgIGlmIChpbmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUKSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV92
ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udHlwZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOgorICAgICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhB
dHRyaWJTdGF0ZS5zaXplKCkpIHsKKyAgICAgICAgICAgIGZsb2F0IHZhbHVlWzRdID0geyAwLjBm
LCAwLjBmLCAwLjBmLCAxLjBmIH07CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZs
b2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCA0KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlN0YXRlW2lu
ZGV4XS52YWx1ZSwgNCkpOworICAgIGRlZmF1bHQ6CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9Ci0gICAgfQogfQogCiBsb25nIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVu
c2lnbmVkIGxvbmcgcG5hbWUpCkBAIC0yOTk3LDEyMyArMzA0MCwxNDMgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUHJvZwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIx
Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHYwKQogewotICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliMWYoaW5keCwgdjApOwotICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkg
eworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7CisgICAgICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgfQorICAgIG1fdmVydGV4QXR0
cmliU3RhdGVbaW5kZXhdLnZhbHVlWzBdID0gdjA7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtp
bmRleF0udmFsdWVbMV0gPSAwLjBmOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZh
bHVlWzJdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVszXSA9
IDEuMGY7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBGbG9hdDMyQXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJh
eSogdikKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVu
b3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
MWZ2KGluZHgsIHYtPmRhdGEoKSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKKyAgICB2ZXJ0ZXhBdHRyaWJJbXBsKGluZGV4LCB2LCAxKTsKIH0KIAotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0
KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIx
ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYsIGludCBzaXplKQogewotICAgIC8vIEZJ
WE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUg
YmVpbmcgc2V0Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIAotICAgIG1fY29udGV4dC0+
dmVydGV4QXR0cmliMWZ2KGluZHgsIHYpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CisgICAgdmVydGV4QXR0cmliSW1wbChpbmRleCwgdiwgc2l6ZSwgMSk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGlu
ZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB2MCwgZmxvYXQgdjEpCiB7Ci0g
ICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZihpbmR4LCB2MCwgdjEpOwotICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlh
bnQoKSkgeworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEp
OworICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIH0KKyAgICBt
X3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVswXSA9IHYwOworICAgIG1fdmVydGV4QXR0
cmliU3RhdGVbaW5kZXhdLnZhbHVlWzFdID0gdjE7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtp
bmRleF0udmFsdWVbMl0gPSAwLjBmOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZh
bHVlWzNdID0gMS4wZjsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIEZsb2F0MzJBcnJheSogdikKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmRleCwgRmxv
YXQzMkFycmF5KiB2KQogewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBp
cyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0Ci0gICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWIyZnYoaW5keCwgdi0+ZGF0YSgpKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworICAgIHZlcnRleEF0dHJpYkltcGwoaW5kZXgsIHYsIDIpOwogfQogCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5k
eCwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0g
ICAgLy8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0
dHJpYnV0ZSBiZWluZyBzZXQKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgCi0gICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5keCwgdik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKKyAgICB2ZXJ0ZXhBdHRyaWJJbXBsKGluZGV4LCB2LCBzaXplLCAyKTsK
IH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmKHVuc2lnbmVk
IGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB2
MCwgZmxvYXQgdjEsIGZsb2F0IHYyKQogewotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Yo
aW5keCwgdjAsIHYxLCB2Mik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
KyAgICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworICAgICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIH0KKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2lu
ZGV4XS52YWx1ZVswXSA9IHYwOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZhbHVl
WzFdID0gdjE7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMl0gPSB2MjsK
KyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVszXSA9IDEuMGY7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBp
bmR4LCBGbG9hdDMyQXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKIHsKLSAgICAv
LyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmli
dXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZHgsIHYtPmRh
dGEoKSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB2ZXJ0ZXhB
dHRyaWJJbXBsKGluZGV4LCB2LCAzKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9u
ZyBpbmRleCwgZmxvYXQqIHYsIGludCBzaXplKQogewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1h
a2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0Ci0gICAg
VU5VU0VEX1BBUkFNKHNpemUpOwotICAgIAotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Z2
KGluZHgsIHYpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgdmVy
dGV4QXR0cmliSW1wbChpbmRleCwgdiwgc2l6ZSwgMyk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBm
bG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHYwLCBmbG9hdCB2MSwg
ZmxvYXQgdjIsIGZsb2F0IHYzKQogewotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGYoaW5k
eCwgdjAsIHYxLCB2MiwgdjMpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7CisgICAgICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgfQorICAgIG1fdmVydGV4QXR0cmliU3Rh
dGVbaW5kZXhdLnZhbHVlWzBdID0gdjA7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0u
dmFsdWVbMV0gPSB2MTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVsyXSA9
IHYyOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZhbHVlWzNdID0gdjM7CiB9CiAK
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9u
ZyBpbmR4LCBGbG9hdDMyQXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKIHsKLSAg
ICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0
cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZHgsIHYt
PmRhdGEoKSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB2ZXJ0
ZXhBdHRyaWJJbXBsKGluZGV4LCB2LCA0KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2LCBpbnQgc2l6
ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQg
bG9uZyBpbmRleCwgZmxvYXQqIHYsIGludCBzaXplKQogewotICAgIC8vIEZJWE1FOiBOZWVkIHRv
IG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0Ci0g
ICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIAotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
NGZ2KGluZHgsIHYpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAg
dmVydGV4QXR0cmliSW1wbChpbmRleCwgdiwgc2l6ZSwgNCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgbG9u
ZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQgbG9u
ZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcg
aW5kZXgsIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIGxv
bmcgc3RyaWRlLCBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlciB8fCBpbmR4ID49IG1fbWF4
VmVydGV4QXR0cmlicykgeworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsK
ICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgaWYgKGlu
ZHggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCi0gICAgICAgIG1fdmVydGV4QXR0cmli
U3RhdGUucmVzaXplKGluZHggKyAxKTsKLQorICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCB8
fCBzdHJpZGUgPCAwIHx8IG9mZnNldCA8IDApIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIC8vIERldGVybWluZSB0aGUgbnVt
YmVyIG9mIGVsZW1lbnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZz
ZXQsIHNpemUsIHR5cGUgYW5kIHN0cmlkZQotICAgIGxvbmcgYnl0ZXNQZXJFbGVtZW50ID0gc2l6
ZSAqIHNpemVJbkJ5dGVzKHR5cGUsIGVjKTsKLSAgICBpZiAoYnl0ZXNQZXJFbGVtZW50IDw9IDAp
CisgICAgbG9uZyBieXRlc1BlckVsZW1lbnQgPSAwOworICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGSVhFRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoK
KyAgICAgICAgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHNpemVJbkJ5dGVzKHR5cGUsIGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKICAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkp
CisgICAgICAgIG1fdmVydGV4QXR0cmliU3RhdGUucmVzaXplKGluZGV4ICsgMSk7CisKICAgICBs
b25nIHZhbGlkYXRlZFN0cmlkZSA9IGJ5dGVzUGVyRWxlbWVudDsKICAgICBpZiAoc3RyaWRlICE9
IDApIHsKICAgICAgICAgaWYgKChsb25nKSBzdHJpZGUgPCBieXRlc1BlckVsZW1lbnQpIHsKICAg
ICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IAogICAgICAgICB2YWxpZGF0ZWRTdHJpZGUgPSBzdHJpZGU7CiAgICAgfQotICAgIG1fdmVydGV4
QXR0cmliU3RhdGVbaW5keF0uYnVmZmVyQmluZGluZyA9IG1fYm91bmRBcnJheUJ1ZmZlcjsKLSAg
ICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZHhdLmJ5dGVzUGVyRWxlbWVudCA9IGJ5dGVzUGVyRWxl
bWVudDsKLSAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZHhdLnN0cmlkZSA9IHZhbGlkYXRlZFN0
cmlkZTsKLSAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZHhdLm9mZnNldCA9IG9mZnNldDsKLSAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFs
aXplZCwgc3RyaWRlLCBvZmZzZXQpOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmJ1
ZmZlckJpbmRpbmcgPSBtX2JvdW5kQXJyYXlCdWZmZXI7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0
ZVtpbmRleF0uYnl0ZXNQZXJFbGVtZW50ID0gYnl0ZXNQZXJFbGVtZW50OworICAgIG1fdmVydGV4
QXR0cmliU3RhdGVbaW5kZXhdLnNpemUgPSBzaXplOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVb
aW5kZXhdLnR5cGUgPSB0eXBlOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLm5vcm1h
bGl6ZWQgPSBub3JtYWxpemVkOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnN0cmlk
ZSA9IHZhbGlkYXRlZFN0cmlkZTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5vcmln
aW5hbFN0cmlkZSA9IHN0cmlkZTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5vZmZz
ZXQgPSBvZmZzZXQ7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBz
aXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIG9mZnNldCk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMzI5Myw4ICszMzU2LDYgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmlzR0xFUzJDb21wbAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aGFuZGxlTlBPVFRleHR1cmVzKGJvb2wgcHJlcGFyZVRvRHJhdykKIHsKLSAgICBpZiAo
aXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICByZXR1cm47CiAgICAgYm9vbCByZXNldEFjdGl2
ZVVuaXQgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGlpID0gMDsgaWkgPCBtX3RleHR1cmVV
bml0cy5zaXplKCk7ICsraWkpIHsKICAgICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lpXS5tX3Rl
eHR1cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZTJEQmluZGluZy0+
bmVlZFRvVXNlQmxhY2tUZXh0dXJlKCkKQEAgLTM2NDUsNiArMzcwNiwxMDggQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZgogICAgIHJldHVybiB0cnVlOwogfQogCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliSW1wbCh1bnNpZ25lZCBsb25n
IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIGludCBleHBlY3RlZFNpemUpCit7CisgICAgaWYgKCF2
KSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZlcnRleEF0
dHJpYkltcGwoaW5kZXgsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJJbXBsKHVuc2lnbmVk
IGxvbmcgaW5kZXgsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgaW50IGV4cGVjdGVkU2l6ZSkKK3sKKyAg
ICBpZiAoIXYpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKHNpemUgPCBleHBlY3RlZFNpemUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAg
ICBzd2l0Y2ggKHNpemUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgMjoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBtX2Nv
bnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSA0OgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5k
ZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB9CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtp
bmRleF0udmFsdWVbMF0gPSAwLjBmOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZh
bHVlWzFdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVsyXSA9
IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbM10gPSAxLjBmOwor
ICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCBzaXplOyArK2lpKQorICAgICAgICBtX3ZlcnRleEF0
dHJpYlN0YXRlW2luZGV4XS52YWx1ZVtpaV0gPSB2W2lpXTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIwKCkKK3sKKyAgICBtX3ZlcnRleEF0dHJpYlN0
YXRlLnJlc2l6ZSgxKTsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIo
KTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JV
RkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLmdldCgpKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZl
ckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkRZTkFNSUNfRFJBVyk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAs
IDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIG1fdmVydGV4
QXR0cmliU3RhdGVbMF0uYnVmZmVyQmluZGluZyA9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsKKyAg
ICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwg
MCk7CisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBtX3Zl
cnRleEF0dHJpYjBCdWZmZXJTaXplID0gMDsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVswXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0gPSAwLjBmOwor
ICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJWYWx1ZVszXSA9IDEuMGY7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzaW11bGF0ZVZlcnRleEF0dHJpYjAobG9uZyBudW1WZXJ0ZXgpCit7CisgICAgY29uc3Qg
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVswXTsKKyAgICBp
ZiAoc3RhdGUuZW5hYmxlZCB8fCAhbV9jdXJyZW50UHJvZ3JhbSB8fCAhbV9jdXJyZW50UHJvZ3Jh
bS0+b2JqZWN0KCkKKyAgICAgICAgfHwgIW1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhB
dHRyaWIwKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
LmdldCgpKTsKKyAgICBsb25nIGJ1ZmZlckRhdGFTaXplID0gKG51bVZlcnRleCArIDEpICogNCAq
IHNpemVvZihmbG9hdCk7CisgICAgaWYgKGJ1ZmZlckRhdGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyU2l6ZQorICAgICAgICB8fCBzdGF0ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVswXQorICAgICAgICB8fCBzdGF0ZS52YWx1ZVsxXSAhPSBtX3ZlcnRleEF0dHJp
YjBCdWZmZXJWYWx1ZVsxXQorICAgICAgICB8fCBzdGF0ZS52YWx1ZVsyXSAhPSBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJWYWx1ZVsyXQorICAgICAgICB8fCBzdGF0ZS52YWx1ZVszXSAhPSBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkgeworICAgICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBi
dWZmZXJEYXRhID0gRmxvYXQzMkFycmF5OjpjcmVhdGUoKG51bVZlcnRleCArIDEpICogNCk7Cisg
ICAgICAgIGZvciAobG9uZyBpaSA9IDA7IGlpIDwgbnVtVmVydGV4ICsgMTsgKytpaSkgeworICAg
ICAgICAgICAgYnVmZmVyRGF0YS0+c2V0KGlpICogNCwgc3RhdGUudmFsdWVbMF0pOworICAgICAg
ICAgICAgYnVmZmVyRGF0YS0+c2V0KGlpICogNCArIDEsIHN0YXRlLnZhbHVlWzFdKTsKKyAgICAg
ICAgICAgIGJ1ZmZlckRhdGEtPnNldChpaSAqIDQgKyAyLCBzdGF0ZS52YWx1ZVsyXSk7CisgICAg
ICAgICAgICBidWZmZXJEYXRhLT5zZXQoaWkgKiA0ICsgMywgc3RhdGUudmFsdWVbM10pOworICAg
ICAgICB9CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCBidWZmZXJEYXRhLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1J
Q19EUkFXKTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFT
aXplOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IHN0YXRlLnZhbHVl
WzBdOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXSA9IHN0YXRlLnZhbHVl
WzFdOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IHN0YXRlLnZhbHVl
WzJdOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IHN0YXRlLnZhbHVl
WzNdOworICAgIH0KKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgNCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhB
dHRyaWIwU2ltdWxhdGlvbigpCit7CisgICAgY29uc3QgVmVydGV4QXR0cmliU3RhdGUmIHN0YXRl
ID0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVswXTsKKyAgICBpZiAoc3RhdGUuYnVmZmVyQmluZGluZyAh
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0
KCkpOworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3RhdGUuc2l6
ZSwgc3RhdGUudHlwZSwgc3RhdGUubm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJpZGUsIHN0
YXRlLm9mZnNldCk7CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCkpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lv
biA2MjE1OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4MywyMCArMjgzLDIwIEBAIGNsYXNzIFdlYktpdENTU01hdHJp
eDsKICAgICAgICAgdm9pZCB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICAgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9u
Q29kZSYpOwogCi0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliMWYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCB4KTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBp
bmR4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2
KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOwotICAgICAgICB2
b2lkIHZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSk7
Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgRmxvYXQz
MkFycmF5KiB2YWx1ZXMpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBs
b25nIGluZHgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIzZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOwot
ICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIEZsb2F0MzJB
cnJheSogdmFsdWVzKTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9u
ZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0
cmliNGYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9h
dCB3KTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBG
bG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2ln
bmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOwotICAgICAgICB2b2lkIHZl
cnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBsb25nIHNpemUsIHVuc2lnbmVk
IGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJik7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliMWYodW5zaWduZWQgbG9uZyBpbmRl
eCwgZmxvYXQgeCk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcg
aW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIx
ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOworICAgICAg
ICB2b2lkIHZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHgsIGZsb2F0
IHkpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZGV4LCBG
bG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KHVuc2ln
bmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKKyAgICAgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB6KTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmRleCwg
RmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjNmdih1bnNp
Z25lZCBsb25nIGluZGV4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7CisgICAgICAgIHZvaWQg
dmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgeiwgZmxvYXQgdyk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWI0ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOworICAg
ICAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmRleCwgbG9uZyBz
aXplLCB1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvbmcgc3RyaWRlLCBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYpOwogCiAgICAgICAgIHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIApAQCAtMzU3LDE2ICszNTcsMzggQEAg
Y2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgICAgICAvLyBDYWNoZWQgdmFsdWVzIGZvciB2ZXJ0
ZXggYXR0cmliIHJhbmdlIGNoZWNrcwogICAgICAgICBjbGFzcyBWZXJ0ZXhBdHRyaWJTdGF0ZSB7
CiAgICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIFZlcnRleEF0dHJpYlN0YXRlKCkgOiBlbmFi
bGVkKGZhbHNlKSwgYnl0ZXNQZXJFbGVtZW50KDApLCBzdHJpZGUoMCksIG9mZnNldCgwKSB7IH0K
KyAgICAgICAgICAgIFZlcnRleEF0dHJpYlN0YXRlKCkKKyAgICAgICAgICAgICAgICA6IGVuYWJs
ZWQoZmFsc2UpCisgICAgICAgICAgICAgICAgLCBieXRlc1BlckVsZW1lbnQoMCkKKyAgICAgICAg
ICAgICAgICAsIHNpemUoNCkKKyAgICAgICAgICAgICAgICAsIHR5cGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUKQorICAgICAgICAgICAgICAgICwgbm9ybWFsaXplZChmYWxzZSkKKyAgICAgICAg
ICAgICAgICAsIHN0cmlkZSgxNikKKyAgICAgICAgICAgICAgICAsIG9yaWdpbmFsU3RyaWRlKDAp
CisgICAgICAgICAgICAgICAgLCBvZmZzZXQoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB2YWx1ZVswXSA9IDAuMGY7CisgICAgICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOwor
ICAgICAgICAgICAgICAgIHZhbHVlWzJdID0gMC4wZjsKKyAgICAgICAgICAgICAgICB2YWx1ZVsz
XSA9IDEuMGY7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBib29sIGVuYWJsZWQ7CiAgICAg
ICAgICAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGJ1ZmZlckJpbmRpbmc7CiAgICAgICAgICAgICBs
b25nIGJ5dGVzUGVyRWxlbWVudDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlOwot
ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisgICAgICAgICAgICBsb25nIHNpemU7
CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHR5cGU7CisgICAgICAgICAgICBib29sIG5vcm1h
bGl6ZWQ7CisgICAgICAgICAgICBsb25nIHN0cmlkZTsKKyAgICAgICAgICAgIGxvbmcgb3JpZ2lu
YWxTdHJpZGU7CisgICAgICAgICAgICBsb25nIG9mZnNldDsKKyAgICAgICAgICAgIGZsb2F0IHZh
bHVlWzRdOwogICAgICAgICB9OwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFZlcnRleEF0dHJp
YlN0YXRlPiBtX3ZlcnRleEF0dHJpYlN0YXRlOwogICAgICAgICB1bnNpZ25lZCBtX21heFZlcnRl
eEF0dHJpYnM7CisgICAgICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyOworICAgICAgICBsb25nIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemU7CisgICAgICAgIGZs
b2F0IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzRdOwogCiAgICAgICAgIFJlZlB0cjxXZWJH
TFByb2dyYW0+IG1fY3VycmVudFByb2dyYW07CiAgICAgICAgIFJlZlB0cjxXZWJHTEZyYW1lYnVm
ZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKQEAgLTQ2OSw2ICs0OTEsMTUgQEAgY2xhc3MgV2Vi
S2l0Q1NTTWF0cml4OwogICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaW5w
dXQgcGFyYW1ldGVycyBmb3IgdW5pZm9ybU1hdHJpeCBmdW5jdGlvbnMuCiAgICAgICAgIGJvb2wg
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCB2b2lkKiB2KTsKIAorICAgICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb25zIGZvciB2ZXJ0ZXhBdHRyaWJOZnYuCisgICAgICAgIHZvaWQgdmVydGV4QXR0
cmliSW1wbCh1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIGludCBleHBlY3Rl
ZFNpemUpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYkltcGwodW5zaWduZWQgbG9uZyBpbmRl
eCwgZmxvYXQqIHYsIGludCBzaXplLCBpbnQgZXhwZWN0ZWRTaXplKTsKKworICAgICAgICAvLyBI
ZWxwZXJzIGZvciBzaW11bGF0aW5nIHZlcnRleEF0dHJpYjAKKyAgICAgICAgdm9pZCBpbml0VmVy
dGV4QXR0cmliMCgpOworICAgICAgICBib29sIHNpbXVsYXRlVmVydGV4QXR0cmliMChsb25nIG51
bVZlcnRleCk7CisgICAgICAgIHZvaWQgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNp
bXVsYXRpb24oKTsKKwogICAgICAgICBmcmllbmQgY2xhc3MgV2ViR0xTdGF0ZVJlc3RvcmVyOwog
ICAgIH07CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMjIzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8g
TW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnQgT3BlbkdMIEVTIDIuMCBzZW1hbnRpY3MgZm9yIHZlcnRl
eCBhdHRyaWJ1dGUgMAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDEzMDAKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLWJpbmQtYXR0cmli
LWxvY2F0aW9uLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0bWw6IEFkZGVkLgorCiAyMDEw
LTA2LTMwICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCBmaXguIFVwZGF0ZSBRdCBzcGVjaWZpYyBleHBlY3RlZCBmaWxlcyBhZnRlciBy
NjIyMTUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJp
Yi1sb2NhdGlvbi10ZXN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWJpbmQt
YXR0cmliLWxvY2F0aW9uLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMwIEBACitUaGlzIHRlc3QgZW5zdXJlcyBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgYWxs
b3cgbmFtZXMgdGhhdCBzdGFydCB3aXRoICdnbF8nIHdoZW4gY2FsbGluZyBiaW5kQXR0cmliTG9j
YXRpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitDYW52YXMuZ2V0Q29udGV4
dAorUEFTUyBbb2JqZWN0IEhUTUxDYW52YXNFbGVtZW50XSBpcyBub24tbnVsbC4KK1BBU1MgW29i
amVjdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRdIGlzIG5vbi1udWxsLgorCitDaGVja2luZyBnbC5i
aW5kQXR0cmliTG9jYXRpb24uCitQQVNTIGJpbmRBdHRyaWJMb2NhdGlvbiBzaG91bGQgcmV0dXJu
IElOVkFMSURfT1BFUkFUSU9OIGlmIG5hbWUgc3RhcnRzIHdpdGggJ2dsXycKK1BBU1MgYmluZEF0
dHJpYkxvY2F0aW9uIHNob3VsZCByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT04gaWYgbmFtZSBzdGFy
dHMgd2l0aCAnZ2xfJworUEFTUyBwcm9ncmFtIGxpbmtlZCBzdWNjZXNzZnVsbHkKK3ZQb3NpdGlv
bjozCit2Q29sb3IgICA6MgorUEFTUyBsb2NhdGlvbiBvZiB2UG9zaXRvbiBzaG91bGQgYmUgMwor
UEFTUyBsb2NhdGlvbiBvZiB2Q29sb3Igc2hvdWxkIGJlIDIKK1BBU1MgZHJhd2luZyBpcyBjb3Jy
ZWN0CitQQVNTIHByb2dyYW0gbGlua2VkIHN1Y2Nlc3NmdWxseQordlBvc2l0aW9uOjMKK3ZDb2xv
ciAgIDowCitQQVNTIGxvY2F0aW9uIG9mIHZQb3NpdG9uIHNob3VsZCBiZSAzCitQQVNTIGxvY2F0
aW9uIG9mIHZDb2xvciBzaG91bGQgYmUgMAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QKK1BBU1Mg
Z2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3Qu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWJp
bmQtYXR0cmliLWxvY2F0aW9uLXRlc3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTcg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRp
b25hbC8vRU4iCisgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0
bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4
dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5XZWJHTCBCaW5kQXR0cmliTG9jYXRpb24g
Q29uZm9ybWFuY2UgVGVzdHM8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8Y2FudmFz
IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCBibGFjazsiIGlkPSJjYW52YXMiIHdpZHRoPSI1MCIg
aGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8c2NyaXB0IGlkPSJ2c2hhZGVyIiB0eXBlPSJ0ZXh0L3Nv
bWV0aGluZy1ub3QtamF2YXNjcmlwdCI+CithdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247CithdHRy
aWJ1dGUgdmVjNCB2Q29sb3I7Cit2YXJ5aW5nIHZlYzQgY29sb3I7Cit2b2lkIG1haW4oKQorewor
ICAgIGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOworICAgIGNvbG9yID0gdkNvbG9yOworfQorPC9z
Y3JpcHQ+Cis8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2
YXNjcmlwdCI+Cit2YXJ5aW5nIHZlYzQgY29sb3I7Cit2b2lkIG1haW4oKQoreworICAgIGdsX0Zy
YWdDb2xvciA9IGNvbG9yOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRo
aXMgdGVzdCBlbnN1cmVzIFdlYkdMIGltcGxlbWVudGF0aW9ucyBkb24ndCBhbGxvdyBuYW1lcyB0
aGF0IHN0YXJ0IHdpdGggJ2dsXycgd2hlbiBjYWxsaW5nIGJpbmRBdHRyaWJMb2NhdGlvbi4iKTsK
KworZGVidWcoIiIpOworZGVidWcoIkNhbnZhcy5nZXRDb250ZXh0Iik7CisKK3ZhciBjYW52YXMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitzaG91bGRCZU5vbk51bGwoY2Fu
dmFzKTsKK3ZhciBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiKTsK
K3Nob3VsZEJlTm9uTnVsbChnbCk7CisKK2Z1bmN0aW9uIGZhaWwoeCx5LCBidWYsIHNob3VsZEJl
KQoreworICAgIHZhciBpID0gKHkqNTAreCkgKiA0OworICAgIHZhciByZWFzb24gPSAicGl4ZWwg
YXQgKCIreCsiLCIreSsiKSBpcyAoIitidWZbaV0rIiwiK2J1ZltpKzFdKyIsIitidWZbaSsyXSsi
LCIrYnVmW2krM10rIiksIHNob3VsZCBiZSAiK3Nob3VsZEJlOworICAgIHRlc3RGYWlsZWQocmVh
c29uKTsKK30KKworZnVuY3Rpb24gcGFzcygpCit7CisgICAgdGVzdFBhc3NlZCgiZHJhd2luZyBp
cyBjb3JyZWN0Iik7Cit9CisKK2Z1bmN0aW9uIGxvYWRTaGFkZXIoc2hhZGVyVHlwZSwgc2hhZGVy
SWQpIHsKKyAgLy8gR2V0IHRoZSBzaGFkZXIgc291cmNlLgorICB2YXIgc2hhZGVyU291cmNlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2hhZGVySWQpLnRleHQ7CisKKyAgLy8gQ3JlYXRlIHRo
ZSBzaGFkZXIgb2JqZWN0CisgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoc2hhZGVyVHlw
ZSk7CisgIGlmIChzaGFkZXIgPT0gbnVsbCkgeworICAgICAgZGVidWcoIioqKiBFcnJvcjogdW5h
YmxlIHRvIGNyZWF0ZSBzaGFkZXIgJyIrc2hhZGVySWQrIiciKTsKKyAgICAgIHJldHVybiBudWxs
OworICB9CisKKyAgLy8gTG9hZCB0aGUgc2hhZGVyIHNvdXJjZQorICBnbC5zaGFkZXJTb3VyY2Uo
c2hhZGVyLCBzaGFkZXJTb3VyY2UpOworCisgIC8vIENvbXBpbGUgdGhlIHNoYWRlcgorICBnbC5j
b21waWxlU2hhZGVyKHNoYWRlcik7CisKKyAgLy8gQ2hlY2sgdGhlIGNvbXBpbGUgc3RhdHVzCisg
IHZhciBjb21waWxlZCA9IGdsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIGdsLkNPTVBJTEVf
U1RBVFVTKTsKKyAgaWYgKCFjb21waWxlZCkgeworICAgICAgLy8gU29tZXRoaW5nIHdlbnQgd3Jv
bmcgZHVyaW5nIGNvbXBpbGF0aW9uOyBnZXQgdGhlIGVycm9yCisgICAgICB2YXIgZXJyb3IgPSBn
bC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7CisgICAgICBkZWJ1ZygiKioqIEVycm9yIGNvbXBp
bGluZyBzaGFkZXIgJyIrc2hhZGVyKyInOiIrZXJyb3IpOworICAgICAgZ2wuZGVsZXRlU2hhZGVy
KHNoYWRlcik7CisgICAgICByZXR1cm4gbnVsbDsKKyAgfQorICByZXR1cm4gc2hhZGVyOworfQor
CitkZWJ1ZygiIik7CitkZWJ1ZygiQ2hlY2tpbmcgZ2wuYmluZEF0dHJpYkxvY2F0aW9uLiIpOwor
Cit2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKK2dsLmJpbmRBdHRyaWJMb2NhdGlv
bihwcm9ncmFtLCAwLCAiZ2xfZm9vIik7Cithc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5J
TlZBTElEX09QRVJBVElPTiwKKyAgICAgICAgICAiYmluZEF0dHJpYkxvY2F0aW9uIHNob3VsZCBy
ZXR1cm4gSU5WQUxJRF9PUEVSQVRJT04gaWYgbmFtZSBzdGFydHMgd2l0aCAnZ2xfJyIpOworZ2wu
YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsICJnbF9UZXhDb29yZDAiKTsKK2Fzc2VydE1z
ZyhnbC5nZXRFcnJvcigpID09IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICJiaW5k
QXR0cmliTG9jYXRpb24gc2hvdWxkIHJldHVybiBJTlZBTElEX09QRVJBVElPTiBpZiBuYW1lIHN0
YXJ0cyB3aXRoICdnbF8nIik7CisKK3ZhciB2cyA9IGxvYWRTaGFkZXIoZ2wuVkVSVEVYX1NIQURF
UiwgInZzaGFkZXIiKTsKK3ZhciBmcyA9IGxvYWRTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSLCAi
ZnNoYWRlciIpOworZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZzKTsKK2dsLmF0dGFjaFNoYWRl
cihwcm9ncmFtLCBmcyk7CisKK3ZhciBwb3NpdGlvbnMgPSBnbC5jcmVhdGVCdWZmZXIoKTsKK2ds
LmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBwb3NpdGlvbnMpOworZ2wuYnVmZmVyRGF0YShn
bC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWyAwLDAuNSwwLCAtMC41LC0wLjUsMCwg
MC41LC0wLjUsMCBdKSwgZ2wuU1RBVElDX0RSQVcpOworCit2YXIgY29sb3JzID0gZ2wuY3JlYXRl
QnVmZmVyKCk7CitnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgY29sb3JzKTsKK2dsLmJ1
ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsKKyAgIDAsMSwwLDEs
CisgICAwLDEsMCwxLAorICAgMCwxLDAsMV0pLCBnbC5TVEFUSUNfRFJBVyk7CisKK2Z1bmN0aW9u
IHNldEJpbmRMb2NhdGlvbnMoY29sb3JMb2NhdGlvbiwgcG9zaXRpb25Mb2NhdGlvbikgeworICBn
bC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgcG9zaXRpb25Mb2NhdGlvbiwgInZQb3NpdGlv
biIpOworICBnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgY29sb3JMb2NhdGlvbiwgInZD
b2xvciIpOworICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTsKKyAgZ2wudXNlUHJvZ3JhbShwcm9n
cmFtKTsKKyAgdmFyIGxpbmtlZCA9IChnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGds
LkxJTktfU1RBVFVTKSAhPSAwKTsKKyAgYXNzZXJ0TXNnKGxpbmtlZCwgInByb2dyYW0gbGlua2Vk
IHN1Y2Nlc3NmdWxseSIpOworCisgIGRlYnVnKCJ2UG9zaXRpb246IiArIGdsLmdldEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sICJ2UG9zaXRpb24iKSkKKyAgZGVidWcoInZDb2xvciAgIDoiICsgZ2wu
Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInZDb2xvciIpKQorICBhc3NlcnRNc2coZ2wuZ2V0
QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInZQb3NpdGlvbiIpID09IHBvc2l0aW9uTG9jYXRpb24s
CisgICAgICAgICAgICAibG9jYXRpb24gb2YgdlBvc2l0b24gc2hvdWxkIGJlICIgKyBwb3NpdGlv
bkxvY2F0aW9uKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJ2
Q29sb3IiKSA9PSBjb2xvckxvY2F0aW9uLAorICAgICAgICAgICAgImxvY2F0aW9uIG9mIHZDb2xv
ciBzaG91bGQgYmUgIiArIGNvbG9yTG9jYXRpb24pOworCisgIHZhciBwbG9jID0gZ2wuZ2V0QXR0
cmliTG9jYXRpb24ocHJvZ3JhbSwgInZQb3NpdGlvbiIpOworICB2YXIgY2xvYyA9IGdsLmdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sICJ2Q29sb3IiKTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJB
WV9CVUZGRVIsIHBvc2l0aW9ucyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBvc2l0
aW9uTG9jYXRpb24pOworICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBvc2l0aW9uTG9jYXRpb24s
IDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVG
RkVSLCBjb2xvcnMpOworICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShjb2xvckxvY2F0aW9u
KTsKKyAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihjb2xvckxvY2F0aW9uLCA0LCBnbC5GTE9BVCwg
ZmFsc2UsIDAsIDApOworfQorCitmdW5jdGlvbiBjaGVja0RyYXcoY29sb3JMb2NhdGlvbiwgcG9z
aXRpb25Mb2NhdGlvbiwgciwgZywgYiwgYSkgeworICBnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDEp
OworICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7
CisgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAzKTsKKworICB2YXIgd2lkdGggPSA1
MDsKKyAgdmFyIGhlaWdodCA9IDUwOworICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgg
KiBoZWlnaHQgKiA0KTsKKyAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5S
R0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOworCisgIGZ1bmN0aW9uIGNoZWNrUGl4ZWwoeCwg
eSwgciwgZywgYiwgYSkgeworICAgIHZhciBvZmZzZXQgPSAoeSAqIHdpZHRoICsgeCkgKiA0Owor
ICAgIGlmIChidWZbb2Zmc2V0ICsgMF0gIT0gciB8fAorICAgICAgICBidWZbb2Zmc2V0ICsgMV0g
IT0gZyB8fAorICAgICAgICBidWZbb2Zmc2V0ICsgMl0gIT0gYiB8fAorICAgICAgICBidWZbb2Zm
c2V0ICsgM10gIT0gYSkgeworICAgICAgICBmYWlsKHgsIHksIGJ1ZiwgIigiICsgciArICIsIiAr
IGcgKyAiLCIgKyBiICsgIiwiICsgYSArICIpIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICAvLyBUZXN0IHNldmVyYWwgbG9jYXRpb25z
CisgIC8vIEZpcnN0IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFjaworICB2YXIgc3VjY2VzcyA9IHRy
dWU7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkKKyAgICBzdWNjZXNzID0gc3VjY2Vz
cyAmJiBjaGVja1BpeGVsKGksIDAsIDAsIDAsIDAsIDI1NSk7CisKKyAgLy8gTGluZSAxNSBzaG91
bGQgYmUgcmVkIGZvciBhdCBsZWFzdCAxMCByZ2JhIHBpeGVscyBzdGFydGluZyAyMCBwaXhlbHMg
aW4KKyAgdmFyIG9mZnNldCA9ICgxNSAqIDUwICsgMjApICogNDsKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDsgKytpKQorICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrUGl4ZWwoMjAgKyBp
LCAxNSwgciwgZywgYiwgYSk7CisKKyAgLy8gTGFzdCBsaW5lIHNob3VsZCBiZSBhbGwgYmxhY2sK
KyAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKQorICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYm
IGNoZWNrUGl4ZWwoaSwgNDksIDAsIDAsIDAsIDI1NSk7CisKKyAgaWYgKHN1Y2Nlc3MpCisgICAg
cGFzcygpOworCisgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwb3NpdGlvbkxvY2F0aW9u
KTsKKyAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGNvbG9yTG9jYXRpb24pOworfQorCitz
ZXRCaW5kTG9jYXRpb25zKDIsIDMpOworY2hlY2tEcmF3KDIsIDMsIDAsIDI1NSwgMCwgMjU1KTsK
Kworc2V0QmluZExvY2F0aW9ucygwLCAzKTsKK2dsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgw
KTsKK2dsLnZlcnRleEF0dHJpYjRmKDAsIDEsIDAsIDAsIDEpOworY2hlY2tEcmF3KDAsIDMsIDI1
NSwgMCwgMCwgMjU1KTsKKworc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1Ii
KTsKKworZGVidWcoIiIpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60306</attachid>
            <date>2010-07-01 15:59:55 -0700</date>
            <delta_ts>2010-07-01 16:49:36 -0700</delta_ts>
            <desc>revised patch: add a new test gl-vertex-attrib.html</desc>
            <filename>va0.patch</filename>
            <type>text/plain</type>
            <size>40781</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgT3BlbkdMIEVTIDIuMCBzZW1hbnRpY3MgZm9yIHZlcnRleCBhdHRyaWJ1dGUgMAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzMDAKKworICAgICAg
ICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0
bWwKKyAgICAgICAgICAgICAgZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdmVydGV4LWF0dHJpYi5odG1s
CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xQcm9ncmFtOjpudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMpOiBjb25zdC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24pOiBj
b25zdC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6aXNVc2luZ1ZlcnRleEF0dHJp
YjApOiBEZXRlcm1pbmUgd2hldGhlciB2ZXJ0ZXggYXR0cmliIDAgaXMgdXNlZCBieSB0aGUgcHJv
Z3JhbS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDogRGVjbGFyZSBpc1Vz
aW5nVmVydGV4QXR0cmliMC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQpOiBEZWFsIHdpdGggdmVydGV4IGF0dHJpYiAwLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0Fy
cmF5cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3RWxlbWVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0VmVydGV4QXR0cmliKTogVXNlIGNhY2hlZCB2YWx1ZSBpbnN0ZWFkIGNhbGwgZ2xH
ZXRWZXJ0ZXh0QXRydHJpYi4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMWYpOiBWYWxpZGF0ZSBpbnB1dCwgZGVhbCB3aXRoIHZlcnRleCBhdHRy
aWIgMC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliMWZ2KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjJmKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliNGZ2KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRleHR1cmVzKTogTW92ZSBpc0dMRVMyQ29tcGxpYW50
KCkgdG8gY2FsbGVyLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWJJbXBsKTogSGVscGVyIGZvciB2ZXJ0ZXhBdHRyaWJOZnYuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIwKTogSW5pdGlh
bGl6ZSB2ZXJ0ZXggYXR0cmliIDAuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnNpbXVsYXRlVmVydGV4QXR0cmliMCk6IFNpbXVsYXRlIHZlcnRleCBhdHRyaWIgMC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZVN0YXRlc0Fm
dGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24pOiBSZXN0b3JlIHN0YXRlcyBhZnRlciBzaW11bGF0
aW5nIHZlcnRleCBhdHRyaWIgMC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6VmVy
dGV4QXR0cmliU3RhdGU6OlZlcnRleEF0dHJpYlN0YXRlKTogVHJhY2tpbmcgZnVsbCB2ZXJ0ZXh0
IGF0dHJpYiBzdGF0ZXMuCisKIDIwMTAtMDYtMzAgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkZml4IGFmdGVyIHI2MjE5NiBh
bmQgcjYyMjE0LgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkocmV2aXNp
b24gNjIxNTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDE4ICs3MSwyNyBAQCBib29sIFdlYkdMUHJvZ3JhbTo6Y2FjaGVBY3Rp
dmVBdHRyaWJMb2NhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBXZWJHTFByb2dyYW06Om51
bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpCitpbnQgV2ViR0xQcm9ncmFtOjpudW1BY3RpdmVBdHRy
aWJMb2NhdGlvbnMoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fYWN0
aXZlQXR0cmliTG9jYXRpb25zLnNpemUoKSk7CiB9CiAKLWludCBXZWJHTFByb2dyYW06OmdldEFj
dGl2ZUF0dHJpYkxvY2F0aW9uKGludCBpbmRleCkKK2ludCBXZWJHTFByb2dyYW06OmdldEFjdGl2
ZUF0dHJpYkxvY2F0aW9uKGludCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoaW5kZXggPCAwIHx8
IGluZGV4ID49IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpKQogICAgICAgICByZXR1cm4gLTE7
CiAgICAgcmV0dXJuIG1fYWN0aXZlQXR0cmliTG9jYXRpb25zW3N0YXRpY19jYXN0PHNpemVfdD4o
aW5kZXgpXTsKIH0KIAorYm9vbCBXZWJHTFByb2dyYW06OmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCkg
Y29uc3QKK3sKKyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgbnVtQWN0aXZlQXR0cmliTG9jYXRp
b25zKCk7ICsraWkpIHsKKyAgICAgICAgaWYgKCFnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpaSkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFByb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5oCShyZXZpc2lvbiA2MjE1OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xQcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgLy8gY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbigpIGlzIG9ubHkg
Y2FsbGVkIG9uY2UgYWZ0ZXIgbGlua1Byb2dyYW0oKQogICAgICAgICAvLyBzdWNjZWVkcy4KICAg
ICAgICAgYm9vbCBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwotICAgICAgICBpbnQgbnVt
QWN0aXZlQXR0cmliTG9jYXRpb25zKCk7Ci0gICAgICAgIGludCBnZXRBY3RpdmVBdHRyaWJMb2Nh
dGlvbihpbnQgaW5kZXgpOworICAgICAgICBpbnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkg
Y29uc3Q7CisgICAgICAgIGludCBnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpbnQgaW5kZXgpIGNv
bnN0OworCisgICAgICAgIGJvb2wgaXNVc2luZ1ZlcnRleEF0dHJpYjAoKSBjb25zdDsKIAogICAg
IHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAkocmV2aXNpb24gNjIxNTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw4ICsxMjEsMTAgQEAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtYXhDdWJl
TWFwVGV4dHVyZVNpemUpOwogICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplID0gbWF4Q3ViZU1h
cFRleHR1cmVTaXplOwogCi0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCisgICAgaWYgKCFp
c0dMRVMyQ29tcGxpYW50KCkpIHsKICAgICAgICAgY3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVz
MXgxKCk7CisgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisgICAgfQogICAgIG1fY29udGV4
dC0+cmVzaGFwZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKICAgICBt
X2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVp
Z2h0KCkpOwogfQpAQCAtNTc1LDYgKzU3NywyMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVsZXRlQnVmZmVyCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBidWZmZXItPmRlbGV0
ZU9iamVjdCgpOworCisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgVmVy
dGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVswXTsKKyAgICAgICAg
aWYgKGJ1ZmZlciA9PSBzdGF0ZS5idWZmZXJCaW5kaW5nKSB7CisgICAgICAgICAgICBzdGF0ZS5i
dWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOworICAgICAgICAgICAgc3RhdGUu
Ynl0ZXNQZXJFbGVtZW50ID0gMDsKKyAgICAgICAgICAgIHN0YXRlLnNpemUgPSA0OworICAgICAg
ICAgICAgc3RhdGUudHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgICAg
IHN0YXRlLm5vcm1hbGl6ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0YXRlLnN0cmlkZSA9IDE2
OworICAgICAgICAgICAgc3RhdGUub3JpZ2luYWxTdHJpZGUgPSAwOworICAgICAgICAgICAgc3Rh
dGUub2Zmc2V0ID0gMDsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVy
KQpAQCAtNjY5LDkgKzY4NSwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJs
ZVZlcnRlCiAgICAgCiAgICAgaWYgKGluZGV4IDwgbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkp
CiAgICAgICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmVuYWJsZWQgPSBmYWxzZTsKLSAg
ICAKLSAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci0gICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKworICAgIGlmIChpbmRleCA+IDAgfHwg
aXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KGluZGV4KTsKKyAgICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKKyAgICB9CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUVsZW1l
bnRBcnJheVNpemUodW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25n
IG9mZnNldCkKQEAgLTg1Myw5ICs4NzEsMTcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdBcnJheXModQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaGFuZGxlTlBPVFRl
eHR1cmVzKHRydWUpOworICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwor
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11
bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOworICAgICAg
ICBoYW5kbGVOUE9UVGV4dHVyZXModHJ1ZSk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZHJhd0Fy
cmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwotICAgIGhhbmRsZU5QT1RUZXh0dXJlcyhmYWxzZSk7
CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgaGFuZGxlTlBPVFRleHR1
cmVzKGZhbHNlKTsKKyAgICAgICAgaWYgKHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAgICAg
ICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIH0K
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKQEAgLTg5Nyw5ICs5MjMs
MTcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICBoYW5kbGVOUE9UVGV4dHVyZXModHJ1ZSk7Cisg
ICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMy
Q29tcGxpYW50KCkpIHsKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRl
VmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7CisgICAgICAgIGhhbmRsZU5QT1RUZXh0dXJlcyh0
cnVlKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5
cGUsIG9mZnNldCk7Ci0gICAgaGFuZGxlTlBPVFRleHR1cmVzKGZhbHNlKTsKKyAgICBpZiAoIWlz
R0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBoYW5kbGVOUE9UVGV4dHVyZXMoZmFsc2UpOwor
ICAgICAgICBpZiAodmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgICAgIHJlc3RvcmVT
dGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgfQogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIApAQCAtMTY2NCwzOSArMTY5OCw0OCBAQCBXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwotICAgIHN3aXRjaCAo
cG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZ
X0JVRkZFUl9CSU5ESU5HOiB7Ci0gICAgICAgIGludCBuYW1lID0gMDsKLSAgICAgICAgbV9jb250
ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsICZuYW1lKTsKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihmaW5kQnVmZmVyKHN0YXRp
Y19jYXN0PFBsYXRmb3JtM0RPYmplY3Q+KG5hbWUpKSkpOworICAgIGlmIChpbmRleCA+PSBtX21h
eFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKICAgICB9CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpICYmICFpbmRleCAmJiBtX3ZlcnRleEF0dHJpYlN0YXRlWzBd
LmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyCisgICAgICAgICAgICB8fCBp
bmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKQorICAgICAgICAgICAgfHwgIW1fdmVy
dGV4QXR0cmliU3RhdGVbaW5kZXhdLmJ1ZmZlckJpbmRpbmcKKyAgICAgICAgICAgIHx8ICFtX3Zl
cnRleEF0dHJpYlN0YXRlW2luZGV4XS5idWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMQnVmZmVyPihtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5idWZmZXJC
aW5kaW5nKSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJB
WV9FTkFCTEVEOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRDogewotICAgICAgICBpbnQgdmFsdWUgPSAwOwotICAgICAgICBtX2NvbnRl
eHQtPmdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOwotICAgIH0KKyAgICAg
ICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
bV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZW5hYmxlZCk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgorICAgICAgICBpZiAoaW5k
ZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3ZlcnRleEF0
dHJpYlN0YXRlW2luZGV4XS5ub3JtYWxpemVkKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6IHsKLSAgICAgICAgaW50IHZhbHVlID0gMDsKLSAg
ICAgICAgbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4odmFsdWUpKTsK
LSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9U
WVBFOiB7Ci0gICAgICAgIGludCB2YWx1ZSA9IDA7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0VmVy
dGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHZhbHVlKSk7Ci0gICAgfQotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjogewotICAgICAgICBm
bG9hdCB2YWx1ZVs0XSA9IHswfTsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJm
dihpbmRleCwgcG5hbWUsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9h
dDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgNCkpOwotICAgIH0KLSAgICBkZWZhdWx0OiB7CisgICAg
ICAgIGlmIChpbmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKKyAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4oNCkpOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnNpemUpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgorICAgICAg
ICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCisgICAgICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGxvbmc+KDApKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5vcmlnaW5hbFN0cmlkZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgor
ICAgICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCisgICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVCkpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdmVy
dGV4QXR0cmliU3RhdGVbaW5kZXhdLnR5cGUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0
cmliU3RhdGUuc2l6ZSgpKSB7CisgICAgICAgICAgICBmbG9hdCB2YWx1ZVs0XSA9IHsgMC4wZiwg
MC4wZiwgMC4wZiwgMS4wZiB9OworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9h
dDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgNCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRl
eF0udmFsdWUsIDQpKTsKKyAgICBkZWZhdWx0OgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQotICAgIH0KIH0KIAogbG9uZyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNp
Z25lZCBsb25nIHBuYW1lKQpAQCAtMjk5NywxMjMgKzMwNDAsMTQzIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2cKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB2MCkKIHsKLSAgICBt
X2NvbnRleHQtPnZlcnRleEF0dHJpYjFmKGluZHgsIHYwKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOworICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsK
KyAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOworICAgICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIH0KKyAgICBtX3ZlcnRleEF0dHJp
YlN0YXRlW2luZGV4XS52YWx1ZVswXSA9IHYwOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5k
ZXhdLnZhbHVlWzFdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1
ZVsyXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbM10gPSAx
LjBmOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KHVu
c2lnbmVkIGxvbmcgaW5keCwgRmxvYXQzMkFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkq
IHYpCiB7Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91
Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFm
dihpbmR4LCB2LT5kYXRhKCkpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CisgICAgdmVydGV4QXR0cmliSW1wbChpbmRleCwgdiwgMSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCog
diwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2
KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICAvLyBGSVhN
RTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJl
aW5nIHNldAotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICAKLSAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjFmdihpbmR4LCB2KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOworICAgIHZlcnRleEF0dHJpYkltcGwoaW5kZXgsIHYsIHNpemUsIDEpOwogfQogCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCB2MCwgZmxvYXQgdjEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgdjAsIGZsb2F0IHYxKQogewotICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliMmYoaW5keCwgdjAsIHYxKTsKLSAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50
KCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsK
KyAgICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB9CisgICAgbV92
ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMF0gPSB2MDsKKyAgICBtX3ZlcnRleEF0dHJp
YlN0YXRlW2luZGV4XS52YWx1ZVsxXSA9IHYxOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5k
ZXhdLnZhbHVlWzJdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1
ZVszXSA9IDEuMGY7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBGbG9hdDMyQXJyYXkqIHYpCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0
MzJBcnJheSogdikKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMg
YmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliMmZ2KGluZHgsIHYtPmRhdGEoKSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKKyAgICB2ZXJ0ZXhBdHRyaWJJbXBsKGluZGV4LCB2LCAyKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgs
IGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYsIGludCBzaXplKQogewotICAg
IC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRy
aWJ1dGUgYmVpbmcgc2V0Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIAotICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZHgsIHYpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CisgICAgdmVydGV4QXR0cmliSW1wbChpbmRleCwgdiwgc2l6ZSwgMik7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBs
b25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgdjAs
IGZsb2F0IHYxLCBmbG9hdCB2MikKIHsKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmKGlu
ZHgsIHYwLCB2MSwgdjIpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cisg
ICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBtX2NvbnRleHQt
PnZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKKyAgICAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB9CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRl
eF0udmFsdWVbMF0gPSB2MDsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVsx
XSA9IHYxOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZhbHVlWzJdID0gdjI7Cisg
ICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbM10gPSAxLjBmOwogfQogCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5k
eCwgRmxvYXQzMkFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0gICAgLy8g
RklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0
ZSBiZWluZyBzZXQKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmR4LCB2LT5kYXRh
KCkpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgdmVydGV4QXR0
cmliSW1wbChpbmRleCwgdiwgMyk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdiwgaW50IHNpemUpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcg
aW5kZXgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtl
IHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIFVO
VVNFRF9QQVJBTShzaXplKTsKLSAgICAKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihp
bmR4LCB2KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHZlcnRl
eEF0dHJpYkltcGwoaW5kZXgsIHYsIHNpemUsIDMpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxv
YXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZs
b2F0IHYyLCBmbG9hdCB2MykKIHsKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmKGluZHgs
IHYwLCB2MSwgdjIsIHYzKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwor
ICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOworICAgICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIH0KKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRl
W2luZGV4XS52YWx1ZVswXSA9IHYwOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZh
bHVlWzFdID0gdjE7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMl0gPSB2
MjsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVszXSA9IHYzOwogfQogCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcg
aW5keCwgRmxvYXQzMkFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0gICAg
Ly8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJp
YnV0ZSBiZWluZyBzZXQKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmR4LCB2LT5k
YXRhKCkpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgdmVydGV4
QXR0cmliSW1wbChpbmRleCwgdiwgNCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdiwgaW50IHNpemUp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxv
bmcgaW5kZXgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBt
YWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAg
IFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICAKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRm
dihpbmR4LCB2KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHZl
cnRleEF0dHJpYkltcGwoaW5kZXgsIHYsIHNpemUsIDQpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGxvbmcg
c2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGxvbmcg
c3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGlu
ZGV4LCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLCBsb25n
IHN0cmlkZSwgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXIgfHwgaW5keCA+PSBtX21heFZl
cnRleEF0dHJpYnMpIHsKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CiAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIGlmIChpbmR4
ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQotICAgICAgICBtX3ZlcnRleEF0dHJpYlN0
YXRlLnJlc2l6ZShpbmR4ICsgMSk7Ci0KKyAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQgfHwg
c3RyaWRlIDwgMCB8fCBvZmZzZXQgPCAwKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVyKSB7CisgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAvLyBEZXRlcm1pbmUgdGhlIG51bWJl
ciBvZiBlbGVtZW50cyB0aGUgYm91bmQgYnVmZmVyIGNhbiBob2xkLCBnaXZlbiB0aGUgb2Zmc2V0
LCBzaXplLCB0eXBlIGFuZCBzdHJpZGUKLSAgICBsb25nIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUg
KiBzaXplSW5CeXRlcyh0eXBlLCBlYyk7Ci0gICAgaWYgKGJ5dGVzUGVyRWxlbWVudCA8PSAwKQor
ICAgIGxvbmcgYnl0ZXNQZXJFbGVtZW50ID0gMDsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RklYRUQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Cisg
ICAgICAgIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiBzaXplSW5CeXRlcyh0eXBlLCBlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQor
ICAgICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlLnJlc2l6ZShpbmRleCArIDEpOworCiAgICAgbG9u
ZyB2YWxpZGF0ZWRTdHJpZGUgPSBieXRlc1BlckVsZW1lbnQ7CiAgICAgaWYgKHN0cmlkZSAhPSAw
KSB7CiAgICAgICAgIGlmICgobG9uZykgc3RyaWRlIDwgYnl0ZXNQZXJFbGVtZW50KSB7CiAgICAg
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAK
ICAgICAgICAgdmFsaWRhdGVkU3RyaWRlID0gc3RyaWRlOwogICAgIH0KLSAgICBtX3ZlcnRleEF0
dHJpYlN0YXRlW2luZHhdLmJ1ZmZlckJpbmRpbmcgPSBtX2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAg
bV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4XS5ieXRlc1BlckVsZW1lbnQgPSBieXRlc1BlckVsZW1l
bnQ7Ci0gICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4XS5zdHJpZGUgPSB2YWxpZGF0ZWRTdHJp
ZGU7Ci0gICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4XS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAg
bV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6
ZWQsIHN0cmlkZSwgb2Zmc2V0KTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5idWZm
ZXJCaW5kaW5nID0gbV9ib3VuZEFycmF5QnVmZmVyOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVb
aW5kZXhdLmJ5dGVzUGVyRWxlbWVudCA9IGJ5dGVzUGVyRWxlbWVudDsKKyAgICBtX3ZlcnRleEF0
dHJpYlN0YXRlW2luZGV4XS5zaXplID0gc2l6ZTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2lu
ZGV4XS50eXBlID0gdHlwZTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5ub3JtYWxp
emVkID0gbm9ybWFsaXplZDsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5zdHJpZGUg
PSB2YWxpZGF0ZWRTdHJpZGU7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0ub3JpZ2lu
YWxTdHJpZGUgPSBzdHJpZGU7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0ub2Zmc2V0
ID0gb2Zmc2V0OworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6
ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTMyOTMsOCArMzM1Niw2IEBAIGJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppc0dMRVMyQ29tcGwKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmhhbmRsZU5QT1RUZXh0dXJlcyhib29sIHByZXBhcmVUb0RyYXcpCiB7Ci0gICAgaWYgKGlz
R0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgcmVzZXRBY3RpdmVV
bml0ID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpOyArK2lpKSB7CiAgICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0ubV90ZXh0
dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS5tX3RleHR1cmUyREJpbmRpbmctPm5l
ZWRUb1VzZUJsYWNrVGV4dHVyZSgpCkBAIC0zNjQ1LDYgKzM3MDYsMTA4IEBAIGJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYkltcGwodW5zaWduZWQgbG9uZyBp
bmRleCwgRmxvYXQzMkFycmF5KiB2LCBpbnQgZXhwZWN0ZWRTaXplKQoreworICAgIGlmICghdikg
eworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2ZXJ0ZXhBdHRy
aWJJbXBsKGluZGV4LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCBleHBlY3RlZFNpemUpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliSW1wbCh1bnNpZ25lZCBs
b25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNpemUsIGludCBleHBlY3RlZFNpemUpCit7CisgICAg
aWYgKCF2KSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
IChzaXplIDwgZXhwZWN0ZWRTaXplKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAg
c3dpdGNoIChzaXplKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG1fY29udGV4dC0+
dmVydGV4QXR0cmliMWZ2KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmRleCwgdik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4
LCB2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgfQorICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5k
ZXhdLnZhbHVlWzBdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1
ZVsxXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMl0gPSAw
LjBmOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZhbHVlWzNdID0gMS4wZjsKKyAg
ICBmb3IgKGludCBpaSA9IDA7IGlpIDwgc2l6ZTsgKytpaSkKKyAgICAgICAgbV92ZXJ0ZXhBdHRy
aWJTdGF0ZVtpbmRleF0udmFsdWVbaWldID0gdltpaV07Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCit7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0
ZS5yZXNpemUoMSk7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gY3JlYXRlQnVmZmVyKCk7
CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZG
RVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci5nZXQoKSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJE
YXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpEWU5BTUlDX0RSQVcpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0
LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBtX3ZlcnRleEF0
dHJpYlN0YXRlWzBdLmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAg
bV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAp
OworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IDA7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVb
MF0gPSAwLjBmOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gMC4wZjsKKyAg
ICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyVmFsdWVbM10gPSAxLjBmOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGxvbmcgbnVtVmVydGV4KQoreworICAgIGNvbnN0IFZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliU3RhdGVbMF07CisgICAgaWYg
KHN0YXRlLmVuYWJsZWQgfHwgIW1fY3VycmVudFByb2dyYW0gfHwgIW1fY3VycmVudFByb2dyYW0t
Pm9iamVjdCgpCisgICAgICAgIHx8ICFtX2N1cnJlbnRQcm9ncmFtLT5pc1VzaW5nVmVydGV4QXR0
cmliMCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci5n
ZXQoKSk7CisgICAgbG9uZyBidWZmZXJEYXRhU2l6ZSA9IChudW1WZXJ0ZXggKyAxKSAqIDQgKiBz
aXplb2YoZmxvYXQpOworICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+IG1fdmVydGV4QXR0cmliMEJ1
ZmZlclNpemUKKyAgICAgICAgfHwgc3RhdGUudmFsdWVbMF0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyVmFsdWVbMF0KKyAgICAgICAgfHwgc3RhdGUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyVmFsdWVbMV0KKyAgICAgICAgfHwgc3RhdGUudmFsdWVbMl0gIT0gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyVmFsdWVbMl0KKyAgICAgICAgfHwgc3RhdGUudmFsdWVbM10gIT0gbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyVmFsdWVbM10pIHsKKyAgICAgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gYnVm
ZmVyRGF0YSA9IEZsb2F0MzJBcnJheTo6Y3JlYXRlKChudW1WZXJ0ZXggKyAxKSAqIDQpOworICAg
ICAgICBmb3IgKGxvbmcgaWkgPSAwOyBpaSA8IG51bVZlcnRleCArIDE7ICsraWkpIHsKKyAgICAg
ICAgICAgIGJ1ZmZlckRhdGEtPnNldChpaSAqIDQsIHN0YXRlLnZhbHVlWzBdKTsKKyAgICAgICAg
ICAgIGJ1ZmZlckRhdGEtPnNldChpaSAqIDQgKyAxLCBzdGF0ZS52YWx1ZVsxXSk7CisgICAgICAg
ICAgICBidWZmZXJEYXRhLT5zZXQoaWkgKiA0ICsgMiwgc3RhdGUudmFsdWVbMl0pOworICAgICAg
ICAgICAgYnVmZmVyRGF0YS0+c2V0KGlpICogNCArIDMsIHN0YXRlLnZhbHVlWzNdKTsKKyAgICAg
ICAgfQorICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFS
UkFZX0JVRkZFUiwgYnVmZmVyRGF0YS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNf
RFJBVyk7CisgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSBidWZmZXJEYXRhU2l6
ZTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0gPSBzdGF0ZS52YWx1ZVsw
XTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0gPSBzdGF0ZS52YWx1ZVsx
XTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSBzdGF0ZS52YWx1ZVsy
XTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSBzdGF0ZS52YWx1ZVsz
XTsKKyAgICB9CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0
cmliMFNpbXVsYXRpb24oKQoreworICAgIGNvbnN0IFZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9
IG1fdmVydGV4QXR0cmliU3RhdGVbMF07CisgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0g
bV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBzdGF0ZS5idWZmZXJCaW5kaW5nLmdldCgp
KTsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUs
IHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0
ZS5vZmZzZXQpOworICAgIH0KKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9ib3VuZEFycmF5QnVmZmVyLmdldCgpKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24g
NjIxNTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODMsMjAgKzI4MywyMCBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7
CiAgICAgICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7
CiAgICAgICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNv
ZGUmKTsKIAotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwg
ZmxvYXQgeCk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5k
eCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmdih1
bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKLSAgICAgICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHkpOwot
ICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIEZsb2F0MzJB
cnJheSogdmFsdWVzKTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9u
ZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0
cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KTsKLSAg
ICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBGbG9hdDMyQXJy
YXkqIHZhbHVlcyk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcg
aW5keCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJp
YjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQg
dyk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgRmxv
YXQzMkFycmF5KiB2YWx1ZXMpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjRmdih1bnNpZ25l
ZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB2ZXJ0
ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgbG9uZyBzaXplLCB1bnNpZ25lZCBs
b25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5kZXgs
IGZsb2F0IHgpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGlu
ZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2
KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKKyAgICAgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB4LCBmbG9hdCB5
KTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmRleCwgRmxv
YXQzMkFycmF5KiB2YWx1ZXMpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25l
ZCBsb25nIGluZGV4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7CisgICAgICAgIHZvaWQgdmVy
dGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
eik7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZs
b2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWdu
ZWQgbG9uZyBpbmRleCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOworICAgICAgICB2b2lkIHZl
cnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHosIGZsb2F0IHcpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25n
IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmli
NGZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKKyAgICAg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGxvbmcgc2l6
ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb25nIHN0cmlkZSwgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
KTsKIAogICAgICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKQEAgLTM1NywxNiArMzU3LDM4IEBAIGNs
YXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgLy8gQ2FjaGVkIHZhbHVlcyBmb3IgdmVydGV4
IGF0dHJpYiByYW5nZSBjaGVja3MKICAgICAgICAgY2xhc3MgVmVydGV4QXR0cmliU3RhdGUgewog
ICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSgpIDogZW5hYmxl
ZChmYWxzZSksIGJ5dGVzUGVyRWxlbWVudCgwKSwgc3RyaWRlKDApLCBvZmZzZXQoMCkgeyB9Cisg
ICAgICAgICAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSgpCisgICAgICAgICAgICAgICAgOiBlbmFibGVk
KGZhbHNlKQorICAgICAgICAgICAgICAgICwgYnl0ZXNQZXJFbGVtZW50KDApCisgICAgICAgICAg
ICAgICAgLCBzaXplKDQpCisgICAgICAgICAgICAgICAgLCB0eXBlKEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCkKKyAgICAgICAgICAgICAgICAsIG5vcm1hbGl6ZWQoZmFsc2UpCisgICAgICAgICAg
ICAgICAgLCBzdHJpZGUoMTYpCisgICAgICAgICAgICAgICAgLCBvcmlnaW5hbFN0cmlkZSgwKQor
ICAgICAgICAgICAgICAgICwgb2Zmc2V0KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdmFsdWVbMF0gPSAwLjBmOworICAgICAgICAgICAgICAgIHZhbHVlWzFdID0gMC4wZjsKKyAg
ICAgICAgICAgICAgICB2YWx1ZVsyXSA9IDAuMGY7CisgICAgICAgICAgICAgICAgdmFsdWVbM10g
PSAxLjBmOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbCBlbmFibGVkOwogICAgICAg
ICAgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBidWZmZXJCaW5kaW5nOwogICAgICAgICAgICAgbG9u
ZyBieXRlc1BlckVsZW1lbnQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OworICAgICAgICAgICAgbG9uZyBzaXplOwor
ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlOworICAgICAgICAgICAgYm9vbCBub3JtYWxp
emVkOworICAgICAgICAgICAgbG9uZyBzdHJpZGU7CisgICAgICAgICAgICBsb25nIG9yaWdpbmFs
U3RyaWRlOworICAgICAgICAgICAgbG9uZyBvZmZzZXQ7CisgICAgICAgICAgICBmbG9hdCB2YWx1
ZVs0XTsKICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxWZXJ0ZXhBdHRyaWJT
dGF0ZT4gbV92ZXJ0ZXhBdHRyaWJTdGF0ZTsKICAgICAgICAgdW5zaWduZWQgbV9tYXhWZXJ0ZXhB
dHRyaWJzOworICAgICAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG1fdmVydGV4QXR0cmliMEJ1ZmZl
cjsKKyAgICAgICAgbG9uZyBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplOworICAgICAgICBmbG9h
dCBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVs0XTsKIAogICAgICAgICBSZWZQdHI8V2ViR0xQ
cm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOwogICAgICAgICBSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZl
cj4gbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CkBAIC00NjksNiArNDkxLDE1IEBAIGNsYXNzIFdlYktp
dENTU01hdHJpeDsKICAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0
IHBhcmFtZXRlcnMgZm9yIHVuaWZvcm1NYXRyaXggZnVuY3Rpb25zLgogICAgICAgICBib29sIHZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgdm9pZCogdik7CiAKKyAgICAgICAgLy8gSGVscGVy
IGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ2LgorICAgICAgICB2b2lkIHZlcnRleEF0dHJp
YkltcGwodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBpbnQgZXhwZWN0ZWRT
aXplKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgs
IGZsb2F0KiB2LCBpbnQgc2l6ZSwgaW50IGV4cGVjdGVkU2l6ZSk7CisKKyAgICAgICAgLy8gSGVs
cGVycyBmb3Igc2ltdWxhdGluZyB2ZXJ0ZXhBdHRyaWIwCisgICAgICAgIHZvaWQgaW5pdFZlcnRl
eEF0dHJpYjAoKTsKKyAgICAgICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAobG9uZyBudW1W
ZXJ0ZXgpOworICAgICAgICB2b2lkIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11
bGF0aW9uKCk7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIFdlYkdMU3RhdGVSZXN0b3JlcjsKICAg
ICB9OwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjIyMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA2LTMwICBaaGVueWFvIE1v
ICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IE9wZW5HTCBFUyAyLjAgc2VtYW50aWNzIGZvciB2ZXJ0ZXgg
YXR0cmlidXRlIDAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQxMzAwCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1s
b2NhdGlvbi10ZXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMv
d2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC9nbC12ZXJ0ZXgtYXR0cmliLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdmVydGV4LWF0dHJpYi5odG1sOiBBZGRl
ZC4KKwogMjAxMC0wNi0zMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQgZml4LiBVcGRhdGUgUXQgc3BlY2lmaWMgZXhwZWN0ZWQgZmls
ZXMgYWZ0ZXIgcjYyMjE1LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wt
YmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzMCBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50YXRpb25z
IGRvbid0IGFsbG93IG5hbWVzIHRoYXQgc3RhcnQgd2l0aCAnZ2xfJyB3aGVuIGNhbGxpbmcgYmlu
ZEF0dHJpYkxvY2F0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ2FudmFz
LmdldENvbnRleHQKK1BBU1MgW29iamVjdCBIVE1MQ2FudmFzRWxlbWVudF0gaXMgbm9uLW51bGwu
CitQQVNTIFtvYmplY3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0XSBpcyBub24tbnVsbC4KKworQ2hl
Y2tpbmcgZ2wuYmluZEF0dHJpYkxvY2F0aW9uLgorUEFTUyBiaW5kQXR0cmliTG9jYXRpb24gc2hv
dWxkIHJldHVybiBJTlZBTElEX09QRVJBVElPTiBpZiBuYW1lIHN0YXJ0cyB3aXRoICdnbF8nCitQ
QVNTIGJpbmRBdHRyaWJMb2NhdGlvbiBzaG91bGQgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OIGlm
IG5hbWUgc3RhcnRzIHdpdGggJ2dsXycKK1BBU1MgcHJvZ3JhbSBsaW5rZWQgc3VjY2Vzc2Z1bGx5
Cit2UG9zaXRpb246MwordkNvbG9yICAgOjIKK1BBU1MgbG9jYXRpb24gb2YgdlBvc2l0b24gc2hv
dWxkIGJlIDMKK1BBU1MgbG9jYXRpb24gb2YgdkNvbG9yIHNob3VsZCBiZSAyCitQQVNTIGRyYXdp
bmcgaXMgY29ycmVjdAorUEFTUyBwcm9ncmFtIGxpbmtlZCBzdWNjZXNzZnVsbHkKK3ZQb3NpdGlv
bjozCit2Q29sb3IgICA6MAorUEFTUyBsb2NhdGlvbiBvZiB2UG9zaXRvbiBzaG91bGQgYmUgMwor
UEFTUyBsb2NhdGlvbiBvZiB2Q29sb3Igc2hvdWxkIGJlIDAKK1BBU1MgZHJhd2luZyBpcyBjb3Jy
ZWN0CitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKKworUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3QuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2Nh
dGlvbi10ZXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTk3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4w
MSBUcmFuc2l0aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2Uu
ZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNv
bnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+V2ViR0wgQmluZEF0dHJp
YkxvY2F0aW9uIENvbmZvcm1hbmNlIFRlc3RzPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPGNhbnZhcyBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IiBpZD0iY2FudmFzIiB3
aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorPHNjcmlwdCBpZD0idnNoYWRlciIgdHlw
ZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgorYXR0cmlidXRlIHZlYzQgdlBvc2l0
aW9uOworYXR0cmlidXRlIHZlYzQgdkNvbG9yOwordmFyeWluZyB2ZWM0IGNvbG9yOwordm9pZCBt
YWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsKKyAgICBjb2xvciA9IHZDb2xv
cjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0idGV4dC9zb21ldGhp
bmctbm90LWphdmFzY3JpcHQiPgordmFyeWluZyB2ZWM0IGNvbG9yOwordm9pZCBtYWluKCkKK3sK
KyAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdD4KK2Rlc2Ny
aXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgYWxs
b3cgbmFtZXMgdGhhdCBzdGFydCB3aXRoICdnbF8nIHdoZW4gY2FsbGluZyBiaW5kQXR0cmliTG9j
YXRpb24uIik7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJDYW52YXMuZ2V0Q29udGV4dCIpOworCit2
YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworc2hvdWxkQmVO
b25OdWxsKGNhbnZhcyk7Cit2YXIgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFs
LXdlYmdsIik7CitzaG91bGRCZU5vbk51bGwoZ2wpOworCitmdW5jdGlvbiBmYWlsKHgseSwgYnVm
LCBzaG91bGRCZSkKK3sKKyAgICB2YXIgaSA9ICh5KjUwK3gpICogNDsKKyAgICB2YXIgcmVhc29u
ID0gInBpeGVsIGF0ICgiK3grIiwiK3krIikgaXMgKCIrYnVmW2ldKyIsIitidWZbaSsxXSsiLCIr
YnVmW2krMl0rIiwiK2J1ZltpKzNdKyIpLCBzaG91bGQgYmUgIitzaG91bGRCZTsKKyAgICB0ZXN0
RmFpbGVkKHJlYXNvbik7Cit9CisKK2Z1bmN0aW9uIHBhc3MoKQoreworICAgIHRlc3RQYXNzZWQo
ImRyYXdpbmcgaXMgY29ycmVjdCIpOworfQorCitmdW5jdGlvbiBsb2FkU2hhZGVyKHNoYWRlclR5
cGUsIHNoYWRlcklkKSB7CisgIC8vIEdldCB0aGUgc2hhZGVyIHNvdXJjZS4KKyAgdmFyIHNoYWRl
clNvdXJjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNoYWRlcklkKS50ZXh0OworCisgIC8v
IENyZWF0ZSB0aGUgc2hhZGVyIG9iamVjdAorICB2YXIgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVy
KHNoYWRlclR5cGUpOworICBpZiAoc2hhZGVyID09IG51bGwpIHsKKyAgICAgIGRlYnVnKCIqKiog
RXJyb3I6IHVuYWJsZSB0byBjcmVhdGUgc2hhZGVyICciK3NoYWRlcklkKyInIik7CisgICAgICBy
ZXR1cm4gbnVsbDsKKyAgfQorCisgIC8vIExvYWQgdGhlIHNoYWRlciBzb3VyY2UKKyAgZ2wuc2hh
ZGVyU291cmNlKHNoYWRlciwgc2hhZGVyU291cmNlKTsKKworICAvLyBDb21waWxlIHRoZSBzaGFk
ZXIKKyAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgIC8vIENoZWNrIHRoZSBjb21waWxl
IHN0YXR1cworICB2YXIgY29tcGlsZWQgPSBnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBn
bC5DT01QSUxFX1NUQVRVUyk7CisgIGlmICghY29tcGlsZWQpIHsKKyAgICAgIC8vIFNvbWV0aGlu
ZyB3ZW50IHdyb25nIGR1cmluZyBjb21waWxhdGlvbjsgZ2V0IHRoZSBlcnJvcgorICAgICAgdmFy
IGVycm9yID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpOworICAgICAgZGVidWcoIioqKiBF
cnJvciBjb21waWxpbmcgc2hhZGVyICciK3NoYWRlcisiJzoiK2Vycm9yKTsKKyAgICAgIGdsLmRl
bGV0ZVNoYWRlcihzaGFkZXIpOworICAgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgcmV0dXJuIHNo
YWRlcjsKK30KKworZGVidWcoIiIpOworZGVidWcoIkNoZWNraW5nIGdsLmJpbmRBdHRyaWJMb2Nh
dGlvbi4iKTsKKwordmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CitnbC5iaW5kQXR0
cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgImdsX2ZvbyIpOworYXNzZXJ0TXNnKGdsLmdldEVycm9y
KCkgPT0gZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgImJpbmRBdHRyaWJMb2NhdGlv
biBzaG91bGQgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OIGlmIG5hbWUgc3RhcnRzIHdpdGggJ2ds
XyciKTsKK2dsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCAiZ2xfVGV4Q29vcmQwIik7
Cithc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAgICAg
ICAgICAiYmluZEF0dHJpYkxvY2F0aW9uIHNob3VsZCByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT04g
aWYgbmFtZSBzdGFydHMgd2l0aCAnZ2xfJyIpOworCit2YXIgdnMgPSBsb2FkU2hhZGVyKGdsLlZF
UlRFWF9TSEFERVIsICJ2c2hhZGVyIik7Cit2YXIgZnMgPSBsb2FkU2hhZGVyKGdsLkZSQUdNRU5U
X1NIQURFUiwgImZzaGFkZXIiKTsKK2dsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2cyk7CitnbC5h
dHRhY2hTaGFkZXIocHJvZ3JhbSwgZnMpOworCit2YXIgcG9zaXRpb25zID0gZ2wuY3JlYXRlQnVm
ZmVyKCk7CitnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRpb25zKTsKK2dsLmJ1
ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsgMCwwLjUsMCwgLTAu
NSwtMC41LDAsIDAuNSwtMC41LDAgXSksIGdsLlNUQVRJQ19EUkFXKTsKKwordmFyIGNvbG9ycyA9
IGdsLmNyZWF0ZUJ1ZmZlcigpOworZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGNvbG9y
cyk7CitnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbCisg
ICAwLDEsMCwxLAorICAgMCwxLDAsMSwKKyAgIDAsMSwwLDFdKSwgZ2wuU1RBVElDX0RSQVcpOwor
CitmdW5jdGlvbiBzZXRCaW5kTG9jYXRpb25zKGNvbG9yTG9jYXRpb24sIHBvc2l0aW9uTG9jYXRp
b24pIHsKKyAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIHBvc2l0aW9uTG9jYXRpb24s
ICJ2UG9zaXRpb24iKTsKKyAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGNvbG9yTG9j
YXRpb24sICJ2Q29sb3IiKTsKKyAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7CisgIGdsLnVzZVBy
b2dyYW0ocHJvZ3JhbSk7CisgIHZhciBsaW5rZWQgPSAoZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihw
cm9ncmFtLCBnbC5MSU5LX1NUQVRVUykgIT0gMCk7CisgIGFzc2VydE1zZyhsaW5rZWQsICJwcm9n
cmFtIGxpbmtlZCBzdWNjZXNzZnVsbHkiKTsKKworICBkZWJ1ZygidlBvc2l0aW9uOiIgKyBnbC5n
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidlBvc2l0aW9uIikpCisgIGRlYnVnKCJ2Q29sb3Ig
ICA6IiArIGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJ2Q29sb3IiKSkKKyAgYXNzZXJ0
TXNnKGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJ2UG9zaXRpb24iKSA9PSBwb3NpdGlv
bkxvY2F0aW9uLAorICAgICAgICAgICAgImxvY2F0aW9uIG9mIHZQb3NpdG9uIHNob3VsZCBiZSAi
ICsgcG9zaXRpb25Mb2NhdGlvbik7CisgIGFzc2VydE1zZyhnbC5nZXRBdHRyaWJMb2NhdGlvbihw
cm9ncmFtLCAidkNvbG9yIikgPT0gY29sb3JMb2NhdGlvbiwKKyAgICAgICAgICAgICJsb2NhdGlv
biBvZiB2Q29sb3Igc2hvdWxkIGJlICIgKyBjb2xvckxvY2F0aW9uKTsKKworICB2YXIgcGxvYyA9
IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJ2UG9zaXRpb24iKTsKKyAgdmFyIGNsb2Mg
PSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidkNvbG9yIik7CisgIGdsLmJpbmRCdWZm
ZXIoZ2wuQVJSQVlfQlVGRkVSLCBwb3NpdGlvbnMpOworICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShwb3NpdGlvbkxvY2F0aW9uKTsKKyAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwb3NpdGlv
bkxvY2F0aW9uLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworICBnbC5iaW5kQnVmZmVyKGds
LkFSUkFZX0JVRkZFUiwgY29sb3JzKTsKKyAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoY29s
b3JMb2NhdGlvbik7CisgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoY29sb3JMb2NhdGlvbiwgNCwg
Z2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKK30KKworZnVuY3Rpb24gY2hlY2tEcmF3KGNvbG9yTG9j
YXRpb24sIHBvc2l0aW9uTG9jYXRpb24sIHIsIGcsIGIsIGEpIHsKKyAgZ2wuY2xlYXJDb2xvcigw
LCAwLCAwLCAxKTsKKyAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JV
RkZFUl9CSVQpOworICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgMyk7CisKKyAgdmFy
IHdpZHRoID0gNTA7CisgIHZhciBoZWlnaHQgPSA1MDsKKyAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFy
cmF5KHdpZHRoICogaGVpZ2h0ICogNCk7CisgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhl
aWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsKKworICBmdW5jdGlvbiBjaGVj
a1BpeGVsKHgsIHksIHIsIGcsIGIsIGEpIHsKKyAgICB2YXIgb2Zmc2V0ID0gKHkgKiB3aWR0aCAr
IHgpICogNDsKKyAgICBpZiAoYnVmW29mZnNldCArIDBdICE9IHIgfHwKKyAgICAgICAgYnVmW29m
ZnNldCArIDFdICE9IGcgfHwKKyAgICAgICAgYnVmW29mZnNldCArIDJdICE9IGIgfHwKKyAgICAg
ICAgYnVmW29mZnNldCArIDNdICE9IGEpIHsKKyAgICAgICAgZmFpbCh4LCB5LCBidWYsICIoIiAr
IHIgKyAiLCIgKyBnICsgIiwiICsgYiArICIsIiArIGEgKyAiKSIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisKKyAgLy8gVGVzdCBzZXZlcmFs
IGxvY2F0aW9ucworICAvLyBGaXJzdCBsaW5lIHNob3VsZCBiZSBhbGwgYmxhY2sKKyAgdmFyIHN1
Y2Nlc3MgPSB0cnVlOworICBmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpCisgICAgc3VjY2Vz
cyA9IHN1Y2Nlc3MgJiYgY2hlY2tQaXhlbChpLCAwLCAwLCAwLCAwLCAyNTUpOworCisgIC8vIExp
bmUgMTUgc2hvdWxkIGJlIHJlZCBmb3IgYXQgbGVhc3QgMTAgcmdiYSBwaXhlbHMgc3RhcnRpbmcg
MjAgcGl4ZWxzIGluCisgIHZhciBvZmZzZXQgPSAoMTUgKiA1MCArIDIwKSAqIDQ7CisgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjaGVja1Bp
eGVsKDIwICsgaSwgMTUsIHIsIGcsIGIsIGEpOworCisgIC8vIExhc3QgbGluZSBzaG91bGQgYmUg
YWxsIGJsYWNrCisgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkKKyAgICBzdWNjZXNzID0g
c3VjY2VzcyAmJiBjaGVja1BpeGVsKGksIDQ5LCAwLCAwLCAwLCAyNTUpOworCisgIGlmIChzdWNj
ZXNzKQorICAgIHBhc3MoKTsKKworICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocG9zaXRp
b25Mb2NhdGlvbik7CisgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShjb2xvckxvY2F0aW9u
KTsKK30KKworc2V0QmluZExvY2F0aW9ucygyLCAzKTsKK2NoZWNrRHJhdygyLCAzLCAwLCAyNTUs
IDAsIDI1NSk7CisKK3NldEJpbmRMb2NhdGlvbnMoMCwgMyk7CitnbC5kaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoMCk7CitnbC52ZXJ0ZXhBdHRyaWI0ZigwLCAxLCAwLCAwLCAxKTsKK2NoZWNrRHJh
dygwLCAzLCAyNTUsIDAsIDAsIDI1NSk7CisKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImds
Lk5PX0VSUk9SIik7CisKK2RlYnVnKCIiKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9nbC12ZXJ0ZXgtYXR0cmliLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC12ZXJ0ZXgtYXR0cmliLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXZl
cnRleC1hdHRyaWItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACitU
aGlzIHRlc3QgZW5zdXJlcyBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgdmVydGV4QXR0cmliIGNhbiBi
ZSBzZXQgYW5kIHJlYWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitDYW52YXMu
Z2V0Q29udGV4dAorUEFTUyBjb250ZXh0IGV4aXN0cworCitDaGVja2luZyBnbC52ZXJ0ZXhBdHRy
aWIuCitQQVNTIGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIp
WzBdIGlzIDEKK1BBU1MgZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FU
VFJJQilbMV0gaXMgMgorUEFTUyBnbC5nZXRWZXJ0ZXhBdHRyaWIoMCwgZ2wuQ1VSUkVOVF9WRVJU
RVhfQVRUUklCKVsyXSBpcyAzCitQQVNTIGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJSRU5U
X1ZFUlRFWF9BVFRSSUIpWzNdIGlzIDQKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2dsLXZlcnRleC1hdHRyaWIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9nbC12ZXJ0ZXgtYXR0cmliLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC12ZXJ0ZXgtYXR0cmliLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRN
TCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9s
b29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlw
ZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5XZWJHTCB2ZXJ0
ZXhBdHRyaWIgQ29uZm9ybWFuY2UgVGVzdHM8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiPiA8L2NhbnZhcz4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50YXRp
b25zIHZlcnRleEF0dHJpYiBjYW4gYmUgc2V0IGFuZCByZWFkLiIpOworCitkZWJ1ZygiIik7Citk
ZWJ1ZygiQ2FudmFzLmdldENvbnRleHQiKTsKKwordmFyIGdsID0gY3JlYXRlM0RDb250ZXh0KGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKSk7CitpZiAoIWdsKSB7CisgIHRlc3RGYWls
ZWQoImNvbnRleHQgZG9lcyBub3QgZXhpc3QiKTsKK30gZWxzZSB7CisgIHRlc3RQYXNzZWQoImNv
bnRleHQgZXhpc3RzIik7CisKKyAgZGVidWcoIiIpOworICBkZWJ1ZygiQ2hlY2tpbmcgZ2wudmVy
dGV4QXR0cmliLiIpOworCisgIGdsLnZlcnRleEF0dHJpYjRmdigwLCBbMSwgMiwgMywgNF0pOwor
ICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJ
QilbMF0nLCAnMScpOworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJF
TlRfVkVSVEVYX0FUVFJJQilbMV0nLCAnMicpOworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0
cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbMl0nLCAnMycpOworICBzaG91bGRCZSgn
Z2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbM10nLCAnNCcp
OworfQorCitkZWJ1ZygiIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60315</attachid>
            <date>2010-07-01 16:49:36 -0700</date>
            <delta_ts>2010-07-01 17:21:33 -0700</delta_ts>
            <desc>revised patch : responding to Ken Russell&apos;s comments</desc>
            <filename>va0.patch</filename>
            <type>text/plain</type>
            <size>41273</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgT3BlbkdMIEVTIDIuMCBzZW1hbnRpY3MgZm9yIHZlcnRleCBhdHRyaWJ1dGUgMAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzMDAKKworICAgICAg
ICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0
bWwKKyAgICAgICAgICAgICAgZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdmVydGV4LWF0dHJpYi5odG1s
CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xQcm9ncmFtOjpudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMpOiBjb25zdC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24pOiBj
b25zdC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6aXNVc2luZ1ZlcnRleEF0dHJp
YjApOiBEZXRlcm1pbmUgd2hldGhlciB2ZXJ0ZXggYXR0cmliIDAgaXMgdXNlZCBieSB0aGUgcHJv
Z3JhbS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDogRGVjbGFyZSBpc1Vz
aW5nVmVydGV4QXR0cmliMC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQpOiBEZWFsIHdpdGggdmVydGV4IGF0dHJpYiAwLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0Fy
cmF5cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3RWxlbWVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0VmVydGV4QXR0cmliKTogVXNlIGNhY2hlZCB2YWx1ZSBpbnN0ZWFkIGNhbGwgZ2xH
ZXRWZXJ0ZXh0QXRydHJpYi4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMWYpOiBWYWxpZGF0ZSBpbnB1dCwgZGVhbCB3aXRoIHZlcnRleCBhdHRy
aWIgMC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliMWZ2KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjJmKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliNGZ2KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYlBvaW50ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRleHR1cmVzKTogTW92ZSBpc0dMRVMyQ29tcGxpYW50
KCkgdG8gY2FsbGVyLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWJJbXBsKTogSGVscGVyIGZvciB2ZXJ0ZXhBdHRyaWJOZnYuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIwKTogSW5pdGlh
bGl6ZSB2ZXJ0ZXggYXR0cmliIDAuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnNpbXVsYXRlVmVydGV4QXR0cmliMCk6IFNpbXVsYXRlIHZlcnRleCBhdHRyaWIgMC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZVN0YXRlc0Fm
dGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24pOiBSZXN0b3JlIHN0YXRlcyBhZnRlciBzaW11bGF0
aW5nIHZlcnRleCBhdHRyaWIgMC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6VmVy
dGV4QXR0cmliU3RhdGU6OlZlcnRleEF0dHJpYlN0YXRlKTogVHJhY2tpbmcgZnVsbCB2ZXJ0ZXh0
IGF0dHJpYiBzdGF0ZXMuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OlZlcnRleEF0dHJpYlN0YXRlOjppbml0VmFsdWUpOiBJbml0IHZhbHVlIHRvIFswLDAsMCwxXS4K
KwogMjAxMC0wNi0zMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgYnVpbGRmaXggYWZ0ZXIgcjYyMTk2IGFuZCByNjIyMTQuCkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZpc2lvbiA2MjE1OCkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEs
MTggKzcxLDI3IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpjYWNoZUFjdGl2ZUF0dHJpYkxvY2EKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFdlYkdMUHJvZ3JhbTo6bnVtQWN0aXZlQXR0cmliTG9j
YXRpb25zKCkKK2ludCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9hY3RpdmVBdHRyaWJMb2NhdGlv
bnMuc2l6ZSgpKTsKIH0KIAotaW50IFdlYkdMUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmliTG9jYXRp
b24oaW50IGluZGV4KQoraW50IFdlYkdMUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24o
aW50IGluZGV4KSBjb25zdAogewogICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbnVtQWN0
aXZlQXR0cmliTG9jYXRpb25zKCkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gbV9h
Y3RpdmVBdHRyaWJMb2NhdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCldOwogfQogCiti
b29sIFdlYkdMUHJvZ3JhbTo6aXNVc2luZ1ZlcnRleEF0dHJpYjAoKSBjb25zdAoreworICAgIGZv
ciAoaW50IGlpID0gMDsgaWkgPCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsgKytpaSkgewor
ICAgICAgICBpZiAoIWdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGlpKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHJl
dmlzaW9uIDYyMTU4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsOCArNDMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAvLyBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9uKCkgaXMgb25seSBjYWxsZWQgb25jZSBhZnRl
ciBsaW5rUHJvZ3JhbSgpCiAgICAgICAgIC8vIHN1Y2NlZWRzLgogICAgICAgICBib29sIGNhY2hl
QWN0aXZlQXR0cmliTG9jYXRpb25zKCk7Ci0gICAgICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2Nh
dGlvbnMoKTsKLSAgICAgICAgaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGludCBpbmRleCk7
CisgICAgICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKSBjb25zdDsKKyAgICAgICAg
aW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGludCBpbmRleCkgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBpc1VzaW5nVmVydGV4QXR0cmliMCgpIGNvbnN0OwogCiAgICAgcHJvdGVjdGVkOgogICAg
ICAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA2MjE1
OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIxLDggKzEyMSwxMCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Oldl
YkdMUmVuZGVyaW5nQ29uCiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSwgJm1heEN1YmVNYXBUZXh0dXJlU2l6ZSk7
CiAgICAgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUgPSBtYXhDdWJlTWFwVGV4dHVyZVNpemU7CiAK
LSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSkgewogICAgICAgICBjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKKyAgICAgICAg
aW5pdFZlcnRleEF0dHJpYjAoKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5yZXNoYXBlKGNhbnZh
cygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogICAgIG1fY29udGV4dC0+dmlld3Bv
cnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiB9CkBAIC01
NzUsNiArNTc3LDIwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGJ1ZmZlci0+ZGVsZXRlT2JqZWN0KCk7CisKKyAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSYg
c3RhdGUgPSBtX3ZlcnRleEF0dHJpYlN0YXRlWzBdOworICAgICAgICBpZiAoYnVmZmVyID09IHN0
YXRlLmJ1ZmZlckJpbmRpbmcpIHsKKyAgICAgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBt
X3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAgICAgICAgICBzdGF0ZS5ieXRlc1BlckVsZW1lbnQg
PSAwOworICAgICAgICAgICAgc3RhdGUuc2l6ZSA9IDQ7CisgICAgICAgICAgICBzdGF0ZS50eXBl
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICAgICAgc3RhdGUubm9ybWFsaXpl
ZCA9IGZhbHNlOworICAgICAgICAgICAgc3RhdGUuc3RyaWRlID0gMTY7CisgICAgICAgICAgICBz
dGF0ZS5vcmlnaW5hbFN0cmlkZSA9IDA7CisgICAgICAgICAgICBzdGF0ZS5vZmZzZXQgPSAwOwor
ICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRl
RnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCkBAIC02NjksOSArNjg1
LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGUKICAgICAKICAg
ICBpZiAoaW5kZXggPCBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKICAgICAgICAgbV92ZXJ0
ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IGZhbHNlOwotICAgIAotICAgIG1fY29udGV4
dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOworCisgICAgaWYgKGluZGV4ID4gMCB8fCBpc0dMRVMyQ29tcGxpYW50
KCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgp
OworICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIH0KIH0KIAog
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZSh1bnNp
Z25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQpAQCAtODUz
LDkgKzg3MSwxNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyh1CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBoYW5kbGVOUE9UVGV4dHVyZXModHJ1ZSk7Cisg
ICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMy
Q29tcGxpYW50KCkpIHsKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRl
VmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CisgICAgICAgIGhhbmRsZU5QT1RUZXh0
dXJlcyh0cnVlKTsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0
LCBjb3VudCk7Ci0gICAgaGFuZGxlTlBPVFRleHR1cmVzKGZhbHNlKTsKKyAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkgeworICAgICAgICBoYW5kbGVOUE9UVGV4dHVyZXMoZmFsc2UpOworICAg
ICAgICBpZiAodmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgICAgIHJlc3RvcmVTdGF0
ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgfQogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIApAQCAtODk3LDkgKzkyMywxNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgIGhhbmRsZU5QT1RUZXh0dXJlcyh0cnVlKTsKKyAgICBib29sIHZlcnRleEF0
dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewor
ICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51
bUVsZW1lbnRzKTsKKyAgICAgICAgaGFuZGxlTlBPVFRleHR1cmVzKHRydWUpOworICAgIH0KICAg
ICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0KTsKLSAg
ICBoYW5kbGVOUE9UVGV4dHVyZXMoZmFsc2UpOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KSB7CisgICAgICAgIGhhbmRsZU5QT1RUZXh0dXJlcyhmYWxzZSk7CisgICAgICAgIGlmICh2ZXJ0
ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4
QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICB9CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KHRydWUpOwogfQogCkBAIC0xNjY0LDM5ICsxNjk4LDQ4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFYKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIFdlYkdM
U3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6
IHsKLSAgICAgICAgaW50IG5hbWUgPSAwOwotICAgICAgICBtX2NvbnRleHQtPmdldFZlcnRleEF0
dHJpYml2KGluZGV4LCBwbmFtZSwgJm5hbWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KGZpbmRCdWZmZXIoc3RhdGljX2Nhc3Q8UGxhdGZvcm0z
RE9iamVjdD4obmFtZSkpKSk7CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykg
eworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0K
KyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKCFpc0dMRVMyQ29tcGxp
YW50KCkgJiYgIWluZGV4ICYmIG1fdmVydGV4QXR0cmliU3RhdGVbMF0uYnVmZmVyQmluZGluZyA9
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIKKyAgICAgICAgICAgIHx8IGluZGV4ID49IG1fdmVydGV4
QXR0cmliU3RhdGUuc2l6ZSgpCisgICAgICAgICAgICB8fCAhbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtp
bmRleF0uYnVmZmVyQmluZGluZworICAgICAgICAgICAgfHwgIW1fdmVydGV4QXR0cmliU3RhdGVb
aW5kZXhdLmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xC
dWZmZXI+KG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmJ1ZmZlckJpbmRpbmcpKTsKICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOiB7
Ci0gICAgICAgIGludCB2YWx1ZSA9IDA7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0VmVydGV4QXR0
cmliaXYoaW5kZXgsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci0gICAgfQorICAgICAgICBpZiAoaW5kZXggPj0g
bV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3ZlcnRleEF0dHJpYlN0
YXRlW2luZGV4XS5lbmFibGVkKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgIGlmIChpbmRleCA+PSBtX3ZlcnRleEF0
dHJpYlN0YXRlLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oZmFsc2Up
OworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhd
Lm5vcm1hbGl6ZWQpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJf
QVJSQVlfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FS
UkFZX1NUUklERTogewotICAgICAgICBpbnQgdmFsdWUgPSAwOwotICAgICAgICBtX2NvbnRleHQt
PmdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxsb25nPih2YWx1ZSkpOwotICAgIH0KLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6IHsKLSAgICAgICAg
aW50IHZhbHVlID0gMDsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRl
eCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4odmFsdWUpKTsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOiB7Ci0gICAgICAgIGZsb2F0IHZhbHVlWzRdID0g
ezB9OwotICAgICAgICBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwg
dmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRl
KHZhbHVlLCA0KSk7Ci0gICAgfQotICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgaWYgKGluZGV4ID49
IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhzdGF0aWNfY2FzdDxsb25nPig0KSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
bV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uc2l6ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CisgICAgICAgIGlmIChpbmRleCA+PSBt
X3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oc3RhdGljX2Nhc3Q8bG9uZz4oMCkpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1f
dmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLm9yaWdpbmFsU3RyaWRlKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6CisgICAgICAgIGlmIChpbmRl
eCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUKSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV92ZXJ0ZXhBdHRyaWJTdGF0ZVtp
bmRleF0udHlwZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhf
QVRUUklCOgorICAgICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkp
IHsKKyAgICAgICAgICAgIGZsb2F0IHZhbHVlWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBm
IH07CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRl
KHZhbHVlLCA0KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9h
dDMyQXJyYXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZSwgNCkpOwor
ICAgIGRlZmF1bHQ6CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKICAgICB9Ci0gICAgfQogfQogCiBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVy
dGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
CkBAIC0yOTk3LDEyMyArMzA0MCwxMzcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlUHJvZwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGlu
ZHgsIGZsb2F0IHYwKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFm
KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHYwKQogewotICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliMWYoaW5keCwgdjApOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CisgICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KKyAg
ICBpZiAoaW5kZXggfHwgKCFpbmRleCAmJiBpc0dMRVMyQ29tcGxpYW50KCkpKSB7CisgICAgICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKKyAgICAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB9CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtp
bmRleF0udmFsdWVbMF0gPSB2MDsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1
ZVsxXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMl0gPSAw
LjBmOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZhbHVlWzNdID0gMS4wZjsKIH0K
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBs
b25nIGluZHgsIEZsb2F0MzJBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQogewot
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBh
dHRyaWJ1dGUgYmVpbmcgc2V0Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwg
di0+ZGF0YSgpKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHZl
cnRleEF0dHJpYkltcGwoaW5kZXgsIHYsIDEpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHYsIGludCBz
aXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25l
ZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAgLy8gRklYTUU6IE5lZWQg
dG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQK
LSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRy
aWIxZnYoaW5keCwgdik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAg
ICB2ZXJ0ZXhBdHRyaWJJbXBsKGluZGV4LCB2LCBzaXplLCAxKTsKIH0KIAotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQg
djAsIGZsb2F0IHYxKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJm
KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHYwLCBmbG9hdCB2MSkKIHsKLSAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYjJmKGluZHgsIHYwLCB2MSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKKyAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJp
YjAgdmFsdWVzLgorICAgIGlmIChpbmRleCB8fCAoIWluZGV4ICYmIGlzR0xFUzJDb21wbGlhbnQo
KSkpIHsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsK
KyAgICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB9CisgICAgbV92
ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMF0gPSB2MDsKKyAgICBtX3ZlcnRleEF0dHJp
YlN0YXRlW2luZGV4XS52YWx1ZVsxXSA9IHYxOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5k
ZXhdLnZhbHVlWzJdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1
ZVszXSA9IDEuMGY7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBGbG9hdDMyQXJyYXkqIHYpCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0
MzJBcnJheSogdikKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMg
YmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliMmZ2KGluZHgsIHYtPmRhdGEoKSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKKyAgICB2ZXJ0ZXhBdHRyaWJJbXBsKGluZGV4LCB2LCAyKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgs
IGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYsIGludCBzaXplKQogewotICAg
IC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRy
aWJ1dGUgYmVpbmcgc2V0Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIAotICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZHgsIHYpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CisgICAgdmVydGV4QXR0cmliSW1wbChpbmRleCwgdiwgc2l6ZSwgMik7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBs
b25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgdjAs
IGZsb2F0IHYxLCBmbG9hdCB2MikKIHsKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmKGlu
ZHgsIHYwLCB2MSwgdjIpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cisg
ICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KKyAgICBp
ZiAoaW5kZXggfHwgKCFpbmRleCAmJiBpc0dMRVMyQ29tcGxpYW50KCkpKSB7CisgICAgICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworICAgICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIH0KKyAgICBtX3ZlcnRleEF0dHJpYlN0
YXRlW2luZGV4XS52YWx1ZVswXSA9IHYwOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhd
LnZhbHVlWzFdID0gdjE7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMl0g
PSB2MjsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVszXSA9IDEuMGY7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQg
bG9uZyBpbmR4LCBGbG9hdDMyQXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKIHsK
LSAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3Ig
YXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZHgs
IHYtPmRhdGEoKSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB2
ZXJ0ZXhBdHRyaWJJbXBsKGluZGV4LCB2LCAzKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2LCBpbnQg
c2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWdu
ZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYsIGludCBzaXplKQogewotICAgIC8vIEZJWE1FOiBOZWVk
IHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0
Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIAotICAgIG1fY29udGV4dC0+dmVydGV4QXR0
cmliM2Z2KGluZHgsIHYpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cisg
ICAgdmVydGV4QXR0cmliSW1wbChpbmRleCwgdiwgc2l6ZSwgMyk7CiB9CiAKLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0
IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHYwLCBmbG9h
dCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQogewotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
NGYoaW5keCwgdjAsIHYxLCB2MiwgdjMpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CisgICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVl
cy4KKyAgICBpZiAoaW5kZXggfHwgKCFpbmRleCAmJiBpc0dMRVMyQ29tcGxpYW50KCkpKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsK
KyAgICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB9CisgICAgbV92
ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMF0gPSB2MDsKKyAgICBtX3ZlcnRleEF0dHJp
YlN0YXRlW2luZGV4XS52YWx1ZVsxXSA9IHYxOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5k
ZXhdLnZhbHVlWzJdID0gdjI7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVb
M10gPSB2MzsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRm
dih1bnNpZ25lZCBsb25nIGluZHgsIEZsb2F0MzJBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFy
cmF5KiB2KQogewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcg
ZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRy
aWI0ZnYoaW5keCwgdi0+ZGF0YSgpKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOworICAgIHZlcnRleEF0dHJpYkltcGwoaW5kZXgsIHYsIDQpOwogfQogCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxv
YXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjRmdih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAgLy8g
RklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0
ZSBiZWluZyBzZXQKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgCi0gICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgdik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKKyAgICB2ZXJ0ZXhBdHRyaWJJbXBsKGluZGV4LCB2LCBzaXplLCA0KTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQg
bG9uZyBpbmR4LCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVk
LCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIo
dW5zaWduZWQgbG9uZyBpbmRleCwgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wg
bm9ybWFsaXplZCwgbG9uZyBzdHJpZGUsIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVyIHx8
IGluZHggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVy
dGV4QXR0cmlicykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICAKLSAgICBpZiAoaW5keCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKLSAgICAgICAg
bV92ZXJ0ZXhBdHRyaWJTdGF0ZS5yZXNpemUoaW5keCArIDEpOwotCisgICAgaWYgKHNpemUgPCAx
IHx8IHNpemUgPiA0IHx8IHN0cmlkZSA8IDAgfHwgb2Zmc2V0IDwgMCkgeworICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikg
eworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgLy8gRGV0
ZXJtaW5lIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBjYW4gaG9sZCwg
Z2l2ZW4gdGhlIG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCiAgICAgbG9uZyBieXRlc1Bl
ckVsZW1lbnQgPSBzaXplICogc2l6ZUluQnl0ZXModHlwZSwgZWMpOwogICAgIGlmIChieXRlc1Bl
ckVsZW1lbnQgPD0gMCkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGluZGV4ID49IG1fdmVy
dGV4QXR0cmliU3RhdGUuc2l6ZSgpKQorICAgICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlLnJlc2l6
ZShpbmRleCArIDEpOworCiAgICAgbG9uZyB2YWxpZGF0ZWRTdHJpZGUgPSBieXRlc1BlckVsZW1l
bnQ7CiAgICAgaWYgKHN0cmlkZSAhPSAwKSB7CiAgICAgICAgIGlmICgobG9uZykgc3RyaWRlIDwg
Ynl0ZXNQZXJFbGVtZW50KSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICAKICAgICAgICAgdmFsaWRhdGVkU3RyaWRlID0gc3RyaWRl
OwogICAgIH0KLSAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZHhdLmJ1ZmZlckJpbmRpbmcgPSBt
X2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4XS5ieXRlc1Bl
ckVsZW1lbnQgPSBieXRlc1BlckVsZW1lbnQ7Ci0gICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4
XS5zdHJpZGUgPSB2YWxpZGF0ZWRTdHJpZGU7Ci0gICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4
XS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGlu
ZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0KTsKKyAgICBtX3ZlcnRl
eEF0dHJpYlN0YXRlW2luZGV4XS5idWZmZXJCaW5kaW5nID0gbV9ib3VuZEFycmF5QnVmZmVyOwor
ICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmJ5dGVzUGVyRWxlbWVudCA9IGJ5dGVzUGVy
RWxlbWVudDsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5zaXplID0gc2l6ZTsKKyAg
ICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS50eXBlID0gdHlwZTsKKyAgICBtX3ZlcnRleEF0
dHJpYlN0YXRlW2luZGV4XS5ub3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICBtX3ZlcnRleEF0
dHJpYlN0YXRlW2luZGV4XS5zdHJpZGUgPSB2YWxpZGF0ZWRTdHJpZGU7CisgICAgbV92ZXJ0ZXhB
dHRyaWJTdGF0ZVtpbmRleF0ub3JpZ2luYWxTdHJpZGUgPSBzdHJpZGU7CisgICAgbV92ZXJ0ZXhB
dHRyaWJTdGF0ZVtpbmRleF0ub2Zmc2V0ID0gb2Zmc2V0OworICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZz
ZXQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTMyOTMs
OCArMzM1MCw2IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0dMRVMyQ29tcGwKIAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhhbmRsZU5QT1RUZXh0dXJlcyhib29sIHByZXBh
cmVUb0RyYXcpCiB7Ci0gICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgcmV0dXJu
OwogICAgIGJvb2wgcmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBp
aSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpOyArK2lpKSB7CiAgICAgICAgIGlmICht
X3RleHR1cmVVbml0c1tpaV0ubV90ZXh0dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lp
XS5tX3RleHR1cmUyREJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZSgpCkBAIC0zNjQ1LDYg
KzM3MDAsMTA2IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWYKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYkltcGwodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBpbnQgZXhwZWN0
ZWRTaXplKQoreworICAgIGlmICghdikgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICB2ZXJ0ZXhBdHRyaWJJbXBsKGluZGV4LCB2LT5kYXRhKCksIHYtPmxlbmd0
aCgpLCBleHBlY3RlZFNpemUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliSW1wbCh1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNpemUsIGlu
dCBleHBlY3RlZFNpemUpCit7CisgICAgaWYgKCF2KSB7CisgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7CisgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lwIHNl
dHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8ICghaW5kZXggJiYg
aXNHTEVTMkNvbXBsaWFudCgpKSkgeworICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkgewor
ICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihp
bmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
M2Z2KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAg
ICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmRleCwgdik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOworICAgIH0KKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5pbml0VmFsdWUoKTsK
KyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgc2l6ZTsgKytpaSkKKyAgICAgICAgbV92ZXJ0ZXhB
dHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbaWldID0gdltpaV07Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCit7CisgICAgbV92ZXJ0ZXhBdHRyaWJT
dGF0ZS5yZXNpemUoMSk7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gY3JlYXRlQnVmZmVy
KCk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci5nZXQoKSk7CisgICAgbV9jb250ZXh0LT5idWZm
ZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpEWU5BTUlDX0RSQVcpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigw
LCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBtX3ZlcnRl
eEF0dHJpYlN0YXRlWzBdLmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7Cisg
ICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIs
IDApOworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgbV92
ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IDA7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFs
dWVbMF0gPSAwLjBmOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gMC4wZjsK
KyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyVmFsdWVbM10gPSAxLjBmOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGxvbmcgbnVtVmVydGV4KQoreworICAgIGNvbnN0
IFZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliU3RhdGVbMF07CisgICAg
aWYgKHN0YXRlLmVuYWJsZWQgfHwgIW1fY3VycmVudFByb2dyYW0gfHwgIW1fY3VycmVudFByb2dy
YW0tPm9iamVjdCgpCisgICAgICAgIHx8ICFtX2N1cnJlbnRQcm9ncmFtLT5pc1VzaW5nVmVydGV4
QXR0cmliMCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jb250ZXh0LT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZl
ci5nZXQoKSk7CisgICAgbG9uZyBidWZmZXJEYXRhU2l6ZSA9IChudW1WZXJ0ZXggKyAxKSAqIDQg
KiBzaXplb2YoZmxvYXQpOworICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+IG1fdmVydGV4QXR0cmli
MEJ1ZmZlclNpemUKKyAgICAgICAgfHwgc3RhdGUudmFsdWVbMF0gIT0gbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyVmFsdWVbMF0KKyAgICAgICAgfHwgc3RhdGUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyVmFsdWVbMV0KKyAgICAgICAgfHwgc3RhdGUudmFsdWVbMl0gIT0gbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyVmFsdWVbMl0KKyAgICAgICAgfHwgc3RhdGUudmFsdWVbM10gIT0gbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10pIHsKKyAgICAgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4g
YnVmZmVyRGF0YSA9IEZsb2F0MzJBcnJheTo6Y3JlYXRlKChudW1WZXJ0ZXggKyAxKSAqIDQpOwor
ICAgICAgICBmb3IgKGxvbmcgaWkgPSAwOyBpaSA8IG51bVZlcnRleCArIDE7ICsraWkpIHsKKyAg
ICAgICAgICAgIGJ1ZmZlckRhdGEtPnNldChpaSAqIDQsIHN0YXRlLnZhbHVlWzBdKTsKKyAgICAg
ICAgICAgIGJ1ZmZlckRhdGEtPnNldChpaSAqIDQgKyAxLCBzdGF0ZS52YWx1ZVsxXSk7CisgICAg
ICAgICAgICBidWZmZXJEYXRhLT5zZXQoaWkgKiA0ICsgMiwgc3RhdGUudmFsdWVbMl0pOworICAg
ICAgICAgICAgYnVmZmVyRGF0YS0+c2V0KGlpICogNCArIDMsIHN0YXRlLnZhbHVlWzNdKTsKKyAg
ICAgICAgfQorICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgYnVmZmVyRGF0YS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFN
SUNfRFJBVyk7CisgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSBidWZmZXJEYXRh
U2l6ZTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0gPSBzdGF0ZS52YWx1
ZVswXTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0gPSBzdGF0ZS52YWx1
ZVsxXTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSBzdGF0ZS52YWx1
ZVsyXTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSBzdGF0ZS52YWx1
ZVszXTsKKyAgICB9CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4
QXR0cmliMFNpbXVsYXRpb24oKQoreworICAgIGNvbnN0IFZlcnRleEF0dHJpYlN0YXRlJiBzdGF0
ZSA9IG1fdmVydGV4QXR0cmliU3RhdGVbMF07CisgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcg
IT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBzdGF0ZS5idWZmZXJCaW5kaW5nLmdl
dCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNp
emUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBz
dGF0ZS5vZmZzZXQpOworICAgIH0KKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9ib3VuZEFycmF5QnVmZmVyLmdldCgpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNp
b24gNjIxNTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yODMsMjAgKzI4MywyMCBAQCBjbGFzcyBXZWJLaXRDU1NNYXRy
aXg7CiAgICAgICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlv
bkNvZGUmKTsKIAotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5k
eCwgZmxvYXQgeCk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcg
aW5keCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFm
dih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKLSAgICAgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHkp
OwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIEZsb2F0
MzJBcnJheSogdmFsdWVzKTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQg
bG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQgdmVydGV4
QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KTsK
LSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBGbG9hdDMy
QXJyYXkqIHZhbHVlcyk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxv
bmcgaW5keCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOwotICAgICAgICB2b2lkIHZlcnRleEF0
dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxv
YXQgdyk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwg
RmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjRmdih1bnNp
Z25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgbG9uZyBzaXplLCB1bnNpZ25l
ZCBsb25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgRXhjZXB0
aW9uQ29kZSYpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIGZsb2F0IHgpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25n
IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmli
MWZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKKyAgICAg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB4LCBmbG9h
dCB5KTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmRleCwg
RmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNp
Z25lZCBsb25nIGluZGV4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7CisgICAgICAgIHZvaWQg
dmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgeik7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5kZXgs
IEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5z
aWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOworICAgICAgICB2b2lk
IHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHosIGZsb2F0IHcpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBs
b25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0
cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKKyAg
ICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGxvbmcg
c2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb25nIHN0cmlkZSwgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmKTsKIAogICAgICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKQEAgLTM1NywxNiArMzU3LDQ0IEBA
IGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgLy8gQ2FjaGVkIHZhbHVlcyBmb3IgdmVy
dGV4IGF0dHJpYiByYW5nZSBjaGVja3MKICAgICAgICAgY2xhc3MgVmVydGV4QXR0cmliU3RhdGUg
ewogICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSgpIDogZW5h
YmxlZChmYWxzZSksIGJ5dGVzUGVyRWxlbWVudCgwKSwgc3RyaWRlKDApLCBvZmZzZXQoMCkgeyB9
CisgICAgICAgICAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSgpCisgICAgICAgICAgICAgICAgOiBlbmFi
bGVkKGZhbHNlKQorICAgICAgICAgICAgICAgICwgYnl0ZXNQZXJFbGVtZW50KDApCisgICAgICAg
ICAgICAgICAgLCBzaXplKDQpCisgICAgICAgICAgICAgICAgLCB0eXBlKEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVCkKKyAgICAgICAgICAgICAgICAsIG5vcm1hbGl6ZWQoZmFsc2UpCisgICAgICAg
ICAgICAgICAgLCBzdHJpZGUoMTYpCisgICAgICAgICAgICAgICAgLCBvcmlnaW5hbFN0cmlkZSgw
KQorICAgICAgICAgICAgICAgICwgb2Zmc2V0KDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaW5pdFZhbHVlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgaW5p
dFZhbHVlKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVswXSA9IDAuMGY7
CisgICAgICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOworICAgICAgICAgICAgICAgIHZhbHVl
WzJdID0gMC4wZjsKKyAgICAgICAgICAgICAgICB2YWx1ZVszXSA9IDEuMGY7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIGJvb2wgZW5hYmxlZDsKICAgICAgICAgICAgIFJlZlB0cjxXZWJH
TEJ1ZmZlcj4gYnVmZmVyQmluZGluZzsKICAgICAgICAgICAgIGxvbmcgYnl0ZXNQZXJFbGVtZW50
OwotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGU7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBsb25nIG9mZnNldDsKKyAgICAgICAgICAgIGxvbmcgc2l6ZTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgdHlwZTsKKyAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZDsKKyAgICAgICAgICAg
IGxvbmcgc3RyaWRlOworICAgICAgICAgICAgbG9uZyBvcmlnaW5hbFN0cmlkZTsKKyAgICAgICAg
ICAgIGxvbmcgb2Zmc2V0OworICAgICAgICAgICAgZmxvYXQgdmFsdWVbNF07CiAgICAgICAgIH07
CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VmVydGV4QXR0cmliU3RhdGU+IG1fdmVydGV4QXR0
cmliU3RhdGU7CiAgICAgICAgIHVuc2lnbmVkIG1fbWF4VmVydGV4QXR0cmliczsKKyAgICAgICAg
UmVmUHRyPFdlYkdMQnVmZmVyPiBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAgICAgIGxvbmcg
bV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZTsKKyAgICAgICAgZmxvYXQgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyVmFsdWVbNF07CiAKICAgICAgICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4gbV9jdXJyZW50
UHJvZ3JhbTsKICAgICAgICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG1fZnJhbWVidWZmZXJC
aW5kaW5nOwpAQCAtNDY5LDYgKzQ5NywxNSBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAg
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1
bmlmb3JtTWF0cml4IGZ1bmN0aW9ucy4KICAgICAgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0
cmFuc3Bvc2UsIHZvaWQqIHYpOwogCisgICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHZl
cnRleEF0dHJpYk5mdi4KKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJJbXBsKHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdiwgaW50IGV4cGVjdGVkU2l6ZSk7CisgICAgICAgIHZv
aWQgdmVydGV4QXR0cmliSW1wbCh1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNp
emUsIGludCBleHBlY3RlZFNpemUpOworCisgICAgICAgIC8vIEhlbHBlcnMgZm9yIHNpbXVsYXRp
bmcgdmVydGV4QXR0cmliMAorICAgICAgICB2b2lkIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisgICAg
ICAgIGJvb2wgc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGxvbmcgbnVtVmVydGV4KTsKKyAgICAgICAg
dm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworCiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBXZWJHTFN0YXRlUmVzdG9yZXI7CiAgICAgfTsKIApJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gNjIyMjMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNi0zMCAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBPcGVuR0wgRVMgMi4wIHNlbWFudGljcyBmb3IgdmVydGV4IGF0dHJpYnV0ZSAwCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTMwMAorCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLWJpbmQtYXR0
cmliLWxvY2F0aW9uLXRlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvZ2wtdmVydGV4LWF0dHJpYi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL2dsLXZlcnRleC1hdHRyaWIuaHRtbDogQWRkZWQuCisKIDIwMTAtMDYtMzAg
IENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkIGZpeC4gVXBkYXRlIFF0IHNwZWNpZmljIGV4cGVjdGVkIGZpbGVzIGFmdGVyIHI2MjIxNS4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0
aW9uLXRlc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1hdHRyaWIt
bG9jYXRpb24tdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAK
K1RoaXMgdGVzdCBlbnN1cmVzIFdlYkdMIGltcGxlbWVudGF0aW9ucyBkb24ndCBhbGxvdyBuYW1l
cyB0aGF0IHN0YXJ0IHdpdGggJ2dsXycgd2hlbiBjYWxsaW5nIGJpbmRBdHRyaWJMb2NhdGlvbi4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0NhbnZhcy5nZXRDb250ZXh0CitQQVNT
IFtvYmplY3QgSFRNTENhbnZhc0VsZW1lbnRdIGlzIG5vbi1udWxsLgorUEFTUyBbb2JqZWN0IFdl
YkdMUmVuZGVyaW5nQ29udGV4dF0gaXMgbm9uLW51bGwuCisKK0NoZWNraW5nIGdsLmJpbmRBdHRy
aWJMb2NhdGlvbi4KK1BBU1MgYmluZEF0dHJpYkxvY2F0aW9uIHNob3VsZCByZXR1cm4gSU5WQUxJ
RF9PUEVSQVRJT04gaWYgbmFtZSBzdGFydHMgd2l0aCAnZ2xfJworUEFTUyBiaW5kQXR0cmliTG9j
YXRpb24gc2hvdWxkIHJldHVybiBJTlZBTElEX09QRVJBVElPTiBpZiBuYW1lIHN0YXJ0cyB3aXRo
ICdnbF8nCitQQVNTIHByb2dyYW0gbGlua2VkIHN1Y2Nlc3NmdWxseQordlBvc2l0aW9uOjMKK3ZD
b2xvciAgIDoyCitQQVNTIGxvY2F0aW9uIG9mIHZQb3NpdG9uIHNob3VsZCBiZSAzCitQQVNTIGxv
Y2F0aW9uIG9mIHZDb2xvciBzaG91bGQgYmUgMgorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QKK1BB
U1MgcHJvZ3JhbSBsaW5rZWQgc3VjY2Vzc2Z1bGx5Cit2UG9zaXRpb246MwordkNvbG9yICAgOjAK
K1BBU1MgbG9jYXRpb24gb2YgdlBvc2l0b24gc2hvdWxkIGJlIDMKK1BBU1MgbG9jYXRpb24gb2Yg
dkNvbG9yIHNob3VsZCBiZSAwCitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdAorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLk5PX0VSUk9SCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9n
bC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1hdHRy
aWItbG9jYXRpb24tdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NyBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9F
TiIKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxo
ZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7
IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPldlYkdMIEJpbmRBdHRyaWJMb2NhdGlvbiBDb25mb3Jt
YW5jZSBUZXN0czwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNj
cmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxjYW52YXMgc3R5bGU9
ImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyIgaWQ9ImNhbnZhcyIgd2lkdGg9IjUwIiBoZWlnaHQ9
IjUwIj48L2NhbnZhcz4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5cGU9InRleHQvc29tZXRoaW5n
LW5vdC1qYXZhc2NyaXB0Ij4KK2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsKK2F0dHJpYnV0ZSB2
ZWM0IHZDb2xvcjsKK3ZhcnlpbmcgdmVjNCBjb2xvcjsKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xf
UG9zaXRpb24gPSB2UG9zaXRpb247CisgICAgY29sb3IgPSB2Q29sb3I7Cit9Cis8L3NjcmlwdD4K
KzxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0
Ij4KK3ZhcnlpbmcgdmVjNCBjb2xvcjsKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9y
ID0gY29sb3I7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0
IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50YXRpb25zIGRvbid0IGFsbG93IG5hbWVzIHRoYXQgc3Rh
cnQgd2l0aCAnZ2xfJyB3aGVuIGNhbGxpbmcgYmluZEF0dHJpYkxvY2F0aW9uLiIpOworCitkZWJ1
ZygiIik7CitkZWJ1ZygiQ2FudmFzLmdldENvbnRleHQiKTsKKwordmFyIGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK3Nob3VsZEJlTm9uTnVsbChjYW52YXMpOwor
dmFyIGdsID0gY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIpOworc2hvdWxk
QmVOb25OdWxsKGdsKTsKKworZnVuY3Rpb24gZmFpbCh4LHksIGJ1Ziwgc2hvdWxkQmUpCit7Cisg
ICAgdmFyIGkgPSAoeSo1MCt4KSAqIDQ7CisgICAgdmFyIHJlYXNvbiA9ICJwaXhlbCBhdCAoIit4
KyIsIit5KyIpIGlzICgiK2J1ZltpXSsiLCIrYnVmW2krMV0rIiwiK2J1ZltpKzJdKyIsIitidWZb
aSszXSsiKSwgc2hvdWxkIGJlICIrc2hvdWxkQmU7CisgICAgdGVzdEZhaWxlZChyZWFzb24pOwor
fQorCitmdW5jdGlvbiBwYXNzKCkKK3sKKyAgICB0ZXN0UGFzc2VkKCJkcmF3aW5nIGlzIGNvcnJl
Y3QiKTsKK30KKworZnVuY3Rpb24gbG9hZFNoYWRlcihzaGFkZXJUeXBlLCBzaGFkZXJJZCkgewor
ICAvLyBHZXQgdGhlIHNoYWRlciBzb3VyY2UuCisgIHZhciBzaGFkZXJTb3VyY2UgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChzaGFkZXJJZCkudGV4dDsKKworICAvLyBDcmVhdGUgdGhlIHNoYWRl
ciBvYmplY3QKKyAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihzaGFkZXJUeXBlKTsKKyAg
aWYgKHNoYWRlciA9PSBudWxsKSB7CisgICAgICBkZWJ1ZygiKioqIEVycm9yOiB1bmFibGUgdG8g
Y3JlYXRlIHNoYWRlciAnIitzaGFkZXJJZCsiJyIpOworICAgICAgcmV0dXJuIG51bGw7CisgIH0K
KworICAvLyBMb2FkIHRoZSBzaGFkZXIgc291cmNlCisgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIs
IHNoYWRlclNvdXJjZSk7CisKKyAgLy8gQ29tcGlsZSB0aGUgc2hhZGVyCisgIGdsLmNvbXBpbGVT
aGFkZXIoc2hhZGVyKTsKKworICAvLyBDaGVjayB0aGUgY29tcGlsZSBzdGF0dXMKKyAgdmFyIGNv
bXBpbGVkID0gZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMp
OworICBpZiAoIWNvbXBpbGVkKSB7CisgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyBkdXJp
bmcgY29tcGlsYXRpb247IGdldCB0aGUgZXJyb3IKKyAgICAgIHZhciBlcnJvciA9IGdsLmdldFNo
YWRlckluZm9Mb2coc2hhZGVyKTsKKyAgICAgIGRlYnVnKCIqKiogRXJyb3IgY29tcGlsaW5nIHNo
YWRlciAnIitzaGFkZXIrIic6IitlcnJvcik7CisgICAgICBnbC5kZWxldGVTaGFkZXIoc2hhZGVy
KTsKKyAgICAgIHJldHVybiBudWxsOworICB9CisgIHJldHVybiBzaGFkZXI7Cit9CisKK2RlYnVn
KCIiKTsKK2RlYnVnKCJDaGVja2luZyBnbC5iaW5kQXR0cmliTG9jYXRpb24uIik7CisKK3ZhciBw
cm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dy
YW0sIDAsICJnbF9mb28iKTsKK2Fzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLklOVkFMSURf
T1BFUkFUSU9OLAorICAgICAgICAgICJiaW5kQXR0cmliTG9jYXRpb24gc2hvdWxkIHJldHVybiBJ
TlZBTElEX09QRVJBVElPTiBpZiBuYW1lIHN0YXJ0cyB3aXRoICdnbF8nIik7CitnbC5iaW5kQXR0
cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgImdsX1RleENvb3JkMCIpOworYXNzZXJ0TXNnKGdsLmdl
dEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgImJpbmRBdHRyaWJM
b2NhdGlvbiBzaG91bGQgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OIGlmIG5hbWUgc3RhcnRzIHdp
dGggJ2dsXyciKTsKKwordmFyIHZzID0gbG9hZFNoYWRlcihnbC5WRVJURVhfU0hBREVSLCAidnNo
YWRlciIpOwordmFyIGZzID0gbG9hZFNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIsICJmc2hhZGVy
Iik7CitnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdnMpOworZ2wuYXR0YWNoU2hhZGVyKHByb2dy
YW0sIGZzKTsKKwordmFyIHBvc2l0aW9ucyA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworZ2wuYmluZEJ1
ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHBvc2l0aW9ucyk7CitnbC5idWZmZXJEYXRhKGdsLkFSUkFZ
X0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbIDAsMC41LDAsIC0wLjUsLTAuNSwwLCAwLjUsLTAu
NSwwIF0pLCBnbC5TVEFUSUNfRFJBVyk7CisKK3ZhciBjb2xvcnMgPSBnbC5jcmVhdGVCdWZmZXIo
KTsKK2dsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvcnMpOworZ2wuYnVmZmVyRGF0
YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWworICAgMCwxLDAsMSwKKyAgIDAs
MSwwLDEsCisgICAwLDEsMCwxXSksIGdsLlNUQVRJQ19EUkFXKTsKKworZnVuY3Rpb24gc2V0Qmlu
ZExvY2F0aW9ucyhjb2xvckxvY2F0aW9uLCBwb3NpdGlvbkxvY2F0aW9uKSB7CisgIGdsLmJpbmRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBwb3NpdGlvbkxvY2F0aW9uLCAidlBvc2l0aW9uIik7Cisg
IGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBjb2xvckxvY2F0aW9uLCAidkNvbG9yIik7
CisgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pOworICBnbC51c2VQcm9ncmFtKHByb2dyYW0pOwor
ICB2YXIgbGlua2VkID0gKGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19T
VEFUVVMpICE9IDApOworICBhc3NlcnRNc2cobGlua2VkLCAicHJvZ3JhbSBsaW5rZWQgc3VjY2Vz
c2Z1bGx5Iik7CisKKyAgZGVidWcoInZQb3NpdGlvbjoiICsgZ2wuZ2V0QXR0cmliTG9jYXRpb24o
cHJvZ3JhbSwgInZQb3NpdGlvbiIpKQorICBkZWJ1ZygidkNvbG9yICAgOiIgKyBnbC5nZXRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCAidkNvbG9yIikpCisgIGFzc2VydE1zZyhnbC5nZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCAidlBvc2l0aW9uIikgPT0gcG9zaXRpb25Mb2NhdGlvbiwKKyAgICAg
ICAgICAgICJsb2NhdGlvbiBvZiB2UG9zaXRvbiBzaG91bGQgYmUgIiArIHBvc2l0aW9uTG9jYXRp
b24pOworICBhc3NlcnRNc2coZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInZDb2xvciIp
ID09IGNvbG9yTG9jYXRpb24sCisgICAgICAgICAgICAibG9jYXRpb24gb2YgdkNvbG9yIHNob3Vs
ZCBiZSAiICsgY29sb3JMb2NhdGlvbik7CisKKyAgdmFyIHBsb2MgPSBnbC5nZXRBdHRyaWJMb2Nh
dGlvbihwcm9ncmFtLCAidlBvc2l0aW9uIik7CisgIHZhciBjbG9jID0gZ2wuZ2V0QXR0cmliTG9j
YXRpb24ocHJvZ3JhbSwgInZDb2xvciIpOworICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZF
UiwgcG9zaXRpb25zKTsKKyAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocG9zaXRpb25Mb2Nh
dGlvbik7CisgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocG9zaXRpb25Mb2NhdGlvbiwgMywgZ2wu
RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGNv
bG9ycyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGNvbG9yTG9jYXRpb24pOworICBn
bC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGNvbG9yTG9jYXRpb24sIDQsIGdsLkZMT0FULCBmYWxzZSwg
MCwgMCk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrRHJhdyhjb2xvckxvY2F0aW9uLCBwb3NpdGlvbkxv
Y2F0aW9uLCByLCBnLCBiLCBhKSB7CisgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMSk7CisgIGds
LmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTsKKyAgZ2wu
ZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDMpOworCisgIHZhciB3aWR0aCA9IDUwOworICB2
YXIgaGVpZ2h0ID0gNTA7CisgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdo
dCAqIDQpOworICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGds
LlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisKKyAgZnVuY3Rpb24gY2hlY2tQaXhlbCh4LCB5LCByLCBn
LCBiLCBhKSB7CisgICAgdmFyIG9mZnNldCA9ICh5ICogd2lkdGggKyB4KSAqIDQ7CisgICAgaWYg
KGJ1ZltvZmZzZXQgKyAwXSAhPSByIHx8CisgICAgICAgIGJ1ZltvZmZzZXQgKyAxXSAhPSBnIHx8
CisgICAgICAgIGJ1ZltvZmZzZXQgKyAyXSAhPSBiIHx8CisgICAgICAgIGJ1ZltvZmZzZXQgKyAz
XSAhPSBhKSB7CisgICAgICAgIGZhaWwoeCwgeSwgYnVmLCAiKCIgKyByICsgIiwiICsgZyArICIs
IiArIGIgKyAiLCIgKyBhICsgIikiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIC8vIFRlc3Qgc2V2ZXJhbCBsb2NhdGlvbnMKKyAgLy8g
Rmlyc3QgbGluZSBzaG91bGQgYmUgYWxsIGJsYWNrCisgIHZhciBzdWNjZXNzID0gdHJ1ZTsKKyAg
Zm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKQorICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNo
ZWNrUGl4ZWwoaSwgMCwgMCwgMCwgMCwgMjU1KTsKKworICAvLyBMaW5lIDE1IHNob3VsZCBiZSBy
ZWQgZm9yIGF0IGxlYXN0IDEwIHJnYmEgcGl4ZWxzIHN0YXJ0aW5nIDIwIHBpeGVscyBpbgorICB2
YXIgb2Zmc2V0ID0gKDE1ICogNTAgKyAyMCkgKiA0OworICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
OyArK2kpCisgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY2hlY2tQaXhlbCgyMCArIGksIDE1LCBy
LCBnLCBiLCBhKTsKKworICAvLyBMYXN0IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFjaworICBmb3Ig
KHZhciBpID0gMDsgaSA8IDUwOyArK2kpCisgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY2hlY2tQ
aXhlbChpLCA0OSwgMCwgMCwgMCwgMjU1KTsKKworICBpZiAoc3VjY2VzcykKKyAgICBwYXNzKCk7
CisKKyAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHBvc2l0aW9uTG9jYXRpb24pOworICBn
bC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoY29sb3JMb2NhdGlvbik7Cit9CisKK3NldEJpbmRM
b2NhdGlvbnMoMiwgMyk7CitjaGVja0RyYXcoMiwgMywgMCwgMjU1LCAwLCAyNTUpOworCitzZXRC
aW5kTG9jYXRpb25zKDAsIDMpOworZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworZ2wu
dmVydGV4QXR0cmliNGYoMCwgMSwgMCwgMCwgMSk7CitjaGVja0RyYXcoMCwgMywgMjU1LCAwLCAw
LCAyNTUpOworCitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworCitk
ZWJ1ZygiIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKwor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wt
dmVydGV4LWF0dHJpYi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvZ2wtdmVydGV4LWF0dHJpYi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC12ZXJ0ZXgtYXR0cmliLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorVGhpcyB0ZXN0IGVuc3VyZXMg
V2ViR0wgaW1wbGVtZW50YXRpb25zIHZlcnRleEF0dHJpYiBjYW4gYmUgc2V0IGFuZCByZWFkLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ2FudmFzLmdldENvbnRleHQKK1BBU1Mg
Y29udGV4dCBleGlzdHMKKworQ2hlY2tpbmcgZ2wudmVydGV4QXR0cmliLgorUEFTUyBnbC5nZXRW
ZXJ0ZXhBdHRyaWIoMCwgZ2wuQ1VSUkVOVF9WRVJURVhfQVRUUklCKVswXSBpcyAxCitQQVNTIGds
LmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpWzFdIGlzIDIKK1BB
U1MgZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbMl0gaXMg
MworUEFTUyBnbC5nZXRWZXJ0ZXhBdHRyaWIoMCwgZ2wuQ1VSUkVOVF9WRVJURVhfQVRUUklCKVsz
XSBpcyA0CitQQVNTIGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJSRU5UX1ZFUlRFWF9BVFRS
SUIpWzBdIGlzIDUKK1BBU1MgZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVY
X0FUVFJJQilbMV0gaXMgMAorUEFTUyBnbC5nZXRWZXJ0ZXhBdHRyaWIoMCwgZ2wuQ1VSUkVOVF9W
RVJURVhfQVRUUklCKVsyXSBpcyAwCitQQVNTIGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJS
RU5UX1ZFUlRFWF9BVFRSSUIpWzNdIGlzIDEKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2dsLXZlcnRleC1hdHRyaWIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9nbC12ZXJ0ZXgtYXR0cmliLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC12ZXJ0ZXgtYXR0cmliLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQg
SFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1s
NC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQt
VHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5XZWJHTCB2
ZXJ0ZXhBdHRyaWIgQ29uZm9ybWFuY2UgVGVzdHM8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiPiA8L2NhbnZhcz4K
KzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50
YXRpb25zIHZlcnRleEF0dHJpYiBjYW4gYmUgc2V0IGFuZCByZWFkLiIpOworCitkZWJ1ZygiIik7
CitkZWJ1ZygiQ2FudmFzLmdldENvbnRleHQiKTsKKwordmFyIGdsID0gY3JlYXRlM0RDb250ZXh0
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKSk7CitpZiAoIWdsKSB7CisgIHRlc3RG
YWlsZWQoImNvbnRleHQgZG9lcyBub3QgZXhpc3QiKTsKK30gZWxzZSB7CisgIHRlc3RQYXNzZWQo
ImNvbnRleHQgZXhpc3RzIik7CisKKyAgZGVidWcoIiIpOworICBkZWJ1ZygiQ2hlY2tpbmcgZ2wu
dmVydGV4QXR0cmliLiIpOworCisgIGdsLnZlcnRleEF0dHJpYjRmdigwLCBbMSwgMiwgMywgNF0p
OworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FU
VFJJQilbMF0nLCAnMScpOworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNV
UlJFTlRfVkVSVEVYX0FUVFJJQilbMV0nLCAnMicpOworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4
QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbMl0nLCAnMycpOworICBzaG91bGRC
ZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbM10nLCAn
NCcpOworCisgIGdsLnZlcnRleEF0dHJpYjFmKDAsIDUpOworICBzaG91bGRCZSgnZ2wuZ2V0VmVy
dGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbMF0nLCAnNScpOworICBzaG91
bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbMV0n
LCAnMCcpOworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVS
VEVYX0FUVFJJQilbMl0nLCAnMCcpOworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAs
IGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbM10nLCAnMScpOworfQorCitkZWJ1ZygiIik7Citz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKworPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60319</attachid>
            <date>2010-07-01 17:21:33 -0700</date>
            <delta_ts>2010-07-02 09:35:14 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>va0.patch</filename>
            <type>text/plain</type>
            <size>41225</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgT3BlbkdMIEVTIDIuMCBzZW1hbnRpY3MgZm9yIHZlcnRleCBhdHRyaWJ1dGUgMAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzMDAKKworICAgICAg
ICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0
bWwKKyAgICAgICAgICAgICAgZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdmVydGV4LWF0dHJpYi5odG1s
CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xQcm9ncmFtOjpudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMpOiBjb25zdC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24pOiBj
b25zdC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6aXNVc2luZ1ZlcnRleEF0dHJp
YjApOiBEZXRlcm1pbmUgd2hldGhlciB2ZXJ0ZXggYXR0cmliIDAgaXMgdXNlZCBieSB0aGUgcHJv
Z3JhbS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDogRGVjbGFyZSBpc1Vz
aW5nVmVydGV4QXR0cmliMC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQpOiBEZWFsIHdpdGggdmVydGV4IGF0dHJpYiAwLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0Fy
cmF5cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3RWxlbWVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0VmVydGV4QXR0cmliKTogVXNlIGNhY2hlZCB2YWx1ZSBpbnN0ZWFkIG9mIGNhbGxp
bmcgZ2xHZXRWZXJ0ZXhBdHJ0cmliLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZik6IFZhbGlkYXRlIGlucHV0LCBkZWFsIHdpdGggdmVydGV4
IGF0dHJpYiAwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWIxZnYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliMmYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdik6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0
Zik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWI0ZnYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpoYW5kbGVOUE9UVGV4dHVyZXMpOiBNb3ZlIGlzR0xFUzJDb21w
bGlhbnQoKSB0byBjYWxsZXIuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZlcnRleEF0dHJpYkltcGwpOiBIZWxwZXIgZm9yIHZlcnRleEF0dHJpYk5mdi4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdFZlcnRleEF0dHJpYjApOiBJ
bml0aWFsaXplIHZlcnRleCBhdHRyaWIgMC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKTogU2ltdWxhdGUgdmVydGV4IGF0dHJp
YiAwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3Rh
dGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbik6IFJlc3RvcmUgc3RhdGVzIGFmdGVyIHNp
bXVsYXRpbmcgdmVydGV4IGF0dHJpYiAwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpWZXJ0ZXhBdHRyaWJTdGF0ZTo6VmVydGV4QXR0cmliU3RhdGUpOiBUcmFja2luZyBmdWxsIHZl
cnRleCBhdHRyaWIgc3RhdGVzLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpWZXJ0ZXhBdHRyaWJTdGF0ZTo6aW5pdFZhbHVlKTogSW5pdCB2YWx1ZSB0byBbMCwwLDAs
MV0uCisKIDIwMTAtMDYtMzAgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkZml4IGFmdGVyIHI2MjE5NiBhbmQgcjYyMjE0LgpJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkocmV2aXNpb24gNjIxNTgpCisr
KyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDE4ICs3MSwyNyBAQCBib29sIFdlYkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2Nh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJp
YkxvY2F0aW9ucygpCitpbnQgV2ViR0xQcm9ncmFtOjpudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fYWN0aXZlQXR0cmliTG9j
YXRpb25zLnNpemUoKSk7CiB9CiAKLWludCBXZWJHTFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYkxv
Y2F0aW9uKGludCBpbmRleCkKK2ludCBXZWJHTFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYkxvY2F0
aW9uKGludCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG51
bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJu
IG1fYWN0aXZlQXR0cmliTG9jYXRpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXTsKIH0K
IAorYm9vbCBXZWJHTFByb2dyYW06OmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCkgY29uc3QKK3sKKyAg
ICBmb3IgKGludCBpaSA9IDA7IGlpIDwgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7ICsraWkp
IHsKKyAgICAgICAgaWYgKCFnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpaSkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFBy
b2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5o
CShyZXZpc2lvbiA2MjE1OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgLy8gY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbigpIGlzIG9ubHkgY2FsbGVkIG9uY2Ug
YWZ0ZXIgbGlua1Byb2dyYW0oKQogICAgICAgICAvLyBzdWNjZWVkcy4KICAgICAgICAgYm9vbCBj
YWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwotICAgICAgICBpbnQgbnVtQWN0aXZlQXR0cmli
TG9jYXRpb25zKCk7Ci0gICAgICAgIGludCBnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpbnQgaW5k
ZXgpOworICAgICAgICBpbnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkgY29uc3Q7CisgICAg
ICAgIGludCBnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpbnQgaW5kZXgpIGNvbnN0OworCisgICAg
ICAgIGJvb2wgaXNVc2luZ1ZlcnRleEF0dHJpYjAoKSBjb25zdDsKIAogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwpJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24g
NjIxNTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMSw4ICsxMjEsMTAgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtYXhDdWJlTWFwVGV4dHVyZVNp
emUpOwogICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplID0gbWF4Q3ViZU1hcFRleHR1cmVTaXpl
OwogCi0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCisgICAgaWYgKCFpc0dMRVMyQ29tcGxp
YW50KCkpIHsKICAgICAgICAgY3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisgICAg
ICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisgICAgfQogICAgIG1fY29udGV4dC0+cmVzaGFwZShj
YW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKICAgICBtX2NvbnRleHQtPnZp
ZXdwb3J0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogfQpA
QCAtNTc1LDYgKzU3NywyMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVm
ZmVyCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBidWZmZXItPmRlbGV0ZU9iamVjdCgpOwor
CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgVmVydGV4QXR0cmliU3Rh
dGUmIHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVswXTsKKyAgICAgICAgaWYgKGJ1ZmZlciA9
PSBzdGF0ZS5idWZmZXJCaW5kaW5nKSB7CisgICAgICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5n
ID0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOworICAgICAgICAgICAgc3RhdGUuYnl0ZXNQZXJFbGVt
ZW50ID0gMDsKKyAgICAgICAgICAgIHN0YXRlLnNpemUgPSA0OworICAgICAgICAgICAgc3RhdGUu
dHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgICAgIHN0YXRlLm5vcm1h
bGl6ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0YXRlLnN0cmlkZSA9IDE2OworICAgICAgICAg
ICAgc3RhdGUub3JpZ2luYWxTdHJpZGUgPSAwOworICAgICAgICAgICAgc3RhdGUub2Zmc2V0ID0g
MDsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQpAQCAtNjY5LDkg
KzY4NSwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRlCiAgICAg
CiAgICAgaWYgKGluZGV4IDwgbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCiAgICAgICAgIG1f
dmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmVuYWJsZWQgPSBmYWxzZTsKLSAgICAKLSAgICBtX2Nv
bnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci0gICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKKworICAgIGlmIChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBs
aWFudCgpKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKKyAgICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB9CiB9
CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUo
dW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25nIG9mZnNldCkKQEAg
LTg1Myw5ICs4NzEsMTcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMo
dQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaGFuZGxlTlBPVFRleHR1cmVzKHRydWUp
OworICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNH
TEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11
bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOworICAgICAgICBoYW5kbGVOUE9U
VGV4dHVyZXModHJ1ZSk7CisgICAgfQogICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBm
aXJzdCwgY291bnQpOwotICAgIGhhbmRsZU5QT1RUZXh0dXJlcyhmYWxzZSk7CisgICAgaWYgKCFp
c0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgaGFuZGxlTlBPVFRleHR1cmVzKGZhbHNlKTsK
KyAgICAgICAgaWYgKHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAgICAgICAgICByZXN0b3Jl
U3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIH0KICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKQEAgLTg5Nyw5ICs5MjMsMTcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICBoYW5kbGVOUE9UVGV4dHVyZXModHJ1ZSk7CisgICAgYm9vbCB2ZXJ0
ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkp
IHsKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmli
MChudW1FbGVtZW50cyk7CisgICAgICAgIGhhbmRsZU5QT1RUZXh0dXJlcyh0cnVlKTsKKyAgICB9
CiAgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCk7
Ci0gICAgaGFuZGxlTlBPVFRleHR1cmVzKGZhbHNlKTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlh
bnQoKSkgeworICAgICAgICBoYW5kbGVOUE9UVGV4dHVyZXMoZmFsc2UpOworICAgICAgICBpZiAo
dmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZl
cnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgfQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbCh0cnVlKTsKIH0KIApAQCAtMTY2NCwzOSArMTY5OCw0OCBAQCBXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBX
ZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5E
SU5HOiB7Ci0gICAgICAgIGludCBuYW1lID0gMDsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRWZXJ0
ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsICZuYW1lKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihmaW5kQnVmZmVyKHN0YXRpY19jYXN0PFBsYXRm
b3JtM0RPYmplY3Q+KG5hbWUpKSkpOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJp
YnMpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAg
ICB9CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZF
UlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpICYmICFpbmRleCAmJiBtX3ZlcnRleEF0dHJpYlN0YXRlWzBdLmJ1ZmZlckJpbmRp
bmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyCisgICAgICAgICAgICB8fCBpbmRleCA+PSBtX3Zl
cnRleEF0dHJpYlN0YXRlLnNpemUoKQorICAgICAgICAgICAgfHwgIW1fdmVydGV4QXR0cmliU3Rh
dGVbaW5kZXhdLmJ1ZmZlckJpbmRpbmcKKyAgICAgICAgICAgIHx8ICFtX3ZlcnRleEF0dHJpYlN0
YXRlW2luZGV4XS5idWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdl
YkdMQnVmZmVyPihtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5idWZmZXJCaW5kaW5nKSk7CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpF
RDogewotICAgICAgICBpbnQgdmFsdWUgPSAwOwotICAgICAgICBtX2NvbnRleHQtPmdldFZlcnRl
eEF0dHJpYml2KGluZGV4LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOwotICAgIH0KKyAgICAgICAgaWYgKGluZGV4
ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV92ZXJ0ZXhBdHRy
aWJTdGF0ZVtpbmRleF0uZW5hYmxlZCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgorICAgICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0
ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGZh
bHNlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3ZlcnRleEF0dHJpYlN0YXRlW2lu
ZGV4XS5ub3JtYWxpemVkKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRU
UklCX0FSUkFZX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJ
Ql9BUlJBWV9TVFJJREU6IHsKLSAgICAgICAgaW50IHZhbHVlID0gMDsKLSAgICAgICAgbV9jb250
ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4odmFsdWUpKTsKLSAgICB9Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOiB7Ci0gICAg
ICAgIGludCB2YWx1ZSA9IDA7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliaXYo
aW5kZXgsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmc+KHZhbHVlKSk7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjogewotICAgICAgICBmbG9hdCB2YWx1ZVs0
XSA9IHswfTsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5h
bWUsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNy
ZWF0ZSh2YWx1ZSwgNCkpOwotICAgIH0KLSAgICBkZWZhdWx0OiB7CisgICAgICAgIGlmIChpbmRl
eCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4oNCkpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnNpemUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgorICAgICAgICBpZiAoaW5kZXgg
Pj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKHN0YXRpY19jYXN0PGxvbmc+KDApKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5vcmlnaW5hbFN0cmlkZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICBpZiAo
aW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCkpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdmVydGV4QXR0cmliU3Rh
dGVbaW5kZXhdLnR5cGUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVS
VEVYX0FUVFJJQjoKKyAgICAgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6
ZSgpKSB7CisgICAgICAgICAgICBmbG9hdCB2YWx1ZVs0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwg
MS4wZiB9OworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNy
ZWF0ZSh2YWx1ZSwgNCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
RmxvYXQzMkFycmF5OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWUsIDQp
KTsKKyAgICBkZWZhdWx0OgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CiAgICAgfQotICAgIH0KIH0KIAogbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBu
YW1lKQpAQCAtMjk5NywxMjMgKzMwNDAsMTM3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVByb2cKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWYodW5zaWduZWQgbG9u
ZyBpbmR4LCBmbG9hdCB2MCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWIxZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB2MCkKIHsKLSAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjFmKGluZHgsIHYwKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOworICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMu
CisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7CisgICAgICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CisgICAgfQorICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZh
bHVlWzBdID0gdjA7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMV0gPSAw
LjBmOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZhbHVlWzJdID0gMC4wZjsKKyAg
ICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVszXSA9IDEuMGY7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4
LCBGbG9hdDMyQXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKIHsKLSAgICAvLyBG
SVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRl
IGJlaW5nIHNldAotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGluZHgsIHYtPmRhdGEo
KSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB2ZXJ0ZXhBdHRy
aWJJbXBsKGluZGV4LCB2LCAxKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBp
bmRleCwgZmxvYXQqIHYsIGludCBzaXplKQogewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ug
c3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0Ci0gICAgVU5V
U0VEX1BBUkFNKHNpemUpOwotICAgIAotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGlu
ZHgsIHYpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgdmVydGV4
QXR0cmliSW1wbChpbmRleCwgdiwgc2l6ZSwgMSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9h
dCB2MSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25l
ZCBsb25nIGluZGV4LCBmbG9hdCB2MCwgZmxvYXQgdjEpCiB7Ci0gICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWIyZihpbmR4LCB2MCwgdjEpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CisgICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVl
cy4KKyAgICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CisgICAgICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgfQorICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5k
ZXhdLnZhbHVlWzBdID0gdjA7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVb
MV0gPSB2MTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVsyXSA9IDAuMGY7
CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbM10gPSAxLjBmOwogfQogCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcg
aW5keCwgRmxvYXQzMkFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0gICAg
Ly8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJp
YnV0ZSBiZWluZyBzZXQKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmR4LCB2LT5k
YXRhKCkpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgdmVydGV4
QXR0cmliSW1wbChpbmRleCwgdiwgMik7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdiwgaW50IHNpemUp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxv
bmcgaW5kZXgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBt
YWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAg
IFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICAKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJm
dihpbmR4LCB2KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHZl
cnRleEF0dHJpYkltcGwoaW5kZXgsIHYsIHNpemUsIDIpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwg
ZmxvYXQgdjEsIGZsb2F0IHYyKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIp
CiB7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmR4LCB2MCwgdjEsIHYyKTsKLSAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIC8vIEluIEdMLCB3ZSBza2lw
IHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJD
b21wbGlhbnQoKSkgeworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmKGluZGV4LCB2
MCwgdjEsIHYyKTsKKyAgICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAg
ICB9CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMF0gPSB2MDsKKyAgICBt
X3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS52YWx1ZVsxXSA9IHYxOworICAgIG1fdmVydGV4QXR0
cmliU3RhdGVbaW5kZXhdLnZhbHVlWzJdID0gdjI7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtp
bmRleF0udmFsdWVbM10gPSAxLjBmOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgRmxvYXQzMkFycmF5KiB2KQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGlu
ZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJl
IGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQKLSAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYjNmdihpbmR4LCB2LT5kYXRhKCkpOwotICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CisgICAgdmVydGV4QXR0cmliSW1wbChpbmRleCwgdiwgMyk7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQg
bG9uZyBpbmR4LCBmbG9hdCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2LCBpbnQgc2l6
ZSkKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3Vn
aCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICAK
LSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmR4LCB2KTsKLSAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHZlcnRleEF0dHJpYkltcGwoaW5kZXgsIHYsIHNp
emUsIDMpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2
MykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBs
b25nIGluZGV4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKIHsKLSAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsKLSAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIC8vIEluIEdMLCB3ZSBza2lwIHNl
dHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21w
bGlhbnQoKSkgeworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwg
djEsIHYyLCB2Myk7CisgICAgICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cisg
ICAgfQorICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLnZhbHVlWzBdID0gdjA7CisgICAg
bV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbMV0gPSB2MTsKKyAgICBtX3ZlcnRleEF0
dHJpYlN0YXRlW2luZGV4XS52YWx1ZVsyXSA9IHYyOworICAgIG1fdmVydGV4QXR0cmliU3RhdGVb
aW5kZXhdLnZhbHVlWzNdID0gdjM7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBGbG9hdDMyQXJyYXkqIHYpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIEZsb2F0MzJBcnJheSogdikKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUg
YXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliNGZ2KGluZHgsIHYtPmRhdGEoKSk7Ci0gICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKKyAgICB2ZXJ0ZXhBdHRyaWJJbXBsKGluZGV4LCB2LCA0KTsKIH0K
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBs
b25nIGluZHgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYsIGludCBzaXpl
KQogewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdo
IGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIAot
ICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZHgsIHYpOwotICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgdmVydGV4QXR0cmliSW1wbChpbmRleCwgdiwgc2l6
ZSwgNCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUsIGJv
b2wgbm9ybWFsaXplZCwgdW5zaWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9u
ZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIGxvbmcgc3RyaWRlLCBsb25nIG9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIW1fYm91bmRB
cnJheUJ1ZmZlciB8fCBpbmR4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgIGlmIChpbmRl
eCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgCi0gICAgaWYgKGluZHggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXpl
KCkpCi0gICAgICAgIG1fdmVydGV4QXR0cmliU3RhdGUucmVzaXplKGluZHggKyAxKTsKLQorICAg
IGlmIChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUgPCAwIHx8IG9mZnNldCA8IDApIHsK
KyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtX2JvdW5k
QXJyYXlCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAg
fQogICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoZSBib3VuZCBidWZm
ZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUsIHR5cGUgYW5kIHN0cmlkZQogICAg
IGxvbmcgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHNpemVJbkJ5dGVzKHR5cGUsIGVjKTsKICAg
ICBpZiAoYnl0ZXNQZXJFbGVtZW50IDw9IDApCiAgICAgICAgIHJldHVybjsKKworICAgIGlmIChp
bmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKKyAgICAgICAgbV92ZXJ0ZXhBdHRy
aWJTdGF0ZS5yZXNpemUoaW5kZXggKyAxKTsKKwogICAgIGxvbmcgdmFsaWRhdGVkU3RyaWRlID0g
Ynl0ZXNQZXJFbGVtZW50OwogICAgIGlmIChzdHJpZGUgIT0gMCkgewogICAgICAgICBpZiAoKGxv
bmcpIHN0cmlkZSA8IGJ5dGVzUGVyRWxlbWVudCkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIHZhbGlkYXRlZFN0
cmlkZSA9IHN0cmlkZTsKICAgICB9Ci0gICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4XS5idWZm
ZXJCaW5kaW5nID0gbV9ib3VuZEFycmF5QnVmZmVyOwotICAgIG1fdmVydGV4QXR0cmliU3RhdGVb
aW5keF0uYnl0ZXNQZXJFbGVtZW50ID0gYnl0ZXNQZXJFbGVtZW50OwotICAgIG1fdmVydGV4QXR0
cmliU3RhdGVbaW5keF0uc3RyaWRlID0gdmFsaWRhdGVkU3RyaWRlOwotICAgIG1fdmVydGV4QXR0
cmliU3RhdGVbaW5keF0ub2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0
cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIG9mZnNldCk7
CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uYnVmZmVyQmluZGluZyA9IG1fYm91bmRB
cnJheUJ1ZmZlcjsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5ieXRlc1BlckVsZW1l
bnQgPSBieXRlc1BlckVsZW1lbnQ7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uc2l6
ZSA9IHNpemU7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udHlwZSA9IHR5cGU7Cisg
ICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0ubm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7Cisg
ICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uc3RyaWRlID0gdmFsaWRhdGVkU3RyaWRlOwor
ICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLm9yaWdpbmFsU3RyaWRlID0gc3RyaWRlOwor
ICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLm9mZnNldCA9IG9mZnNldDsKKyAgICBtX2Nv
bnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQs
IHN0cmlkZSwgb2Zmc2V0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCkBAIC0zMjkzLDggKzMzNTAsNiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNH
TEVTMkNvbXBsCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYW5kbGVOUE9UVGV4dHVy
ZXMoYm9vbCBwcmVwYXJlVG9EcmF3KQogewotICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpCi0g
ICAgICAgIHJldHVybjsKICAgICBib29sIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwogICAgIGZv
ciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpaSkgewog
ICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZTJEQmluZGluZyAmJiBtX3Rl
eHR1cmVVbml0c1tpaV0ubV90ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUo
KQpAQCAtMzY0NSw2ICszNzAwLDEwNiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVVbmlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWJJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSog
diwgaW50IGV4cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmVydGV4QXR0cmliSW1wbChpbmRleCwgdi0+ZGF0
YSgpLCB2LT5sZW5ndGgoKSwgZXhwZWN0ZWRTaXplKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYkltcGwodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYs
IGludCBzaXplLCBpbnQgZXhwZWN0ZWRTaXplKQoreworICAgIGlmICghdikgeworICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc2l6ZSA8IGV4cGVjdGVkU2l6
ZSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJbiBH
TCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgorICAgIGlmIChpbmRleCB8
fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsK
KyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYo
aW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YjNmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAg
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKKyAgICB9CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uaW5pdFZhbHVlKCk7
CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytpaSkKKyAgICAgICAg
bV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udmFsdWVbaWldID0gdltpaV07Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCit7CisgICAgbV92ZXJ0
ZXhBdHRyaWJTdGF0ZS5yZXNpemUoMSk7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gY3Jl
YXRlQnVmZmVyKCk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci5nZXQoKSk7CisgICAgbV9jb250
ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
UG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAg
ICBtX3ZlcnRleEF0dHJpYlN0YXRlWzBdLmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRleEF0dHJpYjBC
dWZmZXI7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJB
WV9CVUZGRVIsIDApOworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7
CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IDA7CisgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyVmFsdWVbMF0gPSAwLjBmOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFd
ID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IDAuMGY7CisgICAg
bV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSAxLjBmOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGxvbmcgbnVtVmVydGV4KQorewor
ICAgIGNvbnN0IFZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliU3RhdGVb
MF07CisgICAgaWYgKHN0YXRlLmVuYWJsZWQgfHwgIW1fY3VycmVudFByb2dyYW0gfHwgIW1fY3Vy
cmVudFByb2dyYW0tPm9iamVjdCgpCisgICAgICAgIHx8ICFtX2N1cnJlbnRQcm9ncmFtLT5pc1Vz
aW5nVmVydGV4QXR0cmliMCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jb250ZXh0
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0
cmliMEJ1ZmZlci5nZXQoKSk7CisgICAgbG9uZyBidWZmZXJEYXRhU2l6ZSA9IChudW1WZXJ0ZXgg
KyAxKSAqIDQgKiBzaXplb2YoZmxvYXQpOworICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclNpemUKKyAgICAgICAgfHwgc3RhdGUudmFsdWVbMF0gIT0gbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0KKyAgICAgICAgfHwgc3RhdGUudmFsdWVbMV0gIT0gbV92
ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0KKyAgICAgICAgfHwgc3RhdGUudmFsdWVbMl0gIT0g
bV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KKyAgICAgICAgfHwgc3RhdGUudmFsdWVbM10g
IT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10pIHsKKyAgICAgICAgUmVmUHRyPEZsb2F0
MzJBcnJheT4gYnVmZmVyRGF0YSA9IEZsb2F0MzJBcnJheTo6Y3JlYXRlKChudW1WZXJ0ZXggKyAx
KSAqIDQpOworICAgICAgICBmb3IgKGxvbmcgaWkgPSAwOyBpaSA8IG51bVZlcnRleCArIDE7ICsr
aWkpIHsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGEtPnNldChpaSAqIDQsIHN0YXRlLnZhbHVlWzBd
KTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGEtPnNldChpaSAqIDQgKyAxLCBzdGF0ZS52YWx1ZVsx
XSk7CisgICAgICAgICAgICBidWZmZXJEYXRhLT5zZXQoaWkgKiA0ICsgMiwgc3RhdGUudmFsdWVb
Ml0pOworICAgICAgICAgICAgYnVmZmVyRGF0YS0+c2V0KGlpICogNCArIDMsIHN0YXRlLnZhbHVl
WzNdKTsKKyAgICAgICAgfQorICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgYnVmZmVyRGF0YS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OkRZTkFNSUNfRFJBVyk7CisgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSBi
dWZmZXJEYXRhU2l6ZTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0gPSBz
dGF0ZS52YWx1ZVswXTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0gPSBz
dGF0ZS52YWx1ZVsxXTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSBz
dGF0ZS52YWx1ZVsyXTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSBz
dGF0ZS52YWx1ZVszXTsKKyAgICB9CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVy
KDAsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZVN0YXRlc0Fm
dGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQoreworICAgIGNvbnN0IFZlcnRleEF0dHJpYlN0
YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliU3RhdGVbMF07CisgICAgaWYgKHN0YXRlLmJ1ZmZl
ckJpbmRpbmcgIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+
YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBzdGF0ZS5idWZmZXJC
aW5kaW5nLmdldCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAs
IHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFs
U3RyaWRlLCBzdGF0ZS5vZmZzZXQpOworICAgIH0KKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9ib3VuZEFycmF5QnVmZmVyLmdldCgp
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NB
TlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
aAkocmV2aXNpb24gNjIxNTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsMjAgKzI4MywyMCBAQCBjbGFzcyBXZWJL
aXRDU1NNYXRyaXg7CiAgICAgICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSos
IEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVk
IGxvbmcgaW5keCwgZmxvYXQgeCk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2ln
bmVkIGxvbmcgaW5keCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgICAgICB2b2lkIHZlcnRl
eEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsK
LSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgs
IGZsb2F0IHkpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGlu
ZHgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZv
aWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB6KTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4
LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVu
c2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOwotICAgICAgICB2b2lk
IHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgeiwgZmxvYXQgdyk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxv
bmcgaW5keCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJp
YjRmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKLSAgICAg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgbG9uZyBzaXpl
LCB1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVk
IGxvbmcgaW5kZXgsIGZsb2F0IHgpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNp
Z25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgICAgIHZvaWQgdmVy
dGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXpl
KTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9h
dCB4LCBmbG9hdCB5KTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9u
ZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJp
YjJmdih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7CisgICAg
ICAgIHZvaWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeik7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIzZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOworICAg
ICAgICB2b2lkIHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjRmdih1
bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgICAgIHZvaWQg
dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMsIGludCBz
aXplKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0cmlkZSwgbG9uZyBvZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmKTsKIAogICAgICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1
bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKQEAgLTM1NywxNiAr
MzU3LDQ0IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgLy8gQ2FjaGVkIHZhbHVl
cyBmb3IgdmVydGV4IGF0dHJpYiByYW5nZSBjaGVja3MKICAgICAgICAgY2xhc3MgVmVydGV4QXR0
cmliU3RhdGUgewogICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBWZXJ0ZXhBdHRyaWJTdGF0
ZSgpIDogZW5hYmxlZChmYWxzZSksIGJ5dGVzUGVyRWxlbWVudCgwKSwgc3RyaWRlKDApLCBvZmZz
ZXQoMCkgeyB9CisgICAgICAgICAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSgpCisgICAgICAgICAgICAg
ICAgOiBlbmFibGVkKGZhbHNlKQorICAgICAgICAgICAgICAgICwgYnl0ZXNQZXJFbGVtZW50KDAp
CisgICAgICAgICAgICAgICAgLCBzaXplKDQpCisgICAgICAgICAgICAgICAgLCB0eXBlKEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVCkKKyAgICAgICAgICAgICAgICAsIG5vcm1hbGl6ZWQoZmFsc2Up
CisgICAgICAgICAgICAgICAgLCBzdHJpZGUoMTYpCisgICAgICAgICAgICAgICAgLCBvcmlnaW5h
bFN0cmlkZSgwKQorICAgICAgICAgICAgICAgICwgb2Zmc2V0KDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW5pdFZhbHVlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZvaWQgaW5pdFZhbHVlKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVsw
XSA9IDAuMGY7CisgICAgICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOworICAgICAgICAgICAg
ICAgIHZhbHVlWzJdID0gMC4wZjsKKyAgICAgICAgICAgICAgICB2YWx1ZVszXSA9IDEuMGY7Cisg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGJvb2wgZW5hYmxlZDsKICAgICAgICAgICAgIFJl
ZlB0cjxXZWJHTEJ1ZmZlcj4gYnVmZmVyQmluZGluZzsKICAgICAgICAgICAgIGxvbmcgYnl0ZXNQ
ZXJFbGVtZW50OwotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGU7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIG9mZnNldDsKKyAgICAgICAgICAgIGxvbmcgc2l6ZTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgdHlwZTsKKyAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZDsKKyAg
ICAgICAgICAgIGxvbmcgc3RyaWRlOworICAgICAgICAgICAgbG9uZyBvcmlnaW5hbFN0cmlkZTsK
KyAgICAgICAgICAgIGxvbmcgb2Zmc2V0OworICAgICAgICAgICAgZmxvYXQgdmFsdWVbNF07CiAg
ICAgICAgIH07CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VmVydGV4QXR0cmliU3RhdGU+IG1f
dmVydGV4QXR0cmliU3RhdGU7CiAgICAgICAgIHVuc2lnbmVkIG1fbWF4VmVydGV4QXR0cmliczsK
KyAgICAgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAg
ICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZTsKKyAgICAgICAgZmxvYXQgbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07CiAKICAgICAgICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4g
bV9jdXJyZW50UHJvZ3JhbTsKICAgICAgICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG1fZnJh
bWVidWZmZXJCaW5kaW5nOwpAQCAtNDY5LDYgKzQ5NywxNSBAQCBjbGFzcyBXZWJLaXRDU1NNYXRy
aXg7CiAgICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0
ZXJzIGZvciB1bmlmb3JtTWF0cml4IGZ1bmN0aW9ucy4KICAgICAgICAgYm9vbCB2YWxpZGF0ZVVu
aWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIHZvaWQqIHYpOwogCisgICAgICAgIC8vIEhlbHBlciBmdW5jdGlv
bnMgZm9yIHZlcnRleEF0dHJpYk5mdi4KKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJJbXBsKHVu
c2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdiwgaW50IGV4cGVjdGVkU2l6ZSk7Cisg
ICAgICAgIHZvaWQgdmVydGV4QXR0cmliSW1wbCh1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCog
diwgaW50IHNpemUsIGludCBleHBlY3RlZFNpemUpOworCisgICAgICAgIC8vIEhlbHBlcnMgZm9y
IHNpbXVsYXRpbmcgdmVydGV4QXR0cmliMAorICAgICAgICB2b2lkIGluaXRWZXJ0ZXhBdHRyaWIw
KCk7CisgICAgICAgIGJvb2wgc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGxvbmcgbnVtVmVydGV4KTsK
KyAgICAgICAgdm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigp
OworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBXZWJHTFN0YXRlUmVzdG9yZXI7CiAgICAgfTsKIApJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gNjIyMjMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNi0zMCAgWmhlbnlhbyBNbyAgPHptb0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudCBPcGVuR0wgRVMgMi4wIHNlbWFudGljcyBmb3IgdmVydGV4IGF0dHJpYnV0
ZSAwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTMw
MAorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24t
dGVzdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2ds
LWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9j
YW52YXMvd2ViZ2wvZ2wtdmVydGV4LWF0dHJpYi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLXZlcnRleC1hdHRyaWIuaHRtbDogQWRkZWQuCisKIDIw
MTAtMDYtMzAgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkIGZpeC4gVXBkYXRlIFF0IHNwZWNpZmljIGV4cGVjdGVkIGZpbGVzIGFmdGVy
IHI2MjIxNS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWJpbmQtYXR0
cmliLWxvY2F0aW9uLXRlc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3QtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmlu
ZC1hdHRyaWItbG9jYXRpb24tdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzAgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIFdlYkdMIGltcGxlbWVudGF0aW9ucyBkb24ndCBh
bGxvdyBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggJ2dsXycgd2hlbiBjYWxsaW5nIGJpbmRBdHRyaWJM
b2NhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0NhbnZhcy5nZXRDb250
ZXh0CitQQVNTIFtvYmplY3QgSFRNTENhbnZhc0VsZW1lbnRdIGlzIG5vbi1udWxsLgorUEFTUyBb
b2JqZWN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dF0gaXMgbm9uLW51bGwuCisKK0NoZWNraW5nIGds
LmJpbmRBdHRyaWJMb2NhdGlvbi4KK1BBU1MgYmluZEF0dHJpYkxvY2F0aW9uIHNob3VsZCByZXR1
cm4gSU5WQUxJRF9PUEVSQVRJT04gaWYgbmFtZSBzdGFydHMgd2l0aCAnZ2xfJworUEFTUyBiaW5k
QXR0cmliTG9jYXRpb24gc2hvdWxkIHJldHVybiBJTlZBTElEX09QRVJBVElPTiBpZiBuYW1lIHN0
YXJ0cyB3aXRoICdnbF8nCitQQVNTIHByb2dyYW0gbGlua2VkIHN1Y2Nlc3NmdWxseQordlBvc2l0
aW9uOjMKK3ZDb2xvciAgIDoyCitQQVNTIGxvY2F0aW9uIG9mIHZQb3NpdG9uIHNob3VsZCBiZSAz
CitQQVNTIGxvY2F0aW9uIG9mIHZDb2xvciBzaG91bGQgYmUgMgorUEFTUyBkcmF3aW5nIGlzIGNv
cnJlY3QKK1BBU1MgcHJvZ3JhbSBsaW5rZWQgc3VjY2Vzc2Z1bGx5Cit2UG9zaXRpb246MwordkNv
bG9yICAgOjAKK1BBU1MgbG9jYXRpb24gb2YgdlBvc2l0b24gc2hvdWxkIGJlIDMKK1BBU1MgbG9j
YXRpb24gb2YgdkNvbG9yIHNob3VsZCBiZSAwCitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdAorUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVz
dC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wt
YmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5
NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNp
dGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8
aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0
ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPldlYkdMIEJpbmRBdHRyaWJMb2NhdGlv
biBDb25mb3JtYW5jZSBUZXN0czwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2
IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxjYW52
YXMgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyIgaWQ9ImNhbnZhcyIgd2lkdGg9IjUw
IiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5cGU9InRleHQv
c29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsKK2F0
dHJpYnV0ZSB2ZWM0IHZDb2xvcjsKK3ZhcnlpbmcgdmVjNCBjb2xvcjsKK3ZvaWQgbWFpbigpCit7
CisgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247CisgICAgY29sb3IgPSB2Q29sb3I7Cit9Cis8
L3NjcmlwdD4KKzxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1q
YXZhc2NyaXB0Ij4KK3ZhcnlpbmcgdmVjNCBjb2xvcjsKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xf
RnJhZ0NvbG9yID0gY29sb3I7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigi
VGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50YXRpb25zIGRvbid0IGFsbG93IG5hbWVz
IHRoYXQgc3RhcnQgd2l0aCAnZ2xfJyB3aGVuIGNhbGxpbmcgYmluZEF0dHJpYkxvY2F0aW9uLiIp
OworCitkZWJ1ZygiIik7CitkZWJ1ZygiQ2FudmFzLmdldENvbnRleHQiKTsKKwordmFyIGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK3Nob3VsZEJlTm9uTnVsbChj
YW52YXMpOwordmFyIGdsID0gY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIp
Oworc2hvdWxkQmVOb25OdWxsKGdsKTsKKworZnVuY3Rpb24gZmFpbCh4LHksIGJ1Ziwgc2hvdWxk
QmUpCit7CisgICAgdmFyIGkgPSAoeSo1MCt4KSAqIDQ7CisgICAgdmFyIHJlYXNvbiA9ICJwaXhl
bCBhdCAoIit4KyIsIit5KyIpIGlzICgiK2J1ZltpXSsiLCIrYnVmW2krMV0rIiwiK2J1ZltpKzJd
KyIsIitidWZbaSszXSsiKSwgc2hvdWxkIGJlICIrc2hvdWxkQmU7CisgICAgdGVzdEZhaWxlZChy
ZWFzb24pOworfQorCitmdW5jdGlvbiBwYXNzKCkKK3sKKyAgICB0ZXN0UGFzc2VkKCJkcmF3aW5n
IGlzIGNvcnJlY3QiKTsKK30KKworZnVuY3Rpb24gbG9hZFNoYWRlcihzaGFkZXJUeXBlLCBzaGFk
ZXJJZCkgeworICAvLyBHZXQgdGhlIHNoYWRlciBzb3VyY2UuCisgIHZhciBzaGFkZXJTb3VyY2Ug
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzaGFkZXJJZCkudGV4dDsKKworICAvLyBDcmVhdGUg
dGhlIHNoYWRlciBvYmplY3QKKyAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihzaGFkZXJU
eXBlKTsKKyAgaWYgKHNoYWRlciA9PSBudWxsKSB7CisgICAgICBkZWJ1ZygiKioqIEVycm9yOiB1
bmFibGUgdG8gY3JlYXRlIHNoYWRlciAnIitzaGFkZXJJZCsiJyIpOworICAgICAgcmV0dXJuIG51
bGw7CisgIH0KKworICAvLyBMb2FkIHRoZSBzaGFkZXIgc291cmNlCisgIGdsLnNoYWRlclNvdXJj
ZShzaGFkZXIsIHNoYWRlclNvdXJjZSk7CisKKyAgLy8gQ29tcGlsZSB0aGUgc2hhZGVyCisgIGds
LmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKworICAvLyBDaGVjayB0aGUgY29tcGlsZSBzdGF0dXMK
KyAgdmFyIGNvbXBpbGVkID0gZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElM
RV9TVEFUVVMpOworICBpZiAoIWNvbXBpbGVkKSB7CisgICAgICAvLyBTb21ldGhpbmcgd2VudCB3
cm9uZyBkdXJpbmcgY29tcGlsYXRpb247IGdldCB0aGUgZXJyb3IKKyAgICAgIHZhciBlcnJvciA9
IGdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAgICAgIGRlYnVnKCIqKiogRXJyb3IgY29t
cGlsaW5nIHNoYWRlciAnIitzaGFkZXIrIic6IitlcnJvcik7CisgICAgICBnbC5kZWxldGVTaGFk
ZXIoc2hhZGVyKTsKKyAgICAgIHJldHVybiBudWxsOworICB9CisgIHJldHVybiBzaGFkZXI7Cit9
CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJDaGVja2luZyBnbC5iaW5kQXR0cmliTG9jYXRpb24uIik7
CisKK3ZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworZ2wuYmluZEF0dHJpYkxvY2F0
aW9uKHByb2dyYW0sIDAsICJnbF9mb28iKTsKK2Fzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGds
LklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICJiaW5kQXR0cmliTG9jYXRpb24gc2hvdWxk
IHJldHVybiBJTlZBTElEX09QRVJBVElPTiBpZiBuYW1lIHN0YXJ0cyB3aXRoICdnbF8nIik7Citn
bC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgImdsX1RleENvb3JkMCIpOworYXNzZXJ0
TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgImJp
bmRBdHRyaWJMb2NhdGlvbiBzaG91bGQgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OIGlmIG5hbWUg
c3RhcnRzIHdpdGggJ2dsXyciKTsKKwordmFyIHZzID0gbG9hZFNoYWRlcihnbC5WRVJURVhfU0hB
REVSLCAidnNoYWRlciIpOwordmFyIGZzID0gbG9hZFNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIs
ICJmc2hhZGVyIik7CitnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdnMpOworZ2wuYXR0YWNoU2hh
ZGVyKHByb2dyYW0sIGZzKTsKKwordmFyIHBvc2l0aW9ucyA9IGdsLmNyZWF0ZUJ1ZmZlcigpOwor
Z2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHBvc2l0aW9ucyk7CitnbC5idWZmZXJEYXRh
KGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbIDAsMC41LDAsIC0wLjUsLTAuNSww
LCAwLjUsLTAuNSwwIF0pLCBnbC5TVEFUSUNfRFJBVyk7CisKK3ZhciBjb2xvcnMgPSBnbC5jcmVh
dGVCdWZmZXIoKTsKK2dsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvcnMpOworZ2wu
YnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWworICAgMCwxLDAs
MSwKKyAgIDAsMSwwLDEsCisgICAwLDEsMCwxXSksIGdsLlNUQVRJQ19EUkFXKTsKKworZnVuY3Rp
b24gc2V0QmluZExvY2F0aW9ucyhjb2xvckxvY2F0aW9uLCBwb3NpdGlvbkxvY2F0aW9uKSB7Cisg
IGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBwb3NpdGlvbkxvY2F0aW9uLCAidlBvc2l0
aW9uIik7CisgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBjb2xvckxvY2F0aW9uLCAi
dkNvbG9yIik7CisgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pOworICBnbC51c2VQcm9ncmFtKHBy
b2dyYW0pOworICB2YXIgbGlua2VkID0gKGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwg
Z2wuTElOS19TVEFUVVMpICE9IDApOworICBhc3NlcnRNc2cobGlua2VkLCAicHJvZ3JhbSBsaW5r
ZWQgc3VjY2Vzc2Z1bGx5Iik7CisKKyAgZGVidWcoInZQb3NpdGlvbjoiICsgZ2wuZ2V0QXR0cmli
TG9jYXRpb24ocHJvZ3JhbSwgInZQb3NpdGlvbiIpKQorICBkZWJ1ZygidkNvbG9yICAgOiIgKyBn
bC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidkNvbG9yIikpCisgIGFzc2VydE1zZyhnbC5n
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidlBvc2l0aW9uIikgPT0gcG9zaXRpb25Mb2NhdGlv
biwKKyAgICAgICAgICAgICJsb2NhdGlvbiBvZiB2UG9zaXRvbiBzaG91bGQgYmUgIiArIHBvc2l0
aW9uTG9jYXRpb24pOworICBhc3NlcnRNc2coZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwg
InZDb2xvciIpID09IGNvbG9yTG9jYXRpb24sCisgICAgICAgICAgICAibG9jYXRpb24gb2YgdkNv
bG9yIHNob3VsZCBiZSAiICsgY29sb3JMb2NhdGlvbik7CisKKyAgdmFyIHBsb2MgPSBnbC5nZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidlBvc2l0aW9uIik7CisgIHZhciBjbG9jID0gZ2wuZ2V0
QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInZDb2xvciIpOworICBnbC5iaW5kQnVmZmVyKGdsLkFS
UkFZX0JVRkZFUiwgcG9zaXRpb25zKTsKKyAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocG9z
aXRpb25Mb2NhdGlvbik7CisgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocG9zaXRpb25Mb2NhdGlv
biwgMywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9C
VUZGRVIsIGNvbG9ycyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGNvbG9yTG9jYXRp
b24pOworICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGNvbG9yTG9jYXRpb24sIDQsIGdsLkZMT0FU
LCBmYWxzZSwgMCwgMCk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrRHJhdyhjb2xvckxvY2F0aW9uLCBw
b3NpdGlvbkxvY2F0aW9uLCByLCBnLCBiLCBhKSB7CisgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwg
MSk7CisgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklU
KTsKKyAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDMpOworCisgIHZhciB3aWR0aCA9
IDUwOworICB2YXIgaGVpZ2h0ID0gNTA7CisgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSh3aWR0
aCAqIGhlaWdodCAqIDQpOworICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGds
LlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisKKyAgZnVuY3Rpb24gY2hlY2tQaXhlbCh4
LCB5LCByLCBnLCBiLCBhKSB7CisgICAgdmFyIG9mZnNldCA9ICh5ICogd2lkdGggKyB4KSAqIDQ7
CisgICAgaWYgKGJ1ZltvZmZzZXQgKyAwXSAhPSByIHx8CisgICAgICAgIGJ1ZltvZmZzZXQgKyAx
XSAhPSBnIHx8CisgICAgICAgIGJ1ZltvZmZzZXQgKyAyXSAhPSBiIHx8CisgICAgICAgIGJ1Zltv
ZmZzZXQgKyAzXSAhPSBhKSB7CisgICAgICAgIGZhaWwoeCwgeSwgYnVmLCAiKCIgKyByICsgIiwi
ICsgZyArICIsIiArIGIgKyAiLCIgKyBhICsgIikiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIC8vIFRlc3Qgc2V2ZXJhbCBsb2NhdGlv
bnMKKyAgLy8gRmlyc3QgbGluZSBzaG91bGQgYmUgYWxsIGJsYWNrCisgIHZhciBzdWNjZXNzID0g
dHJ1ZTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKQorICAgIHN1Y2Nlc3MgPSBzdWNj
ZXNzICYmIGNoZWNrUGl4ZWwoaSwgMCwgMCwgMCwgMCwgMjU1KTsKKworICAvLyBMaW5lIDE1IHNo
b3VsZCBiZSByZWQgZm9yIGF0IGxlYXN0IDEwIHJnYmEgcGl4ZWxzIHN0YXJ0aW5nIDIwIHBpeGVs
cyBpbgorICB2YXIgb2Zmc2V0ID0gKDE1ICogNTAgKyAyMCkgKiA0OworICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwOyArK2kpCisgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY2hlY2tQaXhlbCgyMCAr
IGksIDE1LCByLCBnLCBiLCBhKTsKKworICAvLyBMYXN0IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFj
aworICBmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpCisgICAgc3VjY2VzcyA9IHN1Y2Nlc3Mg
JiYgY2hlY2tQaXhlbChpLCA0OSwgMCwgMCwgMCwgMjU1KTsKKworICBpZiAoc3VjY2VzcykKKyAg
ICBwYXNzKCk7CisKKyAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHBvc2l0aW9uTG9jYXRp
b24pOworICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoY29sb3JMb2NhdGlvbik7Cit9CisK
K3NldEJpbmRMb2NhdGlvbnMoMiwgMyk7CitjaGVja0RyYXcoMiwgMywgMCwgMjU1LCAwLCAyNTUp
OworCitzZXRCaW5kTG9jYXRpb25zKDAsIDMpOworZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KDApOworZ2wudmVydGV4QXR0cmliNGYoMCwgMSwgMCwgMCwgMSk7CitjaGVja0RyYXcoMCwgMywg
MjU1LCAwLCAwLCAyNTUpOworCitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJP
UiIpOworCitkZWJ1ZygiIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvZ2wtdmVydGV4LWF0dHJpYi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdmVydGV4LWF0dHJpYi1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC12ZXJ0ZXgtYXR0
cmliLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorVGhpcyB0ZXN0
IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50YXRpb25zIHZlcnRleEF0dHJpYiBjYW4gYmUgc2V0IGFu
ZCByZWFkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ2FudmFzLmdldENvbnRl
eHQKK1BBU1MgY29udGV4dCBleGlzdHMKKworQ2hlY2tpbmcgZ2wudmVydGV4QXR0cmliLgorUEFT
UyBnbC5nZXRWZXJ0ZXhBdHRyaWIoMCwgZ2wuQ1VSUkVOVF9WRVJURVhfQVRUUklCKVswXSBpcyAx
CitQQVNTIGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpWzFd
IGlzIDIKK1BBU1MgZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJ
QilbMl0gaXMgMworUEFTUyBnbC5nZXRWZXJ0ZXhBdHRyaWIoMCwgZ2wuQ1VSUkVOVF9WRVJURVhf
QVRUUklCKVszXSBpcyA0CitQQVNTIGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJSRU5UX1ZF
UlRFWF9BVFRSSUIpWzBdIGlzIDUKK1BBU1MgZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJF
TlRfVkVSVEVYX0FUVFJJQilbMV0gaXMgMAorUEFTUyBnbC5nZXRWZXJ0ZXhBdHRyaWIoMCwgZ2wu
Q1VSUkVOVF9WRVJURVhfQVRUUklCKVsyXSBpcyAwCitQQVNTIGdsLmdldFZlcnRleEF0dHJpYigw
LCBnbC5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpWzNdIGlzIDEKKworUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2dsLXZlcnRleC1hdHRyaWIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC12ZXJ0ZXgtYXR0cmliLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC12ZXJ0ZXgtYXR0cmliLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
VzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICJodHRwOi8vd3d3LnczLm9y
Zy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9
IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRs
ZT5XZWJHTCB2ZXJ0ZXhBdHRyaWIgQ29uZm9ybWFuY2UgVGVzdHM8L3RpdGxlPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
Lz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiPiA8
L2NhbnZhcz4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wg
aW1wbGVtZW50YXRpb25zIHZlcnRleEF0dHJpYiBjYW4gYmUgc2V0IGFuZCByZWFkLiIpOworCitk
ZWJ1ZygiIik7CitkZWJ1ZygiQ2FudmFzLmdldENvbnRleHQiKTsKKwordmFyIGdsID0gY3JlYXRl
M0RDb250ZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKSk7CitpZiAoIWdsKSB7
CisgIHRlc3RGYWlsZWQoImNvbnRleHQgZG9lcyBub3QgZXhpc3QiKTsKK30gZWxzZSB7CisgIHRl
c3RQYXNzZWQoImNvbnRleHQgZXhpc3RzIik7CisKKyAgZGVidWcoIiIpOworICBkZWJ1ZygiQ2hl
Y2tpbmcgZ2wudmVydGV4QXR0cmliLiIpOworCisgIGdsLnZlcnRleEF0dHJpYjRmdigwLCBbMSwg
MiwgMywgNF0pOworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRf
VkVSVEVYX0FUVFJJQilbMF0nLCAnMScpOworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmli
KDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbMV0nLCAnMicpOworICBzaG91bGRCZSgnZ2wu
Z2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbMl0nLCAnMycpOwor
ICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJ
QilbM10nLCAnNCcpOworCisgIGdsLnZlcnRleEF0dHJpYjFmKDAsIDUpOworICBzaG91bGRCZSgn
Z2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbMF0nLCAnNScp
OworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FU
VFJJQilbMV0nLCAnMCcpOworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNV
UlJFTlRfVkVSVEVYX0FUVFJJQilbMl0nLCAnMCcpOworICBzaG91bGRCZSgnZ2wuZ2V0VmVydGV4
QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQilbM10nLCAnMScpOworfQorCitkZWJ1
ZygiIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKworPC9i
b2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>