<?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>235581</bug_id>
          
          <creation_ts>2022-01-25 05:42:04 -0800</creation_ts>
          <short_desc>Add support for WASM branch hinting proposal</short_desc>
          <delta_ts>2022-01-28 21:12:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=235853</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tom Tartarin">tom</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tom</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1833678</commentid>
    <comment_count>0</comment_count>
    <who name="Tom Tartarin">tom</who>
    <bug_when>2022-01-25 05:42:04 -0800</bug_when>
    <thetext>See the proposal for a more detailed description: https://github.com/WebAssembly/branch-hinting.

This allows parsing a &quot;code_annotation.branch_hint&quot; custom section, as per the code annotation proposal: https://github.com/WebAssembly/annotations.
This section provides per function information about how likely a branch at a
given offset is to be taken. It is similar to branch weight metadata in LLVM.
For B3 and AIR this implies generating &quot;hinted&quot; blocks, whose frequencies are already set.

The provided test is inspired by how the name section is tested: a wasm file containing the encoded custom section is read, compiled and run. It only tests the integration of the WasmBranchHintsSectionParser in the parsing pipeline, since more accurate testing would require inspecting the internal state of the VM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833681</commentid>
    <comment_count>1</comment_count>
      <attachid>449921</attachid>
    <who name="Tom Tartarin">tom</who>
    <bug_when>2022-01-25 05:50:05 -0800</bug_when>
    <thetext>Created attachment 449921
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833684</commentid>
    <comment_count>2</comment_count>
      <attachid>449923</attachid>
    <who name="Tom Tartarin">tom</who>
    <bug_when>2022-01-25 06:14:37 -0800</bug_when>
    <thetext>Created attachment 449923
bug-235581: add support for WASM branch hinting proposal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833750</commentid>
    <comment_count>3</comment_count>
      <attachid>449921</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-25 09:48:49 -0800</bug_when>
    <thetext>Comment on attachment 449921
Patch

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

Nice!

&gt; Source/JavaScriptCore/b3/B3EstimateStaticExecutionCounts.cpp:45
&gt;          constexpr double base = 10.0;
&gt; +        if (block-&gt;isHinted())
&gt; +            continue;
&gt;          block-&gt;setFrequency(pow(base, naturalLoops.loopDepth(block)));

Should we treat the hint as a coefficient to this calculated count?
Let&apos;s consider that here is a block in the deep loop (4-depth). Then, the frequency becomes 10e4.
It is much higher than the hint&apos;s value (0 or 1.0). So, currently, if we use hint, it lowers the value compared to the value offered by static-execution-counts.

Background: In Wasm B3 IR generator, except for FrequencyClass::Rare, we are not attaching frequency and calculating it in this pass.
In JS, we are using execution counter to profile block&apos;s frequency and reflect it at runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833759</commentid>
    <comment_count>4</comment_count>
      <attachid>449921</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-25 10:11:02 -0800</bug_when>
    <thetext>Comment on attachment 449921
Patch

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

&gt;&gt; Source/JavaScriptCore/b3/B3EstimateStaticExecutionCounts.cpp:45
&gt;&gt;          block-&gt;setFrequency(pow(base, naturalLoops.loopDepth(block)));
&gt; 
&gt; Should we treat the hint as a coefficient to this calculated count?
&gt; Let&apos;s consider that here is a block in the deep loop (4-depth). Then, the frequency becomes 10e4.
&gt; It is much higher than the hint&apos;s value (0 or 1.0). So, currently, if we use hint, it lowers the value compared to the value offered by static-execution-counts.
&gt; 
&gt; Background: In Wasm B3 IR generator, except for FrequencyClass::Rare, we are not attaching frequency and calculating it in this pass.
&gt; In JS, we are using execution counter to profile block&apos;s frequency and reflect it at runtime.

Ah, let me wait. I&apos;m currently discussing with Saam about the way to use branch hinting.
It would be much simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833773</commentid>
    <comment_count>5</comment_count>
      <attachid>449921</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-25 10:39:27 -0800</bug_when>
    <thetext>Comment on attachment 449921
Patch

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

Your implementation in B3/Air is more complicated than it needs to be. All you need to do is set the FrequencyClass based on the hint. If the hint is Likely, set the taken side  &quot;Normal&quot; and not taken side &quot;Rare&quot;. If the hint is Unlikely, set it the taken side to &quot;Rare&quot; and the not taken sideT &quot;Normal&quot;. That&apos;ll get you the behavior you want. No need to change static execution count estimate, no need to add the &quot;isHinted&quot; stuff to any of the basic block classes.

&gt; Source/JavaScriptCore/b3/B3BasicBlock.h:150
&gt; +    void setHinted(bool hinted) { m_hinted = hinted; }

none of this is necessary. See my suggestion on how to implement this patch.

&gt; Source/JavaScriptCore/b3/air/AirBasicBlock.h:137
&gt; +    void setHinted(bool hinted) { m_hinted = hinted; }
&gt; +    bool isHinted() const { return m_hinted; }

none of this is necessary. See my suggestion on how to implement this patch.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2498
&gt; +auto B3IRGenerator::addIfWithHint(ExpressionType condition, BlockSignature signature, Stack&amp; enclosingStack, ControlType&amp; result, Stack&amp; newStack, const BranchHint&amp; hint) -&gt; PartialResult

ditto to what I wrote about the AirIRGenerator having two versions of this function.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2755
&gt; +    if (Options::useWebAssemblyBranchHints()) {
&gt; +        const BranchHint&amp; hint = m_info.getBranchHint(m_functionIndex, m_parser-&gt;currentOpcodeStartingOffset());
&gt; +        if (hint != BranchHint::Invalid)
&gt; +            return addBranchWithHint(data, condition, returnValues, hint);
&gt; +    }

Instead of the second &quot;addBranchWithHint&quot; function, just define default values for FrequencyClass for taken/not taken. Then if we find a branch hint inside the map, you can change the values of those frequency classes.

Also, no need for &quot;const BranchHint&amp;&quot;. Just &quot;BranchHint hint = m_info.get(...);&quot;

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2775
&gt; +auto B3IRGenerator::addBranchWithHint(ControlData&amp; data, ExpressionType condition, const Stack&amp; returnValues, const BranchHint&amp; hint) -&gt; PartialResult

You shouldn&apos;t use two versions of essentially an identical function. Just have default values for the FrequencyClass used and augment them when we have hint data.

&gt; Source/JavaScriptCore/wasm/WasmBranchHints.h:59
&gt; +    StdUnorderedMap&lt;uint32_t, BranchHint&gt; m_map;

you should use HashMap here (and with UnsignedWithZeroKeyHashTraits  if the branch offset can be zero)

&gt; Source/JavaScriptCore/wasm/WasmBranchHints.h:62
&gt; +

all functions below here can be constexpr.

Also, no need to really take in this enum as &quot;const BranchHint&amp;&quot;

&gt; Source/JavaScriptCore/wasm/WasmBranchHints.h:70
&gt; +inline BranchHint branchHintToInverse(const BranchHint&amp; hint)

branchHintToInverse =&gt; &quot;invertBranchHint&quot;

&gt; Source/JavaScriptCore/wasm/WasmBranchHints.h:84
&gt; +        break;

maybe just return false here?

&gt; Source/JavaScriptCore/wasm/WasmBranchHintsSectionParser.cpp:39
&gt; +    int64_t lastFunctionIndex = -1;

name nit: &quot;lastFunctionIndex&quot; =&gt; &quot;previousFunctionIndex&quot;

&gt; Source/JavaScriptCore/wasm/WasmBranchHintsSectionParser.cpp:46
&gt; +        WASM_PARSER_FAIL_IF(int64_t(functionIndex) &lt;= lastFunctionIndex, &quot;invalid function index &quot;, functionIndex, &quot; for function &quot;, i);

webkit style guide uses static_cast&lt;int64_t&gt;, not C style casts.

Also, is this really &quot;&lt;=&quot;? Why not strictly &quot;&lt;&quot;? The spec says we can keep having functions of the same index? That has consequences on your algorithm below using &quot;emplace&quot;

&gt; Source/JavaScriptCore/wasm/WasmBranchHintsSectionParser.cpp:60
&gt; +            WASM_PARSER_FAIL_IF(int64_t(branchOffset) &lt;= lastBranchOffset, &quot;invalid branch offset &quot;, branchOffset, &quot; for hint &quot;, j);

same nit regarding c style casts


Also, when using HashMap, we should fail if the branchOffset is either the empty or deleted value in the hash map. See the hash trait I was talking about:

template&lt;typename T&gt; struct UnsignedWithZeroKeyHashTraits : GenericHashTraits&lt;T&gt; {
    static constexpr bool emptyValueIsZero = false;
    static T emptyValue() { return std::numeric_limits&lt;T&gt;::max(); }
    static void constructDeletedValue(T&amp; slot) { slot = std::numeric_limits&lt;T&gt;::max() - 1; }
    static bool isDeletedValue(T value) { return value == std::numeric_limits&lt;T&gt;::max() - 1; }
};


Which in general should be fine. Nobody should be using such a large offset anyways.

Also, same question regarding &quot;&lt;=&quot; instead of &quot;&lt;&quot;

&gt; Source/JavaScriptCore/wasm/WasmBranchHintsSectionParser.cpp:71
&gt; +            BranchHint branchHint = static_cast&lt;BranchHint&gt;(int32_t(parsedBranchHint));

don&apos;t use C style cast here. But also, I don&apos;t see why it&apos;s necessary at all. Shouldn&apos;t static_cast&lt;BranchHint&gt;(parsedBranchHint) work?

&gt; Source/JavaScriptCore/wasm/WasmBranchHintsSectionParser.cpp:72
&gt; +            WASM_PARSER_FAIL_IF(!isValidBranchHint(branchHint), &quot;invalid branch hint value &quot;, parsedBranchHint, &quot; for hint &quot;, j);

how is this possible if we&apos;re parsing a VarUint1? The value has to be zero or one, right? Should this be an assert?

&gt; Source/JavaScriptCore/wasm/WasmBranchHintsSectionParser.cpp:74
&gt; +            branchHintsForFunction.insert(branchOffset, branchHint);

related question regarding the &quot;&lt;=&quot; above. If functionIndex already exists, what semantics do we want? Merge? Overwrite? Skip?

&gt; Source/JavaScriptCore/wasm/WasmBranchHintsSectionParser.cpp:76
&gt; +        m_info-&gt;branchHints.emplace(functionIndex, WTFMove(branchHintsForFunction));

related question regarding the &quot;&lt;=&quot; above. If functionIndex already exists, what semantics do we want? Merge? Overwrite? Skip?

&gt; Source/JavaScriptCore/wasm/WasmModuleInformation.h:40
&gt; +    using BranchHints = StdUnorderedMap&lt;uint32_t, BranchHintMap&gt;;

you should use HashMap here with UnsignedWithZeroKeyHashTraits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834013</commentid>
    <comment_count>6</comment_count>
    <who name="Tom Tartarin">tom</who>
    <bug_when>2022-01-26 01:23:33 -0800</bug_when>
    <thetext>Thank you for the detailed review. I will rework the patch and submit soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834368</commentid>
    <comment_count>7</comment_count>
      <attachid>450087</attachid>
    <who name="Tom Tartarin">tom</who>
    <bug_when>2022-01-26 17:20:24 -0800</bug_when>
    <thetext>Created attachment 450087
Updated patch after review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834884</commentid>
    <comment_count>8</comment_count>
      <attachid>450087</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-28 04:14:15 -0800</bug_when>
    <thetext>Comment on attachment 450087
Updated patch after review

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

r=me

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3186
&gt; +        if (hint == BranchHint::Unlikely)
&gt; +            takenFrequency = B3::FrequencyClass::Rare;
&gt; +        else if (hint == BranchHint::Likely)
&gt; +            notTakenFrequency = B3::FrequencyClass::Rare;

Let&apos;s use switch.

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3439
&gt; +        if (hint == BranchHint::Unlikely)
&gt; +            targetFrequency = B3::FrequencyClass::Rare;
&gt; +        else if (hint == BranchHint::Likely)
&gt; +            continuationFrequency = B3::FrequencyClass::Rare;

Ditto.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2486
&gt; +        if (hint == BranchHint::Unlikely)
&gt; +            takenFrequency = FrequencyClass::Rare;
&gt; +        else if (hint == BranchHint::Likely)
&gt; +            notTakenFrequency = FrequencyClass::Rare;

Let&apos;s use switch, which can ensure that all enums are handled.

switch (hint) {
case BranchHint::Unlikely:
    takenFrequency = FrequencyClass::Rare;
    break;
case BranchHint::Likely:
    notTakenFrequency = FrequencyClass::Rare;
    break;
}

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2742
&gt; +        if (hint == BranchHint::Unlikely)
&gt; +            targetFrequency = FrequencyClass::Rare;
&gt; +        else if (hint == BranchHint::Likely)
&gt; +            continuationFrequency = FrequencyClass::Rare;

Ditto.

&gt; Source/JavaScriptCore/wasm/WasmBranchHintsSectionParser.cpp:70
&gt; +            BranchHint branchHint = static_cast&lt;BranchHint&gt;(parsedBranchHint);

Let&apos;s add

ASSERT(isValidBranchHint(branchHint));

It should be due to parseVarUInt1. But such an ASSERT is helpful if this branch hint is extended to have more values (then, assert hits and we can fix the issue :)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834907</commentid>
    <comment_count>9</comment_count>
      <attachid>450230</attachid>
    <who name="Tom Tartarin">tom</who>
    <bug_when>2022-01-28 06:31:10 -0800</bug_when>
    <thetext>Created attachment 450230
Use switch instead of if else. Add ASSERT for branch hint validation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834908</commentid>
    <comment_count>10</comment_count>
    <who name="Tom Tartarin">tom</who>
    <bug_when>2022-01-28 06:38:37 -0800</bug_when>
    <thetext>Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835108</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-28 12:49:23 -0800</bug_when>
    <thetext>Committed r288758 (246546@main): &lt;https://commits.webkit.org/246546@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 450230.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835109</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-28 12:50:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/88199746&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449921</attachid>
            <date>2022-01-25 05:50:05 -0800</date>
            <delta_ts>2022-01-26 17:20:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235581-20220125145112.patch</filename>
            <type>text/plain</type>
            <size>48350</size>
            <attacher name="Tom Tartarin">tom</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MWQyYThiYmNkNGUwOGI5YWFhYThhMTQ4YjQyNDM2MGRkNzg1MDdiLi5mNjlkZjI5NGU0MzZlM2Nl
