<?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>138732</bug_id>
          
          <creation_ts>2014-11-14 02:09:16 -0800</creation_ts>
          <short_desc>Refactor RenderMathMLOperator to avoid relayout during layout</short_desc>
          <delta_ts>2016-02-05 03:23:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>MathML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>133845</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alejandro G. Castro">alex</reporter>
          <assigned_to name="Alejandro G. Castro">alex</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbarton</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mrobinson</cc>
    
    <cc>sabouhallawa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1048695</commentid>
    <comment_count>0</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2014-11-14 02:09:16 -0800</bug_when>
    <thetext>The row layout code checks the stretch distance and this function updates style which causes a layout and width calculation. This should not be required just parsing the values when they change and dividing the updateStyle funcion in two, creating a calculateStretchDistance function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050192</commentid>
    <comment_count>1</comment_count>
      <attachid>241963</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2014-11-20 10:51:56 -0800</bug_when>
    <thetext>Created attachment 241963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050883</commentid>
    <comment_count>2</comment_count>
      <attachid>242170</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2014-11-24 13:02:17 -0800</bug_when>
    <thetext>Created attachment 242170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050884</commentid>
    <comment_count>3</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2014-11-24 13:03:35 -0800</bug_when>
    <thetext>Updated patch, I found a better refactor of some parts and fixed a couple of errors in the previous code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050890</commentid>
    <comment_count>4</comment_count>
      <attachid>242173</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2014-11-24 14:14:31 -0800</bug_when>
    <thetext>Created attachment 242173
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051109</commentid>
    <comment_count>5</comment_count>
      <attachid>242234</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2014-11-26 10:31:30 -0800</bug_when>
    <thetext>Created attachment 242234
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051111</commentid>
    <comment_count>6</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2014-11-26 10:39:29 -0800</bug_when>
    <thetext>Last modifications are improving the rationale of the layout process in the rows:

  - layout every children and calculate the stretch size height of that row based on the children that are not stretchy.
  - calculate the new stretch size for the children that are operators and if the stretch size changes layout again those children.

In other to do that we mark for layout and run the layout again. I still have doubts about the solution for the tables because apparently mtd tags are not implemented using inferred rows like proposed in the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053140</commentid>
    <comment_count>7</comment_count>
      <attachid>242234</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-12-07 08:08:24 -0800</bug_when>
    <thetext>Comment on attachment 242234
Patch

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

Here are a couple comments about style, but when you get a moment I&apos;d like to walk through the substantive changes with you.

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1214
&gt; +        return entry-&gt;lspace * style().font().size() / 18;

It looks like you could put style().font().size() / 18 into a helper function that returns the factor.

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1228
&gt; +const MathMLOperatorDictionary::Entry* RenderMathMLOperator::getDictionaryEntry()

