<?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>148916</bug_id>
          
          <creation_ts>2015-09-06 13:55:04 -0700</creation_ts>
          <short_desc>DFG should have a debugging option that runs a phase that flushes all locals</short_desc>
          <delta_ts>2015-09-09 13:19:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1124046</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-06 13:55:04 -0700</bug_when>
    <thetext>And maybe it&apos;s worth considering if we want to enable this for some run mode of run-javascriptcore-tests to ensure it doesn&apos;t break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124453</commentid>
    <comment_count>1</comment_count>
      <attachid>260808</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-08 16:31:23 -0700</bug_when>
    <thetext>Created attachment 260808
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124454</commentid>
    <comment_count>2</comment_count>
      <attachid>260808</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-08 16:31:45 -0700</bug_when>
    <thetext>Comment on attachment 260808
patch

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

&gt; Tools/Scripts/run-jsc-stress-tests:791
&gt; +        runDFGFlushEverything

Should we have this as part of the default run or no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124461</commentid>
    <comment_count>3</comment_count>
      <attachid>260808</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 16:47:24 -0700</bug_when>
    <thetext>Comment on attachment 260808
patch

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

&gt; Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:1037
&gt; +		79B531EA1B9CEE180039CC8E /* DFGFlushEverythingInsertionPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79B531E81B9CEE180039CC8E /* DFGFlushEverythingInsertionPhase.cpp */; };
&gt; +		79B531EB1B9CEE180039CC8E /* DFGFlushEverythingInsertionPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = 79B531E91B9CEE180039CC8E /* DFGFlushEverythingInsertionPhase.h */; settings = {ATTRIBUTES = (Private, ); }; };

I would call this MaximalFlushInsertionPhase.  The names of the phases are meant to parse in English when used in the following two forms:

phase name: &quot;Maximal Flush Insertion Phase&quot;
command: &quot;perform Maximal Flush Insertion&quot;

I think that &quot;Maximal Flush Insertion&quot; is more grammatical than &quot;Flush Everything Insertion&quot;, particularly in the two uses above.

&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:48
&gt; +        RELEASE_ASSERT(m_graph.m_form == LoadStore);

DFG_ASSERT(m_graph, nullptr, m_graph.m_form == LoadStore)

&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:52
&gt; +        for (BasicBlock* block : m_graph.blocksInPreOrder()) {

m_graph.blocksInNaturalOrder() is what you should use if you don&apos;t care about the order.

&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:60
&gt; +            if (!treatedRootBlock) {
&gt; +                treatRootBlock(block, insertionSet, currentBlockAccessData);
&gt; +                treatedRootBlock = true;
&gt; +                isRootBlock = true;
&gt; +            }

I think you&apos;re doing this in the loop so that treatRegularBlock() doesn&apos;t see the SetLocals that this inserted.  I sort of buy that.  If you want to do that, then I recommend this code:

if (block == m_graph.block(0))
    treatRootBlock(block, insertionSet, currentBlockAccessData);

But this phase doesn&apos;t need to be super fast.  It just needs to be accurate.  So, I would recommend calling treatRootBlock() *after* this loop.  It will need to use its own insertion set and it will essentially recompute currentBlockAccessData, but that&apos;s fine.  It&apos;s more clear that way.

&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:76
&gt; +            if (node-&gt;op() != SetLocal &amp;&amp; node-&gt;op() != SetArgument)
&gt; +                continue;

If you change this so that you&apos;re searching forward to find the first VariableAccessData* for each local, then you can just use hasVariableAccessData() instead of casing for particular node types.

&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:88
&gt; +            if (hasSetInRootBlock.operand(operand))
&gt; +                return;

This seems like a strange behavior.  It means that if you have a local that is assigned in the root block, then its initial undefined value will not be flushed.  I think that it would be good to avoid this kind of inconsistency.  I recommend having this phase unconditionally insert SetLocal(Undefined) for any non-argument at the top of the root block, and use the search above to find the right VariableAccessData* to use.

&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:99
&gt; +        for (unsigned i = 0; i &lt; block-&gt;variablesAtTail.numberOfArguments(); i++)
&gt; +            insertSetLocal(virtualRegisterForArgument(i));

I think that this is unnecessary because:

1) It&apos;s wrong.  You don&apos;t want to set any arguments to Undefined.
2) It&apos;s dead code.  Every argument will have a SetArgument in the root block, so hasSetInRootBlock.operand(virtualRegisterForArgument(i)) is always true.

Instead, I think that you should make the intent more deliberate: you want to set every local to Undefined but you don&apos;t want to set any arguments to anything, instead relying on the fact that the arguments already have values.

&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:102
&gt; +    void treatRegularBlock(BasicBlock* block, InsertionSet&amp; insertionSet, Operands&lt;VariableAccessData*&gt;&amp; currentBlockAccessData, bool isRootBlock)

In general, instead of passing around isRootBlock, you could say &quot;block == m_graph.block(0)&quot;.

&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:113
&gt; +                case SetArgument:
&gt; +                case SetLocal: {

I think that you only want to insert Flush before SetLocal.  I don&apos;t think it makes sense to insert Flush before SetArgument.

&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:128
&gt; +                        if (isRootBlock) {
&gt; +                            // We don&apos;t want to flush before the very first SetLocal/SetArgument in the root block.
&gt; +                            bool alreadySkippedSetLocal = skippedSetAlreadyBecauseRoot.operand(operand);
&gt; +                            if (!alreadySkippedSetLocal) {
&gt; +                                skippedSetAlreadyBecauseRoot.operand(operand) = true;
&gt; +                                continue;
&gt; +                            }
&gt; +                        }

You could get rid of this if you just unconditionally SetLocal(Undefined) at the top of the root block.

&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:141
&gt; +                case Flush: {
&gt; +                    VariableAccessData* accessData = node-&gt;variableAccessData();
&gt; +                    VirtualRegister operand = accessData-&gt;local();
&gt; +                    currentBlockAccessData.operand(operand) = accessData;

Outside of this switch statement, you could have &quot;if (node-&gt;hasVariableAccessData()) currentBlockAccessData.operand(node-&gt;local()) = node-&gt;variableAccessData()&quot;.  That way, you don&apos;t have to case on node types to figure out if it has variable access data and you don&apos;t need to have two copies of this code.

&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.h:35
&gt; +
&gt; +bool performFlushEverythingInsertionPhase(Graph&amp; graph);

You should put a comment here describing what this phase is about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124528</commentid>
    <comment_count>4</comment_count>
      <attachid>260808</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-08 21:24:33 -0700</bug_when>
    <thetext>Comment on attachment 260808
patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:99
&gt;&gt; +            insertSetLocal(virtualRegisterForArgument(i));
&gt; 
&gt; I think that this is unnecessary because:
&gt; 
&gt; 1) It&apos;s wrong.  You don&apos;t want to set any arguments to Undefined.
&gt; 2) It&apos;s dead code.  Every argument will have a SetArgument in the root block, so hasSetInRootBlock.operand(virtualRegisterForArgument(i)) is always true.
&gt; 
&gt; Instead, I think that you should make the intent more deliberate: you want to set every local to Undefined but you don&apos;t want to set any arguments to anything, instead relying on the fact that the arguments already have values.

Thanks for your review. The code is much cleaner now.
I have a question on (2), I don&apos;t see why this holds just by looking at the varargs inlining code in byte code parser.
BytecodeParser, when inlining a a varargs call, will add SetArgument nodes to the graph. Why is it then that (2) holds?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124541</commentid>
    <comment_count>5</comment_count>
      <attachid>260834</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-08 21:58:00 -0700</bug_when>
    <thetext>Created attachment 260834
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124542</commentid>
    <comment_count>6</comment_count>
      <attachid>260834</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-08 21:58:23 -0700</bug_when>
    <thetext>Comment on attachment 260834
patch

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

&gt; Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp:117
&gt; +            // FIXME: maybe we should assert this is always a Flush. But would this ever be a GetLocal?

Fil, do you have any comments on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124544</commentid>
    <comment_count>7</comment_count>
      <attachid>260835</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-08 21:59:58 -0700</bug_when>
    <thetext>Created attachment 260835
patch

switch to DFG_ASSERT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124546</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-08 22:01:42 -0700</bug_when>
    <thetext>Attachment 260835 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp:88:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.h:51:  The parameter name &quot;graph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:45:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 10 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>1124551</commentid>
    <comment_count>9</comment_count>
      <attachid>260834</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-08 22:09:54 -0700</bug_when>
    <thetext>Comment on attachment 260834
patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp:117
&gt;&gt; +            // FIXME: maybe we should assert this is always a Flush. But would this ever be a GetLocal?
&gt; 
&gt; Fil, do you have any comments on this?

What I really mean here, is, when we loop over numberOfLocals below, if we cached operand=&gt;node here, should
we assert that all those nodes were Flushes. (Obviously we may encounter SetArguments here).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124554</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 22:25:47 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 260808 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=260808&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/dfg/DFGFlushEverythingInsertionPhase.cpp:99
&gt; &gt;&gt; +            insertSetLocal(virtualRegisterForArgument(i));
&gt; &gt; 
&gt; &gt; I think that this is unnecessary because:
&gt; &gt; 
&gt; &gt; 1) It&apos;s wrong.  You don&apos;t want to set any arguments to Undefined.
&gt; &gt; 2) It&apos;s dead code.  Every argument will have a SetArgument in the root block, so hasSetInRootBlock.operand(virtualRegisterForArgument(i)) is always true.
&gt; &gt; 
&gt; &gt; Instead, I think that you should make the intent more deliberate: you want to set every local to Undefined but you don&apos;t want to set any arguments to anything, instead relying on the fact that the arguments already have values.
&gt; 
&gt; Thanks for your review. The code is much cleaner now.
&gt; I have a question on (2), I don&apos;t see why this holds just by looking at the
&gt; varargs inlining code in byte code parser.
&gt; BytecodeParser, when inlining a a varargs call, will add SetArgument nodes
&gt; to the graph. Why is it then that (2) holds?

Had to think about this a bit, and in the process I think that I found an error in some of my other feedback.

But first, your question.  First of all, for (2) to be true, there needs to be at least one [sic] SetLocal or SetArgument to that argument in the root block.  So, if varargs inserted some additional SetArgument nodes, it would have no impact on the fact that there was already at least one SetArgument in the root block, since we insert a SetArgument for every argument in the root block.  But anyway, varargs inserts SetArgument nodes for calls to inlined functions, not for the arguments to the function we&apos;re compiling.  So, if it did emit a SetArgument node, it would not be for an argument - it would be for a local.

And now, the error: I told you to not insert Flushes before SetArguments.  That&apos;s wrong.  Failure to insert a Flush before a SetArgument would mean that we aren&apos;t flushing whatever the last value of the local was prior to that SetArgument.  So, you had it right by looking for both SetArgument and SetLocal nodes, and prepending Flush nodes to them.  It&apos;s true that when you do this, your Flush inserter must not insert a Flush before those SetArgument nodes that already happened to be there.  You basically need to be able to ask &quot;is this one of the SetArguments that I am using as the initial value of this local?&quot;.  Luckily there is a way to ask this question:

if (node-&gt;op() == SetArgument) {
    if (node-&gt;local().isArgument() &amp;&amp; node == m_graph.m_arguments[node-&gt;local().toArgument()])
        // this node is a primordial SetArgument that represents the value of the local from before the start of IR execution.
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124555</commentid>
    <comment_count>11</comment_count>
      <attachid>260835</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 22:31:32 -0700</bug_when>
    <thetext>Comment on attachment 260835
patch

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

LGTM, but I think you also need to Flush before SetArgument, provided that it&apos;s not a primordial SetArgument.

&gt; Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp:70
&gt; +                if (node-&gt;op() == SetLocal) {

I was wrong before.  You also need to consider those SetArgument nodes that are not primordial (i.e. they don&apos;t belong to m_graph.m_arguments).

&gt; Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp:118
&gt; +            // FIXME: maybe we should assert this is always a Flush. But would this ever be a GetLocal?
&gt; +            // Do we ever have GetLocals before a SetLocal in the root block?

This is interesting.  The first access to a local in the root block cannot be a GetLocal.  It should be either a SetLocal or SetArgument.  Due to your other transformation, it&apos;ll be either SetArgument or Flush.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124563</commentid>
    <comment_count>12</comment_count>
      <attachid>260835</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-08 23:15:31 -0700</bug_when>
    <thetext>Comment on attachment 260835
patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp:118
&gt;&gt; +            // Do we ever have GetLocals before a SetLocal in the root block?
&gt; 
&gt; This is interesting.  The first access to a local in the root block cannot be a GetLocal.  It should be either a SetLocal or SetArgument.  Due to your other transformation, it&apos;ll be either SetArgument or Flush.

So, if we do see the first node as being a SetArgument here, then it must be a primordial SetArgument node (otherwise we would have inserted a Flush before it).
Should we still then insert a SetLocal(Undefined) prior to the primordial node? Or should we skip such SetLocals?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124573</commentid>
    <comment_count>13</comment_count>
      <attachid>260845</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-08 23:56:41 -0700</bug_when>
    <thetext>Created attachment 260845
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124574</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-08 23:59:44 -0700</bug_when>
    <thetext>Attachment 260845 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp:89:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 10 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>1124616</commentid>
    <comment_count>15</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-09 07:52:04 -0700</bug_when>
    <thetext>Some performance numbers as an experiment to see the penalty of turning this on:

VMs tested:
&quot;og&quot; at /Users/saambarati/WK/Clean/WebKitBuild/Release/jsc (r189532)
&quot;flush&quot; at /Users/saambarati/WK/ternary/WebKitBuild/Release/jsc (r189532)
    export JSC_enableMaximalFlushInsertionPhase=1

Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                            og                      flush                                       
SunSpider:
   3d-cube                                            6.4755+-1.3743            6.1424+-0.3787          might be 1.0542x faster
   3d-morph                                           6.6136+-0.8172     !      9.4456+-1.0623        ! definitely 1.4282x slower
   3d-raytrace                                        7.8758+-1.1171     ?      9.1533+-1.4357        ? might be 1.1622x slower
   access-binary-trees                                3.3455+-0.6262     ?      3.7128+-0.7768        ? might be 1.1098x slower
   access-fannkuch                                    7.6505+-0.7021     !     13.6345+-1.1741        ! definitely 1.7822x slower
   access-nbody                                       2.9725+-0.3136     !      3.8264+-0.2817        ! definitely 1.2873x slower
   access-nsieve                                      3.8612+-0.2273     ?      4.5258+-0.8317        ? might be 1.1721x slower
   bitops-3bit-bits-in-byte                           1.7207+-0.4163     !      2.8676+-0.3093        ! definitely 1.6666x slower
   bitops-bits-in-byte                                4.0922+-0.2879     ?      4.2477+-0.4752        ? might be 1.0380x slower
   bitops-bitwise-and                                 2.2932+-0.0456     !      6.0569+-0.2203        ! definitely 2.6412x slower
   bitops-nsieve-bits                                 4.1909+-0.8229     !     16.9594+-0.8995        ! definitely 4.0467x slower
   controlflow-recursive                              3.7956+-0.8616     ?      4.3204+-0.6235        ? might be 1.1383x slower
   crypto-aes                                         4.6878+-0.4036     !      8.5556+-1.5396        ! definitely 1.8251x slower
   crypto-md5                                         3.0358+-0.3988     ?      3.9798+-0.6452        ? might be 1.3110x slower
   crypto-sha1                                        3.6357+-0.7153            3.3074+-0.2253          might be 1.0993x faster
   date-format-tofte                                  9.5870+-0.2603     !     11.4124+-1.0823        ! definitely 1.1904x slower
   date-format-xparb                                  5.6403+-0.3881     !      7.4350+-1.2285        ! definitely 1.3182x slower
   math-cordic                                        4.2436+-0.6257     !      7.9952+-1.6071        ! definitely 1.8840x slower
   math-partial-sums                                  5.8466+-0.4142     !      7.2021+-0.3569        ! definitely 1.2319x slower
   math-spectral-norm                                 3.0351+-0.6890     !      4.5550+-0.5845        ! definitely 1.5008x slower
   regexp-dna                                         7.7560+-0.7649            7.1574+-0.2536          might be 1.0836x faster
   string-base64                                      5.7308+-0.8192     ?      6.2714+-1.2159        ? might be 1.0943x slower
   string-fasta                                       8.7600+-1.7726     !     13.0052+-2.0591        ! definitely 1.4846x slower
   string-tagcloud                                    9.9262+-0.6069     !     11.9114+-1.0513        ! definitely 1.2000x slower
   string-unpack-code                                26.2628+-2.5058           25.0744+-2.2236          might be 1.0474x faster
   string-validate-input                              6.8533+-0.9303     ?      7.0679+-0.9044        ? might be 1.0313x slower

   &lt;arithmetic&gt;                                       6.1495+-0.1439     !      8.0701+-0.2622        ! definitely 1.3123x slower

                                                            og                      flush                                       
LongSpider:
   3d-cube                                          986.3528+-10.3882    !   1031.8449+-12.6571       ! definitely 1.0461x slower
   3d-morph                                        1848.9913+-21.0805    ?   1861.3791+-18.2894       ?
   3d-raytrace                                      776.9968+-41.2581    ?    824.0996+-5.9851        ? might be 1.0606x slower
   access-binary-trees                             1087.5335+-11.9101    !   1185.0039+-4.9847        ! definitely 1.0896x slower
   access-fannkuch                                  350.5218+-3.2144     !   1683.8007+-16.2968       ! definitely 4.8037x slower
   access-nbody                                     632.2262+-8.8302     !    852.5363+-6.0429        ! definitely 1.3485x slower
   access-nsieve                                    572.8992+-4.6685     !   1106.0133+-6.0152        ! definitely 1.9306x slower
   bitops-3bit-bits-in-byte                          43.1412+-2.3015     !    138.7816+-2.7007        ! definitely 3.2169x slower
   bitops-bits-in-byte                               99.7509+-6.8719     !    152.4313+-7.6513        ! definitely 1.5281x slower
   bitops-nsieve-bits                               596.2120+-3.7789     !    740.5570+-11.6822       ! definitely 1.2421x slower
   controlflow-recursive                            536.2677+-9.3553          535.7968+-6.1016        
   crypto-aes                                       712.8685+-6.4402     !   3360.8066+-30.8215       ! definitely 4.7145x slower
   crypto-md5                                       613.6552+-26.6674    !    829.6543+-37.2248       ! definitely 1.3520x slower
   crypto-sha1                                      791.3703+-30.3242    !   2251.4377+-99.8072       ! definitely 2.8450x slower
   date-format-tofte                                611.1212+-7.2368     ?    612.7934+-6.4772        ?
   date-format-xparb                                796.5434+-4.9867     !    874.4074+-8.9806        ! definitely 1.0978x slower
   hash-map                                         199.7482+-3.5486     !    285.6361+-12.8789       ! definitely 1.4300x slower
   math-cordic                                      605.3922+-9.1437     !    683.1072+-9.5399        ! definitely 1.1284x slower
   math-partial-sums                                582.6919+-6.6212     !    611.3866+-21.6257       ! definitely 1.0492x slower
   math-spectral-norm                               688.3118+-5.8348     !   2341.8443+-20.5792       ! definitely 3.4023x slower
   string-base64                                    447.2260+-4.1232     !    460.8508+-6.3296        ! definitely 1.0305x slower
   string-fasta                                     459.6027+-10.9716    !    719.4856+-8.2178        ! definitely 1.5655x slower
   string-tagcloud                                  221.3917+-2.7579     !    233.3106+-4.2087        ! definitely 1.0538x slower

   &lt;geometric&gt;                                      495.9340+-2.4693     !    759.7270+-3.0344        ! definitely 1.5319x slower

                                                            og                      flush                                       
V8Spider:
   crypto                                            94.8586+-3.5770     !    276.1156+-5.6876        ! definitely 2.9108x slower
   deltablue                                        149.7938+-15.5448    !    218.4037+-5.3969        ! definitely 1.4580x slower
   earley-boyer                                      77.8475+-5.0552     !    126.6976+-10.2494       ! definitely 1.6275x slower
   raytrace                                          63.7298+-7.3514     !    167.8530+-14.3517       ! definitely 2.6338x slower
   regexp                                            79.4428+-2.5620     ?     81.7718+-2.0992        ? might be 1.0293x slower
   richards                                         116.7410+-4.8730     !    165.1984+-8.4731        ! definitely 1.4151x slower
   splay                                             68.2214+-5.0650     ?     71.4285+-10.6122       ? might be 1.0470x slower

   &lt;geometric&gt;                                       88.7072+-1.1428     !    142.6580+-3.6462        ! definitely 1.6082x slower

                                                            og                      flush                                       
Octane:
   encrypt                                           0.20833+-0.00219    !     1.64099+-0.01495       ! definitely 7.8768x slower
   decrypt                                           4.11218+-0.04958    !    29.59152+-0.30892       ! definitely 7.1961x slower
   deltablue                                x2       0.19316+-0.00501    !     0.39175+-0.00924       ! definitely 2.0280x slower
   earley                                            0.36940+-0.00461    !     0.69386+-0.00701       ! definitely 1.8783x slower
   boyer                                             5.61721+-0.03895    !     5.76294+-0.09224       ! definitely 1.0259x slower
   navier-stokes                            x2       5.96279+-0.03181    !    19.67241+-0.17705       ! definitely 3.2992x slower
   raytrace                                 x2       1.27117+-0.03471    !     8.14602+-0.25205       ! definitely 6.4083x slower
   richards                                 x2       0.13635+-0.00234    !     0.15132+-0.00210       ! definitely 1.1098x slower
   splay                                    x2       0.57314+-0.02375    ?     0.64384+-0.05069       ? might be 1.1233x slower
   regexp                                   x2      32.20959+-0.55590    !    34.95541+-0.29008       ! definitely 1.0852x slower
   pdfjs                                    x2      48.61470+-1.44142    !    74.64875+-1.19304       ! definitely 1.5355x slower
   mandreel                                 x2      74.27947+-2.84910    !   145.90357+-9.56777       ! definitely 1.9643x slower
   gbemu                                    x2      63.13872+-2.44900    !   103.79944+-6.19983       ! definitely 1.6440x slower
   closure                                           0.71367+-0.03379          0.70335+-0.00465         might be 1.0147x faster
   jquery                                            9.16253+-0.13578          9.10879+-0.07827       
   box2d                                    x2      17.63766+-0.27134    !    39.86000+-0.87973       ! definitely 2.2599x slower
   zlib                                     x2     488.99212+-8.53742    !  2216.60297+-28.75483      ! definitely 4.5330x slower
   typescript                               x2    1009.89226+-41.82195   !  2111.40337+-52.23943      ! definitely 2.0907x slower

   &lt;geometric&gt;                                       7.81414+-0.04852    !    16.33091+-0.08677       ! definitely 2.0899x slower

                                                            og                      flush                                       
Kraken:
   ai-astar                                          278.866+-4.920      ^     240.490+-12.914        ^ definitely 1.1596x faster
   audio-beat-detection                               62.770+-1.912      !     443.506+-17.910        ! definitely 7.0656x slower
   audio-dft                                         138.224+-1.634      !     619.470+-4.812         ! definitely 4.4817x slower
   audio-fft                                          41.938+-1.392      !     378.318+-3.210         ! definitely 9.0208x slower
   audio-oscillator                                   73.863+-2.448      !      84.509+-1.902         ! definitely 1.1441x slower
   imaging-darkroom                                   78.734+-5.339      !     128.095+-12.593        ! definitely 1.6269x slower
   imaging-desaturate                                 79.888+-2.877      !      98.080+-12.020        ! definitely 1.2277x slower
   imaging-gaussian-blur                             105.801+-1.225      !    2670.923+-14.659        ! definitely 25.2448x slower
   json-parse-financial                               48.941+-1.630      ?      49.052+-1.831         ?
   json-stringify-tinderbox                           28.361+-1.511      ?      29.028+-1.806         ? might be 1.0235x slower
   stanford-crypto-aes                                52.205+-3.029      !      69.305+-4.135         ! definitely 1.3275x slower
   stanford-crypto-ccm                                48.476+-5.088      ?      51.123+-3.648         ? might be 1.0546x slower
   stanford-crypto-pbkdf2                            115.529+-2.310      !     131.612+-9.622         ! definitely 1.1392x slower
   stanford-crypto-sha256-iterative                   46.548+-3.903      ?      49.198+-2.559         ? might be 1.0569x slower

   &lt;arithmetic&gt;                                       85.725+-1.103      !     360.193+-2.649         ! definitely 4.2017x slower

                                                            og                      flush                                       
JSRegress:
   abc-forward-loop-equal                            36.2369+-1.5910     ?     36.8451+-1.5136        ? might be 1.0168x slower
   abc-postfix-backward-loop                         38.4581+-3.6916           36.1085+-1.6206          might be 1.0651x faster
   abc-simple-backward-loop                          35.6084+-0.6875     ?     36.1783+-1.4550        ? might be 1.0160x slower
   abc-simple-forward-loop                           35.9196+-1.2207     ?     36.9598+-1.3882        ? might be 1.0290x slower
   abc-skippy-loop                                   26.1297+-1.1851     ?     30.0142+-4.7898        ? might be 1.1487x slower
   abs-boolean                                        4.2531+-1.2975     !     19.3236+-5.4636        ! definitely 4.5434x slower
   adapt-to-double-divide                            19.0427+-0.6309     ?     19.8230+-1.0605        ? might be 1.0410x slower
   aliased-arguments-getbyval                         1.5630+-0.1784            1.5410+-0.1467          might be 1.0143x faster
   allocate-big-object                                2.8970+-0.2622     !      5.2094+-1.1949        ! definitely 1.7982x slower
   arguments-named-and-reflective                    13.0180+-1.0919     !     21.5797+-1.2849        ! definitely 1.6577x slower
   arguments-out-of-bounds                           10.8698+-0.4764     ?     11.8577+-0.8397        ? might be 1.0909x slower
   arguments-strict-mode                             11.5181+-0.5805     !     21.2183+-1.4619        ! definitely 1.8422x slower
   arguments                                          9.7277+-0.4208     !     19.4979+-1.4178        ! definitely 2.0044x slower
   arity-mismatch-inlining                            1.1466+-0.1064     !      2.4599+-0.3752        ! definitely 2.1454x slower
   array-access-polymorphic-structure                 6.6236+-0.2953     !     11.9403+-0.4399        ! definitely 1.8027x slower
   array-nonarray-polymorhpic-access                 32.1410+-3.9112     !    121.5956+-5.8815        ! definitely 3.7832x slower
   array-prototype-every                             94.1156+-3.0431     ?     99.0219+-2.8021        ? might be 1.0521x slower
   array-prototype-forEach                           97.7763+-9.7905     ?     99.4583+-5.4616        ? might be 1.0172x slower
   array-prototype-map                              106.4638+-13.3644         105.2023+-3.8074          might be 1.0120x faster
   array-prototype-reduce                            91.6383+-3.4412     !     98.0850+-2.7725        ! definitely 1.0703x slower
   array-prototype-reduceRight                       95.0788+-6.2936     !    330.7264+-133.7211      ! definitely 3.4784x slower
   array-prototype-some                              94.1731+-3.1109     ?    100.7670+-3.9325        ? might be 1.0700x slower
   array-splice-contiguous                           24.5892+-1.0344     ?     25.0117+-1.2646        ? might be 1.0172x slower
   array-with-double-add                              4.6191+-0.5037     !     17.8230+-1.1763        ! definitely 3.8585x slower
   array-with-double-increment                        4.8849+-1.0672     !     21.2274+-0.8173        ! definitely 4.3455x slower
   array-with-double-mul-add                          5.8231+-0.8361     !     19.6176+-0.8416        ! definitely 3.3689x slower
   array-with-double-sum                              3.9224+-0.4721     !     10.5637+-0.6528        ! definitely 2.6931x slower
   array-with-int32-add-sub                           7.2990+-1.0520     !     27.0044+-1.2790        ! definitely 3.6997x slower
   array-with-int32-or-double-sum                     4.6833+-0.6236     !     10.2377+-1.1663        ! definitely 2.1860x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     40.1973+-4.4443     ?     41.9108+-3.0707        ? might be 1.0426x slower
   ArrayBuffer-DataView-alloc-long-lived             17.4900+-4.9675           15.9530+-0.8451          might be 1.0963x faster
   ArrayBuffer-Int32Array-byteOffset                  4.2590+-0.1849     !     56.0901+-1.7925        ! definitely 13.1699x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     38.5888+-2.1469     ?     43.2180+-3.7880        ? might be 1.1200x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     24.4612+-1.2645     !     29.4157+-1.7662        ! definitely 1.2025x slower
   ArrayBuffer-Int8Array-alloc-long-lived            14.2633+-0.8176     !     15.8942+-0.5954        ! definitely 1.1143x slower
   ArrayBuffer-Int8Array-alloc                       12.3252+-0.6221     !     14.3099+-0.8270        ! definitely 1.1610x slower
   arrowfunction-call                                14.4289+-1.1569     !     23.4082+-1.8670        ! definitely 1.6223x slower
   asmjs_bool_bug                                     9.6811+-0.7120     !     25.5718+-4.6831        ! definitely 2.6414x slower
   assign-custom-setter-polymorphic                   2.8131+-0.1252     ?      2.9217+-0.1885        ? might be 1.0386x slower
   assign-custom-setter                               4.3260+-0.6512            4.2207+-0.7175          might be 1.0249x faster
   basic-set                                         13.3983+-1.7246           13.1190+-1.2141          might be 1.0213x faster
   big-int-mul                                        4.8923+-0.8293     !     11.1212+-0.7961        ! definitely 2.2732x slower
   boolean-test                                       3.6345+-0.2439     !      9.3721+-0.8178        ! definitely 2.5786x slower
   branch-fold                                        5.1593+-1.1317     !     15.2857+-1.5919        ! definitely 2.9628x slower
   branch-on-string-as-boolean                       20.5817+-1.0587     !    188.2343+-9.5655        ! definitely 9.1457x slower
   by-val-generic                                     3.4852+-0.9387     !      7.0102+-0.6465        ! definitely 2.0114x slower
   call-spread-apply                                 38.1132+-2.3438     ?     41.3398+-2.8373        ? might be 1.0847x slower
   call-spread-call                                  32.0654+-2.7988     ?     32.9398+-1.8339        ? might be 1.0273x slower
   captured-assignments                               0.5537+-0.1370     ?      0.5609+-0.0606        ? might be 1.0131x slower
   cast-int-to-double                                 8.0809+-1.9312     !     24.0669+-1.5250        ! definitely 2.9782x slower
   cell-argument                                      7.8215+-0.7967     ?      8.6214+-1.0893        ? might be 1.1023x slower
   cfg-simplify                                       3.6302+-0.3321     !     16.5681+-1.6980        ! definitely 4.5640x slower
   chain-getter-access                               10.6837+-0.5138     !     32.9755+-1.9395        ! definitely 3.0865x slower
   cmpeq-obj-to-obj-other                            16.3178+-1.8925     !     21.4969+-1.1624        ! definitely 1.3174x slower
   constant-test                                      7.2209+-1.9719     !     30.4463+-1.0282        ! definitely 4.2164x slower
   create-lots-of-functions                          13.0061+-1.0946           12.6707+-0.8475          might be 1.0265x faster
   cse-new-array-buffer                               2.7004+-0.2896     ?      3.7300+-0.7904        ? might be 1.3813x slower
   cse-new-array                                      2.8946+-0.3602     !      4.9702+-1.5382        ! definitely 1.7170x slower
   DataView-custom-properties                        43.1387+-2.4015     ?     46.6504+-1.6149        ? might be 1.0814x slower
   delay-tear-off-arguments-strictmode               15.6605+-0.9905     ?     17.3408+-1.2989        ? might be 1.1073x slower
   deltablue-varargs                                256.7865+-26.2379    !    494.3535+-7.3611        ! definitely 1.9252x slower
   destructuring-arguments                          205.1812+-4.1031     !    239.7262+-22.7441       ! definitely 1.1684x slower
   destructuring-parameters-overridden-by-function   
                                                      0.7164+-0.1527            0.6647+-0.2112          might be 1.0778x faster
   destructuring-swap                                 6.5506+-0.7190     !     16.4976+-0.8554        ! definitely 2.5185x slower
   direct-arguments-getbyval                          1.4086+-0.1575     ?      1.7538+-0.3392        ? might be 1.2451x slower
   div-boolean-double                                 5.9781+-0.1262     !     17.1858+-2.3253        ! definitely 2.8748x slower
   div-boolean                                        9.2585+-0.2872     !     16.8307+-1.9740        ! definitely 1.8179x slower
   double-get-by-val-out-of-bounds                    6.2255+-0.7216     !      9.2747+-2.0831        ! definitely 1.4898x slower
   double-pollution-getbyval                         10.0823+-0.7109     !     13.4969+-0.4461        ! definitely 1.3387x slower
   double-pollution-putbyoffset                       5.6852+-1.9779     !     11.6257+-2.3126        ! definitely 2.0449x slower
   double-real-use                                   28.8953+-1.3447     ?     31.9679+-2.0721        ? might be 1.1063x slower
   double-to-int32-typed-array-no-inline              3.0676+-0.3657     !      4.2497+-0.1576        ! definitely 1.3854x slower
   double-to-int32-typed-array                        2.8201+-0.2846     ?      3.4303+-0.5793        ? might be 1.2164x slower
   double-to-uint32-typed-array-no-inline             3.3543+-0.7309     ?      5.1137+-1.4893        ? might be 1.5245x slower
   double-to-uint32-typed-array                       2.8142+-0.1931     !      3.6139+-0.4440        ! definitely 1.2842x slower
   elidable-new-object-dag                           46.3427+-1.6536     !    383.1435+-4.5447        ! definitely 8.2676x slower
   elidable-new-object-roflcopter                    44.2102+-2.5504     !     84.0348+-14.6290       ! definitely 1.9008x slower
   elidable-new-object-then-call                     39.3565+-1.0407     !    328.4919+-4.2910        ! definitely 8.3466x slower
   elidable-new-object-tree                          51.5827+-2.1613     !    372.6899+-3.5277        ! definitely 7.2251x slower
   empty-string-plus-int                              6.5535+-1.4651     ?      8.3255+-1.1904        ? might be 1.2704x slower
   emscripten-cube2hash                              38.0299+-1.7908     !     43.8591+-2.9333        ! definitely 1.1533x slower
   exit-length-on-plain-object                       15.1953+-1.0233     ?     16.2955+-1.7607        ? might be 1.0724x slower
   external-arguments-getbyval                        1.5006+-0.1500     ?      1.6693+-0.3213        ? might be 1.1124x slower
   external-arguments-putbyval                        3.0386+-0.7179            2.7756+-0.3185          might be 1.0948x faster
   fixed-typed-array-storage-var-index                1.6211+-0.3203     !      2.6029+-0.1639        ! definitely 1.6056x slower
   fixed-typed-array-storage                          1.3412+-0.4183     !      2.1509+-0.3166        ! definitely 1.6037x slower
   Float32Array-matrix-mult                           4.6122+-0.4043     !     14.1384+-1.6629        ! definitely 3.0654x slower
   Float32Array-to-Float64Array-set                  58.9069+-8.1720     !    140.2476+-5.1763        ! definitely 2.3808x slower
   Float64Array-alloc-long-lived                     87.0905+-9.1038     !    209.1907+-3.5556        ! definitely 2.4020x slower
   Float64Array-to-Int16Array-set                    73.1120+-6.5942     !    155.3192+-5.1075        ! definitely 2.1244x slower
   fold-double-to-int                                14.4433+-0.6667     !     28.4853+-3.4887        ! definitely 1.9722x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     16.2968+-1.8056     !     29.2257+-0.8944        ! definitely 1.7933x slower
   fold-get-by-id-to-multi-get-by-offset             15.7767+-2.7428     !     28.6864+-3.0272        ! definitely 1.8183x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                     14.5865+-1.9321     !     23.5783+-1.1925        ! definitely 1.6164x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     13.9940+-1.1554     !     22.9715+-1.7125        ! definitely 1.6415x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     14.1350+-1.8678     !     24.2919+-3.2653        ! definitely 1.7186x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      8.9274+-1.6666     !     20.9736+-2.3411        ! definitely 2.3493x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     15.0437+-2.2198     !     25.0214+-1.9026        ! definitely 1.6633x slower
   fold-put-by-id-to-multi-put-by-offset             16.7672+-2.5838     !     24.1920+-1.3224        ! definitely 1.4428x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     15.8056+-1.7919     !     25.0901+-1.5448        ! definitely 1.5874x slower
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     16.6414+-2.4914     !     25.2231+-1.4244        ! definitely 1.5157x slower
   fold-put-structure                                 9.6407+-2.7432     !     18.9726+-0.9975        ! definitely 1.9680x slower
   for-of-iterate-array-entries                      14.1694+-2.0111     !     18.0928+-1.3780        ! definitely 1.2769x slower
   for-of-iterate-array-keys                          4.7365+-0.5921     ?      5.4310+-0.5810        ? might be 1.1466x slower
   for-of-iterate-array-values                        5.2173+-0.8548            5.1474+-0.5871          might be 1.0136x faster
   fround                                            20.9188+-0.6834     !    117.1662+-1.9544        ! definitely 5.6010x slower
   ftl-library-inlining-dataview                     73.5906+-2.0658     !     86.8898+-2.4924        ! definitely 1.1807x slower
   ftl-library-inlining                             124.2193+-2.4074     !    162.3463+-10.4739       ! definitely 1.3069x slower
   function-call                                     13.5845+-0.5068     !     22.2193+-0.6902        ! definitely 1.6356x slower
   function-dot-apply                                 3.5512+-1.1468     !     13.4200+-0.7761        ! definitely 3.7790x slower
   function-test                                      3.4983+-0.4685     !      9.7888+-1.0762        ! definitely 2.7982x slower
   function-with-eval                               124.6163+-2.5951     ^    118.4492+-2.2798        ^ definitely 1.0521x faster
   gcse-poly-get-less-obvious                        16.8511+-0.9114     !     24.5656+-0.6818        ! definitely 1.4578x slower
   gcse-poly-get                                     19.4942+-0.8727     !     25.2003+-0.9371        ! definitely 1.2927x slower
   gcse                                               5.9769+-0.9823     !     20.5536+-0.5872        ! definitely 3.4388x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.4257+-0.3817     !      6.7776+-0.4321        ! definitely 1.9784x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      7.3161+-1.0568     !     27.5379+-1.4041        ! definitely 3.7640x slower
   get-by-id-chain-from-try-block                     6.4805+-0.2792            6.3278+-0.2074          might be 1.0241x faster
   get-by-id-check-structure-elimination              7.0885+-2.5671     !     22.4256+-0.7793        ! definitely 3.1637x slower
   get-by-id-proto-or-self                           20.1523+-1.8790     !     60.8088+-1.6905        ! definitely 3.0175x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.8960+-0.4494     !      7.3301+-0.7466        ! definitely 1.8814x slower
   get-by-id-self-or-proto                           22.1856+-3.0034     !     61.4364+-2.0132        ! definitely 2.7692x slower
   get-by-val-out-of-bounds                           6.9009+-1.2803     ?      8.9898+-2.6326        ? might be 1.3027x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      3.6171+-0.3908     !      6.5019+-0.1865        ! definitely 1.7975x slower
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      8.1378+-1.3899     !     44.8433+-1.2782        ! definitely 5.5105x slower
   get-by-val-with-string-chain-from-try-block   
                                                      6.7893+-0.6502            6.5742+-0.5373          might be 1.0327x faster
   get-by-val-with-string-check-structure-elimination   
                                                      6.4010+-0.7396     !     34.9073+-1.4368        ! definitely 5.4534x slower
   get-by-val-with-string-proto-or-self              19.1684+-1.0331     !     62.1516+-1.6500        ! definitely 3.2424x slower
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      4.7652+-1.0811     !      7.1636+-0.5301        ! definitely 1.5033x slower
   get-by-val-with-string-self-or-proto              21.0238+-2.1847     !     62.8205+-1.7583        ! definitely 2.9881x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      4.2852+-0.6608     !      7.1046+-0.6481        ! definitely 1.6579x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     20.1847+-2.4568     !     40.9891+-1.5891        ! definitely 2.0307x slower
   get-by-val-with-symbol-chain-from-try-block   
                                                      6.4933+-0.2982            6.4924+-0.2668        
   get-by-val-with-symbol-check-structure-elimination   
                                                     16.2686+-2.0628     !     38.7757+-1.8159        ! definitely 2.3835x slower
   get-by-val-with-symbol-proto-or-self              20.2952+-1.3293     !     64.6987+-3.4841        ! definitely 3.1879x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.9643+-0.7995     !      7.6127+-0.7014        ! definitely 1.5335x slower
   get-by-val-with-symbol-self-or-proto              21.6627+-2.6810     !     61.9943+-1.8829        ! definitely 2.8618x slower
   get_callee_monomorphic                             4.6729+-1.3657     !      7.9187+-1.6666        ! definitely 1.6946x slower
   get_callee_polymorphic                             3.8980+-0.5189     !     11.4289+-1.4680        ! definitely 2.9320x slower
   getter-no-activation                               7.0242+-1.5534     !     23.5575+-1.0730        ! definitely 3.3537x slower
   getter-prototype                                  11.7370+-0.6768     !     15.0888+-1.9689        ! definitely 1.2856x slower
   getter-richards                                  208.7221+-17.9131    !    354.8555+-11.3760       ! definitely 1.7001x slower
   getter                                             8.8970+-0.9809     !     21.3742+-3.7127        ! definitely 2.4024x slower
   global-object-access-with-mutating-structure   
                                                      7.9831+-1.0914            7.9659+-0.7604        
   global-var-const-infer-fire-from-opt               1.0016+-0.2676            0.8986+-0.1004          might be 1.1146x faster
   global-var-const-infer                             0.9620+-0.2065            0.7925+-0.0696          might be 1.2139x faster
   hard-overflow-check-equal                         40.5881+-1.5243     !     44.9469+-1.7957        ! definitely 1.1074x slower
   hard-overflow-check                               40.1301+-1.4012     !     44.6665+-1.7326        ! definitely 1.1130x slower
   HashMap-put-get-iterate-keys                      52.5608+-4.2018     !     75.6922+-5.2835        ! definitely 1.4401x slower
   HashMap-put-get-iterate                           52.9183+-7.5641     !     74.2751+-4.7750        ! definitely 1.4036x slower
   HashMap-string-put-get-iterate                    42.3989+-5.1755     !     83.6054+-12.1558       ! definitely 1.9719x slower
   hoist-make-rope                                   11.8137+-0.6652     ?     12.9692+-1.1106        ? might be 1.0978x slower
   hoist-poly-check-structure-effectful-loop   
                                                      6.3422+-1.3643     ?      9.1316+-1.5300        ? might be 1.4398x slower
   hoist-poly-check-structure                         4.6680+-0.6013     !      6.1999+-0.6861        ! definitely 1.3282x slower
   imul-double-only                                   9.2800+-1.1242     ?     10.3639+-1.0776        ? might be 1.1168x slower
   imul-int-only                                     10.5328+-1.3136     !     13.8904+-0.6364        ! definitely 1.3188x slower
   imul-mixed                                         8.9117+-1.0609     !     12.9668+-1.3950        ! definitely 1.4550x slower
   in-four-cases                                     22.8276+-2.0746     !     27.1950+-1.0831        ! definitely 1.1913x slower
   in-one-case-false                                 19.0893+-5.0241           18.1751+-0.6301          might be 1.0503x faster
   in-one-case-true                                  15.5210+-1.4276     ?     17.2963+-0.5694        ? might be 1.1144x slower
   in-two-cases                                      15.5184+-1.3943     !     18.3199+-1.1636        ! definitely 1.1805x slower
   indexed-properties-in-objects                      3.8268+-0.5142     ?      4.5459+-0.4213        ? might be 1.1879x slower
   infer-closure-const-then-mov-no-inline             5.1927+-1.5539     ?      6.8443+-1.3474        ? might be 1.3181x slower
   infer-closure-const-then-mov                      23.5951+-1.0511     !     77.3867+-9.7216        ! definitely 3.2798x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.9400+-0.4520     !     28.7938+-1.2700        ! definitely 2.4115x slower
   infer-closure-const-then-put-to-scope             26.9369+-0.7376     !    135.4386+-2.3720        ! definitely 5.0280x slower
   infer-closure-const-then-reenter-no-inline   
                                                     55.4021+-2.4284     !    135.6624+-3.5846        ! definitely 2.4487x slower
   infer-closure-const-then-reenter                  27.9515+-1.1787     !    136.1804+-2.8693        ! definitely 4.8720x slower
   infer-constant-global-property                     4.3422+-0.5824     !     34.6919+-1.3402        ! definitely 7.9895x slower
   infer-constant-property                            3.4117+-0.5334     !     20.1033+-2.1260        ! definitely 5.8924x slower
   infer-one-time-closure-ten-vars                    9.0290+-0.5946     ?     10.7989+-1.9634        ? might be 1.1960x slower
   infer-one-time-closure-two-vars                    8.9368+-0.7504     ?      9.0528+-0.7868        ? might be 1.0130x slower
   infer-one-time-closure                             8.7344+-0.5005     ?      9.7772+-1.3689        ? might be 1.1194x slower
   infer-one-time-deep-closure                       12.9463+-1.0072     ?     14.5968+-2.6068        ? might be 1.1275x slower
   inline-arguments-access                            5.3688+-0.7133     !      7.9195+-0.8497        ! definitely 1.4751x slower
   inline-arguments-aliased-access                    5.0132+-0.3607     !      8.2745+-0.7581        ! definitely 1.6505x slower
   inline-arguments-local-escape                      5.1780+-0.6714     !      8.2256+-0.8362        ! definitely 1.5886x slower
   inline-get-scoped-var                              5.9087+-0.6100     !     15.0081+-2.0512        ! definitely 2.5400x slower
   inlined-put-by-id-transition                      12.8620+-0.9233     !     20.5158+-2.4995        ! definitely 1.5951x slower
   inlined-put-by-val-with-string-transition   
                                                     92.0535+-10.4707    ?     94.1393+-3.5350        ? might be 1.0227x slower
   inlined-put-by-val-with-symbol-transition   
                                                     87.0357+-3.8408     ?     99.2666+-11.1930       ? might be 1.1405x slower
   int-or-other-abs-then-get-by-val                   5.7901+-0.7903     !     13.0004+-0.5193        ! definitely 2.2453x slower
   int-or-other-abs-zero-then-get-by-val             18.9187+-1.8591     !     35.1314+-3.6222        ! definitely 1.8570x slower
   int-or-other-add-then-get-by-val                   6.8373+-2.6033     !     21.8582+-3.8979        ! definitely 3.1969x slower
   int-or-other-add                                   7.7194+-2.4695     !     18.3746+-0.8007        ! definitely 2.3803x slower
   int-or-other-div-then-get-by-val                   4.5402+-0.4645     !     10.6128+-0.7782        ! definitely 2.3375x slower
   int-or-other-max-then-get-by-val                   4.4627+-0.2050     !     13.2897+-1.8469        ! definitely 2.9780x slower
   int-or-other-min-then-get-by-val                   4.5274+-0.4220     !     13.1027+-1.5816        ! definitely 2.8941x slower
   int-or-other-mod-then-get-by-val                   4.1331+-0.2138     !     10.3755+-0.6169        ! definitely 2.5103x slower
   int-or-other-mul-then-get-by-val                   4.6000+-0.7620     !     13.0182+-1.1320        ! definitely 2.8300x slower
   int-or-other-neg-then-get-by-val                   5.5203+-1.2761     !     12.8440+-0.7784        ! definitely 2.3267x slower
   int-or-other-neg-zero-then-get-by-val             19.4502+-2.6198     !     33.2040+-1.1882        ! definitely 1.7071x slower
   int-or-other-sub-then-get-by-val                   5.2088+-0.9778     !     21.4134+-1.3163        ! definitely 4.1110x slower
   int-or-other-sub                                   4.2792+-0.4854     !     17.6304+-1.1386        ! definitely 4.1200x slower
   int-overflow-local                                 6.3099+-2.1352     !     20.0244+-1.0933        ! definitely 3.1735x slower
   Int16Array-alloc-long-lived                       58.7143+-2.3246     !    176.2055+-2.5309        ! definitely 3.0011x slower
   Int16Array-bubble-sort-with-byteLength            22.9224+-2.5537     !    167.6531+-3.2031        ! definitely 7.3140x slower
   Int16Array-bubble-sort                            22.5332+-1.0715     !    165.7354+-3.7791        ! definitely 7.3552x slower
   Int16Array-load-int-mul                            2.7540+-1.9854     ?      4.3138+-0.6768        ? might be 1.5664x slower
   Int16Array-to-Int32Array-set                      57.9792+-5.5828     !    135.9252+-2.4811        ! definitely 2.3444x slower
   Int32Array-alloc-large                            13.4997+-0.7216           13.4947+-0.6153        
   Int32Array-alloc-long-lived                       67.2095+-2.8275     !    185.3483+-3.2665        ! definitely 2.7578x slower
   Int32Array-alloc                                   3.3480+-0.1441     !     12.1094+-0.6615        ! definitely 3.6168x slower
   Int32Array-Int8Array-view-alloc                    8.5204+-1.0707     ?      9.9158+-0.5412        ? might be 1.1638x slower
   int52-spill                                        5.6178+-0.4976     !      7.8764+-0.9944        ! definitely 1.4020x slower
   Int8Array-alloc-long-lived                        49.2457+-1.8184     !    168.9125+-2.6052        ! definitely 3.4300x slower
   Int8Array-load-with-byteLength                     4.4459+-0.7002     ?      5.0690+-1.1252        ? might be 1.1402x slower
   Int8Array-load                                     4.3267+-0.3802            4.1923+-0.2135          might be 1.0321x faster
   integer-divide                                    13.4728+-1.4025     !     38.9909+-2.6587        ! definitely 2.8940x slower
   integer-modulo                                     2.2507+-0.3318     ?      2.3192+-0.6046        ? might be 1.0304x slower
   is-boolean-fold-tricky                             4.6336+-0.3807     !     40.0188+-1.7900        ! definitely 8.6367x slower
   is-boolean-fold                                    3.5681+-0.4345     !     40.3766+-4.4992        ! definitely 11.3159x slower
   is-function-fold-tricky-internal-function   
                                                     12.6308+-1.3900     !     64.7312+-2.2639        ! definitely 5.1249x slower
   is-function-fold-tricky                            4.7707+-0.6351     !     65.9397+-5.2015        ! definitely 13.8219x slower
   is-function-fold                                   3.4196+-0.1994     !     57.6359+-1.5674        ! definitely 16.8544x slower
   is-number-fold-tricky                              4.9429+-0.7854     !     39.8758+-1.8367        ! definitely 8.0673x slower
   is-number-fold                                     3.6564+-0.6610     !     39.2987+-0.9036        ! definitely 10.7480x slower
   is-object-or-null-fold-functions                   3.4802+-0.3256     !     63.2132+-2.4791        ! definitely 18.1639x slower
   is-object-or-null-fold-less-tricky                 5.5565+-0.9301     !     57.9133+-1.4846        ! definitely 10.4226x slower
   is-object-or-null-fold-tricky                      6.3273+-1.9640     !     58.6008+-4.9430        ! definitely 9.2616x slower
   is-object-or-null-fold                             3.5485+-0.5388     !     57.4842+-1.4712        ! definitely 16.1996x slower
   is-object-or-null-trickier-function                4.6817+-0.4450     !     70.7637+-11.4575       ! definitely 15.1149x slower
   is-object-or-null-trickier-internal-function   
                                                     12.6362+-1.3150     !     84.7006+-2.3037        ! definitely 6.7030x slower
   is-object-or-null-tricky-function                  5.2824+-0.9259     !     61.6878+-1.7306        ! definitely 11.6781x slower
   is-object-or-null-tricky-internal-function   
                                                     11.3121+-1.9161     !     61.3288+-1.5657        ! definitely 5.4215x slower
   is-string-fold-tricky                              4.3635+-0.2015     !     42.9304+-6.8784        ! definitely 9.8385x slower
   is-string-fold                                     3.3063+-0.1938     !     39.1142+-1.3810        ! definitely 11.8301x slower
   is-undefined-fold-tricky                           4.0644+-0.5880     !     37.9107+-1.5697        ! definitely 9.3274x slower
   is-undefined-fold                                  3.5675+-0.6150     !     39.5000+-2.5921        ! definitely 11.0723x slower
   JSONP-negative-0                                   0.3187+-0.0398     ?      0.3352+-0.0398        ? might be 1.0519x slower
   large-int-captured                                 6.6284+-0.9842     ?      6.7652+-1.3071        ? might be 1.0206x slower
   large-int-neg                                     17.7499+-1.3269     ?     17.8587+-0.8557        ?
   large-int                                         15.6849+-0.8655     ?     16.7169+-0.8138        ? might be 1.0658x slower
   load-varargs-elimination                          24.5343+-0.5830     !    101.0584+-4.0822        ! definitely 4.1191x slower
   logical-not-weird-types                            4.2276+-0.9032     !      8.0032+-1.2538        ! definitely 1.8931x slower
   logical-not                                        5.6143+-0.9678     !     10.0175+-0.9738        ! definitely 1.7843x slower
   lots-of-fields                                    11.2842+-1.0352     ?     13.2509+-1.8930        ? might be 1.1743x slower
   make-indexed-storage                               4.1772+-0.7153            3.6693+-0.2748          might be 1.1384x faster
   make-rope-cse                                      4.9659+-0.4463     !     17.1632+-1.2979        ! definitely 3.4562x slower
   marsaglia-larger-ints                             40.9223+-3.9692     !    337.9191+-4.4497        ! definitely 8.2576x slower
   marsaglia-osr-entry                               26.1932+-1.3750     !    235.0953+-4.6408        ! definitely 8.9754x slower
   math-with-out-of-bounds-array-values              28.7523+-2.7885     ?     29.1496+-2.7996        ? might be 1.0138x slower
   max-boolean                                        3.9564+-0.6864     !     23.0802+-0.8798        ! definitely 5.8336x slower
   method-on-number                                  18.2689+-0.3956     !     22.7109+-1.1523        ! definitely 1.2431x slower
   min-boolean                                        3.3705+-0.2560     !     23.4064+-3.4204        ! definitely 6.9445x slower
   minus-boolean-double                               3.9931+-0.4473     !     17.8640+-4.0415        ! definitely 4.4737x slower
   minus-boolean                                      2.9460+-0.2471     !     15.6392+-0.6275        ! definitely 5.3085x slower
   misc-strict-eq                                    38.1254+-3.3074     !    277.4525+-4.2441        ! definitely 7.2774x slower
   mod-boolean-double                                13.2034+-0.5772     !     24.7171+-1.0452        ! definitely 1.8720x slower
   mod-boolean                                        9.2789+-0.2263     !     47.4875+-1.5158        ! definitely 5.1178x slower
   mul-boolean-double                                 4.3112+-0.2003     !     15.8345+-0.6221        ! definitely 3.6729x slower
   mul-boolean                                        4.2944+-1.5226     !     17.5113+-3.0244        ! definitely 4.0777x slower
   neg-boolean                                        3.7730+-0.3176     !     14.3991+-0.4316        ! definitely 3.8163x slower
   negative-zero-divide                               0.4387+-0.0229            0.4359+-0.0185        
   negative-zero-modulo                               0.4500+-0.0423     ?      0.4740+-0.1191        ? might be 1.0532x slower
   negative-zero-negate                               0.4143+-0.0491     ?      0.4621+-0.0537        ? might be 1.1156x slower
   nested-function-parsing                           53.7693+-2.6419     ?     55.9494+-0.8708        ? might be 1.0405x slower
   new-array-buffer-dead                            117.9383+-4.4844     !    128.8156+-3.2865        ! definitely 1.0922x slower
   new-array-buffer-push                              7.6528+-0.3258     !     13.0722+-1.9744        ! definitely 1.7082x slower
   new-array-dead                                    19.9125+-2.1405     !    175.3632+-2.2423        ! definitely 8.8067x slower
   new-array-push                                     5.3215+-0.6580     !      8.2686+-0.9185        ! definitely 1.5538x slower
   no-inline-constructor                             40.9579+-1.3909     !     69.3798+-2.1550        ! definitely 1.6939x slower
   number-test                                        3.5924+-0.3216     !      8.5958+-0.2227        ! definitely 2.3927x slower
   object-closure-call                                7.8067+-1.0353     !     16.6759+-0.6527        ! definitely 2.1361x slower
   object-get-own-property-symbols-on-large-array   
                                                      5.0529+-0.4812            4.5991+-0.2405          might be 1.0987x faster
   object-test                                        3.7323+-0.4689     !      9.9879+-0.9859        ! definitely 2.6760x slower
   obvious-sink-pathology-taken                     132.9863+-1.7820     !    266.4994+-4.0600        ! definitely 2.0040x slower
   obvious-sink-pathology                           128.3428+-3.3598     !    222.2878+-3.6189        ! definitely 1.7320x slower
   obviously-elidable-new-object                     39.5181+-2.7647     !    217.5721+-2.3406        ! definitely 5.5056x slower
   plus-boolean-arith                                 3.1805+-0.3958     !     13.4702+-0.5692        ! definitely 4.2353x slower
   plus-boolean-double                                3.6560+-0.1119     !     20.7110+-0.5764        ! definitely 5.6649x slower
   plus-boolean                                       3.5553+-0.6016     !     20.3255+-0.7949        ! definitely 5.7170x slower
   poly-chain-access-different-prototypes-simple   
                                                      4.3825+-0.6384     !      6.3326+-0.2091        ! definitely 1.4450x slower
   poly-chain-access-different-prototypes             4.1479+-0.4492     !      6.7883+-0.4267        ! definitely 1.6366x slower
   poly-chain-access-simpler                          4.2150+-0.4309     !      6.7003+-0.5677        ! definitely 1.5896x slower
   poly-chain-access                                  4.3766+-0.7424     !      6.3009+-0.1473        ! definitely 1.4397x slower
   poly-stricteq                                     63.3683+-1.4464     !    173.7628+-4.7418        ! definitely 2.7421x slower
   polymorphic-array-call                             1.7815+-0.4437     ?      2.1294+-0.2368        ? might be 1.1952x slower
   polymorphic-get-by-id                              3.3923+-0.2653     !      4.9760+-1.1175        ! definitely 1.4669x slower
   polymorphic-put-by-id                             29.9508+-0.8734     !     32.3879+-1.5561        ! definitely 1.0814x slower
   polymorphic-put-by-val-with-string                32.0327+-1.7706     ?     33.8009+-1.4157        ? might be 1.0552x slower
   polymorphic-put-by-val-with-symbol                30.0580+-1.2529     !     35.0311+-2.0604        ! definitely 1.1654x slower
   polymorphic-structure                             15.6949+-0.7022     !     72.8844+-3.1071        ! definitely 4.6438x slower
   polyvariant-monomorphic-get-by-id                 11.0788+-1.0677     !     36.0304+-2.1938        ! definitely 3.2522x slower
   proto-getter-access                               10.9920+-0.8198     !     33.5039+-1.2537        ! definitely 3.0480x slower
   prototype-access-with-mutating-prototype           7.4747+-0.7040     ?      8.4605+-1.1711        ? might be 1.1319x slower
   put-by-id-replace-and-transition                   9.6918+-1.1376     !     14.0371+-1.0388        ! definitely 1.4483x slower
   put-by-id-slightly-polymorphic                     3.5475+-0.4101     !      4.8743+-0.8292        ! definitely 1.3740x slower
   put-by-id                                         15.2245+-1.5722     !     39.0799+-1.3854        ! definitely 2.5669x slower
   put-by-val-direct                                  0.4409+-0.0412     ?      0.5633+-0.2072        ? might be 1.2776x slower
   put-by-val-large-index-blank-indexing-type   
                                                      6.5604+-0.8096     ?      7.4476+-0.6552        ? might be 1.1352x slower
   put-by-val-machine-int                             3.1236+-0.4260     !      8.4699+-0.6124        ! definitely 2.7116x slower
   put-by-val-with-string-replace-and-transition   
                                                     15.4233+-1.4809     !     21.9935+-1.1713        ! definitely 1.4260x slower
   put-by-val-with-string-slightly-polymorphic   
                                                      3.7784+-0.3497     !      5.9395+-0.8641        ! definitely 1.5720x slower
   put-by-val-with-string                            15.0273+-0.8015     !     44.5506+-2.6395        ! definitely 2.9646x slower
   put-by-val-with-symbol-replace-and-transition   
                                                     16.0079+-1.4694     !     21.2311+-1.5060        ! definitely 1.3263x slower
   put-by-val-with-symbol-slightly-polymorphic   
                                                      4.3782+-0.8310     !      5.8390+-0.5212        ! definitely 1.3337x slower
   put-by-val-with-symbol                            16.1651+-1.9525     !     43.6369+-2.1282        ! definitely 2.6995x slower
   rare-osr-exit-on-local                            17.5793+-2.1222     !     22.1360+-1.7243        ! definitely 1.2592x slower
   register-pressure-from-osr                        19.2285+-0.4855     !     30.5737+-1.6897        ! definitely 1.5900x slower
   repeat-multi-get-by-offset                        25.9802+-1.1731     !     40.4344+-2.0533        ! definitely 1.5564x slower
   setter-prototype                                  10.2299+-0.9010     ?     11.9988+-1.2441        ? might be 1.1729x slower
   setter                                             8.3947+-0.5623     !     17.2484+-0.4705        ! definitely 2.0547x slower
   simple-activation-demo                            30.4850+-1.2812     ^     21.2868+-1.4074        ^ definitely 1.4321x faster
   simple-getter-access                              13.8254+-1.6532     !     49.4520+-1.7668        ! definitely 3.5769x slower
   simple-poly-call-nested                           12.3222+-1.3590     ?     14.3152+-0.6636        ? might be 1.1617x slower
   simple-poly-call                                   1.7571+-0.3615     ?      1.9461+-0.2613        ? might be 1.1076x slower
   sin-boolean                                       23.9516+-1.8362     !     27.2089+-0.7587        ! definitely 1.1360x slower
   singleton-scope                                   71.8764+-5.5603     !    120.2474+-12.2424       ! definitely 1.6730x slower
   sink-function                                     12.9145+-0.8941     !     16.4322+-1.4109        ! definitely 1.2724x slower
   sink-huge-activation                              19.0061+-1.3264     !     33.9748+-2.2591        ! definitely 1.7876x slower
   sinkable-new-object-dag                           74.4398+-3.0207     !    411.7730+-4.0284        ! definitely 5.5316x slower
   sinkable-new-object-taken                         57.5688+-2.0080     !    263.7635+-4.7913        ! definitely 4.5817x slower
   sinkable-new-object                               40.1321+-2.4958     !    226.5844+-2.8291        ! definitely 5.6460x slower
   slow-array-profile-convergence                     4.4752+-1.7772     ?      6.1125+-0.6224        ? might be 1.3659x slower
   slow-convergence                                   2.8415+-0.2345     !      4.7941+-0.8181        ! definitely 1.6872x slower
   slow-ternaries                                    20.1699+-0.6580     !     67.8537+-2.3657        ! definitely 3.3641x slower
   sorting-benchmark                                 21.3766+-1.2767     !     32.8064+-5.0816        ! definitely 1.5347x slower
   sparse-conditional                                 1.5777+-0.1668     !      4.4415+-0.6127        ! definitely 2.8152x slower
   splice-to-remove                                  14.5874+-1.1946     !     21.8753+-5.7244        ! definitely 1.4996x slower
   string-char-code-at                               16.7470+-1.3709     !     26.7406+-1.0017        ! definitely 1.5967x slower
   string-concat-object                               2.7770+-0.2810     !      3.8235+-0.4012        ! definitely 1.3769x slower
   string-concat-pair-object                          2.6507+-0.1567     !      3.7127+-0.3542        ! definitely 1.4007x slower
   string-concat-pair-simple                         12.7577+-1.2290     !     23.8633+-1.4613        ! definitely 1.8705x slower
   string-concat-simple                              12.5810+-1.1017     !     23.3063+-1.4723        ! definitely 1.8525x slower
   string-cons-repeat                                 8.8282+-0.9787     !     18.4953+-1.1553        ! definitely 2.0950x slower
   string-cons-tower                                  9.4249+-1.0383            8.9007+-0.2492          might be 1.0589x faster
   string-equality                                   19.5441+-0.8409     !     45.9753+-2.0289        ! definitely 2.3524x slower
   string-get-by-val-big-char                         8.7064+-0.8391     !     29.2584+-1.2275        ! definitely 3.3606x slower
   string-get-by-val-out-of-bounds-insane             3.6912+-0.1633     !      4.5787+-0.6864        ! definitely 1.2404x slower
   string-get-by-val-out-of-bounds                    5.3067+-0.6636     !     40.5687+-7.3024        ! definitely 7.6448x slower
   string-get-by-val                                  3.8554+-0.5275     !      6.5041+-0.4795        ! definitely 1.6870x slower
   string-hash                                        3.1771+-0.6988     !      5.9874+-0.7403        ! definitely 1.8845x slower
   string-long-ident-equality                        15.6375+-0.6197     !     41.1622+-1.6110        ! definitely 2.6323x slower
   string-out-of-bounds                              12.2673+-0.4123     ?     12.4015+-0.9158        ? might be 1.0109x slower
   string-repeat-arith                               32.8656+-1.0940     ?     33.0811+-1.0553        ?
   string-sub                                        62.5581+-1.6278     !     67.0464+-1.7746        ! definitely 1.0717x slower
   string-test                                        3.6645+-0.3983     !      8.6608+-0.5897        ! definitely 2.3635x slower
   string-var-equality                               33.2771+-3.6004     !     66.8456+-2.0205        ! definitely 2.0088x slower
   structure-hoist-over-transitions                   3.1062+-0.2626     !      4.8012+-0.5452        ! definitely 1.5457x slower
   substring-concat-weird                            46.7654+-1.5306     !    106.1436+-2.7419        ! definitely 2.2697x slower
   substring-concat                                  52.6562+-2.4365     !     98.6371+-2.4882        ! definitely 1.8732x slower
   substring                                         54.8445+-1.6401     !     95.1347+-2.9813        ! definitely 1.7346x slower
   switch-char-constant                               3.9276+-0.6907     !     12.2836+-0.5980        ! definitely 3.1275x slower
   switch-char                                        9.2670+-0.4650     !     14.7153+-0.6990        ! definitely 1.5879x slower
   switch-constant                                   10.4661+-1.3055     !     21.0040+-2.2980        ! definitely 2.0069x slower
   switch-string-basic-big-var                       17.3224+-1.7040     !     36.3158+-2.2610        ! definitely 2.0965x slower
   switch-string-basic-big                           17.4259+-1.0087     !     30.2600+-1.8698        ! definitely 1.7365x slower
   switch-string-basic-var                           15.7900+-1.0064     !     35.3478+-7.2804        ! definitely 2.2386x slower
   switch-string-basic                               13.9976+-0.1540     !     27.7222+-1.1819        ! definitely 1.9805x slower
   switch-string-big-length-tower-var                21.7060+-1.3038     !     37.6562+-1.9627        ! definitely 1.7348x slower
   switch-string-length-tower-var                    15.4286+-0.7221     !     29.5419+-1.3146        ! definitely 1.9148x slower
   switch-string-length-tower                        13.8021+-0.5783     !     26.2857+-1.0053        ! definitely 1.9045x slower
   switch-string-short                               14.8100+-0.8622     !     26.2789+-1.3194        ! definitely 1.7744x slower
   switch                                            14.5742+-1.3046     !     24.8220+-1.8528        ! definitely 1.7031x slower
   tear-off-arguments-simple                          4.6098+-1.2138     !      7.5572+-0.7363        ! definitely 1.6394x slower
   tear-off-arguments                                 6.1999+-1.3919     !     10.6957+-1.6928        ! definitely 1.7251x slower
   temporal-structure                                13.9481+-1.1058     !     75.8085+-9.4283        ! definitely 5.4350x slower
   to-int32-boolean                                  15.0986+-0.5964     !     59.5669+-2.0275        ! definitely 3.9452x slower
   try-catch-get-by-val-cloned-arguments             17.3955+-1.3385     ?     18.2166+-0.6089        ? might be 1.0472x slower
   try-catch-get-by-val-direct-arguments              7.3842+-0.3806     !      9.1880+-0.4452        ! definitely 1.2443x slower
   try-catch-get-by-val-scoped-arguments              9.2681+-1.0040     ?     11.3986+-1.3181        ? might be 1.2299x slower
   typed-array-get-set-by-val-profiling              35.0747+-1.0969     !     39.3967+-2.6600        ! definitely 1.1232x slower
   undefined-property-access                        289.5199+-6.0065     !    992.0490+-7.8074        ! definitely 3.4265x slower
   undefined-test                                     3.9520+-0.8702     !      9.3533+-0.8714        ! definitely 2.3667x slower
   unprofiled-licm                                   17.5572+-1.2493     ?     18.8270+-1.1763        ? might be 1.0723x slower
   varargs-call                                      17.0667+-0.5611     !     73.9109+-7.9150        ! definitely 4.3307x slower
   varargs-construct-inline                          28.5676+-2.0357     !     78.0553+-3.6133        ! definitely 2.7323x slower
   varargs-construct                                 25.8002+-1.6392     !     86.0874+-3.7792        ! definitely 3.3367x slower
   varargs-inline                                     9.8420+-1.3100     !     51.5915+-2.1032        ! definitely 5.2420x slower
   varargs-strict-mode                               11.5740+-1.0298     !    182.3822+-6.5264        ! definitely 15.7579x slower
   varargs                                           11.8531+-2.2834     !     63.4104+-2.1146        ! definitely 5.3497x slower
   weird-inlining-const-prop                          2.7620+-0.3978     !      6.7798+-1.4681        ! definitely 2.4546x slower

   &lt;geometric&gt;                                       10.2636+-0.0517     !     21.7292+-0.0663        ! definitely 2.1171x slower

                                                            og                      flush                                       
Geomean of preferred means:
   &lt;scaled-result&gt;                                   35.0641+-0.1263     !     69.3932+-0.5994        ! definitely 1.9790x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124650</commentid>
    <comment_count>16</comment_count>
      <attachid>260845</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-09 11:55:08 -0700</bug_when>
    <thetext>Comment on attachment 260845
patch

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

&gt; Tools/Scripts/run-jsc-stress-tests:806
&gt; +        runDFGMaximalFlushPhase

I like that we are running this by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124651</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-09 12:01:29 -0700</bug_when>
    <thetext>&gt;    crypto-aes                                       712.8685+-6.4402     !  
&gt; 3360.8066+-30.8215       ! definitely 4.7145x slower

Can you file a bug for this?

&gt;    raytrace                                 x2       1.27117+-0.03471    !  
&gt; 8.14602+-0.25205       ! definitely 6.4083x slower

LOL this is a bit of a red herring.  Flushing everything means that all of our escape analyses think that the values escape, which disables object allocation elimination and varargs simplification.  Octane/raytrace is basically just a test of those optimizations.

So, I&apos;m curious what the performance of Octane is if you exclude raytrace from the comparison.  That might give some insight into the true slow-down.

But, anyway, you should probably file a bug for this.  It would be great if we could make raytrace faster even when escape analysis fails!

&gt;    zlib                                     x2     488.99212+-8.53742    ! 
&gt; 2216.60297+-28.75483      ! definitely 4.5330x slower

LOL this needs a bug, I don&apos;t know why this failed so hard.

&gt;    imaging-gaussian-blur                             105.801+-1.225      !  
&gt; 2670.923+-14.659        ! definitely 25.2448x slower

OMG file a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124661</commentid>
    <comment_count>18</comment_count>
      <attachid>260845</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-09 12:38:52 -0700</bug_when>
    <thetext>Comment on attachment 260845
patch

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

&gt; Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp:133
&gt; +            if (initialAccessNodes.operand(operand)-&gt;op() == Flush)

Remove.

&gt; Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp:138
&gt; +            else {
&gt; +                DFG_ASSERT(m_graph, nullptr, initialAccessNodes.operand(operand)-&gt;op() == SetArgument);
&gt; +                continue;
&gt; +            }

Remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124668</commentid>
    <comment_count>19</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-09 13:19:28 -0700</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/189544</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260808</attachid>
            <date>2015-09-08 16:31:23 -0700</date>
            <delta_ts>2015-09-08 21:58:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>18879</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkyNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTAzMyw2ICsxMDMzLDggQEAKIAkJNzBFQ0E2MDcxQUZE
QkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRl
bXBsYXRlUmVnaXN0cnkuY3BwICovOyB9OwogCQk3MEVDQTYwODFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzBFQ0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MEVDQTYw
OTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3OUI1MzFFQTFCOUNFRTE4MDAzOUNDOEUgLyogREZHRmx1c2hF
dmVyeXRoaW5nSW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzlCNTMxRTgxQjlDRUUxODAwMzlDQzhFIC8qIERGR0ZsdXNoRXZl
cnl0aGluZ0luc2VydGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJNzlCNTMxRUIxQjlDRUUxODAwMzlD
QzhFIC8qIERGR0ZsdXNoRXZlcnl0aGluZ0luc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUI1MzFFOTFCOUNFRTE4MDAzOUNDOEUg
LyogREZHRmx1c2hFdmVyeXRoaW5nSW5zZXJ0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1Qzkg
LyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZp
cm9ubWVudC5jcHAgKi87IH07CiAJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJs
ZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCMDI0NzU1
MUI4NjgyREQwMDU0MjQ0MCAvKiBXQVNNQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjAyNDc1MjFCODY4MkQ1MDA1NDI0NDAgLyogV0FT
TUNvbnN0YW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yODU1LDYgKzI4NTcsOCBAQAogCQk3MEVDQTYwMjFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBF
Q0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MEVDQTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3Ry
eUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5QjUzMUU4MUI5Q0VFMTgwMDM5
Q0M4RSAvKiBERkdGbHVzaEV2ZXJ5dGhpbmdJbnNlcnRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbHVzaEV2ZXJ5dGhpbmdJbnNlcnRpb25QaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHRmx1c2hFdmVyeXRoaW5nSW5zZXJ0aW9uUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUI1MzFFOTFCOUNFRTE4MDAzOUNDOEUgLyog
REZHRmx1c2hFdmVyeXRoaW5nSW5zZXJ0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRmx1c2hFdmVyeXRoaW5nSW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdGbHVzaEV2ZXJ5dGhpbmdJbnNlcnRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUVudmly
b25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkUxQjRBRkI4
NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QjAyNDc1MjFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUNvbnN0YW50cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC01MTk5LDYgKzUyMDMsOCBAQAogCQkJCTBGMkJEQzEzMTUxQzVE
NEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8sCiAJCQkJMEY5RDMzOTQxN0ZGQzRFNjAw
NzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5jcHAgKi8sCiAJCQkJMEY5RDMzOTUxN0ZGQzRFNjAwNzND
MkJDIC8qIERGR0ZsdXNoZWRBdC5oICovLAorCQkJCTc5QjUzMUU4MUI5Q0VFMTgwMDM5Q0M4RSAv
KiBERkdGbHVzaEV2ZXJ5dGhpbmdJbnNlcnRpb25QaGFzZS5jcHAgKi8sCisJCQkJNzlCNTMxRTkx
QjlDRUUxODAwMzlDQzhFIC8qIERGR0ZsdXNoRXZlcnl0aGluZ0luc2VydGlvblBoYXNlLmggKi8s
CiAJCQkJQTdEODlDRTgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCAqLywK
IAkJCQlBN0Q4OUNFOTE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCAqLywKIAkJ
CQkwRjJERDgxMDFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCAqLywKQEAgLTU4
OTIsNiArNTg5OCw3IEBACiAJCQkJQTFBMDA5QzExODMxQTI2RTAwQ0Y4NzExIC8qIEFSTTY0QXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg5OEYzMjFCMjc2ODlGMDA4M0EzM0MgLyog
REZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTc5QjUzMUVCMUI5Q0VFMTgwMDM5Q0M4RSAvKiBERkdGbHVzaEV2ZXJ5dGhpbmdJbnNlcnRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMjgxQUE5MDk1NjAwRDMzQjMzIC8q
IFNjb3BlZEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDMDYxMUYxQUE1MUUxQzAw
QjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRENTVCODFBRTcx
NkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc3MDcs
NiArNzcxNCw3IEBACiAJCQkJMTQyMTM1OUIwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjg5OEYzMTFCMjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZGQTlFOTEx
NDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk3OUI1MzFFQTFCOUNFRTE4MDAzOUNDOEUgLyogREZHRmx1c2hFdmVyeXRoaW5nSW5zZXJ0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4QTdCRUYxQjgyOTc1QTAwMkQ5MTU3IC8q
IElubGluZUNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRjhBRjBBNTA4RDIw
MDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDBGODkyMEE1MDhCMTAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRXZlcnl0
aGluZ0luc2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZsdXNoRXZlcnl0aGluZ0luc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hFdmVyeXRoaW5nSW5zZXJ0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdGbHVzaEV2ZXJ5dGhpbmdJbnNlcnRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZH
UGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgRmx1c2hFdmVyeXRoaW5nSW5zZXJ0aW9uUGhhc2UgOiBwdWJs
aWMgUGhhc2UgeworcHVibGljOgorICAgIEZsdXNoRXZlcnl0aGluZ0luc2VydGlvblBoYXNlKEdy
YXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImZsdXNoIGV2ZXJ5dGhpbmcgaW5z
ZXJ0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSk7CisKKyAgICAg
ICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKKyAgICAgICAgYm9vbCB0cmVh
dGVkUm9vdEJsb2NrID0gZmFsc2U7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgT3BlcmFuZHM8VmFyaWFi
bGVBY2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZM
b2NhbHMoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBib29sIGlzUm9vdEJsb2NrID0gZmFsc2U7
CisKKyAgICAgICAgICAgIGlmICghdHJlYXRlZFJvb3RCbG9jaykgeworICAgICAgICAgICAgICAg
IHRyZWF0Um9vdEJsb2NrKGJsb2NrLCBpbnNlcnRpb25TZXQsIGN1cnJlbnRCbG9ja0FjY2Vzc0Rh
dGEpOworICAgICAgICAgICAgICAgIHRyZWF0ZWRSb290QmxvY2sgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGlzUm9vdEJsb2NrID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dHJlYXRSZWd1bGFyQmxvY2soYmxvY2ssIGluc2VydGlvblNldCwgY3VycmVudEJsb2NrQWNjZXNz
RGF0YSwgaXNSb290QmxvY2spOworCisgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2
b2lkIHRyZWF0Um9vdEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrLCBJbnNlcnRpb25TZXQmIGluc2Vy
dGlvblNldCwgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4mIGN1cnJlbnRCbG9ja0FjY2Vz
c0RhdGEpCisgICAgeworICAgICAgICBPcGVyYW5kczxib29sPiBoYXNTZXRJblJvb3RCbG9jayhi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwgZmFsc2UpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gU2V0TG9jYWwg
JiYgbm9kZS0+b3AoKSAhPSBTZXRBcmd1bWVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgICAgICBoYXNTZXRJblJvb3RCbG9jay5vcGVyYW5k
KG9wZXJhbmQpID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIHdhbnQgZXZlcnkg
Rmx1c2ggdG8gYmUgYWJsZSB0byByZWFjaCBiYWNrd2FyZHMgdG8KKyAgICAgICAgLy8gYSBTZXRM
b2NhbC4gRG9pbmcgdGhpcyBpbiB0aGUgcm9vdCBibG9jayBhY2hpZXZlcyB0aGlzIGdvYWwuCisg
ICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gYmxvY2stPmF0KDApLT5vcmlnaW47CisgICAgICAg
IE5vZGUqIHVuZGVmaW5lZCA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgwLCBvcmlnaW4s
IGpzVW5kZWZpbmVkKCkpOworCisgICAgICAgIGF1dG8gaW5zZXJ0U2V0TG9jYWwgPSBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICBpZiAoaGFzU2V0SW5Sb290Qmxv
Y2sub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9w
ZXJhbmQpOworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUs
IAorICAgICAgICAgICAgICAgIFNldExvY2FsLCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVk
Z2UodW5kZWZpbmVkKSk7CisKKyAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3Bl
cmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOworICAgICAgICB9OworCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7
IGkrKykKKyAgICAgICAgICAgIGluc2VydFNldExvY2FsKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgaSsrKQorICAgICAgICAgICAgaW5zZXJ0U2V0TG9j
YWwodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgIH0KKworICAgIHZvaWQgdHJl
YXRSZWd1bGFyQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIEluc2VydGlvblNldCYgaW5zZXJ0aW9u
U2V0LCBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiYgY3VycmVudEJsb2NrQWNjZXNzRGF0
YSwgYm9vbCBpc1Jvb3RCbG9jaykKKyAgICB7CisgICAgICAgIC8vIEluc2VydCBhIEZsdXNoIGJl
Zm9yZSBldmVyeSBTZXRMb2NhbCB0byBwcm9wZXJseQorICAgICAgICAvLyBwYXR0ZXJuIHRoZSBn
cmFwaCBzdWNoIHRoYXQgYW55IHJhbmdlIGJldHdlZW4gU2V0TG9jYWwgYW5kIEZsdXNoCisgICAg
ICAgIC8vIGhhcyBhY2Nlc3MgdG8gdGhlIGxvY2FsIG9uIHRoZSBzdGFjay4KKyAgICAgICAgewor
ICAgICAgICAgICAgT3BlcmFuZHM8Ym9vbD4gc2tpcHBlZFNldEFscmVhZHlCZWNhdXNlUm9vdChi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwgZmFsc2UpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAg
ICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY3VycmVudEFjY2Vzc0RhdGEgPSBjdXJyZW50
QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGZsdXNo
QWNjZXNzRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRBY2Nlc3NEYXRhKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hBY2Nlc3NEYXRhID0gY3VycmVudEFjY2Vzc0Rh
dGE7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlzUm9vdEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBmbHVzaCBiZWZvcmUgdGhlIHZlcnkgZmlyc3QgU2V0TG9jYWwvU2V0QXJndW1l
bnQgaW4gdGhlIHJvb3QgYmxvY2suCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBh
bHJlYWR5U2tpcHBlZFNldExvY2FsID0gc2tpcHBlZFNldEFscmVhZHlCZWNhdXNlUm9vdC5vcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeVNr
aXBwZWRTZXRMb2NhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwcGVk
U2V0QWxyZWFkeUJlY2F1c2VSb290Lm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBmbHVzaEFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShpLCBTcGVjTm9uZSwgCisgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaCwgbm9k
ZS0+b3JpZ2luLCBPcEluZm8oZmx1c2hBY2Nlc3NEYXRhKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDogeworICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIGFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBhY2Nlc3NE
YXRhLT5sb2NhbCgpOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50QmxvY2tBY2Nlc3NEYXRh
Lm9wZXJhbmQob3BlcmFuZCkgPSBhY2Nlc3NEYXRhOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIC8vIEZsdXNoIGV2ZXJ5dGhpbmcgYXQgdGhlIGVuZCBvZiB0aGUgYmxv
Y2suCisgICAgICAgIHsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gYmxvY2stPmF0
KGJsb2NrLT5zaXplKCkgLSAxKS0+b3JpZ2luOworICAgICAgICAgICAgYXV0byBpbnNlcnRGbHVz
aEF0RW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogYWNjZXNzRGF0YTsKKyAgICAgICAgICAgICAgICBpZiAoVmFy
aWFibGVBY2Nlc3NEYXRhKiBjdXJyZW50QWNjZXNzRGF0YSA9IGN1cnJlbnRCbG9ja0FjY2Vzc0Rh
dGEub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzRGF0YSA9IGN1
cnJlbnRBY2Nlc3NEYXRhOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgYWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKworICAgICAg
ICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKSA9IGFjY2Vz
c0RhdGE7CisKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShibG9jay0+
c2l6ZSgpLCBTcGVjTm9uZSwgCisgICAgICAgICAgICAgICAgICAgIEZsdXNoLCBvcmlnaW4sIE9w
SW5mbyhhY2Nlc3NEYXRhKSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsg
aSsrKQorICAgICAgICAgICAgICAgIGluc2VydEZsdXNoQXRFbmQodmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaSkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgaSsrKQorICAgICAgICAgICAgICAg
IGluc2VydEZsdXNoQXRFbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgeworICAgICAgICBBU1NFUlQoIW9wZXJh
bmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFj
Y2Vzc0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSk7CisgICAgICAgIHJl
dHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CisgICAgfQorfTsKKwor
Ym9vbCBwZXJmb3JtRmx1c2hFdmVyeXRoaW5nSW5zZXJ0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQor
eworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgRmx1c2ggRXZlcnl0aGlu
ZyBJbnNlcnRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Rmx1c2hFdmVyeXRoaW5n
SW5zZXJ0aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hFdmVyeXRoaW5nSW5zZXJ0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRXZlcnl0aGluZ0luc2VydGlvblBoYXNl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRXZl
cnl0aGluZ0luc2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0ZsdXNoRXZlcnl0aGluZ0luc2VydGlvblBoYXNlX2gKKyNkZWZpbmUgREZHRmx1c2hFdmVyeXRo
aW5nSW5zZXJ0aW9uUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKK2Jvb2wgcGVyZm9ybUZsdXNo
RXZlcnl0aGluZ0luc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCk7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
Rmx1c2hFdmVyeXRoaW5nSW5zZXJ0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE4OTI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNp
bmNsdWRlICJERkdEQ0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZhaWxlZEZpbmFsaXplci5oIgog
I2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKKyNpbmNsdWRlICJERkdGbHVzaEV2ZXJ5dGhpbmdJ
bnNlcnRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoU2FmZXBvaW50LmgiCiAjaW5jbHVk
ZSAiREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdJbnRlZ2Vy
UmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5oIgpAQCAtMjU1LDYgKzI1Niw5IEBAIFBsYW46OkNvbXBp
bGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0
ZXIgcGFyc2luZzpcbiIpOwogICAgICAgICBkZmcuZHVtcCgpOwogICAgIH0KKworICAgIGlmIChP
cHRpb25zOjplbmFibGVGbHVzaEV2ZXJ5dGhpbmdQaGFzZSgpKQorICAgICAgICBwZXJmb3JtRmx1
c2hFdmVyeXRoaW5nSW5zZXJ0aW9uUGhhc2UoZGZnKTsKICAgICAKICAgICBwZXJmb3JtQ1BTUmV0
aHJlYWRpbmcoZGZnKTsKICAgICBwZXJmb3JtVW5pZmljYXRpb24oZGZnKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAxODkyNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzE5LDYgKzMxOSwxMCBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRp
b25zKCkKICAgICAgICAgT3B0aW9uczo6bWF4aW11bUV2YWxDYWNoZWFibGVTb3VyY2VMZW5ndGgo
KSA9IDE1MDAwMDsKICAgICAgICAgT3B0aW9uczo6ZW5hYmxlQ29uY3VycmVudEpJVCgpID0gZmFs
c2U7CiAgICAgfQorICAgIGlmIChPcHRpb25zOjplbmFibGVGbHVzaEV2ZXJ5dGhpbmdQaGFzZSgp
KSB7CisgICAgICAgIE9wdGlvbnM6OmVuYWJsZU9TUkVudHJ5VG9ERkcoKSA9IGZhbHNlOworICAg
ICAgICBPcHRpb25zOjplbmFibGVPU1JFbnRyeVRvRlRMKCkgPSBmYWxzZTsKKyAgICB9CiAKICAg
ICAvLyBDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSByZW9wdGltaXphdGlvbiByZXRy
eSBjb3VudGVyLiBUaGlzIGlzIHNpbXBseQogICAgIC8vIHRoZSBsYXJnZXN0IHZhbHVlIGF0IHdo
aWNoIHdlIGRvbid0IG92ZXJmbG93IHRoZSBleGVjdXRlIGNvdW50ZXIsIHdoZW4gdXNpbmcgaXQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE4
OTI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM3LDYgKzIzNyw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3Ry
aW5nOwogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcsIHRydWUsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50QnlJZElubGluaW5nLCB0cnVl
LCBudWxscHRyKSBcCiAgICAgXAorICAgIHYoYm9vbCwgZW5hYmxlRmx1c2hFdmVyeXRoaW5nUGhh
c2UsIGZhbHNlLCAiU2V0dGluZyB0byB0cnVlIGVuYWJsZXMgdGhlIERGRydzIHBlcmZvcm1GbHVz
aEV2ZXJ5dGhpbmdJbnNlcnRpb25QaGFzZSB0byBydW4uIikgXAorICAgIFwKICAgICB2KHVuc2ln
bmVkLCBtYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoQ2FzZUxlbmd0aCwgNTAsIG51bGxwdHIpIFwK
ICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoVG90YWxMZW5ndGgsIDIw
MDAsIG51bGxwdHIpIFwKICAgICBcCkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJ
KHJldmlzaW9uIDE4OTI3NikKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJ
KHdvcmtpbmcgY29weSkKQEAgLTc3MCw2ICs3NzAsMTAgQEAgZGVmIHJ1bk1pc2NGVExOb0NKSVRU
ZXN0KCpvcHRpb25zKQogICAgIHJ1bigibWlzYy1mdGwtbm8tY2ppdCIsICooRlRMX09QVElPTlMg
KyBOT19DSklUX09QVElPTlMgKyBvcHRpb25zKSkKIGVuZAogCitkZWYgcnVuREZHRmx1c2hFdmVy
eXRoaW5nCisgICAgcnVuKCJkZmctZmx1c2gtZXZlcnl0aGluZy12YWxpZGF0ZS1uby1jaml0Iiwg
Ii0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tZW5hYmxlRmx1c2hFdmVyeXRoaW5nUGhhc2U9dHJ1
ZSIsICpOT19DSklUX09QVElPTlMpCitlbmQKKwogZGVmIGRlZmF1bHRSdW4KICAgICBydW5EZWZh
dWx0CiAgICAgcnVuQWx3YXlzVHJpZ2dlckNvcHlQaGFzZQpAQCAtNzg0LDYgKzc4OCw3IEBAIGRl
ZiBkZWZhdWx0UnVuCiAgICAgICAgIHJ1bkZUTEVhZ2VyCiAgICAgICAgIHJ1bkZUTEVhZ2VyTm9D
SklUVmFsaWRhdGUKICAgICAgICAgcnVuRlRMTm9DSklUU21hbGxQb29sCisgICAgICAgIHJ1bkRG
R0ZsdXNoRXZlcnl0aGluZwogICAgIGVuZAogZW5kCiAKQEAgLTgwNSw2ICs4MTAsNyBAQCBkZWYg
ZGVmYXVsdFNwb3RDaGVjawogICAgIHJ1bkZUTE5vQ0pJVE9TUlZhbGlkYXRpb24KICAgICBydW5O
b0NKSVROb0FjY2Vzc0lubGluaW5nCiAgICAgcnVuRlRMTm9DSklUTm9BY2Nlc3NJbmxpbmluZwor
ICAgIHJ1bkRGR0ZsdXNoRXZlcnl0aGluZwogZW5kCiAKICMgVGhpcyBpcyBleHBlY3RlZCB0byBu
b3QgZG8gZWFnZXIgcnVucyBiZWNhdXNlIGVhZ2VyIHJ1bnMgY2FuIGhhdmUgYSBsb3Qgb2YgcmVj
b21waWxhdGlvbnMK
</data>
<flag name="review"
          id="286001"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260834</attachid>
            <date>2015-09-08 21:58:00 -0700</date>
            <delta_ts>2015-09-08 21:59:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>20467</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4OTUzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMjA0LDYgKzIwNCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKICAgICBkZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3Bw
CiAgICAgZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdN
YXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHTWF5RXhpdC5jcHAKICAg
ICBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODk1
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsNiArNDQxLDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb25nTGl2ZWRTdGF0ZS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heUV4aXQuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heGltYWxGbHVzaEluc2Vy
dGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5p
ZmllZEdyYXBoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5p
ZmllZE5vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01vdkhp
bnRSZW1vdmFsUGhhc2UuY3BwIiAvPgpAQCAtMTE3Myw2ICsxMTc0LDcgQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb25nTGl2ZWRTdGF0ZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWF5RXhpdC5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRHcmFwaC5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkSUQuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUuaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlz
aW9uIDE4OTUzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTc0
Niw2ICsxNzQ2LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNYXlFeGl0
LmNwcCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNl
LmNwcCI+CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5jcHAiPgogICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTQzNDAsNiArNDM0Myw5IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWF5RXhpdC5oIj4KICAgICAgIDxG
aWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaCI+CisgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTg5NTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwMzgsNiArMTAzOCw4IEBA
CiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3
QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlFRTBCRkYxQjRB
RkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8q
IFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OUVFMEMwMDFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52
aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3OUY4RkMxRTFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNl
LmNwcCAqLzsgfTsKKwkJNzlGOEZDMUYxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVz
aEluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUY4RkMxRDFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3QjAyNDc1NTFCODY4MkREMDA1NDI0NDAgLyogV0FTTUNvbnN0YW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IwMjQ3NTIxQjg2ODJENTAw
NTQyNDQwIC8qIFdBU01Db25zdGFudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjAyNDc1NjFCODY4MkUxMDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMDI0NzUzMUI4NjgyRDUwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuY3BwICov
OyB9OwogCQk3QjAyNDc1NzFCODY4MkU0MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjAyNDc1NDFC
ODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4NzAsNiArMjg3Miw4IEBACiAJCTc5
N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIg
LyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVz
aEluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01h
eGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHTWF4aW1hbEZsdXNoSW5z
ZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IwMjQ3NTIxQjg2
ODJENTAwNTQyNDQwIC8qIFdBU01Db25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0FTTUNvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QjAyNDc1MzFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01GdW5jdGlvblBhcnNlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMDI0NzU0MUI4NjgyRDUwMDU0MjQ0MCAvKiBX
QVNNRnVuY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FT
TUZ1bmN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mjc3LDYg
KzUyODEsOCBAQAogCQkJCUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5oICovLAogCQkJCTBGNTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBE
RkdNYXlFeGl0LmNwcCAqLywKIAkJCQkwRjU4NzRFQzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5
RXhpdC5oICovLAorCQkJCTc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1
c2hJbnNlcnRpb25QaGFzZS5jcHAgKi8sCisJCQkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2NkFCIC8q
IERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi8sCiAJCQkJMEYxNzI1RkUxQjQ4NzE5
QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwICovLAogCQkJCTBGMkJEQzNEMTUyMjgw
MTcwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggKi8sCiAJCQkJMEZCNEI1MTAxNkIzQTk2
NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLywKQEAgLTU5MjQsNiArNTkzMCw3IEBACiAJ
CQkJQTFBMDA5QzExODMxQTI2RTAwQ0Y4NzExIC8qIEFSTTY0QXNzZW1ibGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjg5OEYzMjFCMjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0
aW1pemF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4
NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5RjhGQzFGMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTlGMUE3MDExQjk4RkJFQzAwNDYzQjI2IC8qIEluc3BlY3RvckZyb250ZW5kUm91
dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0
UHV0SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8q
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTc5OTUsNiAr
ODAwMiw3IEBACiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGls
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1
bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OUY4
RkMxRTFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTFENzkyRkMxQjQzODY0QjAwNDUxNkY1IC8qIEludGxOdW1i
ZXJGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE1ODdENzExQjREQzE0MTAwRDY5ODQ5
IC8qIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heGltYWxGbHVzaEluc2Vy
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdNYXhp
bWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgor
ICAgIE1heGltYWxGbHVzaEluc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgIm1heGltYWwgZmx1c2ggaW5zZXJ0aW9uIHBoYXNlIikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgubV9mb3JtID09IExvYWRTdG9yZSk7CisKKyAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChtX2dyYXBoKTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgdHJlYXRSZWd1bGFyQmxv
Y2soYmxvY2ssIGluc2VydGlvblNldCk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0
ZShibG9jayk7CisgICAgICAgIH0KKworICAgICAgICB0cmVhdFJvb3RCbG9jayhtX2dyYXBoLmJs
b2NrKDApLCBpbnNlcnRpb25TZXQpOworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShtX2dy
YXBoLmJsb2NrKDApKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lk
IHRyZWF0UmVndWxhckJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrLCBJbnNlcnRpb25TZXQmIGluc2Vy
dGlvblNldCkKKyAgICB7CisgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1
cnJlbnRCbG9ja0FjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3Vt
ZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG51bGxwdHIp
OworICAgICAgICAvLyBJbnNlcnQgYSBGbHVzaCBiZWZvcmUgZXZlcnkgU2V0TG9jYWwgdG8gcHJv
cGVybHkgcGF0dGVybiB0aGUgZ3JhcGggc3VjaCB0aGF0IAorICAgICAgICAvLyBhbnkgcmFuZ2Ug
YmV0d2VlbiBTZXRMb2NhbCBhbmQgRmx1c2ggaGFzIGFjY2VzcyB0byB0aGUgbG9jYWwgb24gdGhl
IHN0YWNrLgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YmxvY2stPnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgewor
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2Fs
KCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZmx1c2hBY2Nlc3NE
YXRhID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZsdXNoQWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZsdXNoQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKworICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpLCBTcGVjTm9uZSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBGbHVzaCwgbm9kZS0+b3JpZ2luLCBPcEluZm8oZmx1c2hB
Y2Nlc3NEYXRhKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSkKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBGbHVzaCBldmVyeXRoaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLgorICAgICAgICB7Cisg
ICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IGJsb2NrLT5hdChibG9jay0+c2l6ZSgpIC0g
MSktPm9yaWdpbjsKKyAgICAgICAgICAgIGF1dG8gaW5zZXJ0Rmx1c2hBdEVuZCA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIGFjY2Vzc0RhdGEgPSBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3NEYXRhKQorICAgICAgICAgICAgICAgICAgICBh
Y2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworCisgICAgICAgICAg
ICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpID0gYWNjZXNzRGF0
YTsKKworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKGJsb2NrLT5zaXpl
KCksIFNwZWNOb25lLCAKKyAgICAgICAgICAgICAgICAgICAgRmx1c2gsIG9yaWdpbiwgT3BJbmZv
KGFjY2Vzc0RhdGEpKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IGkr
KykKKyAgICAgICAgICAgICAgICBpbnNlcnRGbHVzaEF0RW5kKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGkpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7IGkrKykKKyAgICAgICAgICAgICAgICBp
bnNlcnRGbHVzaEF0RW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgdHJlYXRSb290QmxvY2soQmFzaWNCbG9jayogYmxvY2ssIElu
c2VydGlvblNldCYgaW5zZXJ0aW9uU2V0KQorICAgIHsKKyAgICAgICAgT3BlcmFuZHM8VmFyaWFi
bGVBY2Nlc3NEYXRhKj4gaW5pdGlhbEFjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkFyZ3VtZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCksIG51bGxwdHIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNp
emUoKTsgaSsrKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgaWYgKCFub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEobV9ncmFwaCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIGlmIChpbml0aWFsQWNjZXNzRGF0YS5v
cGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
Ly8gRklYTUU6IG1heWJlIHdlIHNob3VsZCBhc3NlcnQgdGhpcyBpcyBhbHdheXMgYSBGbHVzaC4g
QnV0IHdvdWxkIHRoaXMgZXZlciBiZSBhIEdldExvY2FsPworICAgICAgICAgICAgLy8gRG8gd2Ug
ZXZlciBoYXZlIEdldExvY2FscyBiZWZvcmUgYSBTZXRMb2NhbCBpbiB0aGUgcm9vdCBibG9jaz8K
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgIT0gU2V0TG9jYWwpOyAvLyBX
ZSBzaG91bGQgaGF2ZSBpbnNlcnRlZCBhIEZsdXNoIGJlZm9yZSB0aGlzIQorICAgICAgICAgICAg
aW5pdGlhbEFjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2Ugd2FudCBldmVyeSBGbHVzaCB0byBi
ZSBhYmxlIHRvIHJlYWNoIGJhY2t3YXJkcyB0bworICAgICAgICAvLyBhIFNldExvY2FsLiBEb2lu
ZyB0aGlzIGluIHRoZSByb290IGJsb2NrIGFjaGlldmVzIHRoaXMgZ29hbC4KKyAgICAgICAgTm9k
ZU9yaWdpbiBvcmlnaW4gPSBibG9jay0+YXQoMCktPm9yaWdpbjsKKyAgICAgICAgTm9kZSogdW5k
ZWZpbmVkID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KDAsIG9yaWdpbiwganNVbmRlZmlu
ZWQoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgaSsrKSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpOworICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBhY2Nlc3NEYXRhID0gaW5pdGlhbEFjY2Vzc0RhdGEub3BlcmFu
ZChvcGVyYW5kKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc0RhdGEpOworICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIAorICAgICAgICAg
ICAgICAgIFNldExvY2FsLCBvcmlnaW4sIE9wSW5mbyhhY2Nlc3NEYXRhKSwgRWRnZSh1bmRlZmlu
ZWQpKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgeworICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3Jh
cGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
KSk7CisgICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7
CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtTWF4aW1hbEZsdXNoSW5zZXJ0aW9uKEdyYXBoJiBn
cmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEZsdXNoIEV2
ZXJ5dGhpbmcgSW5zZXJ0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE1heGltYWxG
bHVzaEluc2VydGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNo
SW5zZXJ0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTWF4aW1h
bEZsdXNoSW5zZXJ0aW9uUGhhc2VfaAorI2RlZmluZSBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25Q
aGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gVGhpcyBwaGFzZSBlbnN1cmVzIHdlIGtlZXAg
YWxsIGxvY2Fscy9hcmd1bWVudHMgZmx1c2hlZC4KKy8vIFdoYXQgdGhpcyBtZWFucyBpczogYW55
IG5vZGUgaW5iZXR3ZWVuIGEgU2V0TG9jYWwgYW5kIGEgRmx1c2ggc2hvdWxkCisvLyBiZSBhYmxl
IHRvIG9ic2VydmUgdGhhdCBwYXJ0aWN1bGFyIGxvY2FsIG9uIHRoZSBzdGFjay4gVGhpcyBwaGFz
ZSBwYXR0ZXJucworLy8gdGhlIGdyYXBoIGJ5IGluc2VydGluZyBhIEZsdXNoIGJlZm9yZSBlYWNo
IFNldExvY2FsIHN1Y2ggdGhhdCB0aGUgRmx1c2ggCisvLyB3ZSBpbnNlcnRlZCBjYW4gZG8gYSBi
YWNrd2FyZHMgc2VhcmNoIHRocm91Z2ggYWxsIHBhdGhzIGluIHRoZSBDRkcgYW5kIAorLy8gcmVh
Y2ggYSBTZXRMb2NhbC4KKy8vIC4uLi4KKy8vIFNldExvY2FsKGxvY1gpCisvLyA8CisvLyB8Cisv
LyAuLi4gV2UgZW5zdXJlIHRoYXQgbG9jWCBpcyBhdmFpbGFibGUgb24gdGhlIHN0YWNrIHRvIGFu
eSBub2RlcyBpbiB0aGlzIHJlZ2lvbiB0aGF0IG1heSBhc2sgZm9yIGxvY1guCisvLyB8CisvLyA+
CisvLyBGbHVzaChsb2NYKQorLy8gU2V0TG9jYWwobG9jWCkKKworYm9vbCBwZXJmb3JtTWF4aW1h
bEZsdXNoSW5zZXJ0aW9uKEdyYXBoJiBncmFwaCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTWF4aW1hbEZs
dXNoSW5zZXJ0aW9uUGhhc2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCShyZXZpc2lvbiAxODk1MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiREZHRENF
UGhhc2UuaCIKICNpbmNsdWRlICJERkdGYWlsZWRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJERkdG
aXh1cFBoYXNlLmgiCisjaW5jbHVkZSAiREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdHcmFwaFNhZmVwb2ludC5oIgogI2luY2x1ZGUgIkRGR0ludGVnZXJDaGVj
a0NvbWJpbmluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9u
UGhhc2UuaCIKQEAgLTI1NSw2ICsyNTYsOSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6
Y29tcGlsZUluVGhyCiAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIHBhcnNpbmc6XG4iKTsK
ICAgICAgICAgZGZnLmR1bXAoKTsKICAgICB9CisKKyAgICBpZiAoT3B0aW9uczo6ZW5hYmxlTWF4
aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UoKSkKKyAgICAgICAgcGVyZm9ybU1heGltYWxGbHVzaElu
c2VydGlvbihkZmcpOwogICAgIAogICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAg
IHBlcmZvcm1VbmlmaWNhdGlvbihkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDE4OTUzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNiArMzE5LDEw
IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgICAgICBPcHRp
b25zOjptYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCgpID0gMTUwMDAwOwogICAgICAg
ICBPcHRpb25zOjplbmFibGVDb25jdXJyZW50SklUKCkgPSBmYWxzZTsKICAgICB9CisgICAgaWYg
KE9wdGlvbnM6OmVuYWJsZU1heGltYWxGbHVzaEluc2VydGlvblBoYXNlKCkpIHsKKyAgICAgICAg
T3B0aW9uczo6ZW5hYmxlT1NSRW50cnlUb0RGRygpID0gZmFsc2U7CisgICAgICAgIE9wdGlvbnM6
OmVuYWJsZU9TUkVudHJ5VG9GVEwoKSA9IGZhbHNlOworICAgIH0KIAogICAgIC8vIENvbXB1dGUg
dGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIHJlb3B0aW1pemF0aW9uIHJldHJ5IGNvdW50ZXIuIFRo
aXMgaXMgc2ltcGx5CiAgICAgLy8gdGhlIGxhcmdlc3QgdmFsdWUgYXQgd2hpY2ggd2UgZG9uJ3Qg
b3ZlcmZsb3cgdGhlIGV4ZWN1dGUgY291bnRlciwgd2hlbiB1c2luZyBpdApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTg5NTMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzgsNiArMjM4LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihi
b29sLCBlbmFibGVQb2x5dmFyaWFudENhbGxJbmxpbmluZywgdHJ1ZSwgbnVsbHB0cikgXAogICAg
IHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRCeUlkSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwK
ICAgICBcCisgICAgdihib29sLCBlbmFibGVNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZSwgZmFs
c2UsICJTZXR0aW5nIHRvIHRydWUgZW5hYmxlcyB0aGUgREZHJ3MgTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UgdG8gcnVuLiIpIFwKKyAgICBcCiAgICAgdih1bnNpZ25lZCwgbWF4aW11bUJpbmFy
eVN0cmluZ1N3aXRjaENhc2VMZW5ndGgsIDUwLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwg
bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3RoLCAyMDAwLCBudWxscHRyKSBcCiAg
ICAgXApJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAxODk1MzIp
CisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBA
IC03ODUsNiArNzg1LDEwIEBAIGRlZiBydW5NaXNjRlRMTm9DSklUVGVzdCgqb3B0aW9ucykKICAg
ICBydW4oIm1pc2MtZnRsLW5vLWNqaXQiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05T
ICsgb3B0aW9ucykpCiBlbmQKIAorZGVmIHJ1bkRGR01heGltYWxGbHVzaFBoYXNlCisgICAgcnVu
KCJkZmctbWF4aW1hbC1mbHVzaC12YWxpZGF0ZS1uby1jaml0IiwgIi0tdmFsaWRhdGVHcmFwaD10
cnVlIiwgIi0tZW5hYmxlTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2U9dHJ1ZSIsICpOT19DSklU
X09QVElPTlMpCitlbmQKKwogZGVmIGRlZmF1bHRSdW4KICAgICBydW5EZWZhdWx0CiAgICAgcnVu
QWx3YXlzVHJpZ2dlckNvcHlQaGFzZQpAQCAtNzk5LDYgKzgwMyw3IEBAIGRlZiBkZWZhdWx0UnVu
CiAgICAgICAgIHJ1bkZUTEVhZ2VyCiAgICAgICAgIHJ1bkZUTEVhZ2VyTm9DSklUVmFsaWRhdGUK
ICAgICAgICAgcnVuRlRMTm9DSklUU21hbGxQb29sCisgICAgICAgIHJ1bkRGR01heGltYWxGbHVz
aFBoYXNlCiAgICAgZW5kCiBlbmQKIApAQCAtODIwLDYgKzgyNSw3IEBAIGRlZiBkZWZhdWx0U3Bv
dENoZWNrCiAgICAgcnVuRlRMTm9DSklUT1NSVmFsaWRhdGlvbgogICAgIHJ1bk5vQ0pJVE5vQWNj
ZXNzSW5saW5pbmcKICAgICBydW5GVExOb0NKSVROb0FjY2Vzc0lubGluaW5nCisgICAgcnVuREZH
TWF4aW1hbEZsdXNoUGhhc2UKIGVuZAogCiAjIFRoaXMgaXMgZXhwZWN0ZWQgdG8gbm90IGRvIGVh
Z2VyIHJ1bnMgYmVjYXVzZSBlYWdlciBydW5zIGNhbiBoYXZlIGEgbG90IG9mIHJlY29tcGlsYXRp
b25zCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260835</attachid>
            <date>2015-09-08 21:59:58 -0700</date>
            <delta_ts>2015-09-08 23:56:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>20481</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4OTUzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMjA0LDYgKzIwNCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKICAgICBkZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3Bw
CiAgICAgZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdN
YXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHTWF5RXhpdC5jcHAKICAg
ICBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODk1
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsNiArNDQxLDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb25nTGl2ZWRTdGF0ZS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heUV4aXQuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heGltYWxGbHVzaEluc2Vy
dGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5p
ZmllZEdyYXBoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5p
ZmllZE5vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01vdkhp
bnRSZW1vdmFsUGhhc2UuY3BwIiAvPgpAQCAtMTE3Myw2ICsxMTc0LDcgQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb25nTGl2ZWRTdGF0ZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWF5RXhpdC5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRHcmFwaC5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkSUQuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUuaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlz
aW9uIDE4OTUzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTc0
Niw2ICsxNzQ2LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNYXlFeGl0
LmNwcCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNl
LmNwcCI+CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5jcHAiPgogICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTQzNDAsNiArNDM0Myw5IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWF5RXhpdC5oIj4KICAgICAgIDxG
aWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaCI+CisgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTg5NTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwMzgsNiArMTAzOCw4IEBA
CiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3
QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlFRTBCRkYxQjRB
RkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8q
IFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OUVFMEMwMDFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52
aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3OUY4RkMxRTFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNl
LmNwcCAqLzsgfTsKKwkJNzlGOEZDMUYxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVz
aEluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUY4RkMxRDFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3QjAyNDc1NTFCODY4MkREMDA1NDI0NDAgLyogV0FTTUNvbnN0YW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IwMjQ3NTIxQjg2ODJENTAw
NTQyNDQwIC8qIFdBU01Db25zdGFudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjAyNDc1NjFCODY4MkUxMDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMDI0NzUzMUI4NjgyRDUwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuY3BwICov
OyB9OwogCQk3QjAyNDc1NzFCODY4MkU0MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjAyNDc1NDFC
ODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4NzAsNiArMjg3Miw4IEBACiAJCTc5
N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIg
LyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVz
aEluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01h
eGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHTWF4aW1hbEZsdXNoSW5z
ZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IwMjQ3NTIxQjg2
ODJENTAwNTQyNDQwIC8qIFdBU01Db25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0FTTUNvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QjAyNDc1MzFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01GdW5jdGlvblBhcnNlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMDI0NzU0MUI4NjgyRDUwMDU0MjQ0MCAvKiBX
QVNNRnVuY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FT
TUZ1bmN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mjc3LDYg
KzUyODEsOCBAQAogCQkJCUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5oICovLAogCQkJCTBGNTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBE
RkdNYXlFeGl0LmNwcCAqLywKIAkJCQkwRjU4NzRFQzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5
RXhpdC5oICovLAorCQkJCTc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1
c2hJbnNlcnRpb25QaGFzZS5jcHAgKi8sCisJCQkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2NkFCIC8q
IERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi8sCiAJCQkJMEYxNzI1RkUxQjQ4NzE5
QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwICovLAogCQkJCTBGMkJEQzNEMTUyMjgw
MTcwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggKi8sCiAJCQkJMEZCNEI1MTAxNkIzQTk2
NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLywKQEAgLTU5MjQsNiArNTkzMCw3IEBACiAJ
CQkJQTFBMDA5QzExODMxQTI2RTAwQ0Y4NzExIC8qIEFSTTY0QXNzZW1ibGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjg5OEYzMjFCMjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0
aW1pemF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4
NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5RjhGQzFGMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTlGMUE3MDExQjk4RkJFQzAwNDYzQjI2IC8qIEluc3BlY3RvckZyb250ZW5kUm91
dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0
UHV0SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8q
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTc5OTUsNiAr
ODAwMiw3IEBACiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGls
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1
bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OUY4
RkMxRTFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTFENzkyRkMxQjQzODY0QjAwNDUxNkY1IC8qIEludGxOdW1i
ZXJGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE1ODdENzExQjREQzE0MTAwRDY5ODQ5
IC8qIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heGltYWxGbHVzaEluc2Vy
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdNYXhp
bWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgor
ICAgIE1heGltYWxGbHVzaEluc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgIm1heGltYWwgZmx1c2ggaW5zZXJ0aW9uIHBoYXNlIikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbnVsbHB0ciwgbV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlKTsKKworICAgICAgICBJbnNl
cnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICB0
cmVhdFJlZ3VsYXJCbG9jayhibG9jaywgaW5zZXJ0aW9uU2V0KTsKKyAgICAgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyZWF0Um9vdEJs
b2NrKG1fZ3JhcGguYmxvY2soMCksIGluc2VydGlvblNldCk7CisgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKG1fZ3JhcGguYmxvY2soMCkpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHZvaWQgdHJlYXRSZWd1bGFyQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIEluc2Vy
dGlvblNldCYgaW5zZXJ0aW9uU2V0KQorICAgIHsKKyAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVB
Y2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVzQXRUYWls
Lm51bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2Nh
bHMoKSwgbnVsbHB0cik7CisgICAgICAgIC8vIEluc2VydCBhIEZsdXNoIGJlZm9yZSBldmVyeSBT
ZXRMb2NhbCB0byBwcm9wZXJseSBwYXR0ZXJuIHRoZSBncmFwaCBzdWNoIHRoYXQgCisgICAgICAg
IC8vIGFueSByYW5nZSBiZXR3ZWVuIFNldExvY2FsIGFuZCBGbHVzaCBoYXMgYWNjZXNzIHRvIHRo
ZSBsb2NhbCBvbiB0aGUgc3RhY2suCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFNldExvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
ID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiBmbHVzaEFjY2Vzc0RhdGEgPSBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZmx1c2hBY2Nlc3NEYXRhKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZmx1c2hBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9w
ZXJhbmQpOworCisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKGks
IFNwZWNOb25lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoLCBub2RlLT5vcmlnaW4s
IE9wSW5mbyhmbHVzaEFjY2Vzc0RhdGEpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKQorICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZsdXNoIGV2ZXJ5dGhpbmcgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2su
CisgICAgICAgIHsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gYmxvY2stPmF0KGJs
b2NrLT5zaXplKCkgLSAxKS0+b3JpZ2luOworICAgICAgICAgICAgYXV0byBpbnNlcnRGbHVzaEF0
RW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogYWNjZXNzRGF0YSA9IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjY2Vzc0RhdGEpCisgICAgICAg
ICAgICAgICAgICAgIGFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7
CisKKyAgICAgICAgICAgICAgICBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFu
ZCkgPSBhY2Nlc3NEYXRhOworCisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoYmxvY2stPnNpemUoKSwgU3BlY05vbmUsIAorICAgICAgICAgICAgICAgICAgICBGbHVzaCwg
b3JpZ2luLCBPcEluZm8oYWNjZXNzRGF0YSkpOworICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZMb2NhbHMoKTsgaSsrKQorICAgICAgICAgICAgICAgIGluc2VydEZsdXNoQXRFbmQodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaSkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgaSsrKQorICAg
ICAgICAgICAgICAgIGluc2VydEZsdXNoQXRFbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSkpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB0cmVhdFJvb3RCbG9jayhCYXNpY0Js
b2NrKiBibG9jaywgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQpCisgICAgeworICAgICAgICBP
cGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBpbml0aWFsQWNjZXNzRGF0YShibG9jay0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bnVtYmVyT2ZMb2NhbHMoKSwgbnVsbHB0cik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBibG9jay0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSht
X2dyYXBoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5sb2NhbCgpOworICAgICAgICAgICAgaWYgKGluaXRp
YWxBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFuZCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAvLyBGSVhNRTogbWF5YmUgd2Ugc2hvdWxkIGFzc2VydCB0aGlzIGlzIGFs
d2F5cyBhIEZsdXNoLiBCdXQgd291bGQgdGhpcyBldmVyIGJlIGEgR2V0TG9jYWw/CisgICAgICAg
ICAgICAvLyBEbyB3ZSBldmVyIGhhdmUgR2V0TG9jYWxzIGJlZm9yZSBhIFNldExvY2FsIGluIHRo
ZSByb290IGJsb2NrPworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSAhPSBT
ZXRMb2NhbCk7IC8vIFdlIHNob3VsZCBoYXZlIGluc2VydGVkIGEgRmx1c2ggYmVmb3JlIHRoaXMh
CisgICAgICAgICAgICBpbml0aWFsQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSB3YW50IGV2
ZXJ5IEZsdXNoIHRvIGJlIGFibGUgdG8gcmVhY2ggYmFja3dhcmRzIHRvCisgICAgICAgIC8vIGEg
U2V0TG9jYWwuIERvaW5nIHRoaXMgaW4gdGhlIHJvb3QgYmxvY2sgYWNoaWV2ZXMgdGhpcyBnb2Fs
LgorICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IGJsb2NrLT5hdCgwKS0+b3JpZ2luOworICAg
ICAgICBOb2RlKiB1bmRlZmluZWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoMCwgb3Jp
Z2luLCBqc1VuZGVmaW5lZCgpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyBpKyspIHsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSk7
CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGFjY2Vzc0RhdGEgPSBpbml0aWFsQWNj
ZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWNj
ZXNzRGF0YSk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgwLCBTcGVjTm9u
ZSwgCisgICAgICAgICAgICAgICAgU2V0TG9jYWwsIG9yaWdpbiwgT3BJbmZvKGFjY2Vzc0RhdGEp
LCBFZGdlKHVuZGVmaW5lZCkpOworICAgICAgICB9CisgICAgfQorCisKKyAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICAK
KyAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nl
c3NEYXRhLmxhc3QoKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1NYXhpbWFsRmx1c2hJbnNl
cnRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9u
KCJERkcgRmx1c2ggRXZlcnl0aGluZyBJbnNlcnRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVu
UGhhc2U8TWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXhpbWFsRmx1c2hJbnNl
cnRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZV9oCisjZGVmaW5lIERGR01heGltYWxG
bHVzaEluc2VydGlvblBoYXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBUaGlzIHBoYXNlIGVu
c3VyZXMgd2Uga2VlcCBhbGwgbG9jYWxzL2FyZ3VtZW50cyBmbHVzaGVkLgorLy8gV2hhdCB0aGlz
IG1lYW5zIGlzOiBhbnkgbm9kZSBpbmJldHdlZW4gYSBTZXRMb2NhbCBhbmQgYSBGbHVzaCBzaG91
bGQKKy8vIGJlIGFibGUgdG8gb2JzZXJ2ZSB0aGF0IHBhcnRpY3VsYXIgbG9jYWwgb24gdGhlIHN0
YWNrLiBUaGlzIHBoYXNlIHBhdHRlcm5zCisvLyB0aGUgZ3JhcGggYnkgaW5zZXJ0aW5nIGEgRmx1
c2ggYmVmb3JlIGVhY2ggU2V0TG9jYWwgc3VjaCB0aGF0IHRoZSBGbHVzaCAKKy8vIHdlIGluc2Vy
dGVkIGNhbiBkbyBhIGJhY2t3YXJkcyBzZWFyY2ggdGhyb3VnaCBhbGwgcGF0aHMgaW4gdGhlIENG
RyBhbmQgCisvLyByZWFjaCBhIFNldExvY2FsLgorLy8gLi4uLgorLy8gU2V0TG9jYWwobG9jWCkK
Ky8vIDwKKy8vIHwKKy8vIC4uLiBXZSBlbnN1cmUgdGhhdCBsb2NYIGlzIGF2YWlsYWJsZSBvbiB0
aGUgc3RhY2sgdG8gYW55IG5vZGVzIGluIHRoaXMgcmVnaW9uIHRoYXQgbWF5IGFzayBmb3IgbG9j
WC4KKy8vIHwKKy8vID4KKy8vIEZsdXNoKGxvY1gpCisvLyBTZXRMb2NhbChsb2NYKQorCitib29s
IHBlcmZvcm1NYXhpbWFsRmx1c2hJbnNlcnRpb24oR3JhcGgmIGdyYXBoKTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE4OTUzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNp
bmNsdWRlICJERkdEQ0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZhaWxlZEZpbmFsaXplci5oIgog
I2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKKyNpbmNsdWRlICJERkdNYXhpbWFsRmx1c2hJbnNl
cnRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoU2FmZXBvaW50LmgiCiAjaW5jbHVkZSAi
REZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdJbnRlZ2VyUmFu
Z2VPcHRpbWl6YXRpb25QaGFzZS5oIgpAQCAtMjU1LDYgKzI1Niw5IEBAIFBsYW46OkNvbXBpbGF0
aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIg
cGFyc2luZzpcbiIpOwogICAgICAgICBkZmcuZHVtcCgpOwogICAgIH0KKworICAgIGlmIChPcHRp
b25zOjplbmFibGVNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZSgpKQorICAgICAgICBwZXJmb3Jt
TWF4aW1hbEZsdXNoSW5zZXJ0aW9uKGRmZyk7CiAgICAgCiAgICAgcGVyZm9ybUNQU1JldGhyZWFk
aW5nKGRmZyk7CiAgICAgcGVyZm9ybVVuaWZpY2F0aW9uKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTg5NTMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxOSw2ICszMTksMTAgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygp
CiAgICAgICAgIE9wdGlvbnM6Om1heGltdW1FdmFsQ2FjaGVhYmxlU291cmNlTGVuZ3RoKCkgPSAx
NTAwMDA7CiAgICAgICAgIE9wdGlvbnM6OmVuYWJsZUNvbmN1cnJlbnRKSVQoKSA9IGZhbHNlOwog
ICAgIH0KKyAgICBpZiAoT3B0aW9uczo6ZW5hYmxlTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2Uo
KSkgeworICAgICAgICBPcHRpb25zOjplbmFibGVPU1JFbnRyeVRvREZHKCkgPSBmYWxzZTsKKyAg
ICAgICAgT3B0aW9uczo6ZW5hYmxlT1NSRW50cnlUb0ZUTCgpID0gZmFsc2U7CisgICAgfQogCiAg
ICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgcmVvcHRpbWl6YXRpb24gcmV0
cnkgY291bnRlci4gVGhpcyBpcyBzaW1wbHkKICAgICAvLyB0aGUgbGFyZ2VzdCB2YWx1ZSBhdCB3
aGljaCB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgZXhlY3V0ZSBjb3VudGVyLCB3aGVuIHVzaW5nIGl0
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAx
ODk1MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzOCw2ICsyMzgsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0
cmluZzsKICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50Q2FsbElubGluaW5nLCB0cnVlLCBu
dWxscHRyKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudEJ5SWRJbmxpbmluZywgdHJ1
ZSwgbnVsbHB0cikgXAogICAgIFwKKyAgICB2KGJvb2wsIGVuYWJsZU1heGltYWxGbHVzaEluc2Vy
dGlvblBoYXNlLCBmYWxzZSwgIlNldHRpbmcgdG8gdHJ1ZSBlbmFibGVzIHRoZSBERkcncyBNYXhp
bWFsRmx1c2hJbnNlcnRpb25QaGFzZSB0byBydW4uIikgXAorICAgIFwKICAgICB2KHVuc2lnbmVk
LCBtYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoQ2FzZUxlbmd0aCwgNTAsIG51bGxwdHIpIFwKICAg
ICB2KHVuc2lnbmVkLCBtYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoVG90YWxMZW5ndGgsIDIwMDAs
IG51bGxwdHIpIFwKICAgICBcCkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHJl
dmlzaW9uIDE4OTUzMikKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHdv
cmtpbmcgY29weSkKQEAgLTc4NSw2ICs3ODUsMTAgQEAgZGVmIHJ1bk1pc2NGVExOb0NKSVRUZXN0
KCpvcHRpb25zKQogICAgIHJ1bigibWlzYy1mdGwtbm8tY2ppdCIsICooRlRMX09QVElPTlMgKyBO
T19DSklUX09QVElPTlMgKyBvcHRpb25zKSkKIGVuZAogCitkZWYgcnVuREZHTWF4aW1hbEZsdXNo
UGhhc2UKKyAgICBydW4oImRmZy1tYXhpbWFsLWZsdXNoLXZhbGlkYXRlLW5vLWNqaXQiLCAiLS12
YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS1lbmFibGVNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZT10
cnVlIiwgKk5PX0NKSVRfT1BUSU9OUykKK2VuZAorCiBkZWYgZGVmYXVsdFJ1bgogICAgIHJ1bkRl
ZmF1bHQKICAgICBydW5BbHdheXNUcmlnZ2VyQ29weVBoYXNlCkBAIC03OTksNiArODAzLDcgQEAg
ZGVmIGRlZmF1bHRSdW4KICAgICAgICAgcnVuRlRMRWFnZXIKICAgICAgICAgcnVuRlRMRWFnZXJO
b0NKSVRWYWxpZGF0ZQogICAgICAgICBydW5GVExOb0NKSVRTbWFsbFBvb2wKKyAgICAgICAgcnVu
REZHTWF4aW1hbEZsdXNoUGhhc2UKICAgICBlbmQKIGVuZAogCkBAIC04MjAsNiArODI1LDcgQEAg
ZGVmIGRlZmF1bHRTcG90Q2hlY2sKICAgICBydW5GVExOb0NKSVRPU1JWYWxpZGF0aW9uCiAgICAg
cnVuTm9DSklUTm9BY2Nlc3NJbmxpbmluZwogICAgIHJ1bkZUTE5vQ0pJVE5vQWNjZXNzSW5saW5p
bmcKKyAgICBydW5ERkdNYXhpbWFsRmx1c2hQaGFzZQogZW5kCiAKICMgVGhpcyBpcyBleHBlY3Rl
ZCB0byBub3QgZG8gZWFnZXIgcnVucyBiZWNhdXNlIGVhZ2VyIHJ1bnMgY2FuIGhhdmUgYSBsb3Qg
b2YgcmVjb21waWxhdGlvbnMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260845</attachid>
            <date>2015-09-08 23:56:41 -0700</date>
            <delta_ts>2015-09-09 12:27:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>21031</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4OTUzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMjA0LDYgKzIwNCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKICAgICBkZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3Bw
CiAgICAgZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdN
YXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHTWF5RXhpdC5jcHAKICAg
ICBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODk1
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsNiArNDQxLDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb25nTGl2ZWRTdGF0ZS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heUV4aXQuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heGltYWxGbHVzaEluc2Vy
dGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5p
ZmllZEdyYXBoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5p
ZmllZE5vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01vdkhp
bnRSZW1vdmFsUGhhc2UuY3BwIiAvPgpAQCAtMTE3Myw2ICsxMTc0LDcgQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb25nTGl2ZWRTdGF0ZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWF5RXhpdC5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRHcmFwaC5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkSUQuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUuaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlz
aW9uIDE4OTUzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTc0
Niw2ICsxNzQ2LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNYXlFeGl0
LmNwcCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNl
LmNwcCI+CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5jcHAiPgogICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTQzNDAsNiArNDM0Myw5IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWF5RXhpdC5oIj4KICAgICAgIDxG
aWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaCI+CisgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTg5NTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwMzgsNiArMTAzOCw4IEBA
CiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3
QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlFRTBCRkYxQjRB
RkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8q
IFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OUVFMEMwMDFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52
aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3OUY4RkMxRTFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNl
LmNwcCAqLzsgfTsKKwkJNzlGOEZDMUYxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVz
aEluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUY4RkMxRDFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3QjAyNDc1NTFCODY4MkREMDA1NDI0NDAgLyogV0FTTUNvbnN0YW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IwMjQ3NTIxQjg2ODJENTAw
NTQyNDQwIC8qIFdBU01Db25zdGFudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QjAyNDc1NjFCODY4MkUxMDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCMDI0NzUzMUI4NjgyRDUwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuY3BwICov
OyB9OwogCQk3QjAyNDc1NzFCODY4MkU0MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjAyNDc1NDFC
ODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4NzAsNiArMjg3Miw4IEBACiAJCTc5
N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIg
LyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVz
aEluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01h
eGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHTWF4aW1hbEZsdXNoSW5z
ZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IwMjQ3NTIxQjg2
ODJENTAwNTQyNDQwIC8qIFdBU01Db25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0FTTUNvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QjAyNDc1MzFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01GdW5jdGlvblBhcnNlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMDI0NzU0MUI4NjgyRDUwMDU0MjQ0MCAvKiBX
QVNNRnVuY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FT
TUZ1bmN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mjc3LDYg
KzUyODEsOCBAQAogCQkJCUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5oICovLAogCQkJCTBGNTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBE
RkdNYXlFeGl0LmNwcCAqLywKIAkJCQkwRjU4NzRFQzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5
RXhpdC5oICovLAorCQkJCTc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1
c2hJbnNlcnRpb25QaGFzZS5jcHAgKi8sCisJCQkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2NkFCIC8q
IERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi8sCiAJCQkJMEYxNzI1RkUxQjQ4NzE5
QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwICovLAogCQkJCTBGMkJEQzNEMTUyMjgw
MTcwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggKi8sCiAJCQkJMEZCNEI1MTAxNkIzQTk2
NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLywKQEAgLTU5MjQsNiArNTkzMCw3IEBACiAJ
CQkJQTFBMDA5QzExODMxQTI2RTAwQ0Y4NzExIC8qIEFSTTY0QXNzZW1ibGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjg5OEYzMjFCMjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0
aW1pemF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4
NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5RjhGQzFGMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTlGMUE3MDExQjk4RkJFQzAwNDYzQjI2IC8qIEluc3BlY3RvckZyb250ZW5kUm91
dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0
UHV0SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8q
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTc5OTUsNiAr
ODAwMiw3IEBACiAJCQkJMEZBMkMxN0IxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGls
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1
bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OUY4
RkMxRTFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTFENzkyRkMxQjQzODY0QjAwNDUxNkY1IC8qIEludGxOdW1i
ZXJGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE1ODdENzExQjREQzE0MTAwRDY5ODQ5
IC8qIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heGltYWxGbHVzaEluc2Vy
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdNYXhp
bWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgor
ICAgIE1heGltYWxGbHVzaEluc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgIm1heGltYWwgZmx1c2ggaW5zZXJ0aW9uIHBoYXNlIikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbnVsbHB0ciwgbV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlKTsKKworICAgICAgICBJbnNl
cnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICB0
cmVhdFJlZ3VsYXJCbG9jayhibG9jaywgaW5zZXJ0aW9uU2V0KTsKKyAgICAgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyZWF0Um9vdEJs
b2NrKG1fZ3JhcGguYmxvY2soMCksIGluc2VydGlvblNldCk7CisgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKG1fZ3JhcGguYmxvY2soMCkpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHZvaWQgdHJlYXRSZWd1bGFyQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIEluc2Vy
dGlvblNldCYgaW5zZXJ0aW9uU2V0KQorICAgIHsKKyAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVB
Y2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVzQXRUYWls
Lm51bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2Nh
bHMoKSwgbnVsbHB0cik7CisgICAgICAgIC8vIEluc2VydCBhIEZsdXNoIGJlZm9yZSBldmVyeSBT
ZXRMb2NhbCB0byBwcm9wZXJseSBwYXR0ZXJuIHRoZSBncmFwaCBzdWNoIHRoYXQgCisgICAgICAg
IC8vIGFueSByYW5nZSBiZXR3ZWVuIFNldExvY2FsIGFuZCBGbHVzaCBoYXMgYWNjZXNzIHRvIHRo
ZSBsb2NhbCBvbiB0aGUgc3RhY2suCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIGJvb2wgaXNQcmltb3JkaWFs
U2V0QXJndW1lbnQgPSBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50ICYmIG5vZGUtPmxvY2FsKCku
aXNBcmd1bWVudCgpICYmIG5vZGUgPT0gbV9ncmFwaC5tX2FyZ3VtZW50c1tub2RlLT5sb2NhbCgp
LnRvQXJndW1lbnQoKV07CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9j
YWwgfHwgKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgJiYgIWlzUHJpbW9yZGlhbFNldEFyZ3Vt
ZW50KSkgeworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5v
ZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZmx1
c2hBY2Nlc3NEYXRhID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWZsdXNoQWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZsdXNoQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
KTsKKworICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpLCBTcGVj
Tm9uZSwgCisgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaCwgbm9kZS0+b3JpZ2luLCBPcElu
Zm8oZmx1c2hBY2Nlc3NEYXRhKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBGbHVzaCBldmVyeXRoaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLgorICAg
ICAgICB7CisgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IGJsb2NrLT5hdChibG9jay0+
c2l6ZSgpIC0gMSktPm9yaWdpbjsKKyAgICAgICAgICAgIGF1dG8gaW5zZXJ0Rmx1c2hBdEVuZCA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIGFjY2Vzc0RhdGEgPSBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3NEYXRhKQorICAgICAgICAgICAg
ICAgICAgICBhY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworCisg
ICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpID0g
YWNjZXNzRGF0YTsKKworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKGJs
b2NrLT5zaXplKCksIFNwZWNOb25lLCAKKyAgICAgICAgICAgICAgICAgICAgRmx1c2gsIG9yaWdp
biwgT3BJbmZvKGFjY2Vzc0RhdGEpKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9j
YWxzKCk7IGkrKykKKyAgICAgICAgICAgICAgICBpbnNlcnRGbHVzaEF0RW5kKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGkpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7IGkrKykKKyAgICAgICAg
ICAgICAgICBpbnNlcnRGbHVzaEF0RW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdHJlYXRSb290QmxvY2soQmFzaWNCbG9jayog
YmxvY2ssIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0KQorICAgIHsKKyAgICAgICAgT3BlcmFu
ZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gaW5pdGlhbEFjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJl
ck9mTG9jYWxzKCksIG51bGxwdHIpOworICAgICAgICBPcGVyYW5kczxOb2RlKj4gaW5pdGlhbEFj
Y2Vzc05vZGVzKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSwgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBudWxscHRyKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7IGkrKykgeworICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+aGFz
VmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7Cisg
ICAgICAgICAgICBpZiAoaW5pdGlhbEFjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCBub2RlLT5vcCgpICE9IFNldExvY2FsKTsgLy8gV2Ugc2hvdWxkIGhhdmUgaW5zZXJ0ZWQg
YSBGbHVzaCBiZWZvcmUgdGhpcyEKKyAgICAgICAgICAgIGluaXRpYWxBY2Nlc3NEYXRhLm9wZXJh
bmQob3BlcmFuZCkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIGlu
aXRpYWxBY2Nlc3NOb2Rlcy5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFdlIHdhbnQgZXZlcnkgRmx1c2ggdG8gYmUgYWJsZSB0byByZWFjaCBiYWNrd2Fy
ZHMgdG8KKyAgICAgICAgLy8gYSBTZXRMb2NhbC4gRG9pbmcgdGhpcyBpbiB0aGUgcm9vdCBibG9j
ayBhY2hpZXZlcyB0aGlzIGdvYWwuCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gYmxvY2st
PmF0KDApLT5vcmlnaW47CisgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IGluc2VydGlvblNldC5p
bnNlcnRDb25zdGFudCgwLCBvcmlnaW4sIGpzVW5kZWZpbmVkKCkpOworCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCk7IGkrKykgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChpKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogYWNj
ZXNzRGF0YTsKKyAgICAgICAgICAgIGlmIChpbml0aWFsQWNjZXNzTm9kZXMub3BlcmFuZChvcGVy
YW5kKS0+b3AoKSA9PSBGbHVzaCkKKyAgICAgICAgICAgICAgICBhY2Nlc3NEYXRhID0gaW5pdGlh
bEFjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgaW5pdGlhbEFjY2Vzc05vZGVz
Lm9wZXJhbmQob3BlcmFuZCktPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG51bGxwdHIsIGFjY2Vzc0RhdGEpOworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoMCwgU3BlY05vbmUsIAorICAgICAgICAgICAgICAgIFNldExvY2FsLCBvcmlnaW4sIE9w
SW5mbyhhY2Nlc3NEYXRhKSwgRWRnZSh1bmRlZmluZWQpKTsKKyAgICAgICAgfQorICAgIH0KKwor
CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgeworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFu
dCgpKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBw
ZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiAmbV9ncmFw
aC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3Jt
TWF4aW1hbEZsdXNoSW5zZXJ0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbigiREZHIEZsdXNoIEV2ZXJ5dGhpbmcgSW5zZXJ0aW9uIFBoYXNlIik7
CisgICAgcmV0dXJuIHJ1blBoYXNlPE1heGltYWxGbHVzaEluc2VydGlvblBoYXNlPihncmFwaCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXhpbWFsRmx1c2hJbnNl
cnRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2VfaAorI2Rl
ZmluZSBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKwor
Ly8gVGhpcyBwaGFzZSBlbnN1cmVzIHdlIGtlZXAgYWxsIGxvY2Fscy9hcmd1bWVudHMgZmx1c2hl
ZC4KKy8vIFdoYXQgdGhpcyBtZWFucyBpczogYW55IG5vZGUgaW5iZXR3ZWVuIGEgU2V0TG9jYWwg
YW5kIGEgRmx1c2ggc2hvdWxkCisvLyBiZSBhYmxlIHRvIG9ic2VydmUgdGhhdCBwYXJ0aWN1bGFy
IGxvY2FsIG9uIHRoZSBzdGFjay4gVGhpcyBwaGFzZSBwYXR0ZXJucworLy8gdGhlIGdyYXBoIGJ5
IGluc2VydGluZyBhIEZsdXNoIGJlZm9yZSBlYWNoIFNldExvY2FsIHN1Y2ggdGhhdCB0aGUgRmx1
c2ggCisvLyB3ZSBpbnNlcnRlZCBjYW4gZG8gYSBiYWNrd2FyZHMgc2VhcmNoIHRocm91Z2ggYWxs
IHBhdGhzIGluIHRoZSBDRkcgYW5kIAorLy8gcmVhY2ggYSBTZXRMb2NhbC4KKy8vIC4uLi4KKy8v
IFNldExvY2FsKGxvY1gpCisvLyA8CisvLyB8CisvLyAuLi4gV2UgZW5zdXJlIHRoYXQgbG9jWCBp
cyBhdmFpbGFibGUgb24gdGhlIHN0YWNrIHRvIGFueSBub2RlcyBpbiB0aGlzIHJlZ2lvbiB0aGF0
IG1heSBhc2sgZm9yIGxvY1guCisvLyB8CisvLyA+CisvLyBGbHVzaChsb2NYKQorLy8gU2V0TG9j
YWwobG9jWCkKKworYm9vbCBwZXJmb3JtTWF4aW1hbEZsdXNoSW5zZXJ0aW9uKEdyYXBoJik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2VfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxODk1MzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCw3IEBACiAjaW5jbHVkZSAiREZHTElDTVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
aCIKKyNpbmNsdWRlICJERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oIgogI2luY2x1ZGUg
IkRGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCIKICNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uu
aCIKQEAgLTI1NSw2ICsyNTYsOSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGls
ZUluVGhyCiAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIHBhcnNpbmc6XG4iKTsKICAgICAg
ICAgZGZnLmR1bXAoKTsKICAgICB9CisKKyAgICBpZiAoT3B0aW9uczo6ZW5hYmxlTWF4aW1hbEZs
dXNoSW5zZXJ0aW9uUGhhc2UoKSkKKyAgICAgICAgcGVyZm9ybU1heGltYWxGbHVzaEluc2VydGlv
bihkZmcpOwogICAgIAogICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgIHBlcmZv
cm1VbmlmaWNhdGlvbihkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHJldmlzaW9uIDE4OTUzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNiArMzE5LDEwIEBAIHN0
YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgICAgICBPcHRpb25zOjpt
YXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCgpID0gMTUwMDAwOwogICAgICAgICBPcHRp
b25zOjplbmFibGVDb25jdXJyZW50SklUKCkgPSBmYWxzZTsKICAgICB9CisgICAgaWYgKE9wdGlv
bnM6OmVuYWJsZU1heGltYWxGbHVzaEluc2VydGlvblBoYXNlKCkpIHsKKyAgICAgICAgT3B0aW9u
czo6ZW5hYmxlT1NSRW50cnlUb0RGRygpID0gZmFsc2U7CisgICAgICAgIE9wdGlvbnM6OmVuYWJs
ZU9TUkVudHJ5VG9GVEwoKSA9IGZhbHNlOworICAgIH0KIAogICAgIC8vIENvbXB1dGUgdGhlIG1h
eGltdW0gdmFsdWUgb2YgdGhlIHJlb3B0aW1pemF0aW9uIHJldHJ5IGNvdW50ZXIuIFRoaXMgaXMg
c2ltcGx5CiAgICAgLy8gdGhlIGxhcmdlc3QgdmFsdWUgYXQgd2hpY2ggd2UgZG9uJ3Qgb3ZlcmZs
b3cgdGhlIGV4ZWN1dGUgY291bnRlciwgd2hlbiB1c2luZyBpdApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTg5NTMyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsNiAr
MjM4LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCBl
bmFibGVQb2x5dmFyaWFudENhbGxJbmxpbmluZywgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYoYm9v
bCwgZW5hYmxlUG9seXZhcmlhbnRCeUlkSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwKICAgICBc
CisgICAgdihib29sLCBlbmFibGVNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZSwgZmFsc2UsICJT
ZXR0aW5nIHRvIHRydWUgZW5hYmxlcyB0aGUgREZHJ3MgTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhh
c2UgdG8gcnVuLiIpIFwKKyAgICBcCiAgICAgdih1bnNpZ25lZCwgbWF4aW11bUJpbmFyeVN0cmlu
Z1N3aXRjaENhc2VMZW5ndGgsIDUwLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgbWF4aW11
bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3RoLCAyMDAwLCBudWxscHRyKSBcCiAgICAgXApJ
bmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAxODk1MzIpCisrKyBU
b29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC03ODUs
NiArNzg1LDEwIEBAIGRlZiBydW5NaXNjRlRMTm9DSklUVGVzdCgqb3B0aW9ucykKICAgICBydW4o
Im1pc2MtZnRsLW5vLWNqaXQiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0
aW9ucykpCiBlbmQKIAorZGVmIHJ1bkRGR01heGltYWxGbHVzaFBoYXNlCisgICAgcnVuKCJkZmct
bWF4aW1hbC1mbHVzaC12YWxpZGF0ZS1uby1jaml0IiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwg
Ii0tZW5hYmxlTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2U9dHJ1ZSIsICpOT19DSklUX09QVElP
TlMpCitlbmQKKwogZGVmIGRlZmF1bHRSdW4KICAgICBydW5EZWZhdWx0CiAgICAgcnVuQWx3YXlz
VHJpZ2dlckNvcHlQaGFzZQpAQCAtNzk5LDYgKzgwMyw3IEBAIGRlZiBkZWZhdWx0UnVuCiAgICAg
ICAgIHJ1bkZUTEVhZ2VyCiAgICAgICAgIHJ1bkZUTEVhZ2VyTm9DSklUVmFsaWRhdGUKICAgICAg
ICAgcnVuRlRMTm9DSklUU21hbGxQb29sCisgICAgICAgIHJ1bkRGR01heGltYWxGbHVzaFBoYXNl
CiAgICAgZW5kCiBlbmQKIApAQCAtODIwLDYgKzgyNSw3IEBAIGRlZiBkZWZhdWx0U3BvdENoZWNr
CiAgICAgcnVuRlRMTm9DSklUT1NSVmFsaWRhdGlvbgogICAgIHJ1bk5vQ0pJVE5vQWNjZXNzSW5s
aW5pbmcKICAgICBydW5GVExOb0NKSVROb0FjY2Vzc0lubGluaW5nCisgICAgcnVuREZHTWF4aW1h
bEZsdXNoUGhhc2UKIGVuZAogCiAjIFRoaXMgaXMgZXhwZWN0ZWQgdG8gbm90IGRvIGVhZ2VyIHJ1
bnMgYmVjYXVzZSBlYWdlciBydW5zIGNhbiBoYXZlIGEgbG90IG9mIHJlY29tcGlsYXRpb25zCg==
</data>
<flag name="review"
          id="286037"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="286057"
          type_id="3"
          status="-"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>