OGY4YTljYTQ5YWRiNWI5YzMzMGI2Y2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NSBAQAorMjAyMi0wMS0yNSAgVG9tIFRhcnRhcmluICA8dG9tQGxlYW5pbmd0ZWNoLmNv
bT4KKworICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3IgV2ViQXNzZW1ibHkgYnJhbmNoIGhp
bnRpbmcgcHJvcG9zYWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNTU4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFNlZSB0aGUgcHJvcG9zYWwgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbjog
aHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2JyYW5jaC1oaW50aW5nLgorICAgICAgICBU
aGlzIGFsbG93cyBwYXJzaW5nIGEgImNvZGVfYW5ub3RhdGlvbi5icmFuY2hfaGludCIgY3VzdG9t
IHNlY3Rpb24sCisgICAgICAgIGFzIHBlciB0aGUgY29kZSBhbm5vdGF0aW9uIHByb3Bvc2FsOiBo
dHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvYW5ub3RhdGlvbnMuCisgICAgICAgIFRoaXMg
c2VjdGlvbiBwcm92aWRlcyBwZXIgZnVuY3Rpb24gaW5mb3JtYXRpb24gYWJvdXQgaG93IGxpa2Vs
eSBhIGJyYW5jaCBhdCBhCisgICAgICAgIGdpdmVuIG9mZnNldCBpcyB0byBiZSB0YWtlbi4gSXQg
aXMgc2ltaWxhciB0byBicmFuY2ggd2VpZ2h0IG1ldGFkYXRhIGluIExMVk0uCisKKyAgICAgICAg
Rm9yIEIzIGFuZCBBSVIgdGhpcyBpbXBsaWVzIGdlbmVyYXRpbmcgImhpbnRlZCIgYmxvY2tzLCB3
aG9zZSBmcmVxdWVuY2llcyBhcmUgYWxyZWFkeSBzZXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBiMy9CM0Jhc2ljQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6OnNldEhpbnRlZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNp
Y0Jsb2NrOjppc0hpbnRlZCBjb25zdCk6CisgICAgICAgICogYjMvQjNFc3RpbWF0ZVN0YXRpY0V4
ZWN1dGlvbkNvdW50cy5jcHA6CisgICAgICAgIChKU0M6OkIzOjplc3RpbWF0ZVN0YXRpY0V4ZWN1
dGlvbkNvdW50cyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuY3BwOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjphZGRIaW50ZWRCbG9jayk6CisgICAgICAgICogYjMvQjNQcm9jZWR1
cmUuaDoKKyAgICAgICAgKiBiMy9haXIvQWlyQmFzaWNCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJC
YXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnNldEZyZXF1
ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnNldEhpbnRlZCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmlzSGludGVkIGNvbnN0KToKKyAgICAg
ICAgKiBiMy9haXIvQWlyQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFk
ZEhpbnRlZEJsb2NrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRJZldpdGhIaW50KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2hXaXRoSGludCk6CisgICAgICAgICogd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFk
ZElmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkSWZXaXRoSGludCk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaCk6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaFdpdGhIaW50KToKKyAgICAgICAg
KiB3YXNtL1dhc21CcmFuY2hIaW50cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QnJh
bmNoSGludE1hcDo6aW5zZXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QnJhbmNoSGludE1hcDo6
Z2V0QnJhbmNoSGludCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OmJyYW5jaEhpbnRUb0Zy
ZXF1ZW5jeUNsYXNzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6YnJhbmNoSGludFRvSW52ZXJzZSk6
CisgICAgICAgIChKU0M6Oldhc206OmlzVmFsaWRCcmFuY2hIaW50KToKKyAgICAgICAgKiB3YXNt
L1dhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6QnJhbmNoSGludHNTZWN0aW9uUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogd2FzbS9X
YXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpCcmFuY2hIaW50c1NlY3Rpb25QYXJzZXI6OkJyYW5jaEhpbnRzU2VjdGlvblBhcnNlcik6Cisg
ICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb246OmdldEJyYW5jaEhpbnQgY29uc3QpOgorICAgICAgICAqIHdh
c20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFy
c2VyOjpwYXJzZUN1c3RvbSk6CisKIDIwMjItMDEtMjEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggYnVpbGQgd2hlbiB1c2luZyBWaXN1
YWwgU3R1ZGlvIDIwMjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmE1Y2IxZTZh
YmJiZGQ3NmVlZjdjNWYwMGIyNWNjZDUyMWU5MGZkZS4uZGNiODExNWQ3Y2ZmOGE3ZTlmOGQ5MGVk
YzI2YWU0ODRjNTQzNTEwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg1Niw2
ICs4NTYsOCBAQAogCQkzM0E5MjBCRDIzREEyQzZEMDAwRUJBRjAgLyogQ29tbW9uU2xvd1BhdGhz
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzNBOTIwQkMyM0RBMkM2RDAwMEVCQUYwIC8qIENvbW1vblNsb3dQYXRoc0lubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzM0IyQTU0NzIy
NjUzNDgxMDA1QTBGNzkgLyogQjNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlSW5saW5lcy5oICovOyB9OwogCQkzM0IyQTU0ODIyNjU0M0JGMDA1QTBGNzkgLyogRlRMTG93
ZXJERkdUb0IzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvQjMuY3BwICovOyB9
OworCQkzN0FBQzA5MzI3OUYxQkZDMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBh
cnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdB
QUMwOTIyNzlGMTI0MjAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuaCAq
LzsgfTsKKwkJMzdBQUMwOTQyNzlGMUMwNTAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdBQUMwOTEyNzlG
MTI0MjAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50cy5oICovOyB9OwogCQkzN0M3MzhEMjFFREI1
NkU0MDAzRjJCMEIgLyogUGFyc2VJbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3QzczOEQxMUVEQjU2NzIwMDNGMkIwQiAvKiBQYXJzZUludC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxMjk1Mjc3
MUQyQ0Y2QkMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9o
ZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MTI5NTI3MzFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dy
YXBwZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxMjk1Mjc4MUQyQ0Y2QkMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9p
bnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjk1Mjc0MUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWls
dGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzcyNiw2ICszNzI4
LDkgQEAKIAkJMzNCMkE1NDUyMjY1MUQ1MzAwNUEwRjc5IC8qIE1hcmtlZFNwYWNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1hcmtlZFNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzcxMTlBNzcyMENDQjVEQzAwMkM2REM5IC8qIFdlYktpdFRhcmdldENvbmRpdGlvbmFs
cy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJnZXRDb25kaXRpb25hbHMueGNjb25m
aWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5
NCAvKiBsaWJ6LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ6LmR5bGliOyBwYXRo
ID0gdXNyL2xpYi9saWJ6LmR5bGliOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKKwkJMzdBQUMw
OTAyNzlGMTI0MTAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUJyYW5jaEhpbnRzU2VjdGlv
blBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3QUFDMDkxMjc5RjEy
NDIwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0g
NDsgcGF0aCA9IFdhc21CcmFuY2hIaW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzN0FBQzA5MjI3OUYxMjQyMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gV2FzbUJyYW5jaEhpbnRzU2Vj
dGlvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0M3MzhEMTFFREI1
NjcyMDAzRjJCMEIgLyogUGFyc2VJbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGFyc2VJbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEyOTUyNzMxRDJD
RjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRl
ci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGJ1aWx0aW5zX2dlbmVy
YXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDEyOTUyNzQxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVy
bmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0
aG9uOyBwYXRoID0gYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50
YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01ODIzLDggKzU4MjgsOCBA
QAogCQkJCUE3MzFCMjVBMTMwMDkzODgwMDQwQTdGQSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovLAogCQkJCTkzMkY1QkQ3MDgyMkExQzcwMDczNjk3NSAvKiBsaWJpY3Vj
b3JlLmR5bGliIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJOTMyRjVCRDYwODIyQTFDNzAwNzM2OTc1
IC8qIGxpYm9iamMuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLywKLQkJCQlBNTA5OEIwNDFDMTZBQTAy
MDAwODc3OTcgLyogU2VjdXJpdHkuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJRERC
MDRGNDIyNzhFNTZBMjAwOEQzNjc4IC8qIGxpYldURi5hIGluIEZyYW1ld29ya3MgKi8sCisJCQkJ
QTUwOThCMDQxQzE2QUEwMjAwMDg3Nzk3IC8qIFNlY3VyaXR5LmZyYW1ld29yayBpbiBGcmFtZXdv
cmtzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtNzMxOCw2ICs3MzIzLDkgQEAKIAkJCQk1M0NBNzMwODFFQTUzM0Q4MDA3NjA0
OUQgLyogV2FzbUJCUVBsYW4uaCAqLywKIAkJCQlBRDRCMURGNzFERjI0NEQ3MDA3MUFFMzIgLyog
V2FzbUJpbmRpbmcuY3BwICovLAogCQkJCUFENEIxREY4MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNt
QmluZGluZy5oICovLAorCQkJCTM3QUFDMDkxMjc5RjEyNDIwMEQ2NDg0MiAvKiBXYXNtQnJhbmNo
SGludHMuaCAqLywKKwkJCQkzN0FBQzA5MDI3OUYxMjQxMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhp
bnRzU2VjdGlvblBhcnNlci5jcHAgKi8sCisJCQkJMzdBQUMwOTIyNzlGMTI0MjAwRDY0ODQyIC8q
IFdhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuaCAqLywKIAkJCQk1MjVDMERENzFFOTM1ODQ3
MDAyMTg0Q0QgLyogV2FzbUNhbGxlZS5jcHAgKi8sCiAJCQkJNTI1QzBERDgxRTkzNTg0NzAwMjE4
NENEIC8qIFdhc21DYWxsZWUuaCAqLywKIAkJCQk1MjZBQzRCNDFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNhbGxlZUdyb3VwLmNwcCAqLywKQEAgLTczNDksMTEgKzczNTcsMTEgQEAKIAkJCQlFMzgz
NTAwOTIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5oICovLAogCQkJCTE0ODUyMUQ1MjZF
QUVCREYwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uY3BwICovLAogCQkJCTE0ODUyMUQ3MjZF
QUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCAqLywKLQkJCQk1MkZEQUJDMjI3ODgw
NzY5MDBDMTVCNTkgLyogV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oICovLAogCQkJCUFEOEZGMzk2
MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuY3BwICovLAogCQkJCUFEOEZGMzk1
MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLywKIAkJCQlBRDVDMzZERTFG
Njk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNwcCAqLywKIAkJCQlBRDVDMzZERjFGNjk5
RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8sCisJCQkJNTJGREFCQzIyNzg4MDc2OTAw
QzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCAqLywKIAkJCQlBRDAwNjU5RDFFQ0FD
N0ZFMDAwQ0E5MjYgLyogV2FzbUxpbWl0cy5oICovLAogCQkJCTE0QzVBRDY4MjJGMzNGQkYwMEYx
RkI4MyAvKiBXYXNtTExJbnRHZW5lcmF0b3IuY3BwICovLAogCQkJCTE0QzVBRDY5MjJGMzNGQkYw
MEYxRkI4MyAvKiBXYXNtTExJbnRHZW5lcmF0b3IuaCAqLywKQEAgLTEwMDI0LDcgKzEwMDMyLDYg
QEAKIAkJCQkwRkJFMEY3MzE2QzFEQjA1MDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Ny
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVBMTRF
RjkwQTkwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJDQUVD
NzUyNzkwQjhGQjAwRERCQUFGIC8qIFNlY3VyZUFSTTY0RUhhc2hQaW5zLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJGQzc3MzE2RTEyRjc0MDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzQkZBNUQwMjFFODUzQTEwMDlDMEVCQSAvKiBERkdEZXNpcmVkR2xvYmFs
UHJvcGVydHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjlBMTcyRjA1MDEwMDdEQkRBNSAv
KiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMTA5NjgsNiArMTA5
NzUsOCBAQAogCQkJCUE1NENGMkZBMTg0RUFFREEwMDIzN0YxOSAvKiBTY3JpcHRPYmplY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1NTE2NUQ1MUJERjEzNUEwMDNCNzVDMSAvKiBTY3JpcHRQcm9m
aWxpbmdTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0Q0YyRjYxODRFQUIyNDAwMjM3RjE5
IC8qIFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkNBRUM3NTI3OTBCOEZCMDBE
REJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyQ0FF
Qzc2Mjc5MEI5MDEwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3Mjk5REE2MTdEMTI4NTgwMDVGNUZGOSAvKiBTZXRDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5MERENkUxODJGNDk5NzAwNTg4ODA3IC8qIFNldEl0
ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjVEQTBDODI1Qjg5NjBDMDA4
NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmggaW4gSGVhZGVycyAqLywKQEAgLTExMTM4
LDYgKzExMTQ3LDggQEAKIAkJCQk1M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV2FzbUIzSVJH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzQ0E3MzBBMUVBNTMzRDgwMDc2MDQ5RCAv
KiBXYXNtQkJRUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ0QjFERkExREYyNDRFMjAwNzFB
RTMyIC8qIFdhc21CaW5kaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkzN0FBQzA5NDI3OUYxQzA1
MDBENjQ4NDIgLyogV2FzbUJyYW5jaEhpbnRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkzN0FBQzA5
MzI3OUYxQkZDMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTI1QzBEREExRTkzNTg0NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTUyNkFDNEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ2FsbGVl
R3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRkI4NTNBMjJGMzY2N0IwMDhGOTBFRCAvKiBX
YXNtQ2FsbGVlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLApAQCAtMTExNTcsNiArMTExNjgsNyBA
QAogCQkJCTE0ODUyMUQ4MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FBRiAvKiBXYXNt
SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRkRBQkMzMjc4ODA3NkIwMEMxNUI1OSAv
KiBXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDAwNjU5RTFF
Q0FDODEyMDAwQ0E5MjYgLyogV2FzbUxpbWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1MEZB
MUYyMzU3QkVDOTAwOTNDRDREIC8qIFdhc21MTEludFRpZXJVcENvdW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUzRTlFMEFDMUVBRTgzREYwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMu
aCBpbiBIZWFkZXJzICovLApAQCAtMTExODQsNyArMTExOTYsNiBAQAogCQkJCUUzM0JCRTA5MjVC
RkEwNDEwMDUzNjkwRiAvKiBXYXNtU3RyZWFtaW5nQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzQTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFM0M3M0E5MTI1QkZBNzNCMDBFRkUzMDMgLyogV2FzbVN0cmVhbWlu
Z1BsYW4uaCBpbiBIZWFkZXJzICovLAotCQkJCTUyQ0FFQzc2Mjc5MEI5MDEwMEREQkFBRiAvKiBT
ZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkU2
MUY2OUVDOTEwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDAx
QkY1MjZERUVGNTMwMENBRTBEMCAvKiBXYXNtVGFnLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjUw
RDJEMjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MTIwOCw3ICsxMTIxOSw2IEBACiAJCQkJRTNBMzJCQzcxRkM4MzE0NzAwN0Q3RTc2IC8qIFdlYWtN
YXBJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzkzQUREODFGRTcwMkQwMDAyMkQ2ODEgLyog
V2Vha01hcEltcGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFNjE3REE0MUFF
MDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJGREFC
QzMyNzg4MDc2QjAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUzOTkzMEM4MjJBRDNCOUEwMDUxQ0RFMiAvKiBXZWFrT2JqZWN0UmVmQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUJGQkFFMjJBRDNDM0EwMDIzRjRDMCAvKiBX
ZWFrT2JqZWN0UmVmUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMTE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQKaW5kZXggODc4MWZiNDcxMDQwZWNlZTAxOGRjNzExYzU0Y2Y2YjUzMTQ5NDY1Ni4u
M2U0M2FmMTZhNDBiNmE0NDIwOTZkNWNjZmM4OWI3NzM3MzQwMmQzYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dApAQCAtMTA2NSw2ICsxMDY1LDcgQEAgd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwIEBuby11bmlmeQogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKIHdhc20vV2FzbUJC
UVBsYW4uY3BwCiB3YXNtL1dhc21CaW5kaW5nLmNwcAord2FzbS9XYXNtQnJhbmNoSGludHNTZWN0
aW9uUGFyc2VyLmNwcAogd2FzbS9XYXNtQ2FsbGVlLmNwcAogd2FzbS9XYXNtQ2FsbGVlR3JvdXAu
Y3BwCiB3YXNtL1dhc21DYWxsZWVSZWdpc3RyeS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmFzaWNCbG9jay5jcHAKaW5kZXggYzYyMTM1NDViZWY4YjFjMGY3Njc2NmIxNDBhMzUwYWEw
MTU2ZDhmMy4uYzM2NTA1YjMzMmU5Mzg1ZmIzNTJlM2M1NzQ5NTkyNmFkYjM0ZTQ3NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKQEAgLTQxLDYgKzQxLDcgQEAg
Y29uc3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9ICIjIjsKIEJhc2ljQmxv
Y2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCiAgICAgOiBt
X2luZGV4KGluZGV4KQogICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQorICAgICwgbV9oaW50
ZWQoZmFsc2UpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaApp
bmRleCAzNzYxMzhlMWNmNGNkZGE5NWVmMzNmMDNjNDkyZWY4NjY3ODVhYWM0Li40Zjg0ZjhlYzRl
NTU0ZWI3ZmUwYjFiYTY3M2I0MWQ1ZTg2ODUxZGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmFzaWNCbG9jay5oCkBAIC0xNDcsNiArMTQ3LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
RnJlcXVlbmN5KGRvdWJsZSBmcmVxdWVuY3kpIHsgbV9mcmVxdWVuY3kgPSBmcmVxdWVuY3k7IH0K
ICAgICBkb3VibGUgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KIAor
ICAgIHZvaWQgc2V0SGludGVkKGJvb2wgaGludGVkKSB7IG1faGludGVkID0gaGludGVkOyB9Cisg
ICAgYm9vbCBpc0hpbnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faGludGVkOyB9CisKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGRlZXBEdW1wKGNvbnN0IFByb2Nl
ZHVyZSYsIFByaW50U3RyZWFtJikgY29uc3Q7CiAKQEAgLTE3Nyw2ICsxODAsNyBAQCBwcml2YXRl
OgogICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKICAgICBTdWNjZXNzb3JMaXN0
IG1fc3VjY2Vzc29yczsKICAgICBkb3VibGUgbV9mcmVxdWVuY3k7CisgICAgYm9vbCBtX2hpbnRl
ZDsKIH07CiAKIGNsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNFc3RpbWF0ZVN0YXRpY0V4ZWN1dGlvbkNvdW50cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFc3RpbWF0ZVN0YXRpY0V4ZWN1dGlvbkNvdW50cy5j
cHAKaW5kZXggM2IzNDhmMTk1MTAxNzE4YjU1NTdiOWIxMzczMzlhZWYwMmU1MDRiYS4uOWFiZDc3
OThjY2UxNWZkYjdiNjY4YzQ5ZTE5NDEyMjBhYTRmMGVjMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRXN0aW1hdGVTdGF0aWNFeGVjdXRpb25Db3VudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VzdGltYXRlU3RhdGljRXhlY3V0aW9uQ291bnRz
LmNwcApAQCAtNDAsNiArNDAsOCBAQCBib29sIGVzdGltYXRlU3RhdGljRXhlY3V0aW9uQ291bnRz
KFByb2NlZHVyZSYgcHJvY2VkdXJlKQogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHBy
b2NlZHVyZSkgewogICAgICAgICBjb25zdGV4cHIgZG91YmxlIGJhc2UgPSAxMC4wOworICAgICAg
ICBpZiAoYmxvY2stPmlzSGludGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
YmxvY2stPnNldEZyZXF1ZW5jeShwb3coYmFzZSwgbmF0dXJhbExvb3BzLmxvb3BEZXB0aChibG9j
aykpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCmlu
ZGV4IDFlMTRhZTgzZTMwYjllN2M4YzM4YjNjYmY3YTdiN2Y3OGZkOGU4YzEuLjBkMTYwMjk4YjM1
NmU5NjI4Mzk0NDJkNWNmZDI5YjQzODJkMTY1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcApAQCAtNzUsNiArNzUsMTMgQEAgQmFzaWNCbG9jayogUHJvY2VkdXJl
OjphZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0Jh
c2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkSGludGVkQmxvY2soRnJlcXVlbmN5Q2xhc3MgZnJlcXVl
bmN5KQoreworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGFkZEJsb2NrKHN0YXRpY19jYXN0PGRv
dWJsZT4oZnJlcXVlbmN5KSk7CisgICAgcmVzdWx0LT5zZXRIaW50ZWQodHJ1ZSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogQWlyOjpTdGFja1Nsb3QqIFByb2NlZHVyZTo6YWRkU3RhY2tTbG90
KHVpbnQ2NF90IGJ5dGVTaXplKQogewogICAgIHJldHVybiBtX2NvZGUtPmFkZFN0YWNrU2xvdChi
eXRlU2l6ZSwgQWlyOjpTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmUuaAppbmRleCA0MmM0ZmZiNGM3ZGNlYzMyNDdjYTYwNjQ3ZTQzNzkzZDgy
YjY0ZTE5Li5jODM5YmQ1MDhlMDA5NGYzZWIyYzQ2NDM2NzYzNzM1N2RiNmUyODc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYg
RU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIKICNpbmNsdWRl
ICJCM09yaWdpbi5oIgogI2luY2x1ZGUgIkIzUENUb09yaWdpbk1hcC5oIgogI2luY2x1ZGUgIkIz
U3BhcnNlQ29sbGVjdGlvbi5oIgpAQCAtMTAxLDYgKzEwMiw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCB2b2lkKiBmcm9udGVuZERhdGEoKSBjb25zdCB7IHJldHVybiBtX2Zyb250ZW5kRGF0YTsgfQog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1
ZW5jeSA9IDEpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJhc2ljQmxvY2sqIGFkZEhpbnRlZEJs
b2NrKEZyZXF1ZW5jeUNsYXNzID0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCk7CiAKICAgICAvLyBD
aGFuZ2VzIHRoZSBvcmRlciBvZiBiYXNpYyBibG9ja3MgdG8gYmUgYXMgaW4gdGhlIHN1cHBsaWVk
IHZlY3Rvci4gVGhlIHZlY3RvciBkb2VzIG5vdAogICAgIC8vIG5lZWQgdG8gbWVudGlvbiBldmVy
eSBibG9jayBpbiB0aGUgcHJvY2VkdXJlLiBCbG9ja3Mgbm90IG1lbnRpb25lZCB3aWxsIGJlIHBs
YWNlZCBhZnRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJC
YXNpY0Jsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5jcHAKaW5kZXggYzdmNDg0MzBhYjA0Y2U1YWVmMDY2ZWJlNDE1NDRiNjRjM2YwY2ZhYi4uOWFl
OTdkNDhhNTYxMDVjOGI5N2VhMjc5NTI1ZmU5N2FiNWY2MThkMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCkBAIC05Miw2ICs5Miw3IEBAIHZv
aWQgQmFzaWNCbG9jazo6ZHVtcEZvb3RlcihQcmludFN0cmVhbSYgb3V0KSBjb25zdAogQmFzaWNC
bG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKICAgICA6
IG1faW5kZXgoaW5kZXgpCiAgICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCisgICAgLCBtX2hp
bnRlZChmYWxzZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJCYXNpY0Jsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJh
c2ljQmxvY2suaAppbmRleCAzYzJkNTY0YjNlNmRhZWQ3MDczYWM2ZTdjOWNkNDQwNjg3ZTZlNjcy
Li5mMjc3NmIwNmZiY2EzMzY4MDc4ZGFkMWI1NGVlZmM0MGRjMDNkODA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaApAQCAtMTMwLDggKzEzMCwxMiBA
QCBwdWJsaWM6CiAgICAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwg
QmFzaWNCbG9jayogdG8pOwogICAgIGJvb2wgY29udGFpbnNQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3NvcikgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuY29udGFpbnMocHJl
ZGVjZXNzb3IpOyB9CiAKKyAgICB2b2lkIHNldEZyZXF1ZW5jeShkb3VibGUgZnJlcXVlbmN5KSB7
IG1fZnJlcXVlbmN5ID0gZnJlcXVlbmN5OyB9CiAgICAgZG91YmxlIGZyZXF1ZW5jeSgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CiAKKyAgICB2b2lkIHNldEhpbnRlZChib29sIGhpbnRl
ZCkgeyBtX2hpbnRlZCA9IGhpbnRlZDsgfQorICAgIGJvb2wgaXNIaW50ZWQoKSBjb25zdCB7IHJl
dHVybiBtX2hpbnRlZDsgfQorCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAg
ICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkBAIC0xNTIsNiArMTU2LDcg
QEAgcHJpdmF0ZToKICAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKICAgICBQcmVkZWNl
c3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CiAgICAgZG91YmxlIG1fZnJlcXVlbmN5OworICAgIGJv
b2wgbV9oaW50ZWQ7CiB9OwogCiBjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKaW5kZXggODg2NTViYzcwMWU2ZTVmZDhiZGRm
NjYzNzE3NDBkZGMyNDZmNjUwMi4uNDM0MTBkMWMzM2E4NTFjNGIxMTA2OTQ3NWFkNzIxMTZhZTFm
NzVmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCkBAIC0xNjMs
NiArMTYzLDEzIEBAIEJhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kp
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorQmFzaWNCbG9jayogQ29kZTo6YWRkSGludGVkQmxv
Y2soRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KQoreworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9
IGFkZEJsb2NrKHN0YXRpY19jYXN0PGRvdWJsZT4oZnJlcXVlbmN5KSk7CisgICAgcmVzdWx0LT5z
ZXRIaW50ZWQodHJ1ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogU3RhY2tTbG90KiBDb2Rl
OjphZGRTdGFja1Nsb3QodWludDY0X3QgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkKIHsK
ICAgICBTdGFja1Nsb3QqIHJlc3VsdCA9IG1fc3RhY2tTbG90cy5hZGROZXcoYnl0ZVNpemUsIGtp
bmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAppbmRleCAzYzlkZjRmYzUz
NDFmYTA0NWM2NjMzNjJjYmY4MjQzMmY2NjExYmRmLi42Zjc2NTdmYThlMGYxMGRlOTc3MWY3YmY4
YmQ5NjBmMDM0NDk2ODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaApA
QCAtMTA4LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzVXNlZFJlZ2lzdGVycygp
IGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91
YmxlIGZyZXF1ZW5jeSA9IDEpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJhc2ljQmxvY2sqIGFk
ZEhpbnRlZEJsb2NrKEZyZXF1ZW5jeUNsYXNzID0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCk7CiAK
ICAgICAvLyBOb3RlIHRoYXQgeW91IGNhbiByZWx5IG9uIHN0YWNrIHNsb3RzIGFsd2F5cyBnZXR0
aW5nIGluZGljZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlIGluZGV4CiAgICAgLy8gb2YgYW55
IHByaW9yIHN0YWNrIHNsb3QuIEluIGZhY3QsIGFsbCBzdGFjayBzbG90cyB5b3UgY3JlYXRlIGlu
IHRoZSBmdXR1cmUgd2lsbCBoYXZlIGFuIGluZGV4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCBiZjlkOGEzODNmNzM3OWZiMWI5OWNhMjQ4YWE5MjBk
YzE1MWY5YWM4Li43ZDYzMWU4NzliZmJiMjY2NTBiNGNjMzFlMzY5ZDQ2MzZkMjA2OTZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTU0OSw2ICs1
NDksNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwg
dXNlV2ViQXNzZW1ibHlUaHJlYWRpbmcsIHRydWUsIE5vcm1hbCwgIkFsbG93IGluc3RydWN0aW9u
cyBmcm9tIHRoZSB3YXNtIHRocmVhZGluZyBzcGVjLiIpIFwKICAgICB2KEJvb2wsIHVzZVdlYkFz
c2VtYmx5VHlwZWRGdW5jdGlvblJlZmVyZW5jZXMsIGZhbHNlLCBOb3JtYWwsICJBbGxvdyBmdW5j
dGlvbiB0eXBlcyBmcm9tIHRoZSB3YXNtIHR5cGVkIGZ1bmN0aW9uIHJlZmVyZW5jZXMgc3BlYy4i
KSBcCiAgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMsIHRydWUsIE5vcm1hbCwg
IkFsbG93IHRoZSBuZXcgc2VjdGlvbiBhbmQgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHdhc20gZXhj
ZXB0aW9uIGhhbmRsaW5nIHNwZWMuIikgXAorICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1ibHlCcmFu
Y2hIaW50cywgZmFsc2UsIE5vcm1hbCwgIkFsbG93IHRoZSBuZXcgc2VjdGlvbiBmcm9tIHRoZSB3
YXNtIGJyYW5jaCBoaW50aW5nIHNwZWMuIikgXAogCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2Ug
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5j
cHAKaW5kZXggZjI4M2YzY2ZmMWFiOTk3OGFlNmNhNDk5NzU5ZDIwYzExMWMzZmI1Mi4uNTU3OTg1
ZDljYmNjNDAzZjk1MzcyYTkwMTIzZTg0ZjNkZTc3NWFlNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCkBAIC00NCw2ICs0NCw3IEBA
CiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNs
dWRlICJXYXNtQnJhbmNoSGludHMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aCIKICNpbmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKICNpbmNsdWRlICJXYXNtRXhjZXB0
aW9uVHlwZS5oIgpAQCAtMzg4LDYgKzM4OSw3IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCbG9jayhCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xv
c2luZ1N0YWNrLCBDb250cm9sVHlwZSYgbmV3QmxvY2ssIFN0YWNrJiBuZXdTdGFjayk7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9vcChCbG9ja1NpZ25hdHVyZSwg
U3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgYmxvY2ssIFN0YWNrJiBuZXdTdGFj
aywgdWludDMyX3QgbG9vcEluZGV4KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlLCBTdGFj
ayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkSWZXaXRoSGludChFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3Rh
Y2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjaywgY29uc3QgQnJhbmNoSGlu
dCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJv
bERhdGEmLCBjb25zdCBTdGFjayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKQEAgLTQwMyw2ICs0MDUs
NyBAQCBwdWJsaWM6CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRS
ZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEm
LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaFdpdGhIaW50KENv
bnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJu
VmFsdWVzLCBjb25zdCBCcmFuY2hIaW50Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9y
PENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29u
c3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJs
ZShDb250cm9sRW50cnkmLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0geyB9KTsKQEAg
LTMxNzEsNiArMzE3NCwxMiBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1Np
Z25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQwogCiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJl
IHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBT
dGFjayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBpZiAoT3B0aW9uczo6dXNl
V2ViQXNzZW1ibHlCcmFuY2hIaW50cygpKSB7CisgICAgICAgIGNvbnN0IEJyYW5jaEhpbnQmIGhp
bnQgPSBtX2luZm8uZ2V0QnJhbmNoSGludChtX2Z1bmN0aW9uSW5kZXgsIG1fcGFyc2VyLT5jdXJy
ZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7CisgICAgICAgIGlmIChoaW50ICE9IEJyYW5jaEhp
bnQ6OkludmFsaWQpCisgICAgICAgICAgICByZXR1cm4gYWRkSWZXaXRoSGludChjb25kaXRpb24s
IHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIHJlc3VsdCwgbmV3U3RhY2ssIGhpbnQpOworICAg
IH0KKwogICAgIEJhc2ljQmxvY2sqIHRha2VuID0gbV9jb2RlLmFkZEJsb2NrKCk7CiAgICAgQmFz
aWNCbG9jayogbm90VGFrZW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKQEAgLTMxODUsNiArMzE5NCwyNSBAQCBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEJsb2Nr
U2lnbmF0dXJlIHNpZ25hdHVyZSwgUwogICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZElmV2l0aEhpbnQoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1Np
Z25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJl
c3VsdCwgU3RhY2smIG5ld1N0YWNrLCBjb25zdCBCcmFuY2hIaW50JiBoaW50KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgQjM6OkZyZXF1ZW5jeUNsYXNzIHRha2VuRnJlcXVlbmN5ID0gYnJhbmNo
SGludFRvRnJlcXVlbmN5Q2xhc3MoaGludCk7CisgICAgQjM6OkZyZXF1ZW5jeUNsYXNzIG5vdFRh
a2VuRnJlcXVlbmN5ID0gYnJhbmNoSGludFRvRnJlcXVlbmN5Q2xhc3MoYnJhbmNoSGludFRvSW52
ZXJzZShoaW50KSk7CisKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fY29kZS5hZGRIaW50ZWRC
bG9jayh0YWtlbkZyZXF1ZW5jeSk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBtX2NvZGUu
YWRkSGludGVkQmxvY2sobm90VGFrZW5GcmVxdWVuY3kpOworICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgLy8gV2FzbSBib29scyBhcmUgaTMy
LgorICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0
U3VjY2Vzc29ycyh0YWtlbiwgbm90VGFrZW4pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtl
bjsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsK
KyAgICByZXN1bHQgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBzRm9yU2ln
bmF0dXJlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6SWYsIGNvbnRpbnVhdGlvbiwgbm90VGFrZW4p
OworICAgIHJldHVybiB7IH07Cit9CisKIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29u
dHJvbERhdGEmIGRhdGEsIGNvbnN0IFN0YWNrJiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0
cyk7CkBAIC0zNDE0LDYgKzM0NDIsMTIgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJu
KGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWUKIAogYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKKyAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlCcmFuY2hIaW50cygpKSB7Cisg
ICAgICAgIGNvbnN0IEJyYW5jaEhpbnQmIGhpbnQgPSBtX2luZm8uZ2V0QnJhbmNoSGludChtX2Z1
bmN0aW9uSW5kZXgsIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7Cisg
ICAgICAgIGlmIChoaW50ICE9IEJyYW5jaEhpbnQ6OkludmFsaWQpCisgICAgICAgICAgICByZXR1
cm4gYWRkQnJhbmNoV2l0aEhpbnQoZGF0YSwgY29uZGl0aW9uLCByZXR1cm5WYWx1ZXMsIGhpbnQp
OworICAgIH0KKwogICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YS5y
ZXN1bHRzKTsKIAogICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IGRhdGEudGFyZ2V0QmxvY2tGb3JC
cmFuY2goKTsKQEAgLTM0MzAsNiArMzQ2NCwyOSBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRC
cmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29ucwog
ICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEJyYW5jaFdpdGhI
aW50KENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFN0
YWNrJiByZXR1cm5WYWx1ZXMsIGNvbnN0IEJyYW5jaEhpbnQmIGhpbnQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0
cyk7CisKKyAgICBCMzo6RnJlcXVlbmN5Q2xhc3MgdGFyZ2V0RnJlcXVlbmN5ID0gYnJhbmNoSGlu
dFRvRnJlcXVlbmN5Q2xhc3MoaGludCk7CisgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50
YXJnZXRCbG9ja0ZvckJyYW5jaCgpOworCisgICAgdGFyZ2V0LT5zZXRGcmVxdWVuY3koc3RhdGlj
X2Nhc3Q8ZG91YmxlPih0YXJnZXRGcmVxdWVuY3kpKTsKKyAgICB0YXJnZXQtPnNldEhpbnRlZCh0
cnVlKTsKKyAgICBpZiAoY29uZGl0aW9uKSB7CisgICAgICAgIEIzOjpGcmVxdWVuY3lDbGFzcyBj
b250aW51YXRpb25GcmVxdWVuY3kgPSBicmFuY2hIaW50VG9GcmVxdWVuY3lDbGFzcyhicmFuY2hI
aW50VG9JbnZlcnNlKGhpbnQpKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9jb2RlLmFkZEhpbnRlZEJsb2NrKGNvbnRpbnVhdGlvbkZyZXF1ZW5jeSk7CisgICAgICAgIGFw
cGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyks
IGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nl
c3NvcnModGFyZ2V0LCBjb250aW51YXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNv
bnRpbnVhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCk7CisgICAgfQorCisgICAgcmV0
dXJuIHsgfTsKK30KKwogYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRy
b2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgYXV0byYgc3VjY2Vzc29ycyA9IG1fY3VycmVudEJsb2NrLT5z
dWNjZXNzb3JzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHAKaW5kZXggZGVmZmNkZWFkMzVlMjI5YTZhMzIyMzQwZWM5MTcxMjIxNmJlOWQx
MS4uZDIzMzliZThmOTNlYjRiZjgyYWIyMWY2ZGY4ODY3NzZjZTc0Zjg0NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtNTIsNyAr
NTIsNyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlBy
b2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgotI2lu
Y2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIldhc21CcmFuY2hI
aW50cy5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2luY2x1ZGUgIldh
c21Db250ZXh0SW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCkBAIC0z
NjcsNiArMzY3LDcgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEJsb2NrKEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRy
b2xUeXBlJiBuZXdCbG9jaywgU3RhY2smIG5ld1N0YWNrKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRMb29wKEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5n
U3RhY2ssIENvbnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29w
SW5kZXgpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZldpdGhIaW50KEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUm
IHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrLCBjb25zdCBCcmFuY2hIaW50Jik7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IFN0
YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5y
ZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIApAQCAtMzgyLDYgKzM4Myw3IEBAIHB1YmxpYzoKIAog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250
cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBl
IGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoV2l0aEhpbnQoQ29udHJvbERhdGEmLCBFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMsIGNvbnN0IEJy
YW5jaEhpbnQmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0
Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYg
dGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVz
c2lvblN0YWNrKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9j
ayhDb250cm9sRW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYs
IGNvbnN0IFN0YWNrJiA9IHsgfSk7CkBAIC0yNDcyLDYgKzI0NzQsMTIgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgU3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBkbyBzb21lIGtpbmQg
b2Ygc3RhY2sgcGFzc2luZy4KIAorICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUJyYW5j
aEhpbnRzKCkpIHsKKyAgICAgICAgY29uc3QgQnJhbmNoSGludCYgaGludCA9IG1faW5mby5nZXRC
cmFuY2hIaW50KG1fZnVuY3Rpb25JbmRleCwgbV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGlu
Z09mZnNldCgpKTsKKyAgICAgICAgaWYgKGhpbnQgIT0gQnJhbmNoSGludDo6SW52YWxpZCkKKyAg
ICAgICAgICAgIHJldHVybiBhZGRJZldpdGhIaW50KGNvbmRpdGlvbiwgc2lnbmF0dXJlLCBlbmNs
b3NpbmdTdGFjaywgcmVzdWx0LCBuZXdTdGFjaywgaGludCk7CisgICAgfQorCiAgICAgQmFzaWNC
bG9jayogdGFrZW4gPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBub3RUYWtl
biA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1f
cHJvYy5hZGRCbG9jaygpOwpAQCAtMjQ4Nyw2ICsyNDk1LDI4IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1
cmUsIFN0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRJZldp
dGhIaW50KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJl
LCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdT
dGFjaywgY29uc3QgQnJhbmNoSGludCYgaGludCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8v
IEZJWE1FOiBUaGlzIG5lZWRzIHRvIGRvIHNvbWUga2luZCBvZiBzdGFjayBwYXNzaW5nLgorCisg
ICAgRnJlcXVlbmN5Q2xhc3MgdGFrZW5GcmVxdWVuY3kgPSBicmFuY2hIaW50VG9GcmVxdWVuY3lD
bGFzcyhoaW50KTsKKyAgICBGcmVxdWVuY3lDbGFzcyBub3RUYWtlbkZyZXF1ZW5jeSA9IGJyYW5j
aEhpbnRUb0ZyZXF1ZW5jeUNsYXNzKGJyYW5jaEhpbnRUb0ludmVyc2UoaGludCkpOworCisgICAg
QmFzaWNCbG9jayogdGFrZW4gPSBtX3Byb2MuYWRkSGludGVkQmxvY2sodGFrZW5GcmVxdWVuY3kp
OworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEhpbnRlZEJsb2NrKG5vdFRh
a2VuRnJlcXVlbmN5KTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRk
QmxvY2soKTsKKworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
QjM6OkJyYW5jaCwgb3JpZ2luKCksIGdldChjb25kaXRpb24pKTsKKyAgICBtX2N1cnJlbnRCbG9j
ay0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sodGFrZW4sIHRha2VuRnJlcXVlbmN5KSwg
RnJlcXVlbnRlZEJsb2NrKG5vdFRha2VuLCBub3RUYWtlbkZyZXF1ZW5jeSkpOworICAgIHRha2Vu
LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisgICAgbm90VGFrZW4tPmFkZFByZWRl
Y2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47Cisg
ICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CisgICAg
cmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5
cGU6OklmLCBtX3N0YWNrU2l6ZSwgY29udGludWF0aW9uLCBub3RUYWtlbik7CisgICAgcmV0dXJu
IHsgfTsKK30KKwogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRh
LCBjb25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdW5p
ZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhKTsKQEAgLTI3MTgsNiArMjc0OCwx
MiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNv
bnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQnJh
bmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFN0
YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBpZiAoT3B0aW9uczo6
dXNlV2ViQXNzZW1ibHlCcmFuY2hIaW50cygpKSB7CisgICAgICAgIGNvbnN0IEJyYW5jaEhpbnQm
IGhpbnQgPSBtX2luZm8uZ2V0QnJhbmNoSGludChtX2Z1bmN0aW9uSW5kZXgsIG1fcGFyc2VyLT5j
dXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7CisgICAgICAgIGlmIChoaW50ICE9IEJyYW5j
aEhpbnQ6OkludmFsaWQpCisgICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoV2l0aEhpbnQoZGF0
YSwgY29uZGl0aW9uLCByZXR1cm5WYWx1ZXMsIGhpbnQpOworICAgIH0KKwogICAgIHVuaWZ5VmFs
dWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YSk7CiAKICAgICBCYXNpY0Jsb2NrKiB0YXJn
ZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CkBAIC0yNzM2LDYgKzI3NzIsMzEgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgY29uc3QKICAgICByZXR1cm4geyB9OwogfQogCithdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZEJyYW5jaFdpdGhIaW50KENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMsIGNvbnN0IEJyYW5jaEhp
bnQmIGhpbnQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhy
ZXR1cm5WYWx1ZXMsIGRhdGEpOworCisgICAgRnJlcXVlbmN5Q2xhc3MgdGFyZ2V0RnJlcXVlbmN5
ID0gYnJhbmNoSGludFRvRnJlcXVlbmN5Q2xhc3MoaGludCk7CisgICAgQmFzaWNCbG9jayogdGFy
Z2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5jaCgpOworCisgICAgdGFyZ2V0LT5zZXRGcmVx
dWVuY3koc3RhdGljX2Nhc3Q8ZG91YmxlPih0YXJnZXRGcmVxdWVuY3kpKTsKKyAgICB0YXJnZXQt
PnNldEhpbnRlZCh0cnVlKTsKKyAgICBpZiAoY29uZGl0aW9uKSB7CisgICAgICAgIEZyZXF1ZW5j
eUNsYXNzIGNvbnRpbnVhdGlvbkZyZXF1ZW5jeSA9IGJyYW5jaEhpbnRUb0ZyZXF1ZW5jeUNsYXNz
KGJyYW5jaEhpbnRUb0ludmVyc2UoaGludCkpOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51
YXRpb24gPSBtX3Byb2MuYWRkSGludGVkQmxvY2sodGFyZ2V0RnJlcXVlbmN5KTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmln
aW4oKSwgZ2V0KGNvbmRpdGlvbikpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyhGcmVxdWVudGVkQmxvY2sodGFyZ2V0LCB0YXJnZXRGcmVxdWVuY3kpLCBGcmVxdWVudGVk
QmxvY2soY29udGludWF0aW9uLCBjb250aW51YXRpb25GcmVxdWVuY3kpKTsKKyAgICAgICAgdGFy
Z2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisgICAgICAgIGNvbnRpbnVhdGlv
bi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIEZyZXF1ZW50ZWRC
bG9jayh0YXJnZXQsIHRhcmdldEZyZXF1ZW5jeSkpOworICAgICAgICB0YXJnZXQtPmFkZFByZWRl
Y2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNv
bnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRh
cmdldCwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uU3RhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJyYW5jaEhpbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQnJhbmNoSGludHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTMxZmFmNWQ4N2MxNTRjOTZm
OGEwZjgzOWIxZTI4MzExZWVkZDZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJyYW5jaEhpbnRzLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMiBMZWFuaW5nIFRlY2hub2xvZ2llcyBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9T
dGRVbm9yZGVyZWRNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgV2FzbSB7CisK
K2VudW0gY2xhc3MgQnJhbmNoSGludCA6IHVpbnQ4X3QgeworICAgIFVubGlrZWx5LAorICAgIExp
a2VseSwKKyAgICBJbnZhbGlkLAorfTsKKworY2xhc3MgQnJhbmNoSGludE1hcCB7CisKK3B1Ymxp
YzoKKworICAgIHZvaWQgaW5zZXJ0KHVpbnQzMl90IGJyYW5jaE9mZnNldCwgQnJhbmNoSGludCBo
aW50KQorICAgIHsKKyAgICAgICAgbV9tYXAuZW1wbGFjZShicmFuY2hPZmZzZXQsIGhpbnQpOwor
ICAgIH0KKworICAgIEJyYW5jaEhpbnQgZ2V0QnJhbmNoSGludCh1aW50MzJfdCBicmFuY2hPZmZz
ZXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ID0gbV9tYXAuZmluZChicmFuY2hPZmZz
ZXQpOworICAgICAgICBpZiAoaXQgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
QnJhbmNoSGludDo6SW52YWxpZDsKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgfQor
Citwcml2YXRlOgorCisgICAgU3RkVW5vcmRlcmVkTWFwPHVpbnQzMl90LCBCcmFuY2hIaW50PiBt
X21hcDsKKworfTsKKworaW5saW5lIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzIGJyYW5jaEhpbnRU
b0ZyZXF1ZW5jeUNsYXNzKGNvbnN0IEJyYW5jaEhpbnQmIGhpbnQpCit7CisgICAgcmV0dXJuIGhp
bnQgPT0gQnJhbmNoSGludDo6VW5saWtlbHkKKyAgICAgICAgPyBKU0M6OkIzOjpGcmVxdWVuY3lD
bGFzczo6UmFyZQorICAgICAgICA6IEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzOjpOb3JtYWw7Cit9
CisKK2lubGluZSBCcmFuY2hIaW50IGJyYW5jaEhpbnRUb0ludmVyc2UoY29uc3QgQnJhbmNoSGlu
dCYgaGludCkKK3sKKyAgICByZXR1cm4gaGludCA9PSBCcmFuY2hIaW50OjpMaWtlbHkKKyAgICAg
ICAgPyBCcmFuY2hIaW50OjpVbmxpa2VseQorICAgICAgICA6IEJyYW5jaEhpbnQ6Okxpa2VseTsK
K30KKworaW5saW5lIGJvb2wgaXNWYWxpZEJyYW5jaEhpbnQoQnJhbmNoSGludCBoaW50KQorewor
ICAgIHN3aXRjaCAoaGludCkgeworICAgIGNhc2UgQnJhbmNoSGludDo6TGlrZWx5OgorICAgIGNh
c2UgQnJhbmNoSGludDo6VW5saWtlbHk6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KK30g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
N2Y0ZTk0MTAxYmUzMGU3ZWUyNWQ4NWRlYzllMGViOWE1NmJkZDBiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNl
ci5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBMZWFuaW5n
IFRlY2hub2xvZ2llcyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2Vy
LmgiCisKKyNpbmNsdWRlICJXYXNtQnJhbmNoSGludHMuaCIKKworbmFtZXNwYWNlIEpTQyB7Citu
YW1lc3BhY2UgV2FzbSB7CisKK2F1dG8gQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyOjpwYXJzZSgp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBmdW5jdGlvbkNvdW50OworICAgIGlu
dDY0X3QgbGFzdEZ1bmN0aW9uSW5kZXggPSAtMTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihmdW5jdGlvbkNvdW50KSwgImNhbid0IGdldCBmdW5jdGlvbiBjb3VudCIp
OworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkgewor
ICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OworICAgICAgICB1aW50MzJfdCBoaW50Q291
bnQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9u
SW5kZXgpLCAiY2FuJ3QgZ2V0IGZ1bmN0aW9uIGluZGV4IGZvciBmdW5jdGlvbiAiLCBpKTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbnQ2NF90KGZ1bmN0aW9uSW5kZXgpIDw9IGxhc3RG
dW5jdGlvbkluZGV4LCAiaW52YWxpZCBmdW5jdGlvbiBpbmRleCAiLCBmdW5jdGlvbkluZGV4LCAi
IGZvciBmdW5jdGlvbiAiLCBpKTsKKworICAgICAgICBsYXN0RnVuY3Rpb25JbmRleCA9IGZ1bmN0
aW9uSW5kZXg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
aGludENvdW50KSwgImNhbid0IGdldCBudW1iZXIgb2YgaGludHMgZm9yIGZ1bmN0aW9uICIsIGkp
OworCisgICAgICAgIGlmICghaGludENvdW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgaW50NjRfdCBsYXN0QnJhbmNoT2Zmc2V0ID0gLTE7CisgICAgICAgIEJyYW5jaEhpbnRN
YXAgYnJhbmNoSGludHNGb3JGdW5jdGlvbjsKKyAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsg
aiA8IGhpbnRDb3VudDsgKytqKSB7CisgICAgICAgICAgICB1aW50MzJfdCBicmFuY2hPZmZzZXQ7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihicmFuY2hP
ZmZzZXQpLCAiY2FuJ3QgZ2V0IGJyYW5jaCBvZmZzZXQgZm9yIGhpbnQgIiwgaik7CisgICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGludDY0X3QoYnJhbmNoT2Zmc2V0KSA8PSBsYXN0QnJh
bmNoT2Zmc2V0LCAiaW52YWxpZCBicmFuY2ggb2Zmc2V0ICIsIGJyYW5jaE9mZnNldCwgIiBmb3Ig
aGludCAiLCBqKTsKKworICAgICAgICAgICAgbGFzdEJyYW5jaE9mZnNldCA9IGJyYW5jaE9mZnNl
dDsKKworICAgICAgICAgICAgdWludDhfdCByZXNlcnZlZEJ5dGU7CisgICAgICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJlc2VydmVkQnl0ZSksICJjYW4ndCBnZXQg
cmVzZXJ2ZWQgYnl0ZSBmb3IgaGludCAiLCBqKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYocmVzZXJ2ZWRCeXRlICE9IDB4MSwgImludmFsaWQgcmVzZXJ2ZWQgYnl0ZSBmb3IgaGlu
dCAiLCBqKTsKKworICAgICAgICAgICAgdWludDhfdCBwYXJzZWRCcmFuY2hIaW50OworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShwYXJzZWRCcmFuY2hIaW50
KSwgImNhbid0IGdldCBicmFuY2ggaGludCB2YWx1ZSBmb3IgaGludCAiLCBqKTsKKworICAgICAg
ICAgICAgQnJhbmNoSGludCBicmFuY2hIaW50ID0gc3RhdGljX2Nhc3Q8QnJhbmNoSGludD4oaW50
MzJfdChwYXJzZWRCcmFuY2hIaW50KSk7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFpc1ZhbGlkQnJhbmNoSGludChicmFuY2hIaW50KSwgImludmFsaWQgYnJhbmNoIGhpbnQgdmFs
dWUgIiwgcGFyc2VkQnJhbmNoSGludCwgIiBmb3IgaGludCAiLCBqKTsKKworICAgICAgICAgICAg
YnJhbmNoSGludHNGb3JGdW5jdGlvbi5pbnNlcnQoYnJhbmNoT2Zmc2V0LCBicmFuY2hIaW50KTsK
KyAgICAgICAgfQorICAgICAgICBtX2luZm8tPmJyYW5jaEhpbnRzLmVtcGxhY2UoZnVuY3Rpb25J
bmRleCwgV1RGTW92ZShicmFuY2hIaW50c0ZvckZ1bmN0aW9uKSk7CisgICAgfQorICAgIHJldHVy
biB7IH07Cit9CisKK30KK30gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjMDk5MmFlNTU3
NDBmYTU3YmJjYTE5YjMxYzcyMTQ1YmUxYjA3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmgKQEAgLTAs
MCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBMZWFuaW5nIFRlY2hub2xvZ2ll
cyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiV2FzbUJyYW5jaEhpbnRzLmgiCisjaW5jbHVkZSAiV2FzbVBhcnNlci5oIgor
CituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgQnJhbmNoSGludHNT
ZWN0aW9uUGFyc2VyIDogcHVibGljIFBhcnNlcjx2b2lkPiB7CitwdWJsaWM6CisgICAgQnJhbmNo
SGludHNTZWN0aW9uUGFyc2VyKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNv
dXJjZUxlbmd0aCwgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCisgICAgICAgIDogUGFyc2VyKHNv
dXJjZUJ1ZmZlciwgc291cmNlTGVuZ3RoKQorICAgICAgICAsIG1faW5mbyhpbmZvKQorICAgIHsK
KyAgICB9CisgICAgUGFydGlhbFJlc3VsdCBwYXJzZSgpOworCitwcml2YXRlOgorICAgIFJlZjxN
b2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOworfTsKKworfQorfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCmluZGV4IDIxYTM5MjdmMjUx
ZjAxOWYyZjBjNTRlMjkxN2IxMjU1N2FiZDQ2ZjcuLmQ4MmM0MWQ5ZmMzMjM2M2RiZmQ1OTFjZGY2
NjQ2ZjhiYzk2ODk5MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5oCkBAIC0yNywxMyArMjcsMTggQEAKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIldhc21CcmFuY2hIaW50cy5oIgogI2luY2x1ZGUgIldh
c21Gb3JtYXQuaCIKIAogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkVW5vcmRlcmVkTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAK
IHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxN
b2R1bGVJbmZvcm1hdGlvbj4geworCisgICAgdXNpbmcgQnJhbmNoSGludHMgPSBTdGRVbm9yZGVy
ZWRNYXA8dWludDMyX3QsIEJyYW5jaEhpbnRNYXA+OworCiAgICAgTW9kdWxlSW5mb3JtYXRpb24o
KTsKICAgICBNb2R1bGVJbmZvcm1hdGlvbihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYpID0gZGVs
ZXRlOwogICAgIE1vZHVsZUluZm9ybWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uJiYpID0gZGVsZXRl
OwpAQCAtOTQsNiArOTksMTQgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAgICAgYm9vbCBpc0RlY2xh
cmVkRXhjZXB0aW9uKHVpbnQzMl90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2RlY2xhcmVkRXhj
ZXB0aW9ucy5jb250YWlucyhpbmRleCk7IH0KICAgICB2b2lkIGFkZERlY2xhcmVkRXhjZXB0aW9u
KHVpbnQzMl90IGluZGV4KSB7IG1fZGVjbGFyZWRFeGNlcHRpb25zLnNldChpbmRleCk7IH0KIAor
ICAgIEJyYW5jaEhpbnQgZ2V0QnJhbmNoSGludCh1aW50MzJfdCBmdW5jdGlvbk9mZnNldCwgdWlu
dDMyX3QgYnJhbmNoT2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBpdCA9IGJyYW5j
aEhpbnRzLmZpbmQoZnVuY3Rpb25PZmZzZXQpOworICAgICAgICByZXR1cm4gaXQgPT0gYnJhbmNo
SGludHMuZW5kKCkKKyAgICAgICAgICAgID8gQnJhbmNoSGludDo6SW52YWxpZAorICAgICAgICAg
ICAgOiBpdC0+c2Vjb25kLmdldEJyYW5jaEhpbnQoYnJhbmNoT2Zmc2V0KTsKKyAgICB9CisKICAg
ICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1w
b3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4g
aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CkBAIC0xMTUsNiArMTI4LDcgQEAgc3Ry
dWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVs
ZUluZm9ybWF0aW9uPiB7CiAgICAgdWludDMyX3QgY29kZVNlY3Rpb25TaXplIHsgMCB9OwogICAg
IFZlY3RvcjxDdXN0b21TZWN0aW9uPiBjdXN0b21TZWN0aW9uczsKICAgICBSZWY8TmFtZVNlY3Rp
b24+IG5hbWVTZWN0aW9uOworICAgIEJyYW5jaEhpbnRzIGJyYW5jaEhpbnRzOwogICAgIHVpbnQz
Ml90IG51bWJlck9mRGF0YVNlZ21lbnRzIHsgMCB9OwogCiAgICAgQml0VmVjdG9yIG1fZGVjbGFy
ZWRGdW5jdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlv
blBhcnNlci5jcHAKaW5kZXggYTg4OTVjOTUxMjlkMzNjN2MwY2RiZjg2NjRlODkwZDRhZjM1MTNi
YS4uNWI1MTE4MTEwZTUyZDJiZDA3OGNiMDJlOTg5OTk3MmQyZmE4YjRlMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtMzAsNiAr
MzAsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5oIgogI2lu
Y2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlv
blBhcnNlci5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKQEAgLTg5Niw2ICs4OTcsMTIgQEAgYXV0
byBTZWN0aW9uUGFyc2VyOjpwYXJzZUN1c3RvbSgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAg
TmFtZVNlY3Rpb25QYXJzZXIgbmFtZVNlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXlsb2FkLmJlZ2lu
KCksIHNlY3Rpb24ucGF5bG9hZC5zaXplKCksIG1faW5mbyk7CiAgICAgICAgIGlmIChhdXRvIG5h
bWVTZWN0aW9uID0gbmFtZVNlY3Rpb25QYXJzZXIucGFyc2UoKSkKICAgICAgICAgICAgIG1faW5m
by0+bmFtZVNlY3Rpb24gPSBXVEZNb3ZlKCpuYW1lU2VjdGlvbik7CisgICAgfSBlbHNlIGlmIChP
cHRpb25zOjp1c2VXZWJBc3NlbWJseUJyYW5jaEhpbnRzKCkpIHsKKyAgICAgICAgTmFtZSBicmFu
Y2hIaW50c05hbWUgPSB7ICdjJywgJ28nLCAnZCcsICdlJywgJ18nLCAnYScsICduJywgJ24nLCAn
bycsICd0JywgJ2EnLCAndCcsICdpJywgJ28nLCAnbicsICcuJywgJ2InLCAncicsICdhJywgJ24n
LCAnYycsICdoJywgJ18nLCAnaCcsICdpJywgJ24nLCAndCcgfTsKKyAgICAgICAgaWYgKHNlY3Rp
b24ubmFtZSA9PSBicmFuY2hIaW50c05hbWUpIHsKKyAgICAgICAgICAgIEJyYW5jaEhpbnRzU2Vj
dGlvblBhcnNlciBicmFuY2hIaW50c1NlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXlsb2FkLmJlZ2lu
KCksIHNlY3Rpb24ucGF5bG9hZC5zaXplKCksIG1faW5mbyk7CisgICAgICAgICAgICBicmFuY2hI
aW50c1NlY3Rpb25QYXJzZXIucGFyc2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1faW5m
by0+Y3VzdG9tU2VjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc2VjdGlvbikpOwpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBiOTMx
ZDExY2VhODJmYzI5Y2U4NjZmMmIxODU2OWE3NjhlYTk2YjRiLi5jMjZkMzUxOTY3OTI3YzU0MWI5
MTdmYzI0ZmFhZjcyOWIwYWM1NmFmIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAxLTI1ICBUb20gVGFy
dGFyaW4gIDx0b21AbGVhbmluZ3RlY2guY29tPgorCisgICAgICAgIFtKU0NdIEFkZCB0ZXN0IGZv
ciBXZWJBc3NlbWJseSBicmFuY2ggaGludHMgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1NTgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisgICAgICAgICogd2FzbS9i
cmFuY2gtaGludHMvYnJhbmNoSGludHNNb2R1bGUud2FzbTogQWRkZWQuCisgICAgICAgICogd2Fz
bS9icmFuY2gtaGludHMvYnJhbmNoSGludHNTZWN0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGNv
bnN0Lm1vZHVsZSk6CisKIDIwMjItMDEtMTkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxl
LmNvbT4KIAogICAgICAgICBbSlNDXSBJbXBsZW1lbnQgVGVtcG9yYWwuTm93Lmluc3RhbnQoKQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtLnlhbWwgYi9KU1Rlc3RzL3dhc20ueWFtbAppbmRleCAw
MDZjMzNiZTc4Mzc5MzdmNTU0MDhjYmU4NmY2NjgyNmUyOTRhOTI4Li5jZWQ5NGM1M2I2ZjNiYzIz
ODNjMTgxZjU5MWVhMmVjNGNkOGFkMTg4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20ueWFtbAor
KysgYi9KU1Rlc3RzL3dhc20ueWFtbApAQCAtNDcsNiArNDcsOCBAQAogICBjbWQ6IHJ1bldlYkFz
c2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS92OC8KICAg
Y21kOiBydW5XZWJBc3NlbWJseVN1aXRlKDpub19tb2R1bGUsICJtanN1bml0LmpzIikgdW5sZXNz
IHBhcnNlUnVuQ29tbWFuZHMKKy0gcGF0aDogd2FzbS9icmFuY2gtaGludHMKKyAgY21kOiBydW5X
ZWJBc3NlbWJseVN1aXRlKCItLXVzZVdlYkFzc2VtYmx5QnJhbmNoSGludHM9dHJ1ZSIpCiAKIC0g
cGF0aDogd2FzbS9yZWZlcmVuY2VzLXNwZWMtdGVzdHMvZWxlbS53YXN0LmpzCiAgIGNtZDogcnVu
V2ViQXNzZW1ibHlSZWZlcmVuY2VTcGVjVGVzdCA6bm9ybWFsCmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vYnJhbmNoLWhpbnRzL2JyYW5jaEhpbnRzTW9kdWxlLndhc20gYi9KU1Rlc3RzL3dhc20v
YnJhbmNoLWhpbnRzL2JyYW5jaEhpbnRzTW9kdWxlLndhc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjlkZjg2ZGE3
MmIyOGE1YTUwNDcxOTViNzdhM2Y4MTk3ZDRkYzZmOApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg
MTcyCnpjbVdOfUpyMDZFNmgrfkMtdmJPekVWUSkmNS1KbERjaT1SLTM+YmVCRmt2dUFWK0VDK2R2
R1ooITZpdn5AK0FsRQp6KEdVT15TXl5+cDRrYjlLM00yQDVDbUR3MWElMj13WHZnc2pHaDBkMlQk
e0ZnM2N7anN3RmwhRlZQVTNNekNPMj8Kell2SF9hZClMPmstPH4/PiZzOTs/ejkoZng8bTd4TzNZ
Wk9wITZLN1hiKVNnK3o0UT81RW1KajlAc140R3lyYmcrCkhDUTxWVGVXTT8kCgpsaXRlcmFsIDAK
SGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vYnJhbmNoLWhpbnRzL2JyYW5j
aEhpbnRzU2VjdGlvbi5qcyBiL0pTVGVzdHMvd2FzbS9icmFuY2gtaGludHMvYnJhbmNoSGludHNT
ZWN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4ZGYxODI2YjIwNWVhZDA4MjI1Mzc5YmNhMWZhMjlmMjZk
NjlhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vYnJhbmNoLWhpbnRzL2JyYW5j
aEhpbnRzU2VjdGlvbi5qcwpAQCAtMCwwICsxLDYyIEBACitpbXBvcnQgKiBhcyBhc3NlcnQgZnJv
bSAnLi4vYXNzZXJ0LmpzJworCisvKgorVGhpcyB0ZXN0IGxvYWRzIGEgV2ViQXNzZW1ibHkgZmls
ZSBjb21waWxlZCB3aXRoIHdhdDJ3YXNtIHdpdGggc3VwcG9ydCBmb3IgY29kZSBhbm5vdGF0aW9u
cy4KK3NlZTogaHR0cHM6Ly9naXRodWIuY29tL3l1cmk5MS93YWJ0L3RyZWUvYW5ub3RhdGlvbnMK
KworRnJvbSB0aGUgZm9sbG93aW5nIC53YXQ6CisobW9kdWxlCisgICh0eXBlICg7MDspIChmdW5j
KSkKKyAgKHR5cGUgKDsxOykgKGZ1bmMgKHBhcmFtIGkzMikgKHJlc3VsdCBpMzIpKSkKKyAgKHR5
cGUgKDsyOykgKGZ1bmMgKHJlc3VsdCBpMzIpKSkKKyAgKGZ1bmMgJF9fd2FzbV9udWxscHRyICh0
eXBlIDApCisgICAgdW5yZWFjaGFibGUpCisgIChmdW5jICRtYWluICh0eXBlIDIpIChyZXN1bHQg
aTMyKQorICAgIChsb2NhbCBpMzIgaTMyIGkzMiBpMzIpCisgICAgaTMyLmNvbnN0IDAKKyAgICBs
b2NhbC50ZWUgMgorICAgIGxvY2FsLnNldCAzCisgICAgbG9vcCAgOzsgbGFiZWwgPSBAMQorICAg
ICAgbG9jYWwuZ2V0IDIKKyAgICAgIGkzMi5jb25zdCA1MDAwMAorICAgICAgaTMyLmVxCisgICAg
ICAoQGNvZGVfYW5ub3RhdGlvbi5icmFuY2hfaGludCAiXDAwIikgaWYgIDs7IGxhYmVsID0gQDIK
KyAgICAgICAgaTMyLmNvbnN0IDEKKyAgICAgICAgbG9jYWwuc2V0IDMKKyAgICAgIGVuZAorICAg
ICAgbG9jYWwuZ2V0IDIKKyAgICAgIGkzMi5jb25zdCAxCisgICAgICBpMzIuYWRkCisgICAgICBs
b2NhbC50ZWUgMgorICAgICAgaTMyLmNvbnN0IDEwMDAwMAorICAgICAgaTMyLm5lCisgICAgICAo
QGNvZGVfYW5ub3RhdGlvbi5icmFuY2hfaGludCAiXDAxIikgYnJfaWYgMCAoO0AxOykKKyAgICBl
bmQKKyAgICBsb2NhbC5nZXQgMykKKyAgKHRhYmxlICg7MDspIDEgMSBmdW5jcmVmKQorICAobWVt
b3J5ICg7MDspIDE3IDEyOCkKKyAgKGdsb2JhbCAoOzA7KSAobXV0IGkzMikgKGkzMi5jb25zdCAx
MDQ4NTc2KSkKKyAgKGV4cG9ydCAibWVtb3J5IiAobWVtb3J5IDApKQorICAoZXhwb3J0ICJfbWFp
biIgKGZ1bmMgJG1haW4pKQorICAoZWxlbSAoOzA7KSAoaTMyLmNvbnN0IDApIGZ1bmMgJF9fd2Fz
bV9udWxscHRyKSkKKyovCisKK2NvbnN0IHZlcmJvc2UgPSBmYWxzZTsKK2NvbnN0IHdhc21GaWxl
ID0gJ2JyYW5jaEhpbnRzTW9kdWxlLndhc20nOworCitjb25zdCBtb2R1bGUgPSAobG9jYXRpb24p
ID0+IHsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYFByb2Nlc3NpbmcgJHtsb2Nh
dGlvbn1gKTsKKyAgICBsZXQgYnVmID0gdHlwZW9mIHJlYWRidWZmZXIgIT09ICJ1bmRlZmluZWQi
PyByZWFkYnVmZmVyKGxvY2F0aW9uKSA6IHJlYWQobG9jYXRpb24sICdiaW5hcnknKTsKKyAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYCAgU2l6ZTogJHtidWYuYnl0ZUxlbmd0aH1gKTsK
KyAgICBsZXQgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWYpOworICAgIHJldHVy
biBtb2R1bGU7Cit9OworCitjb25zdCBicmFuY2hIaW50c01vZHVsZSA9IG1vZHVsZSh3YXNtRmls
ZSk7Citjb25zdCBwYXJzZWRCcmFuY2hIaW50c1NlY3Rpb24gPSBXZWJBc3NlbWJseS5Nb2R1bGUu
Y3VzdG9tU2VjdGlvbnMoYnJhbmNoSGludHNNb2R1bGUsICJjb2RlX2Fubm90YXRpb24uYnJhbmNo
X2hpbnQiKTsKK2Fzc2VydC5lcShwYXJzZWRCcmFuY2hIaW50c1NlY3Rpb24ubGVuZ3RoLCAxKTsK
K2NvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKGJyYW5jaEhpbnRzTW9k
dWxlKTsKK2NvbnN0IHJlc3VsdCA9IGluc3RhbmNlLmV4cG9ydHMuX21haW4oKTsKK2Fzc2VydC5l
cShyZXN1bHQsIDEpOwo=
</data>
<flag name="review"
          id="476149"
          type_id="1"
          status="-"
          setter="saam"
    />
    <flag name="commit-queue"
          id="476170"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449923</attachid>
            <date>2022-01-25 06:14:37 -0800</date>
            <delta_ts>2022-01-25 06:19:04 -0800</delta_ts>
            <desc>bug-235581: add support for WASM branch hinting proposal</desc>
            <filename>bug-235581-patch</filename>
            <type>text/plain</type>
            <size>43383</size>
            <attacher name="Tom Tartarin">tom</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