getOperatorDictionaryEntry maybe?

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1230
&gt; +    if (m_textContent) {

Looks like this should be an early return?

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1241
&gt; +        const MathMLOperatorDictionary::Entry* entry = tryBinarySearch&lt;const MathMLOperatorDictionary::Entry, MathMLOperatorDictionary::Key&gt;(MathMLOperatorDictionary::dictionary, MATHML_OPDICT_SIZE, MathMLOperatorDictionary::Key(m_textContent, m_operatorForm), MathMLOperatorDictionary::ExtractKey);
&gt; +        if (entry)
&gt; +            return entry;

Could this be moved above the if (!isAnonymous()) block?

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1244
&gt; +        if (!explicitForm) {
&gt; +            // If we did not find the desired operator form and if it was not set explicitely, we use the first one in the following order: Infix, Prefix, Postfix.

Ditto.

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1258
&gt; +#undef MATHML_OPDICT_SIZE

Where is this defined? Perhaps it should be a const int?

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1277
&gt; +void RenderMathMLOperator::setOperatorFlagsFromOpDictEntry(const MathMLOperatorDictionary::Entry* entry, MathMLOperatorDictionary::Flag flag)

RenderMathMLOperator::setOperatorFlagsFromOpDictEntry -&gt; RenderMathMLOperator::setOperatorFlagsFromOperatorDictionaryEntry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061112</commentid>
    <comment_count>8</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2015-01-14 00:51:03 -0800</bug_when>
    <thetext>Thanks for the comments martin, I&apos;m checking the option to use a little bit more of the flexbox stretch to make the code clearer, I&apos;ll upload a patch after checking if it is possible with the changes you propose.

(In reply to comment #7)
&gt; Comment on attachment 242234 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=242234&amp;action=review
&gt; 
&gt; Here are a couple comments about style, but when you get a moment I&apos;d like
&gt; to walk through the substantive changes with you.
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1214
&gt; &gt; +        return entry-&gt;lspace * style().font().size() / 18;
&gt; 
&gt; It looks like you could put style().font().size() / 18 into a helper
&gt; function that returns the factor.
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1228
&gt; &gt; +const MathMLOperatorDictionary::Entry* RenderMathMLOperator::getDictionaryEntry()
&gt; 
&gt; getOperatorDictionaryEntry maybe?
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1230
&gt; &gt; +    if (m_textContent) {
&gt; 
&gt; Looks like this should be an early return?
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1241
&gt; &gt; +        const MathMLOperatorDictionary::Entry* entry = tryBinarySearch&lt;const MathMLOperatorDictionary::Entry, MathMLOperatorDictionary::Key&gt;(MathMLOperatorDictionary::dictionary, MATHML_OPDICT_SIZE, MathMLOperatorDictionary::Key(m_textContent, m_operatorForm), MathMLOperatorDictionary::ExtractKey);
&gt; &gt; +        if (entry)
&gt; &gt; +            return entry;
&gt; 
&gt; Could this be moved above the if (!isAnonymous()) block?
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1244
&gt; &gt; +        if (!explicitForm) {
&gt; &gt; +            // If we did not find the desired operator form and if it was not set explicitely, we use the first one in the following order: Infix, Prefix, Postfix.
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1258
&gt; &gt; +#undef MATHML_OPDICT_SIZE
&gt; 
&gt; Where is this defined? Perhaps it should be a const int?
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:1277
&gt; &gt; +void RenderMathMLOperator::setOperatorFlagsFromOpDictEntry(const MathMLOperatorDictionary::Entry* entry, MathMLOperatorDictionary::Flag flag)
&gt; 
&gt; RenderMathMLOperator::setOperatorFlagsFromOpDictEntry -&gt;
&gt; RenderMathMLOperator::setOperatorFlagsFromOperatorDictionaryEntry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162369</commentid>
    <comment_count>9</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-05 03:23:21 -0800</bug_when>
    <thetext>After the proposal in https://lists.webkit.org/pipermail/webkit-dev/2015-December/027840.html, and the branch in https://github.com/alexgcastro/webkit/tree/MathMLLayout. This refactor does not make sense anymore.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241963</attachid>
            <date>2014-11-20 10:51:56 -0800</date>
            <delta_ts>2014-11-24 13:02:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138732-20141120195209.patch</filename>
            <type>text/plain</type>
            <size>29679</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzIxZDRhNjE1Y2ViYWZi
NGNkNzBiNjQ4MTI0ZWU4MTI2MjAzMDYyNy4uN2UxMGM0NThhZjlkOTJjY2Y5MWVjNTEzYzU4Y2U3
NGVjNjEyNjY2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE0LTExLTE0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFJl
bmRlck1hdGhNTE9wZXJhdG9yIHRvIGF2b2lkIHJlbGF5b3V0IGR1cmluZyBsYXlvdXQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODczMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBu
ZWVkZWQgdGhpcyBwYXRjaCBmaXhlcyBsYXlvdXQgYW5kIHJlZmFjdG9ycyBjb2RlLgorCisgICAg
ICAgICogbWF0aG1sL01hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWF0aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKTog
VGhlCisgICAgICAgIHByb3BlcnRpZXMgb2YgdGhlIG1yb290IGFuZCBtc3FydCB3ZXJlIG5vdCB1
cGRhdGVkIHByb3Blcmx5LgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxUZXh0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxUZXh0RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBB
ZGRlZCB0aGUgcGFyc2luZworICAgICAgICBjb2RlIGZvciB0aGUgb3RoZXIgb3BlcmF0b3IgdmFs
dWVzIHRoYXQgYXJlIHVzZWQgZm9yIHJlbmRlcmluZy4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeTo6aXNPcGVyYXRvckZsYWdBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6Z2V0T3BlcmF0b3JGbGFnRnJv
bUF0dHJpYnV0ZU5hbWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpzZXRPcGVyYXRvckZsYWdBbmRTY2hlZHVsZUxheW91dElmTmVlZGVkKToKKyAgICAg
ICAgQWRkZWQgY29kZSB0byBjaGVjayB0aGUgY2FzZSB3aGVuIHRoZSB2YWx1ZSBpcyBudWxsLCBp
biB0aGF0IGNhc2UKKyAgICAgICAgd2UgaW5pdCB0aGUgZmxhZy4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1hdGhNTE9wZXJhdG9yOjppbml0T3BlcmF0b3JGbGFncyk6IFRoaXMgaXMgdGhlCisg
ICAgICAgIHNhbWUgY29kZSBpbml0aWFsaXppbmcgZmxhZ3MgdGhhdCB3YXMgdXNlZCBpbiBzZXRQ
cm9wZXJ0aWVzIGJ1dAorICAgICAgICBub3cgaXQgYWxsb3dzIHRvIGluaXQganVzdCBvbmUgZmxh
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclBy
b3BlcnRpZXNGcm9tT3BEaWN0RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcyk6IE1vdmVkIHRoZQorICAgICAgICBmbGFn
cyBpbml0aWFsaXphdGlvbiB0byBhIG5ldyBmdW5jdGlvbiwgc28gdGhhdCB3ZSBjYW4gdXNlIGl0
IGZvcgorICAgICAgICBzcGVjaWZpYyBmbGFncy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpzdHJldGNoVG8pOiBBdm9pZGVkIHNldFByb3BlcnRpZXMKKyAgICAgICAg
YW5kIHVwZGF0ZVN0eWxlIHdoZW4gZG9pbmcgdGhlIGxheW91dCwgaXQgc2hvdWxkIGhhcHBlbiBi
ZWZvcmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICBSZW1vdmVkIGNhbGxzIHRvIHNldFByb3Bl
cnRpZXMgYW5kIHVwZGF0ZVN0eWxlLCB0aGUgcHJvcGVydGllcworICAgICAgICBhcmUgYWxyZWFk
eSBzZXQgd2hlbiBidWlsZGluZyB0aGUgY29udGVudCwgd2UgZG8gbm90IG5lZWQgdG8gc2V0Cisg
ICAgICAgIHRoZW0gYWdhaW4uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6cmVidWlsZFRva2VuQ29udGVudCk6IFRoZSBzdHlsZQorICAgICAgICBhbmQgdGhlIHJlcXVl
c3QgZm9yIGxheW91dCBub3cgaGFwcGVucyBpbiB0aGUgc2V0UHJvcGVydGllcworICAgICAgICBt
ZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlT3Bl
cmF0b3JQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9y
OjpzdHlsZURpZENoYW5nZSk6IFdlIGhhdmUgdG8gc2V0CisgICAgICAgIHRoZSBwcm9wZXJ0aWVz
IHdoZW4gdGhlIHN0eWxlIGNoYW5nZXMgYmVjYXVzZSB0aGUgY2FsY3VsYXRpb25zCisgICAgICAg
IGRlcGVuZCBvbiB0aGUgZm9udCBzaXplLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogVGhpcyBpcyB0aGUgb2xkCisgICAgICAgIHVwZGF0ZVN0
eWxlIG1ldGhvZCBwYXJ0IHRoYXQgcmVhbGx5IHVwZGF0ZXMgdGhlIHN0eWxlIGluIHRoZSBvbGQK
KyAgICAgICAgZnVuY3Rpb24gYW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBsYXlvdXQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaERpc3RhbmNl
KTogVGhpcyBpcworICAgICAgICB0aGUgb2xkIHVwZGF0ZVN0eWxlIGZ1bmN0aW9uLCB3aXRob3V0
IHRoZSByZXF1ZXN0IHRvIGxheW91dC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpwYXJzZUxlYWRpbmdTcGFjZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnBhcnNlVHJhaWxpbmdTcGFjZSk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldExlYWRpbmdTcGFjZSk6IEFkZGVkIHRo
ZSBjaGVjayBmb3IgcmVsYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6c2V0VHJhaWxpbmdTcGFjZSk6IEFkZGVkIHRoZSBjaGVjayBmb3IgcmVsYXlvdXQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFyc2VNaW5TaXplKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFyc2VNYXhTaXpl
KTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldExlYWRpbmdT
cGFjZSk6IE1vdmVkIHRvIHRoZSAuY3BwIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6c2V0VHJhaWxpbmdTcGFjZSk6IE1vdmVkIHRvIHRoZSAuY3BwIGZpbGUu
CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OnVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcyk6
IFdlIGhhdmUgdG8KKyAgICAgICAgdXBkYXRlIHRoZSBjaGlsZHJlbiBwcm9wZXJ0aWVzLgorICAg
ICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uaDogQ2hhbmdlZCBzdHlsZURpZENoYW5n
ZSB0bworICAgICAgICBwcm90ZWN0ZWQgc2VjdGlvbiwgd2UgbmVlZCB0byBvdmVycmlkZSBpbiBv
cGVyYXRvciBjbGFzcy4KKwogMjAxNC0xMS0yMCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVl
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3NjM5Ni4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxJbmxpbmVDb250YWluZXJF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxJbmxpbmVDb250YWluZXJF
bGVtZW50LmNwcAppbmRleCBiZGI2YmY2ZmMwMzRiZDQ1NWY1OTZlY2U1NDgwOThlOTljYmZhMjcx
Li4wYmYyYzZiZDVhODMxYjkyNDc2OTZkOWIxZTAyOGI4ODhkM2U5ZGM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuY3Bw
CkBAIC02MCw4ICs2MCwxMSBAQCB2b2lkIE1hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQ6OmNo
aWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQogICAgIGlmIChyZW5kZXJl
cigpKSB7CiAgICAgICAgIGlmIChpczxSZW5kZXJNYXRoTUxSb3c+KCpyZW5kZXJlcigpKSkKICAg
ICAgICAgICAgIGRvd25jYXN0PFJlbmRlck1hdGhNTFJvdz4oKnJlbmRlcmVyKCkpLnVwZGF0ZU9w
ZXJhdG9yUHJvcGVydGllcygpOwotICAgICAgICBlbHNlIGlmIChoYXNUYWdOYW1lKG1hdGhUYWcp
IHx8IGhhc1RhZ05hbWUobXNxcnRUYWcpKSB7CisgICAgICAgIGVsc2UgaWYgKGhhc1RhZ05hbWUo
bXNxcnRUYWcpIHx8IGhhc1RhZ05hbWUobXJvb3RUYWcpKQorICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyTWF0aE1MUm9vdD4ocmVuZGVyZXIoKSktPnVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcygp
OworICAgICAgICBlbHNlIGlmIChoYXNUYWdOYW1lKG1hdGhUYWcpKSB7CiAgICAgICAgICAgICBh
dXRvKiBjaGlsZFJlbmRlcmVyID0gcmVuZGVyZXIoKS0+Zmlyc3RDaGlsZCgpOworCiAgICAgICAg
ICAgICBpZiAoaXM8UmVuZGVyTWF0aE1MUm93PihjaGlsZFJlbmRlcmVyKSkKICAgICAgICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJNYXRoTUxSb3c+KCpjaGlsZFJlbmRlcmVyKS51cGRhdGVPcGVy
YXRvclByb3BlcnRpZXMoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bWF0aG1sL01hdGhNTFRleHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRo
TUxUZXh0RWxlbWVudC5jcHAKaW5kZXggNTAzMTJiMzY1N2FiNDg5ZmNiMzc0ZjVlODQxODYwNmNl
NDRmZjBlMS4uY2E0YzE4MzRiNzExODg4YWE4OTU0Y2Y1ZTZlMmZhZTU2MDliOGM3YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFRleHRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MVGV4dEVsZW1lbnQuY3BwCkBAIC02NiwxMiArNjYs
MjIgQEAgdm9pZCBNYXRoTUxUZXh0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxk
Q2hhbmdlJiBjaGFuZ2UpCiAKIHZvaWQgTWF0aE1MVGV4dEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7
Ci0gICAgaWYgKG5hbWUgPT0gc3RyZXRjaHlBdHRyKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJN
YXRoTUxPcGVyYXRvcj4ocmVuZGVyZXIoKSkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJN
YXRoTUxPcGVyYXRvcj4oKnJlbmRlcmVyKCkpLnNldE9wZXJhdG9yRmxhZ0FuZFNjaGVkdWxlTGF5
b3V0SWZOZWVkZWQoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpTdHJldGNoeSwgdmFsdWUpOwor
ICAgIGlmICghaXM8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KHJlbmRlcmVyKCkpKSB7CisgICAgICAg
IE1hdGhNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIGlmIChNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OmlzT3BlcmF0
b3JGbGFnQXR0cmlidXRlKG5hbWUpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJNYXRoTUxPcGVy
YXRvcj4oKnJlbmRlcmVyKCkpLnNldE9wZXJhdG9yRmxhZ0FuZFNjaGVkdWxlTGF5b3V0SWZOZWVk
ZWQoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpnZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRl
TmFtZShuYW1lKSwgdmFsdWUpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gbHNwYWNlQXR0cikKKyAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KCpyZW5kZXJlcigpKS5wYXJzZUxl
YWRpbmdTcGFjZSh2YWx1ZSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSByc3BhY2VBdHRyKQorICAg
ICAgICBkb3duY2FzdDxSZW5kZXJNYXRoTUxPcGVyYXRvcj4oKnJlbmRlcmVyKCkpLnBhcnNlVHJh
aWxpbmdTcGFjZSh2YWx1ZSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSBtYXhzaXplQXR0cikKKyAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KCpyZW5kZXJlcigpKS5wYXJzZU1h
eFNpemUodmFsdWUpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gbWluc2l6ZUF0dHIpCisgICAgICAg
IGRvd25jYXN0PFJlbmRlck1hdGhNTE9wZXJhdG9yPigqcmVuZGVyZXIoKSkucGFyc2VNaW5TaXpl
KHZhbHVlKTsKKwogICAgIE1hdGhNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVl
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxPcGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmNwcAppbmRleCA4NWUxZWZlMDdiZWJkMmU2YTljMmRiZGUxMmIx
N2VjOGQ3ZGYxYmNkLi5hNTRhNTQxZjIyYTAzYjQ5OTI5NzUwOWI1MDA1ODNkOWFiMGIwZDM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9w
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTE9wZXJhdG9yLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQWxleCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEwIEZyYW7Dp29pcyBTYXVzc2V0IChzYXVzc2V0QGdtYWls
LmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBJZ2FsaWEgUy5MLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTMzLDYgKzExMzMsNDAgQEAgc3RhdGljIGNvbnN0
IFVDaGFyIGhvcml6b250YWxPcGVyYXRvcnNbXSA9IHsKICAgICAweDAwM0QsIDB4MDA1RSwgMHgw
MDVGLCAweDAwN0UsIDB4MDBBRiwgMHgwMkM2LCAweDAyQzcsIDB4MDJDOSwgMHgwMkNELCAweDAy
REMsIDB4MDJGNywgMHgwMzAyLCAweDAzMzIsIDB4MjAzRSwgMHgyMEQwLCAweDIwRDEsIDB4MjBE
NiwgMHgyMEQ3LCAweDIwRTEsIDB4MjE5MCwgMHgyMTkyLCAweDIxOTQsIDB4MjE5OCwgMHgyMTk5
LCAweDIxOUMsIDB4MjE5RCwgMHgyMTlFLCAweDIxQTAsIDB4MjFBMiwgMHgyMUEzLCAweDIxQTQs
IDB4MjFBNiwgMHgyMUE5LCAweDIxQUEsIDB4MjFBQiwgMHgyMUFDLCAweDIxQUQsIDB4MjFCNCwg
MHgyMUI5LCAweDIxQkMsIDB4MjFCRCwgMHgyMUMwLCAweDIxQzEsIDB4MjFDNCwgMHgyMUM2LCAw
eDIxQzcsIDB4MjFDOSwgMHgyMUNCLCAweDIxQ0MsIDB4MjFEMCwgMHgyMUQyLCAweDIxRDQsIDB4
MjFEQSwgMHgyMURCLCAweDIxREMsIDB4MjFERCwgMHgyMUUwLCAweDIxRTIsIDB4MjFFNCwgMHgy
MUU1LCAweDIxRTYsIDB4MjFFOCwgMHgyMUYwLCAweDIxRjYsIDB4MjFGRCwgMHgyMUZFLCAweDIx
RkYsIDB4MjNCNCwgMHgyM0I1LCAweDIzREMsIDB4MjNERCwgMHgyM0RFLCAweDIzREYsIDB4MjNF
MCwgMHgyM0UxLCAweDI1MDAsIDB4MjdGNSwgMHgyN0Y2LCAweDI3RjcsIDB4MjdGOCwgMHgyN0Y5
LCAweDI3RkEsIDB4MjdGQiwgMHgyN0ZDLCAweDI3RkQsIDB4MjdGRSwgMHgyN0ZGLCAweDI5MEMs
IDB4MjkwRCwgMHgyOTBFLCAweDI5MEYsIDB4MjkxMCwgMHgyOTRFLCAweDI5NTAsIDB4Mjk1Miwg
MHgyOTUzLCAweDI5NTYsIDB4Mjk1NywgMHgyOTVBLCAweDI5NUIsIDB4Mjk1RSwgMHgyOTVGLCAw
eDJCNDUsIDB4MkI0NiwgMHhGRTM1LCAweEZFMzYsIDB4RkUzNywgMHhGRTM4CiB9OwogCitib29s
IGlzT3BlcmF0b3JGbGFnQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCit7Cisg
ICAgcmV0dXJuIChuYW1lID09IHN0cmV0Y2h5QXR0cikgfHwgKG5hbWUgPT0gZmVuY2VBdHRyKSB8
fCAobmFtZSA9PSBzZXBhcmF0b3JBdHRyKSB8fCAobmFtZSA9PSBzeW1tZXRyaWNBdHRyKSB8fCAo
bmFtZSA9PSBsYXJnZW9wQXR0cikgIHx8IChuYW1lID09IG1vdmFibGVsaW1pdHNBdHRyKSB8fCAo
bmFtZSA9PSBhY2NlbnRBdHRyKTsKK30KKworRmxhZyBnZXRPcGVyYXRvckZsYWdGcm9tQXR0cmli
dXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQoreworICAgIEFTU0VSVChpc09wZXJh
dG9yRmxhZ0F0dHJpYnV0ZShuYW1lKSk7CisKKyAgICBpZiAobmFtZSA9PSBzdHJldGNoeUF0dHIp
CisgICAgICAgIHJldHVybiBTdHJldGNoeTsKKworICAgIGlmIChuYW1lID09IGZlbmNlQXR0cikK
KyAgICAgICAgcmV0dXJuIEZlbmNlOworCisgICAgaWYgKG5hbWUgPT0gc2VwYXJhdG9yQXR0cikK
KyAgICAgICAgcmV0dXJuIFNlcGFyYXRvcjsKKworICAgIGlmIChuYW1lID09IHN5bW1ldHJpY0F0
dHIpCisgICAgICAgIHJldHVybiBTeW1tZXRyaWM7CisKKyAgICBpZiAobmFtZSA9PSBsYXJnZW9w
QXR0cikKKyAgICAgICAgcmV0dXJuIExhcmdlT3A7CisKKyAgICBpZiAobmFtZSA9PSBtb3ZhYmxl
bGltaXRzQXR0cikKKyAgICAgICAgcmV0dXJuIE1vdmFibGVMaW1pdHM7CisKKyAgICBpZiAobmFt
ZSA9PSBhY2NlbnRBdHRyKQorICAgICAgICByZXR1cm4gQWNjZW50OworCisgICAgLy8gTm90IHJl
YWNoYWJsZS4KKyAgICByZXR1cm4gTm9uZTsKK30KKwogfQogCiBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6UmVuZGVyTWF0aE1MT3BlcmF0b3IoTWF0aE1MRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxS
ZW5kZXJTdHlsZT4gc3R5bGUpCkBAIC0xMTYxLDEwICsxMTk1LDQ0IEBAIHZvaWQgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yRmxhZ0FuZFNjaGVkdWxlTGF5b3V0SWZOZWVkZWQoTWF0
aE1MT3BlcmF0CiB7CiAgICAgdW5zaWduZWQgc2hvcnQgb2xkT3BlcmF0b3JGbGFncyA9IG1fb3Bl
cmF0b3JGbGFnczsKIAotICAgIHNldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGVWYWx1ZShmbGFn
LCBhdHRyaWJ1dGVWYWx1ZSk7CisgICAgaWYgKCFhdHRyaWJ1dGVWYWx1ZSkKKyAgICAgICAgaW5p
dE9wZXJhdG9yRmxhZ3MoZmxhZyk7CisgICAgZWxzZQorICAgICAgICBzZXRPcGVyYXRvckZsYWdG
cm9tQXR0cmlidXRlVmFsdWUoZmxhZywgYXR0cmlidXRlVmFsdWUpOwogCi0gICAgaWYgKG9sZE9w
ZXJhdG9yRmxhZ3MgIT0gbV9vcGVyYXRvckZsYWdzKQotICAgICAgICBzZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICBpZiAob2xkT3BlcmF0b3JGbGFncyAhPSBtX29wZXJh
dG9yRmxhZ3MpIHsKKyAgICAgICAgcmVzZXRTdHJldGNoU2l6ZSgpOworICAgICAgICBjb25zdCBh
dXRvJiB3cmFwcGVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oZmlyc3RDaGlsZCgpKTsKKyAg
ICAgICAgd3JhcHBlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAg
fQorfQorCit2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjppbml0T3BlcmF0b3JGbGFncyhNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6OkZsYWcgZmxhZykKK3sKKyAgICBpZiAobV90ZXh0Q29udGVu
dCkgeworICAgICAgICBib29sIGV4cGxpY2l0Rm9ybSA9IHRydWU7CisKKyAgICAgICAgaWYgKCFp
c0Fub255bW91cygpKSB7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm0gPSBl
bGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6Zm9ybUF0dHIpOworICAgICAg
ICAgICAgaWYgKCEoKGZvcm0gPT0gInByZWZpeCIpIHx8IChmb3JtID09ICJpbmZpeCIpIHx8IChm
b3JtID09ICJwb3N0Zml4IikpKQorICAgICAgICAgICAgICAgIGV4cGxpY2l0Rm9ybSA9IGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFy
eTo6RW50cnkqIGVudHJ5ID0gdHJ5QmluYXJ5U2VhcmNoPGNvbnN0IE1hdGhNTE9wZXJhdG9yRGlj
dGlvbmFyeTo6RW50cnksIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6S2V5PihNYXRoTUxPcGVy
YXRvckRpY3Rpb25hcnk6OmRpY3Rpb25hcnksIE1BVEhNTF9PUERJQ1RfU0laRSwgTWF0aE1MT3Bl
cmF0b3JEaWN0aW9uYXJ5OjpLZXkobV90ZXh0Q29udGVudCwgbV9vcGVyYXRvckZvcm0pLCBNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6OkV4dHJhY3RLZXkpKQorICAgICAgICAgICAgc2V0T3BlcmF0
b3JQcm9wZXJ0aWVzRnJvbU9wRGljdEVudHJ5KGVudHJ5LCBmbGFnKTsKKyAgICAgICAgZWxzZSBp
ZiAoIWV4cGxpY2l0Rm9ybSkgeworICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBmaW5kIHRo
ZSBkZXNpcmVkIG9wZXJhdG9yIGZvcm0gYW5kIGlmIGl0IHdhcyBub3Qgc2V0IGV4cGxpY2l0ZWx5
LCB3ZSB1c2UgdGhlIGZpcnN0IG9uZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOiBJbmZpeCwgUHJl
Zml4LCBQb3N0Zml4LgorICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBoYW5kbGUgYmFkIE1hdGhN
TCBtYXJrdXAgd2l0aG91dCBleHBsaWNpdCA8bXJvdz4gZGVsaW1pdGVycyBsaWtlICI8bW8+KDwv
bW8+PG1pPmE8L21pPjxtbz4pPC9tbz48bW8+KDwvbW8+PG1pPmI8L21pPjxtbz4pPC9tbz4iIHdo
ZXJlIHRoZSBpbm5lciBwYXJlbnRoZXNpcyBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgaW5maXgu
CisgICAgICAgICAgICBpZiAoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSog
ZW50cnkgPSB0cnlCaW5hcnlTZWFyY2g8Y29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpF
bnRyeSwgVUNoYXI+KE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6ZGljdGlvbmFyeSwgTUFUSE1M
X09QRElDVF9TSVpFLCBtX3RleHRDb250ZW50LCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkV4
dHJhY3RDaGFyKSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBlbnRyeSBp
cyBhbm90aGVyIGZvcm0gZm9yIHRoYXQgb3BlcmF0b3IsIHdlIG1vdmUgdG8gdGhhdCBlbnRyeS4g
Tm90ZSB0aGF0IGl0IG9ubHkgcmVtYWlucyBhdCBtb3N0IHR3byBmb3JtcyBzbyB3ZSBkb24ndCBu
ZWVkIHRvIG1vdmUgYW55IGZ1cnRoZXIuCisgICAgICAgICAgICAgICAgaWYgKGVudHJ5ICE9IE1h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6ZGljdGlvbmFyeSAmJiAoZW50cnktMSktPmNoYXJhY3Rl
ciA9PSBtX3RleHRDb250ZW50KQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0tOworICAgICAg
ICAgICAgICAgIG1fb3BlcmF0b3JGb3JtID0gc3RhdGljX2Nhc3Q8TWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5OjpGb3JtPihlbnRyeS0+Zm9ybSk7IC8vIFdlIG92ZXJyaWRlIHRoZSBmb3JtIHByZXZp
b3VzbHkgZGV0ZXJtaW5lZC4KKyAgICAgICAgICAgICAgICBzZXRPcGVyYXRvclByb3BlcnRpZXNG
cm9tT3BEaWN0RW50cnkoZW50cnksIGZsYWcpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorI3VuZGVmIE1BVEhNTF9PUERJQ1RfU0laRQogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlKE1hdGhNTE9wZXJhdG9yRGljdGlv
bmFyeTo6RmxhZyBmbGFnLCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQpAQCAtMTE4Myw4ICsx
MjUxLDEzIEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yRmxhZ0Zyb21B
dHRyaWJ1dGVWYWx1ZShNYXRoTUxPcGVyYXRvckRpY3RpCiAgICAgLy8gV2UgaWdub3JlIGFic2Vu
dCBvciBpbnZhbGlkIGF0dHJpYnV0ZXMuCiB9CiAKLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OnNldE9wZXJhdG9yUHJvcGVydGllc0Zyb21PcERpY3RFbnRyeShjb25zdCBNYXRoTUxPcGVyYXRv
ckRpY3Rpb25hcnk6OkVudHJ5KiBlbnRyeSkKK3ZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNl
dE9wZXJhdG9yUHJvcGVydGllc0Zyb21PcERpY3RFbnRyeShjb25zdCBNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnk6OkVudHJ5KiBlbnRyeSwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnIGZs
YWcpCiB7CisgICAgaWYgKGZsYWcgIT0gTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpOb25lKSB7
CisgICAgICAgIG1fb3BlcmF0b3JGbGFncyB8PSBlbnRyeS0+ZmxhZ3MgJiBmbGFnOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgLy8gSWYgdGhpcyBvcGVyYXRvciBpcyBhbm9ueW1vdXMs
IHdlIHByZXNlcnZlIHRoZSBGZW5jZSBhbmQgU2VwYXJhdG9yIHByb3BlcnRpZXMuIFRoaXMgaXMg
dG8gaGFuZGxlIHRoZSBjYXNlIG9mIFJlbmRlck1hdGhNTEZlbmNlZC4KICAgICBpZiAoaXNBbm9u
eW1vdXMoKSkKICAgICAgICAgbV9vcGVyYXRvckZsYWdzID0gKG1fb3BlcmF0b3JGbGFncyAmIChN
YXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZlbmNlIHwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5
OjpTZXBhcmF0b3IpKSB8IGVudHJ5LT5mbGFnczsKQEAgLTEyMDIsNyArMTI3NSw2IEBAIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcygpCiAgICAgbV9pc1Zl
cnRpY2FsID0gISh0cnlCaW5hcnlTZWFyY2g8Y29uc3QgVUNoYXIsIFVDaGFyPihNYXRoTUxPcGVy
YXRvckRpY3Rpb25hcnk6Omhvcml6b250YWxPcGVyYXRvcnMsIFdURl9BUlJBWV9MRU5HVEgoTWF0
aE1MT3BlcmF0b3JEaWN0aW9uYXJ5Ojpob3Jpem9udGFsT3BlcmF0b3JzKSwgbV90ZXh0Q29udGVu
dCwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFeHRyYWN0S2V5SG9yaXpvbnRhbCkpOwogCiAg
ICAgLy8gV2UgZGV0ZXJtaW5lIHRoZSBmb3JtIG9mIHRoZSBvcGVyYXRvci4KLSAgICBib29sIGV4
cGxpY2l0Rm9ybSA9IHRydWU7CiAgICAgaWYgKCFpc0Fub255bW91cygpKSB7CiAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZm9ybSA9IGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKE1hdGhN
TE5hbWVzOjpmb3JtQXR0cik7CiAgICAgICAgIGlmIChmb3JtID09ICJwcmVmaXgiKQpAQCAtMTIx
Myw3ICsxMjg1LDYgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9w
ZXJ0aWVzKCkKICAgICAgICAgICAgIG1fb3BlcmF0b3JGb3JtID0gTWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5OjpQb3N0Zml4OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgdXNlIG1vcmUgYWR2YW5jZWQgaGV1cmlzdGljcyBpbmRpY2F0ZWQgaW4gdGhlIHNw
ZWNpZmljYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBvcGVyYXRvciBmb3JtIChodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODI5KS4KLSAgICAgICAgICAgIGV4cGxpY2l0
Rm9ybSA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50KCkucHJldmlvdXNTaWJsaW5n
KCkgJiYgZWxlbWVudCgpLm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICAgICAgbV9vcGVyYXRv
ckZvcm0gPSBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlByZWZpeDsKICAgICAgICAgICAgIGVs
c2UgaWYgKGVsZW1lbnQoKS5wcmV2aW91c1NpYmxpbmcoKSAmJiAhZWxlbWVudCgpLm5leHRTaWJs
aW5nKCkpCkBAIC0xMjM1LDIzICsxMzA2LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCkKICAgICBtX21pblNpemUgPSBzdHlsZSgpLmZvbnQoKS5z
aXplKCk7IC8vIFRoaXMgc2V0cyBtaW5zaXplIHRvICIxZW0iLgogICAgIG1fbWF4U2l6ZSA9IGlu
dE1heEZvckxheW91dFVuaXQ7IC8vIFRoaXMgc2V0cyBtYXhzaXplIHRvICJpbmZpbml0eSIuCiAK
LSAgICBpZiAobV90ZXh0Q29udGVudCkgewotICAgICAgICAvLyBUaGVuIHdlIHRyeSB0byBmaW5k
IHRoZSBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBvcGVyYXRvciBkaWN0aW9uYXJ5LgotICAgICAg
ICBpZiAoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSogZW50cnkgPSB0cnlC
aW5hcnlTZWFyY2g8Y29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSwgTWF0aE1M
T3BlcmF0b3JEaWN0aW9uYXJ5OjpLZXk+KE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6ZGljdGlv
bmFyeSwgTUFUSE1MX09QRElDVF9TSVpFLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OktleSht
X3RleHRDb250ZW50LCBtX29wZXJhdG9yRm9ybSksIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6
RXh0cmFjdEtleSkpCi0gICAgICAgICAgICBzZXRPcGVyYXRvclByb3BlcnRpZXNGcm9tT3BEaWN0
RW50cnkoZW50cnkpOwotICAgICAgICBlbHNlIGlmICghZXhwbGljaXRGb3JtKSB7Ci0gICAgICAg
ICAgICAvLyBJZiB3ZSBkaWQgbm90IGZpbmQgdGhlIGRlc2lyZWQgb3BlcmF0b3IgZm9ybSBhbmQg
aWYgaXQgd2FzIG5vdCBzZXQgZXhwbGljaXRlbHksIHdlIHVzZSB0aGUgZmlyc3Qgb25lIGluIHRo
ZSBmb2xsb3dpbmcgb3JkZXI6IEluZml4LCBQcmVmaXgsIFBvc3RmaXguCi0gICAgICAgICAgICAv
LyBUaGlzIGlzIHRvIGhhbmRsZSBiYWQgTWF0aE1MIG1hcmt1cCB3aXRob3V0IGV4cGxpY2l0IDxt
cm93PiBkZWxpbWl0ZXJzIGxpa2UgIjxtbz4oPC9tbz48bWk+YTwvbWk+PG1vPik8L21vPjxtbz4o
PC9tbz48bWk+YjwvbWk+PG1vPik8L21vPiIgd2hlcmUgdGhlIGlubmVyIHBhcmVudGhlc2lzIHNo
b3VsZCBub3QgYmUgY29uc2lkZXJlZCBpbmZpeC4KLSAgICAgICAgICAgIGlmIChjb25zdCBNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5KiBlbnRyeSA9IHRyeUJpbmFyeVNlYXJjaDxjb25z
dCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5LCBVQ2hhcj4oTWF0aE1MT3BlcmF0b3JE
aWN0aW9uYXJ5OjpkaWN0aW9uYXJ5LCBNQVRITUxfT1BESUNUX1NJWkUsIG1fdGV4dENvbnRlbnQs
IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RXh0cmFjdENoYXIpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIHByZXZpb3VzIGVudHJ5IGlzIGFub3RoZXIgZm9ybSBmb3IgdGhhdCBvcGVy
YXRvciwgd2UgbW92ZSB0byB0aGF0IGVudHJ5LiBOb3RlIHRoYXQgaXQgb25seSByZW1haW5zIGF0
IG1vc3QgdHdvIGZvcm1zIHNvIHdlIGRvbid0IG5lZWQgdG8gbW92ZSBhbnkgZnVydGhlci4KLSAg
ICAgICAgICAgICAgICBpZiAoZW50cnkgIT0gTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpkaWN0
aW9uYXJ5ICYmIChlbnRyeS0xKS0+Y2hhcmFjdGVyID09IG1fdGV4dENvbnRlbnQpCi0gICAgICAg
ICAgICAgICAgICAgIGVudHJ5LS07Ci0gICAgICAgICAgICAgICAgbV9vcGVyYXRvckZvcm0gPSBz
dGF0aWNfY2FzdDxNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZvcm0+KGVudHJ5LT5mb3JtKTsg
Ly8gV2Ugb3ZlcnJpZGUgdGhlIGZvcm0gcHJldmlvdXNseSBkZXRlcm1pbmVkLgotICAgICAgICAg
ICAgICAgIHNldE9wZXJhdG9yUHJvcGVydGllc0Zyb21PcERpY3RFbnRyeShlbnRyeSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jdW5kZWYgTUFUSE1MX09QRElDVF9TSVpFCisg
ICAgaW5pdE9wZXJhdG9yRmxhZ3MoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpOb25lKTsKIAog
ICAgIGlmICghaXNBbm9ueW1vdXMoKSkgewogICAgICAgICAvLyBGaW5hbGx5LCB3ZSBtYWtlIHRo
ZSBhdHRyaWJ1dGUgdmFsdWVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0LgpAQCAtMTI2NywxMSArMTMy
MiwxMSBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByb3BlcnRpZXMo
KQogICAgICAgICBwYXJzZU1hdGhNTExlbmd0aChlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShN
YXRoTUxOYW1lczo6bHNwYWNlQXR0ciksIG1fbGVhZGluZ1NwYWNlLCAmc3R5bGUoKSwgZmFsc2Up
OyAvLyBGSVhNRTogTmVnYXRpdmUgbGVhZGluZyBzcGFjZSBtdXN0IGJlIGltcGxlbWVudGVkICho
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMwKS4KICAgICAgICAg
cGFyc2VNYXRoTUxMZW5ndGgoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6
OnJzcGFjZUF0dHIpLCBtX3RyYWlsaW5nU3BhY2UsICZzdHlsZSgpLCBmYWxzZSk7IC8vIEZJWE1F
OiBOZWdhdGl2ZSB0cmFpbGluZyBzcGFjZSBtdXN0IGJlIGltcGxlbWVudGVkIChodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMwKS4KIAotICAgICAgICBwYXJzZU1h
dGhNTExlbmd0aChlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6bWluc2l6
ZUF0dHIpLCBtX21pblNpemUsICZzdHlsZSgpLCBmYWxzZSk7Ci0gICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWF4c2l6ZSA9IGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVz
OjptYXhzaXplQXR0cik7Ci0gICAgICAgIGlmIChtYXhzaXplICE9ICJpbmZpbml0eSIpCi0gICAg
ICAgICAgICBwYXJzZU1hdGhNTExlbmd0aChtYXhzaXplLCBtX21heFNpemUsICZzdHlsZSgpLCBm
YWxzZSk7CisgICAgICAgIHBhcnNlTWluU2l6ZShlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShN
YXRoTUxOYW1lczo6bWluc2l6ZUF0dHIpKTsKKyAgICAgICAgcGFyc2VNYXhTaXplKGVsZW1lbnQo
KS5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjptYXhzaXplQXR0cikpOwogICAgIH0KKwor
ICAgIHVwZGF0ZVN0eWxlKCk7CiB9CiAKIGJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmlzQ2hp
bGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QK
QEAgLTEyODcsNyArMTM0Miw2IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0cmV0Y2hU
byhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91dFVuaXQKICAgICBtX3N0cmV0
Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gaGVpZ2h0QWJvdmVCYXNlbGluZTsKICAgICBtX3N0cmV0
Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBkZXB0aEJlbG93QmFzZWxpbmU7CiAKLSAgICBzZXRPcGVy
YXRvclByb3BlcnRpZXMoKTsKICAgICBpZiAoaGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9y
RGljdGlvbmFyeTo6U3ltbWV0cmljKSkgewogICAgICAgICAvLyBXZSBtYWtlIHRoZSBvcGVyYXRv
ciBzdHJldGNoIHN5bW1ldHJpY2FsbHkgYWJvdmUgYW5kIGJlbG93IHRoZSBheGlzLgogICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWQgdGhlIGF4aXMgZnJvbSB0aGUgTUFUSCB0YWJsZSAo
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjI5NykuIEZvciBub3cs
IHdlIHVzZSB0aGUgc2FtZSB2YWx1ZSBhcyBpbiBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6Zmlyc3RM
aW5lQmFzZWxpbmUoKS4KQEAgLTEzMDgsNyArMTM2Miw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3Bl
cmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91dFVu
aXQKICAgICB9CiAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSAqPSBhc3BlY3Q7CiAg
ICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lICo9IGFzcGVjdDsKLSAgICB1cGRhdGVTdHls
ZSgpOworICAgIGNhbGN1bGF0ZVN0cmV0Y2hEaXN0YW5jZSgpOworCiB9CiAKIHZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IHdpZHRoKQpAQCAtMTMxNywxMCAr
MTM3Miw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0
IHdpZHRoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0cmV0Y2hXaWR0aCA9IHdpZHRoOwot
Ci0gICAgc2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCk7Ci0KLSAgICB1cGRhdGVTdHlsZSgpOworICAg
IGNhbGN1bGF0ZVN0cmV0Y2hEaXN0YW5jZSgpOwogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpyZXNldFN0cmV0Y2hTaXplKCkKQEAgLTEzNTEsNyArMTQwMyw2IEBAIHZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKICAgICBB
U1NFUlQocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpOwogCi0gICAgc2V0T3BlcmF0b3JQ
cm9wZXJ0aWVzKCk7CiAgICAgaWYgKCFzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSkgewogICAgICAg
ICBSZW5kZXJNYXRoTUxUb2tlbjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAg
ICAgICAgaWYgKGlzSW52aXNpYmxlT3BlcmF0b3IoKSkgewpAQCAtMTQwNCw4ICsxNDU1LDcgQEAg
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cmVidWlsZFRva2VuQ29udGVudChjb25zdCBTdHJp
bmcmIG9wZXJhdG9yU3RyaW5nKQogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSA8
bW8+IG9wZXJhdG9ycyB3aXRoIG11bHRpcGxlIGNoYXJhY3RlcnMgKGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MjgpLgogICAgIG1fdGV4dENvbnRlbnQgPSB0ZXh0
Q29udGVudC5sZW5ndGgoKSA9PSAxID8gdGV4dENvbnRlbnRbMF0gOiAwOwogICAgIHNldE9wZXJh
dG9yUHJvcGVydGllcygpOwotICAgIHVwZGF0ZVN0eWxlKCk7Ci0gICAgc2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgcmVzZXRTdHJldGNoU2l6ZSgpOwogfQogCiB2b2lk
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVUb2tlbkNvbnRlbnQoY29uc3QgU3RyaW5nJiBv
cGVyYXRvclN0cmluZykKQEAgLTE0MjksOSArMTQ3OSwxMiBAQCB2b2lkIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1
cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKQogewogICAgIHNldE9wZXJhdG9yUHJvcGVydGllcygp
OwotICAgIGlmICghaXNFbXB0eSgpKQotICAgICAgICB1cGRhdGVTdHlsZSgpOwotICAgIHNldE5l
ZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworfQorCit2b2lkIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKQoreworICAgIFJlbmRlck1hdGhNTFRva2VuOjpzdHlsZURpZENoYW5n
ZShkaWZmLCBvbGRTdHlsZSk7CisgICAgc2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiB9CiAKIGJv
b2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNob3VsZEFsbG93U3RyZXRjaGluZygpIGNvbnN0CkBA
IC0xNjU5LDYgKzE3MTIsMTcgQEAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0Y2h5RGF0YSBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmluZFN0cmV0Y2h5RGF0YShVQ2hhcgogCiB2b2lkIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiB7CisgICAgLy8gV2UgYWRkIHNwYWNpbmcg
YXJvdW5kIHRoZSBvcGVyYXRvci4KKyAgICAvLyBGSVhNRTogVGhlIHNwYWNpbmcgc2hvdWxkIGJl
IGFkZGVkIHRvIHRoZSB3aG9sZSBlbWJlbGxpc2hlZCBvcGVyYXRvciAoaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgzMSkuCisgICAgLy8gRklYTUU6IFRoZSBzcGFj
aW5nIHNob3VsZCBvbmx5IGJlIGFkZGVkIGluc2lkZSAocGVyaGFwcyBpbmZlcnJlZCkgbXJvdyAo
aHR0cDovL3d3dy53My5vcmcvVFIvTWF0aE1ML2NoYXB0ZXIzLmh0bWwjcHJlc20ub3BzcGFjaW5n
KS4KKyAgICBjb25zdCBhdXRvJiB3cmFwcGVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oZmly
c3RDaGlsZCgpKTsKKyAgICB3cmFwcGVyLT5zdHlsZSgpLnNldE1hcmdpblN0YXJ0KExlbmd0aCht
X2xlYWRpbmdTcGFjZSwgRml4ZWQpKTsKKyAgICB3cmFwcGVyLT5zdHlsZSgpLnNldE1hcmdpbkVu
ZChMZW5ndGgobV90cmFpbGluZ1NwYWNlLCBGaXhlZCkpOworICAgIHdyYXBwZXItPnNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworfQorCit2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpjYWxjdWxhdGVTdHJldGNoRGlzdGFuY2UoKQorewogICAgIEZvbnRDYWNoZVB1cmdlUHJl
dmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogCiAgICAgQVNTRVJUKGZpcnN0Q2hpbGQo
KSk7CkBAIC0xNjY2LDE1ICsxNzMwLDYgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBk
YXRlU3R5bGUoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0cmV0Y2h5RGF0YS5zZXROb3Jt
YWxNb2RlKCk7Ci0gICAgLy8gV2UgYWRkIHNwYWNpbmcgYXJvdW5kIHRoZSBvcGVyYXRvci4KLSAg
ICAvLyBGSVhNRTogVGhlIHNwYWNpbmcgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSB3aG9sZSBlbWJl
bGxpc2hlZCBvcGVyYXRvciAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNDgzMSkuCi0gICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3VsZCBvbmx5IGJlIGFkZGVk
IGluc2lkZSAocGVyaGFwcyBpbmZlcnJlZCkgbXJvdyAoaHR0cDovL3d3dy53My5vcmcvVFIvTWF0
aE1ML2NoYXB0ZXIzLmh0bWwjcHJlc20ub3BzcGFjaW5nKS4KLSAgICBjb25zdCBhdXRvJiB3cmFw
cGVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oZmlyc3RDaGlsZCgpKTsKLSAgICBhdXRvIG5l
d1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoJnN0
eWxlKCksIEZMRVgpOwotICAgIG5ld1N0eWxlLmdldCgpLnNldE1hcmdpblN0YXJ0KExlbmd0aCht
X2xlYWRpbmdTcGFjZSwgRml4ZWQpKTsKLSAgICBuZXdTdHlsZS5nZXQoKS5zZXRNYXJnaW5FbmQo
TGVuZ3RoKG1fdHJhaWxpbmdTcGFjZSwgRml4ZWQpKTsKLSAgICB3cmFwcGVyLT5zZXRTdHlsZShX
VEY6Om1vdmUobmV3U3R5bGUpKTsKLSAgICB3cmFwcGVyLT5zZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKIAogICAgIGlmICghc2hvdWxkQWxsb3dTdHJldGNoaW5nKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTIwMDcsNiArMjA2Miw2MyBAQCBMYXlvdXRVbml0IFJlbmRlck1hdGhN
TE9wZXJhdG9yOjp0cmFpbGluZ1NwYWNlRXJyb3IoKQogICAgIHJldHVybiB3aWR0aCAtIGFzc2Vt
Ymx5V2lkdGg7CiB9CiAKK3ZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhcnNlTGVhZGluZ1Nw
YWNlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCit7CisKKyAgICBMYXlvdXRVbml0IGxlYWRp
bmdTcGFjZTsKKworICAgIC8vIEZJWE1FOiBOZWdhdGl2ZSBsZWFkaW5nIHNwYWNlIG11c3QgYmUg
aW1wbGVtZW50ZWQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4
MzApLgorICAgIGlmICghcGFyc2VNYXRoTUxMZW5ndGgodmFsdWUsIGxlYWRpbmdTcGFjZSwgJnN0
eWxlKCksIGZhbHNlKSkKKyAgICAgICAgbGVhZGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9udCgp
LnNpemUoKSAvIDE4OyAvLyBUaGlzIHNldHMgbGVhZGluZyBzcGFjZSB0byAidGhpY2ttYXRoc3Bh
Y2UiLgorCisgICAgc2V0TGVhZGluZ1NwYWNlKGxlYWRpbmdTcGFjZSk7Cit9CisKK3ZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnBhcnNlVHJhaWxpbmdTcGFjZShjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlKQoreworICAgIExheW91dFVuaXQgdHJhaWxpbmdTcGFjZTsKKworICAgIC8vIEZJWE1F
OiBOZWdhdGl2ZSB0cmFpbGluZyBzcGFjZSBtdXN0IGJlIGltcGxlbWVudGVkIChodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMwKS4KKyAgICBpZiAoIXBhcnNlTWF0
aE1MTGVuZ3RoKHZhbHVlLCB0cmFpbGluZ1NwYWNlLCAmc3R5bGUoKSwgZmFsc2UpKQorICAgICAg
ICB0cmFpbGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OyAvLyBUaGlz
IHNldHMgdHJhaWxpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KKworICAgIHNldFRyYWls
aW5nU3BhY2UodHJhaWxpbmdTcGFjZSk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OnNldExlYWRpbmdTcGFjZShMYXlvdXRVbml0IGxlYWRpbmdTcGFjZSkKK3sKKyAgICBtX2xlYWRp
bmdTcGFjZSA9IGxlYWRpbmdTcGFjZTsKKyAgICBjb25zdCBhdXRvJiB3cmFwcGVyID0gZG93bmNh
c3Q8UmVuZGVyRWxlbWVudD4oZmlyc3RDaGlsZCgpKTsKKyAgICB3cmFwcGVyLT5zdHlsZSgpLnNl
dE1hcmdpblN0YXJ0KExlbmd0aChtX2xlYWRpbmdTcGFjZSwgRml4ZWQpKTsKKyAgICB3cmFwcGVy
LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKK30KKwordm9pZCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6c2V0VHJhaWxpbmdTcGFjZShMYXlvdXRVbml0IHRyYWlsaW5nU3BhY2Up
Cit7CisgICAgbV90cmFpbGluZ1NwYWNlID0gdHJhaWxpbmdTcGFjZTsKKyAgICBjb25zdCBhdXRv
JiB3cmFwcGVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oZmlyc3RDaGlsZCgpKTsKKyAgICB3
cmFwcGVyLT5zdHlsZSgpLnNldE1hcmdpbkVuZChMZW5ndGgobV90cmFpbGluZ1NwYWNlLCBGaXhl
ZCkpOworICAgIHdyYXBwZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwor
fQorCit2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYXJzZU1pblNpemUoY29uc3QgQXRvbWlj
U3RyaW5nJiBtaW5TaXplKQoreworICAgIGlmICghcGFyc2VNYXRoTUxMZW5ndGgobWluU2l6ZSwg
bV9taW5TaXplLCAmc3R5bGUoKSwgZmFsc2UpKQorICAgICAgICBtX21pblNpemUgPSBzdHlsZSgp
LmZvbnQoKS5zaXplKCk7IC8vIFRoaXMgc2V0cyBtaW5zaXplIHRvICIxZW0iLgorCisgICAgc2V0
TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnBhcnNlTWF4U2l6ZShjb25zdCBBdG9taWNTdHJpbmcmIG1heFNpemUpCit7Cisg
ICAgaWYgKG1heFNpemUgIT0gImluZmluaXR5IikgeworICAgICAgICBpZiAoIXBhcnNlTWF0aE1M
TGVuZ3RoKG1heFNpemUsIG1fbWF4U2l6ZSwgJnN0eWxlKCksIGZhbHNlKSkKKyAgICAgICAgICAg
IG1fbWF4U2l6ZSA9IGludE1heEZvckxheW91dFVuaXQ7IC8vIFRoaXMgc2V0cyBtYXhzaXplIHRv
ICJpbmZpbml0eSIuCisKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxj
KCk7CisgICAgfQorfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCmluZGV4IGU4NzFjZTBlMmJk
MWJkM2ViYjNlYjM4OWJlYTAxNTk5YmIwZmE5ZDEuLjQ2ZTY5OTI2N2Q5MGUzMTNkMzRkNDU4NjFj
ZGYxNWM1ZDhmYjJlN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFsZXggTWlsb3dza2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnkgewogCiBlbnVtIEZvcm0geyBJbmZpeCwgUHJlZml4LCBQb3N0
Zml4IH07CiBlbnVtIEZsYWcgeworICAgIE5vbmUgPSAweDAsCiAgICAgQWNjZW50ID0gMHgxLCAv
LyBGSVhNRTogVGhpcyBtdXN0IGJlIHVzZWQgdG8gaW1wbGVtZW50IGFjY2VudHVuZGVyL2FjY2Vu
dCBvbiBtdW5kZXJvdmVyIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI0ODI2KS4KICAgICBGZW5jZSA9IDB4MiwgLy8gVGhpcyBoYXMgbm8gdmlzdWFsIGVmZmVjdCBi
dXQgYWxsb3dzIHRvIGV4cG9zZSBzZW1hbnRpYyBpbmZvcm1hdGlvbiB2aWEgdGhlIGFjY2Vzc2li
aWxpdHkgdHJlZS4KICAgICBMYXJnZU9wID0gMHg0LApAQCAtNTYsNiArNTgsOSBAQCBzdHJ1Y3Qg
RW50cnkgewogICAgIHVuc2lnbmVkIGZsYWdzIDogODsKIH07CiAKK2Jvb2wgaXNPcGVyYXRvckZs
YWdBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworRmxhZyBnZXRPcGVyYXRvckZsYWdG
cm9tQXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJik7CisKIH0KIAogY2xhc3MgUmVu
ZGVyTWF0aE1MT3BlcmF0b3IgOiBwdWJsaWMgUmVuZGVyTWF0aE1MVG9rZW4gewpAQCAtODEsMTQg
Kzg2LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcygpOwog
ICAgIHZvaWQgc2V0T3BlcmF0b3JGbGFnQW5kU2NoZWR1bGVMYXlvdXRJZk5lZWRlZChNYXRoTUxP
cGVyYXRvckRpY3Rpb25hcnk6OkZsYWcsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFs
dWUpOwogICAgIExheW91dFVuaXQgdHJhaWxpbmdTcGFjZUVycm9yKCk7CisgICAgdm9pZCBwYXJz
ZUxlYWRpbmdTcGFjZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIHBhcnNlVHJhaWxp
bmdTcGFjZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIHBhcnNlTWluU2l6ZShjb25z
dCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIHBhcnNlTWF4U2l6ZShjb25zdCBBdG9taWNTdHJp
bmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiAKIHByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiAgICAgdmly
dHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdo
dCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBj
b25zdCBvdmVycmlkZTsKICAgICBmbG9hdCBhZHZhbmNlRm9yR2x5cGgoY29uc3QgR2x5cGhEYXRh
JikgY29uc3Q7Ci0gICAgdm9pZCBzZXRMZWFkaW5nU3BhY2UoTGF5b3V0VW5pdCBsZWFkaW5nU3Bh
Y2UpIHsgbV9sZWFkaW5nU3BhY2UgPSBsZWFkaW5nU3BhY2U7IH0KLSAgICB2b2lkIHNldFRyYWls
aW5nU3BhY2UoTGF5b3V0VW5pdCB0cmFpbGluZ1NwYWNlKSB7IG1fdHJhaWxpbmdTcGFjZSA9IHRy
YWlsaW5nU3BhY2U7IH0KKyAgICB2b2lkIHNldExlYWRpbmdTcGFjZShMYXlvdXRVbml0KTsKKyAg
ICB2b2lkIHNldFRyYWlsaW5nU3BhY2UoTGF5b3V0VW5pdCk7CisKICAgICBVQ2hhciB0ZXh0Q29u
dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRlbnQ7IH0KIAogcHJpdmF0ZToKQEAgLTE1
Niw2ICsxNjYsOCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBpbnQgZmlyc3RMaW5lQmFzZWxp
bmUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlbmRlck1hdGhNTE9wZXJhdG9yKiB1
bmVtYmVsbGlzaGVkT3BlcmF0b3IoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisgICAgdmly
dHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKSBvdmVycmlkZSBmaW5hbDsKKwogICAgIHZvaWQgcmVidWlsZFRva2VuQ29u
dGVudChjb25zdCBTdHJpbmcmIG9wZXJhdG9yU3RyaW5nKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlRnJvbUVsZW1lbnQoKSBvdmVycmlkZTsKIApAQCAtMTg0LDcgKzE5Niw5IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYsIGNvbnN0
IExheW91dFBvaW50Jik7CiAgICAgdm9pZCBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlKE1h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZywgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAg
IHZvaWQgc2V0T3BlcmF0b3JGbGFnRnJvbUF0dHJpYnV0ZVZhbHVlKE1hdGhNTE9wZXJhdG9yRGlj
dGlvbmFyeTo6RmxhZywgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSk7Ci0gICAg
dm9pZCBzZXRPcGVyYXRvclByb3BlcnRpZXNGcm9tT3BEaWN0RW50cnkoY29uc3QgTWF0aE1MT3Bl
cmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSopOworICAgIHZvaWQgc2V0T3BlcmF0b3JQcm9wZXJ0aWVz
RnJvbU9wRGljdEVudHJ5KGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqLCBN
YXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZsYWcpOworICAgIHZvaWQgY2FsY3VsYXRlU3RyZXRj
aERpc3RhbmNlKCk7CisgICAgdm9pZCBpbml0T3BlcmF0b3JGbGFncyhNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnk6OkZsYWcpOwogCiAgICAgTGF5b3V0VW5pdCBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJh
c2VsaW5lOwogICAgIExheW91dFVuaXQgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5j
cHAKaW5kZXggZWQyMDlhZDFhNjhlMDY0N2RmNTQ5ODhlNjMwN2ZkMDgxMjVhMmI5OS4uYTQwZGJk
OWM4ODU0NjExY2UyMmQ2OTRlNmU4OGY5YjI0YWFiZjRlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCkBAIC0xOTMsNiAr
MTkzLDE5IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAg
ICAgICB1cGRhdGVTdHlsZSgpOwogfQogCit2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnVwZGF0ZU9w
ZXJhdG9yUHJvcGVydGllcygpCit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gYmFzZVdyYXBwZXIoKS0+Zmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBp
ZiAoaXM8UmVuZGVyTWF0aE1MQmxvY2s+KCpjaGlsZCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiByZW5kZXJPcGVyYXRvciA9IGRvd25jYXN0PFJlbmRlck1hdGhNTEJsb2NrPigqY2hpbGQpLnVu
ZW1iZWxsaXNoZWRPcGVyYXRvcigpKQorICAgICAgICAgICAgICAgIHJlbmRlck9wZXJhdG9yLT51
cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBS
ZW5kZXJNYXRoTUxSb290Ojp1cGRhdGVTdHlsZSgpCiB7CiAgICAgQVNTRVJUKCFpc0VtcHR5KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
b3QuaAppbmRleCA4YWM0OGQ0NTE5NTEwOTczNDk5MjYwYzI1NzNlZTdhYzAwMWZkNDg1Li5mNjFi
ZTA2MDUyMzI3M2M4Yzk5ZmYyMWQ2OWU5ZWJmYTI1YzkzYzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaApAQCAtNDgsNyArNDgs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3
Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVu
dCgpIG92ZXJyaWRlOwotICAgIAorICAgIHZvaWQgdXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7
CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRv
a2VuLmgKaW5kZXggMGE0ZDY0YWZjZGJkNzJhNmFiYmMyNzY3ZmQ2MWIyOGM4ZDE2YzM2NC4uOTM0
NDg5NzNiZWYxODgzNTdhODNmZGQzMDdiNjBkOWY5YjA1OTEwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uaApAQCAtNDgsMTEg
KzQ4LDExIEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgY3JlYXRlV3JhcHBlcklm
TmVlZGVkKCk7CisgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxUb2tlbigpIGNvbnN0IG92ZXJyaWRlIGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRlck1hdGhNTFRva2Vu
IChhbm9ueW1vdXMpIiA6ICJSZW5kZXJNYXRoTUxUb2tlbiI7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdHlsZSgpOwogCiAgICAgLy8g
VGhpcyBib29sZWFuIGluZGljYXRlcyB3aGV0aGVyIHRoZSB0b2tlbiBlbGVtZW50IGNvbnRhaW5z
IHNvbWUgUmVuZGVyRWxlbWVudCBkZXNjZW5kYW50cywgb3RoZXIgdGhhbiB0aGUgYW5vbnltb3Vz
IHJlbmRlcmVycyBjcmVhdGVkIGZvciBsYXlvdXQgcHVycG9zZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242170</attachid>
            <date>2014-11-24 13:02:17 -0800</date>
            <delta_ts>2014-11-24 14:14:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138732-20141124220236.patch</filename>
            <type>text/plain</type>
            <size>33027</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzIxZDRhNjE1Y2ViYWZi
NGNkNzBiNjQ4MTI0ZWU4MTI2MjAzMDYyNy4uNDIxMzRiMDU0YTE1OGFjMTBkM2FkYzM2N2E4MTRi
ZTFmZmY3ZDMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDE0LTExLTE0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFJl
bmRlck1hdGhNTE9wZXJhdG9yIHRvIGF2b2lkIHJlbGF5b3V0IGR1cmluZyBsYXlvdXQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODczMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBu
ZWVkZWQgdGhpcyBwYXRjaCBmaXhlcyBsYXlvdXQgYW5kIHJlZmFjdG9ycyBjb2RlLgorCisgICAg
ICAgICogbWF0aG1sL01hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWF0aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKTog
VGhlCisgICAgICAgIHByb3BlcnRpZXMgb2YgdGhlIG1yb290IGFuZCBtc3FydCB3ZXJlIG5vdCB1
cGRhdGVkIHByb3Blcmx5LgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxUZXh0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxUZXh0RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBB
ZGRlZCB0aGUgcGFyc2luZworICAgICAgICBjb2RlIGZvciB0aGUgb3RoZXIgb3BlcmF0b3IgdmFs
dWVzIHRoYXQgYXJlIHVzZWQgZm9yIHJlbmRlcmluZy4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeTo6aXNPcGVyYXRvckZsYWdBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6Z2V0T3BlcmF0b3JGbGFnRnJv
bUF0dHJpYnV0ZU5hbWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpzZXRPcGVyYXRvckZsYWdBbmRTY2hlZHVsZUxheW91dElmTmVlZGVkKToKKyAgICAg
ICAgQWRkZWQgY29kZSB0byBjaGVjayB0aGUgY2FzZSB3aGVuIHRoZSB2YWx1ZSBpcyBudWxsLCBp
biB0aGF0IGNhc2UKKyAgICAgICAgd2UgaW5pdCB0aGUgZmxhZy4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1hdGhNTE9wZXJhdG9yOjppbml0T3BlcmF0b3JGbGFncyk6IFRoaXMgaXMgdGhlCisg
ICAgICAgIHNhbWUgY29kZSBpbml0aWFsaXppbmcgZmxhZ3MgdGhhdCB3YXMgdXNlZCBpbiBzZXRQ
cm9wZXJ0aWVzIGJ1dAorICAgICAgICBub3cgaXQgYWxsb3dzIHRvIGluaXQganVzdCBvbmUgZmxh
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclBy
b3BlcnRpZXNGcm9tT3BEaWN0RW50cnkpOiBSZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yRmxhZ3NGcm9tT3BEaWN0RW50cnkpOgorICAg
ICAgICBBZGRlZCwgdGhpcyBmdW5jdGlvbiByZXBsYWNlcyB0aGUgcHJldmlvdXMgb25lLCB3ZSBo
YXZlIGNyZWF0ZWQKKyAgICAgICAgb3RoZXIgZnVuY3Rpb25zIG1vZGlmeWluZyBvdGhlciBwcm9w
ZXJ0aWVzIHRvIHVzZSB0aGVtIGluIG90aGVyCisgICAgICAgIHBsYWNlLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcyk6IE1vdmVk
IHRoZQorICAgICAgICBmbGFncyBpbml0aWFsaXphdGlvbiB0byBhIG5ldyBmdW5jdGlvbiwgc28g
dGhhdCB3ZSBjYW4gdXNlIGl0IGZvcgorICAgICAgICBzcGVjaWZpYyBmbGFncy4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzdHJldGNoVG8pOiBBdm9pZGVkIHNldFBy
b3BlcnRpZXMKKyAgICAgICAgYW5kIHVwZGF0ZVN0eWxlIHdoZW4gZG9pbmcgdGhlIGxheW91dCwg
aXQgc2hvdWxkIGhhcHBlbiBiZWZvcmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICBSZW1vdmVk
IGNhbGxzIHRvIHNldFByb3BlcnRpZXMgYW5kIHVwZGF0ZVN0eWxlLCB0aGUgcHJvcGVydGllcwor
ICAgICAgICBhcmUgYWxyZWFkeSBzZXQgd2hlbiBidWlsZGluZyB0aGUgY29udGVudCwgd2UgZG8g
bm90IG5lZWQgdG8gc2V0CisgICAgICAgIHRoZW0gYWdhaW4uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6cmVidWlsZFRva2VuQ29udGVudCk6IFRoZSBzdHlsZQorICAg
ICAgICBhbmQgdGhlIHJlcXVlc3QgZm9yIGxheW91dCBub3cgaGFwcGVucyBpbiB0aGUgc2V0UHJv
cGVydGllcworICAgICAgICBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTE9wZXJhdG9yOjpzdHlsZURpZENoYW5nZSk6IFdlIGhhdmUgdG8gc2V0CisgICAg
ICAgIHRoZSBwcm9wZXJ0aWVzIHdoZW4gdGhlIHN0eWxlIGNoYW5nZXMgYmVjYXVzZSB0aGUgY2Fs
Y3VsYXRpb25zCisgICAgICAgIGRlcGVuZCBvbiB0aGUgZm9udCBzaXplLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogVGhpcyBpcyB0aGUgb2xk
CisgICAgICAgIHVwZGF0ZVN0eWxlIG1ldGhvZCBwYXJ0IHRoYXQgcmVhbGx5IHVwZGF0ZXMgdGhl
IHN0eWxlIGluIHRoZSBvbGQKKyAgICAgICAgZnVuY3Rpb24gYW5kIHRoZSByZXF1ZXN0IHRvIHRo
ZSBsYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y2FsY3Vs
YXRlU3RyZXRjaERpc3RhbmNlKTogVGhpcyBpcworICAgICAgICB0aGUgb2xkIHVwZGF0ZVN0eWxl
IGZ1bmN0aW9uLCB3aXRob3V0IHRoZSByZXF1ZXN0IHRvIGxheW91dC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYXJzZUxlYWRpbmdTcGFjZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhcnNlVHJhaWxpbmdTcGFjZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldExlYWRp
bmdTcGFjZSk6IEFkZGVkIHRoZSBjaGVjayBmb3IgcmVsYXlvdXQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0VHJhaWxpbmdTcGFjZSk6IEFkZGVkIHRoZSBjaGVj
ayBmb3IgcmVsYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
cGFyc2VNaW5TaXplKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6cGFyc2VNYXhTaXplKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6Z2V0SW5pdGlhbExlYWRpbmdTcGFjZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEluaXRpYWxUcmFpbGluZ1NwYWNlKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0RGljdGlvbmFy
eUVudHJ5KTogQWRkZWQsIHRoaXMKKyAgICAgICAgaXMgdGhlIG9sZCBpbml0T3BlcmF0b3JGbGFn
cywgd2UgaGF2ZSByZWZhY3RvcmVkIHRoZSBmdW5jdGlvbiB0bworICAgICAgICB1c2UgdGhlIGNv
ZGUgdGhhdCBjYWxjdWxhdGVzIHRoZSBlbnRyeSwgYW5kIHJlbW92ZSBvdGhlcgorICAgICAgICBt
b2RpZmljYXRpb25zIG9mIHRoZSBvcGVyYXRvciBzdGF0ZS4KKyAgICAgICAgKiByZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6c2V0TGVhZGluZ1NwYWNlKTogTW92ZWQgdG8gdGhlIC5jcHAgZmlsZS4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRUcmFpbGluZ1NwYWNl
KTogTW92ZWQgdG8gdGhlIC5jcHAgZmlsZS4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6
dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKTogV2UgaGF2ZSB0bworICAgICAgICB1cGRhdGUgdGhl
IGNoaWxkcmVuIHByb3BlcnRpZXMuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tl
bi5oOiBDaGFuZ2VkIHN0eWxlRGlkQ2hhbmdlIHRvCisgICAgICAgIHByb3RlY3RlZCBzZWN0aW9u
LCB3ZSBuZWVkIHRvIG92ZXJyaWRlIGluIG9wZXJhdG9yIGNsYXNzLgorICAgICAgICAqIHJlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTFJvdzo6bGF5b3V0KTogV2hlbiBjYWxjdWxhdGluZyB0aGUgc3RyZXRjaAorICAgICAg
ICBzaXplIHdlIGhhdmUgdG8gcnVuIGxheW91dCBhZ2FpbiBmb3IgdGhlIG9wZXJhdG9yIGluIGNh
c2Ugd2UgaGF2ZQorICAgICAgICBhIHN0cmV0Y2ggc2l6ZSBkaWZmZXJlbnQgdG8gdGhlIG9uZSB3
ZSB1c2VkIGluIHRoZSBpbml0aWFsIGxheW91dC4KKwogMjAxNC0xMS0yMCAgQ29tbWl0IFF1ZXVl
ICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjE3NjM5Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxJ
bmxpbmVDb250YWluZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxJ
bmxpbmVDb250YWluZXJFbGVtZW50LmNwcAppbmRleCBiZGI2YmY2ZmMwMzRiZDQ1NWY1OTZlY2U1
NDgwOThlOTljYmZhMjcxLi4wYmYyYzZiZDVhODMxYjkyNDc2OTZkOWIxZTAyOGI4ODhkM2U5ZGM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MSW5saW5lQ29udGFpbmVy
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTElubGluZUNvbnRh
aW5lckVsZW1lbnQuY3BwCkBAIC02MCw4ICs2MCwxMSBAQCB2b2lkIE1hdGhNTElubGluZUNvbnRh
aW5lckVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQog
ICAgIGlmIChyZW5kZXJlcigpKSB7CiAgICAgICAgIGlmIChpczxSZW5kZXJNYXRoTUxSb3c+KCpy
ZW5kZXJlcigpKSkKICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlck1hdGhNTFJvdz4oKnJlbmRl
cmVyKCkpLnVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcygpOwotICAgICAgICBlbHNlIGlmIChoYXNU
YWdOYW1lKG1hdGhUYWcpIHx8IGhhc1RhZ05hbWUobXNxcnRUYWcpKSB7CisgICAgICAgIGVsc2Ug
aWYgKGhhc1RhZ05hbWUobXNxcnRUYWcpIHx8IGhhc1RhZ05hbWUobXJvb3RUYWcpKQorICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyTWF0aE1MUm9vdD4ocmVuZGVyZXIoKSktPnVwZGF0ZU9wZXJh
dG9yUHJvcGVydGllcygpOworICAgICAgICBlbHNlIGlmIChoYXNUYWdOYW1lKG1hdGhUYWcpKSB7
CiAgICAgICAgICAgICBhdXRvKiBjaGlsZFJlbmRlcmVyID0gcmVuZGVyZXIoKS0+Zmlyc3RDaGls
ZCgpOworCiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyTWF0aE1MUm93PihjaGlsZFJlbmRlcmVy
KSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJNYXRoTUxSb3c+KCpjaGlsZFJlbmRl
cmVyKS51cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFRleHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL21hdGhtbC9NYXRoTUxUZXh0RWxlbWVudC5jcHAKaW5kZXggNTAzMTJiMzY1N2FiNDg5ZmNi
Mzc0ZjVlODQxODYwNmNlNDRmZjBlMS4uY2E0YzE4MzRiNzExODg4YWE4OTU0Y2Y1ZTZlMmZhZTU2
MDliOGM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFRleHRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MVGV4dEVsZW1lbnQuY3Bw
CkBAIC02NiwxMiArNjYsMjIgQEAgdm9pZCBNYXRoTUxUZXh0RWxlbWVudDo6Y2hpbGRyZW5DaGFu
Z2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaGFuZ2UpCiAKIHZvaWQgTWF0aE1MVGV4dEVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKG5hbWUgPT0gc3RyZXRjaHlBdHRyKSB7Ci0gICAgICAg
IGlmIChpczxSZW5kZXJNYXRoTUxPcGVyYXRvcj4ocmVuZGVyZXIoKSkpCi0gICAgICAgICAgICBk
b3duY2FzdDxSZW5kZXJNYXRoTUxPcGVyYXRvcj4oKnJlbmRlcmVyKCkpLnNldE9wZXJhdG9yRmxh
Z0FuZFNjaGVkdWxlTGF5b3V0SWZOZWVkZWQoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpTdHJl
dGNoeSwgdmFsdWUpOworICAgIGlmICghaXM8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KHJlbmRlcmVy
KCkpKSB7CisgICAgICAgIE1hdGhNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChNYXRoTUxPcGVyYXRvckRpY3Rp
b25hcnk6OmlzT3BlcmF0b3JGbGFnQXR0cmlidXRlKG5hbWUpKQorICAgICAgICBkb3duY2FzdDxS
ZW5kZXJNYXRoTUxPcGVyYXRvcj4oKnJlbmRlcmVyKCkpLnNldE9wZXJhdG9yRmxhZ0FuZFNjaGVk
dWxlTGF5b3V0SWZOZWVkZWQoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpnZXRPcGVyYXRvckZs
YWdGcm9tQXR0cmlidXRlTmFtZShuYW1lKSwgdmFsdWUpOworICAgIGVsc2UgaWYgKG5hbWUgPT0g
bHNwYWNlQXR0cikKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KCpyZW5k
ZXJlcigpKS5wYXJzZUxlYWRpbmdTcGFjZSh2YWx1ZSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSBy
c3BhY2VBdHRyKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJNYXRoTUxPcGVyYXRvcj4oKnJlbmRl
cmVyKCkpLnBhcnNlVHJhaWxpbmdTcGFjZSh2YWx1ZSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSBt
YXhzaXplQXR0cikKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KCpyZW5k
ZXJlcigpKS5wYXJzZU1heFNpemUodmFsdWUpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gbWluc2l6
ZUF0dHIpCisgICAgICAgIGRvd25jYXN0PFJlbmRlck1hdGhNTE9wZXJhdG9yPigqcmVuZGVyZXIo
KSkucGFyc2VNaW5TaXplKHZhbHVlKTsKKwogICAgIE1hdGhNTEVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKG5hbWUsIHZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAppbmRleCA4NWUxZWZlMDdiZWJk
MmU2YTljMmRiZGUxMmIxN2VjOGQ3ZGYxYmNkLi5hZTNiM2EyYjJjNTQ0ZmRmNzZmZjJjMWJlNDc0
NGY5ZWY1YzAzODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQWxleCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEZyYW7Dp29pcyBTYXVzc2V0
IChzYXVzc2V0QGdtYWlsLmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBJZ2FsaWEg
Uy5MLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTMzLDYgKzExMzMsNDAg
QEAgc3RhdGljIGNvbnN0IFVDaGFyIGhvcml6b250YWxPcGVyYXRvcnNbXSA9IHsKICAgICAweDAw
M0QsIDB4MDA1RSwgMHgwMDVGLCAweDAwN0UsIDB4MDBBRiwgMHgwMkM2LCAweDAyQzcsIDB4MDJD
OSwgMHgwMkNELCAweDAyREMsIDB4MDJGNywgMHgwMzAyLCAweDAzMzIsIDB4MjAzRSwgMHgyMEQw
LCAweDIwRDEsIDB4MjBENiwgMHgyMEQ3LCAweDIwRTEsIDB4MjE5MCwgMHgyMTkyLCAweDIxOTQs
IDB4MjE5OCwgMHgyMTk5LCAweDIxOUMsIDB4MjE5RCwgMHgyMTlFLCAweDIxQTAsIDB4MjFBMiwg
MHgyMUEzLCAweDIxQTQsIDB4MjFBNiwgMHgyMUE5LCAweDIxQUEsIDB4MjFBQiwgMHgyMUFDLCAw
eDIxQUQsIDB4MjFCNCwgMHgyMUI5LCAweDIxQkMsIDB4MjFCRCwgMHgyMUMwLCAweDIxQzEsIDB4
MjFDNCwgMHgyMUM2LCAweDIxQzcsIDB4MjFDOSwgMHgyMUNCLCAweDIxQ0MsIDB4MjFEMCwgMHgy
MUQyLCAweDIxRDQsIDB4MjFEQSwgMHgyMURCLCAweDIxREMsIDB4MjFERCwgMHgyMUUwLCAweDIx
RTIsIDB4MjFFNCwgMHgyMUU1LCAweDIxRTYsIDB4MjFFOCwgMHgyMUYwLCAweDIxRjYsIDB4MjFG
RCwgMHgyMUZFLCAweDIxRkYsIDB4MjNCNCwgMHgyM0I1LCAweDIzREMsIDB4MjNERCwgMHgyM0RF
LCAweDIzREYsIDB4MjNFMCwgMHgyM0UxLCAweDI1MDAsIDB4MjdGNSwgMHgyN0Y2LCAweDI3Rjcs
IDB4MjdGOCwgMHgyN0Y5LCAweDI3RkEsIDB4MjdGQiwgMHgyN0ZDLCAweDI3RkQsIDB4MjdGRSwg
MHgyN0ZGLCAweDI5MEMsIDB4MjkwRCwgMHgyOTBFLCAweDI5MEYsIDB4MjkxMCwgMHgyOTRFLCAw
eDI5NTAsIDB4Mjk1MiwgMHgyOTUzLCAweDI5NTYsIDB4Mjk1NywgMHgyOTVBLCAweDI5NUIsIDB4
Mjk1RSwgMHgyOTVGLCAweDJCNDUsIDB4MkI0NiwgMHhGRTM1LCAweEZFMzYsIDB4RkUzNywgMHhG
RTM4CiB9OwogCitib29sIGlzT3BlcmF0b3JGbGFnQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUpCit7CisgICAgcmV0dXJuIChuYW1lID09IHN0cmV0Y2h5QXR0cikgfHwgKG5hbWUg
PT0gZmVuY2VBdHRyKSB8fCAobmFtZSA9PSBzZXBhcmF0b3JBdHRyKSB8fCAobmFtZSA9PSBzeW1t
ZXRyaWNBdHRyKSB8fCAobmFtZSA9PSBsYXJnZW9wQXR0cikgIHx8IChuYW1lID09IG1vdmFibGVs
aW1pdHNBdHRyKSB8fCAobmFtZSA9PSBhY2NlbnRBdHRyKTsKK30KKworRmxhZyBnZXRPcGVyYXRv
ckZsYWdGcm9tQXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQoreworICAg
IEFTU0VSVChpc09wZXJhdG9yRmxhZ0F0dHJpYnV0ZShuYW1lKSk7CisKKyAgICBpZiAobmFtZSA9
PSBzdHJldGNoeUF0dHIpCisgICAgICAgIHJldHVybiBTdHJldGNoeTsKKworICAgIGlmIChuYW1l
ID09IGZlbmNlQXR0cikKKyAgICAgICAgcmV0dXJuIEZlbmNlOworCisgICAgaWYgKG5hbWUgPT0g
c2VwYXJhdG9yQXR0cikKKyAgICAgICAgcmV0dXJuIFNlcGFyYXRvcjsKKworICAgIGlmIChuYW1l
ID09IHN5bW1ldHJpY0F0dHIpCisgICAgICAgIHJldHVybiBTeW1tZXRyaWM7CisKKyAgICBpZiAo
bmFtZSA9PSBsYXJnZW9wQXR0cikKKyAgICAgICAgcmV0dXJuIExhcmdlT3A7CisKKyAgICBpZiAo
bmFtZSA9PSBtb3ZhYmxlbGltaXRzQXR0cikKKyAgICAgICAgcmV0dXJuIE1vdmFibGVMaW1pdHM7
CisKKyAgICBpZiAobmFtZSA9PSBhY2NlbnRBdHRyKQorICAgICAgICByZXR1cm4gQWNjZW50Owor
CisgICAgLy8gTm90IHJlYWNoYWJsZS4KKyAgICByZXR1cm4gTm9uZTsKK30KKwogfQogCiBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6UmVuZGVyTWF0aE1MT3BlcmF0b3IoTWF0aE1MRWxlbWVudCYgZWxl
bWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCkBAIC0xMTYxLDEwICsxMTk1LDY3IEBA
IHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yRmxhZ0FuZFNjaGVkdWxlTGF5
b3V0SWZOZWVkZWQoTWF0aE1MT3BlcmF0CiB7CiAgICAgdW5zaWduZWQgc2hvcnQgb2xkT3BlcmF0
b3JGbGFncyA9IG1fb3BlcmF0b3JGbGFnczsKIAotICAgIHNldE9wZXJhdG9yRmxhZ0Zyb21BdHRy
aWJ1dGVWYWx1ZShmbGFnLCBhdHRyaWJ1dGVWYWx1ZSk7CisgICAgaWYgKCFhdHRyaWJ1dGVWYWx1
ZSkKKyAgICAgICAgc2V0T3BlcmF0b3JGbGFnc0Zyb21PcERpY3RFbnRyeShnZXREaWN0aW9uYXJ5
RW50cnkoKSwgZmxhZyk7CisgICAgZWxzZQorICAgICAgICBzZXRPcGVyYXRvckZsYWdGcm9tQXR0
cmlidXRlVmFsdWUoZmxhZywgYXR0cmlidXRlVmFsdWUpOwogCi0gICAgaWYgKG9sZE9wZXJhdG9y
RmxhZ3MgIT0gbV9vcGVyYXRvckZsYWdzKQotICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKKyAgICBpZiAob2xkT3BlcmF0b3JGbGFncyAhPSBtX29wZXJhdG9yRmxh
Z3MpIHsKKyAgICAgICAgcmVzZXRTdHJldGNoU2l6ZSgpOworICAgICAgICBjb25zdCBhdXRvJiB3
cmFwcGVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oZmlyc3RDaGlsZCgpKTsKKyAgICAgICAg
d3JhcHBlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgfQorfQor
CitMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRJbml0aWFsTGVhZGluZ1NwYWNl
KGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqIGVudHJ5KQoreworICAgIC8v
IExlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIGlzIHNwZWNpZmllZCBhcyBtdWx0aXBsZSBvZiAx
LzE4ZW0uCisgICAgaWYgKGVudHJ5KQorICAgICAgICByZXR1cm4gZW50cnktPmxzcGFjZSAqIHN0
eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OworCisgICAgcmV0dXJuIDUgKiBzdHlsZSgpLmZvbnQo
KS5zaXplKCkgLyAxODsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0
SW5pdGlhbFRyYWlsaW5nU3BhY2UoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRy
eSogZW50cnkpCit7CisgICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgaXMgc3BlY2lm
aWVkIGFzIG11bHRpcGxlIG9mIDEvMThlbS4KKyAgICBpZiAoZW50cnkpCisgICAgICAgIHJldHVy
biBlbnRyeS0+cnNwYWNlICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7CisKKyAgICByZXR1
cm4gNSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OworfQorCitjb25zdCBNYXRoTUxPcGVy
YXRvckRpY3Rpb25hcnk6OkVudHJ5KiBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0RGljdGlvbmFy
eUVudHJ5KCkKK3sKKyAgICBpZiAobV90ZXh0Q29udGVudCkgeworICAgICAgICBib29sIGV4cGxp
Y2l0Rm9ybSA9IHRydWU7CisKKyAgICAgICAgaWYgKCFpc0Fub255bW91cygpKSB7CisgICAgICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm0gPSBlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0
ZShNYXRoTUxOYW1lczo6Zm9ybUF0dHIpOworICAgICAgICAgICAgaWYgKCEoKGZvcm0gPT0gInBy
ZWZpeCIpIHx8IChmb3JtID09ICJpbmZpeCIpIHx8IChmb3JtID09ICJwb3N0Zml4IikpKQorICAg
ICAgICAgICAgICAgIGV4cGxpY2l0Rm9ybSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSogZW50cnkgPSB0cnlCaW5hcnlT
ZWFyY2g8Y29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSwgTWF0aE1MT3BlcmF0
b3JEaWN0aW9uYXJ5OjpLZXk+KE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6ZGljdGlvbmFyeSwg
TUFUSE1MX09QRElDVF9TSVpFLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OktleShtX3RleHRD
b250ZW50LCBtX29wZXJhdG9yRm9ybSksIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RXh0cmFj
dEtleSk7CisgICAgICAgIGlmIChlbnRyeSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKwor
ICAgICAgICBpZiAoIWV4cGxpY2l0Rm9ybSkgeworICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5v
dCBmaW5kIHRoZSBkZXNpcmVkIG9wZXJhdG9yIGZvcm0gYW5kIGlmIGl0IHdhcyBub3Qgc2V0IGV4
cGxpY2l0ZWx5LCB3ZSB1c2UgdGhlIGZpcnN0IG9uZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOiBJ
bmZpeCwgUHJlZml4LCBQb3N0Zml4LgorICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBoYW5kbGUg
YmFkIE1hdGhNTCBtYXJrdXAgd2l0aG91dCBleHBsaWNpdCA8bXJvdz4gZGVsaW1pdGVycyBsaWtl
ICI8bW8+KDwvbW8+PG1pPmE8L21pPjxtbz4pPC9tbz48bW8+KDwvbW8+PG1pPmI8L21pPjxtbz4p
PC9tbz4iIHdoZXJlIHRoZSBpbm5lciBwYXJlbnRoZXNpcyBzaG91bGQgbm90IGJlIGNvbnNpZGVy
ZWQgaW5maXguCisgICAgICAgICAgICBlbnRyeSA9IHRyeUJpbmFyeVNlYXJjaDxjb25zdCBNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5LCBVQ2hhcj4oTWF0aE1MT3BlcmF0b3JEaWN0aW9u
YXJ5OjpkaWN0aW9uYXJ5LCBNQVRITUxfT1BESUNUX1NJWkUsIG1fdGV4dENvbnRlbnQsIE1hdGhN
TE9wZXJhdG9yRGljdGlvbmFyeTo6RXh0cmFjdENoYXIpOworICAgICAgICAgICAgaWYgKGVudHJ5
KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIGVudHJ5IGlzIGFub3RoZXIg
Zm9ybSBmb3IgdGhhdCBvcGVyYXRvciwgd2UgbW92ZSB0byB0aGF0IGVudHJ5LiBOb3RlIHRoYXQg
aXQgb25seSByZW1haW5zIGF0IG1vc3QgdHdvIGZvcm1zIHNvIHdlIGRvbid0IG5lZWQgdG8gbW92
ZSBhbnkgZnVydGhlci4KKyAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT0gTWF0aE1MT3BlcmF0
b3JEaWN0aW9uYXJ5OjpkaWN0aW9uYXJ5ICYmIChlbnRyeS0xKS0+Y2hhcmFjdGVyID09IG1fdGV4
dENvbnRlbnQpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LS07CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKKyN1bmRlZiBNQVRITUxfT1BESUNUX1NJWkUKIH0KIAogdm9pZCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JGbGFnRnJvbUF0dHJpYnV0ZShNYXRoTUxPcGVy
YXRvckRpY3Rpb25hcnk6OkZsYWcgZmxhZywgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKQEAg
LTExODMsMTcgKzEyNzQsMjEgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0
b3JGbGFnRnJvbUF0dHJpYnV0ZVZhbHVlKE1hdGhNTE9wZXJhdG9yRGljdGkKICAgICAvLyBXZSBp
Z25vcmUgYWJzZW50IG9yIGludmFsaWQgYXR0cmlidXRlcy4KIH0KIAotdm9pZCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9wZXJ0aWVzRnJvbU9wRGljdEVudHJ5KGNvbnN0IE1h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqIGVudHJ5KQordm9pZCBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6c2V0T3BlcmF0b3JGbGFnc0Zyb21PcERpY3RFbnRyeShjb25zdCBNYXRoTUxPcGVy
YXRvckRpY3Rpb25hcnk6OkVudHJ5KiBlbnRyeSwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpG
bGFnIGZsYWcpCiB7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGZsYWcgIT0gTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpOb25lKSB7CisgICAgICAgIG1fb3Bl
cmF0b3JGbGFncyB8PSBlbnRyeS0+ZmxhZ3MgJiBmbGFnOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgLy8gSWYgdGhpcyBvcGVyYXRvciBpcyBhbm9ueW1vdXMsIHdlIHByZXNlcnZlIHRo
ZSBGZW5jZSBhbmQgU2VwYXJhdG9yIHByb3BlcnRpZXMuIFRoaXMgaXMgdG8gaGFuZGxlIHRoZSBj
YXNlIG9mIFJlbmRlck1hdGhNTEZlbmNlZC4KICAgICBpZiAoaXNBbm9ueW1vdXMoKSkKICAgICAg
ICAgbV9vcGVyYXRvckZsYWdzID0gKG1fb3BlcmF0b3JGbGFncyAmIChNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnk6OkZlbmNlIHwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpTZXBhcmF0b3IpKSB8
IGVudHJ5LT5mbGFnczsKICAgICBlbHNlCiAgICAgICAgIG1fb3BlcmF0b3JGbGFncyA9IGVudHJ5
LT5mbGFnczsKLQotICAgIC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIGlzIHNwZWNpZmll
ZCBhcyBtdWx0aXBsZSBvZiAxLzE4ZW0uCi0gICAgbV9sZWFkaW5nU3BhY2UgPSBlbnRyeS0+bHNw
YWNlICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7Ci0gICAgbV90cmFpbGluZ1NwYWNlID0g
ZW50cnktPnJzcGFjZSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OwogfQogCiB2b2lkIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByb3BlcnRpZXMoKQpAQCAtMTIwMiw3ICsx
Mjk3LDYgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9wZXJ0aWVz
KCkKICAgICBtX2lzVmVydGljYWwgPSAhKHRyeUJpbmFyeVNlYXJjaDxjb25zdCBVQ2hhciwgVUNo
YXI+KE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6aG9yaXpvbnRhbE9wZXJhdG9ycywgV1RGX0FS
UkFZX0xFTkdUSChNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6Omhvcml6b250YWxPcGVyYXRvcnMp
LCBtX3RleHRDb250ZW50LCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkV4dHJhY3RLZXlIb3Jp
em9udGFsKSk7CiAKICAgICAvLyBXZSBkZXRlcm1pbmUgdGhlIGZvcm0gb2YgdGhlIG9wZXJhdG9y
LgotICAgIGJvb2wgZXhwbGljaXRGb3JtID0gdHJ1ZTsKICAgICBpZiAoIWlzQW5vbnltb3VzKCkp
IHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtID0gZWxlbWVudCgpLmZhc3RHZXRB
dHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmZvcm1BdHRyKTsKICAgICAgICAgaWYgKGZvcm0gPT0gInBy
ZWZpeCIpCkBAIC0xMjEzLDcgKzEzMDcsNiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpz
ZXRPcGVyYXRvclByb3BlcnRpZXMoKQogICAgICAgICAgICAgbV9vcGVyYXRvckZvcm0gPSBNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6OlBvc3RmaXg7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgbW9yZSBhZHZhbmNlZCBoZXVyaXN0aWNzIGluZGlj
YXRlZCBpbiB0aGUgc3BlY2lmaWNhdGlvbiB0byBkZXRlcm1pbmUgdGhlIG9wZXJhdG9yIGZvcm0g
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MjkpLgotICAgICAg
ICAgICAgZXhwbGljaXRGb3JtID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQoKS5w
cmV2aW91c1NpYmxpbmcoKSAmJiBlbGVtZW50KCkubmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAg
ICAgICBtX29wZXJhdG9yRm9ybSA9IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6UHJlZml4Owog
ICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudCgpLnByZXZpb3VzU2libGluZygpICYmICFlbGVt
ZW50KCkubmV4dFNpYmxpbmcoKSkKQEAgLTEyMzUsMjMgKzEzMjgsMTQgQEAgdm9pZCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCkKICAgICBtX21pblNpemUgPSBz
dHlsZSgpLmZvbnQoKS5zaXplKCk7IC8vIFRoaXMgc2V0cyBtaW5zaXplIHRvICIxZW0iLgogICAg
IG1fbWF4U2l6ZSA9IGludE1heEZvckxheW91dFVuaXQ7IC8vIFRoaXMgc2V0cyBtYXhzaXplIHRv
ICJpbmZpbml0eSIuCiAKLSAgICBpZiAobV90ZXh0Q29udGVudCkgewotICAgICAgICAvLyBUaGVu
IHdlIHRyeSB0byBmaW5kIHRoZSBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBvcGVyYXRvciBkaWN0
aW9uYXJ5LgotICAgICAgICBpZiAoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRy
eSogZW50cnkgPSB0cnlCaW5hcnlTZWFyY2g8Y29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5
OjpFbnRyeSwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpLZXk+KE1hdGhNTE9wZXJhdG9yRGlj
dGlvbmFyeTo6ZGljdGlvbmFyeSwgTUFUSE1MX09QRElDVF9TSVpFLCBNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnk6OktleShtX3RleHRDb250ZW50LCBtX29wZXJhdG9yRm9ybSksIE1hdGhNTE9wZXJh
dG9yRGljdGlvbmFyeTo6RXh0cmFjdEtleSkpCi0gICAgICAgICAgICBzZXRPcGVyYXRvclByb3Bl
cnRpZXNGcm9tT3BEaWN0RW50cnkoZW50cnkpOwotICAgICAgICBlbHNlIGlmICghZXhwbGljaXRG
b3JtKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBkaWQgbm90IGZpbmQgdGhlIGRlc2lyZWQgb3Bl
cmF0b3IgZm9ybSBhbmQgaWYgaXQgd2FzIG5vdCBzZXQgZXhwbGljaXRlbHksIHdlIHVzZSB0aGUg
Zmlyc3Qgb25lIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IEluZml4LCBQcmVmaXgsIFBvc3RmaXgu
Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHRvIGhhbmRsZSBiYWQgTWF0aE1MIG1hcmt1cCB3aXRo
b3V0IGV4cGxpY2l0IDxtcm93PiBkZWxpbWl0ZXJzIGxpa2UgIjxtbz4oPC9tbz48bWk+YTwvbWk+
PG1vPik8L21vPjxtbz4oPC9tbz48bWk+YjwvbWk+PG1vPik8L21vPiIgd2hlcmUgdGhlIGlubmVy
IHBhcmVudGhlc2lzIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBpbmZpeC4KLSAgICAgICAgICAg
IGlmIChjb25zdCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5KiBlbnRyeSA9IHRyeUJp
bmFyeVNlYXJjaDxjb25zdCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5LCBVQ2hhcj4o
TWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpkaWN0aW9uYXJ5LCBNQVRITUxfT1BESUNUX1NJWkUs
IG1fdGV4dENvbnRlbnQsIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RXh0cmFjdENoYXIpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIGVudHJ5IGlzIGFub3RoZXIgZm9y
bSBmb3IgdGhhdCBvcGVyYXRvciwgd2UgbW92ZSB0byB0aGF0IGVudHJ5LiBOb3RlIHRoYXQgaXQg
b25seSByZW1haW5zIGF0IG1vc3QgdHdvIGZvcm1zIHNvIHdlIGRvbid0IG5lZWQgdG8gbW92ZSBh
bnkgZnVydGhlci4KLSAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT0gTWF0aE1MT3BlcmF0b3JE
aWN0aW9uYXJ5OjpkaWN0aW9uYXJ5ICYmIChlbnRyeS0xKS0+Y2hhcmFjdGVyID09IG1fdGV4dENv
bnRlbnQpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LS07Ci0gICAgICAgICAgICAgICAgbV9v
cGVyYXRvckZvcm0gPSBzdGF0aWNfY2FzdDxNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZvcm0+
KGVudHJ5LT5mb3JtKTsgLy8gV2Ugb3ZlcnJpZGUgdGhlIGZvcm0gcHJldmlvdXNseSBkZXRlcm1p
bmVkLgotICAgICAgICAgICAgICAgIHNldE9wZXJhdG9yUHJvcGVydGllc0Zyb21PcERpY3RFbnRy
eShlbnRyeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBjb25zdCBNYXRoTUxPcGVy
YXRvckRpY3Rpb25hcnk6OkVudHJ5KiBlbnRyeSA9IGdldERpY3Rpb25hcnlFbnRyeSgpOworICAg
IGlmIChlbnRyeSkgeworICAgICAgICBzZXRPcGVyYXRvckZsYWdzRnJvbU9wRGljdEVudHJ5KGVu
dHJ5LCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6Ok5vbmUpOworICAgICAgICBpZiAobV9vcGVy
YXRvckZvcm0gIT0gZW50cnktPmZvcm0pCisgICAgICAgICAgICBtX29wZXJhdG9yRm9ybSA9IHN0
YXRpY19jYXN0PE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6Rm9ybT4oZW50cnktPmZvcm0pOwor
ICAgICAgICBtX2xlYWRpbmdTcGFjZSA9IGdldEluaXRpYWxMZWFkaW5nU3BhY2UoZW50cnkpOwor
ICAgICAgICBtX3RyYWlsaW5nU3BhY2UgPSBnZXRJbml0aWFsVHJhaWxpbmdTcGFjZShlbnRyeSk7
CiAgICAgfQotI3VuZGVmIE1BVEhNTF9PUERJQ1RfU0laRQogCiAgICAgaWYgKCFpc0Fub255bW91
cygpKSB7CiAgICAgICAgIC8vIEZpbmFsbHksIHdlIG1ha2UgdGhlIGF0dHJpYnV0ZSB2YWx1ZXMg
b3ZlcnJpZGUgdGhlIGRlZmF1bHQuCkBAIC0xMjY3LDExICsxMzUxLDExIEBAIHZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcygpCiAgICAgICAgIHBhcnNlTWF0
aE1MTGVuZ3RoKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpsc3BhY2VB
dHRyKSwgbV9sZWFkaW5nU3BhY2UsICZzdHlsZSgpLCBmYWxzZSk7IC8vIEZJWE1FOiBOZWdhdGl2
ZSBsZWFkaW5nIHNwYWNlIG11c3QgYmUgaW1wbGVtZW50ZWQgKGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MzApLgogICAgICAgICBwYXJzZU1hdGhNTExlbmd0aChl
bGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6cnNwYWNlQXR0ciksIG1fdHJh
aWxpbmdTcGFjZSwgJnN0eWxlKCksIGZhbHNlKTsgLy8gRklYTUU6IE5lZ2F0aXZlIHRyYWlsaW5n
IHNwYWNlIG11c3QgYmUgaW1wbGVtZW50ZWQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjQ4MzApLgogCi0gICAgICAgIHBhcnNlTWF0aE1MTGVuZ3RoKGVsZW1lbnQo
KS5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjptaW5zaXplQXR0ciksIG1fbWluU2l6ZSwg
JnN0eWxlKCksIGZhbHNlKTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBtYXhzaXplID0g
ZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6Om1heHNpemVBdHRyKTsKLSAg
ICAgICAgaWYgKG1heHNpemUgIT0gImluZmluaXR5IikKLSAgICAgICAgICAgIHBhcnNlTWF0aE1M
TGVuZ3RoKG1heHNpemUsIG1fbWF4U2l6ZSwgJnN0eWxlKCksIGZhbHNlKTsKKyAgICAgICAgcGFy
c2VNaW5TaXplKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjptaW5zaXpl
QXR0cikpOworICAgICAgICBwYXJzZU1heFNpemUoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUo
TWF0aE1MTmFtZXM6Om1heHNpemVBdHRyKSk7CiAgICAgfQorCisgICAgdXBkYXRlU3R5bGUoKTsK
IH0KIAogYm9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6aXNDaGlsZEFsbG93ZWQoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdApAQCAtMTI4Nyw3ICsxMzcxLDYg
QEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c3RyZXRjaFRvKExheW91dFVuaXQgaGVpZ2h0
QWJvdmVCYXNlbGluZSwgTGF5b3V0VW5pdAogICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxp
bmUgPSBoZWlnaHRBYm92ZUJhc2VsaW5lOwogICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGlu
ZSA9IGRlcHRoQmVsb3dCYXNlbGluZTsKIAotICAgIHNldE9wZXJhdG9yUHJvcGVydGllcygpOwog
ICAgIGlmIChoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpTeW1tZXRy
aWMpKSB7CiAgICAgICAgIC8vIFdlIG1ha2UgdGhlIG9wZXJhdG9yIHN0cmV0Y2ggc3ltbWV0cmlj
YWxseSBhYm92ZSBhbmQgYmVsb3cgdGhlIGF4aXMuCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgcmVhZCB0aGUgYXhpcyBmcm9tIHRoZSBNQVRIIHRhYmxlIChodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMjk3KS4gRm9yIG5vdywgd2UgdXNlIHRoZSBzYW1lIHZh
bHVlIGFzIGluIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpmaXJzdExpbmVCYXNlbGluZSgpLgpAQCAt
MTMwOCw3ICsxMzkxLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c3RyZXRjaFRvKExh
eW91dFVuaXQgaGVpZ2h0QWJvdmVCYXNlbGluZSwgTGF5b3V0VW5pdAogICAgIH0KICAgICBtX3N0
cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lICo9IGFzcGVjdDsKICAgICBtX3N0cmV0Y2hEZXB0aEJl
bG93QmFzZWxpbmUgKj0gYXNwZWN0OwotICAgIHVwZGF0ZVN0eWxlKCk7CisgICAgY2FsY3VsYXRl
U3RyZXRjaERpc3RhbmNlKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0cmV0
Y2hUbyhMYXlvdXRVbml0IHdpZHRoKQpAQCAtMTMxNywxMCArMTQwMCw3IEBAIHZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IHdpZHRoKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX3N0cmV0Y2hXaWR0aCA9IHdpZHRoOwotCi0gICAgc2V0T3BlcmF0b3JQcm9w
ZXJ0aWVzKCk7Ci0KLSAgICB1cGRhdGVTdHlsZSgpOworICAgIGNhbGN1bGF0ZVN0cmV0Y2hEaXN0
YW5jZSgpOwogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpyZXNldFN0cmV0Y2hTaXpl
KCkKQEAgLTEzNTEsNyArMTQzMSw2IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKICAgICBBU1NFUlQocHJlZmVycmVkTG9naWNh
bFdpZHRoc0RpcnR5KCkpOwogCi0gICAgc2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiAgICAgaWYg
KCFzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxUb2tlbjo6
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAgICAgaWYgKGlzSW52aXNpYmxl
T3BlcmF0b3IoKSkgewpAQCAtMTQwNCw4ICsxNDgzLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6cmVidWlsZFRva2VuQ29udGVudChjb25zdCBTdHJpbmcmIG9wZXJhdG9yU3RyaW5nKQog
ICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSA8bW8+IG9wZXJhdG9ycyB3aXRoIG11
bHRpcGxlIGNoYXJhY3RlcnMgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjQ4MjgpLgogICAgIG1fdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudC5sZW5ndGgoKSA9PSAx
ID8gdGV4dENvbnRlbnRbMF0gOiAwOwogICAgIHNldE9wZXJhdG9yUHJvcGVydGllcygpOwotICAg
IHVwZGF0ZVN0eWxlKCk7Ci0gICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7
CisgICAgcmVzZXRTdHJldGNoU2l6ZSgpOwogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9y
Ojp1cGRhdGVUb2tlbkNvbnRlbnQoY29uc3QgU3RyaW5nJiBvcGVyYXRvclN0cmluZykKQEAgLTE0
MjksOSArMTUwNywxMiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVGcm9tRWxl
bWVudCgpCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVPcGVyYXRvclByb3BlcnRp
ZXMoKQogewogICAgIHNldE9wZXJhdG9yUHJvcGVydGllcygpOwotICAgIGlmICghaXNFbXB0eSgp
KQotICAgICAgICB1cGRhdGVTdHlsZSgpOwotICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRo
c1JlY2FsYygpOworfQorCit2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQorewor
ICAgIFJlbmRlck1hdGhNTFRva2VuOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7Cisg
ICAgc2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiB9CiAKIGJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OnNob3VsZEFsbG93U3RyZXRjaGluZygpIGNvbnN0CkBAIC0xNjU5LDYgKzE3NDAsMTcgQEAg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0Y2h5RGF0YSBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
ZmluZFN0cmV0Y2h5RGF0YShVQ2hhcgogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRh
dGVTdHlsZSgpCiB7CisgICAgLy8gV2UgYWRkIHNwYWNpbmcgYXJvdW5kIHRoZSBvcGVyYXRvci4K
KyAgICAvLyBGSVhNRTogVGhlIHNwYWNpbmcgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSB3aG9sZSBl
bWJlbGxpc2hlZCBvcGVyYXRvciAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNDgzMSkuCisgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3VsZCBvbmx5IGJlIGFk
ZGVkIGluc2lkZSAocGVyaGFwcyBpbmZlcnJlZCkgbXJvdyAoaHR0cDovL3d3dy53My5vcmcvVFIv
TWF0aE1ML2NoYXB0ZXIzLmh0bWwjcHJlc20ub3BzcGFjaW5nKS4KKyAgICBjb25zdCBhdXRvJiB3
cmFwcGVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oZmlyc3RDaGlsZCgpKTsKKyAgICB3cmFw
cGVyLT5zdHlsZSgpLnNldE1hcmdpblN0YXJ0KExlbmd0aChtX2xlYWRpbmdTcGFjZSwgRml4ZWQp
KTsKKyAgICB3cmFwcGVyLT5zdHlsZSgpLnNldE1hcmdpbkVuZChMZW5ndGgobV90cmFpbGluZ1Nw
YWNlLCBGaXhlZCkpOworICAgIHdyYXBwZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1Jl
Y2FsYygpOworfQorCit2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNo
RGlzdGFuY2UoKQorewogICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdl
UHJldmVudGVyOwogCiAgICAgQVNTRVJUKGZpcnN0Q2hpbGQoKSk7CkBAIC0xNjY2LDE1ICsxNzU4
LDYgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX3N0cmV0Y2h5RGF0YS5zZXROb3JtYWxNb2RlKCk7Ci0gICAgLy8gV2Ug
YWRkIHNwYWNpbmcgYXJvdW5kIHRoZSBvcGVyYXRvci4KLSAgICAvLyBGSVhNRTogVGhlIHNwYWNp
bmcgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSB3aG9sZSBlbWJlbGxpc2hlZCBvcGVyYXRvciAoaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgzMSkuCi0gICAgLy8gRklY
TUU6IFRoZSBzcGFjaW5nIHNob3VsZCBvbmx5IGJlIGFkZGVkIGluc2lkZSAocGVyaGFwcyBpbmZl
cnJlZCkgbXJvdyAoaHR0cDovL3d3dy53My5vcmcvVFIvTWF0aE1ML2NoYXB0ZXIzLmh0bWwjcHJl
c20ub3BzcGFjaW5nKS4KLSAgICBjb25zdCBhdXRvJiB3cmFwcGVyID0gZG93bmNhc3Q8UmVuZGVy
RWxlbWVudD4oZmlyc3RDaGlsZCgpKTsKLSAgICBhdXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6
OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoJnN0eWxlKCksIEZMRVgpOwotICAgIG5l
d1N0eWxlLmdldCgpLnNldE1hcmdpblN0YXJ0KExlbmd0aChtX2xlYWRpbmdTcGFjZSwgRml4ZWQp
KTsKLSAgICBuZXdTdHlsZS5nZXQoKS5zZXRNYXJnaW5FbmQoTGVuZ3RoKG1fdHJhaWxpbmdTcGFj
ZSwgRml4ZWQpKTsKLSAgICB3cmFwcGVyLT5zZXRTdHlsZShXVEY6Om1vdmUobmV3U3R5bGUpKTsK
LSAgICB3cmFwcGVyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIAogICAg
IGlmICghc2hvdWxkQWxsb3dTdHJldGNoaW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIwMDcs
NiArMjA5MCw2MyBAQCBMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluZ1Nw
YWNlRXJyb3IoKQogICAgIHJldHVybiB3aWR0aCAtIGFzc2VtYmx5V2lkdGg7CiB9CiAKK3ZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhcnNlTGVhZGluZ1NwYWNlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCit7CisKKyAgICBMYXlvdXRVbml0IGxlYWRpbmdTcGFjZTsKKworICAgIC8vIEZJ
WE1FOiBOZWdhdGl2ZSBsZWFkaW5nIHNwYWNlIG11c3QgYmUgaW1wbGVtZW50ZWQgKGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MzApLgorICAgIGlmICghcGFyc2VN
YXRoTUxMZW5ndGgodmFsdWUsIGxlYWRpbmdTcGFjZSwgJnN0eWxlKCksIGZhbHNlKSkKKyAgICAg
ICAgbGVhZGluZ1NwYWNlID0gIGdldEluaXRpYWxMZWFkaW5nU3BhY2UoZ2V0RGljdGlvbmFyeUVu
dHJ5KCkpOworCisgICAgc2V0TGVhZGluZ1NwYWNlKGxlYWRpbmdTcGFjZSk7Cit9CisKK3ZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhcnNlVHJhaWxpbmdTcGFjZShjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKQoreworICAgIExheW91dFVuaXQgdHJhaWxpbmdTcGFjZTsKKworICAgIC8vIEZJ
WE1FOiBOZWdhdGl2ZSB0cmFpbGluZyBzcGFjZSBtdXN0IGJlIGltcGxlbWVudGVkIChodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMwKS4KKyAgICBpZiAoIXBhcnNl
TWF0aE1MTGVuZ3RoKHZhbHVlLCB0cmFpbGluZ1NwYWNlLCAmc3R5bGUoKSwgZmFsc2UpKQorICAg
ICAgICB0cmFpbGluZ1NwYWNlID0gZ2V0SW5pdGlhbFRyYWlsaW5nU3BhY2UoZ2V0RGljdGlvbmFy
eUVudHJ5KCkpOworCisgICAgc2V0VHJhaWxpbmdTcGFjZSh0cmFpbGluZ1NwYWNlKTsKK30KKwor
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0TGVhZGluZ1NwYWNlKExheW91dFVuaXQgbGVh
ZGluZ1NwYWNlKQoreworICAgIG1fbGVhZGluZ1NwYWNlID0gbGVhZGluZ1NwYWNlOworICAgIGNv
bnN0IGF1dG8mIHdyYXBwZXIgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihmaXJzdENoaWxkKCkp
OworICAgIHdyYXBwZXItPnN0eWxlKCkuc2V0TWFyZ2luU3RhcnQoTGVuZ3RoKG1fbGVhZGluZ1Nw
YWNlLCBGaXhlZCkpOworICAgIHdyYXBwZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1Jl
Y2FsYygpOworfQorCit2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRUcmFpbGluZ1NwYWNl
KExheW91dFVuaXQgdHJhaWxpbmdTcGFjZSkKK3sKKyAgICBtX3RyYWlsaW5nU3BhY2UgPSB0cmFp
bGluZ1NwYWNlOworICAgIGNvbnN0IGF1dG8mIHdyYXBwZXIgPSBkb3duY2FzdDxSZW5kZXJFbGVt
ZW50PihmaXJzdENoaWxkKCkpOworICAgIHdyYXBwZXItPnN0eWxlKCkuc2V0TWFyZ2luRW5kKExl
bmd0aChtX3RyYWlsaW5nU3BhY2UsIEZpeGVkKSk7CisgICAgd3JhcHBlci0+c2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OnBhcnNlTWluU2l6ZShjb25zdCBBdG9taWNTdHJpbmcmIG1pblNpemUpCit7CisgICAgaWYgKCFw
YXJzZU1hdGhNTExlbmd0aChtaW5TaXplLCBtX21pblNpemUsICZzdHlsZSgpLCBmYWxzZSkpCisg
ICAgICAgIG1fbWluU2l6ZSA9IHN0eWxlKCkuZm9udCgpLnNpemUoKTsgLy8gVGhpcyBzZXRzIG1p
bnNpemUgdG8gIjFlbSIuCisKKyAgICBjb25zdCBhdXRvJiB3cmFwcGVyID0gZG93bmNhc3Q8UmVu
ZGVyRWxlbWVudD4oZmlyc3RDaGlsZCgpKTsKKyAgICB3cmFwcGVyLT5zZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFy
c2VNYXhTaXplKGNvbnN0IEF0b21pY1N0cmluZyYgbWF4U2l6ZSkKK3sKKyAgICBpZiAoKG1heFNp
emUgPT0gImluZmluaXR5IikgfHwgKCFwYXJzZU1hdGhNTExlbmd0aChtYXhTaXplLCBtX21heFNp
emUsICZzdHlsZSgpLCBmYWxzZSkpKQorICAgICAgICBtX21heFNpemUgPSBpbnRNYXhGb3JMYXlv
dXRVbml0OyAvLyBUaGlzIHNldHMgbWF4c2l6ZSB0byAiaW5maW5pdHkiLgorCisgICAgY29uc3Qg
YXV0byYgd3JhcHBlciA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGZpcnN0Q2hpbGQoKSk7Cisg
ICAgd3JhcHBlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Cit9CisKIH0K
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmgKaW5kZXggZTg3MWNlMGUyYmQxYmQzZWJiM2ViMzg5YmVhMDE1
OTliYjBmYTlkMS4uMWE5MTgxYzc1MmRkMWY5MDc3ZGNhN2E4Y2I5NmQ2YzliNGU1OWE1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
T3BlcmF0b3IuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxl
eCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQwLDYgKzQxLDcgQEAgbmFtZXNwYWNlIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFy
eSB7CiAKIGVudW0gRm9ybSB7IEluZml4LCBQcmVmaXgsIFBvc3RmaXggfTsKIGVudW0gRmxhZyB7
CisgICAgTm9uZSA9IDB4MCwKICAgICBBY2NlbnQgPSAweDEsIC8vIEZJWE1FOiBUaGlzIG11c3Qg
YmUgdXNlZCB0byBpbXBsZW1lbnQgYWNjZW50dW5kZXIvYWNjZW50IG9uIG11bmRlcm92ZXIgKGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MjYpLgogICAgIEZlbmNl
ID0gMHgyLCAvLyBUaGlzIGhhcyBubyB2aXN1YWwgZWZmZWN0IGJ1dCBhbGxvd3MgdG8gZXhwb3Nl
IHNlbWFudGljIGluZm9ybWF0aW9uIHZpYSB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlLgogICAgIExh
cmdlT3AgPSAweDQsCkBAIC01Niw2ICs1OCw5IEBAIHN0cnVjdCBFbnRyeSB7CiAgICAgdW5zaWdu
ZWQgZmxhZ3MgOiA4OwogfTsKIAorYm9vbCBpc09wZXJhdG9yRmxhZ0F0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJik7CitGbGFnIGdldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGVOYW1lKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKKwogfQogCiBjbGFzcyBSZW5kZXJNYXRoTUxPcGVyYXRvciA6
IHB1YmxpYyBSZW5kZXJNYXRoTUxUb2tlbiB7CkBAIC04MSwxNCArODYsMTkgQEAgcHVibGljOgog
ICAgIHZvaWQgdXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiAgICAgdm9pZCBzZXRPcGVyYXRv
ckZsYWdBbmRTY2hlZHVsZUxheW91dElmTmVlZGVkKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6
RmxhZywgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgTGF5b3V0VW5p
dCB0cmFpbGluZ1NwYWNlRXJyb3IoKTsKKyAgICB2b2lkIHBhcnNlTGVhZGluZ1NwYWNlKGNvbnN0
IEF0b21pY1N0cmluZyYpOworICAgIHZvaWQgcGFyc2VUcmFpbGluZ1NwYWNlKGNvbnN0IEF0b21p
Y1N0cmluZyYpOworICAgIHZvaWQgcGFyc2VNaW5TaXplKGNvbnN0IEF0b21pY1N0cmluZyYpOwor
ICAgIHZvaWQgcGFyc2VNYXhTaXplKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRPcGVyYXRvclByb3BlcnRpZXMoKTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
dm9pZCBzZXRPcGVyYXRvclByb3BlcnRpZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0
ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2lj
YWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYpIGNvbnN0IG92ZXJyaWRlOwogICAg
IGZsb2F0IGFkdmFuY2VGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmKSBjb25zdDsKLSAgICB2b2lk
IHNldExlYWRpbmdTcGFjZShMYXlvdXRVbml0IGxlYWRpbmdTcGFjZSkgeyBtX2xlYWRpbmdTcGFj
ZSA9IGxlYWRpbmdTcGFjZTsgfQotICAgIHZvaWQgc2V0VHJhaWxpbmdTcGFjZShMYXlvdXRVbml0
IHRyYWlsaW5nU3BhY2UpIHsgbV90cmFpbGluZ1NwYWNlID0gdHJhaWxpbmdTcGFjZTsgfQorICAg
IHZvaWQgc2V0TGVhZGluZ1NwYWNlKExheW91dFVuaXQpOworICAgIHZvaWQgc2V0VHJhaWxpbmdT
cGFjZShMYXlvdXRVbml0KTsKKwogICAgIFVDaGFyIHRleHRDb250ZW50KCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0Q29udGVudDsgfQogCiBwcml2YXRlOgpAQCAtMTU2LDYgKzE2Niw4IEBAIHByaXZh
dGU6CiAKICAgICB2aXJ0dWFsIGludCBmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgUmVuZGVyTWF0aE1MT3BlcmF0b3IqIHVuZW1iZWxsaXNoZWRPcGVyYXRv
cigpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJy
aWRlIGZpbmFsOworCiAgICAgdm9pZCByZWJ1aWxkVG9rZW5Db250ZW50KGNvbnN0IFN0cmluZyYg
b3BlcmF0b3JTdHJpbmcpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpIG92
ZXJyaWRlOwogCkBAIC0xODQsOCArMTk2LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludEhv
cml6b250YWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAg
ICAgdm9pZCBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlKE1hdGhNTE9wZXJhdG9yRGljdGlv
bmFyeTo6RmxhZywgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgc2V0T3BlcmF0b3JG
bGFnRnJvbUF0dHJpYnV0ZVZhbHVlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZywgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSk7Ci0gICAgdm9pZCBzZXRPcGVyYXRvclBy
b3BlcnRpZXNGcm9tT3BEaWN0RW50cnkoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpF
bnRyeSopOworICAgIHZvaWQgc2V0T3BlcmF0b3JGbGFnc0Zyb21PcERpY3RFbnRyeShjb25zdCBN
YXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5KiwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5
OjpGbGFnKTsKKyAgICB2b2lkIGNhbGN1bGF0ZVN0cmV0Y2hEaXN0YW5jZSgpOwogCisgICAgTGF5
b3V0VW5pdCBnZXRJbml0aWFsTGVhZGluZ1NwYWNlKGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlv
bmFyeTo6RW50cnkqKTsKKyAgICBMYXlvdXRVbml0IGdldEluaXRpYWxUcmFpbGluZ1NwYWNlKGNv
bnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqKTsKKyAgICBjb25zdCBNYXRoTUxP
cGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5KiBnZXREaWN0aW9uYXJ5RW50cnkoKTsKICAgICBMYXlv
dXRVbml0IG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmU7CiAgICAgTGF5b3V0VW5pdCBtX3N0
cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmU7CiAgICAgTGF5b3V0VW5pdCBtX3N0cmV0Y2hXaWR0aDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
b3QuY3BwCmluZGV4IGVkMjA5YWQxYTY4ZTA2NDdkZjU0OTg4ZTYzMDdmZDA4MTI1YTJiOTkuLmE0
MGRiZDljODg1NDYxMWNlMjJkNjk0ZTZlODhmOWIyNGFhYmY0ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcApAQCAtMTkz
LDYgKzE5MywxOSBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnVwZGF0ZUZyb21FbGVtZW50KCkK
ICAgICAgICAgdXBkYXRlU3R5bGUoKTsKIH0KIAordm9pZCBSZW5kZXJNYXRoTUxSb290Ojp1cGRh
dGVPcGVyYXRvclByb3BlcnRpZXMoKQoreworICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGJhc2VXcmFwcGVyKCktPmZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAg
ICAgaWYgKGlzPFJlbmRlck1hdGhNTEJsb2NrPigqY2hpbGQpKSB7CisgICAgICAgICAgICBpZiAo
YXV0byogcmVuZGVyT3BlcmF0b3IgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxCbG9jaz4oKmNoaWxk
KS51bmVtYmVsbGlzaGVkT3BlcmF0b3IoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJPcGVyYXRv
ci0+dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZv
aWQgUmVuZGVyTWF0aE1MUm9vdDo6dXBkYXRlU3R5bGUoKQogewogICAgIEFTU0VSVCghaXNFbXB0
eSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MUm9vdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxSb290LmgKaW5kZXggOGFjNDhkNDUxOTUxMDk3MzQ5OTI2MGMyNTczZWU3YWMwMDFmZDQ4NS4u
ZjYxYmUwNjA1MjMyNzNjOGM5OWZmMjFkNjllOWViZmEyNWM5M2M0NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmgKQEAgLTQ4LDcg
KzQ4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3Qq
IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVs
ZW1lbnQoKSBvdmVycmlkZTsKLSAgICAKKyAgICB2b2lkIHVwZGF0ZU9wZXJhdG9yUHJvcGVydGll
cygpOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxSb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxSb3cuY3BwCmluZGV4IGNmMDQ5YWQ1Y2Y1MjJlZmI1ZGFhOTg1NzRjNjQ2YTBkYTkzNDg0MDEu
LmU1MGQyMWJjNjM2YjcyNGFjM2RkNmE4NmNmYjM5OGZmNmQ4Y2M4OWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAKQEAgLTEw
MSw4ICsxMDEsMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dCgpCiAgICAgCiAgICAg
Ly8gU2V0IHRoZSBzaXplcyBvZiAocG9zc2libHkgZW1iZWxsaXNoZWQpIHN0cmV0Y2h5IG9wZXJh
dG9yIGNoaWxkcmVuLgogICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5k
ZXJNYXRoTUxCbG9jaz4oKnRoaXMpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJlbmRlck9wZXJhdG9y
ID0gY2hpbGQudW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkpCisgICAgICAgIGlmIChhdXRvIHJlbmRl
ck9wZXJhdG9yID0gY2hpbGQudW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkpIHsKKyAgICAgICAgICAg
IExheW91dFVuaXQgc2l6ZSA9IHJlbmRlck9wZXJhdG9yLT5zdHJldGNoU2l6ZSgpOwogICAgICAg
ICAgICAgcmVuZGVyT3BlcmF0b3ItPnN0cmV0Y2hUbyhzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGlu
ZSwgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSBy
ZW5kZXJPcGVyYXRvci0+c3RyZXRjaFNpemUoKSkKKyAgICAgICAgICAgICAgICBkeW5hbWljX2Nh
c3Q8UmVuZGVyRWxlbWVudCo+KHJlbmRlck9wZXJhdG9yKS0+bGF5b3V0KCk7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICBSZW5kZXJNYXRoTUxCbG9jazo6bGF5b3V0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmgKaW5kZXggMGE0
ZDY0YWZjZGJkNzJhNmFiYmMyNzY3ZmQ2MWIyOGM4ZDE2YzM2NC4uOTM0NDg5NzNiZWYxODgzNTdh
ODNmZGQzMDdiNjBkOWY5YjA1OTEwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uaApAQCAtNDgsMTEgKzQ4LDExIEBAIHB1Ymxp
YzoKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgY3JlYXRlV3JhcHBlcklmTmVlZGVkKCk7CisgICAg
dmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wg
aXNSZW5kZXJNYXRoTUxUb2tlbigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRlck1hdGhNTFRva2VuIChhbm9ueW1vdXMpIiA6
ICJSZW5kZXJNYXRoTUxUb2tlbiI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdHlsZSgpOwogCiAgICAgLy8gVGhpcyBib29sZWFuIGlu
ZGljYXRlcyB3aGV0aGVyIHRoZSB0b2tlbiBlbGVtZW50IGNvbnRhaW5zIHNvbWUgUmVuZGVyRWxl
bWVudCBkZXNjZW5kYW50cywgb3RoZXIgdGhhbiB0aGUgYW5vbnltb3VzIHJlbmRlcmVycyBjcmVh
dGVkIGZvciBsYXlvdXQgcHVycG9zZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242173</attachid>
            <date>2014-11-24 14:14:31 -0800</date>
            <delta_ts>2014-11-26 10:31:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138732-20141124231450.patch</filename>
            <type>text/plain</type>
            <size>32911</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NTIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjI1OTM1NmQ2OGQxZTBi
NTU5ODM4YzNlZjRmZmZmMWRjZGQ1NjI2Yy4uYTIyNTJjM2Y0YmZjNjc2YTRmOGVmMDFjOWQ2YjJi
NzBjZDI2MGU5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDE0LTExLTE0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFJl
bmRlck1hdGhNTE9wZXJhdG9yIHRvIGF2b2lkIHJlbGF5b3V0IGR1cmluZyBsYXlvdXQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODczMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBu
ZWVkZWQgdGhpcyBwYXRjaCBmaXhlcyBsYXlvdXQgYW5kIHJlZmFjdG9ycyBjb2RlLgorCisgICAg
ICAgICogbWF0aG1sL01hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWF0aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKTog
VGhlCisgICAgICAgIHByb3BlcnRpZXMgb2YgdGhlIG1yb290IGFuZCBtc3FydCB3ZXJlIG5vdCB1
cGRhdGVkIHByb3Blcmx5LgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxUZXh0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxUZXh0RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBB
ZGRlZCB0aGUgcGFyc2luZworICAgICAgICBjb2RlIGZvciB0aGUgb3RoZXIgb3BlcmF0b3IgdmFs
dWVzIHRoYXQgYXJlIHVzZWQgZm9yIHJlbmRlcmluZy4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeTo6aXNPcGVyYXRvckZsYWdBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6Z2V0T3BlcmF0b3JGbGFnRnJv
bUF0dHJpYnV0ZU5hbWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpzZXRPcGVyYXRvckZsYWdBbmRTY2hlZHVsZUxheW91dElmTmVlZGVkKToKKyAgICAg
ICAgQWRkZWQgY29kZSB0byBjaGVjayB0aGUgY2FzZSB3aGVuIHRoZSB2YWx1ZSBpcyBudWxsLCBp
biB0aGF0IGNhc2UKKyAgICAgICAgd2UgaW5pdCB0aGUgZmxhZy4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1hdGhNTE9wZXJhdG9yOjppbml0T3BlcmF0b3JGbGFncyk6IFRoaXMgaXMgdGhlCisg
ICAgICAgIHNhbWUgY29kZSBpbml0aWFsaXppbmcgZmxhZ3MgdGhhdCB3YXMgdXNlZCBpbiBzZXRQ
cm9wZXJ0aWVzIGJ1dAorICAgICAgICBub3cgaXQgYWxsb3dzIHRvIGluaXQganVzdCBvbmUgZmxh
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclBy
b3BlcnRpZXNGcm9tT3BEaWN0RW50cnkpOiBSZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yRmxhZ3NGcm9tT3BEaWN0RW50cnkpOgorICAg
ICAgICBBZGRlZCwgdGhpcyBmdW5jdGlvbiByZXBsYWNlcyB0aGUgcHJldmlvdXMgb25lLCB3ZSBo
YXZlIGNyZWF0ZWQKKyAgICAgICAgb3RoZXIgZnVuY3Rpb25zIG1vZGlmeWluZyBvdGhlciBwcm9w
ZXJ0aWVzIHRvIHVzZSB0aGVtIGluIG90aGVyCisgICAgICAgIHBsYWNlLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcyk6IE1vdmVk
IHRoZQorICAgICAgICBmbGFncyBpbml0aWFsaXphdGlvbiB0byBhIG5ldyBmdW5jdGlvbiwgc28g
dGhhdCB3ZSBjYW4gdXNlIGl0IGZvcgorICAgICAgICBzcGVjaWZpYyBmbGFncy4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzdHJldGNoVG8pOiBBdm9pZGVkIHNldFBy
b3BlcnRpZXMKKyAgICAgICAgYW5kIHVwZGF0ZVN0eWxlIHdoZW4gZG9pbmcgdGhlIGxheW91dCwg
aXQgc2hvdWxkIGhhcHBlbiBiZWZvcmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICBSZW1vdmVk
IGNhbGxzIHRvIHNldFByb3BlcnRpZXMgYW5kIHVwZGF0ZVN0eWxlLCB0aGUgcHJvcGVydGllcwor
ICAgICAgICBhcmUgYWxyZWFkeSBzZXQgd2hlbiBidWlsZGluZyB0aGUgY29udGVudCwgd2UgZG8g
bm90IG5lZWQgdG8gc2V0CisgICAgICAgIHRoZW0gYWdhaW4uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6cmVidWlsZFRva2VuQ29udGVudCk6IFRoZSBzdHlsZQorICAg
ICAgICBhbmQgdGhlIHJlcXVlc3QgZm9yIGxheW91dCBub3cgaGFwcGVucyBpbiB0aGUgc2V0UHJv
cGVydGllcworICAgICAgICBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTE9wZXJhdG9yOjpzdHlsZURpZENoYW5nZSk6IFdlIGhhdmUgdG8gc2V0CisgICAg
ICAgIHRoZSBwcm9wZXJ0aWVzIHdoZW4gdGhlIHN0eWxlIGNoYW5nZXMgYmVjYXVzZSB0aGUgY2Fs
Y3VsYXRpb25zCisgICAgICAgIGRlcGVuZCBvbiB0aGUgZm9udCBzaXplLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogVGhpcyBpcyB0aGUgb2xk
CisgICAgICAgIHVwZGF0ZVN0eWxlIG1ldGhvZCBwYXJ0IHRoYXQgcmVhbGx5IHVwZGF0ZXMgdGhl
IHN0eWxlIGluIHRoZSBvbGQKKyAgICAgICAgZnVuY3Rpb24gYW5kIHRoZSByZXF1ZXN0IHRvIHRo
ZSBsYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y2FsY3Vs
YXRlU3RyZXRjaERpc3RhbmNlKTogVGhpcyBpcworICAgICAgICB0aGUgb2xkIHVwZGF0ZVN0eWxl
IGZ1bmN0aW9uLCB3aXRob3V0IHRoZSByZXF1ZXN0IHRvIGxheW91dC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYXJzZUxlYWRpbmdTcGFjZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhcnNlVHJhaWxpbmdTcGFjZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldExlYWRp
bmdTcGFjZSk6IEFkZGVkIHRoZSBjaGVjayBmb3IgcmVsYXlvdXQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0VHJhaWxpbmdTcGFjZSk6IEFkZGVkIHRoZSBjaGVj
ayBmb3IgcmVsYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
cGFyc2VNaW5TaXplKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6cGFyc2VNYXhTaXplKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6Z2V0SW5pdGlhbExlYWRpbmdTcGFjZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEluaXRpYWxUcmFpbGluZ1NwYWNlKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0RGljdGlvbmFy
eUVudHJ5KTogQWRkZWQsIHRoaXMKKyAgICAgICAgaXMgdGhlIG9sZCBpbml0T3BlcmF0b3JGbGFn
cywgd2UgaGF2ZSByZWZhY3RvcmVkIHRoZSBmdW5jdGlvbiB0bworICAgICAgICB1c2UgdGhlIGNv
ZGUgdGhhdCBjYWxjdWxhdGVzIHRoZSBlbnRyeSwgYW5kIHJlbW92ZSBvdGhlcgorICAgICAgICBt
b2RpZmljYXRpb25zIG9mIHRoZSBvcGVyYXRvciBzdGF0ZS4KKyAgICAgICAgKiByZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6c2V0TGVhZGluZ1NwYWNlKTogTW92ZWQgdG8gdGhlIC5jcHAgZmlsZS4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRUcmFpbGluZ1NwYWNl
KTogTW92ZWQgdG8gdGhlIC5jcHAgZmlsZS4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6
dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKTogV2UgaGF2ZSB0bworICAgICAgICB1cGRhdGUgdGhl
IGNoaWxkcmVuIHByb3BlcnRpZXMuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tl
bi5oOiBDaGFuZ2VkIHN0eWxlRGlkQ2hhbmdlIHRvCisgICAgICAgIHByb3RlY3RlZCBzZWN0aW9u
LCB3ZSBuZWVkIHRvIG92ZXJyaWRlIGluIG9wZXJhdG9yIGNsYXNzLgorICAgICAgICAqIHJlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTFJvdzo6bGF5b3V0KTogV2hlbiBjYWxjdWxhdGluZyB0aGUgc3RyZXRjaAorICAgICAg
ICBzaXplIHdlIGhhdmUgdG8gcnVuIGxheW91dCBhZ2FpbiBmb3IgdGhlIG9wZXJhdG9yIGluIGNh
c2Ugd2UgaGF2ZQorICAgICAgICBhIHN0cmV0Y2ggc2l6ZSBkaWZmZXJlbnQgdG8gdGhlIG9uZSB3
ZSB1c2VkIGluIHRoZSBpbml0aWFsIGxheW91dC4KKwogMjAxNC0xMS0yNCAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBTdHlsZSBzdHJ1
Y3QgZnJvbSBTaW1wbGVMaW5lTGF5b3V0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bWF0aG1sL01hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
bWF0aG1sL01hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuY3BwCmluZGV4IGJkYjZiZjZmYzAz
NGJkNDU1ZjU5NmVjZTU0ODA5OGU5OWNiZmEyNzEuLjBiZjJjNmJkNWE4MzFiOTI0NzY5NmQ5YjFl
MDI4Yjg4OGQzZTlkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxJ
bmxpbmVDb250YWluZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0
aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudC5jcHAKQEAgLTYwLDggKzYwLDExIEBAIHZvaWQgTWF0
aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hh
bmdlJiBjaGFuZ2UpCiAgICAgaWYgKHJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYgKGlzPFJlbmRl
ck1hdGhNTFJvdz4oKnJlbmRlcmVyKCkpKQogICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyTWF0
aE1MUm93PigqcmVuZGVyZXIoKSkudXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7Ci0gICAgICAg
IGVsc2UgaWYgKGhhc1RhZ05hbWUobWF0aFRhZykgfHwgaGFzVGFnTmFtZShtc3FydFRhZykpIHsK
KyAgICAgICAgZWxzZSBpZiAoaGFzVGFnTmFtZShtc3FydFRhZykgfHwgaGFzVGFnTmFtZShtcm9v
dFRhZykpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJNYXRoTUxSb290PihyZW5kZXJlcigp
KS0+dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7CisgICAgICAgIGVsc2UgaWYgKGhhc1RhZ05h
bWUobWF0aFRhZykpIHsKICAgICAgICAgICAgIGF1dG8qIGNoaWxkUmVuZGVyZXIgPSByZW5kZXJl
cigpLT5maXJzdENoaWxkKCk7CisKICAgICAgICAgICAgIGlmIChpczxSZW5kZXJNYXRoTUxSb3c+
KGNoaWxkUmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlck1hdGhNTFJv
dz4oKmNoaWxkUmVuZGVyZXIpLnVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcygpOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MVGV4dEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFRleHRFbGVtZW50LmNwcAppbmRleCA1MDMx
MmIzNjU3YWI0ODlmY2IzNzRmNWU4NDE4NjA2Y2U0NGZmMGUxLi5jYTRjMTgzNGI3MTE4ODhhYTg5
NTRjZjVlNmUyZmFlNTYwOWI4YzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwv
TWF0aE1MVGV4dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxU
ZXh0RWxlbWVudC5jcHAKQEAgLTY2LDEyICs2NiwyMiBAQCB2b2lkIE1hdGhNTFRleHRFbGVtZW50
OjpjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoYW5nZSkKIAogdm9pZCBNYXRo
TUxUZXh0RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAobmFtZSA9PSBzdHJldGNoeUF0
dHIpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlck1hdGhNTE9wZXJhdG9yPihyZW5kZXJlcigpKSkK
LSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlck1hdGhNTE9wZXJhdG9yPigqcmVuZGVyZXIoKSku
c2V0T3BlcmF0b3JGbGFnQW5kU2NoZWR1bGVMYXlvdXRJZk5lZWRlZChNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnk6OlN0cmV0Y2h5LCB2YWx1ZSk7CisgICAgaWYgKCFpczxSZW5kZXJNYXRoTUxPcGVy
YXRvcj4ocmVuZGVyZXIoKSkpIHsKKyAgICAgICAgTWF0aE1MRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGUobmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKE1hdGhN
TE9wZXJhdG9yRGljdGlvbmFyeTo6aXNPcGVyYXRvckZsYWdBdHRyaWJ1dGUobmFtZSkpCisgICAg
ICAgIGRvd25jYXN0PFJlbmRlck1hdGhNTE9wZXJhdG9yPigqcmVuZGVyZXIoKSkuc2V0T3BlcmF0
b3JGbGFnQW5kU2NoZWR1bGVMYXlvdXRJZk5lZWRlZChNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6
OmdldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGVOYW1lKG5hbWUpLCB2YWx1ZSk7CisgICAgZWxz
ZSBpZiAobmFtZSA9PSBsc3BhY2VBdHRyKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJNYXRoTUxP
cGVyYXRvcj4oKnJlbmRlcmVyKCkpLnBhcnNlTGVhZGluZ1NwYWNlKHZhbHVlKTsKKyAgICBlbHNl
IGlmIChuYW1lID09IHJzcGFjZUF0dHIpCisgICAgICAgIGRvd25jYXN0PFJlbmRlck1hdGhNTE9w
ZXJhdG9yPigqcmVuZGVyZXIoKSkucGFyc2VUcmFpbGluZ1NwYWNlKHZhbHVlKTsKKyAgICBlbHNl
IGlmIChuYW1lID09IG1heHNpemVBdHRyKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJNYXRoTUxP
cGVyYXRvcj4oKnJlbmRlcmVyKCkpLnBhcnNlTWF4U2l6ZSh2YWx1ZSk7CisgICAgZWxzZSBpZiAo
bmFtZSA9PSBtaW5zaXplQXR0cikKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTWF0aE1MT3BlcmF0
b3I+KCpyZW5kZXJlcigpKS5wYXJzZU1pblNpemUodmFsdWUpOworCiAgICAgTWF0aE1MRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCmluZGV4
IDg1ZTFlZmUwN2JlYmQyZTZhOWMyZGJkZTEyYjE3ZWM4ZDdkZjFiY2QuLmFlM2IzYTJiMmM1NDRm
ZGY3NmZmMmMxYmU0NzQ0ZjllZjVjMDM4MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4IE1pbG93c2tpIChhbGV4QG1pbG93
c2tpLmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJh
bsOnb2lzIFNhdXNzZXQgKHNhdXNzZXRAZ21haWwuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEx
MzMsNiArMTEzMyw0MCBAQCBzdGF0aWMgY29uc3QgVUNoYXIgaG9yaXpvbnRhbE9wZXJhdG9yc1td
ID0gewogICAgIDB4MDAzRCwgMHgwMDVFLCAweDAwNUYsIDB4MDA3RSwgMHgwMEFGLCAweDAyQzYs
IDB4MDJDNywgMHgwMkM5LCAweDAyQ0QsIDB4MDJEQywgMHgwMkY3LCAweDAzMDIsIDB4MDMzMiwg
MHgyMDNFLCAweDIwRDAsIDB4MjBEMSwgMHgyMEQ2LCAweDIwRDcsIDB4MjBFMSwgMHgyMTkwLCAw
eDIxOTIsIDB4MjE5NCwgMHgyMTk4LCAweDIxOTksIDB4MjE5QywgMHgyMTlELCAweDIxOUUsIDB4
MjFBMCwgMHgyMUEyLCAweDIxQTMsIDB4MjFBNCwgMHgyMUE2LCAweDIxQTksIDB4MjFBQSwgMHgy
MUFCLCAweDIxQUMsIDB4MjFBRCwgMHgyMUI0LCAweDIxQjksIDB4MjFCQywgMHgyMUJELCAweDIx
QzAsIDB4MjFDMSwgMHgyMUM0LCAweDIxQzYsIDB4MjFDNywgMHgyMUM5LCAweDIxQ0IsIDB4MjFD
QywgMHgyMUQwLCAweDIxRDIsIDB4MjFENCwgMHgyMURBLCAweDIxREIsIDB4MjFEQywgMHgyMURE
LCAweDIxRTAsIDB4MjFFMiwgMHgyMUU0LCAweDIxRTUsIDB4MjFFNiwgMHgyMUU4LCAweDIxRjAs
IDB4MjFGNiwgMHgyMUZELCAweDIxRkUsIDB4MjFGRiwgMHgyM0I0LCAweDIzQjUsIDB4MjNEQywg
MHgyM0RELCAweDIzREUsIDB4MjNERiwgMHgyM0UwLCAweDIzRTEsIDB4MjUwMCwgMHgyN0Y1LCAw
eDI3RjYsIDB4MjdGNywgMHgyN0Y4LCAweDI3RjksIDB4MjdGQSwgMHgyN0ZCLCAweDI3RkMsIDB4
MjdGRCwgMHgyN0ZFLCAweDI3RkYsIDB4MjkwQywgMHgyOTBELCAweDI5MEUsIDB4MjkwRiwgMHgy
OTEwLCAweDI5NEUsIDB4Mjk1MCwgMHgyOTUyLCAweDI5NTMsIDB4Mjk1NiwgMHgyOTU3LCAweDI5
NUEsIDB4Mjk1QiwgMHgyOTVFLCAweDI5NUYsIDB4MkI0NSwgMHgyQjQ2LCAweEZFMzUsIDB4RkUz
NiwgMHhGRTM3LCAweEZFMzgKIH07CiAKK2Jvb2wgaXNPcGVyYXRvckZsYWdBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKK3sKKyAgICByZXR1cm4gKG5hbWUgPT0gc3RyZXRjaHlB
dHRyKSB8fCAobmFtZSA9PSBmZW5jZUF0dHIpIHx8IChuYW1lID09IHNlcGFyYXRvckF0dHIpIHx8
IChuYW1lID09IHN5bW1ldHJpY0F0dHIpIHx8IChuYW1lID09IGxhcmdlb3BBdHRyKSAgfHwgKG5h
bWUgPT0gbW92YWJsZWxpbWl0c0F0dHIpIHx8IChuYW1lID09IGFjY2VudEF0dHIpOworfQorCitG
bGFnIGdldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpCit7CisgICAgQVNTRVJUKGlzT3BlcmF0b3JGbGFnQXR0cmlidXRlKG5hbWUpKTsKKwor
ICAgIGlmIChuYW1lID09IHN0cmV0Y2h5QXR0cikKKyAgICAgICAgcmV0dXJuIFN0cmV0Y2h5Owor
CisgICAgaWYgKG5hbWUgPT0gZmVuY2VBdHRyKQorICAgICAgICByZXR1cm4gRmVuY2U7CisKKyAg
ICBpZiAobmFtZSA9PSBzZXBhcmF0b3JBdHRyKQorICAgICAgICByZXR1cm4gU2VwYXJhdG9yOwor
CisgICAgaWYgKG5hbWUgPT0gc3ltbWV0cmljQXR0cikKKyAgICAgICAgcmV0dXJuIFN5bW1ldHJp
YzsKKworICAgIGlmIChuYW1lID09IGxhcmdlb3BBdHRyKQorICAgICAgICByZXR1cm4gTGFyZ2VP
cDsKKworICAgIGlmIChuYW1lID09IG1vdmFibGVsaW1pdHNBdHRyKQorICAgICAgICByZXR1cm4g
TW92YWJsZUxpbWl0czsKKworICAgIGlmIChuYW1lID09IGFjY2VudEF0dHIpCisgICAgICAgIHJl
dHVybiBBY2NlbnQ7CisKKyAgICAvLyBOb3QgcmVhY2hhYmxlLgorICAgIHJldHVybiBOb25lOwor
fQorCiB9CiAKIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpSZW5kZXJNYXRoTUxPcGVyYXRvcihNYXRo
TUxFbGVtZW50JiBlbGVtZW50LCBQYXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSkKQEAgLTExNjEs
MTAgKzExOTUsNjcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JGbGFn
QW5kU2NoZWR1bGVMYXlvdXRJZk5lZWRlZChNYXRoTUxPcGVyYXQKIHsKICAgICB1bnNpZ25lZCBz
aG9ydCBvbGRPcGVyYXRvckZsYWdzID0gbV9vcGVyYXRvckZsYWdzOwogCi0gICAgc2V0T3BlcmF0
b3JGbGFnRnJvbUF0dHJpYnV0ZVZhbHVlKGZsYWcsIGF0dHJpYnV0ZVZhbHVlKTsKKyAgICBpZiAo
IWF0dHJpYnV0ZVZhbHVlKQorICAgICAgICBzZXRPcGVyYXRvckZsYWdzRnJvbU9wRGljdEVudHJ5
KGdldERpY3Rpb25hcnlFbnRyeSgpLCBmbGFnKTsKKyAgICBlbHNlCisgICAgICAgIHNldE9wZXJh
dG9yRmxhZ0Zyb21BdHRyaWJ1dGVWYWx1ZShmbGFnLCBhdHRyaWJ1dGVWYWx1ZSk7CiAKLSAgICBp
ZiAob2xkT3BlcmF0b3JGbGFncyAhPSBtX29wZXJhdG9yRmxhZ3MpCi0gICAgICAgIHNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworICAgIGlmIChvbGRPcGVyYXRvckZsYWdzICE9
IG1fb3BlcmF0b3JGbGFncykgeworICAgICAgICByZXNldFN0cmV0Y2hTaXplKCk7CisgICAgICAg
IGNvbnN0IGF1dG8mIHdyYXBwZXIgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihmaXJzdENoaWxk
KCkpOworICAgICAgICB3cmFwcGVyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMo
KTsKKyAgICB9Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEluaXRp
YWxMZWFkaW5nU3BhY2UoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSogZW50
cnkpCit7CisgICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgaXMgc3BlY2lmaWVkIGFz
IG11bHRpcGxlIG9mIDEvMThlbS4KKyAgICBpZiAoZW50cnkpCisgICAgICAgIHJldHVybiBlbnRy
eS0+bHNwYWNlICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7CisKKyAgICByZXR1cm4gNSAq
IHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OworfQorCitMYXlvdXRVbml0IFJlbmRlck1hdGhN
TE9wZXJhdG9yOjpnZXRJbml0aWFsVHJhaWxpbmdTcGFjZShjb25zdCBNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnk6OkVudHJ5KiBlbnRyeSkKK3sKKyAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyBz
cGFjZSBpcyBzcGVjaWZpZWQgYXMgbXVsdGlwbGUgb2YgMS8xOGVtLgorICAgIGlmIChlbnRyeSkK
KyAgICAgICAgcmV0dXJuIGVudHJ5LT5yc3BhY2UgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAx
ODsKKworICAgIHJldHVybiA1ICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7Cit9CisKK2Nv
bnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqIFJlbmRlck1hdGhNTE9wZXJhdG9y
OjpnZXREaWN0aW9uYXJ5RW50cnkoKQoreworICAgIGlmIChtX3RleHRDb250ZW50KSB7CisgICAg
ICAgIGJvb2wgZXhwbGljaXRGb3JtID0gdHJ1ZTsKKworICAgICAgICBpZiAoIWlzQW5vbnltb3Vz
KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybSA9IGVsZW1lbnQoKS5m
YXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpmb3JtQXR0cik7CisgICAgICAgICAgICBpZiAo
ISgoZm9ybSA9PSAicHJlZml4IikgfHwgKGZvcm0gPT0gImluZml4IikgfHwgKGZvcm0gPT0gInBv
c3RmaXgiKSkpCisgICAgICAgICAgICAgICAgZXhwbGljaXRGb3JtID0gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBjb25zdCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5KiBlbnRy
eSA9IHRyeUJpbmFyeVNlYXJjaDxjb25zdCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5
LCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OktleT4oTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5
OjpkaWN0aW9uYXJ5LCBNQVRITUxfT1BESUNUX1NJWkUsIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFy
eTo6S2V5KG1fdGV4dENvbnRlbnQsIG1fb3BlcmF0b3JGb3JtKSwgTWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5OjpFeHRyYWN0S2V5KTsKKyAgICAgICAgaWYgKGVudHJ5KQorICAgICAgICAgICAgcmV0
dXJuIGVudHJ5OworCisgICAgICAgIGlmICghZXhwbGljaXRGb3JtKSB7CisgICAgICAgICAgICAv
LyBJZiB3ZSBkaWQgbm90IGZpbmQgdGhlIGRlc2lyZWQgb3BlcmF0b3IgZm9ybSBhbmQgaWYgaXQg
d2FzIG5vdCBzZXQgZXhwbGljaXRlbHksIHdlIHVzZSB0aGUgZmlyc3Qgb25lIGluIHRoZSBmb2xs
b3dpbmcgb3JkZXI6IEluZml4LCBQcmVmaXgsIFBvc3RmaXguCisgICAgICAgICAgICAvLyBUaGlz
IGlzIHRvIGhhbmRsZSBiYWQgTWF0aE1MIG1hcmt1cCB3aXRob3V0IGV4cGxpY2l0IDxtcm93PiBk
ZWxpbWl0ZXJzIGxpa2UgIjxtbz4oPC9tbz48bWk+YTwvbWk+PG1vPik8L21vPjxtbz4oPC9tbz48
bWk+YjwvbWk+PG1vPik8L21vPiIgd2hlcmUgdGhlIGlubmVyIHBhcmVudGhlc2lzIHNob3VsZCBu
b3QgYmUgY29uc2lkZXJlZCBpbmZpeC4KKyAgICAgICAgICAgIGVudHJ5ID0gdHJ5QmluYXJ5U2Vh
cmNoPGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnksIFVDaGFyPihNYXRoTUxP
cGVyYXRvckRpY3Rpb25hcnk6OmRpY3Rpb25hcnksIE1BVEhNTF9PUERJQ1RfU0laRSwgbV90ZXh0
Q29udGVudCwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFeHRyYWN0Q2hhcik7CisgICAgICAg
ICAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgZW50
cnkgaXMgYW5vdGhlciBmb3JtIGZvciB0aGF0IG9wZXJhdG9yLCB3ZSBtb3ZlIHRvIHRoYXQgZW50
cnkuIE5vdGUgdGhhdCBpdCBvbmx5IHJlbWFpbnMgYXQgbW9zdCB0d28gZm9ybXMgc28gd2UgZG9u
J3QgbmVlZCB0byBtb3ZlIGFueSBmdXJ0aGVyLgorICAgICAgICAgICAgICAgIGlmIChlbnRyeSAh
PSBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OmRpY3Rpb25hcnkgJiYgKGVudHJ5LTEpLT5jaGFy
YWN0ZXIgPT0gbV90ZXh0Q29udGVudCkKKyAgICAgICAgICAgICAgICAgICAgZW50cnktLTsKKwor
ICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworI3VuZGVmIE1BVEhNTF9PUERJQ1RfU0laRQog
fQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmli
dXRlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZyBmbGFnLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKQpAQCAtMTE4MywxNyArMTI3NCwyMSBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlVmFsdWUoTWF0aE1MT3BlcmF0b3JEaWN0
aQogICAgIC8vIFdlIGlnbm9yZSBhYnNlbnQgb3IgaW52YWxpZCBhdHRyaWJ1dGVzLgogfQogCi12
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByb3BlcnRpZXNGcm9tT3BEaWN0
RW50cnkoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSogZW50cnkpCit2b2lk
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvckZsYWdzRnJvbU9wRGljdEVudHJ5KGNv
bnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqIGVudHJ5LCBNYXRoTUxPcGVyYXRv
ckRpY3Rpb25hcnk6OkZsYWcgZmxhZykKIHsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoZmxhZyAhPSBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6Ok5vbmUpIHsK
KyAgICAgICAgbV9vcGVyYXRvckZsYWdzIHw9IGVudHJ5LT5mbGFncyAmIGZsYWc7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICAvLyBJZiB0aGlzIG9wZXJhdG9yIGlzIGFub255bW91cywg
d2UgcHJlc2VydmUgdGhlIEZlbmNlIGFuZCBTZXBhcmF0b3IgcHJvcGVydGllcy4gVGhpcyBpcyB0
byBoYW5kbGUgdGhlIGNhc2Ugb2YgUmVuZGVyTWF0aE1MRmVuY2VkLgogICAgIGlmIChpc0Fub255
bW91cygpKQogICAgICAgICBtX29wZXJhdG9yRmxhZ3MgPSAobV9vcGVyYXRvckZsYWdzICYgKE1h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmVuY2UgfCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6
OlNlcGFyYXRvcikpIHwgZW50cnktPmZsYWdzOwogICAgIGVsc2UKICAgICAgICAgbV9vcGVyYXRv
ckZsYWdzID0gZW50cnktPmZsYWdzOwotCi0gICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgc3Bh
Y2UgaXMgc3BlY2lmaWVkIGFzIG11bHRpcGxlIG9mIDEvMThlbS4KLSAgICBtX2xlYWRpbmdTcGFj
ZSA9IGVudHJ5LT5sc3BhY2UgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKLSAgICBtX3Ry
YWlsaW5nU3BhY2UgPSBlbnRyeS0+cnNwYWNlICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7
CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcygp
CkBAIC0xMjAyLDcgKzEyOTcsNiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVy
YXRvclByb3BlcnRpZXMoKQogICAgIG1faXNWZXJ0aWNhbCA9ICEodHJ5QmluYXJ5U2VhcmNoPGNv
bnN0IFVDaGFyLCBVQ2hhcj4oTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5Ojpob3Jpem9udGFsT3Bl
cmF0b3JzLCBXVEZfQVJSQVlfTEVOR1RIKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6aG9yaXpv
bnRhbE9wZXJhdG9ycyksIG1fdGV4dENvbnRlbnQsIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6
RXh0cmFjdEtleUhvcml6b250YWwpKTsKIAogICAgIC8vIFdlIGRldGVybWluZSB0aGUgZm9ybSBv
ZiB0aGUgb3BlcmF0b3IuCi0gICAgYm9vbCBleHBsaWNpdEZvcm0gPSB0cnVlOwogICAgIGlmICgh
aXNBbm9ueW1vdXMoKSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm0gPSBlbGVt
ZW50KCkuZmFzdEdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6Zm9ybUF0dHIpOwogICAgICAgICBp
ZiAoZm9ybSA9PSAicHJlZml4IikKQEAgLTEyMTMsNyArMTMwNyw2IEBAIHZvaWQgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcygpCiAgICAgICAgICAgICBtX29wZXJh
dG9yRm9ybSA9IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6UG9zdGZpeDsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBtb3JlIGFkdmFuY2VkIGhl
dXJpc3RpY3MgaW5kaWNhdGVkIGluIHRoZSBzcGVjaWZpY2F0aW9uIHRvIGRldGVybWluZSB0aGUg
b3BlcmF0b3IgZm9ybSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
NDgyOSkuCi0gICAgICAgICAgICBleHBsaWNpdEZvcm0gPSBmYWxzZTsKICAgICAgICAgICAgIGlm
ICghZWxlbWVudCgpLnByZXZpb3VzU2libGluZygpICYmIGVsZW1lbnQoKS5uZXh0U2libGluZygp
KQogICAgICAgICAgICAgICAgIG1fb3BlcmF0b3JGb3JtID0gTWF0aE1MT3BlcmF0b3JEaWN0aW9u
YXJ5OjpQcmVmaXg7CiAgICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50KCkucHJldmlvdXNTaWJs
aW5nKCkgJiYgIWVsZW1lbnQoKS5uZXh0U2libGluZygpKQpAQCAtMTIzNSwyMyArMTMyOCwxNCBA
QCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByb3BlcnRpZXMoKQogICAg
IG1fbWluU2l6ZSA9IHN0eWxlKCkuZm9udCgpLnNpemUoKTsgLy8gVGhpcyBzZXRzIG1pbnNpemUg
dG8gIjFlbSIuCiAgICAgbV9tYXhTaXplID0gaW50TWF4Rm9yTGF5b3V0VW5pdDsgLy8gVGhpcyBz
ZXRzIG1heHNpemUgdG8gImluZmluaXR5Ii4KIAotICAgIGlmIChtX3RleHRDb250ZW50KSB7Ci0g
ICAgICAgIC8vIFRoZW4gd2UgdHJ5IHRvIGZpbmQgdGhlIGRlZmF1bHQgdmFsdWVzIGZyb20gdGhl
IG9wZXJhdG9yIGRpY3Rpb25hcnkuCi0gICAgICAgIGlmIChjb25zdCBNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnk6OkVudHJ5KiBlbnRyeSA9IHRyeUJpbmFyeVNlYXJjaDxjb25zdCBNYXRoTUxPcGVy
YXRvckRpY3Rpb25hcnk6OkVudHJ5LCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OktleT4oTWF0
aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpkaWN0aW9uYXJ5LCBNQVRITUxfT1BESUNUX1NJWkUsIE1h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6S2V5KG1fdGV4dENvbnRlbnQsIG1fb3BlcmF0b3JGb3Jt
KSwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFeHRyYWN0S2V5KSkKLSAgICAgICAgICAgIHNl
dE9wZXJhdG9yUHJvcGVydGllc0Zyb21PcERpY3RFbnRyeShlbnRyeSk7Ci0gICAgICAgIGVsc2Ug
aWYgKCFleHBsaWNpdEZvcm0pIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGRpZCBub3QgZmluZCB0
aGUgZGVzaXJlZCBvcGVyYXRvciBmb3JtIGFuZCBpZiBpdCB3YXMgbm90IHNldCBleHBsaWNpdGVs
eSwgd2UgdXNlIHRoZSBmaXJzdCBvbmUgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogSW5maXgsIFBy
ZWZpeCwgUG9zdGZpeC4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gaGFuZGxlIGJhZCBNYXRo
TUwgbWFya3VwIHdpdGhvdXQgZXhwbGljaXQgPG1yb3c+IGRlbGltaXRlcnMgbGlrZSAiPG1vPig8
L21vPjxtaT5hPC9taT48bW8+KTwvbW8+PG1vPig8L21vPjxtaT5iPC9taT48bW8+KTwvbW8+IiB3
aGVyZSB0aGUgaW5uZXIgcGFyZW50aGVzaXMgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGluZml4
LgotICAgICAgICAgICAgaWYgKGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkq
IGVudHJ5ID0gdHJ5QmluYXJ5U2VhcmNoPGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6
RW50cnksIFVDaGFyPihNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OmRpY3Rpb25hcnksIE1BVEhN
TF9PUERJQ1RfU0laRSwgbV90ZXh0Q29udGVudCwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpF
eHRyYWN0Q2hhcikpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgZW50cnkg
aXMgYW5vdGhlciBmb3JtIGZvciB0aGF0IG9wZXJhdG9yLCB3ZSBtb3ZlIHRvIHRoYXQgZW50cnku
IE5vdGUgdGhhdCBpdCBvbmx5IHJlbWFpbnMgYXQgbW9zdCB0d28gZm9ybXMgc28gd2UgZG9uJ3Qg
bmVlZCB0byBtb3ZlIGFueSBmdXJ0aGVyLgotICAgICAgICAgICAgICAgIGlmIChlbnRyeSAhPSBN
YXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OmRpY3Rpb25hcnkgJiYgKGVudHJ5LTEpLT5jaGFyYWN0
ZXIgPT0gbV90ZXh0Q29udGVudCkKLSAgICAgICAgICAgICAgICAgICAgZW50cnktLTsKLSAgICAg
ICAgICAgICAgICBtX29wZXJhdG9yRm9ybSA9IHN0YXRpY19jYXN0PE1hdGhNTE9wZXJhdG9yRGlj
dGlvbmFyeTo6Rm9ybT4oZW50cnktPmZvcm0pOyAvLyBXZSBvdmVycmlkZSB0aGUgZm9ybSBwcmV2
aW91c2x5IGRldGVybWluZWQuCi0gICAgICAgICAgICAgICAgc2V0T3BlcmF0b3JQcm9wZXJ0aWVz
RnJvbU9wRGljdEVudHJ5KGVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGNv
bnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqIGVudHJ5ID0gZ2V0RGljdGlvbmFy
eUVudHJ5KCk7CisgICAgaWYgKGVudHJ5KSB7CisgICAgICAgIHNldE9wZXJhdG9yRmxhZ3NGcm9t
T3BEaWN0RW50cnkoZW50cnksIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6Tm9uZSk7CisgICAg
ICAgIGlmIChtX29wZXJhdG9yRm9ybSAhPSBlbnRyeS0+Zm9ybSkKKyAgICAgICAgICAgIG1fb3Bl
cmF0b3JGb3JtID0gc3RhdGljX2Nhc3Q8TWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGb3JtPihl
bnRyeS0+Zm9ybSk7CisgICAgICAgIG1fbGVhZGluZ1NwYWNlID0gZ2V0SW5pdGlhbExlYWRpbmdT
cGFjZShlbnRyeSk7CisgICAgICAgIG1fdHJhaWxpbmdTcGFjZSA9IGdldEluaXRpYWxUcmFpbGlu
Z1NwYWNlKGVudHJ5KTsKICAgICB9Ci0jdW5kZWYgTUFUSE1MX09QRElDVF9TSVpFCiAKICAgICBp
ZiAoIWlzQW5vbnltb3VzKCkpIHsKICAgICAgICAgLy8gRmluYWxseSwgd2UgbWFrZSB0aGUgYXR0
cmlidXRlIHZhbHVlcyBvdmVycmlkZSB0aGUgZGVmYXVsdC4KQEAgLTEyNjcsMTEgKzEzNTEsMTEg
QEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCkKICAg
ICAgICAgcGFyc2VNYXRoTUxMZW5ndGgoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1M
TmFtZXM6OmxzcGFjZUF0dHIpLCBtX2xlYWRpbmdTcGFjZSwgJnN0eWxlKCksIGZhbHNlKTsgLy8g
RklYTUU6IE5lZ2F0aXZlIGxlYWRpbmcgc3BhY2UgbXVzdCBiZSBpbXBsZW1lbnRlZCAoaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgzMCkuCiAgICAgICAgIHBhcnNl
TWF0aE1MTGVuZ3RoKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpyc3Bh
Y2VBdHRyKSwgbV90cmFpbGluZ1NwYWNlLCAmc3R5bGUoKSwgZmFsc2UpOyAvLyBGSVhNRTogTmVn
YXRpdmUgdHJhaWxpbmcgc3BhY2UgbXVzdCBiZSBpbXBsZW1lbnRlZCAoaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgzMCkuCiAKLSAgICAgICAgcGFyc2VNYXRoTUxM
ZW5ndGgoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6Om1pbnNpemVBdHRy
KSwgbV9taW5TaXplLCAmc3R5bGUoKSwgZmFsc2UpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIG1heHNpemUgPSBlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6bWF4
c2l6ZUF0dHIpOwotICAgICAgICBpZiAobWF4c2l6ZSAhPSAiaW5maW5pdHkiKQotICAgICAgICAg
ICAgcGFyc2VNYXRoTUxMZW5ndGgobWF4c2l6ZSwgbV9tYXhTaXplLCAmc3R5bGUoKSwgZmFsc2Up
OworICAgICAgICBwYXJzZU1pblNpemUoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1M
TmFtZXM6Om1pbnNpemVBdHRyKSk7CisgICAgICAgIHBhcnNlTWF4U2l6ZShlbGVtZW50KCkuZmFz
dEdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6bWF4c2l6ZUF0dHIpKTsKICAgICB9CisKKyAgICB1
cGRhdGVTdHlsZSgpOwogfQogCiBib29sIFJlbmRlck1hdGhNTE9wZXJhdG9yOjppc0NoaWxkQWxs
b3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0CkBAIC0x
Mjg3LDcgKzEzNzEsNiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzdHJldGNoVG8oTGF5
b3V0VW5pdCBoZWlnaHRBYm92ZUJhc2VsaW5lLCBMYXlvdXRVbml0CiAgICAgbV9zdHJldGNoSGVp
Z2h0QWJvdmVCYXNlbGluZSA9IGhlaWdodEFib3ZlQmFzZWxpbmU7CiAgICAgbV9zdHJldGNoRGVw
dGhCZWxvd0Jhc2VsaW5lID0gZGVwdGhCZWxvd0Jhc2VsaW5lOwogCi0gICAgc2V0T3BlcmF0b3JQ
cm9wZXJ0aWVzKCk7CiAgICAgaWYgKGhhc09wZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rp
b25hcnk6OlN5bW1ldHJpYykpIHsKICAgICAgICAgLy8gV2UgbWFrZSB0aGUgb3BlcmF0b3Igc3Ry
ZXRjaCBzeW1tZXRyaWNhbGx5IGFib3ZlIGFuZCBiZWxvdyB0aGUgYXhpcy4KICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCByZWFkIHRoZSBheGlzIGZyb20gdGhlIE1BVEggdGFibGUgKGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIyOTcpLiBGb3Igbm93LCB3ZSB1
c2UgdGhlIHNhbWUgdmFsdWUgYXMgaW4gUmVuZGVyTWF0aE1MRnJhY3Rpb246OmZpcnN0TGluZUJh
c2VsaW5lKCkuCkBAIC0xMzA4LDcgKzEzOTEsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9y
OjpzdHJldGNoVG8oTGF5b3V0VW5pdCBoZWlnaHRBYm92ZUJhc2VsaW5lLCBMYXlvdXRVbml0CiAg
ICAgfQogICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgKj0gYXNwZWN0OwogICAgIG1f
c3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSAqPSBhc3BlY3Q7Ci0gICAgdXBkYXRlU3R5bGUoKTsK
KyAgICBjYWxjdWxhdGVTdHJldGNoRGlzdGFuY2UoKTsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6c3RyZXRjaFRvKExheW91dFVuaXQgd2lkdGgpCkBAIC0xMzE3LDEwICsxNDAwLDcg
QEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c3RyZXRjaFRvKExheW91dFVuaXQgd2lkdGgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc3RyZXRjaFdpZHRoID0gd2lkdGg7Ci0KLSAgICBz
ZXRPcGVyYXRvclByb3BlcnRpZXMoKTsKLQotICAgIHVwZGF0ZVN0eWxlKCk7CisgICAgY2FsY3Vs
YXRlU3RyZXRjaERpc3RhbmNlKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnJl
c2V0U3RyZXRjaFNpemUoKQpAQCAtMTM1MSw3ICsxNDMxLDYgQEAgdm9pZCBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogewogICAgIEFTU0VSVChw
cmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBzZXRPcGVyYXRvclByb3BlcnRp
ZXMoKTsKICAgICBpZiAoIXNob3VsZEFsbG93U3RyZXRjaGluZygpKSB7CiAgICAgICAgIFJlbmRl
ck1hdGhNTFRva2VuOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICBp
ZiAoaXNJbnZpc2libGVPcGVyYXRvcigpKSB7CkBAIC0xNDA0LDggKzE0ODMsNyBAQCB2b2lkIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpyZWJ1aWxkVG9rZW5Db250ZW50KGNvbnN0IFN0cmluZyYgb3Bl
cmF0b3JTdHJpbmcpCiAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIDxtbz4gb3Bl
cmF0b3JzIHdpdGggbXVsdGlwbGUgY2hhcmFjdGVycyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNDgyOCkuCiAgICAgbV90ZXh0Q29udGVudCA9IHRleHRDb250ZW50
Lmxlbmd0aCgpID09IDEgPyB0ZXh0Q29udGVudFswXSA6IDA7CiAgICAgc2V0T3BlcmF0b3JQcm9w
ZXJ0aWVzKCk7Ci0gICAgdXBkYXRlU3R5bGUoKTsKLSAgICBzZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKKyAgICByZXNldFN0cmV0Y2hTaXplKCk7CiB9CiAKIHZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVRva2VuQ29udGVudChjb25zdCBTdHJpbmcmIG9wZXJhdG9y
U3RyaW5nKQpAQCAtMTQyOSw5ICsxNTA3LDEyIEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OnVwZGF0ZUZyb21FbGVtZW50KCkKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZU9w
ZXJhdG9yUHJvcGVydGllcygpCiB7CiAgICAgc2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCk7Ci0gICAg
aWYgKCFpc0VtcHR5KCkpCi0gICAgICAgIHVwZGF0ZVN0eWxlKCk7Ci0gICAgc2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpCit7CisgICAgUmVuZGVyTWF0aE1MVG9rZW46OnN0eWxlRGlkQ2hhbmdlKGRpZmYs
IG9sZFN0eWxlKTsKKyAgICBzZXRPcGVyYXRvclByb3BlcnRpZXMoKTsKIH0KIAogYm9vbCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6c2hvdWxkQWxsb3dTdHJldGNoaW5nKCkgY29uc3QKQEAgLTE2NTks
NiArMTc0MCwxNyBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlck1h
dGhNTE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKFVDaGFyCiAKIHZvaWQgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKIHsKKyAgICAvLyBXZSBhZGQgc3BhY2luZyBhcm91bmQg
dGhlIG9wZXJhdG9yLgorICAgIC8vIEZJWE1FOiBUaGUgc3BhY2luZyBzaG91bGQgYmUgYWRkZWQg
dG8gdGhlIHdob2xlIGVtYmVsbGlzaGVkIG9wZXJhdG9yIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMxKS4KKyAgICAvLyBGSVhNRTogVGhlIHNwYWNpbmcgc2hv
dWxkIG9ubHkgYmUgYWRkZWQgaW5zaWRlIChwZXJoYXBzIGluZmVycmVkKSBtcm93IChodHRwOi8v
d3d3LnczLm9yZy9UUi9NYXRoTUwvY2hhcHRlcjMuaHRtbCNwcmVzbS5vcHNwYWNpbmcpLgorICAg
IGNvbnN0IGF1dG8mIHdyYXBwZXIgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihmaXJzdENoaWxk
KCkpOworICAgIHdyYXBwZXItPnN0eWxlKCkuc2V0TWFyZ2luU3RhcnQoTGVuZ3RoKG1fbGVhZGlu
Z1NwYWNlLCBGaXhlZCkpOworICAgIHdyYXBwZXItPnN0eWxlKCkuc2V0TWFyZ2luRW5kKExlbmd0
aChtX3RyYWlsaW5nU3BhY2UsIEZpeGVkKSk7CisgICAgd3JhcHBlci0+c2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNh
bGN1bGF0ZVN0cmV0Y2hEaXN0YW5jZSgpCit7CiAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIg
Zm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAKICAgICBBU1NFUlQoZmlyc3RDaGlsZCgpKTsKQEAg
LTE2NjYsMTUgKzE3NTgsNiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHls
ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc3RyZXRjaHlEYXRhLnNldE5vcm1hbE1vZGUo
KTsKLSAgICAvLyBXZSBhZGQgc3BhY2luZyBhcm91bmQgdGhlIG9wZXJhdG9yLgotICAgIC8vIEZJ
WE1FOiBUaGUgc3BhY2luZyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHdob2xlIGVtYmVsbGlzaGVk
IG9wZXJhdG9yIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMx
KS4KLSAgICAvLyBGSVhNRTogVGhlIHNwYWNpbmcgc2hvdWxkIG9ubHkgYmUgYWRkZWQgaW5zaWRl
IChwZXJoYXBzIGluZmVycmVkKSBtcm93IChodHRwOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwvY2hh
cHRlcjMuaHRtbCNwcmVzbS5vcHNwYWNpbmcpLgotICAgIGNvbnN0IGF1dG8mIHdyYXBwZXIgPSBk
b3duY2FzdDxSZW5kZXJFbGVtZW50PihmaXJzdENoaWxkKCkpOwotICAgIGF1dG8gbmV3U3R5bGUg
PSBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwg
RkxFWCk7Ci0gICAgbmV3U3R5bGUuZ2V0KCkuc2V0TWFyZ2luU3RhcnQoTGVuZ3RoKG1fbGVhZGlu
Z1NwYWNlLCBGaXhlZCkpOwotICAgIG5ld1N0eWxlLmdldCgpLnNldE1hcmdpbkVuZChMZW5ndGgo
bV90cmFpbGluZ1NwYWNlLCBGaXhlZCkpOwotICAgIHdyYXBwZXItPnNldFN0eWxlKFdURjo6bW92
ZShuZXdTdHlsZSkpOwotICAgIHdyYXBwZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1Jl
Y2FsYygpOwogCiAgICAgaWYgKCFzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjAwNyw2ICsyMDkwLDYzIEBAIExheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OnRyYWlsaW5nU3BhY2VFcnJvcigpCiAgICAgcmV0dXJuIHdpZHRoIC0gYXNzZW1ibHlXaWR0
aDsKIH0KIAordm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFyc2VMZWFkaW5nU3BhY2UoY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKK3sKKworICAgIExheW91dFVuaXQgbGVhZGluZ1NwYWNl
OworCisgICAgLy8gRklYTUU6IE5lZ2F0aXZlIGxlYWRpbmcgc3BhY2UgbXVzdCBiZSBpbXBsZW1l
bnRlZCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgzMCkuCisg
ICAgaWYgKCFwYXJzZU1hdGhNTExlbmd0aCh2YWx1ZSwgbGVhZGluZ1NwYWNlLCAmc3R5bGUoKSwg
ZmFsc2UpKQorICAgICAgICBsZWFkaW5nU3BhY2UgPSAgZ2V0SW5pdGlhbExlYWRpbmdTcGFjZShn
ZXREaWN0aW9uYXJ5RW50cnkoKSk7CisKKyAgICBzZXRMZWFkaW5nU3BhY2UobGVhZGluZ1NwYWNl
KTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFyc2VUcmFpbGluZ1NwYWNlKGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCit7CisgICAgTGF5b3V0VW5pdCB0cmFpbGluZ1NwYWNl
OworCisgICAgLy8gRklYTUU6IE5lZ2F0aXZlIHRyYWlsaW5nIHNwYWNlIG11c3QgYmUgaW1wbGVt
ZW50ZWQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MzApLgor
ICAgIGlmICghcGFyc2VNYXRoTUxMZW5ndGgodmFsdWUsIHRyYWlsaW5nU3BhY2UsICZzdHlsZSgp
LCBmYWxzZSkpCisgICAgICAgIHRyYWlsaW5nU3BhY2UgPSBnZXRJbml0aWFsVHJhaWxpbmdTcGFj
ZShnZXREaWN0aW9uYXJ5RW50cnkoKSk7CisKKyAgICBzZXRUcmFpbGluZ1NwYWNlKHRyYWlsaW5n
U3BhY2UpOworfQorCit2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRMZWFkaW5nU3BhY2Uo
TGF5b3V0VW5pdCBsZWFkaW5nU3BhY2UpCit7CisgICAgbV9sZWFkaW5nU3BhY2UgPSBsZWFkaW5n
U3BhY2U7CisgICAgY29uc3QgYXV0byYgd3JhcHBlciA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+
KGZpcnN0Q2hpbGQoKSk7CisgICAgd3JhcHBlci0+c3R5bGUoKS5zZXRNYXJnaW5TdGFydChMZW5n
dGgobV9sZWFkaW5nU3BhY2UsIEZpeGVkKSk7CisgICAgd3JhcHBlci0+c2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNl
dFRyYWlsaW5nU3BhY2UoTGF5b3V0VW5pdCB0cmFpbGluZ1NwYWNlKQoreworICAgIG1fdHJhaWxp
bmdTcGFjZSA9IHRyYWlsaW5nU3BhY2U7CisgICAgY29uc3QgYXV0byYgd3JhcHBlciA9IGRvd25j
YXN0PFJlbmRlckVsZW1lbnQ+KGZpcnN0Q2hpbGQoKSk7CisgICAgd3JhcHBlci0+c3R5bGUoKS5z
ZXRNYXJnaW5FbmQoTGVuZ3RoKG1fdHJhaWxpbmdTcGFjZSwgRml4ZWQpKTsKKyAgICB3cmFwcGVy
LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKK30KKwordm9pZCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6cGFyc2VNaW5TaXplKGNvbnN0IEF0b21pY1N0cmluZyYgbWluU2l6ZSkK
K3sKKyAgICBpZiAoIXBhcnNlTWF0aE1MTGVuZ3RoKG1pblNpemUsIG1fbWluU2l6ZSwgJnN0eWxl
KCksIGZhbHNlKSkKKyAgICAgICAgbV9taW5TaXplID0gc3R5bGUoKS5mb250KCkuc2l6ZSgpOyAv
LyBUaGlzIHNldHMgbWluc2l6ZSB0byAiMWVtIi4KKworICAgIGNvbnN0IGF1dG8mIHdyYXBwZXIg
PSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihmaXJzdENoaWxkKCkpOworICAgIHdyYXBwZXItPnNl
dE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworfQorCit2b2lkIFJlbmRlck1hdGhN
TE9wZXJhdG9yOjpwYXJzZU1heFNpemUoY29uc3QgQXRvbWljU3RyaW5nJiBtYXhTaXplKQorewor
ICAgIGlmICgobWF4U2l6ZSA9PSAiaW5maW5pdHkiKSB8fCAoIXBhcnNlTWF0aE1MTGVuZ3RoKG1h
eFNpemUsIG1fbWF4U2l6ZSwgJnN0eWxlKCksIGZhbHNlKSkpCisgICAgICAgIG1fbWF4U2l6ZSA9
IGludE1heEZvckxheW91dFVuaXQ7IC8vIFRoaXMgc2V0cyBtYXhzaXplIHRvICJpbmZpbml0eSIu
CisKKyAgICBjb25zdCBhdXRvJiB3cmFwcGVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oZmly
c3RDaGlsZCgpKTsKKyAgICB3cmFwcGVyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNh
bGMoKTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAppbmRleCBlODcxY2UwZTJiZDFiZDNl
YmIzZWIzODliZWEwMTU5OWJiMGZhOWQxLi4xYTkxODFjNzUyZGQxZjkwNzdkY2E3YThjYjk2ZDZj
OWI0ZTU5YTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMCBBbGV4IE1pbG93c2tpIChhbGV4QG1pbG93c2tpLmNvbSkuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDEsNyBAQCBuYW1lc3BhY2UgTWF0aE1MT3Bl
cmF0b3JEaWN0aW9uYXJ5IHsKIAogZW51bSBGb3JtIHsgSW5maXgsIFByZWZpeCwgUG9zdGZpeCB9
OwogZW51bSBGbGFnIHsKKyAgICBOb25lID0gMHgwLAogICAgIEFjY2VudCA9IDB4MSwgLy8gRklY
TUU6IFRoaXMgbXVzdCBiZSB1c2VkIHRvIGltcGxlbWVudCBhY2NlbnR1bmRlci9hY2NlbnQgb24g
bXVuZGVyb3ZlciAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgy
NikuCiAgICAgRmVuY2UgPSAweDIsIC8vIFRoaXMgaGFzIG5vIHZpc3VhbCBlZmZlY3QgYnV0IGFs
bG93cyB0byBleHBvc2Ugc2VtYW50aWMgaW5mb3JtYXRpb24gdmlhIHRoZSBhY2Nlc3NpYmlsaXR5
IHRyZWUuCiAgICAgTGFyZ2VPcCA9IDB4NCwKQEAgLTU2LDYgKzU4LDkgQEAgc3RydWN0IEVudHJ5
IHsKICAgICB1bnNpZ25lZCBmbGFncyA6IDg7CiB9OwogCitib29sIGlzT3BlcmF0b3JGbGFnQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKK0ZsYWcgZ2V0T3BlcmF0b3JGbGFnRnJvbUF0
dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworCiB9CiAKIGNsYXNzIFJlbmRlck1h
dGhNTE9wZXJhdG9yIDogcHVibGljIFJlbmRlck1hdGhNTFRva2VuIHsKQEAgLTgxLDE0ICs4Niwx
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKTsKICAgICB2
b2lkIHNldE9wZXJhdG9yRmxhZ0FuZFNjaGVkdWxlTGF5b3V0SWZOZWVkZWQoTWF0aE1MT3BlcmF0
b3JEaWN0aW9uYXJ5OjpGbGFnLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKTsK
ICAgICBMYXlvdXRVbml0IHRyYWlsaW5nU3BhY2VFcnJvcigpOworICAgIHZvaWQgcGFyc2VMZWFk
aW5nU3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgdm9pZCBwYXJzZVRyYWlsaW5nU3Bh
Y2UoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgdm9pZCBwYXJzZU1pblNpemUoY29uc3QgQXRv
bWljU3RyaW5nJik7CisgICAgdm9pZCBwYXJzZU1heFNpemUoY29uc3QgQXRvbWljU3RyaW5nJik7
CisgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdG9yUHJvcGVydGllcygpOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdG9yUHJvcGVydGllcygpOwogICAgIHZpcnR1YWwg
dm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIExh
eW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgZmxvYXQgYWR2YW5jZUZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYpIGNv
bnN0OwotICAgIHZvaWQgc2V0TGVhZGluZ1NwYWNlKExheW91dFVuaXQgbGVhZGluZ1NwYWNlKSB7
IG1fbGVhZGluZ1NwYWNlID0gbGVhZGluZ1NwYWNlOyB9Ci0gICAgdm9pZCBzZXRUcmFpbGluZ1Nw
YWNlKExheW91dFVuaXQgdHJhaWxpbmdTcGFjZSkgeyBtX3RyYWlsaW5nU3BhY2UgPSB0cmFpbGlu
Z1NwYWNlOyB9CisgICAgdm9pZCBzZXRMZWFkaW5nU3BhY2UoTGF5b3V0VW5pdCk7CisgICAgdm9p
ZCBzZXRUcmFpbGluZ1NwYWNlKExheW91dFVuaXQpOworCiAgICAgVUNoYXIgdGV4dENvbnRlbnQo
KSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZW50OyB9CiAKIHByaXZhdGU6CkBAIC0xNTYsNiAr
MTY2LDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgaW50IGZpcnN0TGluZUJhc2VsaW5lKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBSZW5kZXJNYXRoTUxPcGVyYXRvciogdW5lbWJl
bGxpc2hlZE9wZXJhdG9yKCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwg
dm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkgb3ZlcnJpZGUgZmluYWw7CisKICAgICB2b2lkIHJlYnVpbGRUb2tlbkNvbnRlbnQo
Y29uc3QgU3RyaW5nJiBvcGVyYXRvclN0cmluZyk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZy
b21FbGVtZW50KCkgb3ZlcnJpZGU7CiAKQEAgLTE4NCw4ICsxOTYsMTIgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkoUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmKTsKICAgICB2b2lkIHNldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGUoTWF0aE1M
T3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9p
ZCBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlVmFsdWUoTWF0aE1MT3BlcmF0b3JEaWN0aW9u
YXJ5OjpGbGFnLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKTsKLSAgICB2b2lk
IHNldE9wZXJhdG9yUHJvcGVydGllc0Zyb21PcERpY3RFbnRyeShjb25zdCBNYXRoTUxPcGVyYXRv
ckRpY3Rpb25hcnk6OkVudHJ5Kik7CisgICAgdm9pZCBzZXRPcGVyYXRvckZsYWdzRnJvbU9wRGlj
dEVudHJ5KGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqLCBNYXRoTUxPcGVy
YXRvckRpY3Rpb25hcnk6OkZsYWcpOworICAgIHZvaWQgY2FsY3VsYXRlU3RyZXRjaERpc3RhbmNl
KCk7CiAKKyAgICBMYXlvdXRVbml0IGdldEluaXRpYWxMZWFkaW5nU3BhY2UoY29uc3QgTWF0aE1M
T3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSopOworICAgIExheW91dFVuaXQgZ2V0SW5pdGlhbFRy
YWlsaW5nU3BhY2UoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSopOworICAg
IGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqIGdldERpY3Rpb25hcnlFbnRy
eSgpOwogICAgIExheW91dFVuaXQgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZTsKICAgICBM
YXlvdXRVbml0IG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZTsKICAgICBMYXlvdXRVbml0IG1f
c3RyZXRjaFdpZHRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MUm9vdC5jcHAKaW5kZXggYWYyZDkwYTIyNWE0M2Y2ZjgwNjNmYTM4NTQ0MDRh
MWE4YTA4Yzk4Ny4uMWE5YzRiYWM4MzUwYzY1MDE3M2I5Mjg0ZDNjOGY5NTEyOTQ3ODlmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
b3QuY3BwCkBAIC0xOTMsNiArMTkzLDE5IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6dXBkYXRl
RnJvbUVsZW1lbnQoKQogICAgICAgICB1cGRhdGVTdHlsZSgpOwogfQogCit2b2lkIFJlbmRlck1h
dGhNTFJvb3Q6OnVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcygpCit7CisgICAgaWYgKGlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gYmFz
ZVdyYXBwZXIoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyTWF0aE1MQmxvY2s+KCpjaGlsZCkpIHsKKyAg
ICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJPcGVyYXRvciA9IGRvd25jYXN0PFJlbmRlck1hdGhN
TEJsb2NrPigqY2hpbGQpLnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpKQorICAgICAgICAgICAgICAg
IHJlbmRlck9wZXJhdG9yLT51cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwogdm9pZCBSZW5kZXJNYXRoTUxSb290Ojp1cGRhdGVTdHlsZSgpCiB7CiAgICAg
QVNTRVJUKCFpc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTFJvb3QuaAppbmRleCBlY2E1NzUxZGE2NWVkNzM1MDAxZWU0N2RmZWQ3
OTM3M2JjZGQ4MTY1Li41Mjk3ZTI2YjQyYzczYWMyZDMxYzQ3MjM1OTFlMGNkOTk5MzJiOTllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
b3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
b3QuaApAQCAtNTIsNiArNTIsOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTWF0aE1MUm9vdFdyYXBw
ZXIqIGJhc2VXcmFwcGVyKCkgY29uc3Q7CiAgICAgUmVuZGVyTWF0aE1MUm9vdFdyYXBwZXIqIGlu
ZGV4V3JhcHBlcigpIGNvbnN0OwogCisgICAgdm9pZCB1cGRhdGVPcGVyYXRvclByb3BlcnRpZXMo
KTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MUm93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um93LmNwcAppbmRleCBjZjA0OWFkNWNmNTIyZWZiNWRhYTk4NTc0YzY0NmEwZGE5MzQ4NDAxLi5l
NTBkMjFiYzYzNmI3MjRhYzNkZDZhODZjZmIzOThmZjZkOGNjODliIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCkBAIC0xMDEs
OCArMTAxLDEyIEBAIHZvaWQgUmVuZGVyTWF0aE1MUm93OjpsYXlvdXQoKQogICAgIAogICAgIC8v
IFNldCB0aGUgc2l6ZXMgb2YgKHBvc3NpYmx5IGVtYmVsbGlzaGVkKSBzdHJldGNoeSBvcGVyYXRv
ciBjaGlsZHJlbi4KICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVy
TWF0aE1MQmxvY2s+KCp0aGlzKSkgewotICAgICAgICBpZiAoYXV0byByZW5kZXJPcGVyYXRvciA9
IGNoaWxkLnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpKQorICAgICAgICBpZiAoYXV0byByZW5kZXJP
cGVyYXRvciA9IGNoaWxkLnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpKSB7CisgICAgICAgICAgICBM
YXlvdXRVbml0IHNpemUgPSByZW5kZXJPcGVyYXRvci0+c3RyZXRjaFNpemUoKTsKICAgICAgICAg
ICAgIHJlbmRlck9wZXJhdG9yLT5zdHJldGNoVG8oc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUs
IHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUpOworICAgICAgICAgICAgaWYgKHNpemUgIT0gcmVu
ZGVyT3BlcmF0b3ItPnN0cmV0Y2hTaXplKCkpCisgICAgICAgICAgICAgICAgZHluYW1pY19jYXN0
PFJlbmRlckVsZW1lbnQqPihyZW5kZXJPcGVyYXRvciktPmxheW91dCgpOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgUmVuZGVyTWF0aE1MQmxvY2s6OmxheW91dCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5oCmluZGV4IDBhNGQ2
NGFmY2RiZDcyYTZhYmJjMjc2N2ZkNjFiMjhjOGQxNmMzNjQuLjkzNDQ4OTczYmVmMTg4MzU3YTgz
ZmRkMzA3YjYwZDlmOWIwNTkxMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmgKQEAgLTQ4LDExICs0OCwxMSBAQCBwdWJsaWM6
CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGNyZWF0ZVdyYXBwZXJJZk5lZWRlZCgpOworICAgIHZp
cnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlz
UmVuZGVyTWF0aE1MVG9rZW4oKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJSZW5kZXJNYXRoTUxUb2tlbiAoYW5vbnltb3VzKSIgOiAi
UmVuZGVyTWF0aE1MVG9rZW4iOyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3R5bGUoKTsKIAogICAgIC8vIFRoaXMgYm9vbGVhbiBpbmRp
Y2F0ZXMgd2hldGhlciB0aGUgdG9rZW4gZWxlbWVudCBjb250YWlucyBzb21lIFJlbmRlckVsZW1l
bnQgZGVzY2VuZGFudHMsIG90aGVyIHRoYW4gdGhlIGFub255bW91cyByZW5kZXJlcnMgY3JlYXRl
ZCBmb3IgbGF5b3V0IHB1cnBvc2UuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242234</attachid>
            <date>2014-11-26 10:31:30 -0800</date>
            <delta_ts>2015-01-14 00:48:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138732-20141126193152.patch</filename>
            <type>text/plain</type>
            <size>32865</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTRmMDIxZWNkMmVjNGZm
YTFkNmFkYWFhMDM0YzgyMjg2ODUyYzBjMi4uZTk0MTM4MjA0MzZmZWI4OGQ3YTEwNmZjY2VhMzc3
NzM0ODRlMmM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDE0LTExLTE0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFJl
bmRlck1hdGhNTE9wZXJhdG9yIHRvIGF2b2lkIHJlbGF5b3V0IGR1cmluZyBsYXlvdXQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODczMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBu
ZWVkZWQgdGhpcyBwYXRjaCBmaXhlcyBsYXlvdXQgYW5kIHJlZmFjdG9ycyBjb2RlLgorCisgICAg
ICAgICogbWF0aG1sL01hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWF0aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKTog
VGhlCisgICAgICAgIHByb3BlcnRpZXMgb2YgdGhlIG1yb290IGFuZCBtc3FydCB3ZXJlIG5vdCB1
cGRhdGVkIHByb3Blcmx5LgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxUZXh0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxUZXh0RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBB
ZGRlZCB0aGUgcGFyc2luZworICAgICAgICBjb2RlIGZvciB0aGUgb3RoZXIgb3BlcmF0b3IgdmFs
dWVzIHRoYXQgYXJlIHVzZWQgZm9yIHJlbmRlcmluZy4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeTo6aXNPcGVyYXRvckZsYWdBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6Z2V0T3BlcmF0b3JGbGFnRnJv
bUF0dHJpYnV0ZU5hbWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpzZXRPcGVyYXRvckZsYWdBbmRTY2hlZHVsZUxheW91dElmTmVlZGVkKToKKyAgICAg
ICAgQWRkZWQgY29kZSB0byBjaGVjayB0aGUgY2FzZSB3aGVuIHRoZSB2YWx1ZSBpcyBudWxsLCBp
biB0aGF0IGNhc2UKKyAgICAgICAgd2UgaW5pdCB0aGUgZmxhZy4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1hdGhNTE9wZXJhdG9yOjppbml0T3BlcmF0b3JGbGFncyk6IFRoaXMgaXMgdGhlCisg
ICAgICAgIHNhbWUgY29kZSBpbml0aWFsaXppbmcgZmxhZ3MgdGhhdCB3YXMgdXNlZCBpbiBzZXRQ
cm9wZXJ0aWVzIGJ1dAorICAgICAgICBub3cgaXQgYWxsb3dzIHRvIGluaXQganVzdCBvbmUgZmxh
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclBy
b3BlcnRpZXNGcm9tT3BEaWN0RW50cnkpOiBSZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yRmxhZ3NGcm9tT3BEaWN0RW50cnkpOgorICAg
ICAgICBBZGRlZCwgdGhpcyBmdW5jdGlvbiByZXBsYWNlcyB0aGUgcHJldmlvdXMgb25lLCB3ZSBo
YXZlIGNyZWF0ZWQKKyAgICAgICAgb3RoZXIgZnVuY3Rpb25zIG1vZGlmeWluZyBvdGhlciBwcm9w
ZXJ0aWVzIHRvIHVzZSB0aGVtIGluIG90aGVyCisgICAgICAgIHBsYWNlLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcyk6IE1vdmVk
IHRoZQorICAgICAgICBmbGFncyBpbml0aWFsaXphdGlvbiB0byBhIG5ldyBmdW5jdGlvbiwgc28g
dGhhdCB3ZSBjYW4gdXNlIGl0IGZvcgorICAgICAgICBzcGVjaWZpYyBmbGFncy4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzdHJldGNoVG8pOiBBdm9pZGVkIHNldFBy
b3BlcnRpZXMKKyAgICAgICAgYW5kIHVwZGF0ZVN0eWxlIHdoZW4gZG9pbmcgdGhlIGxheW91dCwg
aXQgc2hvdWxkIGhhcHBlbiBiZWZvcmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICBSZW1vdmVk
IGNhbGxzIHRvIHNldFByb3BlcnRpZXMgYW5kIHVwZGF0ZVN0eWxlLCB0aGUgcHJvcGVydGllcwor
ICAgICAgICBhcmUgYWxyZWFkeSBzZXQgd2hlbiBidWlsZGluZyB0aGUgY29udGVudCwgd2UgZG8g
bm90IG5lZWQgdG8gc2V0CisgICAgICAgIHRoZW0gYWdhaW4uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6cmVidWlsZFRva2VuQ29udGVudCk6IFRoZSBzdHlsZQorICAg
ICAgICBhbmQgdGhlIHJlcXVlc3QgZm9yIGxheW91dCBub3cgaGFwcGVucyBpbiB0aGUgc2V0UHJv
cGVydGllcworICAgICAgICBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTE9wZXJhdG9yOjpzdHlsZURpZENoYW5nZSk6IFdlIGhhdmUgdG8gc2V0CisgICAg
ICAgIHRoZSBwcm9wZXJ0aWVzIHdoZW4gdGhlIHN0eWxlIGNoYW5nZXMgYmVjYXVzZSB0aGUgY2Fs
Y3VsYXRpb25zCisgICAgICAgIGRlcGVuZCBvbiB0aGUgZm9udCBzaXplLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogVGhpcyBpcyB0aGUgb2xk
CisgICAgICAgIHVwZGF0ZVN0eWxlIG1ldGhvZCBwYXJ0IHRoYXQgcmVhbGx5IHVwZGF0ZXMgdGhl
IHN0eWxlIGluIHRoZSBvbGQKKyAgICAgICAgZnVuY3Rpb24gYW5kIHRoZSByZXF1ZXN0IHRvIHRo
ZSBsYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y2FsY3Vs
YXRlU3RyZXRjaERpc3RhbmNlKTogVGhpcyBpcworICAgICAgICB0aGUgb2xkIHVwZGF0ZVN0eWxl
IGZ1bmN0aW9uLCB3aXRob3V0IHRoZSByZXF1ZXN0IHRvIGxheW91dC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYXJzZUxlYWRpbmdTcGFjZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhcnNlVHJhaWxpbmdTcGFjZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldExlYWRp
bmdTcGFjZSk6IEFkZGVkIHRoZSBjaGVjayBmb3IgcmVsYXlvdXQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0VHJhaWxpbmdTcGFjZSk6IEFkZGVkIHRoZSBjaGVj
ayBmb3IgcmVsYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
cGFyc2VNaW5TaXplKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6cGFyc2VNYXhTaXplKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6Z2V0SW5pdGlhbExlYWRpbmdTcGFjZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEluaXRpYWxUcmFpbGluZ1NwYWNlKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0RGljdGlvbmFy
eUVudHJ5KTogQWRkZWQsIHRoaXMKKyAgICAgICAgaXMgdGhlIG9sZCBpbml0T3BlcmF0b3JGbGFn
cywgd2UgaGF2ZSByZWZhY3RvcmVkIHRoZSBmdW5jdGlvbiB0bworICAgICAgICB1c2UgdGhlIGNv
ZGUgdGhhdCBjYWxjdWxhdGVzIHRoZSBlbnRyeSwgYW5kIHJlbW92ZSBvdGhlcgorICAgICAgICBt
b2RpZmljYXRpb25zIG9mIHRoZSBvcGVyYXRvciBzdGF0ZS4KKyAgICAgICAgKiByZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6c2V0TGVhZGluZ1NwYWNlKTogTW92ZWQgdG8gdGhlIC5jcHAgZmlsZS4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRUcmFpbGluZ1NwYWNl
KTogTW92ZWQgdG8gdGhlIC5jcHAgZmlsZS4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6
dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKTogV2UgaGF2ZSB0bworICAgICAgICB1cGRhdGUgdGhl
IGNoaWxkcmVuIHByb3BlcnRpZXMuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tl
bi5oOiBDaGFuZ2VkIHN0eWxlRGlkQ2hhbmdlIHRvCisgICAgICAgIHByb3RlY3RlZCBzZWN0aW9u
LCB3ZSBuZWVkIHRvIG92ZXJyaWRlIGluIG9wZXJhdG9yIGNsYXNzLgorICAgICAgICAqIHJlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTFJvdzo6bGF5b3V0KTogV2hlbiBjYWxjdWxhdGluZyB0aGUgc3RyZXRjaAorICAgICAg
ICBzaXplIHdlIGhhdmUgdG8gcnVuIGxheW91dCBhZ2FpbiBmb3IgdGhlIG9wZXJhdG9yIGluIGNh
c2Ugd2UgaGF2ZQorICAgICAgICBhIHN0cmV0Y2ggc2l6ZSBkaWZmZXJlbnQgdG8gdGhlIG9uZSB3
ZSB1c2VkIGluIHRoZSBpbml0aWFsIGxheW91dC4KKwogMjAxNC0xMS0yNSAgU3Vrb2xzYWsgU2Fr
c2h1d29uZyAgPHN1a29sc2FrQGdtYWlsLmNvbT4KIAogICAgICAgICBBZGQgcGFyc2luZyBmb3Ig
OmRpcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MSW5saW5lQ29u
dGFpbmVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MSW5saW5lQ29u
dGFpbmVyRWxlbWVudC5jcHAKaW5kZXggYmRiNmJmNmZjMDM0YmQ0NTVmNTk2ZWNlNTQ4MDk4ZTk5
Y2JmYTI3MS4uMGJmMmM2YmQ1YTgzMWI5MjQ3Njk2ZDliMWUwMjhiODg4ZDNlOWRjNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxJbmxpbmVDb250YWluZXJFbGVt
ZW50LmNwcApAQCAtNjAsOCArNjAsMTEgQEAgdm9pZCBNYXRoTUxJbmxpbmVDb250YWluZXJFbGVt
ZW50OjpjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoYW5nZSkKICAgICBpZiAo
cmVuZGVyZXIoKSkgewogICAgICAgICBpZiAoaXM8UmVuZGVyTWF0aE1MUm93PigqcmVuZGVyZXIo
KSkpCiAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJNYXRoTUxSb3c+KCpyZW5kZXJlcigpKS51
cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKTsKLSAgICAgICAgZWxzZSBpZiAoaGFzVGFnTmFtZSht
YXRoVGFnKSB8fCBoYXNUYWdOYW1lKG1zcXJ0VGFnKSkgeworICAgICAgICBlbHNlIGlmIChoYXNU
YWdOYW1lKG1zcXJ0VGFnKSB8fCBoYXNUYWdOYW1lKG1yb290VGFnKSkKKyAgICAgICAgICAgIGRv
d25jYXN0PFJlbmRlck1hdGhNTFJvb3Q+KHJlbmRlcmVyKCkpLT51cGRhdGVPcGVyYXRvclByb3Bl
cnRpZXMoKTsKKyAgICAgICAgZWxzZSBpZiAoaGFzVGFnTmFtZShtYXRoVGFnKSkgewogICAgICAg
ICAgICAgYXV0byogY2hpbGRSZW5kZXJlciA9IHJlbmRlcmVyKCktPmZpcnN0Q2hpbGQoKTsKKwog
ICAgICAgICAgICAgaWYgKGlzPFJlbmRlck1hdGhNTFJvdz4oY2hpbGRSZW5kZXJlcikpCiAgICAg
ICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyTWF0aE1MUm93PigqY2hpbGRSZW5kZXJlcikudXBk
YXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL21hdGhtbC9NYXRoTUxUZXh0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9tYXRo
bWwvTWF0aE1MVGV4dEVsZW1lbnQuY3BwCmluZGV4IDUwMzEyYjM2NTdhYjQ4OWZjYjM3NGY1ZTg0
MTg2MDZjZTQ0ZmYwZTEuLmNhNGMxODM0YjcxMTg4OGFhODk1NGNmNWU2ZTJmYWU1NjA5YjhjN2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxUZXh0RWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFRleHRFbGVtZW50LmNwcApAQCAtNjYs
MTIgKzY2LDIyIEBAIHZvaWQgTWF0aE1MVGV4dEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25z
dCBDaGlsZENoYW5nZSYgY2hhbmdlKQogCiB2b2lkIE1hdGhNTFRleHRFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKQogewotICAgIGlmIChuYW1lID09IHN0cmV0Y2h5QXR0cikgewotICAgICAgICBpZiAoaXM8
UmVuZGVyTWF0aE1MT3BlcmF0b3I+KHJlbmRlcmVyKCkpKQotICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyTWF0aE1MT3BlcmF0b3I+KCpyZW5kZXJlcigpKS5zZXRPcGVyYXRvckZsYWdBbmRTY2hl
ZHVsZUxheW91dElmTmVlZGVkKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6U3RyZXRjaHksIHZh
bHVlKTsKKyAgICBpZiAoIWlzPFJlbmRlck1hdGhNTE9wZXJhdG9yPihyZW5kZXJlcigpKSkgewor
ICAgICAgICBNYXRoTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5Ojpp
c09wZXJhdG9yRmxhZ0F0dHJpYnV0ZShuYW1lKSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTWF0
aE1MT3BlcmF0b3I+KCpyZW5kZXJlcigpKS5zZXRPcGVyYXRvckZsYWdBbmRTY2hlZHVsZUxheW91
dElmTmVlZGVkKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6Z2V0T3BlcmF0b3JGbGFnRnJvbUF0
dHJpYnV0ZU5hbWUobmFtZSksIHZhbHVlKTsKKyAgICBlbHNlIGlmIChuYW1lID09IGxzcGFjZUF0
dHIpCisgICAgICAgIGRvd25jYXN0PFJlbmRlck1hdGhNTE9wZXJhdG9yPigqcmVuZGVyZXIoKSku
cGFyc2VMZWFkaW5nU3BhY2UodmFsdWUpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gcnNwYWNlQXR0
cikKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KCpyZW5kZXJlcigpKS5w
YXJzZVRyYWlsaW5nU3BhY2UodmFsdWUpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gbWF4c2l6ZUF0
dHIpCisgICAgICAgIGRvd25jYXN0PFJlbmRlck1hdGhNTE9wZXJhdG9yPigqcmVuZGVyZXIoKSku
cGFyc2VNYXhTaXplKHZhbHVlKTsKKyAgICBlbHNlIGlmIChuYW1lID09IG1pbnNpemVBdHRyKQor
ICAgICAgICBkb3duY2FzdDxSZW5kZXJNYXRoTUxPcGVyYXRvcj4oKnJlbmRlcmVyKCkpLnBhcnNl
TWluU2l6ZSh2YWx1ZSk7CisKICAgICBNYXRoTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1l
LCB2YWx1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKaW5kZXggODVlMWVmZTA3YmViZDJlNmE5YzJk
YmRlMTJiMTdlYzhkN2RmMWJjZC4uYjUzOTQ2MDEzYjlmZmFlMTQyZTY0ZTY2NDM4MmU5ZjI1MjVj
MzY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDEwIEFsZXggTWlsb3dza2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBGcmFuw6dvaXMgU2F1c3NldCAoc2F1c3Nl
dEBnbWFpbC5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgSWdhbGlhIFMuTC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEzMyw2ICsxMTMzLDQwIEBAIHN0YXRp
YyBjb25zdCBVQ2hhciBob3Jpem9udGFsT3BlcmF0b3JzW10gPSB7CiAgICAgMHgwMDNELCAweDAw
NUUsIDB4MDA1RiwgMHgwMDdFLCAweDAwQUYsIDB4MDJDNiwgMHgwMkM3LCAweDAyQzksIDB4MDJD
RCwgMHgwMkRDLCAweDAyRjcsIDB4MDMwMiwgMHgwMzMyLCAweDIwM0UsIDB4MjBEMCwgMHgyMEQx
LCAweDIwRDYsIDB4MjBENywgMHgyMEUxLCAweDIxOTAsIDB4MjE5MiwgMHgyMTk0LCAweDIxOTgs
IDB4MjE5OSwgMHgyMTlDLCAweDIxOUQsIDB4MjE5RSwgMHgyMUEwLCAweDIxQTIsIDB4MjFBMywg
MHgyMUE0LCAweDIxQTYsIDB4MjFBOSwgMHgyMUFBLCAweDIxQUIsIDB4MjFBQywgMHgyMUFELCAw
eDIxQjQsIDB4MjFCOSwgMHgyMUJDLCAweDIxQkQsIDB4MjFDMCwgMHgyMUMxLCAweDIxQzQsIDB4
MjFDNiwgMHgyMUM3LCAweDIxQzksIDB4MjFDQiwgMHgyMUNDLCAweDIxRDAsIDB4MjFEMiwgMHgy
MUQ0LCAweDIxREEsIDB4MjFEQiwgMHgyMURDLCAweDIxREQsIDB4MjFFMCwgMHgyMUUyLCAweDIx
RTQsIDB4MjFFNSwgMHgyMUU2LCAweDIxRTgsIDB4MjFGMCwgMHgyMUY2LCAweDIxRkQsIDB4MjFG
RSwgMHgyMUZGLCAweDIzQjQsIDB4MjNCNSwgMHgyM0RDLCAweDIzREQsIDB4MjNERSwgMHgyM0RG
LCAweDIzRTAsIDB4MjNFMSwgMHgyNTAwLCAweDI3RjUsIDB4MjdGNiwgMHgyN0Y3LCAweDI3Rjgs
IDB4MjdGOSwgMHgyN0ZBLCAweDI3RkIsIDB4MjdGQywgMHgyN0ZELCAweDI3RkUsIDB4MjdGRiwg
MHgyOTBDLCAweDI5MEQsIDB4MjkwRSwgMHgyOTBGLCAweDI5MTAsIDB4Mjk0RSwgMHgyOTUwLCAw
eDI5NTIsIDB4Mjk1MywgMHgyOTU2LCAweDI5NTcsIDB4Mjk1QSwgMHgyOTVCLCAweDI5NUUsIDB4
Mjk1RiwgMHgyQjQ1LCAweDJCNDYsIDB4RkUzNSwgMHhGRTM2LCAweEZFMzcsIDB4RkUzOAogfTsK
IAorYm9vbCBpc09wZXJhdG9yRmxhZ0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
KQoreworICAgIHJldHVybiAobmFtZSA9PSBzdHJldGNoeUF0dHIpIHx8IChuYW1lID09IGZlbmNl
QXR0cikgfHwgKG5hbWUgPT0gc2VwYXJhdG9yQXR0cikgfHwgKG5hbWUgPT0gc3ltbWV0cmljQXR0
cikgfHwgKG5hbWUgPT0gbGFyZ2VvcEF0dHIpICB8fCAobmFtZSA9PSBtb3ZhYmxlbGltaXRzQXR0
cikgfHwgKG5hbWUgPT0gYWNjZW50QXR0cik7Cit9CisKK0ZsYWcgZ2V0T3BlcmF0b3JGbGFnRnJv
bUF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKK3sKKyAgICBBU1NFUlQo
aXNPcGVyYXRvckZsYWdBdHRyaWJ1dGUobmFtZSkpOworCisgICAgaWYgKG5hbWUgPT0gc3RyZXRj
aHlBdHRyKQorICAgICAgICByZXR1cm4gU3RyZXRjaHk7CisKKyAgICBpZiAobmFtZSA9PSBmZW5j
ZUF0dHIpCisgICAgICAgIHJldHVybiBGZW5jZTsKKworICAgIGlmIChuYW1lID09IHNlcGFyYXRv
ckF0dHIpCisgICAgICAgIHJldHVybiBTZXBhcmF0b3I7CisKKyAgICBpZiAobmFtZSA9PSBzeW1t
ZXRyaWNBdHRyKQorICAgICAgICByZXR1cm4gU3ltbWV0cmljOworCisgICAgaWYgKG5hbWUgPT0g
bGFyZ2VvcEF0dHIpCisgICAgICAgIHJldHVybiBMYXJnZU9wOworCisgICAgaWYgKG5hbWUgPT0g
bW92YWJsZWxpbWl0c0F0dHIpCisgICAgICAgIHJldHVybiBNb3ZhYmxlTGltaXRzOworCisgICAg
aWYgKG5hbWUgPT0gYWNjZW50QXR0cikKKyAgICAgICAgcmV0dXJuIEFjY2VudDsKKworICAgIC8v
IE5vdCByZWFjaGFibGUuCisgICAgcmV0dXJuIE5vbmU7Cit9CisKIH0KIAogUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OlJlbmRlck1hdGhNTE9wZXJhdG9yKE1hdGhNTEVsZW1lbnQmIGVsZW1lbnQsIFBh
c3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlKQpAQCAtMTE2MSwxMCArMTE5NSw2NyBAQCB2b2lkIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvckZsYWdBbmRTY2hlZHVsZUxheW91dElmTmVl
ZGVkKE1hdGhNTE9wZXJhdAogewogICAgIHVuc2lnbmVkIHNob3J0IG9sZE9wZXJhdG9yRmxhZ3Mg
PSBtX29wZXJhdG9yRmxhZ3M7CiAKLSAgICBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlVmFs
dWUoZmxhZywgYXR0cmlidXRlVmFsdWUpOworICAgIGlmICghYXR0cmlidXRlVmFsdWUpCisgICAg
ICAgIHNldE9wZXJhdG9yRmxhZ3NGcm9tT3BEaWN0RW50cnkoZ2V0RGljdGlvbmFyeUVudHJ5KCks
IGZsYWcpOworICAgIGVsc2UKKyAgICAgICAgc2V0T3BlcmF0b3JGbGFnRnJvbUF0dHJpYnV0ZVZh
bHVlKGZsYWcsIGF0dHJpYnV0ZVZhbHVlKTsKIAotICAgIGlmIChvbGRPcGVyYXRvckZsYWdzICE9
IG1fb3BlcmF0b3JGbGFncykKLSAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVj
YWxjKCk7CisgICAgaWYgKG9sZE9wZXJhdG9yRmxhZ3MgIT0gbV9vcGVyYXRvckZsYWdzKSB7Cisg
ICAgICAgIHJlc2V0U3RyZXRjaFNpemUoKTsKKyAgICAgICAgY29uc3QgYXV0byYgd3JhcHBlciA9
IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGZpcnN0Q2hpbGQoKSk7CisgICAgICAgIHdyYXBwZXIt
PnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworICAgIH0KK30KKworTGF5b3V0
VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0SW5pdGlhbExlYWRpbmdTcGFjZShjb25zdCBN
YXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5KiBlbnRyeSkKK3sKKyAgICAvLyBMZWFkaW5n
IGFuZCB0cmFpbGluZyBzcGFjZSBpcyBzcGVjaWZpZWQgYXMgbXVsdGlwbGUgb2YgMS8xOGVtLgor
ICAgIGlmIChlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVudHJ5LT5sc3BhY2UgKiBzdHlsZSgpLmZv
bnQoKS5zaXplKCkgLyAxODsKKworICAgIHJldHVybiA1ICogc3R5bGUoKS5mb250KCkuc2l6ZSgp
IC8gMTg7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEluaXRpYWxU
cmFpbGluZ1NwYWNlKGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqIGVudHJ5
KQoreworICAgIC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIGlzIHNwZWNpZmllZCBhcyBt
dWx0aXBsZSBvZiAxLzE4ZW0uCisgICAgaWYgKGVudHJ5KQorICAgICAgICByZXR1cm4gZW50cnkt
PnJzcGFjZSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OworCisgICAgcmV0dXJuIDUgKiBz
dHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKK30KKworY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5OjpFbnRyeSogUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldERpY3Rpb25hcnlFbnRyeSgp
Cit7CisgICAgaWYgKG1fdGV4dENvbnRlbnQpIHsKKyAgICAgICAgYm9vbCBleHBsaWNpdEZvcm0g
PSB0cnVlOworCisgICAgICAgIGlmICghaXNBbm9ueW1vdXMoKSkgeworICAgICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBmb3JtID0gZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1M
TmFtZXM6OmZvcm1BdHRyKTsKKyAgICAgICAgICAgIGlmICghKChmb3JtID09ICJwcmVmaXgiKSB8
fCAoZm9ybSA9PSAiaW5maXgiKSB8fCAoZm9ybSA9PSAicG9zdGZpeCIpKSkKKyAgICAgICAgICAg
ICAgICBleHBsaWNpdEZvcm0gPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IE1h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqIGVudHJ5ID0gdHJ5QmluYXJ5U2VhcmNoPGNv
bnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnksIE1hdGhNTE9wZXJhdG9yRGljdGlv
bmFyeTo6S2V5PihNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OmRpY3Rpb25hcnksIE1BVEhNTF9P
UERJQ1RfU0laRSwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpLZXkobV90ZXh0Q29udGVudCwg
bV9vcGVyYXRvckZvcm0pLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkV4dHJhY3RLZXkpOwor
ICAgICAgICBpZiAoZW50cnkpCisgICAgICAgICAgICByZXR1cm4gZW50cnk7CisKKyAgICAgICAg
aWYgKCFleHBsaWNpdEZvcm0pIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGRpZCBub3QgZmluZCB0
aGUgZGVzaXJlZCBvcGVyYXRvciBmb3JtIGFuZCBpZiBpdCB3YXMgbm90IHNldCBleHBsaWNpdGVs
eSwgd2UgdXNlIHRoZSBmaXJzdCBvbmUgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogSW5maXgsIFBy
ZWZpeCwgUG9zdGZpeC4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gaGFuZGxlIGJhZCBNYXRo
TUwgbWFya3VwIHdpdGhvdXQgZXhwbGljaXQgPG1yb3c+IGRlbGltaXRlcnMgbGlrZSAiPG1vPig8
L21vPjxtaT5hPC9taT48bW8+KTwvbW8+PG1vPig8L21vPjxtaT5iPC9taT48bW8+KTwvbW8+IiB3
aGVyZSB0aGUgaW5uZXIgcGFyZW50aGVzaXMgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGluZml4
LgorICAgICAgICAgICAgZW50cnkgPSB0cnlCaW5hcnlTZWFyY2g8Y29uc3QgTWF0aE1MT3BlcmF0
b3JEaWN0aW9uYXJ5OjpFbnRyeSwgVUNoYXI+KE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6ZGlj
dGlvbmFyeSwgTUFUSE1MX09QRElDVF9TSVpFLCBtX3RleHRDb250ZW50LCBNYXRoTUxPcGVyYXRv
ckRpY3Rpb25hcnk6OkV4dHJhY3RDaGFyKTsKKyAgICAgICAgICAgIGlmIChlbnRyeSkgeworICAg
ICAgICAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBlbnRyeSBpcyBhbm90aGVyIGZvcm0gZm9y
IHRoYXQgb3BlcmF0b3IsIHdlIG1vdmUgdG8gdGhhdCBlbnRyeS4gTm90ZSB0aGF0IGl0IG9ubHkg
cmVtYWlucyBhdCBtb3N0IHR3byBmb3JtcyBzbyB3ZSBkb24ndCBuZWVkIHRvIG1vdmUgYW55IGZ1
cnRoZXIuCisgICAgICAgICAgICAgICAgaWYgKGVudHJ5ICE9IE1hdGhNTE9wZXJhdG9yRGljdGlv
bmFyeTo6ZGljdGlvbmFyeSAmJiAoZW50cnktMSktPmNoYXJhY3RlciA9PSBtX3RleHRDb250ZW50
KQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0tOworCisgICAgICAgICAgICAgICAgcmV0dXJu
IGVudHJ5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51
bGxwdHI7CisjdW5kZWYgTUFUSE1MX09QRElDVF9TSVpFCiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnNldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGUoTWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5OjpGbGFnIGZsYWcsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCkBAIC0xMTgzLDE3
ICsxMjc0LDIxIEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yRmxhZ0Zy
b21BdHRyaWJ1dGVWYWx1ZShNYXRoTUxPcGVyYXRvckRpY3RpCiAgICAgLy8gV2UgaWdub3JlIGFi
c2VudCBvciBpbnZhbGlkIGF0dHJpYnV0ZXMuCiB9CiAKLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OnNldE9wZXJhdG9yUHJvcGVydGllc0Zyb21PcERpY3RFbnRyeShjb25zdCBNYXRoTUxPcGVy
YXRvckRpY3Rpb25hcnk6OkVudHJ5KiBlbnRyeSkKK3ZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OnNldE9wZXJhdG9yRmxhZ3NGcm9tT3BEaWN0RW50cnkoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5OjpFbnRyeSogZW50cnksIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZyBmbGFn
KQogeworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChmbGFnICE9
IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6Tm9uZSkgeworICAgICAgICBtX29wZXJhdG9yRmxh
Z3MgfD0gZW50cnktPmZsYWdzICYgZmxhZzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IC8vIElmIHRoaXMgb3BlcmF0b3IgaXMgYW5vbnltb3VzLCB3ZSBwcmVzZXJ2ZSB0aGUgRmVuY2Ug
YW5kIFNlcGFyYXRvciBwcm9wZXJ0aWVzLiBUaGlzIGlzIHRvIGhhbmRsZSB0aGUgY2FzZSBvZiBS
ZW5kZXJNYXRoTUxGZW5jZWQuCiAgICAgaWYgKGlzQW5vbnltb3VzKCkpCiAgICAgICAgIG1fb3Bl
cmF0b3JGbGFncyA9IChtX29wZXJhdG9yRmxhZ3MgJiAoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5
OjpGZW5jZSB8IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6U2VwYXJhdG9yKSkgfCBlbnRyeS0+
ZmxhZ3M7CiAgICAgZWxzZQogICAgICAgICBtX29wZXJhdG9yRmxhZ3MgPSBlbnRyeS0+ZmxhZ3M7
Ci0KLSAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSBpcyBzcGVjaWZpZWQgYXMgbXVs
dGlwbGUgb2YgMS8xOGVtLgotICAgIG1fbGVhZGluZ1NwYWNlID0gZW50cnktPmxzcGFjZSAqIHN0
eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OwotICAgIG1fdHJhaWxpbmdTcGFjZSA9IGVudHJ5LT5y
c3BhY2UgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKIH0KIAogdm9pZCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCkKQEAgLTEyMDIsNyArMTI5Nyw2IEBA
IHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcygpCiAgICAg
bV9pc1ZlcnRpY2FsID0gISh0cnlCaW5hcnlTZWFyY2g8Y29uc3QgVUNoYXIsIFVDaGFyPihNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6Omhvcml6b250YWxPcGVyYXRvcnMsIFdURl9BUlJBWV9MRU5H
VEgoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5Ojpob3Jpem9udGFsT3BlcmF0b3JzKSwgbV90ZXh0
Q29udGVudCwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFeHRyYWN0S2V5SG9yaXpvbnRhbCkp
OwogCiAgICAgLy8gV2UgZGV0ZXJtaW5lIHRoZSBmb3JtIG9mIHRoZSBvcGVyYXRvci4KLSAgICBi
b29sIGV4cGxpY2l0Rm9ybSA9IHRydWU7CiAgICAgaWYgKCFpc0Fub255bW91cygpKSB7CiAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybSA9IGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRl
KE1hdGhNTE5hbWVzOjpmb3JtQXR0cik7CiAgICAgICAgIGlmIChmb3JtID09ICJwcmVmaXgiKQpA
QCAtMTIxMyw3ICsxMzA3LDYgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0
b3JQcm9wZXJ0aWVzKCkKICAgICAgICAgICAgIG1fb3BlcmF0b3JGb3JtID0gTWF0aE1MT3BlcmF0
b3JEaWN0aW9uYXJ5OjpQb3N0Zml4OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgdXNlIG1vcmUgYWR2YW5jZWQgaGV1cmlzdGljcyBpbmRpY2F0ZWQgaW4g
dGhlIHNwZWNpZmljYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBvcGVyYXRvciBmb3JtIChodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODI5KS4KLSAgICAgICAgICAgIGV4
cGxpY2l0Rm9ybSA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50KCkucHJldmlvdXNT
aWJsaW5nKCkgJiYgZWxlbWVudCgpLm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICAgICAgbV9v
cGVyYXRvckZvcm0gPSBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlByZWZpeDsKICAgICAgICAg
ICAgIGVsc2UgaWYgKGVsZW1lbnQoKS5wcmV2aW91c1NpYmxpbmcoKSAmJiAhZWxlbWVudCgpLm5l
eHRTaWJsaW5nKCkpCkBAIC0xMjM1LDIzICsxMzI4LDE0IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3Bl
cmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcygpCiAgICAgbV9taW5TaXplID0gc3R5bGUoKS5m
b250KCkuc2l6ZSgpOyAvLyBUaGlzIHNldHMgbWluc2l6ZSB0byAiMWVtIi4KICAgICBtX21heFNp
emUgPSBpbnRNYXhGb3JMYXlvdXRVbml0OyAvLyBUaGlzIHNldHMgbWF4c2l6ZSB0byAiaW5maW5p
dHkiLgogCi0gICAgaWYgKG1fdGV4dENvbnRlbnQpIHsKLSAgICAgICAgLy8gVGhlbiB3ZSB0cnkg
dG8gZmluZCB0aGUgZGVmYXVsdCB2YWx1ZXMgZnJvbSB0aGUgb3BlcmF0b3IgZGljdGlvbmFyeS4K
LSAgICAgICAgaWYgKGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnkqIGVudHJ5
ID0gdHJ5QmluYXJ5U2VhcmNoPGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RW50cnks
IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6S2V5PihNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6
OmRpY3Rpb25hcnksIE1BVEhNTF9PUERJQ1RfU0laRSwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5
OjpLZXkobV90ZXh0Q29udGVudCwgbV9vcGVyYXRvckZvcm0pLCBNYXRoTUxPcGVyYXRvckRpY3Rp
b25hcnk6OkV4dHJhY3RLZXkpKQotICAgICAgICAgICAgc2V0T3BlcmF0b3JQcm9wZXJ0aWVzRnJv
bU9wRGljdEVudHJ5KGVudHJ5KTsKLSAgICAgICAgZWxzZSBpZiAoIWV4cGxpY2l0Rm9ybSkgewot
ICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBmaW5kIHRoZSBkZXNpcmVkIG9wZXJhdG9yIGZv
cm0gYW5kIGlmIGl0IHdhcyBub3Qgc2V0IGV4cGxpY2l0ZWx5LCB3ZSB1c2UgdGhlIGZpcnN0IG9u
ZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOiBJbmZpeCwgUHJlZml4LCBQb3N0Zml4LgotICAgICAg
ICAgICAgLy8gVGhpcyBpcyB0byBoYW5kbGUgYmFkIE1hdGhNTCBtYXJrdXAgd2l0aG91dCBleHBs
aWNpdCA8bXJvdz4gZGVsaW1pdGVycyBsaWtlICI8bW8+KDwvbW8+PG1pPmE8L21pPjxtbz4pPC9t
bz48bW8+KDwvbW8+PG1pPmI8L21pPjxtbz4pPC9tbz4iIHdoZXJlIHRoZSBpbm5lciBwYXJlbnRo
ZXNpcyBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgaW5maXguCi0gICAgICAgICAgICBpZiAoY29u
c3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSogZW50cnkgPSB0cnlCaW5hcnlTZWFy
Y2g8Y29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSwgVUNoYXI+KE1hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeTo6ZGljdGlvbmFyeSwgTUFUSE1MX09QRElDVF9TSVpFLCBtX3RleHRD
b250ZW50LCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkV4dHJhY3RDaGFyKSkgewotICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBlbnRyeSBpcyBhbm90aGVyIGZvcm0gZm9yIHRo
YXQgb3BlcmF0b3IsIHdlIG1vdmUgdG8gdGhhdCBlbnRyeS4gTm90ZSB0aGF0IGl0IG9ubHkgcmVt
YWlucyBhdCBtb3N0IHR3byBmb3JtcyBzbyB3ZSBkb24ndCBuZWVkIHRvIG1vdmUgYW55IGZ1cnRo
ZXIuCi0gICAgICAgICAgICAgICAgaWYgKGVudHJ5ICE9IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFy
eTo6ZGljdGlvbmFyeSAmJiAoZW50cnktMSktPmNoYXJhY3RlciA9PSBtX3RleHRDb250ZW50KQot
ICAgICAgICAgICAgICAgICAgICBlbnRyeS0tOwotICAgICAgICAgICAgICAgIG1fb3BlcmF0b3JG
b3JtID0gc3RhdGljX2Nhc3Q8TWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGb3JtPihlbnRyeS0+
Zm9ybSk7IC8vIFdlIG92ZXJyaWRlIHRoZSBmb3JtIHByZXZpb3VzbHkgZGV0ZXJtaW5lZC4KLSAg
ICAgICAgICAgICAgICBzZXRPcGVyYXRvclByb3BlcnRpZXNGcm9tT3BEaWN0RW50cnkoZW50cnkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5OjpFbnRyeSogZW50cnkgPSBnZXREaWN0aW9uYXJ5RW50cnkoKTsKKyAgICBpZiAoZW50
cnkpIHsKKyAgICAgICAgc2V0T3BlcmF0b3JGbGFnc0Zyb21PcERpY3RFbnRyeShlbnRyeSwgTWF0
aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpOb25lKTsKKyAgICAgICAgaWYgKG1fb3BlcmF0b3JGb3Jt
ICE9IGVudHJ5LT5mb3JtKQorICAgICAgICAgICAgbV9vcGVyYXRvckZvcm0gPSBzdGF0aWNfY2Fz
dDxNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZvcm0+KGVudHJ5LT5mb3JtKTsKKyAgICAgICAg
bV9sZWFkaW5nU3BhY2UgPSBnZXRJbml0aWFsTGVhZGluZ1NwYWNlKGVudHJ5KTsKKyAgICAgICAg
bV90cmFpbGluZ1NwYWNlID0gZ2V0SW5pdGlhbFRyYWlsaW5nU3BhY2UoZW50cnkpOwogICAgIH0K
LSN1bmRlZiBNQVRITUxfT1BESUNUX1NJWkUKIAogICAgIGlmICghaXNBbm9ueW1vdXMoKSkgewog
ICAgICAgICAvLyBGaW5hbGx5LCB3ZSBtYWtlIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIG92ZXJyaWRl
IHRoZSBkZWZhdWx0LgpAQCAtMTI2NywxMSArMTM1MSwxMSBAQCB2b2lkIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpzZXRPcGVyYXRvclByb3BlcnRpZXMoKQogICAgICAgICBwYXJzZU1hdGhNTExlbmd0
aChlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6bHNwYWNlQXR0ciksIG1f
bGVhZGluZ1NwYWNlLCAmc3R5bGUoKSwgZmFsc2UpOyAvLyBGSVhNRTogTmVnYXRpdmUgbGVhZGlu
ZyBzcGFjZSBtdXN0IGJlIGltcGxlbWVudGVkIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI0ODMwKS4KICAgICAgICAgcGFyc2VNYXRoTUxMZW5ndGgoZWxlbWVudCgp
LmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OnJzcGFjZUF0dHIpLCBtX3RyYWlsaW5nU3Bh
Y2UsICZzdHlsZSgpLCBmYWxzZSk7IC8vIEZJWE1FOiBOZWdhdGl2ZSB0cmFpbGluZyBzcGFjZSBt
dXN0IGJlIGltcGxlbWVudGVkIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI0ODMwKS4KIAotICAgICAgICBwYXJzZU1hdGhNTExlbmd0aChlbGVtZW50KCkuZmFzdEdl
dEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6bWluc2l6ZUF0dHIpLCBtX21pblNpemUsICZzdHlsZSgp
LCBmYWxzZSk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbWF4c2l6ZSA9IGVsZW1lbnQo
KS5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjptYXhzaXplQXR0cik7Ci0gICAgICAgIGlm
IChtYXhzaXplICE9ICJpbmZpbml0eSIpCi0gICAgICAgICAgICBwYXJzZU1hdGhNTExlbmd0aCht
YXhzaXplLCBtX21heFNpemUsICZzdHlsZSgpLCBmYWxzZSk7CisgICAgICAgIHBhcnNlTWluU2l6
ZShlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6bWluc2l6ZUF0dHIpKTsK
KyAgICAgICAgcGFyc2VNYXhTaXplKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5h
bWVzOjptYXhzaXplQXR0cikpOwogICAgIH0KKworICAgIHVwZGF0ZVN0eWxlKCk7CiB9CiAKIGJv
b2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QKQEAgLTEyODcsNyArMTM3MSw2IEBAIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFz
ZWxpbmUsIExheW91dFVuaXQKICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gaGVp
Z2h0QWJvdmVCYXNlbGluZTsKICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBkZXB0
aEJlbG93QmFzZWxpbmU7CiAKLSAgICBzZXRPcGVyYXRvclByb3BlcnRpZXMoKTsKICAgICBpZiAo
aGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6U3ltbWV0cmljKSkgewog
ICAgICAgICAvLyBXZSBtYWtlIHRoZSBvcGVyYXRvciBzdHJldGNoIHN5bW1ldHJpY2FsbHkgYWJv
dmUgYW5kIGJlbG93IHRoZSBheGlzLgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWQg
dGhlIGF4aXMgZnJvbSB0aGUgTUFUSCB0YWJsZSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMjI5NykuIEZvciBub3csIHdlIHVzZSB0aGUgc2FtZSB2YWx1ZSBhcyBp
biBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6Zmlyc3RMaW5lQmFzZWxpbmUoKS4KQEAgLTEzMDgsNyAr
MTM5MSw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0
IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91dFVuaXQKICAgICB9CiAgICAgbV9zdHJldGNoSGVp
Z2h0QWJvdmVCYXNlbGluZSAqPSBhc3BlY3Q7CiAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2Vs
aW5lICo9IGFzcGVjdDsKLSAgICB1cGRhdGVTdHlsZSgpOworICAgIGNhbGN1bGF0ZVN0cmV0Y2hE
aXN0YW5jZSgpOworICAgIHNldE5lZWRzTGF5b3V0KCk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IHdpZHRoKQpAQCAtMTMxNywxMCArMTQwMSw4
IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IHdpZHRo
KQogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0cmV0Y2hXaWR0aCA9IHdpZHRoOwotCi0gICAg
c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCk7Ci0KLSAgICB1cGRhdGVTdHlsZSgpOworICAgIGNhbGN1
bGF0ZVN0cmV0Y2hEaXN0YW5jZSgpOworICAgIHNldE5lZWRzTGF5b3V0KCk7CiB9CiAKIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnJlc2V0U3RyZXRjaFNpemUoKQpAQCAtMTM1MSw3ICsxNDMz
LDYgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxX
aWR0aHMoKQogewogICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAK
LSAgICBzZXRPcGVyYXRvclByb3BlcnRpZXMoKTsKICAgICBpZiAoIXNob3VsZEFsbG93U3RyZXRj
aGluZygpKSB7CiAgICAgICAgIFJlbmRlck1hdGhNTFRva2VuOjpjb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocygpOwogICAgICAgICBpZiAoaXNJbnZpc2libGVPcGVyYXRvcigpKSB7CkBAIC0x
NDA0LDggKzE0ODUsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpyZWJ1aWxkVG9rZW5D
b250ZW50KGNvbnN0IFN0cmluZyYgb3BlcmF0b3JTdHJpbmcpCiAgICAgLy8gRklYTUU6IFRoaXMg
ZG9lcyBub3QgaGFuZGxlIDxtbz4gb3BlcmF0b3JzIHdpdGggbXVsdGlwbGUgY2hhcmFjdGVycyAo
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgyOCkuCiAgICAgbV90
ZXh0Q29udGVudCA9IHRleHRDb250ZW50Lmxlbmd0aCgpID09IDEgPyB0ZXh0Q29udGVudFswXSA6
IDA7CiAgICAgc2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCk7Ci0gICAgdXBkYXRlU3R5bGUoKTsKLSAg
ICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICByZXNldFN0cmV0Y2hT
aXplKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVRva2VuQ29udGVu
dChjb25zdCBTdHJpbmcmIG9wZXJhdG9yU3RyaW5nKQpAQCAtMTQyOSw5ICsxNTA5LDEyIEBAIHZv
aWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcygpCiB7CiAgICAgc2V0T3Bl
cmF0b3JQcm9wZXJ0aWVzKCk7Ci0gICAgaWYgKCFpc0VtcHR5KCkpCi0gICAgICAgIHVwZGF0ZVN0
eWxlKCk7Ci0gICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Cit9CisKK3Zv
aWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgUmVuZGVyTWF0aE1MVG9r
ZW46OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBzZXRPcGVyYXRvclByb3Bl
cnRpZXMoKTsKIH0KIAogYm9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2hvdWxkQWxsb3dTdHJl
dGNoaW5nKCkgY29uc3QKQEAgLTE2NTksNiArMTc0MiwxNyBAQCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6U3RyZXRjaHlEYXRhIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKFVD
aGFyCiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKIHsKKyAgICAv
LyBXZSBhZGQgc3BhY2luZyBhcm91bmQgdGhlIG9wZXJhdG9yLgorICAgIC8vIEZJWE1FOiBUaGUg
c3BhY2luZyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHdob2xlIGVtYmVsbGlzaGVkIG9wZXJhdG9y
IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMxKS4KKyAgICAv
LyBGSVhNRTogVGhlIHNwYWNpbmcgc2hvdWxkIG9ubHkgYmUgYWRkZWQgaW5zaWRlIChwZXJoYXBz
IGluZmVycmVkKSBtcm93IChodHRwOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwvY2hhcHRlcjMuaHRt
bCNwcmVzbS5vcHNwYWNpbmcpLgorICAgIGNvbnN0IGF1dG8mIHdyYXBwZXIgPSBkb3duY2FzdDxS
ZW5kZXJFbGVtZW50PihmaXJzdENoaWxkKCkpOworICAgIHdyYXBwZXItPnN0eWxlKCkuc2V0TWFy
Z2luU3RhcnQoTGVuZ3RoKG1fbGVhZGluZ1NwYWNlLCBGaXhlZCkpOworICAgIHdyYXBwZXItPnN0
eWxlKCkuc2V0TWFyZ2luRW5kKExlbmd0aChtX3RyYWlsaW5nU3BhY2UsIEZpeGVkKSk7CisgICAg
d3JhcHBlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Cit9CisKK3ZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2hEaXN0YW5jZSgpCit7CiAgICAg
Rm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAKICAgICBB
U1NFUlQoZmlyc3RDaGlsZCgpKTsKQEAgLTE2NjYsMTUgKzE3NjAsNiBAQCB2b2lkIFJlbmRlck1h
dGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc3Ry
ZXRjaHlEYXRhLnNldE5vcm1hbE1vZGUoKTsKLSAgICAvLyBXZSBhZGQgc3BhY2luZyBhcm91bmQg
dGhlIG9wZXJhdG9yLgotICAgIC8vIEZJWE1FOiBUaGUgc3BhY2luZyBzaG91bGQgYmUgYWRkZWQg
dG8gdGhlIHdob2xlIGVtYmVsbGlzaGVkIG9wZXJhdG9yIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMxKS4KLSAgICAvLyBGSVhNRTogVGhlIHNwYWNpbmcgc2hv
dWxkIG9ubHkgYmUgYWRkZWQgaW5zaWRlIChwZXJoYXBzIGluZmVycmVkKSBtcm93IChodHRwOi8v
d3d3LnczLm9yZy9UUi9NYXRoTUwvY2hhcHRlcjMuaHRtbCNwcmVzbS5vcHNwYWNpbmcpLgotICAg
IGNvbnN0IGF1dG8mIHdyYXBwZXIgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihmaXJzdENoaWxk
KCkpOwotICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5
bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgRkxFWCk7Ci0gICAgbmV3U3R5bGUuZ2V0KCkuc2V0TWFy
Z2luU3RhcnQoTGVuZ3RoKG1fbGVhZGluZ1NwYWNlLCBGaXhlZCkpOwotICAgIG5ld1N0eWxlLmdl
dCgpLnNldE1hcmdpbkVuZChMZW5ndGgobV90cmFpbGluZ1NwYWNlLCBGaXhlZCkpOwotICAgIHdy
YXBwZXItPnNldFN0eWxlKFdURjo6bW92ZShuZXdTdHlsZSkpOwotICAgIHdyYXBwZXItPnNldE5l
ZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogCiAgICAgaWYgKCFzaG91bGRBbGxvd1N0
cmV0Y2hpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAwNyw2ICsyMDkyLDYzIEBAIExheW91
dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3BhY2VFcnJvcigpCiAgICAgcmV0
dXJuIHdpZHRoIC0gYXNzZW1ibHlXaWR0aDsKIH0KIAordm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6cGFyc2VMZWFkaW5nU3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKK3sKKworICAg
IExheW91dFVuaXQgbGVhZGluZ1NwYWNlOworCisgICAgLy8gRklYTUU6IE5lZ2F0aXZlIGxlYWRp
bmcgc3BhY2UgbXVzdCBiZSBpbXBsZW1lbnRlZCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNDgzMCkuCisgICAgaWYgKCFwYXJzZU1hdGhNTExlbmd0aCh2YWx1ZSwg
bGVhZGluZ1NwYWNlLCAmc3R5bGUoKSwgZmFsc2UpKQorICAgICAgICBsZWFkaW5nU3BhY2UgPSAg
Z2V0SW5pdGlhbExlYWRpbmdTcGFjZShnZXREaWN0aW9uYXJ5RW50cnkoKSk7CisKKyAgICBzZXRM
ZWFkaW5nU3BhY2UobGVhZGluZ1NwYWNlKTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6cGFyc2VUcmFpbGluZ1NwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCit7CisgICAg
TGF5b3V0VW5pdCB0cmFpbGluZ1NwYWNlOworCisgICAgLy8gRklYTUU6IE5lZ2F0aXZlIHRyYWls
aW5nIHNwYWNlIG11c3QgYmUgaW1wbGVtZW50ZWQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjQ4MzApLgorICAgIGlmICghcGFyc2VNYXRoTUxMZW5ndGgodmFsdWUs
IHRyYWlsaW5nU3BhY2UsICZzdHlsZSgpLCBmYWxzZSkpCisgICAgICAgIHRyYWlsaW5nU3BhY2Ug
PSBnZXRJbml0aWFsVHJhaWxpbmdTcGFjZShnZXREaWN0aW9uYXJ5RW50cnkoKSk7CisKKyAgICBz
ZXRUcmFpbGluZ1NwYWNlKHRyYWlsaW5nU3BhY2UpOworfQorCit2b2lkIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpzZXRMZWFkaW5nU3BhY2UoTGF5b3V0VW5pdCBsZWFkaW5nU3BhY2UpCit7CisgICAg
bV9sZWFkaW5nU3BhY2UgPSBsZWFkaW5nU3BhY2U7CisgICAgY29uc3QgYXV0byYgd3JhcHBlciA9
IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGZpcnN0Q2hpbGQoKSk7CisgICAgd3JhcHBlci0+c3R5
bGUoKS5zZXRNYXJnaW5TdGFydChMZW5ndGgobV9sZWFkaW5nU3BhY2UsIEZpeGVkKSk7CisgICAg
d3JhcHBlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Cit9CisKK3ZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldFRyYWlsaW5nU3BhY2UoTGF5b3V0VW5pdCB0cmFpbGlu
Z1NwYWNlKQoreworICAgIG1fdHJhaWxpbmdTcGFjZSA9IHRyYWlsaW5nU3BhY2U7CisgICAgY29u
c3QgYXV0byYgd3JhcHBlciA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGZpcnN0Q2hpbGQoKSk7
CisgICAgd3JhcHBlci0+c3R5bGUoKS5zZXRNYXJnaW5FbmQoTGVuZ3RoKG1fdHJhaWxpbmdTcGFj
ZSwgRml4ZWQpKTsKKyAgICB3cmFwcGVyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNh
bGMoKTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFyc2VNaW5TaXplKGNvbnN0
IEF0b21pY1N0cmluZyYgbWluU2l6ZSkKK3sKKyAgICBpZiAoIXBhcnNlTWF0aE1MTGVuZ3RoKG1p
blNpemUsIG1fbWluU2l6ZSwgJnN0eWxlKCksIGZhbHNlKSkKKyAgICAgICAgbV9taW5TaXplID0g
c3R5bGUoKS5mb250KCkuc2l6ZSgpOyAvLyBUaGlzIHNldHMgbWluc2l6ZSB0byAiMWVtIi4KKwor
ICAgIGNvbnN0IGF1dG8mIHdyYXBwZXIgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihmaXJzdENo
aWxkKCkpOworICAgIHdyYXBwZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygp
OworfQorCit2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYXJzZU1heFNpemUoY29uc3QgQXRv
bWljU3RyaW5nJiBtYXhTaXplKQoreworICAgIGlmICgobWF4U2l6ZSA9PSAiaW5maW5pdHkiKSB8
fCAoIXBhcnNlTWF0aE1MTGVuZ3RoKG1heFNpemUsIG1fbWF4U2l6ZSwgJnN0eWxlKCksIGZhbHNl
KSkpCisgICAgICAgIG1fbWF4U2l6ZSA9IGludE1heEZvckxheW91dFVuaXQ7IC8vIFRoaXMgc2V0
cyBtYXhzaXplIHRvICJpbmZpbml0eSIuCisKKyAgICBjb25zdCBhdXRvJiB3cmFwcGVyID0gZG93
bmNhc3Q8UmVuZGVyRWxlbWVudD4oZmlyc3RDaGlsZCgpKTsKKyAgICB3cmFwcGVyLT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
aAppbmRleCBlODcxY2UwZTJiZDFiZDNlYmIzZWIzODliZWEwMTU5OWJiMGZhOWQxLi4xYTkxODFj
NzUyZGQxZjkwNzdkY2E3YThjYjk2ZDZjOWI0ZTU5YTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4IE1pbG93c2tpIChhbGV4QG1p
bG93c2tpLmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
SWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDEs
NyBAQCBuYW1lc3BhY2UgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5IHsKIAogZW51bSBGb3JtIHsg
SW5maXgsIFByZWZpeCwgUG9zdGZpeCB9OwogZW51bSBGbGFnIHsKKyAgICBOb25lID0gMHgwLAog
ICAgIEFjY2VudCA9IDB4MSwgLy8gRklYTUU6IFRoaXMgbXVzdCBiZSB1c2VkIHRvIGltcGxlbWVu
dCBhY2NlbnR1bmRlci9hY2NlbnQgb24gbXVuZGVyb3ZlciAoaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNDgyNikuCiAgICAgRmVuY2UgPSAweDIsIC8vIFRoaXMgaGFz
IG5vIHZpc3VhbCBlZmZlY3QgYnV0IGFsbG93cyB0byBleHBvc2Ugc2VtYW50aWMgaW5mb3JtYXRp
b24gdmlhIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUuCiAgICAgTGFyZ2VPcCA9IDB4NCwKQEAgLTU2
LDYgKzU4LDkgQEAgc3RydWN0IEVudHJ5IHsKICAgICB1bnNpZ25lZCBmbGFncyA6IDg7CiB9Owog
Citib29sIGlzT3BlcmF0b3JGbGFnQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKK0Zs
YWcgZ2V0T3BlcmF0b3JGbGFnRnJvbUF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OworCiB9CiAKIGNsYXNzIFJlbmRlck1hdGhNTE9wZXJhdG9yIDogcHVibGljIFJlbmRlck1hdGhN
TFRva2VuIHsKQEAgLTgxLDE0ICs4NiwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVPcGVy
YXRvclByb3BlcnRpZXMoKTsKICAgICB2b2lkIHNldE9wZXJhdG9yRmxhZ0FuZFNjaGVkdWxlTGF5
b3V0SWZOZWVkZWQoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVZhbHVlKTsKICAgICBMYXlvdXRVbml0IHRyYWlsaW5nU3BhY2VFcnJv
cigpOworICAgIHZvaWQgcGFyc2VMZWFkaW5nU3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJik7Cisg
ICAgdm9pZCBwYXJzZVRyYWlsaW5nU3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgdm9p
ZCBwYXJzZU1pblNpemUoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgdm9pZCBwYXJzZU1heFNp
emUoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdG9yUHJv
cGVydGllcygpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdG9yUHJv
cGVydGllcygpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cygpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodChMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVu
dENvbXB1dGVkVmFsdWVzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgZmxvYXQgYWR2YW5jZUZvckds
eXBoKGNvbnN0IEdseXBoRGF0YSYpIGNvbnN0OwotICAgIHZvaWQgc2V0TGVhZGluZ1NwYWNlKExh
eW91dFVuaXQgbGVhZGluZ1NwYWNlKSB7IG1fbGVhZGluZ1NwYWNlID0gbGVhZGluZ1NwYWNlOyB9
Ci0gICAgdm9pZCBzZXRUcmFpbGluZ1NwYWNlKExheW91dFVuaXQgdHJhaWxpbmdTcGFjZSkgeyBt
X3RyYWlsaW5nU3BhY2UgPSB0cmFpbGluZ1NwYWNlOyB9CisgICAgdm9pZCBzZXRMZWFkaW5nU3Bh
Y2UoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRUcmFpbGluZ1NwYWNlKExheW91dFVuaXQpOwor
CiAgICAgVUNoYXIgdGV4dENvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZW50OyB9
CiAKIHByaXZhdGU6CkBAIC0xNTYsNiArMTY2LDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
aW50IGZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBSZW5k
ZXJNYXRoTUxPcGVyYXRvciogdW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkgb3ZlcnJpZGUgeyByZXR1
cm4gdGhpczsgfQorICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGUgZmluYWw7CisKICAgICB2
b2lkIHJlYnVpbGRUb2tlbkNvbnRlbnQoY29uc3QgU3RyaW5nJiBvcGVyYXRvclN0cmluZyk7CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCkgb3ZlcnJpZGU7CiAKQEAgLTE4NCw4
ICsxOTYsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1i
bHkoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2b2lkIHNldE9wZXJhdG9y
RmxhZ0Zyb21BdHRyaWJ1dGUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnLCBjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlVmFs
dWUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZVZhbHVlKTsKLSAgICB2b2lkIHNldE9wZXJhdG9yUHJvcGVydGllc0Zyb21PcERpY3RF
bnRyeShjb25zdCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5Kik7CisgICAgdm9pZCBz
ZXRPcGVyYXRvckZsYWdzRnJvbU9wRGljdEVudHJ5KGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlv
bmFyeTo6RW50cnkqLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZsYWcpOworICAgIHZvaWQg
Y2FsY3VsYXRlU3RyZXRjaERpc3RhbmNlKCk7CiAKKyAgICBMYXlvdXRVbml0IGdldEluaXRpYWxM
ZWFkaW5nU3BhY2UoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSopOworICAg
IExheW91dFVuaXQgZ2V0SW5pdGlhbFRyYWlsaW5nU3BhY2UoY29uc3QgTWF0aE1MT3BlcmF0b3JE
aWN0aW9uYXJ5OjpFbnRyeSopOworICAgIGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6
RW50cnkqIGdldERpY3Rpb25hcnlFbnRyeSgpOwogICAgIExheW91dFVuaXQgbV9zdHJldGNoSGVp
Z2h0QWJvdmVCYXNlbGluZTsKICAgICBMYXlvdXRVbml0IG1fc3RyZXRjaERlcHRoQmVsb3dCYXNl
bGluZTsKICAgICBMYXlvdXRVbml0IG1fc3RyZXRjaFdpZHRoOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKaW5kZXggYWYyZDkw
YTIyNWE0M2Y2ZjgwNjNmYTM4NTQ0MDRhMWE4YTA4Yzk4Ny4uMWE5YzRiYWM4MzUwYzY1MDE3M2I5
Mjg0ZDNjOGY5NTEyOTQ3ODlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCkBAIC0xOTMsNiArMTkzLDE5IEBAIHZvaWQg
UmVuZGVyTWF0aE1MUm9vdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICB1cGRhdGVTdHls
ZSgpOwogfQogCit2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnVwZGF0ZU9wZXJhdG9yUHJvcGVydGll
cygpCit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gYmFzZVdyYXBwZXIoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyTWF0
aE1MQmxvY2s+KCpjaGlsZCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJPcGVyYXRv
ciA9IGRvd25jYXN0PFJlbmRlck1hdGhNTEJsb2NrPigqY2hpbGQpLnVuZW1iZWxsaXNoZWRPcGVy
YXRvcigpKQorICAgICAgICAgICAgICAgIHJlbmRlck9wZXJhdG9yLT51cGRhdGVPcGVyYXRvclBy
b3BlcnRpZXMoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBSZW5kZXJNYXRoTUxSb290
Ojp1cGRhdGVTdHlsZSgpCiB7CiAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaAppbmRleCBlY2E1
NzUxZGE2NWVkNzM1MDAxZWU0N2RmZWQ3OTM3M2JjZGQ4MTY1Li41Mjk3ZTI2YjQyYzczYWMyZDMx
YzQ3MjM1OTFlMGNkOTk5MzJiOTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaApAQCAtNTIsNiArNTIsOCBAQCBwdWJsaWM6CiAg
ICAgUmVuZGVyTWF0aE1MUm9vdFdyYXBwZXIqIGJhc2VXcmFwcGVyKCkgY29uc3Q7CiAgICAgUmVu
ZGVyTWF0aE1MUm9vdFdyYXBwZXIqIGluZGV4V3JhcHBlcigpIGNvbnN0OwogCisgICAgdm9pZCB1
cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKSBvdmVycmlkZTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAppbmRleCBjZjA0OWFkNWNmNTIyZWZiNWRh
YTk4NTc0YzY0NmEwZGE5MzQ4NDAxLi40NWExOGY5YzM5NzI5ODI5NGQzYmJiMTRjNTY0ZDFmMTJj
ZTIwYjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTFJvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxSb3cuY3BwCkBAIC0xMDEsOCArMTAxLDExIEBAIHZvaWQgUmVuZGVyTWF0aE1MUm93
OjpsYXlvdXQoKQogICAgIAogICAgIC8vIFNldCB0aGUgc2l6ZXMgb2YgKHBvc3NpYmx5IGVtYmVs
bGlzaGVkKSBzdHJldGNoeSBvcGVyYXRvciBjaGlsZHJlbi4KICAgICBmb3IgKGF1dG8mIGNoaWxk
IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyTWF0aE1MQmxvY2s+KCp0aGlzKSkgewotICAgICAgICBp
ZiAoYXV0byByZW5kZXJPcGVyYXRvciA9IGNoaWxkLnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpKQor
ICAgICAgICBpZiAoYXV0byByZW5kZXJPcGVyYXRvciA9IGNoaWxkLnVuZW1iZWxsaXNoZWRPcGVy
YXRvcigpKSB7CiAgICAgICAgICAgICByZW5kZXJPcGVyYXRvci0+c3RyZXRjaFRvKHN0cmV0Y2hI
ZWlnaHRBYm92ZUJhc2VsaW5lLCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lKTsKKyAgICAgICAg
ICAgIGlmIChyZW5kZXJPcGVyYXRvci0+bmVlZHNMYXlvdXQoKSkKKyAgICAgICAgICAgICAgICBk
eW5hbWljX2Nhc3Q8UmVuZGVyRWxlbWVudCo+KHJlbmRlck9wZXJhdG9yKS0+bGF5b3V0KCk7Cisg
ICAgICAgIH0KICAgICB9CiAKICAgICBSZW5kZXJNYXRoTUxCbG9jazo6bGF5b3V0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2Vu
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmgK
aW5kZXggMGE0ZDY0YWZjZGJkNzJhNmFiYmMyNzY3ZmQ2MWIyOGM4ZDE2YzM2NC4uOTM0NDg5NzNi
ZWYxODgzNTdhODNmZGQzMDdiNjBkOWY5YjA1OTEwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uaApAQCAtNDgsMTEgKzQ4LDEx
IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgY3JlYXRlV3JhcHBlcklmTmVlZGVk
KCk7CisgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxUb2tlbigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRlck1hdGhNTFRva2VuIChhbm9u
eW1vdXMpIiA6ICJSZW5kZXJNYXRoTUxUb2tlbiI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdHlsZSgpOwogCiAgICAgLy8gVGhpcyBi
b29sZWFuIGluZGljYXRlcyB3aGV0aGVyIHRoZSB0b2tlbiBlbGVtZW50IGNvbnRhaW5zIHNvbWUg
UmVuZGVyRWxlbWVudCBkZXNjZW5kYW50cywgb3RoZXIgdGhhbiB0aGUgYW5vbnltb3VzIHJlbmRl
cmVycyBjcmVhdGVkIGZvciBsYXlvdXQgcHVycG9zZS4K
</data>

          </attachment>
      

    </bug>

</bugzilla>