<?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>185695</bug_id>
          
          <creation_ts>2018-05-16 13:48:58 -0700</creation_ts>
          <short_desc>DFG should inline InstanceOf ICs</short_desc>
          <delta_ts>2018-05-19 15:01:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>185652</dependson>
          <blocked>185784</blocked>
    
    <blocked>185804</blocked>
    
    <blocked>185803</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1424472</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-16 13:48:58 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425188</commentid>
    <comment_count>1</comment_count>
      <attachid>340714</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-18 11:09:24 -0700</bug_when>
    <thetext>Created attachment 340714
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425229</commentid>
    <comment_count>2</comment_count>
      <attachid>340724</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-18 12:04:24 -0700</bug_when>
    <thetext>Created attachment 340724
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425236</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-05-18 12:13:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/40373500&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425257</commentid>
    <comment_count>4</comment_count>
      <attachid>340731</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-18 13:09:18 -0700</bug_when>
    <thetext>Created attachment 340731
maye it is written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425299</commentid>
    <comment_count>5</comment_count>
      <attachid>340740</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-18 14:50:13 -0700</bug_when>
    <thetext>Created attachment 340740
it did things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425322</commentid>
    <comment_count>6</comment_count>
      <attachid>340748</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-18 15:30:04 -0700</bug_when>
    <thetext>Created attachment 340748
it&apos;s a nice speed-up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425334</commentid>
    <comment_count>7</comment_count>
      <attachid>340751</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-18 15:55:35 -0700</bug_when>
    <thetext>Created attachment 340751
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425335</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-18 15:57:56 -0700</bug_when>
    <thetext>Attachment 340751 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 5 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425344</commentid>
    <comment_count>9</comment_count>
      <attachid>340755</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-18 16:15:01 -0700</bug_when>
    <thetext>Created attachment 340755
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425349</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-18 16:18:47 -0700</bug_when>
    <thetext>Attachment 340755 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 5 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425352</commentid>
    <comment_count>11</comment_count>
      <attachid>340756</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-18 16:23:53 -0700</bug_when>
    <thetext>Created attachment 340756
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425353</commentid>
    <comment_count>12</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-18 16:26:15 -0700</bug_when>
    <thetext>Attachment 340756 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 5 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425364</commentid>
    <comment_count>13</comment_count>
      <attachid>340759</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-18 16:41:24 -0700</bug_when>
    <thetext>Created attachment 340759
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425366</commentid>
    <comment_count>14</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-18 16:44:33 -0700</bug_when>
    <thetext>Attachment 340759 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/InstanceOfVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 5 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425459</commentid>
    <comment_count>15</comment_count>
      <attachid>340759</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-19 12:38:04 -0700</bug_when>
    <thetext>Comment on attachment 340759
the patch

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

r=me with nits.

&gt; Source/JavaScriptCore/bytecode/InstanceOfVariant.h:37
&gt; +    InstanceOfVariant() { }

Use `InstanceOfVariant() = default;`

&gt; Source/JavaScriptCore/bytecode/InstanceOfVariant.h:61
&gt; +    JSObject* m_prototype = nullptr;

Make this `JSObject* m_prototype { nullptr }`.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:3389
&gt; +        if (base.m_structure.isInfinite() || baseSet.size() &lt; base.m_structure.size())

Is `baseSet.size() &lt; base.m_structure.size()` condition correct? If node-&gt;matchStructureData().variants have so many structures, which includes all the base.m_structure, baseSet.size() == base.m_structure.size(), but we have a chance to reduce # of variants.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:3390
&gt; +            m_state.setFoundConstants(true);

I think we have a chance to clear NodeMustGenerate in constant folding phase if the given abstract value&apos;s structure set is finite and all the structures are covered by MatchStructure&apos;s set.

&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:520
&gt; +                    RegisteredStructureSet structureSet;
&gt; +                    for (MatchStructureVariant&amp; variant : data.variants)
&gt; +                        structureSet.add(variant.structure);
&gt; +                    addBaseCheck(indexInBlock, node, baseValue, structureSet);
&gt; +                    m_graph.convertToConstant(
&gt; +                        node, m_graph.freeze(jsBoolean(result == BooleanLattice::True)));

`changed = true`?

&gt; Source/WTF/wtf/BooleanLattice.h:42
&gt; +inline BooleanLattice lubBooleanLattice(BooleanLattice a, BooleanLattice b)
&gt; +{
&gt; +    return static_cast&lt;BooleanLattice&gt;(static_cast&lt;uint8_t&gt;(a) | static_cast&lt;uintptr_t&gt;(b));
&gt; +}

I think `leastUpperBoundOfBooleanLattices` is better since we already have bunch of `leastUpperBoundXXX` functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425461</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-19 12:47:34 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #15)
&gt; Comment on attachment 340759 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=340759&amp;action=review
&gt; 
&gt; r=me with nits.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/InstanceOfVariant.h:37
&gt; &gt; +    InstanceOfVariant() { }
&gt; 
&gt; Use `InstanceOfVariant() = default;`

Fixed.  Can you tell me what the advantage of this is?

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/InstanceOfVariant.h:61
&gt; &gt; +    JSObject* m_prototype = nullptr;
&gt; 
&gt; Make this `JSObject* m_prototype { nullptr }`.

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:3389
&gt; &gt; +        if (base.m_structure.isInfinite() || baseSet.size() &lt; base.m_structure.size())
&gt; 
&gt; Is `baseSet.size() &lt; base.m_structure.size()` condition correct? If
&gt; node-&gt;matchStructureData().variants have so many structures, which includes
&gt; all the base.m_structure, baseSet.size() == base.m_structure.size(), but we
&gt; have a chance to reduce # of variants.

You&apos;re right.  This should be baseSet.size() &lt; node-&gt;matchStructureData().variants.size().  I fixed it and will retest perf.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:3390
&gt; &gt; +            m_state.setFoundConstants(true);
&gt; 
&gt; I think we have a chance to clear NodeMustGenerate in constant folding phase
&gt; if the given abstract value&apos;s structure set is finite and all the structures
&gt; are covered by MatchStructure&apos;s set.

We don&apos;t usually clear NodeMustGenerate in other cases where this happens, so I didn&apos;t do it here.  In FTL mode, it really doesn&apos;t matter, since we rely on B3 to do the real DCE.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:520
&gt; &gt; +                    RegisteredStructureSet structureSet;
&gt; &gt; +                    for (MatchStructureVariant&amp; variant : data.variants)
&gt; &gt; +                        structureSet.add(variant.structure);
&gt; &gt; +                    addBaseCheck(indexInBlock, node, baseValue, structureSet);
&gt; &gt; +                    m_graph.convertToConstant(
&gt; &gt; +                        node, m_graph.freeze(jsBoolean(result == BooleanLattice::True)));
&gt; 
&gt; `changed = true`?

You&apos;re right!  Fixed.

&gt; 
&gt; &gt; Source/WTF/wtf/BooleanLattice.h:42
&gt; &gt; +inline BooleanLattice lubBooleanLattice(BooleanLattice a, BooleanLattice b)
&gt; &gt; +{
&gt; &gt; +    return static_cast&lt;BooleanLattice&gt;(static_cast&lt;uint8_t&gt;(a) | static_cast&lt;uintptr_t&gt;(b));
&gt; &gt; +}
&gt; 
&gt; I think `leastUpperBoundOfBooleanLattices` is better since we already have
&gt; bunch of `leastUpperBoundXXX` functions.

Right.  Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425462</commentid>
    <comment_count>17</comment_count>
      <attachid>340759</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-19 12:55:23 -0700</bug_when>
    <thetext>Comment on attachment 340759
the patch

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

&gt;&gt;&gt; Source/JavaScriptCore/bytecode/InstanceOfVariant.h:37
&gt;&gt;&gt; +    InstanceOfVariant() { }
&gt;&gt; 
&gt;&gt; Use `InstanceOfVariant() = default;`
&gt; 
&gt; Fixed.  Can you tell me what the advantage of this is?

The compiler can offer a good information without adding an explicit annotation.
For example, if all the members are constexpr-initialized, constructor becomes `constexpr` constructor :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425473</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-19 15:01:30 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/232000/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340714</attachid>
            <date>2018-05-18 11:09:24 -0700</date>
            <delta_ts>2018-05-18 12:04:24 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19326</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKICNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5o
IgogI2luY2x1ZGUgIkludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkludHJpbnNpY0dl
dHRlckFjY2Vzc0Nhc2UuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00NywyMiArNDgs
NyBAQCBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiAKIGJvb2wgR2V0QnlJZFN0YXR1czo6YXBwZW5kVmFy
aWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCkKIHsKLSAgICAvLyBBdHRlbXB0IHRv
IG1lcmdlIHRoaXMgdmFyaWFudCB3aXRoIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFyaWFudC4KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV92YXJpYW50c1tpXS5hdHRlbXB0VG9NZXJnZSh2YXJpYW50KSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMg
bm8gb3ZlcmxhcC4gV2Ugc2hvdWxkIGhhdmUgcHJ1bmVkIG91dCBvcHBvcnR1bml0aWVzIGZvcgot
ICAgIC8vIG92ZXJsYXAgYnV0IGl0J3MgcG9zc2libGUgdGhhdCBhbiBpbmxpbmUgY2FjaGUgZ290
IGludG8gYSB3ZWlyZCBzdGF0ZS4gV2UgYXJlCi0gICAgLy8gZGVmZW5zaXZlIGFuZCBiYWlsIGlm
IHdlIGRldGVjdCBjcmF6eS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV92YXJpYW50c1tpXS5zdHJ1Y3R1cmVTZXQo
KS5vdmVybGFwcyh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgCi0gICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRz
LCB2YXJpYW50KTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtNDMyLDE0ICs0MTgsNyBA
QCB2b2lkIEdldEJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1CiB7CiAgICAgaWYgKG1f
c3RhdGUgIT0gU2ltcGxlKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklYTUU6IFdl
IGNvdWxkIGFsc28gZmlsdGVyIHRoZSB2YXJpYW50cyB0aGVtc2VsdmVzLgotICAgIAotICAgIG1f
dmFyaWFudHMucmVtb3ZlQWxsTWF0Y2hpbmcoCi0gICAgICAgIFsmXSAoR2V0QnlJZFZhcmlhbnQm
IHZhcmlhbnQpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuICF2YXJpYW50LnN0cnVjdHVy
ZVNldCgpLm92ZXJsYXBzKHNldCk7Ci0gICAgICAgIH0pOwotICAgIAorICAgIGZpbHRlcklDU3Rh
dHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKICAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5
KCkpCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyMzE5
NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICBTdGF0ZSBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9CiAgICAgYm9vbCBpc0N1c3RvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gQ3VzdG9tOyB9CiAgICAgYm9vbCBpc01vZHVsZU5hbWVzcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTW9kdWxlTmFtZXNwYWNlOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNp
b24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEdldEJ5
SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlhbnQmKTsKICAgICAKICAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KLSAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0
OyB9CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVy
ZVNldDsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNV
dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0
YXR1c1V0aWxzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lDU3RhdHVzVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5cGUs
IHR5cGVuYW1lIFZhcmlhbnRUeXBlPgorYm9vbCBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQoVmFyaWFu
dFZlY3RvclR5cGUmIHZhcmlhbnRzLCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkKK3sKKyAg
ICAvLyBBdHRlbXB0IHRvIG1lcmdlIHRoaXMgdmFyaWFudCB3aXRoIGFuIGFscmVhZHkgZXhpc3Rp
bmcgdmFyaWFudC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKHZhcmlhbnRzW2ldLmF0dGVtcHRUb01lcmdlKHZhcmlhbnQp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3Vy
ZSB0aGVyZSBpcyBubyBvdmVybGFwLiBXZSBzaG91bGQgaGF2ZSBwcnVuZWQgb3V0IG9wcG9ydHVu
aXRpZXMgZm9yCisgICAgLy8gb3ZlcmxhcCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IGFuIGlubGlu
ZSBjYWNoZSBnb3QgaW50byBhIHdlaXJkIHN0YXRlLiBXZSBhcmUKKyAgICAvLyBkZWZlbnNpdmUg
YW5kIGJhaWwgaWYgd2UgZGV0ZWN0IGNyYXp5LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2YXJpYW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAodmFyaWFudHNbaV0uc3RydWN0
dXJlU2V0KCkub3ZlcmxhcHModmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5
cGU+Cit2b2lkIGZpbHRlcklDU3RhdHVzVmFyaWFudHMoVmFyaWFudFZlY3RvclR5cGUmIHZhcmlh
bnRzLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgY291bGQg
YWxzbyBmaWx0ZXIgdGhlIHZhcmlhbnRzIHRoZW1zZWx2ZXMuCisgICAgCisgICAgbV92YXJpYW50
cy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChhdXRvJiB2YXJpYW50KSAtPiBib29s
IHsKKyAgICAgICAgICAgIHJldHVybiAhdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhz
ZXQpOworICAgICAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNl
T2ZTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbnN0YW5jZU9mU3RhdHVzLmgiCisKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxz
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBJ
bnN0YW5jZU9mU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50JiB2
YXJpYW50KQoreworICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywg
dmFyaWFudCk7Cit9CisKK0luc3RhbmNlT2ZTdGF0dXMgSW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0
ZUZvcigKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3R1YkluZm9NYXAmIGluZm9NYXAsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7CisgICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cyByZXN1bHQ7Cisj
aWYgRU5BQkxFKERGR19KSVQpCisgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxvY2tl
ciwgY29kZUJsb2NrLCBtYXAuZ2V0KGJ5dGVjb2RlSW5kZXgpKTsKKworICAgIGlmICghcmVzdWx0
LnRha2VzU2xvd1BhdGgoKSkgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2sgPSBwcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHVubGlua2VkQ29kZUJsb2NrLT5tX2xvY2spOworICAg
ICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVx
dWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlKSkKKyAgICAgICAgICAgIHx8IHVu
bGlua2VkQ29kZUJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0
ZShieXRlY29kZUluZGV4LCBCYWRDb25zdGFudENhY2hlKSkpCisgICAgICAgICAgICByZXR1cm4g
VGFrZXNTbG93UGF0aDsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbmZvTWFwKTsK
KyAgICBVTlVTRURfUEFSQU0oY29kZU9yaWdpbik7CisjZW5kaWYKKyAgICAKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCisjaWYgRU5BQkxFKERGR19KSVQpCitJbnN0YW5jZU9mU3RhdHVzIEluc3Rh
bmNlT2ZTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKKyAgICBjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbykKK3sKKyAgICBpZiAoIXN0dWJJbmZvIHx8ICFzdHViSW5mby0+ZXZlckNvbnNpZGVy
ZWQpCisgICAgICAgIHJldHVybiBOb0luZm9ybWF0aW9uOworICAgIAorICAgIGlmIChzdHViSW5m
by0+dG9va1Nsb3dQYXRoKQorICAgICAgICByZXR1cm4gVGFrZXNTbG93UGF0aDsKKyAgICAKKyAg
ICBpZiAoc3R1YkluZm8tPmNhY2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJl
dHVybiBUYWtlc1Nsb3dQYXRoOyAvLyBUaGlzIGlzIGNvbnNlcnZhdGl2ZS4gSXQgY291bGQgYmUg
dGhhdCB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgIAorICAgIFBvbHltb3JwaGljQWNjZXNz
KiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICBJbnN0YW5jZU9mU3RhdHVzIHJlc3VsdDsK
KyAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUo
KTsgKytsaXN0SW5kZXgpIHsKKyAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlz
dC0+YXQobGlzdEluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGlmIChhY2Nlc3MudHlwZSgpID09
IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZHZW5lcmljKQorICAgICAgICAgICAgcmV0dXJuIFRha2Vz
U2xvd1BhdGg7CisgICAgICAgIAorICAgICAgICBpZiAoIWFjY2Vzcy5jb25kaXRpb25TZXQoKS5z
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQ
YXRoOworICAgICAgICAKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZhcmlhbnQoSW5zdGFuY2VPZlZh
cmlhbnQoCisgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksCisgICAgICAgICAgICBhY2Nl
c3MuY29uZGl0aW9uU2V0KCksCisgICAgICAgICAgICBhY2Nlc3MuYXM8SW5zdGFuY2VPZkFjY2Vz
c0Nhc2U+KCkucHJvdG90eXBlKCksCisgICAgICAgICAgICBhY2Nlc3MudHlwZSgpID09IEFjY2Vz
c0Nhc2U6Okluc3RhbmNlT2ZIaXQpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwordm9pZCBJbnN0YW5jZU9mU3RhdHVzOjpm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQpCit7CisgICAgaWYgKG1fc3Rh
dGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm47CisgICAgZmlsdGVySUNTdGF0dXNWYXJpYW50
cyhtX3ZhcmlhbnRzLCBzdHJ1Y3R1cmVTZXQpOworICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHko
KSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0
YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
YW5jZU9mU3RhdHVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xv
Y2suaCIKKyNpbmNsdWRlICJJbnN0YW5jZU9mVmFyaWFudC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQWNjZXNzQ2FzZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFN0cnVjdHVyZVN0
dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8q
LCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKKworY2xhc3MgSW5zdGFu
Y2VPZlN0YXR1cyB7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIC8vIEl0J3Mg
dW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9JbmZvcm1hdGlv
biwKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGluIGEgc2ltcGxlIHdheS4KKyAg
ICAgICAgU2ltcGxlLAorICAgICAgICAKKyAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRlbiB0
YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgVGFrZXNTbG93UGF0aAorICAgIH07CisgICAgCisgICAg
SW5zdGFuY2VPZlN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgSW5zdGFuY2VPZlN0YXR1cyhTdGF0ZSBzdGF0
ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRl
ID09IE5vSW5mb3JtYXRpb24gfHwgc3RhdGUgPT0gTWFrZXNDYWxscyk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBJbnN0YW5jZU9mU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgU3R1Yklu
Zm9NYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyNl
bmRpZgorICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQor
ICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3Jt
YXRpb247IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNT
ZXQoKTsgfQorICAgIAorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
ID09IFNpbXBsZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgPT0gVGFrZXNTbG93UGF0aDsgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0
cnVjdHVyZVNldCYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIHZvaWQgYXBwZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9mVmFyaWFu
dCYpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9yPEluc3RhbmNlT2ZWYXJp
YW50LCAyPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZWYXJpYW50
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dGFuY2VPZlZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkluc3RhbmNlT2ZWYXJpYW50LmgiCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitJ
bnN0YW5jZU9mVmFyaWFudDo6SW5zdGFuY2VPZlZhcmlhbnQoCisgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBzdHJ1Y3R1cmVTZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQsCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSwgYm9vbCBpc0hpdCkKKyAgICA6IG1f
c3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlv
blNldCkKKyAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKKyAgICAsIG1faXNIaXQoaXNIaXQp
Cit7Cit9CisKK2Jvb2wgSW5zdGFuY2VPZlZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IElu
c3RhbmNlT2ZWYXJpYW50JiBvdGhlcikKK3sKKyAgICBpZiAobV9wcm90b3R5cGUgIT0gb3RoZXIu
bV9wcm90b3R5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9pc0hp
dCAhPSBvdGhlci5tX2lzSGl0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25T
ZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgaWYgKCFtZXJnZWRDb25k
aXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jb25kaXRp
b25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgCisgICAgbV9zdHJ1Y3R1cmVTZXQubWVy
Z2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIEluc3RhbmNlT2ZWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCit2b2lkIEluc3RhbmNlT2ZWYXJp
YW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KAorICAgICAg
ICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsIGluQ29udGV4
dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICIsIgorICAgICAgICAiIHByb3RvdHlwZSA9ICIs
IGluQ29udGV4dChKU1ZhbHVlKG1fcHJvdG90eXBlKSwgY29udGV4dCksICIsIgorICAgICAgICAi
IGlzSGl0ID0gIiwgbV9pc0hpdCwgIj4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFy
aWFudC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bnN0YW5jZU9mVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIlN0cnVj
dHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSW5zdGFuY2VPZlN0YXR1czsK
KworY2xhc3MgSW5zdGFuY2VPZlZhcmlhbnQgeworcHVibGljOgorICAgIEluc3RhbmNlT2ZWYXJp
YW50KAorICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmID0gU3RydWN0dXJlU2V0KCksCisgICAg
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0KCksCisgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUsIGJvb2wgaXNIaXQpOwor
ICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fc3Ry
dWN0dXJlU2V0LnNpemUoKTsgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0
dXJlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KKyAgICBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZVNldCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CisgICAgCisgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisgICAgCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9CisgICAgCisgICAgYm9vbCBpc0hpdCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNIaXQ7IH0KKyAgICAKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNv
bnN0IEluc3RhbmNlT2ZWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVt
cENvbnRleHQqKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEluc3Rh
bmNlT2ZTdGF0dXM7CisgICAgCisgICAgU3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OworICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OworICAgIEpTT2JqZWN0
KiBwcm90b3R5cGU7CisgICAgYm9vbCBtX2lzSGl0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340724</attachid>
            <date>2018-05-18 12:04:24 -0700</date>
            <delta_ts>2018-05-18 13:09:18 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32280</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKICNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5o
IgogI2luY2x1ZGUgIkludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkludHJpbnNpY0dl
dHRlckFjY2Vzc0Nhc2UuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00NywyMiArNDgs
NyBAQCBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiAKIGJvb2wgR2V0QnlJZFN0YXR1czo6YXBwZW5kVmFy
aWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCkKIHsKLSAgICAvLyBBdHRlbXB0IHRv
IG1lcmdlIHRoaXMgdmFyaWFudCB3aXRoIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFyaWFudC4KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV92YXJpYW50c1tpXS5hdHRlbXB0VG9NZXJnZSh2YXJpYW50KSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMg
bm8gb3ZlcmxhcC4gV2Ugc2hvdWxkIGhhdmUgcHJ1bmVkIG91dCBvcHBvcnR1bml0aWVzIGZvcgot
ICAgIC8vIG92ZXJsYXAgYnV0IGl0J3MgcG9zc2libGUgdGhhdCBhbiBpbmxpbmUgY2FjaGUgZ290
IGludG8gYSB3ZWlyZCBzdGF0ZS4gV2UgYXJlCi0gICAgLy8gZGVmZW5zaXZlIGFuZCBiYWlsIGlm
IHdlIGRldGVjdCBjcmF6eS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV92YXJpYW50c1tpXS5zdHJ1Y3R1cmVTZXQo
KS5vdmVybGFwcyh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgCi0gICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRz
LCB2YXJpYW50KTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtNDMyLDE0ICs0MTgsNyBA
QCB2b2lkIEdldEJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1CiB7CiAgICAgaWYgKG1f
c3RhdGUgIT0gU2ltcGxlKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklYTUU6IFdl
IGNvdWxkIGFsc28gZmlsdGVyIHRoZSB2YXJpYW50cyB0aGVtc2VsdmVzLgotICAgIAotICAgIG1f
dmFyaWFudHMucmVtb3ZlQWxsTWF0Y2hpbmcoCi0gICAgICAgIFsmXSAoR2V0QnlJZFZhcmlhbnQm
IHZhcmlhbnQpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuICF2YXJpYW50LnN0cnVjdHVy
ZVNldCgpLm92ZXJsYXBzKHNldCk7Ci0gICAgICAgIH0pOwotICAgIAorICAgIGZpbHRlcklDU3Rh
dHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKICAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5
KCkpCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyMzE5
NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICBTdGF0ZSBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9CiAgICAgYm9vbCBpc0N1c3RvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gQ3VzdG9tOyB9CiAgICAgYm9vbCBpc01vZHVsZU5hbWVzcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTW9kdWxlTmFtZXNwYWNlOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNp
b24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEdldEJ5
SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlhbnQmKTsKICAgICAKICAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KLSAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0
OyB9CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVy
ZVNldDsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNV
dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0
YXR1c1V0aWxzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lDU3RhdHVzVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5cGUs
IHR5cGVuYW1lIFZhcmlhbnRUeXBlPgorYm9vbCBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQoVmFyaWFu
dFZlY3RvclR5cGUmIHZhcmlhbnRzLCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkKK3sKKyAg
ICAvLyBBdHRlbXB0IHRvIG1lcmdlIHRoaXMgdmFyaWFudCB3aXRoIGFuIGFscmVhZHkgZXhpc3Rp
bmcgdmFyaWFudC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKHZhcmlhbnRzW2ldLmF0dGVtcHRUb01lcmdlKHZhcmlhbnQp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3Vy
ZSB0aGVyZSBpcyBubyBvdmVybGFwLiBXZSBzaG91bGQgaGF2ZSBwcnVuZWQgb3V0IG9wcG9ydHVu
aXRpZXMgZm9yCisgICAgLy8gb3ZlcmxhcCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IGFuIGlubGlu
ZSBjYWNoZSBnb3QgaW50byBhIHdlaXJkIHN0YXRlLiBXZSBhcmUKKyAgICAvLyBkZWZlbnNpdmUg
YW5kIGJhaWwgaWYgd2UgZGV0ZWN0IGNyYXp5LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2YXJpYW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAodmFyaWFudHNbaV0uc3RydWN0
dXJlU2V0KCkub3ZlcmxhcHModmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5
cGU+Cit2b2lkIGZpbHRlcklDU3RhdHVzVmFyaWFudHMoVmFyaWFudFZlY3RvclR5cGUmIHZhcmlh
bnRzLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgY291bGQg
YWxzbyBmaWx0ZXIgdGhlIHZhcmlhbnRzIHRoZW1zZWx2ZXMuCisgICAgCisgICAgbV92YXJpYW50
cy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChhdXRvJiB2YXJpYW50KSAtPiBib29s
IHsKKyAgICAgICAgICAgIHJldHVybiAhdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhz
ZXQpOworICAgICAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNl
T2ZTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbnN0YW5jZU9mU3RhdHVzLmgiCisKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxz
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBJ
bnN0YW5jZU9mU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50JiB2
YXJpYW50KQoreworICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywg
dmFyaWFudCk7Cit9CisKK0luc3RhbmNlT2ZTdGF0dXMgSW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0
ZUZvcigKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3R1YkluZm9NYXAmIGluZm9NYXAsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7CisgICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cyByZXN1bHQ7Cisj
aWYgRU5BQkxFKERGR19KSVQpCisgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxvY2tl
ciwgY29kZUJsb2NrLCBtYXAuZ2V0KGJ5dGVjb2RlSW5kZXgpKTsKKworICAgIGlmICghcmVzdWx0
LnRha2VzU2xvd1BhdGgoKSkgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2sgPSBwcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHVubGlua2VkQ29kZUJsb2NrLT5tX2xvY2spOworICAg
ICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVx
dWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlKSkKKyAgICAgICAgICAgIHx8IHVu
bGlua2VkQ29kZUJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0
ZShieXRlY29kZUluZGV4LCBCYWRDb25zdGFudENhY2hlKSkpCisgICAgICAgICAgICByZXR1cm4g
VGFrZXNTbG93UGF0aDsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbmZvTWFwKTsK
KyAgICBVTlVTRURfUEFSQU0oY29kZU9yaWdpbik7CisjZW5kaWYKKyAgICAKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCisjaWYgRU5BQkxFKERGR19KSVQpCitJbnN0YW5jZU9mU3RhdHVzIEluc3Rh
bmNlT2ZTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKKyAgICBjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbykKK3sKKyAgICBpZiAoIXN0dWJJbmZvIHx8ICFzdHViSW5mby0+ZXZlckNvbnNpZGVy
ZWQpCisgICAgICAgIHJldHVybiBOb0luZm9ybWF0aW9uOworICAgIAorICAgIGlmIChzdHViSW5m
by0+dG9va1Nsb3dQYXRoKQorICAgICAgICByZXR1cm4gVGFrZXNTbG93UGF0aDsKKyAgICAKKyAg
ICBpZiAoc3R1YkluZm8tPmNhY2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJl
dHVybiBUYWtlc1Nsb3dQYXRoOyAvLyBUaGlzIGlzIGNvbnNlcnZhdGl2ZS4gSXQgY291bGQgYmUg
dGhhdCB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgIAorICAgIFBvbHltb3JwaGljQWNjZXNz
KiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICBJbnN0YW5jZU9mU3RhdHVzIHJlc3VsdDsK
KyAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUo
KTsgKytsaXN0SW5kZXgpIHsKKyAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlz
dC0+YXQobGlzdEluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGlmIChhY2Nlc3MudHlwZSgpID09
IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZHZW5lcmljKQorICAgICAgICAgICAgcmV0dXJuIFRha2Vz
U2xvd1BhdGg7CisgICAgICAgIAorICAgICAgICBpZiAoIWFjY2Vzcy5jb25kaXRpb25TZXQoKS5z
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQ
YXRoOworICAgICAgICAKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZhcmlhbnQoSW5zdGFuY2VPZlZh
cmlhbnQoCisgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksCisgICAgICAgICAgICBhY2Nl
c3MuY29uZGl0aW9uU2V0KCksCisgICAgICAgICAgICBhY2Nlc3MuYXM8SW5zdGFuY2VPZkFjY2Vz
c0Nhc2U+KCkucHJvdG90eXBlKCksCisgICAgICAgICAgICBhY2Nlc3MudHlwZSgpID09IEFjY2Vz
c0Nhc2U6Okluc3RhbmNlT2ZIaXQpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworSlNPYmplY3QqIEluc3RhbmNlT2ZTdGF0
dXM6OmNvbW1vblByb3RvdHlwZSgpIGNvbnN0Cit7CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9
IG51bGxwdHI7CisgICAgZm9yIChJbnN0YW5jZU9mVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpIHsKKyAgICAgICAgaWYgKCFwcm90b3R5cGUpIHsKKyAgICAgICAgICAgIHByb3RvdHlwZSA9
IHZhcmlhbnQucHJvdG90eXBlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocHJvdG90eXBlICE9IHZhcmlhbnQucHJvdG90eXBlKCkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwordm9p
ZCBJbnN0YW5jZU9mU3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm47CisgICAg
ZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzdHJ1Y3R1cmVTZXQpOworICAgIGlm
IChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2lu
Y2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJJbnN0YW5jZU9mVmFyaWFudC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQWNjZXNzQ2FzZTsKK2NsYXNzIENvZGVCbG9j
azsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdp
biwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5m
b01hcDsKKworY2xhc3MgSW5zdGFuY2VPZlN0YXR1cyB7CitwdWJsaWM6CisgICAgZW51bSBTdGF0
ZSB7CisgICAgICAgIC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4K
KyAgICAgICAgTm9JbmZvcm1hdGlvbiwKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgY2FjaGVk
IGluIGEgc2ltcGxlIHdheS4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAKKyAgICAgICAgLy8g
SXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgVGFrZXNTbG93UGF0
aAorICAgIH07CisgICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cygpCisgICAgICAgIDogbV9zdGF0
ZShOb0luZm9ybWF0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgSW5zdGFu
Y2VPZlN0YXR1cyhTdGF0ZSBzdGF0ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHN0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgc3RhdGUgPT0gTWFrZXND
YWxscyk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJbnN0YW5jZU9mU3RhdHVzIGNvbXB1dGVG
b3IoQ29kZUJsb2NrKiwgU3R1YkluZm9NYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAg
ICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1cyBjb21w
dXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8qKTsKKyNlbmRpZgorICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQorICAgIAorICAgIGJvb2wgaXNTaW1wbGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aDsgfQorICAgIAorICAg
IEpTT2JqZWN0KiBjb21tb25Qcm90b3R5cGUoKSBjb25zdDsKKyAgICAKKyAgICBzaXplX3QgbnVt
VmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0
IFZlY3RvcjxJbnN0YW5jZU9mVmFyaWFudCwgMj4mIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4g
bV92YXJpYW50czsgfQorICAgIGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50JiBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CisgICAgY29uc3QgSW5zdGFu
Y2VPZlZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChp
bmRleCk7IH0KKworICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQg
YXBwZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYpOworICAgIAorICAgIFN0YXRl
IG1fc3RhdGU7CisgICAgVmVjdG9yPEluc3RhbmNlT2ZWYXJpYW50LCAyPiBtX3ZhcmlhbnRzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZWYXJpYW50LmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlZhcmlhbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Rh
bmNlT2ZWYXJpYW50LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitJbnN0YW5jZU9mVmFyaWFudDo6SW5z
dGFuY2VPZlZhcmlhbnQoCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgSlNPYmpl
Y3QqIHByb3RvdHlwZSwgYm9vbCBpc0hpdCkKKyAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVy
ZVNldCkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKKyAgICAsIG1fcHJvdG90
eXBlKHByb3RvdHlwZSkKKyAgICAsIG1faXNIaXQoaXNIaXQpCit7Cit9CisKK2Jvb2wgSW5zdGFu
Y2VPZlZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50JiBvdGhl
cikKK3sKKyAgICBpZiAobV9wcm90b3R5cGUgIT0gb3RoZXIubV9wcm90b3R5cGUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9pc0hpdCAhPSBvdGhlci5tX2lzSGl0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5t
X2NvbmRpdGlvblNldCk7CisgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRp
b25TZXQ7CisgICAgCisgICAgbV9zdHJ1Y3R1cmVTZXQubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmVT
ZXQpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEluc3RhbmNlT2ZWYXJpYW50
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQs
IG51bGxwdHIpOworfQorCit2b2lkIEluc3RhbmNlT2ZWYXJpYW50OjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgb3V0LnByaW50KAorICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1
Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29u
dGV4dCksICIsIgorICAgICAgICAiIHByb3RvdHlwZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1f
cHJvdG90eXBlKSwgY29udGV4dCksICIsIgorICAgICAgICAiIGlzSGl0ID0gIiwgbV9pc0hpdCwg
Ij4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgSW5zdGFuY2VPZlN0YXR1czsKKworY2xhc3MgSW5zdGFuY2VPZlZh
cmlhbnQgeworcHVibGljOgorICAgIEluc3RhbmNlT2ZWYXJpYW50KAorICAgICAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmID0gU3RydWN0dXJlU2V0KCksCisgICAgICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCisgICAgICAg
IEpTT2JqZWN0KiBwcm90b3R5cGUsIGJvb2wgaXNIaXQpOworICAgIAorICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUoKTsgfQor
ICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KKyAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIHsg
cmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0
OyB9CisgICAgCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
dG90eXBlOyB9CisgICAgCisgICAgYm9vbCBpc0hpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIaXQ7
IH0KKyAgICAKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50
JiBvdGhlcik7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
dm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAg
ICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEluc3RhbmNlT2ZTdGF0dXM7CisgICAgCisg
ICAgU3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IG1fY29uZGl0aW9uU2V0OworICAgIEpTT2JqZWN0KiBwcm90b3R5cGU7CisgICAgYm9v
bCBtX2lzSGl0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzM3MSw2ICsz
MzcxLDM4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE1hdGNoU3Ry
dWN0dXJlOgorICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBiYXNlU2V0OworICAgICAgICAK
KyAgICAgICAgQm9vbGVhbkxhdHRpY2UgcmVzdWx0ID0gQm9vbGVhbkxhdHRpY2U6OkJvdHRvbTsK
KyAgICAgICAgZm9yIChNYXRjaFN0cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQgOiBub2RlLT5tYXRj
aFN0cnVjdHVyZURhdGEoKS52YXJpYW50cykgeworICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUgPSB2YXJpYW50LnN0cnVjdHVyZTsKKyAgICAgICAgICAgIGlmICghYmFz
ZS5jb250YWlucyhzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHN0cnVjdHVyZSk7CisgICAgICAgICAg
ICByZXN1bHQgPSBsdWJCb29sZWFuTGF0dGljZShyZXN1bHQsIHZhcmlhbnQucmVzdWx0KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNJbmZpbml0
ZSgpIHx8IGJhc2VTZXQuc2l6ZSgpIDwgYmFzZS5tX3N0cnVjdHVyZS5zaXplKCkpCisgICAgICAg
ICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAKKyAgICAgICAg
aWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBiYXNl
U2V0KSA9PSBDb250cmFkaWN0aW9uKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZh
bHNlKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgIGNhc2Ug
Qm9vbGVhbkxhdHRpY2U6OkZhbHNlOgorICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCb29sZWFu
TGF0dGljZTo6VHJ1ZToKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbih0
cnVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBQaGk6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3ODMsMTIgKzQ3ODMsNDAgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHR1cm4gdGhpcyBpbnRvIGVpdGhlciBhIENoZWNrU3RydWN0dXJlIGZvbGxvd2VkIGJ5IGEgY29u
c3RhbnQsIG9yCi0gICAgICAgICAgICAvLyBzb21lIGtpbmQgb2YgTXVsdGlJbnN0YW5jZU9mIHRo
aW5nLCBpZiB0aGUgSW5zdGFuY2VPZiBJQyBpcyBzdGFibGUuCi0gICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Njk1CiAgICAgICAgICAgICBh
dXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9wSW5zdGFuY2VvZio+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEluc3RhbmNlT2ZTdGF0dXMg
c3RhdHVzID0gSW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fc3R1
YkluZm9zLAorICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLnZh
bHVlKCkpKTsKICAgICAgICAgICAgIE5vZGUqIHByb3RvdHlwZSA9IGdldChWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUucHJvdG90eXBlKCkpKTsKKworICAgICAgICAgICAgLy8gT25seSBpbmxpbmUg
aXQgaWYgaXQncyBTaW1wbGUgd2l0aCBhIGNvbW1vblByb3RvdHlwZTsgYm90dG9tL3RvcCBvciB2
YXJpYWJsZQorICAgICAgICAgICAgLy8gcHJvdG90eXBlcyBib3RoIGdldCBoYW5kbGVkIGJ5IHRo
ZSBJQy4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgYm90dG9tICh1bnByb2ZpbGVkKQorICAgICAgICAg
ICAgLy8gaW5zdGFuY2VvZiBJQ3MgYmVjYXVzZSB0aGUgcHJvZml0IG9mIHRoaXMgb3B0aW1pemF0
aW9uIGlzIGZhaXJseSBsb3cuIFNvLCBpbiB0aGUKKyAgICAgICAgICAgIC8vIGFic2VuY2Ugb2Yg
YW55IGluZm9ybWF0aW9uLCBpdCdzIGJldHRlciB0byBhdm9pZCBtYWtpbmcgdGhpcyBiZSB0aGUg
Y2F1c2Ugb2YgYQorICAgICAgICAgICAgLy8gcmVjb21waWxhdGlvbi4KKyAgICAgICAgICAgIGlm
IChKU09iamVjdCogY29tbW9uUHJvdG90eXBlID0gc3RhdHVzLmNvbW1vblByb3RvdHlwZSgpKSB7
CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZy
ZWV6ZShjb21tb25Qcm90b3R5cGUpKSwgcHJvdG90eXBlKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZURhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbWF0Y2hT
dHJ1Y3R1cmVEYXRhLmFkZCgpOworICAgICAgICAgICAgICAgIGZvciAoSW5zdGFuY2VPZlZhcmlh
bnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgICAgICBj
aGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE1hdGNoU3RydWN0dXJlVmFyaWFudCBtYXRjaFZhcmlhbnQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaFZhcmlhbnQuc3RydWN0dXJlID0gbV9ncmFwaC5yZWdp
c3RlcihzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hWYXJpYW50LnJl
c3VsdCA9IHZhcmlhbnQuaXNIaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS0+YXBwZW5kKG1hdGNoVmFyaWFudCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgTm9kZSogbWF0Y2ggPSBhZGRUb0dyYXBoKE1hdGNoU3RydWN0dXJlLCBPcEluZm8o
ZGF0YSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLmRzdCgpKSwgbWF0Y2gpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3Rh
bmNlb2YpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdCgpKSwgYWRkVG9HcmFwaChJbnN0YW5jZU9mLCB2YWx1
ZSwgcHJvdG90eXBlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbnN0YW5jZW9mKTsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NDUsNiArNTQ1LDEwIEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsK
ICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBNaXNjRmllbGRzLCBub2Rl
LT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJ
RCk7CisgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQXJyYXlTbGljZToKICAgICAgICAgcmVh
ZChNaXNjRmllbGRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDYgKzMxMCw3IEBAIGJvb2wgZG9lc0dDKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEF0b21pY3NTdWI6CiAgICAgY2FzZSBB
dG9taWNzWG9yOgogICAgIGNhc2UgQXRvbWljc0lzTG9ja0ZyZWU6CisgICAgY2FzZSBNYXRjaFN0
cnVjdHVyZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBQdXNoV2l0aFNjb3Bl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjMxOTYx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUyLDYgKzEwNTIsNyBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dp
dGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNl
dERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXRE
YXRhOworICAgIEJhZzxNYXRjaFN0cnVjdHVyZURhdGE+IG1fbWF0Y2hTdHJ1Y3R1cmVEYXRhOwog
ICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGE7CiAgICAgQmFnPENhbGxWYXJhcmdzRGF0YT4gbV9jYWxsVmFyYXJnc0RhdGE7CiAgICAg
QmFnPExvYWRWYXJhcmdzRGF0YT4gbV9sb2FkVmFyYXJnc0RhdGE7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDE1IEBAIHN0
cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2Uo
KSBjb25zdDsKIH07CiAKK3N0cnVjdCBNYXRjaFN0cnVjdHVyZVZhcmlhbnQgeworICAgIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlOworICAgIGJvb2wgcmVzdWx0OworfTsKKworc3RydWN0
IE1hdGNoU3RydWN0dXJlRGF0YSB7CisgICAgVmVjdG9yPE1hdGNoU3RydWN0dXJlVmFyaWFudCwg
Mj4gdmFyaWFudHM7Cit9OworCiBzdHJ1Y3QgTmV3QXJyYXlCdWZmZXJEYXRhIHsKICAgICB1bmlv
biB7CiAgICAgICAgIHN0cnVjdCB7CkBAIC0xODUzLDYgKzE4NjIsMTcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gKm1fb3BJbmZvLmFzPE11bHRpUHV0QnlPZmZzZXREYXRhKj4oKTsKICAgICB9
CiAgICAgCisgICAgYm9vbCBoYXNNYXRjaFN0cnVjdHVyZURhdGEoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG9wKCkgPT0gTWF0Y2hTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIE1hdGNoU3Ry
dWN0dXJlRGF0YSYgbWF0Y2hTdHJ1Y3R1cmVEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCho
YXNNYXRjaFN0cnVjdHVyZURhdGEoKSk7CisgICAgICAgIHJldHVybiAqbV9vcEluZm8uYXM8TWF0
Y2hTdHJ1Y3R1cmVEYXRhKj4oKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjMxOTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDYsNiArMzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAg
IG1hY3JvKE92ZXJyaWRlc0hhc0luc3RhbmNlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3Vs
dEJvb2xlYW4pIFwKICAgICBtYWNybyhJbnN0YW5jZU9mLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJbnN0YW5jZU9mQ3VzdG9tLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBtYWNybyhNYXRjaFN0cnVjdHVyZSwg
Tm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgbWFjcm8oSXNDZWxsV2l0aFR5cGUsIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNFbXB0eSwgTm9kZVJlc3VsdEJvb2xlYW4p
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUyLDYgKzQ1Miw3IEBAIGJvb2wgc2FmZVRv
RXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAg
Y2FzZSBBdG9taWNzSXNMb2NrRnJlZToKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJn
dW1lbnRzOgorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgY2FzZSBBcnJheVNsaWNlOgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDcgQEAKIAkJ
MEZCMTRFMTgxODBGQTIxODAwOUI2QjREIC8qIEJhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMUEx
ODEwRTFEQTAwOUI2QjREIC8qIEJhZ1RvSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWdUb0hh
c2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMzE3QzMxQzQ4ODAwMTAw
N0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3lzdGVtVHJhY2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIzOTlC
ODIwQUY1QTU4MDAxN0UyMTMgLyogQm9vbGVhbkxhdHRpY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQm9vbGVhbkxhdHRpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZCNDY3ODIxRkRFMjgyQjAwM0ZDQjA5IC8qIENvbmN1cnJlbnRCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudEJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0Njc4MzFGREUyODJDMDAzRkNCMDkgLyogQ29uY3Vy
cmVudFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50
VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzQ0ODgyMTZGRTlGRTEw
MDg0NEJFOSAvKiBQcm9jZXNzSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJvY2Vzc0lELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTMsNiArODE0LDcg
QEAKIAkJCQkxQTk0NEY0NjFDM0Q4ODE0MDA1QkQyOEMgLyogQmxvY2tQdHIuaCAqLywKIAkJCQlB
OEE0NzI2NDE1MUE4MjVBMDA0MTIzRkYgLyogQmxvY2tTdGFjay5oICovLAogCQkJCUE4QTQ3MjY1
MTUxQTgyNUEwMDQxMjNGRiAvKiBCbG9vbUZpbHRlci5oICovLAorCQkJCTBGQjM5OUI4MjBBRjVB
NTgwMDE3RTIxMyAvKiBCb29sZWFuTGF0dGljZS5oICovLAogCQkJCTBGOTMyNzRBMUMxN0Y0Qjcw
MENGNjU2NCAvKiBCb3guaCAqLywKIAkJCQk3QzNGNzIzOTFENzg4MTE5MDA2NzRFMjYgLyogQnJp
Z2FuZC5oICovLAogCQkJCTBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0Lmgg
Ki8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Cb29sZWFuTGF0dGljZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0Jvb2xlYW5MYXR0aWNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvQm9vbGVhbkxhdHRpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCituYW1lc3BhY2UgV1RGIHsKKworZW51bSBjbGFzcyBCb29sZWFuTGF0dGljZSA6IHVp
bnQ4X3QgeworICAgIEJvdHRvbSA9IDAsCisgICAgRmFsc2UgPSAxLAorICAgIFRydWUgPSAyLAor
ICAgIFRvID0gMworfTsKKworaW5saW5lIEJvb2xlYW5MYXR0aWNlIGx1YkJvb2xlYW5MYXR0aWNl
KEJvb2xlYW5MYXR0aWNlIGEsIEJvb2xlYW5MYXR0aWNlIGIpCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEJvb2xlYW5MYXR0aWNlPihzdGF0aWNfY2FzdDx1aW50OF90PihhKSB8IHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oYikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpCb29sZWFuTGF0dGljZTsKK3VzaW5nIFdURjo6bHViQm9vbGVhbkxhdHRpY2U7CisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCBzZXQoV1RGX1BV
QkxJQ19IRUFERVJTCiAgICAgQmxvY2tQdHIuaAogICAgIEJsb2NrU3RhY2suaAogICAgIEJsb29t
RmlsdGVyLmgKKyAgICBCb29sZWFuTGF0dGljZS5oCiAgICAgQm94LmgKICAgICBCcmlnYW5kLmgK
ICAgICBCdWJibGVTb3J0LmgK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340731</attachid>
            <date>2018-05-18 13:09:18 -0700</date>
            <delta_ts>2018-05-18 14:50:13 -0700</delta_ts>
            <desc>maye it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40618</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKICNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5o
IgogI2luY2x1ZGUgIkludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkludHJpbnNpY0dl
dHRlckFjY2Vzc0Nhc2UuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00NywyMiArNDgs
NyBAQCBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiAKIGJvb2wgR2V0QnlJZFN0YXR1czo6YXBwZW5kVmFy
aWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCkKIHsKLSAgICAvLyBBdHRlbXB0IHRv
IG1lcmdlIHRoaXMgdmFyaWFudCB3aXRoIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFyaWFudC4KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV92YXJpYW50c1tpXS5hdHRlbXB0VG9NZXJnZSh2YXJpYW50KSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMg
bm8gb3ZlcmxhcC4gV2Ugc2hvdWxkIGhhdmUgcHJ1bmVkIG91dCBvcHBvcnR1bml0aWVzIGZvcgot
ICAgIC8vIG92ZXJsYXAgYnV0IGl0J3MgcG9zc2libGUgdGhhdCBhbiBpbmxpbmUgY2FjaGUgZ290
IGludG8gYSB3ZWlyZCBzdGF0ZS4gV2UgYXJlCi0gICAgLy8gZGVmZW5zaXZlIGFuZCBiYWlsIGlm
IHdlIGRldGVjdCBjcmF6eS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV92YXJpYW50c1tpXS5zdHJ1Y3R1cmVTZXQo
KS5vdmVybGFwcyh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgCi0gICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRz
LCB2YXJpYW50KTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtNDMyLDE0ICs0MTgsNyBA
QCB2b2lkIEdldEJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1CiB7CiAgICAgaWYgKG1f
c3RhdGUgIT0gU2ltcGxlKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklYTUU6IFdl
IGNvdWxkIGFsc28gZmlsdGVyIHRoZSB2YXJpYW50cyB0aGVtc2VsdmVzLgotICAgIAotICAgIG1f
dmFyaWFudHMucmVtb3ZlQWxsTWF0Y2hpbmcoCi0gICAgICAgIFsmXSAoR2V0QnlJZFZhcmlhbnQm
IHZhcmlhbnQpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuICF2YXJpYW50LnN0cnVjdHVy
ZVNldCgpLm92ZXJsYXBzKHNldCk7Ci0gICAgICAgIH0pOwotICAgIAorICAgIGZpbHRlcklDU3Rh
dHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKICAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5
KCkpCiAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyMzE5
NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICBTdGF0ZSBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9CiAgICAgYm9vbCBpc0N1c3RvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gQ3VzdG9tOyB9CiAgICAgYm9vbCBpc01vZHVsZU5hbWVzcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTW9kdWxlTmFtZXNwYWNlOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNp
b24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEdldEJ5
SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlhbnQmKTsKICAgICAKICAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KLSAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0
OyB9CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVy
ZVNldDsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNV
dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0
YXR1c1V0aWxzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lDU3RhdHVzVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5cGUs
IHR5cGVuYW1lIFZhcmlhbnRUeXBlPgorYm9vbCBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQoVmFyaWFu
dFZlY3RvclR5cGUmIHZhcmlhbnRzLCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkKK3sKKyAg
ICAvLyBBdHRlbXB0IHRvIG1lcmdlIHRoaXMgdmFyaWFudCB3aXRoIGFuIGFscmVhZHkgZXhpc3Rp
bmcgdmFyaWFudC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKHZhcmlhbnRzW2ldLmF0dGVtcHRUb01lcmdlKHZhcmlhbnQp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3Vy
ZSB0aGVyZSBpcyBubyBvdmVybGFwLiBXZSBzaG91bGQgaGF2ZSBwcnVuZWQgb3V0IG9wcG9ydHVu
aXRpZXMgZm9yCisgICAgLy8gb3ZlcmxhcCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IGFuIGlubGlu
ZSBjYWNoZSBnb3QgaW50byBhIHdlaXJkIHN0YXRlLiBXZSBhcmUKKyAgICAvLyBkZWZlbnNpdmUg
YW5kIGJhaWwgaWYgd2UgZGV0ZWN0IGNyYXp5LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2YXJpYW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAodmFyaWFudHNbaV0uc3RydWN0
dXJlU2V0KCkub3ZlcmxhcHModmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5
cGU+Cit2b2lkIGZpbHRlcklDU3RhdHVzVmFyaWFudHMoVmFyaWFudFZlY3RvclR5cGUmIHZhcmlh
bnRzLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgY291bGQg
YWxzbyBmaWx0ZXIgdGhlIHZhcmlhbnRzIHRoZW1zZWx2ZXMuCisgICAgCisgICAgbV92YXJpYW50
cy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChhdXRvJiB2YXJpYW50KSAtPiBib29s
IHsKKyAgICAgICAgICAgIHJldHVybiAhdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhz
ZXQpOworICAgICAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNl
T2ZTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbnN0YW5jZU9mU3RhdHVzLmgiCisKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxz
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBJ
bnN0YW5jZU9mU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50JiB2
YXJpYW50KQoreworICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywg
dmFyaWFudCk7Cit9CisKK0luc3RhbmNlT2ZTdGF0dXMgSW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0
ZUZvcigKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3R1YkluZm9NYXAmIGluZm9NYXAsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7CisgICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cyByZXN1bHQ7Cisj
aWYgRU5BQkxFKERGR19KSVQpCisgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxvY2tl
ciwgY29kZUJsb2NrLCBtYXAuZ2V0KGJ5dGVjb2RlSW5kZXgpKTsKKworICAgIGlmICghcmVzdWx0
LnRha2VzU2xvd1BhdGgoKSkgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2sgPSBwcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHVubGlua2VkQ29kZUJsb2NrLT5tX2xvY2spOworICAg
ICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVx
dWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlKSkKKyAgICAgICAgICAgIHx8IHVu
bGlua2VkQ29kZUJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0
ZShieXRlY29kZUluZGV4LCBCYWRDb25zdGFudENhY2hlKSkpCisgICAgICAgICAgICByZXR1cm4g
VGFrZXNTbG93UGF0aDsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbmZvTWFwKTsK
KyAgICBVTlVTRURfUEFSQU0oY29kZU9yaWdpbik7CisjZW5kaWYKKyAgICAKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCisjaWYgRU5BQkxFKERGR19KSVQpCitJbnN0YW5jZU9mU3RhdHVzIEluc3Rh
bmNlT2ZTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKKyAgICBjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbykKK3sKKyAgICBpZiAoIXN0dWJJbmZvIHx8ICFzdHViSW5mby0+ZXZlckNvbnNpZGVy
ZWQpCisgICAgICAgIHJldHVybiBOb0luZm9ybWF0aW9uOworICAgIAorICAgIGlmIChzdHViSW5m
by0+dG9va1Nsb3dQYXRoKQorICAgICAgICByZXR1cm4gVGFrZXNTbG93UGF0aDsKKyAgICAKKyAg
ICBpZiAoc3R1YkluZm8tPmNhY2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJl
dHVybiBUYWtlc1Nsb3dQYXRoOyAvLyBUaGlzIGlzIGNvbnNlcnZhdGl2ZS4gSXQgY291bGQgYmUg
dGhhdCB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgIAorICAgIFBvbHltb3JwaGljQWNjZXNz
KiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICBJbnN0YW5jZU9mU3RhdHVzIHJlc3VsdDsK
KyAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUo
KTsgKytsaXN0SW5kZXgpIHsKKyAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlz
dC0+YXQobGlzdEluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGlmIChhY2Nlc3MudHlwZSgpID09
IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZHZW5lcmljKQorICAgICAgICAgICAgcmV0dXJuIFRha2Vz
U2xvd1BhdGg7CisgICAgICAgIAorICAgICAgICBpZiAoIWFjY2Vzcy5jb25kaXRpb25TZXQoKS5z
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQ
YXRoOworICAgICAgICAKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZhcmlhbnQoSW5zdGFuY2VPZlZh
cmlhbnQoCisgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksCisgICAgICAgICAgICBhY2Nl
c3MuY29uZGl0aW9uU2V0KCksCisgICAgICAgICAgICBhY2Nlc3MuYXM8SW5zdGFuY2VPZkFjY2Vz
c0Nhc2U+KCkucHJvdG90eXBlKCksCisgICAgICAgICAgICBhY2Nlc3MudHlwZSgpID09IEFjY2Vz
c0Nhc2U6Okluc3RhbmNlT2ZIaXQpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworSlNPYmplY3QqIEluc3RhbmNlT2ZTdGF0
dXM6OmNvbW1vblByb3RvdHlwZSgpIGNvbnN0Cit7CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9
IG51bGxwdHI7CisgICAgZm9yIChJbnN0YW5jZU9mVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpIHsKKyAgICAgICAgaWYgKCFwcm90b3R5cGUpIHsKKyAgICAgICAgICAgIHByb3RvdHlwZSA9
IHZhcmlhbnQucHJvdG90eXBlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocHJvdG90eXBlICE9IHZhcmlhbnQucHJvdG90eXBlKCkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwordm9p
ZCBJbnN0YW5jZU9mU3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm47CisgICAg
ZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzdHJ1Y3R1cmVTZXQpOworICAgIGlm
IChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2lu
Y2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJJbnN0YW5jZU9mVmFyaWFudC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQWNjZXNzQ2FzZTsKK2NsYXNzIENvZGVCbG9j
azsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdp
biwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5m
b01hcDsKKworY2xhc3MgSW5zdGFuY2VPZlN0YXR1cyB7CitwdWJsaWM6CisgICAgZW51bSBTdGF0
ZSB7CisgICAgICAgIC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4K
KyAgICAgICAgTm9JbmZvcm1hdGlvbiwKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgY2FjaGVk
IGluIGEgc2ltcGxlIHdheS4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAKKyAgICAgICAgLy8g
SXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgVGFrZXNTbG93UGF0
aAorICAgIH07CisgICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cygpCisgICAgICAgIDogbV9zdGF0
ZShOb0luZm9ybWF0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgSW5zdGFu
Y2VPZlN0YXR1cyhTdGF0ZSBzdGF0ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHN0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgc3RhdGUgPT0gTWFrZXND
YWxscyk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJbnN0YW5jZU9mU3RhdHVzIGNvbXB1dGVG
b3IoQ29kZUJsb2NrKiwgU3R1YkluZm9NYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAg
ICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1cyBjb21w
dXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8qKTsKKyNlbmRpZgorICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQorICAgIAorICAgIGJvb2wgaXNTaW1wbGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aDsgfQorICAgIAorICAg
IEpTT2JqZWN0KiBjb21tb25Qcm90b3R5cGUoKSBjb25zdDsKKyAgICAKKyAgICBzaXplX3QgbnVt
VmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0
IFZlY3RvcjxJbnN0YW5jZU9mVmFyaWFudCwgMj4mIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4g
bV92YXJpYW50czsgfQorICAgIGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50JiBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CisgICAgY29uc3QgSW5zdGFu
Y2VPZlZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChp
bmRleCk7IH0KKworICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQg
YXBwZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYpOworICAgIAorICAgIFN0YXRl
IG1fc3RhdGU7CisgICAgVmVjdG9yPEluc3RhbmNlT2ZWYXJpYW50LCAyPiBtX3ZhcmlhbnRzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZWYXJpYW50LmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlZhcmlhbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Rh
bmNlT2ZWYXJpYW50LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitJbnN0YW5jZU9mVmFyaWFudDo6SW5z
dGFuY2VPZlZhcmlhbnQoCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAgSlNPYmpl
Y3QqIHByb3RvdHlwZSwgYm9vbCBpc0hpdCkKKyAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVy
ZVNldCkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKKyAgICAsIG1fcHJvdG90
eXBlKHByb3RvdHlwZSkKKyAgICAsIG1faXNIaXQoaXNIaXQpCit7Cit9CisKK2Jvb2wgSW5zdGFu
Y2VPZlZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50JiBvdGhl
cikKK3sKKyAgICBpZiAobV9wcm90b3R5cGUgIT0gb3RoZXIubV9wcm90b3R5cGUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9pc0hpdCAhPSBvdGhlci5tX2lzSGl0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5t
X2NvbmRpdGlvblNldCk7CisgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRp
b25TZXQ7CisgICAgCisgICAgbV9zdHJ1Y3R1cmVTZXQubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmVT
ZXQpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEluc3RhbmNlT2ZWYXJpYW50
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQs
IG51bGxwdHIpOworfQorCit2b2lkIEluc3RhbmNlT2ZWYXJpYW50OjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgb3V0LnByaW50KAorICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1
Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29u
dGV4dCksICIsIgorICAgICAgICAiIHByb3RvdHlwZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1f
cHJvdG90eXBlKSwgY29udGV4dCksICIsIgorICAgICAgICAiIGlzSGl0ID0gIiwgbV9pc0hpdCwg
Ij4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgSW5zdGFuY2VPZlN0YXR1czsKKworY2xhc3MgSW5zdGFuY2VPZlZh
cmlhbnQgeworcHVibGljOgorICAgIEluc3RhbmNlT2ZWYXJpYW50KAorICAgICAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmID0gU3RydWN0dXJlU2V0KCksCisgICAgICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCisgICAgICAg
IEpTT2JqZWN0KiBwcm90b3R5cGUsIGJvb2wgaXNIaXQpOworICAgIAorICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUoKTsgfQor
ICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KKyAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIHsg
cmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0
OyB9CisgICAgCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
dG90eXBlOyB9CisgICAgCisgICAgYm9vbCBpc0hpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIaXQ7
IH0KKyAgICAKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50
JiBvdGhlcik7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
dm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAg
ICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEluc3RhbmNlT2ZTdGF0dXM7CisgICAgCisg
ICAgU3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IG1fY29uZGl0aW9uU2V0OworICAgIEpTT2JqZWN0KiBwcm90b3R5cGU7CisgICAgYm9v
bCBtX2lzSGl0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzM3MSw2ICsz
MzcxLDM4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE1hdGNoU3Ry
dWN0dXJlOgorICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBiYXNlU2V0OworICAgICAgICAK
KyAgICAgICAgQm9vbGVhbkxhdHRpY2UgcmVzdWx0ID0gQm9vbGVhbkxhdHRpY2U6OkJvdHRvbTsK
KyAgICAgICAgZm9yIChNYXRjaFN0cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQgOiBub2RlLT5tYXRj
aFN0cnVjdHVyZURhdGEoKS52YXJpYW50cykgeworICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUgPSB2YXJpYW50LnN0cnVjdHVyZTsKKyAgICAgICAgICAgIGlmICghYmFz
ZS5jb250YWlucyhzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHN0cnVjdHVyZSk7CisgICAgICAgICAg
ICByZXN1bHQgPSBsdWJCb29sZWFuTGF0dGljZShyZXN1bHQsIHZhcmlhbnQucmVzdWx0KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNJbmZpbml0
ZSgpIHx8IGJhc2VTZXQuc2l6ZSgpIDwgYmFzZS5tX3N0cnVjdHVyZS5zaXplKCkpCisgICAgICAg
ICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAKKyAgICAgICAg
aWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBiYXNl
U2V0KSA9PSBDb250cmFkaWN0aW9uKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZh
bHNlKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgIGNhc2Ug
Qm9vbGVhbkxhdHRpY2U6OkZhbHNlOgorICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCb29sZWFu
TGF0dGljZTo6VHJ1ZToKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbih0
cnVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBQaGk6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3ODMsMTIgKzQ3ODMsNDAgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHR1cm4gdGhpcyBpbnRvIGVpdGhlciBhIENoZWNrU3RydWN0dXJlIGZvbGxvd2VkIGJ5IGEgY29u
c3RhbnQsIG9yCi0gICAgICAgICAgICAvLyBzb21lIGtpbmQgb2YgTXVsdGlJbnN0YW5jZU9mIHRo
aW5nLCBpZiB0aGUgSW5zdGFuY2VPZiBJQyBpcyBzdGFibGUuCi0gICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Njk1CiAgICAgICAgICAgICBh
dXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9wSW5zdGFuY2VvZio+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEluc3RhbmNlT2ZTdGF0dXMg
c3RhdHVzID0gSW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fc3R1
YkluZm9zLAorICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLnZh
bHVlKCkpKTsKICAgICAgICAgICAgIE5vZGUqIHByb3RvdHlwZSA9IGdldChWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUucHJvdG90eXBlKCkpKTsKKworICAgICAgICAgICAgLy8gT25seSBpbmxpbmUg
aXQgaWYgaXQncyBTaW1wbGUgd2l0aCBhIGNvbW1vblByb3RvdHlwZTsgYm90dG9tL3RvcCBvciB2
YXJpYWJsZQorICAgICAgICAgICAgLy8gcHJvdG90eXBlcyBib3RoIGdldCBoYW5kbGVkIGJ5IHRo
ZSBJQy4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgYm90dG9tICh1bnByb2ZpbGVkKQorICAgICAgICAg
ICAgLy8gaW5zdGFuY2VvZiBJQ3MgYmVjYXVzZSB0aGUgcHJvZml0IG9mIHRoaXMgb3B0aW1pemF0
aW9uIGlzIGZhaXJseSBsb3cuIFNvLCBpbiB0aGUKKyAgICAgICAgICAgIC8vIGFic2VuY2Ugb2Yg
YW55IGluZm9ybWF0aW9uLCBpdCdzIGJldHRlciB0byBhdm9pZCBtYWtpbmcgdGhpcyBiZSB0aGUg
Y2F1c2Ugb2YgYQorICAgICAgICAgICAgLy8gcmVjb21waWxhdGlvbi4KKyAgICAgICAgICAgIGlm
IChKU09iamVjdCogY29tbW9uUHJvdG90eXBlID0gc3RhdHVzLmNvbW1vblByb3RvdHlwZSgpKSB7
CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZy
ZWV6ZShjb21tb25Qcm90b3R5cGUpKSwgcHJvdG90eXBlKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZURhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbWF0Y2hT
dHJ1Y3R1cmVEYXRhLmFkZCgpOworICAgICAgICAgICAgICAgIGZvciAoSW5zdGFuY2VPZlZhcmlh
bnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgICAgICBj
aGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE1hdGNoU3RydWN0dXJlVmFyaWFudCBtYXRjaFZhcmlhbnQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaFZhcmlhbnQuc3RydWN0dXJlID0gbV9ncmFwaC5yZWdp
c3RlcihzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hWYXJpYW50LnJl
c3VsdCA9IHZhcmlhbnQuaXNIaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS0+YXBwZW5kKG1hdGNoVmFyaWFudCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgTm9kZSogbWF0Y2ggPSBhZGRUb0dyYXBoKE1hdGNoU3RydWN0dXJlLCBPcEluZm8o
ZGF0YSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLmRzdCgpKSwgbWF0Y2gpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3Rh
bmNlb2YpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdCgpKSwgYWRkVG9HcmFwaChJbnN0YW5jZU9mLCB2YWx1
ZSwgcHJvdG90eXBlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbnN0YW5jZW9mKTsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NDUsNiArNTQ1LDEwIEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsK
ICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBNaXNjRmllbGRzLCBub2Rl
LT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJ
RCk7CisgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQXJyYXlTbGljZToKICAgICAgICAgcmVh
ZChNaXNjRmllbGRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ4OSw2ICs0ODksMzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAg
ICAgICAgICAgICBFZGdlIGJhc2VFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAg
ICAgTm9kZSogYmFzZSA9IGJhc2VFZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBNYXRjaFN0
cnVjdHVyZURhdGEmIGRhdGEgPSBub2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJs
b2NrKTsgLy8gUHVzaCBDRkEgb3ZlciB0aGlzIG5vZGUgYWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBi
ZWZvcmUuCisgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBh
bGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlVmFsdWUg
PSBtX3N0YXRlLmZvck5vZGUoYmFzZSk7CisKKyAgICAgICAgICAgICAgICBCb29sZWFuTGF0dGlj
ZSByZXN1bHQ7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEu
dmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlVmFs
dWUuY29udGFpbnMoZGF0YS52YXJpYW50c1tpXS5zdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLnZhcmlhbnRzW2ktLV0gPSBkYXRhLnZhcmlhbnRzLmxhc3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEudmFyaWFudHMucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbHViQm9vbGVhbkxhdHRpY2UoZGF0YS52YXJp
YW50c1tpXS5yZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEJvb2xlYW5MYXR0aWNlOjpGYWxzZSB8fCByZXN1
bHQgPT0gQm9vbGVhbkxhdHRpY2U6OlRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZVNldCBzdHJ1Y3R1cmVTZXQ7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
TWF0Y2hTdHJ1Y3R1cmVWYXJpYW50JiB2YXJpYW50IDogZGF0YS52YXJpYW50cykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZVNldC5hZGQodmFyaWFudC5zdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgICAgICBhZGRCYXNlQ2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFs
dWUsIHN0cnVjdHVyZVNldCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRv
Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBtX2dyYXBoLmZyZWV6ZShq
c0Jvb2xlYW4ocmVzdWx0ID09IEJvb2xlYW5MYXR0aWNlOjpUcnVlKSkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIEdldEJ5SWREaXJlY3Q6CiAgICAgICAgICAgICBjYXNlIEdldEJ5SWRE
aXJlY3RGbHVzaDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJ
KHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDYgKzMxMCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEF0b21pY3NTdWI6CiAgICAgY2FzZSBBdG9t
aWNzWG9yOgogICAgIGNhc2UgQXRvbWljc0lzTG9ja0ZyZWU6CisgICAgY2FzZSBNYXRjaFN0cnVj
dHVyZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBQdXNoV2l0aFNjb3BlOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjMxOTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUyLDYgKzEwNTIsNyBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNo
RGF0YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERh
dGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRh
OworICAgIEJhZzxNYXRjaFN0cnVjdHVyZURhdGE+IG1fbWF0Y2hTdHJ1Y3R1cmVEYXRhOwogICAg
IEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGE7CiAgICAgQmFnPENhbGxWYXJhcmdzRGF0YT4gbV9jYWxsVmFyYXJnc0RhdGE7CiAgICAgQmFn
PExvYWRWYXJhcmdzRGF0YT4gbV9sb2FkVmFyYXJnc0RhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDE1IEBAIHN0cnVj
dCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdDsKIH07CiAKK3N0cnVjdCBNYXRjaFN0cnVjdHVyZVZhcmlhbnQgeworICAgIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgc3RydWN0dXJlOworICAgIGJvb2wgcmVzdWx0OworfTsKKworc3RydWN0IE1h
dGNoU3RydWN0dXJlRGF0YSB7CisgICAgVmVjdG9yPE1hdGNoU3RydWN0dXJlVmFyaWFudCwgMj4g
dmFyaWFudHM7Cit9OworCiBzdHJ1Y3QgTmV3QXJyYXlCdWZmZXJEYXRhIHsKICAgICB1bmlvbiB7
CiAgICAgICAgIHN0cnVjdCB7CkBAIC0xODUzLDYgKzE4NjIsMTcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gKm1fb3BJbmZvLmFzPE11bHRpUHV0QnlPZmZzZXREYXRhKj4oKTsKICAgICB9CiAg
ICAgCisgICAgYm9vbCBoYXNNYXRjaFN0cnVjdHVyZURhdGEoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9wKCkgPT0gTWF0Y2hTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIE1hdGNoU3RydWN0
dXJlRGF0YSYgbWF0Y2hTdHJ1Y3R1cmVEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNN
YXRjaFN0cnVjdHVyZURhdGEoKSk7CisgICAgICAgIHJldHVybiAqbV9vcEluZm8uYXM8TWF0Y2hT
dHJ1Y3R1cmVEYXRhKj4oKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjMxOTYxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDYsNiArMzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKE92ZXJyaWRlc0hhc0luc3RhbmNlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJv
b2xlYW4pIFwKICAgICBtYWNybyhJbnN0YW5jZU9mLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJbnN0YW5jZU9mQ3VzdG9tLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBtYWNybyhNYXRjaFN0cnVjdHVyZSwgTm9k
ZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgbWFjcm8oSXNDZWxsV2l0aFR5cGUsIE5vZGVS
ZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNFbXB0eSwgTm9kZVJlc3VsdEJvb2xlYW4pIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShy
ZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUyLDYgKzQ1Miw3IEBAIGJvb2wgc2FmZVRvRXhl
Y3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2Fz
ZSBBdG9taWNzSXNMb2NrRnJlZToKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1l
bnRzOgorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgY2FzZSBBcnJheVNsaWNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzYwLDYgKzMzNjAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNh
c2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAgY29tcGlsZU1hdGNoU3RydWN0dXJlKG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVyOiB7
CiAgICAgICAgIGNvbXBpbGVHZXRHZXR0ZXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjI3LDYgKzM2MjcsMTEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAgY29tcGls
ZU1hdGNoU3RydWN0dXJlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAog
ICAgIGNhc2UgR2V0R2V0dGVyOiB7CiAgICAgICAgIGNvbXBpbGVHZXRHZXR0ZXIobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgzMyw2
ICsxMTgzMywzMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlPZmZzZXQoCiAg
ICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRj
aFN0cnVjdHVyZShOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAu
Z3ByKCk7CisgICAgCisgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHRlbXBHUFIpOworICAgIAorICAgIGF1
dG8mIHZhcmlhbnRzID0gbm9kZS0+bWF0Y2hTdHJ1Y3R1cmVEYXRhKCkudmFyaWFudHM7CisgICAg
VmVjdG9yPGludDY0X3Q+IGNhc2VzOworICAgIGZvciAoTWF0Y2hTdHJ1Y3R1cmVWYXJpYW50JiB2
YXJpYW50IDogdmFyaWFudHMpCisgICAgICAgIGNhc2VzLmFwcGVuZCh2YXJpYW50LnN0cnVjdHVy
ZS0+aWQoKSk7CisgICAgCisgICAgQmluYXR5U3dpdGNoIGJpbmFyeVN3aXRjaCh0ZW1wR1BSLCBj
YXNlcywgQmluYXJ5U3dpdGNoOjpJbnQzMik7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRv
bmU7CisgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKG1faml0KSkgeworICAgICAgICBt
X2ppdC5ib3hCb29sZWFuUGF5bG9hZCh2YXJpYW50c1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCld
LnJlc3VsdCwgdGVtcEdQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Cisg
ICAgfQorICAgIHRlbWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oQmFkQ2FjaGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIpOworICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIAorICAgIGJsZXNz
ZWRCb29sZWFuUmVzdWx0KHRlbXBHUFIsIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkoTm9kZSogbm9kZSkKIHsKICAgICBKU1ZhbHVl
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDIzMTk2MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM3NSw2ICsxMzc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUdldEJ5
VmFsV2l0aFRoaXMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEJ5T2Zmc2V0KE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVQdXRCeU9mZnNldChOb2RlKik7CisgICAgdm9pZCBjb21waWxlTWF0
Y2hTdHJ1Y3R1cmUoTm9kZSopOwogICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSBpdCBtZWFu
cyB0aGF0IHdlIHRlcm1pbmF0ZWQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uLgogICAgIGJvb2wgZ2V0
SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgKICAgICAgICAgR1BSVGVtcG9yYXJ5JiB2YWx1ZSwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDYgKzM0OSw3IEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAg
ICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICBjYXNlIFB1dEJ5VmFsV2l0aFRoaXM6CisgICAg
Y2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBi
cmVhazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTEsNiArOTExLDkgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgY29tcGls
ZU11bHRpUHV0QnlPZmZzZXQoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1h
dGNoU3RydWN0dXJlOgorICAgICAgICAgICAgY29tcGlsZU1hdGNoU3RydWN0dXJlKCk7CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2Ug
R2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgogICAgICAgICAgICAgY29tcGlsZUdldEdsb2JhbFZh
cmlhYmxlKCk7CkBAIC02NTkyLDYgKzY1OTUsNDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgfQogICAgIAorICAgIHZvaWQg
Y29tcGlsZU1hdGNoU3RydWN0dXJlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIE1hdGNoU3RydWN0dXJl
RGF0YSYgZGF0YSA9IG5vZGUtPm1hdGNoU3RydWN0dXJlRGF0YSgpOworICAgICAgICAKKyAgICAg
ICAgTEJhc2ljQmxvY2sqIHRydWVCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExC
YXNpY0Jsb2NrKiBmYWxzZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sqIGV4aXRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAKKyAgICAgICAgTEJh
c2ljQmxvY2sqIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHRydWVCbG9j
ayk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CisgICAg
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKKyAgICAgICAgZm9yIChNYXRjaFN0
cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQgOiBkYXRhLnZhcmlhbnRzKSB7CisgICAgICAgICAgICBi
YXNlU2V0LmFkZCh2YXJpYW50LnN0cnVjdHVyZSk7CisgICAgICAgICAgICBjYXNlcy5hcHBlbmQo
U3dpdGNoQ2FzZSgKKyAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5zdHJ1
Y3R1cmUpLAorICAgICAgICAgICAgICAgIHZhcmlhbnQucmVzdWx0ID8gdHJ1ZUJsb2NrIDogZmFs
c2VCbG9jaywgV2VpZ2h0KDEpKSk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBzdHJ1Y3R1cmVz
Q2hlY2tlZCA9IG1faW50ZXJwcmV0ZXIuZm9yTm9kZShtX25vZGUtPmNoaWxkMSgpKS5tX3N0cnVj
dHVyZS5pc1N1YnNldE9mKGJhc2VTZXQpOworICAgICAgICBlbWl0U3dpdGNoRm9yTXVsdGlCeU9m
ZnNldChiYXNlLCBzdHJ1Y3R1cmVzQ2hlY2tlZCwgY2FzZXMsIGV4aXRCbG9jayk7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyh0cnVlQmxvY2ssIGZhbHNlQmxvY2spOworICAgICAg
ICBWYWx1ZUZyb21CbG9jayB0cnVlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5U
cnVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oZmFsc2VCbG9jaywgZXhpdEJsb2NrKTsKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFsc2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsK
KyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oZXhpdEJsb2NrLCBjb250aW51YXRpb24pOworICAgICAgICBpZiAoIXN0cnVj
dHVyZXNDaGVja2VkKQorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hlLCBub1ZhbHVlKCks
IG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUo
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICBtX291dC5zZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgdHJ1ZVJlc3Vs
dCwgZmFsc2VSZXN1bHQpKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0R2xvYmFs
VmFyaWFibGUoKQogICAgIHsKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQu
YWJzb2x1dGUobV9ub2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpKTsKSW5kZXg6IFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjM5
LDYgKzIzOSw3IEBACiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCMzk5QjgyMEFGNUE1ODAwMTdFMjEzIC8qIEJvb2xlYW5MYXR0aWNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5MYXR0aWNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ2NzgyMUZERTI4MkIwMDNGQ0IwOSAvKiBDb25jdXJy
ZW50QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRC
dWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDY3ODMxRkRFMjgyQzAw
M0ZDQjA5IC8qIENvbmN1cnJlbnRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29uY3VycmVudFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkM0NDg4MjE2RkU5RkUxMDA4NDRCRTkgLyogUHJvY2Vzc0lELmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFByb2Nlc3NJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODEzLDYgKzgxNCw3IEBACiAJCQkJMUE5NDRGNDYxQzNEODgxNDAwNUJEMjhDIC8qIEJsb2Nr
UHRyLmggKi8sCiAJCQkJQThBNDcyNjQxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb2NrU3RhY2suaCAq
LywKIAkJCQlBOEE0NzI2NTE1MUE4MjVBMDA0MTIzRkYgLyogQmxvb21GaWx0ZXIuaCAqLywKKwkJ
CQkwRkIzOTlCODIwQUY1QTU4MDAxN0UyMTMgLyogQm9vbGVhbkxhdHRpY2UuaCAqLywKIAkJCQkw
RjkzMjc0QTFDMTdGNEI3MDBDRjY1NjQgLyogQm94LmggKi8sCiAJCQkJN0MzRjcyMzkxRDc4ODEx
OTAwNjc0RTI2IC8qIEJyaWdhbmQuaCAqLywKIAkJCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2Mjkg
LyogQnViYmxlU29ydC5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQm9vbGVhbkxhdHRpY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Cb29sZWFuTGF0dGljZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Jvb2xlYW5MYXR0aWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdURiB7CisKK2VudW0gY2xhc3MgQm9v
bGVhbkxhdHRpY2UgOiB1aW50OF90IHsKKyAgICBCb3R0b20gPSAwLAorICAgIEZhbHNlID0gMSwK
KyAgICBUcnVlID0gMiwKKyAgICBUbyA9IDMKK307CisKK2lubGluZSBCb29sZWFuTGF0dGljZSBs
dWJCb29sZWFuTGF0dGljZShCb29sZWFuTGF0dGljZSBhLCBCb29sZWFuTGF0dGljZSBiKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxCb29sZWFuTGF0dGljZT4oc3RhdGljX2Nhc3Q8dWludDhf
dD4oYSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGIpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK3VzaW5nIFdURjo6Qm9vbGVhbkxhdHRpY2U7Cit1c2luZyBXVEY6Omx1YkJvb2xlYW5M
YXR0aWNlOworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjMxOTYxKQorKysg
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0LDYgKzE0
LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIEJsb2NrUHRyLmgKICAgICBCbG9ja1N0
YWNrLmgKICAgICBCbG9vbUZpbHRlci5oCisgICAgQm9vbGVhbkxhdHRpY2UuaAogICAgIEJveC5o
CiAgICAgQnJpZ2FuZC5oCiAgICAgQnViYmxlU29ydC5oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340740</attachid>
            <date>2018-05-18 14:50:13 -0700</date>
            <delta_ts>2018-05-18 15:30:04 -0700</delta_ts>
            <desc>it did things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56933</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDYg
KzIyMyw4IEBAIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKIGJ5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5jcHAKIGJ5dGVjb2RlL0lubGluZUNhbGxGcmFtZVNldC5jcHAKIGJ5dGVjb2RlL0luc3Rh
bmNlT2ZBY2Nlc3NDYXNlLmNwcAorYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAKK2J5dGVj
b2RlL0luc3RhbmNlT2ZWYXJpYW50LmNwcAogYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNz
Q2FzZS5jcHAKIGJ5dGVjb2RlL0p1bXBUYWJsZS5jcHAKIGJ5dGVjb2RlL0xMSW50UHJvdG90eXBl
TG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDg5LDYgKzQ4OSw5IEBACiAJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJl
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJMEZCMzg3
OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhCMUJGQkM0NEQwMEUzQUIxRSAv
KiBBaXJCbG9ja1dvcmtsaXN0LmggKi87IH07CiAJCTBGQjM4NzkwMUJGQkM0NEQwMEUzQUIxRSAv
KiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJs
b2NrT3JkZXIuaCAqLzsgfTsKKwkJMEZCMzk5QkUyMEFGNkIzRDAwMTdFMjEzIC8qIElDU3RhdHVz
VXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjM5OUJEMjBBRjZCMzgwMDE3RTIxMyAvKiBJQ1N0YXR1c1V0aWxzLmggKi87IH07CisJCTBGQjM5
OUJGMjBBRjZCM0YwMDE3RTIxMyAvKiBJbnN0YW5jZU9mU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIzOTlCQjIwQUY2QjJBMDAxN0UyMTMg
LyogSW5zdGFuY2VPZlN0YXR1cy5oICovOyB9OworCQkwRkIzOTlDMDIwQUY2QjQzMDAxN0UyMTMg
LyogSW5zdGFuY2VPZlZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjM5OUI5MjBBRjZCMkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFu
dC5oICovOyB9OwogCQkwRkI0Njc3RjFGRERBNkU5MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdFMUZE
REE2RTUwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oICovOyB9OwogCQkwRkI0Njc4MDFGRERBNkYx
MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCNDY3N0QxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI0Njc4
MTFGRERBNkY3MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAv
KiBJc29DZWxsU2V0SW5saW5lcy5oICovOyB9OwpAQCAtMjYwOSw2ICsyNjEyLDExIEBACiAJCTBG
QjM4NzhDMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyT3B0aW1pemVCbG9ja09yZGVyLmNw
cDsgcGF0aCA9IGIzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkIzODc4RDFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVC
bG9ja09yZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpck9wdGltaXpl
QmxvY2tPcmRlci5oOyBwYXRoID0gYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIzODc5MTFCRkQzMUExMDBFM0FCMUUgLyogRlRM
Q29tcGlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExDb21w
aWxlLmNwcDsgcGF0aCA9IGZ0bC9GVExDb21waWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCMzk5QjkyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3RhbmNlT2ZWYXJpYW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjM5OUJBMjBBRjZCMkEwMDE3RTIxMyAvKiBJ
bnN0YW5jZU9mU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEluc3RhbmNlT2ZTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIz
OTlCQjIwQUY2QjJBMDAxN0UyMTMgLyogSW5zdGFuY2VPZlN0YXR1cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnN0YW5jZU9mU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjM5OUJDMjBBRjZCMkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnN0YW5jZU9mVmFy
aWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjM5OUJEMjBBRjZCMzgw
MDE3RTIxMyAvKiBJQ1N0YXR1c1V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElDU3RhdHVzVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDE1
ODMxRDc4Rjk4MjAwREY4RDA5IC8qIEFycmF5Q29udmVudGlvbnMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlDb252ZW50aW9ucy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQjQzOEEyMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1cmVT
ZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlU2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDY3N0IxRkREQTZEODAwM0ZD
QjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElzb0NlbGxTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
NjI0LDEyICs3NjMyLDE3IEBACiAJCQkJMEYwMzMyQzIxOEIwMTc2MzAwNUY5NzlBIC8qIEdldEJ5
SWRWYXJpYW50LmggKi8sCiAJCQkJMTRBRDkxMDgxRENBOTI5NDAwMTRGOUZFIC8qIEdsb2JhbENv
ZGVCbG9jay5oICovLAogCQkJCTBGMEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBIYW5kbGVySW5m
by5oICovLAorCQkJCTBGQjM5OUJEMjBBRjZCMzgwMDE3RTIxMyAvKiBJQ1N0YXR1c1V0aWxzLmgg
Ki8sCiAJCQkJNzkwNUJCNjYxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5jcHAgKi8s
CiAJCQkJNzkwNUJCNjcxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oICovLAogCQkJ
CTE0OEE3QkVEMUI4Mjk3NUEwMDJEOTE1NyAvKiBJbmxpbmVDYWxsRnJhbWUuY3BwICovLAogCQkJ
CTE0OEE3QkVFMUI4Mjk3NUEwMDJEOTE1NyAvKiBJbmxpbmVDYWxsRnJhbWUuaCAqLywKIAkJCQkw
RjI0RTU1MzE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCAqLywKIAkJ
CQkwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggKi8sCisJ
CQkJMEZCMzk5QkEyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZTdGF0dXMuY3BwICovLAor
CQkJCTBGQjM5OUJCMjBBRjZCMkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mU3RhdHVzLmggKi8sCisJ
CQkJMEZCMzk5QkMyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmNwcCAqLywK
KwkJCQkwRkIzOTlCOTIwQUY2QjJBMDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQuaCAqLywK
IAkJCQk5NjlBMDc5MzBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCAqLywKIAkJCQk1
M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9m
aWxlLmggKi8sCiAJCQkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAg
Ki8sCkBAIC05MDU1LDYgKzkwNjgsNyBAQAogCQkJCUE1MDNGQTFFMTg4RTBGQjAwMDExMEYxNCAv
KiBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcw
MTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MTYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkIzOTlDMDIwQUY2QjQzMDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFn
ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtOTE3OSw2ICs5MTkz
LDcgQEAKIAkJCQkwRjQ2ODBDRDE0QkJCMTdEMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTgxRUQ4MjMyODIzNEQ5MUJBRUNDQURFIC8qIE1hY2hp
bmVDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEI3MjNCODEyRDdEQTZGMDAzQkQ1RUQg
LyogTWFjaGluZVN0YWNrTWFya2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIzOTlCRjIwQUY2
QjNGMDAxN0UyMTMgLyogSW5zdGFuY2VPZlN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZD
MzZFRUEwRUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxl
ckFSTTY0LmggaW4gSGVhZGVycyAqLywKQEAgLTk0MzcsNiArOTQ1Miw3IEBACiAJCQkJNzA1QjQx
QUUxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5OTZCNzMyNzFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9sQ29uc3RydWN0b3IubHV0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFCMDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIzOTlCRTIwQUY2QjNEMDAxN0UyMTMgLyogSUNT
dGF0dXNVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3
IC8qIFN5bWJvbFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMjgxQkRBMDhF
RjAwMzMxQjg0IC8qIFN5bWJvbFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
Y3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCiAjaW5jbHVk
ZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIK
ICNpbmNsdWRlICJJbnRlcnByZXRlcklubGluZXMuaCIKICNpbmNsdWRlICJJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNDcsMjIgKzQ4LDcg
QEAgY2xhc3MgR2V0dGVyU2V0dGVyOwogCiBib29sIEdldEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlh
bnQoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCiB7Ci0gICAgLy8gQXR0ZW1wdCB0byBt
ZXJnZSB0aGlzIHZhcmlhbnQgd2l0aCBhbiBhbHJlYWR5IGV4aXN0aW5nIHZhcmlhbnQuCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1fdmFyaWFudHNbaV0uYXR0ZW1wdFRvTWVyZ2UodmFyaWFudCkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIG5v
IG92ZXJsYXAuIFdlIHNob3VsZCBoYXZlIHBydW5lZCBvdXQgb3Bwb3J0dW5pdGllcyBmb3IKLSAg
ICAvLyBvdmVybGFwIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgYW4gaW5saW5lIGNhY2hlIGdvdCBp
bnRvIGEgd2VpcmQgc3RhdGUuIFdlIGFyZQotICAgIC8vIGRlZmVuc2l2ZSBhbmQgYmFpbCBpZiB3
ZSBkZXRlY3QgY3JhenkuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFudHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0uc3RydWN0dXJlU2V0KCku
b3ZlcmxhcHModmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywg
dmFyaWFudCk7CiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTQzMiwxNCArNDE4LDcgQEAg
dm9pZCBHZXRCeUlkU3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dQogewogICAgIGlmIChtX3N0
YXRlICE9IFNpbXBsZSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEZJWE1FOiBXZSBj
b3VsZCBhbHNvIGZpbHRlciB0aGUgdmFyaWFudHMgdGhlbXNlbHZlcy4KLSAgICAKLSAgICBtX3Zh
cmlhbnRzLnJlbW92ZUFsbE1hdGNoaW5nKAotICAgICAgICBbJl0gKEdldEJ5SWRWYXJpYW50JiB2
YXJpYW50KSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiAhdmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKS5vdmVybGFwcyhzZXQpOwotICAgICAgICB9KTsKLSAgICAKKyAgICBmaWx0ZXJJQ1N0YXR1
c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNldCk7CiAgICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgp
KQogICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMjMxOTYx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkod29y
a2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgU3RhdGUgc3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQogICAgIGJvb2wgaXNDdXN0b20oKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlID09IEN1c3RvbTsgfQogICAgIGJvb2wgaXNNb2R1bGVOYW1lc3BhY2UoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlID09IE1vZHVsZU5hbWVzcGFjZTsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9u
IDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBHZXRCeUlk
VmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7CiAgICAgCiAgICAgYm9v
bCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zdHJ1Y3R1cmVTZXQuc2l6ZSgpOyB9Ci0gICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsg
fQogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
ZXQ7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRp
bHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0
dXNVdGlscy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JQ1N0YXR1c1V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhcmlhbnRWZWN0b3JUeXBlLCB0
eXBlbmFtZSBWYXJpYW50VHlwZT4KK2Jvb2wgYXBwZW5kSUNTdGF0dXNWYXJpYW50KFZhcmlhbnRW
ZWN0b3JUeXBlJiB2YXJpYW50cywgY29uc3QgVmFyaWFudFR5cGUmIHZhcmlhbnQpCit7CisgICAg
Ly8gQXR0ZW1wdCB0byBtZXJnZSB0aGlzIHZhcmlhbnQgd2l0aCBhbiBhbHJlYWR5IGV4aXN0aW5n
IHZhcmlhbnQuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhcmlhbnRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmICh2YXJpYW50c1tpXS5hdHRlbXB0VG9NZXJnZSh2YXJpYW50KSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUg
dGhlcmUgaXMgbm8gb3ZlcmxhcC4gV2Ugc2hvdWxkIGhhdmUgcHJ1bmVkIG91dCBvcHBvcnR1bml0
aWVzIGZvcgorICAgIC8vIG92ZXJsYXAgYnV0IGl0J3MgcG9zc2libGUgdGhhdCBhbiBpbmxpbmUg
Y2FjaGUgZ290IGludG8gYSB3ZWlyZCBzdGF0ZS4gV2UgYXJlCisgICAgLy8gZGVmZW5zaXZlIGFu
ZCBiYWlsIGlmIHdlIGRldGVjdCBjcmF6eS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHZhcmlhbnRzW2ldLnN0cnVjdHVy
ZVNldCgpLm92ZXJsYXBzKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICB2YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhcmlhbnRWZWN0b3JUeXBl
Pgordm9pZCBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKFZhcmlhbnRWZWN0b3JUeXBlJiB2YXJpYW50
cywgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCit7CisgICAgLy8gRklYTUU6IFdlIGNvdWxkIGFs
c28gZmlsdGVyIHRoZSB2YXJpYW50cyB0aGVtc2VsdmVzLgorICAgIAorICAgIHZhcmlhbnRzLnJl
bW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKGF1dG8mIHZhcmlhbnQpIC0+IGJvb2wgewor
ICAgICAgICAgICAgcmV0dXJuICF2YXJpYW50LnN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKHNldCk7
CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkluc3RhbmNlT2ZTdGF0dXMuaCIKKworI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIK
KyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9p
ZCBJbnN0YW5jZU9mU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50
JiB2YXJpYW50KQoreworICAgIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJp
YW50KTsKK30KKworSW5zdGFuY2VPZlN0YXR1cyBJbnN0YW5jZU9mU3RhdHVzOjpjb21wdXRlRm9y
KAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHViSW5mb01hcCYgaW5mb01hcCwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKKyAgICAKKyAgICBJbnN0YW5jZU9mU3RhdHVzIHJlc3VsdDsKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8obG9ja2VyLCBp
bmZvTWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKSk7CisKKyAgICBpZiAoIXJlc3Vs
dC50YWtlc1Nsb3dQYXRoKCkpIHsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKHVubGlua2VkQ29kZUJsb2NrLT5tX2xvY2spOworICAgICAg
ICAvLyBXZSBhbHNvIGNoZWNrIGZvciBCYWRUeXBlIGhlcmUgaW4gY2FzZSB0aGlzIGlzICJwcmlt
aXRpdmUgaW5zdGFuY2VvZiBGb28iLgorICAgICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhh
c0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJh
ZENhY2hlKSkKKyAgICAgICAgICAgIHx8IHVubGlua2VkQ29kZUJsb2NrLT5oYXNFeGl0U2l0ZShs
b2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDb25zdGFudENh
Y2hlKSkKKyAgICAgICAgICAgIHx8IHVubGlua2VkQ29kZUJsb2NrLT5oYXNFeGl0U2l0ZShsb2Nr
ZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRUeXBlKSkpCisgICAg
ICAgICAgICByZXR1cm4gVGFrZXNTbG93UGF0aDsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShpbmZvTWFwKTsKKyAgICBVTlVTRURfUEFSQU0oY29kZU9yaWdpbik7CisjZW5kaWYKKyAg
ICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgRU5BQkxFKERGR19KSVQpCitJbnN0YW5j
ZU9mU3RhdHVzIEluc3RhbmNlT2ZTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCit7CisgICAgaWYg
KCFzdHViSW5mbyB8fCAhc3R1YkluZm8tPmV2ZXJDb25zaWRlcmVkKQorICAgICAgICByZXR1cm4g
Tm9JbmZvcm1hdGlvbjsKKyAgICAKKyAgICAvLyBGSVhNRTogV2Ugd291bGRuJ3QgaGF2ZSB0byBi
YWlsIGZvciBub25DZWxsIGlmIHdlIHRhdWdodCBNYXRjaFN0cnVjdHVyZSBob3cgdG8gaGFuZGxl
IG5vbgorICAgIC8vIGNlbGxzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODU3ODQKKyAgICBpZiAoc3R1YkluZm8tPnRvb2tTbG93UGF0aCB8fCBzdHVi
SW5mby0+c2F3Tm9uQ2VsbCkKKyAgICAgICAgcmV0dXJuIFRha2VzU2xvd1BhdGg7CisgICAgCisg
ICAgaWYgKHN0dWJJbmZvLT5jYWNoZVR5cGUgIT0gQ2FjaGVUeXBlOjpTdHViKQorICAgICAgICBy
ZXR1cm4gVGFrZXNTbG93UGF0aDsgLy8gVGhpcyBpcyBjb25zZXJ2YXRpdmUuIEl0IGNvdWxkIGJl
IHRoYXQgd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAKKyAgICBQb2x5bW9ycGhpY0FjY2Vz
cyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7CisgICAgSW5zdGFuY2VPZlN0YXR1cyByZXN1bHQ7
CisgICAgZm9yICh1bnNpZ25lZCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXpl
KCk7ICsrbGlzdEluZGV4KSB7CisgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxp
c3QtPmF0KGxpc3RJbmRleCk7CisgICAgICAgIAorICAgICAgICBpZiAoYWNjZXNzLnR5cGUoKSA9
PSBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mR2VuZXJpYykKKyAgICAgICAgICAgIHJldHVybiBUYWtl
c1Nsb3dQYXRoOworICAgICAgICAKKyAgICAgICAgaWYgKCFhY2Nlc3MuY29uZGl0aW9uU2V0KCku
c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gVGFrZXNTbG93
UGF0aDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5hcHBlbmRWYXJpYW50KEluc3RhbmNlT2ZW
YXJpYW50KAorICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLAorICAgICAgICAgICAgYWNj
ZXNzLmNvbmRpdGlvblNldCgpLAorICAgICAgICAgICAgYWNjZXNzLmFzPEluc3RhbmNlT2ZBY2Nl
c3NDYXNlPigpLnByb3RvdHlwZSgpLAorICAgICAgICAgICAgYWNjZXNzLnR5cGUoKSA9PSBBY2Nl
c3NDYXNlOjpJbnN0YW5jZU9mSGl0KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7
Cit9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKK0pTT2JqZWN0KiBJbnN0YW5jZU9mU3Rh
dHVzOjpjb21tb25Qcm90b3R5cGUoKSBjb25zdAoreworICAgIEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBudWxscHRyOworICAgIGZvciAoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIHZhcmlhbnQgOiBt
X3ZhcmlhbnRzKSB7CisgICAgICAgIGlmICghcHJvdG90eXBlKSB7CisgICAgICAgICAgICBwcm90
b3R5cGUgPSB2YXJpYW50LnByb3RvdHlwZSgpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHByb3RvdHlwZSAhPSB2YXJpYW50LnByb3RvdHlwZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBwcm90b3R5cGU7Cit9
CisKK3ZvaWQgSW5zdGFuY2VPZlN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlU2V0KQoreworICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc3RydWN0dXJlU2V0KTsK
KyAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9y
bWF0aW9uOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4u
aCIKKyNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCisjaW5jbHVkZSAiSW5zdGFuY2VPZlZh
cmlhbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFjY2Vzc0Nhc2U7CitjbGFzcyBD
b2RlQmxvY2s7CitjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNoTWFwPENv
ZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4g
U3R1YkluZm9NYXA7CisKK2NsYXNzIEluc3RhbmNlT2ZTdGF0dXMgeworcHVibGljOgorICAgIGVu
dW0gU3RhdGUgeworICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3Jt
YXRpb24uCisgICAgICAgIE5vSW5mb3JtYXRpb24sCisgICAgICAgIAorICAgICAgICAvLyBJdCdz
IGNhY2hlZCBpbiBhIHNpbXBsZSB3YXkuCisgICAgICAgIFNpbXBsZSwKKyAgICAgICAgCisgICAg
ICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93IHBhdGguCisgICAgICAgIFRha2Vz
U2xvd1BhdGgKKyAgICB9OworICAgIAorICAgIEluc3RhbmNlT2ZTdGF0dXMoKQorICAgICAgICA6
IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAgIEluc3RhbmNl
T2ZTdGF0dXMoU3RhdGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChzdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IHN0YXRlID09IE1ha2VzQ2Fs
bHMpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1cyBjb21wdXRlRm9y
KENvZGVCbG9jayosIFN0dWJJbmZvTWFwJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAg
CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgc3RhdGljIEluc3RhbmNlT2ZTdGF0dXMgY29tcHV0
ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFN0cnVjdHVyZVN0dWJJbmZv
Kik7CisjZW5kaWYKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBO
b0luZm9ybWF0aW9uOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIGlzU2V0KCk7IH0KKyAgICAKKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBTaW1wbGU7IH0KKyAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGg7IH0KKyAgICAKKyAgICBKU09iamVjdCogY29t
bW9uUHJvdG90eXBlKCkgY29uc3Q7CisgICAgCisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29u
c3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8SW5zdGFu
Y2VPZlZhcmlhbnQsIDI+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0K
KyAgICBjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQorICAgIGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50JiBv
cGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAg
ICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFwcGVuZFZhcmlhbnQo
Y29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmKTsKKyAgICAKKyAgICBTdGF0ZSBtX3N0YXRlOworICAg
IFZlY3RvcjxJbnN0YW5jZU9mVmFyaWFudCwgMj4gbV92YXJpYW50czsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFu
Y2VPZlZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0YW5jZU9mVmFyaWFudC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnN0YW5jZU9mVmFyaWFudC5o
IgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworSW5zdGFuY2VPZlZhcmlhbnQ6Okluc3RhbmNlT2ZWYXJpYW50
KAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUs
IGJvb2wgaXNIaXQpCisgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCisgICAgLCBt
X2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCisgICAgLCBtX3Byb3RvdHlwZShwcm90b3R5cGUp
CisgICAgLCBtX2lzSGl0KGlzSGl0KQoreworfQorCitib29sIEluc3RhbmNlT2ZWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZShjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgb3RoZXIpCit7CisgICAgaWYg
KG1fcHJvdG90eXBlICE9IG90aGVyLm1fcHJvdG90eXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgaWYgKG1faXNIaXQgIT0gb3RoZXIubV9pc0hpdCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRp
dGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQp
OworICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgIAor
ICAgIG1fc3RydWN0dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKKyAgICAKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbnN0YW5jZU9mVmFyaWFudDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30K
Kwordm9pZCBJbnN0YW5jZU9mVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0
LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAg
ICAgIG91dC5wcmludCgiPGVtcHR5PiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG91dC5wcmludCgKKyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNv
bnRleHQpLCAiLCAiLCBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiLCIKKyAg
ICAgICAgIiBwcm90b3R5cGUgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX3Byb3RvdHlwZSksIGNv
bnRleHQpLCAiLCIKKyAgICAgICAgIiBpc0hpdCA9ICIsIG1faXNIaXQsICI+Iik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5zdGFuY2VPZlZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5zdGFuY2VPZlZhcmlhbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEluc3RhbmNlT2ZTdGF0dXM7CisKK2NsYXNzIEluc3RhbmNlT2ZWYXJpYW50IHsKK3B1Ymxp
YzoKKyAgICBJbnN0YW5jZU9mVmFyaWFudCgpIHsgfQorICAgIEluc3RhbmNlT2ZWYXJpYW50KGNv
bnN0IFN0cnVjdHVyZVNldCYsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgSlNP
YmplY3QqIHByb3RvdHlwZSwgYm9vbCBpc0hpdCk7CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zdHJ1Y3R1cmVTZXQuc2l6ZSgpOyB9CisgICAg
CisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBt
X3N0cnVjdHVyZVNldDsgfQorICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0K
KyAgICAKKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5
cGU7IH0KKyAgICAKKyAgICBib29sIGlzSGl0KCkgY29uc3QgeyByZXR1cm4gbV9pc0hpdDsgfQor
ICAgIAorICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIG90
aGVyKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lk
IGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIAor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSW5zdGFuY2VPZlN0YXR1czsKKyAgICAKKyAgICBT
dHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbV9jb25kaXRpb25TZXQ7CisgICAgSlNPYmplY3QqIG1fcHJvdG90eXBlID0gbnVsbHB0cjsK
KyAgICBib29sIG1faXNIaXQgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiAr
NTEsNyBAQCBTdHJ1Y3R1cmVTdHViSW5mbzo6U3RydWN0dXJlU3R1YkluZm8oQWNjCiAgICAgLCB0
b29rU2xvd1BhdGgoZmFsc2UpCiAgICAgLCBldmVyQ29uc2lkZXJlZChmYWxzZSkKICAgICAsIHBy
b3RvdHlwZUlzS25vd25PYmplY3QoZmFsc2UpCisgICAgLCBzYXdOb25DZWxsKGZhbHNlKQogewog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDggKzkw
LDEwIEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgY29uc2lkZXJDYWNoaW5nKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAg
IC8vIFdlIG5ldmVyIGNhY2hlIG5vbi1jZWxscy4KLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCisg
ICAgICAgIGlmICghc3RydWN0dXJlKSB7CisgICAgICAgICAgICBzYXdOb25DZWxsID0gdHJ1ZTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gdGhlIE9wdGltaXplIHZhcmlhbnRzIG9mIElD
IHNsb3cgcGF0aHMuIFRoZSBmaXJzdCBwYXJ0IG9mIHRoaXMKICAgICAgICAgLy8gbWV0aG9kIHRy
aWVzIHRvIGRldGVybWluZSBpZiB0aGUgT3B0aW1pemUgdmFyaWFudCBzaG91bGQgcmVhbGx5IGJl
aGF2ZSBsaWtlIHRoZQpAQCAtMjE5LDYgKzIyMSw3IEBAIHB1YmxpYzoKICAgICBib29sIHRvb2tT
bG93UGF0aCA6IDE7CiAgICAgYm9vbCBldmVyQ29uc2lkZXJlZCA6IDE7CiAgICAgYm9vbCBwcm90
b3R5cGVJc0tub3duT2JqZWN0IDogMTsgLy8gT25seSByZWxldmFudCBmb3IgSW5zdGFuY2VPZi4K
KyAgICBib29sIHNhd05vbkNlbGwgOiAxOwogfTsKIAogaW5saW5lIENvZGVPcmlnaW4gZ2V0U3Ry
dWN0dXJlU3R1YkluZm9Db2RlT3JpZ2luKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHVi
SW5mbykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCi0KKyNp
bmNsdWRlIDx3dGYvQm9vbGVhbkxhdHRpY2UuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMzM3MSw2ICsz
MzcxLDM5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE1hdGNoU3Ry
dWN0dXJlOiB7CisgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CisgICAgICAg
IAorICAgICAgICBCb29sZWFuTGF0dGljZSByZXN1bHQgPSBCb29sZWFuTGF0dGljZTo6Qm90dG9t
OworICAgICAgICBmb3IgKE1hdGNoU3RydWN0dXJlVmFyaWFudCYgdmFyaWFudCA6IG5vZGUtPm1h
dGNoU3RydWN0dXJlRGF0YSgpLnZhcmlhbnRzKSB7CisgICAgICAgICAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlIHN0cnVjdHVyZSA9IHZhcmlhbnQuc3RydWN0dXJlOworICAgICAgICAgICAgaWYgKCFi
YXNlLmNvbnRhaW5zKHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc3RydWN0dXJlKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGx1YkJvb2xlYW5MYXR0aWNlKHJlc3VsdCwgdmFyaWFudC5yZXN1bHQgPyBC
b29sZWFuTGF0dGljZTo6VHJ1ZSA6IEJvb2xlYW5MYXR0aWNlOjpGYWxzZSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChiYXNlLm1fc3RydWN0dXJlLmlzSW5maW5pdGUoKSB8fCBi
YXNlU2V0LnNpemUoKSA8IGJhc2UubV9zdHJ1Y3R1cmUuc2l6ZSgpKQorICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkgPT0g
Q29udHJhZGljdGlvbikKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7Cisg
ICAgICAgIAorICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICBjYXNlIEJvb2xlYW5M
YXR0aWNlOjpGYWxzZToKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihm
YWxzZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQm9vbGVhbkxhdHRpY2U6
OlRydWU6CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4odHJ1ZSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IFBoaToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUg
IkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogI2luY2x1
ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJJbnN0YW5jZU9mU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRml4ZWRBcnJheS5oIgogI2luY2x1ZGUgIkpTTW9kdWxl
RW52aXJvbm1lbnQuaCIKQEAgLTQ3ODMsMTIgKzQ3ODQsNDAgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pbnN0
YW5jZW9mOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHR1cm4gdGhpcyBpbnRv
IGVpdGhlciBhIENoZWNrU3RydWN0dXJlIGZvbGxvd2VkIGJ5IGEgY29uc3RhbnQsIG9yCi0gICAg
ICAgICAgICAvLyBzb21lIGtpbmQgb2YgTXVsdGlJbnN0YW5jZU9mIHRoaW5nLCBpZiB0aGUgSW5z
dGFuY2VPZiBJQyBpcyBzdGFibGUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Njk1CiAgICAgICAgICAgICBhdXRvJiBieXRlY29kZSA9
ICpyZWludGVycHJldF9jYXN0PE9wSW5zdGFuY2VvZio+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEluc3RhbmNlT2ZTdGF0dXMgc3RhdHVzID0gSW5zdGFu
Y2VPZlN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fc3R1YkluZm9zLAorICAgICAg
ICAgICAgICAgIG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLnZhbHVlKCkpKTsKICAgICAg
ICAgICAgIE5vZGUqIHByb3RvdHlwZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUucHJv
dG90eXBlKCkpKTsKKworICAgICAgICAgICAgLy8gT25seSBpbmxpbmUgaXQgaWYgaXQncyBTaW1w
bGUgd2l0aCBhIGNvbW1vblByb3RvdHlwZTsgYm90dG9tL3RvcCBvciB2YXJpYWJsZQorICAgICAg
ICAgICAgLy8gcHJvdG90eXBlcyBib3RoIGdldCBoYW5kbGVkIGJ5IHRoZSBJQy4gVGhpcyBtYWtl
cyBzZW5zZSBmb3IgYm90dG9tICh1bnByb2ZpbGVkKQorICAgICAgICAgICAgLy8gaW5zdGFuY2Vv
ZiBJQ3MgYmVjYXVzZSB0aGUgcHJvZml0IG9mIHRoaXMgb3B0aW1pemF0aW9uIGlzIGZhaXJseSBs
b3cuIFNvLCBpbiB0aGUKKyAgICAgICAgICAgIC8vIGFic2VuY2Ugb2YgYW55IGluZm9ybWF0aW9u
LCBpdCdzIGJldHRlciB0byBhdm9pZCBtYWtpbmcgdGhpcyBiZSB0aGUgY2F1c2Ugb2YgYQorICAg
ICAgICAgICAgLy8gcmVjb21waWxhdGlvbi4KKyAgICAgICAgICAgIGlmIChKU09iamVjdCogY29t
bW9uUHJvdG90eXBlID0gc3RhdHVzLmNvbW1vblByb3RvdHlwZSgpKSB7CisgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjb21tb25Qcm90
b3R5cGUpKSwgcHJvdG90eXBlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBN
YXRjaFN0cnVjdHVyZURhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbWF0Y2hTdHJ1Y3R1cmVEYXRhLmFk
ZCgpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIHZhcmlh
bnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgICAgICBjaGVjayh2YXJp
YW50LmNvbmRpdGlvblNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA6IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE1hdGNoU3RydWN0dXJlVmFyaWFudCBtYXRjaFZhcmlhbnQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRjaFZhcmlhbnQuc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVj
dHVyZShzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hWYXJpYW50LnJl
c3VsdCA9IHZhcmlhbnQuaXNIaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKG1hdGNoVmFyaWFudCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgTm9kZSogbWF0Y2ggPSBhZGRUb0dyYXBoKE1hdGNoU3RydWN0dXJl
LCBPcEluZm8oZGF0YSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLmRzdCgpKSwgbWF0Y2gpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX2luc3RhbmNlb2YpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdCgpKSwgYWRkVG9HcmFwaChJbnN0YW5j
ZU9mLCB2YWx1ZSwgcHJvdG90eXBlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbnN0
YW5jZW9mKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NDUsNiArNTQ1LDEwIEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChNaXNj
RmllbGRzKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBNaXNjRmll
bGRzLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgorICAgICAgICByZWFkKEpTQ2VsbF9z
dHJ1Y3R1cmVJRCk7CisgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQXJyYXlTbGljZToKICAg
ICAgICAgcmVhZChNaXNjRmllbGRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzE5NjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4OSw2ICs0ODksMzcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6
IHsKKyAgICAgICAgICAgICAgICBFZGdlIGJhc2VFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAg
ICAgICAgICAgICAgTm9kZSogYmFzZSA9IGJhc2VFZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAg
ICBNYXRjaFN0cnVjdHVyZURhdGEmIGRhdGEgPSBub2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2VWYWx1
ZSA9IG1fc3RhdGUuZm9yTm9kZShiYXNlKTsKKworICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0
ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRl
ciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4KKyAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxl
ZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBk
byB0aGluZ3MgdG8gdGhpcy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBCb29s
ZWFuTGF0dGljZSByZXN1bHQgPSBCb29sZWFuTGF0dGljZTo6Qm90dG9tOworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghYmFzZVZhbHVlLmNvbnRhaW5zKGRhdGEudmFyaWFu
dHNbaV0uc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50
c1tpLS1dID0gZGF0YS52YXJpYW50cy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLnZhcmlhbnRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGx1YkJvb2xlYW5MYXR0aWNlKHJlc3VsdCwgZGF0YS52YXJpYW50c1tpXS5yZXN1bHQg
PyBCb29sZWFuTGF0dGljZTo6VHJ1ZSA6IEJvb2xlYW5MYXR0aWNlOjpGYWxzZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gQm9vbGVhbkxhdHRpY2U6OkZhbHNlIHx8IHJlc3VsdCA9PSBCb29sZWFuTGF0dGljZTo6VHJ1
ZSkgeworICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IHN0cnVjdHVy
ZVNldDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChNYXRjaFN0cnVjdHVyZVZhcmlhbnQmIHZh
cmlhbnQgOiBkYXRhLnZhcmlhbnRzKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
U2V0LmFkZCh2YXJpYW50LnN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGFkZEJhc2VD
aGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgc3RydWN0dXJlU2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUsIG1fZ3JhcGguZnJlZXplKGpzQm9vbGVhbihyZXN1bHQgPT0gQm9vbGVh
bkxhdHRpY2U6OlRydWUpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZERp
cmVjdDoKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZERpcmVjdEZsdXNoOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjMxOTYxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTAsNiArMzEwLDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAg
IGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2FzZSBBdG9taWNz
SXNMb2NrRnJlZToKKyAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBjYXNlIFB1c2hXaXRoU2NvcGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
NTQsNiArMTQ1NCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAorICAgICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOiB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogSW50cm9kdWNlIGEgdmFyaWFudCBvZiBNYXRjaFN0cnVjdHVyZSB0aGF0IGRv
ZXNuJ3QgZG8gYSBjZWxsIGNoZWNrLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc4NAorICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNl
Pihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgSW5zdGFuY2VPZjogewogICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkKICAgICAgICAgICAgICAgICAmJiBub2Rl
LT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNTIsNiArMTA1Miw3IEBAIHB1
YmxpYzoKICAgICBCYWc8U3dpdGNoRGF0YT4gbV9zd2l0Y2hEYXRhOwogICAgIEJhZzxNdWx0aUdl
dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aUdldEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRC
eU9mZnNldERhdGE+IG1fbXVsdGlQdXRCeU9mZnNldERhdGE7CisgICAgQmFnPE1hdGNoU3RydWN0
dXJlRGF0YT4gbV9tYXRjaFN0cnVjdHVyZURhdGE7CiAgICAgQmFnPE9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE+IG1fb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKICAgICBCYWc8Q2FsbFZhcmFy
Z3NEYXRhPiBtX2NhbGxWYXJhcmdzRGF0YTsKICAgICBCYWc8TG9hZFZhcmFyZ3NEYXRhPiBtX2xv
YWRWYXJhcmdzRGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01Q
aGFzZS5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTElDTVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NCwxNSArMjY0LDkgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8o
ZGF0YS5wcmVIZWFkZXIpOwotICAgICAgICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9n
cmFwaCwgbm9kZSkpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgICAgICAg
ICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9k
ZSwgIiBiZWNhdXNlIGl0IGlzbid0IHNhZmUgdG8gZXhlY3V0ZS5cbiIpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAorCiAgICAg
ICAgIE5vZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBub2RlLT5vcmlnaW47CisgICAgICAgIGJv
b2wgY2FuU3BlY3VsYXRlQmxpbmRseSA9ICFtX2dyYXBoLmhhc0dsb2JhbEV4aXRTaXRlKG9yaWdp
bmFsT3JpZ2luLnNlbWFudGljLCBIb2lzdGluZ0ZhaWxlZCk7CiAKICAgICAgICAgLy8gTk9URTog
V2UgY291bGQganVzdCB1c2UgQmFja3dhcmRzRG9taW5hdG9ycyBoZXJlIGRpcmVjdGx5LCBzaW5j
ZSB3ZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUKICAgICAgICAgLy8gcHJlSGVhZGVyIGRvbWluYXRl
cyBmcm9tQmxvY2suIEJ1dCB3ZSB3b3VsZG4ndCBnZXQgYW55dGhpbmcgZnJvbSBiZWluZyBzbyBj
bGV2ZXIsIHNpbmNlCkBAIC0yODAsOCArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBh
ZGRzQmxpbmRTcGVjdWxhdGlvbiA9IG1heUV4aXQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZSkKICAg
ICAgICAgICAgICYmICFtX2dyYXBoLm1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMtPmRvbWlu
YXRlc0VxdWl2YWxlbnRseShkYXRhLnByZUhlYWRlciwgZnJvbUJsb2NrKTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChhZGRzQmxpbmRTcGVjdWxhdGlvbgotICAgICAgICAgICAgJiYgbV9ncmFwaC5o
YXNHbG9iYWxFeGl0U2l0ZShvcmlnaW5hbE9yaWdpbi5zZW1hbnRpYywgSG9pc3RpbmdGYWlsZWQp
KSB7CisgICAgICAgIGlmIChhZGRzQmxpbmRTcGVjdWxhdGlvbiAmJiAhY2FuU3BlY3VsYXRlQmxp
bmRseSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBkYXRh
TG9nKAogICAgICAgICAgICAgICAgICAgICAiICAgIE5vdCBob2lzdGluZyAiLCBub2RlLCAiIGJl
Y2F1c2UgaXQgbWF5IGV4aXQgYW5kIHRoZSBwcmUtaGVhZGVyICgiLApAQCAtMjkxLDYgKzI4NCwz
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIAorICAgICAgICAvLyBGb3IgYWJzdHJhY3QgaW50ZXJwcmV0YXRpb24sIHRoZXNlIGFyZSBp
biB0aGUgcmV2ZXJzZSBvcmRlciB0aGF0IHRoZXkgYXBwZWFyIGluIHRoaXMKKyAgICAgICAgLy8g
dmVjdG9yLgorICAgICAgICBWZWN0b3I8Tm9kZSosIDI+IGhvaXN0ZWROb2Rlc1JldmVyc2U7Cisg
ICAgICAgIGhvaXN0ZWROb2Rlc1JldmVyc2UuYXBwZW5kKG5vZGUpOworICAgICAgICAKKyAgICAg
ICAgaWYgKCFzYWZlVG9FeGVjdXRlKG1fc3RhdGUsIG1fZ3JhcGgsIG5vZGUpKSB7CisgICAgICAg
ICAgICAvLyBTZWUgaWYgd2UgY2FuIHJlc2N1ZSB0aGUgc2l0dWF0aW9uIGJ5IGluc2VydGluZyBi
bGluZCBzcGVjdWxhdGlvbnMuCisgICAgICAgICAgICBib29sIGlnbm9yZUVtcHR5Q2hpbGRyZW4g
PSB0cnVlOworICAgICAgICAgICAgaWYgKGNhblNwZWN1bGF0ZUJsaW5kbHkKKyAgICAgICAgICAg
ICAgICAmJiBzYWZlVG9FeGVjdXRlKG1fc3RhdGUsIG1fZ3JhcGgsIG5vZGUsIGlnbm9yZUVtcHR5
Q2hpbGRyZW4pKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAgUmVzY3Vpbmcg
aG9pc3RpbmcgYnkgaW5zZXJ0aW5nIGVtcHR5IGNoZWNrcy5cbiIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlJiBlZGdlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYg
U3BlY0VtcHR5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoZWNrID0g
bV9ncmFwaC5hZGROb2RlKENoZWNrTm90RW1wdHksIG9yaWdpbmFsT3JpZ2luLCBFZGdlKGVkZ2Uu
bm9kZSgpLCBVbnR5cGVkVXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnByZUhl
YWRlci0+aW5zZXJ0QmVmb3JlVGVybWluYWwoY2hlY2spOworICAgICAgICAgICAgICAgICAgICAg
ICAgaG9pc3RlZE5vZGVzUmV2ZXJzZS5hcHBlbmQoY2hlY2spOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgTm90IGhvaXN0aW5nICIsIG5vZGUsICIgYmVjYXVzZSBpdCBpc24ndCBzYWZlIHRvIGV4
ZWN1dGUuXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAodmVy
Ym9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiICAgIEhvaXN0
aW5nICIsIG5vZGUsICIgZnJvbSAiLCAqZnJvbUJsb2NrLCAiIHRvICIsICpkYXRhLnByZUhlYWRl
ciwKQEAgLTMwNiw3ICszMzIsOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBjYW4gdHJ1c3Qg
d2hhdCBBSSBwcm92ZXMgYWJvdXQgZWRnZSBwcm9vZiBzdGF0dXNlcyB3aGVuIGhvaXN0aW5nIHRv
IHRoZSBwcmVoZWFkZXIuCiAgICAgICAgIG1fc3RhdGUudHJ1c3RFZGdlUHJvb2ZzKCk7CiAgICAg
ICAgIG1fc3RhdGUuaW5pdGlhbGl6ZVRvKGRhdGEucHJlSGVhZGVyKTsKLSAgICAgICAgbV9pbnRl
cnByZXRlci5leGVjdXRlKG5vZGUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBob2lzdGVk
Tm9kZXNSZXZlcnNlLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhl
Y3V0ZShob2lzdGVkTm9kZXNSZXZlcnNlW2ldKTsKICAgICAgICAgLy8gSG93ZXZlciwgd2hlbiB3
YWxraW5nIHZhcmlvdXMgaW5uZXIgbG9vcHMgYmVsb3csIHRoZSBwcm9vZiBzdGF0dXMgb2YKICAg
ICAgICAgLy8gYW4gZWRnZSBtYXkgYmUgdHJpdmlhbGx5IHRydWUsIGV2ZW4gaWYgaXQncyBub3Qg
dHJ1ZSBpbiB0aGUgcHJlaGVhZGVyCiAgICAgICAgIC8vIHdlIGhvaXN0IHRvLiBXZSBkb24ndCBh
bGxvdyB0aGUgYmVsb3cgbm9kZSBleGVjdXRpb25zIHRvIGNoYW5nZSB0aGUKQEAgLTM0MCw3ICsz
NjcsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHN1YlByZUhlYWRlciA9PSBkYXRhLnBy
ZUhlYWRlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fc3RhdGUu
aW5pdGlhbGl6ZVRvKHN1YlByZUhlYWRlcik7Ci0gICAgICAgICAgICBtX2ludGVycHJldGVyLmV4
ZWN1dGUobm9kZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBob2lzdGVkTm9kZXNS
ZXZlcnNlLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1
dGUoaG9pc3RlZE5vZGVzUmV2ZXJzZVtpXSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5NywxNSBAQCB2b2lkIE5v
ZGU6OnJlbW92ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAg
IAorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAgTWF0Y2hTdHJ1Y3R1cmVEYXRh
JiBkYXRhID0gbWF0Y2hTdHJ1Y3R1cmVEYXRhKCk7CisgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmVTZXQgc2V0OworICAgICAgICBmb3IgKE1hdGNoU3RydWN0dXJlVmFyaWFudCYgdmFyaWFudCA6
IGRhdGEudmFyaWFudHMpCisgICAgICAgICAgICBzZXQuYWRkKHZhcmlhbnQuc3RydWN0dXJlKTsK
KyAgICAgICAgY29udmVydFRvQ2hlY2tTdHJ1Y3R1cmUoZ3JhcGguYWRkU3RydWN0dXJlU2V0KHNl
dCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBkZWZhdWx0OgogICAg
ICAgICBpZiAoZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAgICB1bnNpZ25l
ZCB0YXJnZXRJbmRleCA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
cmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDE1IEBAIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0
RGF0YSB7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKIH07CiAKK3N0cnVj
dCBNYXRjaFN0cnVjdHVyZVZhcmlhbnQgeworICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0
dXJlOworICAgIGJvb2wgcmVzdWx0OworfTsKKworc3RydWN0IE1hdGNoU3RydWN0dXJlRGF0YSB7
CisgICAgVmVjdG9yPE1hdGNoU3RydWN0dXJlVmFyaWFudCwgMj4gdmFyaWFudHM7Cit9OworCiBz
dHJ1Y3QgTmV3QXJyYXlCdWZmZXJEYXRhIHsKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7
CkBAIC0xODUzLDYgKzE4NjIsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fb3BJbmZv
LmFzPE11bHRpUHV0QnlPZmZzZXREYXRhKj4oKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNN
YXRjaFN0cnVjdHVyZURhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTWF0Y2hT
dHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIE1hdGNoU3RydWN0dXJlRGF0YSYgbWF0Y2hTdHJ1
Y3R1cmVEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNNYXRjaFN0cnVjdHVyZURhdGEo
KSk7CisgICAgICAgIHJldHVybiAqbV9vcEluZm8uYXM8TWF0Y2hTdHJ1Y3R1cmVEYXRhKj4oKTsK
KyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKICAg
ICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNiArMzQ2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKE92ZXJyaWRlc0hhc0lu
c3RhbmNlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNy
byhJbnN0YW5jZU9mLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAg
ICBtYWNybyhJbnN0YW5jZU9mQ3VzdG9tLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJv
b2xlYW4pIFwKKyAgICBtYWNybyhNYXRjaFN0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgXAogICAgIG1hY3JvKElzQ2VsbFdpdGhUeXBlLCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKElzRW1wdHksIE5vZGVSZXN1bHRCb29sZWFuKSBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAko
cmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwxNCArMTM0LDE0IEBAIHByaXZhdGU6CiAv
LyBzYWZlbHkgZXhlY3V0ZSBiZWZvcmUgdGhhdCBjaGVjaywgc28gbG9uZyBhcyB0aGF0IGNoZWNr
IGNvbnRpbnVlcyB0byBndWFyZCBhbnkKIC8vIHVzZXItb2JzZXJ2YWJsZSB0aGluZ3MgZG9uZSB0
byB0aGUgbG9hZGVkIHZhbHVlLgogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+
Ci1ib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUpCitib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0
YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdub3JlRW1wdHlDaGlsZHJlbiA9
IGZhbHNlKQogewogICAgIFNhZmVUb0V4ZWN1dGVFZGdlPEFic3RyYWN0U3RhdGVUeXBlPiBzYWZl
VG9FeGVjdXRlRWRnZShzdGF0ZSk7CiAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgs
IG5vZGUsIHNhZmVUb0V4ZWN1dGVFZGdlKTsKICAgICBpZiAoIXNhZmVUb0V4ZWN1dGVFZGdlLnJl
c3VsdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoc2FmZVRvRXhlY3V0ZUVk
Z2UubWF5U2VlRW1wdHlDaGlsZCgpKSB7CisgICAgaWYgKCFpZ25vcmVFbXB0eUNoaWxkcmVuICYm
IHNhZmVUb0V4ZWN1dGVFZGdlLm1heVNlZUVtcHR5Q2hpbGQoKSkgewogICAgICAgICAvLyBXZSBj
b25zZXJ2YXRpdmVseSBhc3N1bWUgaWYgdGhlIGVtcHR5IHZhbHVlIGZsb3dzIGludG8gYSBub2Rl
LAogICAgICAgICAvLyBpdCBtaWdodCBub3QgYmUgYWJsZSB0byBoYW5kbGUgaXQgKGUuZywgY3Jh
c2gpLiBJbiBnZW5lcmFsLCB0aGUgYnl0ZWNvZGUgZ2VuZXJhdG9yCiAgICAgICAgIC8vIGVtaXRz
IGNvZGUgaW4gc3VjaCBhIHdheSB0aGF0IG1vc3Qgbm9kZSB0eXBlcyBkb24ndCBuZWVkIHRvIHdv
cnJ5IGFib3V0IHRoZSBlbXB0eSB2YWx1ZQpAQCAtNDUyLDYgKzQ1Miw3IEBAIGJvb2wgc2FmZVRv
RXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAg
Y2FzZSBBdG9taWNzSXNMb2NrRnJlZToKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJn
dW1lbnRzOgorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgY2FzZSBBcnJheVNsaWNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzYwLDYgKzMzNjAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAg
IGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAgY29tcGlsZU1hdGNoU3RydWN0dXJlKG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVy
OiB7CiAgICAgICAgIGNvbXBpbGVHZXRHZXR0ZXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjI3LDYgKzM2MjcsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAgY29t
cGlsZU1hdGNoU3RydWN0dXJlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAogICAgIGNhc2UgR2V0R2V0dGVyOiB7CiAgICAgICAgIGNvbXBpbGVHZXRHZXR0ZXIobm9kZSk7
CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgz
Myw2ICsxMTgzMywzMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlPZmZzZXQo
CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVN
YXRjaFN0cnVjdHVyZShOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwor
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7CisgICAgCisgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHRlbXBHUFIpOworICAgIAorICAg
IGF1dG8mIHZhcmlhbnRzID0gbm9kZS0+bWF0Y2hTdHJ1Y3R1cmVEYXRhKCkudmFyaWFudHM7Cisg
ICAgVmVjdG9yPGludDY0X3Q+IGNhc2VzOworICAgIGZvciAoTWF0Y2hTdHJ1Y3R1cmVWYXJpYW50
JiB2YXJpYW50IDogdmFyaWFudHMpCisgICAgICAgIGNhc2VzLmFwcGVuZCh2YXJpYW50LnN0cnVj
dHVyZS0+aWQoKSk7CisgICAgCisgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaCh0ZW1wR1BS
LCBjYXNlcywgQmluYXJ5U3dpdGNoOjpJbnQzMik7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IGRvbmU7CisgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKG1faml0KSkgeworICAgICAg
ICBtX2ppdC5ib3hCb29sZWFuUGF5bG9hZCh2YXJpYW50c1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4
KCldLnJlc3VsdCwgdGVtcEdQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisgICAgfQorICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIG5v
ZGUsIGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1f
aml0KTsKKyAgICAKKyAgICBibGVzc2VkQm9vbGVhblJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKK30K
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KE5vZGUq
IG5vZGUpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNzUsNiArMTM3NSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbFdpdGhUaGlzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVHZXRCeU9mZnNldChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlPZmZzZXQoTm9kZSop
OworICAgIHZvaWQgY29tcGlsZU1hdGNoU3RydWN0dXJlKE5vZGUqKTsKICAgICAvLyBJZiB0aGlz
IHJldHVybnMgZmFsc2UgaXQgbWVhbnMgdGhhdCB3ZSB0ZXJtaW5hdGVkIHNwZWN1bGF0aXZlIGV4
ZWN1dGlvbi4KICAgICBib29sIGdldEludFR5cGVkQXJyYXlTdG9yZU9wZXJhbmQoCiAgICAgICAg
IEdQUlRlbXBvcmFyeSYgdmFsdWUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OSw2
ICszNDksNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOgogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgY2FzZSBQ
dXRCeVZhbFdpdGhUaGlzOgorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgICAgIC8vIFRo
ZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTExLDYgKzkxMSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNl
dDoKICAgICAgICAgICAgIGNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KCk7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKKyAgICAgICAgICAgIGNvbXBpbGVN
YXRjaFN0cnVjdHVyZSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0R2xv
YmFsVmFyOgogICAgICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJpYWJsZToKICAgICAgICAg
ICAgIGNvbXBpbGVHZXRHbG9iYWxWYXJpYWJsZSgpOwpAQCAtNjU5Miw2ICs2NTk1LDQ3IEBAIHBy
aXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVNYXRjaFN0cnVjdHVyZSgpCisgICAgeworICAg
ICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAor
ICAgICAgICBNYXRjaFN0cnVjdHVyZURhdGEmIGRhdGEgPSBtX25vZGUtPm1hdGNoU3RydWN0dXJl
RGF0YSgpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgdHJ1ZUJsb2NrID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZmFsc2VCbG9jayA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGV4aXRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Js
b2Nrc0JlZm9yZSh0cnVlQmxvY2spOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENh
c2UsIDI+IGNhc2VzOworICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7Cisg
ICAgICAgIGZvciAoTWF0Y2hTdHJ1Y3R1cmVWYXJpYW50JiB2YXJpYW50IDogZGF0YS52YXJpYW50
cykgeworICAgICAgICAgICAgYmFzZVNldC5hZGQodmFyaWFudC5zdHJ1Y3R1cmUpOworICAgICAg
ICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UoCisgICAgICAgICAgICAgICAgd2Vha1N0cnVj
dHVyZUlEKHZhcmlhbnQuc3RydWN0dXJlKSwKKyAgICAgICAgICAgICAgICB2YXJpYW50LnJlc3Vs
dCA/IHRydWVCbG9jayA6IGZhbHNlQmxvY2ssIFdlaWdodCgxKSkpOworICAgICAgICB9CisgICAg
ICAgIGJvb2wgc3RydWN0dXJlc0NoZWNrZWQgPSBtX2ludGVycHJldGVyLmZvck5vZGUobV9ub2Rl
LT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihiYXNlU2V0KTsKKyAgICAgICAgZW1p
dFN3aXRjaEZvck11bHRpQnlPZmZzZXQoYmFzZSwgc3RydWN0dXJlc0NoZWNrZWQsIGNhc2VzLCBl
eGl0QmxvY2spOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8odHJ1ZUJsb2NrLCBm
YWxzZUJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgdHJ1ZVJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhbHNlQmxvY2ssIGV4aXRCbG9j
ayk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhbHNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXRCbG9jaywgY29udGludWF0aW9uKTsK
KyAgICAgICAgaWYgKCFzdHJ1Y3R1cmVzQ2hlY2tlZCkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShC
YWRDYWNoZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAg
IG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50
MzIsIHRydWVSZXN1bHQsIGZhbHNlUmVzdWx0KSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29t
cGlsZUdldEdsb2JhbFZhcmlhYmxlKCkKICAgICB7CiAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
bG9hZDY0KG1fb3V0LmFic29sdXRlKG1fbm9kZS0+dmFyaWFibGVQb2ludGVyKCkpKSk7CkluZGV4
OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIzMTk2
MSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIzOSw2ICsyMzksNyBAQAogCQkwRkIxNEUxODE4MEZBMjE4MDA5QjZCNEQgLyog
QmFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZCNEQgLyogQmFnVG9IYXNo
TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkIzMTdDMzFDNDg4MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2luZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1UcmFjaW5nLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjM5OUI4MjBBRjVBNTgwMDE3RTIxMyAvKiBCb29sZWFu
TGF0dGljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb29sZWFuTGF0dGlj
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0Njc4MjFGREUyODJCMDAzRkNC
MDkgLyogQ29uY3VycmVudEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb25jdXJyZW50QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ2
NzgzMUZERTI4MkMwMDNGQ0IwOSAvKiBDb25jdXJyZW50VmVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZDNDQ4ODIxNkZFOUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNzSUQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTgxMyw2ICs4MTQsNyBAQAogCQkJCTFBOTQ0RjQ2MUMzRDg4MTQwMDVC
RDI4QyAvKiBCbG9ja1B0ci5oICovLAogCQkJCUE4QTQ3MjY0MTUxQTgyNUEwMDQxMjNGRiAvKiBC
bG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb29tRmls
dGVyLmggKi8sCisJCQkJMEZCMzk5QjgyMEFGNUE1ODAwMTdFMjEzIC8qIEJvb2xlYW5MYXR0aWNl
LmggKi8sCiAJCQkJMEY5MzI3NEExQzE3RjRCNzAwQ0Y2NTY0IC8qIEJveC5oICovLAogCQkJCTdD
M0Y3MjM5MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8sCiAJCQkJMEY0NTcwNDQxQkU4
MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jv
b2xlYW5MYXR0aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQm9vbGVhbkxhdHRp
Y2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Cb29sZWFuTGF0dGljZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitl
bnVtIGNsYXNzIEJvb2xlYW5MYXR0aWNlIDogdWludDhfdCB7CisgICAgQm90dG9tID0gMCwKKyAg
ICBGYWxzZSA9IDEsCisgICAgVHJ1ZSA9IDIsCisgICAgVG8gPSAzCit9OworCitpbmxpbmUgQm9v
bGVhbkxhdHRpY2UgbHViQm9vbGVhbkxhdHRpY2UoQm9vbGVhbkxhdHRpY2UgYSwgQm9vbGVhbkxh
dHRpY2UgYikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Qm9vbGVhbkxhdHRpY2U+KHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KGEpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihiKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkJvb2xlYW5MYXR0aWNlOwordXNpbmcgV1RG
OjpsdWJCb29sZWFuTGF0dGljZTsKKwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDIzMTk2MSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xNCw2ICsxNCw3IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBCbG9ja1B0ci5o
CiAgICAgQmxvY2tTdGFjay5oCiAgICAgQmxvb21GaWx0ZXIuaAorICAgIEJvb2xlYW5MYXR0aWNl
LmgKICAgICBCb3guaAogICAgIEJyaWdhbmQuaAogICAgIEJ1YmJsZVNvcnQuaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340748</attachid>
            <date>2018-05-18 15:30:04 -0700</date>
            <delta_ts>2018-05-18 15:55:35 -0700</delta_ts>
            <desc>it&apos;s a nice speed-up</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>64721</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxOTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBA
QAorMjAxOC0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaW5saW5lIEluc3RhbmNlT2YgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2OTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdGVhY2hlcyB0aGUgREZHIGhv
dyB0byBpbmxpbmUgSW5zdGFuY2VPZiBJQ3MgaW50byBhIE1hdGNoU3RydWN0dXJlIG5vZGUuIFRo
aXMgY2FuIHRoZW4KKyAgICAgICAgYmUgZm9sZGVkIHRvIGEgQ2hlY2tTdHJ1Y3R1cmUgKyBKU0Nv
bnN0YW50LgorICAgICAgICAKKyAgICAgICAgSW4gdGhlIHByb2Nlc3Mgb2YgdGVzdGluZyB0aGlz
LCBJIGZvdW5kIGEgYnVnIHdoZXJlIExJQ00gd2FzIG5vdCBob2lzdGluZyB0aGluZ3MgdGhhdAor
ICAgICAgICBkZXBlbmRlZCBvbiBFeHRyYU9TUkVudHJ5TG9jYWwgYmVjYXVzZSB0aGF0IG1pZ2h0
IHJldHVybiBTcGVjRW1wdHkuIEkgZml4ZWQgdGhhdCBieSB0ZWFjaGluZworICAgICAgICBMSUNN
IGhvdyB0byBtYXRlcmlhbGl6ZSBDaGVja05vdEVtcHR5IG9uIGRlbWFuZCB3aGVuZXZlciAhSG9p
c3RpbmdGYWlsZWQuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgfjclIHNwZWVkLXVwIG9u
IGJveWVyLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudCk6
CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmZpbHRlcik6CisgICAgICAgICogYnl0ZWNv
ZGUvR2V0QnlJZFN0YXR1cy5oOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6b3BlcmF0b3IhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAg
IChKU0M6OkdldEJ5SWRWYXJpYW50OjpvcGVyYXRvciEgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGJ5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OmFwcGVu
ZElDU3RhdHVzVmFyaWFudCk6CisgICAgICAgIChKU0M6OmZpbHRlcklDU3RhdHVzVmFyaWFudHMp
OgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6YXBwZW5kVmFyaWFudCk6CisgICAgICAgIChKU0M6
Okluc3RhbmNlT2ZTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9m
U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3Rh
dHVzOjpjb21tb25Qcm90b3R5cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3Rh
dHVzOjpmaWx0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6Okluc3RhbmNlT2ZTdGF0dXMpOgor
ICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChK
U0M6Okluc3RhbmNlT2ZTdGF0dXM6OmlzU2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFu
Y2VPZlN0YXR1czo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNl
T2ZTdGF0dXM6OmlzU2ltcGxlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1
czo6dGFrZXNTbG93UGF0aCBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6
Om51bVZhcmlhbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6dmFy
aWFudHMgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjphdCBjb25zdCk6
CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6Om9wZXJhdG9yW10gY29uc3QpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0luc3RhbmNlT2ZWYXJpYW50LmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6Okluc3RhbmNlT2ZWYXJpYW50OjpJbnN0YW5jZU9mVmFyaWFudCk6CisgICAgICAgIChKU0M6
Okluc3RhbmNlT2ZWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6Okluc3Rh
bmNlT2ZWYXJpYW50OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlh
bnQ6OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RhbmNlT2ZW
YXJpYW50Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6SW5zdGFu
Y2VPZlZhcmlhbnQpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZWYXJpYW50OjpzdHJ1Y3R1cmVT
ZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6c3RydWN0dXJlU2V0
KToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6OmNvbmRpdGlvblNldCBjb25zdCk6
CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZWYXJpYW50Ojpwcm90b3R5cGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6aXNIaXQgY29uc3QpOgorICAgICAgICAqIGJ5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkluZm86OlN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6Y29uc2lkZXJDYWNo
aW5nKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAq
IGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6Cisg
ICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZn
L0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBk
ZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4
dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcv
REZHTElDTVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpMSUNNUGhhc2U6OmF0dGVtcHRI
b2lzdCk6CisgICAgICAgICogZGZnL0RGR05vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OnJlbW92ZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpoYXNNYXRjaFN0cnVjdHVyZURhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Om1hdGNoU3RydWN0dXJlRGF0YSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAg
ICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9F
eGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1cmUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBm
dGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlTWF0Y2hTdHJ1Y3R1cmUpOgorCiAyMDE4LTA1LTE4ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbWlzc2luZyBleGNlcHRpb24gY2hlY2suCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw2ICsy
MjMsOCBAQCBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCiBieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuY3BwCiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWVTZXQuY3BwCiBieXRlY29kZS9JbnN0YW5j
ZU9mQWNjZXNzQ2FzZS5jcHAKK2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwCitieXRlY29k
ZS9JbnN0YW5jZU9mVmFyaWFudC5jcHAKIGJ5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nh
c2UuY3BwCiBieXRlY29kZS9KdW1wVGFibGUuY3BwCiBieXRlY29kZS9MTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTQ4OSw2ICs0ODksOSBAQAogCQkwRkIxNzY2MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIx
NzY1RjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi87IH07CiAJCTBGQjM4NzhF
MUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIzODc4QjFCRkJDNDREMDBFM0FCMUUgLyog
QWlyQmxvY2tXb3JrbGlzdC5oICovOyB9OwogCQkwRkIzODc5MDFCRkJDNDREMDBFM0FCMUUgLyog
QWlyT3B0aW1pemVCbG9ja09yZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkIzODc4RDFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9j
a09yZGVyLmggKi87IH07CisJCTBGQjM5OUJFMjBBRjZCM0QwMDE3RTIxMyAvKiBJQ1N0YXR1c1V0
aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIz
OTlCRDIwQUY2QjM4MDAxN0UyMTMgLyogSUNTdGF0dXNVdGlscy5oICovOyB9OworCQkwRkIzOTlC
RjIwQUY2QjNGMDAxN0UyMTMgLyogSW5zdGFuY2VPZlN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzk5QkIyMEFGNkIyQTAwMTdFMjEzIC8q
IEluc3RhbmNlT2ZTdGF0dXMuaCAqLzsgfTsKKwkJMEZCMzk5QzAyMEFGNkI0MzAwMTdFMjEzIC8q
IEluc3RhbmNlT2ZWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkIzOTlCOTIwQUY2QjJBMDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQu
aCAqLzsgfTsKIAkJMEZCNDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0Njc3RTFGRERB
NkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLzsgfTsKIAkJMEZCNDY3ODAxRkREQTZGMTAw
M0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNDY3ODEx
RkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0Njc3QjFGRERBNkQ4MDAzRkNCMDkgLyog
SXNvQ2VsbFNldElubGluZXMuaCAqLzsgfTsKQEAgLTI2MDksNiArMjYxMiwxMSBAQAogCQkwRkIz
ODc4QzFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpck9wdGltaXplQmxvY2tPcmRlci5jcHA7
IHBhdGggPSBiMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxv
Y2tPcmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJPcHRpbWl6ZUJs
b2NrT3JkZXIuaDsgcGF0aCA9IGIzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMzg3OTExQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENv
bXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29tcGls
ZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQjM5OUI5MjBBRjZCMkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnN0YW5jZU9mVmFyaWFudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIzOTlCQTIwQUY2QjJBMDAxN0UyMTMgLyogSW5z
dGFuY2VPZlN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnN0YW5jZU9mU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMzk5
QkIyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zdGFuY2VPZlN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkIzOTlCQzIwQUY2QjJBMDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zdGFuY2VPZlZhcmlh
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIzOTlCRDIwQUY2QjM4MDAx
N0UyMTMgLyogSUNTdGF0dXNVdGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJQ1N0YXR1c1V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQxNTgz
MUQ3OEY5ODIwMERGOEQwOSAvKiBBcnJheUNvbnZlbnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5Q29udmVudGlvbnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ2NzdCMUZEREE2RDgwMDNGQ0Iw
OSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJc29DZWxsU2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYy
NCwxMiArNzYzMiwxNyBAQAogCQkJCTBGMDMzMkMyMThCMDE3NjMwMDVGOTc5QSAvKiBHZXRCeUlk
VmFyaWFudC5oICovLAogCQkJCTE0QUQ5MTA4MURDQTkyOTQwMDE0RjlGRSAvKiBHbG9iYWxDb2Rl
QmxvY2suaCAqLywKIAkJCQkwRjBCODNBODE0QkNGNTVFMDA4ODVCNEYgLyogSGFuZGxlckluZm8u
aCAqLywKKwkJCQkwRkIzOTlCRDIwQUY2QjM4MDAxN0UyMTMgLyogSUNTdGF0dXNVdGlscy5oICov
LAogCQkJCTc5MDVCQjY2MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuY3BwICovLAog
CQkJCTc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCAqLywKIAkJCQkx
NDhBN0JFRDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmNwcCAqLywKIAkJCQkx
NDhBN0JFRTFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmggKi8sCiAJCQkJMEYy
NEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgKi8sCiAJCQkJ
MEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovLAorCQkJ
CTBGQjM5OUJBMjBBRjZCMkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mU3RhdHVzLmNwcCAqLywKKwkJ
CQkwRkIzOTlCQjIwQUY2QjJBMDAxN0UyMTMgLyogSW5zdGFuY2VPZlN0YXR1cy5oICovLAorCQkJ
CTBGQjM5OUJDMjBBRjZCMkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFudC5jcHAgKi8sCisJ
CQkJMEZCMzk5QjkyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmggKi8sCiAJ
CQkJOTY5QTA3OTMwRUQxRDNBRTAwRjFGNjgxIC8qIEluc3RydWN0aW9uLmggKi8sCiAJCQkJNTNG
NkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmls
ZS5oICovLAogCQkJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICov
LApAQCAtOTA1NSw2ICs5MDY4LDcgQEAKIAkJCQlBNTAzRkExRTE4OEUwRkIwMDAxMTBGMTQgLyog
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDEz
Q0E4QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDE2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZCMzk5QzAyMEFGNkI0MzAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNMb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2Vk
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEJCN0YzMThBNDExNzkwMDhBMEZDRCAvKiBK
U01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTkxNzksNiArOTE5Myw3
IEBACiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk4MUVEODIzMjgyMzREOTFCQUVDQ0FERSAvKiBNYWNoaW5l
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCNzIzQjgxMkQ3REE2RjAwM0JENUVEIC8q
IE1hY2hpbmVTdGFja01hcmtlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCMzk5QkYyMEFGNkIz
RjAwMTdFMjEzIC8qIEluc3RhbmNlT2ZTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzM2
RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJEMDBDRjg3MTEgLyogTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oIGluIEhlYWRlcnMgKi8sCkBAIC05NDM3LDYgKzk0NTIsNyBAQAogCQkJCTcwNUI0MUFF
MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk2QjczMjcxQkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbENvbnN0cnVjdG9yLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjAxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCMzk5QkUyMEFGNkIzRDAwMTdFMjEzIC8qIElDU3Rh
dHVzVXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUIyMUE2RTUwMUUwMDcxNjc1NyAv
KiBTeW1ib2xQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI4MUJEQTA4RUYw
MDMzMUI4NCAvKiBTeW1ib2xQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ2QjBFMTZGNUNEMDBCMzQ0NjAgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNw
cAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgogI2luY2x1ZGUg
IkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTQ3LDIyICs0OCw3IEBA
IGNsYXNzIEdldHRlclNldHRlcjsKIAogYm9vbCBHZXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50
KGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50KQogewotICAgIC8vIEF0dGVtcHQgdG8gbWVy
Z2UgdGhpcyB2YXJpYW50IHdpdGggYW4gYWxyZWFkeSBleGlzdGluZyB2YXJpYW50LgotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChtX3ZhcmlhbnRzW2ldLmF0dGVtcHRUb01lcmdlKHZhcmlhbnQpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBv
dmVybGFwLiBXZSBzaG91bGQgaGF2ZSBwcnVuZWQgb3V0IG9wcG9ydHVuaXRpZXMgZm9yCi0gICAg
Ly8gb3ZlcmxhcCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IGFuIGlubGluZSBjYWNoZSBnb3QgaW50
byBhIHdlaXJkIHN0YXRlLiBXZSBhcmUKLSAgICAvLyBkZWZlbnNpdmUgYW5kIGJhaWwgaWYgd2Ug
ZGV0ZWN0IGNyYXp5LgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhbnRzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLnN0cnVjdHVyZVNldCgpLm92
ZXJsYXBzKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICAKLSAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZh
cmlhbnQpOwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC00MzIsMTQgKzQxOCw3IEBAIHZv
aWQgR2V0QnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHUKIHsKICAgICBpZiAobV9zdGF0
ZSAhPSBTaW1wbGUpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBGSVhNRTogV2UgY291
bGQgYWxzbyBmaWx0ZXIgdGhlIHZhcmlhbnRzIHRoZW1zZWx2ZXMuCi0gICAgCi0gICAgbV92YXJp
YW50cy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgWyZdIChHZXRCeUlkVmFyaWFudCYgdmFy
aWFudCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gIXZhcmlhbnQuc3RydWN0dXJlU2V0
KCkub3ZlcmxhcHMoc2V0KTsKLSAgICAgICAgfSk7Ci0gICAgCisgICAgZmlsdGVySUNTdGF0dXNW
YXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOwogICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkK
ICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDIzMTk2MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogICAgIFN0YXRlIHN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KICAgICBib29sIGlzQ3VzdG9tKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZSA9PSBDdXN0b207IH0KICAgICBib29sIGlzTW9kdWxlTmFtZXNwYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBNb2R1bGVOYW1lc3BhY2U7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAy
MzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgR2V0QnlJZFZh
cmlhbnQmIG9wZXJhdG9yPShjb25zdCBHZXRCeUlkVmFyaWFudCYpOwogICAgIAogICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUoKTsgfQotICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0K
ICAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0
OyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVz
VXRpbHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SUNTdGF0dXNVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VmVjdG9yVHlwZSwgdHlw
ZW5hbWUgVmFyaWFudFR5cGU+Citib29sIGFwcGVuZElDU3RhdHVzVmFyaWFudChWYXJpYW50VmVj
dG9yVHlwZSYgdmFyaWFudHMsIGNvbnN0IFZhcmlhbnRUeXBlJiB2YXJpYW50KQoreworICAgIC8v
IEF0dGVtcHQgdG8gbWVyZ2UgdGhpcyB2YXJpYW50IHdpdGggYW4gYWxyZWFkeSBleGlzdGluZyB2
YXJpYW50LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YXJpYW50cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAodmFyaWFudHNbaV0uYXR0ZW1wdFRvTWVyZ2UodmFyaWFudCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRo
ZXJlIGlzIG5vIG92ZXJsYXAuIFdlIHNob3VsZCBoYXZlIHBydW5lZCBvdXQgb3Bwb3J0dW5pdGll
cyBmb3IKKyAgICAvLyBvdmVybGFwIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgYW4gaW5saW5lIGNh
Y2hlIGdvdCBpbnRvIGEgd2VpcmQgc3RhdGUuIFdlIGFyZQorICAgIC8vIGRlZmVuc2l2ZSBhbmQg
YmFpbCBpZiB3ZSBkZXRlY3QgY3JhenkuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZh
cmlhbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICh2YXJpYW50c1tpXS5zdHJ1Y3R1cmVT
ZXQoKS5vdmVybGFwcyh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOworICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VmVjdG9yVHlwZT4K
K3ZvaWQgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhWYXJpYW50VmVjdG9yVHlwZSYgdmFyaWFudHMs
IGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQoreworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhbHNv
IGZpbHRlciB0aGUgdmFyaWFudHMgdGhlbXNlbHZlcy4KKyAgICAKKyAgICB2YXJpYW50cy5yZW1v
dmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChhdXRvJiB2YXJpYW50KSAtPiBib29sIHsKKyAg
ICAgICAgICAgIHJldHVybiAhdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhzZXQpOwor
ICAgICAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbnN0YW5jZU9mU3RhdHVzLmgiCisKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCisj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQg
SW5zdGFuY2VPZlN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYg
dmFyaWFudCkKK3sKKyAgICBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFu
dCk7Cit9CisKK0luc3RhbmNlT2ZTdGF0dXMgSW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0ZUZvcigK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3R1YkluZm9NYXAmIGluZm9NYXAsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jayk7CisgICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cyByZXN1bHQ7CisjaWYgRU5B
QkxFKERGR19KSVQpCisgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxvY2tlciwgaW5m
b01hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkpOworCisgICAgaWYgKCFyZXN1bHQu
dGFrZXNTbG93UGF0aCgpKSB7CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcih1bmxpbmtlZENvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAg
Ly8gV2UgYWxzbyBjaGVjayBmb3IgQmFkVHlwZSBoZXJlIGluIGNhc2UgdGhpcyBpcyAicHJpbWl0
aXZlIGluc3RhbmNlb2YgRm9vIi4KKyAgICAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT5oYXNF
eGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRD
YWNoZSkpCisgICAgICAgICAgICB8fCB1bmxpbmtlZENvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9j
a2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ29uc3RhbnRDYWNo
ZSkpCisgICAgICAgICAgICB8fCB1bmxpbmtlZENvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9ja2Vy
LCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkVHlwZSkpKQorICAgICAg
ICAgICAgcmV0dXJuIFRha2VzU2xvd1BhdGg7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oaW5mb01hcCk7CisgICAgVU5VU0VEX1BBUkFNKGNvZGVPcmlnaW4pOworI2VuZGlmCisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIEVOQUJMRShERkdfSklUKQorSW5zdGFuY2VP
ZlN0YXR1cyBJbnN0YW5jZU9mU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQoreworICAgIGlmICgh
c3R1YkluZm8gfHwgIXN0dWJJbmZvLT5ldmVyQ29uc2lkZXJlZCkKKyAgICAgICAgcmV0dXJuIE5v
SW5mb3JtYXRpb247CisgICAgCisgICAgLy8gRklYTUU6IFdlIHdvdWxkbid0IGhhdmUgdG8gYmFp
bCBmb3Igbm9uQ2VsbCBpZiB3ZSB0YXVnaHQgTWF0Y2hTdHJ1Y3R1cmUgaG93IHRvIGhhbmRsZSBu
b24KKyAgICAvLyBjZWxscy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg1Nzg0CisgICAgaWYgKHN0dWJJbmZvLT50b29rU2xvd1BhdGggfHwgc3R1Yklu
Zm8tPnNhd05vbkNlbGwpCisgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQYXRoOworICAgIAorICAg
IGlmIChzdHViSW5mby0+Y2FjaGVUeXBlICE9IENhY2hlVHlwZTo6U3R1YikKKyAgICAgICAgcmV0
dXJuIFRha2VzU2xvd1BhdGg7IC8vIFRoaXMgaXMgY29uc2VydmF0aXZlLiBJdCBjb3VsZCBiZSB0
aGF0IHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAgCisgICAgUG9seW1vcnBoaWNBY2Nlc3Mq
IGxpc3QgPSBzdHViSW5mby0+dS5zdHViOworICAgIEluc3RhbmNlT2ZTdGF0dXMgcmVzdWx0Owor
ICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgp
OyArK2xpc3RJbmRleCkgeworICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0
LT5hdChsaXN0SW5kZXgpOworICAgICAgICAKKyAgICAgICAgaWYgKGFjY2Vzcy50eXBlKCkgPT0g
QWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMpCisgICAgICAgICAgICByZXR1cm4gVGFrZXNT
bG93UGF0aDsKKyAgICAgICAgCisgICAgICAgIGlmICghYWNjZXNzLmNvbmRpdGlvblNldCgpLnN0
cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgcmV0dXJuIFRha2VzU2xvd1Bh
dGg7CisgICAgICAgIAorICAgICAgICByZXN1bHQuYXBwZW5kVmFyaWFudChJbnN0YW5jZU9mVmFy
aWFudCgKKyAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgIGFjY2Vz
cy5jb25kaXRpb25TZXQoKSwKKyAgICAgICAgICAgIGFjY2Vzcy5hczxJbnN0YW5jZU9mQWNjZXNz
Q2FzZT4oKS5wcm90b3R5cGUoKSwKKyAgICAgICAgICAgIGFjY2Vzcy50eXBlKCkgPT0gQWNjZXNz
Q2FzZTo6SW5zdGFuY2VPZkhpdCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCitKU09iamVjdCogSW5zdGFuY2VPZlN0YXR1
czo6Y29tbW9uUHJvdG90eXBlKCkgY29uc3QKK3sKKyAgICBKU09iamVjdCogcHJvdG90eXBlID0g
bnVsbHB0cjsKKyAgICBmb3IgKGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50JiB2YXJpYW50IDogbV92
YXJpYW50cykgeworICAgICAgICBpZiAoIXByb3RvdHlwZSkgeworICAgICAgICAgICAgcHJvdG90
eXBlID0gdmFyaWFudC5wcm90b3R5cGUoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIGlmIChwcm90b3R5cGUgIT0gdmFyaWFudC5wcm90b3R5cGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gcHJvdG90eXBlOworfQor
Cit2b2lkIEluc3RhbmNlT2ZTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCisgICAgICAgIHJldHVybjsK
KyAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHN0cnVjdHVyZVNldCk7Cisg
ICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQorICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1h
dGlvbjsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgi
CisjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgorI2luY2x1ZGUgIkluc3RhbmNlT2ZWYXJp
YW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBY2Nlc3NDYXNlOworY2xhc3MgQ29k
ZUJsb2NrOworY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CisKK3R5cGVkZWYgSGFzaE1hcDxDb2Rl
T3JpZ2luLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0
dWJJbmZvTWFwOworCitjbGFzcyBJbnN0YW5jZU9mU3RhdHVzIHsKK3B1YmxpYzoKKyAgICBlbnVt
IFN0YXRlIHsKKyAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0
aW9uLgorICAgICAgICBOb0luZm9ybWF0aW9uLAorICAgICAgICAKKyAgICAgICAgLy8gSXQncyBj
YWNoZWQgaW4gYSBzaW1wbGUgd2F5LgorICAgICAgICBTaW1wbGUsCisgICAgICAgIAorICAgICAg
ICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgorICAgICAgICBUYWtlc1Ns
b3dQYXRoCisgICAgfTsKKyAgICAKKyAgICBJbnN0YW5jZU9mU3RhdHVzKCkKKyAgICAgICAgOiBt
X3N0YXRlKE5vSW5mb3JtYXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAgICBJbnN0YW5jZU9m
U3RhdHVzKFN0YXRlIHN0YXRlKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgeworICAg
ICAgICBBU1NFUlQoc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBzdGF0ZSA9PSBNYWtlc0NhbGxz
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEluc3RhbmNlT2ZTdGF0dXMgY29tcHV0ZUZvcihD
b2RlQmxvY2sqLCBTdHViSW5mb01hcCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgIAor
I2lmIEVOQUJMRShERkdfSklUKQorICAgIHN0YXRpYyBJbnN0YW5jZU9mU3RhdHVzIGNvbXB1dGVG
b3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyop
OworI2VuZGlmCisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
OyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9J
bmZvcm1hdGlvbjsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biBpc1NldCgpOyB9CisgICAgCisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgPT0gU2ltcGxlOyB9CisgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoOyB9CisgICAgCisgICAgSlNPYmplY3QqIGNvbW1v
blByb3RvdHlwZSgpIGNvbnN0OworICAgIAorICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fdmFyaWFudHMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPEluc3RhbmNl
T2ZWYXJpYW50LCAyPiYgdmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9Cisg
ICAgY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV92YXJpYW50c1tpbmRleF07IH0KKyAgICBjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAg
dm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhcHBlbmRWYXJpYW50KGNv
bnN0IEluc3RhbmNlT2ZWYXJpYW50Jik7CisgICAgCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBW
ZWN0b3I8SW5zdGFuY2VPZlZhcmlhbnQsIDI+IG1fdmFyaWFudHM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNl
T2ZWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdGFuY2VPZlZhcmlhbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zdGFuY2VPZlZhcmlhbnQuaCIK
KworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK0luc3RhbmNlT2ZWYXJpYW50OjpJbnN0YW5jZU9mVmFyaWFudCgK
KyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBKU09iamVjdCogcHJvdG90eXBlLCBi
b29sIGlzSGl0KQorICAgIDogbV9zdHJ1Y3R1cmVTZXQoc3RydWN0dXJlU2V0KQorICAgICwgbV9j
b25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQorICAgICwgbV9wcm90b3R5cGUocHJvdG90eXBlKQor
ICAgICwgbV9pc0hpdChpc0hpdCkKK3sKK30KKworYm9vbCBJbnN0YW5jZU9mVmFyaWFudDo6YXR0
ZW1wdFRvTWVyZ2UoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICht
X3Byb3RvdHlwZSAhPSBvdGhlci5tX3Byb3RvdHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGlmIChtX2lzSGl0ICE9IG90aGVyLm1faXNIaXQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRp
b25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsK
KyAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAKKyAg
ICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSW5zdGFuY2VPZlZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisK
K3ZvaWQgSW5zdGFuY2VPZlZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAg
ICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBvdXQucHJpbnQoCisgICAgICAgICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250
ZXh0KSwgIiwgIiwgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIiwiCisgICAg
ICAgICIgcHJvdG90eXBlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9wcm90b3R5cGUpLCBjb250
ZXh0KSwgIiwiCisgICAgICAgICIgaXNIaXQgPSAiLCBtX2lzSGl0LCAiPiIpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
c3RhbmNlT2ZWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RhbmNlT2ZWYXJpYW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBJbnN0YW5jZU9mU3RhdHVzOworCitjbGFzcyBJbnN0YW5jZU9mVmFyaWFudCB7CitwdWJsaWM6
CisgICAgSW5zdGFuY2VPZlZhcmlhbnQoKSB7IH0KKyAgICBJbnN0YW5jZU9mVmFyaWFudChjb25z
dCBTdHJ1Y3R1cmVTZXQmLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUsIGJvb2wgaXNIaXQpOworICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUoKTsgfQorICAgIAor
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9z
dHJ1Y3R1cmVTZXQ7IH0KKyAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIHsgcmV0dXJu
IG1fc3RydWN0dXJlU2V0OyB9CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Cisg
ICAgCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBl
OyB9CisgICAgCisgICAgYm9vbCBpc0hpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIaXQ7IH0KKyAg
ICAKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50JiBvdGhl
cik7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICAKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEluc3RhbmNlT2ZTdGF0dXM7CisgICAgCisgICAgU3Ry
dWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1fY29uZGl0aW9uU2V0OworICAgIEpTT2JqZWN0KiBtX3Byb3RvdHlwZSA9IG51bGxwdHI7Cisg
ICAgYm9vbCBtX2lzSGl0IHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUx
LDcgQEAgU3RydWN0dXJlU3R1YkluZm86OlN0cnVjdHVyZVN0dWJJbmZvKEFjYwogICAgICwgdG9v
a1Nsb3dQYXRoKGZhbHNlKQogICAgICwgZXZlckNvbnNpZGVyZWQoZmFsc2UpCiAgICAgLCBwcm90
b3R5cGVJc0tub3duT2JqZWN0KGZhbHNlKQorICAgICwgc2F3Tm9uQ2VsbChmYWxzZSkKIHsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw4ICs5MCwx
MCBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGNvbnNpZGVyQ2FjaGluZyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICAv
LyBXZSBuZXZlciBjYWNoZSBub24tY2VsbHMuCi0gICAgICAgIGlmICghc3RydWN0dXJlKQorICAg
ICAgICBpZiAoIXN0cnVjdHVyZSkgeworICAgICAgICAgICAgc2F3Tm9uQ2VsbCA9IHRydWU7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8v
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHRoZSBPcHRpbWl6ZSB2YXJpYW50cyBvZiBJQyBz
bG93IHBhdGhzLiBUaGUgZmlyc3QgcGFydCBvZiB0aGlzCiAgICAgICAgIC8vIG1ldGhvZCB0cmll
cyB0byBkZXRlcm1pbmUgaWYgdGhlIE9wdGltaXplIHZhcmlhbnQgc2hvdWxkIHJlYWxseSBiZWhh
dmUgbGlrZSB0aGUKQEAgLTIxOSw2ICsyMjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB0b29rU2xv
d1BhdGggOiAxOwogICAgIGJvb2wgZXZlckNvbnNpZGVyZWQgOiAxOwogICAgIGJvb2wgcHJvdG90
eXBlSXNLbm93bk9iamVjdCA6IDE7IC8vIE9ubHkgcmVsZXZhbnQgZm9yIEluc3RhbmNlT2YuCisg
ICAgYm9vbCBzYXdOb25DZWxsIDogMTsKIH07CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldFN0cnVj
dHVyZVN0dWJJbmZvQ29kZU9yaWdpbihTdHJ1Y3R1cmVTdHViSW5mbyYgc3RydWN0dXJlU3R1Yklu
Zm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiUHV0QnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgotCisjaW5j
bHVkZSA8d3RmL0Jvb2xlYW5MYXR0aWNlLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1l
dGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTMzNzEsNiArMzM3
MSw0MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3Bl
Y0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBNYXRjaFN0cnVj
dHVyZTogeworICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBiYXNlU2V0OworICAgICAgICAK
KyAgICAgICAgQm9vbGVhbkxhdHRpY2UgcmVzdWx0ID0gQm9vbGVhbkxhdHRpY2U6OkJvdHRvbTsK
KyAgICAgICAgZm9yIChNYXRjaFN0cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQgOiBub2RlLT5tYXRj
aFN0cnVjdHVyZURhdGEoKS52YXJpYW50cykgeworICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUgPSB2YXJpYW50LnN0cnVjdHVyZTsKKyAgICAgICAgICAgIGlmICghYmFz
ZS5jb250YWlucyhzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHN0cnVjdHVyZSk7CisgICAgICAgICAg
ICByZXN1bHQgPSBsdWJCb29sZWFuTGF0dGljZShyZXN1bHQsIHZhcmlhbnQucmVzdWx0ID8gQm9v
bGVhbkxhdHRpY2U6OlRydWUgOiBCb29sZWFuTGF0dGljZTo6RmFsc2UpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5pc0luZmluaXRlKCkgfHwgYmFz
ZVNldC5zaXplKCkgPCBiYXNlLm1fc3RydWN0dXJlLnNpemUoKSkKKyAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAoZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgsIGJhc2VTZXQpID09IENv
bnRyYWRpY3Rpb24pCisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAg
ICAgICAKKyAgICAgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgY2FzZSBCb29sZWFuTGF0
dGljZTo6RmFsc2U6CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFs
c2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJvb2xlYW5MYXR0aWNlOjpU
cnVlOgorICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKHRydWUpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUGhp
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiRnVu
Y3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAi
SGVhcC5oIgorI2luY2x1ZGUgIkluc3RhbmNlT2ZTdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNGaXhlZEFycmF5LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZp
cm9ubWVudC5oIgpAQCAtNDc4MywxMiArNDc4NCw0MCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHVybiB0aGlzIGludG8gZWl0
aGVyIGEgQ2hlY2tTdHJ1Y3R1cmUgZm9sbG93ZWQgYnkgYSBjb25zdGFudCwgb3IKLSAgICAgICAg
ICAgIC8vIHNvbWUga2luZCBvZiBNdWx0aUluc3RhbmNlT2YgdGhpbmcsIGlmIHRoZSBJbnN0YW5j
ZU9mIElDIGlzIHN0YWJsZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODU2OTUKICAgICAgICAgICAgIGF1dG8mIGJ5dGVjb2RlID0gKnJl
aW50ZXJwcmV0X2Nhc3Q8T3BJbnN0YW5jZW9mKj4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgSW5zdGFuY2VPZlN0YXR1cyBzdGF0dXMgPSBJbnN0YW5jZU9m
U3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9zdHViSW5mb3MsCisgICAgICAgICAg
ICAgICAgbV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiB2
YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUudmFsdWUoKSkpOwogICAgICAgICAg
ICAgTm9kZSogcHJvdG90eXBlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5wcm90b3R5
cGUoKSkpOworCisgICAgICAgICAgICAvLyBPbmx5IGlubGluZSBpdCBpZiBpdCdzIFNpbXBsZSB3
aXRoIGEgY29tbW9uUHJvdG90eXBlOyBib3R0b20vdG9wIG9yIHZhcmlhYmxlCisgICAgICAgICAg
ICAvLyBwcm90b3R5cGVzIGJvdGggZ2V0IGhhbmRsZWQgYnkgdGhlIElDLiBUaGlzIG1ha2VzIHNl
bnNlIGZvciBib3R0b20gKHVucHJvZmlsZWQpCisgICAgICAgICAgICAvLyBpbnN0YW5jZW9mIElD
cyBiZWNhdXNlIHRoZSBwcm9maXQgb2YgdGhpcyBvcHRpbWl6YXRpb24gaXMgZmFpcmx5IGxvdy4g
U28sIGluIHRoZQorICAgICAgICAgICAgLy8gYWJzZW5jZSBvZiBhbnkgaW5mb3JtYXRpb24sIGl0
J3MgYmV0dGVyIHRvIGF2b2lkIG1ha2luZyB0aGlzIGJlIHRoZSBjYXVzZSBvZiBhCisgICAgICAg
ICAgICAvLyByZWNvbXBpbGF0aW9uLgorICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBjb21tb25Q
cm90b3R5cGUgPSBzdGF0dXMuY29tbW9uUHJvdG90eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrQ2VsbCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGNvbW1vblByb3RvdHlw
ZSkpLCBwcm90b3R5cGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE1hdGNo
U3RydWN0dXJlRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tYXRjaFN0cnVjdHVyZURhdGEuYWRkKCk7
CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgdmFyaWFudCA6
IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrKHZhcmlhbnQu
Y29uZGl0aW9uU2V0KCkpOworICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlIDogdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgTWF0Y2hTdHJ1Y3R1cmVWYXJpYW50IG1hdGNoVmFyaWFudDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoVmFyaWFudC5zdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJl
KHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFZhcmlhbnQucmVzdWx0
ID0gdmFyaWFudC5pc0hpdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQobWF0Y2hWYXJpYW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBOb2RlKiBtYXRjaCA9IGFkZFRvR3JhcGgoTWF0Y2hTdHJ1Y3R1cmUsIE9w
SW5mbyhkYXRhKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUuZHN0KCkpLCBtYXRjaCk7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
aW5zdGFuY2VvZik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuZHN0KCkpLCBhZGRUb0dyYXBoKEluc3RhbmNlT2Ys
IHZhbHVlLCBwcm90b3R5cGUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3RhbmNl
b2YpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0NSw2ICs1NDUsMTAgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZWFkKE1pc2NGaWVs
ZHMpOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKElzRnVuY3Rpb25Mb2MsIE1pc2NGaWVsZHMs
IG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CisgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVj
dHVyZUlEKTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBBcnJheVNsaWNlOgogICAgICAg
ICByZWFkKE1pc2NGaWVsZHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDg5LDYgKzQ4OSwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZTogewor
ICAgICAgICAgICAgICAgIEVkZ2UgYmFzZUVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBiYXNlID0gYmFzZUVkZ2Uubm9kZSgpOworICAgICAgICAgICAgICAgIE1h
dGNoU3RydWN0dXJlRGF0YSYgZGF0YSA9IG5vZGUtPm1hdGNoU3RydWN0dXJlRGF0YSgpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZVZhbHVlID0g
bV9zdGF0ZS5mb3JOb2RlKGJhc2UpOworCisgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5l
eGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdl
IGdldCB0aGUgc3RhdGUgYmVmb3JlLgorICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0g
dHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRo
aW5ncyB0byB0aGlzLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEJvb2xlYW5M
YXR0aWNlIHJlc3VsdCA9IEJvb2xlYW5MYXR0aWNlOjpCb3R0b207CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlVmFsdWUuY29udGFpbnMoZGF0YS52YXJpYW50c1tp
XS5zdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzW2kt
LV0gPSBkYXRhLnZhcmlhbnRzLmxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEu
dmFyaWFudHMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbHViQm9vbGVhbkxhdHRpY2UocmVzdWx0LCBkYXRhLnZhcmlhbnRzW2ldLnJlc3VsdCA/IEJv
b2xlYW5MYXR0aWNlOjpUcnVlIDogQm9vbGVhbkxhdHRpY2U6OkZhbHNlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBC
b29sZWFuTGF0dGljZTo6RmFsc2UgfHwgcmVzdWx0ID09IEJvb2xlYW5MYXR0aWNlOjpUcnVlKSB7
CisgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgc3RydWN0dXJlU2V0
OworICAgICAgICAgICAgICAgICAgICBmb3IgKE1hdGNoU3RydWN0dXJlVmFyaWFudCYgdmFyaWFu
dCA6IGRhdGEudmFyaWFudHMpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTZXQu
YWRkKHZhcmlhbnQuc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkQmFzZUNoZWNr
KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdHJ1Y3R1cmVTZXQpOworICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KAorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZSwgbV9ncmFwaC5mcmVlemUoanNCb29sZWFuKHJlc3VsdCA9PSBCb29sZWFuTGF0
dGljZTo6VHJ1ZSkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRCeUlkRGlyZWN0
OgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkRGlyZWN0Rmx1c2g6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw2
ICszMTAsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2Fz
ZSBBdG9taWNzU3ViOgogICAgIGNhc2UgQXRvbWljc1hvcjoKICAgICBjYXNlIEF0b21pY3NJc0xv
Y2tGcmVlOgorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGNhc2UgUHVzaFdpdGhTY29wZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1NCw2
ICsxNDU0LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBJbnRyb2R1Y2UgYSB2YXJpYW50IG9mIE1hdGNoU3RydWN0dXJlIHRoYXQgZG9lc24n
dCBkbyBhIGNlbGwgY2hlY2suCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Nzg0CisgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKQogICAgICAgICAgICAgICAgICYmIG5vZGUtPmNo
aWxkMigpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDYgKzI5MywxMCBAQCB2
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS52YXJpYW50c1tpXSwgY29udGV4dCkpOwog
ICAgIH0KKyAgICBpZiAobm9kZS0+aGFzTWF0Y2hTdHJ1Y3R1cmVEYXRhKCkpIHsKKyAgICAgICAg
Zm9yIChNYXRjaFN0cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQgOiBub2RlLT5tYXRjaFN0cnVjdHVy
ZURhdGEoKS52YXJpYW50cykKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0
KCp2YXJpYW50LnN0cnVjdHVyZS5nZXQoKSwgY29udGV4dCksICI9PiIsIHZhcmlhbnQucmVzdWx0
KTsKKyAgICB9CiAgICAgQVNTRVJUKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykg
PT0gbm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpOwogICAgIGlmIChub2RlLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNTIs
NiArMTA1Miw3IEBAIHB1YmxpYzoKICAgICBCYWc8U3dpdGNoRGF0YT4gbV9zd2l0Y2hEYXRhOwog
ICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aUdldEJ5T2Zmc2V0RGF0YTsKICAg
ICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVsdGlQdXRCeU9mZnNldERhdGE7CisgICAg
QmFnPE1hdGNoU3RydWN0dXJlRGF0YT4gbV9tYXRjaFN0cnVjdHVyZURhdGE7CiAgICAgQmFnPE9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGE+IG1fb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKICAg
ICBCYWc8Q2FsbFZhcmFyZ3NEYXRhPiBtX2NhbGxWYXJhcmdzRGF0YTsKICAgICBCYWc8TG9hZFZh
cmFyZ3NEYXRhPiBtX2xvYWRWYXJhcmdzRGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTElDTVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NCwx
NSArMjY0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9zdGF0
ZS5pbml0aWFsaXplVG8oZGF0YS5wcmVIZWFkZXIpOwotICAgICAgICBpZiAoIXNhZmVUb0V4ZWN1
dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAgIiAgICBOb3Qg
aG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0IHNhZmUgdG8gZXhlY3V0ZS5cbiIp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIAorCiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBub2RlLT5vcmln
aW47CisgICAgICAgIGJvb2wgY2FuU3BlY3VsYXRlQmxpbmRseSA9ICFtX2dyYXBoLmhhc0dsb2Jh
bEV4aXRTaXRlKG9yaWdpbmFsT3JpZ2luLnNlbWFudGljLCBIb2lzdGluZ0ZhaWxlZCk7CiAKICAg
ICAgICAgLy8gTk9URTogV2UgY291bGQganVzdCB1c2UgQmFja3dhcmRzRG9taW5hdG9ycyBoZXJl
IGRpcmVjdGx5LCBzaW5jZSB3ZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUKICAgICAgICAgLy8gcHJl
SGVhZGVyIGRvbWluYXRlcyBmcm9tQmxvY2suIEJ1dCB3ZSB3b3VsZG4ndCBnZXQgYW55dGhpbmcg
ZnJvbSBiZWluZyBzbyBjbGV2ZXIsIHNpbmNlCkBAIC0yODAsOCArMjc0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgYm9vbCBhZGRzQmxpbmRTcGVjdWxhdGlvbiA9IG1heUV4aXQobV9ncmFwaCwgbm9k
ZSwgbV9zdGF0ZSkKICAgICAgICAgICAgICYmICFtX2dyYXBoLm1fY29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMtPmRvbWluYXRlc0VxdWl2YWxlbnRseShkYXRhLnByZUhlYWRlciwgZnJvbUJsb2Nr
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChhZGRzQmxpbmRTcGVjdWxhdGlvbgotICAgICAgICAg
ICAgJiYgbV9ncmFwaC5oYXNHbG9iYWxFeGl0U2l0ZShvcmlnaW5hbE9yaWdpbi5zZW1hbnRpYywg
SG9pc3RpbmdGYWlsZWQpKSB7CisgICAgICAgIGlmIChhZGRzQmxpbmRTcGVjdWxhdGlvbiAmJiAh
Y2FuU3BlY3VsYXRlQmxpbmRseSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAiICAgIE5vdCBob2lzdGlu
ZyAiLCBub2RlLCAiIGJlY2F1c2UgaXQgbWF5IGV4aXQgYW5kIHRoZSBwcmUtaGVhZGVyICgiLApA
QCAtMjkxLDIyICsyODQsNjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gRm9yIGFic3RyYWN0IGludGVycHJldGF0
aW9uLCB0aGVzZSBhcmUgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdGhhdCB0aGV5IGFwcGVhciBpbiB0
aGlzCisgICAgICAgIC8vIHZlY3Rvci4KKyAgICAgICAgVmVjdG9yPE5vZGUqLCAyPiBob2lzdGVk
Tm9kZXNSZXZlcnNlOworICAgICAgICBob2lzdGVkTm9kZXNSZXZlcnNlLmFwcGVuZChub2RlKTsK
KworICAgICAgICBOb2RlT3JpZ2luIHRlcm1pbmFsT3JpZ2luID0gZGF0YS5wcmVIZWFkZXItPnRl
cm1pbmFsKCktPm9yaWdpbjsKKyAgICAgICAgCisgICAgICAgIGF1dG8gaW5zZXJ0SG9pc3RlZE5v
ZGUgPSBbJl0gKE5vZGUqIG5vZGUpIHsKKyAgICAgICAgICAgIGRhdGEucHJlSGVhZGVyLT5pbnNl
cnRCZWZvcmVUZXJtaW5hbChub2RlKTsKKyAgICAgICAgICAgIG5vZGUtPm93bmVyID0gZGF0YS5w
cmVIZWFkZXI7CisgICAgICAgICAgICBub2RlLT5vcmlnaW4gPSB0ZXJtaW5hbE9yaWdpbi53aXRo
U2VtYW50aWMobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIG5vZGUtPm9yaWdp
bi53YXNIb2lzdGVkIHw9IGFkZHNCbGluZFNwZWN1bGF0aW9uOworICAgICAgICB9OworICAgICAg
ICAKKyAgICAgICAgaWYgKCFzYWZlVG9FeGVjdXRlKG1fc3RhdGUsIG1fZ3JhcGgsIG5vZGUpKSB7
CisgICAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIHJlc2N1ZSB0aGUgc2l0dWF0aW9uIGJ5IGlu
c2VydGluZyBibGluZCBzcGVjdWxhdGlvbnMuCisgICAgICAgICAgICBib29sIGlnbm9yZUVtcHR5
Q2hpbGRyZW4gPSB0cnVlOworICAgICAgICAgICAgaWYgKGNhblNwZWN1bGF0ZUJsaW5kbHkKKyAg
ICAgICAgICAgICAgICAmJiBzYWZlVG9FeGVjdXRlKG1fc3RhdGUsIG1fZ3JhcGgsIG5vZGUsIGln
bm9yZUVtcHR5Q2hpbGRyZW4pKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAg
UmVzY3VpbmcgaG9pc3RpbmcgYnkgaW5zZXJ0aW5nIGVtcHR5IGNoZWNrcy5cbiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlJiBlZGdl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtX3N0YXRlLmZvck5vZGUoZWRnZSku
bV90eXBlICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGNoZWNrID0gbV9ncmFwaC5hZGROb2RlKENoZWNrTm90RW1wdHksIG9yaWdpbmFsT3JpZ2luLCBF
ZGdlKGVkZ2Uubm9kZSgpLCBVbnR5cGVkVXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRIb2lzdGVkTm9kZShjaGVjayk7CisgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGVk
Tm9kZXNSZXZlcnNlLmFwcGVuZChjaGVjayk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBOb3Qg
aG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0IHNhZmUgdG8gZXhlY3V0ZS5cbiIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICIgICAgSG9pc3RpbmcgIiwgbm9k
ZSwgIiBmcm9tICIsICpmcm9tQmxvY2ssICIgdG8gIiwgKmRhdGEucHJlSGVhZGVyLAogICAgICAg
ICAgICAgICAgICJcbiIpOwogICAgICAgICB9CiAKLSAgICAgICAgZGF0YS5wcmVIZWFkZXItPmlu
c2VydEJlZm9yZVRlcm1pbmFsKG5vZGUpOwotICAgICAgICBub2RlLT5vd25lciA9IGRhdGEucHJl
SGVhZGVyOwotICAgICAgICBOb2RlT3JpZ2luIHRlcm1pbmFsT3JpZ2luID0gZGF0YS5wcmVIZWFk
ZXItPnRlcm1pbmFsKCktPm9yaWdpbjsKLSAgICAgICAgbm9kZS0+b3JpZ2luID0gdGVybWluYWxP
cmlnaW4ud2l0aFNlbWFudGljKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIG5vZGUt
Pm9yaWdpbi53YXNIb2lzdGVkIHw9IGFkZHNCbGluZFNwZWN1bGF0aW9uOworICAgICAgICBpbnNl
cnRIb2lzdGVkTm9kZShub2RlKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiB0cnVzdCB3
aGF0IEFJIHByb3ZlcyBhYm91dCBlZGdlIHByb29mIHN0YXR1c2VzIHdoZW4gaG9pc3RpbmcgdG8g
dGhlIHByZWhlYWRlci4KICAgICAgICAgbV9zdGF0ZS50cnVzdEVkZ2VQcm9vZnMoKTsKICAgICAg
ICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oZGF0YS5wcmVIZWFkZXIpOwotICAgICAgICBtX2ludGVy
cHJldGVyLmV4ZWN1dGUobm9kZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGhvaXN0ZWRO
b2Rlc1JldmVyc2Uuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVj
dXRlKGhvaXN0ZWROb2Rlc1JldmVyc2VbaV0pOwogICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHdh
bGtpbmcgdmFyaW91cyBpbm5lciBsb29wcyBiZWxvdywgdGhlIHByb29mIHN0YXR1cyBvZgogICAg
ICAgICAvLyBhbiBlZGdlIG1heSBiZSB0cml2aWFsbHkgdHJ1ZSwgZXZlbiBpZiBpdCdzIG5vdCB0
cnVlIGluIHRoZSBwcmVoZWFkZXIKICAgICAgICAgLy8gd2UgaG9pc3QgdG8uIFdlIGRvbid0IGFs
bG93IHRoZSBiZWxvdyBub2RlIGV4ZWN1dGlvbnMgdG8gY2hhbmdlIHRoZQpAQCAtMzQwLDcgKzM3
Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoc3ViUHJlSGVhZGVyID09IGRhdGEucHJl
SGVhZGVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbV9zdGF0ZS5p
bml0aWFsaXplVG8oc3ViUHJlSGVhZGVyKTsKLSAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhl
Y3V0ZShub2RlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGhvaXN0ZWROb2Rlc1Jl
dmVyc2Uuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0
ZShob2lzdGVkTm9kZXNSZXZlcnNlW2ldKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChub2Rl
LT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDE1IEBAIHZvaWQgTm9k
ZTo6cmVtb3ZlKEdyYXBoJiBncmFwaCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAg
CisgICAgY2FzZSBNYXRjaFN0cnVjdHVyZTogeworICAgICAgICBNYXRjaFN0cnVjdHVyZURhdGEm
IGRhdGEgPSBtYXRjaFN0cnVjdHVyZURhdGEoKTsKKyAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVy
ZVNldCBzZXQ7CisgICAgICAgIGZvciAoTWF0Y2hTdHJ1Y3R1cmVWYXJpYW50JiB2YXJpYW50IDog
ZGF0YS52YXJpYW50cykKKyAgICAgICAgICAgIHNldC5hZGQodmFyaWFudC5zdHJ1Y3R1cmUpOwor
ICAgICAgICBjb252ZXJ0VG9DaGVja1N0cnVjdHVyZShncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc2V0
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGlmIChmbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IHRhcmdldEluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsMTUgQEAgc3RydWN0IE11bHRpUHV0QnlPZmZzZXRE
YXRhIHsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogfTsKIAorc3RydWN0
IE1hdGNoU3RydWN0dXJlVmFyaWFudCB7CisgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1
cmU7CisgICAgYm9vbCByZXN1bHQ7Cit9OworCitzdHJ1Y3QgTWF0Y2hTdHJ1Y3R1cmVEYXRhIHsK
KyAgICBWZWN0b3I8TWF0Y2hTdHJ1Y3R1cmVWYXJpYW50LCAyPiB2YXJpYW50czsKK307CisKIHN0
cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsK
QEAgLTE4NTMsNiArMTg2MiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9vcEluZm8u
YXM8TXVsdGlQdXRCeU9mZnNldERhdGEqPigpOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc01h
dGNoU3RydWN0dXJlRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBNYXRjaFN0
cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgTWF0Y2hTdHJ1Y3R1cmVEYXRhJiBtYXRjaFN0cnVj
dHVyZURhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc01hdGNoU3RydWN0dXJlRGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuICptX29wSW5mby5hczxNYXRjaFN0cnVjdHVyZURhdGEqPigpOwor
ICAgIH0KKyAgICAKICAgICBib29sIGhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKQogICAg
IHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oT3ZlcnJpZGVzSGFzSW5z
dGFuY2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3Jv
KEluc3RhbmNlT2YsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAg
IG1hY3JvKEluc3RhbmNlT2ZDdXN0b20sIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9v
bGVhbikgXAorICAgIG1hY3JvKE1hdGNoU3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgbWFjcm8oSXNDZWxsV2l0aFR5cGUsIE5vZGVS
ZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNFbXB0eSwgTm9kZVJlc3VsdEJvb2xlYW4pIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShy
ZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDE0ICsxMzQsMTQgQEAgcHJpdmF0ZToKIC8v
IHNhZmVseSBleGVjdXRlIGJlZm9yZSB0aGF0IGNoZWNrLCBzbyBsb25nIGFzIHRoYXQgY2hlY2sg
Y29udGludWVzIHRvIGd1YXJkIGFueQogLy8gdXNlci1vYnNlcnZhYmxlIHRoaW5ncyBkb25lIHRv
IHRoZSBsb2FkZWQgdmFsdWUuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4K
LWJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKK2Jvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3Rh
dGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vcmVFbXB0eUNoaWxkcmVuID0g
ZmFsc2UpCiB7CiAgICAgU2FmZVRvRXhlY3V0ZUVkZ2U8QWJzdHJhY3RTdGF0ZVR5cGU+IHNhZmVU
b0V4ZWN1dGVFZGdlKHN0YXRlKTsKICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwg
bm9kZSwgc2FmZVRvRXhlY3V0ZUVkZ2UpOwogICAgIGlmICghc2FmZVRvRXhlY3V0ZUVkZ2UucmVz
dWx0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzYWZlVG9FeGVjdXRlRWRn
ZS5tYXlTZWVFbXB0eUNoaWxkKCkpIHsKKyAgICBpZiAoIWlnbm9yZUVtcHR5Q2hpbGRyZW4gJiYg
c2FmZVRvRXhlY3V0ZUVkZ2UubWF5U2VlRW1wdHlDaGlsZCgpKSB7CiAgICAgICAgIC8vIFdlIGNv
bnNlcnZhdGl2ZWx5IGFzc3VtZSBpZiB0aGUgZW1wdHkgdmFsdWUgZmxvd3MgaW50byBhIG5vZGUs
CiAgICAgICAgIC8vIGl0IG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGhhbmRsZSBpdCAoZS5nLCBjcmFz
aCkuIEluIGdlbmVyYWwsIHRoZSBieXRlY29kZSBnZW5lcmF0b3IKICAgICAgICAgLy8gZW1pdHMg
Y29kZSBpbiBzdWNoIGEgd2F5IHRoYXQgbW9zdCBub2RlIHR5cGVzIGRvbid0IG5lZWQgdG8gd29y
cnkgYWJvdXQgdGhlIGVtcHR5IHZhbHVlCkBAIC00NTIsNiArNDUyLDcgQEAgYm9vbCBzYWZlVG9F
eGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgQXRvbWljc1hvcjoKICAgICBj
YXNlIEF0b21pY3NJc0xvY2tGcmVlOgogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1
bWVudHM6CisgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBjYXNlIEFycmF5U2xpY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzNjAsNiArMzM2MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAg
Y2FzZSBNYXRjaFN0cnVjdHVyZTogeworICAgICAgICBjb21waWxlTWF0Y2hTdHJ1Y3R1cmUobm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBHZXRHZXR0ZXI6
IHsKICAgICAgICAgY29tcGlsZUdldEdldHRlcihub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MjcsNiArMzYyNywxMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCisgICAgY2FzZSBNYXRjaFN0cnVjdHVyZTogeworICAgICAgICBjb21w
aWxlTWF0Y2hTdHJ1Y3R1cmUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CiAgICAgY2FzZSBHZXRHZXR0ZXI6IHsKICAgICAgICAgY29tcGlsZUdldEdldHRlcihub2RlKTsK
ICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODMz
LDYgKzExODMzLDMzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeU9mZnNldCgK
ICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1h
dGNoU3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Cisg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVt
cC5ncHIoKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgCisgICAg
YXV0byYgdmFyaWFudHMgPSBub2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKS52YXJpYW50czsKKyAg
ICBWZWN0b3I8aW50NjRfdD4gY2FzZXM7CisgICAgZm9yIChNYXRjaFN0cnVjdHVyZVZhcmlhbnQm
IHZhcmlhbnQgOiB2YXJpYW50cykKKyAgICAgICAgY2FzZXMuYXBwZW5kKHZhcmlhbnQuc3RydWN0
dXJlLT5pZCgpKTsKKyAgICAKKyAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKHRlbXBHUFIs
IGNhc2VzLCBCaW5hcnlTd2l0Y2g6OkludDMyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
ZG9uZTsKKyAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2UobV9qaXQpKSB7CisgICAgICAg
IG1faml0LmJveEJvb2xlYW5QYXlsb2FkKHZhcmlhbnRzW2JpbmFyeVN3aXRjaC5jYXNlSW5kZXgo
KV0ucmVzdWx0LCB0ZW1wR1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICB9CisgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVJlZ3MoKSwgbm9k
ZSwgYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCkpOworICAgIAorICAgIGRvbmUubGluaygmbV9q
aXQpOworICAgIAorICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHRlbXBHUFIsIG5vZGUpOworfQor
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkoTm9kZSog
bm9kZSkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3NSw2ICsxMzc1LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aFRoaXMoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUdldEJ5T2Zmc2V0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeU9mZnNldChOb2RlKik7
CisgICAgdm9pZCBjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoTm9kZSopOwogICAgIC8vIElmIHRoaXMg
cmV0dXJucyBmYWxzZSBpdCBtZWFucyB0aGF0IHdlIHRlcm1pbmF0ZWQgc3BlY3VsYXRpdmUgZXhl
Y3V0aW9uLgogICAgIGJvb2wgZ2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgKICAgICAgICAg
R1BSVGVtcG9yYXJ5JiB2YWx1ZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDYg
KzM0OSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBj
YXNlIFB1dEJ5VmFsQWxpYXM6CiAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICBjYXNlIFB1
dEJ5VmFsV2l0aFRoaXM6CisgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICAgICAgLy8gVGhl
c2UgYXJlIE9LLgogICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MTEsNiArOTExLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0
OgogICAgICAgICAgICAgY29tcGlsZU11bHRpUHV0QnlPZmZzZXQoKTsKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgorICAgICAgICAgICAgY29tcGlsZU1h
dGNoU3RydWN0dXJlKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRHbG9i
YWxWYXI6CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgogICAgICAgICAg
ICAgY29tcGlsZUdldEdsb2JhbFZhcmlhYmxlKCk7CkBAIC02NTkyLDYgKzY1OTUsNDcgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgY29tcGlsZU1hdGNoU3RydWN0dXJlKCkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisg
ICAgICAgIE1hdGNoU3RydWN0dXJlRGF0YSYgZGF0YSA9IG1fbm9kZS0+bWF0Y2hTdHJ1Y3R1cmVE
YXRhKCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayB0cnVlQmxvY2sgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBmYWxzZUJsb2NrID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZXhpdEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3Qmxv
Y2tzQmVmb3JlKHRydWVCbG9jayk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8U3dpdGNoQ2Fz
ZSwgMj4gY2FzZXM7CisgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKKyAg
ICAgICAgZm9yIChNYXRjaFN0cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQgOiBkYXRhLnZhcmlhbnRz
KSB7CisgICAgICAgICAgICBiYXNlU2V0LmFkZCh2YXJpYW50LnN0cnVjdHVyZSk7CisgICAgICAg
ICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSgKKyAgICAgICAgICAgICAgICB3ZWFrU3RydWN0
dXJlSUQodmFyaWFudC5zdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgIHZhcmlhbnQucmVzdWx0
ID8gdHJ1ZUJsb2NrIDogZmFsc2VCbG9jaywgV2VpZ2h0KDEpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgYm9vbCBzdHJ1Y3R1cmVzQ2hlY2tlZCA9IG1faW50ZXJwcmV0ZXIuZm9yTm9kZShtX25vZGUt
PmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKGJhc2VTZXQpOworICAgICAgICBlbWl0
U3dpdGNoRm9yTXVsdGlCeU9mZnNldChiYXNlLCBzdHJ1Y3R1cmVzQ2hlY2tlZCwgY2FzZXMsIGV4
aXRCbG9jayk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyh0cnVlQmxvY2ssIGZh
bHNlQmxvY2spOworICAgICAgICBWYWx1ZUZyb21CbG9jayB0cnVlUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFsc2VCbG9jaywgZXhpdEJsb2Nr
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFsc2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZXhpdEJsb2NrLCBjb250aW51YXRpb24pOwor
ICAgICAgICBpZiAoIXN0cnVjdHVyZXNDaGVja2VkKQorICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZENhY2hlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAg
bV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQz
MiwgdHJ1ZVJlc3VsdCwgZmFsc2VSZXN1bHQpKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb21w
aWxlR2V0R2xvYmFsVmFyaWFibGUoKQogICAgIHsKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5s
b2FkNjQobV9vdXQuYWJzb2x1dGUobV9ub2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpKTsKSW5kZXg6
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE4IEBACisyMDE4LTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHIHNob3VsZCBpbmxpbmUgSW5zdGFuY2VPZiBJQ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTY5NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSSBmb3Vu
ZCBteXNlbGYgbmVlZGluZyBhIHdheSB0byByZXByZXNlbnQgYm90dG9tL2ZhbHNlL3RydWUvdG9w
LCBzbyBJIGNyZWF0ZWQgaXQuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiB3dGYvQm9vbGVhbkxhdHRpY2UuaDogQWRkZWQuCisgICAgICAgIChX
VEY6Omx1YkJvb2xlYW5MYXR0aWNlKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6Cisg
ICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorCiAyMDE4LTA1LTE3ICBKaWV3ZW4gVGFuICA8
amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ29udmVydCBDZXJ0aWZpY2F0ZUluZm8g
aW50byBDcmVkZW50aWFsIGluIFVJIFByb2Nlc3MgaW5zdGVhZCBvZiBOZXR3b3JraW5nIFByb2Nl
c3MKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjMxOTYxKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSw3IEBACiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlC
NkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBC
YWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFj
aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVRyYWNpbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMzk5QjgyMEFGNUE1ODAwMTdFMjEzIC8q
IEJvb2xlYW5MYXR0aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xl
YW5MYXR0aWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ2NzgyMUZERTI4
MkIwMDNGQ0IwOSAvKiBDb25jdXJyZW50QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbmN1cnJlbnRCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZCNDY3ODMxRkRFMjgyQzAwM0ZDQjA5IC8qIENvbmN1cnJlbnRWZWN0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFZlY3Rvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkM0NDg4MjE2RkU5RkUxMDA4NDRCRTkgLyogUHJvY2Vzc0lE
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2Nlc3NJRC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtODEzLDYgKzgxNCw3IEBACiAJCQkJMUE5NDRGNDYxQzNE
ODgxNDAwNUJEMjhDIC8qIEJsb2NrUHRyLmggKi8sCiAJCQkJQThBNDcyNjQxNTFBODI1QTAwNDEy
M0ZGIC8qIEJsb2NrU3RhY2suaCAqLywKIAkJCQlBOEE0NzI2NTE1MUE4MjVBMDA0MTIzRkYgLyog
Qmxvb21GaWx0ZXIuaCAqLywKKwkJCQkwRkIzOTlCODIwQUY1QTU4MDAxN0UyMTMgLyogQm9vbGVh
bkxhdHRpY2UuaCAqLywKIAkJCQkwRjkzMjc0QTFDMTdGNEI3MDBDRjY1NjQgLyogQm94LmggKi8s
CiAJCQkJN0MzRjcyMzkxRDc4ODExOTAwNjc0RTI2IC8qIEJyaWdhbmQuaCAqLywKIAkJCQkwRjQ1
NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovLApJbmRleDogU291cmNlL1dU
Ri93dGYvQm9vbGVhbkxhdHRpY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Cb29s
ZWFuTGF0dGljZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Jvb2xlYW5MYXR0
aWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworZW51bSBjbGFzcyBCb29sZWFu
TGF0dGljZSA6IHVpbnQ4X3QgeworICAgIEJvdHRvbSA9IDAsCisgICAgRmFsc2UgPSAxLAorICAg
IFRydWUgPSAyLAorICAgIFRvcCA9IDMKK307CisKK2lubGluZSBCb29sZWFuTGF0dGljZSBsdWJC
b29sZWFuTGF0dGljZShCb29sZWFuTGF0dGljZSBhLCBCb29sZWFuTGF0dGljZSBiKQoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxCb29sZWFuTGF0dGljZT4oc3RhdGljX2Nhc3Q8dWludDhfdD4o
YSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGIpKTsKK30KKworaW5saW5lIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBCb29sZWFuTGF0dGljZSB2YWx1ZSkKK3sKKyAgICBz
d2l0Y2ggKHZhbHVlKSB7CisgICAgY2FzZSBCb29sZWFuTGF0dGljZTo6Qm90dG9tOgorICAgICAg
ICBvdXQucHJpbnQoIkJvdHRvbSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29sZWFu
TGF0dGljZTo6RmFsc2U6CisgICAgICAgIG91dC5wcmludCgiRmFsc2UiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQm9vbGVhbkxhdHRpY2U6OlRydWU6CisgICAgICAgIG91dC5wcmludCgi
VHJ1ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29sZWFuTGF0dGljZTo6VG9wOgor
ICAgICAgICBvdXQucHJpbnQoIlRvcCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OkJvb2xlYW5MYXR0aWNlOwordXNpbmcgV1RGOjpsdWJCb29sZWFuTGF0dGljZTsK
KwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2ICsxNCw3IEBAIHNl
dChXVEZfUFVCTElDX0hFQURFUlMKICAgICBCbG9ja1B0ci5oCiAgICAgQmxvY2tTdGFjay5oCiAg
ICAgQmxvb21GaWx0ZXIuaAorICAgIEJvb2xlYW5MYXR0aWNlLmgKICAgICBCb3guaAogICAgIEJy
aWdhbmQuaAogICAgIEJ1YmJsZVNvcnQuaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340751</attachid>
            <date>2018-05-18 15:55:35 -0700</date>
            <delta_ts>2018-05-18 16:15:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>64875</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxOTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBA
QAorMjAxOC0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaW5saW5lIEluc3RhbmNlT2YgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2OTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdGVhY2hlcyB0aGUgREZHIGhv
dyB0byBpbmxpbmUgSW5zdGFuY2VPZiBJQ3MgaW50byBhIE1hdGNoU3RydWN0dXJlIG5vZGUuIFRo
aXMgY2FuIHRoZW4KKyAgICAgICAgYmUgZm9sZGVkIHRvIGEgQ2hlY2tTdHJ1Y3R1cmUgKyBKU0Nv
bnN0YW50LgorICAgICAgICAKKyAgICAgICAgSW4gdGhlIHByb2Nlc3Mgb2YgdGVzdGluZyB0aGlz
LCBJIGZvdW5kIGEgYnVnIHdoZXJlIExJQ00gd2FzIG5vdCBob2lzdGluZyB0aGluZ3MgdGhhdAor
ICAgICAgICBkZXBlbmRlZCBvbiBFeHRyYU9TUkVudHJ5TG9jYWwgYmVjYXVzZSB0aGF0IG1pZ2h0
IHJldHVybiBTcGVjRW1wdHkuIEkgZml4ZWQgdGhhdCBieSB0ZWFjaGluZworICAgICAgICBMSUNN
IGhvdyB0byBtYXRlcmlhbGl6ZSBDaGVja05vdEVtcHR5IG9uIGRlbWFuZCB3aGVuZXZlciAhSG9p
c3RpbmdGYWlsZWQuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgNS03JSBzcGVlZC11cCBv
biBib3llci4KKyAgICAgICAgCisgICAgICAgIDIuNi0yLjl4IHNwZWVkLXVwIG9uIHRoZSBpbnN0
YW5jZW9mLWFsd2F5cy1oaXQtb25lLCBpbnN0YW5jZW9mLWFsd2F5cy1oaXQtdHdvLCBhbmQKKyAg
ICAgICAgaW5zdGFuY2VvZi1zb21ldGltZXMtaGl0IG1pY3JvYmVuY2htYXJrcy4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAg
ICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpH
ZXRCeUlkU3RhdHVzOjpmaWx0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
aDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6b3BlcmF0b3IgYm9vbCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6Om9wZXJhdG9yISBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJ
ZFZhcmlhbnQ6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFy
aWFudDo6b3BlcmF0b3IhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JQ1N0
YXR1c1V0aWxzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjphcHBlbmRJQ1N0YXR1c1ZhcmlhbnQp
OgorICAgICAgICAoSlNDOjpmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKToKKyAgICAgICAgKiBieXRl
Y29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Okluc3RhbmNl
T2ZTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVz
Ojpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6Y29tbW9uUHJvdG90
eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6ZmlsdGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpJbnN0YW5jZU9mU3RhdHVzOjpJbnN0YW5jZU9mU3RhdHVzKToKKyAgICAgICAgKEpTQzo6SW5z
dGFuY2VPZlN0YXR1czo6c3RhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3Rh
dHVzOjppc1NldCBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6Om9wZXJh
dG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjppc1NpbXBs
ZSBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6OnRha2VzU2xvd1BhdGgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjpudW1WYXJpYW50cyBjb25z
dCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6OnZhcmlhbnRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6YXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJ
bnN0YW5jZU9mU3RhdHVzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9J
bnN0YW5jZU9mVmFyaWFudC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFy
aWFudDo6SW5zdGFuY2VPZlZhcmlhbnQpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6ZHVt
cCBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZWYXJpYW50OjpkdW1wSW5Db250ZXh0
IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6Okluc3RhbmNlT2ZWYXJpYW50KToKKyAg
ICAgICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAg
ICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6c3RydWN0dXJlU2V0IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6OnN0cnVjdHVyZVNldCk6CisgICAgICAgIChKU0M6
Okluc3RhbmNlT2ZWYXJpYW50Ojpjb25kaXRpb25TZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJ
bnN0YW5jZU9mVmFyaWFudDo6cHJvdG90eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFu
Y2VPZlZhcmlhbnQ6OmlzSGl0IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmNvbnNpZGVyQ2FjaGluZyk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xk
aW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjphdHRlbXB0SG9pc3QpOgorICAgICAgICAq
IGRmZy9ERkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpyZW1vdmUpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTWF0Y2hT
dHJ1Y3R1cmVEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjptYXRjaFN0cnVjdHVyZURh
dGEpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdTYWZl
VG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU1hdGNoU3RydWN0dXJlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9C
My5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGNoU3Ry
dWN0dXJlKToKKwogMjAxOC0wNS0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIG1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDggQEAgYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAogYnl0ZWNvZGUv
SW5saW5lQ2FsbEZyYW1lU2V0LmNwcAogYnl0ZWNvZGUvSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuY3Bw
CitieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAorYnl0ZWNvZGUvSW5zdGFuY2VPZlZhcmlh
bnQuY3BwCiBieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcAogYnl0ZWNvZGUv
SnVtcFRhYmxlLmNwcAogYnl0ZWNvZGUvTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDkgQEAK
IAkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2NUYxOTZCOEY5RTAwOTEw
NTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyB9OwogCQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUg
LyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3Qu
aCAqLzsgfTsKIAkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tP
cmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
Mzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovOyB9Owor
CQkwRkIzOTlCRTIwQUY2QjNEMDAxN0UyMTMgLyogSUNTdGF0dXNVdGlscy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzk5QkQyMEFGNkIzODAwMTdF
MjEzIC8qIElDU3RhdHVzVXRpbHMuaCAqLzsgfTsKKwkJMEZCMzk5QkYyMEFGNkIzRjAwMTdFMjEz
IC8qIEluc3RhbmNlT2ZTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjM5OUJCMjBBRjZCMkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mU3RhdHVz
LmggKi87IH07CisJCTBGQjM5OUMwMjBBRjZCNDMwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzk5
QjkyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmggKi87IH07CiAJCTBGQjQ2
NzdGMUZEREE2RTkwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0
b21JbmRpY2VzLmggKi87IH07CiAJCTBGQjQ2NzgwMUZEREE2RjEwMDNGQ0IwOSAvKiBJc29DZWxs
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0
Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQ2NzgxMUZEREE2RjcwMDNGQ0IwOSAv
KiBJc29DZWxsU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDY3N0IxRkREQTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggKi87IH07CkBAIC0yNjA5LDYgKzI2MTIsMTEgQEAKIAkJMEZCMzg3OEMxQkZCQzQ0RDAwRTNB
QjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ck9wdGltaXplQmxvY2tPcmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyT3B0aW1pemVCbG9ja09yZGVyLmg7IHBhdGgg
PSBiMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENvbXBpbGUuY3BwOyBwYXRoID0gZnRs
L0ZUTENvbXBpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIzOTlCOTIw
QUY2QjJBMDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zdGFuY2VPZlZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCMzk5QkEyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZTdGF0dXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zdGFuY2VPZlN0YXR1cy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjM5OUJCMjBBRjZCMkEwMDE3RTIx
MyAvKiBJbnN0YW5jZU9mU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3RhbmNlT2ZTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMzk5
QkMyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3RhbmNlT2ZWYXJpYW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMzk5QkQyMEFGNkIzODAwMTdFMjEzIC8qIElDU3RhdHVz
VXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNTdGF0dXNVdGlscy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkg
LyogQXJyYXlDb252ZW50aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBcnJheUNvbnZlbnRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkI0Njc3QjFGRERBNkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXNvQ2VsbFNldElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2MjQsMTIgKzc2MzIsMTcgQEAK
IAkJCQkwRjAzMzJDMjE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuaCAqLywKIAkJ
CQkxNEFEOTEwODFEQ0E5Mjk0MDAxNEY5RkUgLyogR2xvYmFsQ29kZUJsb2NrLmggKi8sCiAJCQkJ
MEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggKi8sCisJCQkJMEZCMzk5
QkQyMEFGNkIzODAwMTdFMjEzIC8qIElDU3RhdHVzVXRpbHMuaCAqLywKIAkJCQk3OTA1QkI2NjFE
MTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLywKIAkJCQk3OTA1QkI2NzFEMTIw
NTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggKi8sCiAJCQkJMTQ4QTdCRUQxQjgyOTc1QTAw
MkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5jcHAgKi8sCiAJCQkJMTQ4QTdCRUUxQjgyOTc1QTAw
MkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5oICovLAogCQkJCTBGMjRFNTUzMTdGMEI3MUMwMEFC
QjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwICovLAogCQkJCTBGMjRFNTU0MTdGMEI3MUMw
MEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLywKKwkJCQkwRkIzOTlCQTIwQUY2QjJB
MDAxN0UyMTMgLyogSW5zdGFuY2VPZlN0YXR1cy5jcHAgKi8sCisJCQkJMEZCMzk5QkIyMEFGNkIy
QTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZTdGF0dXMuaCAqLywKKwkJCQkwRkIzOTlCQzIwQUY2QjJB
MDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQuY3BwICovLAorCQkJCTBGQjM5OUI5MjBBRjZC
MkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFudC5oICovLAogCQkJCTk2OUEwNzkzMEVEMUQz
QUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovLAogCQkJCTUzRjZCRjZDMUMzRjA2MEEwMEY0
MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLywKIAkJCQlCQ0ZE
OEM5MDBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCAqLywKQEAgLTkwNTUsNiArOTA2
OCw3IEBACiAJCQkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxG
cmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FF
NjEzIC8qIEpTSm9iLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjM5OUMw
MjBBRjZCNDMwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyQTRCQjdGMzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTc5LDYgKzkxOTMsNyBAQAogCQkJCTBGNDY4MENE
MTRCQkIxN0QwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5ODFFRDgyMzI4MjM0RDkxQkFFQ0NBREUgLyogTWFjaGluZUNvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0QjcyM0I4MTJEN0RBNkYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJr
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjM5OUJGMjBBRjZCM0YwMDE3RTIxMyAvKiBJbnN0
YW5jZU9mU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkMzNkVFQTBFRTEyODlEMDBCM0RG
NTkgLyogTWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM2MTAxNTZC
REUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFB
MDA5QzAxODMxQTIyRDAwQ0Y4NzExIC8qIE1hY3JvQXNzZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTQzNyw2ICs5NDUyLDcgQEAKIAkJCQk3MDVCNDFBRTFBNkU1MDFFMDA3MTY3NTcg
LyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI3MUJEQTA4
RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwNUI0MUIwMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmplY3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGQjM5OUJFMjBBRjZCM0QwMDE3RTIxMyAvKiBJQ1N0YXR1c1V0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyODFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9s
UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0
NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIzMTk2
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00NywyMiArNDgsNyBAQCBjbGFzcyBHZXR0ZXJTZXR0
ZXI7CiAKIGJvb2wgR2V0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFy
aWFudCYgdmFyaWFudCkKIHsKLSAgICAvLyBBdHRlbXB0IHRvIG1lcmdlIHRoaXMgdmFyaWFudCB3
aXRoIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFyaWFudC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV92YXJpYW50c1tp
XS5hdHRlbXB0VG9NZXJnZSh2YXJpYW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gb3ZlcmxhcC4gV2Ugc2hvdWxk
IGhhdmUgcHJ1bmVkIG91dCBvcHBvcnR1bml0aWVzIGZvcgotICAgIC8vIG92ZXJsYXAgYnV0IGl0
J3MgcG9zc2libGUgdGhhdCBhbiBpbmxpbmUgY2FjaGUgZ290IGludG8gYSB3ZWlyZCBzdGF0ZS4g
V2UgYXJlCi0gICAgLy8gZGVmZW5zaXZlIGFuZCBiYWlsIGlmIHdlIGRldGVjdCBjcmF6eS4KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV92YXJpYW50c1tpXS5zdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyh2YXJpYW50LnN0
cnVjdHVyZVNldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0g
ICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKIH0KIAogI2lm
IEVOQUJMRShERkdfSklUKQpAQCAtNDMyLDE0ICs0MTgsNyBAQCB2b2lkIEdldEJ5SWRTdGF0dXM6
OmZpbHRlcihjb25zdCBTdHJ1Y3R1CiB7CiAgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQogICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklYTUU6IFdlIGNvdWxkIGFsc28gZmlsdGVyIHRo
ZSB2YXJpYW50cyB0aGVtc2VsdmVzLgotICAgIAotICAgIG1fdmFyaWFudHMucmVtb3ZlQWxsTWF0
Y2hpbmcoCi0gICAgICAgIFsmXSAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQpIC0+IGJvb2wgewot
ICAgICAgICAgICAgcmV0dXJuICF2YXJpYW50LnN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKHNldCk7
Ci0gICAgICAgIH0pOwotICAgIAorICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50
cywgc2V0KTsKICAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCiAgICAgICAgIG1fc3RhdGUg
PSBOb0luZm9ybWF0aW9uOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3
ICs5Myw3IEBAIHB1YmxpYzoKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBO
b0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNT
ZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1Nl
dCgpOyB9CiAgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2lt
cGxlOyB9CiAgICAgYm9vbCBpc0N1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gQ3Vz
dG9tOyB9CiAgICAgYm9vbCBpc01vZHVsZU5hbWVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gTW9kdWxlTmFtZXNwYWNlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgR2V0QnlJZFZhcmlhbnQmKTsKICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4gISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5cGUsIHR5cGVuYW1lIFZhcmlhbnRUeXBl
PgorYm9vbCBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQoVmFyaWFudFZlY3RvclR5cGUmIHZhcmlhbnRz
LCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkKK3sKKyAgICAvLyBBdHRlbXB0IHRvIG1lcmdl
IHRoaXMgdmFyaWFudCB3aXRoIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFyaWFudC4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KHZhcmlhbnRzW2ldLmF0dGVtcHRUb01lcmdlKHZhcmlhbnQpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBvdmVybGFw
LiBXZSBzaG91bGQgaGF2ZSBwcnVuZWQgb3V0IG9wcG9ydHVuaXRpZXMgZm9yCisgICAgLy8gb3Zl
cmxhcCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IGFuIGlubGluZSBjYWNoZSBnb3QgaW50byBhIHdl
aXJkIHN0YXRlLiBXZSBhcmUKKyAgICAvLyBkZWZlbnNpdmUgYW5kIGJhaWwgaWYgd2UgZGV0ZWN0
IGNyYXp5LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YXJpYW50cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAodmFyaWFudHNbaV0uc3RydWN0dXJlU2V0KCkub3ZlcmxhcHModmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIHZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5cGU+Cit2b2lkIGZpbHRlcklDU3Rh
dHVzVmFyaWFudHMoVmFyaWFudFZlY3RvclR5cGUmIHZhcmlhbnRzLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgY291bGQgYWxzbyBmaWx0ZXIgdGhlIHZhcmlh
bnRzIHRoZW1zZWx2ZXMuCisgICAgCisgICAgdmFyaWFudHMucmVtb3ZlQWxsTWF0Y2hpbmcoCisg
ICAgICAgIFsmXSAoYXV0byYgdmFyaWFudCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4g
IXZhcmlhbnQuc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMoc2V0KTsKKyAgICAgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zdGFuY2VPZlN0
YXR1cy5oIgorCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVy
ZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEluc3RhbmNlT2ZTdGF0dXM6
OmFwcGVuZFZhcmlhbnQoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIHZhcmlhbnQpCit7CisgICAg
YXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOworfQorCitJbnN0YW5j
ZU9mU3RhdHVzIEluc3RhbmNlT2ZTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0dWJJbmZvTWFwJiBpbmZvTWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQor
eworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAg
IAorICAgIEluc3RhbmNlT2ZTdGF0dXMgcmVzdWx0OworI2lmIEVOQUJMRShERkdfSklUKQorICAg
IHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIsIGluZm9NYXAuZ2V0KENvZGVPcmln
aW4oYnl0ZWNvZGVJbmRleCkpKTsKKworICAgIGlmICghcmVzdWx0LnRha2VzU2xvd1BhdGgoKSkg
eworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIodW5saW5rZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIC8vIFdlIGFsc28gY2hlY2sg
Zm9yIEJhZFR5cGUgaGVyZSBpbiBjYXNlIHRoaXMgaXMgInByaW1pdGl2ZSBpbnN0YW5jZW9mIEZv
byIuCisgICAgICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBE
Rkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUpKQorICAgICAgICAg
ICAgfHwgdW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVu
dEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50Q2FjaGUpKQorICAgICAgICAgICAg
fHwgdW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4
aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZFR5cGUpKSkKKyAgICAgICAgICAgIHJldHVybiBUYWtl
c1Nsb3dQYXRoOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluZm9NYXApOworICAg
IFVOVVNFRF9QQVJBTShjb2RlT3JpZ2luKTsKKyNlbmRpZgorICAgIAorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0luc3RhbmNlT2ZTdGF0dXMgSW5zdGFuY2VP
ZlN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKKyAgICBpZiAoIXN0dWJJbmZvIHx8ICFzdHVi
SW5mby0+ZXZlckNvbnNpZGVyZWQpCisgICAgICAgIHJldHVybiBOb0luZm9ybWF0aW9uOworICAg
IAorICAgIC8vIEZJWE1FOiBXZSB3b3VsZG4ndCBoYXZlIHRvIGJhaWwgZm9yIG5vbkNlbGwgaWYg
d2UgdGF1Z2h0IE1hdGNoU3RydWN0dXJlIGhvdyB0byBoYW5kbGUgbm9uCisgICAgLy8gY2VsbHMu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc4NAor
ICAgIGlmIChzdHViSW5mby0+dG9va1Nsb3dQYXRoIHx8IHN0dWJJbmZvLT5zYXdOb25DZWxsKQor
ICAgICAgICByZXR1cm4gVGFrZXNTbG93UGF0aDsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8tPmNh
Y2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQYXRo
OyAvLyBUaGlzIGlzIGNvbnNlcnZhdGl2ZS4gSXQgY291bGQgYmUgdGhhdCB3ZSBoYXZlIG5vIGlu
Zm9ybWF0aW9uLgorICAgIAorICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8t
PnUuc3R1YjsKKyAgICBJbnN0YW5jZU9mU3RhdHVzIHJlc3VsdDsKKyAgICBmb3IgKHVuc2lnbmVk
IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsK
KyAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsK
KyAgICAgICAgCisgICAgICAgIGlmIChhY2Nlc3MudHlwZSgpID09IEFjY2Vzc0Nhc2U6Okluc3Rh
bmNlT2ZHZW5lcmljKQorICAgICAgICAgICAgcmV0dXJuIFRha2VzU2xvd1BhdGg7CisgICAgICAg
IAorICAgICAgICBpZiAoIWFjY2Vzcy5jb25kaXRpb25TZXQoKS5zdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQYXRoOworICAgICAgICAKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZFZhcmlhbnQoSW5zdGFuY2VPZlZhcmlhbnQoCisgICAgICAgICAg
ICBhY2Nlc3Muc3RydWN0dXJlKCksCisgICAgICAgICAgICBhY2Nlc3MuY29uZGl0aW9uU2V0KCks
CisgICAgICAgICAgICBhY2Nlc3MuYXM8SW5zdGFuY2VPZkFjY2Vzc0Nhc2U+KCkucHJvdG90eXBl
KCksCisgICAgICAgICAgICBhY2Nlc3MudHlwZSgpID09IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZI
aXQpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworSlNPYmplY3QqIEluc3RhbmNlT2ZTdGF0dXM6OmNvbW1vblByb3RvdHlw
ZSgpIGNvbnN0Cit7CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IG51bGxwdHI7CisgICAgZm9y
IChjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKKyAgICAg
ICAgaWYgKCFwcm90b3R5cGUpIHsKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IHZhcmlhbnQucHJv
dG90eXBlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cHJvdG90eXBlICE9IHZhcmlhbnQucHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwordm9pZCBJbnN0YW5jZU9m
U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQpCit7CisgICAg
aWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm47CisgICAgZmlsdGVySUNTdGF0
dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzdHJ1Y3R1cmVTZXQpOworICAgIGlmIChtX3ZhcmlhbnRz
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dGFuY2VPZlN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0YW5jZU9mU3RhdHVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkNvbmN1
cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJJbnN0YW5jZU9mVmFyaWFudC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQWNjZXNzQ2FzZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJl
U3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKKworY2xh
c3MgSW5zdGFuY2VPZlN0YXR1cyB7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAg
IC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9J
bmZvcm1hdGlvbiwKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGluIGEgc2ltcGxl
IHdheS4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAKKyAgICAgICAgLy8gSXQncyBrbm93biB0
byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgVGFrZXNTbG93UGF0aAorICAgIH07Cisg
ICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0
aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cyhTdGF0ZSBzdGF0
ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRl
ID09IE5vSW5mb3JtYXRpb24gfHwgc3RhdGUgPT0gTWFrZXNDYWxscyk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBJbnN0YW5jZU9mU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgU3R1Yklu
Zm9NYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyNlbmRpZgorICAgIAor
ICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIAorICAgIGJv
b2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQorICAg
IAorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsg
fQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFr
ZXNTbG93UGF0aDsgfQorICAgIAorICAgIEpTT2JqZWN0KiBjb21tb25Qcm90b3R5cGUoKSBjb25z
dDsKKyAgICAKKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3Zhcmlh
bnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxJbnN0YW5jZU9mVmFyaWFudCwgMj4mIHZh
cmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IEluc3RhbmNl
T2ZWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5k
ZXhdOyB9CisgICAgY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIHZvaWQgZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZVNldCYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIHZvaWQgYXBwZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9mVmFy
aWFudCYpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9yPEluc3RhbmNlT2ZW
YXJpYW50LCAyPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZWYXJp
YW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5zdGFuY2VPZlZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkluc3RhbmNlT2ZWYXJpYW50LmgiCisKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitJbnN0YW5jZU9mVmFyaWFudDo6SW5zdGFuY2VPZlZhcmlhbnQoCisgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSwgYm9vbCBpc0hpdCkKKyAgICA6
IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRp
dGlvblNldCkKKyAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKKyAgICAsIG1faXNIaXQoaXNI
aXQpCit7Cit9CisKK2Jvb2wgSW5zdGFuY2VPZlZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0
IEluc3RhbmNlT2ZWYXJpYW50JiBvdGhlcikKK3sKKyAgICBpZiAobV9wcm90b3R5cGUgIT0gb3Ro
ZXIubV9wcm90b3R5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9p
c0hpdCAhPSBvdGhlci5tX2lzSGl0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRp
b25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgaWYgKCFtZXJnZWRD
b25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jb25k
aXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgCisgICAgbV9zdHJ1Y3R1cmVTZXQu
bWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEluc3RhbmNlT2ZWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCit2b2lkIEluc3RhbmNlT2ZW
YXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8ZW1w
dHk+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KAorICAg
ICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsIGluQ29u
dGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICIsIgorICAgICAgICAiIHByb3RvdHlwZSA9
ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fcHJvdG90eXBlKSwgY29udGV4dCksICIsIgorICAgICAg
ICAiIGlzSGl0ID0gIiwgbV9pc0hpdCwgIj4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9m
VmFyaWFudC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbnN0YW5jZU9mVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIlN0
cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSW5zdGFuY2VPZlN0YXR1
czsKKworY2xhc3MgSW5zdGFuY2VPZlZhcmlhbnQgeworcHVibGljOgorICAgIEluc3RhbmNlT2ZW
YXJpYW50KCkgeyB9CisgICAgSW5zdGFuY2VPZlZhcmlhbnQoY29uc3QgU3RydWN0dXJlU2V0Jiwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBKU09iamVjdCogcHJvdG90eXBlLCBi
b29sIGlzSGl0KTsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9Cisg
ICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsg
fQorICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpTT2JqZWN0
KiBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgIAorICAgIGJv
b2wgaXNIaXQoKSBjb25zdCB7IHJldHVybiBtX2lzSGl0OyB9CisgICAgCisgICAgYm9vbCBhdHRl
bXB0VG9NZXJnZShjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgb3RoZXIpOworICAgIAorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBJbnN0YW5jZU9mU3RhdHVzOworICAgIAorICAgIFN0cnVjdHVyZVNldCBtX3N0cnVj
dHVyZVNldDsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsK
KyAgICBKU09iamVjdCogbV9wcm90b3R5cGUgPSBudWxscHRyOworICAgIGJvb2wgbV9pc0hpdCB7
IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZp
c2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIFN0cnVjdHVyZVN0
dWJJbmZvOjpTdHJ1Y3R1cmVTdHViSW5mbyhBY2MKICAgICAsIHRvb2tTbG93UGF0aChmYWxzZSkK
ICAgICAsIGV2ZXJDb25zaWRlcmVkKGZhbHNlKQogICAgICwgcHJvdG90eXBlSXNLbm93bk9iamVj
dChmYWxzZSkKKyAgICAsIHNhd05vbkNlbGwoZmFsc2UpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZp
c2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtOTAsOCArOTAsMTAgQEAgcHVibGljOgogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBjb25zaWRlckNhY2hpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgLy8gV2UgbmV2ZXIgY2FjaGUg
bm9uLWNlbGxzLgotICAgICAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUpIHsKKyAgICAgICAgICAgIHNhd05vbkNlbGwgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBj
YWxsZWQgZnJvbSB0aGUgT3B0aW1pemUgdmFyaWFudHMgb2YgSUMgc2xvdyBwYXRocy4gVGhlIGZp
cnN0IHBhcnQgb2YgdGhpcwogICAgICAgICAvLyBtZXRob2QgdHJpZXMgdG8gZGV0ZXJtaW5lIGlm
IHRoZSBPcHRpbWl6ZSB2YXJpYW50IHNob3VsZCByZWFsbHkgYmVoYXZlIGxpa2UgdGhlCkBAIC0y
MTksNiArMjIxLDcgQEAgcHVibGljOgogICAgIGJvb2wgdG9va1Nsb3dQYXRoIDogMTsKICAgICBi
b29sIGV2ZXJDb25zaWRlcmVkIDogMTsKICAgICBib29sIHByb3RvdHlwZUlzS25vd25PYmplY3Qg
OiAxOyAvLyBPbmx5IHJlbGV2YW50IGZvciBJbnN0YW5jZU9mLgorICAgIGJvb2wgc2F3Tm9uQ2Vs
bCA6IDE7CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVP
cmlnaW4oU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZvKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0
dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKLQorI2luY2x1ZGUgPHd0Zi9Cb29sZWFu
TGF0dGljZS5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0zMzcxLDYgKzMzNzEsNDAgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjbG9iYmVyV29ybGQoKTsK
ICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAg
ICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFJl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKKyAgICAgICAgCisgICAgICAgIEJvb2xlYW5M
YXR0aWNlIHJlc3VsdCA9IEJvb2xlYW5MYXR0aWNlOjpCb3R0b207CisgICAgICAgIGZvciAoTWF0
Y2hTdHJ1Y3R1cmVWYXJpYW50JiB2YXJpYW50IDogbm9kZS0+bWF0Y2hTdHJ1Y3R1cmVEYXRhKCku
dmFyaWFudHMpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0g
dmFyaWFudC5zdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAoIWJhc2UuY29udGFpbnMoc3RydWN0
dXJlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgYmFzZVNldC5tZXJnZShzdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmVzdWx0ID0gbHViQm9v
bGVhbkxhdHRpY2UocmVzdWx0LCB2YXJpYW50LnJlc3VsdCA/IEJvb2xlYW5MYXR0aWNlOjpUcnVl
IDogQm9vbGVhbkxhdHRpY2U6OkZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpIHx8IGJhc2VTZXQuc2l6ZSgpIDwgYmFz
ZS5tX3N0cnVjdHVyZS5zaXplKCkpCisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOworICAgICAgICAKKyAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBiYXNlU2V0KSA9PSBDb250cmFkaWN0aW9uKQorICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIHN3
aXRjaCAocmVzdWx0KSB7CisgICAgICAgIGNhc2UgQm9vbGVhbkxhdHRpY2U6OkZhbHNlOgorICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBCb29sZWFuTGF0dGljZTo6VHJ1ZToKKyAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbih0cnVlKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2Rl
LCBTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRl
ICJJbnN0YW5jZU9mU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTRml4ZWRBcnJheS5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKQEAgLTQ3
ODMsMTIgKzQ3ODQsNDAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mOiB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHR1cm4gdGhpcyBpbnRvIGVpdGhlciBhIENoZWNrU3RydWN0
dXJlIGZvbGxvd2VkIGJ5IGEgY29uc3RhbnQsIG9yCi0gICAgICAgICAgICAvLyBzb21lIGtpbmQg
b2YgTXVsdGlJbnN0YW5jZU9mIHRoaW5nLCBpZiB0aGUgSW5zdGFuY2VPZiBJQyBpcyBzdGFibGUu
Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTg1Njk1CiAgICAgICAgICAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9w
SW5zdGFuY2VvZio+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEluc3RhbmNlT2ZTdGF0dXMgc3RhdHVzID0gSW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0ZUZv
cigKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1f
aW5saW5lU3RhY2tUb3AtPm1fc3R1YkluZm9zLAorICAgICAgICAgICAgICAgIG1fY3VycmVudElu
ZGV4KTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLnZhbHVlKCkpKTsKICAgICAgICAgICAgIE5vZGUqIHByb3RvdHlw
ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUucHJvdG90eXBlKCkpKTsKKworICAgICAg
ICAgICAgLy8gT25seSBpbmxpbmUgaXQgaWYgaXQncyBTaW1wbGUgd2l0aCBhIGNvbW1vblByb3Rv
dHlwZTsgYm90dG9tL3RvcCBvciB2YXJpYWJsZQorICAgICAgICAgICAgLy8gcHJvdG90eXBlcyBi
b3RoIGdldCBoYW5kbGVkIGJ5IHRoZSBJQy4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgYm90dG9tICh1
bnByb2ZpbGVkKQorICAgICAgICAgICAgLy8gaW5zdGFuY2VvZiBJQ3MgYmVjYXVzZSB0aGUgcHJv
Zml0IG9mIHRoaXMgb3B0aW1pemF0aW9uIGlzIGZhaXJseSBsb3cuIFNvLCBpbiB0aGUKKyAgICAg
ICAgICAgIC8vIGFic2VuY2Ugb2YgYW55IGluZm9ybWF0aW9uLCBpdCdzIGJldHRlciB0byBhdm9p
ZCBtYWtpbmcgdGhpcyBiZSB0aGUgY2F1c2Ugb2YgYQorICAgICAgICAgICAgLy8gcmVjb21waWxh
dGlvbi4KKyAgICAgICAgICAgIGlmIChKU09iamVjdCogY29tbW9uUHJvdG90eXBlID0gc3RhdHVz
LmNvbW1vblByb3RvdHlwZSgpKSB7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Nl
bGwsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjb21tb25Qcm90b3R5cGUpKSwgcHJvdG90eXBlKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZURhdGEqIGRh
dGEgPSBtX2dyYXBoLm1fbWF0Y2hTdHJ1Y3R1cmVEYXRhLmFkZCgpOworICAgICAgICAgICAgICAg
IGZvciAoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMo
KSkgeworICAgICAgICAgICAgICAgICAgICBjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hdGNoU3RydWN0dXJl
VmFyaWFudCBtYXRjaFZhcmlhbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFZhcmlh
bnQuc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2hWYXJpYW50LnJlc3VsdCA9IHZhcmlhbnQuaXNIaXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS0+dmFyaWFudHMuYXBwZW5kKG1hdGNoVmFyaWFudCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9k
ZSogbWF0Y2ggPSBhZGRUb0dyYXBoKE1hdGNoU3RydWN0dXJlLCBPcEluZm8oZGF0YSksIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdCgpKSwg
bWF0Y2gpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3RhbmNlb2YpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLmRzdCgpKSwgYWRkVG9HcmFwaChJbnN0YW5jZU9mLCB2YWx1ZSwgcHJvdG90eXBl
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbnN0YW5jZW9mKTsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9u
IDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NDUsNiArNTQ1LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSks
IExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE1h
dGNoU3RydWN0dXJlOgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAg
IHJldHVybjsKIAogICAgIGNhc2UgQXJyYXlTbGljZToKICAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ4OSw2ICs0ODksMzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgICAgICBF
ZGdlIGJhc2VFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogYmFz
ZSA9IGJhc2VFZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZURhdGEm
IGRhdGEgPSBub2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2VWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShi
YXNlKTsKKworICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxv
Y2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJl
Zm9yZS4KKyAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFs
bG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBCb29sZWFuTGF0dGljZSByZXN1bHQgPSBC
b29sZWFuTGF0dGljZTo6Qm90dG9tOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghYmFzZVZhbHVlLmNvbnRhaW5zKGRhdGEudmFyaWFudHNbaV0uc3RydWN0dXJlKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJpYW50
cy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGx1YkJvb2xlYW5MYXR0
aWNlKHJlc3VsdCwgZGF0YS52YXJpYW50c1tpXS5yZXN1bHQgPyBCb29sZWFuTGF0dGljZTo6VHJ1
ZSA6IEJvb2xlYW5MYXR0aWNlOjpGYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gQm9vbGVhbkxhdHRpY2U6OkZh
bHNlIHx8IHJlc3VsdCA9PSBCb29sZWFuTGF0dGljZTo6VHJ1ZSkgeworICAgICAgICAgICAgICAg
ICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IHN0cnVjdHVyZVNldDsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChNYXRjaFN0cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQgOiBkYXRhLnZhcmlhbnRz
KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlU2V0LmFkZCh2YXJpYW50LnN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5v
ZGUsIGJhc2VWYWx1ZSwgc3RydWN0dXJlU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5jb252ZXJ0VG9Db25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsIG1fZ3Jh
cGguZnJlZXplKGpzQm9vbGVhbihyZXN1bHQgPT0gQm9vbGVhbkxhdHRpY2U6OlRydWUpKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZERpcmVjdDoKICAgICAgICAgICAgIGNh
c2UgR2V0QnlJZERpcmVjdEZsdXNoOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsNiArMzEwLDcgQEAgYm9vbCBk
b2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQXRvbWljc1N1YjoKICAg
ICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2FzZSBBdG9taWNzSXNMb2NrRnJlZToKKyAgICBjYXNl
IE1hdGNoU3RydWN0dXJlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIFB1c2hX
aXRoU2NvcGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTQsNiArMTQ1NCwxMyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIE1hdGNoU3RydWN0dXJlOiB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW50cm9kdWNl
IGEgdmFyaWFudCBvZiBNYXRjaFN0cnVjdHVyZSB0aGF0IGRvZXNuJ3QgZG8gYSBjZWxsIGNoZWNr
LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4NTc4NAorICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
SW5zdGFuY2VPZjogewogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVDZWxsKCkKICAgICAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3Bl
Y3VsYXRlQ2VsbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Myw2ICsyOTMsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
aW5Db250ZXh0KGRhdGEudmFyaWFudHNbaV0sIGNvbnRleHQpKTsKICAgICB9CisgICAgaWYgKG5v
ZGUtPmhhc01hdGNoU3RydWN0dXJlRGF0YSgpKSB7CisgICAgICAgIGZvciAoTWF0Y2hTdHJ1Y3R1
cmVWYXJpYW50JiB2YXJpYW50IDogbm9kZS0+bWF0Y2hTdHJ1Y3R1cmVEYXRhKCkudmFyaWFudHMp
CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dCgqdmFyaWFudC5zdHJ1Y3R1
cmUuZ2V0KCksIGNvbnRleHQpLCAiPT4iLCB2YXJpYW50LnJlc3VsdCk7CisgICAgfQogICAgIEFT
U0VSVChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpID09IG5vZGUtPmFjY2Vzc2Vz
U3RhY2soKnRoaXMpKTsKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlz
KSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUyLDYgKzEwNTIsNyBAQCBwdWJs
aWM6CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRC
eU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlP
ZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOworICAgIEJhZzxNYXRjaFN0cnVjdHVy
ZURhdGE+IG1fbWF0Y2hTdHJ1Y3R1cmVEYXRhOwogICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgQmFnPENhbGxWYXJhcmdz
RGF0YT4gbV9jYWxsVmFyYXJnc0RhdGE7CiAgICAgQmFnPExvYWRWYXJhcmdzRGF0YT4gbV9sb2Fk
VmFyYXJnc0RhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhh
c2UuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xJQ01QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjQsMTUgKzI2NCw5IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fc3RhdGUuaW5pdGlhbGl6ZVRvKGRh
dGEucHJlSGVhZGVyKTsKLSAgICAgICAgaWYgKCFzYWZlVG9FeGVjdXRlKG1fc3RhdGUsIG1fZ3Jh
cGgsIG5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAgICAg
IGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICIgICAgTm90IGhvaXN0aW5nICIsIG5vZGUs
ICIgYmVjYXVzZSBpdCBpc24ndCBzYWZlIHRvIGV4ZWN1dGUuXG4iKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKKwogICAgICAg
ICBOb2RlT3JpZ2luIG9yaWdpbmFsT3JpZ2luID0gbm9kZS0+b3JpZ2luOworICAgICAgICBib29s
IGNhblNwZWN1bGF0ZUJsaW5kbHkgPSAhbV9ncmFwaC5oYXNHbG9iYWxFeGl0U2l0ZShvcmlnaW5h
bE9yaWdpbi5zZW1hbnRpYywgSG9pc3RpbmdGYWlsZWQpOwogCiAgICAgICAgIC8vIE5PVEU6IFdl
IGNvdWxkIGp1c3QgdXNlIEJhY2t3YXJkc0RvbWluYXRvcnMgaGVyZSBkaXJlY3RseSwgc2luY2Ug
d2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlCiAgICAgICAgIC8vIHByZUhlYWRlciBkb21pbmF0ZXMg
ZnJvbUJsb2NrLiBCdXQgd2Ugd291bGRuJ3QgZ2V0IGFueXRoaW5nIGZyb20gYmVpbmcgc28gY2xl
dmVyLCBzaW5jZQpAQCAtMjgwLDggKzI3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgYWRk
c0JsaW5kU3BlY3VsYXRpb24gPSBtYXlFeGl0KG1fZ3JhcGgsIG5vZGUsIG1fc3RhdGUpCiAgICAg
ICAgICAgICAmJiAhbV9ncmFwaC5tX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLT5kb21pbmF0
ZXNFcXVpdmFsZW50bHkoZGF0YS5wcmVIZWFkZXIsIGZyb21CbG9jayk7CiAgICAgICAgIAotICAg
ICAgICBpZiAoYWRkc0JsaW5kU3BlY3VsYXRpb24KLSAgICAgICAgICAgICYmIG1fZ3JhcGguaGFz
R2xvYmFsRXhpdFNpdGUob3JpZ2luYWxPcmlnaW4uc2VtYW50aWMsIEhvaXN0aW5nRmFpbGVkKSkg
eworICAgICAgICBpZiAoYWRkc0JsaW5kU3BlY3VsYXRpb24gJiYgIWNhblNwZWN1bGF0ZUJsaW5k
bHkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygKICAgICAgICAgICAgICAgICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNh
dXNlIGl0IG1heSBleGl0IGFuZCB0aGUgcHJlLWhlYWRlciAoIiwKQEAgLTI5MSwyMiArMjg0LDYx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAg
ICAgCisgICAgICAgIC8vIEZvciBhYnN0cmFjdCBpbnRlcnByZXRhdGlvbiwgdGhlc2UgYXJlIGlu
IHRoZSByZXZlcnNlIG9yZGVyIHRoYXQgdGhleSBhcHBlYXIgaW4gdGhpcworICAgICAgICAvLyB2
ZWN0b3IuCisgICAgICAgIFZlY3RvcjxOb2RlKiwgMj4gaG9pc3RlZE5vZGVzUmV2ZXJzZTsKKyAg
ICAgICAgaG9pc3RlZE5vZGVzUmV2ZXJzZS5hcHBlbmQobm9kZSk7CisKKyAgICAgICAgTm9kZU9y
aWdpbiB0ZXJtaW5hbE9yaWdpbiA9IGRhdGEucHJlSGVhZGVyLT50ZXJtaW5hbCgpLT5vcmlnaW47
CisgICAgICAgIAorICAgICAgICBhdXRvIGluc2VydEhvaXN0ZWROb2RlID0gWyZdIChOb2RlKiBu
b2RlKSB7CisgICAgICAgICAgICBkYXRhLnByZUhlYWRlci0+aW5zZXJ0QmVmb3JlVGVybWluYWwo
bm9kZSk7CisgICAgICAgICAgICBub2RlLT5vd25lciA9IGRhdGEucHJlSGVhZGVyOworICAgICAg
ICAgICAgbm9kZS0+b3JpZ2luID0gdGVybWluYWxPcmlnaW4ud2l0aFNlbWFudGljKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCB8PSBh
ZGRzQmxpbmRTcGVjdWxhdGlvbjsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
c2FmZVRvRXhlY3V0ZShtX3N0YXRlLCBtX2dyYXBoLCBub2RlKSkgeworICAgICAgICAgICAgLy8g
U2VlIGlmIHdlIGNhbiByZXNjdWUgdGhlIHNpdHVhdGlvbiBieSBpbnNlcnRpbmcgYmxpbmQgc3Bl
Y3VsYXRpb25zLgorICAgICAgICAgICAgYm9vbCBpZ25vcmVFbXB0eUNoaWxkcmVuID0gdHJ1ZTsK
KyAgICAgICAgICAgIGlmIChjYW5TcGVjdWxhdGVCbGluZGx5CisgICAgICAgICAgICAgICAgJiYg
c2FmZVRvRXhlY3V0ZShtX3N0YXRlLCBtX2dyYXBoLCBub2RlLCBpZ25vcmVFbXB0eUNoaWxkcmVu
KSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgIFJlc2N1aW5nIGhvaXN0aW5n
IGJ5IGluc2VydGluZyBlbXB0eSBjaGVja3MuXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5v
ZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNFbXB0
eSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGVjayA9IG1fZ3JhcGgu
YWRkTm9kZShDaGVja05vdEVtcHR5LCBvcmlnaW5hbE9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwg
VW50eXBlZFVzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0SG9pc3RlZE5vZGUo
Y2hlY2spOworICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RlZE5vZGVzUmV2ZXJzZS5hcHBl
bmQoY2hlY2spOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAgTm90IGhvaXN0aW5nICIsIG5vZGUs
ICIgYmVjYXVzZSBpdCBpc24ndCBzYWZlIHRvIGV4ZWN1dGUuXG4iKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxv
ZygKICAgICAgICAgICAgICAgICAiICAgIEhvaXN0aW5nICIsIG5vZGUsICIgZnJvbSAiLCAqZnJv
bUJsb2NrLCAiIHRvICIsICpkYXRhLnByZUhlYWRlciwKICAgICAgICAgICAgICAgICAiXG4iKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGRhdGEucHJlSGVhZGVyLT5pbnNlcnRCZWZvcmVUZXJtaW5h
bChub2RlKTsKLSAgICAgICAgbm9kZS0+b3duZXIgPSBkYXRhLnByZUhlYWRlcjsKLSAgICAgICAg
Tm9kZU9yaWdpbiB0ZXJtaW5hbE9yaWdpbiA9IGRhdGEucHJlSGVhZGVyLT50ZXJtaW5hbCgpLT5v
cmlnaW47Ci0gICAgICAgIG5vZGUtPm9yaWdpbiA9IHRlcm1pbmFsT3JpZ2luLndpdGhTZW1hbnRp
Yyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBub2RlLT5vcmlnaW4ud2FzSG9pc3Rl
ZCB8PSBhZGRzQmxpbmRTcGVjdWxhdGlvbjsKKyAgICAgICAgaW5zZXJ0SG9pc3RlZE5vZGUobm9k
ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBjYW4gdHJ1c3Qgd2hhdCBBSSBwcm92ZXMgYWJv
dXQgZWRnZSBwcm9vZiBzdGF0dXNlcyB3aGVuIGhvaXN0aW5nIHRvIHRoZSBwcmVoZWFkZXIuCiAg
ICAgICAgIG1fc3RhdGUudHJ1c3RFZGdlUHJvb2ZzKCk7CiAgICAgICAgIG1fc3RhdGUuaW5pdGlh
bGl6ZVRvKGRhdGEucHJlSGVhZGVyKTsKLSAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKG5v
ZGUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBob2lzdGVkTm9kZXNSZXZlcnNlLnNpemUo
KTsgaS0tOykKKyAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShob2lzdGVkTm9kZXNS
ZXZlcnNlW2ldKTsKICAgICAgICAgLy8gSG93ZXZlciwgd2hlbiB3YWxraW5nIHZhcmlvdXMgaW5u
ZXIgbG9vcHMgYmVsb3csIHRoZSBwcm9vZiBzdGF0dXMgb2YKICAgICAgICAgLy8gYW4gZWRnZSBt
YXkgYmUgdHJpdmlhbGx5IHRydWUsIGV2ZW4gaWYgaXQncyBub3QgdHJ1ZSBpbiB0aGUgcHJlaGVh
ZGVyCiAgICAgICAgIC8vIHdlIGhvaXN0IHRvLiBXZSBkb24ndCBhbGxvdyB0aGUgYmVsb3cgbm9k
ZSBleGVjdXRpb25zIHRvIGNoYW5nZSB0aGUKQEAgLTM0MCw3ICszNzIsOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKHN1YlByZUhlYWRlciA9PSBkYXRhLnByZUhlYWRlcikKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fc3RhdGUuaW5pdGlhbGl6ZVRvKHN1YlBy
ZUhlYWRlcik7Ci0gICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUobm9kZSk7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBob2lzdGVkTm9kZXNSZXZlcnNlLnNpemUoKTsgaS0t
OykKKyAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaG9pc3RlZE5vZGVzUmV2
ZXJzZVtpXSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVI
YXNWYXJBcmdzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZp
c2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5NywxNSBAQCB2b2lkIE5vZGU6OnJlbW92ZShHcmFwaCYg
Z3JhcGgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgTWF0Y2hT
dHJ1Y3R1cmU6IHsKKyAgICAgICAgTWF0Y2hTdHJ1Y3R1cmVEYXRhJiBkYXRhID0gbWF0Y2hTdHJ1
Y3R1cmVEYXRhKCk7CisgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgc2V0OworICAgICAg
ICBmb3IgKE1hdGNoU3RydWN0dXJlVmFyaWFudCYgdmFyaWFudCA6IGRhdGEudmFyaWFudHMpCisg
ICAgICAgICAgICBzZXQuYWRkKHZhcmlhbnQuc3RydWN0dXJlKTsKKyAgICAgICAgY29udmVydFRv
Q2hlY2tTdHJ1Y3R1cmUoZ3JhcGguYWRkU3RydWN0dXJlU2V0KHNldCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBpZiAoZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXRJbmRleCA9IDA7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjMxOTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDYgKzk2LDE1IEBAIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgYm9vbCBy
ZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKIH07CiAKK3N0cnVjdCBNYXRjaFN0cnVjdHVyZVZh
cmlhbnQgeworICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlOworICAgIGJvb2wgcmVz
dWx0OworfTsKKworc3RydWN0IE1hdGNoU3RydWN0dXJlRGF0YSB7CisgICAgVmVjdG9yPE1hdGNo
U3RydWN0dXJlVmFyaWFudCwgMj4gdmFyaWFudHM7Cit9OworCiBzdHJ1Y3QgTmV3QXJyYXlCdWZm
ZXJEYXRhIHsKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7CkBAIC0xODUzLDYgKzE4NjIs
MTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fb3BJbmZvLmFzPE11bHRpUHV0QnlPZmZz
ZXREYXRhKj4oKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNNYXRjaFN0cnVjdHVyZURhdGEo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTWF0Y2hTdHJ1Y3R1cmU7CisgICAgfQor
ICAgIAorICAgIE1hdGNoU3RydWN0dXJlRGF0YSYgbWF0Y2hTdHJ1Y3R1cmVEYXRhKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNNYXRjaFN0cnVjdHVyZURhdGEoKSk7CisgICAgICAgIHJldHVy
biAqbV9vcEluZm8uYXM8TWF0Y2hTdHJ1Y3R1cmVEYXRhKj4oKTsKKyAgICB9CisgICAgCiAgICAg
Ym9vbCBoYXNPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKICAgICB7CiAgICAgICAgIHN3aXRj
aCAob3AoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNiArMzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIG1hY3JvKE92ZXJyaWRlc0hhc0luc3RhbmNlLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJbnN0YW5jZU9mLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJbnN0YW5jZU9m
Q3VzdG9tLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBtYWNy
byhNYXRjaFN0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuKSBc
CiAgICAgXAogICAgIG1hY3JvKElzQ2VsbFdpdGhUeXBlLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAog
ICAgIG1hY3JvKElzRW1wdHksIE5vZGVSZXN1bHRCb29sZWFuKSBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjMxOTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCwxNCArMTM0LDE0IEBAIHByaXZhdGU6CiAvLyBzYWZlbHkgZXhlY3V0ZSBi
ZWZvcmUgdGhhdCBjaGVjaywgc28gbG9uZyBhcyB0aGF0IGNoZWNrIGNvbnRpbnVlcyB0byBndWFy
ZCBhbnkKIC8vIHVzZXItb2JzZXJ2YWJsZSB0aGluZ3MgZG9uZSB0byB0aGUgbG9hZGVkIHZhbHVl
LgogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci1ib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiti
b29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIGJvb2wgaWdub3JlRW1wdHlDaGlsZHJlbiA9IGZhbHNlKQogewogICAgIFNh
ZmVUb0V4ZWN1dGVFZGdlPEFic3RyYWN0U3RhdGVUeXBlPiBzYWZlVG9FeGVjdXRlRWRnZShzdGF0
ZSk7CiAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHNhZmVUb0V4ZWN1
dGVFZGdlKTsKICAgICBpZiAoIXNhZmVUb0V4ZWN1dGVFZGdlLnJlc3VsdCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoc2FmZVRvRXhlY3V0ZUVkZ2UubWF5U2VlRW1wdHlDaGls
ZCgpKSB7CisgICAgaWYgKCFpZ25vcmVFbXB0eUNoaWxkcmVuICYmIHNhZmVUb0V4ZWN1dGVFZGdl
Lm1heVNlZUVtcHR5Q2hpbGQoKSkgewogICAgICAgICAvLyBXZSBjb25zZXJ2YXRpdmVseSBhc3N1
bWUgaWYgdGhlIGVtcHR5IHZhbHVlIGZsb3dzIGludG8gYSBub2RlLAogICAgICAgICAvLyBpdCBt
aWdodCBub3QgYmUgYWJsZSB0byBoYW5kbGUgaXQgKGUuZywgY3Jhc2gpLiBJbiBnZW5lcmFsLCB0
aGUgYnl0ZWNvZGUgZ2VuZXJhdG9yCiAgICAgICAgIC8vIGVtaXRzIGNvZGUgaW4gc3VjaCBhIHdh
eSB0aGF0IG1vc3Qgbm9kZSB0eXBlcyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBlbXB0
eSB2YWx1ZQpAQCAtNDUyLDYgKzQ1Miw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2FzZSBBdG9taWNzSXNMb2Nr
RnJlZToKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgorICAgIGNhc2Ug
TWF0Y2hTdHJ1Y3R1cmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBBcnJheVNs
aWNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzYwLDYgKzMzNjAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1
cmU6IHsKKyAgICAgICAgY29tcGlsZU1hdGNoU3RydWN0dXJlKG5vZGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVyOiB7CiAgICAgICAgIGNvbXBp
bGVHZXRHZXR0ZXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMzE5
NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjI3LDYgKzM2MjcsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAor
ICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAgY29tcGlsZU1hdGNoU3RydWN0dXJl
KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgR2V0R2V0
dGVyOiB7CiAgICAgICAgIGNvbXBpbGVHZXRHZXR0ZXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgzMyw2ICsxMTgzMywzMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlPZmZzZXQoCiAgICAgbm9SZXN1bHQobm9k
ZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRjaFN0cnVjdHVyZShOb2Rl
KiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgCisg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHRlbXBHUFIpOworICAgIAorICAgIGF1dG8mIHZhcmlhbnRzID0g
bm9kZS0+bWF0Y2hTdHJ1Y3R1cmVEYXRhKCkudmFyaWFudHM7CisgICAgVmVjdG9yPGludDY0X3Q+
IGNhc2VzOworICAgIGZvciAoTWF0Y2hTdHJ1Y3R1cmVWYXJpYW50JiB2YXJpYW50IDogdmFyaWFu
dHMpCisgICAgICAgIGNhc2VzLmFwcGVuZCh2YXJpYW50LnN0cnVjdHVyZS0+aWQoKSk7CisgICAg
CisgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaCh0ZW1wR1BSLCBjYXNlcywgQmluYXJ5U3dp
dGNoOjpJbnQzMik7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgd2hpbGUg
KGJpbmFyeVN3aXRjaC5hZHZhbmNlKG1faml0KSkgeworICAgICAgICBtX2ppdC5ib3hCb29sZWFu
UGF5bG9hZCh2YXJpYW50c1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCldLnJlc3VsdCwgdGVtcEdQ
Uik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgfQorICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIG5vZGUsIGJpbmFyeVN3aXRjaC5m
YWxsVGhyb3VnaCgpKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBi
bGVzc2VkQm9vbGVhblJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUpCiB7CiAgICAgSlNW
YWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMzE5NjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzNzUsNiArMTM3NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbFdpdGhUaGlzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRCeU9mZnNldChOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlPZmZzZXQoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZU1hdGNoU3RydWN0dXJlKE5vZGUqKTsKICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgaXQg
bWVhbnMgdGhhdCB3ZSB0ZXJtaW5hdGVkIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbi4KICAgICBib29s
IGdldEludFR5cGVkQXJyYXlTdG9yZU9wZXJhbmQoCiAgICAgICAgIEdQUlRlbXBvcmFyeSYgdmFs
dWUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OSw2ICszNDksNyBAQCBpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OgogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgY2FzZSBQdXRCeVZhbFdpdGhUaGlzOgor
ICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAg
ICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTExLDYgKzkxMSw5IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgICAgIGNv
bXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBNYXRjaFN0cnVjdHVyZToKKyAgICAgICAgICAgIGNvbXBpbGVNYXRjaFN0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICBj
YXNlIEdldEdsb2JhbExleGljYWxWYXJpYWJsZToKICAgICAgICAgICAgIGNvbXBpbGVHZXRHbG9i
YWxWYXJpYWJsZSgpOwpAQCAtNjU5Miw2ICs2NTk1LDQ3IEBAIHByaXZhdGU6CiAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0KICAgICAKKyAgICB2
b2lkIGNvbXBpbGVNYXRjaFN0cnVjdHVyZSgpCisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBNYXRjaFN0cnVj
dHVyZURhdGEmIGRhdGEgPSBtX25vZGUtPm1hdGNoU3RydWN0dXJlRGF0YSgpOworICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgdHJ1ZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgZmFsc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExC
YXNpY0Jsb2NrIGV4aXRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIAorICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZSh0cnVlQmxv
Y2spOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOworICAg
ICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CisgICAgICAgIGZvciAoTWF0Y2hT
dHJ1Y3R1cmVWYXJpYW50JiB2YXJpYW50IDogZGF0YS52YXJpYW50cykgeworICAgICAgICAgICAg
YmFzZVNldC5hZGQodmFyaWFudC5zdHJ1Y3R1cmUpOworICAgICAgICAgICAgY2FzZXMuYXBwZW5k
KFN3aXRjaENhc2UoCisgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQuc3Ry
dWN0dXJlKSwKKyAgICAgICAgICAgICAgICB2YXJpYW50LnJlc3VsdCA/IHRydWVCbG9jayA6IGZh
bHNlQmxvY2ssIFdlaWdodCgxKSkpOworICAgICAgICB9CisgICAgICAgIGJvb2wgc3RydWN0dXJl
c0NoZWNrZWQgPSBtX2ludGVycHJldGVyLmZvck5vZGUobV9ub2RlLT5jaGlsZDEoKSkubV9zdHJ1
Y3R1cmUuaXNTdWJzZXRPZihiYXNlU2V0KTsKKyAgICAgICAgZW1pdFN3aXRjaEZvck11bHRpQnlP
ZmZzZXQoYmFzZSwgc3RydWN0dXJlc0NoZWNrZWQsIGNhc2VzLCBleGl0QmxvY2spOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8odHJ1ZUJsb2NrLCBmYWxzZUJsb2NrKTsKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgdHJ1ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFu
VHJ1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGZhbHNlQmxvY2ssIGV4aXRCbG9jayk7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhbHNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7
CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGV4aXRCbG9jaywgY29udGludWF0aW9uKTsKKyAgICAgICAgaWYgKCFzdHJ1
Y3R1cmVzQ2hlY2tlZCkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxl
KCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKKyAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIHRydWVSZXN1bHQsIGZh
bHNlUmVzdWx0KSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGlsZUdldEdsb2JhbFZhcmlh
YmxlKCkKICAgICB7CiAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29s
dXRlKG1fbm9kZS0+dmFyaWFibGVQb2ludGVyKCkpKSk7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxOTYx
KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBA
QAorMjAxOC0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaW5saW5lIEluc3RhbmNlT2YgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2OTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEkgZm91bmQgbXlzZWxmIG5lZWRpbmcg
YSB3YXkgdG8gcmVwcmVzZW50IGJvdHRvbS9mYWxzZS90cnVlL3RvcCwgc28gSSBjcmVhdGVkIGl0
LgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
d3RmL0Jvb2xlYW5MYXR0aWNlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpsdWJCb29sZWFuTGF0
dGljZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9DTWFr
ZUxpc3RzLnR4dDoKKwogMjAxOC0wNS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIENvbnZlcnQgQ2VydGlmaWNhdGVJbmZvIGludG8gQ3JlZGVudGlhbCBp
biBVSSBQcm9jZXNzIGluc3RlYWQgb2YgTmV0d29ya2luZyBQcm9jZXNzCkluZGV4OiBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTIzOSw2ICsyMzksNyBAQAogCQkwRkIxNEUxODE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkIzMTdDMzFDNDg4MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2luZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1UcmFjaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjM5OUI4MjBBRjVBNTgwMDE3RTIxMyAvKiBCb29sZWFuTGF0dGljZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb29sZWFuTGF0dGljZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0Njc4MjFGREUyODJCMDAzRkNCMDkgLyogQ29u
Y3VycmVudEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJy
ZW50QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ2NzgzMUZERTI4
MkMwMDNGQ0IwOSAvKiBDb25jdXJyZW50VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbmN1cnJlbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDNDQ4ODIxNkZFOUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNzSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTgxMyw2ICs4MTQsNyBAQAogCQkJCTFBOTQ0RjQ2MUMzRDg4MTQwMDVCRDI4QyAvKiBC
bG9ja1B0ci5oICovLAogCQkJCUE4QTQ3MjY0MTUxQTgyNUEwMDQxMjNGRiAvKiBCbG9ja1N0YWNr
LmggKi8sCiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb29tRmlsdGVyLmggKi8s
CisJCQkJMEZCMzk5QjgyMEFGNUE1ODAwMTdFMjEzIC8qIEJvb2xlYW5MYXR0aWNlLmggKi8sCiAJ
CQkJMEY5MzI3NEExQzE3RjRCNzAwQ0Y2NTY0IC8qIEJveC5oICovLAogCQkJCTdDM0Y3MjM5MUQ3
ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8sCiAJCQkJMEY0NTcwNDQxQkU4MzQ0MTAwNjJB
NjI5IC8qIEJ1YmJsZVNvcnQuaCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jvb2xlYW5MYXR0
aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQm9vbGVhbkxhdHRpY2UuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Cb29sZWFuTGF0dGljZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIFdURiB7CisKK2VudW0gY2xhc3MgQm9vbGVhbkxhdHRpY2UgOiB1aW50OF90
IHsKKyAgICBCb3R0b20gPSAwLAorICAgIEZhbHNlID0gMSwKKyAgICBUcnVlID0gMiwKKyAgICBU
b3AgPSAzCit9OworCitpbmxpbmUgQm9vbGVhbkxhdHRpY2UgbHViQm9vbGVhbkxhdHRpY2UoQm9v
bGVhbkxhdHRpY2UgYSwgQm9vbGVhbkxhdHRpY2UgYikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Qm9vbGVhbkxhdHRpY2U+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGEpIHwgc3RhdGljX2Nhc3Q8
dWludHB0cl90PihiKSk7Cit9CisKK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQm9vbGVhbkxhdHRpY2UgdmFsdWUpCit7CisgICAgc3dpdGNoICh2YWx1ZSkgewor
ICAgIGNhc2UgQm9vbGVhbkxhdHRpY2U6OkJvdHRvbToKKyAgICAgICAgb3V0LnByaW50KCJCb3R0
b20iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9vbGVhbkxhdHRpY2U6OkZhbHNlOgor
ICAgICAgICBvdXQucHJpbnQoIkZhbHNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJv
b2xlYW5MYXR0aWNlOjpUcnVlOgorICAgICAgICBvdXQucHJpbnQoIlRydWUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQm9vbGVhbkxhdHRpY2U6OlRvcDoKKyAgICAgICAgb3V0LnByaW50
KCJUb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpCb29sZWFu
TGF0dGljZTsKK3VzaW5nIFdURjo6bHViQm9vbGVhbkxhdHRpY2U7CisKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFE
RVJTCiAgICAgQmxvY2tQdHIuaAogICAgIEJsb2NrU3RhY2suaAogICAgIEJsb29tRmlsdGVyLmgK
KyAgICBCb29sZWFuTGF0dGljZS5oCiAgICAgQm94LmgKICAgICBCcmlnYW5kLmgKICAgICBCdWJi
bGVTb3J0LmgK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340755</attachid>
            <date>2018-05-18 16:15:01 -0700</date>
            <delta_ts>2018-05-18 16:23:53 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>64933</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxOTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBA
QAorMjAxOC0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaW5saW5lIEluc3RhbmNlT2YgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2OTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdGVhY2hlcyB0aGUgREZHIGhv
dyB0byBpbmxpbmUgSW5zdGFuY2VPZiBJQ3MgaW50byBhIE1hdGNoU3RydWN0dXJlIG5vZGUuIFRo
aXMgY2FuIHRoZW4KKyAgICAgICAgYmUgZm9sZGVkIHRvIGEgQ2hlY2tTdHJ1Y3R1cmUgKyBKU0Nv
bnN0YW50LgorICAgICAgICAKKyAgICAgICAgSW4gdGhlIHByb2Nlc3Mgb2YgdGVzdGluZyB0aGlz
LCBJIGZvdW5kIGEgYnVnIHdoZXJlIExJQ00gd2FzIG5vdCBob2lzdGluZyB0aGluZ3MgdGhhdAor
ICAgICAgICBkZXBlbmRlZCBvbiBFeHRyYU9TUkVudHJ5TG9jYWwgYmVjYXVzZSB0aGF0IG1pZ2h0
IHJldHVybiBTcGVjRW1wdHkuIEkgZml4ZWQgdGhhdCBieSB0ZWFjaGluZworICAgICAgICBMSUNN
IGhvdyB0byBtYXRlcmlhbGl6ZSBDaGVja05vdEVtcHR5IG9uIGRlbWFuZCB3aGVuZXZlciAhSG9p
c3RpbmdGYWlsZWQuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgNS03JSBzcGVlZC11cCBv
biBib3llci4KKyAgICAgICAgCisgICAgICAgIDIuNi0yLjl4IHNwZWVkLXVwIG9uIHRoZSBpbnN0
YW5jZW9mLWFsd2F5cy1oaXQtb25lLCBpbnN0YW5jZW9mLWFsd2F5cy1oaXQtdHdvLCBhbmQKKyAg
ICAgICAgaW5zdGFuY2VvZi1zb21ldGltZXMtaGl0IG1pY3JvYmVuY2htYXJrcy4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAg
ICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpH
ZXRCeUlkU3RhdHVzOjpmaWx0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
aDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6b3BlcmF0b3IgYm9vbCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6Om9wZXJhdG9yISBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJ
ZFZhcmlhbnQ6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFy
aWFudDo6b3BlcmF0b3IhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JQ1N0
YXR1c1V0aWxzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjphcHBlbmRJQ1N0YXR1c1ZhcmlhbnQp
OgorICAgICAgICAoSlNDOjpmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKToKKyAgICAgICAgKiBieXRl
Y29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Okluc3RhbmNl
T2ZTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVz
Ojpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6Y29tbW9uUHJvdG90
eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6ZmlsdGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpJbnN0YW5jZU9mU3RhdHVzOjpJbnN0YW5jZU9mU3RhdHVzKToKKyAgICAgICAgKEpTQzo6SW5z
dGFuY2VPZlN0YXR1czo6c3RhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3Rh
dHVzOjppc1NldCBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6Om9wZXJh
dG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjppc1NpbXBs
ZSBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6OnRha2VzU2xvd1BhdGgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjpudW1WYXJpYW50cyBjb25z
dCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6OnZhcmlhbnRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6YXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJ
bnN0YW5jZU9mU3RhdHVzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9J
bnN0YW5jZU9mVmFyaWFudC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFy
aWFudDo6SW5zdGFuY2VPZlZhcmlhbnQpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6ZHVt
cCBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZWYXJpYW50OjpkdW1wSW5Db250ZXh0
IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6Okluc3RhbmNlT2ZWYXJpYW50KToKKyAg
ICAgICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAg
ICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6c3RydWN0dXJlU2V0IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6OnN0cnVjdHVyZVNldCk6CisgICAgICAgIChKU0M6
Okluc3RhbmNlT2ZWYXJpYW50Ojpjb25kaXRpb25TZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJ
bnN0YW5jZU9mVmFyaWFudDo6cHJvdG90eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFu
Y2VPZlZhcmlhbnQ6OmlzSGl0IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmNvbnNpZGVyQ2FjaGluZyk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xk
aW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjphdHRlbXB0SG9pc3QpOgorICAgICAgICAq
IGRmZy9ERkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpyZW1vdmUpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTWF0Y2hT
dHJ1Y3R1cmVEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjptYXRjaFN0cnVjdHVyZURh
dGEpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdTYWZl
VG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU1hdGNoU3RydWN0dXJlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9C
My5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGNoU3Ry
dWN0dXJlKToKKwogMjAxOC0wNS0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIG1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDggQEAgYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAogYnl0ZWNvZGUv
SW5saW5lQ2FsbEZyYW1lU2V0LmNwcAogYnl0ZWNvZGUvSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuY3Bw
CitieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAorYnl0ZWNvZGUvSW5zdGFuY2VPZlZhcmlh
bnQuY3BwCiBieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcAogYnl0ZWNvZGUv
SnVtcFRhYmxlLmNwcAogYnl0ZWNvZGUvTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDkgQEAK
IAkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2NUYxOTZCOEY5RTAwOTEw
NTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyB9OwogCQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUg
LyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3Qu
aCAqLzsgfTsKIAkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tP
cmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
Mzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovOyB9Owor
CQkwRkIzOTlCRTIwQUY2QjNEMDAxN0UyMTMgLyogSUNTdGF0dXNVdGlscy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzk5QkQyMEFGNkIzODAwMTdF
MjEzIC8qIElDU3RhdHVzVXRpbHMuaCAqLzsgfTsKKwkJMEZCMzk5QkYyMEFGNkIzRjAwMTdFMjEz
IC8qIEluc3RhbmNlT2ZTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjM5OUJCMjBBRjZCMkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mU3RhdHVz
LmggKi87IH07CisJCTBGQjM5OUMwMjBBRjZCNDMwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzk5
QjkyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmggKi87IH07CiAJCTBGQjQ2
NzdGMUZEREE2RTkwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0
b21JbmRpY2VzLmggKi87IH07CiAJCTBGQjQ2NzgwMUZEREE2RjEwMDNGQ0IwOSAvKiBJc29DZWxs
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0
Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQ2NzgxMUZEREE2RjcwMDNGQ0IwOSAv
KiBJc29DZWxsU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDY3N0IxRkREQTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggKi87IH07CkBAIC0yNjA5LDYgKzI2MTIsMTEgQEAKIAkJMEZCMzg3OEMxQkZCQzQ0RDAwRTNB
QjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ck9wdGltaXplQmxvY2tPcmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyT3B0aW1pemVCbG9ja09yZGVyLmg7IHBhdGgg
PSBiMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENvbXBpbGUuY3BwOyBwYXRoID0gZnRs
L0ZUTENvbXBpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIzOTlCOTIw
QUY2QjJBMDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zdGFuY2VPZlZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCMzk5QkEyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZTdGF0dXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zdGFuY2VPZlN0YXR1cy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjM5OUJCMjBBRjZCMkEwMDE3RTIx
MyAvKiBJbnN0YW5jZU9mU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3RhbmNlT2ZTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMzk5
QkMyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3RhbmNlT2ZWYXJpYW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMzk5QkQyMEFGNkIzODAwMTdFMjEzIC8qIElDU3RhdHVz
VXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNTdGF0dXNVdGlscy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkg
LyogQXJyYXlDb252ZW50aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBcnJheUNvbnZlbnRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkI0Njc3QjFGRERBNkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXNvQ2VsbFNldElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2MjQsMTIgKzc2MzIsMTcgQEAK
IAkJCQkwRjAzMzJDMjE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuaCAqLywKIAkJ
CQkxNEFEOTEwODFEQ0E5Mjk0MDAxNEY5RkUgLyogR2xvYmFsQ29kZUJsb2NrLmggKi8sCiAJCQkJ
MEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggKi8sCisJCQkJMEZCMzk5
QkQyMEFGNkIzODAwMTdFMjEzIC8qIElDU3RhdHVzVXRpbHMuaCAqLywKIAkJCQk3OTA1QkI2NjFE
MTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLywKIAkJCQk3OTA1QkI2NzFEMTIw
NTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggKi8sCiAJCQkJMTQ4QTdCRUQxQjgyOTc1QTAw
MkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5jcHAgKi8sCiAJCQkJMTQ4QTdCRUUxQjgyOTc1QTAw
MkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5oICovLAogCQkJCTBGMjRFNTUzMTdGMEI3MUMwMEFC
QjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwICovLAogCQkJCTBGMjRFNTU0MTdGMEI3MUMw
MEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLywKKwkJCQkwRkIzOTlCQTIwQUY2QjJB
MDAxN0UyMTMgLyogSW5zdGFuY2VPZlN0YXR1cy5jcHAgKi8sCisJCQkJMEZCMzk5QkIyMEFGNkIy
QTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZTdGF0dXMuaCAqLywKKwkJCQkwRkIzOTlCQzIwQUY2QjJB
MDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQuY3BwICovLAorCQkJCTBGQjM5OUI5MjBBRjZC
MkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFudC5oICovLAogCQkJCTk2OUEwNzkzMEVEMUQz
QUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovLAogCQkJCTUzRjZCRjZDMUMzRjA2MEEwMEY0
MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLywKIAkJCQlCQ0ZE
OEM5MDBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCAqLywKQEAgLTkwNTUsNiArOTA2
OCw3IEBACiAJCQkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxG
cmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FF
NjEzIC8qIEpTSm9iLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjM5OUMw
MjBBRjZCNDMwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyQTRCQjdGMzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTc5LDYgKzkxOTMsNyBAQAogCQkJCTBGNDY4MENE
MTRCQkIxN0QwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5ODFFRDgyMzI4MjM0RDkxQkFFQ0NBREUgLyogTWFjaGluZUNvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0QjcyM0I4MTJEN0RBNkYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJr
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjM5OUJGMjBBRjZCM0YwMDE3RTIxMyAvKiBJbnN0
YW5jZU9mU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkMzNkVFQTBFRTEyODlEMDBCM0RG
NTkgLyogTWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM2MTAxNTZC
REUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFB
MDA5QzAxODMxQTIyRDAwQ0Y4NzExIC8qIE1hY3JvQXNzZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTQzNyw2ICs5NDUyLDcgQEAKIAkJCQk3MDVCNDFBRTFBNkU1MDFFMDA3MTY3NTcg
LyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI3MUJEQTA4
RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwNUI0MUIwMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmplY3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGQjM5OUJFMjBBRjZCM0QwMDE3RTIxMyAvKiBJQ1N0YXR1c1V0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyODFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9s
UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0
NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIzMTk2
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00NywyMiArNDgsNyBAQCBjbGFzcyBHZXR0ZXJTZXR0
ZXI7CiAKIGJvb2wgR2V0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFy
aWFudCYgdmFyaWFudCkKIHsKLSAgICAvLyBBdHRlbXB0IHRvIG1lcmdlIHRoaXMgdmFyaWFudCB3
aXRoIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFyaWFudC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV92YXJpYW50c1tp
XS5hdHRlbXB0VG9NZXJnZSh2YXJpYW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gb3ZlcmxhcC4gV2Ugc2hvdWxk
IGhhdmUgcHJ1bmVkIG91dCBvcHBvcnR1bml0aWVzIGZvcgotICAgIC8vIG92ZXJsYXAgYnV0IGl0
J3MgcG9zc2libGUgdGhhdCBhbiBpbmxpbmUgY2FjaGUgZ290IGludG8gYSB3ZWlyZCBzdGF0ZS4g
V2UgYXJlCi0gICAgLy8gZGVmZW5zaXZlIGFuZCBiYWlsIGlmIHdlIGRldGVjdCBjcmF6eS4KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV92YXJpYW50c1tpXS5zdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyh2YXJpYW50LnN0
cnVjdHVyZVNldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0g
ICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKIH0KIAogI2lm
IEVOQUJMRShERkdfSklUKQpAQCAtNDMyLDE0ICs0MTgsNyBAQCB2b2lkIEdldEJ5SWRTdGF0dXM6
OmZpbHRlcihjb25zdCBTdHJ1Y3R1CiB7CiAgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQogICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklYTUU6IFdlIGNvdWxkIGFsc28gZmlsdGVyIHRo
ZSB2YXJpYW50cyB0aGVtc2VsdmVzLgotICAgIAotICAgIG1fdmFyaWFudHMucmVtb3ZlQWxsTWF0
Y2hpbmcoCi0gICAgICAgIFsmXSAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQpIC0+IGJvb2wgewot
ICAgICAgICAgICAgcmV0dXJuICF2YXJpYW50LnN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKHNldCk7
Ci0gICAgICAgIH0pOwotICAgIAorICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50
cywgc2V0KTsKICAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCiAgICAgICAgIG1fc3RhdGUg
PSBOb0luZm9ybWF0aW9uOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3
ICs5Myw3IEBAIHB1YmxpYzoKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBO
b0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNT
ZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1Nl
dCgpOyB9CiAgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2lt
cGxlOyB9CiAgICAgYm9vbCBpc0N1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gQ3Vz
dG9tOyB9CiAgICAgYm9vbCBpc01vZHVsZU5hbWVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gTW9kdWxlTmFtZXNwYWNlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgR2V0QnlJZFZhcmlhbnQmKTsKICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4gISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5cGUsIHR5cGVuYW1lIFZhcmlhbnRUeXBl
PgorYm9vbCBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQoVmFyaWFudFZlY3RvclR5cGUmIHZhcmlhbnRz
LCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkKK3sKKyAgICAvLyBBdHRlbXB0IHRvIG1lcmdl
IHRoaXMgdmFyaWFudCB3aXRoIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFyaWFudC4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KHZhcmlhbnRzW2ldLmF0dGVtcHRUb01lcmdlKHZhcmlhbnQpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBvdmVybGFw
LiBXZSBzaG91bGQgaGF2ZSBwcnVuZWQgb3V0IG9wcG9ydHVuaXRpZXMgZm9yCisgICAgLy8gb3Zl
cmxhcCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IGFuIGlubGluZSBjYWNoZSBnb3QgaW50byBhIHdl
aXJkIHN0YXRlLiBXZSBhcmUKKyAgICAvLyBkZWZlbnNpdmUgYW5kIGJhaWwgaWYgd2UgZGV0ZWN0
IGNyYXp5LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YXJpYW50cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAodmFyaWFudHNbaV0uc3RydWN0dXJlU2V0KCkub3ZlcmxhcHModmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIHZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5cGU+Cit2b2lkIGZpbHRlcklDU3Rh
dHVzVmFyaWFudHMoVmFyaWFudFZlY3RvclR5cGUmIHZhcmlhbnRzLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgY291bGQgYWxzbyBmaWx0ZXIgdGhlIHZhcmlh
bnRzIHRoZW1zZWx2ZXMuCisgICAgCisgICAgdmFyaWFudHMucmVtb3ZlQWxsTWF0Y2hpbmcoCisg
ICAgICAgIFsmXSAoYXV0byYgdmFyaWFudCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4g
IXZhcmlhbnQuc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMoc2V0KTsKKyAgICAgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zdGFuY2VPZlN0
YXR1cy5oIgorCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVy
ZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEluc3RhbmNlT2ZTdGF0dXM6
OmFwcGVuZFZhcmlhbnQoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIHZhcmlhbnQpCit7CisgICAg
YXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOworfQorCitJbnN0YW5j
ZU9mU3RhdHVzIEluc3RhbmNlT2ZTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0dWJJbmZvTWFwJiBpbmZvTWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQor
eworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAg
IAorICAgIEluc3RhbmNlT2ZTdGF0dXMgcmVzdWx0OworI2lmIEVOQUJMRShERkdfSklUKQorICAg
IHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIsIGluZm9NYXAuZ2V0KENvZGVPcmln
aW4oYnl0ZWNvZGVJbmRleCkpKTsKKworICAgIGlmICghcmVzdWx0LnRha2VzU2xvd1BhdGgoKSkg
eworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIodW5saW5rZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIC8vIFdlIGFsc28gY2hlY2sg
Zm9yIEJhZFR5cGUgaGVyZSBpbiBjYXNlIHRoaXMgaXMgInByaW1pdGl2ZSBpbnN0YW5jZW9mIEZv
byIuCisgICAgICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBE
Rkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUpKQorICAgICAgICAg
ICAgfHwgdW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVu
dEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50Q2FjaGUpKQorICAgICAgICAgICAg
fHwgdW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4
aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZFR5cGUpKSkKKyAgICAgICAgICAgIHJldHVybiBUYWtl
c1Nsb3dQYXRoOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluZm9NYXApOworICAg
IFVOVVNFRF9QQVJBTShjb2RlT3JpZ2luKTsKKyNlbmRpZgorICAgIAorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0luc3RhbmNlT2ZTdGF0dXMgSW5zdGFuY2VP
ZlN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKKyAgICBpZiAoIXN0dWJJbmZvIHx8ICFzdHVi
SW5mby0+ZXZlckNvbnNpZGVyZWQpCisgICAgICAgIHJldHVybiBOb0luZm9ybWF0aW9uOworICAg
IAorICAgIC8vIEZJWE1FOiBXZSB3b3VsZG4ndCBoYXZlIHRvIGJhaWwgZm9yIG5vbkNlbGwgaWYg
d2UgdGF1Z2h0IE1hdGNoU3RydWN0dXJlIGhvdyB0byBoYW5kbGUgbm9uCisgICAgLy8gY2VsbHMu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc4NAor
ICAgIGlmIChzdHViSW5mby0+dG9va1Nsb3dQYXRoIHx8IHN0dWJJbmZvLT5zYXdOb25DZWxsKQor
ICAgICAgICByZXR1cm4gVGFrZXNTbG93UGF0aDsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8tPmNh
Y2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQYXRo
OyAvLyBUaGlzIGlzIGNvbnNlcnZhdGl2ZS4gSXQgY291bGQgYmUgdGhhdCB3ZSBoYXZlIG5vIGlu
Zm9ybWF0aW9uLgorICAgIAorICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8t
PnUuc3R1YjsKKyAgICBJbnN0YW5jZU9mU3RhdHVzIHJlc3VsdDsKKyAgICBmb3IgKHVuc2lnbmVk
IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsK
KyAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsK
KyAgICAgICAgCisgICAgICAgIGlmIChhY2Nlc3MudHlwZSgpID09IEFjY2Vzc0Nhc2U6Okluc3Rh
bmNlT2ZHZW5lcmljKQorICAgICAgICAgICAgcmV0dXJuIFRha2VzU2xvd1BhdGg7CisgICAgICAg
IAorICAgICAgICBpZiAoIWFjY2Vzcy5jb25kaXRpb25TZXQoKS5zdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQYXRoOworICAgICAgICAKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZFZhcmlhbnQoSW5zdGFuY2VPZlZhcmlhbnQoCisgICAgICAgICAg
ICBhY2Nlc3Muc3RydWN0dXJlKCksCisgICAgICAgICAgICBhY2Nlc3MuY29uZGl0aW9uU2V0KCks
CisgICAgICAgICAgICBhY2Nlc3MuYXM8SW5zdGFuY2VPZkFjY2Vzc0Nhc2U+KCkucHJvdG90eXBl
KCksCisgICAgICAgICAgICBhY2Nlc3MudHlwZSgpID09IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZI
aXQpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworSlNPYmplY3QqIEluc3RhbmNlT2ZTdGF0dXM6OmNvbW1vblByb3RvdHlw
ZSgpIGNvbnN0Cit7CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IG51bGxwdHI7CisgICAgZm9y
IChjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKKyAgICAg
ICAgaWYgKCFwcm90b3R5cGUpIHsKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IHZhcmlhbnQucHJv
dG90eXBlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cHJvdG90eXBlICE9IHZhcmlhbnQucHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwordm9pZCBJbnN0YW5jZU9m
U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQpCit7CisgICAg
aWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm47CisgICAgZmlsdGVySUNTdGF0
dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzdHJ1Y3R1cmVTZXQpOworICAgIGlmIChtX3ZhcmlhbnRz
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dGFuY2VPZlN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0YW5jZU9mU3RhdHVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkNvbmN1
cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJJbnN0YW5jZU9mVmFyaWFudC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQWNjZXNzQ2FzZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJl
U3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKKworY2xh
c3MgSW5zdGFuY2VPZlN0YXR1cyB7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAg
IC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9J
bmZvcm1hdGlvbiwKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGluIGEgc2ltcGxl
IHdheS4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAKKyAgICAgICAgLy8gSXQncyBrbm93biB0
byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgVGFrZXNTbG93UGF0aAorICAgIH07Cisg
ICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0
aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cyhTdGF0ZSBzdGF0
ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRl
ID09IE5vSW5mb3JtYXRpb24gfHwgc3RhdGUgPT0gTWFrZXNDYWxscyk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBJbnN0YW5jZU9mU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgU3R1Yklu
Zm9NYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyNlbmRpZgorICAgIAor
ICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIAorICAgIGJv
b2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQorICAg
IAorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsg
fQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFr
ZXNTbG93UGF0aDsgfQorICAgIAorICAgIEpTT2JqZWN0KiBjb21tb25Qcm90b3R5cGUoKSBjb25z
dDsKKyAgICAKKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3Zhcmlh
bnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxJbnN0YW5jZU9mVmFyaWFudCwgMj4mIHZh
cmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IEluc3RhbmNl
T2ZWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5k
ZXhdOyB9CisgICAgY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIHZvaWQgZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZVNldCYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIHZvaWQgYXBwZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9mVmFy
aWFudCYpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9yPEluc3RhbmNlT2ZW
YXJpYW50LCAyPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZWYXJp
YW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5zdGFuY2VPZlZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkluc3RhbmNlT2ZWYXJpYW50LmgiCisKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitJbnN0YW5jZU9mVmFyaWFudDo6SW5zdGFuY2VPZlZhcmlhbnQoCisgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSwgYm9vbCBpc0hpdCkKKyAgICA6
IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRp
dGlvblNldCkKKyAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKKyAgICAsIG1faXNIaXQoaXNI
aXQpCit7Cit9CisKK2Jvb2wgSW5zdGFuY2VPZlZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0
IEluc3RhbmNlT2ZWYXJpYW50JiBvdGhlcikKK3sKKyAgICBpZiAobV9wcm90b3R5cGUgIT0gb3Ro
ZXIubV9wcm90b3R5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9p
c0hpdCAhPSBvdGhlci5tX2lzSGl0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRp
b25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgaWYgKCFtZXJnZWRD
b25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jb25k
aXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgCisgICAgbV9zdHJ1Y3R1cmVTZXQu
bWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEluc3RhbmNlT2ZWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCit2b2lkIEluc3RhbmNlT2ZW
YXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8ZW1w
dHk+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KAorICAg
ICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsIGluQ29u
dGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICIsIgorICAgICAgICAiIHByb3RvdHlwZSA9
ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fcHJvdG90eXBlKSwgY29udGV4dCksICIsIgorICAgICAg
ICAiIGlzSGl0ID0gIiwgbV9pc0hpdCwgIj4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9m
VmFyaWFudC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbnN0YW5jZU9mVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIlN0
cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSW5zdGFuY2VPZlN0YXR1
czsKKworY2xhc3MgSW5zdGFuY2VPZlZhcmlhbnQgeworcHVibGljOgorICAgIEluc3RhbmNlT2ZW
YXJpYW50KCkgeyB9CisgICAgSW5zdGFuY2VPZlZhcmlhbnQoY29uc3QgU3RydWN0dXJlU2V0Jiwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBKU09iamVjdCogcHJvdG90eXBlLCBi
b29sIGlzSGl0KTsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9Cisg
ICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsg
fQorICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpTT2JqZWN0
KiBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgIAorICAgIGJv
b2wgaXNIaXQoKSBjb25zdCB7IHJldHVybiBtX2lzSGl0OyB9CisgICAgCisgICAgYm9vbCBhdHRl
bXB0VG9NZXJnZShjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgb3RoZXIpOworICAgIAorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBJbnN0YW5jZU9mU3RhdHVzOworICAgIAorICAgIFN0cnVjdHVyZVNldCBtX3N0cnVj
dHVyZVNldDsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsK
KyAgICBKU09iamVjdCogbV9wcm90b3R5cGUgPSBudWxscHRyOworICAgIGJvb2wgbV9pc0hpdCB7
IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZp
c2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIFN0cnVjdHVyZVN0
dWJJbmZvOjpTdHJ1Y3R1cmVTdHViSW5mbyhBY2MKICAgICAsIHRvb2tTbG93UGF0aChmYWxzZSkK
ICAgICAsIGV2ZXJDb25zaWRlcmVkKGZhbHNlKQogICAgICwgcHJvdG90eXBlSXNLbm93bk9iamVj
dChmYWxzZSkKKyAgICAsIHNhd05vbkNlbGwoZmFsc2UpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZp
c2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtOTAsOCArOTAsMTAgQEAgcHVibGljOgogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBjb25zaWRlckNhY2hpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgLy8gV2UgbmV2ZXIgY2FjaGUg
bm9uLWNlbGxzLgotICAgICAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUpIHsKKyAgICAgICAgICAgIHNhd05vbkNlbGwgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBj
YWxsZWQgZnJvbSB0aGUgT3B0aW1pemUgdmFyaWFudHMgb2YgSUMgc2xvdyBwYXRocy4gVGhlIGZp
cnN0IHBhcnQgb2YgdGhpcwogICAgICAgICAvLyBtZXRob2QgdHJpZXMgdG8gZGV0ZXJtaW5lIGlm
IHRoZSBPcHRpbWl6ZSB2YXJpYW50IHNob3VsZCByZWFsbHkgYmVoYXZlIGxpa2UgdGhlCkBAIC0y
MTksNiArMjIxLDcgQEAgcHVibGljOgogICAgIGJvb2wgdG9va1Nsb3dQYXRoIDogMTsKICAgICBi
b29sIGV2ZXJDb25zaWRlcmVkIDogMTsKICAgICBib29sIHByb3RvdHlwZUlzS25vd25PYmplY3Qg
OiAxOyAvLyBPbmx5IHJlbGV2YW50IGZvciBJbnN0YW5jZU9mLgorICAgIGJvb2wgc2F3Tm9uQ2Vs
bCA6IDE7CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVP
cmlnaW4oU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZvKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0
dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKLQorI2luY2x1ZGUgPHd0Zi9Cb29sZWFu
TGF0dGljZS5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0zMzcxLDYgKzMzNzEsNDAgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjbG9iYmVyV29ybGQoKTsK
ICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAg
ICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFJl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKKyAgICAgICAgCisgICAgICAgIEJvb2xlYW5M
YXR0aWNlIHJlc3VsdCA9IEJvb2xlYW5MYXR0aWNlOjpCb3R0b207CisgICAgICAgIGZvciAoTWF0
Y2hTdHJ1Y3R1cmVWYXJpYW50JiB2YXJpYW50IDogbm9kZS0+bWF0Y2hTdHJ1Y3R1cmVEYXRhKCku
dmFyaWFudHMpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0g
dmFyaWFudC5zdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAoIWJhc2UuY29udGFpbnMoc3RydWN0
dXJlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgYmFzZVNldC5tZXJnZShzdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmVzdWx0ID0gbHViQm9v
bGVhbkxhdHRpY2UocmVzdWx0LCB2YXJpYW50LnJlc3VsdCA/IEJvb2xlYW5MYXR0aWNlOjpUcnVl
IDogQm9vbGVhbkxhdHRpY2U6OkZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpIHx8IGJhc2VTZXQuc2l6ZSgpIDwgYmFz
ZS5tX3N0cnVjdHVyZS5zaXplKCkpCisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOworICAgICAgICAKKyAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBiYXNlU2V0KSA9PSBDb250cmFkaWN0aW9uKQorICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIHN3
aXRjaCAocmVzdWx0KSB7CisgICAgICAgIGNhc2UgQm9vbGVhbkxhdHRpY2U6OkZhbHNlOgorICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBCb29sZWFuTGF0dGljZTo6VHJ1ZToKKyAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbih0cnVlKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2Rl
LCBTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRl
ICJJbnN0YW5jZU9mU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTRml4ZWRBcnJheS5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKQEAgLTQ3
ODMsMTIgKzQ3ODQsNDAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mOiB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHR1cm4gdGhpcyBpbnRvIGVpdGhlciBhIENoZWNrU3RydWN0
dXJlIGZvbGxvd2VkIGJ5IGEgY29uc3RhbnQsIG9yCi0gICAgICAgICAgICAvLyBzb21lIGtpbmQg
b2YgTXVsdGlJbnN0YW5jZU9mIHRoaW5nLCBpZiB0aGUgSW5zdGFuY2VPZiBJQyBpcyBzdGFibGUu
Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTg1Njk1CiAgICAgICAgICAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9w
SW5zdGFuY2VvZio+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEluc3RhbmNlT2ZTdGF0dXMgc3RhdHVzID0gSW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0ZUZv
cigKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1f
aW5saW5lU3RhY2tUb3AtPm1fc3R1YkluZm9zLAorICAgICAgICAgICAgICAgIG1fY3VycmVudElu
ZGV4KTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLnZhbHVlKCkpKTsKICAgICAgICAgICAgIE5vZGUqIHByb3RvdHlw
ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUucHJvdG90eXBlKCkpKTsKKworICAgICAg
ICAgICAgLy8gT25seSBpbmxpbmUgaXQgaWYgaXQncyBTaW1wbGUgd2l0aCBhIGNvbW1vblByb3Rv
dHlwZTsgYm90dG9tL3RvcCBvciB2YXJpYWJsZQorICAgICAgICAgICAgLy8gcHJvdG90eXBlcyBi
b3RoIGdldCBoYW5kbGVkIGJ5IHRoZSBJQy4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgYm90dG9tICh1
bnByb2ZpbGVkKQorICAgICAgICAgICAgLy8gaW5zdGFuY2VvZiBJQ3MgYmVjYXVzZSB0aGUgcHJv
Zml0IG9mIHRoaXMgb3B0aW1pemF0aW9uIGlzIGZhaXJseSBsb3cuIFNvLCBpbiB0aGUKKyAgICAg
ICAgICAgIC8vIGFic2VuY2Ugb2YgYW55IGluZm9ybWF0aW9uLCBpdCdzIGJldHRlciB0byBhdm9p
ZCBtYWtpbmcgdGhpcyBiZSB0aGUgY2F1c2Ugb2YgYQorICAgICAgICAgICAgLy8gcmVjb21waWxh
dGlvbi4KKyAgICAgICAgICAgIGlmIChKU09iamVjdCogY29tbW9uUHJvdG90eXBlID0gc3RhdHVz
LmNvbW1vblByb3RvdHlwZSgpKSB7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Nl
bGwsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjb21tb25Qcm90b3R5cGUpKSwgcHJvdG90eXBlKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZURhdGEqIGRh
dGEgPSBtX2dyYXBoLm1fbWF0Y2hTdHJ1Y3R1cmVEYXRhLmFkZCgpOworICAgICAgICAgICAgICAg
IGZvciAoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMo
KSkgeworICAgICAgICAgICAgICAgICAgICBjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hdGNoU3RydWN0dXJl
VmFyaWFudCBtYXRjaFZhcmlhbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFZhcmlh
bnQuc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2hWYXJpYW50LnJlc3VsdCA9IHZhcmlhbnQuaXNIaXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS0+dmFyaWFudHMuYXBwZW5kKG1hdGNoVmFyaWFudCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9k
ZSogbWF0Y2ggPSBhZGRUb0dyYXBoKE1hdGNoU3RydWN0dXJlLCBPcEluZm8oZGF0YSksIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdCgpKSwg
bWF0Y2gpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3RhbmNlb2YpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLmRzdCgpKSwgYWRkVG9HcmFwaChJbnN0YW5jZU9mLCB2YWx1ZSwgcHJvdG90eXBl
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbnN0YW5jZW9mKTsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9u
IDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NDUsNiArNTQ1LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSks
IExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE1h
dGNoU3RydWN0dXJlOgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAg
IHJldHVybjsKIAogICAgIGNhc2UgQXJyYXlTbGljZToKICAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ4OSw2ICs0ODksMzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgICAgICBF
ZGdlIGJhc2VFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogYmFz
ZSA9IGJhc2VFZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZURhdGEm
IGRhdGEgPSBub2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2VWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShi
YXNlKTsKKworICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxv
Y2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJl
Zm9yZS4KKyAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFs
bG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBCb29sZWFuTGF0dGljZSByZXN1bHQgPSBC
b29sZWFuTGF0dGljZTo6Qm90dG9tOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghYmFzZVZhbHVlLmNvbnRhaW5zKGRhdGEudmFyaWFudHNbaV0uc3RydWN0dXJlKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJpYW50
cy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbHViQm9vbGVhbkxhdHRpY2UocmVzdWx0LCBkYXRhLnZhcmlh
bnRzW2ldLnJlc3VsdCA/IEJvb2xlYW5MYXR0aWNlOjpUcnVlIDogQm9vbGVhbkxhdHRpY2U6OkZh
bHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBCb29sZWFuTGF0dGljZTo6RmFsc2UgfHwgcmVzdWx0ID09IEJvb2xl
YW5MYXR0aWNlOjpUcnVlKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmVTZXQgc3RydWN0dXJlU2V0OworICAgICAgICAgICAgICAgICAgICBmb3IgKE1hdGNoU3RydWN0
dXJlVmFyaWFudCYgdmFyaWFudCA6IGRhdGEudmFyaWFudHMpCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmVTZXQuYWRkKHZhcmlhbnQuc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdHJ1Y3R1
cmVTZXQpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KAor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwgbV9ncmFwaC5mcmVlemUoanNCb29sZWFuKHJl
c3VsdCA9PSBCb29sZWFuTGF0dGljZTo6VHJ1ZSkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBHZXRCeUlkRGlyZWN0OgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkRGlyZWN0Rmx1c2g6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAy
MzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxMCw2ICszMTAsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBBdG9taWNzU3ViOgogICAgIGNhc2UgQXRvbWljc1hvcjoKICAg
ICBjYXNlIEF0b21pY3NJc0xvY2tGcmVlOgorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgUHVzaFdpdGhTY29wZToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjMxOTYx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1NCw2ICsxNDU0LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgYSB2YXJpYW50IG9mIE1hdGNoU3Ry
dWN0dXJlIHRoYXQgZG9lc24ndCBkbyBhIGNlbGwgY2hlY2suCisgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Nzg0CisgICAgICAgICAgICBm
aXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CiAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKQogICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjkzLDYgKzI5MywxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsg
KytpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS52YXJpYW50
c1tpXSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzTWF0Y2hTdHJ1Y3R1cmVE
YXRhKCkpIHsKKyAgICAgICAgZm9yIChNYXRjaFN0cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQgOiBu
b2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKS52YXJpYW50cykKKyAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgaW5Db250ZXh0KCp2YXJpYW50LnN0cnVjdHVyZS5nZXQoKSwgY29udGV4dCksICI9
PiIsIHZhcmlhbnQucmVzdWx0KTsKKyAgICB9CiAgICAgQVNTRVJUKG5vZGUtPmhhc1ZhcmlhYmxl
QWNjZXNzRGF0YSgqdGhpcykgPT0gbm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpOwogICAgIGlm
IChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nl
c3NEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNTIsNiArMTA1Miw3IEBAIHB1YmxpYzoKICAgICBCYWc8U3dpdGNoRGF0
YT4gbV9zd2l0Y2hEYXRhOwogICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aUdl
dEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVsdGlQdXRC
eU9mZnNldERhdGE7CisgICAgQmFnPE1hdGNoU3RydWN0dXJlRGF0YT4gbV9tYXRjaFN0cnVjdHVy
ZURhdGE7CiAgICAgQmFnPE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE+IG1fb2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YTsKICAgICBCYWc8Q2FsbFZhcmFyZ3NEYXRhPiBtX2NhbGxWYXJhcmdzRGF0
YTsKICAgICBCYWc8TG9hZFZhcmFyZ3NEYXRhPiBtX2xvYWRWYXJhcmdzRGF0YTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHJldmlzaW9uIDIzMTk2
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2NCwxNSArMjY0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oZGF0YS5wcmVIZWFkZXIpOwotICAgICAg
ICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpIHsKLSAgICAgICAg
ICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAg
ICAgICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0IHNh
ZmUgdG8gZXhlY3V0ZS5cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luYWxP
cmlnaW4gPSBub2RlLT5vcmlnaW47CisgICAgICAgIGJvb2wgY2FuU3BlY3VsYXRlQmxpbmRseSA9
ICFtX2dyYXBoLmhhc0dsb2JhbEV4aXRTaXRlKG9yaWdpbmFsT3JpZ2luLnNlbWFudGljLCBIb2lz
dGluZ0ZhaWxlZCk7CiAKICAgICAgICAgLy8gTk9URTogV2UgY291bGQganVzdCB1c2UgQmFja3dh
cmRzRG9taW5hdG9ycyBoZXJlIGRpcmVjdGx5LCBzaW5jZSB3ZSBhbHJlYWR5IGtub3cgdGhhdCB0
aGUKICAgICAgICAgLy8gcHJlSGVhZGVyIGRvbWluYXRlcyBmcm9tQmxvY2suIEJ1dCB3ZSB3b3Vs
ZG4ndCBnZXQgYW55dGhpbmcgZnJvbSBiZWluZyBzbyBjbGV2ZXIsIHNpbmNlCkBAIC0yODAsOCAr
Mjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBhZGRzQmxpbmRTcGVjdWxhdGlvbiA9IG1h
eUV4aXQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZSkKICAgICAgICAgICAgICYmICFtX2dyYXBoLm1f
Y29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMtPmRvbWluYXRlc0VxdWl2YWxlbnRseShkYXRhLnBy
ZUhlYWRlciwgZnJvbUJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChhZGRzQmxpbmRTcGVj
dWxhdGlvbgotICAgICAgICAgICAgJiYgbV9ncmFwaC5oYXNHbG9iYWxFeGl0U2l0ZShvcmlnaW5h
bE9yaWdpbi5zZW1hbnRpYywgSG9pc3RpbmdGYWlsZWQpKSB7CisgICAgICAgIGlmIChhZGRzQmxp
bmRTcGVjdWxhdGlvbiAmJiAhY2FuU3BlY3VsYXRlQmxpbmRseSkgewogICAgICAgICAgICAgaWYg
KHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAg
ICAiICAgIE5vdCBob2lzdGluZyAiLCBub2RlLCAiIGJlY2F1c2UgaXQgbWF5IGV4aXQgYW5kIHRo
ZSBwcmUtaGVhZGVyICgiLApAQCAtMjkxLDIyICsyODQsNjEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gRm9yIGFi
c3RyYWN0IGludGVycHJldGF0aW9uLCB0aGVzZSBhcmUgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdGhh
dCB0aGV5IGFwcGVhciBpbiB0aGlzCisgICAgICAgIC8vIHZlY3Rvci4KKyAgICAgICAgVmVjdG9y
PE5vZGUqLCAyPiBob2lzdGVkTm9kZXNSZXZlcnNlOworICAgICAgICBob2lzdGVkTm9kZXNSZXZl
cnNlLmFwcGVuZChub2RlKTsKKworICAgICAgICBOb2RlT3JpZ2luIHRlcm1pbmFsT3JpZ2luID0g
ZGF0YS5wcmVIZWFkZXItPnRlcm1pbmFsKCktPm9yaWdpbjsKKyAgICAgICAgCisgICAgICAgIGF1
dG8gaW5zZXJ0SG9pc3RlZE5vZGUgPSBbJl0gKE5vZGUqIG5vZGUpIHsKKyAgICAgICAgICAgIGRh
dGEucHJlSGVhZGVyLT5pbnNlcnRCZWZvcmVUZXJtaW5hbChub2RlKTsKKyAgICAgICAgICAgIG5v
ZGUtPm93bmVyID0gZGF0YS5wcmVIZWFkZXI7CisgICAgICAgICAgICBub2RlLT5vcmlnaW4gPSB0
ZXJtaW5hbE9yaWdpbi53aXRoU2VtYW50aWMobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAg
ICAgICAgIG5vZGUtPm9yaWdpbi53YXNIb2lzdGVkIHw9IGFkZHNCbGluZFNwZWN1bGF0aW9uOwor
ICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaWYgKCFzYWZlVG9FeGVjdXRlKG1fc3RhdGUs
IG1fZ3JhcGgsIG5vZGUpKSB7CisgICAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIHJlc2N1ZSB0
aGUgc2l0dWF0aW9uIGJ5IGluc2VydGluZyBibGluZCBzcGVjdWxhdGlvbnMuCisgICAgICAgICAg
ICBib29sIGlnbm9yZUVtcHR5Q2hpbGRyZW4gPSB0cnVlOworICAgICAgICAgICAgaWYgKGNhblNw
ZWN1bGF0ZUJsaW5kbHkKKyAgICAgICAgICAgICAgICAmJiBzYWZlVG9FeGVjdXRlKG1fc3RhdGUs
IG1fZ3JhcGgsIG5vZGUsIGlnbm9yZUVtcHR5Q2hpbGRyZW4pKSB7CisgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgUmVzY3VpbmcgaG9pc3RpbmcgYnkgaW5zZXJ0aW5nIGVtcHR5IGNo
ZWNrcy5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRv
VG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgWyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtX3N0
YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGNoZWNrID0gbV9ncmFwaC5hZGROb2RlKENoZWNrTm90RW1wdHks
IG9yaWdpbmFsT3JpZ2luLCBFZGdlKGVkZ2Uubm9kZSgpLCBVbnR5cGVkVXNlKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRIb2lzdGVkTm9kZShjaGVjayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBob2lzdGVkTm9kZXNSZXZlcnNlLmFwcGVuZChjaGVjayk7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0IHNh
ZmUgdG8gZXhlY3V0ZS5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAg
IGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICIg
ICAgSG9pc3RpbmcgIiwgbm9kZSwgIiBmcm9tICIsICpmcm9tQmxvY2ssICIgdG8gIiwgKmRhdGEu
cHJlSGVhZGVyLAogICAgICAgICAgICAgICAgICJcbiIpOwogICAgICAgICB9CiAKLSAgICAgICAg
ZGF0YS5wcmVIZWFkZXItPmluc2VydEJlZm9yZVRlcm1pbmFsKG5vZGUpOwotICAgICAgICBub2Rl
LT5vd25lciA9IGRhdGEucHJlSGVhZGVyOwotICAgICAgICBOb2RlT3JpZ2luIHRlcm1pbmFsT3Jp
Z2luID0gZGF0YS5wcmVIZWFkZXItPnRlcm1pbmFsKCktPm9yaWdpbjsKLSAgICAgICAgbm9kZS0+
b3JpZ2luID0gdGVybWluYWxPcmlnaW4ud2l0aFNlbWFudGljKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7Ci0gICAgICAgIG5vZGUtPm9yaWdpbi53YXNIb2lzdGVkIHw9IGFkZHNCbGluZFNwZWN1bGF0
aW9uOworICAgICAgICBpbnNlcnRIb2lzdGVkTm9kZShub2RlKTsKICAgICAgICAgCiAgICAgICAg
IC8vIFdlIGNhbiB0cnVzdCB3aGF0IEFJIHByb3ZlcyBhYm91dCBlZGdlIHByb29mIHN0YXR1c2Vz
IHdoZW4gaG9pc3RpbmcgdG8gdGhlIHByZWhlYWRlci4KICAgICAgICAgbV9zdGF0ZS50cnVzdEVk
Z2VQcm9vZnMoKTsKICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oZGF0YS5wcmVIZWFkZXIp
OwotICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUobm9kZSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGhvaXN0ZWROb2Rlc1JldmVyc2Uuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAg
bV9pbnRlcnByZXRlci5leGVjdXRlKGhvaXN0ZWROb2Rlc1JldmVyc2VbaV0pOwogICAgICAgICAv
LyBIb3dldmVyLCB3aGVuIHdhbGtpbmcgdmFyaW91cyBpbm5lciBsb29wcyBiZWxvdywgdGhlIHBy
b29mIHN0YXR1cyBvZgogICAgICAgICAvLyBhbiBlZGdlIG1heSBiZSB0cml2aWFsbHkgdHJ1ZSwg
ZXZlbiBpZiBpdCdzIG5vdCB0cnVlIGluIHRoZSBwcmVoZWFkZXIKICAgICAgICAgLy8gd2UgaG9p
c3QgdG8uIFdlIGRvbid0IGFsbG93IHRoZSBiZWxvdyBub2RlIGV4ZWN1dGlvbnMgdG8gY2hhbmdl
IHRoZQpAQCAtMzQwLDcgKzM3Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoc3ViUHJl
SGVhZGVyID09IGRhdGEucHJlSGVhZGVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oc3ViUHJlSGVhZGVyKTsKLSAgICAgICAgICAg
IG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShub2RlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGhvaXN0ZWROb2Rlc1JldmVyc2Uuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgIG1f
aW50ZXJwcmV0ZXIuZXhlY3V0ZShob2lzdGVkTm9kZXNSZXZlcnNlW2ldKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYg
Kzk3LDE1IEBAIHZvaWQgTm9kZTo6cmVtb3ZlKEdyYXBoJiBncmFwaCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBNYXRjaFN0cnVjdHVyZTogeworICAgICAgICBN
YXRjaFN0cnVjdHVyZURhdGEmIGRhdGEgPSBtYXRjaFN0cnVjdHVyZURhdGEoKTsKKyAgICAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBzZXQ7CisgICAgICAgIGZvciAoTWF0Y2hTdHJ1Y3R1cmVW
YXJpYW50JiB2YXJpYW50IDogZGF0YS52YXJpYW50cykKKyAgICAgICAgICAgIHNldC5hZGQodmFy
aWFudC5zdHJ1Y3R1cmUpOworICAgICAgICBjb252ZXJ0VG9DaGVja1N0cnVjdHVyZShncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQoc2V0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGlmIChmbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsMTUgQEAgc3RydWN0
IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OwogfTsKIAorc3RydWN0IE1hdGNoU3RydWN0dXJlVmFyaWFudCB7CisgICAgUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBzdHJ1Y3R1cmU7CisgICAgYm9vbCByZXN1bHQ7Cit9OworCitzdHJ1Y3QgTWF0
Y2hTdHJ1Y3R1cmVEYXRhIHsKKyAgICBWZWN0b3I8TWF0Y2hTdHJ1Y3R1cmVWYXJpYW50LCAyPiB2
YXJpYW50czsKK307CisKIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogICAgIHVuaW9uIHsK
ICAgICAgICAgc3RydWN0IHsKQEAgLTE4NTMsNiArMTg2MiwxNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAqbV9vcEluZm8uYXM8TXVsdGlQdXRCeU9mZnNldERhdGEqPigpOwogICAgIH0KICAg
ICAKKyAgICBib29sIGhhc01hdGNoU3RydWN0dXJlRGF0YSgpCisgICAgeworICAgICAgICByZXR1
cm4gb3AoKSA9PSBNYXRjaFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgTWF0Y2hTdHJ1Y3R1
cmVEYXRhJiBtYXRjaFN0cnVjdHVyZURhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc01h
dGNoU3RydWN0dXJlRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuICptX29wSW5mby5hczxNYXRjaFN0
cnVjdHVyZURhdGEqPigpOworICAgIH0KKyAgICAKICAgICBib29sIGhhc09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0Niw2ICszNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oT3ZlcnJpZGVzSGFzSW5zdGFuY2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9v
bGVhbikgXAogICAgIG1hY3JvKEluc3RhbmNlT2YsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVz
dWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKEluc3RhbmNlT2ZDdXN0b20sIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlUmVzdWx0Qm9vbGVhbikgXAorICAgIG1hY3JvKE1hdGNoU3RydWN0dXJlLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgbWFjcm8oSXND
ZWxsV2l0aFR5cGUsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNFbXB0eSwgTm9k
ZVJlc3VsdEJvb2xlYW4pIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDE0ICsxMzQs
MTQgQEAgcHJpdmF0ZToKIC8vIHNhZmVseSBleGVjdXRlIGJlZm9yZSB0aGF0IGNoZWNrLCBzbyBs
b25nIGFzIHRoYXQgY2hlY2sgY29udGludWVzIHRvIGd1YXJkIGFueQogLy8gdXNlci1vYnNlcnZh
YmxlIHRoaW5ncyBkb25lIHRvIHRoZSBsb2FkZWQgdmFsdWUuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBB
YnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKK2Jvb2wgc2FmZVRvRXhlY3V0ZShBYnN0
cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25v
cmVFbXB0eUNoaWxkcmVuID0gZmFsc2UpCiB7CiAgICAgU2FmZVRvRXhlY3V0ZUVkZ2U8QWJzdHJh
Y3RTdGF0ZVR5cGU+IHNhZmVUb0V4ZWN1dGVFZGdlKHN0YXRlKTsKICAgICBERkdfTk9ERV9ET19U
T19DSElMRFJFTihncmFwaCwgbm9kZSwgc2FmZVRvRXhlY3V0ZUVkZ2UpOwogICAgIGlmICghc2Fm
ZVRvRXhlY3V0ZUVkZ2UucmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChzYWZlVG9FeGVjdXRlRWRnZS5tYXlTZWVFbXB0eUNoaWxkKCkpIHsKKyAgICBpZiAoIWlnbm9y
ZUVtcHR5Q2hpbGRyZW4gJiYgc2FmZVRvRXhlY3V0ZUVkZ2UubWF5U2VlRW1wdHlDaGlsZCgpKSB7
CiAgICAgICAgIC8vIFdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSBpZiB0aGUgZW1wdHkgdmFsdWUg
Zmxvd3MgaW50byBhIG5vZGUsCiAgICAgICAgIC8vIGl0IG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGhh
bmRsZSBpdCAoZS5nLCBjcmFzaCkuIEluIGdlbmVyYWwsIHRoZSBieXRlY29kZSBnZW5lcmF0b3IK
ICAgICAgICAgLy8gZW1pdHMgY29kZSBpbiBzdWNoIGEgd2F5IHRoYXQgbW9zdCBub2RlIHR5cGVz
IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIGVtcHR5IHZhbHVlCkBAIC00NTIsNiArNDUy
LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2Ug
QXRvbWljc1hvcjoKICAgICBjYXNlIEF0b21pY3NJc0xvY2tGcmVlOgogICAgIGNhc2UgSW5pdGlh
bGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CisgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEFycmF5U2xpY2U6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNjAsNiArMzM2MCwxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCisgICAgY2FzZSBNYXRjaFN0cnVjdHVyZTogeworICAgICAgICBjb21waWxl
TWF0Y2hTdHJ1Y3R1cmUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBHZXRHZXR0ZXI6IHsKICAgICAgICAgY29tcGlsZUdldEdldHRlcihub2RlKTsKICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
MjcsNiArMzYyNywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBNYXRjaFN0cnVjdHVy
ZTogeworICAgICAgICBjb21waWxlTWF0Y2hTdHJ1Y3R1cmUobm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBHZXRHZXR0ZXI6IHsKICAgICAgICAgY29tcGls
ZUdldEdldHRlcihub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjMxOTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExODMzLDYgKzExODMzLDMzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRCeU9mZnNldCgKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU1hdGNoU3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgdGVt
cEdQUik7CisgICAgCisgICAgYXV0byYgdmFyaWFudHMgPSBub2RlLT5tYXRjaFN0cnVjdHVyZURh
dGEoKS52YXJpYW50czsKKyAgICBWZWN0b3I8aW50NjRfdD4gY2FzZXM7CisgICAgZm9yIChNYXRj
aFN0cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQgOiB2YXJpYW50cykKKyAgICAgICAgY2FzZXMuYXBw
ZW5kKGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2YXJpYW50LnN0cnVjdHVyZS0+aWQoKSkpOworICAg
IAorICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2godGVtcEdQUiwgY2FzZXMsIEJpbmFyeVN3
aXRjaDo6SW50MzIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAgIHdoaWxl
IChiaW5hcnlTd2l0Y2guYWR2YW5jZShtX2ppdCkpIHsKKyAgICAgICAgbV9qaXQuYm94Qm9vbGVh
blBheWxvYWQodmFyaWFudHNbYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpXS5yZXN1bHQsIHRlbXBH
UFIpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgIH0KKyAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBub2RlLCBiaW5hcnlTd2l0Y2gu
ZmFsbFRocm91Z2goKSk7CisgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAg
Ymxlc3NlZEJvb2xlYW5SZXN1bHQodGVtcEdQUiwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKiBub2RlKQogewogICAgIEpT
VmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjMxOTYx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzc1LDYgKzEzNzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxl
R2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0QnlPZmZzZXQoTm9k
ZSopOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5T2Zmc2V0KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVNYXRjaFN0cnVjdHVyZShOb2RlKik7CiAgICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNlIGl0
IG1lYW5zIHRoYXQgd2UgdGVybWluYXRlZCBzcGVjdWxhdGl2ZSBleGVjdXRpb24uCiAgICAgYm9v
bCBnZXRJbnRUeXBlZEFycmF5U3RvcmVPcGVyYW5kKAogICAgICAgICBHUFJUZW1wb3JhcnkmIHZh
bHVlLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNiArMzQ5LDcgQEAgaW5saW5l
IENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgUHV0QnlWYWxBbGlh
czoKICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgIGNhc2UgUHV0QnlWYWxXaXRoVGhpczoK
KyAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAg
ICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMSw2ICs5MTEsOSBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICBj
b21waWxlTXVsdGlQdXRCeU9mZnNldCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTWF0Y2hTdHJ1Y3R1cmU6CisgICAgICAgICAgICBjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAg
Y2FzZSBHZXRHbG9iYWxMZXhpY2FsVmFyaWFibGU6CiAgICAgICAgICAgICBjb21waWxlR2V0R2xv
YmFsVmFyaWFibGUoKTsKQEAgLTY1OTIsNiArNjU5NSw0NyBAQCBwcml2YXRlOgogICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICB9CiAgICAgCisgICAg
dm9pZCBjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2Ug
PSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTWF0Y2hTdHJ1
Y3R1cmVEYXRhJiBkYXRhID0gbV9ub2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKTsKKyAgICAgICAg
CisgICAgICAgIExCYXNpY0Jsb2NrIHRydWVCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGZhbHNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBleGl0QmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAKKyAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUodHJ1ZUJs
b2NrKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNlczsKKyAg
ICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBiYXNlU2V0OworICAgICAgICBmb3IgKE1hdGNo
U3RydWN0dXJlVmFyaWFudCYgdmFyaWFudCA6IGRhdGEudmFyaWFudHMpIHsKKyAgICAgICAgICAg
IGJhc2VTZXQuYWRkKHZhcmlhbnQuc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNhc2VzLmFwcGVu
ZChTd2l0Y2hDYXNlKAorICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh2YXJpYW50LnN0
cnVjdHVyZSksCisgICAgICAgICAgICAgICAgdmFyaWFudC5yZXN1bHQgPyB0cnVlQmxvY2sgOiBm
YWxzZUJsb2NrLCBXZWlnaHQoMSkpKTsKKyAgICAgICAgfQorICAgICAgICBib29sIHN0cnVjdHVy
ZXNDaGVja2VkID0gbV9pbnRlcnByZXRlci5mb3JOb2RlKG1fbm9kZS0+Y2hpbGQxKCkpLm1fc3Ry
dWN0dXJlLmlzU3Vic2V0T2YoYmFzZVNldCk7CisgICAgICAgIGVtaXRTd2l0Y2hGb3JNdWx0aUJ5
T2Zmc2V0KGJhc2UsIHN0cnVjdHVyZXNDaGVja2VkLCBjYXNlcywgZXhpdEJsb2NrKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHRydWVCbG9jaywgZmFsc2VCbG9jayk7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHRydWVSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVh
blRydWUpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAg
ICAgICBtX291dC5hcHBlbmRUbyhmYWxzZUJsb2NrLCBleGl0QmxvY2spOworICAgICAgICBWYWx1
ZUZyb21CbG9jayBmYWxzZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2Up
OworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhleGl0QmxvY2ssIGNvbnRpbnVhdGlvbik7CisgICAgICAgIGlmICghc3Ry
dWN0dXJlc0NoZWNrZWQpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUo
KSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBtX291dC51bnJlYWNoYWJs
ZSgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCB0cnVlUmVzdWx0LCBm
YWxzZVJlc3VsdCkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRHbG9iYWxWYXJp
YWJsZSgpCiAgICAgewogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNv
bHV0ZShtX25vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSkpOwpJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMTk2
MSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTgtMDUtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBERkcgc2hvdWxkIGlubGluZSBJbnN0YW5jZU9mIElDcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Njk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJIGZvdW5kIG15c2VsZiBuZWVkaW5n
IGEgd2F5IHRvIHJlcHJlc2VudCBib3R0b20vZmFsc2UvdHJ1ZS90b3AsIHNvIEkgY3JlYXRlZCBp
dC4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHd0Zi9Cb29sZWFuTGF0dGljZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6bHViQm9vbGVhbkxh
dHRpY2UpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiB3dGYvQ01h
a2VMaXN0cy50eHQ6CisKIDIwMTgtMDUtMTcgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxl
LmNvbT4KIAogICAgICAgICBDb252ZXJ0IENlcnRpZmljYXRlSW5mbyBpbnRvIENyZWRlbnRpYWwg
aW4gVUkgUHJvY2VzcyBpbnN0ZWFkIG9mIE5ldHdvcmtpbmcgUHJvY2VzcwpJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzE5NjEpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzksNiArMjM5LDcgQEAKIAkJMEZCMTRFMTgxODBGQTIxODAwOUI2QjREIC8qIEJhZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZCMTRFMUExODEwRTFEQTAwOUI2QjREIC8qIEJhZ1RvSGFzaE1hcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCYWdUb0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtVHJhY2luZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkIzOTlCODIwQUY1QTU4MDAxN0UyMTMgLyogQm9vbGVhbkxhdHRpY2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm9vbGVhbkxhdHRpY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDY3ODIxRkRFMjgyQjAwM0ZDQjA5IC8qIENv
bmN1cnJlbnRCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3Vy
cmVudEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0Njc4MzFGREUy
ODJDMDAzRkNCMDkgLyogQ29uY3VycmVudFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb25jdXJyZW50VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQzQ0ODgyMTZGRTlGRTEwMDg0NEJFOSAvKiBQcm9jZXNzSUQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvY2Vzc0lELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04MTMsNiArODE0LDcgQEAKIAkJCQkxQTk0NEY0NjFDM0Q4ODE0MDA1QkQyOEMgLyog
QmxvY2tQdHIuaCAqLywKIAkJCQlBOEE0NzI2NDE1MUE4MjVBMDA0MTIzRkYgLyogQmxvY2tTdGFj
ay5oICovLAogCQkJCUE4QTQ3MjY1MTUxQTgyNUEwMDQxMjNGRiAvKiBCbG9vbUZpbHRlci5oICov
LAorCQkJCTBGQjM5OUI4MjBBRjVBNTgwMDE3RTIxMyAvKiBCb29sZWFuTGF0dGljZS5oICovLAog
CQkJCTBGOTMyNzRBMUMxN0Y0QjcwMENGNjU2NCAvKiBCb3guaCAqLywKIAkJCQk3QzNGNzIzOTFE
Nzg4MTE5MDA2NzRFMjYgLyogQnJpZ2FuZC5oICovLAogCQkJCTBGNDU3MDQ0MUJFODM0NDEwMDYy
QTYyOSAvKiBCdWJibGVTb3J0LmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Cb29sZWFuTGF0
dGljZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Jvb2xlYW5MYXR0aWNlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQm9vbGVhbkxhdHRpY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCitlbnVtIGNsYXNzIEJvb2xlYW5MYXR0aWNlIDogdWludDhf
dCB7CisgICAgQm90dG9tID0gMCwKKyAgICBGYWxzZSA9IDEsCisgICAgVHJ1ZSA9IDIsCisgICAg
VG9wID0gMworfTsKKworaW5saW5lIEJvb2xlYW5MYXR0aWNlIGx1YkJvb2xlYW5MYXR0aWNlKEJv
b2xlYW5MYXR0aWNlIGEsIEJvb2xlYW5MYXR0aWNlIGIpCit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEJvb2xlYW5MYXR0aWNlPihzdGF0aWNfY2FzdDx1aW50OF90PihhKSB8IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oYikpOworfQorCitpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEJvb2xlYW5MYXR0aWNlIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFsdWUpIHsK
KyAgICBjYXNlIEJvb2xlYW5MYXR0aWNlOjpCb3R0b206CisgICAgICAgIG91dC5wcmludCgiQm90
dG9tIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW5MYXR0aWNlOjpGYWxzZToK
KyAgICAgICAgb3V0LnByaW50KCJGYWxzZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBC
b29sZWFuTGF0dGljZTo6VHJ1ZToKKyAgICAgICAgb3V0LnByaW50KCJUcnVlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW5MYXR0aWNlOjpUb3A6CisgICAgICAgIG91dC5wcmlu
dCgiVG9wIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qm9vbGVh
bkxhdHRpY2U7Cit1c2luZyBXVEY6Omx1YkJvb2xlYW5MYXR0aWNlOworCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0LDYgKzE0LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVB
REVSUwogICAgIEJsb2NrUHRyLmgKICAgICBCbG9ja1N0YWNrLmgKICAgICBCbG9vbUZpbHRlci5o
CisgICAgQm9vbGVhbkxhdHRpY2UuaAogICAgIEJveC5oCiAgICAgQnJpZ2FuZC5oCiAgICAgQnVi
YmxlU29ydC5oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340756</attachid>
            <date>2018-05-18 16:23:53 -0700</date>
            <delta_ts>2018-05-18 16:41:24 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>64936</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxOTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBA
QAorMjAxOC0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaW5saW5lIEluc3RhbmNlT2YgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2OTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdGVhY2hlcyB0aGUgREZHIGhv
dyB0byBpbmxpbmUgSW5zdGFuY2VPZiBJQ3MgaW50byBhIE1hdGNoU3RydWN0dXJlIG5vZGUuIFRo
aXMgY2FuIHRoZW4KKyAgICAgICAgYmUgZm9sZGVkIHRvIGEgQ2hlY2tTdHJ1Y3R1cmUgKyBKU0Nv
bnN0YW50LgorICAgICAgICAKKyAgICAgICAgSW4gdGhlIHByb2Nlc3Mgb2YgdGVzdGluZyB0aGlz
LCBJIGZvdW5kIGEgYnVnIHdoZXJlIExJQ00gd2FzIG5vdCBob2lzdGluZyB0aGluZ3MgdGhhdAor
ICAgICAgICBkZXBlbmRlZCBvbiBFeHRyYU9TUkVudHJ5TG9jYWwgYmVjYXVzZSB0aGF0IG1pZ2h0
IHJldHVybiBTcGVjRW1wdHkuIEkgZml4ZWQgdGhhdCBieSB0ZWFjaGluZworICAgICAgICBMSUNN
IGhvdyB0byBtYXRlcmlhbGl6ZSBDaGVja05vdEVtcHR5IG9uIGRlbWFuZCB3aGVuZXZlciAhSG9p
c3RpbmdGYWlsZWQuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgNS03JSBzcGVlZC11cCBv
biBib3llci4KKyAgICAgICAgCisgICAgICAgIDIuNi0yLjl4IHNwZWVkLXVwIG9uIHRoZSBpbnN0
YW5jZW9mLWFsd2F5cy1oaXQtb25lLCBpbnN0YW5jZW9mLWFsd2F5cy1oaXQtdHdvLCBhbmQKKyAg
ICAgICAgaW5zdGFuY2VvZi1zb21ldGltZXMtaGl0IG1pY3JvYmVuY2htYXJrcy4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAg
ICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpH
ZXRCeUlkU3RhdHVzOjpmaWx0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
aDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6b3BlcmF0b3IgYm9vbCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6Om9wZXJhdG9yISBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJ
ZFZhcmlhbnQ6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFy
aWFudDo6b3BlcmF0b3IhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JQ1N0
YXR1c1V0aWxzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjphcHBlbmRJQ1N0YXR1c1ZhcmlhbnQp
OgorICAgICAgICAoSlNDOjpmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKToKKyAgICAgICAgKiBieXRl
Y29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Okluc3RhbmNl
T2ZTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVz
Ojpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6Y29tbW9uUHJvdG90
eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6ZmlsdGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpJbnN0YW5jZU9mU3RhdHVzOjpJbnN0YW5jZU9mU3RhdHVzKToKKyAgICAgICAgKEpTQzo6SW5z
dGFuY2VPZlN0YXR1czo6c3RhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3Rh
dHVzOjppc1NldCBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6Om9wZXJh
dG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjppc1NpbXBs
ZSBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6OnRha2VzU2xvd1BhdGgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjpudW1WYXJpYW50cyBjb25z
dCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6OnZhcmlhbnRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6YXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJ
bnN0YW5jZU9mU3RhdHVzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9J
bnN0YW5jZU9mVmFyaWFudC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFy
aWFudDo6SW5zdGFuY2VPZlZhcmlhbnQpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6ZHVt
cCBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZWYXJpYW50OjpkdW1wSW5Db250ZXh0
IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6Okluc3RhbmNlT2ZWYXJpYW50KToKKyAg
ICAgICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAg
ICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6c3RydWN0dXJlU2V0IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6OnN0cnVjdHVyZVNldCk6CisgICAgICAgIChKU0M6
Okluc3RhbmNlT2ZWYXJpYW50Ojpjb25kaXRpb25TZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJ
bnN0YW5jZU9mVmFyaWFudDo6cHJvdG90eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFu
Y2VPZlZhcmlhbnQ6OmlzSGl0IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmNvbnNpZGVyQ2FjaGluZyk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xk
aW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjphdHRlbXB0SG9pc3QpOgorICAgICAgICAq
IGRmZy9ERkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpyZW1vdmUpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTWF0Y2hT
dHJ1Y3R1cmVEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjptYXRjaFN0cnVjdHVyZURh
dGEpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdTYWZl
VG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU1hdGNoU3RydWN0dXJlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9C
My5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGNoU3Ry
dWN0dXJlKToKKwogMjAxOC0wNS0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIG1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDggQEAgYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAogYnl0ZWNvZGUv
SW5saW5lQ2FsbEZyYW1lU2V0LmNwcAogYnl0ZWNvZGUvSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuY3Bw
CitieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAorYnl0ZWNvZGUvSW5zdGFuY2VPZlZhcmlh
bnQuY3BwCiBieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcAogYnl0ZWNvZGUv
SnVtcFRhYmxlLmNwcAogYnl0ZWNvZGUvTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDkgQEAK
IAkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2NUYxOTZCOEY5RTAwOTEw
NTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyB9OwogCQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUg
LyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3Qu
aCAqLzsgfTsKIAkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tP
cmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
Mzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovOyB9Owor
CQkwRkIzOTlCRTIwQUY2QjNEMDAxN0UyMTMgLyogSUNTdGF0dXNVdGlscy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzk5QkQyMEFGNkIzODAwMTdF
MjEzIC8qIElDU3RhdHVzVXRpbHMuaCAqLzsgfTsKKwkJMEZCMzk5QkYyMEFGNkIzRjAwMTdFMjEz
IC8qIEluc3RhbmNlT2ZTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjM5OUJCMjBBRjZCMkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mU3RhdHVz
LmggKi87IH07CisJCTBGQjM5OUMwMjBBRjZCNDMwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzk5
QjkyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmggKi87IH07CiAJCTBGQjQ2
NzdGMUZEREE2RTkwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0
b21JbmRpY2VzLmggKi87IH07CiAJCTBGQjQ2NzgwMUZEREE2RjEwMDNGQ0IwOSAvKiBJc29DZWxs
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0
Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQ2NzgxMUZEREE2RjcwMDNGQ0IwOSAv
KiBJc29DZWxsU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDY3N0IxRkREQTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggKi87IH07CkBAIC0yNjA5LDYgKzI2MTIsMTEgQEAKIAkJMEZCMzg3OEMxQkZCQzQ0RDAwRTNB
QjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ck9wdGltaXplQmxvY2tPcmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyT3B0aW1pemVCbG9ja09yZGVyLmg7IHBhdGgg
PSBiMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENvbXBpbGUuY3BwOyBwYXRoID0gZnRs
L0ZUTENvbXBpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIzOTlCOTIw
QUY2QjJBMDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zdGFuY2VPZlZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCMzk5QkEyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZTdGF0dXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zdGFuY2VPZlN0YXR1cy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjM5OUJCMjBBRjZCMkEwMDE3RTIx
MyAvKiBJbnN0YW5jZU9mU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3RhbmNlT2ZTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMzk5
QkMyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3RhbmNlT2ZWYXJpYW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMzk5QkQyMEFGNkIzODAwMTdFMjEzIC8qIElDU3RhdHVz
VXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNTdGF0dXNVdGlscy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkg
LyogQXJyYXlDb252ZW50aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBcnJheUNvbnZlbnRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkI0Njc3QjFGRERBNkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXNvQ2VsbFNldElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2MjQsMTIgKzc2MzIsMTcgQEAK
IAkJCQkwRjAzMzJDMjE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuaCAqLywKIAkJ
CQkxNEFEOTEwODFEQ0E5Mjk0MDAxNEY5RkUgLyogR2xvYmFsQ29kZUJsb2NrLmggKi8sCiAJCQkJ
MEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggKi8sCisJCQkJMEZCMzk5
QkQyMEFGNkIzODAwMTdFMjEzIC8qIElDU3RhdHVzVXRpbHMuaCAqLywKIAkJCQk3OTA1QkI2NjFE
MTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLywKIAkJCQk3OTA1QkI2NzFEMTIw
NTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggKi8sCiAJCQkJMTQ4QTdCRUQxQjgyOTc1QTAw
MkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5jcHAgKi8sCiAJCQkJMTQ4QTdCRUUxQjgyOTc1QTAw
MkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5oICovLAogCQkJCTBGMjRFNTUzMTdGMEI3MUMwMEFC
QjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwICovLAogCQkJCTBGMjRFNTU0MTdGMEI3MUMw
MEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLywKKwkJCQkwRkIzOTlCQTIwQUY2QjJB
MDAxN0UyMTMgLyogSW5zdGFuY2VPZlN0YXR1cy5jcHAgKi8sCisJCQkJMEZCMzk5QkIyMEFGNkIy
QTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZTdGF0dXMuaCAqLywKKwkJCQkwRkIzOTlCQzIwQUY2QjJB
MDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQuY3BwICovLAorCQkJCTBGQjM5OUI5MjBBRjZC
MkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFudC5oICovLAogCQkJCTk2OUEwNzkzMEVEMUQz
QUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovLAogCQkJCTUzRjZCRjZDMUMzRjA2MEEwMEY0
MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLywKIAkJCQlCQ0ZE
OEM5MDBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCAqLywKQEAgLTkwNTUsNiArOTA2
OCw3IEBACiAJCQkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxG
cmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FF
NjEzIC8qIEpTSm9iLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjM5OUMw
MjBBRjZCNDMwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyQTRCQjdGMzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTc5LDYgKzkxOTMsNyBAQAogCQkJCTBGNDY4MENE
MTRCQkIxN0QwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5ODFFRDgyMzI4MjM0RDkxQkFFQ0NBREUgLyogTWFjaGluZUNvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0QjcyM0I4MTJEN0RBNkYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJr
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjM5OUJGMjBBRjZCM0YwMDE3RTIxMyAvKiBJbnN0
YW5jZU9mU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkMzNkVFQTBFRTEyODlEMDBCM0RG
NTkgLyogTWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM2MTAxNTZC
REUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFB
MDA5QzAxODMxQTIyRDAwQ0Y4NzExIC8qIE1hY3JvQXNzZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTQzNyw2ICs5NDUyLDcgQEAKIAkJCQk3MDVCNDFBRTFBNkU1MDFFMDA3MTY3NTcg
LyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI3MUJEQTA4
RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwNUI0MUIwMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmplY3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGQjM5OUJFMjBBRjZCM0QwMDE3RTIxMyAvKiBJQ1N0YXR1c1V0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyODFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9s
UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0
NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIzMTk2
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00NywyMiArNDgsNyBAQCBjbGFzcyBHZXR0ZXJTZXR0
ZXI7CiAKIGJvb2wgR2V0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFy
aWFudCYgdmFyaWFudCkKIHsKLSAgICAvLyBBdHRlbXB0IHRvIG1lcmdlIHRoaXMgdmFyaWFudCB3
aXRoIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFyaWFudC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV92YXJpYW50c1tp
XS5hdHRlbXB0VG9NZXJnZSh2YXJpYW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gb3ZlcmxhcC4gV2Ugc2hvdWxk
IGhhdmUgcHJ1bmVkIG91dCBvcHBvcnR1bml0aWVzIGZvcgotICAgIC8vIG92ZXJsYXAgYnV0IGl0
J3MgcG9zc2libGUgdGhhdCBhbiBpbmxpbmUgY2FjaGUgZ290IGludG8gYSB3ZWlyZCBzdGF0ZS4g
V2UgYXJlCi0gICAgLy8gZGVmZW5zaXZlIGFuZCBiYWlsIGlmIHdlIGRldGVjdCBjcmF6eS4KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV92YXJpYW50c1tpXS5zdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyh2YXJpYW50LnN0
cnVjdHVyZVNldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0g
ICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKIH0KIAogI2lm
IEVOQUJMRShERkdfSklUKQpAQCAtNDMyLDE0ICs0MTgsNyBAQCB2b2lkIEdldEJ5SWRTdGF0dXM6
OmZpbHRlcihjb25zdCBTdHJ1Y3R1CiB7CiAgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQogICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklYTUU6IFdlIGNvdWxkIGFsc28gZmlsdGVyIHRo
ZSB2YXJpYW50cyB0aGVtc2VsdmVzLgotICAgIAotICAgIG1fdmFyaWFudHMucmVtb3ZlQWxsTWF0
Y2hpbmcoCi0gICAgICAgIFsmXSAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQpIC0+IGJvb2wgewot
ICAgICAgICAgICAgcmV0dXJuICF2YXJpYW50LnN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKHNldCk7
Ci0gICAgICAgIH0pOwotICAgIAorICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50
cywgc2V0KTsKICAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCiAgICAgICAgIG1fc3RhdGUg
PSBOb0luZm9ybWF0aW9uOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3
ICs5Myw3IEBAIHB1YmxpYzoKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBO
b0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNT
ZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1Nl
dCgpOyB9CiAgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2lt
cGxlOyB9CiAgICAgYm9vbCBpc0N1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gQ3Vz
dG9tOyB9CiAgICAgYm9vbCBpc01vZHVsZU5hbWVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gTW9kdWxlTmFtZXNwYWNlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgR2V0QnlJZFZhcmlhbnQmKTsKICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4gISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5cGUsIHR5cGVuYW1lIFZhcmlhbnRUeXBl
PgorYm9vbCBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQoVmFyaWFudFZlY3RvclR5cGUmIHZhcmlhbnRz
LCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkKK3sKKyAgICAvLyBBdHRlbXB0IHRvIG1lcmdl
IHRoaXMgdmFyaWFudCB3aXRoIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFyaWFudC4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KHZhcmlhbnRzW2ldLmF0dGVtcHRUb01lcmdlKHZhcmlhbnQpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBvdmVybGFw
LiBXZSBzaG91bGQgaGF2ZSBwcnVuZWQgb3V0IG9wcG9ydHVuaXRpZXMgZm9yCisgICAgLy8gb3Zl
cmxhcCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IGFuIGlubGluZSBjYWNoZSBnb3QgaW50byBhIHdl
aXJkIHN0YXRlLiBXZSBhcmUKKyAgICAvLyBkZWZlbnNpdmUgYW5kIGJhaWwgaWYgd2UgZGV0ZWN0
IGNyYXp5LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YXJpYW50cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAodmFyaWFudHNbaV0uc3RydWN0dXJlU2V0KCkub3ZlcmxhcHModmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIHZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5cGU+Cit2b2lkIGZpbHRlcklDU3Rh
dHVzVmFyaWFudHMoVmFyaWFudFZlY3RvclR5cGUmIHZhcmlhbnRzLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgY291bGQgYWxzbyBmaWx0ZXIgdGhlIHZhcmlh
bnRzIHRoZW1zZWx2ZXMuCisgICAgCisgICAgdmFyaWFudHMucmVtb3ZlQWxsTWF0Y2hpbmcoCisg
ICAgICAgIFsmXSAoYXV0byYgdmFyaWFudCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4g
IXZhcmlhbnQuc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMoc2V0KTsKKyAgICAgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zdGFuY2VPZlN0
YXR1cy5oIgorCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVy
ZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEluc3RhbmNlT2ZTdGF0dXM6
OmFwcGVuZFZhcmlhbnQoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIHZhcmlhbnQpCit7CisgICAg
YXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOworfQorCitJbnN0YW5j
ZU9mU3RhdHVzIEluc3RhbmNlT2ZTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0dWJJbmZvTWFwJiBpbmZvTWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQor
eworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAg
IAorICAgIEluc3RhbmNlT2ZTdGF0dXMgcmVzdWx0OworI2lmIEVOQUJMRShERkdfSklUKQorICAg
IHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIsIGluZm9NYXAuZ2V0KENvZGVPcmln
aW4oYnl0ZWNvZGVJbmRleCkpKTsKKworICAgIGlmICghcmVzdWx0LnRha2VzU2xvd1BhdGgoKSkg
eworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIodW5saW5rZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIC8vIFdlIGFsc28gY2hlY2sg
Zm9yIEJhZFR5cGUgaGVyZSBpbiBjYXNlIHRoaXMgaXMgInByaW1pdGl2ZSBpbnN0YW5jZW9mIEZv
byIuCisgICAgICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBE
Rkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUpKQorICAgICAgICAg
ICAgfHwgdW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVu
dEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50Q2FjaGUpKQorICAgICAgICAgICAg
fHwgdW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4
aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZFR5cGUpKSkKKyAgICAgICAgICAgIHJldHVybiBUYWtl
c1Nsb3dQYXRoOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluZm9NYXApOworICAg
IFVOVVNFRF9QQVJBTShjb2RlT3JpZ2luKTsKKyNlbmRpZgorICAgIAorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0luc3RhbmNlT2ZTdGF0dXMgSW5zdGFuY2VP
ZlN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKKyAgICBpZiAoIXN0dWJJbmZvIHx8ICFzdHVi
SW5mby0+ZXZlckNvbnNpZGVyZWQpCisgICAgICAgIHJldHVybiBOb0luZm9ybWF0aW9uOworICAg
IAorICAgIC8vIEZJWE1FOiBXZSB3b3VsZG4ndCBoYXZlIHRvIGJhaWwgZm9yIG5vbkNlbGwgaWYg
d2UgdGF1Z2h0IE1hdGNoU3RydWN0dXJlIGhvdyB0byBoYW5kbGUgbm9uCisgICAgLy8gY2VsbHMu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc4NAor
ICAgIGlmIChzdHViSW5mby0+dG9va1Nsb3dQYXRoIHx8IHN0dWJJbmZvLT5zYXdOb25DZWxsKQor
ICAgICAgICByZXR1cm4gVGFrZXNTbG93UGF0aDsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8tPmNh
Y2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQYXRo
OyAvLyBUaGlzIGlzIGNvbnNlcnZhdGl2ZS4gSXQgY291bGQgYmUgdGhhdCB3ZSBoYXZlIG5vIGlu
Zm9ybWF0aW9uLgorICAgIAorICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8t
PnUuc3R1YjsKKyAgICBJbnN0YW5jZU9mU3RhdHVzIHJlc3VsdDsKKyAgICBmb3IgKHVuc2lnbmVk
IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsK
KyAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsK
KyAgICAgICAgCisgICAgICAgIGlmIChhY2Nlc3MudHlwZSgpID09IEFjY2Vzc0Nhc2U6Okluc3Rh
bmNlT2ZHZW5lcmljKQorICAgICAgICAgICAgcmV0dXJuIFRha2VzU2xvd1BhdGg7CisgICAgICAg
IAorICAgICAgICBpZiAoIWFjY2Vzcy5jb25kaXRpb25TZXQoKS5zdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQYXRoOworICAgICAgICAKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZFZhcmlhbnQoSW5zdGFuY2VPZlZhcmlhbnQoCisgICAgICAgICAg
ICBhY2Nlc3Muc3RydWN0dXJlKCksCisgICAgICAgICAgICBhY2Nlc3MuY29uZGl0aW9uU2V0KCks
CisgICAgICAgICAgICBhY2Nlc3MuYXM8SW5zdGFuY2VPZkFjY2Vzc0Nhc2U+KCkucHJvdG90eXBl
KCksCisgICAgICAgICAgICBhY2Nlc3MudHlwZSgpID09IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZI
aXQpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworSlNPYmplY3QqIEluc3RhbmNlT2ZTdGF0dXM6OmNvbW1vblByb3RvdHlw
ZSgpIGNvbnN0Cit7CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IG51bGxwdHI7CisgICAgZm9y
IChjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKKyAgICAg
ICAgaWYgKCFwcm90b3R5cGUpIHsKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IHZhcmlhbnQucHJv
dG90eXBlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cHJvdG90eXBlICE9IHZhcmlhbnQucHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwordm9pZCBJbnN0YW5jZU9m
U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQpCit7CisgICAg
aWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm47CisgICAgZmlsdGVySUNTdGF0
dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzdHJ1Y3R1cmVTZXQpOworICAgIGlmIChtX3ZhcmlhbnRz
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dGFuY2VPZlN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0YW5jZU9mU3RhdHVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkNvbmN1
cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJJbnN0YW5jZU9mVmFyaWFudC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQWNjZXNzQ2FzZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJl
U3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKKworY2xh
c3MgSW5zdGFuY2VPZlN0YXR1cyB7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAg
IC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9J
bmZvcm1hdGlvbiwKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGluIGEgc2ltcGxl
IHdheS4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAKKyAgICAgICAgLy8gSXQncyBrbm93biB0
byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgVGFrZXNTbG93UGF0aAorICAgIH07Cisg
ICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0
aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cyhTdGF0ZSBzdGF0
ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRl
ID09IE5vSW5mb3JtYXRpb24gfHwgc3RhdGUgPT0gVGFrZXNTbG93UGF0aCk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBJbnN0YW5jZU9mU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgU3R1
YkluZm9NYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyNlbmRpZgorICAg
IAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIAorICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0K
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQor
ICAgIAorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBs
ZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0g
VGFrZXNTbG93UGF0aDsgfQorICAgIAorICAgIEpTT2JqZWN0KiBjb21tb25Qcm90b3R5cGUoKSBj
b25zdDsKKyAgICAKKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3Zh
cmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxJbnN0YW5jZU9mVmFyaWFudCwgMj4m
IHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IEluc3Rh
bmNlT2ZWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNb
aW5kZXhdOyB9CisgICAgY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIHZvaWQgZmlsdGVyKGNv
bnN0IFN0cnVjdHVyZVNldCYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIHZvaWQgYXBwZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9m
VmFyaWFudCYpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9yPEluc3RhbmNl
T2ZWYXJpYW50LCAyPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZW
YXJpYW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdGFuY2VPZlZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3RhbmNlT2ZWYXJpYW50LmgiCisKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitJbnN0YW5jZU9mVmFyaWFudDo6SW5zdGFuY2VPZlZhcmlhbnQoCisgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSwgYm9vbCBpc0hpdCkKKyAg
ICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNv
bmRpdGlvblNldCkKKyAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKKyAgICAsIG1faXNIaXQo
aXNIaXQpCit7Cit9CisKK2Jvb2wgSW5zdGFuY2VPZlZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNv
bnN0IEluc3RhbmNlT2ZWYXJpYW50JiBvdGhlcikKK3sKKyAgICBpZiAobV9wcm90b3R5cGUgIT0g
b3RoZXIubV9wcm90b3R5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAo
bV9pc0hpdCAhPSBvdGhlci5tX2lzSGl0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25k
aXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgaWYgKCFtZXJn
ZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9j
b25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgCisgICAgbV9zdHJ1Y3R1cmVT
ZXQubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOworICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEluc3RhbmNlT2ZWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCit2b2lkIEluc3RhbmNl
T2ZWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8
ZW1wdHk+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KAor
ICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsIGlu
Q29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICIsIgorICAgICAgICAiIHByb3RvdHlw
ZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fcHJvdG90eXBlKSwgY29udGV4dCksICIsIgorICAg
ICAgICAiIGlzSGl0ID0gIiwgbV9pc0hpdCwgIj4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5j
ZU9mVmFyaWFudC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0YW5jZU9mVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSW5zdGFuY2VPZlN0
YXR1czsKKworY2xhc3MgSW5zdGFuY2VPZlZhcmlhbnQgeworcHVibGljOgorICAgIEluc3RhbmNl
T2ZWYXJpYW50KCkgeyB9CisgICAgSW5zdGFuY2VPZlZhcmlhbnQoY29uc3QgU3RydWN0dXJlU2V0
JiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBKU09iamVjdCogcHJvdG90eXBl
LCBib29sIGlzSGl0KTsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KKyAgICAKKyAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9
CisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNl
dDsgfQorICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpTT2Jq
ZWN0KiBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgIAorICAg
IGJvb2wgaXNIaXQoKSBjb25zdCB7IHJldHVybiBtX2lzSGl0OyB9CisgICAgCisgICAgYm9vbCBh
dHRlbXB0VG9NZXJnZShjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgb3RoZXIpOworICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBJbnN0YW5jZU9mU3RhdHVzOworICAgIAorICAgIFN0cnVjdHVyZVNldCBtX3N0
cnVjdHVyZVNldDsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNl
dDsKKyAgICBKU09iamVjdCogbV9wcm90b3R5cGUgPSBudWxscHRyOworICAgIGJvb2wgbV9pc0hp
dCB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShy
ZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIFN0cnVjdHVy
ZVN0dWJJbmZvOjpTdHJ1Y3R1cmVTdHViSW5mbyhBY2MKICAgICAsIHRvb2tTbG93UGF0aChmYWxz
ZSkKICAgICAsIGV2ZXJDb25zaWRlcmVkKGZhbHNlKQogICAgICwgcHJvdG90eXBlSXNLbm93bk9i
amVjdChmYWxzZSkKKyAgICAsIHNhd05vbkNlbGwoZmFsc2UpCiB7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShy
ZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtOTAsOCArOTAsMTAgQEAgcHVibGljOgog
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjb25zaWRlckNhY2hpbmcoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgLy8gV2UgbmV2ZXIgY2Fj
aGUgbm9uLWNlbGxzLgotICAgICAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgaWYgKCFzdHJ1
Y3R1cmUpIHsKKyAgICAgICAgICAgIHNhd05vbkNlbGwgPSB0cnVlOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIG1ldGhvZCBp
cyBjYWxsZWQgZnJvbSB0aGUgT3B0aW1pemUgdmFyaWFudHMgb2YgSUMgc2xvdyBwYXRocy4gVGhl
IGZpcnN0IHBhcnQgb2YgdGhpcwogICAgICAgICAvLyBtZXRob2QgdHJpZXMgdG8gZGV0ZXJtaW5l
IGlmIHRoZSBPcHRpbWl6ZSB2YXJpYW50IHNob3VsZCByZWFsbHkgYmVoYXZlIGxpa2UgdGhlCkBA
IC0yMTksNiArMjIxLDcgQEAgcHVibGljOgogICAgIGJvb2wgdG9va1Nsb3dQYXRoIDogMTsKICAg
ICBib29sIGV2ZXJDb25zaWRlcmVkIDogMTsKICAgICBib29sIHByb3RvdHlwZUlzS25vd25PYmpl
Y3QgOiAxOyAvLyBPbmx5IHJlbGV2YW50IGZvciBJbnN0YW5jZU9mLgorICAgIGJvb2wgc2F3Tm9u
Q2VsbCA6IDE7CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRTdHJ1Y3R1cmVTdHViSW5mb0Nv
ZGVPcmlnaW4oU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZvKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRT
dGF0dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKLQorI2luY2x1ZGUgPHd0Zi9Cb29s
ZWFuTGF0dGljZS5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0zMzcxLDYgKzMzNzEsNDAgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjbG9iYmVyV29ybGQo
KTsKICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKKyAgICAgICAgCisgICAgICAgIEJvb2xl
YW5MYXR0aWNlIHJlc3VsdCA9IEJvb2xlYW5MYXR0aWNlOjpCb3R0b207CisgICAgICAgIGZvciAo
TWF0Y2hTdHJ1Y3R1cmVWYXJpYW50JiB2YXJpYW50IDogbm9kZS0+bWF0Y2hTdHJ1Y3R1cmVEYXRh
KCkudmFyaWFudHMpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJl
ID0gdmFyaWFudC5zdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAoIWJhc2UuY29udGFpbnMoc3Ry
dWN0dXJlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgYmFzZVNldC5tZXJnZShzdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmVzdWx0ID0gbHVi
Qm9vbGVhbkxhdHRpY2UocmVzdWx0LCB2YXJpYW50LnJlc3VsdCA/IEJvb2xlYW5MYXR0aWNlOjpU
cnVlIDogQm9vbGVhbkxhdHRpY2U6OkZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpIHx8IGJhc2VTZXQuc2l6ZSgpIDwg
YmFzZS5tX3N0cnVjdHVyZS5zaXplKCkpCisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29u
c3RhbnRzKHRydWUpOworICAgICAgICAKKyAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBiYXNlU2V0KSA9PSBDb250cmFkaWN0aW9uKQor
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgIGNhc2UgQm9vbGVhbkxhdHRpY2U6OkZhbHNlOgor
ICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCb29sZWFuTGF0dGljZTo6VHJ1ZToKKyAgICAgICAg
ICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbih0cnVlKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShu
b2RlLCBTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMzE5NjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNs
dWRlICJJbnN0YW5jZU9mU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTRml4ZWRBcnJheS5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKQEAg
LTQ3ODMsMTIgKzQ3ODQsNDAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mOiB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHR1cm4gdGhpcyBpbnRvIGVpdGhlciBhIENoZWNrU3Ry
dWN0dXJlIGZvbGxvd2VkIGJ5IGEgY29uc3RhbnQsIG9yCi0gICAgICAgICAgICAvLyBzb21lIGtp
bmQgb2YgTXVsdGlJbnN0YW5jZU9mIHRoaW5nLCBpZiB0aGUgSW5zdGFuY2VPZiBJQyBpcyBzdGFi
bGUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg1Njk1CiAgICAgICAgICAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0
PE9wSW5zdGFuY2VvZio+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEluc3RhbmNlT2ZTdGF0dXMgc3RhdHVzID0gSW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0
ZUZvcigKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ss
IG1faW5saW5lU3RhY2tUb3AtPm1fc3R1YkluZm9zLAorICAgICAgICAgICAgICAgIG1fY3VycmVu
dEluZGV4KTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLnZhbHVlKCkpKTsKICAgICAgICAgICAgIE5vZGUqIHByb3Rv
dHlwZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUucHJvdG90eXBlKCkpKTsKKworICAg
ICAgICAgICAgLy8gT25seSBpbmxpbmUgaXQgaWYgaXQncyBTaW1wbGUgd2l0aCBhIGNvbW1vblBy
b3RvdHlwZTsgYm90dG9tL3RvcCBvciB2YXJpYWJsZQorICAgICAgICAgICAgLy8gcHJvdG90eXBl
cyBib3RoIGdldCBoYW5kbGVkIGJ5IHRoZSBJQy4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgYm90dG9t
ICh1bnByb2ZpbGVkKQorICAgICAgICAgICAgLy8gaW5zdGFuY2VvZiBJQ3MgYmVjYXVzZSB0aGUg
cHJvZml0IG9mIHRoaXMgb3B0aW1pemF0aW9uIGlzIGZhaXJseSBsb3cuIFNvLCBpbiB0aGUKKyAg
ICAgICAgICAgIC8vIGFic2VuY2Ugb2YgYW55IGluZm9ybWF0aW9uLCBpdCdzIGJldHRlciB0byBh
dm9pZCBtYWtpbmcgdGhpcyBiZSB0aGUgY2F1c2Ugb2YgYQorICAgICAgICAgICAgLy8gcmVjb21w
aWxhdGlvbi4KKyAgICAgICAgICAgIGlmIChKU09iamVjdCogY29tbW9uUHJvdG90eXBlID0gc3Rh
dHVzLmNvbW1vblByb3RvdHlwZSgpKSB7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjb21tb25Qcm90b3R5cGUpKSwgcHJvdG90eXBl
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZURhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fbWF0Y2hTdHJ1Y3R1cmVEYXRhLmFkZCgpOworICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFu
dHMoKSkgeworICAgICAgICAgICAgICAgICAgICBjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlh
bnQuc3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hdGNoU3RydWN0
dXJlVmFyaWFudCBtYXRjaFZhcmlhbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFZh
cmlhbnQuc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hWYXJpYW50LnJlc3VsdCA9IHZhcmlhbnQuaXNI
aXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS0+dmFyaWFudHMuYXBwZW5kKG1hdGNoVmFyaWFudCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Tm9kZSogbWF0Y2ggPSBhZGRUb0dyYXBoKE1hdGNoU3RydWN0dXJlLCBPcEluZm8oZGF0YSksIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdCgp
KSwgbWF0Y2gpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3RhbmNlb2YpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLmRzdCgpKSwgYWRkVG9HcmFwaChJbnN0YW5jZU9mLCB2YWx1ZSwgcHJvdG90
eXBlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbnN0YW5jZW9mKTsKICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlz
aW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NDUsNiArNTQ1LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEo
KSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IE1hdGNoU3RydWN0dXJlOgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAg
ICAgIHJldHVybjsKIAogICAgIGNhc2UgQXJyYXlTbGljZToKICAgICAgICAgcmVhZChNaXNjRmll
bGRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ4OSw2ICs0ODksMzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgICAg
ICBFZGdlIGJhc2VFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSog
YmFzZSA9IGJhc2VFZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZURh
dGEmIGRhdGEgPSBub2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2VWYWx1ZSA9IG1fc3RhdGUuZm9yTm9k
ZShiYXNlKTsKKworICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleElu
QmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRl
IGJlZm9yZS4KKyAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0
IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBCb29sZWFuTGF0dGljZSByZXN1bHQg
PSBCb29sZWFuTGF0dGljZTo6Qm90dG9tOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghYmFzZVZhbHVlLmNvbnRhaW5zKGRhdGEudmFyaWFudHNbaV0uc3RydWN0dXJlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJp
YW50cy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbHViQm9vbGVhbkxhdHRpY2UocmVzdWx0LCBkYXRhLnZh
cmlhbnRzW2ldLnJlc3VsdCA/IEJvb2xlYW5MYXR0aWNlOjpUcnVlIDogQm9vbGVhbkxhdHRpY2U6
OkZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBCb29sZWFuTGF0dGljZTo6RmFsc2UgfHwgcmVzdWx0ID09IEJv
b2xlYW5MYXR0aWNlOjpUcnVlKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmVTZXQgc3RydWN0dXJlU2V0OworICAgICAgICAgICAgICAgICAgICBmb3IgKE1hdGNoU3Ry
dWN0dXJlVmFyaWFudCYgdmFyaWFudCA6IGRhdGEudmFyaWFudHMpCisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRkKHZhcmlhbnQuc3RydWN0dXJlKTsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdHJ1
Y3R1cmVTZXQpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50
KAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwgbV9ncmFwaC5mcmVlemUoanNCb29sZWFu
KHJlc3VsdCA9PSBCb29sZWFuTGF0dGljZTo6VHJ1ZSkpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBHZXRCeUlkRGlyZWN0OgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkRGlyZWN0Rmx1
c2g6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBBdG9taWNzU3ViOgogICAgIGNhc2UgQXRvbWljc1hvcjoK
ICAgICBjYXNlIEF0b21pY3NJc0xvY2tGcmVlOgorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgUHVzaFdpdGhTY29wZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjMx
OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ1NCw2ICsxNDU0LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1
cmU6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgYSB2YXJpYW50IG9mIE1hdGNo
U3RydWN0dXJlIHRoYXQgZG9lc24ndCBkbyBhIGNlbGwgY2hlY2suCisgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Nzg0CisgICAgICAgICAg
ICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKQogICAgICAg
ICAgICAgICAgICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMzE5NjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjkzLDYgKzI5MywxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNv
bnN0CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUo
KTsgKytpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS52YXJp
YW50c1tpXSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzTWF0Y2hTdHJ1Y3R1
cmVEYXRhKCkpIHsKKyAgICAgICAgZm9yIChNYXRjaFN0cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQg
OiBub2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKS52YXJpYW50cykKKyAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgaW5Db250ZXh0KCp2YXJpYW50LnN0cnVjdHVyZS5nZXQoKSwgY29udGV4dCks
ICI9PiIsIHZhcmlhbnQucmVzdWx0KTsKKyAgICB9CiAgICAgQVNTRVJUKG5vZGUtPmhhc1Zhcmlh
YmxlQWNjZXNzRGF0YSgqdGhpcykgPT0gbm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpOwogICAg
IGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNTIsNiArMTA1Miw3IEBAIHB1YmxpYzoKICAgICBCYWc8U3dpdGNo
RGF0YT4gbV9zd2l0Y2hEYXRhOwogICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9tdWx0
aUdldEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVsdGlQ
dXRCeU9mZnNldERhdGE7CisgICAgQmFnPE1hdGNoU3RydWN0dXJlRGF0YT4gbV9tYXRjaFN0cnVj
dHVyZURhdGE7CiAgICAgQmFnPE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE+IG1fb2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YTsKICAgICBCYWc8Q2FsbFZhcmFyZ3NEYXRhPiBtX2NhbGxWYXJhcmdz
RGF0YTsKICAgICBCYWc8TG9hZFZhcmFyZ3NEYXRhPiBtX2xvYWRWYXJhcmdzRGF0YTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHJldmlzaW9uIDIz
MTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2NCwxNSArMjY0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oZGF0YS5wcmVIZWFkZXIpOwotICAg
ICAgICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpIHsKLSAgICAg
ICAgICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAg
ICAgICAgICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0
IHNhZmUgdG8gZXhlY3V0ZS5cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2lu
YWxPcmlnaW4gPSBub2RlLT5vcmlnaW47CisgICAgICAgIGJvb2wgY2FuU3BlY3VsYXRlQmxpbmRs
eSA9ICFtX2dyYXBoLmhhc0dsb2JhbEV4aXRTaXRlKG9yaWdpbmFsT3JpZ2luLnNlbWFudGljLCBI
b2lzdGluZ0ZhaWxlZCk7CiAKICAgICAgICAgLy8gTk9URTogV2UgY291bGQganVzdCB1c2UgQmFj
a3dhcmRzRG9taW5hdG9ycyBoZXJlIGRpcmVjdGx5LCBzaW5jZSB3ZSBhbHJlYWR5IGtub3cgdGhh
dCB0aGUKICAgICAgICAgLy8gcHJlSGVhZGVyIGRvbWluYXRlcyBmcm9tQmxvY2suIEJ1dCB3ZSB3
b3VsZG4ndCBnZXQgYW55dGhpbmcgZnJvbSBiZWluZyBzbyBjbGV2ZXIsIHNpbmNlCkBAIC0yODAs
OCArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBhZGRzQmxpbmRTcGVjdWxhdGlvbiA9
IG1heUV4aXQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZSkKICAgICAgICAgICAgICYmICFtX2dyYXBo
Lm1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMtPmRvbWluYXRlc0VxdWl2YWxlbnRseShkYXRh
LnByZUhlYWRlciwgZnJvbUJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChhZGRzQmxpbmRT
cGVjdWxhdGlvbgotICAgICAgICAgICAgJiYgbV9ncmFwaC5oYXNHbG9iYWxFeGl0U2l0ZShvcmln
aW5hbE9yaWdpbi5zZW1hbnRpYywgSG9pc3RpbmdGYWlsZWQpKSB7CisgICAgICAgIGlmIChhZGRz
QmxpbmRTcGVjdWxhdGlvbiAmJiAhY2FuU3BlY3VsYXRlQmxpbmRseSkgewogICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAg
ICAgICAiICAgIE5vdCBob2lzdGluZyAiLCBub2RlLCAiIGJlY2F1c2UgaXQgbWF5IGV4aXQgYW5k
IHRoZSBwcmUtaGVhZGVyICgiLApAQCAtMjkxLDIyICsyODQsNjEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gRm9y
IGFic3RyYWN0IGludGVycHJldGF0aW9uLCB0aGVzZSBhcmUgaW4gdGhlIHJldmVyc2Ugb3JkZXIg
dGhhdCB0aGV5IGFwcGVhciBpbiB0aGlzCisgICAgICAgIC8vIHZlY3Rvci4KKyAgICAgICAgVmVj
dG9yPE5vZGUqLCAyPiBob2lzdGVkTm9kZXNSZXZlcnNlOworICAgICAgICBob2lzdGVkTm9kZXNS
ZXZlcnNlLmFwcGVuZChub2RlKTsKKworICAgICAgICBOb2RlT3JpZ2luIHRlcm1pbmFsT3JpZ2lu
ID0gZGF0YS5wcmVIZWFkZXItPnRlcm1pbmFsKCktPm9yaWdpbjsKKyAgICAgICAgCisgICAgICAg
IGF1dG8gaW5zZXJ0SG9pc3RlZE5vZGUgPSBbJl0gKE5vZGUqIG5vZGUpIHsKKyAgICAgICAgICAg
IGRhdGEucHJlSGVhZGVyLT5pbnNlcnRCZWZvcmVUZXJtaW5hbChub2RlKTsKKyAgICAgICAgICAg
IG5vZGUtPm93bmVyID0gZGF0YS5wcmVIZWFkZXI7CisgICAgICAgICAgICBub2RlLT5vcmlnaW4g
PSB0ZXJtaW5hbE9yaWdpbi53aXRoU2VtYW50aWMobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAg
ICAgICAgICAgIG5vZGUtPm9yaWdpbi53YXNIb2lzdGVkIHw9IGFkZHNCbGluZFNwZWN1bGF0aW9u
OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaWYgKCFzYWZlVG9FeGVjdXRlKG1fc3Rh
dGUsIG1fZ3JhcGgsIG5vZGUpKSB7CisgICAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIHJlc2N1
ZSB0aGUgc2l0dWF0aW9uIGJ5IGluc2VydGluZyBibGluZCBzcGVjdWxhdGlvbnMuCisgICAgICAg
ICAgICBib29sIGlnbm9yZUVtcHR5Q2hpbGRyZW4gPSB0cnVlOworICAgICAgICAgICAgaWYgKGNh
blNwZWN1bGF0ZUJsaW5kbHkKKyAgICAgICAgICAgICAgICAmJiBzYWZlVG9FeGVjdXRlKG1fc3Rh
dGUsIG1fZ3JhcGgsIG5vZGUsIGlnbm9yZUVtcHR5Q2hpbGRyZW4pKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgUmVzY3VpbmcgaG9pc3RpbmcgYnkgaW5zZXJ0aW5nIGVtcHR5
IGNoZWNrcy5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2dyYXBo
LmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgWyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISht
X3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGNoZWNrID0gbV9ncmFwaC5hZGROb2RlKENoZWNrTm90RW1w
dHksIG9yaWdpbmFsT3JpZ2luLCBFZGdlKGVkZ2Uubm9kZSgpLCBVbnR5cGVkVXNlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRIb2lzdGVkTm9kZShjaGVjayk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBob2lzdGVkTm9kZXNSZXZlcnNlLmFwcGVuZChjaGVjayk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0
IHNhZmUgdG8gZXhlY3V0ZS5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAg
ICIgICAgSG9pc3RpbmcgIiwgbm9kZSwgIiBmcm9tICIsICpmcm9tQmxvY2ssICIgdG8gIiwgKmRh
dGEucHJlSGVhZGVyLAogICAgICAgICAgICAgICAgICJcbiIpOwogICAgICAgICB9CiAKLSAgICAg
ICAgZGF0YS5wcmVIZWFkZXItPmluc2VydEJlZm9yZVRlcm1pbmFsKG5vZGUpOwotICAgICAgICBu
b2RlLT5vd25lciA9IGRhdGEucHJlSGVhZGVyOwotICAgICAgICBOb2RlT3JpZ2luIHRlcm1pbmFs
T3JpZ2luID0gZGF0YS5wcmVIZWFkZXItPnRlcm1pbmFsKCktPm9yaWdpbjsKLSAgICAgICAgbm9k
ZS0+b3JpZ2luID0gdGVybWluYWxPcmlnaW4ud2l0aFNlbWFudGljKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7Ci0gICAgICAgIG5vZGUtPm9yaWdpbi53YXNIb2lzdGVkIHw9IGFkZHNCbGluZFNwZWN1
bGF0aW9uOworICAgICAgICBpbnNlcnRIb2lzdGVkTm9kZShub2RlKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFdlIGNhbiB0cnVzdCB3aGF0IEFJIHByb3ZlcyBhYm91dCBlZGdlIHByb29mIHN0YXR1
c2VzIHdoZW4gaG9pc3RpbmcgdG8gdGhlIHByZWhlYWRlci4KICAgICAgICAgbV9zdGF0ZS50cnVz
dEVkZ2VQcm9vZnMoKTsKICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oZGF0YS5wcmVIZWFk
ZXIpOwotICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUobm9kZSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGhvaXN0ZWROb2Rlc1JldmVyc2Uuc2l6ZSgpOyBpLS07KQorICAgICAgICAg
ICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGhvaXN0ZWROb2Rlc1JldmVyc2VbaV0pOwogICAgICAg
ICAvLyBIb3dldmVyLCB3aGVuIHdhbGtpbmcgdmFyaW91cyBpbm5lciBsb29wcyBiZWxvdywgdGhl
IHByb29mIHN0YXR1cyBvZgogICAgICAgICAvLyBhbiBlZGdlIG1heSBiZSB0cml2aWFsbHkgdHJ1
ZSwgZXZlbiBpZiBpdCdzIG5vdCB0cnVlIGluIHRoZSBwcmVoZWFkZXIKICAgICAgICAgLy8gd2Ug
aG9pc3QgdG8uIFdlIGRvbid0IGFsbG93IHRoZSBiZWxvdyBub2RlIGV4ZWN1dGlvbnMgdG8gY2hh
bmdlIHRoZQpAQCAtMzQwLDcgKzM3Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoc3Vi
UHJlSGVhZGVyID09IGRhdGEucHJlSGVhZGVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oc3ViUHJlSGVhZGVyKTsKLSAgICAgICAg
ICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShub2RlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGhvaXN0ZWROb2Rlc1JldmVyc2Uuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAg
IG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShob2lzdGVkTm9kZXNSZXZlcnNlW2ldKTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3
LDYgKzk3LDE1IEBAIHZvaWQgTm9kZTo6cmVtb3ZlKEdyYXBoJiBncmFwaCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBNYXRjaFN0cnVjdHVyZTogeworICAgICAg
ICBNYXRjaFN0cnVjdHVyZURhdGEmIGRhdGEgPSBtYXRjaFN0cnVjdHVyZURhdGEoKTsKKyAgICAg
ICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBzZXQ7CisgICAgICAgIGZvciAoTWF0Y2hTdHJ1Y3R1
cmVWYXJpYW50JiB2YXJpYW50IDogZGF0YS52YXJpYW50cykKKyAgICAgICAgICAgIHNldC5hZGQo
dmFyaWFudC5zdHJ1Y3R1cmUpOworICAgICAgICBjb252ZXJ0VG9DaGVja1N0cnVjdHVyZShncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQoc2V0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAg
IAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGlmIChmbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsMTUgQEAgc3Ry
dWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgp
IGNvbnN0OwogfTsKIAorc3RydWN0IE1hdGNoU3RydWN0dXJlVmFyaWFudCB7CisgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmU7CisgICAgYm9vbCByZXN1bHQ7Cit9OworCitzdHJ1Y3Qg
TWF0Y2hTdHJ1Y3R1cmVEYXRhIHsKKyAgICBWZWN0b3I8TWF0Y2hTdHJ1Y3R1cmVWYXJpYW50LCAy
PiB2YXJpYW50czsKK307CisKIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogICAgIHVuaW9u
IHsKICAgICAgICAgc3RydWN0IHsKQEAgLTE4NTMsNiArMTg2MiwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAqbV9vcEluZm8uYXM8TXVsdGlQdXRCeU9mZnNldERhdGEqPigpOwogICAgIH0K
ICAgICAKKyAgICBib29sIGhhc01hdGNoU3RydWN0dXJlRGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gb3AoKSA9PSBNYXRjaFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgTWF0Y2hTdHJ1
Y3R1cmVEYXRhJiBtYXRjaFN0cnVjdHVyZURhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhh
c01hdGNoU3RydWN0dXJlRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuICptX29wSW5mby5hczxNYXRj
aFN0cnVjdHVyZURhdGEqPigpOworICAgIH0KKyAgICAKICAgICBib29sIGhhc09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMzE5NjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0Niw2ICszNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oT3ZlcnJpZGVzSGFzSW5zdGFuY2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0
Qm9vbGVhbikgXAogICAgIG1hY3JvKEluc3RhbmNlT2YsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKEluc3RhbmNlT2ZDdXN0b20sIE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbikgXAorICAgIG1hY3JvKE1hdGNoU3RydWN0dXJlLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgbWFjcm8o
SXNDZWxsV2l0aFR5cGUsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNFbXB0eSwg
Tm9kZVJlc3VsdEJvb2xlYW4pIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDE0ICsx
MzQsMTQgQEAgcHJpdmF0ZToKIC8vIHNhZmVseSBleGVjdXRlIGJlZm9yZSB0aGF0IGNoZWNrLCBz
byBsb25nIGFzIHRoYXQgY2hlY2sgY29udGludWVzIHRvIGd1YXJkIGFueQogLy8gdXNlci1vYnNl
cnZhYmxlIHRoaW5ncyBkb25lIHRvIHRoZSBsb2FkZWQgdmFsdWUuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBBYnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlw
ZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKK2Jvb2wgc2FmZVRvRXhlY3V0ZShB
YnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBp
Z25vcmVFbXB0eUNoaWxkcmVuID0gZmFsc2UpCiB7CiAgICAgU2FmZVRvRXhlY3V0ZUVkZ2U8QWJz
dHJhY3RTdGF0ZVR5cGU+IHNhZmVUb0V4ZWN1dGVFZGdlKHN0YXRlKTsKICAgICBERkdfTk9ERV9E
T19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgc2FmZVRvRXhlY3V0ZUVkZ2UpOwogICAgIGlmICgh
c2FmZVRvRXhlY3V0ZUVkZ2UucmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChzYWZlVG9FeGVjdXRlRWRnZS5tYXlTZWVFbXB0eUNoaWxkKCkpIHsKKyAgICBpZiAoIWln
bm9yZUVtcHR5Q2hpbGRyZW4gJiYgc2FmZVRvRXhlY3V0ZUVkZ2UubWF5U2VlRW1wdHlDaGlsZCgp
KSB7CiAgICAgICAgIC8vIFdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSBpZiB0aGUgZW1wdHkgdmFs
dWUgZmxvd3MgaW50byBhIG5vZGUsCiAgICAgICAgIC8vIGl0IG1pZ2h0IG5vdCBiZSBhYmxlIHRv
IGhhbmRsZSBpdCAoZS5nLCBjcmFzaCkuIEluIGdlbmVyYWwsIHRoZSBieXRlY29kZSBnZW5lcmF0
b3IKICAgICAgICAgLy8gZW1pdHMgY29kZSBpbiBzdWNoIGEgd2F5IHRoYXQgbW9zdCBub2RlIHR5
cGVzIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIGVtcHR5IHZhbHVlCkBAIC00NTIsNiAr
NDUyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNh
c2UgQXRvbWljc1hvcjoKICAgICBjYXNlIEF0b21pY3NJc0xvY2tGcmVlOgogICAgIGNhc2UgSW5p
dGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CisgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEFycmF5U2xpY2U6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNjAsNiArMzM2MCwxMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCisgICAgY2FzZSBNYXRjaFN0cnVjdHVyZTogeworICAgICAgICBjb21w
aWxlTWF0Y2hTdHJ1Y3R1cmUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CiAgICAgY2FzZSBHZXRHZXR0ZXI6IHsKICAgICAgICAgY29tcGlsZUdldEdldHRlcihub2RlKTsK
ICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2MjcsNiArMzYyNywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBNYXRjaFN0cnVj
dHVyZTogeworICAgICAgICBjb21waWxlTWF0Y2hTdHJ1Y3R1cmUobm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBHZXRHZXR0ZXI6IHsKICAgICAgICAgY29t
cGlsZUdldEdldHRlcihub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjMxOTYx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExODMzLDYgKzExODMzLDMzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQdXRCeU9mZnNldCgKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGNoU3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
IEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
dGVtcEdQUik7CisgICAgCisgICAgYXV0byYgdmFyaWFudHMgPSBub2RlLT5tYXRjaFN0cnVjdHVy
ZURhdGEoKS52YXJpYW50czsKKyAgICBWZWN0b3I8aW50NjRfdD4gY2FzZXM7CisgICAgZm9yIChN
YXRjaFN0cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQgOiB2YXJpYW50cykKKyAgICAgICAgY2FzZXMu
YXBwZW5kKGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2YXJpYW50LnN0cnVjdHVyZS0+aWQoKSkpOwor
ICAgIAorICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2godGVtcEdQUiwgY2FzZXMsIEJpbmFy
eVN3aXRjaDo6SW50MzIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAgIHdo
aWxlIChiaW5hcnlTd2l0Y2guYWR2YW5jZShtX2ppdCkpIHsKKyAgICAgICAgbV9qaXQuYm94Qm9v
bGVhblBheWxvYWQodmFyaWFudHNbYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpXS5yZXN1bHQsIHRl
bXBHUFIpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgIH0KKyAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBub2RlLCBiaW5hcnlTd2l0
Y2guZmFsbFRocm91Z2goKSk7CisgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisg
ICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQodGVtcEdQUiwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKiBub2RlKQogewogICAg
IEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjMx
OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzc1LDYgKzEzNzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21w
aWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0QnlPZmZzZXQo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5T2Zmc2V0KE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVNYXRjaFN0cnVjdHVyZShOb2RlKik7CiAgICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNl
IGl0IG1lYW5zIHRoYXQgd2UgdGVybWluYXRlZCBzcGVjdWxhdGl2ZSBleGVjdXRpb24uCiAgICAg
Ym9vbCBnZXRJbnRUeXBlZEFycmF5U3RvcmVPcGVyYW5kKAogICAgICAgICBHUFJUZW1wb3Jhcnkm
IHZhbHVlLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNiArMzQ5LDcgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgIGNhc2UgUHV0QnlWYWxXaXRoVGhp
czoKKyAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAg
ICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMSw2ICs5MTEs
OSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgICAg
ICBjb21waWxlTXVsdGlQdXRCeU9mZnNldCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CisgICAgICAgICAgICBjb21waWxlTWF0Y2hTdHJ1Y3R1cmUo
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAg
ICAgY2FzZSBHZXRHbG9iYWxMZXhpY2FsVmFyaWFibGU6CiAgICAgICAgICAgICBjb21waWxlR2V0
R2xvYmFsVmFyaWFibGUoKTsKQEAgLTY1OTIsNiArNjU5NSw0NyBAQCBwcml2YXRlOgogICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJh
c2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTWF0Y2hT
dHJ1Y3R1cmVEYXRhJiBkYXRhID0gbV9ub2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKTsKKyAgICAg
ICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHRydWVCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGZhbHNlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBleGl0QmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUodHJ1
ZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNlczsK
KyAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBiYXNlU2V0OworICAgICAgICBmb3IgKE1h
dGNoU3RydWN0dXJlVmFyaWFudCYgdmFyaWFudCA6IGRhdGEudmFyaWFudHMpIHsKKyAgICAgICAg
ICAgIGJhc2VTZXQuYWRkKHZhcmlhbnQuc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNhc2VzLmFw
cGVuZChTd2l0Y2hDYXNlKAorICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh2YXJpYW50
LnN0cnVjdHVyZSksCisgICAgICAgICAgICAgICAgdmFyaWFudC5yZXN1bHQgPyB0cnVlQmxvY2sg
OiBmYWxzZUJsb2NrLCBXZWlnaHQoMSkpKTsKKyAgICAgICAgfQorICAgICAgICBib29sIHN0cnVj
dHVyZXNDaGVja2VkID0gbV9pbnRlcnByZXRlci5mb3JOb2RlKG1fbm9kZS0+Y2hpbGQxKCkpLm1f
c3RydWN0dXJlLmlzU3Vic2V0T2YoYmFzZVNldCk7CisgICAgICAgIGVtaXRTd2l0Y2hGb3JNdWx0
aUJ5T2Zmc2V0KGJhc2UsIHN0cnVjdHVyZXNDaGVja2VkLCBjYXNlcywgZXhpdEJsb2NrKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHRydWVCbG9jaywgZmFsc2VCbG9jayk7Cisg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHRydWVSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9v
bGVhblRydWUpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhmYWxzZUJsb2NrLCBleGl0QmxvY2spOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYWxzZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFs
c2UpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAg
ICBtX291dC5hcHBlbmRUbyhleGl0QmxvY2ssIGNvbnRpbnVhdGlvbik7CisgICAgICAgIGlmICgh
c3RydWN0dXJlc0NoZWNrZWQpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFs
dWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBtX291dC51bnJlYWNo
YWJsZSgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCB0cnVlUmVzdWx0
LCBmYWxzZVJlc3VsdCkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRHbG9iYWxW
YXJpYWJsZSgpCiAgICAgewogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5h
YnNvbHV0ZShtX25vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSkpOwpJbmRleDogU291cmNlL1dURi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIz
MTk2MSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTggQEAKKzIwMTgtMDUtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBERkcgc2hvdWxkIGlubGluZSBJbnN0YW5jZU9mIElDcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Njk1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJIGZvdW5kIG15c2VsZiBuZWVk
aW5nIGEgd2F5IHRvIHJlcHJlc2VudCBib3R0b20vZmFsc2UvdHJ1ZS90b3AsIHNvIEkgY3JlYXRl
ZCBpdC4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHd0Zi9Cb29sZWFuTGF0dGljZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6bHViQm9vbGVh
bkxhdHRpY2UpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiB3dGYv
Q01ha2VMaXN0cy50eHQ6CisKIDIwMTgtMDUtMTcgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IENlcnRpZmljYXRlSW5mbyBpbnRvIENyZWRlbnRp
YWwgaW4gVUkgUHJvY2VzcyBpbnN0ZWFkIG9mIE5ldHdvcmtpbmcgUHJvY2VzcwpJbmRleDogU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzE5NjEpCisr
KyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzksNiArMjM5LDcgQEAKIAkJMEZCMTRFMTgxODBGQTIxODAwOUI2QjREIC8qIEJhZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMUExODEwRTFEQTAwOUI2QjREIC8qIEJhZ1RvSGFzaE1hcC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCYWdUb0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtVHJhY2luZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkIzOTlCODIwQUY1QTU4MDAxN0UyMTMgLyogQm9vbGVhbkxhdHRp
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm9vbGVhbkxhdHRpY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDY3ODIxRkRFMjgyQjAwM0ZDQjA5IC8q
IENvbmN1cnJlbnRCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29u
Y3VycmVudEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0Njc4MzFG
REUyODJDMDAzRkNCMDkgLyogQ29uY3VycmVudFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb25jdXJyZW50VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQzQ0ODgyMTZGRTlGRTEwMDg0NEJFOSAvKiBQcm9jZXNzSUQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvY2Vzc0lELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC04MTMsNiArODE0LDcgQEAKIAkJCQkxQTk0NEY0NjFDM0Q4ODE0MDA1QkQyOEMg
LyogQmxvY2tQdHIuaCAqLywKIAkJCQlBOEE0NzI2NDE1MUE4MjVBMDA0MTIzRkYgLyogQmxvY2tT
dGFjay5oICovLAogCQkJCUE4QTQ3MjY1MTUxQTgyNUEwMDQxMjNGRiAvKiBCbG9vbUZpbHRlci5o
ICovLAorCQkJCTBGQjM5OUI4MjBBRjVBNTgwMDE3RTIxMyAvKiBCb29sZWFuTGF0dGljZS5oICov
LAogCQkJCTBGOTMyNzRBMUMxN0Y0QjcwMENGNjU2NCAvKiBCb3guaCAqLywKIAkJCQk3QzNGNzIz
OTFENzg4MTE5MDA2NzRFMjYgLyogQnJpZ2FuZC5oICovLAogCQkJCTBGNDU3MDQ0MUJFODM0NDEw
MDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Cb29sZWFu
TGF0dGljZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Jvb2xlYW5MYXR0aWNlLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQm9vbGVhbkxhdHRpY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCitlbnVtIGNsYXNzIEJvb2xlYW5MYXR0aWNlIDogdWlu
dDhfdCB7CisgICAgQm90dG9tID0gMCwKKyAgICBGYWxzZSA9IDEsCisgICAgVHJ1ZSA9IDIsCisg
ICAgVG9wID0gMworfTsKKworaW5saW5lIEJvb2xlYW5MYXR0aWNlIGx1YkJvb2xlYW5MYXR0aWNl
KEJvb2xlYW5MYXR0aWNlIGEsIEJvb2xlYW5MYXR0aWNlIGIpCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEJvb2xlYW5MYXR0aWNlPihzdGF0aWNfY2FzdDx1aW50OF90PihhKSB8IHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oYikpOworfQorCitpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEJvb2xlYW5MYXR0aWNlIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFsdWUp
IHsKKyAgICBjYXNlIEJvb2xlYW5MYXR0aWNlOjpCb3R0b206CisgICAgICAgIG91dC5wcmludCgi
Qm90dG9tIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW5MYXR0aWNlOjpGYWxz
ZToKKyAgICAgICAgb3V0LnByaW50KCJGYWxzZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBCb29sZWFuTGF0dGljZTo6VHJ1ZToKKyAgICAgICAgb3V0LnByaW50KCJUcnVlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW5MYXR0aWNlOjpUb3A6CisgICAgICAgIG91dC5w
cmludCgiVG9wIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qm9v
bGVhbkxhdHRpY2U7Cit1c2luZyBXVEY6Omx1YkJvb2xlYW5MYXR0aWNlOworCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0LDYgKzE0LDcgQEAgc2V0KFdURl9QVUJMSUNf
SEVBREVSUwogICAgIEJsb2NrUHRyLmgKICAgICBCbG9ja1N0YWNrLmgKICAgICBCbG9vbUZpbHRl
ci5oCisgICAgQm9vbGVhbkxhdHRpY2UuaAogICAgIEJveC5oCiAgICAgQnJpZ2FuZC5oCiAgICAg
QnViYmxlU29ydC5oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340759</attachid>
            <date>2018-05-18 16:41:24 -0700</date>
            <delta_ts>2018-05-19 12:38:04 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>65517</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxOTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBA
QAorMjAxOC0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaW5saW5lIEluc3RhbmNlT2YgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2OTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdGVhY2hlcyB0aGUgREZHIGhv
dyB0byBpbmxpbmUgSW5zdGFuY2VPZiBJQ3MgaW50byBhIE1hdGNoU3RydWN0dXJlIG5vZGUuIFRo
aXMgY2FuIHRoZW4KKyAgICAgICAgYmUgZm9sZGVkIHRvIGEgQ2hlY2tTdHJ1Y3R1cmUgKyBKU0Nv
bnN0YW50LgorICAgICAgICAKKyAgICAgICAgSW4gdGhlIHByb2Nlc3Mgb2YgdGVzdGluZyB0aGlz
LCBJIGZvdW5kIGEgYnVnIHdoZXJlIExJQ00gd2FzIG5vdCBob2lzdGluZyB0aGluZ3MgdGhhdAor
ICAgICAgICBkZXBlbmRlZCBvbiBFeHRyYU9TUkVudHJ5TG9jYWwgYmVjYXVzZSB0aGF0IG1pZ2h0
IHJldHVybiBTcGVjRW1wdHkuIEkgZml4ZWQgdGhhdCBieSB0ZWFjaGluZworICAgICAgICBMSUNN
IGhvdyB0byBtYXRlcmlhbGl6ZSBDaGVja05vdEVtcHR5IG9uIGRlbWFuZCB3aGVuZXZlciAhSG9p
c3RpbmdGYWlsZWQuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgNS03JSBzcGVlZC11cCBv
biBib3llci4KKyAgICAgICAgCisgICAgICAgIDIuNi0yLjl4IHNwZWVkLXVwIG9uIHRoZSBpbnN0
YW5jZW9mLWFsd2F5cy1oaXQtb25lLCBpbnN0YW5jZW9mLWFsd2F5cy1oaXQtdHdvLCBhbmQKKyAg
ICAgICAgaW5zdGFuY2VvZi1zb21ldGltZXMtaGl0IG1pY3JvYmVuY2htYXJrcy4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAg
ICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpH
ZXRCeUlkU3RhdHVzOjpmaWx0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
aDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6b3BlcmF0b3IgYm9vbCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6Om9wZXJhdG9yISBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJ
ZFZhcmlhbnQ6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFy
aWFudDo6b3BlcmF0b3IhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JQ1N0
YXR1c1V0aWxzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjphcHBlbmRJQ1N0YXR1c1ZhcmlhbnQp
OgorICAgICAgICAoSlNDOjpmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKToKKyAgICAgICAgKiBieXRl
Y29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Okluc3RhbmNl
T2ZTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVz
Ojpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6Y29tbW9uUHJvdG90
eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6ZmlsdGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpJbnN0YW5jZU9mU3RhdHVzOjpJbnN0YW5jZU9mU3RhdHVzKToKKyAgICAgICAgKEpTQzo6SW5z
dGFuY2VPZlN0YXR1czo6c3RhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3Rh
dHVzOjppc1NldCBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6Om9wZXJh
dG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjppc1NpbXBs
ZSBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6OnRha2VzU2xvd1BhdGgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjpudW1WYXJpYW50cyBjb25z
dCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZTdGF0dXM6OnZhcmlhbnRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SW5zdGFuY2VPZlN0YXR1czo6YXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJ
bnN0YW5jZU9mU3RhdHVzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9J
bnN0YW5jZU9mVmFyaWFudC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFy
aWFudDo6SW5zdGFuY2VPZlZhcmlhbnQpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6ZHVt
cCBjb25zdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZWYXJpYW50OjpkdW1wSW5Db250ZXh0
IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6Okluc3RhbmNlT2ZWYXJpYW50KToKKyAg
ICAgICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAg
ICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6c3RydWN0dXJlU2V0IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SW5zdGFuY2VPZlZhcmlhbnQ6OnN0cnVjdHVyZVNldCk6CisgICAgICAgIChKU0M6
Okluc3RhbmNlT2ZWYXJpYW50Ojpjb25kaXRpb25TZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJ
bnN0YW5jZU9mVmFyaWFudDo6cHJvdG90eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFu
Y2VPZlZhcmlhbnQ6OmlzSGl0IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmNvbnNpZGVyQ2FjaGluZyk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xk
aW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjphdHRlbXB0SG9pc3QpOgorICAgICAgICAq
IGRmZy9ERkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpyZW1vdmUpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTWF0Y2hT
dHJ1Y3R1cmVEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjptYXRjaFN0cnVjdHVyZURh
dGEpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdTYWZl
VG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU1hdGNoU3RydWN0dXJlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9C
My5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGNoU3Ry
dWN0dXJlKToKKwogMjAxOC0wNS0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIG1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDggQEAgYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAogYnl0ZWNvZGUv
SW5saW5lQ2FsbEZyYW1lU2V0LmNwcAogYnl0ZWNvZGUvSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuY3Bw
CitieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAorYnl0ZWNvZGUvSW5zdGFuY2VPZlZhcmlh
bnQuY3BwCiBieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcAogYnl0ZWNvZGUv
SnVtcFRhYmxlLmNwcAogYnl0ZWNvZGUvTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDkgQEAK
IAkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2NUYxOTZCOEY5RTAwOTEw
NTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyB9OwogCQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUg
LyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3Qu
aCAqLzsgfTsKIAkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tP
cmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
Mzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovOyB9Owor
CQkwRkIzOTlCRTIwQUY2QjNEMDAxN0UyMTMgLyogSUNTdGF0dXNVdGlscy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzk5QkQyMEFGNkIzODAwMTdF
MjEzIC8qIElDU3RhdHVzVXRpbHMuaCAqLzsgfTsKKwkJMEZCMzk5QkYyMEFGNkIzRjAwMTdFMjEz
IC8qIEluc3RhbmNlT2ZTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjM5OUJCMjBBRjZCMkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mU3RhdHVz
LmggKi87IH07CisJCTBGQjM5OUMwMjBBRjZCNDMwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzk5
QjkyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmggKi87IH07CiAJCTBGQjQ2
NzdGMUZEREE2RTkwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0
b21JbmRpY2VzLmggKi87IH07CiAJCTBGQjQ2NzgwMUZEREE2RjEwMDNGQ0IwOSAvKiBJc29DZWxs
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0
Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQ2NzgxMUZEREE2RjcwMDNGQ0IwOSAv
KiBJc29DZWxsU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDY3N0IxRkREQTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggKi87IH07CkBAIC0yNjA5LDYgKzI2MTIsMTEgQEAKIAkJMEZCMzg3OEMxQkZCQzQ0RDAwRTNB
QjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ck9wdGltaXplQmxvY2tPcmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyT3B0aW1pemVCbG9ja09yZGVyLmg7IHBhdGgg
PSBiMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENvbXBpbGUuY3BwOyBwYXRoID0gZnRs
L0ZUTENvbXBpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIzOTlCOTIw
QUY2QjJBMDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zdGFuY2VPZlZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCMzk5QkEyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZTdGF0dXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zdGFuY2VPZlN0YXR1cy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjM5OUJCMjBBRjZCMkEwMDE3RTIx
MyAvKiBJbnN0YW5jZU9mU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3RhbmNlT2ZTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMzk5
QkMyMEFGNkIyQTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3RhbmNlT2ZWYXJpYW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMzk5QkQyMEFGNkIzODAwMTdFMjEzIC8qIElDU3RhdHVz
VXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNTdGF0dXNVdGlscy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkg
LyogQXJyYXlDb252ZW50aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBcnJheUNvbnZlbnRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkI0Njc3QjFGRERBNkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXNvQ2VsbFNldElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2MjQsMTIgKzc2MzIsMTcgQEAK
IAkJCQkwRjAzMzJDMjE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuaCAqLywKIAkJ
CQkxNEFEOTEwODFEQ0E5Mjk0MDAxNEY5RkUgLyogR2xvYmFsQ29kZUJsb2NrLmggKi8sCiAJCQkJ
MEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggKi8sCisJCQkJMEZCMzk5
QkQyMEFGNkIzODAwMTdFMjEzIC8qIElDU3RhdHVzVXRpbHMuaCAqLywKIAkJCQk3OTA1QkI2NjFE
MTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLywKIAkJCQk3OTA1QkI2NzFEMTIw
NTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggKi8sCiAJCQkJMTQ4QTdCRUQxQjgyOTc1QTAw
MkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5jcHAgKi8sCiAJCQkJMTQ4QTdCRUUxQjgyOTc1QTAw
MkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5oICovLAogCQkJCTBGMjRFNTUzMTdGMEI3MUMwMEFC
QjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwICovLAogCQkJCTBGMjRFNTU0MTdGMEI3MUMw
MEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLywKKwkJCQkwRkIzOTlCQTIwQUY2QjJB
MDAxN0UyMTMgLyogSW5zdGFuY2VPZlN0YXR1cy5jcHAgKi8sCisJCQkJMEZCMzk5QkIyMEFGNkIy
QTAwMTdFMjEzIC8qIEluc3RhbmNlT2ZTdGF0dXMuaCAqLywKKwkJCQkwRkIzOTlCQzIwQUY2QjJB
MDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQuY3BwICovLAorCQkJCTBGQjM5OUI5MjBBRjZC
MkEwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFudC5oICovLAogCQkJCTk2OUEwNzkzMEVEMUQz
QUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovLAogCQkJCTUzRjZCRjZDMUMzRjA2MEEwMEY0
MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLywKIAkJCQlCQ0ZE
OEM5MDBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCAqLywKQEAgLTkwNTUsNiArOTA2
OCw3IEBACiAJCQkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxG
cmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FF
NjEzIC8qIEpTSm9iLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjM5OUMw
MjBBRjZCNDMwMDE3RTIxMyAvKiBJbnN0YW5jZU9mVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyQTRCQjdGMzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTc5LDYgKzkxOTMsNyBAQAogCQkJCTBGNDY4MENE
MTRCQkIxN0QwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5ODFFRDgyMzI4MjM0RDkxQkFFQ0NBREUgLyogTWFjaGluZUNvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0QjcyM0I4MTJEN0RBNkYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJr
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjM5OUJGMjBBRjZCM0YwMDE3RTIxMyAvKiBJbnN0
YW5jZU9mU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkMzNkVFQTBFRTEyODlEMDBCM0RG
NTkgLyogTWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM2MTAxNTZC
REUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFB
MDA5QzAxODMxQTIyRDAwQ0Y4NzExIC8qIE1hY3JvQXNzZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTQzNyw2ICs5NDUyLDcgQEAKIAkJCQk3MDVCNDFBRTFBNkU1MDFFMDA3MTY3NTcg
LyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI3MUJEQTA4
RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwNUI0MUIwMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmplY3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGQjM5OUJFMjBBRjZCM0QwMDE3RTIxMyAvKiBJQ1N0YXR1c1V0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyODFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9s
UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0
NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIzMTk2
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00NywyMiArNDgsNyBAQCBjbGFzcyBHZXR0ZXJTZXR0
ZXI7CiAKIGJvb2wgR2V0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFy
aWFudCYgdmFyaWFudCkKIHsKLSAgICAvLyBBdHRlbXB0IHRvIG1lcmdlIHRoaXMgdmFyaWFudCB3
aXRoIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFyaWFudC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV92YXJpYW50c1tp
XS5hdHRlbXB0VG9NZXJnZSh2YXJpYW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gb3ZlcmxhcC4gV2Ugc2hvdWxk
IGhhdmUgcHJ1bmVkIG91dCBvcHBvcnR1bml0aWVzIGZvcgotICAgIC8vIG92ZXJsYXAgYnV0IGl0
J3MgcG9zc2libGUgdGhhdCBhbiBpbmxpbmUgY2FjaGUgZ290IGludG8gYSB3ZWlyZCBzdGF0ZS4g
V2UgYXJlCi0gICAgLy8gZGVmZW5zaXZlIGFuZCBiYWlsIGlmIHdlIGRldGVjdCBjcmF6eS4KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV92YXJpYW50c1tpXS5zdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyh2YXJpYW50LnN0
cnVjdHVyZVNldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0g
ICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKIH0KIAogI2lm
IEVOQUJMRShERkdfSklUKQpAQCAtNDMyLDE0ICs0MTgsNyBAQCB2b2lkIEdldEJ5SWRTdGF0dXM6
OmZpbHRlcihjb25zdCBTdHJ1Y3R1CiB7CiAgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQogICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklYTUU6IFdlIGNvdWxkIGFsc28gZmlsdGVyIHRo
ZSB2YXJpYW50cyB0aGVtc2VsdmVzLgotICAgIAotICAgIG1fdmFyaWFudHMucmVtb3ZlQWxsTWF0
Y2hpbmcoCi0gICAgICAgIFsmXSAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQpIC0+IGJvb2wgewot
ICAgICAgICAgICAgcmV0dXJuICF2YXJpYW50LnN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKHNldCk7
Ci0gICAgICAgIH0pOwotICAgIAorICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50
cywgc2V0KTsKICAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCiAgICAgICAgIG1fc3RhdGUg
PSBOb0luZm9ybWF0aW9uOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3
ICs5Myw3IEBAIHB1YmxpYzoKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBO
b0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNT
ZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1Nl
dCgpOyB9CiAgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2lt
cGxlOyB9CiAgICAgYm9vbCBpc0N1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gQ3Vz
dG9tOyB9CiAgICAgYm9vbCBpc01vZHVsZU5hbWVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gTW9kdWxlTmFtZXNwYWNlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgR2V0QnlJZFZhcmlhbnQmKTsKICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4gISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5cGUsIHR5cGVuYW1lIFZhcmlhbnRUeXBl
PgorYm9vbCBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQoVmFyaWFudFZlY3RvclR5cGUmIHZhcmlhbnRz
LCBjb25zdCBWYXJpYW50VHlwZSYgdmFyaWFudCkKK3sKKyAgICAvLyBBdHRlbXB0IHRvIG1lcmdl
IHRoaXMgdmFyaWFudCB3aXRoIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFyaWFudC4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KHZhcmlhbnRzW2ldLmF0dGVtcHRUb01lcmdlKHZhcmlhbnQpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBvdmVybGFw
LiBXZSBzaG91bGQgaGF2ZSBwcnVuZWQgb3V0IG9wcG9ydHVuaXRpZXMgZm9yCisgICAgLy8gb3Zl
cmxhcCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IGFuIGlubGluZSBjYWNoZSBnb3QgaW50byBhIHdl
aXJkIHN0YXRlLiBXZSBhcmUKKyAgICAvLyBkZWZlbnNpdmUgYW5kIGJhaWwgaWYgd2UgZGV0ZWN0
IGNyYXp5LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YXJpYW50cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAodmFyaWFudHNbaV0uc3RydWN0dXJlU2V0KCkub3ZlcmxhcHModmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIHZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFZlY3RvclR5cGU+Cit2b2lkIGZpbHRlcklDU3Rh
dHVzVmFyaWFudHMoVmFyaWFudFZlY3RvclR5cGUmIHZhcmlhbnRzLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgY291bGQgYWxzbyBmaWx0ZXIgdGhlIHZhcmlh
bnRzIHRoZW1zZWx2ZXMuCisgICAgCisgICAgdmFyaWFudHMucmVtb3ZlQWxsTWF0Y2hpbmcoCisg
ICAgICAgIFsmXSAoYXV0byYgdmFyaWFudCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4g
IXZhcmlhbnQuc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMoc2V0KTsKKyAgICAgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zdGFuY2VPZlN0
YXR1cy5oIgorCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVy
ZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEluc3RhbmNlT2ZTdGF0dXM6
OmFwcGVuZFZhcmlhbnQoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIHZhcmlhbnQpCit7CisgICAg
YXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOworfQorCitJbnN0YW5j
ZU9mU3RhdHVzIEluc3RhbmNlT2ZTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0dWJJbmZvTWFwJiBpbmZvTWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQor
eworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAg
IAorICAgIEluc3RhbmNlT2ZTdGF0dXMgcmVzdWx0OworI2lmIEVOQUJMRShERkdfSklUKQorICAg
IHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIsIGluZm9NYXAuZ2V0KENvZGVPcmln
aW4oYnl0ZWNvZGVJbmRleCkpKTsKKworICAgIGlmICghcmVzdWx0LnRha2VzU2xvd1BhdGgoKSkg
eworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIodW5saW5rZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIC8vIFdlIGFsc28gY2hlY2sg
Zm9yIEJhZFR5cGUgaGVyZSBpbiBjYXNlIHRoaXMgaXMgInByaW1pdGl2ZSBpbnN0YW5jZW9mIEZv
byIuCisgICAgICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBE
Rkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUpKQorICAgICAgICAg
ICAgfHwgdW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVu
dEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50Q2FjaGUpKQorICAgICAgICAgICAg
fHwgdW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4
aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZFR5cGUpKSkKKyAgICAgICAgICAgIHJldHVybiBUYWtl
c1Nsb3dQYXRoOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluZm9NYXApOworICAg
IFVOVVNFRF9QQVJBTShjb2RlT3JpZ2luKTsKKyNlbmRpZgorICAgIAorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0luc3RhbmNlT2ZTdGF0dXMgSW5zdGFuY2VP
ZlN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKKyAgICBpZiAoIXN0dWJJbmZvIHx8ICFzdHVi
SW5mby0+ZXZlckNvbnNpZGVyZWQpCisgICAgICAgIHJldHVybiBOb0luZm9ybWF0aW9uOworICAg
IAorICAgIC8vIEZJWE1FOiBXZSB3b3VsZG4ndCBoYXZlIHRvIGJhaWwgZm9yIG5vbkNlbGwgaWYg
d2UgdGF1Z2h0IE1hdGNoU3RydWN0dXJlIGhvdyB0byBoYW5kbGUgbm9uCisgICAgLy8gY2VsbHMu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc4NAor
ICAgIGlmIChzdHViSW5mby0+dG9va1Nsb3dQYXRoIHx8IHN0dWJJbmZvLT5zYXdOb25DZWxsKQor
ICAgICAgICByZXR1cm4gVGFrZXNTbG93UGF0aDsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8tPmNh
Y2hlVHlwZSAhPSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQYXRo
OyAvLyBUaGlzIGlzIGNvbnNlcnZhdGl2ZS4gSXQgY291bGQgYmUgdGhhdCB3ZSBoYXZlIG5vIGlu
Zm9ybWF0aW9uLgorICAgIAorICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8t
PnUuc3R1YjsKKyAgICBJbnN0YW5jZU9mU3RhdHVzIHJlc3VsdDsKKyAgICBmb3IgKHVuc2lnbmVk
IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsK
KyAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsK
KyAgICAgICAgCisgICAgICAgIGlmIChhY2Nlc3MudHlwZSgpID09IEFjY2Vzc0Nhc2U6Okluc3Rh
bmNlT2ZHZW5lcmljKQorICAgICAgICAgICAgcmV0dXJuIFRha2VzU2xvd1BhdGg7CisgICAgICAg
IAorICAgICAgICBpZiAoIWFjY2Vzcy5jb25kaXRpb25TZXQoKS5zdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBUYWtlc1Nsb3dQYXRoOworICAgICAgICAKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZFZhcmlhbnQoSW5zdGFuY2VPZlZhcmlhbnQoCisgICAgICAgICAg
ICBhY2Nlc3Muc3RydWN0dXJlKCksCisgICAgICAgICAgICBhY2Nlc3MuY29uZGl0aW9uU2V0KCks
CisgICAgICAgICAgICBhY2Nlc3MuYXM8SW5zdGFuY2VPZkFjY2Vzc0Nhc2U+KCkucHJvdG90eXBl
KCksCisgICAgICAgICAgICBhY2Nlc3MudHlwZSgpID09IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZI
aXQpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworSlNPYmplY3QqIEluc3RhbmNlT2ZTdGF0dXM6OmNvbW1vblByb3RvdHlw
ZSgpIGNvbnN0Cit7CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IG51bGxwdHI7CisgICAgZm9y
IChjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKKyAgICAg
ICAgaWYgKCFwcm90b3R5cGUpIHsKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IHZhcmlhbnQucHJv
dG90eXBlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cHJvdG90eXBlICE9IHZhcmlhbnQucHJvdG90eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwordm9pZCBJbnN0YW5jZU9m
U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQpCit7CisgICAg
aWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm47CisgICAgZmlsdGVySUNTdGF0
dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzdHJ1Y3R1cmVTZXQpOworICAgIGlmIChtX3ZhcmlhbnRz
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dGFuY2VPZlN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0YW5jZU9mU3RhdHVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkNvbmN1
cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJJbnN0YW5jZU9mVmFyaWFudC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQWNjZXNzQ2FzZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJl
U3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKKworY2xh
c3MgSW5zdGFuY2VPZlN0YXR1cyB7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAg
IC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9J
bmZvcm1hdGlvbiwKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGluIGEgc2ltcGxl
IHdheS4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAKKyAgICAgICAgLy8gSXQncyBrbm93biB0
byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgVGFrZXNTbG93UGF0aAorICAgIH07Cisg
ICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0
aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSW5zdGFuY2VPZlN0YXR1cyhTdGF0ZSBzdGF0
ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRl
ID09IE5vSW5mb3JtYXRpb24gfHwgc3RhdGUgPT0gVGFrZXNTbG93UGF0aCk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBJbnN0YW5jZU9mU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgU3R1
YkluZm9NYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyNlbmRpZgorICAg
IAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIAorICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0K
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQor
ICAgIAorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBs
ZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0g
VGFrZXNTbG93UGF0aDsgfQorICAgIAorICAgIEpTT2JqZWN0KiBjb21tb25Qcm90b3R5cGUoKSBj
b25zdDsKKyAgICAKKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3Zh
cmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxJbnN0YW5jZU9mVmFyaWFudCwgMj4m
IHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IEluc3Rh
bmNlT2ZWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNb
aW5kZXhdOyB9CisgICAgY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIHZvaWQgZmlsdGVyKGNv
bnN0IFN0cnVjdHVyZVNldCYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIHZvaWQgYXBwZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9m
VmFyaWFudCYpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9yPEluc3RhbmNl
T2ZWYXJpYW50LCAyPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZW
YXJpYW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdGFuY2VPZlZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3RhbmNlT2ZWYXJpYW50LmgiCisKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitJbnN0YW5jZU9mVmFyaWFudDo6SW5zdGFuY2VPZlZhcmlhbnQoCisgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSwgYm9vbCBpc0hpdCkKKyAg
ICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNv
bmRpdGlvblNldCkKKyAgICAsIG1fcHJvdG90eXBlKHByb3RvdHlwZSkKKyAgICAsIG1faXNIaXQo
aXNIaXQpCit7Cit9CisKK2Jvb2wgSW5zdGFuY2VPZlZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNv
bnN0IEluc3RhbmNlT2ZWYXJpYW50JiBvdGhlcikKK3sKKyAgICBpZiAobV9wcm90b3R5cGUgIT0g
b3RoZXIubV9wcm90b3R5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAo
bV9pc0hpdCAhPSBvdGhlci5tX2lzSGl0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25k
aXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgaWYgKCFtZXJn
ZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9j
b25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgCisgICAgbV9zdHJ1Y3R1cmVT
ZXQubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOworICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEluc3RhbmNlT2ZWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCit2b2lkIEluc3RhbmNl
T2ZWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8
ZW1wdHk+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KAor
ICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsIGlu
Q29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICIsIgorICAgICAgICAiIHByb3RvdHlw
ZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fcHJvdG90eXBlKSwgY29udGV4dCksICIsIgorICAg
ICAgICAiIGlzSGl0ID0gIiwgbV9pc0hpdCwgIj4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5j
ZU9mVmFyaWFudC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0YW5jZU9mVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSW5zdGFuY2VPZlN0
YXR1czsKKworY2xhc3MgSW5zdGFuY2VPZlZhcmlhbnQgeworcHVibGljOgorICAgIEluc3RhbmNl
T2ZWYXJpYW50KCkgeyB9CisgICAgSW5zdGFuY2VPZlZhcmlhbnQoY29uc3QgU3RydWN0dXJlU2V0
JiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBKU09iamVjdCogcHJvdG90eXBl
LCBib29sIGlzSGl0KTsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KKyAgICAKKyAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9
CisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNl
dDsgfQorICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpTT2Jq
ZWN0KiBwcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgIAorICAg
IGJvb2wgaXNIaXQoKSBjb25zdCB7IHJldHVybiBtX2lzSGl0OyB9CisgICAgCisgICAgYm9vbCBh
dHRlbXB0VG9NZXJnZShjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgb3RoZXIpOworICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBJbnN0YW5jZU9mU3RhdHVzOworICAgIAorICAgIFN0cnVjdHVyZVNldCBtX3N0
cnVjdHVyZVNldDsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNl
dDsKKyAgICBKU09iamVjdCogbV9wcm90b3R5cGUgPSBudWxscHRyOworICAgIGJvb2wgbV9pc0hp
dCB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShy
ZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIFN0cnVjdHVy
ZVN0dWJJbmZvOjpTdHJ1Y3R1cmVTdHViSW5mbyhBY2MKICAgICAsIHRvb2tTbG93UGF0aChmYWxz
ZSkKICAgICAsIGV2ZXJDb25zaWRlcmVkKGZhbHNlKQogICAgICwgcHJvdG90eXBlSXNLbm93bk9i
amVjdChmYWxzZSkKKyAgICAsIHNhd05vbkNlbGwoZmFsc2UpCiB7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShy
ZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtOTAsOCArOTAsMTAgQEAgcHVibGljOgog
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjb25zaWRlckNhY2hpbmcoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgLy8gV2UgbmV2ZXIgY2Fj
aGUgbm9uLWNlbGxzLgotICAgICAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgaWYgKCFzdHJ1
Y3R1cmUpIHsKKyAgICAgICAgICAgIHNhd05vbkNlbGwgPSB0cnVlOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIG1ldGhvZCBp
cyBjYWxsZWQgZnJvbSB0aGUgT3B0aW1pemUgdmFyaWFudHMgb2YgSUMgc2xvdyBwYXRocy4gVGhl
IGZpcnN0IHBhcnQgb2YgdGhpcwogICAgICAgICAvLyBtZXRob2QgdHJpZXMgdG8gZGV0ZXJtaW5l
IGlmIHRoZSBPcHRpbWl6ZSB2YXJpYW50IHNob3VsZCByZWFsbHkgYmVoYXZlIGxpa2UgdGhlCkBA
IC0yMTksNiArMjIxLDcgQEAgcHVibGljOgogICAgIGJvb2wgdG9va1Nsb3dQYXRoIDogMTsKICAg
ICBib29sIGV2ZXJDb25zaWRlcmVkIDogMTsKICAgICBib29sIHByb3RvdHlwZUlzS25vd25PYmpl
Y3QgOiAxOyAvLyBPbmx5IHJlbGV2YW50IGZvciBJbnN0YW5jZU9mLgorICAgIGJvb2wgc2F3Tm9u
Q2VsbCA6IDE7CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRTdHJ1Y3R1cmVTdHViSW5mb0Nv
ZGVPcmlnaW4oU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZvKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRT
dGF0dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKLQorI2luY2x1ZGUgPHd0Zi9Cb29s
ZWFuTGF0dGljZS5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0zMzcxLDYgKzMzNzEsNDAgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjbG9iYmVyV29ybGQo
KTsKICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKKyAgICAgICAgCisgICAgICAgIEJvb2xl
YW5MYXR0aWNlIHJlc3VsdCA9IEJvb2xlYW5MYXR0aWNlOjpCb3R0b207CisgICAgICAgIGZvciAo
TWF0Y2hTdHJ1Y3R1cmVWYXJpYW50JiB2YXJpYW50IDogbm9kZS0+bWF0Y2hTdHJ1Y3R1cmVEYXRh
KCkudmFyaWFudHMpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJl
ID0gdmFyaWFudC5zdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAoIWJhc2UuY29udGFpbnMoc3Ry
dWN0dXJlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgYmFzZVNldC5tZXJnZShzdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmVzdWx0ID0gbHVi
Qm9vbGVhbkxhdHRpY2UocmVzdWx0LCB2YXJpYW50LnJlc3VsdCA/IEJvb2xlYW5MYXR0aWNlOjpU
cnVlIDogQm9vbGVhbkxhdHRpY2U6OkZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpIHx8IGJhc2VTZXQuc2l6ZSgpIDwg
YmFzZS5tX3N0cnVjdHVyZS5zaXplKCkpCisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29u
c3RhbnRzKHRydWUpOworICAgICAgICAKKyAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBiYXNlU2V0KSA9PSBDb250cmFkaWN0aW9uKQor
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgIGNhc2UgQm9vbGVhbkxhdHRpY2U6OkZhbHNlOgor
ICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCb29sZWFuTGF0dGljZTo6VHJ1ZToKKyAgICAgICAg
ICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbih0cnVlKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShu
b2RlLCBTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMzE5NjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNs
dWRlICJJbnN0YW5jZU9mU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTRml4ZWRBcnJheS5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKQEAg
LTQ3ODMsMTIgKzQ3ODQsNDAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mOiB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHR1cm4gdGhpcyBpbnRvIGVpdGhlciBhIENoZWNrU3Ry
dWN0dXJlIGZvbGxvd2VkIGJ5IGEgY29uc3RhbnQsIG9yCi0gICAgICAgICAgICAvLyBzb21lIGtp
bmQgb2YgTXVsdGlJbnN0YW5jZU9mIHRoaW5nLCBpZiB0aGUgSW5zdGFuY2VPZiBJQyBpcyBzdGFi
bGUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg1Njk1CiAgICAgICAgICAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0
PE9wSW5zdGFuY2VvZio+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEluc3RhbmNlT2ZTdGF0dXMgc3RhdHVzID0gSW5zdGFuY2VPZlN0YXR1czo6Y29tcHV0
ZUZvcigKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ss
IG1faW5saW5lU3RhY2tUb3AtPm1fc3R1YkluZm9zLAorICAgICAgICAgICAgICAgIG1fY3VycmVu
dEluZGV4KTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLnZhbHVlKCkpKTsKICAgICAgICAgICAgIE5vZGUqIHByb3Rv
dHlwZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUucHJvdG90eXBlKCkpKTsKKworICAg
ICAgICAgICAgLy8gT25seSBpbmxpbmUgaXQgaWYgaXQncyBTaW1wbGUgd2l0aCBhIGNvbW1vblBy
b3RvdHlwZTsgYm90dG9tL3RvcCBvciB2YXJpYWJsZQorICAgICAgICAgICAgLy8gcHJvdG90eXBl
cyBib3RoIGdldCBoYW5kbGVkIGJ5IHRoZSBJQy4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgYm90dG9t
ICh1bnByb2ZpbGVkKQorICAgICAgICAgICAgLy8gaW5zdGFuY2VvZiBJQ3MgYmVjYXVzZSB0aGUg
cHJvZml0IG9mIHRoaXMgb3B0aW1pemF0aW9uIGlzIGZhaXJseSBsb3cuIFNvLCBpbiB0aGUKKyAg
ICAgICAgICAgIC8vIGFic2VuY2Ugb2YgYW55IGluZm9ybWF0aW9uLCBpdCdzIGJldHRlciB0byBh
dm9pZCBtYWtpbmcgdGhpcyBiZSB0aGUgY2F1c2Ugb2YgYQorICAgICAgICAgICAgLy8gcmVjb21w
aWxhdGlvbi4KKyAgICAgICAgICAgIGlmIChKU09iamVjdCogY29tbW9uUHJvdG90eXBlID0gc3Rh
dHVzLmNvbW1vblByb3RvdHlwZSgpKSB7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjb21tb25Qcm90b3R5cGUpKSwgcHJvdG90eXBl
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZURhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fbWF0Y2hTdHJ1Y3R1cmVEYXRhLmFkZCgpOworICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFu
dHMoKSkgeworICAgICAgICAgICAgICAgICAgICBjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlh
bnQuc3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hdGNoU3RydWN0
dXJlVmFyaWFudCBtYXRjaFZhcmlhbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFZh
cmlhbnQuc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hWYXJpYW50LnJlc3VsdCA9IHZhcmlhbnQuaXNI
aXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS0+dmFyaWFudHMuYXBwZW5kKG1hdGNoVmFyaWFudCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Tm9kZSogbWF0Y2ggPSBhZGRUb0dyYXBoKE1hdGNoU3RydWN0dXJlLCBPcEluZm8oZGF0YSksIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdCgp
KSwgbWF0Y2gpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3RhbmNlb2YpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLmRzdCgpKSwgYWRkVG9HcmFwaChJbnN0YW5jZU9mLCB2YWx1ZSwgcHJvdG90
eXBlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbnN0YW5jZW9mKTsKICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlz
aW9uIDIzMTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NDUsNiArNTQ1LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEo
KSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IE1hdGNoU3RydWN0dXJlOgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAg
ICAgIHJldHVybjsKIAogICAgIGNhc2UgQXJyYXlTbGljZToKICAgICAgICAgcmVhZChNaXNjRmll
bGRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ4OSw2ICs0ODksMzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgICAg
ICBFZGdlIGJhc2VFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSog
YmFzZSA9IGJhc2VFZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZURh
dGEmIGRhdGEgPSBub2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2VWYWx1ZSA9IG1fc3RhdGUuZm9yTm9k
ZShiYXNlKTsKKworICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleElu
QmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRl
IGJlZm9yZS4KKyAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0
IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBCb29sZWFuTGF0dGljZSByZXN1bHQg
PSBCb29sZWFuTGF0dGljZTo6Qm90dG9tOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghYmFzZVZhbHVlLmNvbnRhaW5zKGRhdGEudmFyaWFudHNbaV0uc3RydWN0dXJlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJp
YW50cy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbHViQm9vbGVhbkxhdHRpY2UocmVzdWx0LCBkYXRhLnZh
cmlhbnRzW2ldLnJlc3VsdCA/IEJvb2xlYW5MYXR0aWNlOjpUcnVlIDogQm9vbGVhbkxhdHRpY2U6
OkZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBCb29sZWFuTGF0dGljZTo6RmFsc2UgfHwgcmVzdWx0ID09IEJv
b2xlYW5MYXR0aWNlOjpUcnVlKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmVTZXQgc3RydWN0dXJlU2V0OworICAgICAgICAgICAgICAgICAgICBmb3IgKE1hdGNoU3Ry
dWN0dXJlVmFyaWFudCYgdmFyaWFudCA6IGRhdGEudmFyaWFudHMpCisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRkKHZhcmlhbnQuc3RydWN0dXJlKTsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdHJ1
Y3R1cmVTZXQpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50
KAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwgbV9ncmFwaC5mcmVlemUoanNCb29sZWFu
KHJlc3VsdCA9PSBCb29sZWFuTGF0dGljZTo6VHJ1ZSkpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBHZXRCeUlkRGlyZWN0OgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkRGlyZWN0Rmx1
c2g6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBBdG9taWNzU3ViOgogICAgIGNhc2UgQXRvbWljc1hvcjoK
ICAgICBjYXNlIEF0b21pY3NJc0xvY2tGcmVlOgorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgUHVzaFdpdGhTY29wZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjMx
OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ1NCw2ICsxNDU0LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1
cmU6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgYSB2YXJpYW50IG9mIE1hdGNo
U3RydWN0dXJlIHRoYXQgZG9lc24ndCBkbyBhIGNlbGwgY2hlY2suCisgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Nzg0CisgICAgICAgICAg
ICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKQogICAgICAg
ICAgICAgICAgICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMzE5NjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjkzLDYgKzI5MywxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNv
bnN0CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUo
KTsgKytpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS52YXJp
YW50c1tpXSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzTWF0Y2hTdHJ1Y3R1
cmVEYXRhKCkpIHsKKyAgICAgICAgZm9yIChNYXRjaFN0cnVjdHVyZVZhcmlhbnQmIHZhcmlhbnQg
OiBub2RlLT5tYXRjaFN0cnVjdHVyZURhdGEoKS52YXJpYW50cykKKyAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgaW5Db250ZXh0KCp2YXJpYW50LnN0cnVjdHVyZS5nZXQoKSwgY29udGV4dCks
ICI9PiIsIHZhcmlhbnQucmVzdWx0KTsKKyAgICB9CiAgICAgQVNTRVJUKG5vZGUtPmhhc1Zhcmlh
YmxlQWNjZXNzRGF0YSgqdGhpcykgPT0gbm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpOwogICAg
IGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNTIsNiArMTA1Miw3IEBAIHB1YmxpYzoKICAgICBCYWc8U3dpdGNo
RGF0YT4gbV9zd2l0Y2hEYXRhOwogICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9tdWx0
aUdldEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVsdGlQ
dXRCeU9mZnNldERhdGE7CisgICAgQmFnPE1hdGNoU3RydWN0dXJlRGF0YT4gbV9tYXRjaFN0cnVj
dHVyZURhdGE7CiAgICAgQmFnPE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE+IG1fb2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YTsKICAgICBCYWc8Q2FsbFZhcmFyZ3NEYXRhPiBtX2NhbGxWYXJhcmdz
RGF0YTsKICAgICBCYWc8TG9hZFZhcmFyZ3NEYXRhPiBtX2xvYWRWYXJhcmdzRGF0YTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHJldmlzaW9uIDIz
MTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2NCwxNSArMjY0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oZGF0YS5wcmVIZWFkZXIpOwotICAg
ICAgICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpIHsKLSAgICAg
ICAgICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAg
ICAgICAgICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0
IHNhZmUgdG8gZXhlY3V0ZS5cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2lu
YWxPcmlnaW4gPSBub2RlLT5vcmlnaW47CisgICAgICAgIGJvb2wgY2FuU3BlY3VsYXRlQmxpbmRs
eSA9ICFtX2dyYXBoLmhhc0dsb2JhbEV4aXRTaXRlKG9yaWdpbmFsT3JpZ2luLnNlbWFudGljLCBI
b2lzdGluZ0ZhaWxlZCk7CiAKICAgICAgICAgLy8gTk9URTogV2UgY291bGQganVzdCB1c2UgQmFj
a3dhcmRzRG9taW5hdG9ycyBoZXJlIGRpcmVjdGx5LCBzaW5jZSB3ZSBhbHJlYWR5IGtub3cgdGhh
dCB0aGUKICAgICAgICAgLy8gcHJlSGVhZGVyIGRvbWluYXRlcyBmcm9tQmxvY2suIEJ1dCB3ZSB3
b3VsZG4ndCBnZXQgYW55dGhpbmcgZnJvbSBiZWluZyBzbyBjbGV2ZXIsIHNpbmNlCkBAIC0yODAs
OCArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBhZGRzQmxpbmRTcGVjdWxhdGlvbiA9
IG1heUV4aXQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZSkKICAgICAgICAgICAgICYmICFtX2dyYXBo
Lm1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMtPmRvbWluYXRlc0VxdWl2YWxlbnRseShkYXRh
LnByZUhlYWRlciwgZnJvbUJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChhZGRzQmxpbmRT
cGVjdWxhdGlvbgotICAgICAgICAgICAgJiYgbV9ncmFwaC5oYXNHbG9iYWxFeGl0U2l0ZShvcmln
aW5hbE9yaWdpbi5zZW1hbnRpYywgSG9pc3RpbmdGYWlsZWQpKSB7CisgICAgICAgIGlmIChhZGRz
QmxpbmRTcGVjdWxhdGlvbiAmJiAhY2FuU3BlY3VsYXRlQmxpbmRseSkgewogICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAg
ICAgICAiICAgIE5vdCBob2lzdGluZyAiLCBub2RlLCAiIGJlY2F1c2UgaXQgbWF5IGV4aXQgYW5k
IHRoZSBwcmUtaGVhZGVyICgiLApAQCAtMjkxLDIyICsyODQsNjEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gRm9y
IGFic3RyYWN0IGludGVycHJldGF0aW9uLCB0aGVzZSBhcmUgaW4gdGhlIHJldmVyc2Ugb3JkZXIg
dGhhdCB0aGV5IGFwcGVhciBpbiB0aGlzCisgICAgICAgIC8vIHZlY3Rvci4KKyAgICAgICAgVmVj
dG9yPE5vZGUqLCAyPiBob2lzdGVkTm9kZXNSZXZlcnNlOworICAgICAgICBob2lzdGVkTm9kZXNS
ZXZlcnNlLmFwcGVuZChub2RlKTsKKworICAgICAgICBOb2RlT3JpZ2luIHRlcm1pbmFsT3JpZ2lu
ID0gZGF0YS5wcmVIZWFkZXItPnRlcm1pbmFsKCktPm9yaWdpbjsKKyAgICAgICAgCisgICAgICAg
IGF1dG8gaW5zZXJ0SG9pc3RlZE5vZGUgPSBbJl0gKE5vZGUqIG5vZGUpIHsKKyAgICAgICAgICAg
IGRhdGEucHJlSGVhZGVyLT5pbnNlcnRCZWZvcmVUZXJtaW5hbChub2RlKTsKKyAgICAgICAgICAg
IG5vZGUtPm93bmVyID0gZGF0YS5wcmVIZWFkZXI7CisgICAgICAgICAgICBub2RlLT5vcmlnaW4g
PSB0ZXJtaW5hbE9yaWdpbi53aXRoU2VtYW50aWMobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAg
ICAgICAgICAgIG5vZGUtPm9yaWdpbi53YXNIb2lzdGVkIHw9IGFkZHNCbGluZFNwZWN1bGF0aW9u
OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaWYgKCFzYWZlVG9FeGVjdXRlKG1fc3Rh
dGUsIG1fZ3JhcGgsIG5vZGUpKSB7CisgICAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIHJlc2N1
ZSB0aGUgc2l0dWF0aW9uIGJ5IGluc2VydGluZyBibGluZCBzcGVjdWxhdGlvbnMuCisgICAgICAg
ICAgICBib29sIGlnbm9yZUVtcHR5Q2hpbGRyZW4gPSB0cnVlOworICAgICAgICAgICAgaWYgKGNh
blNwZWN1bGF0ZUJsaW5kbHkKKyAgICAgICAgICAgICAgICAmJiBzYWZlVG9FeGVjdXRlKG1fc3Rh
dGUsIG1fZ3JhcGgsIG5vZGUsIGlnbm9yZUVtcHR5Q2hpbGRyZW4pKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgUmVzY3VpbmcgaG9pc3RpbmcgYnkgaW5zZXJ0aW5nIGVtcHR5
IGNoZWNrcy5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2dyYXBo
LmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgWyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISht
X3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGNoZWNrID0gbV9ncmFwaC5hZGROb2RlKENoZWNrTm90RW1w
dHksIG9yaWdpbmFsT3JpZ2luLCBFZGdlKGVkZ2Uubm9kZSgpLCBVbnR5cGVkVXNlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRIb2lzdGVkTm9kZShjaGVjayk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBob2lzdGVkTm9kZXNSZXZlcnNlLmFwcGVuZChjaGVjayk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0
IHNhZmUgdG8gZXhlY3V0ZS5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAg
ICIgICAgSG9pc3RpbmcgIiwgbm9kZSwgIiBmcm9tICIsICpmcm9tQmxvY2ssICIgdG8gIiwgKmRh
dGEucHJlSGVhZGVyLAogICAgICAgICAgICAgICAgICJcbiIpOwogICAgICAgICB9CiAKLSAgICAg
ICAgZGF0YS5wcmVIZWFkZXItPmluc2VydEJlZm9yZVRlcm1pbmFsKG5vZGUpOwotICAgICAgICBu
b2RlLT5vd25lciA9IGRhdGEucHJlSGVhZGVyOwotICAgICAgICBOb2RlT3JpZ2luIHRlcm1pbmFs
T3JpZ2luID0gZGF0YS5wcmVIZWFkZXItPnRlcm1pbmFsKCktPm9yaWdpbjsKLSAgICAgICAgbm9k
ZS0+b3JpZ2luID0gdGVybWluYWxPcmlnaW4ud2l0aFNlbWFudGljKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7Ci0gICAgICAgIG5vZGUtPm9yaWdpbi53YXNIb2lzdGVkIHw9IGFkZHNCbGluZFNwZWN1
bGF0aW9uOworICAgICAgICBpbnNlcnRIb2lzdGVkTm9kZShub2RlKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFdlIGNhbiB0cnVzdCB3aGF0IEFJIHByb3ZlcyBhYm91dCBlZGdlIHByb29mIHN0YXR1
c2VzIHdoZW4gaG9pc3RpbmcgdG8gdGhlIHByZWhlYWRlci4KICAgICAgICAgbV9zdGF0ZS50cnVz
dEVkZ2VQcm9vZnMoKTsKICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oZGF0YS5wcmVIZWFk
ZXIpOwotICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUobm9kZSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGhvaXN0ZWROb2Rlc1JldmVyc2Uuc2l6ZSgpOyBpLS07KQorICAgICAgICAg
ICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGhvaXN0ZWROb2Rlc1JldmVyc2VbaV0pOwogICAgICAg
ICAvLyBIb3dldmVyLCB3aGVuIHdhbGtpbmcgdmFyaW91cyBpbm5lciBsb29wcyBiZWxvdywgdGhl
IHByb29mIHN0YXR1cyBvZgogICAgICAgICAvLyBhbiBlZGdlIG1heSBiZSB0cml2aWFsbHkgdHJ1
ZSwgZXZlbiBpZiBpdCdzIG5vdCB0cnVlIGluIHRoZSBwcmVoZWFkZXIKICAgICAgICAgLy8gd2Ug
aG9pc3QgdG8uIFdlIGRvbid0IGFsbG93IHRoZSBiZWxvdyBub2RlIGV4ZWN1dGlvbnMgdG8gY2hh
bmdlIHRoZQpAQCAtMzQwLDcgKzM3Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoc3Vi
UHJlSGVhZGVyID09IGRhdGEucHJlSGVhZGVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oc3ViUHJlSGVhZGVyKTsKLSAgICAgICAg
ICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShub2RlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGhvaXN0ZWROb2Rlc1JldmVyc2Uuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAg
IG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShob2lzdGVkTm9kZXNSZXZlcnNlW2ldKTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3
LDYgKzk3LDE1IEBAIHZvaWQgTm9kZTo6cmVtb3ZlKEdyYXBoJiBncmFwaCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBNYXRjaFN0cnVjdHVyZTogeworICAgICAg
ICBNYXRjaFN0cnVjdHVyZURhdGEmIGRhdGEgPSBtYXRjaFN0cnVjdHVyZURhdGEoKTsKKyAgICAg
ICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBzZXQ7CisgICAgICAgIGZvciAoTWF0Y2hTdHJ1Y3R1
cmVWYXJpYW50JiB2YXJpYW50IDogZGF0YS52YXJpYW50cykKKyAgICAgICAgICAgIHNldC5hZGQo
dmFyaWFudC5zdHJ1Y3R1cmUpOworICAgICAgICBjb252ZXJ0VG9DaGVja1N0cnVjdHVyZShncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQoc2V0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAg
IAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGlmIChmbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsMTUgQEAgc3Ry
dWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgp
IGNvbnN0OwogfTsKIAorc3RydWN0IE1hdGNoU3RydWN0dXJlVmFyaWFudCB7CisgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmU7CisgICAgYm9vbCByZXN1bHQ7Cit9OworCitzdHJ1Y3Qg
TWF0Y2hTdHJ1Y3R1cmVEYXRhIHsKKyAgICBWZWN0b3I8TWF0Y2hTdHJ1Y3R1cmVWYXJpYW50LCAy
PiB2YXJpYW50czsKK307CisKIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogICAgIHVuaW9u
IHsKICAgICAgICAgc3RydWN0IHsKQEAgLTE4NTMsNiArMTg2MiwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAqbV9vcEluZm8uYXM8TXVsdGlQdXRCeU9mZnNldERhdGEqPigpOwogICAgIH0K
ICAgICAKKyAgICBib29sIGhhc01hdGNoU3RydWN0dXJlRGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gb3AoKSA9PSBNYXRjaFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgTWF0Y2hTdHJ1
Y3R1cmVEYXRhJiBtYXRjaFN0cnVjdHVyZURhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhh
c01hdGNoU3RydWN0dXJlRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuICptX29wSW5mby5hczxNYXRj
aFN0cnVjdHVyZURhdGEqPigpOworICAgIH0KKyAgICAKICAgICBib29sIGhhc09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMzE5NjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0Niw2ICszNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oT3ZlcnJpZGVzSGFzSW5zdGFuY2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0
Qm9vbGVhbikgXAogICAgIG1hY3JvKEluc3RhbmNlT2YsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKEluc3RhbmNlT2ZDdXN0b20sIE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbikgXAorICAgIG1hY3JvKE1hdGNoU3RydWN0dXJlLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgbWFjcm8o
SXNDZWxsV2l0aFR5cGUsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNFbXB0eSwg
Tm9kZVJlc3VsdEJvb2xlYW4pIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODY0LDcgKzg2NCw4IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgSXNPYmplY3RPck51bGw6CiAgICAgICAgIGNhc2UgSXNGdW5jdGlv
bjoKICAgICAgICAgY2FzZSBJc0NlbGxXaXRoVHlwZToKLSAgICAgICAgY2FzZSBJc1R5cGVkQXJy
YXlWaWV3OiB7CisgICAgICAgIGNhc2UgSXNUeXBlZEFycmF5VmlldzoKKyAgICAgICAgY2FzZSBN
YXRjaFN0cnVjdHVyZTogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQsMTQgKzEzNCwxNCBAQCBwcml2YXRlOgogLy8gc2FmZWx5IGV4ZWN1dGUgYmVmb3JlIHRo
YXQgY2hlY2ssIHNvIGxvbmcgYXMgdGhhdCBjaGVjayBjb250aW51ZXMgdG8gZ3VhcmQgYW55CiAv
LyB1c2VyLW9ic2VydmFibGUgdGhpbmdzIGRvbmUgdG8gdGhlIGxvYWRlZCB2YWx1ZS4KIHRlbXBs
YXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQorYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlLCBib29sIGlnbm9yZUVtcHR5Q2hpbGRyZW4gPSBmYWxzZSkKIHsKICAgICBTYWZlVG9FeGVj
dXRlRWRnZTxBYnN0cmFjdFN0YXRlVHlwZT4gc2FmZVRvRXhlY3V0ZUVkZ2Uoc3RhdGUpOwogICAg
IERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCBzYWZlVG9FeGVjdXRlRWRnZSk7
CiAgICAgaWYgKCFzYWZlVG9FeGVjdXRlRWRnZS5yZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKHNhZmVUb0V4ZWN1dGVFZGdlLm1heVNlZUVtcHR5Q2hpbGQoKSkgewor
ICAgIGlmICghaWdub3JlRW1wdHlDaGlsZHJlbiAmJiBzYWZlVG9FeGVjdXRlRWRnZS5tYXlTZWVF
bXB0eUNoaWxkKCkpIHsKICAgICAgICAgLy8gV2UgY29uc2VydmF0aXZlbHkgYXNzdW1lIGlmIHRo
ZSBlbXB0eSB2YWx1ZSBmbG93cyBpbnRvIGEgbm9kZSwKICAgICAgICAgLy8gaXQgbWlnaHQgbm90
IGJlIGFibGUgdG8gaGFuZGxlIGl0IChlLmcsIGNyYXNoKS4gSW4gZ2VuZXJhbCwgdGhlIGJ5dGVj
b2RlIGdlbmVyYXRvcgogICAgICAgICAvLyBlbWl0cyBjb2RlIGluIHN1Y2ggYSB3YXkgdGhhdCBt
b3N0IG5vZGUgdHlwZXMgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgZW1wdHkgdmFsdWUK
QEAgLTQ1Miw2ICs0NTIsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBBdG9taWNzWG9yOgogICAgIGNhc2UgQXRvbWljc0lzTG9ja0ZyZWU6CiAg
ICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKKyAgICBjYXNlIE1hdGNoU3Ry
dWN0dXJlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgQXJyYXlTbGljZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkocmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2MCw2ICsz
MzYwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIE1hdGNoU3RydWN0dXJlOiB7Cisg
ICAgICAgIGNvbXBpbGVNYXRjaFN0cnVjdHVyZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKICAgICBjYXNlIEdldEdldHRlcjogewogICAgICAgICBjb21waWxlR2V0R2V0
dGVyKG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjMxOTYxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYyNyw2ICszNjI3LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNl
IE1hdGNoU3RydWN0dXJlOiB7CisgICAgICAgIGNvbXBpbGVNYXRjaFN0cnVjdHVyZShub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEdldEdldHRlcjogewog
ICAgICAgICBjb21waWxlR2V0R2V0dGVyKG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4MzMsNiArMTE4MzMsMzMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5T2Zmc2V0KAogICAgIG5vUmVzdWx0KG5vZGUpOwogfQog
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoTm9kZSogbm9kZSkK
K3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgIAorICAgIG1faml0
LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAKKyAgICBhdXRvJiB2YXJpYW50cyA9IG5vZGUtPm1h
dGNoU3RydWN0dXJlRGF0YSgpLnZhcmlhbnRzOworICAgIFZlY3RvcjxpbnQ2NF90PiBjYXNlczsK
KyAgICBmb3IgKE1hdGNoU3RydWN0dXJlVmFyaWFudCYgdmFyaWFudCA6IHZhcmlhbnRzKQorICAg
ICAgICBjYXNlcy5hcHBlbmQoYml0d2lzZV9jYXN0PGludDMyX3Q+KHZhcmlhbnQuc3RydWN0dXJl
LT5pZCgpKSk7CisgICAgCisgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaCh0ZW1wR1BSLCBj
YXNlcywgQmluYXJ5U3dpdGNoOjpJbnQzMik7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRv
bmU7CisgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKG1faml0KSkgeworICAgICAgICBt
X2ppdC5ib3hCb29sZWFuUGF5bG9hZCh2YXJpYW50c1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCld
LnJlc3VsdCwgdGVtcEdQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Cisg
ICAgfQorICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIG5vZGUs
IGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICAKKyAgICBibGVzc2VkQm9vbGVhblJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKK30KKwog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5v
ZGUpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShy
ZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNzUsNiArMTM3NSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNvbXBpbGVHZXRCeVZhbFdpdGhUaGlzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVH
ZXRCeU9mZnNldChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlPZmZzZXQoTm9kZSopOwor
ICAgIHZvaWQgY29tcGlsZU1hdGNoU3RydWN0dXJlKE5vZGUqKTsKICAgICAvLyBJZiB0aGlzIHJl
dHVybnMgZmFsc2UgaXQgbWVhbnMgdGhhdCB3ZSB0ZXJtaW5hdGVkIHNwZWN1bGF0aXZlIGV4ZWN1
dGlvbi4KICAgICBib29sIGdldEludFR5cGVkQXJyYXlTdG9yZU9wZXJhbmQoCiAgICAgICAgIEdQ
UlRlbXBvcmFyeSYgdmFsdWUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OSw2ICsz
NDksNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2Fz
ZSBQdXRCeVZhbEFsaWFzOgogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgY2FzZSBQdXRC
eVZhbFdpdGhUaGlzOgorICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgICAgIC8vIFRoZXNl
IGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIzMTk2MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTExLDYgKzkxMSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoK
ICAgICAgICAgICAgIGNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKKyAgICAgICAgICAgIGNvbXBpbGVNYXRj
aFN0cnVjdHVyZSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0R2xvYmFs
VmFyOgogICAgICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJpYWJsZToKICAgICAgICAgICAg
IGNvbXBpbGVHZXRHbG9iYWxWYXJpYWJsZSgpOwpAQCAtNjU5Miw2ICs2NTk1LDQ3IEBAIHByaXZh
dGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAg
IH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVNYXRjaFN0cnVjdHVyZSgpCisgICAgeworICAgICAg
ICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAg
ICAgICBNYXRjaFN0cnVjdHVyZURhdGEmIGRhdGEgPSBtX25vZGUtPm1hdGNoU3RydWN0dXJlRGF0
YSgpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgdHJ1ZUJsb2NrID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZmFsc2VCbG9jayA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGV4aXRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nr
c0JlZm9yZSh0cnVlQmxvY2spOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENhc2Us
IDI+IGNhc2VzOworICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CisgICAg
ICAgIGZvciAoTWF0Y2hTdHJ1Y3R1cmVWYXJpYW50JiB2YXJpYW50IDogZGF0YS52YXJpYW50cykg
eworICAgICAgICAgICAgYmFzZVNldC5hZGQodmFyaWFudC5zdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UoCisgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVy
ZUlEKHZhcmlhbnQuc3RydWN0dXJlKSwKKyAgICAgICAgICAgICAgICB2YXJpYW50LnJlc3VsdCA/
IHRydWVCbG9jayA6IGZhbHNlQmxvY2ssIFdlaWdodCgxKSkpOworICAgICAgICB9CisgICAgICAg
IGJvb2wgc3RydWN0dXJlc0NoZWNrZWQgPSBtX2ludGVycHJldGVyLmZvck5vZGUobV9ub2RlLT5j
aGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihiYXNlU2V0KTsKKyAgICAgICAgZW1pdFN3
aXRjaEZvck11bHRpQnlPZmZzZXQoYmFzZSwgc3RydWN0dXJlc0NoZWNrZWQsIGNhc2VzLCBleGl0
QmxvY2spOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8odHJ1ZUJsb2NrLCBmYWxz
ZUJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgdHJ1ZVJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhbHNlQmxvY2ssIGV4aXRCbG9jayk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhbHNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0
LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXRCbG9jaywgY29udGludWF0aW9uKTsKKyAg
ICAgICAgaWYgKCFzdHJ1Y3R1cmVzQ2hlY2tlZCkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRD
YWNoZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1f
b3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIs
IHRydWVSZXN1bHQsIGZhbHNlUmVzdWx0KSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGls
ZUdldEdsb2JhbFZhcmlhYmxlKCkKICAgICB7CiAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9h
ZDY0KG1fb3V0LmFic29sdXRlKG1fbm9kZS0+dmFyaWFibGVQb2ludGVyKCkpKSk7CkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMjMxOTYxKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAxOC0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIERGRyBzaG91bGQgaW5saW5lIEluc3RhbmNlT2YgSUNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2OTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEkgZm91bmQg
bXlzZWxmIG5lZWRpbmcgYSB3YXkgdG8gcmVwcmVzZW50IGJvdHRvbS9mYWxzZS90cnVlL3RvcCwg
c28gSSBjcmVhdGVkIGl0LgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogd3RmL0Jvb2xlYW5MYXR0aWNlLmg6IEFkZGVkLgorICAgICAgICAoV1RG
OjpsdWJCb29sZWFuTGF0dGljZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAg
ICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKwogMjAxOC0wNS0xNyAgSmlld2VuIFRhbiAgPGpp
ZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgQ2VydGlmaWNhdGVJbmZvIGlu
dG8gQ3JlZGVudGlhbCBpbiBVSSBQcm9jZXNzIGluc3RlYWQgb2YgTmV0d29ya2luZyBQcm9jZXNz
CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDIzMTk2MSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTIzOSw2ICsyMzksNyBAQAogCQkwRkIxNEUxODE4MEZBMjE4MDA5QjZC
NEQgLyogQmFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZCNEQgLyogQmFn
VG9IYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkIzMTdDMzFDNDg4MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2lu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1UcmFjaW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjM5OUI4MjBBRjVBNTgwMDE3RTIxMyAvKiBC
b29sZWFuTGF0dGljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb29sZWFu
TGF0dGljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0Njc4MjFGREUyODJC
MDAzRkNCMDkgLyogQ29uY3VycmVudEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb25jdXJyZW50QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQjQ2NzgzMUZERTI4MkMwMDNGQ0IwOSAvKiBDb25jdXJyZW50VmVjdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNDQ4ODIxNkZFOUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNzSUQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxMyw2ICs4MTQsNyBAQAogCQkJCTFBOTQ0RjQ2MUMzRDg4
MTQwMDVCRDI4QyAvKiBCbG9ja1B0ci5oICovLAogCQkJCUE4QTQ3MjY0MTUxQTgyNUEwMDQxMjNG
RiAvKiBCbG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZGIC8qIEJs
b29tRmlsdGVyLmggKi8sCisJCQkJMEZCMzk5QjgyMEFGNUE1ODAwMTdFMjEzIC8qIEJvb2xlYW5M
YXR0aWNlLmggKi8sCiAJCQkJMEY5MzI3NEExQzE3RjRCNzAwQ0Y2NTY0IC8qIEJveC5oICovLAog
CQkJCTdDM0Y3MjM5MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8sCiAJCQkJMEY0NTcw
NDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCAqLywKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0Jvb2xlYW5MYXR0aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQm9vbGVh
bkxhdHRpY2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Cb29sZWFuTGF0dGlj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2VudW0gY2xhc3MgQm9vbGVhbkxh
dHRpY2UgOiB1aW50OF90IHsKKyAgICBCb3R0b20gPSAwLAorICAgIEZhbHNlID0gMSwKKyAgICBU
cnVlID0gMiwKKyAgICBUb3AgPSAzCit9OworCitpbmxpbmUgQm9vbGVhbkxhdHRpY2UgbHViQm9v
bGVhbkxhdHRpY2UoQm9vbGVhbkxhdHRpY2UgYSwgQm9vbGVhbkxhdHRpY2UgYikKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Qm9vbGVhbkxhdHRpY2U+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGEp
IHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihiKSk7Cit9CisKK2lubGluZSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQm9vbGVhbkxhdHRpY2UgdmFsdWUpCit7CisgICAgc3dp
dGNoICh2YWx1ZSkgeworICAgIGNhc2UgQm9vbGVhbkxhdHRpY2U6OkJvdHRvbToKKyAgICAgICAg
b3V0LnByaW50KCJCb3R0b20iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9vbGVhbkxh
dHRpY2U6OkZhbHNlOgorICAgICAgICBvdXQucHJpbnQoIkZhbHNlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEJvb2xlYW5MYXR0aWNlOjpUcnVlOgorICAgICAgICBvdXQucHJpbnQoIlRy
dWUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9vbGVhbkxhdHRpY2U6OlRvcDoKKyAg
ICAgICAgb3V0LnByaW50KCJUb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNp
bmcgV1RGOjpCb29sZWFuTGF0dGljZTsKK3VzaW5nIFdURjo6bHViQm9vbGVhbkxhdHRpY2U7CisK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMzE5NjEpCisrKyBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCBzZXQo
V1RGX1BVQkxJQ19IRUFERVJTCiAgICAgQmxvY2tQdHIuaAogICAgIEJsb2NrU3RhY2suaAogICAg
IEJsb29tRmlsdGVyLmgKKyAgICBCb29sZWFuTGF0dGljZS5oCiAgICAgQm94LmgKICAgICBCcmln
YW5kLmgKICAgICBCdWJibGVTb3J0LmgK
</data>
<flag name="review"
          id="359001"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>