YjkzMWQxMWNlYTgyLi5jMjZkMzUxOTY3OTIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDEtMjUgIFRv
bSBUYXJ0YXJpbiAgPHRvbUBsZWFuaW5ndGVjaC5jb20+CisKKyAgICAgICAgW0pTQ10gQWRkIHRl
c3QgZm9yIFdlYkFzc2VtYmx5IGJyYW5jaCBoaW50cyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU1ODEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20ueWFtbDoKKyAgICAgICAgKiB3
YXNtL2JyYW5jaC1oaW50cy9icmFuY2hIaW50c01vZHVsZS53YXNtOiBBZGRlZC4KKyAgICAgICAg
KiB3YXNtL2JyYW5jaC1oaW50cy9icmFuY2hIaW50c1NlY3Rpb24uanM6IEFkZGVkLgorICAgICAg
ICAoY29uc3QubW9kdWxlKToKKwogMjAyMi0wMS0xOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEltcGxlbWVudCBUZW1wb3JhbC5Ob3cuaW5zdGFu
dCgpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20ueWFtbCBiL0pTVGVzdHMvd2FzbS55YW1sCmlu
ZGV4IDAwNmMzM2JlNzgzNy4uY2VkOTRjNTNiNmYzIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20u
eWFtbAorKysgYi9KU1Rlc3RzL3dhc20ueWFtbApAQCAtNDcsNiArNDcsOCBAQAogICBjbWQ6IHJ1
bldlYkFzc2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS92
OC8KICAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlKDpub19tb2R1bGUsICJtanN1bml0LmpzIikg
dW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKKy0gcGF0aDogd2FzbS9icmFuY2gtaGludHMKKyAgY21k
OiBydW5XZWJBc3NlbWJseVN1aXRlKCItLXVzZVdlYkFzc2VtYmx5QnJhbmNoSGludHM9dHJ1ZSIp
CiAKIC0gcGF0aDogd2FzbS9yZWZlcmVuY2VzLXNwZWMtdGVzdHMvZWxlbS53YXN0LmpzCiAgIGNt
ZDogcnVuV2ViQXNzZW1ibHlSZWZlcmVuY2VTcGVjVGVzdCA6bm9ybWFsCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vYnJhbmNoLWhpbnRzL2JyYW5jaEhpbnRzTW9kdWxlLndhc20gYi9KU1Rlc3Rz
L3dhc20vYnJhbmNoLWhpbnRzL2JyYW5jaEhpbnRzTW9kdWxlLndhc20KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yOWRmODZkYTcyYjIKQmluYXJ5IGZpbGVzIC9kZXYv
bnVsbCBhbmQgYi9KU1Rlc3RzL3dhc20vYnJhbmNoLWhpbnRzL2JyYW5jaEhpbnRzTW9kdWxlLndh
c20gZGlmZmVyCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vYnJhbmNoLWhpbnRzL2JyYW5jaEhp
bnRzU2VjdGlvbi5qcyBiL0pTVGVzdHMvd2FzbS9icmFuY2gtaGludHMvYnJhbmNoSGludHNTZWN0
aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjhkZjE4MjZi
MjA1Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2JyYW5jaC1oaW50cy9icmFuY2hI
aW50c1NlY3Rpb24uanMKQEAgLTAsMCArMSw2MiBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZyb20g
Jy4uL2Fzc2VydC5qcycKKworLyoKK1RoaXMgdGVzdCBsb2FkcyBhIFdlYkFzc2VtYmx5IGZpbGUg
Y29tcGlsZWQgd2l0aCB3YXQyd2FzbSB3aXRoIHN1cHBvcnQgZm9yIGNvZGUgYW5ub3RhdGlvbnMu
CitzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS95dXJpOTEvd2FidC90cmVlL2Fubm90YXRpb25zCisK
K0Zyb20gdGhlIGZvbGxvd2luZyAud2F0OgorKG1vZHVsZQorICAodHlwZSAoOzA7KSAoZnVuYykp
CisgICh0eXBlICg7MTspIChmdW5jIChwYXJhbSBpMzIpIChyZXN1bHQgaTMyKSkpCisgICh0eXBl
ICg7MjspIChmdW5jIChyZXN1bHQgaTMyKSkpCisgIChmdW5jICRfX3dhc21fbnVsbHB0ciAodHlw
ZSAwKQorICAgIHVucmVhY2hhYmxlKQorICAoZnVuYyAkbWFpbiAodHlwZSAyKSAocmVzdWx0IGkz
MikKKyAgICAobG9jYWwgaTMyIGkzMiBpMzIgaTMyKQorICAgIGkzMi5jb25zdCAwCisgICAgbG9j
YWwudGVlIDIKKyAgICBsb2NhbC5zZXQgMworICAgIGxvb3AgIDs7IGxhYmVsID0gQDEKKyAgICAg
IGxvY2FsLmdldCAyCisgICAgICBpMzIuY29uc3QgNTAwMDAKKyAgICAgIGkzMi5lcQorICAgICAg
KEBjb2RlX2Fubm90YXRpb24uYnJhbmNoX2hpbnQgIlwwMCIpIGlmICA7OyBsYWJlbCA9IEAyCisg
ICAgICAgIGkzMi5jb25zdCAxCisgICAgICAgIGxvY2FsLnNldCAzCisgICAgICBlbmQKKyAgICAg
IGxvY2FsLmdldCAyCisgICAgICBpMzIuY29uc3QgMQorICAgICAgaTMyLmFkZAorICAgICAgbG9j
YWwudGVlIDIKKyAgICAgIGkzMi5jb25zdCAxMDAwMDAKKyAgICAgIGkzMi5uZQorICAgICAgKEBj
b2RlX2Fubm90YXRpb24uYnJhbmNoX2hpbnQgIlwwMSIpIGJyX2lmIDAgKDtAMTspCisgICAgZW5k
CisgICAgbG9jYWwuZ2V0IDMpCisgICh0YWJsZSAoOzA7KSAxIDEgZnVuY3JlZikKKyAgKG1lbW9y
eSAoOzA7KSAxNyAxMjgpCisgIChnbG9iYWwgKDswOykgKG11dCBpMzIpIChpMzIuY29uc3QgMTA0
ODU3NikpCisgIChleHBvcnQgIm1lbW9yeSIgKG1lbW9yeSAwKSkKKyAgKGV4cG9ydCAiX21haW4i
IChmdW5jICRtYWluKSkKKyAgKGVsZW0gKDswOykgKGkzMi5jb25zdCAwKSBmdW5jICRfX3dhc21f
bnVsbHB0cikpCisqLworCitjb25zdCB2ZXJib3NlID0gZmFsc2U7Citjb25zdCB3YXNtRmlsZSA9
ICdicmFuY2hIaW50c01vZHVsZS53YXNtJzsKKworY29uc3QgbW9kdWxlID0gKGxvY2F0aW9uKSA9
PiB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGBQcm9jZXNzaW5nICR7bG9jYXRp
b259YCk7CisgICAgbGV0IGJ1ZiA9IHR5cGVvZiByZWFkYnVmZmVyICE9PSAidW5kZWZpbmVkIj8g
cmVhZGJ1ZmZlcihsb2NhdGlvbikgOiByZWFkKGxvY2F0aW9uLCAnYmluYXJ5Jyk7CisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIHByaW50KGAgIFNpemU6ICR7YnVmLmJ5dGVMZW5ndGh9YCk7Cisg
ICAgbGV0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVmKTsKKyAgICByZXR1cm4g
bW9kdWxlOworfTsKKworY29uc3QgYnJhbmNoSGludHNNb2R1bGUgPSBtb2R1bGUod2FzbUZpbGUp
OworY29uc3QgcGFyc2VkQnJhbmNoSGludHNTZWN0aW9uID0gV2ViQXNzZW1ibHkuTW9kdWxlLmN1
c3RvbVNlY3Rpb25zKGJyYW5jaEhpbnRzTW9kdWxlLCAiY29kZV9hbm5vdGF0aW9uLmJyYW5jaF9o
aW50Iik7Cithc3NlcnQuZXEocGFyc2VkQnJhbmNoSGludHNTZWN0aW9uLmxlbmd0aCwgMSk7Citj
b25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShicmFuY2hIaW50c01vZHVs
ZSk7Citjb25zdCByZXN1bHQgPSBpbnN0YW5jZS5leHBvcnRzLl9tYWluKCk7Cithc3NlcnQuZXEo
cmVzdWx0LCAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGUxZDJhOGJiY2Q0ZS4uZjY5
ZGYyOTRlNDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NSBAQAorMjAy
Mi0wMS0yNSAgVG9tIFRhcnRhcmluICA8dG9tQGxlYW5pbmd0ZWNoLmNvbT4KKworICAgICAgICBb
SlNDXSBBZGQgc3VwcG9ydCBmb3IgV2ViQXNzZW1ibHkgYnJhbmNoIGhpbnRpbmcgcHJvcG9zYWwK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTU4MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlZSB0aGUg
cHJvcG9zYWwgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbjogaHR0cHM6Ly9naXRodWIu
Y29tL1dlYkFzc2VtYmx5L2JyYW5jaC1oaW50aW5nLgorICAgICAgICBUaGlzIGFsbG93cyBwYXJz
aW5nIGEgImNvZGVfYW5ub3RhdGlvbi5icmFuY2hfaGludCIgY3VzdG9tIHNlY3Rpb24sCisgICAg
ICAgIGFzIHBlciB0aGUgY29kZSBhbm5vdGF0aW9uIHByb3Bvc2FsOiBodHRwczovL2dpdGh1Yi5j
b20vV2ViQXNzZW1ibHkvYW5ub3RhdGlvbnMuCisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRl
cyBwZXIgZnVuY3Rpb24gaW5mb3JtYXRpb24gYWJvdXQgaG93IGxpa2VseSBhIGJyYW5jaCBhdCBh
CisgICAgICAgIGdpdmVuIG9mZnNldCBpcyB0byBiZSB0YWtlbi4gSXQgaXMgc2ltaWxhciB0byBi
cmFuY2ggd2VpZ2h0IG1ldGFkYXRhIGluIExMVk0uCisKKyAgICAgICAgRm9yIEIzIGFuZCBBSVIg
dGhpcyBpbXBsaWVzIGdlbmVyYXRpbmcgImhpbnRlZCIgYmxvY2tzLCB3aG9zZSBmcmVxdWVuY2ll
cyBhcmUgYWxyZWFkeSBzZXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGIzL0Iz
QmFzaWNCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKiBiMy9CM0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OnNldEhpbnRlZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjppc0hpbnRl
ZCBjb25zdCk6CisgICAgICAgICogYjMvQjNFc3RpbWF0ZVN0YXRpY0V4ZWN1dGlvbkNvdW50cy5j
cHA6CisgICAgICAgIChKU0M6OkIzOjplc3RpbWF0ZVN0YXRpY0V4ZWN1dGlvbkNvdW50cyk6Cisg
ICAgICAgICogYjMvQjNQcm9jZWR1cmUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJl
OjphZGRIaW50ZWRCbG9jayk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuaDoKKyAgICAgICAg
KiBiMy9haXIvQWlyQmFzaWNCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2lj
QmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnNldEZyZXF1ZW5jeSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnNldEhpbnRlZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkJhc2ljQmxvY2s6OmlzSGludGVkIGNvbnN0KToKKyAgICAgICAgKiBiMy9haXIvQWly
Q29kZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZEhpbnRlZEJsb2NrKToK
KyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xp
c3QuaDoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRJZldpdGhIaW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRCcmFuY2hXaXRoSGludCk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZElmKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkSWZXaXRoSGludCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZEJyYW5jaFdpdGhIaW50KToKKyAgICAgICAgKiB3YXNtL1dhc21CcmFu
Y2hIaW50cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QnJhbmNoSGludE1hcDo6aW5z
ZXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QnJhbmNoSGludE1hcDo6Z2V0QnJhbmNoSGludCBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OmJyYW5jaEhpbnRUb0ZyZXF1ZW5jeUNsYXNzKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6YnJhbmNoSGludFRvSW52ZXJzZSk6CisgICAgICAgIChKU0M6
Oldhc206OmlzVmFsaWRCcmFuY2hIaW50KToKKyAgICAgICAgKiB3YXNtL1dhc21CcmFuY2hIaW50
c1NlY3Rpb25QYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QnJhbmNoSGlu
dHNTZWN0aW9uUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogd2FzbS9XYXNtQnJhbmNoSGludHNT
ZWN0aW9uUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpCcmFuY2hIaW50c1Nl
Y3Rpb25QYXJzZXI6OkJyYW5jaEhpbnRzU2VjdGlvblBhcnNlcik6CisgICAgICAgICogd2FzbS9X
YXNtTW9kdWxlSW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3Jt
YXRpb246OmdldEJyYW5jaEhpbnQgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25Q
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUN1c3Rv
bSk6CisKIDIwMjItMDEtMjEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBGaXggYnVpbGQgd2hlbiB1c2luZyBWaXN1YWwgU3R1ZGlvIDIwMjIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmE1Y2IxZTZhYmJiLi43MTQ1YjU1ZmNk
NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NTYsNiArODU2LDggQEAKIAkJ
MzNBOTIwQkQyM0RBMkM2RDAwMEVCQUYwIC8qIENvbW1vblNsb3dQYXRoc0lubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzQTkyMEJDMjNEQTJD
NkQwMDBFQkFGMCAvKiBDb21tb25TbG93UGF0aHNJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzNCMkE1NDcyMjY1MzQ4MTAwNUEwRjc5
IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAq
LzsgfTsKIAkJMzNCMkE1NDgyMjY1NDNCRjAwNUEwRjc5IC8qIEZUTExvd2VyREZHVG9CMy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwNDE3
MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0IzLmNwcCAqLzsgfTsKKwkJMzdBQUMwOTMy
NzlGMUJGQzAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QUFDMDkyMjc5RjEyNDIw
MEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmggKi87IH07CisJCTM3QUFD
MDk0Mjc5RjFDMDUwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QUFDMDkxMjc5RjEyNDIwMEQ2NDg0MiAv
KiBXYXNtQnJhbmNoSGludHMuaCAqLzsgfTsKIAkJMzdDNzM4RDIxRURCNTZFNDAwM0YyQjBCIC8q
IFBhcnNlSW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzN0M3MzhEMTFFREI1NjcyMDAzRjJCMEIgLyogUGFyc2VJbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTI5NTI3NzFEMkNGNkJDMDBFNzhC
ODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5IGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyOTUyNzMxRDJDRjZB
QzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5w
eSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTI5
NTI3ODFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBw
ZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTI5NTI3NDFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVf
aW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM3MjYsNiArMzcyOCw5IEBACiAJCTMzQjJB
NTQ1MjI2NTFENTMwMDVBMEY3OSAvKiBNYXJrZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYXJrZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MTE5QTc3
MjBDQ0I1REMwMDJDNkRDOSAvKiBXZWJLaXRUYXJnZXRDb25kaXRpb25hbHMueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBwYXRoID0gV2ViS2l0VGFyZ2V0Q29uZGl0aW9uYWxzLnhjY29uZmlnOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzNzFEODQyQzE3Qzk4QjZFMDBFQ0Y5OTQgLyogbGliei5keWxp
YiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21w
aWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliei5keWxpYjsgcGF0aCA9IHVzci9saWIvbGli
ei5keWxpYjsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CisJCTM3QUFDMDkwMjc5RjEyNDEwMEQ2
NDg0MiAvKiBXYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzN0FBQzA5MTI3OUYxMjQyMDBENjQ4NDIgLyog
V2FzbUJyYW5jaEhpbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBXYXNt
QnJhbmNoSGludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzdBQUMwOTIyNzlG
MTI0MjAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsg
ZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFdhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdDNzM4RDExRURCNTY3MjAwM0YyQjBCIC8q
IFBhcnNlSW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlSW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAv
KiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNf
d3JhcHBlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMjk1Mjc0
MUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9p
bXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGJ1
aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzMwOSw2ICs3MzE0LDkgQEAKIAkJN0I5OEQxMzMx
QjYwQ0QxRTAwMjNCMUE0IC8qIHdhc20gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTM3QUFDMDkxMjc5RjEyNDIwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGlu
dHMuaCAqLywKKwkJCQkzN0FBQzA5MDI3OUYxMjQxMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhpbnRz
U2VjdGlvblBhcnNlci5jcHAgKi8sCisJCQkJMzdBQUMwOTIyNzlGMTI0MjAwRDY0ODQyIC8qIFdh
c21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuaCAqLywKIAkJCQlBRDJGQ0I4QTFEQjU4NDAwMDBC
M0U3MzYgLyoganMgKi8sCiAJCQkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJ
UkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTI4NDdBREEyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21B
aXJJUkdlbmVyYXRvci5oICovLApAQCAtMTA5NTYsNiArMTA5NjQsNyBAQAogCQkJCTBGRTA1MDI5
MUFBOTA5NTYwMEQzM0IzMyAvKiBTY29wZWRBcmd1bWVudHNUYWJsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMkIxQUE5MDk1NjAwRDMzQjMzIC8qIFNjb3BlT2Zmc2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkzN0FBQzA5NDI3OUYxQzA1MDBENjQ4NDIgLyog
V2FzbUJyYW5jaEhpbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMzExMUI4QjIzOTcyNTY1MDBB
QTM0Q0UgLyogU2NyaWJibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDY4MTg5QUZFOUMw
MDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDZF
MTg5QjAwQUEwMDYzMzIzMSAvKiBTY3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLApAQCAt
MTEwODIsNiArMTEwOTEsNyBAQAogCQkJCUZFMzQyMjEyMUQ2QjgxQzMwMDMyQkU4OCAvKiBUaHJv
d1Njb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3MkQ0RjE2ODc5RkREMDBFNTdGQkQgLyog
VGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0
MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTM3QUFDMDkzMjc5
RjFCRkMwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDE0NDhDRDEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjU1OTg5ODE3Qzg2QzU4MDBBMUU1NDMgLyogVG9OYXRpdmVG
cm9tVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REU5MTk4MzJEQUMwMDdENEIxOSAv
KiBUb1RoaXNTdGF0dXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CmluZGV4IDg3ODFmYjQ3MTA0MC4uM2U0M2FmMTZhNDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0CkBAIC0xMDY1LDYgKzEwNjUsNyBAQCB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAg
QG5vLXVuaWZ5CiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAogd2FzbS9XYXNtQkJRUGxhbi5j
cHAKIHdhc20vV2FzbUJpbmRpbmcuY3BwCit3YXNtL1dhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJz
ZXIuY3BwCiB3YXNtL1dhc21DYWxsZWUuY3BwCiB3YXNtL1dhc21DYWxsZWVHcm91cC5jcHAKIHdh
c20vV2FzbUNhbGxlZVJlZ2lzdHJ5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNp
Y0Jsb2NrLmNwcAppbmRleCBjNjIxMzU0NWJlZjguLmMzNjUwNWIzMzJlOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKQEAgLTQxLDYgKzQxLDcgQEAgY29uc3Qg
Y2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9ICIjIjsKIEJhc2ljQmxvY2s6OkJh
c2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCiAgICAgOiBtX2luZGV4
KGluZGV4KQogICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQorICAgICwgbV9oaW50ZWQoZmFs
c2UpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAppbmRleCAz
NzYxMzhlMWNmNGMuLjRmODRmOGVjNGU1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jh
c2ljQmxvY2suaApAQCAtMTQ3LDYgKzE0Nyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZyZXF1
ZW5jeShkb3VibGUgZnJlcXVlbmN5KSB7IG1fZnJlcXVlbmN5ID0gZnJlcXVlbmN5OyB9CiAgICAg
ZG91YmxlIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CiAKKyAgICB2
b2lkIHNldEhpbnRlZChib29sIGhpbnRlZCkgeyBtX2hpbnRlZCA9IGhpbnRlZDsgfQorICAgIGJv
b2wgaXNIaW50ZWQoKSBjb25zdCB7IHJldHVybiBtX2hpbnRlZDsgfQorCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkZWVwRHVtcChjb25zdCBQcm9jZWR1cmUm
LCBQcmludFN0cmVhbSYpIGNvbnN0OwogCkBAIC0xNzcsNiArMTgwLDcgQEAgcHJpdmF0ZToKICAg
ICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CiAgICAgU3VjY2Vzc29yTGlzdCBtX3N1
Y2Nlc3NvcnM7CiAgICAgZG91YmxlIG1fZnJlcXVlbmN5OworICAgIGJvb2wgbV9oaW50ZWQ7CiB9
OwogCiBjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRXN0aW1hdGVTdGF0aWNFeGVjdXRpb25Db3VudHMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRXN0aW1hdGVTdGF0aWNFeGVjdXRpb25Db3VudHMuY3BwCmlu
ZGV4IDNiMzQ4ZjE5NTEwMS4uOWFiZDc3OThjY2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFc3RpbWF0ZVN0YXRpY0V4ZWN1dGlvbkNvdW50cy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRXN0aW1hdGVTdGF0aWNFeGVjdXRpb25Db3VudHMuY3Bw
CkBAIC00MCw2ICs0MCw4IEBAIGJvb2wgZXN0aW1hdGVTdGF0aWNFeGVjdXRpb25Db3VudHMoUHJv
Y2VkdXJlJiBwcm9jZWR1cmUpCiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2Vk
dXJlKSB7CiAgICAgICAgIGNvbnN0ZXhwciBkb3VibGUgYmFzZSA9IDEwLjA7CisgICAgICAgIGlm
IChibG9jay0+aXNIaW50ZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBibG9j
ay0+c2V0RnJlcXVlbmN5KHBvdyhiYXNlLCBuYXR1cmFsTG9vcHMubG9vcERlcHRoKGJsb2NrKSkp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKaW5kZXgg
MWUxNGFlODNlMzBiLi4wZDE2MDI5OGIzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmNwcApAQCAtNzUsNiArNzUsMTMgQEAgQmFzaWNCbG9jayogUHJvY2VkdXJlOjph
ZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0Jhc2lj
QmxvY2sqIFByb2NlZHVyZTo6YWRkSGludGVkQmxvY2soRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5
KQoreworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGFkZEJsb2NrKHN0YXRpY19jYXN0PGRvdWJs
ZT4oZnJlcXVlbmN5KSk7CisgICAgcmVzdWx0LT5zZXRIaW50ZWQodHJ1ZSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogQWlyOjpTdGFja1Nsb3QqIFByb2NlZHVyZTo6YWRkU3RhY2tTbG90KHVp
bnQ2NF90IGJ5dGVTaXplKQogewogICAgIHJldHVybiBtX2NvZGUtPmFkZFN0YWNrU2xvdChieXRl
U2l6ZSwgQWlyOjpTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuaAppbmRleCA0MmM0ZmZiNGM3ZGMuLmM4MzliZDUwOGUwMCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCiAjaW5jbHVkZSAi
QjNPcmlnaW4uaCIKICNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAuaCIKICNpbmNsdWRlICJCM1Nw
YXJzZUNvbGxlY3Rpb24uaCIKQEAgLTEwMSw2ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
dm9pZCogZnJvbnRlbmREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9mcm9udGVuZERhdGE7IH0KIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVu
Y3kgPSAxKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCYXNpY0Jsb2NrKiBhZGRIaW50ZWRCbG9j
ayhGcmVxdWVuY3lDbGFzcyA9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpOwogCiAgICAgLy8gQ2hh
bmdlcyB0aGUgb3JkZXIgb2YgYmFzaWMgYmxvY2tzIHRvIGJlIGFzIGluIHRoZSBzdXBwbGllZCB2
ZWN0b3IuIFRoZSB2ZWN0b3IgZG9lcyBub3QKICAgICAvLyBuZWVkIHRvIG1lbnRpb24gZXZlcnkg
YmxvY2sgaW4gdGhlIHByb2NlZHVyZS4gQmxvY2tzIG5vdCBtZW50aW9uZWQgd2lsbCBiZSBwbGFj
ZWQgYWZ0ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2su
Y3BwCmluZGV4IGM3ZjQ4NDMwYWIwNC4uOWFlOTdkNDhhNTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKQEAgLTkyLDYgKzkyLDcgQEAgdm9p
ZCBCYXNpY0Jsb2NrOjpkdW1wRm9vdGVyKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiBCYXNpY0Js
b2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQogICAgIDog
bV9pbmRleChpbmRleCkKICAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKKyAgICAsIG1faGlu
dGVkKGZhbHNlKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5oCmluZGV4IDNjMmQ1NjRiM2U2ZC4uZjI3NzZiMDZmYmNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaApAQCAtMTMwLDggKzEzMCwxMiBA
QCBwdWJsaWM6CiAgICAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwg
QmFzaWNCbG9jayogdG8pOwogICAgIGJvb2wgY29udGFpbnNQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3NvcikgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuY29udGFpbnMocHJl
ZGVjZXNzb3IpOyB9CiAKKyAgICB2b2lkIHNldEZyZXF1ZW5jeShkb3VibGUgZnJlcXVlbmN5KSB7
IG1fZnJlcXVlbmN5ID0gZnJlcXVlbmN5OyB9CiAgICAgZG91YmxlIGZyZXF1ZW5jeSgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CiAKKyAgICB2b2lkIHNldEhpbnRlZChib29sIGhpbnRl
ZCkgeyBtX2hpbnRlZCA9IGhpbnRlZDsgfQorICAgIGJvb2wgaXNIaW50ZWQoKSBjb25zdCB7IHJl
dHVybiBtX2hpbnRlZDsgfQorCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAg
ICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkBAIC0xNTIsNiArMTU2LDcg
QEAgcHJpdmF0ZToKICAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKICAgICBQcmVkZWNl
c3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CiAgICAgZG91YmxlIG1fZnJlcXVlbmN5OworICAgIGJv
b2wgbV9oaW50ZWQ7CiB9OwogCiBjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKaW5kZXggODg2NTViYzcwMWU2Li40MzQxMGQx
YzMzYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcApAQCAtMTYz
LDYgKzE2MywxMyBAQCBCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5
KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0Jhc2ljQmxvY2sqIENvZGU6OmFkZEhpbnRlZEJs
b2NrKEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSkKK3sKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQg
PSBhZGRCbG9jayhzdGF0aWNfY2FzdDxkb3VibGU+KGZyZXF1ZW5jeSkpOworICAgIHJlc3VsdC0+
c2V0SGludGVkKHRydWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFN0YWNrU2xvdCogQ29k
ZTo6YWRkU3RhY2tTbG90KHVpbnQ2NF90IGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCiB7
CiAgICAgU3RhY2tTbG90KiByZXN1bHQgPSBtX3N0YWNrU2xvdHMuYWRkTmV3KGJ5dGVTaXplLCBr
aW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKaW5kZXggM2M5ZGY0ZmM1
MzQxLi42Zjc2NTdmYThlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
CkBAIC0xMDgsNiArMTA4LDcgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNVc2VkUmVnaXN0ZXJz
KCkgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBCYXNpY0Jsb2NrKiBhZGRCbG9jayhk
b3VibGUgZnJlcXVlbmN5ID0gMSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQmFzaWNCbG9jayog
YWRkSGludGVkQmxvY2soRnJlcXVlbmN5Q2xhc3MgPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKTsK
IAogICAgIC8vIE5vdGUgdGhhdCB5b3UgY2FuIHJlbHkgb24gc3RhY2sgc2xvdHMgYWx3YXlzIGdl
dHRpbmcgaW5kaWNlcyB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgaW5kZXgKICAgICAvLyBvZiBh
bnkgcHJpb3Igc3RhY2sgc2xvdC4gSW4gZmFjdCwgYWxsIHN0YWNrIHNsb3RzIHlvdSBjcmVhdGUg
aW4gdGhlIGZ1dHVyZSB3aWxsIGhhdmUgYW4gaW5kZXgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4IGJmOWQ4YTM4M2Y3My4uN2Q2MzFlODc5YmZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTU0OSw2
ICs1NDksNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9v
bCwgdXNlV2ViQXNzZW1ibHlUaHJlYWRpbmcsIHRydWUsIE5vcm1hbCwgIkFsbG93IGluc3RydWN0
aW9ucyBmcm9tIHRoZSB3YXNtIHRocmVhZGluZyBzcGVjLiIpIFwKICAgICB2KEJvb2wsIHVzZVdl
YkFzc2VtYmx5VHlwZWRGdW5jdGlvblJlZmVyZW5jZXMsIGZhbHNlLCBOb3JtYWwsICJBbGxvdyBm
dW5jdGlvbiB0eXBlcyBmcm9tIHRoZSB3YXNtIHR5cGVkIGZ1bmN0aW9uIHJlZmVyZW5jZXMgc3Bl
Yy4iKSBcCiAgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMsIHRydWUsIE5vcm1h
bCwgIkFsbG93IHRoZSBuZXcgc2VjdGlvbiBhbmQgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHdhc20g
ZXhjZXB0aW9uIGhhbmRsaW5nIHNwZWMuIikgXAorICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1ibHlC
cmFuY2hIaW50cywgZmFsc2UsIE5vcm1hbCwgIkFsbG93IHRoZSBuZXcgc2VjdGlvbiBmcm9tIHRo
ZSB3YXNtIGJyYW5jaCBoaW50aW5nIHNwZWMuIikgXAogCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVu
Y2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRv
ci5jcHAKaW5kZXggZjI4M2YzY2ZmMWFiLi41NTc5ODVkOWNiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApAQCAtNDQsNiArNDQs
NyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiV2FzbUJyYW5jaEhpbnRzLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50
aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUV4
Y2VwdGlvblR5cGUuaCIKQEAgLTM4OCw2ICszODksNyBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQmxvY2soQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBl
bmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYgbmV3U3RhY2spOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoQmxvY2tTaWduYXR1
cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIGJsb2NrLCBTdGFjayYgbmV3
U3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSwg
U3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3Rh
Y2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmV2l0aEhpbnQo
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2lu
Z1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2ssIGNvbnN0IEJyYW5j
aEhpbnQmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENv
bnRyb2xEYXRhJiwgY29uc3QgU3RhY2smKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCkBAIC00MDMsNiAr
NDA1LDcgQEAgcHVibGljOgogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xE
YXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVz
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2hXaXRoSGlu
dChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJl
dHVyblZhbHVlcywgY29uc3QgQnJhbmNoSGludCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZl
Y3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMs
IGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNrJiBleHByZXNzaW9uU3Rh
Y2spOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFj
aGFibGUoQ29udHJvbEVudHJ5JiwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IHsgfSk7
CkBAIC0zMTcxLDYgKzMxNzQsMTIgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQmxvY2soQmxv
Y2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIEMKIAogYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25h
dHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3Vs
dCwgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgaWYgKE9wdGlvbnM6
OnVzZVdlYkFzc2VtYmx5QnJhbmNoSGludHMoKSkgeworICAgICAgICBjb25zdCBCcmFuY2hIaW50
JiBoaW50ID0gbV9pbmZvLmdldEJyYW5jaEhpbnQobV9mdW5jdGlvbkluZGV4LCBtX3BhcnNlci0+
Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkpOworICAgICAgICBpZiAoaGludCAhPSBCcmFu
Y2hIaW50OjpJbnZhbGlkKQorICAgICAgICAgICAgcmV0dXJuIGFkZElmV2l0aEhpbnQoY29uZGl0
aW9uLCBzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCByZXN1bHQsIG5ld1N0YWNrLCBoaW50KTsK
KyAgICB9CisKICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fY29kZS5hZGRCbG9jaygpOwogICAg
IEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9jb2RlLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9j
ayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CkBAIC0zMTg1LDYgKzMxOTQsMjUg
QEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBC
bG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFMKICAgICByZXR1cm4geyB9OwogfQogCithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRJZldpdGhIaW50KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgQmxv
Y2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBl
JiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjaywgY29uc3QgQnJhbmNoSGludCYgaGludCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIEIzOjpGcmVxdWVuY3lDbGFzcyB0YWtlbkZyZXF1ZW5jeSA9IGJy
YW5jaEhpbnRUb0ZyZXF1ZW5jeUNsYXNzKGhpbnQpOworICAgIEIzOjpGcmVxdWVuY3lDbGFzcyBu
b3RUYWtlbkZyZXF1ZW5jeSA9IGJyYW5jaEhpbnRUb0ZyZXF1ZW5jeUNsYXNzKGJyYW5jaEhpbnRU
b0ludmVyc2UoaGludCkpOworCisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBtX2NvZGUuYWRkSGlu
dGVkQmxvY2sodGFrZW5GcmVxdWVuY3kpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9j
b2RlLmFkZEhpbnRlZEJsb2NrKG5vdFRha2VuRnJlcXVlbmN5KTsKKyAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIC8vIFdhc20gYm9vbHMgYXJl
IGkzMi4KKyAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8pLCBjb25kaXRpb24sIGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50QmxvY2st
PnNldFN1Y2Nlc3NvcnModGFrZW4sIG5vdFRha2VuKTsKKworICAgIG1fY3VycmVudEJsb2NrID0g
dGFrZW47CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFj
ayk7CisgICAgcmVzdWx0ID0gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wc0Zv
clNpZ25hdHVyZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRh
a2VuKTsKKyAgICByZXR1cm4geyB9OworfQorCiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNl
KENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJl
c3VsdHMpOwpAQCAtMzQxNCw2ICszNDQyLDEyIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJl
dHVybihjb25zdCBDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlCiAK
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwgRXhwcmVz
c2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CisgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5QnJhbmNoSGludHMoKSkg
eworICAgICAgICBjb25zdCBCcmFuY2hIaW50JiBoaW50ID0gbV9pbmZvLmdldEJyYW5jaEhpbnQo
bV9mdW5jdGlvbkluZGV4LCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkp
OworICAgICAgICBpZiAoaGludCAhPSBCcmFuY2hIaW50OjpJbnZhbGlkKQorICAgICAgICAgICAg
cmV0dXJuIGFkZEJyYW5jaFdpdGhIaW50KGRhdGEsIGNvbmRpdGlvbiwgcmV0dXJuVmFsdWVzLCBo
aW50KTsKKyAgICB9CisKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRh
dGEucmVzdWx0cyk7CiAKICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2Nr
Rm9yQnJhbmNoKCk7CkBAIC0zNDMwLDYgKzM0NjQsMjkgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNv
bnMKICAgICByZXR1cm4geyB9OwogfQogCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2hX
aXRoSGludChDb250cm9sRGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25z
dCBTdGFjayYgcmV0dXJuVmFsdWVzLCBjb25zdCBCcmFuY2hIaW50JiBoaW50KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnJl
c3VsdHMpOworCisgICAgQjM6OkZyZXF1ZW5jeUNsYXNzIHRhcmdldEZyZXF1ZW5jeSA9IGJyYW5j
aEhpbnRUb0ZyZXF1ZW5jeUNsYXNzKGhpbnQpOworICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IGRh
dGEudGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKKworICAgIHRhcmdldC0+c2V0RnJlcXVlbmN5KHN0
YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0RnJlcXVlbmN5KSk7CisgICAgdGFyZ2V0LT5zZXRIaW50
ZWQodHJ1ZSk7CisgICAgaWYgKGNvbmRpdGlvbikgeworICAgICAgICBCMzo6RnJlcXVlbmN5Q2xh
c3MgY29udGludWF0aW9uRnJlcXVlbmN5ID0gYnJhbmNoSGludFRvRnJlcXVlbmN5Q2xhc3MoYnJh
bmNoSGludFRvSW52ZXJzZShoaW50KSk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlv
biA9IG1fY29kZS5hZGRIaW50ZWRCbG9jayhjb250aW51YXRpb25GcmVxdWVuY3kpOworICAgICAg
ICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8pLCBjb25kaXRpb24sIGNvbmRpdGlvbik7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRT
dWNjZXNzb3JzKHRhcmdldCwgY29udGludWF0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSBjb250aW51YXRpb247CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXBwZW5kKEp1bXApOworICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQpOworICAgIH0KKworICAg
IHJldHVybiB7IH07Cit9CisKIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFN3aXRjaChFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBD
b250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaykg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIGF1dG8mIHN1Y2Nlc3NvcnMgPSBtX2N1cnJlbnRCbG9j
ay0+c3VjY2Vzc29ycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCmluZGV4IGRlZmZjZGVhZDM1ZS4uZDIzMzliZThmOTNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC01
Miw3ICs1Miw3IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgi
Ci0jaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiV2FzbUJy
YW5jaEhpbnRzLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVk
ZSAiV2FzbUNvbnRleHRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIK
QEAgLTM2Nyw2ICszNjcsNyBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQmxvY2soQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywg
Q29udHJvbFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYgbmV3U3RhY2spOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIGJsb2NrLCBTdGFjayYgbmV3U3RhY2ssIHVpbnQzMl90
IGxvb3BJbmRleCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYo
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2lu
Z1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmV2l0aEhpbnQoRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9s
VHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2ssIGNvbnN0IEJyYW5jaEhpbnQmKTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29u
c3QgU3RhY2smKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNl
VG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCkBAIC0zODIsNiArMzgzLDcgQEAgcHVibGlj
OgogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0
IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2hXaXRoSGludChDb250cm9sRGF0YSYs
IEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcywgY29u
c3QgQnJhbmNoSGludCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0
YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IFN0YWNrJiBl
eHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVu
ZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVu
dHJ5JiwgY29uc3QgU3RhY2smID0geyB9KTsKQEAgLTI0NzIsNiArMjQ3NCwxMiBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBTdAogewogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGRvIHNvbWUg
a2luZCBvZiBzdGFjayBwYXNzaW5nLgogCisgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5
QnJhbmNoSGludHMoKSkgeworICAgICAgICBjb25zdCBCcmFuY2hIaW50JiBoaW50ID0gbV9pbmZv
LmdldEJyYW5jaEhpbnQobV9mdW5jdGlvbkluZGV4LCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0
YXJ0aW5nT2Zmc2V0KCkpOworICAgICAgICBpZiAoaGludCAhPSBCcmFuY2hIaW50OjpJbnZhbGlk
KQorICAgICAgICAgICAgcmV0dXJuIGFkZElmV2l0aEhpbnQoY29uZGl0aW9uLCBzaWduYXR1cmUs
IGVuY2xvc2luZ1N0YWNrLCByZXN1bHQsIG5ld1N0YWNrLCBoaW50KTsKKyAgICB9CisKICAgICBC
YXNpY0Jsb2NrKiB0YWtlbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIG5v
dFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9u
ID0gbV9wcm9jLmFkZEJsb2NrKCk7CkBAIC0yNDg3LDYgKzI0OTUsMjggQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgU3QKICAgICByZXR1cm4geyB9OwogfQogCithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZElmV2l0aEhpbnQoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWdu
YXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2sm
IG5ld1N0YWNrLCBjb25zdCBCcmFuY2hIaW50JiBoaW50KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gZG8gc29tZSBraW5kIG9mIHN0YWNrIHBhc3Npbmcu
CisKKyAgICBGcmVxdWVuY3lDbGFzcyB0YWtlbkZyZXF1ZW5jeSA9IGJyYW5jaEhpbnRUb0ZyZXF1
ZW5jeUNsYXNzKGhpbnQpOworICAgIEZyZXF1ZW5jeUNsYXNzIG5vdFRha2VuRnJlcXVlbmN5ID0g
YnJhbmNoSGludFRvRnJlcXVlbmN5Q2xhc3MoYnJhbmNoSGludFRvSW52ZXJzZShoaW50KSk7CisK
KyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fcHJvYy5hZGRIaW50ZWRCbG9jayh0YWtlbkZyZXF1
ZW5jeSk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBtX3Byb2MuYWRkSGludGVkQmxvY2so
bm90VGFrZW5GcmVxdWVuY3kpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJv
Yy5hZGRCbG9jaygpOworCisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlvbikpOworICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YWtlbiwgdGFrZW5GcmVxdWVu
Y3kpLCBGcmVxdWVudGVkQmxvY2sobm90VGFrZW4sIG5vdFRha2VuRnJlcXVlbmN5KSk7CisgICAg
dGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKyAgICBub3RUYWtlbi0+YWRk
UHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworCisgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtl
bjsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsK
KyAgICByZXN1bHQgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJs
b2NrVHlwZTo6SWYsIG1fc3RhY2tTaXplLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEm
IGRhdGEsIGNvbnN0IFN0YWNrJiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEpOwpAQCAtMjcxOCw2ICsy
NzQ4LDEyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRh
JiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4KIAogYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29u
c3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogeworICAgIGlmIChPcHRp
b25zOjp1c2VXZWJBc3NlbWJseUJyYW5jaEhpbnRzKCkpIHsKKyAgICAgICAgY29uc3QgQnJhbmNo
SGludCYgaGludCA9IG1faW5mby5nZXRCcmFuY2hIaW50KG1fZnVuY3Rpb25JbmRleCwgbV9wYXJz
ZXItPmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpKTsKKyAgICAgICAgaWYgKGhpbnQgIT0g
QnJhbmNoSGludDo6SW52YWxpZCkKKyAgICAgICAgICAgIHJldHVybiBhZGRCcmFuY2hXaXRoSGlu
dChkYXRhLCBjb25kaXRpb24sIHJldHVyblZhbHVlcywgaGludCk7CisgICAgfQorCiAgICAgdW5p
ZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhKTsKIAogICAgIEJhc2ljQmxvY2sq
IHRhcmdldCA9IGRhdGEudGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKQEAgLTI3MzYsNiArMjc3Miwz
MSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwgRXhw
cmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdAogICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoV2l0aEhpbnQoQ29udHJvbERhdGEmIGRhdGEsIEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcywgY29uc3QgQnJh
bmNoSGludCYgaGludCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJs
b2NrKHJldHVyblZhbHVlcywgZGF0YSk7CisKKyAgICBGcmVxdWVuY3lDbGFzcyB0YXJnZXRGcmVx
dWVuY3kgPSBicmFuY2hIaW50VG9GcmVxdWVuY3lDbGFzcyhoaW50KTsKKyAgICBCYXNpY0Jsb2Nr
KiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CisKKyAgICB0YXJnZXQtPnNl
dEZyZXF1ZW5jeShzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldEZyZXF1ZW5jeSkpOworICAgIHRh
cmdldC0+c2V0SGludGVkKHRydWUpOworICAgIGlmIChjb25kaXRpb24pIHsKKyAgICAgICAgRnJl
cXVlbmN5Q2xhc3MgY29udGludWF0aW9uRnJlcXVlbmN5ID0gYnJhbmNoSGludFRvRnJlcXVlbmN5
Q2xhc3MoYnJhbmNoSGludFRvSW52ZXJzZShoaW50KSk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRIaW50ZWRCbG9jayh0YXJnZXRGcmVxdWVuY3kpOworICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gs
IG9yaWdpbigpLCBnZXQoY29uZGl0aW9uKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRT
dWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQsIHRhcmdldEZyZXF1ZW5jeSksIEZyZXF1
ZW50ZWRCbG9jayhjb250aW51YXRpb24sIGNvbnRpbnVhdGlvbkZyZXF1ZW5jeSkpOworICAgICAg
ICB0YXJnZXQtPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKyAgICAgICAgY29udGlu
dWF0aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisgICAgICAgIG1fY3VycmVu
dEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgRnJlcXVl
bnRlZEJsb2NrKHRhcmdldCwgdGFyZ2V0RnJlcXVlbmN5KSk7CisgICAgICAgIHRhcmdldC0+YWRk
UHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9
CisKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZh
dWx0VGFyZ2V0LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb25TdGFjayk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQnJhbmNoSGludHMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CcmFuY2hIaW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uMTkzMWZhZjVkODdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJyYW5jaEhpbnRzLmgKQEAgLTAsMCArMSw5MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBMZWFuaW5nIFRlY2hub2xvZ2llcyBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorI2luY2x1ZGUg
PHd0Zi9TdGRVbm9yZGVyZWRNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgV2Fz
bSB7CisKK2VudW0gY2xhc3MgQnJhbmNoSGludCA6IHVpbnQ4X3QgeworICAgIFVubGlrZWx5LAor
ICAgIExpa2VseSwKKyAgICBJbnZhbGlkLAorfTsKKworY2xhc3MgQnJhbmNoSGludE1hcCB7CisK
K3B1YmxpYzoKKworICAgIHZvaWQgaW5zZXJ0KHVpbnQzMl90IGJyYW5jaE9mZnNldCwgQnJhbmNo
SGludCBoaW50KQorICAgIHsKKyAgICAgICAgbV9tYXAuZW1wbGFjZShicmFuY2hPZmZzZXQsIGhp
bnQpOworICAgIH0KKworICAgIEJyYW5jaEhpbnQgZ2V0QnJhbmNoSGludCh1aW50MzJfdCBicmFu
Y2hPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ID0gbV9tYXAuZmluZChicmFu
Y2hPZmZzZXQpOworICAgICAgICBpZiAoaXQgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgICAgICBy
ZXR1cm4gQnJhbmNoSGludDo6SW52YWxpZDsKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cisg
ICAgfQorCitwcml2YXRlOgorCisgICAgU3RkVW5vcmRlcmVkTWFwPHVpbnQzMl90LCBCcmFuY2hI
aW50PiBtX21hcDsKKworfTsKKworaW5saW5lIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzIGJyYW5j
aEhpbnRUb0ZyZXF1ZW5jeUNsYXNzKGNvbnN0IEJyYW5jaEhpbnQmIGhpbnQpCit7CisgICAgcmV0
dXJuIGhpbnQgPT0gQnJhbmNoSGludDo6VW5saWtlbHkKKyAgICAgICAgPyBKU0M6OkIzOjpGcmVx
dWVuY3lDbGFzczo6UmFyZQorICAgICAgICA6IEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzOjpOb3Jt
YWw7Cit9CisKK2lubGluZSBCcmFuY2hIaW50IGJyYW5jaEhpbnRUb0ludmVyc2UoY29uc3QgQnJh
bmNoSGludCYgaGludCkKK3sKKyAgICByZXR1cm4gaGludCA9PSBCcmFuY2hIaW50OjpMaWtlbHkK
KyAgICAgICAgPyBCcmFuY2hIaW50OjpVbmxpa2VseQorICAgICAgICA6IEJyYW5jaEhpbnQ6Okxp
a2VseTsKK30KKworaW5saW5lIGJvb2wgaXNWYWxpZEJyYW5jaEhpbnQoQnJhbmNoSGludCBoaW50
KQoreworICAgIHN3aXRjaCAoaGludCkgeworICAgIGNhc2UgQnJhbmNoSGludDo6TGlrZWx5Ogor
ICAgIGNhc2UgQnJhbmNoSGludDo6VW5saWtlbHk6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30KK30gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU3ZjRlOTQxMDFiZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CcmFuY2hIaW50c1NlY3Rp
b25QYXJzZXIuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIg
TGVhbmluZyBUZWNobm9sb2dpZXMgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUJyYW5jaEhpbnRzU2VjdGlv
blBhcnNlci5oIgorCisjaW5jbHVkZSAiV2FzbUJyYW5jaEhpbnRzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworbmFtZXNwYWNlIFdhc20geworCithdXRvIEJyYW5jaEhpbnRzU2VjdGlvblBhcnNlcjo6
cGFyc2UoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgZnVuY3Rpb25Db3VudDsK
KyAgICBpbnQ2NF90IGxhc3RGdW5jdGlvbkluZGV4ID0gLTE7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25Db3VudCksICJjYW4ndCBnZXQgZnVuY3Rpb24g
Y291bnQiKTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkNvdW50OyAr
K2kpIHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKKyAgICAgICAgdWludDMyX3Qg
aGludENvdW50OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihm
dW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBmdW5jdGlvbiBpbmRleCBmb3IgZnVuY3Rpb24gIiwg
aSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW50NjRfdChmdW5jdGlvbkluZGV4KSA8
PSBsYXN0RnVuY3Rpb25JbmRleCwgImludmFsaWQgZnVuY3Rpb24gaW5kZXggIiwgZnVuY3Rpb25J
bmRleCwgIiBmb3IgZnVuY3Rpb24gIiwgaSk7CisKKyAgICAgICAgbGFzdEZ1bmN0aW9uSW5kZXgg
PSBmdW5jdGlvbkluZGV4OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGhpbnRDb3VudCksICJjYW4ndCBnZXQgbnVtYmVyIG9mIGhpbnRzIGZvciBmdW5jdGlv
biAiLCBpKTsKKworICAgICAgICBpZiAoIWhpbnRDb3VudCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGludDY0X3QgbGFzdEJyYW5jaE9mZnNldCA9IC0xOworICAgICAgICBCcmFu
Y2hIaW50TWFwIGJyYW5jaEhpbnRzRm9yRnVuY3Rpb247CisgICAgICAgIGZvciAodWludDMyX3Qg
aiA9IDA7IGogPCBoaW50Q291bnQ7ICsraikgeworICAgICAgICAgICAgdWludDMyX3QgYnJhbmNo
T2Zmc2V0OworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
YnJhbmNoT2Zmc2V0KSwgImNhbid0IGdldCBicmFuY2ggb2Zmc2V0IGZvciBoaW50ICIsIGopOwor
ICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbnQ2NF90KGJyYW5jaE9mZnNldCkgPD0g
bGFzdEJyYW5jaE9mZnNldCwgImludmFsaWQgYnJhbmNoIG9mZnNldCAiLCBicmFuY2hPZmZzZXQs
ICIgZm9yIGhpbnQgIiwgaik7CisKKyAgICAgICAgICAgIGxhc3RCcmFuY2hPZmZzZXQgPSBicmFu
Y2hPZmZzZXQ7CisKKyAgICAgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWRCeXRlOworICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShyZXNlcnZlZEJ5dGUpLCAiY2Fu
J3QgZ2V0IHJlc2VydmVkIGJ5dGUgZm9yIGhpbnQgIiwgaik7CisgICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHJlc2VydmVkQnl0ZSAhPSAweDEsICJpbnZhbGlkIHJlc2VydmVkIGJ5dGUg
Zm9yIGhpbnQgIiwgaik7CisKKyAgICAgICAgICAgIHVpbnQ4X3QgcGFyc2VkQnJhbmNoSGludDsK
KyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocGFyc2VkQnJh
bmNoSGludCksICJjYW4ndCBnZXQgYnJhbmNoIGhpbnQgdmFsdWUgZm9yIGhpbnQgIiwgaik7CisK
KyAgICAgICAgICAgIEJyYW5jaEhpbnQgYnJhbmNoSGludCA9IHN0YXRpY19jYXN0PEJyYW5jaEhp
bnQ+KGludDMyX3QocGFyc2VkQnJhbmNoSGludCkpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighaXNWYWxpZEJyYW5jaEhpbnQoYnJhbmNoSGludCksICJpbnZhbGlkIGJyYW5jaCBo
aW50IHZhbHVlICIsIHBhcnNlZEJyYW5jaEhpbnQsICIgZm9yIGhpbnQgIiwgaik7CisKKyAgICAg
ICAgICAgIGJyYW5jaEhpbnRzRm9yRnVuY3Rpb24uaW5zZXJ0KGJyYW5jaE9mZnNldCwgYnJhbmNo
SGludCk7CisgICAgICAgIH0KKyAgICAgICAgbV9pbmZvLT5icmFuY2hIaW50cy5lbXBsYWNlKGZ1
bmN0aW9uSW5kZXgsIFdURk1vdmUoYnJhbmNoSGludHNGb3JGdW5jdGlvbikpOworICAgIH0KKyAg
ICByZXR1cm4geyB9OworfQorCit9Cit9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjNjMDk5MmFlNTU3NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIu
aApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIExlYW5pbmcgVGVj
aG5vbG9naWVzIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlICJXYXNtQnJhbmNoSGludHMuaCIKKyNpbmNsdWRlICJXYXNtUGFy
c2VyLmgiCisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBCcmFu
Y2hIaW50c1NlY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFyc2VyPHZvaWQ+IHsKK3B1YmxpYzoKKyAg
ICBCcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBz
aXplX3Qgc291cmNlTGVuZ3RoLCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKKyAgICAgICAgOiBQ
YXJzZXIoc291cmNlQnVmZmVyLCBzb3VyY2VMZW5ndGgpCisgICAgICAgICwgbV9pbmZvKGluZm8p
CisgICAgeworICAgIH0KKyAgICBQYXJ0aWFsUmVzdWx0IHBhcnNlKCk7CisKK3ByaXZhdGU6Cisg
ICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87Cit9OworCit9Cit9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggMjFh
MzkyN2YyNTFmLi5kODJjNDFkOWZjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCkBAIC0yNywxMyArMjcsMTggQEAKIAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIldhc21CcmFuY2hIaW50cy5oIgogI2lu
Y2x1ZGUgIldhc21Gb3JtYXQuaCIKIAogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvU3RkVW5vcmRlcmVkTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CiAKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxNb2R1bGVJbmZvcm1hdGlvbj4geworCisgICAgdXNpbmcgQnJhbmNoSGludHMgPSBT
dGRVbm9yZGVyZWRNYXA8dWludDMyX3QsIEJyYW5jaEhpbnRNYXA+OworCiAgICAgTW9kdWxlSW5m
b3JtYXRpb24oKTsKICAgICBNb2R1bGVJbmZvcm1hdGlvbihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYpID0gZGVsZXRlOwogICAgIE1vZHVsZUluZm9ybWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uJiYp
ID0gZGVsZXRlOwpAQCAtOTQsNiArOTksMTQgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAgICAgYm9v
bCBpc0RlY2xhcmVkRXhjZXB0aW9uKHVpbnQzMl90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Rl
Y2xhcmVkRXhjZXB0aW9ucy5jb250YWlucyhpbmRleCk7IH0KICAgICB2b2lkIGFkZERlY2xhcmVk
RXhjZXB0aW9uKHVpbnQzMl90IGluZGV4KSB7IG1fZGVjbGFyZWRFeGNlcHRpb25zLnNldChpbmRl
eCk7IH0KIAorICAgIEJyYW5jaEhpbnQgZ2V0QnJhbmNoSGludCh1aW50MzJfdCBmdW5jdGlvbk9m
ZnNldCwgdWludDMyX3QgYnJhbmNoT2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBp
dCA9IGJyYW5jaEhpbnRzLmZpbmQoZnVuY3Rpb25PZmZzZXQpOworICAgICAgICByZXR1cm4gaXQg
PT0gYnJhbmNoSGludHMuZW5kKCkKKyAgICAgICAgICAgID8gQnJhbmNoSGludDo6SW52YWxpZAor
ICAgICAgICAgICAgOiBpdC0+c2Vjb25kLmdldEJyYW5jaEhpbnQoYnJhbmNoT2Zmc2V0KTsKKyAg
ICB9CisKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJ
bmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWduYXR1
cmVJbmRleD4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CkBAIC0xMTUsNiArMTI4
LDcgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAgICAgdWludDMyX3QgY29kZVNlY3Rpb25TaXplIHsg
MCB9OwogICAgIFZlY3RvcjxDdXN0b21TZWN0aW9uPiBjdXN0b21TZWN0aW9uczsKICAgICBSZWY8
TmFtZVNlY3Rpb24+IG5hbWVTZWN0aW9uOworICAgIEJyYW5jaEhpbnRzIGJyYW5jaEhpbnRzOwog
ICAgIHVpbnQzMl90IG51bWJlck9mRGF0YVNlZ21lbnRzIHsgMCB9OwogCiAgICAgQml0VmVjdG9y
IG1fZGVjbGFyZWRGdW5jdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2VjdGlvblBhcnNlci5jcHAKaW5kZXggYTg4OTVjOTUxMjlkLi41YjUxMTgxMTBlNTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAK
QEAgLTMwLDYgKzMwLDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJz
ZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNt
TmFtZVNlY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCkBAIC04OTYsNiArODk3
LDEyIEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20oKSAtPiBQYXJ0aWFsUmVzdWx0
CiAgICAgICAgIE5hbWVTZWN0aW9uUGFyc2VyIG5hbWVTZWN0aW9uUGFyc2VyKHNlY3Rpb24ucGF5
bG9hZC5iZWdpbigpLCBzZWN0aW9uLnBheWxvYWQuc2l6ZSgpLCBtX2luZm8pOwogICAgICAgICBp
ZiAoYXV0byBuYW1lU2VjdGlvbiA9IG5hbWVTZWN0aW9uUGFyc2VyLnBhcnNlKCkpCiAgICAgICAg
ICAgICBtX2luZm8tPm5hbWVTZWN0aW9uID0gV1RGTW92ZSgqbmFtZVNlY3Rpb24pOworICAgIH0g
ZWxzZSBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlCcmFuY2hIaW50cygpKSB7CisgICAgICAg
IE5hbWUgYnJhbmNoSGludHNOYW1lID0geyAnYycsICdvJywgJ2QnLCAnZScsICdfJywgJ2EnLCAn
bicsICduJywgJ28nLCAndCcsICdhJywgJ3QnLCAnaScsICdvJywgJ24nLCAnLicsICdiJywgJ3In
LCAnYScsICduJywgJ2MnLCAnaCcsICdfJywgJ2gnLCAnaScsICduJywgJ3QnIH07CisgICAgICAg
IGlmIChzZWN0aW9uLm5hbWUgPT0gYnJhbmNoSGludHNOYW1lKSB7CisgICAgICAgICAgICBCcmFu
Y2hIaW50c1NlY3Rpb25QYXJzZXIgYnJhbmNoSGludHNTZWN0aW9uUGFyc2VyKHNlY3Rpb24ucGF5
bG9hZC5iZWdpbigpLCBzZWN0aW9uLnBheWxvYWQuc2l6ZSgpLCBtX2luZm8pOworICAgICAgICAg
ICAgYnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLnBhcnNlKCk7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHNlY3Rp
b24pKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450087</attachid>
            <date>2022-01-26 17:20:24 -0800</date>
            <delta_ts>2022-01-28 06:31:10 -0800</delta_ts>
            <desc>Updated patch after review</desc>
            <filename>bug-235581-review-1.patch</filename>
            <type>text/plain</type>
            <size>30934</size>
            <attacher name="Tom Tartarin">tom</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
