<?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>156950</bug_id>
          
          <creation_ts>2016-04-23 01:30:33 -0700</creation_ts>
          <short_desc>Introduce MathOperator::OperatorType</short_desc>
          <delta_ts>2016-06-09 07:48:59 -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>MathML</component>
          <version>WebKit 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>
          <dependson>156906</dependson>
    
    <dependson>156910</dependson>
    
    <dependson>156913</dependson>
    
    <dependson>156921</dependson>
          <blocked>152244</blocked>
    
    <blocked>157071</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>alex</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbarton</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jfernandez</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rego</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1186601</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-23 01:30:33 -0700</bug_when>
    <thetext>Yet another piece from bug 152244.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186603</commentid>
    <comment_count>1</comment_count>
      <attachid>277145</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-23 01:33:18 -0700</bug_when>
    <thetext>Created attachment 277145
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186881</commentid>
    <comment_count>2</comment_count>
      <attachid>277232</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-25 01:15:51 -0700</bug_when>
    <thetext>Created attachment 277232
Patch

Adding the ChangeLog info...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187734</commentid>
    <comment_count>3</comment_count>
      <attachid>277474</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-27 06:25:13 -0700</bug_when>
    <thetext>Created attachment 277474
Patch

Minor change: add the ASSERT to MathOperator::setGlyphAssembly now that we can exclude DisplayOperator type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191146</commentid>
    <comment_count>4</comment_count>
      <attachid>278391</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-09 00:51:35 -0700</bug_when>
    <thetext>Created attachment 278391
Patch

Updating after https://trac.webkit.org/changeset/200569</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191485</commentid>
    <comment_count>5</comment_count>
      <attachid>278391</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-05-10 03:50:40 -0700</bug_when>
    <thetext>Comment on attachment 278391
Patch

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

The patch seems good to me, just a few minor comments.

&gt; Source/WebCore/rendering/mathml/MathOperator.cpp:80
&gt; +    , m_operatorType(OperatorType::UndefinedOperator)

Can&apos;t you omit &quot;OperatorType::&quot;?
As the enum is defined by this class and the information is somehow redundant.

&gt; Source/WebCore/rendering/mathml/MathOperator.cpp:117
&gt; +    ASSERT(m_operatorType == OperatorType::DisplayOperator);

You&apos;re changing m_isVertical by VerticalOperator in the rest of the patch, except here.
What&apos;s the reason?

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:386
&gt; +    MathOperator::OperatorType type;
&gt; +    if (isLargeOperatorInDisplayStyle())
&gt; +        type = MathOperator::OperatorType::DisplayOperator;
&gt; +    else if (m_isVertical)
&gt; +        type = MathOperator::OperatorType::VerticalOperator;
&gt; +    else
&gt; +        type = MathOperator::OperatorType::HorizontalOperator;
&gt; +    m_mathOperator.setOperator(m_textContent, type);

Maybe you can extract this to a helper method, as it&apos;s repeated twice
first in computePreferredLogicalWidths() and then here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191486</commentid>
    <comment_count>6</comment_count>
      <attachid>278391</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-10 04:13:49 -0700</bug_when>
    <thetext>Comment on attachment 278391
Patch

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

&gt;&gt; Source/WebCore/rendering/mathml/MathOperator.cpp:80
&gt;&gt; +    , m_operatorType(OperatorType::UndefinedOperator)
&gt; 
&gt; Can&apos;t you omit &quot;OperatorType::&quot;?
&gt; As the enum is defined by this class and the information is somehow redundant.

Darin suggested to use class enum for StretchType instead of old-style enum in a previous bug so I&apos;m doing the same here. In that case, the prefix becomes mandatory.

&gt;&gt; Source/WebCore/rendering/mathml/MathOperator.cpp:117
&gt;&gt; +    ASSERT(m_operatorType == OperatorType::DisplayOperator);
&gt; 
&gt; You&apos;re changing m_isVertical by VerticalOperator in the rest of the patch, except here.
&gt; What&apos;s the reason?

The client can stretch the operator in three different ways:

1) horizontally to match a target size
2) vertically to match a target size
3) as a display operator (e.g. big summation symbol) for which you don&apos;t have a target size.

I did not include the difference between 2) and 3) in previous bugs (both of them use vertical constructions internally) but that&apos;s the whole of point the present patch.

&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:386
&gt;&gt; +    m_mathOperator.setOperator(m_textContent, type);
&gt; 
&gt; Maybe you can extract this to a helper method, as it&apos;s repeated twice
&gt; first in computePreferredLogicalWidths() and then here.

This is a temporary hack. In follow-up pieces of the MathOperator refactoring, setOperator will only be called once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191887</commentid>
    <comment_count>7</comment_count>
      <attachid>278604</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-11 02:16:25 -0700</bug_when>
    <thetext>Created attachment 278604
Patch for EWS testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191888</commentid>
    <comment_count>8</comment_count>
      <attachid>278605</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-11 02:18:16 -0700</bug_when>
    <thetext>Created attachment 278605
Patch for EWS testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192699</commentid>
    <comment_count>9</comment_count>
      <attachid>278391</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-05-13 02:05:01 -0700</bug_when>
    <thetext>Comment on attachment 278391
Patch

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

Looking good.

The only thing I&apos;m missing is where m_isVertical is initialized, because I guess we should take into account the specific operator.

&gt; Source/WebCore/ChangeLog:18
&gt; +        (WebCore::MathOperator::setGlyphAssembly): Add an assert to ensure that the function is correctly use.

Nit: /use/used

&gt; Source/WebCore/rendering/mathml/MathOperator.h:69
&gt; +    LayoutUnit stretchSize() const { return m_operatorType == OperatorType::HorizontalOperator ? m_width : m_ascent + m_descent; }

Is valid to call stretchSize for UndefinedOperator or DisplayOperator?

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:276
&gt; +        type = MathOperator::OperatorType::HorizontalOperator;

We can simplify this a bit doing

else
    type = m_isVertical ? MathOperator::OperatorType::VerticalOperator : MathOperator::OperatorType::HorizontalOperator;

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:385
&gt; +        type = MathOperator::OperatorType::HorizontalOperator;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192702</commentid>
    <comment_count>10</comment_count>
      <attachid>278391</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-13 02:12:44 -0700</bug_when>
    <thetext>Comment on attachment 278391
Patch

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

m_isVertical is initialized in existing code when the operator content is parsed.

&gt;&gt; Source/WebCore/rendering/mathml/MathOperator.h:69
&gt;&gt; +    LayoutUnit stretchSize() const { return m_operatorType == OperatorType::HorizontalOperator ? m_width : m_ascent + m_descent; }
&gt; 
&gt; Is valid to call stretchSize for UndefinedOperator or DisplayOperator?

No, I should probably add an ASSERT and do not invert the two directions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192728</commentid>
    <comment_count>11</comment_count>
      <attachid>278836</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-13 05:14:42 -0700</bug_when>
    <thetext>Created attachment 278836
Patch

Addressing Sergio&apos;s review comments...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192754</commentid>
    <comment_count>12</comment_count>
      <attachid>278836</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-13 08:43:17 -0700</bug_when>
    <thetext>Comment on attachment 278836
Patch

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

&gt; Source/WebCore/rendering/mathml/MathOperator.cpp:80
&gt; +    , m_operatorType(OperatorType::UndefinedOperator)

This initialization (and the rest of the initialization) should be done in the class definition where the data members are defined, rather than here in the destructor.

&gt; Source/WebCore/rendering/mathml/MathOperator.h:42
&gt; +    enum class OperatorType { UndefinedOperator, DisplayOperator, VerticalOperator, HorizontalOperator };

Given that these things are scoped to the class and to the enum also, I suggest:

    enum class Type { Undefined, Display, Vertical, Horizontal };

Otherwise, MathOperator::OperatorType::UndefinedOperator repeats the word “operator” three times. In the scope of the MathOperator class, Type is sufficiently specific and there is little risk of confusing it with, say, StretchType.

Using the longer names makes the code rather wordy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192773</commentid>
    <comment_count>13</comment_count>
      <attachid>278841</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-13 09:31:39 -0700</bug_when>
    <thetext>Created attachment 278841
Patch

This addressed Darin&apos;s comments.

&gt; This initialization (and the rest of the initialization) should be done in the class definition where the data members are defined, rather than here in the destructor.

When I get review comments on the big code move of bug 156921, I&apos;ll upload a new patch for bug 156921 including the change for the rest of the init.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200741</commentid>
    <comment_count>14</comment_count>
      <attachid>280886</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-06-08 23:24:13 -0700</bug_when>
    <thetext>Created attachment 280886
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200826</commentid>
    <comment_count>15</comment_count>
      <attachid>280886</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-06-09 07:08:53 -0700</bug_when>
    <thetext>Comment on attachment 280886
Patch

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

&gt; Source/WebCore/rendering/mathml/MathOperator.h:73
&gt; +    }

If the method body is longer than 1 line it&apos;s typically not included here but instead defined inlined after the class definition in order to keep the class API clean.

&gt; Source/WebCore/rendering/mathml/MathOperator.h:88
&gt; +    Type m_operatorType = Type::UndefinedOperator;

I think Type m_operatorType { Type::UnderfinedOperator } is preferred nowadays.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200830</commentid>
    <comment_count>16</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-06-09 07:48:59 -0700</bug_when>
    <thetext>Committed r201862: &lt;http://trac.webkit.org/changeset/201862&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277145</attachid>
            <date>2016-04-23 01:33:18 -0700</date>
            <delta_ts>2016-04-25 01:15:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>156951.patch</filename>
            <type>text/plain</type>
            <size>9161</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcApp
bmRleCBhNzNiOWMzLi4xNmFlZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRpYyBjb25zdCBT
dHJldGNoeUNoYXJhY3RlciBzdHJldGNoeUNoYXJhY3RlcnNbMTRdID0gewogCiBNYXRoT3BlcmF0
b3I6Ok1hdGhPcGVyYXRvcigpCiAgICAgOiBtX2Jhc2VDaGFyYWN0ZXIoMCkKLSAgICAsIG1faXNW
ZXJ0aWNhbChmYWxzZSkKKyAgICAsIG1fb3BlcmF0b3JUeXBlKFVuZGVmaW5lZE9wZXJhdG9yKQog
ICAgICwgbV9zdHJldGNoVHlwZShVbnN0cmV0Y2hlZCkKICAgICAsIG1fd2lkdGgoMCkKICAgICAs
IG1fYXNjZW50KDApCkBAIC04NiwxMCArODYsMTAgQEAgTWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0
b3IoKQogewogfQogCi12b2lkIE1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IoVUNoYXIgYmFzZUNo
YXJhY3RlciwgYm9vbCBpc1ZlcnRpY2FsKQordm9pZCBNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9y
KFVDaGFyIGJhc2VDaGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSBvcGVyYXRvclR5cGUpCiB7CiAgICAg
bV9iYXNlQ2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlcjsKLSAgICBtX2lzVmVydGljYWwgPSBpc1Zl
cnRpY2FsOworICAgIG1fb3BlcmF0b3JUeXBlID0gb3BlcmF0b3JUeXBlOwogfQogCiBib29sIE1h
dGhPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR2x5cGhE
YXRhJiBiYXNlR2x5cGgpIGNvbnN0CkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBNYXRoT3BlcmF0
b3I6OnNldEdseXBoQXNzZW1ibHkoY29uc3QgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0
YSYgYXNzZW0KIAogdm9pZCBNYXRoT3BlcmF0b3I6OmZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJh
dG9yKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2Fs
KTsKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gRGlzcGxheU9wZXJhdG9yKTsKIAogICAg
IEdseXBoRGF0YSBiYXNlR2x5cGg7CiAgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VH
bHlwaCkgfHwgIWJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKQpAQCAtMjQxLDcgKzI0MSw5IEBA
IGJvb2wgTWF0aE9wZXJhdG9yOjpnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBWZWN0CiAKIHZvaWQgTWF0aE9wZXJhdG9yOjpmaW5kU3RyZXRj
aHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQqIG1heGltdW1HbHlwaFdpZHRo
LCBMYXlvdXRVbml0IHRhcmdldFNpemUpCiB7Ci0gICAgQVNTRVJUKCFtYXhpbXVtR2x5cGhXaWR0
aCB8fCBtX2lzVmVydGljYWwpOworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBWZXJ0aWNh
bE9wZXJhdG9yIHx8IG1fb3BlcmF0b3JUeXBlID09IEhvcml6b250YWxPcGVyYXRvcik7CisgICAg
QVNTRVJUKCFtYXhpbXVtR2x5cGhXaWR0aCB8fCBtX29wZXJhdG9yVHlwZSA9PSBWZXJ0aWNhbE9w
ZXJhdG9yKTsKKyAgICBib29sIGlzVmVydGljYWwgPSBtX29wZXJhdG9yVHlwZSA9PSBWZXJ0aWNh
bE9wZXJhdG9yOwogCiAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKICAgICBpZiAoIWdldEJhc2VH
bHlwaChzdHlsZSwgYmFzZUdseXBoKSkKQEAgLTI0OSw3ICsyNTEsNyBAQCB2b2lkIE1hdGhPcGVy
YXRvcjo6ZmluZFN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBt
YXhpbXVtR2x5cAogCiAgICAgaWYgKCFtYXhpbXVtR2x5cGhXaWR0aCkgewogICAgICAgICAvLyBX
ZSBkbyBub3Qgc3RyZXRjaCBpZiB0aGUgYmFzZSBnbHlwaCBpcyBsYXJnZSBlbm91Z2guCi0gICAg
ICAgIGZsb2F0IGJhc2VTaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoYmFzZUds
eXBoKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCk7CisgICAgICAgIGZsb2F0IGJh
c2VTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZhbmNl
V2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpOwogICAgICAgICBpZiAodGFyZ2V0U2l6ZSA8PSBiYXNl
U2l6ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNTgsNyArMjYwLDcgQEAgdm9p
ZCBNYXRoT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBmbG9hdCogbWF4aW11bUdseXAKICAgICBpZiAoYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkp
IHsKICAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CiAgICAgICAgIFZlY3RvcjxP
cGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7Ci0gICAgICAgIGJh
c2VHbHlwaC5mb250LT5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBo
LCBtX2lzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisgICAgICAgIGJh
c2VHbHlwaC5mb250LT5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBo
LCBpc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwogICAgICAgICAvLyBX
ZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMuCiAgICAgICAgIGZvciAoYXV0byYgc2l6ZVZhcmlh
bnQgOiBzaXplVmFyaWFudHMpIHsKICAgICAgICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6
ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKQEAgLTI2Niw3ICsyNjgsNyBAQCB2b2lkIE1hdGhP
cGVyYXRvcjo6ZmluZFN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0
KiBtYXhpbXVtR2x5cAogICAgICAgICAgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6
bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKSk7
CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBzZXRTaXplVmFyaWFudChnbHlw
aERhdGEpOwotICAgICAgICAgICAgICAgIGZsb2F0IHNpemUgPSBtX2lzVmVydGljYWwgPyBoZWln
aHRGb3JHbHlwaChnbHlwaERhdGEpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKTsK
KyAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBo
KGdseXBoRGF0YSkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERhdGEpOwogICAgICAgICAg
ICAgICAgIGlmIChzaXplID49IHRhcmdldFNpemUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KQEAgLTI3Niw3ICsyNzgsNyBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6
ZmluZFN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXVt
R2x5cAogICAgICAgICBpZiAoIWdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhzdHlsZSwgYXNzZW1i
bHlQYXJ0cywgYXNzZW1ibHlEYXRhKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoIW1faXNWZXJ0aWNhbCkKKyAgICAgICAgaWYgKCFpc1ZlcnRpY2FsKQog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIElmIHRoZSBmb250IGRvZXMgbm90IGhh
dmUgYSBNQVRIIHRhYmxlLCB3ZSBmYWxsYmFjayB0byB0aGUgVW5pY29kZS1vbmx5IGNvbnN0cnVj
dGlvbnMuCkBAIC0zMTQsNyArMzE2LDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmZpbmRTdHJldGNo
eURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11bUdseXAKICAgICB9
CiAKICAgICAvLyBXZSBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBpcyBsYXJnZSBlbm91Z2ggdG8gYXZv
aWQgZ2x5cGggb3ZlcmxhcHMuCi0gICAgZmxvYXQgbWluU2l6ZSA9IG1faXNWZXJ0aWNhbCA/Cisg
ICAgZmxvYXQgbWluU2l6ZSA9IGlzVmVydGljYWwgPwogICAgICAgICBoZWlnaHRGb3JHbHlwaChh
c3NlbWJseURhdGEudG9wKSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsg
aGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbSkKICAgICAgICAgOiBhZHZhbmNlV2lk
dGhGb3JHbHlwaChhc3NlbWJseURhdGEubGVmdCkgKyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3Nl
bWJseURhdGEubWlkZGxlKSArIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5yaWdo
dCk7CiAgICAgaWYgKG1pblNpemUgPiB0YXJnZXRTaXplKQpAQCAtMzc3LDcgKzM3OSw3IEBAIExh
eW91dFJlY3QgTWF0aE9wZXJhdG9yOjpwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgUGFpbnRJbmZvJiBpbmZvLCBjCiAKIHZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRp
Y2FsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGlu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCiB7Ci0g
ICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IFZl
cnRpY2FsT3BlcmF0b3IpOwogICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1i
bHkpOwogICAgIEFTU0VSVChtX2Fzc2VtYmx5LmV4dGVuc2lvbi5pc1ZhbGlkKCkpOwogICAgIEFT
U0VSVChmcm9tLnkoKSA8PSB0by55KCkpOwpAQCAtNDE1LDcgKzQxNyw3IEBAIHZvaWQgTWF0aE9w
ZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBQYWluCiAKIHZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRl
bnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bykKIHsKLSAgICBBU1NF
UlQoIW1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IEhvcml6b250
YWxPcGVyYXRvcik7CiAgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7
CiAgICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7CiAgICAgQVNTRVJU
KGZyb20ueCgpIDw9IHRvLngoKSk7CkBAIC00NTEsNyArNDUzLDcgQEAgdm9pZCBNYXRoT3BlcmF0
b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgUGEKIAogdm9pZCBNYXRoT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAgQVNT
RVJUKG1fb3BlcmF0b3JUeXBlID09IFZlcnRpY2FsT3BlcmF0b3IpOwogICAgIEFTU0VSVChtX3N0
cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpOwogICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRvcC5p
c1ZhbGlkKCkpOwogICAgIEFTU0VSVChtX2Fzc2VtYmx5LmJvdHRvbS5pc1ZhbGlkKCkpOwpAQCAt
NDgzLDcgKzQ4NSw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3Nl
bWJseShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mCiAKIHZvaWQgTWF0aE9wZXJh
dG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0g
ICAgQVNTRVJUKCFtX2lzVmVydGljYWwpOworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBI
b3Jpem9udGFsT3BlcmF0b3IpOwogICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IEdseXBoQXNz
ZW1ibHkpOwogICAgIEFTU0VSVChtX2Fzc2VtYmx5LmxlZnQuaXNWYWxpZCgpKTsKICAgICBBU1NF
UlQobV9hc3NlbWJseS5yaWdodC5pc1ZhbGlkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKaW5kZXggNGI0ZGUxOC4uN2ViNDRlNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCkBAIC0zOSw4
ICszOSwxNCBAQCBjbGFzcyBSZW5kZXJTdHlsZTsKIAogY2xhc3MgTWF0aE9wZXJhdG9yIHsKIHB1
YmxpYzoKKyAgICBlbnVtIE9wZXJhdG9yVHlwZSB7CisgICAgICAgIFVuZGVmaW5lZE9wZXJhdG9y
LAorICAgICAgICBEaXNwbGF5T3BlcmF0b3IsCisgICAgICAgIFZlcnRpY2FsT3BlcmF0b3IsCisg
ICAgICAgIEhvcml6b250YWxPcGVyYXRvcgorICAgIH07CiAgICAgTWF0aE9wZXJhdG9yKCk7Ci0g
ICAgdm9pZCBzZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBib29sIGlzVmVydGljYWwp
OworICAgIHZvaWQgc2V0T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgT3BlcmF0b3JUeXBl
KTsKIAogICAgIExheW91dFVuaXQgaXRhbGljQ29ycmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aXRhbGljQ29ycmVjdGlvbjsgfQogCkBAIC03Nyw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAg
VHJpbUxlZnRBbmRSaWdodAogICAgIH07CiAKLSAgICBMYXlvdXRVbml0IHN0cmV0Y2hTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1ZlcnRpY2FsID8gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgOiBtX3dp
ZHRoOyB9OworICAgIExheW91dFVuaXQgc3RyZXRjaFNpemUoKSBjb25zdCB7IHJldHVybiBtX29w
ZXJhdG9yVHlwZSA9PSBIb3Jpem9udGFsT3BlcmF0b3IgPyBtX3dpZHRoIDogbV9hc2NlbnQgKyBt
X2Rlc2NlbnQ7IH0KICAgICBib29sIGdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIEds
eXBoRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgc2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRh
Jik7CiAgICAgdm9pZCBzZXRHbHlwaEFzc2VtYmx5KGNvbnN0IE1hdGhPcGVyYXRvcjo6R2x5cGhB
c3NlbWJseURhdGEmKTsKQEAgLTkyLDcgKzk4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRI
b3Jpem9udGFsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7CiAKICAgICBVQ2hhciBtX2Jhc2VDaGFyYWN0ZXI7Ci0gICAgYm9v
bCBtX2lzVmVydGljYWw7CisgICAgT3BlcmF0b3JUeXBlIG1fb3BlcmF0b3JUeXBlOwogICAgIFN0
cmV0Y2hUeXBlIG1fc3RyZXRjaFR5cGU7CiAgICAgdW5pb24gewogICAgICAgICBHbHlwaERhdGEg
bV92YXJpYW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAppbmRleCAyODAyNTgxLi5lYjNhODgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9w
ZXJhdG9yLmNwcApAQCAtMjY3LDcgKzI2NywxNCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9y
Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCBtX2lzVmVy
dGljYWwpOworICAgIE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlIHR5cGU7CisgICAgaWYgKGlz
TGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpCisgICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0
b3I6OkRpc3BsYXlPcGVyYXRvcjsKKyAgICBlbHNlIGlmIChtX2lzVmVydGljYWwpCisgICAgICAg
IHR5cGUgPSBNYXRoT3BlcmF0b3I6OlZlcnRpY2FsT3BlcmF0b3I7CisgICAgZWxzZQorICAgICAg
ICB0eXBlID0gTWF0aE9wZXJhdG9yOjpIb3Jpem9udGFsT3BlcmF0b3I7CisgICAgbV9tYXRoT3Bl
cmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwgdHlwZSk7CiAgICAgR2x5cGhEYXRhIGJh
c2VHbHlwaDsKICAgICBmbG9hdCBtYXhpbXVtR2x5cGhXaWR0aCA9IG1fbWF0aE9wZXJhdG9yLmdl
dEJhc2VHbHlwaChzdHlsZSgpLCBiYXNlR2x5cGgpID8gYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFz
ZUdseXBoKSA6IDA7CiAgICAgaWYgKCFtX2lzVmVydGljYWwpIHsKQEAgLTM2OSw3ICszNzYsMTQg
QEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAgIGlmICghc2hv
dWxkQWxsb3dTdHJldGNoaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbWF0aE9wZXJh
dG9yLnNldE9wZXJhdG9yKG1fdGV4dENvbnRlbnQsIG1faXNWZXJ0aWNhbCk7CisgICAgTWF0aE9w
ZXJhdG9yOjpPcGVyYXRvclR5cGUgdHlwZTsKKyAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNw
bGF5U3R5bGUoKSkKKyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6RGlzcGxheU9wZXJhdG9y
OworICAgIGVsc2UgaWYgKG1faXNWZXJ0aWNhbCkKKyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRv
cjo6VmVydGljYWxPcGVyYXRvcjsKKyAgICBlbHNlCisgICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0
b3I6Okhvcml6b250YWxPcGVyYXRvcjsKKyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvciht
X3RleHRDb250ZW50LCB0eXBlKTsKICAgICBpZiAobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVy
YXRvckluRGlzcGxheVN0eWxlKCkpCiAgICAgICAgIG1fbWF0aE9wZXJhdG9yLmZpbmREaXNwbGF5
U3R5bGVMYXJnZU9wZXJhdG9yKHN0eWxlKCkpOwogICAgIGVsc2Ugewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277232</attachid>
            <date>2016-04-25 01:15:51 -0700</date>
            <delta_ts>2016-04-27 06:25:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0004-OperatorType.patch</filename>
            <type>text/plain</type>
            <size>11669</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA5NTYzYThkODAxYzdhODU2NDg1ZmMyYzJmYThkZTE3NGJjMDllYTExIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogTW9uLCAyNSBBcHIgMjAxNiAxMDoxNDozOSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggNC80XSBP
cGVyYXRvclR5cGUKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAyOSArKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcCAgIHwgMzAgKysrKysrKysrKysrLS0tLS0t
LS0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaCAgICAg
fCAxMiArKysrKystLS0KIC4uLi9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9y
LmNwcCAgICAgIHwgMTggKysrKysrKysrKystLQogNCBmaWxlcyBjaGFuZ2VkLCA3MCBpbnNlcnRp
b25zKCspLCAxOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjBhNzVmMi4uZDQ5MDQyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE2LTA0LTI1ICBGcmVkZXJpYyBXYW5nICA8
ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgTWF0aE9wZXJhdG9yOjpPcGVy
YXRvclR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1Njk1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgYmVoYXZpb3IgaXMgbm90IGNoYW5nZS4KKworICAgICAgICBBbiBlbnVt
IE9wZXJhdG9yVHlwZSBpcyBpbnRyb2R1Y2VkIGluIE1hdGhPcGVyYXRvciBpbiBvcmRlciB0byBp
bmRpY2F0ZQorICAgICAgICB3aGljaCBraW5kIG9mIHN0cmV0Y2hpbmcgaXMgcmVxdWVzdGVkLiBJ
biBmb2xsb3ctdXAgd29yaywgdGhpcyB3aWxsCisgICAgICAgIGFsbG93IHRvIGp1c3QgY2FsbCBz
ZXRPcGVyYXRvciBhbmQgc3RyZXRjaFRvIHdpdGhvdXQgaGF2aW5nIHRvCisgICAgICAgIGV4cGxp
Y2l0bHkgY2FsbCBmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvciBvciBmaW5kU3RyZXRjaHlE
YXRhLgorCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IpOiBVc2UgT3BlcmF0b3JU
eXBlIGluc3RlYWQgb2YgYSBib29sZWFuLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9y
OjpzZXRPcGVyYXRvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpm
aW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6IERpdHRvLCB0aGlzIG1ha2VzIHRoZSBhc3Nl
cnQgbW9yZSBhY2N1cmF0ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmluZFN0
cmV0Y2h5RGF0YSk6IERpdHRvIGFuZCByZXBsYWNlIG1faXNWZXJ0aWNhbCB3aXRoIGEgbG9jYWwg
aXNWZXJ0aWNhbCB2YXJpYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Zmls
bFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRh
bEdseXBoQXNzZW1ibHkpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhP
cGVyYXRvci5oOiBBZGQgdGhlIE9wZXJhdG9yVHlwZSBlbnVtLgorICAgICAgICAoV2ViQ29yZTo6
TWF0aE9wZXJhdG9yOjpzdHJldGNoU2l6ZSk6IFVzZSBPcGVyYXRvclR5cGUgaW5zdGVhZCBvZiBh
IGJvb2xlYW4uCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBDYWxsIHNldE9wZXJhdG9yIHdpdGggdGhlIGNvcnJlY3Qg
dmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5
bGUpOiBEaXR0by4KKwogMjAxNi0wNC0yMiAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5j
b20+CiAKICAgICAgICAgTW92ZSBzZWxlY3Rpb24gYW5kIGRyYXdpbmcgb2Ygc3RyZXRjaHkgb3Bl
cmF0b3JzIGludG8gYSBzZXBhcmF0ZSBNYXRoT3BlcmF0b3IgY2xhc3MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcAppbmRleCAwNDY3OWE4Li45
MGQ0MTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhP
cGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3Bl
cmF0b3IuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRpYyBjb25zdCBTdHJldGNoeUNoYXJhY3Rl
ciBzdHJldGNoeUNoYXJhY3RlcnNbMTRdID0gewogCiBNYXRoT3BlcmF0b3I6Ok1hdGhPcGVyYXRv
cigpCiAgICAgOiBtX2Jhc2VDaGFyYWN0ZXIoMCkKLSAgICAsIG1faXNWZXJ0aWNhbChmYWxzZSkK
KyAgICAsIG1fb3BlcmF0b3JUeXBlKFVuZGVmaW5lZE9wZXJhdG9yKQogICAgICwgbV9zdHJldGNo
VHlwZShVbnN0cmV0Y2hlZCkKICAgICAsIG1fd2lkdGgoMCkKICAgICAsIG1fYXNjZW50KDApCkBA
IC04NiwxMCArODYsMTAgQEAgTWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IoKQogewogfQogCi12
b2lkIE1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgYm9vbCBp
c1ZlcnRpY2FsKQordm9pZCBNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKFVDaGFyIGJhc2VDaGFy
YWN0ZXIsIE9wZXJhdG9yVHlwZSBvcGVyYXRvclR5cGUpCiB7CiAgICAgbV9iYXNlQ2hhcmFjdGVy
ID0gYmFzZUNoYXJhY3RlcjsKLSAgICBtX2lzVmVydGljYWwgPSBpc1ZlcnRpY2FsOworICAgIG1f
b3BlcmF0b3JUeXBlID0gb3BlcmF0b3JUeXBlOwogfQogCiBib29sIE1hdGhPcGVyYXRvcjo6Z2V0
QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBiYXNlR2x5cGgp
IGNvbnN0CkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OnNldEdseXBoQXNz
ZW1ibHkoY29uc3QgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW0KIAogdm9p
ZCBNYXRoT3BlcmF0b3I6OmZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSkKIHsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NFUlQo
bV9vcGVyYXRvclR5cGUgPT0gRGlzcGxheU9wZXJhdG9yKTsKIAogICAgIEdseXBoRGF0YSBiYXNl
R2x5cGg7CiAgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkgfHwgIWJhc2VH
bHlwaC5mb250LT5tYXRoRGF0YSgpKQpAQCAtMjQxLDcgKzI0MSw5IEBAIGJvb2wgTWF0aE9wZXJh
dG9yOjpnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBWZWN0CiAKIHZvaWQgTWF0aE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgZmxvYXQqIG1heGltdW1HbHlwaFdpZHRoLCBMYXlvdXRVbml0IHRh
cmdldFNpemUpCiB7Ci0gICAgQVNTRVJUKCFtYXhpbXVtR2x5cGhXaWR0aCB8fCBtX2lzVmVydGlj
YWwpOworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBWZXJ0aWNhbE9wZXJhdG9yIHx8IG1f
b3BlcmF0b3JUeXBlID09IEhvcml6b250YWxPcGVyYXRvcik7CisgICAgQVNTRVJUKCFtYXhpbXVt
R2x5cGhXaWR0aCB8fCBtX29wZXJhdG9yVHlwZSA9PSBWZXJ0aWNhbE9wZXJhdG9yKTsKKyAgICBi
b29sIGlzVmVydGljYWwgPSBtX29wZXJhdG9yVHlwZSA9PSBWZXJ0aWNhbE9wZXJhdG9yOwogCiAg
ICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKICAgICBpZiAoIWdldEJhc2VHbHlwaChzdHlsZSwgYmFz
ZUdseXBoKSkKQEAgLTI0OSw3ICsyNTEsNyBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6ZmluZFN0cmV0
Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXVtR2x5cAogCiAg
ICAgaWYgKCFtYXhpbXVtR2x5cGhXaWR0aCkgewogICAgICAgICAvLyBXZSBkbyBub3Qgc3RyZXRj
aCBpZiB0aGUgYmFzZSBnbHlwaCBpcyBsYXJnZSBlbm91Z2guCi0gICAgICAgIGZsb2F0IGJhc2VT
aXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoYmFzZUdseXBoKSA6IGFkdmFuY2VX
aWR0aEZvckdseXBoKGJhc2VHbHlwaCk7CisgICAgICAgIGZsb2F0IGJhc2VTaXplID0gaXNWZXJ0
aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChi
YXNlR2x5cGgpOwogICAgICAgICBpZiAodGFyZ2V0U2l6ZSA8PSBiYXNlU2l6ZSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0yNTgsNyArMjYwLDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6
OmZpbmRTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11
bUdseXAKICAgICBpZiAoYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkpIHsKICAgICAgICAgVmVj
dG9yPEdseXBoPiBzaXplVmFyaWFudHM7CiAgICAgICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRh
OjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7Ci0gICAgICAgIGJhc2VHbHlwaC5mb250LT5t
YXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCBtX2lzVmVydGljYWws
IHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisgICAgICAgIGJhc2VHbHlwaC5mb250LT5t
YXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCBpc1ZlcnRpY2FsLCBz
aXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwogICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNp
emUgdmFyaWFudHMuCiAgICAgICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFu
dHMpIHsKICAgICAgICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VH
bHlwaC5mb250KTsKQEAgLTI2Niw3ICsyNjgsNyBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6ZmluZFN0
cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXVtR2x5cAog
ICAgICAgICAgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5
cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKSk7CiAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICBzZXRTaXplVmFyaWFudChnbHlwaERhdGEpOwotICAgICAg
ICAgICAgICAgIGZsb2F0IHNpemUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChnbHlw
aERhdGEpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKTsKKyAgICAgICAgICAgICAg
ICBmbG9hdCBzaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgOiBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERhdGEpOwogICAgICAgICAgICAgICAgIGlmIChzaXpl
ID49IHRhcmdldFNpemUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KQEAgLTI3Niw3ICsyNzgsNyBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6ZmluZFN0cmV0Y2h5RGF0
YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXVtR2x5cAogICAgICAgICBp
ZiAoIWdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhzdHlsZSwgYXNzZW1ibHlQYXJ0cywgYXNzZW1i
bHlEYXRhKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAo
IW1faXNWZXJ0aWNhbCkKKyAgICAgICAgaWYgKCFpc1ZlcnRpY2FsKQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIC8vIElmIHRoZSBmb250IGRvZXMgbm90IGhhdmUgYSBNQVRIIHRhYmxl
LCB3ZSBmYWxsYmFjayB0byB0aGUgVW5pY29kZS1vbmx5IGNvbnN0cnVjdGlvbnMuCkBAIC0zMTQs
NyArMzE2LDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11bUdseXAKICAgICB9CiAKICAgICAvLyBXZSBl
bnN1cmUgdGhhdCB0aGUgc2l6ZSBpcyBsYXJnZSBlbm91Z2ggdG8gYXZvaWQgZ2x5cGggb3Zlcmxh
cHMuCi0gICAgZmxvYXQgbWluU2l6ZSA9IG1faXNWZXJ0aWNhbCA/CisgICAgZmxvYXQgbWluU2l6
ZSA9IGlzVmVydGljYWwgPwogICAgICAgICBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEudG9w
KSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgaGVpZ2h0Rm9yR2x5cGgo
YXNzZW1ibHlEYXRhLmJvdHRvbSkKICAgICAgICAgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3Nl
bWJseURhdGEubGVmdCkgKyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxl
KSArIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5yaWdodCk7CiAgICAgaWYgKG1p
blNpemUgPiB0YXJnZXRTaXplKQpAQCAtMzc3LDcgKzM3OSw3IEBAIExheW91dFJlY3QgTWF0aE9w
ZXJhdG9yOjpwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBp
bmZvLCBjCiAKIHZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5
cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91
dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCiB7Ci0gICAgQVNTRVJUKG1faXNW
ZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IFZlcnRpY2FsT3BlcmF0b3Ip
OwogICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpOwogICAgIEFTU0VS
VChtX2Fzc2VtYmx5LmV4dGVuc2lvbi5pc1ZhbGlkKCkpOwogICAgIEFTU0VSVChmcm9tLnkoKSA8
PSB0by55KCkpOwpAQCAtNDE1LDcgKzQxNyw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0
aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWluCiAK
IHZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bykKIHsKLSAgICBBU1NFUlQoIW1faXNWZXJ0aWNh
bCk7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IEhvcml6b250YWxPcGVyYXRvcik7CiAg
ICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7CiAgICAgQVNTRVJUKG1f
YXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7CiAgICAgQVNTRVJUKGZyb20ueCgpIDw9IHRv
LngoKSk7CkBAIC00NTEsNyArNDUzLDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9y
aXpvbnRhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGEKIAogdm9p
ZCBNYXRoT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQpCiB7Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JU
eXBlID09IFZlcnRpY2FsT3BlcmF0b3IpOwogICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IEds
eXBoQXNzZW1ibHkpOwogICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRvcC5pc1ZhbGlkKCkpOwogICAg
IEFTU0VSVChtX2Fzc2VtYmx5LmJvdHRvbS5pc1ZhbGlkKCkpOwpAQCAtNDgzLDcgKzQ4NSw3IEBA
IHZvaWQgTWF0aE9wZXJhdG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mCiAKIHZvaWQgTWF0aE9wZXJhdG9yOjpwYWludEhvcml6
b250YWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKCFtX2lz
VmVydGljYWwpOworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBIb3Jpem9udGFsT3BlcmF0
b3IpOwogICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpOwogICAgIEFT
U0VSVChtX2Fzc2VtYmx5LmxlZnQuaXNWYWxpZCgpKTsKICAgICBBU1NFUlQobV9hc3NlbWJseS5y
aWdodC5pc1ZhbGlkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9NYXRoT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0
aE9wZXJhdG9yLmgKaW5kZXggNGI0ZGUxOC4uN2ViNDRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCkBAIC0zOSw4ICszOSwxNCBAQCBjbGFz
cyBSZW5kZXJTdHlsZTsKIAogY2xhc3MgTWF0aE9wZXJhdG9yIHsKIHB1YmxpYzoKKyAgICBlbnVt
IE9wZXJhdG9yVHlwZSB7CisgICAgICAgIFVuZGVmaW5lZE9wZXJhdG9yLAorICAgICAgICBEaXNw
bGF5T3BlcmF0b3IsCisgICAgICAgIFZlcnRpY2FsT3BlcmF0b3IsCisgICAgICAgIEhvcml6b250
YWxPcGVyYXRvcgorICAgIH07CiAgICAgTWF0aE9wZXJhdG9yKCk7Ci0gICAgdm9pZCBzZXRPcGVy
YXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBib29sIGlzVmVydGljYWwpOworICAgIHZvaWQgc2V0
T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgT3BlcmF0b3JUeXBlKTsKIAogICAgIExheW91
dFVuaXQgaXRhbGljQ29ycmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXRhbGljQ29ycmVjdGlv
bjsgfQogCkBAIC03Nyw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgVHJpbUxlZnRBbmRSaWdo
dAogICAgIH07CiAKLSAgICBMYXlvdXRVbml0IHN0cmV0Y2hTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9pc1ZlcnRpY2FsID8gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgOiBtX3dpZHRoOyB9OworICAgIExh
eW91dFVuaXQgc3RyZXRjaFNpemUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yVHlwZSA9PSBI
b3Jpem9udGFsT3BlcmF0b3IgPyBtX3dpZHRoIDogbV9hc2NlbnQgKyBtX2Rlc2NlbnQ7IH0KICAg
ICBib29sIGdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIEdseXBoRGF0YSYpIGNvbnN0
OwogICAgIHZvaWQgc2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJik7CiAgICAgdm9pZCBz
ZXRHbHlwaEFzc2VtYmx5KGNvbnN0IE1hdGhPcGVyYXRvcjo6R2x5cGhBc3NlbWJseURhdGEmKTsK
QEAgLTkyLDcgKzk4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRIb3Jpem9udGFsR2x5cGhB
c3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
Jik7CiAKICAgICBVQ2hhciBtX2Jhc2VDaGFyYWN0ZXI7Ci0gICAgYm9vbCBtX2lzVmVydGljYWw7
CisgICAgT3BlcmF0b3JUeXBlIG1fb3BlcmF0b3JUeXBlOwogICAgIFN0cmV0Y2hUeXBlIG1fc3Ry
ZXRjaFR5cGU7CiAgICAgdW5pb24gewogICAgICAgICBHbHlwaERhdGEgbV92YXJpYW50OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9w
ZXJhdG9yLmNwcAppbmRleCBiZjM0NzgwLi43YjE3Njg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcApAQCAt
MjY3LDcgKzI2NywxNCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX21hdGhP
cGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCBtX2lzVmVydGljYWwpOworICAgIE1h
dGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlIHR5cGU7CisgICAgaWYgKGlzTGFyZ2VPcGVyYXRvcklu
RGlzcGxheVN0eWxlKCkpCisgICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6OkRpc3BsYXlPcGVy
YXRvcjsKKyAgICBlbHNlIGlmIChtX2lzVmVydGljYWwpCisgICAgICAgIHR5cGUgPSBNYXRoT3Bl
cmF0b3I6OlZlcnRpY2FsT3BlcmF0b3I7CisgICAgZWxzZQorICAgICAgICB0eXBlID0gTWF0aE9w
ZXJhdG9yOjpIb3Jpem9udGFsT3BlcmF0b3I7CisgICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0
b3IobV90ZXh0Q29udGVudCwgdHlwZSk7CiAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKICAgICBm
bG9hdCBtYXhpbXVtR2x5cGhXaWR0aCA9IG1fbWF0aE9wZXJhdG9yLmdldEJhc2VHbHlwaChzdHls
ZSgpLCBiYXNlR2x5cGgpID8gYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKSA6IDA7CiAg
ICAgaWYgKCFtX2lzVmVydGljYWwpIHsKQEAgLTM2OSw3ICszNzYsMTQgQEAgdm9pZCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAgIGlmICghc2hvdWxkQWxsb3dTdHJldGNo
aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9y
KG1fdGV4dENvbnRlbnQsIG1faXNWZXJ0aWNhbCk7CisgICAgTWF0aE9wZXJhdG9yOjpPcGVyYXRv
clR5cGUgdHlwZTsKKyAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkKKyAg
ICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6RGlzcGxheU9wZXJhdG9yOworICAgIGVsc2UgaWYg
KG1faXNWZXJ0aWNhbCkKKyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6VmVydGljYWxPcGVy
YXRvcjsKKyAgICBlbHNlCisgICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6Okhvcml6b250YWxP
cGVyYXRvcjsKKyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCB0
eXBlKTsKICAgICBpZiAobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0
eWxlKCkpCiAgICAgICAgIG1fbWF0aE9wZXJhdG9yLmZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJh
dG9yKHN0eWxlKCkpOwogICAgIGVsc2UgewotLSAKMi44LjAucmMzCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277474</attachid>
            <date>2016-04-27 06:25:13 -0700</date>
            <delta_ts>2016-05-09 00:51:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0004-OperatorType.patch</filename>
            <type>text/plain</type>
            <size>11995</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSBjNmYxNTU4YTk5NTY4ODFmYzRkY2E1ODEzNjc3NDNlNmU3MzY1ZDYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCAyNiBBcHIgMjAxNiAxMDowMDo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDQvMTld
IE9wZXJhdG9yVHlwZQoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IDMwICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwICAgfCAzMSArKysrKysrKysrKystLS0t
LS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oICAg
ICB8IDEyICsrKysrKy0tLQogLi4uL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0
b3IuY3BwICAgICAgfCAxOCArKysrKysrKysrKy0tCiA0IGZpbGVzIGNoYW5nZWQsIDcyIGluc2Vy
dGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1MTQ0YWY1Li41MTdhYjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTYtMDQtMjUgIEZyZWRlcmljIFdhbmcg
IDxmd2FuZ0BpZ2FsaWEuY29tPgorCisgICAgICAgIEludHJvZHVjZSBNYXRoT3BlcmF0b3I6Ok9w
ZXJhdG9yVHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU2OTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBiZWhhdmlvciBpcyBub3QgY2hhbmdlLgorCisgICAgICAgIEFuIGVu
dW0gT3BlcmF0b3JUeXBlIGlzIGludHJvZHVjZWQgaW4gTWF0aE9wZXJhdG9yIGluIG9yZGVyIHRv
IGluZGljYXRlCisgICAgICAgIHdoaWNoIGtpbmQgb2Ygc3RyZXRjaGluZyBpcyByZXF1ZXN0ZWQu
IEluIGZvbGxvdy11cCB3b3JrLCB0aGlzIHdpbGwKKyAgICAgICAgYWxsb3cgdG8ganVzdCBjYWxs
IHNldE9wZXJhdG9yIGFuZCBzdHJldGNoVG8gd2l0aG91dCBoYXZpbmcgdG8KKyAgICAgICAgZXhw
bGljaXRseSBjYWxsIGZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yIG9yIGZpbmRTdHJldGNo
eURhdGEuCisKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6Ok1hdGhPcGVyYXRvcik6IFVzZSBPcGVyYXRv
clR5cGUgaW5zdGVhZCBvZiBhIGJvb2xlYW4uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0
b3I6OnNldE9wZXJhdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6
OnNldEdseXBoQXNzZW1ibHkpOiBBZGQgYW4gYXNzZXJ0IHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5j
dGlvbiBpcyBjb3JyZWN0bHkgdXNlLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpm
aW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6IERpdHRvLCB0aGlzIG1ha2VzIHRoZSBhc3Nl
cnQgbW9yZSBhY2N1cmF0ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmluZFN0
cmV0Y2h5RGF0YSk6IERpdHRvIGFuZCByZXBsYWNlIG1faXNWZXJ0aWNhbCB3aXRoIGEgbG9jYWwg
aXNWZXJ0aWNhbCB2YXJpYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Zmls
bFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRh
bEdseXBoQXNzZW1ibHkpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhP
cGVyYXRvci5oOiBBZGQgdGhlIE9wZXJhdG9yVHlwZSBlbnVtLgorICAgICAgICAoV2ViQ29yZTo6
TWF0aE9wZXJhdG9yOjpzdHJldGNoU2l6ZSk6IFVzZSBPcGVyYXRvclR5cGUgaW5zdGVhZCBvZiBh
IGJvb2xlYW4uCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBDYWxsIHNldE9wZXJhdG9yIHdpdGggdGhlIGNvcnJlY3Qg
dmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5
bGUpOiBEaXR0by4KKwogMjAxNi0wNC0yMiAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5j
b20+CiAKICAgICAgICAgTW92ZSBzZWxlY3Rpb24gYW5kIGRyYXdpbmcgb2Ygc3RyZXRjaHkgb3Bl
cmF0b3JzIGludG8gYSBzZXBhcmF0ZSBNYXRoT3BlcmF0b3IgY2xhc3MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcAppbmRleCA1NjJmODQzLi4x
ZjJjY2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhP
cGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3Bl
cmF0b3IuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRpYyBjb25zdCBTdHJldGNoeUNoYXJhY3Rl
ciBzdHJldGNoeUNoYXJhY3RlcnNbMTRdID0gewogCiBNYXRoT3BlcmF0b3I6Ok1hdGhPcGVyYXRv
cigpCiAgICAgOiBtX2Jhc2VDaGFyYWN0ZXIoMCkKLSAgICAsIG1faXNWZXJ0aWNhbChmYWxzZSkK
KyAgICAsIG1fb3BlcmF0b3JUeXBlKFVuZGVmaW5lZE9wZXJhdG9yKQogICAgICwgbV9zdHJldGNo
VHlwZShVbnN0cmV0Y2hlZCkKICAgICAsIG1fd2lkdGgoMCkKICAgICAsIG1fYXNjZW50KDApCkBA
IC04NiwxMCArODYsMTAgQEAgTWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IoKQogewogfQogCi12
b2lkIE1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgYm9vbCBp
c1ZlcnRpY2FsKQordm9pZCBNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKFVDaGFyIGJhc2VDaGFy
YWN0ZXIsIE9wZXJhdG9yVHlwZSBvcGVyYXRvclR5cGUpCiB7CiAgICAgbV9iYXNlQ2hhcmFjdGVy
ID0gYmFzZUNoYXJhY3RlcjsKLSAgICBtX2lzVmVydGljYWwgPSBpc1ZlcnRpY2FsOworICAgIG1f
b3BlcmF0b3JUeXBlID0gb3BlcmF0b3JUeXBlOwogfQogCiBib29sIE1hdGhPcGVyYXRvcjo6Z2V0
QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBiYXNlR2x5cGgp
IGNvbnN0CkBAIC0xMDcsMTMgKzEwNywxNCBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6c2V0U2l6ZVZh
cmlhbnQoY29uc3QgR2x5cGhEYXRhJiBzaXplVmFyaWFudCkKIAogdm9pZCBNYXRoT3BlcmF0b3I6
OnNldEdseXBoQXNzZW1ibHkoY29uc3QgR2x5cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5RGF0YSkK
IHsKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gVmVydGljYWxPcGVyYXRvciB8fCBtX29w
ZXJhdG9yVHlwZSA9PSBIb3Jpem9udGFsT3BlcmF0b3IpOwogICAgIG1fc3RyZXRjaFR5cGUgPSBH
bHlwaEFzc2VtYmx5OwogICAgIG1fYXNzZW1ibHkgPSBhc3NlbWJseURhdGE7CiB9CiAKIHZvaWQg
TWF0aE9wZXJhdG9yOjpmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcihjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1f
b3BlcmF0b3JUeXBlID09IERpc3BsYXlPcGVyYXRvcik7CiAKICAgICBHbHlwaERhdGEgYmFzZUds
eXBoOwogICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgpIHx8ICFiYXNlR2x5
cGguZm9udC0+bWF0aERhdGEoKSkKQEAgLTI0MSw3ICsyNDIsOSBAQCBib29sIE1hdGhPcGVyYXRv
cjo6Z2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgVmVjdAogCiB2b2lkIE1hdGhPcGVyYXRvcjo6ZmluZFN0cmV0Y2h5RGF0YShjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJn
ZXRTaXplKQogewotICAgIEFTU0VSVCghbWF4aW11bUdseXBoV2lkdGggfHwgbV9pc1ZlcnRpY2Fs
KTsKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gVmVydGljYWxPcGVyYXRvciB8fCBtX29w
ZXJhdG9yVHlwZSA9PSBIb3Jpem9udGFsT3BlcmF0b3IpOworICAgIEFTU0VSVCghbWF4aW11bUds
eXBoV2lkdGggfHwgbV9vcGVyYXRvclR5cGUgPT0gVmVydGljYWxPcGVyYXRvcik7CisgICAgYm9v
bCBpc1ZlcnRpY2FsID0gbV9vcGVyYXRvclR5cGUgPT0gVmVydGljYWxPcGVyYXRvcjsKIAogICAg
IEdseXBoRGF0YSBiYXNlR2x5cGg7CiAgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VH
bHlwaCkpCkBAIC0yNDksNyArMjUyLDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmZpbmRTdHJldGNo
eURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11bUdseXAKIAogICAg
IGlmICghbWF4aW11bUdseXBoV2lkdGgpIHsKICAgICAgICAgLy8gV2UgZG8gbm90IHN0cmV0Y2gg
aWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgotICAgICAgICBmbG9hdCBiYXNlU2l6
ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZhbmNlV2lk
dGhGb3JHbHlwaChiYXNlR2x5cGgpOworICAgICAgICBmbG9hdCBiYXNlU2l6ZSA9IGlzVmVydGlj
YWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFz
ZUdseXBoKTsKICAgICAgICAgaWYgKHRhcmdldFNpemUgPD0gYmFzZVNpemUpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMjU4LDcgKzI2MSw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpm
aW5kU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQqIG1heGltdW1H
bHlwCiAgICAgaWYgKGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7CiAgICAgICAgIFZlY3Rv
cjxHbHlwaD4gc2l6ZVZhcmlhbnRzOwogICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6
QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwotICAgICAgICBiYXNlR2x5cGguZm9udC0+bWF0
aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBz
aXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOworICAgICAgICBiYXNlR2x5cGguZm9udC0+bWF0
aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgaXNWZXJ0aWNhbCwgc2l6
ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKICAgICAgICAgLy8gV2UgdmVyaWZ5IHRoZSBzaXpl
IHZhcmlhbnRzLgogICAgICAgICBmb3IgKGF1dG8mIHNpemVWYXJpYW50IDogc2l6ZVZhcmlhbnRz
KSB7CiAgICAgICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBiYXNlR2x5
cGguZm9udCk7CkBAIC0yNjYsNyArMjY5LDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmZpbmRTdHJl
dGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11bUdseXAKICAg
ICAgICAgICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBo
V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSkpOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKLSAgICAgICAg
ICAgICAgICBmbG9hdCBzaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhE
YXRhKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSk7CisgICAgICAgICAgICAgICAg
ZmxvYXQgc2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChnbHlwaERhdGEpIDogYWR2
YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKTsKICAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+
PSB0YXJnZXRTaXplKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CkBAIC0yNzYsNyArMjc5LDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11bUdseXAKICAgICAgICAgaWYg
KCFnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2soc3R5bGUsIGFzc2VtYmx5UGFydHMsIGFzc2VtYmx5
RGF0YSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFt
X2lzVmVydGljYWwpCisgICAgICAgIGlmICghaXNWZXJ0aWNhbCkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICAvLyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEgTUFUSCB0YWJsZSwg
d2UgZmFsbGJhY2sgdG8gdGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25zLgpAQCAtMzE0LDcg
KzMxNyw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgZmxvYXQqIG1heGltdW1HbHlwCiAgICAgfQogCiAgICAgLy8gV2UgZW5z
dXJlIHRoYXQgdGhlIHNpemUgaXMgbGFyZ2UgZW5vdWdoIHRvIGF2b2lkIGdseXBoIG92ZXJsYXBz
LgotICAgIGZsb2F0IG1pblNpemUgPSBtX2lzVmVydGljYWwgPworICAgIGZsb2F0IG1pblNpemUg
PSBpc1ZlcnRpY2FsID8KICAgICAgICAgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcCkg
KyBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxlKSArIGhlaWdodEZvckdseXBoKGFz
c2VtYmx5RGF0YS5ib3R0b20pCiAgICAgICAgIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1i
bHlEYXRhLmxlZnQpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkg
KyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEucmlnaHQpOwogICAgIGlmIChtaW5T
aXplID4gdGFyZ2V0U2l6ZSkKQEAgLTM3Nyw3ICszODAsNyBAQCBMYXlvdXRSZWN0IE1hdGhPcGVy
YXRvcjo6cGFpbnRHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5m
bywgYwogCiB2b2lkIE1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBo
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQogewotICAgIEFTU0VSVChtX2lzVmVy
dGljYWwpOworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBWZXJ0aWNhbE9wZXJhdG9yKTsK
ICAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKICAgICBBU1NFUlQo
bV9hc3NlbWJseS5leHRlbnNpb24uaXNWYWxpZCgpKTsKICAgICBBU1NFUlQoZnJvbS55KCkgPD0g
dG8ueSgpKTsKQEAgLTQxNSw3ICs0MTgsNyBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhW
ZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbgogCiB2
b2lkIE1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBm
cm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCiB7Ci0gICAgQVNTRVJUKCFtX2lzVmVydGljYWwp
OworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBIb3Jpem9udGFsT3BlcmF0b3IpOwogICAg
IEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpOwogICAgIEFTU0VSVChtX2Fz
c2VtYmx5LmV4dGVuc2lvbi5pc1ZhbGlkKCkpOwogICAgIEFTU0VSVChmcm9tLngoKSA8PSB0by54
KCkpOwpAQCAtNDUxLDcgKzQ1NCw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6
b250YWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhCiAKIHZvaWQg
TWF0aE9wZXJhdG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KQogewotICAgIEFTU0VSVChtX2lzVmVydGljYWwpOworICAgIEFTU0VSVChtX29wZXJhdG9yVHlw
ZSA9PSBWZXJ0aWNhbE9wZXJhdG9yKTsKICAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBHbHlw
aEFzc2VtYmx5KTsKICAgICBBU1NFUlQobV9hc3NlbWJseS50b3AuaXNWYWxpZCgpKTsKICAgICBB
U1NFUlQobV9hc3NlbWJseS5ib3R0b20uaXNWYWxpZCgpKTsKQEAgLTQ4Myw3ICs0ODYsNyBAQCB2
b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBQYWludEluZgogCiB2b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRIb3Jpem9u
dGFsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIEFTU0VSVCghbV9pc1Zl
cnRpY2FsKTsKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gSG9yaXpvbnRhbE9wZXJhdG9y
KTsKICAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKICAgICBBU1NF
UlQobV9hc3NlbWJseS5sZWZ0LmlzVmFsaWQoKSk7CiAgICAgQVNTRVJUKG1fYXNzZW1ibHkucmln
aHQuaXNWYWxpZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvTWF0aE9wZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhP
cGVyYXRvci5oCmluZGV4IGVlYjg1MWIuLmE3NGY4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaApAQCAtMzksOCArMzksMTQgQEAgY2xhc3Mg
UmVuZGVyU3R5bGU7CiAKIGNsYXNzIE1hdGhPcGVyYXRvciB7CiBwdWJsaWM6CisgICAgZW51bSBP
cGVyYXRvclR5cGUgeworICAgICAgICBVbmRlZmluZWRPcGVyYXRvciwKKyAgICAgICAgRGlzcGxh
eU9wZXJhdG9yLAorICAgICAgICBWZXJ0aWNhbE9wZXJhdG9yLAorICAgICAgICBIb3Jpem9udGFs
T3BlcmF0b3IKKyAgICB9OwogICAgIE1hdGhPcGVyYXRvcigpOwotICAgIHZvaWQgc2V0T3BlcmF0
b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgYm9vbCBpc1ZlcnRpY2FsKTsKKyAgICB2b2lkIHNldE9w
ZXJhdG9yKFVDaGFyIGJhc2VDaGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSk7CiAKICAgICBMYXlvdXRV
bml0IGl0YWxpY0NvcnJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb247
IH0KIApAQCAtNzcsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFRyaW1MZWZ0QW5kUmlnaHQK
ICAgICB9OwogCi0gICAgTGF5b3V0VW5pdCBzdHJldGNoU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNWZXJ0aWNhbCA/IG1fYXNjZW50ICsgbV9kZXNjZW50IDogbV93aWR0aDsgfTsKKyAgICBMYXlv
dXRVbml0IHN0cmV0Y2hTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvclR5cGUgPT0gSG9y
aXpvbnRhbE9wZXJhdG9yID8gbV93aWR0aCA6IG1fYXNjZW50ICsgbV9kZXNjZW50OyB9CiAgICAg
Ym9vbCBnZXRCYXNlR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmLCBHbHlwaERhdGEmKSBjb25zdDsK
ICAgICB2b2lkIHNldFNpemVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYpOwogICAgIHZvaWQgc2V0
R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYpOwpAQCAtOTIsNyArOTgsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJl
bmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAogICAgIFVDaGFy
IG1fYmFzZUNoYXJhY3RlcjsKLSAgICBib29sIG1faXNWZXJ0aWNhbDsKKyAgICBPcGVyYXRvclR5
cGUgbV9vcGVyYXRvclR5cGU7CiAgICAgU3RyZXRjaFR5cGUgbV9zdHJldGNoVHlwZTsKICAgICB1
bmlvbiB7CiAgICAgICAgIEdseXBoRGF0YSBtX3ZhcmlhbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCmluZGV4
IGRiZDc2YjcuLjdlODNkMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC0yNjcsNyArMjY3LDE0IEBA
IHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJh
dG9yKG1fdGV4dENvbnRlbnQsIG1faXNWZXJ0aWNhbCk7CisgICAgTWF0aE9wZXJhdG9yOjpPcGVy
YXRvclR5cGUgdHlwZTsKKyAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkK
KyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6RGlzcGxheU9wZXJhdG9yOworICAgIGVsc2Ug
aWYgKG1faXNWZXJ0aWNhbCkKKyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6VmVydGljYWxP
cGVyYXRvcjsKKyAgICBlbHNlCisgICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6Okhvcml6b250
YWxPcGVyYXRvcjsKKyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50
LCB0eXBlKTsKICAgICBHbHlwaERhdGEgYmFzZUdseXBoOwogICAgIGZsb2F0IG1heGltdW1HbHlw
aFdpZHRoID0gbV9tYXRoT3BlcmF0b3IuZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkg
PyBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpIDogMDsKICAgICBpZiAoIW1faXNWZXJ0
aWNhbCkgewpAQCAtMzY5LDcgKzM3NiwxNCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1
cGRhdGVTdHlsZSgpCiAgICAgaWYgKCFzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwg
bV9pc1ZlcnRpY2FsKTsKKyAgICBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZSB0eXBlOworICAg
IGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKQorICAgICAgICB0eXBlID0gTWF0
aE9wZXJhdG9yOjpEaXNwbGF5T3BlcmF0b3I7CisgICAgZWxzZSBpZiAobV9pc1ZlcnRpY2FsKQor
ICAgICAgICB0eXBlID0gTWF0aE9wZXJhdG9yOjpWZXJ0aWNhbE9wZXJhdG9yOworICAgIGVsc2UK
KyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6SG9yaXpvbnRhbE9wZXJhdG9yOworICAgIG1f
bWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4dENvbnRlbnQsIHR5cGUpOwogICAgIGlmICht
X2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkKICAgICAgICAg
bV9tYXRoT3BlcmF0b3IuZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUoKSk7CiAg
ICAgZWxzZSB7Ci0tIAoyLjguMC5yYzMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278391</attachid>
            <date>2016-05-09 00:51:35 -0700</date>
            <delta_ts>2016-05-13 05:14:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0002-OperatorType.patch</filename>
            <type>text/plain</type>
            <size>12616</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA2YWUyNmYyMzc4ODlkNzVmMDhlOGI2MDdkYTgwYTA0ZmIwNDc2NzU4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCAyNiBBcHIgMjAxNiAxMDowMDo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDIvMThd
IE9wZXJhdG9yVHlwZQoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IDMwICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAgICB8IDMzICsrKysrKysrKysrKy0tLS0t
LS0tLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmggICAg
IHwgIDcgKysrLS0KIC4uLi9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNw
cCAgICAgIHwgMTggKysrKysrKysrKy0tCiA0IGZpbGVzIGNoYW5nZWQsIDY4IGluc2VydGlvbnMo
KyksIDIwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ODg3MzgyLi5mYmQ2NWQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTYtMDQtMjUgIEZyZWRlcmljIFdhbmcgIDxmd2Fu
Z0BpZ2FsaWEuY29tPgorCisgICAgICAgIEludHJvZHVjZSBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9y
VHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
OTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBiZWhhdmlvciBpcyBub3QgY2hhbmdlLgorCisgICAgICAgIEFuIGVudW0gT3Bl
cmF0b3JUeXBlIGlzIGludHJvZHVjZWQgaW4gTWF0aE9wZXJhdG9yIGluIG9yZGVyIHRvIGluZGlj
YXRlCisgICAgICAgIHdoaWNoIGtpbmQgb2Ygc3RyZXRjaGluZyBpcyByZXF1ZXN0ZWQuIEluIGZv
bGxvdy11cCB3b3JrLCB0aGlzIHdpbGwKKyAgICAgICAgYWxsb3cgdG8ganVzdCBjYWxsIHNldE9w
ZXJhdG9yIGFuZCBzdHJldGNoVG8gd2l0aG91dCBoYXZpbmcgdG8KKyAgICAgICAgZXhwbGljaXRs
eSBjYWxsIGNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Igb3IgY2FsY3VsYXRlU3Ry
ZXRjaHlEYXRhLgorCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IpOiBVc2UgT3Bl
cmF0b3JUeXBlIGluc3RlYWQgb2YgYSBib29sZWFuLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9w
ZXJhdG9yOjpzZXRPcGVyYXRvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJh
dG9yOjpzZXRHbHlwaEFzc2VtYmx5KTogQWRkIGFuIGFzc2VydCB0byBlbnN1cmUgdGhhdCB0aGUg
ZnVuY3Rpb24gaXMgY29ycmVjdGx5IHVzZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRv
cjo6Y2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6IERpdHRvLCB0aGlzIG1ha2Vz
IHRoZSBhc3NlcnQgbW9yZSBhY2N1cmF0ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRv
cjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKTogRGl0dG8gYW5kIHJlcGxhY2UgbV9pc1ZlcnRpY2Fs
IHdpdGggYSBsb2NhbCBpc1ZlcnRpY2FsIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6TWF0
aE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5
cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNh
bEdseXBoQXNzZW1ibHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6
cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseSk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmlu
Zy9tYXRobWwvTWF0aE9wZXJhdG9yLmg6IEFkZCB0aGUgT3BlcmF0b3JUeXBlIGVudW0uCisgICAg
ICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnN0cmV0Y2hTaXplKTogVXNlIE9wZXJhdG9yVHlw
ZSBpbnN0ZWFkIG9mIGEgYm9vbGVhbi4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJh
dG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6IENhbGwgc2V0T3BlcmF0b3Igd2l0
aCB0aGUgY29ycmVjdCB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJh
dG9yOjp1cGRhdGVTdHlsZSk6IERpdHRvLgorCiAyMDE2LTA0LTIyICBGcmVkZXJpYyBXYW5nICA8
ZndhbmdAaWdhbGlhLmNvbT4KIAogICAgICAgICBNb3ZlIHNlbGVjdGlvbiBhbmQgZHJhd2luZyBv
ZiBzdHJldGNoeSBvcGVyYXRvcnMgaW50byBhIHNlcGFyYXRlIE1hdGhPcGVyYXRvciBjbGFzcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwCmlu
ZGV4IDU2ODVlZTcuLjkwYTUzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL01hdGhPcGVyYXRvci5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgc3RhdGljIGNvbnN0IFN0
cmV0Y2h5Q2hhcmFjdGVyIHN0cmV0Y2h5Q2hhcmFjdGVyc1sxNF0gPSB7CiAKIE1hdGhPcGVyYXRv
cjo6TWF0aE9wZXJhdG9yKCkKICAgICA6IG1fYmFzZUNoYXJhY3RlcigwKQotICAgICwgbV9pc1Zl
cnRpY2FsKGZhbHNlKQorICAgICwgbV9vcGVyYXRvclR5cGUoT3BlcmF0b3JUeXBlOjpVbmRlZmlu
ZWRPcGVyYXRvcikKICAgICAsIG1fc3RyZXRjaFR5cGUoU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVk
KQogICAgICwgbV93aWR0aCgwKQogICAgICwgbV9hc2NlbnQoMCkKQEAgLTg2LDEwICs4NiwxMCBA
QCBNYXRoT3BlcmF0b3I6Ok1hdGhPcGVyYXRvcigpCiB7CiB9CiAKLXZvaWQgTWF0aE9wZXJhdG9y
OjpzZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBib29sIGlzVmVydGljYWwpCit2b2lk
IE1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgT3BlcmF0b3JU
eXBlIG9wZXJhdG9yVHlwZSkKIHsKICAgICBtX2Jhc2VDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVy
OwotICAgIG1faXNWZXJ0aWNhbCA9IGlzVmVydGljYWw7CisgICAgbV9vcGVyYXRvclR5cGUgPSBv
cGVyYXRvclR5cGU7CiB9CiAKIGJvb2wgTWF0aE9wZXJhdG9yOjpnZXRCYXNlR2x5cGgoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBHbHlwaERhdGEmIGJhc2VHbHlwaCkgY29uc3QKQEAgLTEwNywx
MyArMTA3LDE0IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpzZXRTaXplVmFyaWFudChjb25zdCBHbHlw
aERhdGEmIHNpemVWYXJpYW50KQogCiB2b2lkIE1hdGhPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJs
eShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlEYXRhKQogeworICAgIEFTU0VSVCht
X29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3IgfHwgbV9vcGVy
YXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3IpOwogICAgIG1fc3Ry
ZXRjaFR5cGUgPSBTdHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseTsKICAgICBtX2Fzc2VtYmx5ID0g
YXNzZW1ibHlEYXRhOwogfQogCiB2b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlRGlzcGxheVN0
eWxlTGFyZ2VPcGVyYXRvcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7Ci0gICAgQVNTRVJU
KG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IE9wZXJhdG9yVHlw
ZTo6RGlzcGxheU9wZXJhdG9yKTsKIAogICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7CiAgICAgaWYg
KCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkgfHwgIWJhc2VHbHlwaC5mb250LT5tYXRo
RGF0YSgpKQpAQCAtMjQxLDcgKzI0Miw5IEBAIGJvb2wgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVH
bHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zCiAKIHZv
aWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBmbG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSkK
IHsKLSAgICBBU1NFUlQoIW1heGltdW1HbHlwaFdpZHRoIHx8IG1faXNWZXJ0aWNhbCk7CisgICAg
QVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IE9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvciB8
fCBtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6Okhvcml6b250YWxPcGVyYXRvcik7Cisg
ICAgQVNTRVJUKCFtYXhpbXVtR2x5cGhXaWR0aCB8fCBtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRv
clR5cGU6OlZlcnRpY2FsT3BlcmF0b3IpOworICAgIGJvb2wgaXNWZXJ0aWNhbCA9IG1fb3BlcmF0
b3JUeXBlID09IE9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvcjsKIAogICAgIEdseXBoRGF0
YSBiYXNlR2x5cGg7CiAgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkpCkBA
IC0yNDksNyArMjUyLDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0
YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXUKIAogICAgIGlmICghbWF4
aW11bUdseXBoV2lkdGgpIHsKICAgICAgICAgLy8gV2UgZG8gbm90IHN0cmV0Y2ggaWYgdGhlIGJh
c2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgotICAgICAgICBmbG9hdCBiYXNlU2l6ZSA9IG1faXNW
ZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZhbmNlV2lkdGhGb3JHbHlw
aChiYXNlR2x5cGgpOworICAgICAgICBmbG9hdCBiYXNlU2l6ZSA9IGlzVmVydGljYWwgPyBoZWln
aHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsK
ICAgICAgICAgaWYgKHRhcmdldFNpemUgPD0gYmFzZVNpemUpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMjU4LDcgKzI2MSw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVT
dHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11CiAgICAg
aWYgKGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7CiAgICAgICAgIFZlY3RvcjxHbHlwaD4g
c2l6ZVZhcmlhbnRzOwogICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQ
YXJ0PiBhc3NlbWJseVBhcnRzOwotICAgICAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+
Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFu
dHMsIGFzc2VtYmx5UGFydHMpOworICAgICAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+
Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgaXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRz
LCBhc3NlbWJseVBhcnRzKTsKICAgICAgICAgLy8gV2UgdmVyaWZ5IHRoZSBzaXplIHZhcmlhbnRz
LgogICAgICAgICBmb3IgKGF1dG8mIHNpemVWYXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CiAgICAg
ICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7
CkBAIC0yNjYsNyArMjY5LDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5
RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXUKICAgICAgICAgICAg
ICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFk
dmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKLSAgICAgICAgICAgICAgICBm
bG9hdCBzaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFk
dmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSk7CisgICAgICAgICAgICAgICAgZmxvYXQgc2l6
ZSA9IGlzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChnbHlwaERhdGEpIDogYWR2YW5jZVdpZHRo
Rm9yR2x5cGgoZ2x5cGhEYXRhKTsKICAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+PSB0YXJnZXRT
aXplKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0yNzYs
NyArMjc5LDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXUKICAgICAgICAgaWYgKCFjYWxjdWxh
dGVHbHlwaEFzc2VtYmx5RmFsbEJhY2soc3R5bGUsIGFzc2VtYmx5UGFydHMsIGFzc2VtYmx5RGF0
YSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2lz
VmVydGljYWwpCisgICAgICAgIGlmICghaXNWZXJ0aWNhbCkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICAvLyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEgTUFUSCB0YWJsZSwgd2Ug
ZmFsbGJhY2sgdG8gdGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25zLgpAQCAtMzE0LDcgKzMx
Nyw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11CiAgICAgfQogCiAgICAgLy8gV2UgZW5zdXJl
IHRoYXQgdGhlIHNpemUgaXMgbGFyZ2UgZW5vdWdoIHRvIGF2b2lkIGdseXBoIG92ZXJsYXBzLgot
ICAgIGZsb2F0IG1pblNpemUgPSBtX2lzVmVydGljYWwgPworICAgIGZsb2F0IG1pblNpemUgPSBp
c1ZlcnRpY2FsID8KICAgICAgICAgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcE9yUmln
aHQpICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkgKyBoZWlnaHRGb3JHbHlw
aChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KQogICAgICAgICA6IGFkdmFuY2VXaWR0aEZvckds
eXBoKGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNz
ZW1ibHlEYXRhLm1pZGRsZSkgKyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9w
T3JSaWdodCk7CiAgICAgaWYgKG1pblNpemUgPiB0YXJnZXRTaXplKQpAQCAtMzc3LDcgKzM4MCw3
IEBAIExheW91dFJlY3QgTWF0aE9wZXJhdG9yOjpwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjCiAKIHZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0
aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludElu
Zm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8p
CiB7Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBl
ID09IE9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvcik7CiAgICAgQVNTRVJUKG1fc3RyZXRj
aFR5cGUgPT0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkpOwogICAgIEFTU0VSVChtX2Fzc2Vt
Ymx5LmV4dGVuc2lvbi5pc1ZhbGlkKCkpOwogICAgIEFTU0VSVChmcm9tLnkoKSA8PSB0by55KCkp
OwpAQCAtNDE1LDcgKzQxOCw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2Fs
RXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWluCiAKIHZvaWQgTWF0
aE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNv
bnN0IExheW91dFBvaW50JiB0bykKIHsKLSAgICBBU1NFUlQoIW1faXNWZXJ0aWNhbCk7CisgICAg
QVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IE9wZXJhdG9yVHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9y
KTsKICAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhBc3NlbWJs
eSk7CiAgICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7CiAgICAgQVNT
RVJUKGZyb20ueCgpIDw9IHRvLngoKSk7CkBAIC00NTEsNyArNDU0LDcgQEAgdm9pZCBNYXRoT3Bl
cmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgUGEKIAogdm9pZCBNYXRoT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2Vt
Ymx5KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAg
QVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IE9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvcik7
CiAgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkp
OwogICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQuaXNWYWxpZCgpKTsKICAgICBBU1NF
UlQobV9hc3NlbWJseS5ib3R0b21PckxlZnQuaXNWYWxpZCgpKTsKQEAgLTQ4MywxMCArNDg2LDEw
IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mCiAKIHZvaWQgTWF0aE9wZXJhdG9yOjpwYWludEhv
cml6b250YWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKCFt
X2lzVmVydGljYWwpOworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6
Okhvcml6b250YWxPcGVyYXRvcik7CiAgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRj
aFR5cGU6OkdseXBoQXNzZW1ibHkpOwotICAgIEFTU0VSVChtX2Fzc2VtYmx5LmJvdHRvbU9yTGVm
dC5pc1ZhbGlkKCkpOwogICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQuaXNWYWxpZCgp
KTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS5ib3R0b21PckxlZnQuaXNWYWxpZCgpKTsKIAogICAg
IC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRoYXQgdGhlIGVkZ2Ugb2YgdGhl
IHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0aCB0aGUgZWRnZXMgb2Ygb3Vy
IHBhaW50IGJveC4KICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBwYWludE9mZnNl
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCmlu
ZGV4IDRhYzRiMTUuLjQzNGFlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9NYXRoT3BlcmF0b3IuaApAQCAtMzksOCArMzksOSBAQCBjbGFzcyBSZW5kZXJTdHlsZTsK
IAogY2xhc3MgTWF0aE9wZXJhdG9yIHsKIHB1YmxpYzoKKyAgICBlbnVtIGNsYXNzIE9wZXJhdG9y
VHlwZSB7IFVuZGVmaW5lZE9wZXJhdG9yLCBEaXNwbGF5T3BlcmF0b3IsIFZlcnRpY2FsT3BlcmF0
b3IsIEhvcml6b250YWxPcGVyYXRvciB9OwogICAgIE1hdGhPcGVyYXRvcigpOwotICAgIHZvaWQg
c2V0T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgYm9vbCBpc1ZlcnRpY2FsKTsKKyAgICB2
b2lkIHNldE9wZXJhdG9yKFVDaGFyIGJhc2VDaGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSk7CiAKICAg
ICBMYXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2l0YWxpY0Nv
cnJlY3Rpb247IH0KIApAQCAtNjUsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFRyaW1MZWZ0
QW5kUmlnaHQKICAgICB9OwogCi0gICAgTGF5b3V0VW5pdCBzdHJldGNoU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNWZXJ0aWNhbCA/IG1fYXNjZW50ICsgbV9kZXNjZW50IDogbV93aWR0aDsgfTsK
KyAgICBMYXlvdXRVbml0IHN0cmV0Y2hTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvclR5
cGUgPT0gT3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3IgPyBtX3dpZHRoIDogbV9hc2Nl
bnQgKyBtX2Rlc2NlbnQ7IH0KICAgICBib29sIGdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHls
ZSYsIEdseXBoRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgc2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5
cGhEYXRhJik7CiAgICAgdm9pZCBzZXRHbHlwaEFzc2VtYmx5KGNvbnN0IEdseXBoQXNzZW1ibHlE
YXRhJik7CkBAIC04MCw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50SG9yaXpvbnRh
bEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYpOwogCiAgICAgVUNoYXIgbV9iYXNlQ2hhcmFjdGVyOwotICAgIGJvb2wgbV9pc1Zl
cnRpY2FsOworICAgIE9wZXJhdG9yVHlwZSBtX29wZXJhdG9yVHlwZTsKICAgICBTdHJldGNoVHlw
ZSBtX3N0cmV0Y2hUeXBlOwogICAgIHVuaW9uIHsKICAgICAgICAgR2x5cGhEYXRhIG1fdmFyaWFu
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxPcGVyYXRvci5jcHAKaW5kZXggMTFmMWMxOS4uYzM0NzcxZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5j
cHAKQEAgLTI2Nyw3ICsyNjcsMTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0
ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwgbV9pc1ZlcnRpY2FsKTsK
KyAgICBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZSB0eXBlOworICAgIGlmIChpc0xhcmdlT3Bl
cmF0b3JJbkRpc3BsYXlTdHlsZSgpKQorICAgICAgICB0eXBlID0gTWF0aE9wZXJhdG9yOjpPcGVy
YXRvclR5cGU6OkRpc3BsYXlPcGVyYXRvcjsKKyAgICBlbHNlIGlmIChtX2lzVmVydGljYWwpCisg
ICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRv
cjsKKyAgICBlbHNlCisgICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZTo6
SG9yaXpvbnRhbE9wZXJhdG9yOworICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4
dENvbnRlbnQsIHR5cGUpOwogICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7CiAgICAgZmxvYXQgbWF4
aW11bUdseXBoV2lkdGggPSBtX21hdGhPcGVyYXRvci5nZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFz
ZUdseXBoKSA/IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCkgOiAwOwogICAgIGlmICgh
bV9pc1ZlcnRpY2FsKSB7CkBAIC0zNjksNyArMzc2LDE0IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3Bl
cmF0b3I6OnVwZGF0ZVN0eWxlKCkKICAgICBpZiAoIXNob3VsZEFsbG93U3RyZXRjaGluZygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRD
b250ZW50LCBtX2lzVmVydGljYWwpOworICAgIE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlIHR5
cGU7CisgICAgaWYgKGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpCisgICAgICAgIHR5
cGUgPSBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZTo6RGlzcGxheU9wZXJhdG9yOworICAgIGVs
c2UgaWYgKG1faXNWZXJ0aWNhbCkKKyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6T3BlcmF0
b3JUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yOworICAgIGVsc2UKKyAgICAgICAgdHlwZSA9IE1hdGhP
cGVyYXRvcjo6T3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3I7CisgICAgbV9tYXRoT3Bl
cmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwgdHlwZSk7CiAgICAgaWYgKG1faXNWZXJ0
aWNhbCAmJiBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKQogICAgICAgICBtX21hdGhP
cGVyYXRvci5jYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKHN0eWxlKCkpOwogICAg
IGVsc2UgewotLSAKMi44LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278604</attachid>
            <date>2016-05-11 02:16:25 -0700</date>
            <delta_ts>2016-05-11 02:18:16 -0700</delta_ts>
            <desc>Patch for EWS testing</desc>
            <filename>156950-EWS.patch</filename>
            <type>text/plain</type>
            <size>79543</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTc4YTMzYy4uYTk4NGFlMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTI1MTUsNyArMjUxNSw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCiAKICAgICByZW5kZXJpbmcvbWF0aG1sL01h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHAKLSAgICByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5jcHAKICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAogICAg
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAogICAgIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzNiZGQxOC4uMjRh
MmQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw5MyArMSwzIEBACi0yMDE2LTA0LTI1ICBGcmVkZXJpYyBX
YW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KLQotICAgICAgICBJbnRyb2R1Y2UgTWF0aE9wZXJhdG9y
OjpPcGVyYXRvclR5cGUKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1Njk1MAotCi0gICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgotCi0g
ICAgICAgIE5vIG5ldyB0ZXN0cywgYmVoYXZpb3IgaXMgbm90IGNoYW5nZS4KLQotICAgICAgICBB
biBlbnVtIE9wZXJhdG9yVHlwZSBpcyBpbnRyb2R1Y2VkIGluIE1hdGhPcGVyYXRvciBpbiBvcmRl
ciB0byBpbmRpY2F0ZQotICAgICAgICB3aGljaCBraW5kIG9mIHN0cmV0Y2hpbmcgaXMgcmVxdWVz
dGVkLiBJbiBmb2xsb3ctdXAgd29yaywgdGhpcyB3aWxsCi0gICAgICAgIGFsbG93IHRvIGp1c3Qg
Y2FsbCBzZXRPcGVyYXRvciBhbmQgc3RyZXRjaFRvIHdpdGhvdXQgaGF2aW5nIHRvCi0gICAgICAg
IGV4cGxpY2l0bHkgY2FsbCBjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yIG9yIGNh
bGN1bGF0ZVN0cmV0Y2h5RGF0YS4KLQotICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0aE9w
ZXJhdG9yLmNwcDoKLSAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6TWF0aE9wZXJhdG9y
KTogVXNlIE9wZXJhdG9yVHlwZSBpbnN0ZWFkIG9mIGEgYm9vbGVhbi4KLSAgICAgICAgKFdlYkNv
cmU6Ok1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IpOiBEaXR0by4KLSAgICAgICAgKFdlYkNvcmU6
Ok1hdGhPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseSk6IEFkZCBhbiBhc3NlcnQgdG8gZW5zdXJl
IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGNvcnJlY3RseSB1c2UuCi0gICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6OmNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBEaXR0bywg
dGhpcyBtYWtlcyB0aGUgYXNzZXJ0IG1vcmUgYWNjdXJhdGUuCi0gICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YSk6IERpdHRvIGFuZCByZXBsYWNlIG1f
aXNWZXJ0aWNhbCB3aXRoIGEgbG9jYWwgaXNWZXJ0aWNhbCB2YXJpYWJsZS4KLSAgICAgICAgKFdl
YkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKTogRGl0
dG8uCi0gICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4
dGVuc2lvbkdseXBoKTogRGl0dG8uCi0gICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBh
aW50VmVydGljYWxHbHlwaEFzc2VtYmx5KTogRGl0dG8uCi0gICAgICAgIChXZWJDb3JlOjpNYXRo
T3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkpOiBEaXR0by4KLSAgICAgICAg
KiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oOiBBZGQgdGhlIE9wZXJhdG9yVHlwZSBl
bnVtLgotICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzdHJldGNoU2l6ZSk6IFVzZSBP
cGVyYXRvclR5cGUgaW5zdGVhZCBvZiBhIGJvb2xlYW4uCi0gICAgICAgICogcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBDYWxsIHNldE9w
ZXJhdG9yIHdpdGggdGhlIGNvcnJlY3QgdmFsdWUuCi0gICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUpOiBEaXR0by4KLQotMjAxNi0wNC0yMiAgRnJlZGVy
aWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+Ci0KLSAgICAgICAgTW92ZSBzZWxlY3Rpb24gYW5k
IGRyYXdpbmcgb2Ygc3RyZXRjaHkgb3BlcmF0b3JzIGludG8gYSBzZXBhcmF0ZSBNYXRoT3BlcmF0
b3IgY2xhc3MKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NjkyMQotCi0gICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgotCi0gICAgICAg
IE5vIG5ldyB0ZXN0cywgYmVoYXZpb3IgaXMgbm90IGNoYW5nZWQuCi0KLSAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDogQWRkIHRoZSBNYXRoT3BlcmF0b3IgZmlsZXMuCi0gICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KLSAgICAgICAgKiByZW5kZXJpbmcv
bWF0aG1sL01hdGhPcGVyYXRvci5jcHA6IEFkZGVkLgotICAgICAgICAoV2ViQ29yZTo6Ym91bmRz
Rm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgotICAgICAgICAoV2Vi
Q29yZTo6aGVpZ2h0Rm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgot
ICAgICAgICAoV2ViQ29yZTo6YWR2YW5jZVdpZHRoRm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRl
ck1hdGhNTE9wZXJhdG9yLgotICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpNYXRoT3Bl
cmF0b3IpOgotICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcik6Ci0g
ICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmdldEJhc2VHbHlwaCk6IE1vdmVkIGZyb20g
UmVuZGVyTWF0aE1MT3BlcmF0b3IuCi0gICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNl
dFNpemVWYXJpYW50KTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4KLSAgICAgICAg
KFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseSk6IE1vdmVkIGZyb20gUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuCi0gICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmNhbGN1
bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9w
ZXJhdG9yIHdpdGggYWRkaXRpb25hbCBzdHlsZSBwYXJhbWV0ZXIuCi0gICAgICAgIChXZWJDb3Jl
OjpNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZUdseXBoQXNzZW1ibHlGYWxsQmFjayk6IERpdHRvLgot
ICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEpOiBE
aXR0by4KLSAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRHbHlwaCk6IERpdHRv
LgotICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5z
aW9uR2x5cGgpOiBEaXR0by4KLSAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmlsbFdp
dGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEaXR0by4KLSAgICAgICAgKFdlYkNvcmU6Ok1h
dGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkpOiBEaXR0by4KLSAgICAgICAg
KFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseSk6IERp
dHRvLgotICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmg6IEFkZGVkLgot
ICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjppdGFsaWNDb3JyZWN0aW9uKToKLSAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6aXNTdHJldGNoZWQpOgotICAgICAgICAoV2ViQ29y
ZTo6TWF0aE9wZXJhdG9yOjp1bnN0cmV0Y2gpOgotICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJh
dG9yOjpHbHlwaEFzc2VtYmx5RGF0YTo6R2x5cGhBc3NlbWJseURhdGEpOiBNb3ZlZCBmcm9tIFJl
bmRlck1hdGhNTE9wZXJhdG9yLgotICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzdHJl
dGNoU2l6ZSk6Ci0gICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBVcGRhdGVkIHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVy
cy4KLSAgICAgICAgRm9yIG5vdyB3ZSBjYWxsIHNldE9wZXJhdG9yIHRvIHRyYW5zbWl0IGluZm9y
bWF0aW9uIHRvIG1fbWF0aE9wZXJhdG9yLgotICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogVXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJl
cnMuCi0gICAgICAgIEZvciBub3cgd2Ugc2V0IHNvbWUgbV9tYXRoT3BlcmF0b3IgbWVtYmVycyB0
byB0cmFuc21pdCBpdCBzb21lIGluZm9ybWF0aW9uLgotICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmZpcnN0TGluZUJhc2VsaW5lKTogVXBkYXRlZCB0byB1c2UgTWF0aE9w
ZXJhdG9yIG1lbWJlcnMuCi0gICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
Y29tcHV0ZUxvZ2ljYWxIZWlnaHQpOiBEaXR0by4KLSAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpwYWludCk6IERpdHRvLgotICAgICAgICBGb3Igbm93IHdlIHNldCBzb21l
IG1fbWF0aE9wZXJhdG9yIG1lbWJlcnMgdG8gdHJhbnNtaXQgaXQgc29tZSBpbmZvcm1hdGlvbi4K
LSAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENoaWxkcmVuKTog
VXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCi0gICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKTogRGl0dG8uCi0gICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKTogRGVsZXRlZC4K
LSAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRTaXplVmFyaWFudCk6
IERlbGV0ZWQuCi0gICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0R2x5
cGhBc3NlbWJseSk6IERlbGV0ZWQuCi0gICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6Y2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxCYWNrKTogRGVsZXRlZC4KLSAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJn
ZU9wZXJhdG9yKTogRGVsZXRlZC4KLSAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJh
dG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEpOiBEZWxldGVkLgotICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5cGgpOiBEZWxldGVkLgotICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlw
aCk6IERlbGV0ZWQuCi0gICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Zmls
bFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEZWxldGVkLgotICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KTogRGVs
ZXRlZC4KLSAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEhvcml6
b250YWxHbHlwaEFzc2VtYmx5KTogRGVsZXRlZC4KLSAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6Ci0gICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBt
ZW1iZXJzLgotICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OkdseXBoQXNz
ZW1ibHlEYXRhOjpHbHlwaEFzc2VtYmx5RGF0YSk6IERlbGV0ZWQuCi0KIDIwMTYtMDUtMDkgIERl
YW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIDxzZWxlY3Q+IGVs
ZW1lbnRzIHNob3VsZCByZW5kZXIgcmlnaHQtYWxpZ25lZCB3aGVuIGluIFJUTCBtb2RlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
YjRiNzA4My4uN2FjMTAyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY2NCw4ICsxNjY0LDYgQEAKIAkJNDM5MDQ2RTgxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ0MTJEQTI1RTgwMEFGODBBMiAvKiBS
ZW5kZXJNYXRoTUxTY3JpcHRzLmggKi87IH07CiAJCTQzOTA0NkU5MTJEQTI1RTgwMEFGODBBMiAv
KiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TFVuZGVyT3Zlci5jcHAgKi87IH07CiAJCTQzOTA0NkVBMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92
ZXIuaCAqLzsgfTsKLQkJNDM5MDQ2RTkxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZE
NTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLzsgfTsKLQkJNDM5MDQ2RUEx
MkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDYxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhP
cGVyYXRvci5oICovOyB9OwogCQk0MzkwNDZFQjEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0
aE1MVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDM5MDQ2RDcxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCAqLzsg
fTsKIAkJNDM5MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZEODEyREEy
NUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCAqLzsgfTsKIAkJNDM5RDMzNDMxM0E2
OTExQzAwQzIwRjRGIC8qIFNWR0FuaW1hdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5RDMzNDAxM0E2OTExQzAwQzIwRjRGIC8qIFNWR0Fu
aW1hdGVkVHlwZS5oICovOyB9OwpAQCAtOTIxMCw4ICs5MjA4LDYgQEAKIAkJNDM5MDQ2RDQxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MU2NyaXB0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MzkwNDZENTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJP
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhN
TFVuZGVyT3Zlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0NkQ2MTJE
QTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTQzOTA0NkQ1MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE9wZXJhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDM5MDQ2RDYxMkRBMjVFODEyQUY4MEFD
IC8qIE1hdGhPcGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRo
T3BlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDcxMkRBMjVF
ODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhNTFRva2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2Vu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTFRva2VuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOUQzMzQwMTNBNjkxMUMwMEMyMEY0RiAv
KiBTVkdBbmltYXRlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
QW5pbWF0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjk0MCw4ICsx
NjkzNiw2IEBACiAJCQkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRv
a2VuLmggKi8sCiAJCQkJNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVu
ZGVyT3Zlci5jcHAgKi8sCiAJCQkJNDM5MDQ2RDYxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1h
dGhNTFVuZGVyT3Zlci5oICovLAotCQkJCTQzOTA0NkQ1MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRo
T3BlcmF0b3IuY3BwICovLAotCQkJCTQzOTA0NkQ2MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3Bl
cmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWF0aG1sOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTI3NjU3LDcgKzI3NjUxLDYgQEAKIAkJCQk0MzkwNDZFNjEyREEyNUU4MDBB
RjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5
MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVy
LmggaW4gSGVhZGVycyAqLywKLQkJCQk0MzkwNDZFQTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9w
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMyNzk1OTBDRjk3NDE5MDBFOTdCOTggLyog
UmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkNDREQyMTY2NDZFODIwMEE0NTJF
MSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFG
QTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzEzMzEsNyArMzEzMjQsNiBAQAogCQkJCTQzOTA0NkU1MTJEQTI1RTgwMEFGODBB
MiAvKiBSZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzOTA0
NkVCMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0MzkwNDZFOTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVy
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQzOTA0NkU5MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRo
T3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRDMjc5NTgwQ0Y5NzQxOTAwRTk3Qjk4
IC8qIFJlbmRlck1lZGlhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFNDlCMzA5MTY1RjJGRTEw
MDEwMzM4RCAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MUZBMzAzRTEzMTZDMjlDMDBDMEJGQzUgLyogUmVuZGVyTWVkaWFDb250cm9scy5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvTWF0aE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0
aE9wZXJhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBhNTM2NS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1BVEhNTCkKLSNpbmNsdWRlICJN
YXRoT3BlcmF0b3IuaCIKLQotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU3R5
bGVJbmhlcml0ZWREYXRhLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGlu
ZSBGbG9hdFJlY3QgYm91bmRzRm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKQotewotICAg
IHJldHVybiBkYXRhLmlzVmFsaWQoKSA/IGRhdGEuZm9udC0+Ym91bmRzRm9yR2x5cGgoZGF0YS5n
bHlwaCkgOiBGbG9hdFJlY3QoKTsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBoZWlnaHRGb3JH
bHlwaChjb25zdCBHbHlwaERhdGEmIGRhdGEpCi17Ci0gICAgcmV0dXJuIGJvdW5kc0ZvckdseXBo
KGRhdGEpLmhlaWdodCgpOwotfQotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGFkdmFuY2VXaWR0aEZv
ckdseXBoKGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKLXsKLSAgICByZXR1cm4gZGF0YS5pc1ZhbGlk
KCkgPyBkYXRhLmZvbnQtPndpZHRoRm9yR2x5cGgoZGF0YS5nbHlwaCkgOiAwOwotfQotCi0vLyBG
SVhNRTogVGhpcyBoYXJkY29kZWQgZGF0YSBjYW4gYmUgcmVtb3ZlZCB3aGVuIE9wZW5UeXBlIE1B
VEggZm9udCBhcmUgd2lkZWx5IGF2YWlsYWJsZSAoaHR0cDovL3drYnVnLzE1NjgzNykuCi1zdHJ1
Y3QgU3RyZXRjaHlDaGFyYWN0ZXIgewotICAgIFVDaGFyIGNoYXJhY3RlcjsKLSAgICBVQ2hhciB0
b3BDaGFyOwotICAgIFVDaGFyIGV4dGVuc2lvbkNoYXI7Ci0gICAgVUNoYXIgYm90dG9tQ2hhcjsK
LSAgICBVQ2hhciBtaWRkbGVDaGFyOwotfTsKLS8vIFRoZSBmaXJzdCBsZWZ0UmlnaHRQYWlyc0Nv
dW50IHBhaXJzIGNvcnJlc3BvbmQgdG8gbGVmdC9yaWdodCBmZW5jZXMgdGhhdCBjYW4gZWFzaWx5
IGJlIG1pcnJvcmVkIGluIFJUTC4KLXN0YXRpYyBjb25zdCBzaG9ydCBsZWZ0UmlnaHRQYWlyc0Nv
dW50ID0gNTsKLXN0YXRpYyBjb25zdCBTdHJldGNoeUNoYXJhY3RlciBzdHJldGNoeUNoYXJhY3Rl
cnNbMTRdID0gewotICAgIHsgMHgyOCAgLCAweDIzOWIsIDB4MjM5YywgMHgyMzlkLCAweDAgICAg
fSwgLy8gbGVmdCBwYXJlbnRoZXNpcwotICAgIHsgMHgyOSAgLCAweDIzOWUsIDB4MjM5ZiwgMHgy
M2EwLCAweDAgICAgfSwgLy8gcmlnaHQgcGFyZW50aGVzaXMKLSAgICB7IDB4NWIgICwgMHgyM2Ex
LCAweDIzYTIsIDB4MjNhMywgMHgwICAgIH0sIC8vIGxlZnQgc3F1YXJlIGJyYWNrZXQKLSAgICB7
IDB4NWQgICwgMHgyM2E0LCAweDIzYTUsIDB4MjNhNiwgMHgwICAgIH0sIC8vIHJpZ2h0IHNxdWFy
ZSBicmFja2V0Ci0gICAgeyAweDdiICAsIDB4MjNhNywgMHgyM2FhLCAweDIzYTksIDB4MjNhOCB9
LCAvLyBsZWZ0IGN1cmx5IGJyYWNrZXQKLSAgICB7IDB4N2QgICwgMHgyM2FiLCAweDIzYWEsIDB4
MjNhZCwgMHgyM2FjIH0sIC8vIHJpZ2h0IGN1cmx5IGJyYWNrZXQKLSAgICB7IDB4MjMwOCwgMHgy
M2ExLCAweDIzYTIsIDB4MjNhMiwgMHgwICAgIH0sIC8vIGxlZnQgY2VpbGluZwotICAgIHsgMHgy
MzA5LCAweDIzYTQsIDB4MjNhNSwgMHgyM2E1LCAweDAgICAgfSwgLy8gcmlnaHQgY2VpbGluZwot
ICAgIHsgMHgyMzBhLCAweDIzYTIsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBm
bG9vcgotICAgIHsgMHgyMzBiLCAweDIzYTUsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8g
cmlnaHQgZmxvb3IKLSAgICB7IDB4N2MgICwgMHg3YywgICAweDdjLCAgIDB4N2MsICAgMHgwICAg
IH0sIC8vIHZlcnRpY2FsIGJhcgotICAgIHsgMHgyMDE2LCAweDIwMTYsIDB4MjAxNiwgMHgyMDE2
LCAweDAgICAgfSwgLy8gZG91YmxlIHZlcnRpY2FsIGxpbmUKLSAgICB7IDB4MjIyNSwgMHgyMjI1
LCAweDIyMjUsIDB4MjIyNSwgMHgwICAgIH0sIC8vIHBhcmFsbGVsIHRvCi0gICAgeyAweDIyMmIs
IDB4MjMyMCwgMHgyM2FlLCAweDIzMjEsIDB4MCAgICB9IC8vIGludGVncmFsIHNpZ24KLX07Ci0K
LU1hdGhPcGVyYXRvcjo6TWF0aE9wZXJhdG9yKCkKLSAgICA6IG1fYmFzZUNoYXJhY3RlcigwKQot
ICAgICwgbV9vcGVyYXRvclR5cGUoT3BlcmF0b3JUeXBlOjpVbmRlZmluZWRPcGVyYXRvcikKLSAg
ICAsIG1fc3RyZXRjaFR5cGUoU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVkKQotICAgICwgbV93aWR0
aCgwKQotICAgICwgbV9hc2NlbnQoMCkKLSAgICAsIG1fZGVzY2VudCgwKQotICAgICwgbV9pdGFs
aWNDb3JyZWN0aW9uKDApCi17Ci19Ci0KLXZvaWQgTWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcihV
Q2hhciBiYXNlQ2hhcmFjdGVyLCBPcGVyYXRvclR5cGUgb3BlcmF0b3JUeXBlKQotewotICAgIG1f
YmFzZUNoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXI7Ci0gICAgbV9vcGVyYXRvclR5cGUgPSBvcGVy
YXRvclR5cGU7Ci19Ci0KLWJvb2wgTWF0aE9wZXJhdG9yOjpnZXRCYXNlR2x5cGgoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBHbHlwaERhdGEmIGJhc2VHbHlwaCkgY29uc3QKLXsKLSAgICBiYXNl
R2x5cGggPSBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX2Jhc2VD
aGFyYWN0ZXIsICFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwotICAgIHJldHVybiBi
YXNlR2x5cGguaXNWYWxpZCgpICYmIGJhc2VHbHlwaC5mb250ID09ICZzdHlsZS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250KCk7Ci19Ci0KLXZvaWQgTWF0aE9wZXJhdG9yOjpzZXRTaXplVmFyaWFu
dChjb25zdCBHbHlwaERhdGEmIHNpemVWYXJpYW50KQotewotICAgIEFTU0VSVChzaXplVmFyaWFu
dC5pc1ZhbGlkKCkgJiYgc2l6ZVZhcmlhbnQuZm9udC0+bWF0aERhdGEoKSk7Ci0gICAgbV9zdHJl
dGNoVHlwZSA9IFN0cmV0Y2hUeXBlOjpTaXplVmFyaWFudDsKLSAgICBtX3ZhcmlhbnQgPSBzaXpl
VmFyaWFudDsKLX0KLQotdm9pZCBNYXRoT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkoY29uc3Qg
R2x5cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5RGF0YSkKLXsKLSAgICBBU1NFUlQobV9vcGVyYXRv
clR5cGUgPT0gT3BlcmF0b3JUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yIHx8IG1fb3BlcmF0b3JUeXBl
ID09IE9wZXJhdG9yVHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9yKTsKLSAgICBtX3N0cmV0Y2hUeXBl
ID0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHk7Ci0gICAgbV9hc3NlbWJseSA9IGFzc2VtYmx5
RGF0YTsKLX0KLQotdm9pZCBNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdl
T3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIEFTU0VSVChtX29wZXJh
dG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OkRpc3BsYXlPcGVyYXRvcik7Ci0KLSAgICBHbHlwaERh
dGEgYmFzZUdseXBoOwotICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgpIHx8
ICFiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVj
dG9yPEdseXBoPiBzaXplVmFyaWFudHM7Ci0gICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFz
c2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKLQotICAgIC8vIFRoZSB2YWx1ZSBvZiBkaXNwbGF5
T3BlcmF0b3JNaW5IZWlnaHQgaXMgc29tZXRpbWVzIHRvbyBzbWFsbCwgc28gd2UgZW5zdXJlIHRo
YXQgaXQgaXMgYXQgbGVhc3QgXHNxcnR7Mn0gdGltZXMgdGhlIHNpemUgb2YgdGhlIGJhc2UgZ2x5
cGguCi0gICAgZmxvYXQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0ID0gc3RkOjptYXgoaGVpZ2h0
Rm9yR2x5cGgoYmFzZUdseXBoKSAqIHNxcnRPZlR3b0Zsb2F0LCBiYXNlR2x5cGguZm9udC0+bWF0
aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KCpiYXNlR2x5cGguZm9udCwgT3BlblR5cGVNYXRoRGF0
YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7Ci0KLSAgICBiYXNlR2x5cGguZm9udC0+bWF0
aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlh
bnRzLCBhc3NlbWJseVBhcnRzKTsKLQotICAgIC8vIFdlIGNob29zZSB0aGUgZmlyc3Qgc2l6ZSB2
YXJpYW50IHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIGRpc3BsYXlPcGVyYXRvck1p
bkhlaWdodCBhbmQgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIHRoZSBsYXJnZXN0IHZhcmlhbnQuCi0g
ICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6IHNpemVWYXJpYW50cykgewotICAgICAgICBHbHlw
aERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7Ci0gICAgICAgIHNl
dFNpemVWYXJpYW50KGdseXBoRGF0YSk7Ci0gICAgICAgIG1faXRhbGljQ29ycmVjdGlvbiA9IGds
eXBoRGF0YS5mb250LT5tYXRoRGF0YSgpLT5nZXRJdGFsaWNDb3JyZWN0aW9uKCpnbHlwaERhdGEu
Zm9udCwgZ2x5cGhEYXRhLmdseXBoKTsKLSAgICAgICAgaWYgKGhlaWdodEZvckdseXBoKGdseXBo
RGF0YSkgPj0gZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi1ib29sIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxC
YWNrKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0aERh
dGE6OkFzc2VtYmx5UGFydD4mIGFzc2VtYmx5UGFydHMsIEdseXBoQXNzZW1ibHlEYXRhJiBhc3Nl
bWJseURhdGEpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIHN0cnVjdHVyZSBvZiB0aGUgT3BlbiBUeXBl
IE1hdGggdGFibGUgaXMgYSBiaXQgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIG9uZSBjdXJyZW50bHkg
dXNlZCBieSB0aGUgTWF0aE9wZXJhdG9yIGNvZGUsIHNvIHdlIHRyeSB0byBmYWxsYmFjayBpbiBh
IHJlYXNvbmFibGUgd2F5LgotICAgIC8vIEZJWE1FOiBNYXRoT3BlcmF0b3Igc2hvdWxkIHN1cHBv
cnQgdGhlIG1vc3QgZ2VuZXJhbCBmb3JtYXQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzAzMjcpLgotICAgIC8vIFdlIHVzZSB0aGUgYXBwcm9hY2ggb2YgdGhlIGNv
cHlDb21wb25lbnRzIGZ1bmN0aW9uIGluIGdpdGh1Yi5jb20vbWF0aGpheC9NYXRoSmF4LWRldi9i
bG9iL21hc3Rlci9mb250cy9PcGVuVHlwZU1hdGgvZm9udFV0aWwucHkKLQotICAgIC8vIFdlIGNv
dW50IHRoZSBudW1iZXIgb2Ygbm9uIGV4dGVuZGVyIHBpZWNlcy4KLSAgICBpbnQgbm9uRXh0ZW5k
ZXJDb3VudCA9IDA7Ci0gICAgZm9yIChhdXRvJiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykgewotICAg
ICAgICBpZiAoIXBhcnQuaXNFeHRlbmRlcikKLSAgICAgICAgICAgIG5vbkV4dGVuZGVyQ291bnQr
KzsKLSAgICB9Ci0gICAgaWYgKG5vbkV4dGVuZGVyQ291bnQgPiAzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogdGhlcmUgYXJlIHRvbyBtYW55IHBpZWNl
cy4KLQotICAgIC8vIFdlIG5vdyBicm93c2UgdGhlIGxpc3Qgb2YgcGllY2VzIGZyb20gbGVmdCB0
byByaWdodCBmb3IgaG9yaXpvbnRhbCBvcGVyYXRvcnMgYW5kIGZyb20gYm90dG9tIHRvIHRvcCBm
b3IgdmVydGljYWwgb3BlcmF0b3JzLgotICAgIGVudW0gUGFydFR5cGUgewotICAgICAgICBTdGFy
dCwKLSAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGUsCi0gICAgICAgIE1pZGRs
ZSwKLSAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kLAotICAgICAgICBFbmQsCi0g
ICAgICAgIE5vbmUKLSAgICB9OwotICAgIFBhcnRUeXBlIGV4cGVjdGVkUGFydFR5cGUgPSBTdGFy
dDsKLSAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gMDsKLSAgICBhc3NlbWJseURh
dGEubWlkZGxlLmdseXBoID0gMDsKLSAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJseVBhcnRz
KSB7Ci0gICAgICAgIGlmIChub25FeHRlbmRlckNvdW50IDwgMykgewotICAgICAgICAgICAgLy8g
SWYgd2Ugb25seSBoYXZlIGF0IG1vc3QgdHdvIG5vbi1leHRlbmRlcnMgdGhlbiB3ZSBza2lwIHRo
ZSBtaWRkbGUgZ2x5cGguCi0gICAgICAgICAgICBpZiAoZXhwZWN0ZWRQYXJ0VHlwZSA9PSBFeHRl
bmRlckJldHdlZW5TdGFydEFuZE1pZGRsZSkKLSAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRU
eXBlID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOwotICAgICAgICAgICAgZWxzZSBpZiAo
ZXhwZWN0ZWRQYXJ0VHlwZSA9PSBNaWRkbGUpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0
VHlwZSA9IEVuZDsKLSAgICAgICAgfQotICAgICAgICBpZiAocGFydC5pc0V4dGVuZGVyKSB7Ci0g
ICAgICAgICAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGgpCi0gICAgICAgICAg
ICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCA9IHBhcnQuZ2x5cGg7IC8vIFdlIGNv
cHkgdGhlIGV4dGVuZGVyIHBhcnQuCi0gICAgICAgICAgICBlbHNlIGlmIChhc3NlbWJseURhdGEu
ZXh0ZW5zaW9uLmdseXBoICE9IHBhcnQuZ2x5cGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHRoZSBhc3NlbWJseSBoYXMgZGlmZmVyZW50
IGV4dGVuZGVycy4KLQotICAgICAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBlKSB7Ci0g
ICAgICAgICAgICBjYXNlIFN0YXJ0OgotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUg
bGVmdC9ib3R0b20gcGFydC4KLSAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0
ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBjYXNlIE1pZGRsZToKLSAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhl
IG1pZGRsZSBwYXJ0LgotICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRl
ckJldHdlZW5NaWRkbGVBbmRFbmQ7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBjYXNlIEVuZDoKLSAgICAgICAgICAgIGNhc2UgTm9uZToKLSAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIGV4dGVuZGVyLgot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhc2UgRXh0ZW5kZXJC
ZXR3ZWVuU3RhcnRBbmRNaWRkbGU6Ci0gICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1p
ZGRsZUFuZEVuZDoKLSAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgbXVsdGlwbGUgY29uc2Vj
dXRpdmUgZXh0ZW5kZXJzLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBlKSB7Ci0gICAg
ICAgIGNhc2UgU3RhcnQ6Ci0gICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSBsZWZ0L2JvdHRvbSBw
YXJ0LgotICAgICAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdC5nbHlwaCA9IHBhcnQu
Z2x5cGg7Ci0gICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuU3Rh
cnRBbmRNaWRkbGU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FzZSBFeHRlbmRl
ckJldHdlZW5TdGFydEFuZE1pZGRsZToKLSAgICAgICAgY2FzZSBNaWRkbGU6Ci0gICAgICAgICAg
ICAvLyBXZSBjb3B5IHRoZSBtaWRkbGUgcGFydC4KLSAgICAgICAgICAgIGFzc2VtYmx5RGF0YS5t
aWRkbGUuZ2x5cGggPSBwYXJ0LmdseXBoOwotICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9
IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoKLSAgICAgICAgY2FzZSBFbmQ6
Ci0gICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSByaWdodC90b3AgcGFydC4KLSAgICAgICAgICAg
IGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmdseXBoID0gcGFydC5nbHlwaDsKLSAgICAgICAgICAg
IGV4cGVjdGVkUGFydFR5cGUgPSBOb25lOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGNhc2UgTm9uZToKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgZ290
IGFuIHVuZXhwZWN0ZWQgbm9uLWV4dGVuZGVyIHBhcnQuCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNpb24u
Z2x5cGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3
ZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbiBleHRlbnNpb24gZ2x5cGguCi0KLSAgICAv
LyBJZiB3ZSBkb24ndCBoYXZlIHRvcC9ib3R0b20gZ2x5cGhzLCB3ZSB1c2UgdGhlIGV4dGVuc2lv
biBnbHlwaC4KLSAgICBpZiAoIWFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmdseXBoKQotICAgICAg
ICBhc3NlbWJseURhdGEudG9wT3JSaWdodC5nbHlwaCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24u
Z2x5cGg7Ci0gICAgaWYgKCFhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0LmdseXBoKQotICAgICAg
ICBhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0LmdseXBoID0gYXNzZW1ibHlEYXRhLmV4dGVuc2lv
bi5nbHlwaDsKLQotICAgIGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmZvbnQgPSAmc3R5bGUuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwotICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZm9u
dCA9IGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmZvbnQ7Ci0gICAgYXNzZW1ibHlEYXRhLmJvdHRv
bU9yTGVmdC5mb250ID0gYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZm9udDsKLSAgICBhc3NlbWJs
eURhdGEubWlkZGxlLmZvbnQgPSBhc3NlbWJseURhdGEubWlkZGxlLmdseXBoID8gYXNzZW1ibHlE
YXRhLnRvcE9yUmlnaHQuZm9udCA6IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXpl
KQotewotICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2Fs
T3BlcmF0b3IgfHwgbV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3Bl
cmF0b3IpOwotICAgIEFTU0VSVCghbWF4aW11bUdseXBoV2lkdGggfHwgbV9vcGVyYXRvclR5cGUg
PT0gT3BlcmF0b3JUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yKTsKLSAgICBib29sIGlzVmVydGljYWwg
PSBtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3I7Ci0KLSAg
ICBHbHlwaERhdGEgYmFzZUdseXBoOwotICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBiYXNl
R2x5cGgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1heGltdW1HbHlwaFdpZHRoKSB7
Ci0gICAgICAgIC8vIFdlIGRvIG5vdCBzdHJldGNoIGlmIHRoZSBiYXNlIGdseXBoIGlzIGxhcmdl
IGVub3VnaC4KLSAgICAgICAgZmxvYXQgYmFzZVNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0Rm9y
R2x5cGgoYmFzZUdseXBoKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCk7Ci0gICAg
ICAgIGlmICh0YXJnZXRTaXplIDw9IGJhc2VTaXplKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIE1hdGhPcGVyYXRvcjo6R2x5cGhBc3NlbWJseURhdGEgYXNzZW1ibHlEYXRhOwot
ICAgIGlmIChiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkgewotICAgICAgICBWZWN0b3I8R2x5
cGg+IHNpemVWYXJpYW50czsKLSAgICAgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2Vt
Ymx5UGFydD4gYXNzZW1ibHlQYXJ0czsKLSAgICAgICAgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRh
KCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIGlzVmVydGljYWwsIHNpemVWYXJp
YW50cywgYXNzZW1ibHlQYXJ0cyk7Ci0gICAgICAgIC8vIFdlIHZlcmlmeSB0aGUgc2l6ZSB2YXJp
YW50cy4KLSAgICAgICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6IHNpemVWYXJpYW50cykgewot
ICAgICAgICAgICAgR2x5cGhEYXRhIGdseXBoRGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZv
bnQpOwotICAgICAgICAgICAgaWYgKG1heGltdW1HbHlwaFdpZHRoKQotICAgICAgICAgICAgICAg
ICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5j
ZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBzZXRTaXplVmFyaWFudChnbHlwaERhdGEpOwotICAgICAgICAgICAgICAgIGZsb2F0
IHNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VX
aWR0aEZvckdseXBoKGdseXBoRGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gdGFy
Z2V0U2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gV2UgdmVyaWZ5IGlmIHRoZXJlIGlzIGEgY29uc3RydWN0aW9u
LgotICAgICAgICBpZiAoIWNhbGN1bGF0ZUdseXBoQXNzZW1ibHlGYWxsQmFjayhzdHlsZSwgYXNz
ZW1ibHlQYXJ0cywgYXNzZW1ibHlEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoIWlzVmVydGljYWwpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgLy8gSWYgdGhlIGZvbnQgZG9lcyBub3QgaGF2ZSBhIE1BVEggdGFibGUsIHdlIGZhbGxi
YWNrIHRvIHRoZSBVbmljb2RlLW9ubHkgY29uc3RydWN0aW9ucy4KLSAgICAgICAgY29uc3QgU3Ry
ZXRjaHlDaGFyYWN0ZXIqIHN0cmV0Y2h5Q2hhcmFjdGVyID0gbnVsbHB0cjsKLSAgICAgICAgY29u
c3QgdW5zaWduZWQgbWF4SW5kZXggPSBXVEZfQVJSQVlfTEVOR1RIKHN0cmV0Y2h5Q2hhcmFjdGVy
cyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1heEluZGV4OyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICBpZiAoc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XS5jaGFy
YWN0ZXIgPT0gbV9iYXNlQ2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICAgICAgc3RyZXRjaHlDaGFy
YWN0ZXIgPSAmc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAo
IXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAmJiBpbmRleCA8IGxlZnRSaWdodFBhaXJz
Q291bnQgKiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiByaWdodC10
by1sZWZ0IGRpcmVjdGlvbiB3ZSBzZWxlY3QgdGhlIG1pcnJvcmVkIGZvcm0gYnkgYWRkaW5nIC0x
IG9yICsxIGFjY29yZGluZyB0byB0aGUgcGFyaXR5IG9mIGluZGV4LgotICAgICAgICAgICAgICAg
ICAgICBpbmRleCArPSBpbmRleCAlIDIgPyAtMSA6IDE7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gSWYgd2UgZGlkbid0IGZpbmQgYSBzdHJldGNoeSBjaGFyYWN0ZXIgc2V0IGZvciB0aGlzIGNo
YXJhY3Rlciwgd2UgZG9uJ3Qga25vdyBob3cgdG8gc3RyZXRjaCBpdC4KLSAgICAgICAgaWYgKCFz
dHJldGNoeUNoYXJhY3RlcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBXZSBj
b252ZXJ0IHRoZSBsaXN0IG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbnRvIGEgbGlzdCBvZiBnbHlw
aCBkYXRhLgotICAgICAgICBhc3NlbWJseURhdGEudG9wT3JSaWdodCA9IHN0eWxlLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT50b3BDaGFyLCBm
YWxzZSk7Ci0gICAgICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24gPSBzdHlsZS5mb250Q2FzY2Fk
ZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+ZXh0ZW5zaW9uQ2hh
ciwgZmFsc2UpOwotICAgICAgICBhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0ID0gc3R5bGUuZm9u
dENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPmJvdHRv
bUNoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLm1pZGRsZSA9IHN0cmV0Y2h5Q2hh
cmFjdGVyLT5taWRkbGVDaGFyID8gc3R5bGUuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKSA6IEdseXBoRGF0YSgp
OwotICAgIH0KLQotICAgIC8vIElmIHdlIGFyZSBtZWFzdXJpbmcgdGhlIG1heGltdW0gd2lkdGgs
IHZlcmlmeSBlYWNoIGNvbXBvbmVudC4KLSAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpIHsKLSAg
ICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9wT3JSaWdodCkpOwotICAgICAgICAq
bWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VX
aWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5leHRlbnNpb24pKTsKLSAgICAgICAgKm1heGltdW1H
bHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JH
bHlwaChhc3NlbWJseURhdGEubWlkZGxlKSk7Ci0gICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9
IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1i
bHlEYXRhLmJvdHRvbU9yTGVmdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
V2UgZW5zdXJlIHRoYXQgdGhlIHNpemUgaXMgbGFyZ2UgZW5vdWdoIHRvIGF2b2lkIGdseXBoIG92
ZXJsYXBzLgotICAgIGZsb2F0IG1pblNpemUgPSBpc1ZlcnRpY2FsID8KLSAgICAgICAgaGVpZ2h0
Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQpICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1i
bHlEYXRhLm1pZGRsZSkgKyBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0
KQotICAgICAgICA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b21Pckxl
ZnQpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkgKyBhZHZhbmNl
V2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9wT3JSaWdodCk7Ci0gICAgaWYgKG1pblNpemUg
PiB0YXJnZXRTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRHbHlwaEFzc2VtYmx5KGFz
c2VtYmx5RGF0YSk7Ci19Ci0KLUxheW91dFJlY3QgTWF0aE9wZXJhdG9yOjpwYWludEdseXBoKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBHbHlwaERhdGEm
IGRhdGEsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyB0cmlt
KQotewotICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKGRhdGEpOwot
Ci0gICAgTGF5b3V0UmVjdCBnbHlwaFBhaW50UmVjdChvcmlnaW4sIExheW91dFNpemUoZ2x5cGhC
b3VuZHMueCgpICsgZ2x5cGhCb3VuZHMud2lkdGgoKSwgZ2x5cGhCb3VuZHMuaGVpZ2h0KCkpKTsK
LSAgICBnbHlwaFBhaW50UmVjdC5zZXRZKG9yaWdpbi55KCkgKyBnbHlwaEJvdW5kcy55KCkpOwot
Ci0gICAgLy8gSW4gb3JkZXIgdG8gaGF2ZSBnbHlwaHMgZml0IHNudWdseSB3aXRoIG9uZSBhbm90
aGVyIHdlIHNuYXAgdGhlIGNvbm5lY3RpbmcgZWRnZXMgdG8gcGl4ZWwgYm91bmRhcmllcwotICAg
IC8vIGFuZCB0cmltIG9mZiBvbmUgcGl4ZWwuIFRoZSBwaXhlbCB0cmltIGlzIHRvIGFjY291bnQg
Zm9yIGZvbnRzIHRoYXQgaGF2ZSBlZGdlIHBpeGVscyB0aGF0IGhhdmUgbGVzcwotICAgIC8vIHRo
YW4gZnVsbCBjb3ZlcmFnZS4gVGhlc2UgZWRnZSBwaXhlbHMgY2FuIGludHJvZHVjZSBzbWFsbCBz
ZWFtcyBiZXR3ZWVuIGNvbm5lY3RlZCBnbHlwaHMuCi0gICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMg
PSBpbmZvLnJlY3Q7Ci0gICAgc3dpdGNoICh0cmltKSB7Ci0gICAgY2FzZSBUcmltVG9wOgotICAg
ICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwo
KSArIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55
KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1Cb3R0b206Ci0gICAgICAgIGdseXBo
UGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAt
IDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5t
YXhZKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1Ub3BBbmRCb3R0b206Ci0gICAg
ICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkuY2VpbCgp
ICsgMSk7Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50
UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VU
byhnbHlwaFBhaW50UmVjdC55KCkpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VU
byhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1M
ZWZ0OgotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3Qu
eCgpLmNlaWwoKSArIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlwaFBh
aW50UmVjdC54KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1SaWdodDoKLSAgICAg
ICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5m
bG9vcigpIC0gMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFp
bnRSZWN0Lm1heFgoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJpbUxlZnRBbmRSaWdo
dDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lngo
KS5jZWlsKCkgKyAxKTsKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGds
eXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hp
ZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRN
YXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2xpcHBp
bmcgdGhlIGVuY2xvc2luZyBJbnRSZWN0IGF2b2lkcyBhbnkgcG90ZW50aWFsIGlzc3VlcyBhdCBq
b2luZWQgZWRnZXMuCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGlu
Zm8uY29udGV4dCgpKTsKLSAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOwotCi0g
ICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgIGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5m
b250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250ZXh0KCkuZHJh
d0dseXBocyhzdHlsZS5mb250Q2FzY2FkZSgpLCAqZGF0YS5mb250LCBidWZmZXIsIDAsIDEsIG9y
aWdpbik7Ci0KLSAgICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7Ci19Ci0KLXZvaWQgTWF0aE9wZXJh
dG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlv
dXRQb2ludCYgdG8pCi17Ci0gICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IE9wZXJhdG9yVHlw
ZTo6VmVydGljYWxPcGVyYXRvcik7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRj
aFR5cGU6OkdseXBoQXNzZW1ibHkpOwotICAgIEFTU0VSVChtX2Fzc2VtYmx5LmV4dGVuc2lvbi5p
c1ZhbGlkKCkpOwotICAgIEFTU0VSVChmcm9tLnkoKSA8PSB0by55KCkpOwotCi0gICAgLy8gSWYg
dGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSBleHRlbnNpb24gZ2x5cGgsIHdlIGRvbid0IG5lZWQg
dG8gZG8gYW55dGhpbmcuCi0gICAgaWYgKGZyb20ueSgpID09IHRvLnkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29u
dGV4dCgpKTsKLQotICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1f
YXNzZW1ibHkuZXh0ZW5zaW9uKTsKLQotICAgIC8vIENsaXBwaW5nIHRoZSBleHRlbmRlciByZWdp
b24gaGVyZSBhbGxvd3MgdXMgdG8gZHJhdyB0aGUgYm90dG9tIGV4dGVuZGVyIGdseXBoIGludG8g
dGhlCi0gICAgLy8gcmVnaW9ucyBvZiB0aGUgYm90dG9tIGdseXBoIHdpdGhvdXQgd29ycnlpbmcg
YWJvdXQgb3ZlcmRyYXcgKGhhaXJ5IHBpeGVscykgYW5kIHNpbXBsaWZpZXMgbGF0ZXIgY2xpcHBp
bmcuCi0gICAgTGF5b3V0UmVjdCBjbGlwQm91bmRzID0gaW5mby5yZWN0OwotICAgIGNsaXBCb3Vu
ZHMuc2hpZnRZRWRnZVRvKGZyb20ueSgpKTsKLSAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VU
byh0by55KCkpOwotICAgIGluZm8uY29udGV4dCgpLmNsaXAoY2xpcEJvdW5kcyk7Ci0KLSAgICAv
LyBUcmltbWluZyBtYXkgcmVtb3ZlIHVwIHRvIHR3byBwaXhlbHMgZnJvbSB0aGUgdG9wIG9mIHRo
ZSBleHRlbmRlciBnbHlwaCwgc28gd2UgbW92ZSBpdCB1cCBieSB0d28gcGl4ZWxzLgotICAgIGZs
b2F0IG9mZnNldFRvR2x5cGhUb3AgPSBnbHlwaEJvdW5kcy55KCkgKyAyOwotICAgIExheW91dFBv
aW50IGdseXBoT3JpZ2luID0gTGF5b3V0UG9pbnQoZnJvbS54KCksIGZyb20ueSgpIC0gb2Zmc2V0
VG9HbHlwaFRvcCk7Ci0gICAgRmxvYXRSZWN0IGxhc3RQYWludGVkR2x5cGhSZWN0KGZyb20sIEZs
b2F0U2l6ZSgpKTsKLQotICAgIHdoaWxlIChsYXN0UGFpbnRlZEdseXBoUmVjdC5tYXhZKCkgPCB0
by55KCkpIHsKLSAgICAgICAgbGFzdFBhaW50ZWRHbHlwaFJlY3QgPSBwYWludEdseXBoKHN0eWxl
LCBpbmZvLCBtX2Fzc2VtYmx5LmV4dGVuc2lvbiwgZ2x5cGhPcmlnaW4sIFRyaW1Ub3BBbmRCb3R0
b20pOwotICAgICAgICBnbHlwaE9yaWdpbi5zZXRZKGdseXBoT3JpZ2luLnkoKSArIGxhc3RQYWlu
dGVkR2x5cGhSZWN0LmhlaWdodCgpKTsKLQotICAgICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRo
YXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhlIGdsdWUgZ2x5cGggaGFzIGJl
ZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKLSAgICAgICAgLy8gd2l0aCB0cmltbWlu
Zy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgotICAgICAgICBpZiAobGFzdFBh
aW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci12b2lkIE1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50
JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCi17Ci0gICAgQVNTRVJUKG1fb3BlcmF0b3JU
eXBlID09IE9wZXJhdG9yVHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9yKTsKLSAgICBBU1NFUlQobV9z
dHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1f
YXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKGZyb20ueCgpIDw9IHRv
LngoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBn
bHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICBpZiAoZnJvbS54KCkgPT0g
dG8ueCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVu
ZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5
cGggaW50byB0aGUKLSAgICAvLyByZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3
b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRl
ciBjbGlwcGluZy4KLSAgICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAg
Y2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZnJvbS54KCkpOwotICAgIGNsaXBCb3VuZHMuc2hpZnRN
YXhYRWRnZVRvKHRvLngoKSk7Ci0gICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsK
LQotICAgIC8vIFRyaW1taW5nIG1heSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSBs
ZWZ0IG9mIHRoZSBleHRlbmRlciBnbHlwaCwgc28gd2UgbW92ZSBpdCBsZWZ0IGJ5IHR3byBwaXhl
bHMuCi0gICAgZmxvYXQgb2Zmc2V0VG9HbHlwaExlZnQgPSAtMjsKLSAgICBMYXlvdXRQb2ludCBn
bHlwaE9yaWdpbiA9IExheW91dFBvaW50KGZyb20ueCgpICsgb2Zmc2V0VG9HbHlwaExlZnQsIHN0
ZDo6bWluKGZyb20ueSgpLCB0by55KCkpKTsKLSAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlw
aFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOwotCi0gICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhS
ZWN0Lm1heFgoKSA8IHRvLngoKSkgewotICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBh
aW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkuZXh0ZW5zaW9uLCBnbHlwaE9yaWdpbiwg
VHJpbUxlZnRBbmRSaWdodCk7Ci0gICAgICAgIGdseXBoT3JpZ2luLnNldFgoZ2x5cGhPcmlnaW4u
eCgpICsgbGFzdFBhaW50ZWRHbHlwaFJlY3Qud2lkdGgoKSk7Ci0KLSAgICAgICAgLy8gVGhlcmUn
cyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBnbHVl
IGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFuZ2xlCi0gICAgICAgIC8v
IHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KLSAgICAg
ICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotdm9pZCBNYXRoT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2Vt
Ymx5KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpCi17Ci0gICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IE9w
ZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvcik7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUg
PT0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkpOwotICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRv
cE9yUmlnaHQuaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS5ib3R0b21PckxlZnQu
aXNWYWxpZCgpKTsKLQotICAgIC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRo
YXQgdGhlIGVkZ2Ugb2YgdGhlIHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0
aCB0aGUgZWRnZXMgb2Ygb3VyIHBhaW50IGJveC4KLSAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRv
cExlZnQgPSBwYWludE9mZnNldDsKLSAgICBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2lu
dChvcGVyYXRvclRvcExlZnQpOwotICAgIEZsb2F0UmVjdCB0b3BHbHlwaEJvdW5kcyA9IGJvdW5k
c0ZvckdseXBoKG1fYXNzZW1ibHkudG9wT3JSaWdodCk7Ci0gICAgTGF5b3V0UG9pbnQgdG9wR2x5
cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAtIHRvcEds
eXBoQm91bmRzLnkoKSk7Ci0gICAgTGF5b3V0UmVjdCB0b3BHbHlwaFBhaW50UmVjdCA9IHBhaW50
R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkudG9wT3JSaWdodCwgdG9wR2x5cGhPcmlnaW4s
IFRyaW1Cb3R0b20pOwotCi0gICAgRmxvYXRSZWN0IGJvdHRvbUdseXBoQm91bmRzID0gYm91bmRz
Rm9yR2x5cGgobV9hc3NlbWJseS5ib3R0b21PckxlZnQpOwotICAgIExheW91dFBvaW50IGJvdHRv
bUdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBz
dHJldGNoU2l6ZSgpIC0gKGJvdHRvbUdseXBoQm91bmRzLmhlaWdodCgpICsgYm90dG9tR2x5cGhC
b3VuZHMueSgpKSk7Ci0gICAgTGF5b3V0UmVjdCBib3R0b21HbHlwaFBhaW50UmVjdCA9IHBhaW50
R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0LCBib3R0b21HbHlwaE9y
aWdpbiwgVHJpbVRvcCk7Ci0KLSAgICBpZiAobV9hc3NlbWJseS5taWRkbGUuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIC8vIENlbnRlciB0aGUgZ2x5cGggb3JpZ2luIGJldHdlZW4gdGhlIHN0YXJ0IGFu
ZCBlbmQgZ2x5cGggcGFpbnQgZXh0ZW50cy4gVGhlbiBzaGlmdCBpdCBoYWxmIHRoZSBwYWludCBo
ZWlnaHQgdG93YXJkIHRoZSBib3R0b20gZ2x5cGguCi0gICAgICAgIEZsb2F0UmVjdCBtaWRkbGVH
bHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkubWlkZGxlKTsKLSAgICAgICAg
TGF5b3V0UG9pbnQgbWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgdG9wR2x5
cGhPcmlnaW4ueSgpKTsKLSAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBv
aW50KDAsIChib3R0b21HbHlwaFBhaW50UmVjdC55KCkgLSB0b3BHbHlwaFBhaW50UmVjdC5tYXhZ
KCkpIC8gMi4wKSk7Ci0gICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQb2lu
dCgwLCBtaWRkbGVHbHlwaEJvdW5kcy5oZWlnaHQoKSAvIDIuMCkpOwotCi0gICAgICAgIExheW91
dFJlY3QgbWlkZGxlR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fz
c2VtYmx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1Ub3BBbmRCb3R0b20pOwotICAg
ICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoc3R5bGUsIGluZm8sIHRvcEdseXBo
UGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNaW5Z
Q29ybmVyKCkpOwotICAgICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoc3R5bGUs
IGluZm8sIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGJvdHRvbUdseXBo
UGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIH0gZWxzZQotICAgICAgICBmaWxsV2l0
aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoc3R5bGUsIGluZm8sIHRvcEdseXBoUGFpbnRSZWN0Lm1p
blhNYXhZQ29ybmVyKCksIGJvdHRvbUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwot
fQotCi12b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQotewotICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5
cGU6Okhvcml6b250YWxPcGVyYXRvcik7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3Ry
ZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkpOwotICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRvcE9yUmln
aHQuaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS5ib3R0b21PckxlZnQuaXNWYWxp
ZCgpKTsKLQotICAgIC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRoYXQgdGhl
IGVkZ2Ugb2YgdGhlIHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0aCB0aGUg
ZWRnZXMgb2Ygb3VyIHBhaW50IGJveC4KLSAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQg
PSBwYWludE9mZnNldDsKLSAgICBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChvcGVy
YXRvclRvcExlZnQpOwotICAgIExheW91dFBvaW50IGxlZnRHbHlwaE9yaWdpbihvcGVyYXRvclRv
cExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpICsgbV9hc2NlbnQpOwotICAgIExheW91dFJl
Y3QgbGVmdEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJs
eS5ib3R0b21PckxlZnQsIGxlZnRHbHlwaE9yaWdpbiwgVHJpbVJpZ2h0KTsKLQotICAgIEZsb2F0
UmVjdCByaWdodEdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS50b3BPclJp
Z2h0KTsKLSAgICBMYXlvdXRQb2ludCByaWdodEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54
KCkgKyBtX3dpZHRoIC0gcmlnaHRHbHlwaEJvdW5kcy53aWR0aCgpLCBvcGVyYXRvclRvcExlZnQu
eSgpICsgbV9hc2NlbnQpOwotICAgIExheW91dFJlY3QgcmlnaHRHbHlwaFBhaW50UmVjdCA9IHBh
aW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkudG9wT3JSaWdodCwgcmlnaHRHbHlwaE9y
aWdpbiwgVHJpbUxlZnQpOwotCi0gICAgTGF5b3V0UG9pbnQgYmFzZWxpbmVTaGlmdCgwLCBtX2Fz
Y2VudCk7Ci0gICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewotICAgICAgICAv
LyBDZW50ZXIgdGhlIGdseXBoIG9yaWdpbiBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGdseXBo
IHBhaW50IGV4dGVudHMuCi0gICAgICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9w
ZXJhdG9yVG9wTGVmdC54KCksIGxlZnRHbHlwaE9yaWdpbi55KCkpOwotICAgICAgICBtaWRkbGVH
bHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoKHJpZ2h0R2x5cGhQYWludFJlY3QueCgpIC0g
bGVmdEdseXBoUGFpbnRSZWN0Lm1heFgoKSkgLyAyLjAsIDApKTsKLSAgICAgICAgTGF5b3V0UmVj
dCBtaWRkbGVHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1i
bHkubWlkZGxlLCBtaWRkbGVHbHlwaE9yaWdpbiwgVHJpbUxlZnRBbmRSaWdodCk7Ci0gICAgICAg
IGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKHN0eWxlLCBpbmZvLCBsZWZ0R2x5cGhQ
YWludFJlY3QubWF4WE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQsIG1pZGRsZUdseXBoUGFp
bnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0KTsKLSAgICAgICAgZmlsbFdp
dGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoc3R5bGUsIGluZm8sIG1pZGRsZUdseXBoUGFpbnRS
ZWN0Lm1heFhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0LCByaWdodEdseXBoUGFpbnRSZWN0
Lm1pblhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0KTsKLSAgICB9IGVsc2UKLSAgICAgICAg
ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoc3R5bGUsIGluZm8sIGxlZnRHbHlwaFBh
aW50UmVjdC5tYXhYTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCwgcmlnaHRHbHlwaFBhaW50
UmVjdC5taW5YTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCk7Ci19Ci0KLX0KLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM0YWVhZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCisrKyAvZGV2L251bGwKQEAg
LTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNYXRoT3BlcmF0
b3JfaAotI2RlZmluZSBNYXRoT3BlcmF0b3JfaAotCi0jaWYgRU5BQkxFKE1BVEhNTCkKLSNpbmNs
dWRlICJHbHlwaFBhZ2UuaCIKLSNpbmNsdWRlICJMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiT3Bl
blR5cGVNYXRoRGF0YS5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgPHVuaWNv
ZGUvdXR5cGVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyU3R5bGU7
Ci0KLWNsYXNzIE1hdGhPcGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBPcGVyYXRv
clR5cGUgeyBVbmRlZmluZWRPcGVyYXRvciwgRGlzcGxheU9wZXJhdG9yLCBWZXJ0aWNhbE9wZXJh
dG9yLCBIb3Jpem9udGFsT3BlcmF0b3IgfTsKLSAgICBNYXRoT3BlcmF0b3IoKTsKLSAgICB2b2lk
IHNldE9wZXJhdG9yKFVDaGFyIGJhc2VDaGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSk7Ci0KLSAgICBM
YXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJl
Y3Rpb247IH0KLQotICAgIGJvb2wgaXNTdHJldGNoZWQoKSBjb25zdCB7IHJldHVybiBtX3N0cmV0
Y2hUeXBlICE9IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZDsgfQotICAgIHZvaWQgdW5zdHJldGNo
KCkgeyBtX3N0cmV0Y2hUeXBlID0gU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVkOyB9Ci0KLSAgICAv
LyBGSVhNRTogQWxsIHRoZSBjb2RlIGJlbG93IHNob3VsZCBiZSBwcml2YXRlIHdoZW4gaXQgaXMg
bm8gbG9uZ2VyIG5lZWRlZCBieSBSZW5kZXJNYXRoTUxPcGVyYXRvciAoaHR0cDovL3dlYmtpdC5v
cmcvYi8xNTIyNDQpLgotCi0gICAgc3RydWN0IEdseXBoQXNzZW1ibHlEYXRhIHsKLSAgICAgICAg
R2x5cGhEYXRhIHRvcE9yUmlnaHQ7Ci0gICAgICAgIEdseXBoRGF0YSBleHRlbnNpb247Ci0gICAg
ICAgIEdseXBoRGF0YSBib3R0b21PckxlZnQ7Ci0gICAgICAgIEdseXBoRGF0YSBtaWRkbGU7Ci0g
ICAgfTsKLSAgICBlbnVtIGNsYXNzIFN0cmV0Y2hUeXBlIHsgVW5zdHJldGNoZWQsIFNpemVWYXJp
YW50LCBHbHlwaEFzc2VtYmx5IH07Ci0gICAgZW51bSBHbHlwaFBhaW50VHJpbW1pbmcgewotICAg
ICAgICBUcmltVG9wLAotICAgICAgICBUcmltQm90dG9tLAotICAgICAgICBUcmltVG9wQW5kQm90
dG9tLAotICAgICAgICBUcmltTGVmdCwKLSAgICAgICAgVHJpbVJpZ2h0LAotICAgICAgICBUcmlt
TGVmdEFuZFJpZ2h0Ci0gICAgfTsKLQotICAgIExheW91dFVuaXQgc3RyZXRjaFNpemUoKSBjb25z
dCB7IHJldHVybiBtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6Okhvcml6b250YWxPcGVy
YXRvciA/IG1fd2lkdGggOiBtX2FzY2VudCArIG1fZGVzY2VudDsgfQotICAgIGJvb2wgZ2V0QmFz
ZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgR2x5cGhEYXRhJikgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRTaXplVmFyaWFudChjb25zdCBHbHlwaERhdGEmKTsKLSAgICB2b2lkIHNldEdseXBoQXNzZW1i
bHkoY29uc3QgR2x5cGhBc3NlbWJseURhdGEmKTsKLSAgICB2b2lkIGNhbGN1bGF0ZURpc3BsYXlT
dHlsZUxhcmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICB2b2lkIGNhbGN1bGF0
ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0
aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplID0gMCk7Ci0gICAgYm9vbCBjYWxjdWxhdGVHbHlwaEFz
c2VtYmx5RmFsbEJhY2soY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBWZWN0b3I8T3BlblR5cGVN
YXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiYsIEdseXBoQXNzZW1ibHlEYXRhJikgY29uc3Q7Ci0KLSAg
ICBMYXlvdXRSZWN0IHBhaW50R2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBj
b25zdCBHbHlwaERhdGEmLCBjb25zdCBMYXlvdXRQb2ludCYgb3JpZ2luLCBHbHlwaFBhaW50VHJp
bW1pbmcpOwotICAgIHZvaWQgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJl
bmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExh
eW91dFBvaW50JiB0byk7Ci0gICAgdm9pZCBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlw
aChjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9t
LCBjb25zdCBMYXlvdXRQb2ludCYgdG8pOwotICAgIHZvaWQgcGFpbnRWZXJ0aWNhbEdseXBoQXNz
ZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYp
OwotICAgIHZvaWQgcGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHls
ZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0KLSAgICBVQ2hhciBtX2Jhc2VD
aGFyYWN0ZXI7Ci0gICAgT3BlcmF0b3JUeXBlIG1fb3BlcmF0b3JUeXBlOwotICAgIFN0cmV0Y2hU
eXBlIG1fc3RyZXRjaFR5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBHbHlwaERhdGEgbV92YXJp
YW50OwotICAgICAgICBHbHlwaEFzc2VtYmx5RGF0YSBtX2Fzc2VtYmx5OwotICAgIH07Ci0gICAg
TGF5b3V0VW5pdCBtX3dpZHRoOwotICAgIExheW91dFVuaXQgbV9hc2NlbnQ7Ci0gICAgTGF5b3V0
VW5pdCBtX2Rlc2NlbnQ7Ci0gICAgTGF5b3V0VW5pdCBtX2l0YWxpY0NvcnJlY3Rpb247Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQotI2VuZGlmIC8vIE1hdGhPcGVyYXRvcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MT3BlcmF0b3IuY3BwCmluZGV4IGMzNDc3MWYuLjcyZTliOTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3Bw
CkBAIC00NSw2ICs0NSwzMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiB1c2luZyBuYW1l
c3BhY2UgTWF0aE1MTmFtZXM7CiAKKy8vIEZJWE1FOiBUaGUgT3BlblR5cGUgTUFUSCB0YWJsZSBj
b250YWlucyBpbmZvcm1hdGlvbiB0aGF0IHNob3VsZCBvdmVycmlkZSB0aGlzIHRhYmxlIChodHRw
Oi8vd2tidWcvMTIyMjk3KS4KK3N0cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7CisgICAgVUNoYXIg
Y2hhcmFjdGVyOworICAgIFVDaGFyIHRvcENoYXI7CisgICAgVUNoYXIgZXh0ZW5zaW9uQ2hhcjsK
KyAgICBVQ2hhciBib3R0b21DaGFyOworICAgIFVDaGFyIG1pZGRsZUNoYXI7Cit9OworLy8gVGhl
IGZpcnN0IGxlZnRSaWdodFBhaXJzQ291bnQgcGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3JpZ2h0
IGZlbmNlcyB0aGF0IGNhbiBlYXNpbHkgYmUgbWlycm9yZWQgaW4gUlRMLgorc3RhdGljIGNvbnN0
IHNob3J0IGxlZnRSaWdodFBhaXJzQ291bnQgPSA1Oworc3RhdGljIGNvbnN0IFN0cmV0Y2h5Q2hh
cmFjdGVyIHN0cmV0Y2h5Q2hhcmFjdGVyc1sxNF0gPSB7CisgICAgeyAweDI4ICAsIDB4MjM5Yiwg
MHgyMzljLCAweDIzOWQsIDB4MCAgICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lzCisgICAgeyAweDI5
ICAsIDB4MjM5ZSwgMHgyMzlmLCAweDIzYTAsIDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRoZXNp
cworICAgIHsgMHg1YiAgLCAweDIzYTEsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVm
dCBzcXVhcmUgYnJhY2tldAorICAgIHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2LCAw
eDAgICAgfSwgLy8gcmlnaHQgc3F1YXJlIGJyYWNrZXQKKyAgICB7IDB4N2IgICwgMHgyM2E3LCAw
eDIzYWEsIDB4MjNhOSwgMHgyM2E4IH0sIC8vIGxlZnQgY3VybHkgYnJhY2tldAorICAgIHsgMHg3
ZCAgLCAweDIzYWIsIDB4MjNhYSwgMHgyM2FkLCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkgYnJh
Y2tldAorICAgIHsgMHgyMzA4LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwgLy8g
bGVmdCBjZWlsaW5nCisgICAgeyAweDIzMDksIDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4MCAg
ICB9LCAvLyByaWdodCBjZWlsaW5nCisgICAgeyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAweDIz
YTMsIDB4MCAgICB9LCAvLyBsZWZ0IGZsb29yCisgICAgeyAweDIzMGIsIDB4MjNhNSwgMHgyM2E1
LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdodCBmbG9vcgorICAgIHsgMHg3YyAgLCAweDdjLCAg
IDB4N2MsICAgMHg3YywgICAweDAgICAgfSwgLy8gdmVydGljYWwgYmFyCisgICAgeyAweDIwMTYs
IDB4MjAxNiwgMHgyMDE2LCAweDIwMTYsIDB4MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwgbGlu
ZQorICAgIHsgMHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8gcGFy
YWxsZWwgdG8KKyAgICB7IDB4MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0g
Ly8gaW50ZWdyYWwgc2lnbgorfTsKKwogUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlJlbmRlck1hdGhN
TE9wZXJhdG9yKE1hdGhNTEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAg
ICAgOiBSZW5kZXJNYXRoTUxUb2tlbihlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKICAgICAsIG1f
c3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUoMCkKQEAgLTI2NywxNiArMjk0LDggQEAgdm9pZCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGUgdHlw
ZTsKLSAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkKLSAgICAgICAgdHlw
ZSA9IE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlOjpEaXNwbGF5T3BlcmF0b3I7Ci0gICAgZWxz
ZSBpZiAobV9pc1ZlcnRpY2FsKQotICAgICAgICB0eXBlID0gTWF0aE9wZXJhdG9yOjpPcGVyYXRv
clR5cGU6OlZlcnRpY2FsT3BlcmF0b3I7Ci0gICAgZWxzZQotICAgICAgICB0eXBlID0gTWF0aE9w
ZXJhdG9yOjpPcGVyYXRvclR5cGU6Okhvcml6b250YWxPcGVyYXRvcjsKLSAgICBtX21hdGhPcGVy
YXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCB0eXBlKTsKICAgICBHbHlwaERhdGEgYmFz
ZUdseXBoOwotICAgIGZsb2F0IG1heGltdW1HbHlwaFdpZHRoID0gbV9tYXRoT3BlcmF0b3IuZ2V0
QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkgPyBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNl
R2x5cGgpIDogMDsKKyAgICBmbG9hdCBtYXhpbXVtR2x5cGhXaWR0aCA9IGdldEJhc2VHbHlwaChz
dHlsZSgpLCBiYXNlR2x5cGgpID8gYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKSA6IDA7
CiAgICAgaWYgKCFtX2lzVmVydGljYWwpIHsKICAgICAgICAgaWYgKG1heGltdW1HbHlwaFdpZHRo
IDwgc3RyZXRjaFNpemUoKSkKICAgICAgICAgICAgIG1heGltdW1HbHlwaFdpZHRoID0gc3RyZXRj
aFNpemUoKTsKQEAgLTI4NiwxMiArMzA1LDEyIEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICB9CiAgICAgaWYgKGlzTGFyZ2VP
cGVyYXRvckluRGlzcGxheVN0eWxlKCkpIHsKICAgICAgICAgLy8gTGFyZ2Ugb3BlcmF0b3JzIGlu
IFNUSVggV29yZCBoYXZlIGluY29ycmVjdCBhZHZhbmNlIHdpZHRoLCBjYXVzaW5nIG1pc3BsYWNl
bWVudCBvZiBzdXBlcnNjcmlwdCwgc28gd2UgdXNlIHRoZSBnbHlwaCBib3VuZCBpbnN0ZWFkICho
dHRwOi8vc291cmNlZm9yZ2UubmV0L3Avc3RpeGZvbnRzL3RyYWNraW5nLzQ5LykuCi0gICAgICAg
IG1fbWF0aE9wZXJhdG9yLmNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUo
KSk7Ci0gICAgICAgIGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVy
YXRvcjo6U3RyZXRjaFR5cGU6OlNpemVWYXJpYW50KQotICAgICAgICAgICAgbWF4aW11bUdseXBo
V2lkdGggPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpLndpZHRoKCk7
CisgICAgICAgIGNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoKTsKKyAgICAgICAg
aWYgKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OlNpemVWYXJpYW50KQorICAgICAgICAg
ICAgbWF4aW11bUdseXBoV2lkdGggPSBib3VuZHNGb3JHbHlwaChtX3ZhcmlhbnQpLndpZHRoKCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRklYTUU6IHNvbWUgZ2x5cGhzIChlLmcuIHRoZSBv
bmUgZm9yICJGUkFDVElPTiBTTEFTSCIgaW4gdGhlIFNUSVggTWF0aCBmb250IG9yIGxhcmdlIG9w
ZXJhdG9ycykgaGF2ZSBhIHdpZHRoIHRoYXQgZGVwZW5kcyBvbiB0aGUgaGVpZ2h0LCByZXN1bHRp
bmcgaW4gbGFyZ2UgZ2FwcyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMDMyNikuCi0gICAgICAgIG1fbWF0aE9wZXJhdG9yLmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShz
dHlsZSgpLCAmbWF4aW11bUdseXBoV2lkdGgpOworICAgICAgICBjYWxjdWxhdGVTdHJldGNoeURh
dGEoJm1heGltdW1HbHlwaFdpZHRoKTsKICAgICB9CiAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbGVhZGluZ1NwYWNlICsgbWF4
aW11bUdseXBoV2lkdGggKyBtX3RyYWlsaW5nU3BhY2U7CiB9CkBAIC0zNTUsMTQgKzM3NCwyNDUg
QEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWwKICAgICB1cGRhdGVPcGVyYXRvclByb3BlcnRpZXMo
KTsKIH0KIAorYm9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBiYXNlR2x5cGgpIGNvbnN0Cit7CisgICAgYmFz
ZUdseXBoID0gc3R5bGUuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0
Q29udGVudCwgIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgcmV0dXJuIGJh
c2VHbHlwaC5pc1ZhbGlkKCkgJiYgYmFzZUdseXBoLmZvbnQgPT0gJnN0eWxlLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnQoKTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0U2l6
ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJiBzaXplVmFyaWFudCkKK3sKKyAgICBBU1NFUlQoc2l6
ZVZhcmlhbnQuaXNWYWxpZCgpICYmIHNpemVWYXJpYW50LmZvbnQtPm1hdGhEYXRhKCkpOworICAg
IG1fc3RyZXRjaFR5cGUgPSBTdHJldGNoVHlwZTo6U2l6ZVZhcmlhbnQ7CisgICAgbV92YXJpYW50
ID0gc2l6ZVZhcmlhbnQ7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldEdseXBo
QXNzZW1ibHkoY29uc3QgR2x5cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5RGF0YSkKK3sKKyAgICBt
X3N0cmV0Y2hUeXBlID0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHk7CisgICAgbV9hc3NlbWJs
eSA9IGFzc2VtYmx5RGF0YTsKK30KKworYm9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y2FsY3Vs
YXRlR2x5cGhBc3NlbWJseUZhbGxCYWNrKGNvbnN0IFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpB
c3NlbWJseVBhcnQ+JiBhc3NlbWJseVBhcnRzLCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlE
YXRhKSBjb25zdAoreworICAgIC8vIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9wZW4gVHlwZSBNYXRo
IHRhYmxlIGlzIGEgYml0IG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvbmUgY3VycmVudGx5IHVzZWQg
YnkgdGhlIFJlbmRlck1hdGhNTE9wZXJhdG9yIGNvZGUsIHNvIHdlIHRyeSB0byBmYWxsYmFjayBp
biBhIHJlYXNvbmFibGUgd2F5LgorICAgIC8vIEZJWE1FOiBSZW5kZXJNYXRoTUxPcGVyYXRvciBz
aG91bGQgc3VwcG9ydCB0aGUgbW9zdCBnZW5lcmFsIGZvcm1hdCAoaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDMyNykuCisgICAgLy8gV2UgdXNlIHRoZSBhcHByb2Fj
aCBvZiB0aGUgY29weUNvbXBvbmVudHMgZnVuY3Rpb24gaW4gZ2l0aHViLmNvbS9tYXRoamF4L01h
dGhKYXgtZGV2L2Jsb2IvbWFzdGVyL2ZvbnRzL09wZW5UeXBlTWF0aC9mb250VXRpbC5weQorCisg
ICAgLy8gV2UgY291bnQgdGhlIG51bWJlciBvZiBub24gZXh0ZW5kZXIgcGllY2VzLgorICAgIGlu
dCBub25FeHRlbmRlckNvdW50ID0gMDsKKyAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJseVBh
cnRzKSB7CisgICAgICAgIGlmICghcGFydC5pc0V4dGVuZGVyKQorICAgICAgICAgICAgbm9uRXh0
ZW5kZXJDb3VudCsrOworICAgIH0KKyAgICBpZiAobm9uRXh0ZW5kZXJDb3VudCA+IDMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB0aGVyZSBhcmUgdG9v
IG1hbnkgcGllY2VzLgorCisgICAgLy8gV2Ugbm93IGJyb3dzZSB0aGUgbGlzdCBvZiBwaWVjZXMg
ZnJvbSBsZWZ0IHRvIHJpZ2h0IGZvciBob3Jpem9udGFsIG9wZXJhdG9ycyBhbmQgZnJvbSBib3R0
b20gdG8gdG9wIGZvciB2ZXJ0aWNhbCBvcGVyYXRvcnMuCisgICAgZW51bSBQYXJ0VHlwZSB7Cisg
ICAgICAgIFN0YXJ0LAorICAgICAgICBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZSwKKyAg
ICAgICAgTWlkZGxlLAorICAgICAgICBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQsCisgICAg
ICAgIEVuZCwKKyAgICAgICAgTm9uZQorICAgIH07CisgICAgUGFydFR5cGUgZXhwZWN0ZWRQYXJ0
VHlwZSA9IFN0YXJ0OworICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGggPSAwOworICAg
IGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGggPSAwOworICAgIGZvciAoYXV0byYgcGFydCA6IGFz
c2VtYmx5UGFydHMpIHsKKyAgICAgICAgaWYgKG5vbkV4dGVuZGVyQ291bnQgPCAzKSB7CisgICAg
ICAgICAgICAvLyBJZiB3ZSBvbmx5IGhhdmUgYXQgbW9zdCB0d28gbm9uLWV4dGVuZGVycyB0aGVu
IHdlIHNraXAgdGhlIG1pZGRsZSBnbHlwaC4KKyAgICAgICAgICAgIGlmIChleHBlY3RlZFBhcnRU
eXBlID09IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlKQorICAgICAgICAgICAgICAgIGV4
cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ7CisgICAgICAgICAg
ICBlbHNlIGlmIChleHBlY3RlZFBhcnRUeXBlID09IE1pZGRsZSkKKyAgICAgICAgICAgICAgICBl
eHBlY3RlZFBhcnRUeXBlID0gRW5kOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0LmlzRXh0
ZW5kZXIpIHsKKyAgICAgICAgICAgIGlmICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCkK
KyAgICAgICAgICAgICAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gcGFydC5nbHlw
aDsgLy8gV2UgY29weSB0aGUgZXh0ZW5kZXIgcGFydC4KKyAgICAgICAgICAgIGVsc2UgaWYgKGFz
c2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGggIT0gcGFydC5nbHlwaCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogdGhlIGFzc2VtYmx5IGhh
cyBkaWZmZXJlbnQgZXh0ZW5kZXJzLgorCisgICAgICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFy
dFR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3RhcnQ6CisgICAgICAgICAgICAgICAgLy8gV2Ug
aWdub3JlIHRoZSBsZWZ0L2JvdHRvbSBwYXJ0LgorICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFy
dFR5cGUgPSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGNhc2UgTWlkZGxlOgorICAgICAgICAgICAgICAgIC8vIFdl
IGlnbm9yZSB0aGUgbWlkZGxlIHBhcnQuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlw
ZSA9IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGNhc2UgRW5kOgorICAgICAgICAgICAgY2FzZSBOb25lOgorICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgZ290IGFuIHVuZXhwZWN0ZWQg
ZXh0ZW5kZXIuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2Fz
ZSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZToKKyAgICAgICAgICAgIGNhc2UgRXh0ZW5k
ZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOgorICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSBtdWx0
aXBsZSBjb25zZWN1dGl2ZSBleHRlbmRlcnMuCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFydFR5
cGUpIHsKKyAgICAgICAgY2FzZSBTdGFydDoKKyAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIGxl
ZnQvYm90dG9tIHBhcnQuCisgICAgICAgICAgICBhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0Lmds
eXBoID0gcGFydC5nbHlwaDsKKyAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRl
ckJldHdlZW5TdGFydEFuZE1pZGRsZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBj
YXNlIEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOgorICAgICAgICBjYXNlIE1pZGRsZToK
KyAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIG1pZGRsZSBwYXJ0LgorICAgICAgICAgICAgYXNz
ZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA9IHBhcnQuZ2x5cGg7CisgICAgICAgICAgICBleHBlY3Rl
ZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOgorICAgICAg
ICBjYXNlIEVuZDoKKyAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIHJpZ2h0L3RvcCBwYXJ0Lgor
ICAgICAgICAgICAgYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZ2x5cGggPSBwYXJ0LmdseXBoOwor
ICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IE5vbmU7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgY2FzZSBOb25lOgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3VwcG9y
dGVkOiB3ZSBnb3QgYW4gdW5leHBlY3RlZCBub24tZXh0ZW5kZXIgcGFydC4KKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghYXNzZW1ibHlEYXRh
LmV4dGVuc2lvbi5nbHlwaCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5vdCBz
dXBwb3J0ZWQ6IHdlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBoYXZlIGFuIGV4dGVuc2lvbiBnbHlw
aC4KKworICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdG9wL3JpZ2h0IG9yIGxlZnQvYm90dG9tIGds
eXBocywgd2UgdXNlIHRoZSBleHRlbnNpb24gZ2x5cGguCisgICAgaWYgKCFhc3NlbWJseURhdGEu
dG9wT3JSaWdodC5nbHlwaCkKKyAgICAgICAgYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZ2x5cGgg
PSBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoOworICAgIGlmICghYXNzZW1ibHlEYXRhLmJv
dHRvbU9yTGVmdC5nbHlwaCkKKyAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdC5nbHlw
aCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGg7CisKKyAgICBhc3NlbWJseURhdGEudG9w
T3JSaWdodC5mb250ID0gJnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAg
IGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZm9udCA9IGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmZv
bnQ7CisgICAgYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdC5mb250ID0gYXNzZW1ibHlEYXRhLnRv
cE9yUmlnaHQuZm9udDsKKyAgICBhc3NlbWJseURhdGEubWlkZGxlLmZvbnQgPSBhc3NlbWJseURh
dGEubWlkZGxlLmdseXBoID8gYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZm9udCA6IG51bGxwdHI7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y2Fs
Y3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcigpCit7CisgICAgQVNTRVJUKG1faXNWZXJ0
aWNhbCAmJiBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKTsKKworICAgIEdseXBoRGF0
YSBiYXNlR2x5cGg7CisgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBoKSB8
fCAhYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZl
Y3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOworICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpB
c3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7CisKKyAgICAvLyBUaGUgdmFsdWUgb2YgZGlzcGxh
eU9wZXJhdG9yTWluSGVpZ2h0IGlzIHNvbWV0aW1lcyB0b28gc21hbGwsIHNvIHdlIGVuc3VyZSB0
aGF0IGl0IGlzIGF0IGxlYXN0IFxzcXJ0ezJ9IHRpbWVzIHRoZSBzaXplIG9mIHRoZSBiYXNlIGds
eXBoLgorICAgIGZsb2F0IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCA9IHN0ZDo6bWF4KGJhc2VH
bHlwaC5mb250LT5ib3VuZHNGb3JHbHlwaChiYXNlR2x5cGguZ2x5cGgpLmhlaWdodCgpICogc3Fy
dE9mVHdvRmxvYXQsIGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpLT5nZXRNYXRoQ29uc3RhbnQo
KmJhc2VHbHlwaC5mb250LCBPcGVuVHlwZU1hdGhEYXRhOjpEaXNwbGF5T3BlcmF0b3JNaW5IZWln
aHQpKTsKKworICAgIGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMo
YmFzZUdseXBoLmdseXBoLCB0cnVlLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOworCisg
ICAgLy8gV2UgY2hvb3NlIHRoZSBmaXJzdCBzaXplIHZhcmlhbnQgdGhhdCBpcyBsYXJnZXIgdGhh
biB0aGUgZXhwZWN0ZWQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGFuZCBvdGhlcndpc2UgZmFs
bGJhY2sgdG8gdGhlIGxhcmdlc3QgdmFyaWFudC4KKyAgICBmb3IgKGF1dG8mIHNpemVWYXJpYW50
IDogc2l6ZVZhcmlhbnRzKSB7CisgICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlh
bnQsIGJhc2VHbHlwaC5mb250KTsKKyAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsK
KyAgICAgICAgbV9pdGFsaWNDb3JyZWN0aW9uID0gZ2x5cGhEYXRhLmZvbnQtPm1hdGhEYXRhKCkt
PmdldEl0YWxpY0NvcnJlY3Rpb24oKmdseXBoRGF0YS5mb250LCBnbHlwaERhdGEuZ2x5cGgpOwor
ICAgICAgICBpZiAoaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA+PSBkaXNwbGF5T3BlcmF0b3JN
aW5IZWlnaHQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShmbG9hdCogbWF4aW11bUdseXBoV2lk
dGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSkKK3sKKyAgICBBU1NFUlQoIW1heGltdW1HbHlwaFdp
ZHRoIHx8IG1faXNWZXJ0aWNhbCk7CisKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoOworICAgIGlm
ICghZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBpZiAoIW1heGltdW1HbHlwaFdpZHRoKSB7CisgICAgICAgIC8vIFdlIGRvIG5vdCBz
dHJldGNoIGlmIHRoZSBiYXNlIGdseXBoIGlzIGxhcmdlIGVub3VnaC4KKyAgICAgICAgZmxvYXQg
YmFzZVNpemUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2
YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsKKyAgICAgICAgaWYgKHRhcmdldFNpemUgPD0g
YmFzZVNpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR2x5cGhBc3NlbWJs
eURhdGEgYXNzZW1ibHlEYXRhOworICAgIGlmIChiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkg
eworICAgICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKKyAgICAgICAgVmVjdG9yPE9w
ZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKKyAgICAgICAgYmFz
ZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgs
IG1faXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKKyAgICAgICAgLy8g
V2UgdmVyaWZ5IHRoZSBzaXplIHZhcmlhbnRzLgorICAgICAgICBmb3IgKGF1dG8mIHNpemVWYXJp
YW50IDogc2l6ZVZhcmlhbnRzKSB7CisgICAgICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNp
emVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7CisgICAgICAgICAgICBpZiAobWF4aW11bUdseXBo
V2lkdGgpCisgICAgICAgICAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1h
eGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERhdGEpKTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNldFNpemVWYXJpYW50KGdseXBoRGF0YSk7
CisgICAgICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckds
eXBoKGdseXBoRGF0YSkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERhdGEpOworICAgICAg
ICAgICAgICAgIGlmIChzaXplID49IHRhcmdldFNpemUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIHZlcmlmeSBp
ZiB0aGVyZSBpcyBhIGNvbnN0cnVjdGlvbi4KKyAgICAgICAgaWYgKCFjYWxjdWxhdGVHbHlwaEFz
c2VtYmx5RmFsbEJhY2soYXNzZW1ibHlQYXJ0cywgYXNzZW1ibHlEYXRhKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIW1faXNWZXJ0aWNhbCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEg
TUFUSCB0YWJsZSwgd2UgZmFsbGJhY2sgdG8gdGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25z
LgorICAgICAgICBjb25zdCBTdHJldGNoeUNoYXJhY3Rlciogc3RyZXRjaHlDaGFyYWN0ZXIgPSBu
dWxscHRyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhJbmRleCA9IFdURl9BUlJBWV9MRU5H
VEgoc3RyZXRjaHlDaGFyYWN0ZXJzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgbWF4SW5kZXg7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChzdHJldGNoeUNo
YXJhY3RlcnNbaW5kZXhdLmNoYXJhY3RlciA9PSBtX3RleHRDb250ZW50KSB7CisgICAgICAgICAg
ICAgICAgc3RyZXRjaHlDaGFyYWN0ZXIgPSAmc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGlu
ZGV4IDwgbGVmdFJpZ2h0UGFpcnNDb3VudCAqIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
SWYgd2UgYXJlIGluIHJpZ2h0LXRvLWxlZnQgZGlyZWN0aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9y
ZWQgZm9ybSBieSBhZGRpbmcgLTEgb3IgKzEgYWNjb3JkaW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5k
ZXguCisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IGluZGV4ICUgMiA/IC0xIDogMTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJh
Y3RlciBzZXQgZm9yIHRoaXMgY2hhcmFjdGVyLCB3ZSBkb24ndCBrbm93IGhvdyB0byBzdHJldGNo
IGl0LgorICAgICAgICBpZiAoIXN0cmV0Y2h5Q2hhcmFjdGVyKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIC8vIFdlIGNvbnZlcnQgdGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJz
IGludG8gYSBsaXN0IG9mIGdseXBoIGRhdGEuCisgICAgICAgIGFzc2VtYmx5RGF0YS50b3BPclJp
Z2h0ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNo
eUNoYXJhY3Rlci0+dG9wQ2hhciwgZmFsc2UpOworICAgICAgICBhc3NlbWJseURhdGEuZXh0ZW5z
aW9uID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNo
eUNoYXJhY3Rlci0+ZXh0ZW5zaW9uQ2hhciwgZmFsc2UpOworICAgICAgICBhc3NlbWJseURhdGEu
Ym90dG9tT3JMZWZ0ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rl
cihzdHJldGNoeUNoYXJhY3Rlci0+Ym90dG9tQ2hhciwgZmFsc2UpOworICAgICAgICBhc3NlbWJs
eURhdGEubWlkZGxlID0gc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIgPyBzdHlsZSgpLmZv
bnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRk
bGVDaGFyLCBmYWxzZSkgOiBHbHlwaERhdGEoKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBhcmUg
bWVhc3VyaW5nIHRoZSBtYXhpbXVtIHdpZHRoLCB2ZXJpZnkgZWFjaCBjb21wb25lbnQuCisgICAg
aWYgKG1heGltdW1HbHlwaFdpZHRoKSB7CisgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0
ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlE
YXRhLnRvcE9yUmlnaHQpKTsKKyAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgo
Km1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEuZXh0
ZW5zaW9uKSk7CisgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVt
R2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkpOwor
ICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgs
IGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGVuc3VyZSB0aGF0IHRoZSBzaXplIGlzIGxh
cmdlIGVub3VnaCB0byBhdm9pZCBnbHlwaCBvdmVybGFwcy4KKyAgICBmbG9hdCBtaW5TaXplID0g
bV9pc1ZlcnRpY2FsID8KKyAgICAgICAgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcE9y
UmlnaHQpICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkgKyBoZWlnaHRGb3JH
bHlwaChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KQorICAgICAgICA6IGFkdmFuY2VXaWR0aEZv
ckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgo
YXNzZW1ibHlEYXRhLm1pZGRsZSkgKyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEu
dG9wT3JSaWdodCk7CisgICAgaWYgKG1pblNpemUgPiB0YXJnZXRTaXplKQorICAgICAgICByZXR1
cm47CisKKyAgICBzZXRHbHlwaEFzc2VtYmx5KGFzc2VtYmx5RGF0YSk7Cit9CisKIHZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKIHsKICAgICBBU1NFUlQoZmlyc3RDaGls
ZCgpKTsKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9t
YXRoT3BlcmF0b3IudW5zdHJldGNoKCk7Ci0gICAgbV9tYXRoT3BlcmF0b3IubV9pdGFsaWNDb3Jy
ZWN0aW9uID0gMDsKKyAgICBtX3N0cmV0Y2hUeXBlID0gU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVk
OworICAgIG1faXRhbGljQ29ycmVjdGlvbiA9IDA7CiAgICAgLy8gV2UgYWRkIHNwYWNpbmcgYXJv
dW5kIHRoZSBvcGVyYXRvci4KICAgICAvLyBGSVhNRTogVGhlIHNwYWNpbmcgc2hvdWxkIGJlIGFk
ZGVkIHRvIHRoZSB3aG9sZSBlbWJlbGxpc2hlZCBvcGVyYXRvciAoaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgzMSkuCiAgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5n
IHNob3VsZCBvbmx5IGJlIGFkZGVkIGluc2lkZSAocGVyaGFwcyBpbmZlcnJlZCkgbXJvdyAoaHR0
cDovL3d3dy53My5vcmcvVFIvTWF0aE1ML2NoYXB0ZXIzLmh0bWwjcHJlc20ub3BzcGFjaW5nKS4K
QEAgLTM3NiwzMyArNjI2LDI1IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0
eWxlKCkKICAgICBpZiAoIXNob3VsZEFsbG93U3RyZXRjaGluZygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZSB0eXBlOwotICAgIGlmIChpc0xhcmdl
T3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKQotICAgICAgICB0eXBlID0gTWF0aE9wZXJhdG9yOjpP
cGVyYXRvclR5cGU6OkRpc3BsYXlPcGVyYXRvcjsKLSAgICBlbHNlIGlmIChtX2lzVmVydGljYWwp
Ci0gICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVy
YXRvcjsKLSAgICBlbHNlCi0gICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlw
ZTo6SG9yaXpvbnRhbE9wZXJhdG9yOwotICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1f
dGV4dENvbnRlbnQsIHR5cGUpOwogICAgIGlmIChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJh
dG9ySW5EaXNwbGF5U3R5bGUoKSkKLSAgICAgICAgbV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlRGlz
cGxheVN0eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSgpKTsKKyAgICAgICAgY2FsY3VsYXRlRGlzcGxh
eVN0eWxlTGFyZ2VPcGVyYXRvcigpOwogICAgIGVsc2UgewotICAgICAgICBtX21hdGhPcGVyYXRv
ci5jYWxjdWxhdGVTdHJldGNoeURhdGEoc3R5bGUoKSwgbnVsbHB0ciwgc3RyZXRjaFNpemUoKSk7
Ci0gICAgICAgIGlmICghbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkKKyAgICAgICAgY2Fs
Y3VsYXRlU3RyZXRjaHlEYXRhKG51bGxwdHIsIHN0cmV0Y2hTaXplKCkpOworICAgICAgICBpZiAo
bV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6VW5zdHJldGNoZWQpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBtX21hdGhPcGVyYXRvci5t
X3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U3RyZXRjaFR5cGU6OlNpemVWYXJpYW50KSB7
CisgICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpT
aXplVmFyaWFudCkgewogICAgICAgICAvLyBXZSByZXNpemUgdGhlIG9wZXJhdG9yIHRvIG1hdGNo
IHRoZSBvbmUgb2YgdGhlIHNpemUgdmFyaWFudC4KICAgICAgICAgaWYgKGlzTGFyZ2VPcGVyYXRv
ckluRGlzcGxheVN0eWxlKCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBzdHJldGNoIHNpemUgaXMg
YWN0dWFsbHkgbm90IGludm9sdmVkIGluIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHNpemUgdmFyaWFu
dCBpbiBmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvci4KICAgICAgICAgICAgIC8vIFdlIHNp
bXBseSB1c2UgdGhlIGhlaWdodCBhbmQgZGVwdGggb2YgdGhlIHNlbGVjdGVkIHNpemUgdmFyaWFu
dCBnbHlwaC4KLSAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0Zvckds
eXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CisgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5
cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3ZhcmlhbnQpOwogICAgICAgICAgICAgbV9zdHJl
dGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IC1nbHlwaEJvdW5kcy55KCk7CiAgICAgICAgICAgICBt
X3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBnbHlwaEJvdW5kcy5tYXhZKCk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSByZXNjYWxlIHRoZSBoZWlnaHQgYW5kIGRlcHRo
IHByb3BvcnRpb25hdGVseS4KLSAgICAgICAgICAgIGZsb2F0IHZhcmlhbnRTaXplID0gaGVpZ2h0
Rm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKKyAgICAgICAgICAgIGZsb2F0IHZh
cmlhbnRTaXplID0gaGVpZ2h0Rm9yR2x5cGgobV92YXJpYW50KTsKICAgICAgICAgICAgIGZsb2F0
IHNpemUgPSBzdHJldGNoU2l6ZSgpOwogICAgICAgICAgICAgZmxvYXQgYXNwZWN0ID0gc2l6ZSA+
IDAgPyB2YXJpYW50U2l6ZSAvIHNpemUgOiAxLjA7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWln
aHRBYm92ZUJhc2VsaW5lICo9IGFzcGVjdDsKQEAgLTQxMSwzMCArNjUzLDMwIEBAIHZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKICAgICB9CiAKICAgICBpZiAoIW1faXNW
ZXJ0aWNhbCkgewotICAgICAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBN
YXRoT3BlcmF0b3I6OlN0cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkgewotICAgICAgICAgICAgRmxv
YXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJp
YW50KTsKKyAgICAgICAgaWYgKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OlNpemVWYXJp
YW50KSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlw
aChtX3ZhcmlhbnQpOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9
IC1nbHlwaEJvdW5kcy55KCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxp
bmUgPSBnbHlwaEJvdW5kcy5tYXhZKCk7Ci0gICAgICAgICAgICBtX3N0cmV0Y2hXaWR0aCA9IGFk
dmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OlN0
cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KSB7CisgICAgICAgICAgICBtX3N0cmV0Y2hXaWR0aCA9
IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fdmFyaWFudCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9z
dHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseSkgewogICAgICAgICAgICAg
RmxvYXRSZWN0IGdseXBoQm91bmRzOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVC
YXNlbGluZSA9IDA7CiAgICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSAw
OwogCi0gICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJh
dG9yLm1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0KTsKKyAgICAgICAgICAgIGdseXBoQm91bmRzID0g
Ym91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5ib3R0b21PckxlZnQpOwogICAgICAgICAgICAgbV9z
dHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRj
aEhlaWdodEFib3ZlQmFzZWxpbmUsIC1nbHlwaEJvdW5kcy55KCkpOwogICAgICAgICAgICAgbV9z
dHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNo
RGVwdGhCZWxvd0Jhc2VsaW5lLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwogCi0gICAgICAgICAgICBn
bHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkudG9w
T3JSaWdodCk7CisgICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNz
ZW1ibHkudG9wT3JSaWdodCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2Vs
aW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwg
LWdseXBoQm91bmRzLnkoKSk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxp
bmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGds
eXBoQm91bmRzLm1heFkoKSk7CiAKLSAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9y
R2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5leHRlbnNpb24pOworICAgICAgICAgICAg
Z2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbik7CiAgICAg
ICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5p
dD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgLWdseXBoQm91bmRzLnkoKSk7CiAgICAg
ICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0
PihtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1heFkoKSk7CiAKLSAg
ICAgICAgICAgIGlmIChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9w
ZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxlKTsKKyAgICAgICAgICAgIGlmIChtX2Fzc2VtYmx5Lm1p
ZGRsZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0Zv
ckdseXBoKG1fYXNzZW1ibHkubWlkZGxlKTsKICAgICAgICAgICAgICAgICBtX3N0cmV0Y2hIZWln
aHRBYm92ZUJhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoSGVpZ2h0QWJv
dmVCYXNlbGluZSwgLWdseXBoQm91bmRzLnkoKSk7CiAgICAgICAgICAgICAgICAgbV9zdHJldGNo
RGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoRGVwdGhC
ZWxvd0Jhc2VsaW5lLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwogICAgICAgICAgICAgfQpAQCAtNDQ0
LDU0ICs2ODYsMjM3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkK
IAogT3B0aW9uYWw8aW50PiBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Zmlyc3RMaW5lQmFzZWxpbmUo
KSBjb25zdAogewotICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpKQorICAgIGlm
IChtX3N0cmV0Y2hUeXBlICE9IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZCkKICAgICAgICAgcmV0
dXJuIE9wdGlvbmFsPGludD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSk7CiAgICAgcmV0
dXJuIFJlbmRlck1hdGhNTFRva2VuOjpmaXJzdExpbmVCYXNlbGluZSgpOwogfQogCiB2b2lkIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFs
dWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKIHsKLSAgICBpZiAobV9tYXRoT3BlcmF0b3IuaXNT
dHJldGNoZWQoKSkKKyAgICBpZiAobV9zdHJldGNoVHlwZSAhPSBTdHJldGNoVHlwZTo6VW5zdHJl
dGNoZWQpCiAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2Vs
aW5lICsgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lOwogICAgIFJlbmRlckJveDo6Y29tcHV0
ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCwgbG9naWNhbFRvcCwgY29tcHV0ZWRWYWx1ZXMp
OwogfQogCitMYXlvdXRSZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEdseXBoKFBhaW50
SW5mbyYgaW5mbywgY29uc3QgR2x5cGhEYXRhJiBkYXRhLCBjb25zdCBMYXlvdXRQb2ludCYgb3Jp
Z2luLCBHbHlwaFBhaW50VHJpbW1pbmcgdHJpbSkKK3sKKyAgICBGbG9hdFJlY3QgZ2x5cGhCb3Vu
ZHMgPSBib3VuZHNGb3JHbHlwaChkYXRhKTsKKworICAgIExheW91dFJlY3QgZ2x5cGhQYWludFJl
Y3Qob3JpZ2luLCBMYXlvdXRTaXplKGdseXBoQm91bmRzLngoKSArIGdseXBoQm91bmRzLndpZHRo
KCksIGdseXBoQm91bmRzLmhlaWdodCgpKSk7CisgICAgZ2x5cGhQYWludFJlY3Quc2V0WShvcmln
aW4ueSgpICsgZ2x5cGhCb3VuZHMueSgpKTsKKworICAgIC8vIEluIG9yZGVyIHRvIGhhdmUgZ2x5
cGhzIGZpdCBzbnVnbHkgd2l0aCBvbmUgYW5vdGhlciB3ZSBzbmFwIHRoZSBjb25uZWN0aW5nIGVk
Z2VzIHRvIHBpeGVsIGJvdW5kYXJpZXMKKyAgICAvLyBhbmQgdHJpbSBvZmYgb25lIHBpeGVsLiBU
aGUgcGl4ZWwgdHJpbSBpcyB0byBhY2NvdW50IGZvciBmb250cyB0aGF0IGhhdmUgZWRnZSBwaXhl
bHMgdGhhdCBoYXZlIGxlc3MKKyAgICAvLyB0aGFuIGZ1bGwgY292ZXJhZ2UuIFRoZXNlIGVkZ2Ug
cGl4ZWxzIGNhbiBpbnRyb2R1Y2Ugc21hbGwgc2VhbXMgYmV0d2VlbiBjb25uZWN0ZWQgZ2x5cGhz
LgorICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzID0gaW5mby5yZWN0OworICAgIHN3aXRjaCAodHJp
bSkgeworICAgIGNhc2UgVHJpbVRvcDoKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRZRWRn
ZVRvKGdseXBoUGFpbnRSZWN0LnkoKS5jZWlsKCkgKyAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5z
aGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBUcmltQm90dG9tOgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFlFZGdlVG8oZ2x5
cGhQYWludFJlY3QubWF4WSgpLmZsb29yKCkgLSAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlm
dE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBUcmltVG9wQW5kQm90dG9tOgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdl
VG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwoKSArIDEpOworICAgICAgICBnbHlwaFBhaW50UmVj
dC5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpLmZsb29yKCkgLSAxKTsKKyAg
ICAgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpKTsKKyAgICAg
ICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmltTGVmdDoKKyAgICAgICAgZ2x5cGhQYWludFJlY3Qu
c2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKS5jZWlsKCkgKyAxKTsKKyAgICAgICAgY2xp
cEJvdW5kcy5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUcmltUmlnaHQ6CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WEVk
Z2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkuZmxvb3IoKSAtIDEpOworICAgICAgICBjbGlwQm91
bmRzLnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRyaW1MZWZ0QW5kUmlnaHQ6CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNo
aWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkuY2VpbCgpICsgMSk7CisgICAgICAgIGdseXBo
UGFpbnRSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkuZmxvb3IoKSAt
IDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkp
OworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhY
KCkpOworICAgIH0KKworICAgIC8vIENsaXBwaW5nIHRoZSBlbmNsb3NpbmcgSW50UmVjdCBhdm9p
ZHMgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXQgam9pbmVkIGVkZ2VzLgorICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihpbmZvLmNvbnRleHQoKSk7CisgICAgaW5mby5jb250
ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKKworICAgIEdseXBoQnVmZmVyIGJ1ZmZlcjsKKyAgICBi
dWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZGF0
YSkpOworICAgIGluZm8uY29udGV4dCgpLmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgp
LCAqZGF0YS5mb250LCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CisKKyAgICByZXR1cm4gZ2x5cGhQ
YWludFJlY3Q7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRoVmVydGlj
YWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9t
LCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCit7CisgICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7Cisg
ICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkpOwor
ICAgIEFTU0VSVChtX2Fzc2VtYmx5LmV4dGVuc2lvbi5pc1ZhbGlkKCkpOworICAgIEFTU0VSVChm
cm9tLnkoKSA8PSB0by55KCkpOworCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRo
ZSBleHRlbnNpb24gZ2x5cGgsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAgaWYg
KGZyb20ueSgpID09IHRvLnkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKKworICAgIEZsb2F0UmVj
dCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkuZXh0ZW5zaW9uKTsKKwor
ICAgIC8vIENsaXBwaW5nIHRoZSBleHRlbmRlciByZWdpb24gaGVyZSBhbGxvd3MgdXMgdG8gZHJh
dyB0aGUgYm90dG9tIGV4dGVuZGVyIGdseXBoIGludG8gdGhlCisgICAgLy8gcmVnaW9ucyBvZiB0
aGUgYm90dG9tIGdseXBoIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgb3ZlcmRyYXcgKGhhaXJ5IHBp
eGVscykgYW5kIHNpbXBsaWZpZXMgbGF0ZXIgY2xpcHBpbmcuCisgICAgTGF5b3V0UmVjdCBjbGlw
Qm91bmRzID0gaW5mby5yZWN0OworICAgIGNsaXBCb3VuZHMuc2hpZnRZRWRnZVRvKGZyb20ueSgp
KTsKKyAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyh0by55KCkpOworICAgIGluZm8uY29u
dGV4dCgpLmNsaXAoY2xpcEJvdW5kcyk7CisKKyAgICAvLyBUcmltbWluZyBtYXkgcmVtb3ZlIHVw
IHRvIHR3byBwaXhlbHMgZnJvbSB0aGUgdG9wIG9mIHRoZSBleHRlbmRlciBnbHlwaCwgc28gd2Ug
bW92ZSBpdCB1cCBieSB0d28gcGl4ZWxzLgorICAgIGZsb2F0IG9mZnNldFRvR2x5cGhUb3AgPSBn
bHlwaEJvdW5kcy55KCkgKyAyOworICAgIExheW91dFBvaW50IGdseXBoT3JpZ2luID0gTGF5b3V0
UG9pbnQoZnJvbS54KCksIGZyb20ueSgpIC0gb2Zmc2V0VG9HbHlwaFRvcCk7CisgICAgRmxvYXRS
ZWN0IGxhc3RQYWludGVkR2x5cGhSZWN0KGZyb20sIEZsb2F0U2l6ZSgpKTsKKworICAgIHdoaWxl
IChsYXN0UGFpbnRlZEdseXBoUmVjdC5tYXhZKCkgPCB0by55KCkpIHsKKyAgICAgICAgbGFzdFBh
aW50ZWRHbHlwaFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHkuZXh0ZW5zaW9uLCBn
bHlwaE9yaWdpbiwgVHJpbVRvcEFuZEJvdHRvbSk7CisgICAgICAgIGdseXBoT3JpZ2luLnNldFko
Z2x5cGhPcmlnaW4ueSgpICsgbGFzdFBhaW50ZWRHbHlwaFJlY3QuaGVpZ2h0KCkpOworCisgICAg
ICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB0aGUgZm9udCBzaXplIGlzIHNtYWxsIGVu
b3VnaCB0aGUgZ2x1ZSBnbHlwaCBoYXMgYmVlbiByZWR1Y2VkIHRvIGFuIGVtcHR5IHJlY3Rhbmds
ZQorICAgICAgICAvLyB3aXRoIHRyaW1taW5nLiBJbiB0aGF0IGNhc2Ugd2UganVzdCBkcmF3IG5v
dGhpbmcuCisgICAgICAgIGlmIChsYXN0UGFpbnRlZEdseXBoUmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZp
bGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bykKK3sKKyAgICBBU1NFUlQoIW1f
aXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6Okds
eXBoQXNzZW1ibHkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5LmV4dGVuc2lvbi5pc1ZhbGlkKCkp
OworICAgIEFTU0VSVChmcm9tLngoKSA8PSB0by54KCkpOworCisgICAgLy8gSWYgdGhlcmUgaXMg
bm8gc3BhY2UgZm9yIHRoZSBleHRlbnNpb24gZ2x5cGgsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55
dGhpbmcuCisgICAgaWYgKGZyb20ueCgpID09IHRvLngoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsK
KworICAgIC8vIENsaXBwaW5nIHRoZSBleHRlbmRlciByZWdpb24gaGVyZSBhbGxvd3MgdXMgdG8g
ZHJhdyB0aGUgYm90dG9tIGV4dGVuZGVyIGdseXBoIGludG8gdGhlCisgICAgLy8gcmVnaW9ucyBv
ZiB0aGUgYm90dG9tIGdseXBoIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgb3ZlcmRyYXcgKGhhaXJ5
IHBpeGVscykgYW5kIHNpbXBsaWZpZXMgbGF0ZXIgY2xpcHBpbmcuCisgICAgTGF5b3V0UmVjdCBj
bGlwQm91bmRzID0gaW5mby5yZWN0OworICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGZyb20u
eCgpKTsKKyAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyh0by54KCkpOworICAgIGluZm8u
Y29udGV4dCgpLmNsaXAoY2xpcEJvdW5kcyk7CisKKyAgICAvLyBUcmltbWluZyBtYXkgcmVtb3Zl
IHVwIHRvIHR3byBwaXhlbHMgZnJvbSB0aGUgbGVmdCBvZiB0aGUgZXh0ZW5kZXIgZ2x5cGgsIHNv
IHdlIG1vdmUgaXQgbGVmdCBieSB0d28gcGl4ZWxzLgorICAgIGZsb2F0IG9mZnNldFRvR2x5cGhM
ZWZ0ID0gLTI7CisgICAgTGF5b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlvdXRQb2ludChmcm9t
LngoKSArIG9mZnNldFRvR2x5cGhMZWZ0LCBzdGQ6Om1pbihmcm9tLnkoKSwgdG8ueSgpKSArIG1f
c3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUpOworICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEds
eXBoUmVjdChmcm9tLCBGbG9hdFNpemUoKSk7CisKKyAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlw
aFJlY3QubWF4WCgpIDwgdG8ueCgpKSB7CisgICAgICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0g
cGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LmV4dGVuc2lvbiwgZ2x5cGhPcmlnaW4sIFRyaW1M
ZWZ0QW5kUmlnaHQpOworICAgICAgICBnbHlwaE9yaWdpbi5zZXRYKGdseXBoT3JpZ2luLngoKSAr
IGxhc3RQYWludGVkR2x5cGhSZWN0LndpZHRoKCkpOworCisgICAgICAgIC8vIFRoZXJlJ3MgYSBj
aGFuY2UgdGhhdCBpZiB0aGUgZm9udCBzaXplIGlzIHNtYWxsIGVub3VnaCB0aGUgZ2x1ZSBnbHlw
aCBoYXMgYmVlbiByZWR1Y2VkIHRvIGFuIGVtcHR5IHJlY3RhbmdsZQorICAgICAgICAvLyB3aXRo
IHRyaW1taW5nLiBJbiB0aGF0IGNhc2Ugd2UganVzdCBkcmF3IG5vdGhpbmcuCisgICAgICAgIGlm
IChsYXN0UGFpbnRlZEdseXBoUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KFBhaW50SW5mbyYgaW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIFJlbmRlck1hdGhNTFRv
a2VuOjpwYWludChpbmZvLCBwYWludE9mZnNldCk7CiAKLSAgICBpZiAoaW5mby5jb250ZXh0KCku
cGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQg
fHwgc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCAhbV9tYXRoT3BlcmF0b3IuaXNT
dHJldGNoZWQoKSkKKyAgICBpZiAoaW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpIHx8
IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSB8fCBtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hl
ZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKICAgICBpbmZvLmNvbnRleHQoKS5zZXRGaWxsQ29sb3Io
c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpOwogCi0gICAg
aWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTdHJldGNo
VHlwZTo6U2l6ZVZhcmlhbnQpIHsKLSAgICAgICAgQVNTRVJUKG1fbWF0aE9wZXJhdG9yLm1fdmFy
aWFudC5pc1ZhbGlkKCkpOworICAgIGlmIChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpT
aXplVmFyaWFudCkgeworICAgICAgICBBU1NFUlQobV92YXJpYW50LmlzVmFsaWQoKSk7CiAgICAg
ICAgIEdseXBoQnVmZmVyIGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyLmFkZChtX21hdGhPcGVyYXRv
ci5tX3ZhcmlhbnQuZ2x5cGgsIG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudC5mb250LCBhZHZhbmNl
V2lkdGhGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpKTsKKyAgICAgICAgYnVmZmVy
LmFkZChtX3ZhcmlhbnQuZ2x5cGgsIG1fdmFyaWFudC5mb250LCBhZHZhbmNlV2lkdGhGb3JHbHlw
aChtX3ZhcmlhbnQpKTsKICAgICAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gY2Vp
bGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpKTsKLSAgICAgICAgRmxvYXRSZWN0
IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsK
KyAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV92YXJpYW50
KTsKICAgICAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0Lngo
KSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAtIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIGluZm8u
Y29udGV4dCgpLmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV9tYXRoT3BlcmF0
b3IubV92YXJpYW50LmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOworICAgICAg
ICBpbmZvLmNvbnRleHQoKS5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fdmFy
aWFudC5mb250LCBidWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIG1fbWF0aE9wZXJhdG9yLm1fYXNjZW50ID0gbV9zdHJldGNoSGVpZ2h0
QWJvdmVCYXNlbGluZTsKLSAgICBtX21hdGhPcGVyYXRvci5tX2Rlc2NlbnQgPSBtX3N0cmV0Y2hE
ZXB0aEJlbG93QmFzZWxpbmU7Ci0gICAgbV9tYXRoT3BlcmF0b3IubV93aWR0aCA9IGxvZ2ljYWxX
aWR0aCgpOwotICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IHBhaW50T2Zmc2V0ICsg
bG9jYXRpb24oKTsKLSAgICBvcGVyYXRvclRvcExlZnQubW92ZShzdHlsZSgpLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IG1fbGVhZGluZ1NwYWNlIDogbV90cmFpbGluZ1NwYWNlLCAwKTsKICAg
ICBpZiAobV9pc1ZlcnRpY2FsKQotICAgICAgICBtX21hdGhPcGVyYXRvci5wYWludFZlcnRpY2Fs
R2x5cGhBc3NlbWJseShzdHlsZSgpLCBpbmZvLCBvcGVyYXRvclRvcExlZnQpOworICAgICAgICBw
YWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShpbmZvLCBwYWludE9mZnNldCk7CiAgICAgZWxzZQot
ICAgICAgICBtX21hdGhPcGVyYXRvci5wYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KHN0eWxl
KCksIGluZm8sIG9wZXJhdG9yVG9wTGVmdCk7CisgICAgICAgIHBhaW50SG9yaXpvbnRhbEdseXBo
QXNzZW1ibHkoaW5mbywgcGFpbnRPZmZzZXQpOworfQorCit2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShQYWludEluZm8mIGluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsKKyAg
ICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseSk7Cisg
ICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wT3JSaWdodC5pc1ZhbGlkKCkpOworICAgIEFTU0VSVCht
X2Fzc2VtYmx5LmJvdHRvbU9yTGVmdC5pc1ZhbGlkKCkpOworCisgICAgLy8gV2UgYXJlIHBvc2l0
aW9uaW5nIHRoZSBnbHlwaHMgc28gdGhhdCB0aGUgZWRnZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91
bmRzIGxpbmUgdXAgZXhhY3RseSB3aXRoIHRoZSBlZGdlcyBvZiBvdXIgcGFpbnQgYm94LgorICAg
IExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsK
KyAgICBvcGVyYXRvclRvcExlZnQubW92ZShzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IG1fbGVhZGluZ1NwYWNlIDogbV90cmFpbGluZ1NwYWNlLCAwKTsKKyAgICBvcGVyYXRvclRv
cExlZnQgPSBjZWlsZWRJbnRQb2ludChvcGVyYXRvclRvcExlZnQpOworICAgIEZsb2F0UmVjdCB0
b3BHbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkudG9wT3JSaWdodCk7Cisg
ICAgTGF5b3V0UG9pbnQgdG9wR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0
b3JUb3BMZWZ0LnkoKSAtIHRvcEdseXBoQm91bmRzLnkoKSk7CisgICAgTGF5b3V0UmVjdCB0b3BH
bHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS50b3BPclJpZ2h0LCB0
b3BHbHlwaE9yaWdpbiwgVHJpbUJvdHRvbSk7CisKKyAgICBGbG9hdFJlY3QgYm90dG9tR2x5cGhC
b3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCk7CisgICAgTGF5
b3V0UG9pbnQgYm90dG9tR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JU
b3BMZWZ0LnkoKSArIG9mZnNldEhlaWdodCgpIC0gKGJvdHRvbUdseXBoQm91bmRzLmhlaWdodCgp
ICsgYm90dG9tR2x5cGhCb3VuZHMueSgpKSk7CisgICAgTGF5b3V0UmVjdCBib3R0b21HbHlwaFBh
aW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5ib3R0b21PckxlZnQsIGJvdHRv
bUdseXBoT3JpZ2luLCBUcmltVG9wKTsKKworICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgLy8gQ2VudGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUg
c3RhcnQgYW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRzLiBUaGVuIHNoaWZ0IGl0IGhhbGYgdGhl
IHBhaW50IGhlaWdodCB0b3dhcmQgdGhlIGJvdHRvbSBnbHlwaC4KKyAgICAgICAgRmxvYXRSZWN0
IG1pZGRsZUdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5taWRkbGUpOwor
ICAgICAgICBMYXlvdXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgp
LCB0b3BHbHlwaE9yaWdpbi55KCkpOworICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnko
TGF5b3V0UG9pbnQoMCwgKGJvdHRvbUdseXBoUGFpbnRSZWN0LnkoKSAtIHRvcEdseXBoUGFpbnRS
ZWN0Lm1heFkoKSkgLyAyLjApKTsKKyAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExh
eW91dFBvaW50KDAsIG1pZGRsZUdseXBoQm91bmRzLmhlaWdodCgpIC8gMi4wKSk7CisKKyAgICAg
ICAgTGF5b3V0UmVjdCBtaWRkbGVHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9h
c3NlbWJseS5taWRkbGUsIG1pZGRsZUdseXBoT3JpZ2luLCBUcmltVG9wQW5kQm90dG9tKTsKKyAg
ICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGluZm8sIHRvcEdseXBoUGFpbnRS
ZWN0Lm1pblhNYXhZQ29ybmVyKCksIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVy
KCkpOworICAgICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoaW5mbywgbWlkZGxl
R2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgYm90dG9tR2x5cGhQYWludFJlY3QubWlu
WE1pbllDb3JuZXIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRl
bnNpb25HbHlwaChpbmZvLCB0b3BHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBib3R0
b21HbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKK30KKwordm9pZCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShQYWludEluZm8mIGluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKK3sKKyAgICBBU1NFUlQoIW1faXNWZXJ0
aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OkdseXBoQXNz
ZW1ibHkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdC5pc1ZhbGlkKCkpOwor
ICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQuaXNWYWxpZCgpKTsKKworICAgIC8vIFdl
IGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRoYXQgdGhlIGVkZ2Ugb2YgdGhlIHRpZ2h0
IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0aCB0aGUgZWRnZXMgb2Ygb3VyIHBhaW50
IGJveC4KKyAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBwYWludE9mZnNldCArIGxv
Y2F0aW9uKCk7CisgICAgb3BlcmF0b3JUb3BMZWZ0Lm1vdmUobV9sZWFkaW5nU3BhY2UsIDApOwor
ICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9wZXJhdG9yVG9wTGVmdCk7Cisg
ICAgTGF5b3V0UG9pbnQgbGVmdEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJh
dG9yVG9wTGVmdC55KCkgKyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKKyAgICBMYXlv
dXRSZWN0IGxlZnRHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5i
b3R0b21PckxlZnQsIGxlZnRHbHlwaE9yaWdpbiwgVHJpbVJpZ2h0KTsKKworICAgIEZsb2F0UmVj
dCByaWdodEdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS50b3BPclJpZ2h0
KTsKKyAgICBMYXlvdXRQb2ludCByaWdodEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCkg
KyBvZmZzZXRXaWR0aCgpIC0gcmlnaHRHbHlwaEJvdW5kcy53aWR0aCgpLCBvcGVyYXRvclRvcExl
ZnQueSgpICsgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSk7CisgICAgTGF5b3V0UmVjdCBy
aWdodEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LnRvcE9yUmln
aHQsIHJpZ2h0R2x5cGhPcmlnaW4sIFRyaW1MZWZ0KTsKKworICAgIGlmIChtX2Fzc2VtYmx5Lm1p
ZGRsZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gQ2VudGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0
d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRzLgorICAgICAgICBMYXlv
dXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBsZWZ0R2x5cGhP
cmlnaW4ueSgpKTsKKyAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBvaW50
KChyaWdodEdseXBoUGFpbnRSZWN0LngoKSAtIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYKCkpIC8g
Mi4wLCAwKSk7CisgICAgICAgIExheW91dFJlY3QgbWlkZGxlR2x5cGhQYWludFJlY3QgPSBwYWlu
dEdseXBoKGluZm8sIG1fYXNzZW1ibHkubWlkZGxlLCBtaWRkbGVHbHlwaE9yaWdpbiwgVHJpbUxl
ZnRBbmRSaWdodCk7CisgICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGlu
Zm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpLCBtaWRkbGVHbHlwaFBhaW50
UmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5z
aW9uR2x5cGgoaW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSwgcmln
aHRHbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoaW5mbywgbGVmdEdseXBoUGFpbnRSZWN0
Lm1heFhNaW5ZQ29ybmVyKCksIHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7
CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgUGFpbnRJbmZvJiBw
YWludEluZm9Gb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpCiB7CiAgICAgLy8gV2Ugc2tpcCBw
YWludGluZyBmb3IgaW52aXNpYmxlIG9wZXJhdG9ycyB0b28gdG8gYXZvaWQgc29tZSAibWlzc2lu
ZyBjaGFyYWN0ZXIiIGdseXBoIHRvIGFwcGVhciBpZiBhcHByb3ByaWF0ZSBtYXRoIGZvbnRzIGFy
ZSBub3QgYXZhaWxhYmxlLgotICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpIHx8
IGlzSW52aXNpYmxlT3BlcmF0b3IoKSkKKyAgICBpZiAobV9zdHJldGNoVHlwZSAhPSBTdHJldGNo
VHlwZTo6VW5zdHJldGNoZWQgfHwgaXNJbnZpc2libGVPcGVyYXRvcigpKQogICAgICAgICByZXR1
cm47CiAgICAgUmVuZGVyTWF0aE1MVG9rZW46OnBhaW50Q2hpbGRyZW4ocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCwgcGFpbnRJbmZvRm9yQ2hpbGQsIHVzZVByaW50UmVjdCk7CiB9CkBAIC01MDYsMTkg
KzkzMSwxOSBAQCBMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluZ1NwYWNl
RXJyb3IoKQogICAgIC8vIEhlbmNlIHdlIGRldGVybWluZSB0aGUgZXJyb3IgaW4gdGhlIGxvZ2lj
YWwgd2lkdGggd2l0aCByZXNwZWN0IHRvIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIGdseXBoKHMp
IHVzZWQgdG8gcGFpbnQgdGhlIG9wZXJhdG9yLgogICAgIExheW91dFVuaXQgd2lkdGggPSBsb2dp
Y2FsV2lkdGgoKTsKIAotICAgIGlmICghbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkgewor
ICAgIGlmIChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZCkgewogICAg
ICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIodGV4dENvbnRlbnQoKSwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KTsKICAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRoRm9yR2x5cGgoZGF0YSk7CiAg
ICAgfQogCi0gICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJh
dG9yOjpTdHJldGNoVHlwZTo6U2l6ZVZhcmlhbnQpCi0gICAgICAgIHJldHVybiB3aWR0aCAtIGFk
dmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CisgICAgaWYgKG1f
c3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OlNpemVWYXJpYW50KQorICAgICAgICByZXR1cm4g
d2lkdGggLSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX3ZhcmlhbnQpOwogCi0gICAgZmxvYXQgYXNz
ZW1ibHlXaWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1i
bHkudG9wT3JSaWdodCk7Ci0gICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lk
dGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkuYm90dG9t
T3JMZWZ0KSk7Ci0gICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFk
dmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkuZXh0ZW5zaW9uKSk7
Ci0gICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkKLSAg
ICAgICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0
aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxlKSk7CisgICAgZmxvYXQg
YXNzZW1ibHlXaWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1ibHkudG9wT3JSaWdo
dCk7CisgICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VX
aWR0aEZvckdseXBoKG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0KSk7CisgICAgYXNzZW1ibHlXaWR0
aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1i
bHkuZXh0ZW5zaW9uKSk7CisgICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkKKyAg
ICAgICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0
aEZvckdseXBoKG1fYXNzZW1ibHkubWlkZGxlKSk7CiAgICAgcmV0dXJuIHdpZHRoIC0gYXNzZW1i
bHlXaWR0aDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCmluZGV4IDYzMjE0OWMuLmRjYTQ1NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmgKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNpbmNsdWRl
ICJNYXRoTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5Lmgi
Ci0jaW5jbHVkZSAiTWF0aE9wZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5o
IgogI2luY2x1ZGUgIlJlbmRlck1hdGhNTFRva2VuLmgiCiAKQEAgLTUyLDcgKzUxLDcgQEAgcHVi
bGljOgogICAgIC8vIEZJWE1FOiBUaGUgZGlzcGxheXN0eWxlIHByb3BlcnR5IGlzIG5vdCBpbXBs
ZW1lbnRlZCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODczNyku
CiAgICAgYm9vbCBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
ICFoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpTdHJldGNoeSkgJiYg
aGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6TGFyZ2VPcCk7IH0KICAg
ICBib29sIGlzVmVydGljYWwoKSBjb25zdCB7IHJldHVybiBtX2lzVmVydGljYWw7IH0KLSAgICBM
YXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX21hdGhPcGVyYXRv
ci5pdGFsaWNDb3JyZWN0aW9uKCk7IH0KKyAgICBMYXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb247IH0KIAogICAgIHZvaWQgc3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIGZp
bmFsOwogICAgIHZvaWQgdXBkYXRlU3R5bGUoKSBmaW5hbDsKQEAgLTc0LDYgKzczLDIwIEBAIHBy
b3RlY3RlZDoKICAgICBVQ2hhciB0ZXh0Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENv
bnRlbnQ7IH0KIAogcHJpdmF0ZToKKyAgICBzdHJ1Y3QgR2x5cGhBc3NlbWJseURhdGEgeworICAg
ICAgICBHbHlwaERhdGEgdG9wT3JSaWdodDsKKyAgICAgICAgR2x5cGhEYXRhIGV4dGVuc2lvbjsK
KyAgICAgICAgR2x5cGhEYXRhIGJvdHRvbU9yTGVmdDsKKyAgICAgICAgR2x5cGhEYXRhIG1pZGRs
ZTsKKyAgICB9OworICAgIGVudW0gY2xhc3MgU3RyZXRjaFR5cGUgeyBVbnN0cmV0Y2hlZCwgU2l6
ZVZhcmlhbnQsIEdseXBoQXNzZW1ibHkgfTsKKyAgICBTdHJldGNoVHlwZSBtX3N0cmV0Y2hUeXBl
OworICAgIHVuaW9uIHsKKyAgICAgICAgR2x5cGhEYXRhIG1fdmFyaWFudDsKKyAgICAgICAgR2x5
cGhBc3NlbWJseURhdGEgbV9hc3NlbWJseTsKKyAgICB9OworICAgIExheW91dFVuaXQgbV9pdGFs
aWNDb3JyZWN0aW9uOworCiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGlzQW5vbnltb3VzKCkgPyAiUmVuZGVyTWF0aE1MT3BlcmF0b3IgKGFub255
bW91cykiIDogIlJlbmRlck1hdGhNTE9wZXJhdG9yIjsgfQogICAgIHZvaWQgcGFpbnRDaGlsZHJl
bihQYWludEluZm8mIGZvclNlbGYsIGNvbnN0IExheW91dFBvaW50JiwgUGFpbnRJbmZvJiBmb3JD
aGlsZCwgYm9vbCB1c2VQcmludFJlY3QpIGZpbmFsOwogICAgIGJvb2wgaXNSZW5kZXJNYXRoTUxP
cGVyYXRvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KQEAgLTg3LDYgKzEwMCwyNyBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSBjb25zdDsKIAor
ICAgIGJvb2wgZ2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgR2x5cGhEYXRhJikgY29u
c3Q7CisgICAgdm9pZCBzZXRTaXplVmFyaWFudChjb25zdCBHbHlwaERhdGEmKTsKKyAgICB2b2lk
IHNldEdseXBoQXNzZW1ibHkoY29uc3QgR2x5cGhBc3NlbWJseURhdGEmKTsKKyAgICBib29sIGNh
bGN1bGF0ZUdseXBoQXNzZW1ibHlGYWxsQmFjayhjb25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0
YTo6QXNzZW1ibHlQYXJ0PiYsIEdseXBoQXNzZW1ibHlEYXRhJikgY29uc3Q7CisgICAgdm9pZCBj
YWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKCk7CisgICAgdm9pZCBjYWxjdWxhdGVT
dHJldGNoeURhdGEoZmxvYXQqIG1heGltdW1HbHlwaFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNp
emUgPSAwKTsKKworICAgIGVudW0gR2x5cGhQYWludFRyaW1taW5nIHsKKyAgICAgICAgVHJpbVRv
cCwKKyAgICAgICAgVHJpbUJvdHRvbSwKKyAgICAgICAgVHJpbVRvcEFuZEJvdHRvbSwKKyAgICAg
ICAgVHJpbUxlZnQsCisgICAgICAgIFRyaW1SaWdodCwKKyAgICAgICAgVHJpbUxlZnRBbmRSaWdo
dAorICAgIH07CisKKyAgICBMYXlvdXRSZWN0IHBhaW50R2x5cGgoUGFpbnRJbmZvJiwgY29uc3Qg
R2x5cGhEYXRhJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5n
KTsKKyAgICB2b2lkIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKKyAgICB2b2lk
IGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pOworICAgIHZvaWQgcGFpbnRWZXJ0
aWNhbEdseXBoQXNzZW1ibHkoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2
b2lkIHBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmKTsKICAgICB2b2lkIHNldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGUoTWF0aE1MT3Bl
cmF0b3JEaWN0aW9uYXJ5OjpGbGFnLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBz
ZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlVmFsdWUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5
OjpGbGFnLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKTsKICAgICB2b2lkIHNl
dE9wZXJhdG9yUHJvcGVydGllc0Zyb21PcERpY3RFbnRyeShjb25zdCBNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnk6OkVudHJ5Kik7CkBAIC0xMDMsNyArMTM3LDYgQEAgcHJpdmF0ZToKICAgICBMYXlv
dXRVbml0IG1fdHJhaWxpbmdTcGFjZTsKICAgICBMYXlvdXRVbml0IG1fbWluU2l6ZTsKICAgICBM
YXlvdXRVbml0IG1fbWF4U2l6ZTsKLSAgICBNYXRoT3BlcmF0b3IgbV9tYXRoT3BlcmF0b3I7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278605</attachid>
            <date>2016-05-11 02:18:16 -0700</date>
            <delta_ts>2016-06-08 23:24:13 -0700</delta_ts>
            <desc>Patch for EWS testing</desc>
            <filename>156950-EWS.patch</filename>
            <type>text/plain</type>
            <size>79408</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYTk4NGFlMC4uOTc4YTMzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTI1MTUsNiArMjUxNSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCiAKICAgICByZW5kZXJpbmcvbWF0aG1sL01h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHAKKyAgICByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5jcHAKICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAogICAg
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAogICAgIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjRhMmQ3Zi4uMzNi
ZGQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDE2LTA0LTI1ICBGcmVkZXJpYyBX
YW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgTWF0aE9wZXJhdG9y
OjpPcGVyYXRvclR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1Njk1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgYmVoYXZpb3IgaXMgbm90IGNoYW5nZS4KKworICAgICAgICBB
biBlbnVtIE9wZXJhdG9yVHlwZSBpcyBpbnRyb2R1Y2VkIGluIE1hdGhPcGVyYXRvciBpbiBvcmRl
ciB0byBpbmRpY2F0ZQorICAgICAgICB3aGljaCBraW5kIG9mIHN0cmV0Y2hpbmcgaXMgcmVxdWVz
dGVkLiBJbiBmb2xsb3ctdXAgd29yaywgdGhpcyB3aWxsCisgICAgICAgIGFsbG93IHRvIGp1c3Qg
Y2FsbCBzZXRPcGVyYXRvciBhbmQgc3RyZXRjaFRvIHdpdGhvdXQgaGF2aW5nIHRvCisgICAgICAg
IGV4cGxpY2l0bHkgY2FsbCBjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yIG9yIGNh
bGN1bGF0ZVN0cmV0Y2h5RGF0YS4KKworICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0aE9w
ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6TWF0aE9wZXJhdG9y
KTogVXNlIE9wZXJhdG9yVHlwZSBpbnN0ZWFkIG9mIGEgYm9vbGVhbi4KKyAgICAgICAgKFdlYkNv
cmU6Ok1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1hdGhPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseSk6IEFkZCBhbiBhc3NlcnQgdG8gZW5zdXJl
IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGNvcnJlY3RseSB1c2UuCisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6OmNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBEaXR0bywg
dGhpcyBtYWtlcyB0aGUgYXNzZXJ0IG1vcmUgYWNjdXJhdGUuCisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YSk6IERpdHRvIGFuZCByZXBsYWNlIG1f
aXNWZXJ0aWNhbCB3aXRoIGEgbG9jYWwgaXNWZXJ0aWNhbCB2YXJpYWJsZS4KKyAgICAgICAgKFdl
YkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4
dGVuc2lvbkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBh
aW50VmVydGljYWxHbHlwaEFzc2VtYmx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRo
T3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkpOiBEaXR0by4KKyAgICAgICAg
KiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oOiBBZGQgdGhlIE9wZXJhdG9yVHlwZSBl
bnVtLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzdHJldGNoU2l6ZSk6IFVzZSBP
cGVyYXRvclR5cGUgaW5zdGVhZCBvZiBhIGJvb2xlYW4uCisgICAgICAgICogcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBDYWxsIHNldE9w
ZXJhdG9yIHdpdGggdGhlIGNvcnJlY3QgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUpOiBEaXR0by4KKworMjAxNi0wNC0yMiAgRnJlZGVy
aWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAgTW92ZSBzZWxlY3Rpb24gYW5k
IGRyYXdpbmcgb2Ygc3RyZXRjaHkgb3BlcmF0b3JzIGludG8gYSBzZXBhcmF0ZSBNYXRoT3BlcmF0
b3IgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NjkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgYmVoYXZpb3IgaXMgbm90IGNoYW5nZWQuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDogQWRkIHRoZSBNYXRoT3BlcmF0b3IgZmlsZXMuCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcv
bWF0aG1sL01hdGhPcGVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRz
Rm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6aGVpZ2h0Rm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6YWR2YW5jZVdpZHRoRm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRl
ck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpNYXRoT3Bl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmdldEJhc2VHbHlwaCk6IE1vdmVkIGZyb20g
UmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNl
dFNpemVWYXJpYW50KTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseSk6IE1vdmVkIGZyb20gUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmNhbGN1
bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9w
ZXJhdG9yIHdpdGggYWRkaXRpb25hbCBzdHlsZSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3Jl
OjpNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZUdseXBoQXNzZW1ibHlGYWxsQmFjayk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRHbHlwaCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5z
aW9uR2x5cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmlsbFdp
dGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1h
dGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseSk6IERp
dHRvLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjppdGFsaWNDb3JyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6aXNTdHJldGNoZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWF0aE9wZXJhdG9yOjp1bnN0cmV0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJh
dG9yOjpHbHlwaEFzc2VtYmx5RGF0YTo6R2x5cGhBc3NlbWJseURhdGEpOiBNb3ZlZCBmcm9tIFJl
bmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzdHJl
dGNoU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBVcGRhdGVkIHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVy
cy4KKyAgICAgICAgRm9yIG5vdyB3ZSBjYWxsIHNldE9wZXJhdG9yIHRvIHRyYW5zbWl0IGluZm9y
bWF0aW9uIHRvIG1fbWF0aE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogVXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJl
cnMuCisgICAgICAgIEZvciBub3cgd2Ugc2V0IHNvbWUgbV9tYXRoT3BlcmF0b3IgbWVtYmVycyB0
byB0cmFuc21pdCBpdCBzb21lIGluZm9ybWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmZpcnN0TGluZUJhc2VsaW5lKTogVXBkYXRlZCB0byB1c2UgTWF0aE9w
ZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
Y29tcHV0ZUxvZ2ljYWxIZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpwYWludCk6IERpdHRvLgorICAgICAgICBGb3Igbm93IHdlIHNldCBzb21l
IG1fbWF0aE9wZXJhdG9yIG1lbWJlcnMgdG8gdHJhbnNtaXQgaXQgc29tZSBpbmZvcm1hdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENoaWxkcmVuKTog
VXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRTaXplVmFyaWFudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0R2x5
cGhBc3NlbWJseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6Y2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxCYWNrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJn
ZU9wZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJh
dG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5cGgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlw
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Zmls
bFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEhvcml6
b250YWxHbHlwaEFzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBt
ZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OkdseXBoQXNz
ZW1ibHlEYXRhOjpHbHlwaEFzc2VtYmx5RGF0YSk6IERlbGV0ZWQuCisKIDIwMTYtMDUtMDkgIERl
YW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIDxzZWxlY3Q+IGVs
ZW1lbnRzIHNob3VsZCByZW5kZXIgcmlnaHQtYWxpZ25lZCB3aGVuIGluIFJUTCBtb2RlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
N2FjMTAyZS4uYjRiNzA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY2NCw2ICsxNjY0LDggQEAKIAkJNDM5MDQ2RTgxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ0MTJEQTI1RTgwMEFGODBBMiAvKiBS
ZW5kZXJNYXRoTUxTY3JpcHRzLmggKi87IH07CiAJCTQzOTA0NkU5MTJEQTI1RTgwMEFGODBBMiAv
KiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TFVuZGVyT3Zlci5jcHAgKi87IH07CiAJCTQzOTA0NkVBMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92
ZXIuaCAqLzsgfTsKKwkJNDM5MDQ2RTkxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZE
NTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLzsgfTsKKwkJNDM5MDQ2RUEx
MkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDYxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhP
cGVyYXRvci5oICovOyB9OwogCQk0MzkwNDZFQjEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0
aE1MVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDM5MDQ2RDcxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCAqLzsg
fTsKIAkJNDM5MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZEODEyREEy
NUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCAqLzsgfTsKIAkJNDM5RDMzNDMxM0E2
OTExQzAwQzIwRjRGIC8qIFNWR0FuaW1hdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5RDMzNDAxM0E2OTExQzAwQzIwRjRGIC8qIFNWR0Fu
aW1hdGVkVHlwZS5oICovOyB9OwpAQCAtOTIwOCw2ICs5MjEwLDggQEAKIAkJNDM5MDQ2RDQxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MU2NyaXB0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MzkwNDZENTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJP
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhN
TFVuZGVyT3Zlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0NkQ2MTJE
QTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQzOTA0NkQ1MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE9wZXJhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2RDYxMkRBMjVFODEyQUY4MEFD
IC8qIE1hdGhPcGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRo
T3BlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDcxMkRBMjVF
ODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhNTFRva2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2Vu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTFRva2VuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOUQzMzQwMTNBNjkxMUMwMEMyMEY0RiAv
KiBTVkdBbmltYXRlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
QW5pbWF0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjkzNiw2ICsx
Njk0MCw4IEBACiAJCQkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRv
a2VuLmggKi8sCiAJCQkJNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVu
ZGVyT3Zlci5jcHAgKi8sCiAJCQkJNDM5MDQ2RDYxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1h
dGhNTFVuZGVyT3Zlci5oICovLAorCQkJCTQzOTA0NkQ1MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRo
T3BlcmF0b3IuY3BwICovLAorCQkJCTQzOTA0NkQ2MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3Bl
cmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWF0aG1sOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTI3NjUxLDYgKzI3NjU3LDcgQEAKIAkJCQk0MzkwNDZFNjEyREEyNUU4MDBB
RjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5
MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzkwNDZFQTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9w
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMyNzk1OTBDRjk3NDE5MDBFOTdCOTggLyog
UmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkNDREQyMTY2NDZFODIwMEE0NTJF
MSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFG
QTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzEzMjQsNiArMzEzMzEsNyBAQAogCQkJCTQzOTA0NkU1MTJEQTI1RTgwMEFGODBB
MiAvKiBSZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzOTA0
NkVCMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0MzkwNDZFOTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzOTA0NkU5MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRo
T3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRDMjc5NTgwQ0Y5NzQxOTAwRTk3Qjk4
IC8qIFJlbmRlck1lZGlhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFNDlCMzA5MTY1RjJGRTEw
MDEwMzM4RCAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MUZBMzAzRTEzMTZDMjlDMDBDMEJGQzUgLyogUmVuZGVyTWVkaWFDb250cm9scy5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvTWF0aE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0
aE9wZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGE1MzY1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRo
T3BlcmF0b3IuY3BwCkBAIC0wLDAgKzEsNTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorI2luY2x1ZGUgIk1hdGhP
cGVyYXRvci5oIgorCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUlu
aGVyaXRlZERhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIEZs
b2F0UmVjdCBib3VuZHNGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmIGRhdGEpCit7CisgICAgcmV0
dXJuIGRhdGEuaXNWYWxpZCgpID8gZGF0YS5mb250LT5ib3VuZHNGb3JHbHlwaChkYXRhLmdseXBo
KSA6IEZsb2F0UmVjdCgpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGhlaWdodEZvckdseXBo
KGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1cm4gYm91bmRzRm9yR2x5cGgoZGF0
YSkuaGVpZ2h0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYWR2YW5jZVdpZHRoRm9yR2x5
cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBkYXRhLmlzVmFsaWQoKSA/
IGRhdGEuZm9udC0+d2lkdGhGb3JHbHlwaChkYXRhLmdseXBoKSA6IDA7Cit9CisKKy8vIEZJWE1F
OiBUaGlzIGhhcmRjb2RlZCBkYXRhIGNhbiBiZSByZW1vdmVkIHdoZW4gT3BlblR5cGUgTUFUSCBm
b250IGFyZSB3aWRlbHkgYXZhaWxhYmxlIChodHRwOi8vd2tidWcvMTU2ODM3KS4KK3N0cnVjdCBT
dHJldGNoeUNoYXJhY3RlciB7CisgICAgVUNoYXIgY2hhcmFjdGVyOworICAgIFVDaGFyIHRvcENo
YXI7CisgICAgVUNoYXIgZXh0ZW5zaW9uQ2hhcjsKKyAgICBVQ2hhciBib3R0b21DaGFyOworICAg
IFVDaGFyIG1pZGRsZUNoYXI7Cit9OworLy8gVGhlIGZpcnN0IGxlZnRSaWdodFBhaXJzQ291bnQg
cGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3JpZ2h0IGZlbmNlcyB0aGF0IGNhbiBlYXNpbHkgYmUg
bWlycm9yZWQgaW4gUlRMLgorc3RhdGljIGNvbnN0IHNob3J0IGxlZnRSaWdodFBhaXJzQ291bnQg
PSA1Oworc3RhdGljIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyIHN0cmV0Y2h5Q2hhcmFjdGVyc1sx
NF0gPSB7CisgICAgeyAweDI4ICAsIDB4MjM5YiwgMHgyMzljLCAweDIzOWQsIDB4MCAgICB9LCAv
LyBsZWZ0IHBhcmVudGhlc2lzCisgICAgeyAweDI5ICAsIDB4MjM5ZSwgMHgyMzlmLCAweDIzYTAs
IDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRoZXNpcworICAgIHsgMHg1YiAgLCAweDIzYTEsIDB4
MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBzcXVhcmUgYnJhY2tldAorICAgIHsgMHg1
ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8gcmlnaHQgc3F1YXJlIGJy
YWNrZXQKKyAgICB7IDB4N2IgICwgMHgyM2E3LCAweDIzYWEsIDB4MjNhOSwgMHgyM2E4IH0sIC8v
IGxlZnQgY3VybHkgYnJhY2tldAorICAgIHsgMHg3ZCAgLCAweDIzYWIsIDB4MjNhYSwgMHgyM2Fk
LCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkgYnJhY2tldAorICAgIHsgMHgyMzA4LCAweDIzYTEs
IDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwgLy8gbGVmdCBjZWlsaW5nCisgICAgeyAweDIzMDks
IDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4MCAgICB9LCAvLyByaWdodCBjZWlsaW5nCisgICAg
eyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAweDIzYTMsIDB4MCAgICB9LCAvLyBsZWZ0IGZsb29y
CisgICAgeyAweDIzMGIsIDB4MjNhNSwgMHgyM2E1LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdo
dCBmbG9vcgorICAgIHsgMHg3YyAgLCAweDdjLCAgIDB4N2MsICAgMHg3YywgICAweDAgICAgfSwg
Ly8gdmVydGljYWwgYmFyCisgICAgeyAweDIwMTYsIDB4MjAxNiwgMHgyMDE2LCAweDIwMTYsIDB4
MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwgbGluZQorICAgIHsgMHgyMjI1LCAweDIyMjUsIDB4
MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8gcGFyYWxsZWwgdG8KKyAgICB7IDB4MjIyYiwgMHgy
MzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0gLy8gaW50ZWdyYWwgc2lnbgorfTsKKworTWF0
aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IoKQorICAgIDogbV9iYXNlQ2hhcmFjdGVyKDApCisgICAg
LCBtX29wZXJhdG9yVHlwZShPcGVyYXRvclR5cGU6OlVuZGVmaW5lZE9wZXJhdG9yKQorICAgICwg
bV9zdHJldGNoVHlwZShTdHJldGNoVHlwZTo6VW5zdHJldGNoZWQpCisgICAgLCBtX3dpZHRoKDAp
CisgICAgLCBtX2FzY2VudCgwKQorICAgICwgbV9kZXNjZW50KDApCisgICAgLCBtX2l0YWxpY0Nv
cnJlY3Rpb24oMCkKK3sKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKFVDaGFy
IGJhc2VDaGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSBvcGVyYXRvclR5cGUpCit7CisgICAgbV9iYXNl
Q2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlcjsKKyAgICBtX29wZXJhdG9yVHlwZSA9IG9wZXJhdG9y
VHlwZTsKK30KKworYm9vbCBNYXRoT3BlcmF0b3I6OmdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEdseXBoRGF0YSYgYmFzZUdseXBoKSBjb25zdAoreworICAgIGJhc2VHbHlw
aCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fYmFzZUNoYXJh
Y3RlciwgIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgcmV0dXJuIGJhc2VH
bHlwaC5pc1ZhbGlkKCkgJiYgYmFzZUdseXBoLmZvbnQgPT0gJnN0eWxlLmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnQoKTsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnNldFNpemVWYXJpYW50KGNv
bnN0IEdseXBoRGF0YSYgc2l6ZVZhcmlhbnQpCit7CisgICAgQVNTRVJUKHNpemVWYXJpYW50Lmlz
VmFsaWQoKSAmJiBzaXplVmFyaWFudC5mb250LT5tYXRoRGF0YSgpKTsKKyAgICBtX3N0cmV0Y2hU
eXBlID0gU3RyZXRjaFR5cGU6OlNpemVWYXJpYW50OworICAgIG1fdmFyaWFudCA9IHNpemVWYXJp
YW50OworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseShjb25zdCBHbHlw
aEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlEYXRhKQoreworICAgIEFTU0VSVChtX29wZXJhdG9yVHlw
ZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3IgfHwgbV9vcGVyYXRvclR5cGUgPT0g
T3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3IpOworICAgIG1fc3RyZXRjaFR5cGUgPSBT
dHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseTsKKyAgICBtX2Fzc2VtYmx5ID0gYXNzZW1ibHlEYXRh
OworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVy
YXRvcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JU
eXBlID09IE9wZXJhdG9yVHlwZTo6RGlzcGxheU9wZXJhdG9yKTsKKworICAgIEdseXBoRGF0YSBi
YXNlR2x5cGg7CisgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkgfHwgIWJh
c2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8
R2x5cGg+IHNpemVWYXJpYW50czsKKyAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1i
bHlQYXJ0PiBhc3NlbWJseVBhcnRzOworCisgICAgLy8gVGhlIHZhbHVlIG9mIGRpc3BsYXlPcGVy
YXRvck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxsLCBzbyB3ZSBlbnN1cmUgdGhhdCBp
dCBpcyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6ZSBvZiB0aGUgYmFzZSBnbHlwaC4K
KyAgICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6Om1heChoZWlnaHRGb3JH
bHlwaChiYXNlR2x5cGgpICogc3FydE9mVHdvRmxvYXQsIGJhc2VHbHlwaC5mb250LT5tYXRoRGF0
YSgpLT5nZXRNYXRoQ29uc3RhbnQoKmJhc2VHbHlwaC5mb250LCBPcGVuVHlwZU1hdGhEYXRhOjpE
aXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQpKTsKKworICAgIGJhc2VHbHlwaC5mb250LT5tYXRoRGF0
YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCB0cnVlLCBzaXplVmFyaWFudHMs
IGFzc2VtYmx5UGFydHMpOworCisgICAgLy8gV2UgY2hvb3NlIHRoZSBmaXJzdCBzaXplIHZhcmlh
bnQgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgZXhwZWN0ZWQgZGlzcGxheU9wZXJhdG9yTWluSGVp
Z2h0IGFuZCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gdGhlIGxhcmdlc3QgdmFyaWFudC4KKyAgICBm
b3IgKGF1dG8mIHNpemVWYXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CisgICAgICAgIEdseXBoRGF0
YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKKyAgICAgICAgc2V0U2l6
ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKKyAgICAgICAgbV9pdGFsaWNDb3JyZWN0aW9uID0gZ2x5cGhE
YXRhLmZvbnQtPm1hdGhEYXRhKCktPmdldEl0YWxpY0NvcnJlY3Rpb24oKmdseXBoRGF0YS5mb250
LCBnbHlwaERhdGEuZ2x5cGgpOworICAgICAgICBpZiAoaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRh
KSA+PSBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK2Jvb2wgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVHbHlwaEFzc2VtYmx5RmFsbEJhY2so
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6
QXNzZW1ibHlQYXJ0PiYgYXNzZW1ibHlQYXJ0cywgR2x5cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5
RGF0YSkgY29uc3QKK3sKKyAgICAvLyBUaGUgc3RydWN0dXJlIG9mIHRoZSBPcGVuIFR5cGUgTWF0
aCB0YWJsZSBpcyBhIGJpdCBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb25lIGN1cnJlbnRseSB1c2Vk
IGJ5IHRoZSBNYXRoT3BlcmF0b3IgY29kZSwgc28gd2UgdHJ5IHRvIGZhbGxiYWNrIGluIGEgcmVh
c29uYWJsZSB3YXkuCisgICAgLy8gRklYTUU6IE1hdGhPcGVyYXRvciBzaG91bGQgc3VwcG9ydCB0
aGUgbW9zdCBnZW5lcmFsIGZvcm1hdCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMDMyNykuCisgICAgLy8gV2UgdXNlIHRoZSBhcHByb2FjaCBvZiB0aGUgY29weUNv
bXBvbmVudHMgZnVuY3Rpb24gaW4gZ2l0aHViLmNvbS9tYXRoamF4L01hdGhKYXgtZGV2L2Jsb2Iv
bWFzdGVyL2ZvbnRzL09wZW5UeXBlTWF0aC9mb250VXRpbC5weQorCisgICAgLy8gV2UgY291bnQg
dGhlIG51bWJlciBvZiBub24gZXh0ZW5kZXIgcGllY2VzLgorICAgIGludCBub25FeHRlbmRlckNv
dW50ID0gMDsKKyAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJseVBhcnRzKSB7CisgICAgICAg
IGlmICghcGFydC5pc0V4dGVuZGVyKQorICAgICAgICAgICAgbm9uRXh0ZW5kZXJDb3VudCsrOwor
ICAgIH0KKyAgICBpZiAobm9uRXh0ZW5kZXJDb3VudCA+IDMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB0aGVyZSBhcmUgdG9vIG1hbnkgcGllY2VzLgor
CisgICAgLy8gV2Ugbm93IGJyb3dzZSB0aGUgbGlzdCBvZiBwaWVjZXMgZnJvbSBsZWZ0IHRvIHJp
Z2h0IGZvciBob3Jpem9udGFsIG9wZXJhdG9ycyBhbmQgZnJvbSBib3R0b20gdG8gdG9wIGZvciB2
ZXJ0aWNhbCBvcGVyYXRvcnMuCisgICAgZW51bSBQYXJ0VHlwZSB7CisgICAgICAgIFN0YXJ0LAor
ICAgICAgICBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZSwKKyAgICAgICAgTWlkZGxlLAor
ICAgICAgICBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQsCisgICAgICAgIEVuZCwKKyAgICAg
ICAgTm9uZQorICAgIH07CisgICAgUGFydFR5cGUgZXhwZWN0ZWRQYXJ0VHlwZSA9IFN0YXJ0Owor
ICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGggPSAwOworICAgIGFzc2VtYmx5RGF0YS5t
aWRkbGUuZ2x5cGggPSAwOworICAgIGZvciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMpIHsK
KyAgICAgICAgaWYgKG5vbkV4dGVuZGVyQ291bnQgPCAzKSB7CisgICAgICAgICAgICAvLyBJZiB3
ZSBvbmx5IGhhdmUgYXQgbW9zdCB0d28gbm9uLWV4dGVuZGVycyB0aGVuIHdlIHNraXAgdGhlIG1p
ZGRsZSBnbHlwaC4KKyAgICAgICAgICAgIGlmIChleHBlY3RlZFBhcnRUeXBlID09IEV4dGVuZGVy
QmV0d2VlblN0YXJ0QW5kTWlkZGxlKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUg
PSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ7CisgICAgICAgICAgICBlbHNlIGlmIChleHBl
Y3RlZFBhcnRUeXBlID09IE1pZGRsZSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBl
ID0gRW5kOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0LmlzRXh0ZW5kZXIpIHsKKyAgICAg
ICAgICAgIGlmICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCkKKyAgICAgICAgICAgICAg
ICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gcGFydC5nbHlwaDsgLy8gV2UgY29weSB0
aGUgZXh0ZW5kZXIgcGFydC4KKyAgICAgICAgICAgIGVsc2UgaWYgKGFzc2VtYmx5RGF0YS5leHRl
bnNpb24uZ2x5cGggIT0gcGFydC5nbHlwaCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogdGhlIGFzc2VtYmx5IGhhcyBkaWZmZXJlbnQgZXh0
ZW5kZXJzLgorCisgICAgICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFydFR5cGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgU3RhcnQ6CisgICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBsZWZ0
L2JvdHRvbSBwYXJ0LgorICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRl
ckJldHdlZW5TdGFydEFuZE1pZGRsZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGNhc2UgTWlkZGxlOgorICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgbWlk
ZGxlIHBhcnQuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0
d2Vlbk1pZGRsZUFuZEVuZDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGNhc2UgRW5kOgorICAgICAgICAgICAgY2FzZSBOb25lOgorICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgbm90IHN1cHBvcnRlZDogd2UgZ290IGFuIHVuZXhwZWN0ZWQgZXh0ZW5kZXIuCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBFeHRlbmRlckJldHdl
ZW5TdGFydEFuZE1pZGRsZToKKyAgICAgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxl
QW5kRW5kOgorICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSBtdWx0aXBsZSBjb25zZWN1dGl2
ZSBleHRlbmRlcnMuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFydFR5cGUpIHsKKyAgICAgICAg
Y2FzZSBTdGFydDoKKyAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIGxlZnQvYm90dG9tIHBhcnQu
CisgICAgICAgICAgICBhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0LmdseXBoID0gcGFydC5nbHlw
aDsKKyAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5TdGFydEFu
ZE1pZGRsZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIEV4dGVuZGVyQmV0
d2VlblN0YXJ0QW5kTWlkZGxlOgorICAgICAgICBjYXNlIE1pZGRsZToKKyAgICAgICAgICAgIC8v
IFdlIGNvcHkgdGhlIG1pZGRsZSBwYXJ0LgorICAgICAgICAgICAgYXNzZW1ibHlEYXRhLm1pZGRs
ZS5nbHlwaCA9IHBhcnQuZ2x5cGg7CisgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0
ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGNhc2UgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOgorICAgICAgICBjYXNlIEVuZDoKKyAg
ICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIHJpZ2h0L3RvcCBwYXJ0LgorICAgICAgICAgICAgYXNz
ZW1ibHlEYXRhLnRvcE9yUmlnaHQuZ2x5cGggPSBwYXJ0LmdseXBoOworICAgICAgICAgICAgZXhw
ZWN0ZWRQYXJ0VHlwZSA9IE5vbmU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2Fz
ZSBOb25lOgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBnb3QgYW4g
dW5leHBlY3RlZCBub24tZXh0ZW5kZXIgcGFydC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlw
aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGFs
d2F5cyBhc3N1bWUgdGhhdCB3ZSBoYXZlIGFuIGV4dGVuc2lvbiBnbHlwaC4KKworICAgIC8vIElm
IHdlIGRvbid0IGhhdmUgdG9wL2JvdHRvbSBnbHlwaHMsIHdlIHVzZSB0aGUgZXh0ZW5zaW9uIGds
eXBoLgorICAgIGlmICghYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZ2x5cGgpCisgICAgICAgIGFz
c2VtYmx5RGF0YS50b3BPclJpZ2h0LmdseXBoID0gYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlw
aDsKKyAgICBpZiAoIWFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQuZ2x5cGgpCisgICAgICAgIGFz
c2VtYmx5RGF0YS5ib3R0b21PckxlZnQuZ2x5cGggPSBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmds
eXBoOworCisgICAgYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZm9udCA9ICZzdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5mb250ID0g
YXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZm9udDsKKyAgICBhc3NlbWJseURhdGEuYm90dG9tT3JM
ZWZ0LmZvbnQgPSBhc3NlbWJseURhdGEudG9wT3JSaWdodC5mb250OworICAgIGFzc2VtYmx5RGF0
YS5taWRkbGUuZm9udCA9IGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGggPyBhc3NlbWJseURhdGEu
dG9wT3JSaWdodC5mb250IDogbnVsbHB0cjsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgZmxvYXQqIG1heGltdW1HbHlwaFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUpCit7
CisgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IE9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVy
YXRvciB8fCBtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6Okhvcml6b250YWxPcGVyYXRv
cik7CisgICAgQVNTRVJUKCFtYXhpbXVtR2x5cGhXaWR0aCB8fCBtX29wZXJhdG9yVHlwZSA9PSBP
cGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3IpOworICAgIGJvb2wgaXNWZXJ0aWNhbCA9IG1f
b3BlcmF0b3JUeXBlID09IE9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvcjsKKworICAgIEds
eXBoRGF0YSBiYXNlR2x5cGg7CisgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlw
aCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbWF4aW11bUdseXBoV2lkdGgpIHsKKyAg
ICAgICAgLy8gV2UgZG8gbm90IHN0cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5v
dWdoLgorICAgICAgICBmbG9hdCBiYXNlU2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlw
aChiYXNlR2x5cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsKKyAgICAgICAg
aWYgKHRhcmdldFNpemUgPD0gYmFzZVNpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJseURhdGE7CisgICAg
aWYgKGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7CisgICAgICAgIFZlY3RvcjxHbHlwaD4g
c2l6ZVZhcmlhbnRzOworICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQ
YXJ0PiBhc3NlbWJseVBhcnRzOworICAgICAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+
Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgaXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRz
LCBhc3NlbWJseVBhcnRzKTsKKyAgICAgICAgLy8gV2UgdmVyaWZ5IHRoZSBzaXplIHZhcmlhbnRz
LgorICAgICAgICBmb3IgKGF1dG8mIHNpemVWYXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CisgICAg
ICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7
CisgICAgICAgICAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpCisgICAgICAgICAgICAgICAgKm1h
eGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lk
dGhGb3JHbHlwaChnbHlwaERhdGEpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHNldFNpemVWYXJpYW50KGdseXBoRGF0YSk7CisgICAgICAgICAgICAgICAgZmxvYXQgc2l6
ZSA9IGlzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChnbHlwaERhdGEpIDogYWR2YW5jZVdpZHRo
Rm9yR2x5cGgoZ2x5cGhEYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+PSB0YXJnZXRT
aXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBXZSB2ZXJpZnkgaWYgdGhlcmUgaXMgYSBjb25zdHJ1Y3Rpb24uCisg
ICAgICAgIGlmICghY2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxCYWNrKHN0eWxlLCBhc3NlbWJs
eVBhcnRzLCBhc3NlbWJseURhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmICghaXNWZXJ0aWNhbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAvLyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEgTUFUSCB0YWJsZSwgd2UgZmFsbGJhY2sg
dG8gdGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25zLgorICAgICAgICBjb25zdCBTdHJldGNo
eUNoYXJhY3Rlciogc3RyZXRjaHlDaGFyYWN0ZXIgPSBudWxscHRyOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBtYXhJbmRleCA9IFdURl9BUlJBWV9MRU5HVEgoc3RyZXRjaHlDaGFyYWN0ZXJzKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWF4SW5kZXg7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgIGlmIChzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdLmNoYXJhY3Rl
ciA9PSBtX2Jhc2VDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBzdHJldGNoeUNoYXJhY3Rl
ciA9ICZzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghc3R5
bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGluZGV4IDwgbGVmdFJpZ2h0UGFpcnNDb3Vu
dCAqIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHJpZ2h0LXRvLWxl
ZnQgZGlyZWN0aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9yZWQgZm9ybSBieSBhZGRpbmcgLTEgb3Ig
KzEgYWNjb3JkaW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5kZXguCisgICAgICAgICAgICAgICAgICAg
IGluZGV4ICs9IGluZGV4ICUgMiA/IC0xIDogMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJ
ZiB3ZSBkaWRuJ3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJhY3RlciBzZXQgZm9yIHRoaXMgY2hhcmFj
dGVyLCB3ZSBkb24ndCBrbm93IGhvdyB0byBzdHJldGNoIGl0LgorICAgICAgICBpZiAoIXN0cmV0
Y2h5Q2hhcmFjdGVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFdlIGNvbnZl
cnQgdGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8gYSBsaXN0IG9mIGdseXBoIGRh
dGEuCisgICAgICAgIGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0ID0gc3R5bGUuZm9udENhc2NhZGUo
KS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPnRvcENoYXIsIGZhbHNl
KTsKKyAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbiA9IHN0eWxlLmZvbnRDYXNjYWRlKCku
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRlbnNpb25DaGFyLCBm
YWxzZSk7CisgICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQgPSBzdHlsZS5mb250Q2Fz
Y2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+Ym90dG9tQ2hh
ciwgZmFsc2UpOworICAgICAgICBhc3NlbWJseURhdGEubWlkZGxlID0gc3RyZXRjaHlDaGFyYWN0
ZXItPm1pZGRsZUNoYXIgPyBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rl
cihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciwgZmFsc2UpIDogR2x5cGhEYXRhKCk7Cisg
ICAgfQorCisgICAgLy8gSWYgd2UgYXJlIG1lYXN1cmluZyB0aGUgbWF4aW11bSB3aWR0aCwgdmVy
aWZ5IGVhY2ggY29tcG9uZW50LgorICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkgeworICAgICAg
ICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFu
Y2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0KSk7CisgICAgICAgICptYXhp
bXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRo
Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbikpOworICAgICAgICAqbWF4aW11bUdseXBo
V2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBo
KGFzc2VtYmx5RGF0YS5taWRkbGUpKTsKKyAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3Rk
OjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURh
dGEuYm90dG9tT3JMZWZ0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBl
bnN1cmUgdGhhdCB0aGUgc2l6ZSBpcyBsYXJnZSBlbm91Z2ggdG8gYXZvaWQgZ2x5cGggb3Zlcmxh
cHMuCisgICAgZmxvYXQgbWluU2l6ZSA9IGlzVmVydGljYWwgPworICAgICAgICBoZWlnaHRGb3JH
bHlwaChhc3NlbWJseURhdGEudG9wT3JSaWdodCkgKyBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURh
dGEubWlkZGxlKSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQpCisg
ICAgICAgIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdCkg
KyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxlKSArIGFkdmFuY2VXaWR0
aEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0KTsKKyAgICBpZiAobWluU2l6ZSA+IHRh
cmdldFNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIHNldEdseXBoQXNzZW1ibHkoYXNzZW1i
bHlEYXRhKTsKK30KKworTGF5b3V0UmVjdCBNYXRoT3BlcmF0b3I6OnBhaW50R2x5cGgoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IEdseXBoRGF0YSYgZGF0
YSwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nIHRyaW0pCit7
CisgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgoZGF0YSk7CisKKyAg
ICBMYXlvdXRSZWN0IGdseXBoUGFpbnRSZWN0KG9yaWdpbiwgTGF5b3V0U2l6ZShnbHlwaEJvdW5k
cy54KCkgKyBnbHlwaEJvdW5kcy53aWR0aCgpLCBnbHlwaEJvdW5kcy5oZWlnaHQoKSkpOworICAg
IGdseXBoUGFpbnRSZWN0LnNldFkob3JpZ2luLnkoKSArIGdseXBoQm91bmRzLnkoKSk7CisKKyAg
ICAvLyBJbiBvcmRlciB0byBoYXZlIGdseXBocyBmaXQgc251Z2x5IHdpdGggb25lIGFub3RoZXIg
d2Ugc25hcCB0aGUgY29ubmVjdGluZyBlZGdlcyB0byBwaXhlbCBib3VuZGFyaWVzCisgICAgLy8g
YW5kIHRyaW0gb2ZmIG9uZSBwaXhlbC4gVGhlIHBpeGVsIHRyaW0gaXMgdG8gYWNjb3VudCBmb3Ig
Zm9udHMgdGhhdCBoYXZlIGVkZ2UgcGl4ZWxzIHRoYXQgaGF2ZSBsZXNzCisgICAgLy8gdGhhbiBm
dWxsIGNvdmVyYWdlLiBUaGVzZSBlZGdlIHBpeGVscyBjYW4gaW50cm9kdWNlIHNtYWxsIHNlYW1z
IGJldHdlZW4gY29ubmVjdGVkIGdseXBocy4KKyAgICBGbG9hdFJlY3QgY2xpcEJvdW5kcyA9IGlu
Zm8ucmVjdDsKKyAgICBzd2l0Y2ggKHRyaW0pIHsKKyAgICBjYXNlIFRyaW1Ub3A6CisgICAgICAg
IGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkuY2VpbCgpICsg
MSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJpbUJvdHRvbToKKyAgICAgICAgZ2x5cGhQYWlu
dFJlY3Quc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKS5mbG9vcigpIC0gMSk7
CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFko
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJpbVRvcEFuZEJvdHRvbToKKyAgICAgICAg
Z2x5cGhQYWludFJlY3Quc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKS5jZWlsKCkgKyAx
KTsKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0
Lm1heFkoKS5mbG9vcigpIC0gMSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRZRWRnZVRvKGds
eXBoUGFpbnRSZWN0LnkoKSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKGds
eXBoUGFpbnRSZWN0Lm1heFkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJpbUxlZnQ6
CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCku
Y2VpbCgpICsgMSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRS
ZWN0LngoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJpbVJpZ2h0OgorICAgICAgICBn
bHlwaFBhaW50UmVjdC5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpLmZsb29y
KCkgLSAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJl
Y3QubWF4WCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmltTGVmdEFuZFJpZ2h0Ogor
ICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpLmNl
aWwoKSArIDEpOworICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQ
YWludFJlY3QubWF4WCgpLmZsb29yKCkgLSAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFhF
ZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFhF
ZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpKTsKKyAgICB9CisKKyAgICAvLyBDbGlwcGluZyB0
aGUgZW5jbG9zaW5nIEludFJlY3QgYXZvaWRzIGFueSBwb3RlbnRpYWwgaXNzdWVzIGF0IGpvaW5l
ZCBlZGdlcy4KKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5j
b250ZXh0KCkpOworICAgIGluZm8uY29udGV4dCgpLmNsaXAoY2xpcEJvdW5kcyk7CisKKyAgICBH
bHlwaEJ1ZmZlciBidWZmZXI7CisgICAgYnVmZmVyLmFkZChkYXRhLmdseXBoLCBkYXRhLmZvbnQs
IGFkdmFuY2VXaWR0aEZvckdseXBoKGRhdGEpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5kcmF3R2x5
cGhzKHN0eWxlLmZvbnRDYXNjYWRlKCksICpkYXRhLmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3JpZ2lu
KTsKKworICAgIHJldHVybiBnbHlwaFBhaW50UmVjdDsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6
OmZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBv
aW50JiB0bykKK3sKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpW
ZXJ0aWNhbE9wZXJhdG9yKTsKKyAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlw
ZTo6R2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFs
aWQoKSk7CisgICAgQVNTRVJUKGZyb20ueSgpIDw9IHRvLnkoKSk7CisKKyAgICAvLyBJZiB0aGVy
ZSBpcyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBk
byBhbnl0aGluZy4KKyAgICBpZiAoZnJvbS55KCkgPT0gdG8ueSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0
KCkpOworCisgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3Nl
bWJseS5leHRlbnNpb24pOworCisgICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBo
ZXJlIGFsbG93cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUK
KyAgICAvLyByZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91
dCBvdmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4K
KyAgICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7CisgICAgY2xpcEJvdW5kcy5z
aGlmdFlFZGdlVG8oZnJvbS55KCkpOworICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKHRv
LnkoKSk7CisgICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKKworICAgIC8vIFRy
aW1taW5nIG1heSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIGV4
dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHR3byBwaXhlbHMuCisgICAgZmxvYXQg
b2Zmc2V0VG9HbHlwaFRvcCA9IGdseXBoQm91bmRzLnkoKSArIDI7CisgICAgTGF5b3V0UG9pbnQg
Z2x5cGhPcmlnaW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSwgZnJvbS55KCkgLSBvZmZzZXRUb0ds
eXBoVG9wKTsKKyAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRT
aXplKCkpOworCisgICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFkoKSA8IHRvLnko
KSkgeworICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGlu
Zm8sIG1fYXNzZW1ibHkuZXh0ZW5zaW9uLCBnbHlwaE9yaWdpbiwgVHJpbVRvcEFuZEJvdHRvbSk7
CisgICAgICAgIGdseXBoT3JpZ2luLnNldFkoZ2x5cGhPcmlnaW4ueSgpICsgbGFzdFBhaW50ZWRH
bHlwaFJlY3QuaGVpZ2h0KCkpOworCisgICAgICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBp
ZiB0aGUgZm9udCBzaXplIGlzIHNtYWxsIGVub3VnaCB0aGUgZ2x1ZSBnbHlwaCBoYXMgYmVlbiBy
ZWR1Y2VkIHRvIGFuIGVtcHR5IHJlY3RhbmdsZQorICAgICAgICAvLyB3aXRoIHRyaW1taW5nLiBJ
biB0aGF0IGNhc2Ugd2UganVzdCBkcmF3IG5vdGhpbmcuCisgICAgICAgIGlmIChsYXN0UGFpbnRl
ZEdseXBoUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3Zv
aWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIGZy
b20sIGNvbnN0IExheW91dFBvaW50JiB0bykKK3sKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUg
PT0gT3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3IpOworICAgIEFTU0VSVChtX3N0cmV0
Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NFUlQobV9hc3Nl
bWJseS5leHRlbnNpb24uaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQoZnJvbS54KCkgPD0gdG8ueCgp
KTsKKworICAgIC8vIElmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBo
LCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgorICAgIGlmIChmcm9tLngoKSA9PSB0by54
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihpbmZvLmNvbnRleHQoKSk7CisKKyAgICAvLyBDbGlwcGluZyB0aGUgZXh0ZW5kZXIg
cmVnaW9uIGhlcmUgYWxsb3dzIHVzIHRvIGRyYXcgdGhlIGJvdHRvbSBleHRlbmRlciBnbHlwaCBp
bnRvIHRoZQorICAgIC8vIHJlZ2lvbnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3aXRob3V0IHdvcnJ5
aW5nIGFib3V0IG92ZXJkcmF3IChoYWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlmaWVzIGxhdGVyIGNs
aXBwaW5nLgorICAgIExheW91dFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKKyAgICBjbGlw
Qm91bmRzLnNoaWZ0WEVkZ2VUbyhmcm9tLngoKSk7CisgICAgY2xpcEJvdW5kcy5zaGlmdE1heFhF
ZGdlVG8odG8ueCgpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOworCisg
ICAgLy8gVHJpbW1pbmcgbWF5IHJlbW92ZSB1cCB0byB0d28gcGl4ZWxzIGZyb20gdGhlIGxlZnQg
b2YgdGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0IGxlZnQgYnkgdHdvIHBpeGVscy4K
KyAgICBmbG9hdCBvZmZzZXRUb0dseXBoTGVmdCA9IC0yOworICAgIExheW91dFBvaW50IGdseXBo
T3JpZ2luID0gTGF5b3V0UG9pbnQoZnJvbS54KCkgKyBvZmZzZXRUb0dseXBoTGVmdCwgc3RkOjpt
aW4oZnJvbS55KCksIHRvLnkoKSkpOworICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEdseXBoUmVj
dChmcm9tLCBGbG9hdFNpemUoKSk7CisKKyAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlwaFJlY3Qu
bWF4WCgpIDwgdG8ueCgpKSB7CisgICAgICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0gcGFpbnRH
bHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmlt
TGVmdEFuZFJpZ2h0KTsKKyAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChnbHlwaE9yaWdpbi54KCkg
KyBsYXN0UGFpbnRlZEdseXBoUmVjdC53aWR0aCgpKTsKKworICAgICAgICAvLyBUaGVyZSdzIGEg
Y2hhbmNlIHRoYXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhlIGdsdWUgZ2x5
cGggaGFzIGJlZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKKyAgICAgICAgLy8gd2l0
aCB0cmltbWluZy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgorICAgICAgICBp
ZiAobGFzdFBhaW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHko
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0
b3JUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yKTsKKyAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBT
dHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wT3JS
aWdodC5pc1ZhbGlkKCkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdC5pc1Zh
bGlkKCkpOworCisgICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28gdGhhdCB0
aGUgZWRnZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3aXRoIHRo
ZSBlZGdlcyBvZiBvdXIgcGFpbnQgYm94LgorICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVm
dCA9IHBhaW50T2Zmc2V0OworICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9w
ZXJhdG9yVG9wTGVmdCk7CisgICAgRmxvYXRSZWN0IHRvcEdseXBoQm91bmRzID0gYm91bmRzRm9y
R2x5cGgobV9hc3NlbWJseS50b3BPclJpZ2h0KTsKKyAgICBMYXlvdXRQb2ludCB0b3BHbHlwaE9y
aWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gdG9wR2x5cGhC
b3VuZHMueSgpKTsKKyAgICBMYXlvdXRSZWN0IHRvcEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlw
aChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS50b3BPclJpZ2h0LCB0b3BHbHlwaE9yaWdpbiwgVHJp
bUJvdHRvbSk7CisKKyAgICBGbG9hdFJlY3QgYm90dG9tR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JH
bHlwaChtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCk7CisgICAgTGF5b3V0UG9pbnQgYm90dG9tR2x5
cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIHN0cmV0
Y2hTaXplKCkgLSAoYm90dG9tR2x5cGhCb3VuZHMuaGVpZ2h0KCkgKyBib3R0b21HbHlwaEJvdW5k
cy55KCkpKTsKKyAgICBMYXlvdXRSZWN0IGJvdHRvbUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlw
aChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5ib3R0b21PckxlZnQsIGJvdHRvbUdseXBoT3JpZ2lu
LCBUcmltVG9wKTsKKworICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpIHsKKyAg
ICAgICAgLy8gQ2VudGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVu
ZCBnbHlwaCBwYWludCBleHRlbnRzLiBUaGVuIHNoaWZ0IGl0IGhhbGYgdGhlIHBhaW50IGhlaWdo
dCB0b3dhcmQgdGhlIGJvdHRvbSBnbHlwaC4KKyAgICAgICAgRmxvYXRSZWN0IG1pZGRsZUdseXBo
Qm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5taWRkbGUpOworICAgICAgICBMYXlv
dXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCB0b3BHbHlwaE9y
aWdpbi55KCkpOworICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQo
MCwgKGJvdHRvbUdseXBoUGFpbnRSZWN0LnkoKSAtIHRvcEdseXBoUGFpbnRSZWN0Lm1heFkoKSkg
LyAyLjApKTsKKyAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBvaW50KDAs
IG1pZGRsZUdseXBoQm91bmRzLmhlaWdodCgpIC8gMi4wKSk7CisKKyAgICAgICAgTGF5b3V0UmVj
dCBtaWRkbGVHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1i
bHkubWlkZGxlLCBtaWRkbGVHbHlwaE9yaWdpbiwgVHJpbVRvcEFuZEJvdHRvbSk7CisgICAgICAg
IGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgdG9wR2x5cGhQYWlu
dFJlY3QubWluWE1heFlDb3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3Ju
ZXIoKSk7CisgICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5m
bywgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgYm90dG9tR2x5cGhQYWlu
dFJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGZpbGxXaXRoVmVy
dGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgdG9wR2x5cGhQYWludFJlY3QubWluWE1h
eFlDb3JuZXIoKSwgYm90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Cit9CisK
K3ZvaWQgTWF0aE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpCit7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IE9wZXJhdG9yVHlwZTo6
SG9yaXpvbnRhbE9wZXJhdG9yKTsKKyAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNo
VHlwZTo6R2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wT3JSaWdodC5p
c1ZhbGlkKCkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdC5pc1ZhbGlkKCkp
OworCisgICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28gdGhhdCB0aGUgZWRn
ZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3aXRoIHRoZSBlZGdl
cyBvZiBvdXIgcGFpbnQgYm94LgorICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IHBh
aW50T2Zmc2V0OworICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9wZXJhdG9y
VG9wTGVmdCk7CisgICAgTGF5b3V0UG9pbnQgbGVmdEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVm
dC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX2FzY2VudCk7CisgICAgTGF5b3V0UmVjdCBs
ZWZ0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmJv
dHRvbU9yTGVmdCwgbGVmdEdseXBoT3JpZ2luLCBUcmltUmlnaHQpOworCisgICAgRmxvYXRSZWN0
IHJpZ2h0R2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQp
OworICAgIExheW91dFBvaW50IHJpZ2h0R2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSAr
IG1fd2lkdGggLSByaWdodEdseXBoQm91bmRzLndpZHRoKCksIG9wZXJhdG9yVG9wTGVmdC55KCkg
KyBtX2FzY2VudCk7CisgICAgTGF5b3V0UmVjdCByaWdodEdseXBoUGFpbnRSZWN0ID0gcGFpbnRH
bHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS50b3BPclJpZ2h0LCByaWdodEdseXBoT3JpZ2lu
LCBUcmltTGVmdCk7CisKKyAgICBMYXlvdXRQb2ludCBiYXNlbGluZVNoaWZ0KDAsIG1fYXNjZW50
KTsKKyAgICBpZiAobV9hc3NlbWJseS5taWRkbGUuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIENl
bnRlciB0aGUgZ2x5cGggb3JpZ2luIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgZ2x5cGggcGFp
bnQgZXh0ZW50cy4KKyAgICAgICAgTGF5b3V0UG9pbnQgbWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0
b3JUb3BMZWZ0LngoKSwgbGVmdEdseXBoT3JpZ2luLnkoKSk7CisgICAgICAgIG1pZGRsZUdseXBo
T3JpZ2luLm1vdmVCeShMYXlvdXRQb2ludCgocmlnaHRHbHlwaFBhaW50UmVjdC54KCkgLSBsZWZ0
R2x5cGhQYWludFJlY3QubWF4WCgpKSAvIDIuMCwgMCkpOworICAgICAgICBMYXlvdXRSZWN0IG1p
ZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5t
aWRkbGUsIG1pZGRsZUdseXBoT3JpZ2luLCBUcmltTGVmdEFuZFJpZ2h0KTsKKyAgICAgICAgZmls
bFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoc3R5bGUsIGluZm8sIGxlZnRHbHlwaFBhaW50
UmVjdC5tYXhYTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCwgbWlkZGxlR2x5cGhQYWludFJl
Y3QubWluWE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQpOworICAgICAgICBmaWxsV2l0aEhv
cml6b250YWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3Qu
bWF4WE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQsIHJpZ2h0R2x5cGhQYWludFJlY3QubWlu
WE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQpOworICAgIH0gZWxzZQorICAgICAgICBmaWxs
V2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgbGVmdEdseXBoUGFpbnRS
ZWN0Lm1heFhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0LCByaWdodEdseXBoUGFpbnRSZWN0
Lm1pblhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0KTsKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNGFlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWF0aE9wZXJhdG9yX2gKKyNk
ZWZpbmUgTWF0aE9wZXJhdG9yX2gKKworI2lmIEVOQUJMRShNQVRITUwpCisjaW5jbHVkZSAiR2x5
cGhQYWdlLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgIk9wZW5UeXBlTWF0
aERhdGEuaCIKKyNpbmNsdWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlIDx1bmljb2RlL3V0eXBl
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFz
cyBNYXRoT3BlcmF0b3IgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgT3BlcmF0b3JUeXBlIHsg
VW5kZWZpbmVkT3BlcmF0b3IsIERpc3BsYXlPcGVyYXRvciwgVmVydGljYWxPcGVyYXRvciwgSG9y
aXpvbnRhbE9wZXJhdG9yIH07CisgICAgTWF0aE9wZXJhdG9yKCk7CisgICAgdm9pZCBzZXRPcGVy
YXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBPcGVyYXRvclR5cGUpOworCisgICAgTGF5b3V0VW5p
dCBpdGFsaWNDb3JyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pdGFsaWNDb3JyZWN0aW9uOyB9
CisKKyAgICBib29sIGlzU3RyZXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdHJldGNoVHlwZSAh
PSBTdHJldGNoVHlwZTo6VW5zdHJldGNoZWQ7IH0KKyAgICB2b2lkIHVuc3RyZXRjaCgpIHsgbV9z
dHJldGNoVHlwZSA9IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZDsgfQorCisgICAgLy8gRklYTUU6
IEFsbCB0aGUgY29kZSBiZWxvdyBzaG91bGQgYmUgcHJpdmF0ZSB3aGVuIGl0IGlzIG5vIGxvbmdl
ciBuZWVkZWQgYnkgUmVuZGVyTWF0aE1MT3BlcmF0b3IgKGh0dHA6Ly93ZWJraXQub3JnL2IvMTUy
MjQ0KS4KKworICAgIHN0cnVjdCBHbHlwaEFzc2VtYmx5RGF0YSB7CisgICAgICAgIEdseXBoRGF0
YSB0b3BPclJpZ2h0OworICAgICAgICBHbHlwaERhdGEgZXh0ZW5zaW9uOworICAgICAgICBHbHlw
aERhdGEgYm90dG9tT3JMZWZ0OworICAgICAgICBHbHlwaERhdGEgbWlkZGxlOworICAgIH07Cisg
ICAgZW51bSBjbGFzcyBTdHJldGNoVHlwZSB7IFVuc3RyZXRjaGVkLCBTaXplVmFyaWFudCwgR2x5
cGhBc3NlbWJseSB9OworICAgIGVudW0gR2x5cGhQYWludFRyaW1taW5nIHsKKyAgICAgICAgVHJp
bVRvcCwKKyAgICAgICAgVHJpbUJvdHRvbSwKKyAgICAgICAgVHJpbVRvcEFuZEJvdHRvbSwKKyAg
ICAgICAgVHJpbUxlZnQsCisgICAgICAgIFRyaW1SaWdodCwKKyAgICAgICAgVHJpbUxlZnRBbmRS
aWdodAorICAgIH07CisKKyAgICBMYXlvdXRVbml0IHN0cmV0Y2hTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3IgPyBt
X3dpZHRoIDogbV9hc2NlbnQgKyBtX2Rlc2NlbnQ7IH0KKyAgICBib29sIGdldEJhc2VHbHlwaChj
b25zdCBSZW5kZXJTdHlsZSYsIEdseXBoRGF0YSYpIGNvbnN0OworICAgIHZvaWQgc2V0U2l6ZVZh
cmlhbnQoY29uc3QgR2x5cGhEYXRhJik7CisgICAgdm9pZCBzZXRHbHlwaEFzc2VtYmx5KGNvbnN0
IEdseXBoQXNzZW1ibHlEYXRhJik7CisgICAgdm9pZCBjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJn
ZU9wZXJhdG9yKGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgdm9pZCBjYWxjdWxhdGVTdHJldGNo
eURhdGEoY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExheW91
dFVuaXQgdGFyZ2V0U2l6ZSA9IDApOworICAgIGJvb2wgY2FsY3VsYXRlR2x5cGhBc3NlbWJseUZh
bGxCYWNrKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6
OkFzc2VtYmx5UGFydD4mLCBHbHlwaEFzc2VtYmx5RGF0YSYpIGNvbnN0OworCisgICAgTGF5b3V0
UmVjdCBwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgR2x5
cGhEYXRhJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nKTsK
KyAgICB2b2lkIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHls
ZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2lu
dCYgdG8pOworICAgIHZvaWQgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoY29uc3Qg
UmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3Qg
TGF5b3V0UG9pbnQmIHRvKTsKKyAgICB2b2lkIHBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KGNv
bnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2
b2lkIHBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmLCBQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworCisgICAgVUNoYXIgbV9iYXNlQ2hhcmFjdGVy
OworICAgIE9wZXJhdG9yVHlwZSBtX29wZXJhdG9yVHlwZTsKKyAgICBTdHJldGNoVHlwZSBtX3N0
cmV0Y2hUeXBlOworICAgIHVuaW9uIHsKKyAgICAgICAgR2x5cGhEYXRhIG1fdmFyaWFudDsKKyAg
ICAgICAgR2x5cGhBc3NlbWJseURhdGEgbV9hc3NlbWJseTsKKyAgICB9OworICAgIExheW91dFVu
aXQgbV93aWR0aDsKKyAgICBMYXlvdXRVbml0IG1fYXNjZW50OworICAgIExheW91dFVuaXQgbV9k
ZXNjZW50OworICAgIExheW91dFVuaXQgbV9pdGFsaWNDb3JyZWN0aW9uOworfTsKKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKKyNlbmRpZiAvLyBNYXRoT3BlcmF0b3JfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmNwcAppbmRleCA3MmU5Yjk1Li5jMzQ3NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcApAQCAtNDUs
MzMgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogdXNpbmcgbmFtZXNwYWNlIE1h
dGhNTE5hbWVzOwogCi0vLyBGSVhNRTogVGhlIE9wZW5UeXBlIE1BVEggdGFibGUgY29udGFpbnMg
aW5mb3JtYXRpb24gdGhhdCBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0YWJsZSAoaHR0cDovL3drYnVn
LzEyMjI5NykuCi1zdHJ1Y3QgU3RyZXRjaHlDaGFyYWN0ZXIgewotICAgIFVDaGFyIGNoYXJhY3Rl
cjsKLSAgICBVQ2hhciB0b3BDaGFyOwotICAgIFVDaGFyIGV4dGVuc2lvbkNoYXI7Ci0gICAgVUNo
YXIgYm90dG9tQ2hhcjsKLSAgICBVQ2hhciBtaWRkbGVDaGFyOwotfTsKLS8vIFRoZSBmaXJzdCBs
ZWZ0UmlnaHRQYWlyc0NvdW50IHBhaXJzIGNvcnJlc3BvbmQgdG8gbGVmdC9yaWdodCBmZW5jZXMg
dGhhdCBjYW4gZWFzaWx5IGJlIG1pcnJvcmVkIGluIFJUTC4KLXN0YXRpYyBjb25zdCBzaG9ydCBs
ZWZ0UmlnaHRQYWlyc0NvdW50ID0gNTsKLXN0YXRpYyBjb25zdCBTdHJldGNoeUNoYXJhY3RlciBz
dHJldGNoeUNoYXJhY3RlcnNbMTRdID0gewotICAgIHsgMHgyOCAgLCAweDIzOWIsIDB4MjM5Yywg
MHgyMzlkLCAweDAgICAgfSwgLy8gbGVmdCBwYXJlbnRoZXNpcwotICAgIHsgMHgyOSAgLCAweDIz
OWUsIDB4MjM5ZiwgMHgyM2EwLCAweDAgICAgfSwgLy8gcmlnaHQgcGFyZW50aGVzaXMKLSAgICB7
IDB4NWIgICwgMHgyM2ExLCAweDIzYTIsIDB4MjNhMywgMHgwICAgIH0sIC8vIGxlZnQgc3F1YXJl
IGJyYWNrZXQKLSAgICB7IDB4NWQgICwgMHgyM2E0LCAweDIzYTUsIDB4MjNhNiwgMHgwICAgIH0s
IC8vIHJpZ2h0IHNxdWFyZSBicmFja2V0Ci0gICAgeyAweDdiICAsIDB4MjNhNywgMHgyM2FhLCAw
eDIzYTksIDB4MjNhOCB9LCAvLyBsZWZ0IGN1cmx5IGJyYWNrZXQKLSAgICB7IDB4N2QgICwgMHgy
M2FiLCAweDIzYWEsIDB4MjNhZCwgMHgyM2FjIH0sIC8vIHJpZ2h0IGN1cmx5IGJyYWNrZXQKLSAg
ICB7IDB4MjMwOCwgMHgyM2ExLCAweDIzYTIsIDB4MjNhMiwgMHgwICAgIH0sIC8vIGxlZnQgY2Vp
bGluZwotICAgIHsgMHgyMzA5LCAweDIzYTQsIDB4MjNhNSwgMHgyM2E1LCAweDAgICAgfSwgLy8g
cmlnaHQgY2VpbGluZwotICAgIHsgMHgyMzBhLCAweDIzYTIsIDB4MjNhMiwgMHgyM2EzLCAweDAg
ICAgfSwgLy8gbGVmdCBmbG9vcgotICAgIHsgMHgyMzBiLCAweDIzYTUsIDB4MjNhNSwgMHgyM2E2
LCAweDAgICAgfSwgLy8gcmlnaHQgZmxvb3IKLSAgICB7IDB4N2MgICwgMHg3YywgICAweDdjLCAg
IDB4N2MsICAgMHgwICAgIH0sIC8vIHZlcnRpY2FsIGJhcgotICAgIHsgMHgyMDE2LCAweDIwMTYs
IDB4MjAxNiwgMHgyMDE2LCAweDAgICAgfSwgLy8gZG91YmxlIHZlcnRpY2FsIGxpbmUKLSAgICB7
IDB4MjIyNSwgMHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgwICAgIH0sIC8vIHBhcmFsbGVsIHRv
Ci0gICAgeyAweDIyMmIsIDB4MjMyMCwgMHgyM2FlLCAweDIzMjEsIDB4MCAgICB9IC8vIGludGVn
cmFsIHNpZ24KLX07Ci0KIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpSZW5kZXJNYXRoTUxPcGVyYXRv
cihNYXRoTUxFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAgIDogUmVu
ZGVyTWF0aE1MVG9rZW4oZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCiAgICAgLCBtX3N0cmV0Y2hI
ZWlnaHRBYm92ZUJhc2VsaW5lKDApCkBAIC0yOTQsOCArMjY3LDE2IEBAIHZvaWQgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlIHR5cGU7CisgICAg
aWYgKGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpCisgICAgICAgIHR5cGUgPSBNYXRo
T3BlcmF0b3I6Ok9wZXJhdG9yVHlwZTo6RGlzcGxheU9wZXJhdG9yOworICAgIGVsc2UgaWYgKG1f
aXNWZXJ0aWNhbCkKKyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlOjpW
ZXJ0aWNhbE9wZXJhdG9yOworICAgIGVsc2UKKyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6
T3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3I7CisgICAgbV9tYXRoT3BlcmF0b3Iuc2V0
T3BlcmF0b3IobV90ZXh0Q29udGVudCwgdHlwZSk7CiAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsK
LSAgICBmbG9hdCBtYXhpbXVtR2x5cGhXaWR0aCA9IGdldEJhc2VHbHlwaChzdHlsZSgpLCBiYXNl
R2x5cGgpID8gYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKSA6IDA7CisgICAgZmxvYXQg
bWF4aW11bUdseXBoV2lkdGggPSBtX21hdGhPcGVyYXRvci5nZXRCYXNlR2x5cGgoc3R5bGUoKSwg
YmFzZUdseXBoKSA/IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCkgOiAwOwogICAgIGlm
ICghbV9pc1ZlcnRpY2FsKSB7CiAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCA8IHN0cmV0
Y2hTaXplKCkpCiAgICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IHN0cmV0Y2hTaXplKCk7
CkBAIC0zMDUsMTIgKzI4NiwxMiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgfQogICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJ
bkRpc3BsYXlTdHlsZSgpKSB7CiAgICAgICAgIC8vIExhcmdlIG9wZXJhdG9ycyBpbiBTVElYIFdv
cmQgaGF2ZSBpbmNvcnJlY3QgYWR2YW5jZSB3aWR0aCwgY2F1c2luZyBtaXNwbGFjZW1lbnQgb2Yg
c3VwZXJzY3JpcHQsIHNvIHdlIHVzZSB0aGUgZ2x5cGggYm91bmQgaW5zdGVhZCAoaHR0cDovL3Nv
dXJjZWZvcmdlLm5ldC9wL3N0aXhmb250cy90cmFja2luZy80OS8pLgotICAgICAgICBjYWxjdWxh
dGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKCk7Ci0gICAgICAgIGlmIChtX3N0cmV0Y2hUeXBl
ID09IFN0cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkKLSAgICAgICAgICAgIG1heGltdW1HbHlwaFdp
ZHRoID0gYm91bmRzRm9yR2x5cGgobV92YXJpYW50KS53aWR0aCgpOworICAgICAgICBtX21hdGhP
cGVyYXRvci5jYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKHN0eWxlKCkpOworICAg
ICAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OlN0
cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkKKyAgICAgICAgICAgIG1heGltdW1HbHlwaFdpZHRoID0g
Ym91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KS53aWR0aCgpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBzb21lIGdseXBocyAoZS5nLiB0aGUgb25lIGZvciAi
RlJBQ1RJT04gU0xBU0giIGluIHRoZSBTVElYIE1hdGggZm9udCBvciBsYXJnZSBvcGVyYXRvcnMp
IGhhdmUgYSB3aWR0aCB0aGF0IGRlcGVuZHMgb24gdGhlIGhlaWdodCwgcmVzdWx0aW5nIGluIGxh
cmdlIGdhcHMgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjYp
LgotICAgICAgICBjYWxjdWxhdGVTdHJldGNoeURhdGEoJm1heGltdW1HbHlwaFdpZHRoKTsKKyAg
ICAgICAgbV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlU3RyZXRjaHlEYXRhKHN0eWxlKCksICZtYXhp
bXVtR2x5cGhXaWR0aCk7CiAgICAgfQogICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0g
bV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX2xlYWRpbmdTcGFjZSArIG1heGltdW1HbHlw
aFdpZHRoICsgbV90cmFpbGluZ1NwYWNlOwogfQpAQCAtMzc0LDI0NSArMzU1LDE0IEBAIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsCiAgICAgdXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiB9CiAK
LWJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEdseXBoRGF0YSYgYmFzZUdseXBoKSBjb25zdAotewotICAgIGJhc2VHbHlwaCA9
IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQs
ICFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwotICAgIHJldHVybiBiYXNlR2x5cGgu
aXNWYWxpZCgpICYmIGJhc2VHbHlwaC5mb250ID09ICZzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldFNpemVWYXJpYW50
KGNvbnN0IEdseXBoRGF0YSYgc2l6ZVZhcmlhbnQpCi17Ci0gICAgQVNTRVJUKHNpemVWYXJpYW50
LmlzVmFsaWQoKSAmJiBzaXplVmFyaWFudC5mb250LT5tYXRoRGF0YSgpKTsKLSAgICBtX3N0cmV0
Y2hUeXBlID0gU3RyZXRjaFR5cGU6OlNpemVWYXJpYW50OwotICAgIG1fdmFyaWFudCA9IHNpemVW
YXJpYW50OwotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRHbHlwaEFzc2VtYmx5
KGNvbnN0IEdseXBoQXNzZW1ibHlEYXRhJiBhc3NlbWJseURhdGEpCi17Ci0gICAgbV9zdHJldGNo
VHlwZSA9IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5OwotICAgIG1fYXNzZW1ibHkgPSBhc3Nl
bWJseURhdGE7Ci19Ci0KLWJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNhbGN1bGF0ZUdseXBo
QXNzZW1ibHlGYWxsQmFjayhjb25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQ
YXJ0PiYgYXNzZW1ibHlQYXJ0cywgR2x5cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5RGF0YSkgY29u
c3QKLXsKLSAgICAvLyBUaGUgc3RydWN0dXJlIG9mIHRoZSBPcGVuIFR5cGUgTWF0aCB0YWJsZSBp
cyBhIGJpdCBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb25lIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBS
ZW5kZXJNYXRoTUxPcGVyYXRvciBjb2RlLCBzbyB3ZSB0cnkgdG8gZmFsbGJhY2sgaW4gYSByZWFz
b25hYmxlIHdheS4KLSAgICAvLyBGSVhNRTogUmVuZGVyTWF0aE1MT3BlcmF0b3Igc2hvdWxkIHN1
cHBvcnQgdGhlIG1vc3QgZ2VuZXJhbCBmb3JtYXQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzAzMjcpLgotICAgIC8vIFdlIHVzZSB0aGUgYXBwcm9hY2ggb2YgdGhl
IGNvcHlDb21wb25lbnRzIGZ1bmN0aW9uIGluIGdpdGh1Yi5jb20vbWF0aGpheC9NYXRoSmF4LWRl
di9ibG9iL21hc3Rlci9mb250cy9PcGVuVHlwZU1hdGgvZm9udFV0aWwucHkKLQotICAgIC8vIFdl
IGNvdW50IHRoZSBudW1iZXIgb2Ygbm9uIGV4dGVuZGVyIHBpZWNlcy4KLSAgICBpbnQgbm9uRXh0
ZW5kZXJDb3VudCA9IDA7Ci0gICAgZm9yIChhdXRvJiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykgewot
ICAgICAgICBpZiAoIXBhcnQuaXNFeHRlbmRlcikKLSAgICAgICAgICAgIG5vbkV4dGVuZGVyQ291
bnQrKzsKLSAgICB9Ci0gICAgaWYgKG5vbkV4dGVuZGVyQ291bnQgPiAzKQotICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogdGhlcmUgYXJlIHRvbyBtYW55IHBp
ZWNlcy4KLQotICAgIC8vIFdlIG5vdyBicm93c2UgdGhlIGxpc3Qgb2YgcGllY2VzIGZyb20gbGVm
dCB0byByaWdodCBmb3IgaG9yaXpvbnRhbCBvcGVyYXRvcnMgYW5kIGZyb20gYm90dG9tIHRvIHRv
cCBmb3IgdmVydGljYWwgb3BlcmF0b3JzLgotICAgIGVudW0gUGFydFR5cGUgewotICAgICAgICBT
dGFydCwKLSAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGUsCi0gICAgICAgIE1p
ZGRsZSwKLSAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kLAotICAgICAgICBFbmQs
Ci0gICAgICAgIE5vbmUKLSAgICB9OwotICAgIFBhcnRUeXBlIGV4cGVjdGVkUGFydFR5cGUgPSBT
dGFydDsKLSAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gMDsKLSAgICBhc3NlbWJs
eURhdGEubWlkZGxlLmdseXBoID0gMDsKLSAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJseVBh
cnRzKSB7Ci0gICAgICAgIGlmIChub25FeHRlbmRlckNvdW50IDwgMykgewotICAgICAgICAgICAg
Ly8gSWYgd2Ugb25seSBoYXZlIGF0IG1vc3QgdHdvIG5vbi1leHRlbmRlcnMgdGhlbiB3ZSBza2lw
IHRoZSBtaWRkbGUgZ2x5cGguCi0gICAgICAgICAgICBpZiAoZXhwZWN0ZWRQYXJ0VHlwZSA9PSBF
eHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZSkKLSAgICAgICAgICAgICAgICBleHBlY3RlZFBh
cnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOwotICAgICAgICAgICAgZWxzZSBp
ZiAoZXhwZWN0ZWRQYXJ0VHlwZSA9PSBNaWRkbGUpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRQ
YXJ0VHlwZSA9IEVuZDsKLSAgICAgICAgfQotICAgICAgICBpZiAocGFydC5pc0V4dGVuZGVyKSB7
Ci0gICAgICAgICAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGgpCi0gICAgICAg
ICAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCA9IHBhcnQuZ2x5cGg7IC8vIFdl
IGNvcHkgdGhlIGV4dGVuZGVyIHBhcnQuCi0gICAgICAgICAgICBlbHNlIGlmIChhc3NlbWJseURh
dGEuZXh0ZW5zaW9uLmdseXBoICE9IHBhcnQuZ2x5cGgpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHRoZSBhc3NlbWJseSBoYXMgZGlmZmVy
ZW50IGV4dGVuZGVycy4KLQotICAgICAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIFN0YXJ0OgotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0
aGUgbGVmdC9ib3R0b20gcGFydC4KLSAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0g
RXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBjYXNlIE1pZGRsZToKLSAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUg
dGhlIG1pZGRsZSBwYXJ0LgotICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRl
bmRlckJldHdlZW5NaWRkbGVBbmRFbmQ7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBjYXNlIEVuZDoKLSAgICAgICAgICAgIGNhc2UgTm9uZToKLSAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIGV4dGVuZGVy
LgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhc2UgRXh0ZW5k
ZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU6Ci0gICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vl
bk1pZGRsZUFuZEVuZDoKLSAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgbXVsdGlwbGUgY29u
c2VjdXRpdmUgZXh0ZW5kZXJzLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBlKSB7Ci0g
ICAgICAgIGNhc2UgU3RhcnQ6Ci0gICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSBsZWZ0L2JvdHRv
bSBwYXJ0LgotICAgICAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdC5nbHlwaCA9IHBh
cnQuZ2x5cGg7Ci0gICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVu
U3RhcnRBbmRNaWRkbGU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FzZSBFeHRl
bmRlckJldHdlZW5TdGFydEFuZE1pZGRsZToKLSAgICAgICAgY2FzZSBNaWRkbGU6Ci0gICAgICAg
ICAgICAvLyBXZSBjb3B5IHRoZSBtaWRkbGUgcGFydC4KLSAgICAgICAgICAgIGFzc2VtYmx5RGF0
YS5taWRkbGUuZ2x5cGggPSBwYXJ0LmdseXBoOwotICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlw
ZSA9IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoKLSAgICAgICAgY2FzZSBF
bmQ6Ci0gICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSByaWdodC90b3AgcGFydC4KLSAgICAgICAg
ICAgIGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmdseXBoID0gcGFydC5nbHlwaDsKLSAgICAgICAg
ICAgIGV4cGVjdGVkUGFydFR5cGUgPSBOb25lOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGNhc2UgTm9uZToKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2Ug
Z290IGFuIHVuZXhwZWN0ZWQgbm9uLWV4dGVuZGVyIHBhcnQuCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNp
b24uZ2x5cGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVk
OiB3ZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbiBleHRlbnNpb24gZ2x5cGguCi0KLSAg
ICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRvcC9yaWdodCBvciBsZWZ0L2JvdHRvbSBnbHlwaHMsIHdl
IHVzZSB0aGUgZXh0ZW5zaW9uIGdseXBoLgotICAgIGlmICghYXNzZW1ibHlEYXRhLnRvcE9yUmln
aHQuZ2x5cGgpCi0gICAgICAgIGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmdseXBoID0gYXNzZW1i
bHlEYXRhLmV4dGVuc2lvbi5nbHlwaDsKLSAgICBpZiAoIWFzc2VtYmx5RGF0YS5ib3R0b21Pckxl
ZnQuZ2x5cGgpCi0gICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQuZ2x5cGggPSBhc3Nl
bWJseURhdGEuZXh0ZW5zaW9uLmdseXBoOwotCi0gICAgYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQu
Zm9udCA9ICZzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICBhc3NlbWJs
eURhdGEuZXh0ZW5zaW9uLmZvbnQgPSBhc3NlbWJseURhdGEudG9wT3JSaWdodC5mb250OwotICAg
IGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQuZm9udCA9IGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0
LmZvbnQ7Ci0gICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5mb250ID0gYXNzZW1ibHlEYXRhLm1pZGRs
ZS5nbHlwaCA/IGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmZvbnQgOiBudWxscHRyOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNhbGN1bGF0ZURp
c3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoKQotewotICAgIEFTU0VSVChtX2lzVmVydGljYWwgJiYg
aXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7Ci0KLSAgICBHbHlwaERhdGEgYmFzZUds
eXBoOwotICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkgfHwgIWJhc2VH
bHlwaC5mb250LT5tYXRoRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8R2x5
cGg+IHNpemVWYXJpYW50czsKLSAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQ
YXJ0PiBhc3NlbWJseVBhcnRzOwotCi0gICAgLy8gVGhlIHZhbHVlIG9mIGRpc3BsYXlPcGVyYXRv
ck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxsLCBzbyB3ZSBlbnN1cmUgdGhhdCBpdCBp
cyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6ZSBvZiB0aGUgYmFzZSBnbHlwaC4KLSAg
ICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6Om1heChiYXNlR2x5cGguZm9u
dC0+Ym91bmRzRm9yR2x5cGgoYmFzZUdseXBoLmdseXBoKS5oZWlnaHQoKSAqIHNxcnRPZlR3b0Zs
b2F0LCBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KCpiYXNlR2x5
cGguZm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7Ci0K
LSAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlw
aC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKLQotICAgIC8vIFdl
IGNob29zZSB0aGUgZmlyc3Qgc2l6ZSB2YXJpYW50IHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGV4
cGVjdGVkIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBhbmQgb3RoZXJ3aXNlIGZhbGxiYWNrIHRv
IHRoZSBsYXJnZXN0IHZhcmlhbnQuCi0gICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6IHNpemVW
YXJpYW50cykgewotICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBiYXNl
R2x5cGguZm9udCk7Ci0gICAgICAgIHNldFNpemVWYXJpYW50KGdseXBoRGF0YSk7Ci0gICAgICAg
IG1faXRhbGljQ29ycmVjdGlvbiA9IGdseXBoRGF0YS5mb250LT5tYXRoRGF0YSgpLT5nZXRJdGFs
aWNDb3JyZWN0aW9uKCpnbHlwaERhdGEuZm9udCwgZ2x5cGhEYXRhLmdseXBoKTsKLSAgICAgICAg
aWYgKGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgPj0gZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEoZmxvYXQqIG1heGltdW1HbHlwaFdpZHRoLCBMYXlv
dXRVbml0IHRhcmdldFNpemUpCi17Ci0gICAgQVNTRVJUKCFtYXhpbXVtR2x5cGhXaWR0aCB8fCBt
X2lzVmVydGljYWwpOwotCi0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBpZiAoIWdldEJh
c2VHbHlwaChzdHlsZSgpLCBiYXNlR2x5cGgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
aWYgKCFtYXhpbXVtR2x5cGhXaWR0aCkgewotICAgICAgICAvLyBXZSBkbyBub3Qgc3RyZXRjaCBp
ZiB0aGUgYmFzZSBnbHlwaCBpcyBsYXJnZSBlbm91Z2guCi0gICAgICAgIGZsb2F0IGJhc2VTaXpl
ID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoYmFzZUdseXBoKSA6IGFkdmFuY2VXaWR0
aEZvckdseXBoKGJhc2VHbHlwaCk7Ci0gICAgICAgIGlmICh0YXJnZXRTaXplIDw9IGJhc2VTaXpl
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdseXBoQXNzZW1ibHlEYXRhIGFz
c2VtYmx5RGF0YTsKLSAgICBpZiAoYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkpIHsKLSAgICAg
ICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7Ci0gICAgICAgIFZlY3RvcjxPcGVuVHlwZU1h
dGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7Ci0gICAgICAgIGJhc2VHbHlwaC5m
b250LT5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCBtX2lzVmVy
dGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7Ci0gICAgICAgIC8vIFdlIHZlcmlm
eSB0aGUgc2l6ZSB2YXJpYW50cy4KLSAgICAgICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6IHNp
emVWYXJpYW50cykgewotICAgICAgICAgICAgR2x5cGhEYXRhIGdseXBoRGF0YShzaXplVmFyaWFu
dCwgYmFzZUdseXBoLmZvbnQpOwotICAgICAgICAgICAgaWYgKG1heGltdW1HbHlwaFdpZHRoKQot
ICAgICAgICAgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5
cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKSk7Ci0gICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICBzZXRTaXplVmFyaWFudChnbHlwaERhdGEpOwotICAgICAg
ICAgICAgICAgIGZsb2F0IHNpemUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChnbHlw
aERhdGEpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKTsKLSAgICAgICAgICAgICAg
ICBpZiAoc2l6ZSA+PSB0YXJnZXRTaXplKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSB2ZXJpZnkgaWYgdGhlcmUg
aXMgYSBjb25zdHJ1Y3Rpb24uCi0gICAgICAgIGlmICghY2FsY3VsYXRlR2x5cGhBc3NlbWJseUZh
bGxCYWNrKGFzc2VtYmx5UGFydHMsIGFzc2VtYmx5RGF0YSkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2lzVmVydGljYWwpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgLy8gSWYgdGhlIGZvbnQgZG9lcyBub3QgaGF2ZSBhIE1BVEggdGFi
bGUsIHdlIGZhbGxiYWNrIHRvIHRoZSBVbmljb2RlLW9ubHkgY29uc3RydWN0aW9ucy4KLSAgICAg
ICAgY29uc3QgU3RyZXRjaHlDaGFyYWN0ZXIqIHN0cmV0Y2h5Q2hhcmFjdGVyID0gbnVsbHB0cjsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgbWF4SW5kZXggPSBXVEZfQVJSQVlfTEVOR1RIKHN0cmV0
Y2h5Q2hhcmFjdGVycyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8
IG1heEluZGV4OyArK2luZGV4KSB7Ci0gICAgICAgICAgICBpZiAoc3RyZXRjaHlDaGFyYWN0ZXJz
W2luZGV4XS5jaGFyYWN0ZXIgPT0gbV90ZXh0Q29udGVudCkgewotICAgICAgICAgICAgICAgIHN0
cmV0Y2h5Q2hhcmFjdGVyID0gJnN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF07Ci0gICAgICAgICAg
ICAgICAgaWYgKCFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAmJiBpbmRleCA8IGxl
ZnRSaWdodFBhaXJzQ291bnQgKiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFy
ZSBpbiByaWdodC10by1sZWZ0IGRpcmVjdGlvbiB3ZSBzZWxlY3QgdGhlIG1pcnJvcmVkIGZvcm0g
YnkgYWRkaW5nIC0xIG9yICsxIGFjY29yZGluZyB0byB0aGUgcGFyaXR5IG9mIGluZGV4LgotICAg
ICAgICAgICAgICAgICAgICBpbmRleCArPSBpbmRleCAlIDIgPyAtMSA6IDE7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYSBzdHJldGNoeSBjaGFyYWN0ZXIgc2V0
IGZvciB0aGlzIGNoYXJhY3Rlciwgd2UgZG9uJ3Qga25vdyBob3cgdG8gc3RyZXRjaCBpdC4KLSAg
ICAgICAgaWYgKCFzdHJldGNoeUNoYXJhY3RlcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAvLyBXZSBjb252ZXJ0IHRoZSBsaXN0IG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbnRvIGEg
bGlzdCBvZiBnbHlwaCBkYXRhLgotICAgICAgICBhc3NlbWJseURhdGEudG9wT3JSaWdodCA9IHN0
eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0
ZXItPnRvcENoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbiA9IHN0
eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0
ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbU9y
TGVmdCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRj
aHlDaGFyYWN0ZXItPmJvdHRvbUNoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLm1p
ZGRsZSA9IHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyID8gc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciwg
ZmFsc2UpIDogR2x5cGhEYXRhKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIG1lYXN1cmlu
ZyB0aGUgbWF4aW11bSB3aWR0aCwgdmVyaWZ5IGVhY2ggY29tcG9uZW50LgotICAgIGlmIChtYXhp
bXVtR2x5cGhXaWR0aCkgewotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgq
bWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3BP
clJpZ2h0KSk7Ci0gICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVt
R2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbikp
OwotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lk
dGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpKTsKLSAgICAgICAg
Km1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNl
V2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBXZSBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBpcyBsYXJnZSBlbm91
Z2ggdG8gYXZvaWQgZ2x5cGggb3ZlcmxhcHMuCi0gICAgZmxvYXQgbWluU2l6ZSA9IG1faXNWZXJ0
aWNhbCA/Ci0gICAgICAgIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0KSAr
IGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgaGVpZ2h0Rm9yR2x5cGgoYXNz
ZW1ibHlEYXRhLmJvdHRvbU9yTGVmdCkKLSAgICAgICAgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChh
c3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KSArIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5
RGF0YS5taWRkbGUpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcE9yUmln
aHQpOwotICAgIGlmIChtaW5TaXplID4gdGFyZ2V0U2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc2V0R2x5cGhBc3NlbWJseShhc3NlbWJseURhdGEpOwotfQotCiB2b2lkIFJlbmRlck1hdGhN
TE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiB7CiAgICAgQVNTRVJUKGZpcnN0Q2hpbGQoKSk7CiAg
ICAgaWYgKCFmaXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc3RyZXRjaFR5
cGUgPSBTdHJldGNoVHlwZTo6VW5zdHJldGNoZWQ7Ci0gICAgbV9pdGFsaWNDb3JyZWN0aW9uID0g
MDsKKyAgICBtX21hdGhPcGVyYXRvci51bnN0cmV0Y2goKTsKKyAgICBtX21hdGhPcGVyYXRvci5t
X2l0YWxpY0NvcnJlY3Rpb24gPSAwOwogICAgIC8vIFdlIGFkZCBzcGFjaW5nIGFyb3VuZCB0aGUg
b3BlcmF0b3IuCiAgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3VsZCBiZSBhZGRlZCB0byB0
aGUgd2hvbGUgZW1iZWxsaXNoZWQgb3BlcmF0b3IgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjQ4MzEpLgogICAgIC8vIEZJWE1FOiBUaGUgc3BhY2luZyBzaG91bGQg
b25seSBiZSBhZGRlZCBpbnNpZGUgKHBlcmhhcHMgaW5mZXJyZWQpIG1yb3cgKGh0dHA6Ly93d3cu
dzMub3JnL1RSL01hdGhNTC9jaGFwdGVyMy5odG1sI3ByZXNtLm9wc3BhY2luZykuCkBAIC02MjYs
MjUgKzM3NiwzMyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiAg
ICAgaWYgKCFzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
TWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGUgdHlwZTsKKyAgICBpZiAoaXNMYXJnZU9wZXJhdG9y
SW5EaXNwbGF5U3R5bGUoKSkKKyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JU
eXBlOjpEaXNwbGF5T3BlcmF0b3I7CisgICAgZWxzZSBpZiAobV9pc1ZlcnRpY2FsKQorICAgICAg
ICB0eXBlID0gTWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3I7Cisg
ICAgZWxzZQorICAgICAgICB0eXBlID0gTWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGU6Okhvcml6
b250YWxPcGVyYXRvcjsKKyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250
ZW50LCB0eXBlKTsKICAgICBpZiAobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlz
cGxheVN0eWxlKCkpCi0gICAgICAgIGNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Io
KTsKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVy
YXRvcihzdHlsZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgY2FsY3VsYXRlU3RyZXRjaHlEYXRh
KG51bGxwdHIsIHN0cmV0Y2hTaXplKCkpOwotICAgICAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBT
dHJldGNoVHlwZTo6VW5zdHJldGNoZWQpCisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmNhbGN1bGF0
ZVN0cmV0Y2h5RGF0YShzdHlsZSgpLCBudWxscHRyLCBzdHJldGNoU2l6ZSgpKTsKKyAgICAgICAg
aWYgKCFtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX2lzVmVydGljYWwgJiYgbV9zdHJldGNoVHlwZSA9PSBTdHJldGNo
VHlwZTo6U2l6ZVZhcmlhbnQpIHsKKyAgICBpZiAobV9pc1ZlcnRpY2FsICYmIG1fbWF0aE9wZXJh
dG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTdHJldGNoVHlwZTo6U2l6ZVZhcmlh
bnQpIHsKICAgICAgICAgLy8gV2UgcmVzaXplIHRoZSBvcGVyYXRvciB0byBtYXRjaCB0aGUgb25l
IG9mIHRoZSBzaXplIHZhcmlhbnQuCiAgICAgICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3Bs
YXlTdHlsZSgpKSB7CiAgICAgICAgICAgICAvLyBUaGUgc3RyZXRjaCBzaXplIGlzIGFjdHVhbGx5
IG5vdCBpbnZvbHZlZCBpbiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBzaXplIHZhcmlhbnQgaW4gZmlu
ZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IuCiAgICAgICAgICAgICAvLyBXZSBzaW1wbHkgdXNl
IHRoZSBoZWlnaHQgYW5kIGRlcHRoIG9mIHRoZSBzZWxlY3RlZCBzaXplIHZhcmlhbnQgZ2x5cGgu
Ci0gICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3Zh
cmlhbnQpOworICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5
cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdo
dEFib3ZlQmFzZWxpbmUgPSAtZ2x5cGhCb3VuZHMueSgpOwogICAgICAgICAgICAgbV9zdHJldGNo
RGVwdGhCZWxvd0Jhc2VsaW5lID0gZ2x5cGhCb3VuZHMubWF4WSgpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gV2UgcmVzY2FsZSB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBwcm9wb3J0
aW9uYXRlbHkuCi0gICAgICAgICAgICBmbG9hdCB2YXJpYW50U2l6ZSA9IGhlaWdodEZvckdseXBo
KG1fdmFyaWFudCk7CisgICAgICAgICAgICBmbG9hdCB2YXJpYW50U2l6ZSA9IGhlaWdodEZvckds
eXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAgICAgICBmbG9hdCBzaXplID0g
c3RyZXRjaFNpemUoKTsKICAgICAgICAgICAgIGZsb2F0IGFzcGVjdCA9IHNpemUgPiAwID8gdmFy
aWFudFNpemUgLyBzaXplIDogMS4wOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVC
YXNlbGluZSAqPSBhc3BlY3Q7CkBAIC02NTMsMzAgKzQxMSwzMCBAQCB2b2lkIFJlbmRlck1hdGhN
TE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiAgICAgfQogCiAgICAgaWYgKCFtX2lzVmVydGljYWwp
IHsKLSAgICAgICAgaWYgKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OlNpemVWYXJpYW50
KSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaCht
X3ZhcmlhbnQpOworICAgICAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBN
YXRoT3BlcmF0b3I6OlN0cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkgeworICAgICAgICAgICAgRmxv
YXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJp
YW50KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSAtZ2x5cGhC
b3VuZHMueSgpOwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gZ2x5
cGhCb3VuZHMubWF4WSgpOwotICAgICAgICAgICAgbV9zdHJldGNoV2lkdGggPSBhZHZhbmNlV2lk
dGhGb3JHbHlwaChtX3ZhcmlhbnQpOwotICAgICAgICB9IGVsc2UgaWYgKG1fc3RyZXRjaFR5cGUg
PT0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkpIHsKKyAgICAgICAgICAgIG1fc3RyZXRjaFdp
ZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVy
YXRvcjo6U3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkpIHsKICAgICAgICAgICAgIEZsb2F0UmVj
dCBnbHlwaEJvdW5kczsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUg
PSAwOwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gMDsKIAotICAg
ICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmJvdHRvbU9y
TGVmdCk7CisgICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9w
ZXJhdG9yLm1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhl
aWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRB
Ym92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERl
cHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaERlcHRoQmVs
b3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKIAotICAgICAgICAgICAgZ2x5cGhCb3Vu
ZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQpOworICAgICAgICAgICAg
Z2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LnRv
cE9yUmlnaHQpOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0
ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIC1nbHlwaEJv
dW5kcy55KCkpOwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3Rk
OjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lLCBnbHlwaEJvdW5k
cy5tYXhZKCkpOwogCi0gICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1f
YXNzZW1ibHkuZXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9y
R2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5leHRlbnNpb24pOwogICAgICAgICAgICAg
bV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3Ry
ZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIC1nbHlwaEJvdW5kcy55KCkpOwogICAgICAgICAgICAg
bV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJl
dGNoRGVwdGhCZWxvd0Jhc2VsaW5lLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwogCi0gICAgICAgICAg
ICBpZiAobV9hc3NlbWJseS5taWRkbGUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgZ2x5
cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5Lm1pZGRsZSk7CisgICAgICAgICAg
ICBpZiAobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUuaXNWYWxpZCgpKSB7CisgICAg
ICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5t
X2Fzc2VtYmx5Lm1pZGRsZSk7CiAgICAgICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVC
YXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxp
bmUsIC1nbHlwaEJvdW5kcy55KCkpOwogICAgICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVs
b3dCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaERlcHRoQmVsb3dCYXNl
bGluZSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKICAgICAgICAgICAgIH0KQEAgLTY4NiwyMzcgKzQ0
NCw1NCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiAKIE9wdGlv
bmFsPGludD4gUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3QK
IHsKLSAgICBpZiAobV9zdHJldGNoVHlwZSAhPSBTdHJldGNoVHlwZTo6VW5zdHJldGNoZWQpCisg
ICAgaWYgKG1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAgICAgIHJldHVybiBPcHRp
b25hbDxpbnQ+KG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUpOwogICAgIHJldHVybiBSZW5k
ZXJNYXRoTUxUb2tlbjo6Zmlyc3RMaW5lQmFzZWxpbmUoKTsKIH0KIAogdm9pZCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29t
cHV0ZWRWYWx1ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RyZXRjaFR5cGUgIT0gU3RyZXRjaFR5
cGU6OlVuc3RyZXRjaGVkKQorICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpKQog
ICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSArIG1f
c3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZTsKICAgICBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2Fs
SGVpZ2h0KGxvZ2ljYWxIZWlnaHQsIGxvZ2ljYWxUb3AsIGNvbXB1dGVkVmFsdWVzKTsKIH0KIAot
TGF5b3V0UmVjdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRHbHlwaChQYWludEluZm8mIGlu
Zm8sIGNvbnN0IEdseXBoRGF0YSYgZGF0YSwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5
cGhQYWludFRyaW1taW5nIHRyaW0pCi17Ci0gICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91
bmRzRm9yR2x5cGgoZGF0YSk7Ci0KLSAgICBMYXlvdXRSZWN0IGdseXBoUGFpbnRSZWN0KG9yaWdp
biwgTGF5b3V0U2l6ZShnbHlwaEJvdW5kcy54KCkgKyBnbHlwaEJvdW5kcy53aWR0aCgpLCBnbHlw
aEJvdW5kcy5oZWlnaHQoKSkpOwotICAgIGdseXBoUGFpbnRSZWN0LnNldFkob3JpZ2luLnkoKSAr
IGdseXBoQm91bmRzLnkoKSk7Ci0KLSAgICAvLyBJbiBvcmRlciB0byBoYXZlIGdseXBocyBmaXQg
c251Z2x5IHdpdGggb25lIGFub3RoZXIgd2Ugc25hcCB0aGUgY29ubmVjdGluZyBlZGdlcyB0byBw
aXhlbCBib3VuZGFyaWVzCi0gICAgLy8gYW5kIHRyaW0gb2ZmIG9uZSBwaXhlbC4gVGhlIHBpeGVs
IHRyaW0gaXMgdG8gYWNjb3VudCBmb3IgZm9udHMgdGhhdCBoYXZlIGVkZ2UgcGl4ZWxzIHRoYXQg
aGF2ZSBsZXNzCi0gICAgLy8gdGhhbiBmdWxsIGNvdmVyYWdlLiBUaGVzZSBlZGdlIHBpeGVscyBj
YW4gaW50cm9kdWNlIHNtYWxsIHNlYW1zIGJldHdlZW4gY29ubmVjdGVkIGdseXBocy4KLSAgICBG
bG9hdFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKLSAgICBzd2l0Y2ggKHRyaW0pIHsKLSAg
ICBjYXNlIFRyaW1Ub3A6Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVkZ2VUbyhnbHlw
aFBhaW50UmVjdC55KCkuY2VpbCgpICsgMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRZRWRn
ZVRvKGdseXBoUGFpbnRSZWN0LnkoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJpbUJv
dHRvbToKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRS
ZWN0Lm1heFkoKS5mbG9vcigpIC0gMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRn
ZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJp
bVRvcEFuZEJvdHRvbToKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRZRWRnZVRvKGdseXBo
UGFpbnRSZWN0LnkoKS5jZWlsKCkgKyAxKTsKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRN
YXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKS5mbG9vcigpIC0gMSk7Ci0gICAgICAgIGNs
aXBCb3VuZHMuc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKSk7Ci0gICAgICAgIGNsaXBC
b3VuZHMuc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgVHJpbUxlZnQ6Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WEVk
Z2VUbyhnbHlwaFBhaW50UmVjdC54KCkuY2VpbCgpICsgMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMu
c2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgVHJpbVJpZ2h0OgotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFhFZGdlVG8oZ2x5
cGhQYWludFJlY3QubWF4WCgpLmZsb29yKCkgLSAxKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlm
dE1heFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBUcmltTGVmdEFuZFJpZ2h0OgotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFhFZGdl
VG8oZ2x5cGhQYWludFJlY3QueCgpLmNlaWwoKSArIDEpOwotICAgICAgICBnbHlwaFBhaW50UmVj
dC5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpLmZsb29yKCkgLSAxKTsKLSAg
ICAgICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpKTsKLSAgICAg
ICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpKTsKLSAg
ICB9Ci0KLSAgICAvLyBDbGlwcGluZyB0aGUgZW5jbG9zaW5nIEludFJlY3QgYXZvaWRzIGFueSBw
b3RlbnRpYWwgaXNzdWVzIGF0IGpvaW5lZCBlZGdlcy4KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwotICAgIGluZm8uY29udGV4dCgpLmNs
aXAoY2xpcEJvdW5kcyk7Ci0KLSAgICBHbHlwaEJ1ZmZlciBidWZmZXI7Ci0gICAgYnVmZmVyLmFk
ZChkYXRhLmdseXBoLCBkYXRhLmZvbnQsIGFkdmFuY2VXaWR0aEZvckdseXBoKGRhdGEpKTsKLSAg
ICBpbmZvLmNvbnRleHQoKS5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKmRhdGEu
Zm9udCwgYnVmZmVyLCAwLCAxLCBvcmlnaW4pOwotCi0gICAgcmV0dXJuIGdseXBoUGFpbnRSZWN0
OwotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5z
aW9uR2x5cGgoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3Qg
TGF5b3V0UG9pbnQmIHRvKQotewotICAgIEFTU0VSVChtX2lzVmVydGljYWwpOwotICAgIEFTU0VS
VChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NF
UlQobV9hc3NlbWJseS5leHRlbnNpb24uaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQoZnJvbS55KCkg
PD0gdG8ueSgpKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5z
aW9uIGdseXBoLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgIGlmIChmcm9tLnko
KSA9PSB0by55KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihpbmZvLmNvbnRleHQoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZ2x5cGhC
b3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbik7Ci0KLSAgICAvLyBD
bGlwcGluZyB0aGUgZXh0ZW5kZXIgcmVnaW9uIGhlcmUgYWxsb3dzIHVzIHRvIGRyYXcgdGhlIGJv
dHRvbSBleHRlbmRlciBnbHlwaCBpbnRvIHRoZQotICAgIC8vIHJlZ2lvbnMgb2YgdGhlIGJvdHRv
bSBnbHlwaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IG92ZXJkcmF3IChoYWlyeSBwaXhlbHMpIGFu
ZCBzaW1wbGlmaWVzIGxhdGVyIGNsaXBwaW5nLgotICAgIExheW91dFJlY3QgY2xpcEJvdW5kcyA9
IGluZm8ucmVjdDsKLSAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhmcm9tLnkoKSk7Ci0gICAg
Y2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8odG8ueSgpKTsKLSAgICBpbmZvLmNvbnRleHQoKS5j
bGlwKGNsaXBCb3VuZHMpOwotCi0gICAgLy8gVHJpbW1pbmcgbWF5IHJlbW92ZSB1cCB0byB0d28g
cGl4ZWxzIGZyb20gdGhlIHRvcCBvZiB0aGUgZXh0ZW5kZXIgZ2x5cGgsIHNvIHdlIG1vdmUgaXQg
dXAgYnkgdHdvIHBpeGVscy4KLSAgICBmbG9hdCBvZmZzZXRUb0dseXBoVG9wID0gZ2x5cGhCb3Vu
ZHMueSgpICsgMjsKLSAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExheW91dFBvaW50KGZy
b20ueCgpLCBmcm9tLnkoKSAtIG9mZnNldFRvR2x5cGhUb3ApOwotICAgIEZsb2F0UmVjdCBsYXN0
UGFpbnRlZEdseXBoUmVjdChmcm9tLCBGbG9hdFNpemUoKSk7Ci0KLSAgICB3aGlsZSAobGFzdFBh
aW50ZWRHbHlwaFJlY3QubWF4WSgpIDwgdG8ueSgpKSB7Ci0gICAgICAgIGxhc3RQYWludGVkR2x5
cGhSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LmV4dGVuc2lvbiwgZ2x5cGhPcmln
aW4sIFRyaW1Ub3BBbmRCb3R0b20pOwotICAgICAgICBnbHlwaE9yaWdpbi5zZXRZKGdseXBoT3Jp
Z2luLnkoKSArIGxhc3RQYWludGVkR2x5cGhSZWN0LmhlaWdodCgpKTsKLQotICAgICAgICAvLyBU
aGVyZSdzIGEgY2hhbmNlIHRoYXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhl
IGdsdWUgZ2x5cGggaGFzIGJlZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKLSAgICAg
ICAgLy8gd2l0aCB0cmltbWluZy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgot
ICAgICAgICBpZiAobGFzdFBhaW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaWxsV2l0aEhv
cml6b250YWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50
JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCi17Ci0gICAgQVNTRVJUKCFtX2lzVmVydGlj
YWwpOwotICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2Vt
Ymx5KTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS5leHRlbnNpb24uaXNWYWxpZCgpKTsKLSAgICBB
U1NFUlQoZnJvbS54KCkgPD0gdG8ueCgpKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIG5vIHNwYWNl
IGZvciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgot
ICAgIGlmIChmcm9tLngoKSA9PSB0by54KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihpbmZvLmNvbnRleHQoKSk7Ci0KLSAgICAv
LyBDbGlwcGluZyB0aGUgZXh0ZW5kZXIgcmVnaW9uIGhlcmUgYWxsb3dzIHVzIHRvIGRyYXcgdGhl
IGJvdHRvbSBleHRlbmRlciBnbHlwaCBpbnRvIHRoZQotICAgIC8vIHJlZ2lvbnMgb2YgdGhlIGJv
dHRvbSBnbHlwaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IG92ZXJkcmF3IChoYWlyeSBwaXhlbHMp
IGFuZCBzaW1wbGlmaWVzIGxhdGVyIGNsaXBwaW5nLgotICAgIExheW91dFJlY3QgY2xpcEJvdW5k
cyA9IGluZm8ucmVjdDsKLSAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhmcm9tLngoKSk7Ci0g
ICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8odG8ueCgpKTsKLSAgICBpbmZvLmNvbnRleHQo
KS5jbGlwKGNsaXBCb3VuZHMpOwotCi0gICAgLy8gVHJpbW1pbmcgbWF5IHJlbW92ZSB1cCB0byB0
d28gcGl4ZWxzIGZyb20gdGhlIGxlZnQgb2YgdGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3Zl
IGl0IGxlZnQgYnkgdHdvIHBpeGVscy4KLSAgICBmbG9hdCBvZmZzZXRUb0dseXBoTGVmdCA9IC0y
OwotICAgIExheW91dFBvaW50IGdseXBoT3JpZ2luID0gTGF5b3V0UG9pbnQoZnJvbS54KCkgKyBv
ZmZzZXRUb0dseXBoTGVmdCwgc3RkOjptaW4oZnJvbS55KCksIHRvLnkoKSkgKyBtX3N0cmV0Y2hI
ZWlnaHRBYm92ZUJhc2VsaW5lKTsKLSAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3Qo
ZnJvbSwgRmxvYXRTaXplKCkpOwotCi0gICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1h
eFgoKSA8IHRvLngoKSkgewotICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5
cGgoaW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmltTGVmdEFuZFJp
Z2h0KTsKLSAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChnbHlwaE9yaWdpbi54KCkgKyBsYXN0UGFp
bnRlZEdseXBoUmVjdC53aWR0aCgpKTsKLQotICAgICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRo
YXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhlIGdsdWUgZ2x5cGggaGFzIGJl
ZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKLSAgICAgICAgLy8gd2l0aCB0cmltbWlu
Zy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgotICAgICAgICBpZiAobGFzdFBh
aW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
CiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludChQYWludEluZm8mIGluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBSZW5kZXJNYXRoTUxUb2tlbjo6cGFp
bnQoaW5mbywgcGFpbnRPZmZzZXQpOwogCi0gICAgaWYgKGluZm8uY29udGV4dCgpLnBhaW50aW5n
RGlzYWJsZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHN0eWxl
KCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgbV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlw
ZTo6VW5zdHJldGNoZWQpCisgICAgaWYgKGluZm8uY29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQo
KSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHN0eWxlKCkudmlzaWJp
bGl0eSgpICE9IFZJU0lCTEUgfHwgIW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihp
bmZvLmNvbnRleHQoKSk7CiAgICAgaW5mby5jb250ZXh0KCkuc2V0RmlsbENvbG9yKHN0eWxlKCku
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKTsKIAotICAgIGlmIChtX3N0
cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkgewotICAgICAgICBBU1NFUlQo
bV92YXJpYW50LmlzVmFsaWQoKSk7CisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5
cGUgPT0gTWF0aE9wZXJhdG9yOjpTdHJldGNoVHlwZTo6U2l6ZVZhcmlhbnQpIHsKKyAgICAgICAg
QVNTRVJUKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudC5pc1ZhbGlkKCkpOwogICAgICAgICBHbHlw
aEJ1ZmZlciBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5hZGQobV92YXJpYW50LmdseXBoLCBtX3Zh
cmlhbnQuZm9udCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV92YXJpYW50KSk7CisgICAgICAgIGJ1
ZmZlci5hZGQobV9tYXRoT3BlcmF0b3IubV92YXJpYW50LmdseXBoLCBtX21hdGhPcGVyYXRvci5t
X3ZhcmlhbnQuZm9udCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJp
YW50KSk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBv
aW50KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBnbHlwaEJv
dW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fdmFyaWFudCk7CisgICAgICAgIEZsb2F0UmVjdCBnbHlw
aEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAg
ICAgIExheW91dFBvaW50IG9wZXJhdG9yT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJh
dG9yVG9wTGVmdC55KCkgLSBnbHlwaEJvdW5kcy55KCkpOwotICAgICAgICBpbmZvLmNvbnRleHQo
KS5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fdmFyaWFudC5mb250LCBidWZm
ZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKKyAgICAgICAgaW5mby5jb250ZXh0KCkuZHJhd0ds
eXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICptX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQuZm9u
dCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAobV9pc1ZlcnRpY2FsKQotICAgICAgICBwYWludFZlcnRpY2FsR2x5cGhBc3Nl
bWJseShpbmZvLCBwYWludE9mZnNldCk7Ci0gICAgZWxzZQotICAgICAgICBwYWludEhvcml6b250
YWxHbHlwaEFzc2VtYmx5KGluZm8sIHBhaW50T2Zmc2V0KTsKLX0KLQotdm9pZCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCi17Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNh
bCk7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1i
bHkpOwotICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQuaXNWYWxpZCgpKTsKLSAgICBB
U1NFUlQobV9hc3NlbWJseS5ib3R0b21PckxlZnQuaXNWYWxpZCgpKTsKLQotICAgIC8vIFdlIGFy
ZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRoYXQgdGhlIGVkZ2Ugb2YgdGhlIHRpZ2h0IGds
eXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0aCB0aGUgZWRnZXMgb2Ygb3VyIHBhaW50IGJv
eC4KKyAgICBtX21hdGhPcGVyYXRvci5tX2FzY2VudCA9IG1fc3RyZXRjaEhlaWdodEFib3ZlQmFz
ZWxpbmU7CisgICAgbV9tYXRoT3BlcmF0b3IubV9kZXNjZW50ID0gbV9zdHJldGNoRGVwdGhCZWxv
d0Jhc2VsaW5lOworICAgIG1fbWF0aE9wZXJhdG9yLm1fd2lkdGggPSBsb2dpY2FsV2lkdGgoKTsK
ICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBwYWludE9mZnNldCArIGxvY2F0aW9u
KCk7CiAgICAgb3BlcmF0b3JUb3BMZWZ0Lm1vdmUoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBtX2xlYWRpbmdTcGFjZSA6IG1fdHJhaWxpbmdTcGFjZSwgMCk7Ci0gICAgb3BlcmF0
b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKLSAgICBGbG9hdFJl
Y3QgdG9wR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQp
OwotICAgIExheW91dFBvaW50IHRvcEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9w
ZXJhdG9yVG9wTGVmdC55KCkgLSB0b3BHbHlwaEJvdW5kcy55KCkpOwotICAgIExheW91dFJlY3Qg
dG9wR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHkudG9wT3JSaWdo
dCwgdG9wR2x5cGhPcmlnaW4sIFRyaW1Cb3R0b20pOwotCi0gICAgRmxvYXRSZWN0IGJvdHRvbUds
eXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5ib3R0b21PckxlZnQpOwotICAg
IExheW91dFBvaW50IGJvdHRvbUdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJh
dG9yVG9wTGVmdC55KCkgKyBvZmZzZXRIZWlnaHQoKSAtIChib3R0b21HbHlwaEJvdW5kcy5oZWln
aHQoKSArIGJvdHRvbUdseXBoQm91bmRzLnkoKSkpOwotICAgIExheW91dFJlY3QgYm90dG9tR2x5
cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0LCBi
b3R0b21HbHlwaE9yaWdpbiwgVHJpbVRvcCk7Ci0KLSAgICBpZiAobV9hc3NlbWJseS5taWRkbGUu
aXNWYWxpZCgpKSB7Ci0gICAgICAgIC8vIENlbnRlciB0aGUgZ2x5cGggb3JpZ2luIGJldHdlZW4g
dGhlIHN0YXJ0IGFuZCBlbmQgZ2x5cGggcGFpbnQgZXh0ZW50cy4gVGhlbiBzaGlmdCBpdCBoYWxm
IHRoZSBwYWludCBoZWlnaHQgdG93YXJkIHRoZSBib3R0b20gZ2x5cGguCi0gICAgICAgIEZsb2F0
UmVjdCBtaWRkbGVHbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkubWlkZGxl
KTsKLSAgICAgICAgTGF5b3V0UG9pbnQgbWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0
LngoKSwgdG9wR2x5cGhPcmlnaW4ueSgpKTsKLSAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92
ZUJ5KExheW91dFBvaW50KDAsIChib3R0b21HbHlwaFBhaW50UmVjdC55KCkgLSB0b3BHbHlwaFBh
aW50UmVjdC5tYXhZKCkpIC8gMi4wKSk7Ci0gICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVC
eShMYXlvdXRQb2ludCgwLCBtaWRkbGVHbHlwaEJvdW5kcy5oZWlnaHQoKSAvIDIuMCkpOwotCi0g
ICAgICAgIExheW91dFJlY3QgbWlkZGxlR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8s
IG1fYXNzZW1ibHkubWlkZGxlLCBtaWRkbGVHbHlwaE9yaWdpbiwgVHJpbVRvcEFuZEJvdHRvbSk7
Ci0gICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChpbmZvLCB0b3BHbHlwaFBh
aW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5taW5YTWluWUNv
cm5lcigpKTsKLSAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGluZm8sIG1p
ZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGJvdHRvbUdseXBoUGFpbnRSZWN0
Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIH0gZWxzZQotICAgICAgICBmaWxsV2l0aFZlcnRpY2Fs
RXh0ZW5zaW9uR2x5cGgoaW5mbywgdG9wR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwg
Ym90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci19Ci0KLXZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkoUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCi17Ci0gICAgQVNTRVJUKCFtX2lz
VmVydGljYWwpOwotICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlw
aEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS5ib3R0b21PckxlZnQuaXNWYWxpZCgp
KTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS50b3BPclJpZ2h0LmlzVmFsaWQoKSk7Ci0KLSAgICAv
LyBXZSBhcmUgcG9zaXRpb25pbmcgdGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0
aWdodCBnbHlwaCBib3VuZHMgbGluZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBw
YWludCBib3guCi0gICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQg
KyBsb2NhdGlvbigpOwotICAgIG9wZXJhdG9yVG9wTGVmdC5tb3ZlKG1fbGVhZGluZ1NwYWNlLCAw
KTsKLSAgICBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChvcGVyYXRvclRvcExlZnQp
OwotICAgIExheW91dFBvaW50IGxlZnRHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBv
cGVyYXRvclRvcExlZnQueSgpICsgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSk7Ci0gICAg
TGF5b3V0UmVjdCBsZWZ0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1i
bHkuYm90dG9tT3JMZWZ0LCBsZWZ0R2x5cGhPcmlnaW4sIFRyaW1SaWdodCk7Ci0KLSAgICBGbG9h
dFJlY3QgcmlnaHRHbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkudG9wT3JS
aWdodCk7Ci0gICAgTGF5b3V0UG9pbnQgcmlnaHRHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQu
eCgpICsgb2Zmc2V0V2lkdGgoKSAtIHJpZ2h0R2x5cGhCb3VuZHMud2lkdGgoKSwgb3BlcmF0b3JU
b3BMZWZ0LnkoKSArIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUpOwotICAgIExheW91dFJl
Y3QgcmlnaHRHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS50b3BP
clJpZ2h0LCByaWdodEdseXBoT3JpZ2luLCBUcmltTGVmdCk7Ci0KLSAgICBpZiAobV9hc3NlbWJs
eS5taWRkbGUuaXNWYWxpZCgpKSB7Ci0gICAgICAgIC8vIENlbnRlciB0aGUgZ2x5cGggb3JpZ2lu
IGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgZ2x5cGggcGFpbnQgZXh0ZW50cy4KLSAgICAgICAg
TGF5b3V0UG9pbnQgbWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgbGVmdEds
eXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQ
b2ludCgocmlnaHRHbHlwaFBhaW50UmVjdC54KCkgLSBsZWZ0R2x5cGhQYWludFJlY3QubWF4WCgp
KSAvIDIuMCwgMCkpOwotICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0g
cGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRy
aW1MZWZ0QW5kUmlnaHQpOwotICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlw
aChpbmZvLCBsZWZ0R2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSwgbWlkZGxlR2x5cGhQ
YWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4
dGVuc2lvbkdseXBoKGluZm8sIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCks
IHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGluZm8sIGxlZnRHbHlwaFBhaW50
UmVjdC5tYXhYTWluWUNvcm5lcigpLCByaWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVy
KCkpOworICAgIGlmIChtX2lzVmVydGljYWwpCisgICAgICAgIG1fbWF0aE9wZXJhdG9yLnBhaW50
VmVydGljYWxHbHlwaEFzc2VtYmx5KHN0eWxlKCksIGluZm8sIG9wZXJhdG9yVG9wTGVmdCk7Cisg
ICAgZWxzZQorICAgICAgICBtX21hdGhPcGVyYXRvci5wYWludEhvcml6b250YWxHbHlwaEFzc2Vt
Ymx5KHN0eWxlKCksIGluZm8sIG9wZXJhdG9yVG9wTGVmdCk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCwgUGFpbnRJbmZvJiBwYWludEluZm9Gb3JDaGlsZCwgYm9v
bCB1c2VQcmludFJlY3QpCiB7CiAgICAgLy8gV2Ugc2tpcCBwYWludGluZyBmb3IgaW52aXNpYmxl
IG9wZXJhdG9ycyB0b28gdG8gYXZvaWQgc29tZSAibWlzc2luZyBjaGFyYWN0ZXIiIGdseXBoIHRv
IGFwcGVhciBpZiBhcHByb3ByaWF0ZSBtYXRoIGZvbnRzIGFyZSBub3QgYXZhaWxhYmxlLgotICAg
IGlmIChtX3N0cmV0Y2hUeXBlICE9IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZCB8fCBpc0ludmlz
aWJsZU9wZXJhdG9yKCkpCisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkgfHwg
aXNJbnZpc2libGVPcGVyYXRvcigpKQogICAgICAgICByZXR1cm47CiAgICAgUmVuZGVyTWF0aE1M
VG9rZW46OnBhaW50Q2hpbGRyZW4ocGFpbnRJbmZvLCBwYWludE9mZnNldCwgcGFpbnRJbmZvRm9y
Q2hpbGQsIHVzZVByaW50UmVjdCk7CiB9CkBAIC05MzEsMTkgKzUwNiwxOSBAQCBMYXlvdXRVbml0
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluZ1NwYWNlRXJyb3IoKQogICAgIC8vIEhlbmNl
IHdlIGRldGVybWluZSB0aGUgZXJyb3IgaW4gdGhlIGxvZ2ljYWwgd2lkdGggd2l0aCByZXNwZWN0
IHRvIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIGdseXBoKHMpIHVzZWQgdG8gcGFpbnQgdGhlIG9w
ZXJhdG9yLgogICAgIExheW91dFVuaXQgd2lkdGggPSBsb2dpY2FsV2lkdGgoKTsKIAotICAgIGlm
IChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZCkgeworICAgIGlmICgh
bV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkgewogICAgICAgICBHbHlwaERhdGEgZGF0YSA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodGV4dENvbnRlbnQo
KSwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAgICAgcmV0dXJuIHdp
ZHRoIC0gYWR2YW5jZVdpZHRoRm9yR2x5cGgoZGF0YSk7CiAgICAgfQogCi0gICAgaWYgKG1fc3Ry
ZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OlNpemVWYXJpYW50KQotICAgICAgICByZXR1cm4gd2lk
dGggLSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX3ZhcmlhbnQpOworICAgIGlmIChtX21hdGhPcGVy
YXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U3RyZXRjaFR5cGU6OlNpemVWYXJp
YW50KQorICAgICAgICByZXR1cm4gd2lkdGggLSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX21hdGhP
cGVyYXRvci5tX3ZhcmlhbnQpOwogCi0gICAgZmxvYXQgYXNzZW1ibHlXaWR0aCA9IGFkdmFuY2VX
aWR0aEZvckdseXBoKG1fYXNzZW1ibHkudG9wT3JSaWdodCk7Ci0gICAgYXNzZW1ibHlXaWR0aCA9
IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1ibHku
Ym90dG9tT3JMZWZ0KSk7Ci0gICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lk
dGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1ibHkuZXh0ZW5zaW9uKSk7Ci0gICAgaWYg
KG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkKLSAgICAgICAgYXNzZW1ibHlXaWR0aCA9IHN0
ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1ibHkubWlk
ZGxlKSk7CisgICAgZmxvYXQgYXNzZW1ibHlXaWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKG1f
bWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkudG9wT3JSaWdodCk7CisgICAgYXNzZW1ibHlXaWR0aCA9
IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJh
dG9yLm1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0KSk7CisgICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6
bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1f
YXNzZW1ibHkuZXh0ZW5zaW9uKSk7CisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHku
bWlkZGxlLmlzVmFsaWQoKSkKKyAgICAgICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2Vt
Ymx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHku
bWlkZGxlKSk7CiAgICAgcmV0dXJuIHdpZHRoIC0gYXNzZW1ibHlXaWR0aDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5oCmluZGV4IGRjYTQ1NDEuLjYzMjE0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCiAj
aW5jbHVkZSAiTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiTWF0aE9wZXJh
dG9yLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgogI2luY2x1ZGUgIlJlbmRlck1h
dGhNTFRva2VuLmgiCiAKQEAgLTUxLDcgKzUyLDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBU
aGUgZGlzcGxheXN0eWxlIHByb3BlcnR5IGlzIG5vdCBpbXBsZW1lbnRlZCAoaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODczNykuCiAgICAgYm9vbCBpc0xhcmdlT3Bl
cmF0b3JJbkRpc3BsYXlTdHlsZSgpIGNvbnN0IHsgcmV0dXJuICFoYXNPcGVyYXRvckZsYWcoTWF0
aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpTdHJldGNoeSkgJiYgaGFzT3BlcmF0b3JGbGFnKE1hdGhN
TE9wZXJhdG9yRGljdGlvbmFyeTo6TGFyZ2VPcCk7IH0KICAgICBib29sIGlzVmVydGljYWwoKSBj
b25zdCB7IHJldHVybiBtX2lzVmVydGljYWw7IH0KLSAgICBMYXlvdXRVbml0IGl0YWxpY0NvcnJl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb247IH0KKyAgICBMYXlvdXRV
bml0IGl0YWxpY0NvcnJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX21hdGhPcGVyYXRvci5pdGFs
aWNDb3JyZWN0aW9uKCk7IH0KIAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRl
U3R5bGUoKSBmaW5hbDsKQEAgLTczLDIwICs3NCw2IEBAIHByb3RlY3RlZDoKICAgICBVQ2hhciB0
ZXh0Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRlbnQ7IH0KIAogcHJpdmF0ZToK
LSAgICBzdHJ1Y3QgR2x5cGhBc3NlbWJseURhdGEgewotICAgICAgICBHbHlwaERhdGEgdG9wT3JS
aWdodDsKLSAgICAgICAgR2x5cGhEYXRhIGV4dGVuc2lvbjsKLSAgICAgICAgR2x5cGhEYXRhIGJv
dHRvbU9yTGVmdDsKLSAgICAgICAgR2x5cGhEYXRhIG1pZGRsZTsKLSAgICB9OwotICAgIGVudW0g
Y2xhc3MgU3RyZXRjaFR5cGUgeyBVbnN0cmV0Y2hlZCwgU2l6ZVZhcmlhbnQsIEdseXBoQXNzZW1i
bHkgfTsKLSAgICBTdHJldGNoVHlwZSBtX3N0cmV0Y2hUeXBlOwotICAgIHVuaW9uIHsKLSAgICAg
ICAgR2x5cGhEYXRhIG1fdmFyaWFudDsKLSAgICAgICAgR2x5cGhBc3NlbWJseURhdGEgbV9hc3Nl
bWJseTsKLSAgICB9OwotICAgIExheW91dFVuaXQgbV9pdGFsaWNDb3JyZWN0aW9uOwotCiAgICAg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGlzQW5vbnlt
b3VzKCkgPyAiUmVuZGVyTWF0aE1MT3BlcmF0b3IgKGFub255bW91cykiIDogIlJlbmRlck1hdGhN
TE9wZXJhdG9yIjsgfQogICAgIHZvaWQgcGFpbnRDaGlsZHJlbihQYWludEluZm8mIGZvclNlbGYs
IGNvbnN0IExheW91dFBvaW50JiwgUGFpbnRJbmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJl
Y3QpIGZpbmFsOwogICAgIGJvb2wgaXNSZW5kZXJNYXRoTUxPcGVyYXRvcigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KQEAgLTEwMCwyNyArODcsNiBAQCBwcml2YXRlOgogCiAgICAgYm9v
bCBzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSBjb25zdDsKIAotICAgIGJvb2wgZ2V0QmFzZUdseXBo
KGNvbnN0IFJlbmRlclN0eWxlJiwgR2x5cGhEYXRhJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaXpl
VmFyaWFudChjb25zdCBHbHlwaERhdGEmKTsKLSAgICB2b2lkIHNldEdseXBoQXNzZW1ibHkoY29u
c3QgR2x5cGhBc3NlbWJseURhdGEmKTsKLSAgICBib29sIGNhbGN1bGF0ZUdseXBoQXNzZW1ibHlG
YWxsQmFjayhjb25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiYsIEds
eXBoQXNzZW1ibHlEYXRhJikgY29uc3Q7Ci0gICAgdm9pZCBjYWxjdWxhdGVEaXNwbGF5U3R5bGVM
YXJnZU9wZXJhdG9yKCk7Ci0gICAgdm9pZCBjYWxjdWxhdGVTdHJldGNoeURhdGEoZmxvYXQqIG1h
eGltdW1HbHlwaFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUgPSAwKTsKLQotICAgIGVudW0g
R2x5cGhQYWludFRyaW1taW5nIHsKLSAgICAgICAgVHJpbVRvcCwKLSAgICAgICAgVHJpbUJvdHRv
bSwKLSAgICAgICAgVHJpbVRvcEFuZEJvdHRvbSwKLSAgICAgICAgVHJpbUxlZnQsCi0gICAgICAg
IFRyaW1SaWdodCwKLSAgICAgICAgVHJpbUxlZnRBbmRSaWdodAotICAgIH07Ci0KLSAgICBMYXlv
dXRSZWN0IHBhaW50R2x5cGgoUGFpbnRJbmZvJiwgY29uc3QgR2x5cGhEYXRhJiwgY29uc3QgTGF5
b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nKTsKLSAgICB2b2lkIGZpbGxXaXRo
VmVydGljYWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgZnJv
bSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKLSAgICB2b2lkIGZpbGxXaXRoSG9yaXpvbnRhbEV4
dGVuc2lvbkdseXBoKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBM
YXlvdXRQb2ludCYgdG8pOwotICAgIHZvaWQgcGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2b2lkIHBhaW50SG9yaXpvbnRhbEds
eXBoQXNzZW1ibHkoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2b2lkIHNl
dE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFn
LCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBzZXRPcGVyYXRvckZsYWdGcm9tQXR0
cmlidXRlVmFsdWUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVZhbHVlKTsKICAgICB2b2lkIHNldE9wZXJhdG9yUHJvcGVydGllc0Zy
b21PcERpY3RFbnRyeShjb25zdCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5Kik7CkBA
IC0xMzcsNiArMTAzLDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG1fdHJhaWxpbmdTcGFj
ZTsKICAgICBMYXlvdXRVbml0IG1fbWluU2l6ZTsKICAgICBMYXlvdXRVbml0IG1fbWF4U2l6ZTsK
KyAgICBNYXRoT3BlcmF0b3IgbV9tYXRoT3BlcmF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278836</attachid>
            <date>2016-05-13 05:14:42 -0700</date>
            <delta_ts>2016-05-13 09:31:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0002-Bug-156950-Introduce-MathOperator-OperatorType.patch</filename>
            <type>text/plain</type>
            <size>12808</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSBhMTYwMjcxYzdiZGFjZWNkNDc3MjdlNWFlY2IxNjkxZTlmYWY4YWNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCAyNiBBcHIgMjAxNiAxMDowMDo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBC
dWcgMTU2OTUwIC0gSW50cm9kdWNlIE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlCgotLS0KIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzEgKysr
KysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9w
ZXJhdG9yLmNwcCAgIHwgMzMgKysrKysrKysrKysrLS0tLS0tLS0tLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaCAgICAgfCAxMSArKysrKystLQogLi4uL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwICAgICAgfCAxNCArKysrKysr
LS0KIDQgZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDhiMmFkMWMuLjk3Zjg5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBA
QAorMjAxNi0wNC0yNSAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgSW50cm9kdWNlIE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY5NTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlaGF2aW9yIGlz
IG5vdCBjaGFuZ2UuCisKKyAgICAgICAgQW4gZW51bSBPcGVyYXRvclR5cGUgaXMgaW50cm9kdWNl
ZCBpbiBNYXRoT3BlcmF0b3IgaW4gb3JkZXIgdG8gaW5kaWNhdGUKKyAgICAgICAgd2hpY2gga2lu
ZCBvZiBzdHJldGNoaW5nIGlzIHJlcXVlc3RlZC4gSW4gZm9sbG93LXVwIHdvcmssIHRoaXMgd2ls
bAorICAgICAgICBhbGxvdyB0byBqdXN0IGNhbGwgc2V0T3BlcmF0b3IgYW5kIHN0cmV0Y2hUbyB3
aXRob3V0IGhhdmluZyB0bworICAgICAgICBleHBsaWNpdGx5IGNhbGwgY2FsY3VsYXRlRGlzcGxh
eVN0eWxlTGFyZ2VPcGVyYXRvciBvciBjYWxjdWxhdGVTdHJldGNoeURhdGEuCisKKyAgICAgICAg
KiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6Ok1hdGhPcGVyYXRvcik6IFVzZSBPcGVyYXRvclR5cGUgaW5zdGVhZCBvZiBh
IGJvb2xlYW4uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkp
OiBBZGQgYW4gYXNzZXJ0IHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBpcyBjb3JyZWN0bHkg
dXNlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlRGlzcGxheVN0
eWxlTGFyZ2VPcGVyYXRvcik6IERpdHRvLCB0aGlzIG1ha2VzIHRoZSBhc3NlcnQgbW9yZSBhY2N1
cmF0ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlE
YXRhKTogRGl0dG8gYW5kIHJlcGxhY2UgbV9pc1ZlcnRpY2FsIHdpdGggYSBsb2NhbCBpc1ZlcnRp
Y2FsIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpmaWxsV2l0aFZl
cnRpY2FsRXh0ZW5zaW9uR2x5cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVy
YXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhB
c3NlbWJseSk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9y
Lmg6IEFkZCB0aGUgT3BlcmF0b3JUeXBlIGVudW0uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3Bl
cmF0b3I6OnN0cmV0Y2hTaXplKTogVXNlIE9wZXJhdG9yVHlwZSBpbnN0ZWFkIG9mIGEgYm9vbGVh
biBhbmQgYWRkIGFuCisgICAgICAgIGFzc2VydCB0byBlbnN1cmUgdGhhdCB0aGUgZnVuY3Rpb24g
aXMgY29ycmVjdGx5IHVzZWQuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBDYWxsIHNldE9wZXJhdG9yIHdpdGggdGhl
IGNvcnJlY3QgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
dXBkYXRlU3R5bGUpOiBEaXR0by4KKwogMjAxNi0wNC0yMiAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5n
QGlnYWxpYS5jb20+CiAKICAgICAgICAgTW92ZSBzZWxlY3Rpb24gYW5kIGRyYXdpbmcgb2Ygc3Ry
ZXRjaHkgb3BlcmF0b3JzIGludG8gYSBzZXBhcmF0ZSBNYXRoT3BlcmF0b3IgY2xhc3MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcAppbmRleCA1
Njg1ZWU3Li45MGE1MzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL01hdGhPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9NYXRoT3BlcmF0b3IuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRpYyBjb25zdCBTdHJldGNo
eUNoYXJhY3RlciBzdHJldGNoeUNoYXJhY3RlcnNbMTRdID0gewogCiBNYXRoT3BlcmF0b3I6Ok1h
dGhPcGVyYXRvcigpCiAgICAgOiBtX2Jhc2VDaGFyYWN0ZXIoMCkKLSAgICAsIG1faXNWZXJ0aWNh
bChmYWxzZSkKKyAgICAsIG1fb3BlcmF0b3JUeXBlKE9wZXJhdG9yVHlwZTo6VW5kZWZpbmVkT3Bl
cmF0b3IpCiAgICAgLCBtX3N0cmV0Y2hUeXBlKFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZCkKICAg
ICAsIG1fd2lkdGgoMCkKICAgICAsIG1fYXNjZW50KDApCkBAIC04NiwxMCArODYsMTAgQEAgTWF0
aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IoKQogewogfQogCi12b2lkIE1hdGhPcGVyYXRvcjo6c2V0
T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgYm9vbCBpc1ZlcnRpY2FsKQordm9pZCBNYXRo
T3BlcmF0b3I6OnNldE9wZXJhdG9yKFVDaGFyIGJhc2VDaGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSBv
cGVyYXRvclR5cGUpCiB7CiAgICAgbV9iYXNlQ2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlcjsKLSAg
ICBtX2lzVmVydGljYWwgPSBpc1ZlcnRpY2FsOworICAgIG1fb3BlcmF0b3JUeXBlID0gb3BlcmF0
b3JUeXBlOwogfQogCiBib29sIE1hdGhPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBiYXNlR2x5cGgpIGNvbnN0CkBAIC0xMDcsMTMgKzEw
NywxNCBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRh
JiBzaXplVmFyaWFudCkKIAogdm9pZCBNYXRoT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkoY29u
c3QgR2x5cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5RGF0YSkKIHsKKyAgICBBU1NFUlQobV9vcGVy
YXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yIHx8IG1fb3BlcmF0b3JU
eXBlID09IE9wZXJhdG9yVHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9yKTsKICAgICBtX3N0cmV0Y2hU
eXBlID0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHk7CiAgICAgbV9hc3NlbWJseSA9IGFzc2Vt
Ymx5RGF0YTsKIH0KIAogdm9pZCBNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZURpc3BsYXlTdHlsZUxh
cmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIEFTU0VSVChtX2lz
VmVydGljYWwpOworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OkRp
c3BsYXlPcGVyYXRvcik7CiAKICAgICBHbHlwaERhdGEgYmFzZUdseXBoOwogICAgIGlmICghZ2V0
QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgpIHx8ICFiYXNlR2x5cGguZm9udC0+bWF0aERhdGEo
KSkKQEAgLTI0MSw3ICsyNDIsOSBAQCBib29sIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlR2x5cGhB
c3NlbWJseUZhbGxCYWNrKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29ucwogCiB2b2lkIE1h
dGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgZmxvYXQqIG1heGltdW1HbHlwaFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUpCiB7Ci0g
ICAgQVNTRVJUKCFtYXhpbXVtR2x5cGhXaWR0aCB8fCBtX2lzVmVydGljYWwpOworICAgIEFTU0VS
VChtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3IgfHwgbV9v
cGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3IpOworICAgIEFT
U0VSVCghbWF4aW11bUdseXBoV2lkdGggfHwgbV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBl
OjpWZXJ0aWNhbE9wZXJhdG9yKTsKKyAgICBib29sIGlzVmVydGljYWwgPSBtX29wZXJhdG9yVHlw
ZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3I7CiAKICAgICBHbHlwaERhdGEgYmFz
ZUdseXBoOwogICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgpKQpAQCAtMjQ5
LDcgKzI1Miw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11CiAKICAgICBpZiAoIW1heGltdW1H
bHlwaFdpZHRoKSB7CiAgICAgICAgIC8vIFdlIGRvIG5vdCBzdHJldGNoIGlmIHRoZSBiYXNlIGds
eXBoIGlzIGxhcmdlIGVub3VnaC4KLSAgICAgICAgZmxvYXQgYmFzZVNpemUgPSBtX2lzVmVydGlj
YWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFz
ZUdseXBoKTsKKyAgICAgICAgZmxvYXQgYmFzZVNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0Rm9y
R2x5cGgoYmFzZUdseXBoKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCk7CiAgICAg
ICAgIGlmICh0YXJnZXRTaXplIDw9IGJhc2VTaXplKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTI1OCw3ICsyNjEsNyBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRj
aHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQqIG1heGltdQogICAgIGlmIChi
YXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkgewogICAgICAgICBWZWN0b3I8R2x5cGg+IHNpemVW
YXJpYW50czsKICAgICAgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4g
YXNzZW1ibHlQYXJ0czsKLSAgICAgICAgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1h
dGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIG1faXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBh
c3NlbWJseVBhcnRzKTsKKyAgICAgICAgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1h
dGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIGlzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNz
ZW1ibHlQYXJ0cyk7CiAgICAgICAgIC8vIFdlIHZlcmlmeSB0aGUgc2l6ZSB2YXJpYW50cy4KICAg
ICAgICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6IHNpemVWYXJpYW50cykgewogICAgICAgICAg
ICAgR2x5cGhEYXRhIGdseXBoRGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOwpAQCAt
MjY2LDcgKzI2OSw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11CiAgICAgICAgICAgICAgICAg
Km1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNl
V2lkdGhGb3JHbHlwaChnbHlwaERhdGEpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgIHNldFNpemVWYXJpYW50KGdseXBoRGF0YSk7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
c2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgOiBhZHZhbmNl
V2lkdGhGb3JHbHlwaChnbHlwaERhdGEpOworICAgICAgICAgICAgICAgIGZsb2F0IHNpemUgPSBp
c1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0aEZvckds
eXBoKGdseXBoRGF0YSk7CiAgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gdGFyZ2V0U2l6ZSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjc2LDcgKzI3
OSw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11CiAgICAgICAgIGlmICghY2FsY3VsYXRlR2x5
cGhBc3NlbWJseUZhbGxCYWNrKHN0eWxlLCBhc3NlbWJseVBhcnRzLCBhc3NlbWJseURhdGEpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9pc1ZlcnRp
Y2FsKQorICAgICAgICBpZiAoIWlzVmVydGljYWwpCiAgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgLy8gSWYgdGhlIGZvbnQgZG9lcyBub3QgaGF2ZSBhIE1BVEggdGFibGUsIHdlIGZhbGxi
YWNrIHRvIHRoZSBVbmljb2RlLW9ubHkgY29uc3RydWN0aW9ucy4KQEAgLTMxNCw3ICszMTcsNyBA
QCB2b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgZmxvYXQqIG1heGltdQogICAgIH0KIAogICAgIC8vIFdlIGVuc3VyZSB0aGF0
IHRoZSBzaXplIGlzIGxhcmdlIGVub3VnaCB0byBhdm9pZCBnbHlwaCBvdmVybGFwcy4KLSAgICBm
bG9hdCBtaW5TaXplID0gbV9pc1ZlcnRpY2FsID8KKyAgICBmbG9hdCBtaW5TaXplID0gaXNWZXJ0
aWNhbCA/CiAgICAgICAgIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0KSAr
IGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgaGVpZ2h0Rm9yR2x5cGgoYXNz
ZW1ibHlEYXRhLmJvdHRvbU9yTGVmdCkKICAgICAgICAgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChh
c3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KSArIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5
RGF0YS5taWRkbGUpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcE9yUmln
aHQpOwogICAgIGlmIChtaW5TaXplID4gdGFyZ2V0U2l6ZSkKQEAgLTM3Nyw3ICszODAsNyBAQCBM
YXlvdXRSZWN0IE1hdGhPcGVyYXRvcjo6cGFpbnRHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFBhaW50SW5mbyYgaW5mbywgYwogCiB2b2lkIE1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0
aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQogewot
ICAgIEFTU0VSVChtX2lzVmVydGljYWwpOworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBP
cGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3IpOwogICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBl
ID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKICAgICBBU1NFUlQobV9hc3NlbWJseS5l
eHRlbnNpb24uaXNWYWxpZCgpKTsKICAgICBBU1NFUlQoZnJvbS55KCkgPD0gdG8ueSgpKTsKQEAg
LTQxNSw3ICs0MTgsNyBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVu
c2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbgogCiB2b2lkIE1hdGhPcGVy
YXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBM
YXlvdXRQb2ludCYgdG8pCiB7Ci0gICAgQVNTRVJUKCFtX2lzVmVydGljYWwpOworICAgIEFTU0VS
VChtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6Okhvcml6b250YWxPcGVyYXRvcik7CiAg
ICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkpOwog
ICAgIEFTU0VSVChtX2Fzc2VtYmx5LmV4dGVuc2lvbi5pc1ZhbGlkKCkpOwogICAgIEFTU0VSVChm
cm9tLngoKSA8PSB0by54KCkpOwpAQCAtNDUxLDcgKzQ1NCw3IEBAIHZvaWQgTWF0aE9wZXJhdG9y
OjpmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFBhCiAKIHZvaWQgTWF0aE9wZXJhdG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0KQogewotICAgIEFTU0VSVChtX2lzVmVydGljYWwpOworICAgIEFTU0VS
VChtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3IpOwogICAg
IEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKICAg
ICBBU1NFUlQobV9hc3NlbWJseS50b3BPclJpZ2h0LmlzVmFsaWQoKSk7CiAgICAgQVNTRVJUKG1f
YXNzZW1ibHkuYm90dG9tT3JMZWZ0LmlzVmFsaWQoKSk7CkBAIC00ODMsMTAgKzQ4NiwxMCBAQCB2
b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBQYWludEluZgogCiB2b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRIb3Jpem9u
dGFsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIEFTU0VSVCghbV9pc1Zl
cnRpY2FsKTsKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpIb3Jp
em9udGFsT3BlcmF0b3IpOwogICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBl
OjpHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS5ib3R0b21PckxlZnQuaXNW
YWxpZCgpKTsKICAgICBBU1NFUlQobV9hc3NlbWJseS50b3BPclJpZ2h0LmlzVmFsaWQoKSk7Cisg
ICAgQVNTRVJUKG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0LmlzVmFsaWQoKSk7CiAKICAgICAvLyBX
ZSBhcmUgcG9zaXRpb25pbmcgdGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdo
dCBnbHlwaCBib3VuZHMgbGluZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWlu
dCBib3guCiAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaAppbmRleCA0
YWM0YjE1Li4yYzBkNDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL01hdGhPcGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
TWF0aE9wZXJhdG9yLmgKQEAgLTM5LDggKzM5LDkgQEAgY2xhc3MgUmVuZGVyU3R5bGU7CiAKIGNs
YXNzIE1hdGhPcGVyYXRvciB7CiBwdWJsaWM6CisgICAgZW51bSBjbGFzcyBPcGVyYXRvclR5cGUg
eyBVbmRlZmluZWRPcGVyYXRvciwgRGlzcGxheU9wZXJhdG9yLCBWZXJ0aWNhbE9wZXJhdG9yLCBI
b3Jpem9udGFsT3BlcmF0b3IgfTsKICAgICBNYXRoT3BlcmF0b3IoKTsKLSAgICB2b2lkIHNldE9w
ZXJhdG9yKFVDaGFyIGJhc2VDaGFyYWN0ZXIsIGJvb2wgaXNWZXJ0aWNhbCk7CisgICAgdm9pZCBz
ZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBPcGVyYXRvclR5cGUpOwogCiAgICAgTGF5
b3V0VW5pdCBpdGFsaWNDb3JyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pdGFsaWNDb3JyZWN0
aW9uOyB9CiAKQEAgLTY1LDcgKzY2LDExIEBAIHB1YmxpYzoKICAgICAgICAgVHJpbUxlZnRBbmRS
aWdodAogICAgIH07CiAKLSAgICBMYXlvdXRVbml0IHN0cmV0Y2hTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9pc1ZlcnRpY2FsID8gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgOiBtX3dpZHRoOyB9OworICAg
IExheW91dFVuaXQgc3RyZXRjaFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
b3BlcmF0b3JUeXBlID09IE9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvciB8fCBtX29wZXJh
dG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6Okhvcml6b250YWxPcGVyYXRvcik7CisgICAgICAgIHJl
dHVybiBtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3IgPyBt
X2FzY2VudCArIG1fZGVzY2VudCA6IG1fd2lkdGg7CisgICAgfQogICAgIGJvb2wgZ2V0QmFzZUds
eXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgR2x5cGhEYXRhJikgY29uc3Q7CiAgICAgdm9pZCBzZXRT
aXplVmFyaWFudChjb25zdCBHbHlwaERhdGEmKTsKICAgICB2b2lkIHNldEdseXBoQXNzZW1ibHko
Y29uc3QgR2x5cGhBc3NlbWJseURhdGEmKTsKQEAgLTgwLDcgKzg1LDcgQEAgcHVibGljOgogICAg
IHZvaWQgcGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYsIFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKICAgICBVQ2hhciBtX2Jhc2VDaGFyYWN0
ZXI7Ci0gICAgYm9vbCBtX2lzVmVydGljYWw7CisgICAgT3BlcmF0b3JUeXBlIG1fb3BlcmF0b3JU
eXBlOwogICAgIFN0cmV0Y2hUeXBlIG1fc3RyZXRjaFR5cGU7CiAgICAgdW5pb24gewogICAgICAg
ICBHbHlwaERhdGEgbV92YXJpYW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAppbmRleCAxMWYxYzE5Li5hMTJi
YjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTE9wZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmNwcApAQCAtMjY3LDcgKzI2NywxMiBAQCB2b2lkIFJlbmRlck1h
dGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250
ZW50LCBtX2lzVmVydGljYWwpOworICAgIE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlIHR5cGU7
CisgICAgaWYgKGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpCisgICAgICAgIHR5cGUg
PSBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZTo6RGlzcGxheU9wZXJhdG9yOworICAgIGVsc2UK
KyAgICAgICAgdHlwZSA9IG1faXNWZXJ0aWNhbCA/IE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBl
OjpWZXJ0aWNhbE9wZXJhdG9yIDogTWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGU6Okhvcml6b250
YWxPcGVyYXRvcjsKKyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50
LCB0eXBlKTsKICAgICBHbHlwaERhdGEgYmFzZUdseXBoOwogICAgIGZsb2F0IG1heGltdW1HbHlw
aFdpZHRoID0gbV9tYXRoT3BlcmF0b3IuZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkg
PyBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpIDogMDsKICAgICBpZiAoIW1faXNWZXJ0
aWNhbCkgewpAQCAtMzY5LDcgKzM3NCwxMiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1
cGRhdGVTdHlsZSgpCiAgICAgaWYgKCFzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwg
bV9pc1ZlcnRpY2FsKTsKKyAgICBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZSB0eXBlOworICAg
IGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKQorICAgICAgICB0eXBlID0gTWF0
aE9wZXJhdG9yOjpPcGVyYXRvclR5cGU6OkRpc3BsYXlPcGVyYXRvcjsKKyAgICBlbHNlCisgICAg
ICAgIHR5cGUgPSBtX2lzVmVydGljYWwgPyBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZTo6VmVy
dGljYWxPcGVyYXRvciA6IE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3Bl
cmF0b3I7CisgICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwgdHlw
ZSk7CiAgICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHls
ZSgpKQogICAgICAgICBtX21hdGhPcGVyYXRvci5jYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9w
ZXJhdG9yKHN0eWxlKCkpOwogICAgIGVsc2UgewotLSAKMi44LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278841</attachid>
            <date>2016-05-13 09:31:39 -0700</date>
            <delta_ts>2016-06-08 23:24:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0002-Bug-156950-Introduce-MathOperator-Type.patch</filename>
            <type>text/plain</type>
            <size>12125</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA0MGQ3MzMwY2VkMjFjM2ExODliZGU5ZGQ0NWFkYmM1MzZjN2E2ZTEwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCAyNiBBcHIgMjAxNiAxMDowMDo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBC
dWcgMTU2OTUwIC0gSW50cm9kdWNlIE1hdGhPcGVyYXRvcjo6VHlwZQoKLS0tCiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMwICsrKysrKysrKysr
KysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9y
LmNwcCAgIHwgMjkgKysrKysrKysrKystLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL01hdGhPcGVyYXRvci5oICAgICB8IDExICsrKysrLS0tCiAuLi4vcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAgICAgICB8IDE0ICsrKysrKysrLS0KIDQg
ZmlsZXMgY2hhbmdlZCwgNjYgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDhiMmFkMWMuLjIyZDljZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAx
Ni0wNC0yNSAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAgSW50
cm9kdWNlIE1hdGhPcGVyYXRvcjo6VHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU2OTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWhhdmlvciBpcyBub3QgY2hhbmdlLgor
CisgICAgICAgIEFuIGVudW0gVHlwZSBpcyBpbnRyb2R1Y2VkIGluIE1hdGhPcGVyYXRvciBpbiBv
cmRlciB0byBpbmRpY2F0ZQorICAgICAgICB3aGljaCBraW5kIG9mIHN0cmV0Y2hpbmcgaXMgcmVx
dWVzdGVkLiBJbiBmb2xsb3ctdXAgd29yaywgdGhpcyB3aWxsCisgICAgICAgIGFsbG93IHRvIGp1
c3QgY2FsbCBzZXRPcGVyYXRvciBhbmQgc3RyZXRjaFRvIHdpdGhvdXQgaGF2aW5nIHRvCisgICAg
ICAgIGV4cGxpY2l0bHkgY2FsbCBjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yIG9y
IGNhbGN1bGF0ZVN0cmV0Y2h5RGF0YS4KKworICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0
aE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0
b3IpOiBVc2UgVHlwZSBpbnN0ZWFkIG9mIGEgYm9vbGVhbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1h
dGhPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseSk6IEFkZCBhbiBhc3NlcnQgdG8gZW5zdXJlIHRo
YXQgdGhlIGZ1bmN0aW9uIGlzIGNvcnJlY3RseSB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6TWF0
aE9wZXJhdG9yOjpjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKTogRGl0dG8sIHRo
aXMgbWFrZXMgdGhlIGFzc2VydCBtb3JlIGFjY3VyYXRlLgorICAgICAgICAoV2ViQ29yZTo6TWF0
aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEpOiBEaXR0byBhbmQgcmVwbGFjZSBtX2lz
VmVydGljYWwgd2l0aCBhIGxvY2FsIGlzVmVydGljYWwgdmFyaWFibGUuCisgICAgICAgIChXZWJD
b3JlOjpNYXRoT3BlcmF0b3I6OmZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRl
bnNpb25HbHlwaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpwYWlu
dFZlcnRpY2FsR2x5cGhBc3NlbWJseSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9w
ZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KTogRGl0dG8uCisgICAgICAgICog
cmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaDogQWRkIHRoZSBUeXBlIGVudW0uCisgICAg
ICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnN0cmV0Y2hTaXplKTogVXNlIFR5cGUgaW5zdGVh
ZCBvZiBhIGJvb2xlYW4gYW5kIGFkZCBhbgorICAgICAgICBhc3NlcnQgdG8gZW5zdXJlIHRoYXQg
dGhlIGZ1bmN0aW9uIGlzIGNvcnJlY3RseSB1c2VkLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogQ2FsbCBzZXRPcGVy
YXRvciB3aXRoIHRoZSBjb3JyZWN0IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogRGl0dG8uCisKIDIwMTYtMDQtMjIgIEZyZWRlcmlj
IFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCiAgICAgICAgIE1vdmUgc2VsZWN0aW9uIGFuZCBk
cmF3aW5nIG9mIHN0cmV0Y2h5IG9wZXJhdG9ycyBpbnRvIGEgc2VwYXJhdGUgTWF0aE9wZXJhdG9y
IGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhP
cGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRv
ci5jcHAKaW5kZXggMDY2ZmY2ZC4uZjM5ODA4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcApAQCAtNzUsMTAgKzc1LDEwIEBAIHN0YXRp
YyBjb25zdCBTdHJldGNoeUNoYXJhY3RlciBzdHJldGNoeUNoYXJhY3RlcnNbMTRdID0gewogICAg
IHsgMHgyMjJiLCAweDIzMjAsIDB4MjNhZSwgMHgyMzIxLCAweDAgICAgfSAvLyBpbnRlZ3JhbCBz
aWduCiB9OwogCi12b2lkIE1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJh
Y3RlciwgYm9vbCBpc1ZlcnRpY2FsKQordm9pZCBNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKFVD
aGFyIGJhc2VDaGFyYWN0ZXIsIFR5cGUgb3BlcmF0b3JUeXBlKQogewogICAgIG1fYmFzZUNoYXJh
Y3RlciA9IGJhc2VDaGFyYWN0ZXI7Ci0gICAgbV9pc1ZlcnRpY2FsID0gaXNWZXJ0aWNhbDsKKyAg
ICBtX29wZXJhdG9yVHlwZSA9IG9wZXJhdG9yVHlwZTsKIH0KIAogYm9vbCBNYXRoT3BlcmF0b3I6
OmdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEdseXBoRGF0YSYgYmFzZUds
eXBoKSBjb25zdApAQCAtOTYsMTMgKzk2LDE0IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpzZXRTaXpl
VmFyaWFudChjb25zdCBHbHlwaERhdGEmIHNpemVWYXJpYW50KQogCiB2b2lkIE1hdGhPcGVyYXRv
cjo6c2V0R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlEYXRh
KQogeworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBUeXBlOjpWZXJ0aWNhbE9wZXJhdG9y
IHx8IG1fb3BlcmF0b3JUeXBlID09IFR5cGU6Okhvcml6b250YWxPcGVyYXRvcik7CiAgICAgbV9z
dHJldGNoVHlwZSA9IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5OwogICAgIG1fYXNzZW1ibHkg
PSBhc3NlbWJseURhdGE7CiB9CiAKIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVEaXNwbGF5
U3R5bGVMYXJnZU9wZXJhdG9yKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBBU1NF
UlQobV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gVHlwZTo6RGlz
cGxheU9wZXJhdG9yKTsKIAogICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7CiAgICAgaWYgKCFnZXRC
YXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkgfHwgIWJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgp
KQpAQCAtMjMwLDcgKzIzMSw5IEBAIGJvb2wgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVHbHlwaEFz
c2VtYmx5RmFsbEJhY2soY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zCiAKIHZvaWQgTWF0
aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBmbG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSkKIHsKLSAg
ICBBU1NFUlQoIW1heGltdW1HbHlwaFdpZHRoIHx8IG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJU
KG1fb3BlcmF0b3JUeXBlID09IFR5cGU6OlZlcnRpY2FsT3BlcmF0b3IgfHwgbV9vcGVyYXRvclR5
cGUgPT0gVHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9yKTsKKyAgICBBU1NFUlQoIW1heGltdW1HbHlw
aFdpZHRoIHx8IG1fb3BlcmF0b3JUeXBlID09IFR5cGU6OlZlcnRpY2FsT3BlcmF0b3IpOworICAg
IGJvb2wgaXNWZXJ0aWNhbCA9IG1fb3BlcmF0b3JUeXBlID09IFR5cGU6OlZlcnRpY2FsT3BlcmF0
b3I7CiAKICAgICBHbHlwaERhdGEgYmFzZUdseXBoOwogICAgIGlmICghZ2V0QmFzZUdseXBoKHN0
eWxlLCBiYXNlR2x5cGgpKQpAQCAtMjM4LDcgKzI0MSw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpj
YWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4
aW11CiAKICAgICBpZiAoIW1heGltdW1HbHlwaFdpZHRoKSB7CiAgICAgICAgIC8vIFdlIGRvIG5v
dCBzdHJldGNoIGlmIHRoZSBiYXNlIGdseXBoIGlzIGxhcmdlIGVub3VnaC4KLSAgICAgICAgZmxv
YXQgYmFzZVNpemUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDog
YWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsKKyAgICAgICAgZmxvYXQgYmFzZVNpemUg
PSBpc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoYmFzZUdseXBoKSA6IGFkdmFuY2VXaWR0aEZv
ckdseXBoKGJhc2VHbHlwaCk7CiAgICAgICAgIGlmICh0YXJnZXRTaXplIDw9IGJhc2VTaXplKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0Nyw3ICsyNTAsNyBAQCB2b2lkIE1hdGhP
cGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
ZmxvYXQqIG1heGltdQogICAgIGlmIChiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkgewogICAg
ICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKICAgICAgICAgVmVjdG9yPE9wZW5UeXBl
TWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKLSAgICAgICAgYmFzZUdseXBo
LmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIG1faXNW
ZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKKyAgICAgICAgYmFzZUdseXBo
LmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIGlzVmVy
dGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CiAgICAgICAgIC8vIFdlIHZlcmlm
eSB0aGUgc2l6ZSB2YXJpYW50cy4KICAgICAgICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6IHNp
emVWYXJpYW50cykgewogICAgICAgICAgICAgR2x5cGhEYXRhIGdseXBoRGF0YShzaXplVmFyaWFu
dCwgYmFzZUdseXBoLmZvbnQpOwpAQCAtMjU1LDcgKzI1OCw3IEBAIHZvaWQgTWF0aE9wZXJhdG9y
OjpjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCog
bWF4aW11CiAgICAgICAgICAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1h
eGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERhdGEpKTsKICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHNldFNpemVWYXJpYW50KGdseXBoRGF0YSk7
Ci0gICAgICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckds
eXBoKGdseXBoRGF0YSkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERhdGEpOworICAgICAg
ICAgICAgICAgIGZsb2F0IHNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhE
YXRhKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSk7CiAgICAgICAgICAgICAgICAg
aWYgKHNpemUgPj0gdGFyZ2V0U2l6ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQpAQCAtMjY1LDcgKzI2OCw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxh
dGVTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11CiAg
ICAgICAgIGlmICghY2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxCYWNrKHN0eWxlLCBhc3NlbWJs
eVBhcnRzLCBhc3NlbWJseURhdGEpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmICghbV9pc1ZlcnRpY2FsKQorICAgICAgICBpZiAoIWlzVmVydGljYWwpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gSWYgdGhlIGZvbnQgZG9lcyBub3QgaGF2
ZSBhIE1BVEggdGFibGUsIHdlIGZhbGxiYWNrIHRvIHRoZSBVbmljb2RlLW9ubHkgY29uc3RydWN0
aW9ucy4KQEAgLTMwMyw3ICszMDYsNyBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3Ry
ZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQqIG1heGltdQogICAgIH0K
IAogICAgIC8vIFdlIGVuc3VyZSB0aGF0IHRoZSBzaXplIGlzIGxhcmdlIGVub3VnaCB0byBhdm9p
ZCBnbHlwaCBvdmVybGFwcy4KLSAgICBmbG9hdCBtaW5TaXplID0gbV9pc1ZlcnRpY2FsID8KKyAg
ICBmbG9hdCBtaW5TaXplID0gaXNWZXJ0aWNhbCA/CiAgICAgICAgIGhlaWdodEZvckdseXBoKGFz
c2VtYmx5RGF0YS50b3BPclJpZ2h0KSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRk
bGUpICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdCkKICAgICAgICAg
OiBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KSArIGFkdmFu
Y2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgYWR2YW5jZVdpZHRoRm9yR2x5
cGgoYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQpOwogICAgIGlmIChtaW5TaXplID4gdGFyZ2V0U2l6
ZSkKQEAgLTM2Niw3ICszNjksNyBAQCBMYXlvdXRSZWN0IE1hdGhPcGVyYXRvcjo6cGFpbnRHbHlw
aChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgYwogCiB2b2lkIE1h
dGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29u
c3QgTGF5b3V0UG9pbnQmIHRvKQogewotICAgIEFTU0VSVChtX2lzVmVydGljYWwpOworICAgIEFT
U0VSVChtX29wZXJhdG9yVHlwZSA9PSBUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yKTsKICAgICBBU1NF
UlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseSk7CiAgICAgQVNT
RVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7CiAgICAgQVNTRVJUKGZyb20ueSgp
IDw9IHRvLnkoKSk7CkBAIC00MDQsNyArNDA3LDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmZpbGxX
aXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW4K
IAogdm9pZCBNYXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQogewotICAgIEFTU0VSVCghbV9pc1ZlcnRp
Y2FsKTsKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gVHlwZTo6SG9yaXpvbnRhbE9wZXJh
dG9yKTsKICAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhBc3Nl
bWJseSk7CiAgICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7CiAgICAg
QVNTRVJUKGZyb20ueCgpIDw9IHRvLngoKSk7CkBAIC00NDAsNyArNDQzLDcgQEAgdm9pZCBNYXRo
T3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgUGEKIAogdm9pZCBNYXRoT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFz
c2VtYmx5KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7Cisg
ICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IFR5cGU6OlZlcnRpY2FsT3BlcmF0b3IpOwogICAg
IEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKICAg
ICBBU1NFUlQobV9hc3NlbWJseS50b3BPclJpZ2h0LmlzVmFsaWQoKSk7CiAgICAgQVNTRVJUKG1f
YXNzZW1ibHkuYm90dG9tT3JMZWZ0LmlzVmFsaWQoKSk7CkBAIC00NzIsNyArNDc1LDcgQEAgdm9p
ZCBNYXRoT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgUGFpbnRJbmYKIAogdm9pZCBNYXRoT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRh
bEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBBU1NFUlQoIW1faXNWZXJ0
aWNhbCk7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IFR5cGU6Okhvcml6b250YWxPcGVy
YXRvcik7CiAgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OkdseXBoQXNz
ZW1ibHkpOwogICAgIEFTU0VSVChtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdC5pc1ZhbGlkKCkpOwog
ICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQuaXNWYWxpZCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCmluZGV4IDM1N2Y4ZDQuLmFl
MTI0ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9w
ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0
b3IuaApAQCAtNDAsNyArNDAsOCBAQCBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIE1hdGhPcGVy
YXRvciB7CiBwdWJsaWM6CiAgICAgTWF0aE9wZXJhdG9yKCkgeyB9Ci0gICAgdm9pZCBzZXRPcGVy
YXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBib29sIGlzVmVydGljYWwpOworICAgIGVudW0gY2xh
c3MgVHlwZSB7IFVuZGVmaW5lZE9wZXJhdG9yLCBEaXNwbGF5T3BlcmF0b3IsIFZlcnRpY2FsT3Bl
cmF0b3IsIEhvcml6b250YWxPcGVyYXRvciB9OworICAgIHZvaWQgc2V0T3BlcmF0b3IoVUNoYXIg
YmFzZUNoYXJhY3RlciwgVHlwZSk7CiAKICAgICBMYXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb247IH0KIApAQCAtNjUsNyArNjYsMTEg
QEAgcHVibGljOgogICAgICAgICBUcmltTGVmdEFuZFJpZ2h0CiAgICAgfTsKIAotICAgIExheW91
dFVuaXQgc3RyZXRjaFNpemUoKSBjb25zdCB7IHJldHVybiBtX2lzVmVydGljYWwgPyBtX2FzY2Vu
dCArIG1fZGVzY2VudCA6IG1fd2lkdGg7IH07CisgICAgTGF5b3V0VW5pdCBzdHJldGNoU2l6ZSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gVHlwZTo6VmVy
dGljYWxPcGVyYXRvciB8fCBtX29wZXJhdG9yVHlwZSA9PSBUeXBlOjpIb3Jpem9udGFsT3BlcmF0
b3IpOworICAgICAgICByZXR1cm4gbV9vcGVyYXRvclR5cGUgPT0gVHlwZTo6VmVydGljYWxPcGVy
YXRvciA/IG1fYXNjZW50ICsgbV9kZXNjZW50IDogbV93aWR0aDsKKyAgICB9CiAgICAgYm9vbCBn
ZXRCYXNlR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmLCBHbHlwaERhdGEmKSBjb25zdDsKICAgICB2
b2lkIHNldFNpemVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYpOwogICAgIHZvaWQgc2V0R2x5cGhB
c3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYpOwpAQCAtODAsNyArODUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0
eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAogICAgIFVDaGFyIG1fYmFz
ZUNoYXJhY3RlciA9IDA7Ci0gICAgYm9vbCBtX2lzVmVydGljYWwgPSBmYWxzZTsKKyAgICBUeXBl
IG1fb3BlcmF0b3JUeXBlID0gVHlwZTo6VW5kZWZpbmVkT3BlcmF0b3I7CiAgICAgU3RyZXRjaFR5
cGUgbV9zdHJldGNoVHlwZSA9IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZDsKICAgICB1bmlvbiB7
CiAgICAgICAgIEdseXBoRGF0YSBtX3ZhcmlhbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCmluZGV4IDExZjFj
MTkuLjg3MmIzZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC0yNjcsNyArMjY3LDEyIEBAIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1f
dGV4dENvbnRlbnQsIG1faXNWZXJ0aWNhbCk7CisgICAgTWF0aE9wZXJhdG9yOjpUeXBlIHR5cGU7
CisgICAgaWYgKGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpCisgICAgICAgIHR5cGUg
PSBNYXRoT3BlcmF0b3I6OlR5cGU6OkRpc3BsYXlPcGVyYXRvcjsKKyAgICBlbHNlCisgICAgICAg
IHR5cGUgPSBtX2lzVmVydGljYWwgPyBNYXRoT3BlcmF0b3I6OlR5cGU6OlZlcnRpY2FsT3BlcmF0
b3IgOiBNYXRoT3BlcmF0b3I6OlR5cGU6Okhvcml6b250YWxPcGVyYXRvcjsKKyAgICBtX21hdGhP
cGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCB0eXBlKTsKICAgICBHbHlwaERhdGEg
YmFzZUdseXBoOwogICAgIGZsb2F0IG1heGltdW1HbHlwaFdpZHRoID0gbV9tYXRoT3BlcmF0b3Iu
Z2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkgPyBhZHZhbmNlV2lkdGhGb3JHbHlwaChi
YXNlR2x5cGgpIDogMDsKICAgICBpZiAoIW1faXNWZXJ0aWNhbCkgewpAQCAtMzY5LDcgKzM3NCwx
MiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiAgICAgaWYgKCFz
aG91bGRBbGxvd1N0cmV0Y2hpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9tYXRoT3Bl
cmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwgbV9pc1ZlcnRpY2FsKTsKKyAgICBNYXRo
T3BlcmF0b3I6OlR5cGUgdHlwZTsKKyAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5
bGUoKSkKKyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6VHlwZTo6RGlzcGxheU9wZXJhdG9y
OworICAgIGVsc2UKKyAgICAgICAgdHlwZSA9IG1faXNWZXJ0aWNhbCA/IE1hdGhPcGVyYXRvcjo6
VHlwZTo6VmVydGljYWxPcGVyYXRvciA6IE1hdGhPcGVyYXRvcjo6VHlwZTo6SG9yaXpvbnRhbE9w
ZXJhdG9yOworICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4dENvbnRlbnQsIHR5
cGUpOwogICAgIGlmIChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5
bGUoKSkKICAgICAgICAgbV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VP
cGVyYXRvcihzdHlsZSgpKTsKICAgICBlbHNlIHsKLS0gCjIuOC4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280886</attachid>
            <date>2016-06-08 23:24:13 -0700</date>
            <delta_ts>2016-06-09 07:08:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Bug-156950-Introduce-MathOperator-Type.patch</filename>
            <type>text/plain</type>
            <size>12127</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSBkMDc5OWE4YTc1M2FiMDIxOGM4MWNiYTQ0MzgzYzJmYTM0YWJmM2E4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCAyNiBBcHIgMjAxNiAxMDowMDo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDEvMTld
IEJ1ZyAxNTY5NTAgLSBJbnRyb2R1Y2UgTWF0aE9wZXJhdG9yOjpUeXBlCgotLS0KIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzAgKysrKysrKysr
KysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0
b3IuY3BwICAgfCAyOSArKysrKysrKysrKy0tLS0tLS0tLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmggICAgIHwgMTEgKysrKystLS0KIC4uLi9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCAgICAgIHwgMTQgKysrKysrKystLQog
NCBmaWxlcyBjaGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggZGQyYTMxMS4uZDdjNTUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisy
MDE2LTA0LTI1ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBJ
bnRyb2R1Y2UgTWF0aE9wZXJhdG9yOjpUeXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY5NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlaGF2aW9yIGlzIG5vdCBjaGFuZ2Uu
CisKKyAgICAgICAgQW4gZW51bSBUeXBlIGlzIGludHJvZHVjZWQgaW4gTWF0aE9wZXJhdG9yIGlu
IG9yZGVyIHRvIGluZGljYXRlCisgICAgICAgIHdoaWNoIGtpbmQgb2Ygc3RyZXRjaGluZyBpcyBy
ZXF1ZXN0ZWQuIEluIGZvbGxvdy11cCB3b3JrLCB0aGlzIHdpbGwKKyAgICAgICAgYWxsb3cgdG8g
anVzdCBjYWxsIHNldE9wZXJhdG9yIGFuZCBzdHJldGNoVG8gd2l0aG91dCBoYXZpbmcgdG8KKyAg
ICAgICAgZXhwbGljaXRseSBjYWxsIGNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ig
b3IgY2FsY3VsYXRlU3RyZXRjaHlEYXRhLgorCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9N
YXRoT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzZXRPcGVy
YXRvcik6IFVzZSBUeXBlIGluc3RlYWQgb2YgYSBib29sZWFuLgorICAgICAgICAoV2ViQ29yZTo6
TWF0aE9wZXJhdG9yOjpzZXRHbHlwaEFzc2VtYmx5KTogQWRkIGFuIGFzc2VydCB0byBlbnN1cmUg
dGhhdCB0aGUgZnVuY3Rpb24gaXMgY29ycmVjdGx5IHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6OmNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBEaXR0bywg
dGhpcyBtYWtlcyB0aGUgYXNzZXJ0IG1vcmUgYWNjdXJhdGUuCisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YSk6IERpdHRvIGFuZCByZXBsYWNlIG1f
aXNWZXJ0aWNhbCB3aXRoIGEgbG9jYWwgaXNWZXJ0aWNhbCB2YXJpYWJsZS4KKyAgICAgICAgKFdl
YkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4
dGVuc2lvbkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBh
aW50VmVydGljYWxHbHlwaEFzc2VtYmx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRo
T3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkpOiBEaXR0by4KKyAgICAgICAg
KiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oOiBBZGQgdGhlIFR5cGUgZW51bS4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c3RyZXRjaFNpemUpOiBVc2UgVHlwZSBpbnN0
ZWFkIG9mIGEgYm9vbGVhbiBhbmQgYWRkIGFuCisgICAgICAgIGFzc2VydCB0byBlbnN1cmUgdGhh
dCB0aGUgZnVuY3Rpb24gaXMgY29ycmVjdGx5IHVzZWQuCisgICAgICAgICogcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBDYWxsIHNldE9w
ZXJhdG9yIHdpdGggdGhlIGNvcnJlY3QgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUpOiBEaXR0by4KKwogMjAxNi0wNi0wOCAgRnJlZGVy
aWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CiAKICAgICAgICAgTW92ZSBzZWxlY3Rpb24gYW5k
IGRyYXdpbmcgb2Ygc3RyZXRjaHkgb3BlcmF0b3JzIGludG8gYSBzZXBhcmF0ZSBNYXRoT3BlcmF0
b3IgY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0
aE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJh
dG9yLmNwcAppbmRleCA2YWExOWE1Li4xYTYwMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwCkBAIC03NSwxMCArNzUsMTAgQEAgc3Rh
dGljIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyIHN0cmV0Y2h5Q2hhcmFjdGVyc1sxNF0gPSB7CiAg
ICAgeyAweDIyMmIsIDB4MjMyMCwgMHgyM2FlLCAweDIzMjEsIDB4MCAgICB9IC8vIGludGVncmFs
IHNpZ24KIH07CiAKLXZvaWQgTWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hh
cmFjdGVyLCBib29sIGlzVmVydGljYWwpCit2b2lkIE1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3Io
VUNoYXIgYmFzZUNoYXJhY3RlciwgVHlwZSBvcGVyYXRvclR5cGUpCiB7CiAgICAgbV9iYXNlQ2hh
cmFjdGVyID0gYmFzZUNoYXJhY3RlcjsKLSAgICBtX2lzVmVydGljYWwgPSBpc1ZlcnRpY2FsOwor
ICAgIG1fb3BlcmF0b3JUeXBlID0gb3BlcmF0b3JUeXBlOwogfQogCiBib29sIE1hdGhPcGVyYXRv
cjo6Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBiYXNl
R2x5cGgpIGNvbnN0CkBAIC05NywxMyArOTcsMTQgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OnNldFNp
emVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYgc2l6ZVZhcmlhbnQpCiAKIHZvaWQgTWF0aE9wZXJh
dG9yOjpzZXRHbHlwaEFzc2VtYmx5KGNvbnN0IEdseXBoQXNzZW1ibHlEYXRhJiBhc3NlbWJseURh
dGEpCiB7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IFR5cGU6OlZlcnRpY2FsT3BlcmF0
b3IgfHwgbV9vcGVyYXRvclR5cGUgPT0gVHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9yKTsKICAgICBt
X3N0cmV0Y2hUeXBlID0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHk7CiAgICAgbV9hc3NlbWJs
eSA9IGFzc2VtYmx5RGF0YTsKIH0KIAogdm9pZCBNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZURpc3Bs
YXlTdHlsZUxhcmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIEFT
U0VSVChtX2lzVmVydGljYWwpOworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBUeXBlOjpE
aXNwbGF5T3BlcmF0b3IpOwogCiAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKICAgICBpZiAoIWdl
dEJhc2VHbHlwaChzdHlsZSwgYmFzZUdseXBoKSB8fCAhYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRh
KCkpCkBAIC0yMzAsNyArMjMxLDkgQEAgYm9vbCBNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZUdseXBo
QXNzZW1ibHlGYWxsYmFjayhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnMKIAogdm9pZCBN
YXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQogewot
ICAgIEFTU0VSVCghbWF4aW11bUdseXBoV2lkdGggfHwgbV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NF
UlQobV9vcGVyYXRvclR5cGUgPT0gVHlwZTo6VmVydGljYWxPcGVyYXRvciB8fCBtX29wZXJhdG9y
VHlwZSA9PSBUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3IpOworICAgIEFTU0VSVCghbWF4aW11bUds
eXBoV2lkdGggfHwgbV9vcGVyYXRvclR5cGUgPT0gVHlwZTo6VmVydGljYWxPcGVyYXRvcik7Cisg
ICAgYm9vbCBpc1ZlcnRpY2FsID0gbV9vcGVyYXRvclR5cGUgPT0gVHlwZTo6VmVydGljYWxPcGVy
YXRvcjsKIAogICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7CiAgICAgaWYgKCFnZXRCYXNlR2x5cGgo
c3R5bGUsIGJhc2VHbHlwaCkpCkBAIC0yMzgsNyArMjQxLDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6
OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBt
YXhpbXUKIAogICAgIGlmICghbWF4aW11bUdseXBoV2lkdGgpIHsKICAgICAgICAgLy8gV2UgZG8g
bm90IHN0cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgotICAgICAgICBm
bG9hdCBiYXNlU2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkg
OiBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpOworICAgICAgICBmbG9hdCBiYXNlU2l6
ZSA9IGlzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5jZVdpZHRo
Rm9yR2x5cGgoYmFzZUdseXBoKTsKICAgICAgICAgaWYgKHRhcmdldFNpemUgPD0gYmFzZVNpemUp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ3LDcgKzI1MCw3IEBAIHZvaWQgTWF0
aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBmbG9hdCogbWF4aW11CiAgICAgaWYgKGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7CiAg
ICAgICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOwogICAgICAgICBWZWN0b3I8T3BlblR5
cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwotICAgICAgICBiYXNlR2x5
cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9p
c1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOworICAgICAgICBiYXNlR2x5
cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgaXNW
ZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKICAgICAgICAgLy8gV2UgdmVy
aWZ5IHRoZSBzaXplIHZhcmlhbnRzLgogICAgICAgICBmb3IgKGF1dG8mIHNpemVWYXJpYW50IDog
c2l6ZVZhcmlhbnRzKSB7CiAgICAgICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNpemVWYXJp
YW50LCBiYXNlR2x5cGguZm9udCk7CkBAIC0yNTUsNyArMjU4LDcgQEAgdm9pZCBNYXRoT3BlcmF0
b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0
KiBtYXhpbXUKICAgICAgICAgICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgq
bWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSkpOwogICAg
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRh
KTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9y
R2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSk7CisgICAg
ICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChnbHlw
aERhdGEpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKTsKICAgICAgICAgICAgICAg
ICBpZiAoc2l6ZSA+PSB0YXJnZXRTaXplKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CkBAIC0yNjUsNyArMjY4LDcgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmNhbGN1
bGF0ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXUK
ICAgICAgICAgaWYgKCFjYWxjdWxhdGVHbHlwaEFzc2VtYmx5RmFsbGJhY2soc3R5bGUsIGFzc2Vt
Ymx5UGFydHMsIGFzc2VtYmx5RGF0YSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKCFtX2lzVmVydGljYWwpCisgICAgICAgIGlmICghaXNWZXJ0aWNhbCkK
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBJZiB0aGUgZm9udCBkb2VzIG5vdCBo
YXZlIGEgTUFUSCB0YWJsZSwgd2UgZmFsbGJhY2sgdG8gdGhlIFVuaWNvZGUtb25seSBjb25zdHJ1
Y3Rpb25zLgpAQCAtMzAzLDcgKzMwNiw3IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVT
dHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11CiAgICAg
fQogCiAgICAgLy8gV2UgZW5zdXJlIHRoYXQgdGhlIHNpemUgaXMgbGFyZ2UgZW5vdWdoIHRvIGF2
b2lkIGdseXBoIG92ZXJsYXBzLgotICAgIGZsb2F0IG1pblNpemUgPSBtX2lzVmVydGljYWwgPwor
ICAgIGZsb2F0IG1pblNpemUgPSBpc1ZlcnRpY2FsID8KICAgICAgICAgaGVpZ2h0Rm9yR2x5cGgo
YXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQpICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1p
ZGRsZSkgKyBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KQogICAgICAg
ICA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQpICsgYWR2
YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkgKyBhZHZhbmNlV2lkdGhGb3JH
bHlwaChhc3NlbWJseURhdGEudG9wT3JSaWdodCk7CiAgICAgaWYgKG1pblNpemUgPiB0YXJnZXRT
aXplKQpAQCAtMzY2LDcgKzM2OSw3IEBAIExheW91dFJlY3QgTWF0aE9wZXJhdG9yOjpwYWludEds
eXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjCiAKIHZvaWQg
TWF0aE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBj
b25zdCBMYXlvdXRQb2ludCYgdG8pCiB7Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAg
QVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IFR5cGU6OlZlcnRpY2FsT3BlcmF0b3IpOwogICAgIEFT
U0VSVChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKICAgICBB
U1NFUlQobV9hc3NlbWJseS5leHRlbnNpb24uaXNWYWxpZCgpKTsKICAgICBBU1NFUlQoZnJvbS55
KCkgPD0gdG8ueSgpKTsKQEAgLTQwNCw3ICs0MDcsNyBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6Zmls
bFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFp
bgogCiB2b2lkIE1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBv
aW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCiB7Ci0gICAgQVNTRVJUKCFtX2lzVmVy
dGljYWwpOworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBUeXBlOjpIb3Jpem9udGFsT3Bl
cmF0b3IpOwogICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFz
c2VtYmx5KTsKICAgICBBU1NFUlQobV9hc3NlbWJseS5leHRlbnNpb24uaXNWYWxpZCgpKTsKICAg
ICBBU1NFUlQoZnJvbS54KCkgPD0gdG8ueCgpKTsKQEAgLTQ0MCw3ICs0NDMsNyBAQCB2b2lkIE1h
dGhPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBQYQogCiB2b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBo
QXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsK
KyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gVHlwZTo6VmVydGljYWxPcGVyYXRvcik7CiAg
ICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkpOwog
ICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQuaXNWYWxpZCgpKTsKICAgICBBU1NFUlQo
bV9hc3NlbWJseS5ib3R0b21PckxlZnQuaXNWYWxpZCgpKTsKQEAgLTQ3Miw3ICs0NzUsNyBAQCB2
b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBQYWludEluZgogCiB2b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRIb3Jpem9u
dGFsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIEFTU0VSVCghbV9pc1Zl
cnRpY2FsKTsKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gVHlwZTo6SG9yaXpvbnRhbE9w
ZXJhdG9yKTsKICAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhB
c3NlbWJseSk7CiAgICAgQVNTRVJUKG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0LmlzVmFsaWQoKSk7
CiAgICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wT3JSaWdodC5pc1ZhbGlkKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKaW5kZXggZGY5ZjQ4OC4u
NmIyYmYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRo
T3BlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5oCkBAIC00MCw3ICs0MCw4IEBAIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgTWF0aE9w
ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBNYXRoT3BlcmF0b3IoKSB7IH0KLSAgICB2b2lkIHNldE9w
ZXJhdG9yKFVDaGFyIGJhc2VDaGFyYWN0ZXIsIGJvb2wgaXNWZXJ0aWNhbCk7CisgICAgZW51bSBj
bGFzcyBUeXBlIHsgVW5kZWZpbmVkT3BlcmF0b3IsIERpc3BsYXlPcGVyYXRvciwgVmVydGljYWxP
cGVyYXRvciwgSG9yaXpvbnRhbE9wZXJhdG9yIH07CisgICAgdm9pZCBzZXRPcGVyYXRvcihVQ2hh
ciBiYXNlQ2hhcmFjdGVyLCBUeXBlKTsKIAogICAgIExheW91dFVuaXQgaXRhbGljQ29ycmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1faXRhbGljQ29ycmVjdGlvbjsgfQogCkBAIC02NSw3ICs2Niwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIFRyaW1MZWZ0QW5kUmlnaHQKICAgICB9OwogCi0gICAgTGF5
b3V0VW5pdCBzdHJldGNoU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWZXJ0aWNhbCA/IG1fYXNj
ZW50ICsgbV9kZXNjZW50IDogbV93aWR0aDsgfTsKKyAgICBMYXlvdXRVbml0IHN0cmV0Y2hTaXpl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBUeXBlOjpW
ZXJ0aWNhbE9wZXJhdG9yIHx8IG1fb3BlcmF0b3JUeXBlID09IFR5cGU6Okhvcml6b250YWxPcGVy
YXRvcik7CisgICAgICAgIHJldHVybiBtX29wZXJhdG9yVHlwZSA9PSBUeXBlOjpWZXJ0aWNhbE9w
ZXJhdG9yID8gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgOiBtX3dpZHRoOworICAgIH0KICAgICBib29s
IGdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIEdseXBoRGF0YSYpIGNvbnN0OwogICAg
IHZvaWQgc2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJik7CiAgICAgdm9pZCBzZXRHbHlw
aEFzc2VtYmx5KGNvbnN0IEdseXBoQXNzZW1ibHlEYXRhJik7CkBAIC04MCw3ICs4NSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVy
U3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCiAgICAgVUNoYXIgbV9i
YXNlQ2hhcmFjdGVyID0gMDsKLSAgICBib29sIG1faXNWZXJ0aWNhbCA9IGZhbHNlOworICAgIFR5
cGUgbV9vcGVyYXRvclR5cGUgPSBUeXBlOjpVbmRlZmluZWRPcGVyYXRvcjsKICAgICBTdHJldGNo
VHlwZSBtX3N0cmV0Y2hUeXBlID0gU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVkOwogICAgIHVuaW9u
IHsKICAgICAgICAgR2x5cGhEYXRhIG1fdmFyaWFudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKaW5kZXggMTFm
MWMxOS4uODcyYjNlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKQEAgLTI2Nyw3ICsyNjcsMTIgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3Io
bV90ZXh0Q29udGVudCwgbV9pc1ZlcnRpY2FsKTsKKyAgICBNYXRoT3BlcmF0b3I6OlR5cGUgdHlw
ZTsKKyAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkKKyAgICAgICAgdHlw
ZSA9IE1hdGhPcGVyYXRvcjo6VHlwZTo6RGlzcGxheU9wZXJhdG9yOworICAgIGVsc2UKKyAgICAg
ICAgdHlwZSA9IG1faXNWZXJ0aWNhbCA/IE1hdGhPcGVyYXRvcjo6VHlwZTo6VmVydGljYWxPcGVy
YXRvciA6IE1hdGhPcGVyYXRvcjo6VHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9yOworICAgIG1fbWF0
aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4dENvbnRlbnQsIHR5cGUpOwogICAgIEdseXBoRGF0
YSBiYXNlR2x5cGg7CiAgICAgZmxvYXQgbWF4aW11bUdseXBoV2lkdGggPSBtX21hdGhPcGVyYXRv
ci5nZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBoKSA/IGFkdmFuY2VXaWR0aEZvckdseXBo
KGJhc2VHbHlwaCkgOiAwOwogICAgIGlmICghbV9pc1ZlcnRpY2FsKSB7CkBAIC0zNjksNyArMzc0
LDEyIEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKICAgICBpZiAo
IXNob3VsZEFsbG93U3RyZXRjaGluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX21hdGhP
cGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCBtX2lzVmVydGljYWwpOworICAgIE1h
dGhPcGVyYXRvcjo6VHlwZSB0eXBlOworICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlT
dHlsZSgpKQorICAgICAgICB0eXBlID0gTWF0aE9wZXJhdG9yOjpUeXBlOjpEaXNwbGF5T3BlcmF0
b3I7CisgICAgZWxzZQorICAgICAgICB0eXBlID0gbV9pc1ZlcnRpY2FsID8gTWF0aE9wZXJhdG9y
OjpUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yIDogTWF0aE9wZXJhdG9yOjpUeXBlOjpIb3Jpem9udGFs
T3BlcmF0b3I7CisgICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwg
dHlwZSk7CiAgICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlT
dHlsZSgpKQogICAgICAgICBtX21hdGhPcGVyYXRvci5jYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJn
ZU9wZXJhdG9yKHN0eWxlKCkpOwogICAgIGVsc2UgewotLSAKMi44LjEKCg==
</data>
<flag name="review"
          id="304762"
          type_id="1"
          status="+"
          setter="svillar"
    />
          </attachment>
      

    </bug>

</bugzilla>