<?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>141019</bug_id>
          
          <creation_ts>2015-01-28 17:57:16 -0800</creation_ts>
          <short_desc>Use &quot;this&quot; instead of &quot;callee&quot; to get the constructor</short_desc>
          <delta_ts>2015-02-25 18:47:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>140491</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1065101</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-28 17:57:16 -0800</bug_when>
    <thetext>In order to support ES6 class syntax (bug 140491), [[Construct]] needs to take an extra argument newTarget.
Use &quot;this&quot; register to pass this argument since &quot;this&quot; is never used before the object allocation takes place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065106</commentid>
    <comment_count>1</comment_count>
      <attachid>245593</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-28 18:00:54 -0800</bug_when>
    <thetext>Created attachment 245593
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065113</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-28 18:13:42 -0800</bug_when>
    <thetext>Attachment 245593 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1130:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065122</commentid>
    <comment_count>3</comment_count>
      <attachid>245593</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-01-28 18:33:04 -0800</bug_when>
    <thetext>Comment on attachment 245593
Work in progress

all the disappearing code makes me happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065142</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2015-01-28 20:23:52 -0800</bug_when>
    <thetext>As well as de-duplicating the arguments to op_create_this, you can probably also remove op_get_callee, too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071467</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-02-23 18:12:49 -0800</bug_when>
    <thetext>Geoff tells me he&apos;d prefer keeping the two-arguments model so that the rest of the code base doens&apos;t need to know this quirk.  Also, we can&apos;t quite get rid of op_get_callee because my subsequent patches to implement ES6 class needs to use op_get_callee to get various private flags stored in the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071468</commentid>
    <comment_count>6</comment_count>
      <attachid>247180</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-02-23 18:13:02 -0800</bug_when>
    <thetext>Created attachment 247180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071792</commentid>
    <comment_count>7</comment_count>
      <attachid>247180</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-24 14:28:38 -0800</bug_when>
    <thetext>Comment on attachment 247180
Patch

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

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:-3884
&gt;          arguments.append(jsCallee);
&gt;          if (jsArguments)
&gt;              arguments.append(jsArguments);
&gt; -        if (thisArg)

Just above here there is the line:

arguments.append(m_out.constInt32(1 + !!jsArguments + !!thisArg));

I guess this can now be 2 + !!jsArguments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071820</commentid>
    <comment_count>8</comment_count>
      <attachid>247273</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-02-24 15:50:26 -0800</bug_when>
    <thetext>Created attachment 247273
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071839</commentid>
    <comment_count>9</comment_count>
      <attachid>247273</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-24 16:41:53 -0800</bug_when>
    <thetext>Comment on attachment 247273
Patch for landing

Clearing flags on attachment: 247273

Committed r180595: &lt;http://trac.webkit.org/changeset/180595&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071840</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-24 16:41:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071995</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-25 00:23:18 -0800</bug_when>
    <thetext>Looks like this could be a 1.7% progression on Sunspider: http://arewefastyet.com/#machine=29</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072088</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-02-25 10:25:42 -0800</bug_when>
    <thetext>It looks like this caused test failures on iOS Arm 64

Test                                                                           r180594 r180600
regress/script-tests/deltablue-varargs.js.ftl-eager                             Passed  Failed
regress/script-tests/deltablue-varargs.js.ftl-no-cjit-no-inline-validate        Passed  Failed
stress/construct-varargs-inline-smaller-Foo.js.ftl-no-cjit-no-inline-validate   Passed  Failed
stress/construct-varargs-inline.js.ftl-eager                                    Passed  Failed
stress/construct-varargs-inline.js.ftl-eager-no-cjit                            Passed  Failed
stress/construct-varargs-inline.js.ftl-no-cjit-no-inline-validate               Passed  Failed
stress/construct-varargs-inline.js.ftl-no-cjit-validate                         Passed  Failed
stress/construct-varargs-no-inline.js.ftl-eager                                 Passed  Failed
stress/construct-varargs-no-inline.js.ftl-eager-no-cjit                         Passed  Failed
stress/construct-varargs-no-inline.js.ftl-no-cjit-no-inline-validate            Passed  Failed
stress/construct-varargs-no-inline.js.ftl-no-cjit-validate                      Passed  Failed

The failures have a similar output to:
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: Failed to insert inline cache for varargs call (specifically, ConstructVarargs) because we thought the size would be 284 but it ended up being 300 prior to compaction.
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 1   0x1002af98c JSC::FTL::compile(JSC::FTL::State&amp;, JSC::DFG::Safepoint::Result&amp;)
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 2   0x100226668 JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&amp;)
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 3   0x100225db0 JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&amp;, JSC::DFG::ThreadData*)
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 4   0x1001d15b0 JSC::DFG::compile(JSC::VM&amp;, JSC::CodeBlock*, JSC::CodeBlock*, JSC::DFG::CompilationMode, unsigned int, JSC::Operands&lt;JSC::JSValue, JSC::OperandValueTraits&lt;JSC::JSValue&gt; &gt; const&amp;, WTF::PassRefPtr&lt;JSC::DeferredCompilationCallback&gt;)
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 5   0x10020a684 JSC::DFG::triggerFTLReplacementCompile(JSC::VM*, JSC::CodeBlock*, JSC::DFG::JITCode*)
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 6   0x10020a37c triggerTierUpNow
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 7   0x130adcf34
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 8   0x12fae2938
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 9   0x12fae3a7c
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 10  0x100467848 vmEntryToJavaScript
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 11  0x10037db84 JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 12  0x10036c508 JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::JSObject*)
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 13  0x100159fd8 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, JSC::JSValue*)
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 14  0x1000c9c60 jscmain(int, char**)
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 15  0x1000c9670 main
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: 16  0x1980269e8 &lt;redacted&gt;
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: ./test_script_13755: line 2: 34513 Segmentation fault: 11  &quot;$@&quot; /System/Library/Frameworks/JavaScriptCore.framework/Resources/jsc --useFTLJIT\=false --enableFunctionDotArguments\=true --validateGraph\=true --useFTLJIT\=true --enableConcurrentJIT\=false --thresholdForJITAfterWarmUp\=100 --thresholdForJITAfterWarmUp\=10 --thresholdForJITSoon\=10 --thresholdForOptimizeAfterWarmUp\=20 --thresholdForOptimizeAfterLongWarmUp\=20 --thresholdForOptimizeSoon\=20 --thresholdForFTLOptimizeAfterWarmUp\=20 --thresholdForFTLOptimizeSoon\=20 --maximumEvalCacheableSourceLength\=150000 construct-varargs-inline.js
[2015-02-25 00:40:02] INFO: stress/construct-varargs-inline.js.ftl-eager-no-cjit: ERROR: Unexpected exit code: 139
[2015-02-25 00:40:02] ERROR: FAIL: stress/construct-varargs-inline.js.ftl-eager-no-cjit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072255</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-02-25 18:47:21 -0800</bug_when>
    <thetext>The regression was fixed in https://bugs.webkit.org/show_bug.cgi?id=142030.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245593</attachid>
            <date>2015-01-28 18:00:54 -0800</date>
            <delta_ts>2015-02-23 18:12:59 -0800</delta_ts>
            <desc>Work in progress</desc>
            <filename>wip141019.patch</filename>
            <type>text/plain</type>
            <size>16544</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCShyZXZpc2lvbiAxNzkyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAg
ICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKICAgICAgICAgaW50
IGxhc3RBcmcgPSByZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0
KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyAxIDog
MDsgaSA8IGFyZ0NvdW50OyBpKyspCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnQ291
bnQ7IGkrKykKICAgICAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bj
b2RlSUQsIGxhc3RBcmcgKyBpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAxNzkyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyNiwx
OSArMTYyNiwxMiBAQAogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENyZWF0
ZVRoaXMoUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0g
bmV3VGVtcG9yYXJ5KCk7IAotCi0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICBlbWl0T3Bjb2RlKG9wX2dldF9j
YWxsZWUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0KICAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlv
bnMoKS5zaXplKCk7CiAgICAgbV9zdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmNyZWF0ZVRoaXMobV90
aGlzUmVnaXN0ZXIuaW5kZXgoKSwgYmVnaW4gKyAzKTsKIAogICAgIGVtaXRPcGNvZGUob3BfY3Jl
YXRlX3RoaXMpOyAKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV90aGlzUmVnaXN0ZXIuaW5k
ZXgoKSk7IAotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgCisgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpOyAKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgcmV0dXJuIGRzdDsKIH0KQEAgLTE5NDMsOSArMTkz
Niw5IEBACiAgICAgcmV0dXJuIGVtaXRDYWxsVmFyYXJncyhvcF9jYWxsX3ZhcmFyZ3MsIGRzdCwg
ZnVuYywgdGhpc1JlZ2lzdGVyLCBhcmd1bWVudHMsIGZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZh
ckFyZ09mZnNldCwgcHJvZmlsZUhvb2tSZWdpc3RlciwgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90
RW5kKTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3RW
YXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogYXJn
dW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZyZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFy
Z09mZnNldCwgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90RW5kKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRDb25zdHJ1Y3RWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVn
aXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQq
IGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklE
KiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RF
bmQpCiB7Ci0gICAgcmV0dXJuIGVtaXRDYWxsVmFyYXJncyhvcF9jb25zdHJ1Y3RfdmFyYXJncywg
ZHN0LCBmdW5jLCAwLCBhcmd1bWVudHMsIGZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09m
ZnNldCwgcHJvZmlsZUhvb2tSZWdpc3RlciwgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsK
KyAgICByZXR1cm4gZW1pdENhbGxWYXJhcmdzKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBkc3QsIGZ1
bmMsIHRoaXNSZWdpc3RlciwgYXJndW1lbnRzLCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJB
cmdPZmZzZXQsIHByb2ZpbGVIb29rUmVnaXN0ZXIsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVu
ZCk7CiB9CiAgICAgCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJh
cmdzKE9wY29kZUlEIG9wY29kZSwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBS
ZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywgUmVnaXN0ZXJJ
RCogZmlyc3RGcmVlUmVnaXN0ZXIsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIFJlZ2lzdGVy
SUQqIHByb2ZpbGVIb29rUmVnaXN0ZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCkKQEAgLTIwMzMsNyArMjAyNiw3IEBACiAgICAgICAgICAgICAgICAgYXJndW1lbnRSZWdp
c3RlciA9IHVuY2hlY2tlZExvY2FsQXJndW1lbnRzUmVnaXN0ZXIoKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBhcmd1bWVudFJlZ2lzdGVyID0gZXhwcmVzc2lvbi0+ZW1pdEJ5
dGVjb2RlKCp0aGlzLCBjYWxsQXJndW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIoMCkpOwotICAgICAg
ICAgICAgcmV0dXJuIGVtaXRDb25zdHJ1Y3RWYXJhcmdzKGRzdCwgZnVuYywgYXJndW1lbnRSZWdp
c3Rlci5nZXQoKSwgbmV3VGVtcG9yYXJ5KCksIDAsIGNhbGxBcmd1bWVudHMucHJvZmlsZUhvb2tS
ZWdpc3RlcigpLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOworICAgICAgICAgICAgcmV0
dXJuIGVtaXRDb25zdHJ1Y3RWYXJhcmdzKGRzdCwgZnVuYywgY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgYXJndW1lbnRSZWdpc3Rlci5nZXQoKSwgbmV3VGVtcG9yYXJ5KCksIDAsIGNhbGxB
cmd1bWVudHMucHJvZmlsZUhvb2tSZWdpc3RlcigpLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RF
bmQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKEFyZ3VtZW50TGlzdE5vZGUq
IG4gPSBhcmd1bWVudHNOb2RlLT5tX2xpc3ROb2RlOyBuOyBuID0gbi0+bV9uZXh0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMTc5MjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NjcsNyAr
NjY3LDcgQEAKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SW5pdExhenlSZWdpc3RlcihSZWdp
c3RlcklEKik7CiAgICAgICAgIAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29uc3RydWN0VmFy
YXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIGFyZ3Vt
ZW50cywgUmVnaXN0ZXJJRCogZmlyc3RGcmVlUmVnaXN0ZXIsIGludDMyX3QgZmlyc3RWYXJBcmdP
ZmZzZXQsIFJlZ2lzdGVySUQqIHByb2ZpbGVIb29rUmVnaXN0ZXIsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdEVuZCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDb25zdHJ1Y3RW
YXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhp
c1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJl
Z2lzdGVyLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9v
a1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0Q2FsbFZhcmFyZ3MoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBh
cmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZpcnN0VmFy
QXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogICAgICAgICBSZWdpc3RlcklEKiBpbml0aWFsaXpl
Q2FwdHVyZWRWYXJpYWJsZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImLCBSZWdp
c3RlcklEKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE3OTIzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDU1LDYgKzQ1NSw3IEBACiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9leHByKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUg
PSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAgIENhbGxB
cmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgZ2VuZXJhdG9y
LmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGZ1bmMuZ2V0KCkpOwogICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdENvbnN0cnVjdChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5n
ZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3OTIzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NzUsOCArNjc1LDcgQEAKICAgICAgICAgaWYgKHBhcmFtZXRlclNsb3RzID4gbV9wYXJhbWV0
ZXJTbG90cykKICAgICAgICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBwYXJhbWV0ZXJTbG90czsK
IAotICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBvcCA9PSBDYWxsIHx8IG9wID09IE5h
dGl2ZUNhbGwgfHwgb3AgPT0gUHJvZmlsZWRDYWxsID8gMCA6IDE7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwICsgZHVtbXlUaGlzQXJndW1lbnQ7IGkgPCBhcmdDb3VudDsgKytpKQorICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCiAgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7
CiAKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBvcCwgb3BJbmZvLCBP
cEluZm8ocHJlZGljdGlvbikpOwpAQCAtMTEyNyw3ICsxMTI2LDggQEAKIAogdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsK
LSAgICBmb3IgKGludCBpID0ga2luZCA9PSBDb2RlRm9yQ2FsbCA/IDAgOiAxOyBpIDwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkKKyAgICBVTlVTRURfUEFSQU0oa2luZCk7CisgICAg
Zm9yIChpbnQgaSA9IGtpbmQgPT0gMDsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyAr
K2kpCiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSkpOwogfQogCkBAIC0xOTMzLDYgKzE5MzMsNyBAQAog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIC8v
IEZJWE1FOiBBcnJheSBjb25zdHJ1Y3RvciBzaG91bGQgdXNlICJ0aGlzIiBhcyBuZXdUYXJnZXQu
CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
ICsraSkKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwKQEAgLTIzNjksOCArMjM3MCw2IEBACiAgICAgICAgICAgICAvLyBJ
bml0aWFsaXplIGFsbCBsb2NhbHMgdG8gdW5kZWZpbmVkLgogICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyArK2kp
CiAgICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCB1bmRlZmlu
ZWQsIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkK
LSAgICAgICAgICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCksIHVuZGVm
aW5lZCwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW50
ZXIpOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMTc5MjM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMjQgKzgyLDgg
QEAKICAgICByZWNvbnN0cnVjdChjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIHN0cmVhbUluZGV4LCBy
ZWNvdmVyaWVzKTsKICAgICAKICAgICByZXN1bHQgPSBPcGVyYW5kczxKU1ZhbHVlPihPcGVyYW5k
c0xpa2UsIHJlY292ZXJpZXMpOwotICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHQuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gcmVzdWx0Lm9wZXJhbmRGb3JJbmRleChpKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChjb2RlT3JpZ2luID09IENvZGVPcmlnaW4oMCkKLSAgICAg
ICAgICAgICYmIG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCi0gICAgICAgICAgICAmJiAhVmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKQotICAgICAgICAgICAgJiYgY29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQotICAgICAgICAgICAgJiYgY29kZUJsb2Nr
LT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7Ci0gICAgICAgICAg
ICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQg
bWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAotICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1
c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhp
cywKLSAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQg
Y2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAotICAgICAgICAgICAgLy8g
c28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgotICAg
ICAgICAgICAgcmVzdWx0W2ldID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHQuc2l6ZSgp
OyBpLS07KQogICAgICAgICByZXN1bHRbaV0gPSByZWNvdmVyaWVzW2ldLnJlY292ZXIoZXhlYyk7
Ci0gICAgfQogfQogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9u
IDE3OTIzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MiwxMCArNjQyLDYgQEAKICAgICBpZiAoIWlz
Q2FsbCkKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0IHx8IG5vZGUtPm9w
KCkgPT0gUHJvZmlsZWRDb25zdHJ1Y3QpOwogCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhl
IHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0g
ICAgLy8gZm9yIGl0LgotICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAx
OwotCiAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGlzQ2FsbCA/IENhbGxM
aW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OwogCiAgICAgRWRnZSBjYWxs
ZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQo
KV07CkBAIC02NTgsNyArNjU0LDcgQEAKICAgICAvLyByZWNlaXZlciAobWV0aG9kIGNhbGwpLiBz
dWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUgYXJndW1lbnRzLgogICAgIGludCBudW1QYXNzZWRB
cmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CiAgICAgCi0gICAgaW50IG51bUFyZ3MgPSBu
dW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CisgICAgaW50IG51bUFyZ3MgPSBudW1Q
YXNzZWRBcmdzOwogCiAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG51bUFyZ3MpLCBjYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpKTsKICAgICBtX2ppdC5zdG9yZTMyKGNhbGxlZVBheWxvYWRHUFIsIGNhbGxlZUZyYW1lUGF5
bG9hZFNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CkBAIC02NzEsOCArNjY3LDggQEAKICAgICAgICAg
R1BSUmVnIGFyZ1BheWxvYWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOwogICAgICAgICB1c2UoYXJn
RWRnZSk7CiAKLSAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdUYWdHUFIsIGNhbGxlZUFyZ3VtZW50
VGFnU2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihh
cmdQYXlsb2FkR1BSLCBjYWxsZWVBcmd1bWVudFBheWxvYWRTbG90KGkgKyBkdW1teVRoaXNBcmd1
bWVudCkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgY2FsbGVlQXJndW1lbnRU
YWdTbG90KGkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBjYWxsZWVB
cmd1bWVudFBheWxvYWRTbG90KGkpKTsKICAgICB9CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAxNzkyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjcsMTEgKzYyNyw3IEBA
CiAgICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9PSBQ
cm9maWxlZENhbGw7CiAgICAgaWYgKCFpc0NhbGwpCiAgICAgICAgIERGR19BU1NFUlQobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgfHwgbm9kZS0+b3AoKSA9PSBQ
cm9maWxlZENvbnN0cnVjdCk7Ci0gICAgCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRo
aXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAg
Ly8gZm9yIGl0LgotICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOwot
ICAgIAorCiAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGlzQ2FsbCA/IENh
bGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OwogICAgIAogICAgIEVk
Z2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJz
dENoaWxkKCldOwpAQCAtNjQzLDcgKzYzOSw3IEBACiAgICAgLy8gYXJndW1lbnRzLgogICAgIGlu
dCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CiAgICAgCi0gICAgaW50
IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CisgICAgaW50IG51
bUFyZ3MgPSBudW1QYXNzZWRBcmdzOwogICAgIAogICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihudW1BcmdzKSwgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0
YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIsIGNhbGxl
ZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKQEAgLTY1NCw3ICs2NTAsNyBAQAogICAgICAg
ICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOwogICAgICAgICB1c2UoYXJnRWRnZSk7CiAgICAg
ICAgIAotICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgY2FsbGVlQXJndW1lbnRTbG90KGkg
KyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgY2Fs
bGVlQXJndW1lbnRTbG90KGkpKTsKICAgICB9CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHJldmlzaW9uIDE3OTIzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEwLDkgKzM2MTAsOCBAQAogI2lmIEVO
QUJMRShGVExfTkFUSVZFX0NBTExfSU5MSU5JTkcpCiAgICAgdm9pZCBjb21waWxlTmF0aXZlQ2Fs
bE9yQ29uc3RydWN0KCkgCiAgICAgewotICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBt
X25vZGUtPm9wKCkgPT0gTmF0aXZlQ2FsbCA/IDAgOiAxOwogICAgICAgICBpbnQgbnVtUGFzc2Vk
QXJncyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7Ci0gICAgICAgIGludCBudW1BcmdzID0g
bnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OworICAgICAgICBpbnQgbnVtQXJncyA9
IG51bVBhc3NlZEFyZ3M7CiAKICAgICAgICAgSlNGdW5jdGlvbioga25vd25GdW5jdGlvbiA9IGpz
Q2FzdDxKU0Z1bmN0aW9uKj4obV9ub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpLmFzQ2VsbCgp
KTsKICAgICAgICAgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24gPSBrbm93bkZ1bmN0aW9uLT5uYXRp
dmVGdW5jdGlvbigpOwpAQCAtMzYzMywxMiArMzYzMiw5IEBACiAKICAgICAgICAgbV9vdXQuc3Rv
cmU2NChtX291dC5jb25zdEludDY0KG51bUFyZ3MpLCBhZGRyZXNzRm9yKG1fZXhlY1N0b3JhZ2Us
IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKIAotICAgICAgICBpZiAoZHVtbXlUaGlzQXJndW1l
bnQpIAotICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIoZ2V0VW5kZWYobV9vdXQuaW50NjQpLCBh
ZGRyZXNzRm9yKG1fZXhlY1N0b3JhZ2UsIEpTU3RhY2s6OlRoaXNBcmd1bWVudCkpOwotICAgICAg
ICAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAg
ICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDEgKyBpKSksCi0gICAgICAgICAgICAgICAgYWRkcmVzc0ZvcihtX2V4ZWNTdG9yYWdl
LCBkdW1teVRoaXNBcmd1bWVudCA/IEpTU3RhY2s6OkZpcnN0QXJndW1lbnQgOiBKU1N0YWNrOjpU
aGlzQXJndW1lbnQsIGkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgYWRk
cmVzc0ZvcihtX2V4ZWNTdG9yYWdlLCBKU1N0YWNrOjpUaGlzQXJndW1lbnQsIGkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBMVmFsdWUgY2FsbGVlQ2FsbEZyYW1l
ID0gbV9vdXQuYWRkcmVzcyhtX2V4ZWNTdGF0ZSwgbV9oZWFwcy5DYWxsRnJhbWVfY2FsbGVyRnJh
bWUpLnZhbHVlKCk7CkBAIC0zNjYxLDkgKzM2NTcsOCBAQAogCiAgICAgdm9pZCBjb21waWxlQ2Fs
bE9yQ29uc3RydWN0KCkKICAgICB7Ci0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1f
bm9kZS0+b3AoKSA9PSBDYWxsID8gMCA6IDE7CiAgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0g
bV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKLSAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNz
ZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CisgICAgICAgIGludCBudW1BcmdzID0gbnVtUGFz
c2VkQXJnczsKIAogICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7CiAKQEAgLTM2NzgsOCArMzY3Myw2IEBACiAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsgLy8gY29kZSBibG9jawog
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQ2FsbGVlKTsgLy8gY2FsbGVlIC0+IHN0YWNrCiAg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChudW1BcmdzKSk7IC8vIGFy
Z3VtZW50IGNvdW50IGFuZCB6ZXJvcyBmb3IgdGhlIHRhZwotICAgICAgICBpZiAoZHVtbXlUaGlz
QXJndW1lbnQpCi0gICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0Lmlu
dDY0KSk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKQog
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAxICsgaSkpKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE3OTIzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMzQsNyArMTAzNCw3IEBACiAgICAgICAgIHJldHVybiB0aHJvd1Rl
cm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oY2FsbEZyYW1lKTsKIAogICAgIFByb3RvQ2FsbEZy
YW1lIHByb3RvQ2FsbEZyYW1lOwotICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobmV3Q29kZUJsb2Nr
LCBjb25zdHJ1Y3RvciwganNVbmRlZmluZWQoKSwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7Cisg
ICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIGNvbnN0cnVjdG9yLCBjb25zdHJ1
Y3RvciwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7CiAKICAgICBpZiAoTGVnYWN5UHJvZmlsZXIq
IHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT53aWxs
RXhlY3V0ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTc5MjM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE3NywxNyArMTE3Nyw3IEBACiAgICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVW
YWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpOwotICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCi0g
ICAgICAgICAgICAgICAgJiYgIVZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkK
LSAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
Ci0gICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBD
b2RlRm9yQ29uc3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBh
IGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdp
bGwKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0
dGVyIHdoYXQgd2UgcHV0IGludG8gdGhlIHZhbHVlIGZvciB0aGlzLAotICAgICAgICAgICAgICAg
IC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQg
Ynkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAotICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0
aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRvIFVuZGVmaW5lZC4KLSAgICAgICAgICAgICAg
ICBtdXN0SGFuZGxlVmFsdWVzW2ldID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRS
KG9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBl
eGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKICAgICAgICAgfQogCiAgICAgICAg
IFJlZlB0cjxDb2RlQmxvY2s+IHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdS
ZXBsYWNlbWVudCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247180</attachid>
            <date>2015-02-23 18:13:02 -0800</date>
            <delta_ts>2015-02-24 15:50:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141019-20150223181251.patch</filename>
            <type>text/plain</type>
            <size>32007</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwNTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDE1LTAyLTIzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAg
IFVzZSAidGhpcyIgaW5zdGVhZCBvZiAiY2FsbGVlIiB0byBnZXQgdGhlIGNvbnN0cnVjdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwMTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNo
IHVzZXMgInRoaXMiIHJlZ2lzdGVyIHRvIHBhc3MgdGhlIGNvbnN0cnVjdG9yIChuZXdUYXJnZXQp
IHRvIG9wX2NyZWF0ZV90aGlzIGZyb20KKyAgICAgICAgb3BfY29uc3RydWN0IG9yIG9wX2NvbnN0
cnVjdF92YXJhcmdzLiBUaGlzIHdpbGwgYWxsb3cgZnV0dXJlIHBhdGNoZXMgdGhhdCBpbXBsZW1l
bnQgRVM2IGNsYXNzCisgICAgICAgIHRvIHBhc3MgaW4gdGhlIG1vc3QgZGVyaXZlZCBjbGFzcycg
Y29uc3RydWN0b3IgdGhyb3VnaCAidGhpcyIgYXJndW1lbnQuCisKKyAgICAgICAgQnl0ZWNvZGVH
ZW5lcmF0b3IncyBlbWl0Q29uc3RydWN0IGFuZCBlbWl0Q29uc3RydWN0VmFyYXJncyBub3cgcGFz
c2VzIHRoaXNSZWdpc3RlciBsaWtlCisgICAgICAgIHJlZ3VsYXIgY2FsbHMgYW5kIGVtaXRDcmVh
dGVUaGlzIHBhc3NlcyBpbiB0aGlzIHJlZ2lzdGVyIHRvIG9wX2NyZWF0ZV90aGlzIGFzIGNvbnN0
cnVjdG9yLgorCisgICAgICAgIFRoZSByZXN0IG9mIHRoZSBjb2RlIGNoYW5nZSByZW1vdmVzIHRo
ZSBjb2RlIGZvciBzcGVjaWFsIGNhc2luZyAidGhpcyIgcmVnaXN0ZXIgbm90IGJlaW5nIHVzZWQK
KyAgICAgICAgaW4gY2FsbCB0byBjb25zdHJ1Y3QuCisKKyAgICAgICAgKiBieXRlY29kZS9CeXRl
Y29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0
KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENyZWF0ZVRoaXMpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAgICogYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHA6CisgICAgICAgIChKU0M6Ok5ld0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmFkZENhbGxXaXRob3V0U2V0dGluZ1Jlc3VsdCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbXMpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBk
ZmcvREZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6cmVjb25zdHJ1
Y3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwpOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGxWYXJhcmdzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjplbWl0KToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
TmF0aXZlQ2FsbE9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKiBpbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRl
Q29uc3RydWN0KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisKIDIwMTUtMDIt
MjMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9m
IEpTTGV4aWNhbEVudmlyb25tZW50Ojphcmd1bWVudHNHZXR0ZXIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxODA1
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAko
d29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRl
Y29kZU9mZnNldCgKICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwogICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVy
YW5kOwogICAgICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0
aGlzQXJndW1lbnRPZmZzZXQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IG9wY29kZUlEID09IG9w
X2NvbnN0cnVjdCA/IDEgOiAwOyBpIDwgYXJnQ291bnQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKQogICAgICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ss
IGluc3RydWN0aW9uLCBvcGNvZGVJRCwgbGFzdEFyZyArIGkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE4MDUxOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTY0LDE5ICsxNTY0LDEyIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UHV0QnkKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDcmVh
dGVUaGlzKFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9
IG5ld1RlbXBvcmFyeSgpOyAKLQotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgZW1pdE9wY29kZShvcF9nZXRf
Y2FsbGVlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotCiAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpOwogICAgIG1fc3RhdGljUHJvcGVydHlBbmFseXplci5jcmVhdGVUaGlzKG1f
dGhpc1JlZ2lzdGVyLmluZGV4KCksIGJlZ2luICsgMyk7CiAKICAgICBlbWl0T3Bjb2RlKG9wX2Ny
ZWF0ZV90aGlzKTsgCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fdGhpc1JlZ2lzdGVyLmlu
ZGV4KCkpOyAKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7IAorICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChtX3RoaXNSZWdpc3Rlci5pbmRleCgpKTsgCiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIHJldHVybiBkc3Q7CiB9CkBAIC0xODgxLDkgKzE4
NzQsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWCiAgICAgcmV0
dXJuIGVtaXRDYWxsVmFyYXJncyhvcF9jYWxsX3ZhcmFyZ3MsIGRzdCwgZnVuYywgdGhpc1JlZ2lz
dGVyLCBhcmd1bWVudHMsIGZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCwgcHJv
ZmlsZUhvb2tSZWdpc3RlciwgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3RWYXJhcmdzKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3Rl
cklEKiBmaXJzdEZyZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgUmVnaXN0
ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90RW5kKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3RWYXJh
cmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1Jl
Z2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lz
dGVyLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9va1Jl
Z2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiB7Ci0gICAgcmV0
dXJuIGVtaXRDYWxsVmFyYXJncyhvcF9jb25zdHJ1Y3RfdmFyYXJncywgZHN0LCBmdW5jLCAwLCBh
cmd1bWVudHMsIGZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCwgcHJvZmlsZUhv
b2tSZWdpc3RlciwgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKKyAgICByZXR1cm4gZW1p
dENhbGxWYXJhcmdzKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3Rl
ciwgYXJndW1lbnRzLCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQsIHByb2Zp
bGVIb29rUmVnaXN0ZXIsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiB9CiAgICAgCiBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKE9wY29kZUlEIG9w
Y29kZSwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklEKiB0aGlz
UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywgUmVnaXN0ZXJJRCogZmlyc3RGcmVlUmVn
aXN0ZXIsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIFJlZ2lzdGVySUQqIHByb2ZpbGVIb29r
UmVnaXN0ZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKQEAgLTE5ODgs
NyArMTk4MSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3QKICAg
ICAgICAgICAgICAgICBhcmd1bWVudFJlZ2lzdGVyID0gdW5jaGVja2VkTG9jYWxBcmd1bWVudHNS
ZWdpc3RlcigpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGFyZ3VtZW50UmVn
aXN0ZXIgPSBleHByZXNzaW9uLT5lbWl0Qnl0ZWNvZGUoKnRoaXMsIGNhbGxBcmd1bWVudHMuYXJn
dW1lbnRSZWdpc3RlcigwKSk7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdENvbnN0cnVjdFZhcmFy
Z3MoZHN0LCBmdW5jLCBhcmd1bWVudFJlZ2lzdGVyLmdldCgpLCBuZXdUZW1wb3JhcnkoKSwgMCwg
Y2FsbEFyZ3VtZW50cy5wcm9maWxlSG9va1JlZ2lzdGVyKCksIGRpdm90LCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCk7CisgICAgICAgICAgICByZXR1cm4gZW1pdENvbnN0cnVjdFZhcmFyZ3MoZHN0LCBm
dW5jLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBhcmd1bWVudFJlZ2lzdGVyLmdldCgp
LCBuZXdUZW1wb3JhcnkoKSwgMCwgY2FsbEFyZ3VtZW50cy5wcm9maWxlSG9va1JlZ2lzdGVyKCks
IGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGZvciAoQXJndW1lbnRMaXN0Tm9kZSogbiA9IGFyZ3VtZW50c05vZGUtPm1fbGlzdE5vZGU7
IG47IG4gPSBuLT5tX25leHQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODA1MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2Nyw3ICs2NjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0SW5pdExhenlSZWdpc3RlcihSZWdpc3RlcklEKik7CiAgICAg
ICAgIAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29uc3RydWN0VmFyYXJncyhSZWdpc3RlcklE
KiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywgUmVnaXN0ZXJJ
RCogZmlyc3RGcmVlUmVnaXN0ZXIsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIFJlZ2lzdGVy
SUQqIHByb2ZpbGVIb29rUmVnaXN0ZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDb25zdHJ1Y3RWYXJhcmdzKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdp
c3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90
IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0Q2FsbFZhcmFyZ3MoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVu
YywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lz
dGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdp
c3RlcklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RFbmQpOwogICAgICAgICBSZWdpc3RlcklEKiBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJs
ZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAJKHJldmlzaW9uIDE4MDUxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUzLDYgKzQ1Myw3
IEBAIFJlZ2lzdGVySUQqIE5ld0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQnkKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgZnVuYy5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRv
ciwgbV9hcmdzKTsKKyAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgZnVuYy5nZXQoKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q29uc3RydWN0
KHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMTgwNTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsKICAgICB2b2lkIGhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBw
YywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHZvaWQgZW1pdEZ1
bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc0FyZ3VtbnQpOwotICAgIHZvaWQgZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lz
dGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQpOworICAgIHZvaWQgZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIHVuc2lnbmVkIGlubGlu
aW5nQ29zdChDYWxsVmFyaWFudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFuIGlu
bGluaW5nIGNhbmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29zdCBv
ZiAxLgogICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVk
LCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KICAgICBib29sIGhhbmRsZUlubGlu
aW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExp
bmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1l
bnQsIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRz
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZz
ZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uKTsKQEAgLTY3Nyw4ICs2NzcsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAo
cGFyYW1ldGVyU2xvdHMgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAgICAgbV9wYXJhbWV0
ZXJTbG90cyA9IHBhcmFtZXRlclNsb3RzOwogCi0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVu
dCA9IG9wID09IENhbGwgfHwgb3AgPT0gTmF0aXZlQ2FsbCA/IDAgOiAxOwotICAgICAgICBmb3Ig
KGludCBpID0gMCArIGR1bW15VGhpc0FyZ3VtZW50OyBpIDwgYXJnQ291bnQ7ICsraSkKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQogICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0
KSkpOwogCiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIG9wSW5m
bywgT3BJbmZvKHByZWRpY3Rpb24pKTsKQEAgLTExMjAsMTEgKzExMTksNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbChJCiAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbV9ncmFwaC5tX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5maXJzdFZhckFy
Z09mZnNldCA9IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIAotICAgIE5vZGUqIHRoaXNDaGlsZDsK
LSAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgdGhpc0NoaWxkID0gZ2V0KFZp
cnR1YWxSZWdpc3Rlcih0aGlzUmVnKSk7Ci0gICAgZWxzZQotICAgICAgICB0aGlzQ2hpbGQgPSBu
dWxscHRyOworICAgIE5vZGUqIHRoaXNDaGlsZCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1Jl
ZykpOwogICAgIAogICAgIE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSks
IE9wSW5mbyhwcmVkaWN0aW9uKSwgY2FsbFRhcmdldCwgZ2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1
bWVudHMpKSwgdGhpc0NoaWxkKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3Vs
dCk7CkBAIC0xMTU0LDkgKzExNDksOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rp
b25DaGVja3MoCiAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZyZWV6
ZShjYWxsZWVDZWxsKSksIGNhbGxUYXJnZXRGb3JDaGVjaywgdGhpc0FyZ3VtZW50KTsKIH0KIAot
dm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRBcmd1bWVudFBoYW50b21zKGludCBy
ZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQogewotICAgIGZv
ciAoaW50IGkgPSBraW5kID09IENvZGVGb3JDYWxsID8gMCA6IDE7IGkgPCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpczsgKytpKQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXM7ICsraSkKICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiB9CiAKQEAgLTE0
MjYsNyArMTQyMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwK
ICAgICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihyZXN1bHRPcGVyYW5k
LCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBz
cGVjaWFsaXphdGlvbktpbmQsIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nKSkgewogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldE5vZGUpOwotICAgICAgICAgICAgZW1pdEFyZ3VtZW50
UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVj
aWFsaXphdGlvbktpbmQpOworICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVnaXN0
ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgICAgIGlubGlu
aW5nQmFsYW5jZS0tOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE0
MzksNyArMTQzNCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwK
ICAgICAgICAgaWYgKGhhbmRsZUludHJpbnNpYyhyZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJl
Z2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbiwgaW5z
ZXJ0Q2hlY2tzV2l0aEFjY291bnRpbmcpKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChk
aWRJbnNlcnRDaGVja3MpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFy
Z2V0Tm9kZSk7Ci0gICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNl
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAg
ICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpOwogICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLS07CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTUyNCw3ICsxNTE5LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0Tm9k
ZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0LAogICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENh
bGxlckRvZXNOb3JtYWxMaW5raW5nLCBwcmVkaWN0aW9uLAogICAgICAgICAgICAgaW5saW5pbmdC
YWxhbmNlLCBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgc3BlY2lh
bGl6YXRpb25LaW5kID09IENvZGVGb3JDYWxsID8gdGhpc0FyZ3VtZW50IDogVmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1
c1swXSwgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudCk7CiAKICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBoYXZlIGEgdmFyYXJncyBjYWxsLCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGFyZ3Vt
ZW50cyByaWdodCBub3cuCiAgICAgICAgICAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNW
YXJhcmdzKGtpbmQpKSB7CkBAIC0xNTU4LDkgKzE1NTMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZygKICAgICAgICAgICAgICAgICAgICAgY291bnRWYXJpYWJsZS0+bWVy
Z2VJc1Byb2ZpdGFibGVUb1VuYm94KHRydWUpOwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBz
ZXRBcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKGNvdW50VmFy
aWFibGUpKTsKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50Q291bnQp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChzcGVjaWFsaXphdGlvbktp
bmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQodGhpc0FyZ3VtZW50KSwgSW1tZWRpYXRlTmFrZWRT
ZXQpOworCisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRT
dGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IG1heE51bUFy
Z3VtZW50czsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRBcmd1bWVudFN0YXJ0ICsg
YXJndW1lbnQpLCBmYWxzZSk7CkBAIC0xNzQxLDcgKzE3MzUsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZygKICAgICB9IGVsc2UgewogICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrQmFkQ2VsbCk7CiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgbXlDYWxsVGFyZ2V0Tm9k
ZSk7Ci0gICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgZW1pdEFy
Z3VtZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCks
IGFkZFRvR3JhcGgoQm90dG9tVmFsdWUpKTsKICAgICB9CkBAIC0yMTI5LDYgKzIxMjMsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFycmF5IGNv
bnN0cnVjdG9yIHNob3VsZCB1c2UgInRoaXMiIGFzIG5ld1RhcmdldC4KICAgICAgICAgZm9yIChp
bnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKQogICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lz
dGVyT2Zmc2V0KSkpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQp
LApAQCAtMjU2Nyw4ICsyNTYyLDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwgbG9jYWxzIHRvIHVuZGVmaW5l
ZC4KICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9pbmxpbmVTdGFja1RvcC0+bV9j
b2RlQmxvY2stPm1fbnVtVmFyczsgKytpKQogICAgICAgICAgICAgICAgIHNldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChpKSwgdW5kZWZpbmVkLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAg
ICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2lu
ZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCi0gICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDApLCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudGVyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDE4
MDUxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDI0ICs4Miw4IEBAIHZvaWQgSklUQ29kZTo6cmVjb25zdHJ1Y3QoCiAg
ICAgcmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBzdHJlYW1JbmRleCwgcmVjb3Zl
cmllcyk7CiAgICAgCiAgICAgcmVzdWx0ID0gT3BlcmFuZHM8SlNWYWx1ZT4oT3BlcmFuZHNMaWtl
LCByZWNvdmVyaWVzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnNpemUoKTsgaS0tOykg
ewotICAgICAgICBpbnQgb3BlcmFuZCA9IHJlc3VsdC5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoY29kZU9yaWdpbiA9PSBDb2RlT3JpZ2luKDApCi0gICAgICAgICAg
ICAmJiBvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKQotICAgICAgICAgICAgJiYgIVZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkKLSAgICAgICAgICAgICYmIGNvZGVCbG9jay0+
Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKLSAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3Bl
Y2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgewotICAgICAgICAgICAgLy8g
VWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBo
b2xkIGdhcmJhZ2UuIEl0IHdpbGwKLSAgICAgICAgICAgIC8vIGFsc28gbmV2ZXIgYmUgdXNlZC4g
SXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50byB0aGUgdmFsdWUgZm9yIHRoaXMsCi0g
ICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0IGNhbiBi
ZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKLSAgICAgICAgICAgIC8vIHNvIHdl
IHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRvIFVuZGVmaW5lZC4KLSAgICAgICAg
ICAgIHJlc3VsdFtpXSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnNpemUoKTsgaS0t
OykKICAgICAgICAgcmVzdWx0W2ldID0gcmVjb3Zlcmllc1tpXS5yZWNvdmVyKGV4ZWMpOwotICAg
IH0KIH0KIAogI2lmIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxODA1
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDAsMjggKzY0MCwyMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTWlzY1N0cmljdEVxCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlKQogewogICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAg
Ym9vbCBpc0NhbGw7CiAgICAgYm9vbCBpc1ZhcmFyZ3M7CiAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2Fs
bDsKLSAgICAgICAgaXNDYWxsID0gdHJ1ZTsKICAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBjYWxsVHlwZSA9IENh
bGxMaW5rSW5mbzo6Q29uc3RydWN0OwotICAgICAgICBpc0NhbGwgPSBmYWxzZTsKICAgICAgICAg
aXNWYXJhcmdzID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsbFZhcmFyZ3M6
CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExp
bmtJbmZvOjpDYWxsVmFyYXJnczsKLSAgICAgICAgaXNDYWxsID0gdHJ1ZTsKICAgICAgICAgaXNW
YXJhcmdzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdz
OgogICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJnczsKLSAg
ICAgICAgaXNDYWxsID0gZmFsc2U7CiAgICAgICAgIGlzVmFyYXJncyA9IHRydWU7CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC03NzAsMjkgKzc2NSwyMSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBpZiAobm9kZS0+
b3AoKSAhPSBDYWxsRm9yd2FyZFZhcmFyZ3MpCiAgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQy
KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2FsbCkgewotICAgICAgICAgICAgLy8gTm93
IHNldCB1cCB0aGUgInRoaXMiIGFyZ3VtZW50LgotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dGhpc0FyZ3VtZW50KHRoaXMsIG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzID8gbm9k
ZS0+Y2hpbGQyKCkgOiBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBHUFJSZWcgdGhpc0Fy
Z3VtZW50VGFnR1BSID0gdGhpc0FyZ3VtZW50LnRhZ0dQUigpOwotICAgICAgICAgICAgR1BSUmVn
IHRoaXNBcmd1bWVudFBheWxvYWRHUFIgPSB0aGlzQXJndW1lbnQucGF5bG9hZEdQUigpOwotICAg
ICAgICAgICAgdGhpc0FyZ3VtZW50LnVzZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKHRoaXNBcmd1bWVudFRhZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3Vt
ZW50VGFnU2xvdCgwKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHRoaXNBcmd1bWVudFBh
eWxvYWRHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFBheWxvYWRTbG90KDApKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0
aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQotICAg
ICAgICAvLyBmb3IgaXQuCi0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/
IDAgOiAxOwotICAgICAgICAKKworICAgICAgICAvLyBOb3cgc2V0IHVwIHRoZSAidGhpcyIgYXJn
dW1lbnQuCisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNBcmd1bWVudCh0aGlzLCBub2RlLT5v
cCgpID09IENhbGxGb3J3YXJkVmFyYXJncyA/IG5vZGUtPmNoaWxkMigpIDogbm9kZS0+Y2hpbGQz
KCkpOworICAgICAgICBHUFJSZWcgdGhpc0FyZ3VtZW50VGFnR1BSID0gdGhpc0FyZ3VtZW50LnRh
Z0dQUigpOworICAgICAgICBHUFJSZWcgdGhpc0FyZ3VtZW50UGF5bG9hZEdQUiA9IHRoaXNBcmd1
bWVudC5wYXlsb2FkR1BSKCk7CisgICAgICAgIHRoaXNBcmd1bWVudC51c2UoKTsKKyAgICAgICAg
CisgICAgICAgIG1faml0LnN0b3JlMzIodGhpc0FyZ3VtZW50VGFnR1BSLCBKSVRDb21waWxlcjo6
Y2FsbGVlQXJndW1lbnRUYWdTbG90KDApKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMih0aGlzQXJn
dW1lbnRQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdCgw
KSk7CisgICAgfSBlbHNlIHsgICAgICAgIAogICAgICAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlv
bidzIGZpcnN0IGNoaWxkIGlzIGVpdGhlciB0aGUgZnVuY3Rpb24gKG5vcm1hbCBjYWxsKSBvciB0
aGUKICAgICAgICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxsKS4gc3Vic2VxdWVudCBjaGlsZHJl
biBhcmUgdGhlIGFyZ3VtZW50cy4KICAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5u
dW1DaGlsZHJlbigpIC0gMTsKLSAgICAgICAgCi0gICAgICAgIGludCBudW1BcmdzID0gbnVtUGFz
c2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OwotICAgICAgICAKLSAgICAgICAgbV9qaXQuc3Rv
cmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBtX2ppdC5jYWxsZWVG
cmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKworICAgICAgICBtX2pp
dC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyksIG1f
aml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAg
ICAgICAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsK
ICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJl
bltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CkBAIC04MDEsOCArNzg4LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgR1BSUmVnIGFy
Z1BheWxvYWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOwogICAgICAgICAgICAgdXNlKGFyZ0VkZ2Up
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgbV9q
aXQuY2FsbGVlQXJndW1lbnRUYWdTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOwotICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFBh
eWxvYWRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihhcmdUYWdHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50VGFnU2xvdChpKSk7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50UGF5
bG9hZFNsb3QoaSkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MDUx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYyNiwyOCArNjI2LDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVNaXNjU3RyaWN0RXEKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUpCiB7CiAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICBib29s
IGlzQ2FsbDsKICAgICBib29sIGlzVmFyYXJnczsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOwot
ICAgICAgICBpc0NhbGwgPSB0cnVlOwogICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExp
bmtJbmZvOjpDb25zdHJ1Y3Q7Ci0gICAgICAgIGlzQ2FsbCA9IGZhbHNlOwogICAgICAgICBpc1Zh
cmFyZ3MgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxsVmFyYXJnczoKICAg
ICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0lu
Zm86OkNhbGxWYXJhcmdzOwotICAgICAgICBpc0NhbGwgPSB0cnVlOwogICAgICAgICBpc1ZhcmFy
Z3MgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAg
ICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOwotICAgICAg
ICBpc0NhbGwgPSBmYWxzZTsKICAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKQEAgLTc0NiwyNyArNzQxLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0aGUgYXJn
dW1lbnRzIGFycmF5IGFueW1vcmUuCiAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENhbGxGb3J3
YXJkVmFyYXJncykKICAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAg
Ly8gTm93IHNldCB1cCB0aGUgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB0aGlzQXJndW1lbnQodGhpcywgbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MgPyBu
b2RlLT5jaGlsZDIoKSA6IG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSUmVnIHRoaXNBcmd1
bWVudEdQUiA9IHRoaXNBcmd1bWVudC5ncHIoKTsKKyAgICAgICAgdGhpc0FyZ3VtZW50LnVzZSgp
OwogICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2FsbCkgewotICAgICAgICAgICAgLy8gTm93IHNl
dCB1cCB0aGUgInRoaXMiIGFyZ3VtZW50LgotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhp
c0FyZ3VtZW50KHRoaXMsIG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzID8gbm9kZS0+
Y2hpbGQyKCkgOiBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBHUFJSZWcgdGhpc0FyZ3Vt
ZW50R1BSID0gdGhpc0FyZ3VtZW50LmdwcigpOwotICAgICAgICAgICAgdGhpc0FyZ3VtZW50LnVz
ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHRoaXNBcmd1bWVu
dEdQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgbV9qaXQuc3RvcmU2NCh0aGlzQXJndW1lbnRHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVB
cmd1bWVudFNsb3QoMCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZvciBjb25zdHJ1Y3Rv
cnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBz
cGFjZQotICAgICAgICAvLyBmb3IgaXQuCi0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9
IGlzQ2FsbCA/IDAgOiAxOwotICAgIAogICAgICAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidz
IGZpcnN0IGNoaWxkIGlzIHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJl
IHRoZQogICAgICAgICAvLyBhcmd1bWVudHMuCiAgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0g
bm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7Ci0gICAgCi0gICAgICAgIGludCBudW1BcmdzID0gbnVt
UGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OwotICAgIAotICAgICAgICBtX2ppdC5zdG9y
ZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJncyksIEpJVENvbXBpbGVyOjpj
YWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKworICAgICAg
ICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJn
cyksIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKTsKICAgICAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdz
OyBpKyspIHsKICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJB
cmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CkBAIC03NzQsNyArNzYxLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAg
R1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKICAg
ICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgSklUQ29tcGlsZXI6OmNh
bGxlZUFyZ3VtZW50U2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlNjQoYXJnR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KGkpKTsK
ICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGxWYXJhcmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCShyZXZpc2lvbiAxODA1MTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw5
ICs2OSw3IEBAIHZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBlcnMmIGoKICAgICAv
LyAtIFRoZSBjYWxsZWUuCiAgICAgLy8gLSBUaGUgYXJndW1lbnRzIG9iamVjdC4KICAgICAvLyAt
IFRoZSAidGhpcyIgdmFsdWUsIGlmIGl0J3MgYSBjb25zdHJ1Y3RvciBjYWxsLgotICAgIAotICAg
IGJvb2wgaXNDYWxsID0gbV9ub2RlLT5vcCgpICE9IENvbnN0cnVjdFZhcmFyZ3M7Ci0gICAgCisK
ICAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOwog
ICAgIAogICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CkBAIC05
MSw2ICs4OSw3IEBAIHZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBlcnMmIGoKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBhcmd1bWVu
dHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIHRoaXNHUFIgPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjI7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTAsOCArMTA5LDggQEAgdm9pZCBKU0Nh
bGxWYXJhcmdzOjplbWl0KENDYWxsSGVscGVycyYgagogICAgIHVzZWRSZWdpc3RlcnMuc2V0KGNh
bGxlZUdQUik7CiAgICAgaWYgKGFyZ3VtZW50c0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAg
ICB1c2VkUmVnaXN0ZXJzLnNldChhcmd1bWVudHNHUFIpOwotICAgIGlmICh0aGlzR1BSICE9IElu
dmFsaWRHUFJSZWcpCi0gICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNHUFIpOworICAgIEFT
U0VSVCh0aGlzR1BSKTsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKICAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwogICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CkBAIC0xODIs
OCArMTgxLDcgQEAgdm9pZCBKU0NhbGxWYXJhcmdzOjplbWl0KENDYWxsSGVscGVycyYgagogICAg
IGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xv
dHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3QpKTsKICAgICBpZiAoIWFyZ3VtZW50c09uU3RhY2sp
CiAgICAgICAgIGppdC5zdG9yZTY0KGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNz
Rm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBhcmd1bWVudHNTcGlsbFNsb3QpKTsKLSAgICBpZiAoaXND
YWxsKQotICAgICAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NG
b3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNTcGlsbFNsb3QpKTsKKyAgICBqaXQuc3RvcmU2NCh0
aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNT
cGlsbFNsb3QpKTsKICAgICAKICAgICB1bnNpZ25lZCBleHRyYVN0YWNrID0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpICsKICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpOwpAQCAtMjAxLDE4ICsxOTksMTYgQEAg
dm9pZCBKU0NhbGxWYXJhcmdzOjplbWl0KENDYWxsSGVscGVycyYgagogICAgIGNhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFt
ZSkpOwogICAgIAogICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNo
R1BSMik7Ci0gICAgCi0gICAgaWYgKGlzQ2FsbCkKLSAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhl
bHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNTcGlsbFNsb3QpLCB0aGlz
R1BSKTsKKworICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xv
dHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90KSwgdGhpc0dQUik7CiAgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxlZVNwaWxsU2xvdCks
IEdQUkluZm86OnJlZ1QwKTsKICAgICAKICAgICBpZiAobV9ub2RlLT5vcCgpID09IENhbGxGb3J3
YXJkVmFyYXJncykKICAgICAgICAgaGF2ZUFyZ3VtZW50cy5saW5rKCZqaXQpOwogICAgIAogICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIAotICAgIGlmIChpc0NhbGwpCi0gICAgICAgIGppdC5zdG9yZTY0KHRoaXNHUFIsIEND
YWxsSGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKworICAgIGppdC5zdG9yZTY0KHRo
aXNHUFIsIENDYWxsSGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKICAgICAKICAgICAv
LyBIZW5jZWZvcnRoIHdlIG1ha2UgdGhlIGNhbGwuIFRoZSBiYXNlIEZUTCBjYWxsIG1hY2hpbmVy
eSBleHBlY3RzIHRoZSBjYWxsZWUgaW4gcmVnVDAgYW5kIGZvciB0aGUKICAgICAvLyBzdGFjayBm
cmFtZSB0byBhbHJlYWR5IGJlIHNldCB1cCwgd2hpY2ggaXQgaXMuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTgw
NTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3NjUsOSArMzc2NSw4IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxF
KEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAgICB2b2lkIGNvbXBpbGVOYXRpdmVDYWxsT3JD
b25zdHJ1Y3QoKSAKICAgICB7Ci0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1fbm9k
ZS0+b3AoKSA9PSBOYXRpdmVDYWxsID8gMCA6IDE7CiAgICAgICAgIGludCBudW1QYXNzZWRBcmdz
ID0gbV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKLSAgICAgICAgaW50IG51bUFyZ3MgPSBudW1Q
YXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CisgICAgICAgIGludCBudW1BcmdzID0gbnVt
UGFzc2VkQXJnczsKIAogICAgICAgICBKU0Z1bmN0aW9uKiBrbm93bkZ1bmN0aW9uID0ganNDYXN0
PEpTRnVuY3Rpb24qPihtX25vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkuYXNDZWxsKCkpOwog
ICAgICAgICBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiA9IGtub3duRnVuY3Rpb24tPm5hdGl2ZUZ1
bmN0aW9uKCk7CkBAIC0zNzg4LDEyICszNzg3LDkgQEAgcHJpdmF0ZToKIAogICAgICAgICBtX291
dC5zdG9yZTY0KG1fb3V0LmNvbnN0SW50NjQobnVtQXJncyksIGFkZHJlc3NGb3IobV9leGVjU3Rv
cmFnZSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogCi0gICAgICAgIGlmIChkdW1teVRoaXNB
cmd1bWVudCkgCi0gICAgICAgICAgICBtX291dC5zdG9yZVB0cihnZXRVbmRlZihtX291dC5pbnQ2
NCksIGFkZHJlc3NGb3IobV9leGVjU3RvcmFnZSwgSlNTdGFjazo6VGhpc0FyZ3VtZW50KSk7Ci0g
ICAgICAgIAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkg
ewogICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMSArIGkpKSwKLSAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKG1fZXhlY1N0
b3JhZ2UsIGR1bW15VGhpc0FyZ3VtZW50ID8gSlNTdGFjazo6Rmlyc3RBcmd1bWVudCA6IEpTU3Rh
Y2s6OlRoaXNBcmd1bWVudCwgaSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgICAgICAg
ICBhZGRyZXNzRm9yKG1fZXhlY1N0b3JhZ2UsIEpTU3RhY2s6OlRoaXNBcmd1bWVudCwgaSAqIHNp
emVvZihSZWdpc3RlcikpKTsKICAgICAgICAgfQogCiAgICAgICAgIExWYWx1ZSBjYWxsZWVDYWxs
RnJhbWUgPSBtX291dC5hZGRyZXNzKG1fZXhlY1N0YXRlLCBtX2hlYXBzLkNhbGxGcmFtZV9jYWxs
ZXJGcmFtZSkudmFsdWUoKTsKQEAgLTM4MTYsOSArMzgxMiw4IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKQogICAgIHsKLSAgICAgICAgaW50IGR1bW15VGhp
c0FyZ3VtZW50ID0gbV9ub2RlLT5vcCgpID09IENhbGwgPyAwIDogMTsKICAgICAgICAgaW50IG51
bVBhc3NlZEFyZ3MgPSBtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwotICAgICAgICBpbnQgbnVt
QXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKKyAgICAgICAgaW50IG51
bUFyZ3MgPSBudW1QYXNzZWRBcmdzOwogCiAgICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKIApAQCAtMzgzMyw4ICszODI4
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5p
bnQ2NCkpOyAvLyBjb2RlIGJsb2NrCiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanNDYWxsZWUp
OyAvLyBjYWxsZWUgLT4gc3RhY2sKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25z
dEludDY0KG51bUFyZ3MpKTsgLy8gYXJndW1lbnQgY291bnQgYW5kIHplcm9zIGZvciB0aGUgdGFn
Ci0gICAgICAgIGlmIChkdW1teVRoaXNBcmd1bWVudCkKLSAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1QYXNzZWRBcmdzOyArK2kpCiAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEgKyBpKSkpOwogICAgICAgICAKQEAg
LTM4NjUsNiArMzg1OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICAgICAganNBcmd1bWVudHMgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgdGhpc0FyZyA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJiYWQgbm9kZSB0eXBlIik7
CkBAIC0zODgxLDggKzM4NzUsOCBAQCBwcml2YXRlOgogICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KGpzQ2FsbGVlKTsKICAgICAgICAgaWYgKGpzQXJndW1lbnRzKQogICAgICAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChqc0FyZ3VtZW50cyk7Ci0gICAgICAgIGlmICh0aGlzQXJnKQotICAgICAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzQXJnKTsKKyAgICAgICAgQVNTRVJUKHRoaXNBcmcpOwor
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNBcmcpOwogICAgICAgICAKICAgICAgICAgY2Fs
bFByZWZsaWdodCgpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTgwNTE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTc1LDcgKzk3NSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNv
bnN0cnVjdCgKICAgICAgICAgcmV0dXJuIHRocm93VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlv
bihjYWxsRnJhbWUpOwogCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7Ci0gICAg
cHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIGNvbnN0cnVjdG9yLCBqc1VuZGVmaW5l
ZCgpLCBhcmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKKyAgICBwcm90b0NhbGxGcmFtZS5pbml0KG5l
d0NvZGVCbG9jaywgY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBhcmdzQ291bnQsIGFyZ3MuZGF0
YSgpKTsKIAogICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJv
ZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3Ry
dWN0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxODA1MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU5LDE3ICsxMTU5LDcgQEAgU2xvd1Bh
dGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICBPcGVyYW5kczxKU1Zh
bHVlPiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJz
V2l0aFZhbHVlcyk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZh
bHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxl
VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1
bWVudChvcGVyYW5kKQotICAgICAgICAgICAgICAgICYmICFWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCkudG9Bcmd1bWVudCgpCi0gICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZQotICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6
YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgewotICAgICAgICAgICAgICAgIC8vIFVn
aC4gSWYgd2UncmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9s
ZCBnYXJiYWdlLiBJdCB3aWxsCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2Vk
LiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywK
LSAgICAgICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0
IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKLSAgICAgICAgICAgICAg
ICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQu
Ci0gICAgICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0g
ZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgICAgICBtdXN0SGFu
ZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBSZWZQdHI8Q29kZUJsb2NrPiByZXBsYWNlbWVudENvZGVCbG9jayA9
IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247273</attachid>
            <date>2015-02-24 15:50:26 -0800</date>
            <delta_ts>2015-02-24 16:41:53 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-141019-20150224155014.patch</filename>
            <type>text/plain</type>
            <size>32319</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwNTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDE1LTAyLTIzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAg
IFVzZSAidGhpcyIgaW5zdGVhZCBvZiAiY2FsbGVlIiB0byBnZXQgdGhlIGNvbnN0cnVjdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwMTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUaGlzIHBhdGNoIHVz
ZXMgInRoaXMiIHJlZ2lzdGVyIHRvIHBhc3MgdGhlIGNvbnN0cnVjdG9yIChuZXdUYXJnZXQpIHRv
IG9wX2NyZWF0ZV90aGlzIGZyb20KKyAgICAgICAgb3BfY29uc3RydWN0IG9yIG9wX2NvbnN0cnVj
dF92YXJhcmdzLiBUaGlzIHdpbGwgYWxsb3cgZnV0dXJlIHBhdGNoZXMgdGhhdCBpbXBsZW1lbnQg
RVM2IGNsYXNzCisgICAgICAgIHRvIHBhc3MgaW4gdGhlIG1vc3QgZGVyaXZlZCBjbGFzcycgY29u
c3RydWN0b3IgdGhyb3VnaCAidGhpcyIgYXJndW1lbnQuCisKKyAgICAgICAgQnl0ZWNvZGVHZW5l
cmF0b3IncyBlbWl0Q29uc3RydWN0IGFuZCBlbWl0Q29uc3RydWN0VmFyYXJncyBub3cgcGFzc2Vz
IHRoaXNSZWdpc3RlciBsaWtlCisgICAgICAgIHJlZ3VsYXIgY2FsbHMgYW5kIGVtaXRDcmVhdGVU
aGlzIHBhc3NlcyBpbiB0aGlzIHJlZ2lzdGVyIHRvIG9wX2NyZWF0ZV90aGlzIGFzIGNvbnN0cnVj
dG9yLgorCisgICAgICAgIFRoZSByZXN0IG9mIHRoZSBjb2RlIGNoYW5nZSByZW1vdmVzIHRoZSBj
b2RlIGZvciBzcGVjaWFsIGNhc2luZyAidGhpcyIgcmVnaXN0ZXIgbm90IGJlaW5nIHVzZWQKKyAg
ICAgICAgaW4gY2FsbCB0byBjb25zdHJ1Y3QuCisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29k
ZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENyZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHA6CisgICAgICAgIChKU0M6Ok5ld0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAg
ICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZENhbGxXaXRob3V0U2V0dGluZ1Jlc3VsdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcv
REZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6cmVjb25zdHJ1Y3Qp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwpOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGxWYXJhcmdzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpKU0NhbGxWYXJhcmdzOjplbWl0KToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTmF0
aXZlQ2FsbE9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29u
c3RydWN0KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisKIDIwMTUtMDItMjMg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIEpT
TGV4aWNhbEVudmlyb25tZW50Ojphcmd1bWVudHNHZXR0ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxODA1MTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29y
a2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZU9mZnNldCgKICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwogICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
OwogICAgICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlz
QXJndW1lbnRPZmZzZXQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IG9wY29kZUlEID09IG9wX2Nv
bnN0cnVjdCA/IDEgOiAwOyBpIDwgYXJnQ291bnQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBhcmdDb3VudDsgaSsrKQogICAgICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGlu
c3RydWN0aW9uLCBvcGNvZGVJRCwgbGFzdEFyZyArIGkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE4MDUxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTY0LDE5ICsxNTY0LDEyIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UHV0QnkKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDcmVhdGVU
aGlzKFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IG5l
d1RlbXBvcmFyeSgpOyAKLQotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgZW1pdE9wY29kZShvcF9nZXRfY2Fs
bGVlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7Ci0gICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotCiAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpOwogICAgIG1fc3RhdGljUHJvcGVydHlBbmFseXplci5jcmVhdGVUaGlzKG1fdGhp
c1JlZ2lzdGVyLmluZGV4KCksIGJlZ2luICsgMyk7CiAKICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0
ZV90aGlzKTsgCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fdGhpc1JlZ2lzdGVyLmluZGV4
KCkpOyAKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7IAorICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChtX3RoaXNSZWdpc3Rlci5pbmRleCgpKTsgCiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIHJldHVybiBkc3Q7CiB9CkBAIC0xODgxLDkgKzE4NzQs
OSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWCiAgICAgcmV0dXJu
IGVtaXRDYWxsVmFyYXJncyhvcF9jYWxsX3ZhcmFyZ3MsIGRzdCwgZnVuYywgdGhpc1JlZ2lzdGVy
LCBhcmd1bWVudHMsIGZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCwgcHJvZmls
ZUhvb2tSZWdpc3RlciwgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKIH0KIAotUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3RWYXJhcmdzKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3RlcklE
KiBmaXJzdEZyZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgUmVnaXN0ZXJJ
RCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
RW5kKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3RWYXJhcmdz
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lz
dGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVy
LCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9va1JlZ2lz
dGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiB7Ci0gICAgcmV0dXJu
IGVtaXRDYWxsVmFyYXJncyhvcF9jb25zdHJ1Y3RfdmFyYXJncywgZHN0LCBmdW5jLCAwLCBhcmd1
bWVudHMsIGZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCwgcHJvZmlsZUhvb2tS
ZWdpc3RlciwgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKKyAgICByZXR1cm4gZW1pdENh
bGxWYXJhcmdzKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3Rlciwg
YXJndW1lbnRzLCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQsIHByb2ZpbGVI
b29rUmVnaXN0ZXIsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiB9CiAgICAgCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKE9wY29kZUlEIG9wY29k
ZSwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklEKiB0aGlzUmVn
aXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywgUmVnaXN0ZXJJRCogZmlyc3RGcmVlUmVnaXN0
ZXIsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIFJlZ2lzdGVySUQqIHByb2ZpbGVIb29rUmVn
aXN0ZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKQEAgLTE5ODgsNyAr
MTk4MSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3QKICAgICAg
ICAgICAgICAgICBhcmd1bWVudFJlZ2lzdGVyID0gdW5jaGVja2VkTG9jYWxBcmd1bWVudHNSZWdp
c3RlcigpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGFyZ3VtZW50UmVnaXN0
ZXIgPSBleHByZXNzaW9uLT5lbWl0Qnl0ZWNvZGUoKnRoaXMsIGNhbGxBcmd1bWVudHMuYXJndW1l
bnRSZWdpc3RlcigwKSk7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdENvbnN0cnVjdFZhcmFyZ3Mo
ZHN0LCBmdW5jLCBhcmd1bWVudFJlZ2lzdGVyLmdldCgpLCBuZXdUZW1wb3JhcnkoKSwgMCwgY2Fs
bEFyZ3VtZW50cy5wcm9maWxlSG9va1JlZ2lzdGVyKCksIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZv
dEVuZCk7CisgICAgICAgICAgICByZXR1cm4gZW1pdENvbnN0cnVjdFZhcmFyZ3MoZHN0LCBmdW5j
LCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBhcmd1bWVudFJlZ2lzdGVyLmdldCgpLCBu
ZXdUZW1wb3JhcnkoKSwgMCwgY2FsbEFyZ3VtZW50cy5wcm9maWxlSG9va1JlZ2lzdGVyKCksIGRp
dm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGZvciAoQXJndW1lbnRMaXN0Tm9kZSogbiA9IGFyZ3VtZW50c05vZGUtPm1fbGlzdE5vZGU7IG47
IG4gPSBuLT5tX25leHQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODA1MTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY2Nyw3ICs2NjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0SW5pdExhenlSZWdpc3RlcihSZWdpc3RlcklEKik7CiAgICAgICAg
IAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29uc3RydWN0VmFyYXJncyhSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywgUmVnaXN0ZXJJRCog
Zmlyc3RGcmVlUmVnaXN0ZXIsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIFJlZ2lzdGVySUQq
IHByb2ZpbGVIb29rUmVnaXN0ZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVu
ZCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDb25zdHJ1Y3RWYXJhcmdzKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3Rl
cklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZp
cnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0
Q2FsbFZhcmFyZ3MoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywg
UmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVy
SUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3Rl
cklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpOwogICAgICAgICBSZWdpc3RlcklEKiBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShS
ZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAJKHJldmlzaW9uIDE4MDUxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUzLDYgKzQ1Myw3IEBA
IFJlZ2lzdGVySUQqIE5ld0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQnkKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwg
ZnVuYy5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwg
bV9hcmdzKTsKKyAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwgZnVuYy5nZXQoKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KHJl
dHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNp
b24gMTgwNTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsKICAgICB2b2lkIGhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywg
Tm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHZvaWQgZW1pdEZ1bmN0
aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc0FyZ3VtbnQpOwotICAgIHZvaWQgZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQpOworICAgIHZvaWQgZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIHVuc2lnbmVkIGlubGluaW5n
Q29zdChDYWxsVmFyaWFudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFuIGlubGlu
aW5nIGNhbmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29zdCBvZiAx
LgogICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBm
YWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KICAgICBib29sIGhhbmRsZUlubGluaW5n
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtT
dGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQs
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQs
IE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKTsKQEAgLTY3Nyw4ICs2NzcsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAocGFy
YW1ldGVyU2xvdHMgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAgICAgbV9wYXJhbWV0ZXJT
bG90cyA9IHBhcmFtZXRlclNsb3RzOwogCi0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9
IG9wID09IENhbGwgfHwgb3AgPT0gTmF0aXZlQ2FsbCA/IDAgOiAxOwotICAgICAgICBmb3IgKGlu
dCBpID0gMCArIGR1bW15VGhpc0FyZ3VtZW50OyBpIDwgYXJnQ291bnQ7ICsraSkKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQogICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSkp
OwogCiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIG9wSW5mbywg
T3BJbmZvKHByZWRpY3Rpb24pKTsKQEAgLTExMjAsMTEgKzExMTksNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbChJCiAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0g
bV9ncmFwaC5tX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5maXJzdFZhckFyZ09m
ZnNldCA9IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIAotICAgIE5vZGUqIHRoaXNDaGlsZDsKLSAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgdGhpc0NoaWxkID0gZ2V0KFZpcnR1
YWxSZWdpc3Rlcih0aGlzUmVnKSk7Ci0gICAgZWxzZQotICAgICAgICB0aGlzQ2hpbGQgPSBudWxs
cHRyOworICAgIE5vZGUqIHRoaXNDaGlsZCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykp
OwogICAgIAogICAgIE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgY2FsbFRhcmdldCwgZ2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dHMpKSwgdGhpc0NoaWxkKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7
CkBAIC0xMTU0LDkgKzExNDksOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25D
aGVja3MoCiAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShj
YWxsZWVDZWxsKSksIGNhbGxUYXJnZXRGb3JDaGVjaywgdGhpc0FyZ3VtZW50KTsKIH0KIAotdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRBcmd1bWVudFBoYW50b21zKGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQogewotICAgIGZvciAo
aW50IGkgPSBraW5kID09IENvZGVGb3JDYWxsID8gMCA6IDE7IGkgPCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpczsgKytpKQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7ICsraSkKICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiB9CiAKQEAgLTE0MjYs
NyArMTQyMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwKICAg
ICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihyZXN1bHRPcGVyYW5kLCBm
dW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVj
aWFsaXphdGlvbktpbmQsIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nKSkgewogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgY2FsbFRhcmdldE5vZGUpOwotICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhh
bnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFs
aXphdGlvbktpbmQpOworICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVnaXN0ZXJP
ZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgICAgIGlubGluaW5n
QmFsYW5jZS0tOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE0Mzks
NyArMTQzNCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwKICAg
ICAgICAgaWYgKGhhbmRsZUludHJpbnNpYyhyZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJlZ2lz
dGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbiwgaW5zZXJ0
Q2hlY2tzV2l0aEFjY291bnRpbmcpKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRJ
bnNlcnRDaGVja3MpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0
Tm9kZSk7Ci0gICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgICAg
ICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOwogICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLS07CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTUyNCw3ICsxNTE5LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwg
cmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0LAogICAgICAg
ICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENhbGxl
ckRvZXNOb3JtYWxMaW5raW5nLCBwcmVkaWN0aW9uLAogICAgICAgICAgICAgaW5saW5pbmdCYWxh
bmNlLCBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgc3BlY2lhbGl6
YXRpb25LaW5kID09IENvZGVGb3JDYWxsID8gdGhpc0FyZ3VtZW50IDogVmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1sw
XSwgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudCk7CiAKICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgdmFyYXJncyBjYWxsLCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGFyZ3VtZW50
cyByaWdodCBub3cuCiAgICAgICAgICAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJh
cmdzKGtpbmQpKSB7CkBAIC0xNTU4LDkgKzE1NTMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZygKICAgICAgICAgICAgICAgICAgICAgY291bnRWYXJpYWJsZS0+bWVyZ2VJ
c1Byb2ZpdGFibGVUb1VuYm94KHRydWUpOwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBzZXRB
cmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKGNvdW50VmFyaWFi
bGUpKTsKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50Q291bnQpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChzcGVjaWFsaXphdGlvbktpbmQg
PT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQodGhpc0FyZ3VtZW50KSwgSW1tZWRpYXRlTmFrZWRTZXQp
OworCisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFy
dCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IG1heE51bUFyZ3Vt
ZW50czsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRBcmd1bWVudFN0YXJ0ICsgYXJn
dW1lbnQpLCBmYWxzZSk7CkBAIC0xNzQxLDcgKzE3MzUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZygKICAgICB9IGVsc2UgewogICAgICAgICBhZGRUb0dyYXBoKENoZWNr
QmFkQ2VsbCk7CiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgbXlDYWxsVGFyZ2V0Tm9kZSk7
Ci0gICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgZW1pdEFyZ3Vt
ZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsK
ICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFk
ZFRvR3JhcGgoQm90dG9tVmFsdWUpKTsKICAgICB9CkBAIC0yMTI5LDYgKzIxMjMsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFycmF5IGNvbnN0
cnVjdG9yIHNob3VsZCB1c2UgInRoaXMiIGFzIG5ld1RhcmdldC4KICAgICAgICAgZm9yIChpbnQg
aSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKQogICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVy
T2Zmc2V0KSkpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLApA
QCAtMjU2Nyw4ICsyNTYyLDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwgbG9jYWxzIHRvIHVuZGVmaW5lZC4K
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPm1fbnVtVmFyczsgKytpKQogICAgICAgICAgICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChpKSwgdW5kZWZpbmVkLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAg
ICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgp
ID09IENvZGVGb3JDb25zdHJ1Y3QpCi0gICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDApLCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2VudGVyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDE4MDUx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDI0ICs4Miw4IEBAIHZvaWQgSklUQ29kZTo6cmVjb25zdHJ1Y3QoCiAgICAg
cmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBzdHJlYW1JbmRleCwgcmVjb3Zlcmll
cyk7CiAgICAgCiAgICAgcmVzdWx0ID0gT3BlcmFuZHM8SlNWYWx1ZT4oT3BlcmFuZHNMaWtlLCBy
ZWNvdmVyaWVzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnNpemUoKTsgaS0tOykgewot
ICAgICAgICBpbnQgb3BlcmFuZCA9IHJlc3VsdC5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoY29kZU9yaWdpbiA9PSBDb2RlT3JpZ2luKDApCi0gICAgICAgICAgICAm
JiBvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKQotICAgICAgICAgICAgJiYgIVZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkKLSAgICAgICAgICAgICYmIGNvZGVCbG9jay0+Y29k
ZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKLSAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lh
bGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgewotICAgICAgICAgICAgLy8gVWdo
LiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xk
IGdhcmJhZ2UuIEl0IHdpbGwKLSAgICAgICAgICAgIC8vIGFsc28gbmV2ZXIgYmUgdXNlZC4gSXQg
ZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50byB0aGUgdmFsdWUgZm9yIHRoaXMsCi0gICAg
ICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0IGNhbiBiZSBn
cm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKLSAgICAgICAgICAgIC8vIHNvIHdlIHNh
bml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRvIFVuZGVmaW5lZC4KLSAgICAgICAgICAg
IHJlc3VsdFtpXSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotICAgICAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnNpemUoKTsgaS0tOykK
ICAgICAgICAgcmVzdWx0W2ldID0gcmVjb3Zlcmllc1tpXS5yZWNvdmVyKGV4ZWMpOwotICAgIH0K
IH0KIAogI2lmIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxODA1MTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NDAsMjggKzY0MCwyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTWlzY1N0cmljdEVxCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlKQogewogICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAgYm9v
bCBpc0NhbGw7CiAgICAgYm9vbCBpc1ZhcmFyZ3M7CiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CiAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbDsK
LSAgICAgICAgaXNDYWxsID0gdHJ1ZTsKICAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBjYWxsVHlwZSA9IENhbGxM
aW5rSW5mbzo6Q29uc3RydWN0OwotICAgICAgICBpc0NhbGwgPSBmYWxzZTsKICAgICAgICAgaXNW
YXJhcmdzID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAg
ICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJ
bmZvOjpDYWxsVmFyYXJnczsKLSAgICAgICAgaXNDYWxsID0gdHJ1ZTsKICAgICAgICAgaXNWYXJh
cmdzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgog
ICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJnczsKLSAgICAg
ICAgaXNDYWxsID0gZmFsc2U7CiAgICAgICAgIGlzVmFyYXJncyA9IHRydWU7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CkBAIC03NzAsMjkgKzc2NSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBpZiAobm9kZS0+b3Ao
KSAhPSBDYWxsRm9yd2FyZFZhcmFyZ3MpCiAgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkp
OwotICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2FsbCkgewotICAgICAgICAgICAgLy8gTm93IHNl
dCB1cCB0aGUgInRoaXMiIGFyZ3VtZW50LgotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhp
c0FyZ3VtZW50KHRoaXMsIG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzID8gbm9kZS0+
Y2hpbGQyKCkgOiBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBHUFJSZWcgdGhpc0FyZ3Vt
ZW50VGFnR1BSID0gdGhpc0FyZ3VtZW50LnRhZ0dQUigpOwotICAgICAgICAgICAgR1BSUmVnIHRo
aXNBcmd1bWVudFBheWxvYWRHUFIgPSB0aGlzQXJndW1lbnQucGF5bG9hZEdQUigpOwotICAgICAg
ICAgICAgdGhpc0FyZ3VtZW50LnVzZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHRoaXNBcmd1bWVudFRhZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50
VGFnU2xvdCgwKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHRoaXNBcmd1bWVudFBheWxv
YWRHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFBheWxvYWRTbG90KDApKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlz
IGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQotICAgICAg
ICAvLyBmb3IgaXQuCi0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAg
OiAxOwotICAgICAgICAKKworICAgICAgICAvLyBOb3cgc2V0IHVwIHRoZSAidGhpcyIgYXJndW1l
bnQuCisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNBcmd1bWVudCh0aGlzLCBub2RlLT5vcCgp
ID09IENhbGxGb3J3YXJkVmFyYXJncyA/IG5vZGUtPmNoaWxkMigpIDogbm9kZS0+Y2hpbGQzKCkp
OworICAgICAgICBHUFJSZWcgdGhpc0FyZ3VtZW50VGFnR1BSID0gdGhpc0FyZ3VtZW50LnRhZ0dQ
UigpOworICAgICAgICBHUFJSZWcgdGhpc0FyZ3VtZW50UGF5bG9hZEdQUiA9IHRoaXNBcmd1bWVu
dC5wYXlsb2FkR1BSKCk7CisgICAgICAgIHRoaXNBcmd1bWVudC51c2UoKTsKKyAgICAgICAgCisg
ICAgICAgIG1faml0LnN0b3JlMzIodGhpc0FyZ3VtZW50VGFnR1BSLCBKSVRDb21waWxlcjo6Y2Fs
bGVlQXJndW1lbnRUYWdTbG90KDApKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMih0aGlzQXJndW1l
bnRQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdCgwKSk7
CisgICAgfSBlbHNlIHsgICAgICAgIAogICAgICAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidz
IGZpcnN0IGNoaWxkIGlzIGVpdGhlciB0aGUgZnVuY3Rpb24gKG5vcm1hbCBjYWxsKSBvciB0aGUK
ICAgICAgICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxsKS4gc3Vic2VxdWVudCBjaGlsZHJlbiBh
cmUgdGhlIGFyZ3VtZW50cy4KICAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1D
aGlsZHJlbigpIC0gMTsKLSAgICAgICAgCi0gICAgICAgIGludCBudW1BcmdzID0gbnVtUGFzc2Vk
QXJncyArIGR1bW15VGhpc0FyZ3VtZW50OwotICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmUz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFt
ZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKworICAgICAgICBtX2ppdC5z
dG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyksIG1faml0
LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgICAg
ICAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKICAg
ICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltu
b2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CkBAIC04MDEsOCArNzg4LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgR1BSUmVnIGFyZ1Bh
eWxvYWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOwogICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgbV9qaXQu
Y2FsbGVlQXJndW1lbnRUYWdTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOwotICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFBheWxv
YWRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihhcmdUYWdHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50VGFnU2xvdChpKSk7CisgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50UGF5bG9h
ZFNsb3QoaSkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MDUxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYyNiwyOCArNjI2LDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVNaXNjU3RyaWN0RXEKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUpCiB7CiAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICBib29sIGlz
Q2FsbDsKICAgICBib29sIGlzVmFyYXJnczsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICBjYXNlIENhbGw6CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOwotICAg
ICAgICBpc0NhbGwgPSB0cnVlOwogICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJ
bmZvOjpDb25zdHJ1Y3Q7Ci0gICAgICAgIGlzQ2FsbCA9IGZhbHNlOwogICAgICAgICBpc1ZhcmFy
Z3MgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxsVmFyYXJnczoKICAgICBj
YXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86
OkNhbGxWYXJhcmdzOwotICAgICAgICBpc0NhbGwgPSB0cnVlOwogICAgICAgICBpc1ZhcmFyZ3Mg
PSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAg
ICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOwotICAgICAgICBp
c0NhbGwgPSBmYWxzZTsKICAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKQEAgLTc0NiwyNyArNzQxLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0aGUgYXJndW1l
bnRzIGFycmF5IGFueW1vcmUuCiAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENhbGxGb3J3YXJk
VmFyYXJncykKICAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgLy8g
Tm93IHNldCB1cCB0aGUgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0
aGlzQXJndW1lbnQodGhpcywgbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MgPyBub2Rl
LT5jaGlsZDIoKSA6IG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSUmVnIHRoaXNBcmd1bWVu
dEdQUiA9IHRoaXNBcmd1bWVudC5ncHIoKTsKKyAgICAgICAgdGhpc0FyZ3VtZW50LnVzZSgpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2FsbCkgewotICAgICAgICAgICAgLy8gTm93IHNldCB1
cCB0aGUgInRoaXMiIGFyZ3VtZW50LgotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc0Fy
Z3VtZW50KHRoaXMsIG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzID8gbm9kZS0+Y2hp
bGQyKCkgOiBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBHUFJSZWcgdGhpc0FyZ3VtZW50
R1BSID0gdGhpc0FyZ3VtZW50LmdwcigpOwotICAgICAgICAgICAgdGhpc0FyZ3VtZW50LnVzZSgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHRoaXNBcmd1bWVudEdQ
UiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgbV9qaXQuc3RvcmU2NCh0aGlzQXJndW1lbnRHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1
bWVudFNsb3QoMCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMs
IHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFj
ZQotICAgICAgICAvLyBmb3IgaXQuCi0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlz
Q2FsbCA/IDAgOiAxOwotICAgIAogICAgICAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZp
cnN0IGNoaWxkIGlzIHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRo
ZQogICAgICAgICAvLyBhcmd1bWVudHMuCiAgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9k
ZS0+bnVtQ2hpbGRyZW4oKSAtIDE7Ci0gICAgCi0gICAgICAgIGludCBudW1BcmdzID0gbnVtUGFz
c2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OwotICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJncyksIEpJVENvbXBpbGVyOjpjYWxs
ZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKworICAgICAgICBt
X2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyks
IEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpKTsKICAgICAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBp
KyspIHsKICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdD
aGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CkBAIC03NzQsNyArNzYxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgR1BS
UmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKICAgICAg
ICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxl
ZUFyZ3VtZW50U2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoYXJnR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KGkpKTsKICAg
ICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0Nh
bGxWYXJhcmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbFZhcmFyZ3MuY3BwCShyZXZpc2lvbiAxODA1MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw5ICs2
OSw3IEBAIHZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBlcnMmIGoKICAgICAvLyAt
IFRoZSBjYWxsZWUuCiAgICAgLy8gLSBUaGUgYXJndW1lbnRzIG9iamVjdC4KICAgICAvLyAtIFRo
ZSAidGhpcyIgdmFsdWUsIGlmIGl0J3MgYSBjb25zdHJ1Y3RvciBjYWxsLgotICAgIAotICAgIGJv
b2wgaXNDYWxsID0gbV9ub2RlLT5vcCgpICE9IENvbnN0cnVjdFZhcmFyZ3M7Ci0gICAgCisKICAg
ICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOwogICAg
IAogICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CkBAIC05MSw2
ICs4OSw3IEBAIHZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBlcnMmIGoKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBhcmd1bWVudHNH
UFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIHRoaXNHUFIgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjI7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTAsOCArMTA5LDggQEAgdm9pZCBKU0NhbGxW
YXJhcmdzOjplbWl0KENDYWxsSGVscGVycyYgagogICAgIHVzZWRSZWdpc3RlcnMuc2V0KGNhbGxl
ZUdQUik7CiAgICAgaWYgKGFyZ3VtZW50c0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICB1
c2VkUmVnaXN0ZXJzLnNldChhcmd1bWVudHNHUFIpOwotICAgIGlmICh0aGlzR1BSICE9IEludmFs
aWRHUFJSZWcpCi0gICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNHUFIpOworICAgIEFTU0VS
VCh0aGlzR1BSKTsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKICAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwogICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICBHUFJSZWcg
c2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CkBAIC0xODIsOCAr
MTgxLDcgQEAgdm9pZCBKU0NhbGxWYXJhcmdzOjplbWl0KENDYWxsSGVscGVycyYgagogICAgIGpp
dC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNP
ZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3QpKTsKICAgICBpZiAoIWFyZ3VtZW50c09uU3RhY2spCiAg
ICAgICAgIGppdC5zdG9yZTY0KGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9y
KHNwaWxsU2xvdHNPZmZzZXQgKyBhcmd1bWVudHNTcGlsbFNsb3QpKTsKLSAgICBpZiAoaXNDYWxs
KQotICAgICAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Io
c3BpbGxTbG90c09mZnNldCArIHRoaXNTcGlsbFNsb3QpKTsKKyAgICBqaXQuc3RvcmU2NCh0aGlz
R1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNTcGls
bFNsb3QpKTsKICAgICAKICAgICB1bnNpZ25lZCBleHRyYVN0YWNrID0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpICsKICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpOwpAQCAtMjAxLDE4ICsxOTksMTYgQEAgdm9p
ZCBKU0NhbGxWYXJhcmdzOjplbWl0KENDYWxsSGVscGVycyYgagogICAgIGNhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZSkp
OwogICAgIAogICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BS
Mik7Ci0gICAgCi0gICAgaWYgKGlzQ2FsbCkKLSAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBl
cnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNTcGlsbFNsb3QpLCB0aGlzR1BS
KTsKKworICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNP
ZmZzZXQgKyB0aGlzU3BpbGxTbG90KSwgdGhpc0dQUik7CiAgICAgaml0LmxvYWQ2NChDQ2FsbEhl
bHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxlZVNwaWxsU2xvdCksIEdQ
UkluZm86OnJlZ1QwKTsKICAgICAKICAgICBpZiAobV9ub2RlLT5vcCgpID09IENhbGxGb3J3YXJk
VmFyYXJncykKICAgICAgICAgaGF2ZUFyZ3VtZW50cy5saW5rKCZqaXQpOwogICAgIAogICAgIGpp
dC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwot
ICAgIAotICAgIGlmIChpc0NhbGwpCi0gICAgICAgIGppdC5zdG9yZTY0KHRoaXNHUFIsIENDYWxs
SGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKworICAgIGppdC5zdG9yZTY0KHRoaXNH
UFIsIENDYWxsSGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKICAgICAKICAgICAvLyBI
ZW5jZWZvcnRoIHdlIG1ha2UgdGhlIGNhbGwuIFRoZSBiYXNlIEZUTCBjYWxsIG1hY2hpbmVyeSBl
eHBlY3RzIHRoZSBjYWxsZWUgaW4gcmVnVDAgYW5kIGZvciB0aGUKICAgICAvLyBzdGFjayBmcmFt
ZSB0byBhbHJlYWR5IGJlIHNldCB1cCwgd2hpY2ggaXQgaXMuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTgwNTE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3NjUsOSArMzc2NSw4IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEZU
TF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAgICB2b2lkIGNvbXBpbGVOYXRpdmVDYWxsT3JDb25z
dHJ1Y3QoKSAKICAgICB7Ci0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1fbm9kZS0+
b3AoKSA9PSBOYXRpdmVDYWxsID8gMCA6IDE7CiAgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0g
bV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKLSAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNz
ZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CisgICAgICAgIGludCBudW1BcmdzID0gbnVtUGFz
c2VkQXJnczsKIAogICAgICAgICBKU0Z1bmN0aW9uKiBrbm93bkZ1bmN0aW9uID0ganNDYXN0PEpT
RnVuY3Rpb24qPihtX25vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkuYXNDZWxsKCkpOwogICAg
ICAgICBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiA9IGtub3duRnVuY3Rpb24tPm5hdGl2ZUZ1bmN0
aW9uKCk7CkBAIC0zNzg4LDEyICszNzg3LDkgQEAgcHJpdmF0ZToKIAogICAgICAgICBtX291dC5z
dG9yZTY0KG1fb3V0LmNvbnN0SW50NjQobnVtQXJncyksIGFkZHJlc3NGb3IobV9leGVjU3RvcmFn
ZSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogCi0gICAgICAgIGlmIChkdW1teVRoaXNBcmd1
bWVudCkgCi0gICAgICAgICAgICBtX291dC5zdG9yZVB0cihnZXRVbmRlZihtX291dC5pbnQ2NCks
IGFkZHJlc3NGb3IobV9leGVjU3RvcmFnZSwgSlNTdGFjazo6VGhpc0FyZ3VtZW50KSk7Ci0gICAg
ICAgIAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewog
ICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMSArIGkpKSwKLSAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKG1fZXhlY1N0b3Jh
Z2UsIGR1bW15VGhpc0FyZ3VtZW50ID8gSlNTdGFjazo6Rmlyc3RBcmd1bWVudCA6IEpTU3RhY2s6
OlRoaXNBcmd1bWVudCwgaSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgICAgICAgICBh
ZGRyZXNzRm9yKG1fZXhlY1N0b3JhZ2UsIEpTU3RhY2s6OlRoaXNBcmd1bWVudCwgaSAqIHNpemVv
ZihSZWdpc3RlcikpKTsKICAgICAgICAgfQogCiAgICAgICAgIExWYWx1ZSBjYWxsZWVDYWxsRnJh
bWUgPSBtX291dC5hZGRyZXNzKG1fZXhlY1N0YXRlLCBtX2hlYXBzLkNhbGxGcmFtZV9jYWxsZXJG
cmFtZSkudmFsdWUoKTsKQEAgLTM4MTYsOSArMzgxMiw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKQogICAgIHsKLSAgICAgICAgaW50IGR1bW15VGhpc0Fy
Z3VtZW50ID0gbV9ub2RlLT5vcCgpID09IENhbGwgPyAwIDogMTsKICAgICAgICAgaW50IG51bVBh
c3NlZEFyZ3MgPSBtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwotICAgICAgICBpbnQgbnVtQXJn
cyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKKyAgICAgICAgaW50IG51bUFy
Z3MgPSBudW1QYXNzZWRBcmdzOwogCiAgICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pTVmFs
dWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKIApAQCAtMzgzMyw4ICszODI4LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2
NCkpOyAvLyBjb2RlIGJsb2NrCiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanNDYWxsZWUpOyAv
LyBjYWxsZWUgLT4gc3RhY2sKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdElu
dDY0KG51bUFyZ3MpKTsgLy8gYXJndW1lbnQgY291bnQgYW5kIHplcm9zIGZvciB0aGUgdGFnCi0g
ICAgICAgIGlmIChkdW1teVRoaXNBcmd1bWVudCkKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1QYXNzZWRBcmdzOyArK2kpCiAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxvd0pTVmFs
dWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEgKyBpKSkpOwogICAgICAgICAKQEAgLTM4
NjUsNiArMzg1OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICAgICAganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJiYWQgbm9kZSB0eXBlIik7CkBA
IC0zODc3LDEyICszODcxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
bV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
bV9vdXQuY29uc3RJbnQzMihzaXplT2ZJQ0ZvcihtX25vZGUpKSk7CiAgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQoY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKLSAgICAgICAgYXJndW1lbnRzLmFwcGVu
ZChtX291dC5jb25zdEludDMyKDEgKyAhIWpzQXJndW1lbnRzICsgISF0aGlzQXJnKSk7CisgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMigyICsgISFqc0FyZ3VtZW50cykp
OwogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQ2FsbGVlKTsKICAgICAgICAgaWYgKGpzQXJn
dW1lbnRzKQogICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChqc0FyZ3VtZW50cyk7Ci0gICAg
ICAgIGlmICh0aGlzQXJnKQotICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzQXJnKTsK
KyAgICAgICAgQVNTRVJUKHRoaXNBcmcpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNB
cmcpOwogICAgICAgICAKICAgICAgICAgY2FsbFByZWZsaWdodCgpOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gMTgwNTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc1LDcgKzk3NSw3IEBAIEpTT2Jq
ZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICAgICAgcmV0dXJuIHRocm93
VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihjYWxsRnJhbWUpOwogCiAgICAgUHJvdG9DYWxs
RnJhbWUgcHJvdG9DYWxsRnJhbWU7Ci0gICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxv
Y2ssIGNvbnN0cnVjdG9yLCBqc1VuZGVmaW5lZCgpLCBhcmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsK
KyAgICBwcm90b0NhbGxGcmFtZS5pbml0KG5ld0NvZGVCbG9jaywgY29uc3RydWN0b3IsIGNvbnN0
cnVjdG9yLCBhcmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKIAogICAgIGlmIChMZWdhY3lQcm9maWxl
ciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndp
bGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODA1MTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTU5LDE3ICsxMTU5LDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aQogICAgICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcyk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAg
ICAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKQotICAgICAgICAgICAgICAg
ICYmICFWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpCi0gICAgICAgICAgICAg
ICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQotICAgICAgICAgICAg
ICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVj
dCkgewotICAgICAgICAgICAgICAgIC8vIFVnaC4gSWYgd2UncmUgaW4gYSBjb25zdHJ1Y3Rvciwg
dGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9sZCBnYXJiYWdlLiBJdCB3aWxsCi0gICAgICAgICAg
ICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1
dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKLSAgICAgICAgICAgICAgICAvLyBidXQgaXQgaGFz
IHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQg
REZHIHBhc3NlcywKLSAgICAgICAgICAgICAgICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5
IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQuCi0gICAgICAgICAgICAgICAgbXVzdEhhbmRsZVZh
bHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1Zh
bHVlKCk7CisgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2Vk
UihvcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBSZWZQdHI8Q29kZUJs
b2NrPiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>