ZDFlYWYxMTQ1OGRiYWMzNzE1MjljNTAxZmZkMGQwNDU1ZjM4NTZkNy4uNzdiZGY0NzNkMTM1Yjk3
ODdlYWZmZmFlZmFhZWVlMGFjZjU0YWQ3OSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMi0wMS0yNiAgVG9t
IFRhcnRhcmluICA8dG9tQGxlYW5pbmd0ZWNoLmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgc3Vw
cG9ydCBmb3IgV0FTTSBicmFuY2ggaGludGluZyBwcm9wb3NhbAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1NTgxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIGJyYW5jaCBoaW50aW5n
IGN1c3RvbSBzZWN0aW9uCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisgICAgICAgICogd2FzbS9i
cmFuY2gtaGludHMvYnJhbmNoSGludHNNb2R1bGUud2FzbTogQWRkZWQuCisgICAgICAgICogd2Fz
bS9icmFuY2gtaGludHMvYnJhbmNoSGludHNTZWN0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGNv
bnN0Lm1vZHVsZSk6CisKIDIwMjItMDEtMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxl
LmNvbT4KIAogICAgICAgICBbSlNDXSBFbmFibGUgQXJyYXkjZ3JvdXBCeSBhbmQgQXJyYXkjZ3Jv
dXBCeVRvTWFwCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20ueWFtbCBiL0pTVGVzdHMvd2FzbS55
YW1sCmluZGV4IDAwNmMzM2JlNzgzNzkzN2Y1NTQwOGNiZTg2ZjY2ODI2ZTI5NGE5MjguLmNlZDk0
YzUzYjZmM2JjMjM4M2MxODFmNTkxZWEyZWM0Y2Q4YWQxODggMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
d2FzbS55YW1sCisrKyBiL0pTVGVzdHMvd2FzbS55YW1sCkBAIC00Nyw2ICs0Nyw4IEBACiAgIGNt
ZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogLSBwYXRoOiB3
YXNtL3Y4LwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUoOm5vX21vZHVsZSwgIm1qc3VuaXQu
anMiKSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcworLSBwYXRoOiB3YXNtL2JyYW5jaC1oaW50cwor
ICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUoIi0tdXNlV2ViQXNzZW1ibHlCcmFuY2hIaW50cz10
cnVlIikKIAogLSBwYXRoOiB3YXNtL3JlZmVyZW5jZXMtc3BlYy10ZXN0cy9lbGVtLndhc3QuanMK
ICAgY21kOiBydW5XZWJBc3NlbWJseVJlZmVyZW5jZVNwZWNUZXN0IDpub3JtYWwKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9icmFuY2gtaGludHMvYnJhbmNoSGludHNNb2R1bGUud2FzbSBiL0pT
VGVzdHMvd2FzbS9icmFuY2gtaGludHMvYnJhbmNoSGludHNNb2R1bGUud2FzbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yOWRmODZkYTcyYjI4YTVhNTA0NzE5NWI3N2EzZjgxOTdkNGRjNmY4CkdJVCBiaW5hcnkgcGF0
Y2gKbGl0ZXJhbCAxNzIKemNtV059SnIwNkU2aCt+Qy12Yk96RVZRKSY1LUpsRGNpPVItMz5iZUJG
a3Z1QVYrRUMrZHZHWighNml2fkArQWxFCnooR1VPXlNeXn5wNGtiOUszTTJANUNtRHcxYSUyPXdY
dmdzakdoMGQyVCR7RmczY3tqc3dGbCFGVlBVM016Q08yPwp6WXZIX2FkKUw+ay08fj8+JnM5Oz96
OShmeDxtN3hPM1laT3AhNks3WGIpU2crejRRPzVFbUpqOUBzXjRHeXJiZysKSENRPFZUZVdNPyQK
CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9icmFuY2gt
aGludHMvYnJhbmNoSGludHNTZWN0aW9uLmpzIGIvSlNUZXN0cy93YXNtL2JyYW5jaC1oaW50cy9i
cmFuY2hIaW50c1NlY3Rpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjhkZjE4MjZiMjA1ZWFkMDgyMjUzNzli
Y2ExZmEyOWYyNmQ2OWEyNwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9icmFuY2gt
aGludHMvYnJhbmNoSGludHNTZWN0aW9uLmpzCkBAIC0wLDAgKzEsNjIgQEAKK2ltcG9ydCAqIGFz
IGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKKy8qCitUaGlzIHRlc3QgbG9hZHMgYSBXZWJB
c3NlbWJseSBmaWxlIGNvbXBpbGVkIHdpdGggd2F0Mndhc20gd2l0aCBzdXBwb3J0IGZvciBjb2Rl
IGFubm90YXRpb25zLgorc2VlOiBodHRwczovL2dpdGh1Yi5jb20veXVyaTkxL3dhYnQvdHJlZS9h
bm5vdGF0aW9ucworCitGcm9tIHRoZSBmb2xsb3dpbmcgLndhdDoKKyhtb2R1bGUKKyAgKHR5cGUg
KDswOykgKGZ1bmMpKQorICAodHlwZSAoOzE7KSAoZnVuYyAocGFyYW0gaTMyKSAocmVzdWx0IGkz
MikpKQorICAodHlwZSAoOzI7KSAoZnVuYyAocmVzdWx0IGkzMikpKQorICAoZnVuYyAkX193YXNt
X251bGxwdHIgKHR5cGUgMCkKKyAgICB1bnJlYWNoYWJsZSkKKyAgKGZ1bmMgJG1haW4gKHR5cGUg
MikgKHJlc3VsdCBpMzIpCisgICAgKGxvY2FsIGkzMiBpMzIgaTMyIGkzMikKKyAgICBpMzIuY29u
c3QgMAorICAgIGxvY2FsLnRlZSAyCisgICAgbG9jYWwuc2V0IDMKKyAgICBsb29wICA7OyBsYWJl
bCA9IEAxCisgICAgICBsb2NhbC5nZXQgMgorICAgICAgaTMyLmNvbnN0IDUwMDAwCisgICAgICBp
MzIuZXEKKyAgICAgIChAY29kZV9hbm5vdGF0aW9uLmJyYW5jaF9oaW50ICJcMDAiKSBpZiAgOzsg
bGFiZWwgPSBAMgorICAgICAgICBpMzIuY29uc3QgMQorICAgICAgICBsb2NhbC5zZXQgMworICAg
ICAgZW5kCisgICAgICBsb2NhbC5nZXQgMgorICAgICAgaTMyLmNvbnN0IDEKKyAgICAgIGkzMi5h
ZGQKKyAgICAgIGxvY2FsLnRlZSAyCisgICAgICBpMzIuY29uc3QgMTAwMDAwCisgICAgICBpMzIu
bmUKKyAgICAgIChAY29kZV9hbm5vdGF0aW9uLmJyYW5jaF9oaW50ICJcMDEiKSBicl9pZiAwICg7
QDE7KQorICAgIGVuZAorICAgIGxvY2FsLmdldCAzKQorICAodGFibGUgKDswOykgMSAxIGZ1bmNy
ZWYpCisgIChtZW1vcnkgKDswOykgMTcgMTI4KQorICAoZ2xvYmFsICg7MDspIChtdXQgaTMyKSAo
aTMyLmNvbnN0IDEwNDg1NzYpKQorICAoZXhwb3J0ICJtZW1vcnkiIChtZW1vcnkgMCkpCisgIChl
eHBvcnQgIl9tYWluIiAoZnVuYyAkbWFpbikpCisgIChlbGVtICg7MDspIChpMzIuY29uc3QgMCkg
ZnVuYyAkX193YXNtX251bGxwdHIpKQorKi8KKworY29uc3QgdmVyYm9zZSA9IGZhbHNlOworY29u
c3Qgd2FzbUZpbGUgPSAnYnJhbmNoSGludHNNb2R1bGUud2FzbSc7CisKK2NvbnN0IG1vZHVsZSA9
IChsb2NhdGlvbikgPT4geworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgUHJvY2Vz
c2luZyAke2xvY2F0aW9ufWApOworICAgIGxldCBidWYgPSB0eXBlb2YgcmVhZGJ1ZmZlciAhPT0g
InVuZGVmaW5lZCI/IHJlYWRidWZmZXIobG9jYXRpb24pIDogcmVhZChsb2NhdGlvbiwgJ2JpbmFy
eScpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgICBTaXplOiAke2J1Zi5ieXRl
TGVuZ3RofWApOworICAgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1Zik7
CisgICAgcmV0dXJuIG1vZHVsZTsKK307CisKK2NvbnN0IGJyYW5jaEhpbnRzTW9kdWxlID0gbW9k
dWxlKHdhc21GaWxlKTsKK2NvbnN0IHBhcnNlZEJyYW5jaEhpbnRzU2VjdGlvbiA9IFdlYkFzc2Vt
Ymx5Lk1vZHVsZS5jdXN0b21TZWN0aW9ucyhicmFuY2hIaW50c01vZHVsZSwgImNvZGVfYW5ub3Rh
dGlvbi5icmFuY2hfaGludCIpOworYXNzZXJ0LmVxKHBhcnNlZEJyYW5jaEhpbnRzU2VjdGlvbi5s
ZW5ndGgsIDEpOworY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UoYnJh
bmNoSGludHNNb2R1bGUpOworY29uc3QgcmVzdWx0ID0gaW5zdGFuY2UuZXhwb3J0cy5fbWFpbigp
OworYXNzZXJ0LmVxKHJlc3VsdCwgMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAxMGZh
ZDQyYzhjZjk3NTI2Zjk3ZjcxYWE1M2U2ZDJhNjUxNzUxYmQwLi4xMmIxNWRjNDdiYzM1ZmFjN2Zh
MWRhODhiYmIwMTY2YjUxN2VhNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw0MSBAQAorMjAyMi0wMS0yNiAgVG9tIFRhcnRhcmluICA8dG9tQGxlYW5pbmd0ZWNoLmNvbT4K
KworICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3IgV0FTTSBicmFuY2ggaGludGluZyBwcm9w
b3NhbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1
NTgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2Vl
IHRoZSBwcm9wb3NhbCBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uOiBodHRwczovL2dp
dGh1Yi5jb20vV2ViQXNzZW1ibHkvYnJhbmNoLWhpbnRpbmcuCisKKyAgICAgICAgVGhpcyBhbGxv
d3MgcGFyc2luZyBhICJjb2RlX2Fubm90YXRpb24uYnJhbmNoX2hpbnQiIGN1c3RvbSBzZWN0aW9u
LAorICAgICAgICBhcyBwZXIgdGhlIGNvZGUgYW5ub3RhdGlvbiBwcm9wb3NhbDogaHR0cHM6Ly9n
aXRodWIuY29tL1dlYkFzc2VtYmx5L2Fubm90YXRpb25zLgorICAgICAgICBUaGlzIHNlY3Rpb24g
cHJvdmlkZXMgcGVyIGZ1bmN0aW9uIGluZm9ybWF0aW9uIGFib3V0IGhvdyBsaWtlbHkgYSBicmFu
Y2ggYXQgYQorICAgICAgICBnaXZlbiBvZmZzZXQgaXMgdG8gYmUgdGFrZW4uIEl0IGlzIHNpbWls
YXIgdG8gYnJhbmNoIHdlaWdodCBtZXRhZGF0YSBpbiBMTFZNLgorCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiB3YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2gp
OgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZEJyYW5jaCk6CisgICAgICAgICogd2FzbS9XYXNtQnJhbmNoSGludHMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6Oldhc206OkJyYW5jaEhpbnRNYXA6OmFkZCk6CisgICAgICAgIChK
U0M6Oldhc206OkJyYW5jaEhpbnRNYXA6OmdldEJyYW5jaEhpbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCcmFuY2hIaW50TWFwOjppc1ZhbGlkS2V5IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6aXNWYWxpZEJyYW5jaEhpbnQpOgorICAgICAgICAqIHdhc20vV2FzbUJyYW5jaEhp
bnRzU2VjdGlvblBhcnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpCcmFuY2hI
aW50c1NlY3Rpb25QYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNtL1dhc21CcmFuY2hIaW50
c1NlY3Rpb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkJyYW5jaEhpbnRz
U2VjdGlvblBhcnNlcjo6QnJhbmNoSGludHNTZWN0aW9uUGFyc2VyKToKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbjo6Z2V0QnJhbmNoSGludCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlv
blBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlQ3Vz
dG9tKToKKwogMjAyMi0wMS0yNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgR2FyZGVuaW5nOiBidWlsZCBmaXggZm9yIENMb29wLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA2YTVjYjFlNmFiYmJkZDc2ZWVmN2M1ZjAwYjI1Y2NkNTIxZTkwZmRlLi43
MTQ1YjU1ZmNkNzliZWJjMzg1MmQ3ZmM0NGNhOWIxNGM2ZWQ4MzRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtODU2LDYgKzg1Niw4IEBACiAJCTMzQTkyMEJEMjNEQTJDNkQwMDBF
QkFGMCAvKiBDb21tb25TbG93UGF0aHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0E5MjBCQzIzREEyQzZEMDAwRUJBRjAgLyogQ29tbW9u
U2xvd1BhdGhzSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTMzQjJBNTQ3MjI2NTM0ODEwMDVBMEY3OSAvKiBCM1ZhbHVlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi87IH07CiAJCTMzQjJBNTQ4MjI2
NTQzQkYwMDVBMEY3OSAvKiBGVExMb3dlckRGR1RvQjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TExvd2VyREZHVG9CMy5jcHAgKi87IH07CisJCTM3QUFDMDkzMjc5RjFCRkMwMEQ2NDg0MiAvKiBX
YXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzN0FBQzA5MjI3OUYxMjQyMDBENjQ4NDIgLyogV2FzbUJyYW5j
aEhpbnRzU2VjdGlvblBhcnNlci5oICovOyB9OworCQkzN0FBQzA5NDI3OUYxQzA1MDBENjQ4NDIg
LyogV2FzbUJyYW5jaEhpbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0FBQzA5MTI3OUYxMjQyMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhpbnRzLmgg
Ki87IH07CiAJCTM3QzczOEQyMUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdDNzM4RDExRURCNTY3MjAw
M0YyQjBCIC8qIFBhcnNlSW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNDEyOTUyNzcxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVy
YXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGlu
c19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDEyOTUyNzgxRDJDRjZCQzAwRTc4Qjg5
IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyOTUyNzQx
RDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2lt
cGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0zNzI2LDYgKzM3MjgsOSBAQAogCQkzM0IyQTU0NTIyNjUxRDUzMDA1QTBGNzkg
LyogTWFya2VkU3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2VkU3BhY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzExOUE3NzIwQ0NCNURDMDAyQzZEQzkgLyog
V2ViS2l0VGFyZ2V0Q29uZGl0aW9uYWxzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFdlYktpdFRh
cmdldENvbmRpdGlvbmFscy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsg
bmFtZSA9IGxpYnouZHlsaWI7IHBhdGggPSB1c3IvbGliL2xpYnouZHlsaWI7IHNvdXJjZVRyZWUg
PSBTREtST09UOyB9OworCQkzN0FBQzA5MDI3OUYxMjQxMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhp
bnRzU2VjdGlvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzdBQUMwOTEyNzlGMTI0MjAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gV2FzbUJyYW5jaEhpbnRzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3QUFDMDkyMjc5RjEyNDIwMEQ2NDg0MiAvKiBXYXNt
QnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBh
dGggPSBXYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3QzczOEQxMUVEQjU2NzIwMDNGMkIwQiAvKiBQYXJzZUludC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZUludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTI5NTI3MzFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVf
aW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTI5NTI3NDFEMkNGNkFDMDBFNzhCODkgLyog
YnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBidWlsdGluc19nZW5lcmF0ZV9pbnRl
cm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTczMDksNiArNzMxNCw5IEBACiAJCTdCOThEMTMzMUI2MENEMUUwMDIzQjFBNCAvKiB3
YXNtICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzN0FB
QzA5MTI3OUYxMjQyMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhpbnRzLmggKi8sCisJCQkJMzdBQUMw
OTAyNzlGMTI0MTAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuY3BwICov
LAorCQkJCTM3QUFDMDkyMjc5RjEyNDIwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHNTZWN0aW9u
UGFyc2VyLmggKi8sCiAJCQkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovLAogCQkJ
CTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuY3BwICovLAog
CQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLywK
QEAgLTEwOTU2LDYgKzEwOTY0LDcgQEAKIAkJCQkwRkUwNTAyOTFBQTkwOTU2MDBEMzNCMzMgLyog
U2NvcGVkQXJndW1lbnRzVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDJCMUFBOTA5
NTYwMEQzM0IzMyAvKiBTY29wZU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NTIx
N0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzdBQUMwOTQyNzlGMUMwNTAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzMxMTFCOEIyMzk3MjU2NTAwQUEzNENFIC8qIFNjcmliYmxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA2ODE4OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJn
dW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA2RTE4OUIwMEFBMDA2MzMyMzEgLyog
U2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKQEAgLTExMDgyLDYgKzExMDkxLDcgQEAK
IAkJCQlGRTM0MjIxMjFENkI4MUMzMDAzMkJFODggLyogVGhyb3dTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0
b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkzN0FBQzA5MzI3OUYxQkZDMDBENjQ4NDIgLyogV2Fz
bUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDQ4Q0Qx
M0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1NTk4OTgxN0M4NkM1ODAwQTFFNTQzIC8qIFRvTmF0aXZlRnJvbVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJENERFOTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVzLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA4NzgxZmI0NzEwNDBl
Y2VlMDE4ZGM3MTFjNTRjZjZiNTMxNDk0NjU2Li4zZTQzYWYxNmE0MGI2YTQ0MjA5NmQ1Y2NmYzg5
Yjc3MzczNDAyZDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xMDY1LDYgKzEw
NjUsNyBAQCB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgQG5vLXVuaWZ5CiB3YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAogd2FzbS9XYXNtQkJRUGxhbi5jcHAKIHdhc20vV2FzbUJpbmRpbmcu
Y3BwCit3YXNtL1dhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuY3BwCiB3YXNtL1dhc21DYWxs
ZWUuY3BwCiB3YXNtL1dhc21DYWxsZWVHcm91cC5jcHAKIHdhc20vV2FzbUNhbGxlZVJlZ2lzdHJ5
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKaW5kZXgg
M2JmZDQyMTI5MmVjZGNlNWQ1Yjk5ODY1YjhhNWRiN2Q1OGQzMzY3My4uZWI1MmI2YTNkMmJkMjc1
NGE3Njk0ZTcxM2NlNjA0MmY2NDM4NzU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCkBAIC01NTAsNiArNTUwLDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3Nl
bWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5VGhyZWFkaW5nLCB0
cnVlLCBOb3JtYWwsICJBbGxvdyBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgd2FzbSB0aHJlYWRpbmcg
c3BlYy4iKSBcCiAgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseVR5cGVkRnVuY3Rpb25SZWZlcmVu
Y2VzLCBmYWxzZSwgTm9ybWFsLCAiQWxsb3cgZnVuY3Rpb24gdHlwZXMgZnJvbSB0aGUgd2FzbSB0
eXBlZCBmdW5jdGlvbiByZWZlcmVuY2VzIHNwZWMuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNz
ZW1ibHlFeGNlcHRpb25zLCB0cnVlLCBOb3JtYWwsICJBbGxvdyB0aGUgbmV3IHNlY3Rpb24gYW5k
IGluc3RydWN0aW9ucyBmcm9tIHRoZSB3YXNtIGV4Y2VwdGlvbiBoYW5kbGluZyBzcGVjLiIpIFwK
KyAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5QnJhbmNoSGludHMsIGZhbHNlLCBOb3JtYWwsICJB
bGxvdyB0aGUgbmV3IHNlY3Rpb24gZnJvbSB0aGUgd2FzbSBicmFuY2ggaGludGluZyBzcGVjLiIp
IFwKIAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCmluZGV4IGYyODNmM2NmZjFhYjk5Nzhh
ZTZjYTQ5OTc1OWQyMGMxMTFjM2ZiNTIuLjBhM2NjN2VhMGI4MDE5M2ZkMjNhNDc0Mjk3YjY2MjFl
YjMyMGIxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiV2FzbUJyYW5jaEhpbnRzLmgiCiAj
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKQEAgLTMxNzQsMTAgKzMx
NzUsMjAgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0
aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFMKICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9
IG1fY29kZS5hZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9jb2RlLmFk
ZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2Nr
KCk7Ci0gICAgCisgICAgQjM6OkZyZXF1ZW5jeUNsYXNzIHRha2VuRnJlcXVlbmN5ID0gQjM6OkZy
ZXF1ZW5jeUNsYXNzOjpOb3JtYWw7CisgICAgQjM6OkZyZXF1ZW5jeUNsYXNzIG5vdFRha2VuRnJl
cXVlbmN5PSBCMzo6RnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDsKKworICAgIGlmIChPcHRpb25zOjp1
c2VXZWJBc3NlbWJseUJyYW5jaEhpbnRzKCkpIHsKKyAgICAgICAgQnJhbmNoSGludCBoaW50ID0g
bV9pbmZvLmdldEJyYW5jaEhpbnQobV9mdW5jdGlvbkluZGV4LCBtX3BhcnNlci0+Y3VycmVudE9w
Y29kZVN0YXJ0aW5nT2Zmc2V0KCkpOworICAgICAgICBpZiAoaGludCA9PSBCcmFuY2hIaW50OjpV
bmxpa2VseSkKKyAgICAgICAgICAgIHRha2VuRnJlcXVlbmN5ID0gQjM6OkZyZXF1ZW5jeUNsYXNz
OjpSYXJlOworICAgICAgICBlbHNlIGlmIChoaW50ID09IEJyYW5jaEhpbnQ6Okxpa2VseSkKKyAg
ICAgICAgICAgIG5vdFRha2VuRnJlcXVlbmN5ID0gQjM6OkZyZXF1ZW5jeUNsYXNzOjpSYXJlOwor
ICAgIH0KKwogICAgIC8vIFdhc20gYm9vbHMgYXJlIGkzMi4KICAgICBhcHBlbmQoQnJhbmNoVGVz
dDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCBjb25kaXRpb24sIGNv
bmRpdGlvbik7Ci0gICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFrZW4sIG5vdFRh
a2VuKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2so
dGFrZW4sIHRha2VuRnJlcXVlbmN5KSwgRnJlcXVlbnRlZEJsb2NrKG5vdFRha2VuLCBub3RUYWtl
bkZyZXF1ZW5jeSkpOwogCiAgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKICAgICBzcGxpdFN0
YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKQEAgLTM0MTcsMTQgKzM0
MjgsMjUgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRh
LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnMKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0cyk7CiAKICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQg
PSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CisgICAgQjM6OkZyZXF1ZW5jeUNsYXNzIHRh
cmdldEZyZXF1ZW5jeSA9IEIzOjpGcmVxdWVuY3lDbGFzczo6Tm9ybWFsOworICAgIEIzOjpGcmVx
dWVuY3lDbGFzcyBjb250aW51YXRpb25GcmVxdWVuY3kgPSBCMzo6RnJlcXVlbmN5Q2xhc3M6Ok5v
cm1hbDsKKworICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUJyYW5jaEhpbnRzKCkpIHsK
KyAgICAgICAgQnJhbmNoSGludCBoaW50ID0gbV9pbmZvLmdldEJyYW5jaEhpbnQobV9mdW5jdGlv
bkluZGV4LCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkpOworICAgICAg
ICBpZiAoaGludCA9PSBCcmFuY2hIaW50OjpVbmxpa2VseSkKKyAgICAgICAgICAgIHRhcmdldEZy
ZXF1ZW5jeSA9IEIzOjpGcmVxdWVuY3lDbGFzczo6UmFyZTsKKyAgICAgICAgZWxzZSBpZiAoaGlu
dCA9PSBCcmFuY2hIaW50OjpMaWtlbHkpCisgICAgICAgICAgICBjb250aW51YXRpb25GcmVxdWVu
Y3kgPSBCMzo6RnJlcXVlbmN5Q2xhc3M6OlJhcmU7CisgICAgfQorCiAgICAgaWYgKGNvbmRpdGlv
bikgewogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2so
KTsKICAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOwotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQsIHRhcmdldEZy
ZXF1ZW5jeSksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24sIGNvbnRpbnVhdGlvbkZyZXF1
ZW5jeSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKICAgICB9IGVs
c2UgewogICAgICAgICBhcHBlbmQoSnVtcCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRT
dWNjZXNzb3JzKHRhcmdldCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3Jz
KEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQsIHRhcmdldEZyZXF1ZW5jeSkpOwogICAgIH0KIAogICAg
IHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHAKaW5kZXggZGVmZmNkZWFkMzVlMjI5YTZhMzIyMzQwZWM5MTcxMjIxNmJlOWQx
MS4uMGIyNzdmM2EyMzI0OTQ2MDgyZDc0MGFlMjQ2ZThlZGZiOWMyZGM0OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtNTIsNyAr
NTIsNyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlBy
b2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgotI2lu
Y2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIldhc21CcmFuY2hI
aW50cy5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2luY2x1ZGUgIldh
c21Db250ZXh0SW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCkBAIC0y
NDc1LDkgKzI0NzUsMTkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3QKICAgICBCYXNpY0Jsb2Nr
KiB0YWtlbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0g
bV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9j
LmFkZEJsb2NrKCk7CisgICAgRnJlcXVlbmN5Q2xhc3MgdGFrZW5GcmVxdWVuY3kgPSBGcmVxdWVu
Y3lDbGFzczo6Tm9ybWFsOworICAgIEZyZXF1ZW5jeUNsYXNzIG5vdFRha2VuRnJlcXVlbmN5ID0g
RnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDsKKworICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJs
eUJyYW5jaEhpbnRzKCkpIHsKKyAgICAgICAgQnJhbmNoSGludCBoaW50ID0gbV9pbmZvLmdldEJy
YW5jaEhpbnQobV9mdW5jdGlvbkluZGV4LCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5n
T2Zmc2V0KCkpOworICAgICAgICBpZiAoaGludCA9PSBCcmFuY2hIaW50OjpVbmxpa2VseSkKKyAg
ICAgICAgICAgIHRha2VuRnJlcXVlbmN5ID0gRnJlcXVlbmN5Q2xhc3M6OlJhcmU7CisgICAgICAg
IGVsc2UgaWYgKGhpbnQgPT0gQnJhbmNoSGludDo6TGlrZWx5KQorICAgICAgICAgICAgbm90VGFr
ZW5GcmVxdWVuY3kgPSBGcmVxdWVuY3lDbGFzczo6UmFyZTsKKyAgICB9CiAKICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBn
ZXQoY29uZGl0aW9uKSk7Ci0gICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVl
bnRlZEJsb2NrKHRha2VuKSwgRnJlcXVlbnRlZEJsb2NrKG5vdFRha2VuKSk7CisgICAgbV9jdXJy
ZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRha2VuLCB0YWtlbkZyZXF1
ZW5jeSksIEZyZXF1ZW50ZWRCbG9jayhub3RUYWtlbiwgbm90VGFrZW5GcmVxdWVuY3kpKTsKICAg
ICB0YWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgIG5vdFRha2VuLT5h
ZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAKQEAgLTI3MjEsMTUgKzI3MzEsMjYgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgY29uc3QKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5W
YWx1ZXMsIGRhdGEpOwogCiAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9j
a0ZvckJyYW5jaCgpOworICAgIEZyZXF1ZW5jeUNsYXNzIHRhcmdldEZyZXF1ZW5jeSA9IEZyZXF1
ZW5jeUNsYXNzOjpOb3JtYWw7CisgICAgRnJlcXVlbmN5Q2xhc3MgY29udGludWF0aW9uRnJlcXVl
bmN5ID0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDsKKworICAgIGlmIChPcHRpb25zOjp1c2VXZWJB
c3NlbWJseUJyYW5jaEhpbnRzKCkpIHsKKyAgICAgICAgQnJhbmNoSGludCBoaW50ID0gbV9pbmZv
LmdldEJyYW5jaEhpbnQobV9mdW5jdGlvbkluZGV4LCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0
YXJ0aW5nT2Zmc2V0KCkpOworICAgICAgICBpZiAoaGludCA9PSBCcmFuY2hIaW50OjpVbmxpa2Vs
eSkKKyAgICAgICAgICAgIHRhcmdldEZyZXF1ZW5jeSA9IEZyZXF1ZW5jeUNsYXNzOjpSYXJlOwor
ICAgICAgICBlbHNlIGlmIChoaW50ID09IEJyYW5jaEhpbnQ6Okxpa2VseSkKKyAgICAgICAgICAg
IGNvbnRpbnVhdGlvbkZyZXF1ZW5jeSA9IEZyZXF1ZW5jeUNsYXNzOjpSYXJlOworICAgIH0KKwog
ICAgIGlmIChjb25kaXRpb24pIHsKICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGdldChjb25kaXRpb24pKTsKLSAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRhcmdldCks
IEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRhcmdldCwgdGFyZ2V0RnJlcXVlbmN5KSwg
RnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbiwgY29udGludWF0aW9uRnJlcXVlbmN5KSk7CiAg
ICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgICAgICBj
b250aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBG
cmVxdWVudGVkQmxvY2sodGFyZ2V0KSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKHRh
cmdldCwgdGFyZ2V0RnJlcXVlbmN5KSk7CiAgICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3Io
bV9jdXJyZW50QmxvY2spOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJyYW5jaEhpbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQnJhbmNoSGludHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MzBlOTk1YmY0ZDUwNmM4NWM2MGUzYTIxNjk1
NjMzMmY3YjNkOTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJyYW5jaEhpbnRzLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMiBMZWFuaW5nIFRlY2hub2xvZ2llcyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2Ug
V2FzbSB7CisKK2VudW0gY2xhc3MgQnJhbmNoSGludCA6IHVpbnQ4X3QgeworICAgIFVubGlrZWx5
LAorICAgIExpa2VseSwKKyAgICBJbnZhbGlkLAorfTsKKworY2xhc3MgQnJhbmNoSGludE1hcCB7
CisKK3B1YmxpYzoKKworICAgIHZvaWQgYWRkKHVpbnQzMl90IGJyYW5jaE9mZnNldCwgQnJhbmNo
SGludCBoaW50KQorICAgIHsKKyAgICAgICAgbV9tYXAuYWRkKGJyYW5jaE9mZnNldCwgaGludCk7
CisgICAgfQorCisgICAgQnJhbmNoSGludCBnZXRCcmFuY2hIaW50KHVpbnQzMl90IGJyYW5jaE9m
ZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBtX21hcC5maW5kKGJyYW5jaE9m
ZnNldCk7CisgICAgICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVy
biBCcmFuY2hIaW50OjpJbnZhbGlkOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworICAgIH0K
KworICAgIGJvb2wgaXNWYWxpZEtleSh1aW50MzJfdCBicmFuY2hPZmZzZXQpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9tYXAuaXNWYWxpZEtleShicmFuY2hPZmZzZXQpOworICAgIH0K
KworcHJpdmF0ZToKKworICAgIEhhc2hNYXA8dWludDMyX3QsIEJyYW5jaEhpbnQsIEludEhhc2g8
dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4g
bV9tYXA7CisKK307CisKK2lubGluZSBjb25zdGV4cHIgYm9vbCBpc1ZhbGlkQnJhbmNoSGludChC
cmFuY2hIaW50IGhpbnQpCit7CisgICAgc3dpdGNoIChoaW50KSB7CisgICAgY2FzZSBCcmFuY2hI
aW50OjpMaWtlbHk6CisgICAgY2FzZSBCcmFuY2hIaW50OjpVbmxpa2VseToKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30KK30gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBh
cnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQnJhbmNoSGludHNTZWN0
aW9uUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTFjNjJiOWM4MjAzMmYxZjg5OTUxZjBjMjRkOTcy
N2Q1ZGU0YTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMiBMZWFuaW5nIFRlY2hub2xvZ2llcyBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
YXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmgiCisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNw
YWNlIFdhc20geworCithdXRvIEJyYW5jaEhpbnRzU2VjdGlvblBhcnNlcjo6cGFyc2UoKSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgZnVuY3Rpb25Db3VudDsKKyAgICBpbnQ2NF90
IHByZXZpb3VzRnVuY3Rpb25JbmRleCA9IC0xOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKGZ1bmN0aW9uQ291bnQpLCAiY2FuJ3QgZ2V0IGZ1bmN0aW9uIGNvdW50Iik7
CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZnVuY3Rpb25Db3VudDsgKytpKSB7Cisg
ICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIHVpbnQzMl90IGhpbnRDb3Vu
dDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25J
bmRleCksICJjYW4ndCBnZXQgZnVuY3Rpb24gaW5kZXggZm9yIGZ1bmN0aW9uICIsIGkpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHN0YXRpY19jYXN0PGludDY0X3Q+KGZ1bmN0aW9uSW5k
ZXgpIDwgcHJldmlvdXNGdW5jdGlvbkluZGV4LCAiaW52YWxpZCBmdW5jdGlvbiBpbmRleCAiLCBm
dW5jdGlvbkluZGV4LCAiIGZvciBmdW5jdGlvbiAiLCBpKTsKKworICAgICAgICBwcmV2aW91c0Z1
bmN0aW9uSW5kZXggPSBmdW5jdGlvbkluZGV4OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGhpbnRDb3VudCksICJjYW4ndCBnZXQgbnVtYmVyIG9mIGhpbnRz
IGZvciBmdW5jdGlvbiAiLCBpKTsKKworICAgICAgICBpZiAoIWhpbnRDb3VudCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGludDY0X3QgcHJldmlvdXNCcmFuY2hPZmZzZXQgPSAt
MTsKKyAgICAgICAgQnJhbmNoSGludE1hcCBicmFuY2hIaW50c0ZvckZ1bmN0aW9uOworICAgICAg
ICBmb3IgKHVpbnQzMl90IGogPSAwOyBqIDwgaGludENvdW50OyArK2opIHsKKyAgICAgICAgICAg
IHVpbnQzMl90IGJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGJyYW5jaE9mZnNldCksICJjYW4ndCBnZXQgYnJhbmNoIG9mZnNldCBm
b3IgaGludCAiLCBqKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhdGljX2Nh
c3Q8aW50NjRfdD4oYnJhbmNoT2Zmc2V0KSA8IHByZXZpb3VzQnJhbmNoT2Zmc2V0CisgICAgICAg
ICAgICAgICAgfHwgIW1faW5mby0+YnJhbmNoSGludHMuaXNWYWxpZEtleShicmFuY2hPZmZzZXQp
LCAiaW52YWxpZCBicmFuY2ggb2Zmc2V0ICIsIGJyYW5jaE9mZnNldCwgIiBmb3IgaGludCAiLCBq
KTsKKworICAgICAgICAgICAgcHJldmlvdXNCcmFuY2hPZmZzZXQgPSBicmFuY2hPZmZzZXQ7CisK
KyAgICAgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWRCeXRlOworICAgICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShyZXNlcnZlZEJ5dGUpLCAiY2FuJ3QgZ2V0IHJlc2Vy
dmVkIGJ5dGUgZm9yIGhpbnQgIiwgaik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHJlc2VydmVkQnl0ZSAhPSAweDEsICJpbnZhbGlkIHJlc2VydmVkIGJ5dGUgZm9yIGhpbnQgIiwg
aik7CisKKyAgICAgICAgICAgIHVpbnQ4X3QgcGFyc2VkQnJhbmNoSGludDsKKyAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocGFyc2VkQnJhbmNoSGludCksICJj
YW4ndCBnZXQgb3IgaW52YWxpZCBicmFuY2ggaGludCB2YWx1ZSBmb3IgaGludCAiLCBqKTsKKwor
ICAgICAgICAgICAgQnJhbmNoSGludCBicmFuY2hIaW50ID0gc3RhdGljX2Nhc3Q8QnJhbmNoSGlu
dD4ocGFyc2VkQnJhbmNoSGludCk7CisKKyAgICAgICAgICAgIGJyYW5jaEhpbnRzRm9yRnVuY3Rp
b24uYWRkKGJyYW5jaE9mZnNldCwgYnJhbmNoSGludCk7CisgICAgICAgIH0KKyAgICAgICAgbV9p
bmZvLT5icmFuY2hIaW50cy5hZGQoZnVuY3Rpb25JbmRleCwgV1RGTW92ZShicmFuY2hIaW50c0Zv
ckZ1bmN0aW9uKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK30KK30gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBh
cnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmYxN2NhOTdiZjdmZmUyMzRlMjcwZmIzOWExOGQ3ZWI2NWIwM2I5
YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQnJh
bmNoSGludHNTZWN0aW9uUGFyc2VyLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBMZWFuaW5nIFRlY2hub2xvZ2llcyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVBhcnNlci5oIgor
CituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgQnJhbmNoSGludHNT
ZWN0aW9uUGFyc2VyIDogcHVibGljIFBhcnNlcjx2b2lkPiB7CitwdWJsaWM6CisgICAgQnJhbmNo
SGludHNTZWN0aW9uUGFyc2VyKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNv
dXJjZUxlbmd0aCwgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCisgICAgICAgIDogUGFyc2VyKHNv
dXJjZUJ1ZmZlciwgc291cmNlTGVuZ3RoKQorICAgICAgICAsIG1faW5mbyhpbmZvKQorICAgIHsK
KyAgICB9CisgICAgUGFydGlhbFJlc3VsdCBwYXJzZSgpOworCitwcml2YXRlOgorICAgIFJlZjxN
b2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOworfTsKKworfQorfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCmluZGV4IGE2MWY2OTIwZjVh
YmNjNzMzN2IzYWNkZWEyYmE0YzY5YjI3YmRjNzYuLmFlNmJiZWVkZjIxODYxOTQzYjg5MGY3MjMx
NTNjNzg4OGNmYzQ5NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5oCkBAIC0yNywxMyArMjcsMTggQEAKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIldhc21CcmFuY2hIaW50cy5oIgogI2luY2x1ZGUgIldh
c21Gb3JtYXQuaCIKIAogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3Qg
TW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5m
b3JtYXRpb24+IHsKKworICAgIHVzaW5nIEJyYW5jaEhpbnRzID0gSGFzaE1hcDx1aW50MzJfdCwg
QnJhbmNoSGludE1hcCwgSW50SGFzaDx1aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dWludDMyX3Q+PjsKKwogICAgIE1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAg
TW9kdWxlSW5mb3JtYXRpb24oY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKSA9IGRlbGV0ZTsKICAg
ICBNb2R1bGVJbmZvcm1hdGlvbihNb2R1bGVJbmZvcm1hdGlvbiYmKSA9IGRlbGV0ZTsKQEAgLTk2
LDYgKzEwMSwxNCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKIAogICAgIGJvb2wgaGFzTWVtb3J5SW1w
b3J0KCkgY29uc3QgeyByZXR1cm4gbWVtb3J5LmlzSW1wb3J0KCk7IH0KIAorICAgIEJyYW5jaEhp
bnQgZ2V0QnJhbmNoSGludCh1aW50MzJfdCBmdW5jdGlvbk9mZnNldCwgdWludDMyX3QgYnJhbmNo
T2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBpdCA9IGJyYW5jaEhpbnRzLmZpbmQo
ZnVuY3Rpb25PZmZzZXQpOworICAgICAgICByZXR1cm4gaXQgPT0gYnJhbmNoSGludHMuZW5kKCkK
KyAgICAgICAgICAgID8gQnJhbmNoSGludDo6SW52YWxpZAorICAgICAgICAgICAgOiBpdC0+dmFs
dWUuZ2V0QnJhbmNoSGludChicmFuY2hPZmZzZXQpOworICAgIH0KKwogICAgIFZlY3RvcjxJbXBv
cnQ+IGltcG9ydHM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbXBvcnRGdW5jdGlvblNp
Z25hdHVyZUluZGljZXM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbnRlcm5hbEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlczsKQEAgLTExNyw2ICsxMzAsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5m
b3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+
IHsKICAgICB1aW50MzJfdCBjb2RlU2VjdGlvblNpemUgeyAwIH07CiAgICAgVmVjdG9yPEN1c3Rv
bVNlY3Rpb24+IGN1c3RvbVNlY3Rpb25zOwogICAgIFJlZjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rp
b247CisgICAgQnJhbmNoSGludHMgYnJhbmNoSGludHM7CiAgICAgdWludDMyX3QgbnVtYmVyT2ZE
YXRhU2VnbWVudHMgeyAwIH07CiAKICAgICBCaXRWZWN0b3IgbV9kZWNsYXJlZEZ1bmN0aW9uczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2Vy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApp
bmRleCBhODg5NWM5NTEyOWQzM2M3YzBjZGJmODY2NGU4OTBkNGFmMzUxM2JhLi41YjUxMTgxMTBl
NTJkMmJkMDc4Y2IwMmU5ODk5OTcyZDJmYThiNGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNp
bmNsdWRlICJXYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgiCiAj
aW5jbHVkZSAiV2FzbU9wcy5oIgpAQCAtODk2LDYgKzg5NywxMiBAQCBhdXRvIFNlY3Rpb25QYXJz
ZXI6OnBhcnNlQ3VzdG9tKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBOYW1lU2VjdGlvblBh
cnNlciBuYW1lU2VjdGlvblBhcnNlcihzZWN0aW9uLnBheWxvYWQuYmVnaW4oKSwgc2VjdGlvbi5w
YXlsb2FkLnNpemUoKSwgbV9pbmZvKTsKICAgICAgICAgaWYgKGF1dG8gbmFtZVNlY3Rpb24gPSBu
YW1lU2VjdGlvblBhcnNlci5wYXJzZSgpKQogICAgICAgICAgICAgbV9pbmZvLT5uYW1lU2VjdGlv
biA9IFdURk1vdmUoKm5hbWVTZWN0aW9uKTsKKyAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5QnJhbmNoSGludHMoKSkgeworICAgICAgICBOYW1lIGJyYW5jaEhpbnRzTmFtZSA9
IHsgJ2MnLCAnbycsICdkJywgJ2UnLCAnXycsICdhJywgJ24nLCAnbicsICdvJywgJ3QnLCAnYScs
ICd0JywgJ2knLCAnbycsICduJywgJy4nLCAnYicsICdyJywgJ2EnLCAnbicsICdjJywgJ2gnLCAn
XycsICdoJywgJ2knLCAnbicsICd0JyB9OworICAgICAgICBpZiAoc2VjdGlvbi5uYW1lID09IGJy
YW5jaEhpbnRzTmFtZSkgeworICAgICAgICAgICAgQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyIGJy
YW5jaEhpbnRzU2VjdGlvblBhcnNlcihzZWN0aW9uLnBheWxvYWQuYmVnaW4oKSwgc2VjdGlvbi5w
YXlsb2FkLnNpemUoKSwgbV9pbmZvKTsKKyAgICAgICAgICAgIGJyYW5jaEhpbnRzU2VjdGlvblBh
cnNlci5wYXJzZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9pbmZvLT5jdXN0b21TZWN0
aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzZWN0aW9uKSk7Cg==
</data>
<flag name="review"
          id="476372"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="476386"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450230</attachid>
            <date>2022-01-28 06:31:10 -0800</date>
            <delta_ts>2022-01-28 15:23:27 -0800</delta_ts>
            <desc>Use switch instead of if else. Add ASSERT for branch hint validation</desc>
            <filename>bug-235581-review-2.patch</filename>
            <type>text/plain</type>
            <size>31442</size>
            <attacher name="Tom Tartarin">tom</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
ZDFlYWYxMTQ1OGRiYWMzNzE1MjljNTAxZmZkMGQwNDU1ZjM4NTZkNy4uNzdiZGY0NzNkMTM1Yjk3
ODdlYWZmZmFlZmFhZWVlMGFjZjU0YWQ3OSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMi0wMS0yNiAgVG9t
IFRhcnRhcmluICA8dG9tQGxlYW5pbmd0ZWNoLmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgc3Vw
cG9ydCBmb3IgV0FTTSBicmFuY2ggaGludGluZyBwcm9wb3NhbAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1NTgxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIGJyYW5jaCBoaW50aW5n
IGN1c3RvbSBzZWN0aW9uCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisgICAgICAgICogd2FzbS9i
cmFuY2gtaGludHMvYnJhbmNoSGludHNNb2R1bGUud2FzbTogQWRkZWQuCisgICAgICAgICogd2Fz
bS9icmFuY2gtaGludHMvYnJhbmNoSGludHNTZWN0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGNv
bnN0Lm1vZHVsZSk6CisKIDIwMjItMDEtMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxl
LmNvbT4KIAogICAgICAgICBbSlNDXSBFbmFibGUgQXJyYXkjZ3JvdXBCeSBhbmQgQXJyYXkjZ3Jv
dXBCeVRvTWFwCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20ueWFtbCBiL0pTVGVzdHMvd2FzbS55
YW1sCmluZGV4IDAwNmMzM2JlNzgzNzkzN2Y1NTQwOGNiZTg2ZjY2ODI2ZTI5NGE5MjguLmNlZDk0
YzUzYjZmM2JjMjM4M2MxODFmNTkxZWEyZWM0Y2Q4YWQxODggMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
d2FzbS55YW1sCisrKyBiL0pTVGVzdHMvd2FzbS55YW1sCkBAIC00Nyw2ICs0Nyw4IEBACiAgIGNt
ZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogLSBwYXRoOiB3
YXNtL3Y4LwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUoOm5vX21vZHVsZSwgIm1qc3VuaXQu
anMiKSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcworLSBwYXRoOiB3YXNtL2JyYW5jaC1oaW50cwor
ICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUoIi0tdXNlV2ViQXNzZW1ibHlCcmFuY2hIaW50cz10
cnVlIikKIAogLSBwYXRoOiB3YXNtL3JlZmVyZW5jZXMtc3BlYy10ZXN0cy9lbGVtLndhc3QuanMK
ICAgY21kOiBydW5XZWJBc3NlbWJseVJlZmVyZW5jZVNwZWNUZXN0IDpub3JtYWwKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9icmFuY2gtaGludHMvYnJhbmNoSGludHNNb2R1bGUud2FzbSBiL0pT
VGVzdHMvd2FzbS9icmFuY2gtaGludHMvYnJhbmNoSGludHNNb2R1bGUud2FzbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yOWRmODZkYTcyYjI4YTVhNTA0NzE5NWI3N2EzZjgxOTdkNGRjNmY4CkdJVCBiaW5hcnkgcGF0
Y2gKbGl0ZXJhbCAxNzIKemNtV059SnIwNkU2aCt+Qy12Yk96RVZRKSY1LUpsRGNpPVItMz5iZUJG
a3Z1QVYrRUMrZHZHWighNml2fkArQWxFCnooR1VPXlNeXn5wNGtiOUszTTJANUNtRHcxYSUyPXdY
dmdzakdoMGQyVCR7RmczY3tqc3dGbCFGVlBVM016Q08yPwp6WXZIX2FkKUw+ay08fj8+JnM5Oz96
OShmeDxtN3hPM1laT3AhNks3WGIpU2crejRRPzVFbUpqOUBzXjRHeXJiZysKSENRPFZUZVdNPyQK
CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9icmFuY2gt
aGludHMvYnJhbmNoSGludHNTZWN0aW9uLmpzIGIvSlNUZXN0cy93YXNtL2JyYW5jaC1oaW50cy9i
cmFuY2hIaW50c1NlY3Rpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjhkZjE4MjZiMjA1ZWFkMDgyMjUzNzli
Y2ExZmEyOWYyNmQ2OWEyNwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9icmFuY2gt
aGludHMvYnJhbmNoSGludHNTZWN0aW9uLmpzCkBAIC0wLDAgKzEsNjIgQEAKK2ltcG9ydCAqIGFz
IGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKKy8qCitUaGlzIHRlc3QgbG9hZHMgYSBXZWJB
c3NlbWJseSBmaWxlIGNvbXBpbGVkIHdpdGggd2F0Mndhc20gd2l0aCBzdXBwb3J0IGZvciBjb2Rl
IGFubm90YXRpb25zLgorc2VlOiBodHRwczovL2dpdGh1Yi5jb20veXVyaTkxL3dhYnQvdHJlZS9h
bm5vdGF0aW9ucworCitGcm9tIHRoZSBmb2xsb3dpbmcgLndhdDoKKyhtb2R1bGUKKyAgKHR5cGUg
KDswOykgKGZ1bmMpKQorICAodHlwZSAoOzE7KSAoZnVuYyAocGFyYW0gaTMyKSAocmVzdWx0IGkz
MikpKQorICAodHlwZSAoOzI7KSAoZnVuYyAocmVzdWx0IGkzMikpKQorICAoZnVuYyAkX193YXNt
X251bGxwdHIgKHR5cGUgMCkKKyAgICB1bnJlYWNoYWJsZSkKKyAgKGZ1bmMgJG1haW4gKHR5cGUg
MikgKHJlc3VsdCBpMzIpCisgICAgKGxvY2FsIGkzMiBpMzIgaTMyIGkzMikKKyAgICBpMzIuY29u
c3QgMAorICAgIGxvY2FsLnRlZSAyCisgICAgbG9jYWwuc2V0IDMKKyAgICBsb29wICA7OyBsYWJl
bCA9IEAxCisgICAgICBsb2NhbC5nZXQgMgorICAgICAgaTMyLmNvbnN0IDUwMDAwCisgICAgICBp
MzIuZXEKKyAgICAgIChAY29kZV9hbm5vdGF0aW9uLmJyYW5jaF9oaW50ICJcMDAiKSBpZiAgOzsg
bGFiZWwgPSBAMgorICAgICAgICBpMzIuY29uc3QgMQorICAgICAgICBsb2NhbC5zZXQgMworICAg
ICAgZW5kCisgICAgICBsb2NhbC5nZXQgMgorICAgICAgaTMyLmNvbnN0IDEKKyAgICAgIGkzMi5h
ZGQKKyAgICAgIGxvY2FsLnRlZSAyCisgICAgICBpMzIuY29uc3QgMTAwMDAwCisgICAgICBpMzIu
bmUKKyAgICAgIChAY29kZV9hbm5vdGF0aW9uLmJyYW5jaF9oaW50ICJcMDEiKSBicl9pZiAwICg7
QDE7KQorICAgIGVuZAorICAgIGxvY2FsLmdldCAzKQorICAodGFibGUgKDswOykgMSAxIGZ1bmNy
ZWYpCisgIChtZW1vcnkgKDswOykgMTcgMTI4KQorICAoZ2xvYmFsICg7MDspIChtdXQgaTMyKSAo
aTMyLmNvbnN0IDEwNDg1NzYpKQorICAoZXhwb3J0ICJtZW1vcnkiIChtZW1vcnkgMCkpCisgIChl
eHBvcnQgIl9tYWluIiAoZnVuYyAkbWFpbikpCisgIChlbGVtICg7MDspIChpMzIuY29uc3QgMCkg
ZnVuYyAkX193YXNtX251bGxwdHIpKQorKi8KKworY29uc3QgdmVyYm9zZSA9IGZhbHNlOworY29u
c3Qgd2FzbUZpbGUgPSAnYnJhbmNoSGludHNNb2R1bGUud2FzbSc7CisKK2NvbnN0IG1vZHVsZSA9
IChsb2NhdGlvbikgPT4geworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgUHJvY2Vz
c2luZyAke2xvY2F0aW9ufWApOworICAgIGxldCBidWYgPSB0eXBlb2YgcmVhZGJ1ZmZlciAhPT0g
InVuZGVmaW5lZCI/IHJlYWRidWZmZXIobG9jYXRpb24pIDogcmVhZChsb2NhdGlvbiwgJ2JpbmFy
eScpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgICBTaXplOiAke2J1Zi5ieXRl
TGVuZ3RofWApOworICAgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1Zik7
CisgICAgcmV0dXJuIG1vZHVsZTsKK307CisKK2NvbnN0IGJyYW5jaEhpbnRzTW9kdWxlID0gbW9k
dWxlKHdhc21GaWxlKTsKK2NvbnN0IHBhcnNlZEJyYW5jaEhpbnRzU2VjdGlvbiA9IFdlYkFzc2Vt
Ymx5Lk1vZHVsZS5jdXN0b21TZWN0aW9ucyhicmFuY2hIaW50c01vZHVsZSwgImNvZGVfYW5ub3Rh
dGlvbi5icmFuY2hfaGludCIpOworYXNzZXJ0LmVxKHBhcnNlZEJyYW5jaEhpbnRzU2VjdGlvbi5s
ZW5ndGgsIDEpOworY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UoYnJh
bmNoSGludHNNb2R1bGUpOworY29uc3QgcmVzdWx0ID0gaW5zdGFuY2UuZXhwb3J0cy5fbWFpbigp
OworYXNzZXJ0LmVxKHJlc3VsdCwgMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAxMGZh
ZDQyYzhjZjk3NTI2Zjk3ZjcxYWE1M2U2ZDJhNjUxNzUxYmQwLi4xMmIxNWRjNDdiYzM1ZmFjN2Zh
MWRhODhiYmIwMTY2YjUxN2VhNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw0MSBAQAorMjAyMi0wMS0yNiAgVG9tIFRhcnRhcmluICA8dG9tQGxlYW5pbmd0ZWNoLmNvbT4K
KworICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3IgV0FTTSBicmFuY2ggaGludGluZyBwcm9w
b3NhbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1
NTgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2Vl
IHRoZSBwcm9wb3NhbCBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uOiBodHRwczovL2dp
dGh1Yi5jb20vV2ViQXNzZW1ibHkvYnJhbmNoLWhpbnRpbmcuCisKKyAgICAgICAgVGhpcyBhbGxv
d3MgcGFyc2luZyBhICJjb2RlX2Fubm90YXRpb24uYnJhbmNoX2hpbnQiIGN1c3RvbSBzZWN0aW9u
LAorICAgICAgICBhcyBwZXIgdGhlIGNvZGUgYW5ub3RhdGlvbiBwcm9wb3NhbDogaHR0cHM6Ly9n
aXRodWIuY29tL1dlYkFzc2VtYmx5L2Fubm90YXRpb25zLgorICAgICAgICBUaGlzIHNlY3Rpb24g
cHJvdmlkZXMgcGVyIGZ1bmN0aW9uIGluZm9ybWF0aW9uIGFib3V0IGhvdyBsaWtlbHkgYSBicmFu
Y2ggYXQgYQorICAgICAgICBnaXZlbiBvZmZzZXQgaXMgdG8gYmUgdGFrZW4uIEl0IGlzIHNpbWls
YXIgdG8gYnJhbmNoIHdlaWdodCBtZXRhZGF0YSBpbiBMTFZNLgorCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiB3YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2gp
OgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZEJyYW5jaCk6CisgICAgICAgICogd2FzbS9XYXNtQnJhbmNoSGludHMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6Oldhc206OkJyYW5jaEhpbnRNYXA6OmFkZCk6CisgICAgICAgIChK
U0M6Oldhc206OkJyYW5jaEhpbnRNYXA6OmdldEJyYW5jaEhpbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCcmFuY2hIaW50TWFwOjppc1ZhbGlkS2V5IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6aXNWYWxpZEJyYW5jaEhpbnQpOgorICAgICAgICAqIHdhc20vV2FzbUJyYW5jaEhp
bnRzU2VjdGlvblBhcnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpCcmFuY2hI
aW50c1NlY3Rpb25QYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNtL1dhc21CcmFuY2hIaW50
c1NlY3Rpb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkJyYW5jaEhpbnRz
U2VjdGlvblBhcnNlcjo6QnJhbmNoSGludHNTZWN0aW9uUGFyc2VyKToKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbjo6Z2V0QnJhbmNoSGludCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlv
blBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlQ3Vz
dG9tKToKKwogMjAyMi0wMS0yNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgR2FyZGVuaW5nOiBidWlsZCBmaXggZm9yIENMb29wLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA2YTVjYjFlNmFiYmJkZDc2ZWVmN2M1ZjAwYjI1Y2NkNTIxZTkwZmRlLi43
MTQ1YjU1ZmNkNzliZWJjMzg1MmQ3ZmM0NGNhOWIxNGM2ZWQ4MzRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtODU2LDYgKzg1Niw4IEBACiAJCTMzQTkyMEJEMjNEQTJDNkQwMDBF
QkFGMCAvKiBDb21tb25TbG93UGF0aHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0E5MjBCQzIzREEyQzZEMDAwRUJBRjAgLyogQ29tbW9u
U2xvd1BhdGhzSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTMzQjJBNTQ3MjI2NTM0ODEwMDVBMEY3OSAvKiBCM1ZhbHVlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi87IH07CiAJCTMzQjJBNTQ4MjI2
NTQzQkYwMDVBMEY3OSAvKiBGVExMb3dlckRGR1RvQjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TExvd2VyREZHVG9CMy5jcHAgKi87IH07CisJCTM3QUFDMDkzMjc5RjFCRkMwMEQ2NDg0MiAvKiBX
YXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzN0FBQzA5MjI3OUYxMjQyMDBENjQ4NDIgLyogV2FzbUJyYW5j
aEhpbnRzU2VjdGlvblBhcnNlci5oICovOyB9OworCQkzN0FBQzA5NDI3OUYxQzA1MDBENjQ4NDIg
LyogV2FzbUJyYW5jaEhpbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0FBQzA5MTI3OUYxMjQyMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhpbnRzLmgg
Ki87IH07CiAJCTM3QzczOEQyMUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdDNzM4RDExRURCNTY3MjAw
M0YyQjBCIC8qIFBhcnNlSW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNDEyOTUyNzcxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVy
YXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGlu
c19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDEyOTUyNzgxRDJDRjZCQzAwRTc4Qjg5
IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyOTUyNzQx
RDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2lt
cGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0zNzI2LDYgKzM3MjgsOSBAQAogCQkzM0IyQTU0NTIyNjUxRDUzMDA1QTBGNzkg
LyogTWFya2VkU3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2VkU3BhY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzExOUE3NzIwQ0NCNURDMDAyQzZEQzkgLyog
V2ViS2l0VGFyZ2V0Q29uZGl0aW9uYWxzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFdlYktpdFRh
cmdldENvbmRpdGlvbmFscy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsg
bmFtZSA9IGxpYnouZHlsaWI7IHBhdGggPSB1c3IvbGliL2xpYnouZHlsaWI7IHNvdXJjZVRyZWUg
PSBTREtST09UOyB9OworCQkzN0FBQzA5MDI3OUYxMjQxMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhp
bnRzU2VjdGlvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzdBQUMwOTEyNzlGMTI0MjAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gV2FzbUJyYW5jaEhpbnRzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3QUFDMDkyMjc5RjEyNDIwMEQ2NDg0MiAvKiBXYXNt
QnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBh
dGggPSBXYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3QzczOEQxMUVEQjU2NzIwMDNGMkIwQiAvKiBQYXJzZUludC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZUludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTI5NTI3MzFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVf
aW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTI5NTI3NDFEMkNGNkFDMDBFNzhCODkgLyog
YnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBidWlsdGluc19nZW5lcmF0ZV9pbnRl
cm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTczMDksNiArNzMxNCw5IEBACiAJCTdCOThEMTMzMUI2MENEMUUwMDIzQjFBNCAvKiB3
YXNtICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzN0FB
QzA5MTI3OUYxMjQyMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhpbnRzLmggKi8sCisJCQkJMzdBQUMw
OTAyNzlGMTI0MTAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuY3BwICov
LAorCQkJCTM3QUFDMDkyMjc5RjEyNDIwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHNTZWN0aW9u
UGFyc2VyLmggKi8sCiAJCQkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovLAogCQkJ
CTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuY3BwICovLAog
CQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLywK
QEAgLTEwOTU2LDYgKzEwOTY0LDcgQEAKIAkJCQkwRkUwNTAyOTFBQTkwOTU2MDBEMzNCMzMgLyog
U2NvcGVkQXJndW1lbnRzVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDJCMUFBOTA5
NTYwMEQzM0IzMyAvKiBTY29wZU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NTIx
N0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzdBQUMwOTQyNzlGMUMwNTAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzMxMTFCOEIyMzk3MjU2NTAwQUEzNENFIC8qIFNjcmliYmxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA2ODE4OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJn
dW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA2RTE4OUIwMEFBMDA2MzMyMzEgLyog
U2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKQEAgLTExMDgyLDYgKzExMDkxLDcgQEAK
IAkJCQlGRTM0MjIxMjFENkI4MUMzMDAzMkJFODggLyogVGhyb3dTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0
b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkzN0FBQzA5MzI3OUYxQkZDMDBENjQ4NDIgLyogV2Fz
bUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDQ4Q0Qx
M0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1NTk4OTgxN0M4NkM1ODAwQTFFNTQzIC8qIFRvTmF0aXZlRnJvbVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJENERFOTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVzLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA4NzgxZmI0NzEwNDBl
Y2VlMDE4ZGM3MTFjNTRjZjZiNTMxNDk0NjU2Li4zZTQzYWYxNmE0MGI2YTQ0MjA5NmQ1Y2NmYzg5
Yjc3MzczNDAyZDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xMDY1LDYgKzEw
NjUsNyBAQCB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgQG5vLXVuaWZ5CiB3YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAogd2FzbS9XYXNtQkJRUGxhbi5jcHAKIHdhc20vV2FzbUJpbmRpbmcu
Y3BwCit3YXNtL1dhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuY3BwCiB3YXNtL1dhc21DYWxs
ZWUuY3BwCiB3YXNtL1dhc21DYWxsZWVHcm91cC5jcHAKIHdhc20vV2FzbUNhbGxlZVJlZ2lzdHJ5
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKaW5kZXgg
M2JmZDQyMTI5MmVjZGNlNWQ1Yjk5ODY1YjhhNWRiN2Q1OGQzMzY3My4uZWI1MmI2YTNkMmJkMjc1
NGE3Njk0ZTcxM2NlNjA0MmY2NDM4NzU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCkBAIC01NTAsNiArNTUwLDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3Nl
bWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5VGhyZWFkaW5nLCB0
cnVlLCBOb3JtYWwsICJBbGxvdyBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgd2FzbSB0aHJlYWRpbmcg
c3BlYy4iKSBcCiAgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseVR5cGVkRnVuY3Rpb25SZWZlcmVu
Y2VzLCBmYWxzZSwgTm9ybWFsLCAiQWxsb3cgZnVuY3Rpb24gdHlwZXMgZnJvbSB0aGUgd2FzbSB0
eXBlZCBmdW5jdGlvbiByZWZlcmVuY2VzIHNwZWMuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNz
ZW1ibHlFeGNlcHRpb25zLCB0cnVlLCBOb3JtYWwsICJBbGxvdyB0aGUgbmV3IHNlY3Rpb24gYW5k
IGluc3RydWN0aW9ucyBmcm9tIHRoZSB3YXNtIGV4Y2VwdGlvbiBoYW5kbGluZyBzcGVjLiIpIFwK
KyAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5QnJhbmNoSGludHMsIGZhbHNlLCBOb3JtYWwsICJB
bGxvdyB0aGUgbmV3IHNlY3Rpb24gZnJvbSB0aGUgd2FzbSBicmFuY2ggaGludGluZyBzcGVjLiIp
IFwKIAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCmluZGV4IGYyODNmM2NmZjFhYjk5Nzhh
ZTZjYTQ5OTc1OWQyMGMxMTFjM2ZiNTIuLjk4ZWRiMWVkYmVmYmU2MTcxZGRlZTcxOGM4ZjcwMjQ0
Y2JhNDczODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiV2FzbUJyYW5jaEhpbnRzLmgiCiAj
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKQEAgLTMxNzQsMTAgKzMx
NzUsMjcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0
aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFMKICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9
IG1fY29kZS5hZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9jb2RlLmFk
ZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2Nr
KCk7Ci0gICAgCisgICAgQjM6OkZyZXF1ZW5jeUNsYXNzIHRha2VuRnJlcXVlbmN5ID0gQjM6OkZy
ZXF1ZW5jeUNsYXNzOjpOb3JtYWw7CisgICAgQjM6OkZyZXF1ZW5jeUNsYXNzIG5vdFRha2VuRnJl
cXVlbmN5PSBCMzo6RnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDsKKworICAgIGlmIChPcHRpb25zOjp1
c2VXZWJBc3NlbWJseUJyYW5jaEhpbnRzKCkpIHsKKyAgICAgICAgQnJhbmNoSGludCBoaW50ID0g
bV9pbmZvLmdldEJyYW5jaEhpbnQobV9mdW5jdGlvbkluZGV4LCBtX3BhcnNlci0+Y3VycmVudE9w
Y29kZVN0YXJ0aW5nT2Zmc2V0KCkpOworCisgICAgICAgIHN3aXRjaCAoaGludCkgeworICAgICAg
ICBjYXNlIEJyYW5jaEhpbnQ6OlVubGlrZWx5OgorICAgICAgICAgICAgdGFrZW5GcmVxdWVuY3kg
PSBCMzo6RnJlcXVlbmN5Q2xhc3M6OlJhcmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBCcmFuY2hIaW50OjpMaWtlbHk6CisgICAgICAgICAgICBub3RUYWtlbkZyZXF1ZW5jeSA9
IEIzOjpGcmVxdWVuY3lDbGFzczo6UmFyZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEJyYW5jaEhpbnQ6OkludmFsaWQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKwogICAgIC8vIFdhc20gYm9vbHMgYXJlIGkzMi4KICAgICBhcHBlbmQoQnJhbmNoVGVz
dDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCBjb25kaXRpb24sIGNv
bmRpdGlvbik7Ci0gICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFrZW4sIG5vdFRh
a2VuKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2so
dGFrZW4sIHRha2VuRnJlcXVlbmN5KSwgRnJlcXVlbnRlZEJsb2NrKG5vdFRha2VuLCBub3RUYWtl
bkZyZXF1ZW5jeSkpOwogCiAgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKICAgICBzcGxpdFN0
YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKQEAgLTM0MTcsMTQgKzM0
MzUsMzIgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRh
LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnMKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0cyk7CiAKICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQg
PSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CisgICAgQjM6OkZyZXF1ZW5jeUNsYXNzIHRh
cmdldEZyZXF1ZW5jeSA9IEIzOjpGcmVxdWVuY3lDbGFzczo6Tm9ybWFsOworICAgIEIzOjpGcmVx
dWVuY3lDbGFzcyBjb250aW51YXRpb25GcmVxdWVuY3kgPSBCMzo6RnJlcXVlbmN5Q2xhc3M6Ok5v
cm1hbDsKKworICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUJyYW5jaEhpbnRzKCkpIHsK
KyAgICAgICAgQnJhbmNoSGludCBoaW50ID0gbV9pbmZvLmdldEJyYW5jaEhpbnQobV9mdW5jdGlv
bkluZGV4LCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkpOworCisgICAg
ICAgIHN3aXRjaCAoaGludCkgeworICAgICAgICBjYXNlIEJyYW5jaEhpbnQ6OlVubGlrZWx5Ogor
ICAgICAgICAgICAgdGFyZ2V0RnJlcXVlbmN5ID0gQjM6OkZyZXF1ZW5jeUNsYXNzOjpSYXJlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQnJhbmNoSGludDo6TGlrZWx5OgorICAg
ICAgICAgICAgY29udGludWF0aW9uRnJlcXVlbmN5ID0gQjM6OkZyZXF1ZW5jeUNsYXNzOjpSYXJl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQnJhbmNoSGludDo6SW52YWxpZDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKGNvbmRpdGlv
bikgewogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2so
KTsKICAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOwotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQsIHRhcmdldEZy
ZXF1ZW5jeSksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24sIGNvbnRpbnVhdGlvbkZyZXF1
ZW5jeSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKICAgICB9IGVs
c2UgewogICAgICAgICBhcHBlbmQoSnVtcCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRT
dWNjZXNzb3JzKHRhcmdldCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3Jz
KEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQsIHRhcmdldEZyZXF1ZW5jeSkpOwogICAgIH0KIAogICAg
IHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHAKaW5kZXggZGVmZmNkZWFkMzVlMjI5YTZhMzIyMzQwZWM5MTcxMjIxNmJlOWQx
MS4uMzhmNDZhZTRiY2YzNzhkZWY3OTIzYWVkZmU2NGNkYmI0MjcxYWMwZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtNTIsNyAr
NTIsNyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlBy
b2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgotI2lu
Y2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIldhc21CcmFuY2hI
aW50cy5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2luY2x1ZGUgIldh
c21Db250ZXh0SW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCkBAIC0y
NDc1LDkgKzI0NzUsMjYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3QKICAgICBCYXNpY0Jsb2Nr
KiB0YWtlbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0g
bV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9j
LmFkZEJsb2NrKCk7CisgICAgRnJlcXVlbmN5Q2xhc3MgdGFrZW5GcmVxdWVuY3kgPSBGcmVxdWVu
Y3lDbGFzczo6Tm9ybWFsOworICAgIEZyZXF1ZW5jeUNsYXNzIG5vdFRha2VuRnJlcXVlbmN5ID0g
RnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDsKKworICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJs
eUJyYW5jaEhpbnRzKCkpIHsKKyAgICAgICAgQnJhbmNoSGludCBoaW50ID0gbV9pbmZvLmdldEJy
YW5jaEhpbnQobV9mdW5jdGlvbkluZGV4LCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5n
T2Zmc2V0KCkpOworCisgICAgICAgIHN3aXRjaCAoaGludCkgeworICAgICAgICBjYXNlIEJyYW5j
aEhpbnQ6OlVubGlrZWx5OgorICAgICAgICAgICAgdGFrZW5GcmVxdWVuY3kgPSBGcmVxdWVuY3lD
bGFzczo6UmFyZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJyYW5jaEhpbnQ6
Okxpa2VseToKKyAgICAgICAgICAgIG5vdFRha2VuRnJlcXVlbmN5ID0gRnJlcXVlbmN5Q2xhc3M6
OlJhcmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCcmFuY2hIaW50OjpJbnZh
bGlkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBn
ZXQoY29uZGl0aW9uKSk7Ci0gICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVl
bnRlZEJsb2NrKHRha2VuKSwgRnJlcXVlbnRlZEJsb2NrKG5vdFRha2VuKSk7CisgICAgbV9jdXJy
ZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRha2VuLCB0YWtlbkZyZXF1
ZW5jeSksIEZyZXF1ZW50ZWRCbG9jayhub3RUYWtlbiwgbm90VGFrZW5GcmVxdWVuY3kpKTsKICAg
ICB0YWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgIG5vdFRha2VuLT5h
ZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAKQEAgLTI3MjEsMTUgKzI3MzgsMzMgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgY29uc3QKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5W
YWx1ZXMsIGRhdGEpOwogCiAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9j
a0ZvckJyYW5jaCgpOworICAgIEZyZXF1ZW5jeUNsYXNzIHRhcmdldEZyZXF1ZW5jeSA9IEZyZXF1
ZW5jeUNsYXNzOjpOb3JtYWw7CisgICAgRnJlcXVlbmN5Q2xhc3MgY29udGludWF0aW9uRnJlcXVl
bmN5ID0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDsKKworICAgIGlmIChPcHRpb25zOjp1c2VXZWJB
c3NlbWJseUJyYW5jaEhpbnRzKCkpIHsKKyAgICAgICAgQnJhbmNoSGludCBoaW50ID0gbV9pbmZv
LmdldEJyYW5jaEhpbnQobV9mdW5jdGlvbkluZGV4LCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0
YXJ0aW5nT2Zmc2V0KCkpOworCisgICAgICAgIHN3aXRjaCAoaGludCkgeworICAgICAgICBjYXNl
IEJyYW5jaEhpbnQ6OlVubGlrZWx5OgorICAgICAgICAgICAgdGFyZ2V0RnJlcXVlbmN5ID0gRnJl
cXVlbmN5Q2xhc3M6OlJhcmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCcmFu
Y2hIaW50OjpMaWtlbHk6CisgICAgICAgICAgICBjb250aW51YXRpb25GcmVxdWVuY3kgPSBGcmVx
dWVuY3lDbGFzczo6UmFyZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJyYW5j
aEhpbnQ6OkludmFsaWQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIGlmIChjb25kaXRpb24pIHsKICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGdldChjb25kaXRpb24pKTsKLSAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRhcmdldCks
IEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRhcmdldCwgdGFyZ2V0RnJlcXVlbmN5KSwg
RnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbiwgY29udGludWF0aW9uRnJlcXVlbmN5KSk7CiAg
ICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgICAgICBj
b250aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBG
cmVxdWVudGVkQmxvY2sodGFyZ2V0KSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKHRh
cmdldCwgdGFyZ2V0RnJlcXVlbmN5KSk7CiAgICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3Io
bV9jdXJyZW50QmxvY2spOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJyYW5jaEhpbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQnJhbmNoSGludHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MzBlOTk1YmY0ZDUwNmM4NWM2MGUzYTIxNjk1
NjMzMmY3YjNkOTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJyYW5jaEhpbnRzLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMiBMZWFuaW5nIFRlY2hub2xvZ2llcyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2Ug
V2FzbSB7CisKK2VudW0gY2xhc3MgQnJhbmNoSGludCA6IHVpbnQ4X3QgeworICAgIFVubGlrZWx5
LAorICAgIExpa2VseSwKKyAgICBJbnZhbGlkLAorfTsKKworY2xhc3MgQnJhbmNoSGludE1hcCB7
CisKK3B1YmxpYzoKKworICAgIHZvaWQgYWRkKHVpbnQzMl90IGJyYW5jaE9mZnNldCwgQnJhbmNo
SGludCBoaW50KQorICAgIHsKKyAgICAgICAgbV9tYXAuYWRkKGJyYW5jaE9mZnNldCwgaGludCk7
CisgICAgfQorCisgICAgQnJhbmNoSGludCBnZXRCcmFuY2hIaW50KHVpbnQzMl90IGJyYW5jaE9m
ZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBtX21hcC5maW5kKGJyYW5jaE9m
ZnNldCk7CisgICAgICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVy
biBCcmFuY2hIaW50OjpJbnZhbGlkOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworICAgIH0K
KworICAgIGJvb2wgaXNWYWxpZEtleSh1aW50MzJfdCBicmFuY2hPZmZzZXQpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9tYXAuaXNWYWxpZEtleShicmFuY2hPZmZzZXQpOworICAgIH0K
KworcHJpdmF0ZToKKworICAgIEhhc2hNYXA8dWludDMyX3QsIEJyYW5jaEhpbnQsIEludEhhc2g8
dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4g
bV9tYXA7CisKK307CisKK2lubGluZSBjb25zdGV4cHIgYm9vbCBpc1ZhbGlkQnJhbmNoSGludChC
cmFuY2hIaW50IGhpbnQpCit7CisgICAgc3dpdGNoIChoaW50KSB7CisgICAgY2FzZSBCcmFuY2hI
aW50OjpMaWtlbHk6CisgICAgY2FzZSBCcmFuY2hIaW50OjpVbmxpa2VseToKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30KK30gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBh
cnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQnJhbmNoSGludHNTZWN0
aW9uUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzVhZjQ2NDJjNjg0MjNmNWVmNTE4ZDI0ZTQyOTMy
OThhNWVkMmJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMiBMZWFuaW5nIFRlY2hub2xvZ2llcyBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
YXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmgiCisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNw
YWNlIFdhc20geworCithdXRvIEJyYW5jaEhpbnRzU2VjdGlvblBhcnNlcjo6cGFyc2UoKSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgZnVuY3Rpb25Db3VudDsKKyAgICBpbnQ2NF90
IHByZXZpb3VzRnVuY3Rpb25JbmRleCA9IC0xOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKGZ1bmN0aW9uQ291bnQpLCAiY2FuJ3QgZ2V0IGZ1bmN0aW9uIGNvdW50Iik7
CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZnVuY3Rpb25Db3VudDsgKytpKSB7Cisg
ICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIHVpbnQzMl90IGhpbnRDb3Vu
dDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25J
bmRleCksICJjYW4ndCBnZXQgZnVuY3Rpb24gaW5kZXggZm9yIGZ1bmN0aW9uICIsIGkpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHN0YXRpY19jYXN0PGludDY0X3Q+KGZ1bmN0aW9uSW5k
ZXgpIDwgcHJldmlvdXNGdW5jdGlvbkluZGV4LCAiaW52YWxpZCBmdW5jdGlvbiBpbmRleCAiLCBm
dW5jdGlvbkluZGV4LCAiIGZvciBmdW5jdGlvbiAiLCBpKTsKKworICAgICAgICBwcmV2aW91c0Z1
bmN0aW9uSW5kZXggPSBmdW5jdGlvbkluZGV4OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGhpbnRDb3VudCksICJjYW4ndCBnZXQgbnVtYmVyIG9mIGhpbnRz
IGZvciBmdW5jdGlvbiAiLCBpKTsKKworICAgICAgICBpZiAoIWhpbnRDb3VudCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGludDY0X3QgcHJldmlvdXNCcmFuY2hPZmZzZXQgPSAt
MTsKKyAgICAgICAgQnJhbmNoSGludE1hcCBicmFuY2hIaW50c0ZvckZ1bmN0aW9uOworICAgICAg
ICBmb3IgKHVpbnQzMl90IGogPSAwOyBqIDwgaGludENvdW50OyArK2opIHsKKyAgICAgICAgICAg
IHVpbnQzMl90IGJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGJyYW5jaE9mZnNldCksICJjYW4ndCBnZXQgYnJhbmNoIG9mZnNldCBm
b3IgaGludCAiLCBqKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhdGljX2Nh
c3Q8aW50NjRfdD4oYnJhbmNoT2Zmc2V0KSA8IHByZXZpb3VzQnJhbmNoT2Zmc2V0CisgICAgICAg
ICAgICAgICAgfHwgIW1faW5mby0+YnJhbmNoSGludHMuaXNWYWxpZEtleShicmFuY2hPZmZzZXQp
LCAiaW52YWxpZCBicmFuY2ggb2Zmc2V0ICIsIGJyYW5jaE9mZnNldCwgIiBmb3IgaGludCAiLCBq
KTsKKworICAgICAgICAgICAgcHJldmlvdXNCcmFuY2hPZmZzZXQgPSBicmFuY2hPZmZzZXQ7CisK
KyAgICAgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWRCeXRlOworICAgICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShyZXNlcnZlZEJ5dGUpLCAiY2FuJ3QgZ2V0IHJlc2Vy
dmVkIGJ5dGUgZm9yIGhpbnQgIiwgaik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHJlc2VydmVkQnl0ZSAhPSAweDEsICJpbnZhbGlkIHJlc2VydmVkIGJ5dGUgZm9yIGhpbnQgIiwg
aik7CisKKyAgICAgICAgICAgIHVpbnQ4X3QgcGFyc2VkQnJhbmNoSGludDsKKyAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocGFyc2VkQnJhbmNoSGludCksICJj
YW4ndCBnZXQgb3IgaW52YWxpZCBicmFuY2ggaGludCB2YWx1ZSBmb3IgaGludCAiLCBqKTsKKwor
ICAgICAgICAgICAgQnJhbmNoSGludCBicmFuY2hIaW50ID0gc3RhdGljX2Nhc3Q8QnJhbmNoSGlu
dD4ocGFyc2VkQnJhbmNoSGludCk7CisgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEJyYW5jaEhp
bnQoYnJhbmNoSGludCkpOworCisgICAgICAgICAgICBicmFuY2hIaW50c0ZvckZ1bmN0aW9uLmFk
ZChicmFuY2hPZmZzZXQsIGJyYW5jaEhpbnQpOworICAgICAgICB9CisgICAgICAgIG1faW5mby0+
YnJhbmNoSGludHMuYWRkKGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoYnJhbmNoSGludHNGb3JGdW5j
dGlvbikpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCit9Cit9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CcmFuY2hIaW50c1NlY3Rpb25QYXJzZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mMTdjYTk3YmY3ZmZlMjM0ZTI3MGZiMzlhMThkN2ViNjViMDNiOWM3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJyYW5jaEhp
bnRzU2VjdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjIgTGVhbmluZyBUZWNobm9sb2dpZXMgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEJyYW5jaEhpbnRzU2VjdGlv
blBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9pZD4geworcHVibGljOgorICAgIEJyYW5jaEhpbnRz
U2VjdGlvblBhcnNlcihjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VM
ZW5ndGgsIE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorICAgICAgICA6IFBhcnNlcihzb3VyY2VC
dWZmZXIsIHNvdXJjZUxlbmd0aCkKKyAgICAgICAgLCBtX2luZm8oaW5mbykKKyAgICB7CisgICAg
fQorICAgIFBhcnRpYWxSZXN1bHQgcGFyc2UoKTsKKworcHJpdmF0ZToKKyAgICBSZWY8TW9kdWxl
SW5mb3JtYXRpb24+IG1faW5mbzsKK307CisKK30KK30gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaAppbmRleCBhNjFmNjkyMGY1YWJjYzcz
MzdiM2FjZGVhMmJhNGM2OWIyN2JkYzc2Li5hZTZiYmVlZGYyMTg2MTk0M2I4OTBmNzIzMTUzYzc4
ODhjZmM0OTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uaApAQCAtMjcsMTMgKzI3LDE4IEBACiAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAKKyNpbmNsdWRlICJXYXNtQnJhbmNoSGludHMuaCIKICNpbmNsdWRlICJXYXNtRm9y
bWF0LmgiCiAKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0
aW9uPiB7CisKKyAgICB1c2luZyBCcmFuY2hIaW50cyA9IEhhc2hNYXA8dWludDMyX3QsIEJyYW5j
aEhpbnRNYXAsIEludEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVpbnQzMl90Pj47CisKICAgICBNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIE1vZHVs
ZUluZm9ybWF0aW9uKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJikgPSBkZWxldGU7CiAgICAgTW9k
dWxlSW5mb3JtYXRpb24oTW9kdWxlSW5mb3JtYXRpb24mJikgPSBkZWxldGU7CkBAIC05Niw2ICsx
MDEsMTQgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAKICAgICBib29sIGhhc01lbW9yeUltcG9ydCgp
IGNvbnN0IHsgcmV0dXJuIG1lbW9yeS5pc0ltcG9ydCgpOyB9CiAKKyAgICBCcmFuY2hIaW50IGdl
dEJyYW5jaEhpbnQodWludDMyX3QgZnVuY3Rpb25PZmZzZXQsIHVpbnQzMl90IGJyYW5jaE9mZnNl
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBicmFuY2hIaW50cy5maW5kKGZ1bmN0
aW9uT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGl0ID09IGJyYW5jaEhpbnRzLmVuZCgpCisgICAg
ICAgICAgICA/IEJyYW5jaEhpbnQ6OkludmFsaWQKKyAgICAgICAgICAgIDogaXQtPnZhbHVlLmdl
dEJyYW5jaEhpbnQoYnJhbmNoT2Zmc2V0KTsKKyAgICB9CisKICAgICBWZWN0b3I8SW1wb3J0PiBp
bXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxGdW5jdGlvblNp
Z25hdHVyZUluZGljZXM7CkBAIC0xMTcsNiArMTMwLDcgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0
aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAg
ICAgdWludDMyX3QgY29kZVNlY3Rpb25TaXplIHsgMCB9OwogICAgIFZlY3RvcjxDdXN0b21TZWN0
aW9uPiBjdXN0b21TZWN0aW9uczsKICAgICBSZWY8TmFtZVNlY3Rpb24+IG5hbWVTZWN0aW9uOwor
ICAgIEJyYW5jaEhpbnRzIGJyYW5jaEhpbnRzOwogICAgIHVpbnQzMl90IG51bWJlck9mRGF0YVNl
Z21lbnRzIHsgMCB9OwogCiAgICAgQml0VmVjdG9yIG1fZGVjbGFyZWRGdW5jdGlvbnM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKaW5kZXgg
YTg4OTVjOTUxMjlkMzNjN2MwY2RiZjg2NjRlODkwZDRhZjM1MTNiYS4uNWI1MTE4MTEwZTUyZDJi
ZDA3OGNiMDJlOTg5OTk3MmQyZmE4YjRlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnlJ
bmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvblBhcnNlci5oIgogI2luY2x1
ZGUgIldhc21PcHMuaCIKQEAgLTg5Niw2ICs4OTcsMTIgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpw
YXJzZUN1c3RvbSgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgTmFtZVNlY3Rpb25QYXJzZXIg
bmFtZVNlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXlsb2FkLmJlZ2luKCksIHNlY3Rpb24ucGF5bG9h
ZC5zaXplKCksIG1faW5mbyk7CiAgICAgICAgIGlmIChhdXRvIG5hbWVTZWN0aW9uID0gbmFtZVNl
Y3Rpb25QYXJzZXIucGFyc2UoKSkKICAgICAgICAgICAgIG1faW5mby0+bmFtZVNlY3Rpb24gPSBX
VEZNb3ZlKCpuYW1lU2VjdGlvbik7CisgICAgfSBlbHNlIGlmIChPcHRpb25zOjp1c2VXZWJBc3Nl
bWJseUJyYW5jaEhpbnRzKCkpIHsKKyAgICAgICAgTmFtZSBicmFuY2hIaW50c05hbWUgPSB7ICdj
JywgJ28nLCAnZCcsICdlJywgJ18nLCAnYScsICduJywgJ24nLCAnbycsICd0JywgJ2EnLCAndCcs
ICdpJywgJ28nLCAnbicsICcuJywgJ2InLCAncicsICdhJywgJ24nLCAnYycsICdoJywgJ18nLCAn
aCcsICdpJywgJ24nLCAndCcgfTsKKyAgICAgICAgaWYgKHNlY3Rpb24ubmFtZSA9PSBicmFuY2hI
aW50c05hbWUpIHsKKyAgICAgICAgICAgIEJyYW5jaEhpbnRzU2VjdGlvblBhcnNlciBicmFuY2hI
aW50c1NlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXlsb2FkLmJlZ2luKCksIHNlY3Rpb24ucGF5bG9h
ZC5zaXplKCksIG1faW5mbyk7CisgICAgICAgICAgICBicmFuY2hIaW50c1NlY3Rpb25QYXJzZXIu
cGFyc2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1faW5mby0+Y3VzdG9tU2VjdGlvbnMu
dW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc2VjdGlvbikpOwo=
</data>
<flag name="commit-queue"
          id="476642"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>