<?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>135563</bug_id>
          
          <creation_ts>2014-08-04 05:48:00 -0700</creation_ts>
          <short_desc>ASSERTION  FAILED in WebCore::RenderFlowThread::getRegionRangeForBox</short_desc>
          <delta_ts>2014-10-15 23:50:36 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          <dependson>132946</dependson>
          <blocked>116980</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Renata Hodovan">rhodovan.u-szeged</reporter>
          <assigned_to name="Andrei Bucur">abucur</assigned_to>
          <cc>abucur</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mihnea</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1026623</commentid>
    <comment_count>0</comment_count>
      <attachid>235972</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2014-08-04 05:48:00 -0700</bug_when>
    <thetext>Created attachment 235972
Test case

The following test fails on debug WebKit (r171973):

&lt;style&gt;
* {
    -webkit-columns:2;
    position:absolute;
}
&lt;/style&gt;a


Backtrace:

ASSERTION FAILED: isRenderView() || (region &amp;&amp; flowThread)
../../Source/WebCore/rendering/RenderBox.cpp(140) : WebCore::RenderRegion* WebCore::RenderBox::clampToStartAndEndRegions(WebCore::RenderRegion*) const

....

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff97334700 (LWP 16769)]
0x00007ffff30191c8 in WTFCrash () at ../../Source/WTF/wtf/Assertions.cpp:329
329	    *(int *)(uintptr_t)0xbbadbeef = 0;
#0  0x00007ffff30191c8 in WTFCrash () at ../../Source/WTF/wtf/Assertions.cpp:329
#1  0x00007ffff3da4476 in WebCore::RenderBox::clampToStartAndEndRegions (this=0x7da270, region=0x79e090) at ../../Source/WebCore/rendering/RenderBox.cpp:140
#2  0x00007ffff3db2bc4 in WebCore::RenderBox::containingBlockLogicalWidthForPositioned (this=0x7da340, containingBlock=0x7da270, region=0x79e090, checkForPerpendicularWritingMode=true) at ../../Source/WebCore/rendering/RenderBox.cpp:3102
#3  0x00007ffff3db38b8 in WebCore::RenderBox::computePositionedLogicalWidth (this=0x7da340, computedValues=..., region=0x79e090) at ../../Source/WebCore/rendering/RenderBox.cpp:3251
#4  0x00007ffff3dae3a3 in WebCore::RenderBox::computeLogicalWidthInRegion (this=0x7da340, computedValues=..., region=0x79e090) at ../../Source/WebCore/rendering/RenderBox.cpp:2274
#5  0x00007ffff3dafcf8 in WebCore::RenderBox::renderBoxRegionInfo (this=0x7da340, region=0x79e090, cacheFlag=WebCore::RenderBox::CacheRenderBoxRegionInfo) at ../../Source/WebCore/rendering/RenderBox.cpp:2555
#6  0x00007ffff3da4999 in WebCore::RenderBox::borderBoxRectInRegion (this=0x91c500, region=0x79e090, cacheFlag=WebCore::RenderBox::CacheRenderBoxRegionInfo) at ../../Source/WebCore/rendering/RenderBox.cpp:212
#7  0x00007ffff3d575da in WebCore::RenderBlock::logicalLeftOffsetForContent (this=0x91c500, region=0x79e090) at ../../Source/WebCore/rendering/RenderBlock.cpp:2373
#8  0x00007ffff3d628b4 in WebCore::RenderBlock::logicalLeftOffsetForContent (this=0x91c500, blockOffset=...) at ../../Source/WebCore/rendering/RenderBlock.h:273
#9  0x00007ffff3d625f5 in WebCore::RenderBlock::logicalLeftOffsetForLine (this=0x91c500, position=..., shouldIndentText=true, logicalHeight=...) at ../../Source/WebCore/rendering/RenderBlock.h:158
#10 0x00007ffff3f5d4f5 in WebCore::LineWidth::updateAvailableWidth (this=0x7fffffffab80, replacedHeight=...) at ../../Source/WebCore/rendering/line/LineWidth.cpp:73
#11 0x00007ffff3f5d3e2 in WebCore::LineWidth::LineWidth (this=0x7fffffffab80, block=..., isFirstLine=true, shouldIndentText=WebCore::IndentText) at ../../Source/WebCore/rendering/line/LineWidth.cpp:51
#12 0x00007ffff3f55451 in WebCore::LineBreaker::nextSegmentBreak (this=0x7fffffffaea0, resolver=..., lineInfo=..., renderTextInfo=..., lastFloatFromPreviousLine=0x0, consecutiveHyphenatedLines=0, wordMeasurements=...) at ../../Source/WebCore/rendering/line/LineBreaker.cpp:93
#13 0x00007ffff3f55323 in WebCore::LineBreaker::nextLineBreak (this=0x7fffffffaea0, resolver=..., lineInfo=..., renderTextInfo=..., lastFloatFromPreviousLine=0x0, consecutiveHyphenatedLines=0, wordMeasurements=...) at ../../Source/WebCore/rendering/line/LineBreaker.cpp:82
#14 0x00007ffff3d94f7c in WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange (this=0x91c500, layoutState=..., resolver=..., cleanLineStart=..., cleanLineBidiStatus=..., consecutiveHyphenatedLines=0) at ../../Source/WebCore/rendering/RenderBlockLineLayout.cpp:1081
#15 0x00007ffff3d94b58 in WebCore::RenderBlockFlow::layoutRunsAndFloats (this=0x91c500, layoutState=..., hasInlineChild=true) at ../../Source/WebCore/rendering/RenderBlockLineLayout.cpp:1025
#16 0x00007ffff3d97223 in WebCore::RenderBlockFlow::layoutLineBoxes (this=0x91c500, relayoutChildren=false, repaintLogicalTop=..., repaintLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockLineLayout.cpp:1442
#17 0x00007ffff3d7b54e in WebCore::RenderBlockFlow::layoutInlineChildren (this=0x91c500, relayoutChildren=false, repaintLogicalTop=..., repaintLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:652
#18 0x00007ffff3d7a934 in WebCore::RenderBlockFlow::layoutBlock (this=0x91c500, relayoutChildren=false, pageLogicalHeight=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:483
#19 0x00007ffff3d50987 in WebCore::RenderBlock::layout (this=0x91c500) at ../../Source/WebCore/rendering/RenderBlock.cpp:1018
#20 0x00007ffff3e06af7 in WebCore::RenderFlowThread::layout (this=0x91c500) at ../../Source/WebCore/rendering/RenderFlowThread.cpp:201
#21 0x00007ffff3ea57be in WebCore::RenderMultiColumnFlowThread::layout (this=0x91c500) at ../../Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp:135
#22 0x00007ffff3d8908a in WebCore::RenderBlockFlow::layoutSpecialExcludedChild (this=0x7da340, relayoutChildren=true) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:3629
#23 0x00007ffff3d7b338 in WebCore::RenderBlockFlow::layoutBlockChildren (this=0x7da340, relayoutChildren=true, maxFloatLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:604
#24 0x00007ffff3d7a958 in WebCore::RenderBlockFlow::layoutBlock (this=0x7da340, relayoutChildren=true, pageLogicalHeight=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:485
#25 0x00007ffff3d50987 in WebCore::RenderBlock::layout (this=0x7da340) at ../../Source/WebCore/rendering/RenderBlock.cpp:1018
#26 0x00007ffff3d1ddd7 in WebCore::RenderElement::layoutIfNeeded (this=0x7da340) at ../../Source/WebCore/rendering/RenderElement.h:102
#27 0x00007ffff3d52697 in WebCore::RenderBlock::layoutPositionedObjects (this=0x7da270, relayoutChildren=true, fixedPositionObjectsOnly=false) at ../../Source/WebCore/rendering/RenderBlock.cpp:1455
#28 0x00007ffff3d7add4 in WebCore::RenderBlockFlow::layoutBlock (this=0x7da270, relayoutChildren=true, pageLogicalHeight=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:524
#29 0x00007ffff3d50987 in WebCore::RenderBlock::layout (this=0x7da270) at ../../Source/WebCore/rendering/RenderBlock.cpp:1018
#30 0x00007ffff3d1ddd7 in WebCore::RenderElement::layoutIfNeeded (this=0x7da270) at ../../Source/WebCore/rendering/RenderElement.h:102
#31 0x00007ffff3d52697 in WebCore::RenderBlock::layoutPositionedObjects (this=0x8c1e20, relayoutChildren=true, fixedPositionObjectsOnly=false) at ../../Source/WebCore/rendering/RenderBlock.cpp:1455
#32 0x00007ffff3d7add4 in WebCore::RenderBlockFlow::layoutBlock (this=0x8c1e20, relayoutChildren=true, pageLogicalHeight=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:524
#33 0x00007ffff3d50987 in WebCore::RenderBlock::layout (this=0x8c1e20) at ../../Source/WebCore/rendering/RenderBlock.cpp:1018
#34 0x00007ffff3f28aad in WebCore::RenderView::layoutContent (this=0x8c1e20, state=...) at ../../Source/WebCore/rendering/RenderView.cpp:232
#35 0x00007ffff3f29166 in WebCore::RenderView::layout (this=0x8c1e20) at ../../Source/WebCore/rendering/RenderView.cpp:357
#36 0x00007ffff3acf1f4 in WebCore::FrameView::layout (this=0xa09710, allowSubtree=true) at ../../Source/WebCore/page/FrameView.cpp:1282
#37 0x00007ffff353f72f in WebCore::Document::implicitClose (this=0x8b90b0) at ../../Source/WebCore/dom/Document.cpp:2438
#38 0x00007ffff399e745 in WebCore::FrameLoader::checkCallImplicitClose (this=0x9fc3e8) at ../../Source/WebCore/loader/FrameLoader.cpp:898
#39 0x00007ffff399e4f0 in WebCore::FrameLoader::checkCompleted (this=0x9fc3e8) at ../../Source/WebCore/loader/FrameLoader.cpp:844
#40 0x00007ffff399e278 in WebCore::FrameLoader::finishedParsing (this=0x9fc3e8) at ../../Source/WebCore/loader/FrameLoader.cpp:764
#41 0x00007ffff35470db in WebCore::Document::finishedParsing (this=0x8b90b0) at ../../Source/WebCore/dom/Document.cpp:4519
#42 0x00007ffff383a805 in WebCore::HTMLConstructionSite::finishedParsing (this=0xa09ff8) at ../../Source/WebCore/html/parser/HTMLConstructionSite.cpp:395
#43 0x00007ffff3874c57 in WebCore::HTMLTreeBuilder::finished (this=0xa09fe0) at ../../Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2997
#44 0x00007ffff38423a0 in WebCore::HTMLDocumentParser::end (this=0x7a6530) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:451
#45 0x00007ffff384248b in WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd (this=0x7a6530) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:462
#46 0x00007ffff3840ff9 in WebCore::HTMLDocumentParser::prepareToStopParsing (this=0x7a6530) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:165
#47 0x00007ffff38424ce in WebCore::HTMLDocumentParser::attemptToEnd (this=0x7a6530) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:474
#48 0x00007ffff3842585 in WebCore::HTMLDocumentParser::finish (this=0x7a6530) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:502
#49 0x00007ffff3991445 in WebCore::DocumentWriter::end (this=0x850a80) at ../../Source/WebCore/loader/DocumentWriter.cpp:250
#50 0x00007ffff397e49b in WebCore::DocumentLoader::finishedLoading (this=0x8509e0, finishTime=0) at ../../Source/WebCore/loader/DocumentLoader.cpp:441
#51 0x00007ffff397e204 in WebCore::DocumentLoader::notifyFinished (this=0x8509e0, resource=0x88b840) at ../../Source/WebCore/loader/DocumentLoader.cpp:375
#52 0x00007ffff3a24a99 in WebCore::CachedResource::checkNotify (this=0x88b840) at ../../Source/WebCore/loader/cache/CachedResource.cpp:334
#53 0x00007ffff3a24b80 in WebCore::CachedResource::finishLoading (this=0x88b840) at ../../Source/WebCore/loader/cache/CachedResource.cpp:350
#54 0x00007ffff3a21b3a in WebCore::CachedRawResource::finishLoading (this=0x88b840, data=0x820e30) at ../../Source/WebCore/loader/cache/CachedRawResource.cpp:98
#55 0x00007ffff39d87da in WebCore::SubresourceLoader::didFinishLoading (this=0x914620, finishTime=0) at ../../Source/WebCore/loader/SubresourceLoader.cpp:310
#56 0x00007ffff39d4cc7 in WebCore::ResourceLoader::didFinishLoading (this=0x914620, finishTime=0) at ../../Source/WebCore/loader/ResourceLoader.cpp:517
#57 0x00007ffff4297429 in WebCore::readCallback (asyncResult=0x9e81d0, data=0x914c90) at ../../Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:1302
#58 0x00007fffec1d82ea in async_ready_callback_wrapper (source_object=0x98cb30, res=0x9e81d0, user_data=0x914c90) at ginputstream.c:519
#59 0x00007fffec1f7ceb in g_task_return_now (task=0x9e81d0) at gtask.c:1108
#60 0x00007fffec1f7d09 in complete_in_idle_cb (task=0x9e81d0) at gtask.c:1117
#61 0x00007fffeb44e2e6 in g_main_dispatch (context=0x677bc0) at gmain.c:3065
#62 g_main_context_dispatch (context=context@entry=0x677bc0) at gmain.c:3641
#63 0x00007fffeb44e638 in g_main_context_iterate (context=0x677bc0, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3712
#64 0x00007fffeb44ea3a in g_main_loop_run (loop=0x6f0010) at gmain.c:3906
#65 0x00007ffff306a156 in WTF::RunLoop::run () at ../../Source/WTF/wtf/gtk/RunLoopGtk.cpp:59
#66 0x00007ffff2fa35e0 in WebKit::ChildProcessMain&lt;WebKit::WebProcess, WebKit::WebProcessMain&gt; (argc=2, argv=0x7fffffffd948) at ../../Source/WebKit2/Shared/unix/ChildProcessMain.h:61
#67 0x00007ffff2fa3445 in WebKit::WebProcessMainUnix (argc=2, argv=0x7fffffffd948) at ../../Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:73
#68 0x000000000040085d in main (argc=2, argv=0x7fffffffd948) at ../../Source/WebKit2/WebProcess/EntryPoint/unix/WebProcessMain.cpp:32</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036113</commentid>
    <comment_count>1</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2014-09-19 05:09:54 -0700</bug_when>
    <thetext>If you run the attached test with a release build then it causes a crash in WebCore::RenderFlowThread::getRegionRangeForBox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040294</commentid>
    <comment_count>2</comment_count>
      <attachid>239476</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-10-08 08:34:59 -0700</bug_when>
    <thetext>Created attachment 239476
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040298</commentid>
    <comment_count>3</comment_count>
      <attachid>239476</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-08 09:05:39 -0700</bug_when>
    <thetext>Comment on attachment 239476
WIP Patch

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

&gt; Source/WebCore/rendering/LayoutState.h:130
&gt; +    RenderFlowThread* m_currentRenderFlowThread;

There’s a new idiom we can and should use for data member initialization now that we use new enough compilers. We would write:

    RenderFlowThread* m_currentRenderFlowThread { nullptr };

And then we would not need to change the various constructors to initialize this data member.

&gt; Source/WebCore/rendering/RenderBlock.cpp:133
&gt; +    RenderFlowThread* m_flowThreadContainingBlock;
&gt; +    bool m_dirtyFlowThreadContainingBlock;

RenderFlowThread* m_flowThreadContainingBlock { nullptr };
    bool m_dirtyFlowThreadContainingBlock { true };

I find the m_dirtyFlowThreadContainingBlock data member name confusing. In fact, the same name is used below as a verb phrase. Maybe m_flowThreadContainingBlockNeedsUpdate, or reverse the sense and make it m_flowThreadContainingBlockIsValid? Or maybe use Optional&lt;RenderFlowThread*&gt; instead of a separate data member.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3346
&gt; +    if (this-&gt;isRenderFlowThread())

No need for this-&gt; here.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3351
&gt; +    RenderBlockRareData* rareData = getRareData(this);
&gt; +    if (!rareData)
&gt; +        rareData = &amp;ensureRareData(this);

This should just be:

    RenderBlockRareData&amp; rareData = ensureRareData(this);

&gt; Source/WebCore/rendering/RenderBlock.cpp:3361
&gt; +    RenderBlockRareData* rareData = getRareData(this);
&gt; +    if (!rareData)
&gt; +        rareData = &amp;ensureRareData(this);

This should just be:

    RenderBlockRareData&amp; rareData = ensureRareData(this);

&gt; Source/WebCore/rendering/RenderBlock.cpp:3369
&gt; +RenderFlowThread* RenderBlock::locateFlowThreadContainingBlock() const

It’s not the best style to use const and const_cast to account for the side effect. Instead we would normally either make the function non-const to make the side effect clear, or alternatively make the relevant data members mutable and make updateFlowThreadContainingBlock also be const.

&gt; Source/WebCore/rendering/RenderBlock.h:317
&gt; +    RenderFlowThread* updateFlowThreadContainingBlock(RenderFlowThread*);
&gt; +    void dirtyFlowThreadContainingBlock();
&gt; +    RenderFlowThread* cachedFlowThreadContainingBlock() const;

Do all three of these need to be public? Can they be private or protected instead?

I don’t think the name “dirtyFlowThreadContainingBlock” makes it clear that “dirty” is a verb. Normally we use different naming for such things, following style from Cocoa. For example, setFlowThreadContainingBlockNeedsUpdate.

&gt; Source/WebCore/rendering/RenderObject.cpp:2019
&gt; +    dirtyFlowThreadContainingBlockRecursive();

I prefer a name that reflects what is being done, not the algorithm. The name “recursive” is not entirely clear to me. Does it mean this call will dirty all descendants? All ancestors?

&gt; Source/WebCore/rendering/RenderObject.cpp:2063
&gt; +    RenderBlock* block = toRenderBlock(this);
&gt; +    block-&gt;dirtyFlowThreadContainingBlock();

It should be:

    toRenderBlock(*this).dirtyFlowThreadContainingBlock();

We should use a reference rather than a pointer.

&gt; Source/WebCore/rendering/RenderObject.cpp:2072
&gt; +    for (RenderObject* child = firstChildSlow(); child; child = child-&gt;nextSibling())
&gt; +        child-&gt;dirtyFlowThreadContainingBlockRecursive();

It’s very strange to use firstChildSlow here. But also, it would be better to use a non-recursive algorithm. Here’s one way to write it:

    for (RenderObject* descendant = firstChild(); descendant; descendant = descendant-&gt;nextInPreOrder(this))
        descendant-&gt;dirtyFlowThreadContainingBlock();

Then we use a loop instead of a recursive function call and we don’t have to use stack space proportional to the size of the tree.

&gt; Source/WebCore/rendering/RenderObject.cpp:2076
&gt; +    if (!isRenderBlock()) {

Code like this makes me wonder why we aren’t using a virtual function.

&gt; Source/WebCore/rendering/RenderObject.cpp:2077
&gt; +        RenderBlock* cb = containingBlock();

Please don’t abbreviate to cb. Instead write something more like this:

    if (auto* containingBlock = this-&gt;containingBlock())
        flowThread = containingBlock-&gt;cachedFlowThreadContainingBlock();

&gt; Source/WebCore/rendering/RenderObject.cpp:2081
&gt; +        RenderBlock* block = toRenderBlock(this);

Please use a reference instead of a pointer here.

&gt; Source/WebCore/rendering/RenderObject.cpp:2619
&gt; +    RenderBlock* cb = containingBlock();

Please don’t use the name “cb” in new code:

    RenderBlock* containingBlock = this-&gt;containingBlock();

&gt; Source/WebCore/rendering/RenderObject.h:222
&gt; +    RenderFlowThread* flowThreadContainingBlock() const;

What’s behind the decision to not make this inline any more?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040313</commentid>
    <comment_count>4</comment_count>
      <attachid>239476</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-10-08 09:33:00 -0700</bug_when>
    <thetext>Comment on attachment 239476
WIP Patch

So I think the only time a positioned object is looked at when the wrong flow thread is on the stack is for static position computation, which involves doing stuff with positioned objects in the normal flow. I have no real opinion on the change and think it&apos;s probably fine, but if you were looking to do something smaller, you could probably just pop the flow thread while examining the positioned object from normal flow layout, and then push the thread back on the stack when done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040528</commentid>
    <comment_count>5</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-10-09 06:27:33 -0700</bug_when>
    <thetext>@Darin
Thanks for the feedback and for the useful information about the Optional template class. I&apos;ll update the patch if we decide to go down this road.

Here are the performance results for Regions and html5-full-render. The first column HAS the patch, the second column doesn&apos;t have the patch.

/Layout/RegionsAuto:Time	ms	300.90	2.75% Worse 	292.85
/Layout/RegionsAutoMaxHeight:Time	ms	1070.55	3.45% Worse 	1034.85
/Layout/RegionsExtendingSelectionMixedContent:Time	ms	2017.85	6.15% Better	2150.00
/Layout/RegionsFixed:Time	ms	935.85	4.26% Worse 	897.60
/Layout/RegionsFixedShort:Time	ms	1136.80	3.58% Worse 	1097.50
/Layout/RegionsSelectAllMixedContent:Time	ms	697.35	1.04% Better	704.65
/Layout/RegionsSelection:Time	ms	1538.70	8.20% Better	1676.10
/Layout/RegionsShapes:Time	ms	418.45	2.83% Worse 	406.95
/Parser/html5-full-render:Time	ms	3888.90		3853.65

There is a good performance gain in selection tests. However, there&apos;s a slight performance degradation for the other tests. I&apos;ll run some numbers for multi-col as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041539</commentid>
    <comment_count>6</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-10-14 04:46:19 -0700</bug_when>
    <thetext>Here are the performance results when running the tests from https://bugs.webkit.org/show_bug.cgi?id=137687 :
/Layout/Multicol/MulticolManyColumns:Time	ms	7130.25	± 0.05%	1.80% Better	7260.85	± 0.45%
/Layout/Multicol/MulticolNested:Time	ms	4604.70	± 0.17%	5.01% Better	4847.50	± 0.11%

The build using this approach proves to be 1.8% faster on a test with many columns and 5.01% faster on a test with many nested multi-column containers.

Even though the performance for regions drops a bit I see the following advantages for moving forward with this approach:
1. The multi-column implementation benefits from this.
2. The selection code and anything not using currentRenderFlowThread benefits from this.
3. We can drop the CurrentRenderFlowThreadMaintainer/Disabler classes. During the development of this patch I&apos;ve discovered two places that needed CurrentRenderFlowThreadDisabler but didn&apos;t have it.

The downside is the regions code is a bit slower. I believe we can regain the lost performance in those tests by optimizing the repaint code which is the major bottleneck in those tests (each test has around 1200 regions and repainting the flow thread actually means calling repaint() 1200 times).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041561</commentid>
    <comment_count>7</comment_count>
      <attachid>239800</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-10-14 08:10:20 -0700</bug_when>
    <thetext>Created attachment 239800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041575</commentid>
    <comment_count>8</comment_count>
      <attachid>239803</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-10-14 09:47:30 -0700</bug_when>
    <thetext>Created attachment 239803
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041581</commentid>
    <comment_count>9</comment_count>
      <attachid>239803</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-10-14 10:14:43 -0700</bug_when>
    <thetext>Comment on attachment 239803
Patch v2

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

Seems ok. If you&apos;re trying to catch all things that can change your containing block, I would actually eyeball the containingBlock() function. transforms can do it in addition to positioning for example.

&gt; Source/WebCore/rendering/RenderBlock.cpp:319
&gt; +    if (oldStyle &amp;&amp; oldStyle-&gt;position() != newStyle.position())
&gt; +        invalidateFlowThreadContainingBlockIncludingDescendants();

transforms can change your containing block too. You may want to include that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041841</commentid>
    <comment_count>10</comment_count>
      <attachid>239867</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-10-15 05:40:25 -0700</bug_when>
    <thetext>Created attachment 239867
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041843</commentid>
    <comment_count>11</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-10-15 05:46:00 -0700</bug_when>
    <thetext>I&apos;ve changed some things in the patch:
- I&apos;ve refactored and renamed RenderObject::removeFromRenderFlowThreadRecursive . Now it doesn&apos;t invalidate the flow thread state flag if the function descends inside a nested flow thread.
- Changing the transform state of a block also invalidates the flowThreadContainingBlock chain
- There&apos;s a new test verifying this works correctly and doesn&apos;t crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041860</commentid>
    <comment_count>12</comment_count>
      <attachid>239867</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-10-15 09:08:29 -0700</bug_when>
    <thetext>Comment on attachment 239867
Patch v3

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042082</commentid>
    <comment_count>13</comment_count>
      <attachid>239867</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-15 23:50:31 -0700</bug_when>
    <thetext>Comment on attachment 239867
Patch v3

Clearing flags on attachment: 239867

Committed r174761: &lt;http://trac.webkit.org/changeset/174761&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042083</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-15 23:50:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>235972</attachid>
            <date>2014-08-04 05:48:00 -0700</date>
            <delta_ts>2014-08-04 05:48:00 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>crash.html</filename>
            <type>text/html</type>
            <size>69</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">PHN0eWxlPgoqIHsKICAgIC13ZWJraXQtY29sdW1uczoyOwogICAgcG9zaXRpb246YWJzb2x1dGU7
Cn0KPC9zdHlsZT5h
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239476</attachid>
            <date>2014-10-08 08:34:59 -0700</date>
            <delta_ts>2014-10-14 08:10:10 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-135563-20141008183456.patch</filename>
            <type>text/plain</type>
            <size>36756</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWU2YTVlY2Q5OTExZDFk
OTExYWMwM2JiZjBjMjNjMjBlNzRiNmUwNC4uZjZmNWJjODRkODE1YmJmMzQ2ZWZiM2QxNzAyOTc2
NmNhYmYyYzQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDE0LTEwLTA4ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIEFTU0VSVElPTiAgRkFJTEVE
IGluIFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU1NjMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgbmV3IG11bHRp
LWNvbHVtbiBjb2RlIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2hlbiB0aGUgZG9jdW1lbnQgY29u
dGFpbnMgbmVzdGVkIGZyYWdtZW50YXRpb24KKyAgICAgICAgY29udGV4dHMuIFRoZSBwcm9ibGVt
IGlzIHRoZSBjdXJyZW50IGZsb3cgdGhyZWFkIGNvbmNlcHQgdGhhdCBjYW4gc3RvcmUgb25seSBv
bmUgUmVuZGVyRmxvd1RocmVhZAorICAgICAgICBhdCBhIHRpbWUgYW5kIHVzZSBpdCBkdXJpbmcg
bGF5b3V0LgorCisgICAgICAgIFRoZSBzdG9yZWQgZmxvdyB0aHJlYWQgaXMgYWx3YXlzIGNvcnJl
Y3QgZm9yIHJlZ2lvbnMgYmVjYXVzZSBuYW1lZCBmbG93IHRocmVhZHMgYXJlIGFic29sdXRsZXkg
cG9zaXRpb25lZAorICAgICAgICBzbyBldmVyeSBjaGlsZCByZW5kZXJlciBpcyBjb250YWluZWQg
aW5zaWRlIHRoZW0gKHdpdGggdGhlIGV4cGNldGlvbiBvZiBmaXhlZCBwb3NpdGlvbmVkIGVsZW1l
bnRzIHdoaWNoIGFyZQorICAgICAgICB0cmVhdGVkIHNlcGFyYXRlbHkpLgorCisgICAgICAgIEZv
ciBtdWx0aS1jb2x1bW4gZWxlbWVudHMgdGhpcyBpcyBubyBsb25nZXIgdGhlIGNhc2UuIEFuIGFi
c29sdXRlbHkgcG9zaXRpb25lZCBlbGVtZW50IGluc2lkZSBhIHN0YXRpYworICAgICAgICBtdWx0
aS1jb2x1bW4gZWxlbWVudCB3aWxsIGJlIGNvbnRhaW5lZCBieSBhIGJsb2NrIG91dHNpZGUgdGhl
IGZyYWdtZW50YXRpb24gY29udGV4dC4gSXQgY2FuIGV2ZW4gYmUKKyAgICAgICAgY29udGFpbmVk
IGJ5IGEgZGlmZmVyZW50IG11bHRpLWNvbHVtbiBlbGVtZW50IGluIHRoZSBjYXNlIG9mIG5lc3Rl
ZCBmbG93IHRocmVhZHMuCisKKyAgICAgICAgVGhlIHBhdGNoIGJlbG93IGV4cGxvcmVzIGEgc29s
dXRpb24gdGhhdCdzIG5vdCBiYXNlZCBvbiBhIGN1cnJlbnQgZmxvdyB0aHJlYWQgc3RvcmVkIGds
b2JhbGx5LiBUaGUgcHJvcG9zZWQKKyAgICAgICAgcGF0Y2ggbWFrZXMgZXZlcnkgYmxvY2sgdG8g
c3RvcmUgYSBwb2ludGVyIHRvIGl0cyBmcmFnbWVudGF0aW9uIGNvbnRleHQgYW5kIGEgZmxhZyB0
aGF0IHN0YXRlcyBpZiB0aGlzIHBvaW50ZXIKKyAgICAgICAgbmVlZHMgdG8gYmUgdXBkYXRlZCBv
ciBub3QuIElmIHRoZSByZW5kZXJlciBpcyBub3QgYSBibG9jayBpdCB3aWxsIGdldCBpdHMgZmxv
dyB0aHJlYWQgZnJvbSB0aGUgY29udGFpbmluZworICAgICAgICBibG9jay4gT25jZSB0aGUgY29u
dGFpbmluZyBmbG93IHRocmVhZCBpcyByZXF1ZXN0ZWQgZm9yIHRoZSBibG9jaywgdGhlIHBvaW50
ZXIgaXMgY29tcHV0ZWQgYW5kIGNhY2hlZCB1bnRpbCB0aGUKKyAgICAgICAgZGlydHkgZmxhZyBp
cyBzZXQuCisKKyAgICAgICAgVGhlIG1haW4gYWRkZWQgY29tcGxleGl0eSBpcyB0aGUgY29ycmVj
dCB0aW1pbmcgdG8gZGlydHkgdGhlIHBvaW50ZXIgdG8gdGhlIGNvbnRhaW5pbmcgZmxvdyB0aHJl
YWQgZm9yIGJsb2Nrcy4KKyAgICAgICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHRyZWUgY2hhbmdl
cyBhbmQgd2hlbiB0aGUgcG9zaXRpb24gb2YgdGhlIG9iamVjdCBjaGFuZ2VzLiBUaGUgcHJvY2Vz
cyBpcyByZWN1cnNpdmUgYW5kIGl0CisgICAgICAgIGRvZXNuJ3QgYWZmZWN0IGVsZW1lbnRzIHRo
YXQgYXJlIG5vdCBuZXN0ZWQgaW5zaWRlIGEgZmxvdyB0aHJlYWQuIElmIGEgYmxvY2sgY2hhbmdl
cyBwb3NpdGlvbiBmcm9tIHJlbGF0aXZlIHRvIHN0YXRpYywKKyAgICAgICAgYW55IGVsZW1lbnQg
dGhhdCB3YXMgY29udGFpbmVkIGJ5IGl0IGNhbiBvbmx5IGJlIGNvbnRhaW5lZCBieSBhbiBhbmNl
c3RvciBvZiB0aGUgYmxvY2suIFRoaXMgYW5jZXN0b3Igd2lsbCBzdGlsbCBiZQorICAgICAgICBv
dXRzaWRlIG9mIGFueSBmbG93IHRocmVhZC4gVGhpcyBlbnN1cmVzIHRoYXQgbm9uLWZyYWdtZW50
YXRpb24gY29kZSBpcyBub3QgYWZmZWN0ZWQgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZl
LgorCisgICAgICAgIFRlc3RzOiBOb25lIGluIHRoZSBXSVAuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmxvd1RocmVh
ZENvbnRyb2xsZXI6OkZsb3dUaHJlYWRDb250cm9sbGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
Rmxvd1RocmVhZENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb3dUaHJlYWRDb250
cm9sbGVyOjpjdXJyZW50UmVuZGVyRmxvd1RocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6c2V0Q3VycmVudFJlbmRlckZsb3dUaHJlYWQpOiBE
ZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9M
YXlvdXRTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OkxheW91dFN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpjdXJyZW50UmVuZGVyRmxvd1RocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6c2V0Q3VycmVudFJlbmRlckZsb3dU
aHJlYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja1JhcmVEYXRhOjpSZW5kZXJCbG9ja1JhcmVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzdHlsZVdpbGxDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpjb2xsYXBzZUFub255bW91c0JveENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpjYWNoZWRGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpkaXJ0eUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZUZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93OjpzdHlsZVdpbGxDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6
OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVBbGxM
YXllclRvUmVnaW9uTWFwcGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVh
ZDo6cmVwYWludFJlY3RhbmdsZUluUmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50
UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXI6OkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRh
aW5lcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50UmVuZGVyRmxvd1RocmVh
ZE1haW50YWluZXI6On5DdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcjo6Q3Vy
cmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyOjp+Q3VycmVudFJlbmRlckZsb3dUaHJl
YWREaXNhYmxlcik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6bWFw
TGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2hvd1JlZ2lv
bnNJbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omluc2VydGVk
SW50b1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9tUmVu
ZGVyRmxvd1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUZy
b21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6ZGlydHlGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrUmVjdXJzaXZlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxvY2F0ZUZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpsb2NhdGVGbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrTm9DYWNoZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpmbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6Y29tcHV0ZU92
ZXJmbG93RnJvbUZsb3dUaHJlYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZUZvckN1cnJl
bnRGbG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnBvcExheW91dFN0
YXRlRm9yQ3VycmVudEZsb3dUaHJlYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3
Lmg6CisKIDIwMTQtMTAtMDcgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNv
bT4KIAogICAgICAgICBbRUZMXSBDYWxsIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgpIGlu
c3RlYWQgb2YgZGVsZWdhdGVkU2Nyb2xsUmVxdWVzdGVkKCkgaW4gU2Nyb2xsVmlldzo6c2Nyb2xs
VG8oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxl
ci5jcHAKaW5kZXggMmNmYTQyODNjNzlmOWI1ZWVhM2UxNzhhZDEyMmRjOGI2OWZiYjlhOC4uOGNm
MTRhY2ZhMjBjODQ0YzExZmU3OTFhYjgzNTVmNGFjODQ4YWQ5OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCkBAIC00Miw3ICs0Miw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRmxvd1RocmVhZENvbnRyb2xsZXI6OkZsb3dUaHJl
YWRDb250cm9sbGVyKFJlbmRlclZpZXcqIHZpZXcpCiAgICAgOiBtX3ZpZXcodmlldykKLSAgICAs
IG1fY3VycmVudFJlbmRlckZsb3dUaHJlYWQoMCkKICAgICAsIG1faXNSZW5kZXJOYW1lZEZsb3dU
aHJlYWRPcmRlckRpcnR5KGZhbHNlKQogICAgICwgbV9mbG93VGhyZWFkc1dpdGhBdXRvTG9naWNh
bEhlaWdodFJlZ2lvbnMoMCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9GbG93VGhyZWFkQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dU
aHJlYWRDb250cm9sbGVyLmgKaW5kZXggMGNkYjU2Y2EzMmJiZGNiMDUyMTY5OWRiZTdhMTJjNDA3
MjFkNzA3Yy4uZmQ2ZTYyMWQwYmRhMWE0YWRhZDY1Y2MzYzA3ZmNlNjNmMTRlNTUxZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmgKQEAgLTQ4
LDkgKzQ4LDYgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IEZsb3dUaHJlYWRDb250cm9sbGVyKFJl
bmRlclZpZXcqKTsKICAgICB+Rmxvd1RocmVhZENvbnRyb2xsZXIoKTsKIAotICAgIFJlbmRlckZs
b3dUaHJlYWQqIGN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50UmVuZGVyRmxvd1RocmVhZDsgfQotICAgIHZvaWQgc2V0Q3VycmVudFJlbmRlckZsb3dUaHJl
YWQoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkgeyBtX2N1cnJlbnRSZW5kZXJGbG93VGhy
ZWFkID0gZmxvd1RocmVhZDsgfQotCiAgICAgYm9vbCBpc1JlbmRlck5hbWVkRmxvd1RocmVhZE9y
ZGVyRGlydHkoKSBjb25zdCB7IHJldHVybiBtX2lzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3JkZXJE
aXJ0eTsgfQogICAgIHZvaWQgc2V0SXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRPcmRlckRpcnR5KGJv
b2wgZGlydHkpCiAgICAgewpAQCAtOTYsNyArOTMsNiBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6
CiAgICAgUmVuZGVyVmlldyogbV92aWV3OwotICAgIFJlbmRlckZsb3dUaHJlYWQqIG1fY3VycmVu
dFJlbmRlckZsb3dUaHJlYWQ7CiAgICAgYm9vbCBtX2lzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3Jk
ZXJEaXJ0eTsKICAgICB1bnNpZ25lZCBtX2Zsb3dUaHJlYWRzV2l0aEF1dG9Mb2dpY2FsSGVpZ2h0
UmVnaW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdD4g
bV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlv
dXRTdGF0ZS5jcHAKaW5kZXggMmRkMTQyMjI5YTY0YzFlZTRjOTY2YjE4NjViYjE5YWE2NjgyMDVk
Mi4uMDFmMjZhMmZjOWMzMTZkNzZlYjRiZTRhNWEzNjZjNDAzZDZjYzVhNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShzdGQ6OnVuaXF1ZV9wdHI8TGF5
b3V0U3RhdGU+IG5leHQsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IExheW91dFNpemUmIG9m
ZnNldCwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCwgYm9vbCBwYWdlTG9naWNhbEhlaWdo
dENoYW5nZWQpCiAgICAgOiBtX2xpbmVHcmlkKDApCiAgICAgLCBtX25leHQoV1RGOjptb3ZlKG5l
eHQpKQorICAgICwgbV9jdXJyZW50UmVuZGVyRmxvd1RocmVhZChudWxscHRyKQogI2lmbmRlZiBO
REVCVUcKICAgICAsIG1fcmVuZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTEzMiw2ICsxMzMs
NyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0JiByb290KQogI2VuZGlm
ICAgIAogICAgICwgbV9saW5lR3JpZCgwKQogICAgICwgbV9wYWdlTG9naWNhbEhlaWdodCgwKQor
ICAgICwgbV9jdXJyZW50UmVuZGVyRmxvd1RocmVhZChudWxscHRyKQogI2lmbmRlZiBOREVCVUcK
ICAgICAsIG1fcmVuZGVyZXIoJnJvb3QpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xh
eW91dFN0YXRlLmgKaW5kZXggMmY3Mjk5ZWNkMWFjOTlkMGRlZTA0YTFhYjI2Zjg3ZWE2ZjhlYjE5
Zi4uODYxN2EwYzJjZGIzYTVmZTU3ZTAwNmI5ODNiZTMwN2U0MzhmNzEzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgICAgICwgbV9saW5lR3JpZChudWxscHRyKQogICAgICAgICAsIG1fcGFnZUxvZ2lj
YWxIZWlnaHQoMCkKKyAgICAgICAgLCBtX2N1cnJlbnRSZW5kZXJGbG93VGhyZWFkKG51bGxwdHIp
CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fcmVuZGVyZXIobnVsbHB0cikKICNlbmRpZgpA
QCAtODMsNiArODQsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGluZUdyaWRQYWdpbmF0aW9u
T3JpZ2luKGNvbnN0IExheW91dFNpemUmIG9yaWdpbikgeyBtX2xpbmVHcmlkUGFnaW5hdGlvbk9y
aWdpbiA9IG9yaWdpbjsgfQogICAgIAogICAgIGJvb2wgbmVlZHNCbG9ja0RpcmVjdGlvbkxvY2F0
aW9uU2V0QmVmb3JlTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lR3JpZCB8fCAobV9pc1Bh
Z2luYXRlZCAmJiBtX3BhZ2VMb2dpY2FsSGVpZ2h0KTsgfQorCisgICAgUmVuZGVyRmxvd1RocmVh
ZCogY3VycmVudFJlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRSZW5k
ZXJGbG93VGhyZWFkOyB9CisgICAgdm9pZCBzZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChSZW5k
ZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKSB7IG1fY3VycmVudFJlbmRlckZsb3dUaHJlYWQgPSBm
bG93VGhyZWFkOyB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBwcm9wYWdhdGVMaW5lR3JpZEluZm8o
UmVuZGVyQm94Kik7CiAgICAgdm9pZCBlc3RhYmxpc2hMaW5lR3JpZChSZW5kZXJCbG9ja0Zsb3cq
KTsKQEAgLTEyMiw2ICsxMjcsOCBAQCBwdWJsaWM6CiAgICAgTGF5b3V0U2l6ZSBtX2xpbmVHcmlk
T2Zmc2V0OwogICAgIExheW91dFNpemUgbV9saW5lR3JpZFBhZ2luYXRpb25PcmlnaW47CiAKKyAg
ICBSZW5kZXJGbG93VGhyZWFkKiBtX2N1cnJlbnRSZW5kZXJGbG93VGhyZWFkOworCiAjaWZuZGVm
IE5ERUJVRwogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggZTEyZWJiNTMwMTI0OGY5ZDUzNGIw
M2RjNGFiNjdhZTkyMmUwMDAwZi4uZjdkMmFjMGVhN2FkMjA2ZjM4OTljOWY2YTRjNDNlNmViY2Y2
NzM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC05MSw3
ICs5MSw3IEBAIHN0YXRpYyBUcmFja2VkRGVzY2VuZGFudHNNYXAqIGdQZXJjZW50SGVpZ2h0RGVz
Y2VuZGFudHNNYXAgPSAwOwogCiBzdGF0aWMgVHJhY2tlZENvbnRhaW5lck1hcCogZ1Bvc2l0aW9u
ZWRDb250YWluZXJNYXAgPSAwOwogc3RhdGljIFRyYWNrZWRDb250YWluZXJNYXAqIGdQZXJjZW50
SGVpZ2h0Q29udGFpbmVyTWFwID0gMDsKLSAgICAKKwogdHlwZWRlZiBIYXNoTWFwPFJlbmRlckJs
b2NrKiwgc3RkOjp1bmlxdWVfcHRyPExpc3RIYXNoU2V0PFJlbmRlcklubGluZSo+Pj4gQ29udGlu
dWF0aW9uT3V0bGluZVRhYmxlTWFwOwogCiBzdHJ1Y3QgVXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0VHJhbnNhY3Rpb24gewpAQCAtMTE4LDE0ICsxMTgsMTkgQEAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxEZWxheWVkVXBkYXRlU2Nyb2xsSW5mb1N0YWNrPiYgdXBkYXRlU2Nyb2xsSW5mb0FmdGVy
TGF5b3UKIHN0cnVjdCBSZW5kZXJCbG9ja1JhcmVEYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShSZW5kZXJCbG9ja1JhcmVEYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgUmVuZGVyQmxvY2tSYXJlRGF0YSgpIAorICAgIFJlbmRlckJsb2NrUmFyZURhdGEo
KQogICAgICAgICA6IG1fcGFnaW5hdGlvblN0cnV0KDApCiAgICAgICAgICwgbV9wYWdlTG9naWNh
bE9mZnNldCgwKQotICAgIHsgCisgICAgICAgICwgbV9mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2Nr
KG51bGxwdHIpCisgICAgICAgICwgbV9kaXJ0eUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2sodHJ1
ZSkKKyAgICB7CiAgICAgfQogCiAgICAgTGF5b3V0VW5pdCBtX3BhZ2luYXRpb25TdHJ1dDsKICAg
ICBMYXlvdXRVbml0IG1fcGFnZUxvZ2ljYWxPZmZzZXQ7CisKKyAgICBSZW5kZXJGbG93VGhyZWFk
KiBtX2Zsb3dUaHJlYWRDb250YWluaW5nQmxvY2s7CisgICAgYm9vbCBtX2RpcnR5Rmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9jazsKIH07CiAKIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCbG9j
ayosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1JhcmVEYXRhPj4gUmVuZGVyQmxvY2tSYXJl
RGF0YU1hcDsKQEAgLTI2Myw3ICsyNjgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzdHlsZVdpbGxD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdAogICAg
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZz
dHlsZSgpIDogbnVsbHB0cjsKIAogICAgIHNldFJlcGxhY2VkKG5ld1N0eWxlLmlzRGlzcGxheUlu
bGluZVR5cGUoKSk7Ci0gICAgCisKICAgICBpZiAob2xkU3R5bGUgJiYgcGFyZW50KCkgJiYgZGlm
ZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgb2xkU3R5bGUtPnBvc2l0aW9uKCkgIT0gbmV3
U3R5bGUucG9zaXRpb24oKSkgewogICAgICAgICBpZiAobmV3U3R5bGUucG9zaXRpb24oKSA9PSBT
dGF0aWNQb3NpdGlvbikKICAgICAgICAgICAgIC8vIENsZWFyIG91ciBwb3NpdGlvbmVkIG9iamVj
dHMgbGlzdC4gT3VyIGFic29sdXRlbHkgcG9zaXRpb25lZCBkZXNjZW5kYW50cyB3aWxsIGJlCkBA
IC0yODAsNyArMjg1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3QKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgY2IgPSBjYi0+cGFyZW50KCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNiLT5pc1JlbmRlckJsb2NrKCkpCiAgICAg
ICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhjYiktPnJlbW92ZVBvc2l0aW9uZWRPYmplY3RzKHRo
aXMsIE5ld0NvbnRhaW5pbmdCbG9jayk7CiAgICAgICAgIH0KQEAgLTMwNiw5ICszMTEsMTIgQEAg
c3RhdGljIGJvb2wgYm9yZGVyT3JQYWRkaW5nTG9naWNhbFdpZHRoQ2hhbmdlZChjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUsIGNvbnMKIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAg
ICAgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7Ci0gICAgCisKICAg
ICBSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOwogCisgICAgaWYgKG9sZFN0eWxlICYm
IG9sZFN0eWxlLT5wb3NpdGlvbigpICE9IG5ld1N0eWxlLnBvc2l0aW9uKCkpCisgICAgICAgIGRp
cnR5Rmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja1JlY3Vyc2l2ZSgpOworCiAgICAgaWYgKCFpc0Fu
b255bW91c0Jsb2NrKCkpIHsKICAgICAgICAgLy8gRW5zdXJlIHRoYXQgYWxsIG9mIG91ciBjb250
aW51YXRpb24gYmxvY2tzIHBpY2sgdXAgdGhlIG5ldyBzdHlsZS4KICAgICAgICAgZm9yIChSZW5k
ZXJCbG9jayogY3VyckNvbnQgPSBibG9ja0VsZW1lbnRDb250aW51YXRpb24oKTsgY3VyckNvbnQ7
IGN1cnJDb250ID0gY3VyckNvbnQtPmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbigpKSB7CkBAIC0z
MjEsNyArMzI5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZm
ZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHkKIAogICAgIHByb3BhZ2F0ZVN0
eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihQcm9wYWdhdGVUb0Jsb2NrQ2hpbGRyZW5Pbmx5KTsKICAg
ICBtX2xpbmVIZWlnaHQgPSAtMTsKLSAgICAKKwogICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIG91
ciBib3JkZXIvcGFkZGluZyB0byBjaGFuZ2UsIGJ1dCBmb3IgdGhlIG92ZXJhbGwgbG9naWNhbCB3
aWR0aCBvZiB0aGUgYmxvY2sgdG8KICAgICAvLyBlbmQgdXAgYmVpbmcgdGhlIHNhbWUuIFdlIGtl
ZXAgdHJhY2sgb2YgdGhpcyBjaGFuZ2Ugc28gaW4gbGF5b3V0QmxvY2ssIHdlIGNhbiBrbm93IHRv
IHNldCByZWxheW91dENoaWxkcmVuPXRydWUuCiAgICAgbV9oYXNCb3JkZXJPclBhZGRpbmdMb2dp
Y2FsV2lkdGhDaGFuZ2VkID0gb2xkU3R5bGUgJiYgZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlv
dXQgJiYgbmVlZHNMYXlvdXQoKSAmJiBib3JkZXJPclBhZGRpbmdMb2dpY2FsV2lkdGhDaGFuZ2Vk
KG9sZFN0eWxlLCAmbmV3U3R5bGUpOwpAQCAtNzYwLDcgKzc2OCw2IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2sqIHBhcmVudCwgUmVuZGVy
QmxvY2sqIGNoCiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2li
bGluZygpOwogCiAgICAgUmVuZGVyRmxvd1RocmVhZCogY2hpbGRGbG93VGhyZWFkID0gY2hpbGQt
PmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVh
ZE1haW50YWluZXIgZmxvd1RocmVhZE1haW50YWluZXIoY2hpbGRGbG93VGhyZWFkKTsKICAgICBp
ZiAoY2hpbGRGbG93VGhyZWFkICYmIGNoaWxkRmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dU
aHJlYWQoKSkKICAgICAgICAgdG9SZW5kZXJOYW1lZEZsb3dUaHJlYWQoY2hpbGRGbG93VGhyZWFk
KS0+cmVtb3ZlRmxvd0NoaWxkSW5mbyhjaGlsZCk7CiAKQEAgLTMzMjQsNiArMzMzMSw1MSBAQCB2
b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlcigpCiAgICAgY3JlYXRlRmlyc3RMZXR0
ZXJSZW5kZXJlcihmaXJzdExldHRlckNvbnRhaW5lciwgZG93bmNhc3Q8UmVuZGVyVGV4dD4oZmly
c3RMZXR0ZXJPYmopKTsKIH0KIAorUmVuZGVyRmxvd1RocmVhZCogUmVuZGVyQmxvY2s6OmNhY2hl
ZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdAoreworICAgIFJlbmRlckJsb2NrUmFy
ZURhdGEqIHJhcmVEYXRhID0gZ2V0UmFyZURhdGEodGhpcyk7CisKKyAgICBpZiAoIXJhcmVEYXRh
IHx8IHJhcmVEYXRhLT5tX2RpcnR5Rmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaykKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gcmFyZURhdGEtPm1fZmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jazsKK30KKwordm9pZCBSZW5kZXJCbG9jazo6ZGlydHlGbG93VGhyZWFkQ29udGFp
bmluZ0Jsb2NrKCkKK3sKKyAgICBpZiAodGhpcy0+aXNSZW5kZXJGbG93VGhyZWFkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJlbmRlckJsb2NrUmFyZURhdGEqIHJhcmVEYXRhID0gZ2V0UmFy
ZURhdGEodGhpcyk7CisgICAgaWYgKCFyYXJlRGF0YSkKKyAgICAgICAgcmFyZURhdGEgPSAmZW5z
dXJlUmFyZURhdGEodGhpcyk7CisKKyAgICByYXJlRGF0YS0+bV9mbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrID0gbnVsbHB0cjsKKyAgICByYXJlRGF0YS0+bV9kaXJ0eUZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2sgPSB0cnVlOworfQorCitSZW5kZXJGbG93VGhyZWFkKiBSZW5kZXJCbG9jazo6dXBk
YXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayhSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFk
KQoreworICAgIFJlbmRlckJsb2NrUmFyZURhdGEqIHJhcmVEYXRhID0gZ2V0UmFyZURhdGEodGhp
cyk7CisgICAgaWYgKCFyYXJlRGF0YSkKKyAgICAgICAgcmFyZURhdGEgPSAmZW5zdXJlUmFyZURh
dGEodGhpcyk7CisKKyAgICByYXJlRGF0YS0+bV9mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrID0g
Zmxvd1RocmVhZDsKKyAgICByYXJlRGF0YS0+bV9kaXJ0eUZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2sgPSBmYWxzZTsKKworICAgIHJldHVybiBmbG93VGhyZWFkOworfQorCitSZW5kZXJGbG93VGhy
ZWFkKiBSZW5kZXJCbG9jazo6bG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0
Cit7CisgICAgUmVuZGVyQmxvY2tSYXJlRGF0YSogcmFyZURhdGEgPSBnZXRSYXJlRGF0YSh0aGlz
KTsKKyAgICBpZiAoIXJhcmVEYXRhIHx8IHJhcmVEYXRhLT5tX2RpcnR5Rmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaykKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyQmxvY2sqPih0aGlz
KS0+dXBkYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayhSZW5kZXJCb3g6OmxvY2F0ZUZsb3dU
aHJlYWRDb250YWluaW5nQmxvY2soKSk7CisKKyAgICBBU1NFUlQocmFyZURhdGEtPm1fZmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jayA9PSBSZW5kZXJCb3g6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKSk7CisgICAgcmV0dXJuIHJhcmVEYXRhLT5tX2Zsb3dUaHJlYWRDb250YWluaW5n
QmxvY2s7Cit9CisKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OnBhZ2luYXRpb25TdHJ1dCgpIGNv
bnN0CiB7CiAgICAgUmVuZGVyQmxvY2tSYXJlRGF0YSogcmFyZURhdGEgPSBnZXRSYXJlRGF0YSh0
aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggNjQwMGRiNmY1
NTkyOTRhN2NmNjExOWFmNzI0Yzk3Y2EwMjdmMjRkMi4uODlkNzk0Yjk4N2ZhODlhMmRmNjM5NjQw
MGNlMTMxYzgwNWYxYzg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
QEAgLTMxMiw3ICszMTIsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hp
bGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IGNhbkNvbGxhcHNlQW5vbnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAorICAgIFJlbmRlckZsb3dUaHJlYWQqIHVwZGF0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
UmVuZGVyRmxvd1RocmVhZCopOworICAgIHZvaWQgZGlydHlGbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCk7CisgICAgUmVuZGVyRmxvd1RocmVhZCogY2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBSZW5kZXJGbG93VGhyZWFk
KiBsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcAppbmRleCBkODViZDgyMjYwNTJkMzI3OWE4ZTg0MTY5ZDlkNThkMjliOTA3
ZjIzLi5hNWVjOTYxNjc1YWM4MTc5MzRjZmYwYmM2NGRmMjg2NjI5M2ZhZWVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMTk4NSwxOCArMTk4
NSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbgogICAgIGlmIChvbGRTdHlsZSkgewogICAg
ICAgICBFUG9zaXRpb24gb2xkUG9zaXRpb24gPSBvbGRTdHlsZS0+cG9zaXRpb24oKTsKICAgICAg
ICAgRVBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gbmV3U3R5bGUucG9zaXRpb24oKTsKLSAgICAgICAg
CisKICAgICAgICAgaWYgKHBhcmVudCgpICYmIGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0
ICYmIG9sZFBvc2l0aW9uICE9IG5ld1Bvc2l0aW9uKSB7CiAgICAgICAgICAgICBpZiAoY29udGFp
bnNGbG9hdHMoKSAmJiAhaXNGbG9hdGluZygpICYmICFpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAm
JiBuZXdTdHlsZS5oYXNPdXRPZkZsb3dQb3NpdGlvbigpKQogICAgICAgICAgICAgICAgIG1hcmtB
bGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKLQotICAgICAgICAgICAgLy8gSWYg
dGhpcyBibG9jayBpcyBpbnNpZGUgYSBtdWx0aWNvbCBhbmQgaXMgbW92aW5nIGZyb20gaW4tZmxv
dyBwb3NpdGlvbmluZyB0byBvdXQtb2YtZmxvdyBwb3NpdGlvbmluZywKLSAgICAgICAgICAgIC8v
IHJlbW92ZSBpdHMgaW5mbyAoc3VjaCBhcyBsaW5lcy10by1yZWdpb24gbWFwcGluZykgZnJvbSB0
aGUgZmxvd3RocmVhZCBiZWNhdXNlIGl0IHdvbid0IGJlIGFibGUgdG8gZG8gaXQgbGF0ZXIuCi0g
ICAgICAgICAgICAvLyBUaGUgZmxvd3RocmVhZCB3aWxsIG5vIGxvbmdlciBiZSBpbiBpdHMgY29u
dGFpbmluZyBibG9jayBjaGFpbiBhbmQsIGFzIHN1Y2gsIGZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2sgd2lsbCByZXR1cm4gbnVsbC4KLSAgICAgICAgICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBm
bG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayhTa2lwRmxvd1RocmVhZENhY2hl
KSkgewotICAgICAgICAgICAgICAgIGlmIChmbG93VGhyZWFkLT5pc1JlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZCgpICYmICFpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAobmV3UG9zaXRpb24g
PT0gQWJzb2x1dGVQb3NpdGlvbiB8fCBuZXdQb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uKSkKLSAg
ICAgICAgICAgICAgICAgICAgZmxvd1RocmVhZC0+cmVtb3ZlRmxvd0NoaWxkSW5mbyh0aGlzKTsK
LSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IGYxZjViMzJhNTNkNjY4YWI2MTllMzQ1
ZTQ4ZTA5NmUxNzFkNGExNzcuLjYzNDU4NmVmMzU2MmZlOWE3ZDU0MGE5ZGE0ZTdmMDUxZTc1YjM5
NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAK
QEAgLTE5Nyw3ICsxOTcsNiBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmxheW91dCgpCiAKICAg
ICB2YWxpZGF0ZVJlZ2lvbnMoKTsKIAotICAgIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRh
aW5lciBjdXJyZW50Rmxvd1RocmVhZFNldHRlcih0aGlzKTsKICAgICBSZW5kZXJCbG9ja0Zsb3c6
OmxheW91dCgpOwogCiAgICAgbV9wYWdlTG9naWNhbFNpemVDaGFuZ2VkID0gZmFsc2U7CkBAIC0y
ODgsMTAgKzI4Nyw2IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlQWxsTGF5ZXJUb1Jl
Z2lvbk1hcHBpbmdzKCkKICAgICBpZiAoIWNvbGxlY3RzR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lv
bnMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gV2UgY2FuJ3QgdXNlIGN1cnJl
bnRGbG93VGhyZWFkIGFzIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgaW50ZXJsZWF2ZWQgZmxvdyB0
aHJlYWRzIGFuZCB0aGUgd3Jvbmcgb25lIGNvdWxkIGJlIHVzZWQuCi0gICAgLy8gTGV0IGVhY2gg
cmVnaW9uIGZpZ3VyZSBvdXQgdGhlIHByb3BlciBlbmNsb3NpbmcgZmxvdyB0aHJlYWQuCi0gICAg
Q3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlciBkaXNhYmxlcigmdmlldygpKTsKLQogICAg
IC8vIElmIHRoZSBSZW5kZXJGbG93VGhyZWFkIGhhZCBhIHotaW5kZXggbGF5ZXIgdXBkYXRlLCB0
aGVuIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb21wb3NpdGVkIGxheWVycyB0b28uCiAgICAgYm9v
bCBuZWVkc0xheWVyVXBkYXRlID0gbGF5ZXIoKS0+aXNEaXJ0eVJlbmRlckZsb3dUaHJlYWQoKSB8
fCBtX2xheWVyc1RvUmVnaW9uTWFwcGluZ3NEaXJ0eSB8fCAhbV9sYXllclRvUmVnaW9uTWFwLmdl
dCgpOwogICAgIGxheWVyKCktPnVwZGF0ZUxheWVyTGlzdHNJZk5lZWRlZCgpOwpAQCAtMzg4LDEw
ICszODMsNiBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnJlcGFpbnRSZWN0YW5nbGVJblJlZ2lv
bnMoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QpCiAKICAgICBMYXlvdXRTdGF0ZURpc2Fi
bGVyIGxheW91dFN0YXRlRGlzYWJsZXIoJnZpZXcoKSk7IC8vIFdlIGNhbid0IHVzZSBsYXlvdXQg
c3RhdGUgdG8gcmVwYWludCwgc2luY2UgdGhlIHJlZ2lvbnMgYXJlIHNvbWV3aGVyZSBlbHNlLgog
Ci0gICAgLy8gV2UgY2FuJ3QgdXNlIGN1cnJlbnRGbG93VGhyZWFkIGFzIGl0IGlzIHBvc3NpYmxl
IHRvIGhhdmUgaW50ZXJsZWF2ZWQgZmxvdyB0aHJlYWRzIGFuZCB0aGUgd3Jvbmcgb25lIGNvdWxk
IGJlIHVzZWQuCi0gICAgLy8gTGV0IGVhY2ggcmVnaW9uIGZpZ3VyZSBvdXQgdGhlIHByb3BlciBl
bmNsb3NpbmcgZmxvdyB0aHJlYWQuCi0gICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxl
ciBkaXNhYmxlcigmdmlldygpKTsKLSAgICAKICAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVn
aW9uTGlzdCkKICAgICAgICAgcmVnaW9uLT5yZXBhaW50Rmxvd1RocmVhZENvbnRlbnQocmVwYWlu
dFJlY3QpOwogfQpAQCAtMTUyNSw0MiArMTUxNiw1IEBAIENvbnRhaW5pbmdSZWdpb25NYXAmIFJl
bmRlckZsb3dUaHJlYWQ6OmNvbnRhaW5pbmdSZWdpb25NYXAoKQogICAgIHJldHVybiAqbV9saW5l
VG9SZWdpb25NYXAuZ2V0KCk7CiB9CiAKLUN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5l
cjo6Q3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyKFJlbmRlckZsb3dUaHJlYWQqIHJl
bmRlckZsb3dUaHJlYWQpCi0gICAgOiBtX3JlbmRlckZsb3dUaHJlYWQocmVuZGVyRmxvd1RocmVh
ZCkKLSAgICAsIG1fcHJldmlvdXNSZW5kZXJGbG93VGhyZWFkKDApCi17Ci0gICAgaWYgKCFtX3Jl
bmRlckZsb3dUaHJlYWQpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG93VGhyZWFkQ29udHJvbGxl
ciYgY29udHJvbGxlciA9IG1fcmVuZGVyRmxvd1RocmVhZC0+dmlldygpLmZsb3dUaHJlYWRDb250
cm9sbGVyKCk7Ci0gICAgbV9wcmV2aW91c1JlbmRlckZsb3dUaHJlYWQgPSBjb250cm9sbGVyLmN1
cnJlbnRSZW5kZXJGbG93VGhyZWFkKCk7Ci0gICAgLy8gUmVtb3ZlIHRoZSBhc3NlcnQgc28gd2Ug
Y2FuIHVzZSB0aGlzIHRvIGNoYW5nZSB0aGUgZmxvdyB0aHJlYWQgY29udGV4dC4KLSAgICAvLyBB
U1NFUlQoIW1fcHJldmlvdXNSZW5kZXJGbG93VGhyZWFkIHx8ICFyZW5kZXJGbG93VGhyZWFkLT5p
c1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKTsKLSAgICBjb250cm9sbGVyLnNldEN1cnJlbnRSZW5k
ZXJGbG93VGhyZWFkKG1fcmVuZGVyRmxvd1RocmVhZCk7Ci19Ci0KLUN1cnJlbnRSZW5kZXJGbG93
VGhyZWFkTWFpbnRhaW5lcjo6fkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lcigpCi17
Ci0gICAgaWYgKCFtX3JlbmRlckZsb3dUaHJlYWQpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG93
VGhyZWFkQ29udHJvbGxlciYgY29udHJvbGxlciA9IG1fcmVuZGVyRmxvd1RocmVhZC0+dmlldygp
LmZsb3dUaHJlYWRDb250cm9sbGVyKCk7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIuY3VycmVudFJl
bmRlckZsb3dUaHJlYWQoKSA9PSBtX3JlbmRlckZsb3dUaHJlYWQpOwotICAgIGNvbnRyb2xsZXIu
c2V0Q3VycmVudFJlbmRlckZsb3dUaHJlYWQobV9wcmV2aW91c1JlbmRlckZsb3dUaHJlYWQpOwot
fQotCi1DdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyOjpDdXJyZW50UmVuZGVyRmxvd1Ro
cmVhZERpc2FibGVyKFJlbmRlclZpZXcqIHZpZXcpCi0gICAgOiBtX3ZpZXcodmlldykKLSAgICAs
IG1fcmVuZGVyRmxvd1RocmVhZCgwKQotewotICAgIG1fcmVuZGVyRmxvd1RocmVhZCA9IG1fdmll
dy0+Zmxvd1RocmVhZENvbnRyb2xsZXIoKS5jdXJyZW50UmVuZGVyRmxvd1RocmVhZCgpOwotICAg
IGlmIChtX3JlbmRlckZsb3dUaHJlYWQpCi0gICAgICAgIHZpZXctPmZsb3dUaHJlYWRDb250cm9s
bGVyKCkuc2V0Q3VycmVudFJlbmRlckZsb3dUaHJlYWQoMCk7Ci19Ci0KLUN1cnJlbnRSZW5kZXJG
bG93VGhyZWFkRGlzYWJsZXI6On5DdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyKCkKLXsK
LSAgICBpZiAobV9yZW5kZXJGbG93VGhyZWFkKQotICAgICAgICBtX3ZpZXctPmZsb3dUaHJlYWRD
b250cm9sbGVyKCkuc2V0Q3VycmVudFJlbmRlckZsb3dUaHJlYWQobV9yZW5kZXJGbG93VGhyZWFk
KTsKLX0KLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuaAppbmRleCBiOWVkM2I0ZmIwZWRjMjU2YTRlM2E5MDMwZTg3
MmM5ZGY5YmEwNmQ5Li4yMGZkNWRkNjA3YjE2ZTJiNmRkYWI5OTA3OTdiODI0YjA0MTI1ZWY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKQEAgLTI0OSw2
ICsyNDksOCBAQCBwcml2YXRlOgogcHJvdGVjdGVkOgogICAgIFJlbmRlckZsb3dUaHJlYWQoRG9j
dW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPik7CiAKKyAgICB2aXJ0dWFsIFJlbmRlckZsb3dU
aHJlYWQqIGxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBjb25zdF9jYXN0PFJlbmRlckZsb3dUaHJlYWQqPih0aGlzKTsgfQorCiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgPSAwOwogCiAgICAgLy8gT3ZlcnJp
ZGRlbiBieSBjb2x1bW5zL3BhZ2VzIHRvIHNldCB1cCBhbiBpbml0aWFsIGxvZ2ljYWwgd2lkdGgg
b2YgdGhlIHBhZ2Ugd2lkdGggZXZlbiB3aGVuCkBAIC0zODEsMjYgKzM4Myw2IEBAIHByb3RlY3Rl
ZDoKIAogUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlckZsb3dUaHJlYWQsIGlzUmVuZGVy
Rmxvd1RocmVhZCgpKQogCi1jbGFzcyBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRh
aW5lcik7Ci1wdWJsaWM6Ci0gICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyKFJl
bmRlckZsb3dUaHJlYWQqKTsKLSAgICB+Q3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVy
KCk7Ci1wcml2YXRlOgotICAgIFJlbmRlckZsb3dUaHJlYWQqIG1fcmVuZGVyRmxvd1RocmVhZDsK
LSAgICBSZW5kZXJGbG93VGhyZWFkKiBtX3ByZXZpb3VzUmVuZGVyRmxvd1RocmVhZDsKLX07Ci0K
LWNsYXNzIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXIgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXIpOwotcHVibGljOgotICAg
IEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXIoUmVuZGVyVmlldyopOwotICAgIH5DdXJy
ZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyKCk7Ci1wcml2YXRlOgotICAgIFJlbmRlclZpZXcq
IG1fdmlldzsKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBtX3JlbmRlckZsb3dUaHJlYWQ7Ci19Owot
CiAvLyBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdn
aW5nLgogI2lmbmRlZiBOREVCVUcKIHRlbXBsYXRlIDw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPFJl
bmRlclJlZ2lvbio+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmlu
ZGV4IDQ5YWZmMWM0NjU1NTgyMGNhMGQwZGVmZDQyMmExOWUxNjJhZWJlMDIuLjJkMzMzZThkOTg5
Y2M5ZjU2YjQ4NzFmMDgyZmYwMTlhZDQ3OWMyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcApAQCAtMzc3MiwxMSArMzc3Miw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYKICAgICAvLyBEb24ndCBwYWludCB0aGUgbGF5ZXIgaWYgdGhlIHJlbmRlcmVyIGRvZXNu
J3QgYmVsb25nIHRvIHRoaXMgcmVnaW9uLgogICAgIC8vIFRoaXMgaXMgdHJ1ZSBhcyBsb25nIGFz
IHdlIGNsYW1wIHRoZSByYW5nZSBvZiBhIGJveCB0byBpdHMgY29udGFpbmluZyBibG9jayByYW5n
ZS4KIAotICAgIC8vIERpc2FibGUgbmFtZWQgZmxvdyByZWdpb24gaW5mb3JtYXRpb24gZm9yIGlu
IGZsb3cgdGhyZWFkcyBzdWNoIGFzIG11bHRpLWNvbC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3Vy
cmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcj4gZmxvd1RocmVhZERpc2FibGVyOwotICAgIGlm
IChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoRXhjbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXll
cnMpKQotICAgICAgICBmbG93VGhyZWFkRGlzYWJsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEN1cnJl
bnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXI+KCZyZW5kZXJlcigpLnZpZXcoKSk7Ci0KICAgICBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQoKTsKICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQpIHsKICAgICAg
ICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5pc1ZhbGlkKCkpOwpAQCAtNDgyMSwxMSArNDgx
Niw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVy
KiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xh
eWVyKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIC8vIERpc2FibGUgbmFtZWQgZmxvdyByZWdpb24gaW5mb3JtYXRpb24gZm9y
IGluIGZsb3cgdGhyZWFkcyBzdWNoIGFzIG11bHRpLWNvbC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcj4gZmxvd1RocmVhZERpc2FibGVyOwotICAg
IGlmIChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoRXhjbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRM
YXllcnMpKQotICAgICAgICBmbG93VGhyZWFkRGlzYWJsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEN1
cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXI+KCZyZW5kZXJlcigpLnZpZXcoKSk7Ci0KICAg
ICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKIAogICAgIC8vIFByZXZlbnQgaGl0dGluZyB0aGUgZml4
ZWQgbGF5ZXJzIGluc2lkZSB0aGUgZmxvdyB0aHJlYWQgd2hlbiBoaXR0aW5nIHRocm91Z2ggcmVn
aW9ucy4KQEAgLTUyMzIsOCArNTIyMiw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Om1hcExheWVyQ2xp
cFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIoQ2xpcFJlY3RzJiBjbGlwUmVjdHMpIGNvCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50
KCkgJiYgbmFtZWRGbG93RnJhZ21lbnQtPnBhcmVudCgpLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50Q29udGFpbmVyKCkpOwotICAgIAotICAgIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJs
ZXIgZmxvd1RocmVhZERpc2FibGVyKCZyZW5kZXJlcigpLnZpZXcoKSk7CisKICAgICBDbGlwUmVj
dHNDb250ZXh0IHRhcmdldENsaXBSZWN0c0NvbnRleHQoJm5hbWVkRmxvd0ZyYWdtZW50LT5mcmFn
bWVudENvbnRhaW5lckxheWVyKCksIFRlbXBvcmFyeUNsaXBSZWN0cyk7CiAgICAgbmFtZWRGbG93
RnJhZ21lbnQtPmZyYWdtZW50Q29udGFpbmVyTGF5ZXIoKS5jYWxjdWxhdGVDbGlwUmVjdHModGFy
Z2V0Q2xpcFJlY3RzQ29udGV4dCwgY2xpcFJlY3RzKTsKIApAQCAtNjcwOSw3ICs2Njk4LDYgQEAg
dm9pZCBSZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KCkKIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50TmFtZWRGbG93VGhyZWFkSW5zaWRlUmVnaW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIHJlZ2lvbiwgTGF5b3V0UmVjdCBwYWludERpcnR5
UmVjdCwgTGF5b3V0UG9pbnQgcGFpbnRPZmZzZXQsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlv
ciwgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCiB7CiAgICAgTGF5b3V0UmVjdCByZWdpb25D
b250ZW50Qm94ID0gdG9SZW5kZXJCb3gocmVnaW9uLT5sYXllck93bmVyKCkpLmNvbnRlbnRCb3hS
ZWN0KCk7Ci0gICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyIGZsb3dUaHJlYWRN
YWludGFpbmVyKHRvUmVuZGVyRmxvd1RocmVhZCgmcmVuZGVyZXIoKSkpOwogICAgIEN1cnJlbnRS
ZW5kZXJSZWdpb25NYWludGFpbmVyIHJlZ2lvbk1haW50YWluZXIoKnJlZ2lvbik7CiAgICAgcmVn
aW9uLT5zZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKTsKIApAQCAtNjgxNiw3ICs2ODA0LDYg
QEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Rmxvd1RocmVhZElmUmVnaW9uRm9y
RnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ20KICAgICAgICAgaGl0VGVzdFJlY3RJbkZsb3dUaHJl
YWQubW92ZShoaXRUZXN0T2Zmc2V0KTsKICAgICAgICAgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQu
ZXhwYW5kKExheW91dFNpemUoZmFicygoZG91YmxlKWhpdFRlc3RPZmZzZXQud2lkdGgoKSksIGZh
YnMoKGRvdWJsZSloaXRUZXN0T2Zmc2V0LmhlaWdodCgpKSkpOwogCi0gICAgICAgIEN1cnJlbnRS
ZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lciBmbG93VGhyZWFkTWFpbnRhaW5lcihmbG93VGhyZWFk
KTsKICAgICAgICAgQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIgcmVnaW9uTWFpbnRhaW5l
cigqcmVnaW9uKTsKIAogICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0Lmhp
dFRlc3RMb2NhdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKaW5kZXggY2M2NDI1ZmI2YzVlYzMxMjNiZjk4MjllNzZjYjJlNDE1OTNkODkzYS4uYjE3ODI4
YzFhYWUzNDczZDUwZGZlYmZlNmI4NGFkYjk0N2M2NGY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTUyMiwzOCArNTIyLDYgQEAgc3RhdGljIGJvb2wg
aGFzRml4ZWRQb3NJbk5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jayhjb25zdCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVuZGVyRmxvd1RocmVhZCogUmVu
ZGVyT2JqZWN0Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrTm9DYWNoZSgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKGZsb3dUaHJlYWRTdGF0ZSgpICE9IE5vdEluc2lkZUZsb3dUaHJlYWQp
OwotCi0gICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPih0
aGlzKTsKLSAgICB3aGlsZSAoY3VycikgewotICAgICAgICBpZiAoY3Vyci0+aXNSZW5kZXJGbG93
VGhyZWFkKCkpCi0gICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJGbG93VGhyZWFkKGN1cnIpOwot
ICAgICAgICBjdXJyID0gY3Vyci0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgfQotICAgIHJldHVy
biAwOwotfQotCi1SZW5kZXJGbG93VGhyZWFkKiBSZW5kZXJPYmplY3Q6OmxvY2F0ZUZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKSBjb25zdAotewotICAgIEFTU0VSVChmbG93VGhyZWFkU3RhdGUo
KSAhPSBOb3RJbnNpZGVGbG93VGhyZWFkKTsKLQotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIHRoZSB0
aHJlYWQgY2FjaGVkIGJlY2F1c2Ugd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQuCi0gICAg
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IHZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxl
cigpLmN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCk7Ci0gICAgaWYgKGZsb3dUaHJlYWQgJiYgKGZs
b3dUaHJlYWRTdGF0ZSgpID09IGZsb3dUaHJlYWQtPmZsb3dUaHJlYWRTdGF0ZSgpKSkgewotICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhlIHNsb3cgcGF0aCB3b3VsZCByZXR1cm4gdGhlIHNhbWUgcmVz
dWx0IGFzIG91ciBjYWNoZS4KLSAgICAgICAgLy8gRklYTUU6IEZvciB0aGUgbW9tZW50LCBvbmx5
IGFwcGx5IHRoaXMgYXNzZXJ0aW9uIHRvIHJlZ2lvbnMsIGFzIG11bHRpY29sCi0gICAgICAgIC8v
IHN0aWxsIGhhcyBzb21lIGlzc3VlcyBhbmQgdHJpZ2dlcnMgdGhpcyBhc3NlcnQuCi0gICAgICAg
IC8vIENyZWF0ZWQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjk0
NiBmb3IgdGhpcyBpc3N1ZS4KLSAgICAgICAgQVNTRVJUKCFmbG93VGhyZWFkLT5pc1JlbmRlck5h
bWVkRmxvd1RocmVhZCgpIHx8IGZsb3dUaHJlYWQgPT0gbG9jYXRlRmxvd1RocmVhZENvbnRhaW5p
bmdCbG9ja05vQ2FjaGUoKSk7Ci0gICAgICAgIHJldHVybiBmbG93VGhyZWFkOwotICAgIH0KLSAg
ICAKLSAgICAvLyBOb3QgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQgc28gaGF2ZSB0byBmaW5kIHRo
ZSB0aHJlYWQgdGhlIHNsb3cgd2F5LgotICAgIHJldHVybiBsb2NhdGVGbG93VGhyZWFkQ29udGFp
bmluZ0Jsb2NrTm9DYWNoZSgpOwotfQotCiBSZW5kZXJCbG9jayogUmVuZGVyT2JqZWN0OjpmaXJz
dExpbmVCbG9jaygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CkBAIC0xNDM4LDggKzE0MDYsNiBA
QCB2b2lkIFJlbmRlck9iamVjdDo6c2hvd0xpbmVUcmVlRm9yVGhpcygpIGNvbnN0CiAKIHZvaWQg
UmVuZGVyT2JqZWN0OjpzaG93UmVnaW9uc0luZm9ybWF0aW9uKCkgY29uc3QKIHsKLSAgICBDdXJy
ZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyIGZsb3dUaHJlYWREaXNhYmxlcigmdmlldygpKTsK
LQogICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaygpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gaXNCb3goKSA/
IHRvUmVuZGVyQm94KHRoaXMpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKGJveCkgewpAQCAtMjA0
OSwxNyArMjAxNSwxMSBAQCB2b2lkIFJlbmRlck9iamVjdDo6aW5zZXJ0ZWRJbnRvVHJlZSgpCiAK
ICAgICBpZiAoIWlzRmxvYXRpbmcoKSAmJiBwYXJlbnQoKS0+Y2hpbGRyZW5JbmxpbmUoKSkKICAg
ICAgICAgcGFyZW50KCktPmRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKHRoaXMpOwotICAgIAot
ICAgIC8vIFdlIGhhdmUgdG8gdW5zZXQgdGhlIGN1cnJlbnQgbGF5b3V0IFJlbmRlckZsb3dUaHJl
YWQgaGVyZSwgc2luY2UgaW5zZXJ0ZWRJbnRvVHJlZSgpIGNhbiBoYXBwZW4gaW4KLSAgICAvLyB0
aGUgbWlkZGxlIG9mIGxheW91dCBidXQgZm9yIG9iamVjdHMgaW5zaWRlIGEgbmVzdGVkIGZsb3cg
dGhyZWFkIHRoYXQgaXMgc3RpbGwgYmVpbmcgcG9wdWxhdGVkLiBUaGlzCi0gICAgLy8gd2lsbCBj
YXVzZSBhbiBhY2N1cmF0ZSBjcmF3bCB0byBoYXBwZW4gaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQg
dGhlIHJpZ2h0IGZsb3cgdGhyZWFkIGlzIG5vdGlmaWVkLgotICAgIFJlbmRlckZsb3dUaHJlYWQq
IHByZXZpb3VzVGhyZWFkID0gdmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuY3VycmVudFJl
bmRlckZsb3dUaHJlYWQoKTsKLSAgICB2aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS5zZXRD
dXJyZW50UmVuZGVyRmxvd1RocmVhZChudWxscHRyKTsKLSAgICBpZiAocGFyZW50KCktPmlzUmVu
ZGVyRmxvd1RocmVhZCgpKQotICAgICAgICB0b1JlbmRlckZsb3dUaHJlYWQocGFyZW50KCkpLT5m
bG93VGhyZWFkRGVzY2VuZGFudEluc2VydGVkKHRoaXMpOwotICAgIGVsc2UgaWYgKFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBwYXJlbnQoKS0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9j
aygpKQorCisgICAgZGlydHlGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrUmVjdXJzaXZlKCk7CisK
KyAgICBpZiAoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKSkKICAgICAgICAgZmxvd1RocmVhZC0+Zmxvd1RocmVhZERlc2NlbmRhbnRJbnNl
cnRlZCh0aGlzKTsKLSAgICB2aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS5zZXRDdXJyZW50
UmVuZGVyRmxvd1RocmVhZChwcmV2aW91c1RocmVhZCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0
Ojp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKQpAQCAtMjA3Niw5ICsyMDM2LDkgQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkKCkKIHsKICAgICBpZiAoZmxvd1Ro
cmVhZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkKICAgICAgICAgcmV0dXJuOwotICAg
IAorCiAgICAgLy8gU29tZXRpbWVzIHdlIHJlbW92ZSB0aGUgZWxlbWVudCBmcm9tIHRoZSBmbG93
LCBidXQgaXQncyBub3QgZGVzdHJveWVkIGF0IHRoYXQgdGltZS4KLSAgICAvLyBJdCdzIG9ubHkg
dW50aWwgbGF0ZXIgd2hlbiB3ZSBhY3R1YWxseSBkZXN0cm95IGl0IGFuZCByZW1vdmUgYWxsIHRo
ZSBjaGlsZHJlbiBmcm9tIGl0LiAKKyAgICAvLyBJdCdzIG9ubHkgdW50aWwgbGF0ZXIgd2hlbiB3
ZSBhY3R1YWxseSBkZXN0cm95IGl0IGFuZCByZW1vdmUgYWxsIHRoZSBjaGlsZHJlbiBmcm9tIGl0
LgogICAgIC8vIEN1cnJlbnRseSwgdGhhdCBoYXBwZW5zIGZvciBmaXJzdExldHRlciBlbGVtZW50
cyBhbmQgbGlzdCBtYXJrZXJzLgogICAgIC8vIFBhc3MgaW4gdGhlIGZsb3cgdGhyZWFkIHNvIHRo
YXQgd2UgZG9uJ3QgaGF2ZSB0byBsb29rIGl0IHVwIGZvciBhbGwgdGhlIGNoaWxkcmVuLgogICAg
IHJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKGZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soKSk7CkBAIC0yMDk0LDcgKzIwNTQsMzkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92
ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKFJlbmRlckZsb3dUaHJlYWQqIHJlbmRlckYK
ICAgICAgICAgbG9jYWxGbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOyAv
LyBXZSBoYXZlIHRvIGFzay4gV2UgY2FuJ3QganVzdCBhc3N1bWUgd2UgYXJlIGluIHRoZSBzYW1l
IGZsb3cgdGhyZWFkLgogICAgIGlmIChsb2NhbEZsb3dUaHJlYWQpCiAgICAgICAgIGxvY2FsRmxv
d1RocmVhZC0+cmVtb3ZlRmxvd0NoaWxkSW5mbyh0aGlzKTsKLSAgICBzZXRGbG93VGhyZWFkU3Rh
dGUoTm90SW5zaWRlRmxvd1RocmVhZCk7CisgICAgc2V0Rmxvd1RocmVhZFN0YXRlKGxvY2FsRmxv
d1RocmVhZCA9PSByZW5kZXJGbG93VGhyZWFkID8gTm90SW5zaWRlRmxvd1RocmVhZCA6IEluc2lk
ZUluRmxvd1RocmVhZCk7CisKKyAgICBpZiAoIWlzUmVuZGVyQmxvY2soKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayh0aGlzKTsKKyAg
ICBibG9jay0+ZGlydHlGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Cit9CisKK3ZvaWQgUmVu
ZGVyT2JqZWN0OjpkaXJ0eUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tSZWN1cnNpdmUoKQorewor
ICAgIGlmIChmbG93VGhyZWFkU3RhdGUoKSA9PSBOb3RJbnNpZGVGbG93VGhyZWFkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkU2xv
dygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY2hpbGQt
PmRpcnR5Rmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja1JlY3Vyc2l2ZSgpOworCisgICAgUmVuZGVy
Rmxvd1RocmVhZCogZmxvd1RocmVhZCA9IG51bGxwdHI7CisKKyAgICBpZiAoIWlzUmVuZGVyQmxv
Y2soKSkgeworICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKKyAg
ICAgICAgaWYgKGNiKQorICAgICAgICAgICAgZmxvd1RocmVhZCA9IGNiLT5jYWNoZWRGbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVuZGVyQmxvY2sq
IGJsb2NrID0gdG9SZW5kZXJCbG9jayh0aGlzKTsKKworICAgICAgICBmbG93VGhyZWFkID0gYmxv
Y2stPmNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKworICAgICAgICBibG9jay0+
ZGlydHlGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgfQorCisgICAgaWYgKGZsb3dU
aHJlYWQpCisgICAgICAgIGZsb3dUaHJlYWQtPnJlbW92ZUZsb3dDaGlsZEluZm8odGhpcyk7CiB9
CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpkZXN0cm95QW5kQ2xlYW51cEFub255bW91c1dyYXBwZXJz
KCkKQEAgLTI2MDEsMTIgKzI1OTMsMTAgQEAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRl
ck9iamVjdDo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3QKICAgICBpZiAo
Zmxvd1RocmVhZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gdmlldygpLmZs
b3dUaHJlYWRDb250cm9sbGVyKCkuY3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKLSAgICBpZiAo
IWZsb3dUaHJlYWQpCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoIWZsb3dUaHJlYWQgfHwgIWZsb3dUaHJlYWQt
PmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgQVNTRVJUKGZsb3dUaHJlYWQgPT0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKTsKLQog
ICAgIC8vIEZJWE1FOiBPbmNlIHJlZ2lvbnMgYXJlIGZ1bGx5IGludGVncmF0ZWQgd2l0aCB0aGUg
Y29tcG9zaXRpbmcgc3lzdGVtIHdlIHNob3VsZCB1bmNvbW1lbnQgdGhpcyBhc3NlcnQuCiAgICAg
Ly8gVGhpcyBhc3NlcnQgbmVlZHMgdG8gYmUgZGlzYWJsZWQgYmVjYXVzZSBpdCdzIHBvc3NpYmxl
IHRvIGFzayBmb3IgdGhlIGFuY2VzdG9yIGNsaXBwaW5nIHJlY3RhbmdsZSBvZgogICAgIC8vIGEg
bGF5ZXIgd2l0aG91dCBrbm93aW5nIHRoZSBjb250YWluaW5nIHJlZ2lvbiBpbiBhZHZhbmNlLgpA
QCAtMjYxNiw2ICsyNjA2LDIwIEBAIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBSZW5kZXJPYmpl
Y3Q6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIG5h
bWVkRmxvd0ZyYWdtZW50OwogfQogCitSZW5kZXJGbG93VGhyZWFkKiBSZW5kZXJPYmplY3Q6OmZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdAoreworICAgIGlmIChmbG93VGhyZWFkU3Rh
dGUoKSA9PSBOb3RJbnNpZGVGbG93VGhyZWFkKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHJldHVybiBsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Cit9CisKK1JlbmRl
ckZsb3dUaHJlYWQqIFJlbmRlck9iamVjdDo6bG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9j
aygpIGNvbnN0Cit7CisgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7Cisg
ICAgcmV0dXJuIGNiID8gY2ItPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSA6IG51bGxwdHI7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA0NDIzMmZhMzY0YmU5MzcyYmIyODU5
MDcxNzFhY2IwNzUyZDkwOTY5Li43YmU1ZTVkMTljOTYxMTk0MjBjMmE0N2E0YWUyZTYxZDQ5MTJh
NTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0yMTksMTIg
KzIxOSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEZ1bmN0aW9uIHRvIHJldHVybiBvdXIgZW5jbG9z
aW5nIGZsb3cgdGhyZWFkIGlmIHdlIGFyZSBjb250YWluZWQgaW5zaWRlIG9uZS4gVGhpcwogICAg
IC8vIGZ1bmN0aW9uIGZvbGxvd3MgdGhlIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4uCi0gICAgUmVu
ZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayhTaG91bGRVc2VGbG93VGhy
ZWFkQ2FjaGUgdXNlQ2FjaGUgPSBVc2VGbG93VGhyZWFkQ2FjaGUpIGNvbnN0Ci0gICAgewotICAg
ICAgICBpZiAoZmxvd1RocmVhZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gKHVzZUNhY2hlID09IFNraXBGbG93VGhy
ZWFkQ2FjaGUpID8gbG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja05vQ2FjaGUoKSA6IGxv
Y2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICB9CisgICAgUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0OwogCiAgICAgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQqIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0Owog
CkBAIC04OTIsMTAgKzg4NywxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRQb3NDaGlsZE5l
ZWRzTGF5b3V0Qml0KGJvb2wgYikgeyBtX2JpdGZpZWxkcy5zZXRQb3NDaGlsZE5lZWRzTGF5b3V0
KGIpOyB9CiAgICAgdm9pZCBzZXROZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0Qml0KGJv
b2wgYikgeyBtX2JpdGZpZWxkcy5zZXROZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KGIp
OyB9CiAKKyAgICB2aXJ0dWFsIFJlbmRlckZsb3dUaHJlYWQqIGxvY2F0ZUZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKSBjb25zdDsKKyAgICB2b2lkIGRpcnR5Rmxvd1RocmVhZENvbnRhaW5pbmdC
bG9ja1JlY3Vyc2l2ZSgpOworCiBwcml2YXRlOgotICAgIFJlbmRlckZsb3dUaHJlYWQqIGxvY2F0
ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdDsKLSAgICBSZW5kZXJGbG93VGhyZWFk
KiBsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrTm9DYWNoZSgpIGNvbnN0OwotICAgIAog
ICAgIHZvaWQgcmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWQoKTsKICAgICB2b2lkIHJlbW92ZUZy
b21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKFJlbmRlckZsb3dUaHJlYWQqKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAppbmRleCBkZTM2MjI4OTVjNzJiZmQ0
ODM0MGZlMjQ4N2E2NDc5NDI4Mjk0ZDI1Li40NWJkZWM3NGJhNzlhMjM0YjQxMGVmNzBmMzYxZGY5
MDQxMTg4ODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApA
QCAtMjIzLDcgKzIyMyw2IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlT3ZlcmZsb3dGcm9t
Rmxvd1RocmVhZCgpCiAgICAgewogICAgICAgICAvLyBXaGVuIGdldHRpbmcgdGhlIG92ZXJmbG93
IGZyb20gdGhlIGZsb3cgdGhyZWFkIHdlIG5lZWQgdG8gdGVtcG9yYXJseSByZXNldCB0aGUgY3Vy
cmVudCBmbG93IHRocmVhZCBiZWNhdXNlCiAgICAgICAgIC8vIHdlJ3JlIGNoYW5naW5nIGZsb3dz
LgotICAgICAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxvd1RocmVhZE1h
aW50YWluZXIobV9mbG93VGhyZWFkKTsKICAgICAgICAgbGF5b3V0UmVjdCA9IGxheW91dE92ZXJm
bG93UmVjdEZvckJveChtX2Zsb3dUaHJlYWQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IGQ2MDk1MzE1Y2FjNWM3MzUzNDFjOGIwOTRjOGY4MmJj
YjJiNzc2NTUuLjVkZDZhZjliZjNlM2Q3YmNlZTQxYTZhMDAxYTNiM2Y1NWY4ZmNhMzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTEzMTYsMTAgKzEzMTYsMTIg
QEAgdm9pZCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZChj
b25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKICAgICBpZiAoIW1fZmxvd1RocmVhZENvbnRyb2xs
ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckZsb3dUaHJlYWQqIGN1cnJlbnRGbG93
VGhyZWFkID0gbV9mbG93VGhyZWFkQ29udHJvbGxlci0+Y3VycmVudFJlbmRlckZsb3dUaHJlYWQo
KTsKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBjdXJyZW50Rmxvd1RocmVhZCA9IG9iamVjdC5mbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKCFjdXJyZW50Rmxvd1RocmVhZCkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgbV9sYXlvdXRTdGF0ZS0+c2V0Q3VycmVudFJlbmRlckZsb3dU
aHJlYWQoY3VycmVudEZsb3dUaHJlYWQpOworCiAgICAgY3VycmVudEZsb3dUaHJlYWQtPnB1c2hG
bG93VGhyZWFkTGF5b3V0U3RhdGUob2JqZWN0KTsKIH0KIApAQCAtMTMyOCw3ICsxMzMwLDcgQEAg
dm9pZCBSZW5kZXJWaWV3Ojpwb3BMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKCkKICAg
ICBpZiAoIW1fZmxvd1RocmVhZENvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJl
bmRlckZsb3dUaHJlYWQqIGN1cnJlbnRGbG93VGhyZWFkID0gbV9mbG93VGhyZWFkQ29udHJvbGxl
ci0+Y3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBjdXJy
ZW50Rmxvd1RocmVhZCA9IG1fbGF5b3V0U3RhdGUtPmN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCk7
CiAgICAgaWYgKCFjdXJyZW50Rmxvd1RocmVhZCkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCA1NjdjNTNmYjU2OGI2ODA2N2JjOTEyYzQz
MzY4OWYwNWY5YzEwMjk3Li43ZjFmOTgxNmM0OGQyZTJjZTM5YWJhYTA4MzgxNmUyOGNiM2QxNjFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTI5NSw3ICsyOTUsNyBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVh
ZChjb25zdCBSZW5kZXJPYmplY3QmKTsKICAgICB2b2lkIHBvcExheW91dFN0YXRlRm9yQ3VycmVu
dEZsb3dUaHJlYWQoKTsKLSAgICAKKwogICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRTdGF0ZU1haW50
YWluZXI7CiAgICAgZnJpZW5kIGNsYXNzIExheW91dFN0YXRlRGlzYWJsZXI7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239800</attachid>
            <date>2014-10-14 08:10:20 -0700</date>
            <delta_ts>2014-10-14 09:47:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135563-20141014181021.patch</filename>
            <type>text/plain</type>
            <size>41642</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGU4MzhiMDZmZjcyZDY3
NjNkYjcwNTU0YWM5Yjg4ZDgzNzZmMzc1Ny4uNTEyZTMyMjAzMzgwNDJjMDhjNGM2ZWEyMWU0OGYx
ZmE1YzRhZGYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE0LTEwLTE0ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIEFTU0VSVElPTiAgRkFJTEVE
IGluIFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU1NjMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgbmV3IG11bHRp
LWNvbHVtbiBjb2RlIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2hlbiB0aGUgZG9jdW1lbnQgY29u
dGFpbnMgbmVzdGVkIGZyYWdtZW50YXRpb24KKyAgICAgICAgY29udGV4dHMuIFRoZSBwcm9ibGVt
IGlzIHRoZSBjdXJyZW50IGZsb3cgdGhyZWFkIGNvbmNlcHQgdGhhdCBjYW4gc3RvcmUgb25seSBv
bmUgUmVuZGVyRmxvd1RocmVhZAorICAgICAgICBhdCBhIHRpbWUgYW5kIHVzZSBpdCBkdXJpbmcg
bGF5b3V0LgorCisgICAgICAgIFRoZSBzdG9yZWQgZmxvdyB0aHJlYWQgaXMgYWx3YXlzIGNvcnJl
Y3QgZm9yIHJlZ2lvbnMgYmVjYXVzZSBuYW1lZCBmbG93IHRocmVhZHMgYXJlIGFic29sdXRsZXkg
cG9zaXRpb25lZAorICAgICAgICBzbyBldmVyeSBjaGlsZCByZW5kZXJlciBpcyBjb250YWluZWQg
aW5zaWRlIHRoZW0gKHdpdGggdGhlIGV4cGNldGlvbiBvZiBmaXhlZCBwb3NpdGlvbmVkIGVsZW1l
bnRzIHdoaWNoIGFyZQorICAgICAgICB0cmVhdGVkIHNlcGFyYXRlbHkpLgorCisgICAgICAgIEZv
ciBtdWx0aS1jb2x1bW4gZWxlbWVudHMgdGhpcyBpcyBubyBsb25nZXIgdGhlIGNhc2UuIEFuIGFi
c29sdXRlbHkgcG9zaXRpb25lZCBlbGVtZW50IGluc2lkZSBhIHN0YXRpYworICAgICAgICBtdWx0
aS1jb2x1bW4gZWxlbWVudCB3aWxsIGJlIGNvbnRhaW5lZCBieSBhIGJsb2NrIG91dHNpZGUgdGhl
IGZyYWdtZW50YXRpb24gY29udGV4dC4gSXQgY2FuIGV2ZW4gYmUKKyAgICAgICAgY29udGFpbmVk
IGJ5IGEgZGlmZmVyZW50IG11bHRpLWNvbHVtbiBlbGVtZW50IGluIHRoZSBjYXNlIG9mIG5lc3Rl
ZCBmbG93IHRocmVhZHMuCisKKyAgICAgICAgVGhlIHBhdGNoIGJlbG93IGV4cGxvcmVzIGEgc29s
dXRpb24gdGhhdCdzIG5vdCBiYXNlZCBvbiBhIGN1cnJlbnQgZmxvdyB0aHJlYWQgc3RvcmVkIGds
b2JhbGx5LiBUaGUgcHJvcG9zZWQKKyAgICAgICAgcGF0Y2ggbWFrZXMgZXZlcnkgYmxvY2sgdG8g
c3RvcmUgYSBwb2ludGVyIHRvIGl0cyBmcmFnbWVudGF0aW9uIGNvbnRleHQgYW5kIGEgZmxhZyB0
aGF0IHN0YXRlcyBpZiB0aGlzIHBvaW50ZXIKKyAgICAgICAgbmVlZHMgdG8gYmUgdXBkYXRlZCBv
ciBub3QuIElmIHRoZSByZW5kZXJlciBpcyBub3QgYSBibG9jayBpdCB3aWxsIGdldCBpdHMgZmxv
dyB0aHJlYWQgZnJvbSB0aGUgY29udGFpbmluZworICAgICAgICBibG9jay4gT25jZSB0aGUgY29u
dGFpbmluZyBmbG93IHRocmVhZCBpcyByZXF1ZXN0ZWQgZm9yIHRoZSBibG9jaywgdGhlIHBvaW50
ZXIgaXMgY29tcHV0ZWQgYW5kIGNhY2hlZCB1bnRpbAorICAgICAgICBpbnZhbGlkYXRlZDoKKyAg
ICAgICAgLSB3aGVuIGEgc3VidHJlZSBpcyByZW1vdmVkIGZyb20gYSBmbG93IHRocmVhZAorICAg
ICAgICAtIHdoZW4gdGhlIHBvc2l0aW9uIHByb3BlcnR5IG9mIGFuIGVsZW1lbnQgaW5zaWRlIGEg
ZmxvdyB0aHJlYWQgY2hhbmdlcworCisgICAgICAgIFRoZSBwcm9jZXNzIGlzIHJlY3Vyc2l2ZSBh
bmQgaXQgZG9lc24ndCBhZmZlY3QgZWxlbWVudHMgdGhhdCBhcmUgbm90IG5lc3RlZCBpbnNpZGUg
YSBmbG93IHRocmVhZC4gSWYgYSBibG9jaworICAgICAgICBjaGFuZ2VzIHBvc2l0aW9uIGZyb20g
cmVsYXRpdmUgdG8gc3RhdGljLCBhbnkgZWxlbWVudCB0aGF0IHdhcyBjb250YWluZWQgYnkgaXQg
Y2FuIG9ubHkgYmUgY29udGFpbmVkIGJ5IGFuCisgICAgICAgIGFuY2VzdG9yIG9mIHRoZSBibG9j
ay4gVGhpcyBhbmNlc3RvciB3aWxsIHN0aWxsIGJlIG91dHNpZGUgb2YgYW55IGZsb3cgdGhyZWFk
LiBUaGlzIGVuc3VyZXMgdGhhdCBub24tZnJhZ21lbnRhdGlvbgorICAgICAgICBjb2RlIGlzIG5v
dCBhZmZlY3RlZCBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuCisKKyAgICAgICAgVGhl
IHBhdGNoIGFmZmVjdHMgdGhlIHJlc3VsdHMgb2YgdGhlIHBlcmZvcm1hbmNlIHRlc3RzOgorICAg
ICAgICAtIHRoZSByZWdpb25zIGxheW91dCB0ZXN0cyBoYXZlIGEgZGVjcmVhc2VkIHBlcmZvcm1h
bmNlIHJhZ2luZyBmcm9tIDIlIHRvIDUtNiUKKyAgICAgICAgLSB0aGUgcmVnaW9ucyBzZWxlY3Rp
b24gdGVzdHMgaGF2ZSBhbiBpbmNyZWFzZWQgcGVyZm9ybWFuY2UgcmFnaW5nIGZyb20gMS0yJSB0
byAxMCUKKyAgICAgICAgLSB0aGUgbXVsdGljb2x1bW4gbGF5b3V0IHRlc3RzIChub3cgcGVuZGlu
ZyByZXZpZXcgaW4gYjEzNzY4NykgaGF2ZSBhbiBpbmNyZWFzZWQgcGVyZm9ybWFuY2UKKyAgICAg
ICAgcmFnaW5nIGZyb20gMS44JSB0byA1JQorCisgICAgICAgIFRlc3Q6IGZhc3QvbXVsdGljb2wv
bXVsdGljb2wtYWxsLXBvc2l0aW9uZWQtY3Jhc2guaHRtbAorCisgICAgICAgICogcmVuZGVyaW5n
L0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb3dUaHJlYWRD
b250cm9sbGVyOjpGbG93VGhyZWFkQ29udHJvbGxlcik6CisgICAgICAgICogcmVuZGVyaW5nL0Zs
b3dUaHJlYWRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJv
bGxlcjo6Y3VycmVudFJlbmRlckZsb3dUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Rmxvd1RocmVhZENvbnRyb2xsZXI6OnNldEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dFN0YXRlOjpjdXJyZW50UmVuZGVyRmxvd1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXRTdGF0ZTo6c2V0Q3VycmVudFJlbmRlckZsb3dUaHJlYWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a1JhcmVEYXRhOjpSZW5kZXJCbG9ja1JhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpzdHlsZVdpbGxDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb2xsYXBz
ZUFub255bW91c0JveENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjYWNo
ZWRGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpjYWNoZWRGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrTmVlZHNVcGRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNldENhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2tOZWVkc1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlQ2Fj
aGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6bG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlV2lsbENoYW5nZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmJvcmRlckJveFJlY3RJblJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUFsbExh
eWVyVG9SZWdpb25NYXBwaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjpyZXBhaW50UmVjdGFuZ2xlSW5SZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJlbnRS
ZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lcjo6Q3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFp
bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cnJlbnRSZW5kZXJGbG93VGhyZWFk
TWFpbnRhaW5lcjo6fkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyOjpDdXJy
ZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXI6On5DdXJyZW50UmVuZGVyRmxvd1RocmVh
ZERpc2FibGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjptYXBM
YXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzaG93UmVnaW9u
c0luZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aW5zZXJ0ZWRJ
bnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5k
ZXJGbG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVtb3ZlRnJv
bVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjppbnZhbGlkYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja0luY2x1ZGluZ0Rlc2NlbmRh
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y3VycmVudFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYXRlRmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6
OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tOb0NhY2hlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJP
YmplY3Q6OmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJSZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpjb21wdXRl
T3ZlcmZsb3dGcm9tRmxvd1RocmVhZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlRm9yQ3Vy
cmVudEZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cG9wTGF5b3V0
U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaDoKKwogMjAxNC0xMC0xNCAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNv
bT4KIAogICAgICAgICBNdWx0aXBsZSByZWZhY3RvcnMgaW4gUmVuZGVyTWF0aE1MT3BlcmF0b3IK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3Bw
CmluZGV4IDJjZmE0MjgzYzc5ZjliNWVlYTNlMTc4YWQxMjJkYzhiNjlmYmI5YTguLjhjZjE0YWNm
YTIwYzg0NGMxMWZlNzkxYWI4MzU1ZjRhYzg0OGFkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcApAQCAtNDIsNyArNDIsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZsb3dUaHJlYWRDb250cm9sbGVyOjpGbG93VGhyZWFkQ29u
dHJvbGxlcihSZW5kZXJWaWV3KiB2aWV3KQogICAgIDogbV92aWV3KHZpZXcpCi0gICAgLCBtX2N1
cnJlbnRSZW5kZXJGbG93VGhyZWFkKDApCiAgICAgLCBtX2lzUmVuZGVyTmFtZWRGbG93VGhyZWFk
T3JkZXJEaXJ0eShmYWxzZSkKICAgICAsIG1fZmxvd1RocmVhZHNXaXRoQXV0b0xvZ2ljYWxIZWln
aHRSZWdpb25zKDApCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxv
d1RocmVhZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFk
Q29udHJvbGxlci5oCmluZGV4IDBjZGI1NmNhMzJiYmRjYjA1MjE2OTlkYmU3YTEyYzQwNzIxZDcw
N2MuLmZkNmU2MjFkMGJkYTFhNGFkYWQ2NWNjM2MwN2ZjZTYzZjE0ZTU1MWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5oCkBAIC00OCw5ICs0
OCw2IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBGbG93VGhyZWFkQ29udHJvbGxlcihSZW5kZXJW
aWV3Kik7CiAgICAgfkZsb3dUaHJlYWRDb250cm9sbGVyKCk7CiAKLSAgICBSZW5kZXJGbG93VGhy
ZWFkKiBjdXJyZW50UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFJl
bmRlckZsb3dUaHJlYWQ7IH0KLSAgICB2b2lkIHNldEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKFJl
bmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpIHsgbV9jdXJyZW50UmVuZGVyRmxvd1RocmVhZCA9
IGZsb3dUaHJlYWQ7IH0KLQogICAgIGJvb2wgaXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRPcmRlckRp
cnR5KCkgY29uc3QgeyByZXR1cm4gbV9pc1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVyRGlydHk7
IH0KICAgICB2b2lkIHNldElzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3JkZXJEaXJ0eShib29sIGRp
cnR5KQogICAgIHsKQEAgLTk2LDcgKzkzLDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAg
IFJlbmRlclZpZXcqIG1fdmlldzsKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBtX2N1cnJlbnRSZW5k
ZXJGbG93VGhyZWFkOwogICAgIGJvb2wgbV9pc1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVyRGly
dHk7CiAgICAgdW5zaWduZWQgbV9mbG93VGhyZWFkc1dpdGhBdXRvTG9naWNhbEhlaWdodFJlZ2lv
bnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q+IG1fcmVu
ZGVyTmFtZWRGbG93VGhyZWFkTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRl
LmgKaW5kZXggMmY3Mjk5ZWNkMWFjOTlkMGRlZTA0YTFhYjI2Zjg3ZWE2ZjhlYjE5Zi4uZDBlN2E5
ZTUwNjExZjAyZmIwMjJlMDg0NmYxOWNiZjhlYWVkYmVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xheW91dFN0YXRlLmgKQEAgLTgzLDYgKzgzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dExpbmVHcmlkUGFnaW5hdGlvbk9yaWdpbihjb25zdCBMYXlvdXRTaXplJiBvcmlnaW4pIHsgbV9s
aW5lR3JpZFBhZ2luYXRpb25PcmlnaW4gPSBvcmlnaW47IH0KICAgICAKICAgICBib29sIG5lZWRz
QmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9yZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGluZUdyaWQgfHwgKG1faXNQYWdpbmF0ZWQgJiYgbV9wYWdlTG9naWNhbEhlaWdodCk7IH0KKwor
ICAgIFJlbmRlckZsb3dUaHJlYWQqIGN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJyZW50UmVuZGVyRmxvd1RocmVhZDsgfQorICAgIHZvaWQgc2V0Q3VycmVudFJl
bmRlckZsb3dUaHJlYWQoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkgeyBtX2N1cnJlbnRS
ZW5kZXJGbG93VGhyZWFkID0gZmxvd1RocmVhZDsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgcHJv
cGFnYXRlTGluZUdyaWRJbmZvKFJlbmRlckJveCopOwogICAgIHZvaWQgZXN0YWJsaXNoTGluZUdy
aWQoUmVuZGVyQmxvY2tGbG93Kik7CkBAIC0xMjIsNiArMTI2LDggQEAgcHVibGljOgogICAgIExh
eW91dFNpemUgbV9saW5lR3JpZE9mZnNldDsKICAgICBMYXlvdXRTaXplIG1fbGluZUdyaWRQYWdp
bmF0aW9uT3JpZ2luOwogCisgICAgUmVuZGVyRmxvd1RocmVhZCogbV9jdXJyZW50UmVuZGVyRmxv
d1RocmVhZCB7IG51bGxwdHIgfTsKKwogI2lmbmRlZiBOREVCVUcKICAgICBSZW5kZXJPYmplY3Qq
IG1fcmVuZGVyZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCmluZGV4IDgyNDEyODczYTg1MDU1OTdlNTY0OGI5ZTc2OGI0ZTNlNjRhYWM4NjguLjc4NDAz
NTE1Y2ZmMmVjMGQ3OTg5Y2MzNzQ1N2Y1NzBhNGZiMzdjNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNjgsNyArNjgsOSBAQAogI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybVN0YXRlLmgiCisKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgogI2luY2x1ZGUg
PHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIApAQCAtOTQsNyArOTYsNyBAQCBzdGF0aWMgVHJhY2tl
ZERlc2NlbmRhbnRzTWFwKiBnUGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwID0gMDsKIAogc3Rh
dGljIFRyYWNrZWRDb250YWluZXJNYXAqIGdQb3NpdGlvbmVkQ29udGFpbmVyTWFwID0gMDsKIHN0
YXRpYyBUcmFja2VkQ29udGFpbmVyTWFwKiBnUGVyY2VudEhlaWdodENvbnRhaW5lck1hcCA9IDA7
Ci0gICAgCisKIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxM
aXN0SGFzaFNldDxSZW5kZXJJbmxpbmUqPj4+IENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcDsK
IAogc3RydWN0IFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uIHsKQEAgLTEy
MSwxNCArMTIzLDE3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RGVsYXllZFVwZGF0ZVNjcm9s
bEluZm9TdGFjaz4mIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91CiBzdHJ1Y3QgUmVuZGVyQmxv
Y2tSYXJlRGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyQmxvY2tSYXJlRGF0
YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFJlbmRlckJsb2NrUmFy
ZURhdGEoKSAKKyAgICBSZW5kZXJCbG9ja1JhcmVEYXRhKCkKICAgICAgICAgOiBtX3BhZ2luYXRp
b25TdHJ1dCgwKQogICAgICAgICAsIG1fcGFnZUxvZ2ljYWxPZmZzZXQoMCkKLSAgICB7IAorICAg
ICAgICAsIG1fZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayhOdWxsb3B0KQorICAgIHsKICAgICB9
CiAKICAgICBMYXlvdXRVbml0IG1fcGFnaW5hdGlvblN0cnV0OwogICAgIExheW91dFVuaXQgbV9w
YWdlTG9naWNhbE9mZnNldDsKKworICAgIE9wdGlvbmFsPFJlbmRlckZsb3dUaHJlYWQqPiBtX2Zs
b3dUaHJlYWRDb250YWluaW5nQmxvY2s7CiB9OwogCiB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgUmVu
ZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tSYXJlRGF0YT4+IFJlbmRlckJs
b2NrUmFyZURhdGFNYXA7CkBAIC0yNjYsNyArMjcxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5
bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3
U3QKICAgICBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxl
KCkgPyAmc3R5bGUoKSA6IG51bGxwdHI7CiAKICAgICBzZXRSZXBsYWNlZChuZXdTdHlsZS5pc0Rp
c3BsYXlJbmxpbmVUeXBlKCkpOwotICAgIAorCiAgICAgaWYgKG9sZFN0eWxlICYmIHBhcmVudCgp
ICYmIGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0ICYmIG9sZFN0eWxlLT5wb3NpdGlvbigp
ICE9IG5ld1N0eWxlLnBvc2l0aW9uKCkpIHsKICAgICAgICAgaWYgKG5ld1N0eWxlLnBvc2l0aW9u
KCkgPT0gU3RhdGljUG9zaXRpb24pCiAgICAgICAgICAgICAvLyBDbGVhciBvdXIgcG9zaXRpb25l
ZCBvYmplY3RzIGxpc3QuIE91ciBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgZGVzY2VuZGFudHMgd2ls
bCBiZQpAQCAtMjgzLDcgKzI4OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdC
bG9jay0+cGFyZW50KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAg
ICAgaWYgKGlzPFJlbmRlckJsb2NrPigqY29udGFpbmluZ0Jsb2NrKSkKICAgICAgICAgICAgICAg
ICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykucmVtb3ZlUG9zaXRpb25l
ZE9iamVjdHModGhpcywgTmV3Q29udGFpbmluZ0Jsb2NrKTsKICAgICAgICAgfQpAQCAtMzA5LDkg
KzMxNCwxMiBAQCBzdGF0aWMgYm9vbCBib3JkZXJPclBhZGRpbmdMb2dpY2FsV2lkdGhDaGFuZ2Vk
KGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSwgY29ucwogdm9pZCBSZW5kZXJCbG9jazo6c3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSkKIHsKICAgICBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsK
LSAgICAKKwogICAgIFJlbmRlclN0eWxlJiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAKKyAgICBpZiAo
b2xkU3R5bGUgJiYgb2xkU3R5bGUtPnBvc2l0aW9uKCkgIT0gbmV3U3R5bGUucG9zaXRpb24oKSkK
KyAgICAgICAgaW52YWxpZGF0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tJbmNsdWRpbmdEZXNj
ZW5kYW50cygpOworCiAgICAgaWYgKCFpc0Fub255bW91c0Jsb2NrKCkpIHsKICAgICAgICAgLy8g
RW5zdXJlIHRoYXQgYWxsIG9mIG91ciBjb250aW51YXRpb24gYmxvY2tzIHBpY2sgdXAgdGhlIG5l
dyBzdHlsZS4KICAgICAgICAgZm9yIChSZW5kZXJCbG9jayogY3VyckNvbnQgPSBibG9ja0VsZW1l
bnRDb250aW51YXRpb24oKTsgY3VyckNvbnQ7IGN1cnJDb250ID0gY3VyckNvbnQtPmJsb2NrRWxl
bWVudENvbnRpbnVhdGlvbigpKSB7CkBAIC0zMjQsNyArMzMyLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHkKIAogICAgIHByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihQcm9wYWdh
dGVUb0Jsb2NrQ2hpbGRyZW5Pbmx5KTsKICAgICBtX2xpbmVIZWlnaHQgPSAtMTsKLSAgICAKKwog
ICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIG91ciBib3JkZXIvcGFkZGluZyB0byBjaGFuZ2UsIGJ1
dCBmb3IgdGhlIG92ZXJhbGwgbG9naWNhbCB3aWR0aCBvZiB0aGUgYmxvY2sgdG8KICAgICAvLyBl
bmQgdXAgYmVpbmcgdGhlIHNhbWUuIFdlIGtlZXAgdHJhY2sgb2YgdGhpcyBjaGFuZ2Ugc28gaW4g
bGF5b3V0QmxvY2ssIHdlIGNhbiBrbm93IHRvIHNldCByZWxheW91dENoaWxkcmVuPXRydWUuCiAg
ICAgbV9oYXNCb3JkZXJPclBhZGRpbmdMb2dpY2FsV2lkdGhDaGFuZ2VkID0gb2xkU3R5bGUgJiYg
ZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgbmVlZHNMYXlvdXQoKSAmJiBib3JkZXJP
clBhZGRpbmdMb2dpY2FsV2lkdGhDaGFuZ2VkKG9sZFN0eWxlLCAmbmV3U3R5bGUpOwpAQCAtNjkw
LDcgKzY5OCw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQo
UmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyQmxvY2sqIGNoCiAgICAgUmVuZGVyT2JqZWN0KiBu
ZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygpOwogCiAgICAgUmVuZGVyRmxvd1RocmVh
ZCogY2hpbGRGbG93VGhyZWFkID0gY2hpbGQtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsK
LSAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxvd1RocmVhZE1haW50YWlu
ZXIoY2hpbGRGbG93VGhyZWFkKTsKICAgICBpZiAoY2hpbGRGbG93VGhyZWFkICYmIGNoaWxkRmxv
d1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKICAgICAgICAgdG9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQoY2hpbGRGbG93VGhyZWFkKS0+cmVtb3ZlRmxvd0NoaWxkSW5mbyhjaGlsZCk7
CiAKQEAgLTMyNTQsNiArMzI2MSw1MCBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExl
dHRlcigpCiAgICAgY3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihmaXJzdExldHRlckNvbnRhaW5l
ciwgZG93bmNhc3Q8UmVuZGVyVGV4dD4oZmlyc3RMZXR0ZXJPYmopKTsKIH0KIAorUmVuZGVyRmxv
d1RocmVhZCogUmVuZGVyQmxvY2s6OmNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBj
b25zdAoreworICAgIFJlbmRlckJsb2NrUmFyZURhdGEqIHJhcmVEYXRhID0gZ2V0UmFyZURhdGEo
dGhpcyk7CisKKyAgICBpZiAoIXJhcmVEYXRhIHx8ICFyYXJlRGF0YS0+bV9mbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiByYXJl
RGF0YS0+bV9mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrLnZhbHVlKCk7Cit9CisKK2Jvb2wgUmVu
ZGVyQmxvY2s6OmNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tOZWVkc1VwZGF0ZSgpIGNv
bnN0Cit7CisgICAgUmVuZGVyQmxvY2tSYXJlRGF0YSogcmFyZURhdGEgPSBnZXRSYXJlRGF0YSh0
aGlzKTsKKworICAgIGlmICghcmFyZURhdGEgfHwgIXJhcmVEYXRhLT5tX2Zsb3dUaHJlYWRDb250
YWluaW5nQmxvY2spCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlbmRlckJsb2NrOjpzZXRDYWNoZWRGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2Nr
TmVlZHNVcGRhdGUoKQoreworICAgIFJlbmRlckJsb2NrUmFyZURhdGEmIHJhcmVEYXRhID0gZW5z
dXJlUmFyZURhdGEodGhpcyk7CisgICAgcmFyZURhdGEubV9mbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrID0gTnVsbG9wdDsKK30KKworUmVuZGVyRmxvd1RocmVhZCogUmVuZGVyQmxvY2s6OnVwZGF0
ZUNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soUmVuZGVyRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCkgY29uc3QKK3sKKyAgICBSZW5kZXJCbG9ja1JhcmVEYXRhJiByYXJlRGF0YSA9IGVuc3Vy
ZVJhcmVEYXRhKHRoaXMpOworICAgIHJhcmVEYXRhLm1fZmxvd1RocmVhZENvbnRhaW5pbmdCbG9j
ayA9IGZsb3dUaHJlYWQ7CisKKyAgICByZXR1cm4gZmxvd1RocmVhZDsKK30KKworUmVuZGVyRmxv
d1RocmVhZCogUmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBj
b25zdAoreworICAgIFJlbmRlckJsb2NrUmFyZURhdGEqIHJhcmVEYXRhID0gZ2V0UmFyZURhdGEo
dGhpcyk7CisgICAgaWYgKCFyYXJlRGF0YSB8fCAhcmFyZURhdGEtPm1fZmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaykKKyAgICAgICAgcmV0dXJuIHVwZGF0ZUNhY2hlZEZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soUmVuZGVyQm94Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpOwor
CisgICAgQVNTRVJUKHJhcmVEYXRhLT5tX2Zsb3dUaHJlYWRDb250YWluaW5nQmxvY2sudmFsdWUo
KSA9PSBSZW5kZXJCb3g6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSk7CisgICAg
cmV0dXJuIHJhcmVEYXRhLT5tX2Zsb3dUaHJlYWRDb250YWluaW5nQmxvY2sudmFsdWUoKTsKK30K
KwogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6cGFnaW5hdGlvblN0cnV0KCkgY29uc3QKIHsKICAg
ICBSZW5kZXJCbG9ja1JhcmVEYXRhKiByYXJlRGF0YSA9IGdldFJhcmVEYXRhKHRoaXMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCA3MmQ0YTg4ZDc3NTcyMzlhYmY3
ZmQzNjZiMjA5ODFmNDk4MTNmZjNmLi4xMzJkNmUxNGJiMmVhZmI1MjE2OTYyYmY3MjEwZjQyYjU5
ZDBjMzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMzEyLDcg
KzMxMiwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29sbGFw
c2VBbm9ueW1vdXNCbG9ja0NoaWxkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgUmVu
ZGVyRmxvd1RocmVhZCogY2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0Owor
ICAgIHZvaWQgc2V0Q2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja05lZWRzVXBkYXRlKCk7
CisgICAgYm9vbCBjYWNoZWRGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrTmVlZHNVcGRhdGUoKSBj
b25zdDsKKwogcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgUmVuZGVyRmxvd1RocmVhZCogbG9jYXRl
Rmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlv
dXQoKSBvdmVycmlkZTsKQEAgLTQ0OSw3ICs0NTQsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCBMYXlvdXRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0VW5pdCBvdXRsaW5lV2lkdGgpIGNv
bnN0IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyU3R5bGUmIG91dGxp
bmVTdHlsZUZvclJlcGFpbnQoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKLSAgICAKKwogICAgIHZp
cnR1YWwgUmVuZGVyRWxlbWVudCogaG92ZXJBbmNlc3RvcigpIGNvbnN0IG92ZXJyaWRlIGZpbmFs
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pIG92ZXJyaWRl
IGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZEJlY2FtZU5vbklubGluZShSZW5kZXJPYmpl
Y3QqIGNoaWxkKSBvdmVycmlkZSBmaW5hbDsKQEAgLTQ4OSw2ICs0OTQsOCBAQCBwcml2YXRlOgog
ICAgIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gY2xvbmUoKSBjb25zdDsKICAgICBSZW5kZXJCbG9j
ayogY29udGludWF0aW9uQmVmb3JlKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogCisgICAg
UmVuZGVyRmxvd1RocmVhZCogdXBkYXRlQ2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayhS
ZW5kZXJGbG93VGhyZWFkKikgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNSYXJlRGF0
YSgpIGNvbnN0OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcAppbmRleCBmMGVlYjAxYmZlMzg3NGQ1YjU3ODJiNjhkOTM4ZGJmYzdjMjRmYmMwLi4z
ZmVmYTQ1Yjc4ZDY3NWNiZWQzM2RkM2M0ZTA2YTNhZWZlNGJlYjBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMTk4NSwxOCArMTk4NSwxMCBA
QCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbgogICAgIGlmIChvbGRTdHlsZSkgewogICAgICAgICBF
UG9zaXRpb24gb2xkUG9zaXRpb24gPSBvbGRTdHlsZS0+cG9zaXRpb24oKTsKICAgICAgICAgRVBv
c2l0aW9uIG5ld1Bvc2l0aW9uID0gbmV3U3R5bGUucG9zaXRpb24oKTsKLSAgICAgICAgCisKICAg
ICAgICAgaWYgKHBhcmVudCgpICYmIGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0ICYmIG9s
ZFBvc2l0aW9uICE9IG5ld1Bvc2l0aW9uKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbnNGbG9h
dHMoKSAmJiAhaXNGbG9hdGluZygpICYmICFpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBuZXdT
dHlsZS5oYXNPdXRPZkZsb3dQb3NpdGlvbigpKQogICAgICAgICAgICAgICAgIG1hcmtBbGxEZXNj
ZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKLQotICAgICAgICAgICAgLy8gSWYgdGhpcyBi
bG9jayBpcyBpbnNpZGUgYSBtdWx0aWNvbCBhbmQgaXMgbW92aW5nIGZyb20gaW4tZmxvdyBwb3Np
dGlvbmluZyB0byBvdXQtb2YtZmxvdyBwb3NpdGlvbmluZywKLSAgICAgICAgICAgIC8vIHJlbW92
ZSBpdHMgaW5mbyAoc3VjaCBhcyBsaW5lcy10by1yZWdpb24gbWFwcGluZykgZnJvbSB0aGUgZmxv
d3RocmVhZCBiZWNhdXNlIGl0IHdvbid0IGJlIGFibGUgdG8gZG8gaXQgbGF0ZXIuCi0gICAgICAg
ICAgICAvLyBUaGUgZmxvd3RocmVhZCB3aWxsIG5vIGxvbmdlciBiZSBpbiBpdHMgY29udGFpbmlu
ZyBibG9jayBjaGFpbiBhbmQsIGFzIHN1Y2gsIGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2sgd2ls
bCByZXR1cm4gbnVsbC4KLSAgICAgICAgICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhy
ZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayhTa2lwRmxvd1RocmVhZENhY2hlKSkgewot
ICAgICAgICAgICAgICAgIGlmIChmbG93VGhyZWFkLT5pc1JlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZCgpICYmICFpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAobmV3UG9zaXRpb24gPT0gQWJz
b2x1dGVQb3NpdGlvbiB8fCBuZXdQb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uKSkKLSAgICAgICAg
ICAgICAgICAgICAgZmxvd1RocmVhZC0+cmVtb3ZlRmxvd0NoaWxkSW5mbyh0aGlzKTsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAppbmRleCAwNWNjZDNhN2JhODJhODlkNWZmZjIxNGJkNDBhMmM5ZTc1YWJiNjMxLi4x
NTUzMjFhMzllNTllMGQ3ZDQxNDViODhhZWVmOWM4ZWExM2Y1OGRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIExheW91dFJlY3QgUmVu
ZGVyQm94Ojpib3JkZXJCb3hSZWN0SW5SZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24sIFJlbmRl
ckJveFJlZ2lvCiAgICAgICAgIC8vIEZJWE1FOiBJbiBhIHBlcmZlY3Qgd29ybGQgdGhpcyBjb25k
aXRpb24gc2hvdWxkIG5ldmVyIGhhcHBlbi4KICAgICAgICAgcmV0dXJuIGJvcmRlckJveFJlY3Qo
KTsKICAgICB9Ci0gICAgCisKICAgICBBU1NFUlQoZmxvd1RocmVhZC0+cmVnaW9uSW5SYW5nZShy
ZWdpb24sIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIGxv
Z2ljYWwgd2lkdGggYW5kIHBsYWNlbWVudCBpbiB0aGlzIHJlZ2lvbi4KQEAgLTIwNywyMSArMjA3
LDI2IEBAIExheW91dFJlY3QgUmVuZGVyQm94Ojpib3JkZXJCb3hSZWN0SW5SZWdpb24oUmVuZGVy
UmVnaW9uKiByZWdpb24sIFJlbmRlckJveFJlZ2lvCiAgICAgLy8gV2UgaGF2ZSBjYWNoZWQgaW5z
ZXRzLgogICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gYm94SW5mby0+bG9naWNhbFdpZHRo
KCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IGJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7
Ci0gICAgICAgIAorCiAgICAgLy8gTm93IGFwcGx5IHRoZSBwYXJlbnQgaW5zZXQgc2luY2UgaXQg
aXMgY3VtdWxhdGl2ZSB3aGVuZXZlciBhbnl0aGluZyBpbiB0aGUgY29udGFpbmluZyBibG9jayBj
aGFpbiBzaGlmdHMuCiAgICAgLy8gRklYTUU6IERvZXNuJ3Qgd29yayByaWdodCB3aXRoIHBlcnBl
bmRpY3VsYXIgd3JpdGluZyBtb2Rlcy4KICAgICBjb25zdCBSZW5kZXJCbG9jayogY3VycmVudEJv
eCA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGN1cnJlbnRC
b3hJbmZvID0gY3VycmVudEJveC0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24pOworICAgIFJl
bmRlckJveFJlZ2lvbkluZm8qIGN1cnJlbnRCb3hJbmZvID0gaXNSZW5kZXJGbG93VGhyZWFkKCkg
PyBudWxscHRyIDogY3VycmVudEJveC0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24pOwogICAg
IHdoaWxlIChjdXJyZW50Qm94SW5mbyAmJiBjdXJyZW50Qm94SW5mby0+aXNTaGlmdGVkKCkpIHsK
ICAgICAgICAgaWYgKGN1cnJlbnRCb3gtPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gTFRSKQogICAg
ICAgICAgICAgbG9naWNhbExlZnQgKz0gY3VycmVudEJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0IC09IChjdXJyZW50Qm94LT5sb2dp
Y2FsV2lkdGgoKSAtIGN1cnJlbnRCb3hJbmZvLT5sb2dpY2FsV2lkdGgoKSkgLSBjdXJyZW50Qm94
SW5mby0+bG9naWNhbExlZnQoKTsKKworICAgICAgICAvLyBPbmNlIHdlIHJlYWNoIHRoZSBmcmFn
bWVudGF0aW9uIGNvbnRhaW5lciB3ZSBzaG91bGQgc3RvcC4KKyAgICAgICAgaWYgKGN1cnJlbnRC
b3gtPmlzUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAg
Y3VycmVudEJveCA9IGN1cnJlbnRCb3gtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICByZWdp
b24gPSBjdXJyZW50Qm94LT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7CiAgICAg
ICAgIGN1cnJlbnRCb3hJbmZvID0gY3VycmVudEJveC0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdp
b24pOwogICAgIH0KLSAgICAKKwogICAgIGlmIChjYWNoZUZsYWcgPT0gRG9Ob3RDYWNoZVJlbmRl
ckJveFJlZ2lvbkluZm8pCiAgICAgICAgIGRlbGV0ZSBib3hJbmZvOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggOTYxNTA5NmMyNjJlZDNi
N2Y1YjcyNjc5N2Q4MTNmNjg3NGRhNDZkZi4uOWM5NzI1YTJlNzZhNWRlNmQyMWFlMzM3MWViYjFi
ZGZkNGRiZTIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmNwcApAQCAtMTk3LDcgKzE5Nyw2IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6bGF5b3V0
KCkKIAogICAgIHZhbGlkYXRlUmVnaW9ucygpOwogCi0gICAgQ3VycmVudFJlbmRlckZsb3dUaHJl
YWRNYWludGFpbmVyIGN1cnJlbnRGbG93VGhyZWFkU2V0dGVyKHRoaXMpOwogICAgIFJlbmRlckJs
b2NrRmxvdzo6bGF5b3V0KCk7CiAKICAgICBtX3BhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQgPSBmYWxz
ZTsKQEAgLTI4OCwxMCArMjg3LDYgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVBbGxM
YXllclRvUmVnaW9uTWFwcGluZ3MoKQogICAgIGlmICghY29sbGVjdHNHcmFwaGljc0xheWVyc1Vu
ZGVyUmVnaW9ucygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBXZSBjYW4ndCB1
c2UgY3VycmVudEZsb3dUaHJlYWQgYXMgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBpbnRlcmxlYXZl
ZCBmbG93IHRocmVhZHMgYW5kIHRoZSB3cm9uZyBvbmUgY291bGQgYmUgdXNlZC4KLSAgICAvLyBM
ZXQgZWFjaCByZWdpb24gZmlndXJlIG91dCB0aGUgcHJvcGVyIGVuY2xvc2luZyBmbG93IHRocmVh
ZC4KLSAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyIGRpc2FibGVyKCZ2aWV3KCkp
OwotCiAgICAgLy8gSWYgdGhlIFJlbmRlckZsb3dUaHJlYWQgaGFkIGEgei1pbmRleCBsYXllciB1
cGRhdGUsIHRoZW4gd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIHRvby4K
ICAgICBib29sIG5lZWRzTGF5ZXJVcGRhdGUgPSBsYXllcigpLT5pc0RpcnR5UmVuZGVyRmxvd1Ro
cmVhZCgpIHx8IG1fbGF5ZXJzVG9SZWdpb25NYXBwaW5nc0RpcnR5IHx8ICFtX2xheWVyVG9SZWdp
b25NYXAuZ2V0KCk7CiAgICAgbGF5ZXIoKS0+dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CkBA
IC0zODgsMTAgKzM4Myw2IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cmVwYWludFJlY3Rhbmds
ZUluUmVnaW9ucyhjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVjdCkKIAogICAgIExheW91dFN0
YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcigmdmlldygpKTsgLy8gV2UgY2FuJ3QgdXNl
IGxheW91dCBzdGF0ZSB0byByZXBhaW50LCBzaW5jZSB0aGUgcmVnaW9ucyBhcmUgc29tZXdoZXJl
IGVsc2UuCiAKLSAgICAvLyBXZSBjYW4ndCB1c2UgY3VycmVudEZsb3dUaHJlYWQgYXMgaXQgaXMg
cG9zc2libGUgdG8gaGF2ZSBpbnRlcmxlYXZlZCBmbG93IHRocmVhZHMgYW5kIHRoZSB3cm9uZyBv
bmUgY291bGQgYmUgdXNlZC4KLSAgICAvLyBMZXQgZWFjaCByZWdpb24gZmlndXJlIG91dCB0aGUg
cHJvcGVyIGVuY2xvc2luZyBmbG93IHRocmVhZC4KLSAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVh
ZERpc2FibGVyIGRpc2FibGVyKCZ2aWV3KCkpOwotICAgIAogICAgIGZvciAoYXV0byYgcmVnaW9u
IDogbV9yZWdpb25MaXN0KQogICAgICAgICByZWdpb24tPnJlcGFpbnRGbG93VGhyZWFkQ29udGVu
dChyZXBhaW50UmVjdCk7CiB9CkBAIC0xNTIyLDQyICsxNTEzLDUgQEAgQ29udGFpbmluZ1JlZ2lv
bk1hcCYgUmVuZGVyRmxvd1RocmVhZDo6Y29udGFpbmluZ1JlZ2lvbk1hcCgpCiAgICAgcmV0dXJu
ICptX2xpbmVUb1JlZ2lvbk1hcC5nZXQoKTsKIH0KIAotQ3VycmVudFJlbmRlckZsb3dUaHJlYWRN
YWludGFpbmVyOjpDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIoUmVuZGVyRmxvd1Ro
cmVhZCogcmVuZGVyRmxvd1RocmVhZCkKLSAgICA6IG1fcmVuZGVyRmxvd1RocmVhZChyZW5kZXJG
bG93VGhyZWFkKQotICAgICwgbV9wcmV2aW91c1JlbmRlckZsb3dUaHJlYWQoMCkKLXsKLSAgICBp
ZiAoIW1fcmVuZGVyRmxvd1RocmVhZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEZsb3dUaHJlYWRD
b250cm9sbGVyJiBjb250cm9sbGVyID0gbV9yZW5kZXJGbG93VGhyZWFkLT52aWV3KCkuZmxvd1Ro
cmVhZENvbnRyb2xsZXIoKTsKLSAgICBtX3ByZXZpb3VzUmVuZGVyRmxvd1RocmVhZCA9IGNvbnRy
b2xsZXIuY3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKLSAgICAvLyBSZW1vdmUgdGhlIGFzc2Vy
dCBzbyB3ZSBjYW4gdXNlIHRoaXMgdG8gY2hhbmdlIHRoZSBmbG93IHRocmVhZCBjb250ZXh0Lgot
ICAgIC8vIEFTU0VSVCghbV9wcmV2aW91c1JlbmRlckZsb3dUaHJlYWQgfHwgIXJlbmRlckZsb3dU
aHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpOwotICAgIGNvbnRyb2xsZXIuc2V0Q3Vy
cmVudFJlbmRlckZsb3dUaHJlYWQobV9yZW5kZXJGbG93VGhyZWFkKTsKLX0KLQotQ3VycmVudFJl
bmRlckZsb3dUaHJlYWRNYWludGFpbmVyOjp+Q3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFp
bmVyKCkKLXsKLSAgICBpZiAoIW1fcmVuZGVyRmxvd1RocmVhZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIEZsb3dUaHJlYWRDb250cm9sbGVyJiBjb250cm9sbGVyID0gbV9yZW5kZXJGbG93VGhyZWFk
LT52aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKTsKLSAgICBBU1NFUlQoY29udHJvbGxlci5j
dXJyZW50UmVuZGVyRmxvd1RocmVhZCgpID09IG1fcmVuZGVyRmxvd1RocmVhZCk7Ci0gICAgY29u
dHJvbGxlci5zZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChtX3ByZXZpb3VzUmVuZGVyRmxvd1Ro
cmVhZCk7Ci19Ci0KLUN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXI6OkN1cnJlbnRSZW5k
ZXJGbG93VGhyZWFkRGlzYWJsZXIoUmVuZGVyVmlldyogdmlldykKLSAgICA6IG1fdmlldyh2aWV3
KQotICAgICwgbV9yZW5kZXJGbG93VGhyZWFkKDApCi17Ci0gICAgbV9yZW5kZXJGbG93VGhyZWFk
ID0gbV92aWV3LT5mbG93VGhyZWFkQ29udHJvbGxlcigpLmN1cnJlbnRSZW5kZXJGbG93VGhyZWFk
KCk7Ci0gICAgaWYgKG1fcmVuZGVyRmxvd1RocmVhZCkKLSAgICAgICAgdmlldy0+Zmxvd1RocmVh
ZENvbnRyb2xsZXIoKS5zZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZCgwKTsKLX0KLQotQ3VycmVu
dFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcjo6fkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJs
ZXIoKQotewotICAgIGlmIChtX3JlbmRlckZsb3dUaHJlYWQpCi0gICAgICAgIG1fdmlldy0+Zmxv
d1RocmVhZENvbnRyb2xsZXIoKS5zZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChtX3JlbmRlckZs
b3dUaHJlYWQpOwotfQotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCmluZGV4IGJiNTE2ZWYzOTA0ZjA1OTdmZTJh
MjlmM2U1OGRiZDExNWYxMmYzOGMuLjc3ZDJjMmUyMTRhOTAzNjBkOTI0OTBlMjgyYTY0ZjgxNmI4
MDZjNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaApA
QCAtMjQ0LDYgKzI0NCw4IEBAIHByaXZhdGU6CiBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyRmxvd1Ro
cmVhZChEb2N1bWVudCYsIFBhc3NSZWY8UmVuZGVyU3R5bGU+KTsKIAorICAgIHZpcnR1YWwgUmVu
ZGVyRmxvd1RocmVhZCogbG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyRmxvd1RocmVhZCo+KHRoaXMpOyB9CisK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCA9IDA7CiAKICAgICAv
LyBPdmVycmlkZGVuIGJ5IGNvbHVtbnMvcGFnZXMgdG8gc2V0IHVwIGFuIGluaXRpYWwgbG9naWNh
bCB3aWR0aCBvZiB0aGUgcGFnZSB3aWR0aCBldmVuIHdoZW4KQEAgLTM3NCwyNiArMzc2LDYgQEAg
cHJvdGVjdGVkOgogCiBSRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyRmxvd1RocmVhZCwg
aXNSZW5kZXJGbG93VGhyZWFkKCkpCiAKLWNsYXNzIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFp
bnRhaW5lciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VycmVudFJlbmRlckZsb3dUaHJl
YWRNYWludGFpbmVyKTsKLXB1YmxpYzoKLSAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50
YWluZXIoUmVuZGVyRmxvd1RocmVhZCopOwotICAgIH5DdXJyZW50UmVuZGVyRmxvd1RocmVhZE1h
aW50YWluZXIoKTsKLXByaXZhdGU6Ci0gICAgUmVuZGVyRmxvd1RocmVhZCogbV9yZW5kZXJGbG93
VGhyZWFkOwotICAgIFJlbmRlckZsb3dUaHJlYWQqIG1fcHJldmlvdXNSZW5kZXJGbG93VGhyZWFk
OwotfTsKLQotY2xhc3MgQ3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlciB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcik7Ci1wdWJs
aWM6Ci0gICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcihSZW5kZXJWaWV3Kik7Ci0g
ICAgfkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXIoKTsKLXByaXZhdGU6Ci0gICAgUmVu
ZGVyVmlldyogbV92aWV3OwotICAgIFJlbmRlckZsb3dUaHJlYWQqIG1fcmVuZGVyRmxvd1RocmVh
ZDsKLX07Ci0KIC8vIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZv
ciBkZWJ1Z2dpbmcuCiAjaWZuZGVmIE5ERUJVRwogdGVtcGxhdGUgPD4gc3RydWN0IFZhbHVlVG9T
dHJpbmc8UmVuZGVyUmVnaW9uKj4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKaW5kZXggNDRmMjQyZmI0Yjc2OWNkMzM1NGI0MGQxMzk2NmVkYmNhZDZlODMwNS4uZWFi
OTI1YTgwYWRmNDc0MDcxYWZhMzJjOGY1ZjRjMDBmZDVhNDVkZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zNzcxLDEyICszNzcxLDYgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVy
UGFpbnRpbmdJbmZvJgogCiAgICAgLy8gRG9uJ3QgcGFpbnQgdGhlIGxheWVyIGlmIHRoZSByZW5k
ZXJlciBkb2Vzbid0IGJlbG9uZyB0byB0aGlzIHJlZ2lvbi4KICAgICAvLyBUaGlzIGlzIHRydWUg
YXMgbG9uZyBhcyB3ZSBjbGFtcCB0aGUgcmFuZ2Ugb2YgYSBib3ggdG8gaXRzIGNvbnRhaW5pbmcg
YmxvY2sgcmFuZ2UuCi0KLSAgICAvLyBEaXNhYmxlIG5hbWVkIGZsb3cgcmVnaW9uIGluZm9ybWF0
aW9uIGZvciBpbiBmbG93IHRocmVhZHMgc3VjaCBhcyBtdWx0aS1jb2wuCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXI+IGZsb3dUaHJlYWREaXNhYmxl
cjsKLSAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKEV4Y2x1ZGVDb21wb3NpdGVkUGFn
aW5hdGVkTGF5ZXJzKSkKLSAgICAgICAgZmxvd1RocmVhZERpc2FibGVyID0gc3RkOjptYWtlX3Vu
aXF1ZTxDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyPigmcmVuZGVyZXIoKS52aWV3KCkp
OwotCiAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3Vy
cmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50
KSB7CiAgICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgpKTsKQEAgLTQ4
MjEsMTEgKzQ4MTUsNiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihS
ZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgIGlmICghaXNTZWxm
UGFpbnRpbmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICAvLyBEaXNhYmxlIG5hbWVkIGZsb3cgcmVnaW9uIGluZm9y
bWF0aW9uIGZvciBpbiBmbG93IHRocmVhZHMgc3VjaCBhcyBtdWx0aS1jb2wuCi0gICAgc3RkOjp1
bmlxdWVfcHRyPEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXI+IGZsb3dUaHJlYWREaXNh
YmxlcjsKLSAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKEV4Y2x1ZGVDb21wb3NpdGVk
UGFnaW5hdGVkTGF5ZXJzKSkKLSAgICAgICAgZmxvd1RocmVhZERpc2FibGVyID0gc3RkOjptYWtl
X3VuaXF1ZTxDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyPigmcmVuZGVyZXIoKS52aWV3
KCkpOwotCiAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0g
Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAKICAgICAvLyBQcmV2ZW50IGhpdHRp
bmcgdGhlIGZpeGVkIGxheWVycyBpbnNpZGUgdGhlIGZsb3cgdGhyZWFkIHdoZW4gaGl0dGluZyB0
aHJvdWdoIHJlZ2lvbnMuCkBAIC01MjMyLDggKzUyMjEsNyBAQCBib29sIFJlbmRlckxheWVyOjpt
YXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKENsaXBSZWN0cyYgY2xpcFJlY3Rz
KSBjbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21l
bnQtPnBhcmVudCgpICYmIG5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnQoKS0+aXNSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKTsKLSAgICAKLSAgICBDdXJyZW50UmVuZGVyRmxvd1Ro
cmVhZERpc2FibGVyIGZsb3dUaHJlYWREaXNhYmxlcigmcmVuZGVyZXIoKS52aWV3KCkpOworCiAg
ICAgQ2xpcFJlY3RzQ29udGV4dCB0YXJnZXRDbGlwUmVjdHNDb250ZXh0KCZuYW1lZEZsb3dGcmFn
bWVudC0+ZnJhZ21lbnRDb250YWluZXJMYXllcigpLCBUZW1wb3JhcnlDbGlwUmVjdHMpOwogICAg
IG5hbWVkRmxvd0ZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5lckxheWVyKCkuY2FsY3VsYXRlQ2xp
cFJlY3RzKHRhcmdldENsaXBSZWN0c0NvbnRleHQsIGNsaXBSZWN0cyk7CiAKQEAgLTY3MDksNyAr
NjY5Nyw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgpCiB2b2lkIFJl
bmRlckxheWVyOjpwYWludE5hbWVkRmxvd1RocmVhZEluc2lkZVJlZ2lvbihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZWdpb24sIExheW91dFJlY3Qg
cGFpbnREaXJ0eVJlY3QsIExheW91dFBvaW50IHBhaW50T2Zmc2V0LCBQYWludEJlaGF2aW9yIHBh
aW50QmVoYXZpb3IsIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQogewogICAgIExheW91dFJl
Y3QgcmVnaW9uQ29udGVudEJveCA9IHRvUmVuZGVyQm94KHJlZ2lvbi0+bGF5ZXJPd25lcigpKS5j
b250ZW50Qm94UmVjdCgpOwotICAgIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lciBm
bG93VGhyZWFkTWFpbnRhaW5lcih0b1JlbmRlckZsb3dUaHJlYWQoJnJlbmRlcmVyKCkpKTsKICAg
ICBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciByZWdpb25NYWludGFpbmVyKCpyZWdpb24p
OwogICAgIHJlZ2lvbi0+c2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKCk7CiAKQEAgLTY4MTYs
NyArNjgwMyw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdEZsb3dUaHJlYWRJ
ZlJlZ2lvbkZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtCiAgICAgICAgIGhpdFRlc3RSZWN0
SW5GbG93VGhyZWFkLm1vdmUoaGl0VGVzdE9mZnNldCk7CiAgICAgICAgIGhpdFRlc3RSZWN0SW5G
bG93VGhyZWFkLmV4cGFuZChMYXlvdXRTaXplKGZhYnMoKGRvdWJsZSloaXRUZXN0T2Zmc2V0Lndp
ZHRoKCkpLCBmYWJzKChkb3VibGUpaGl0VGVzdE9mZnNldC5oZWlnaHQoKSkpKTsKIAotICAgICAg
ICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxvd1RocmVhZE1haW50YWluZXIo
Zmxvd1RocmVhZCk7CiAgICAgICAgIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyIHJlZ2lv
bk1haW50YWluZXIocmVnaW9uKTsKIAogICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQo
cmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKaW5kZXggMzg3YzFjOTIyMTc4ZmI0ZDE5YmIyMjZjNzkyNTFiMzVjYTMwNTQ4
OS4uZDhhMzY4ZWVjMGVmMDNjYmQ2ZDQ5NTVhNjcyYjc0NmUxNzJkZDc5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTUyMiwzOCArNTIyLDYgQEAgc3Rh
dGljIGJvb2wgaGFzRml4ZWRQb3NJbk5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jayhjb25zdCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVuZGVyRmxvd1Ro
cmVhZCogUmVuZGVyT2JqZWN0Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrTm9DYWNo
ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGZsb3dUaHJlYWRTdGF0ZSgpICE9IE5vdEluc2lkZUZs
b3dUaHJlYWQpOwotCi0gICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gY29uc3RfY2FzdDxSZW5kZXJP
YmplY3QqPih0aGlzKTsKLSAgICB3aGlsZSAoY3VycikgewotICAgICAgICBpZiAoY3Vyci0+aXNS
ZW5kZXJGbG93VGhyZWFkKCkpCi0gICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJGbG93VGhyZWFk
KGN1cnIpOwotICAgICAgICBjdXJyID0gY3Vyci0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgfQot
ICAgIHJldHVybiAwOwotfQotCi1SZW5kZXJGbG93VGhyZWFkKiBSZW5kZXJPYmplY3Q6OmxvY2F0
ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdAotewotICAgIEFTU0VSVChmbG93VGhy
ZWFkU3RhdGUoKSAhPSBOb3RJbnNpZGVGbG93VGhyZWFkKTsKLQotICAgIC8vIFNlZSBpZiB3ZSBo
YXZlIHRoZSB0aHJlYWQgY2FjaGVkIGJlY2F1c2Ugd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlv
dXQuCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IHZpZXcoKS5mbG93VGhyZWFk
Q29udHJvbGxlcigpLmN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCk7Ci0gICAgaWYgKGZsb3dUaHJl
YWQgJiYgKGZsb3dUaHJlYWRTdGF0ZSgpID09IGZsb3dUaHJlYWQtPmZsb3dUaHJlYWRTdGF0ZSgp
KSkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHNsb3cgcGF0aCB3b3VsZCByZXR1cm4gdGhl
IHNhbWUgcmVzdWx0IGFzIG91ciBjYWNoZS4KLSAgICAgICAgLy8gRklYTUU6IEZvciB0aGUgbW9t
ZW50LCBvbmx5IGFwcGx5IHRoaXMgYXNzZXJ0aW9uIHRvIHJlZ2lvbnMsIGFzIG11bHRpY29sCi0g
ICAgICAgIC8vIHN0aWxsIGhhcyBzb21lIGlzc3VlcyBhbmQgdHJpZ2dlcnMgdGhpcyBhc3NlcnQu
Ci0gICAgICAgIC8vIENyZWF0ZWQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMjk0NiBmb3IgdGhpcyBpc3N1ZS4KLSAgICAgICAgQVNTRVJUKCFmbG93VGhyZWFkLT5p
c1JlbmRlck5hbWVkRmxvd1RocmVhZCgpIHx8IGZsb3dUaHJlYWQgPT0gbG9jYXRlRmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9ja05vQ2FjaGUoKSk7Ci0gICAgICAgIHJldHVybiBmbG93VGhyZWFkOwot
ICAgIH0KLSAgICAKLSAgICAvLyBOb3QgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQgc28gaGF2ZSB0
byBmaW5kIHRoZSB0aHJlYWQgdGhlIHNsb3cgd2F5LgotICAgIHJldHVybiBsb2NhdGVGbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrTm9DYWNoZSgpOwotfQotCiBSZW5kZXJCbG9jayogUmVuZGVyT2Jq
ZWN0OjpmaXJzdExpbmVCbG9jaygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CkBAIC0xNDM4LDgg
KzE0MDYsNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2hvd0xpbmVUcmVlRm9yVGhpcygpIGNvbnN0
CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpzaG93UmVnaW9uc0luZm9ybWF0aW9uKCkgY29uc3QKIHsK
LSAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyIGZsb3dUaHJlYWREaXNhYmxlcigm
dmlldygpKTsKLQogICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaygpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0g
aXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKGJveCkg
ewpAQCAtMjA0OCwxNyArMjAxNCw5IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjppbnNlcnRlZEludG9U
cmVlKCkKIAogICAgIGlmICghaXNGbG9hdGluZygpICYmIHBhcmVudCgpLT5jaGlsZHJlbklubGlu
ZSgpKQogICAgICAgICBwYXJlbnQoKS0+ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQodGhpcyk7
Ci0gICAgCi0gICAgLy8gV2UgaGF2ZSB0byB1bnNldCB0aGUgY3VycmVudCBsYXlvdXQgUmVuZGVy
Rmxvd1RocmVhZCBoZXJlLCBzaW5jZSBpbnNlcnRlZEludG9UcmVlKCkgY2FuIGhhcHBlbiBpbgot
ICAgIC8vIHRoZSBtaWRkbGUgb2YgbGF5b3V0IGJ1dCBmb3Igb2JqZWN0cyBpbnNpZGUgYSBuZXN0
ZWQgZmxvdyB0aHJlYWQgdGhhdCBpcyBzdGlsbCBiZWluZyBwb3B1bGF0ZWQuIFRoaXMKLSAgICAv
LyB3aWxsIGNhdXNlIGFuIGFjY3VyYXRlIGNyYXdsIHRvIGhhcHBlbiBpbiBvcmRlciB0byBlbnN1
cmUgdGhhdCB0aGUgcmlnaHQgZmxvdyB0aHJlYWQgaXMgbm90aWZpZWQuCi0gICAgUmVuZGVyRmxv
d1RocmVhZCogcHJldmlvdXNUaHJlYWQgPSB2aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS5j
dXJyZW50UmVuZGVyRmxvd1RocmVhZCgpOwotICAgIHZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxl
cigpLnNldEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKG51bGxwdHIpOwotICAgIGlmIChwYXJlbnQo
KS0+aXNSZW5kZXJGbG93VGhyZWFkKCkpCi0gICAgICAgIHRvUmVuZGVyRmxvd1RocmVhZChwYXJl
bnQoKSktPmZsb3dUaHJlYWREZXNjZW5kYW50SW5zZXJ0ZWQodGhpcyk7Ci0gICAgZWxzZSBpZiAo
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IHBhcmVudCgpLT5mbG93VGhyZWFkQ29udGFp
bmluZ0Jsb2NrKCkpCisKKyAgICBpZiAoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkKICAgICAgICAgZmxvd1RocmVhZC0+Zmxvd1RocmVh
ZERlc2NlbmRhbnRJbnNlcnRlZCh0aGlzKTsKLSAgICB2aWV3KCkuZmxvd1RocmVhZENvbnRyb2xs
ZXIoKS5zZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChwcmV2aW91c1RocmVhZCk7CiB9CiAKIHZv
aWQgUmVuZGVyT2JqZWN0Ojp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKQpAQCAtMjA3NSw5ICsyMDMz
LDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkKCkKIHsK
ICAgICBpZiAoZmxvd1RocmVhZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkKICAgICAg
ICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gU29tZXRpbWVzIHdlIHJlbW92ZSB0aGUgZWxlbWVu
dCBmcm9tIHRoZSBmbG93LCBidXQgaXQncyBub3QgZGVzdHJveWVkIGF0IHRoYXQgdGltZS4KLSAg
ICAvLyBJdCdzIG9ubHkgdW50aWwgbGF0ZXIgd2hlbiB3ZSBhY3R1YWxseSBkZXN0cm95IGl0IGFu
ZCByZW1vdmUgYWxsIHRoZSBjaGlsZHJlbiBmcm9tIGl0LiAKKyAgICAvLyBJdCdzIG9ubHkgdW50
aWwgbGF0ZXIgd2hlbiB3ZSBhY3R1YWxseSBkZXN0cm95IGl0IGFuZCByZW1vdmUgYWxsIHRoZSBj
aGlsZHJlbiBmcm9tIGl0LgogICAgIC8vIEN1cnJlbnRseSwgdGhhdCBoYXBwZW5zIGZvciBmaXJz
dExldHRlciBlbGVtZW50cyBhbmQgbGlzdCBtYXJrZXJzLgogICAgIC8vIFBhc3MgaW4gdGhlIGZs
b3cgdGhyZWFkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBsb29rIGl0IHVwIGZvciBhbGwgdGhl
IGNoaWxkcmVuLgogICAgIHJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKGZsb3dU
aHJlYWRDb250YWluaW5nQmxvY2soKSk7CkBAIC0yMDkzLDcgKzIwNTEsMzIgQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKFJlbmRlckZsb3dU
aHJlYWQqIHJlbmRlckYKICAgICAgICAgbG9jYWxGbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaygpOyAvLyBXZSBoYXZlIHRvIGFzay4gV2UgY2FuJ3QganVzdCBhc3N1bWUgd2Ug
YXJlIGluIHRoZSBzYW1lIGZsb3cgdGhyZWFkLgogICAgIGlmIChsb2NhbEZsb3dUaHJlYWQpCiAg
ICAgICAgIGxvY2FsRmxvd1RocmVhZC0+cmVtb3ZlRmxvd0NoaWxkSW5mbyh0aGlzKTsKLSAgICBz
ZXRGbG93VGhyZWFkU3RhdGUoTm90SW5zaWRlRmxvd1RocmVhZCk7CisgICAgaWYgKGlzPFJlbmRl
ckJsb2NrPigqdGhpcykpCisgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqdGhpcykuc2V0
Q2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja05lZWRzVXBkYXRlKCk7CisKKyAgICBzZXRG
bG93VGhyZWFkU3RhdGUobG9jYWxGbG93VGhyZWFkID09IHJlbmRlckZsb3dUaHJlYWQgPyBOb3RJ
bnNpZGVGbG93VGhyZWFkIDogSW5zaWRlSW5GbG93VGhyZWFkKTsKK30KKwordm9pZCBSZW5kZXJP
YmplY3Q6OmludmFsaWRhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrSW5jbHVkaW5nRGVzY2Vu
ZGFudHMoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKK3sKKyAgICBpZiAoZmxvd1RocmVh
ZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGlzPFJlbmRlckJsb2NrPigqdGhpcykpIHsKKyAgICAgICAgUmVuZGVyQmxvY2smIGJsb2Nr
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCp0aGlzKTsKKworICAgICAgICBpZiAoYmxvY2suY2Fj
aGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja05lZWRzVXBkYXRlKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgZmxvd1RocmVhZCA9IGJsb2NrLmNhY2hlZEZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKTsKKyAgICAgICAgYmxvY2suc2V0Q2FjaGVkRmxvd1RocmVhZENvbnRhaW5p
bmdCbG9ja05lZWRzVXBkYXRlKCk7CisgICAgfQorCisgICAgaWYgKGZsb3dUaHJlYWQpCisgICAg
ICAgIGZsb3dUaHJlYWQtPnJlbW92ZUZsb3dDaGlsZEluZm8odGhpcyk7CisKKyAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY2hpbGQtPmludmFsaWRhdGVGbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrSW5jbHVkaW5nRGVzY2VuZGFudHMoZmxvd1RocmVhZCk7CiB9CiAKIHZvaWQg
UmVuZGVyT2JqZWN0OjpkZXN0cm95QW5kQ2xlYW51cEFub255bW91c1dyYXBwZXJzKCkKQEAgLTI1
OTcsMjIgKzI1ODAsMjIgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QKIAogUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQqIFJlbmRlck9iamVjdDo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KCkgY29uc3QKIHsKLSAgICBpZiAoZmxvd1RocmVhZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1Ro
cmVhZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZW5kZXJGbG93VGhyZWFkKiBm
bG93VGhyZWFkID0gdmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuY3VycmVudFJlbmRlckZs
b3dUaHJlYWQoKTsKLSAgICBpZiAoIWZsb3dUaHJlYWQpCisgICAgUmVuZGVyRmxvd1RocmVhZCog
Zmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoIWZsb3dU
aHJlYWQgfHwgIWZsb3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgQVNTRVJUKGZsb3dUaHJlYWQgPT0gZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jaygpKTsKLQogICAgIC8vIEZJWE1FOiBPbmNlIHJlZ2lvbnMgYXJlIGZ1bGx5
IGludGVncmF0ZWQgd2l0aCB0aGUgY29tcG9zaXRpbmcgc3lzdGVtIHdlIHNob3VsZCB1bmNvbW1l
bnQgdGhpcyBhc3NlcnQuCiAgICAgLy8gVGhpcyBhc3NlcnQgbmVlZHMgdG8gYmUgZGlzYWJsZWQg
YmVjYXVzZSBpdCdzIHBvc3NpYmxlIHRvIGFzayBmb3IgdGhlIGFuY2VzdG9yIGNsaXBwaW5nIHJl
Y3RhbmdsZSBvZgogICAgIC8vIGEgbGF5ZXIgd2l0aG91dCBrbm93aW5nIHRoZSBjb250YWluaW5n
IHJlZ2lvbiBpbiBhZHZhbmNlLgogICAgIC8vIEFTU0VSVChmbG93VGhyZWFkLT5jdXJyZW50UmVn
aW9uKCkgJiYgZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpLT5pc1JlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KCkpOwogCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdt
ZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9u
KCkpOwotICAgIHJldHVybiBuYW1lZEZsb3dGcmFnbWVudDsKKyAgICByZXR1cm4gdG9SZW5kZXJO
YW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpOworfQorCitSZW5k
ZXJGbG93VGhyZWFkKiBSZW5kZXJPYmplY3Q6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2soKSBjb25zdAoreworICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSB0aGlzLT5j
b250YWluaW5nQmxvY2soKTsKKyAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrID8gY29udGFpbmlu
Z0Jsb2NrLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgOiBudWxscHRyOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
aW5kZXggNDQyMzJmYTM2NGJlOTM3MmJiMjg1OTA3MTcxYWNiMDc1MmQ5MDk2OS4uNTJjNTU1MzNl
MGUyNmZmMTdjMDE1NTUyNTMwYzgxMzVmZjVlZmQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaApAQCAtMjEyLDE4ICsyMTIsMTQgQEAgcHVibGljOgogCiAgICAgYm9v
bCBmaXhlZFBvc2l0aW9uZWRXaXRoTmFtZWRGbG93Q29udGFpbmluZ0Jsb2NrKCkgY29uc3Q7CiAK
LSAgICBlbnVtIFNob3VsZFVzZUZsb3dUaHJlYWRDYWNoZSB7Ci0gICAgICAgIFVzZUZsb3dUaHJl
YWRDYWNoZSwKLSAgICAgICAgU2tpcEZsb3dUaHJlYWRDYWNoZQotICAgIH07Ci0KICAgICAvLyBG
dW5jdGlvbiB0byByZXR1cm4gb3VyIGVuY2xvc2luZyBmbG93IHRocmVhZCBpZiB3ZSBhcmUgY29u
dGFpbmVkIGluc2lkZSBvbmUuIFRoaXMKICAgICAvLyBmdW5jdGlvbiBmb2xsb3dzIHRoZSBjb250
YWluaW5nIGJsb2NrIGNoYWluLgotICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soU2hvdWxkVXNlRmxvd1RocmVhZENhY2hlIHVzZUNhY2hlID0gVXNlRmxvd1Ro
cmVhZENhY2hlKSBjb25zdAorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGZsb3dUaHJlYWRTdGF0ZSgpID09
IE5vdEluc2lkZUZsb3dUaHJlYWQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0
dXJuICh1c2VDYWNoZSA9PSBTa2lwRmxvd1RocmVhZENhY2hlKSA/IGxvY2F0ZUZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2tOb0NhY2hlKCkgOiBsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2Nr
KCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gbG9jYXRl
Rmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIH0KIAogICAgIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KiBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdDsKQEAgLTg5
MiwxMCArODg4LDEwIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFBvc0NoaWxkTmVlZHNMYXlv
dXRCaXQoYm9vbCBiKSB7IG1fYml0ZmllbGRzLnNldFBvc0NoaWxkTmVlZHNMYXlvdXQoYik7IH0K
ICAgICB2b2lkIHNldE5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXRCaXQoYm9vbCBiKSB7
IG1fYml0ZmllbGRzLnNldE5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoYik7IH0KIAor
ICAgIHZpcnR1YWwgUmVuZGVyRmxvd1RocmVhZCogbG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpIGNvbnN0OworICAgIHZvaWQgaW52YWxpZGF0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2tJbmNsdWRpbmdEZXNjZW5kYW50cyhSZW5kZXJGbG93VGhyZWFkKiA9IG51bGxwdHIpOworCiBw
cml2YXRlOgotICAgIFJlbmRlckZsb3dUaHJlYWQqIGxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soKSBjb25zdDsKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBsb2NhdGVGbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrTm9DYWNoZSgpIGNvbnN0OwotICAgIAogICAgIHZvaWQgcmVtb3ZlRnJvbVJl
bmRlckZsb3dUaHJlYWQoKTsKICAgICB2b2lkIHJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVj
dXJzaXZlKFJlbmRlckZsb3dUaHJlYWQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmNwcAppbmRleCBjZjUzYTMwMTdjZWYwY2FkNmU4M2YxM2VkMzZjODMxMzBiMGEy
NWFhLi5lODRhNTY5MDM3Yzk4ZWU4ZTQ5NThkMWRkMTQ5NzUxM2NkMDc4NmZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApAQCAtMjE4LDE1ICsyMTgsOCBAQCB2
b2lkIFJlbmRlclJlZ2lvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdAogdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVPdmVyZmxv
d0Zyb21GbG93VGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICAKLSAgICBM
YXlvdXRSZWN0IGxheW91dFJlY3Q7Ci0gICAgewotICAgICAgICAvLyBXaGVuIGdldHRpbmcgdGhl
IG92ZXJmbG93IGZyb20gdGhlIGZsb3cgdGhyZWFkIHdlIG5lZWQgdG8gdGVtcG9yYXJseSByZXNl
dCB0aGUgY3VycmVudCBmbG93IHRocmVhZCBiZWNhdXNlCi0gICAgICAgIC8vIHdlJ3JlIGNoYW5n
aW5nIGZsb3dzLgotICAgICAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxv
d1RocmVhZE1haW50YWluZXIobV9mbG93VGhyZWFkKTsKLSAgICAgICAgbGF5b3V0UmVjdCA9IGxh
eW91dE92ZXJmbG93UmVjdEZvckJveChtX2Zsb3dUaHJlYWQpOwotICAgIH0KIAorICAgIExheW91
dFJlY3QgbGF5b3V0UmVjdCA9IGxheW91dE92ZXJmbG93UmVjdEZvckJveChtX2Zsb3dUaHJlYWQp
OwogICAgIGxheW91dFJlY3Quc2V0TG9jYXRpb24oY29udGVudEJveFJlY3QoKS5sb2NhdGlvbigp
ICsgKGxheW91dFJlY3QubG9jYXRpb24oKSAtIG1fZmxvd1RocmVhZFBvcnRpb25SZWN0LmxvY2F0
aW9uKCkpKTsKIAogICAgIC8vIEZJWE1FOiBDb3JyZWN0bHkgYWRqdXN0IHRoZSBsYXlvdXQgb3Zl
cmZsb3cgZm9yIHdyaXRpbmcgbW9kZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAKaW5kZXggZDYwOTUzMTVjYWM1YzczNTM0MWM4YjA5NGM4ZjgyYmNiMmI3NzY1NS4uNWRk
NmFmOWJmM2UzZDdiY2VlNDFhNmEwMDFhM2IzZjU1ZjhmY2EzMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtMTMxNiwxMCArMTMxNiwxMiBAQCB2b2lkIFJlbmRl
clZpZXc6OnB1c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKGNvbnN0IFJlbmRlck9i
amVjdCYgb2JqZWN0KQogICAgIGlmICghbV9mbG93VGhyZWFkQ29udHJvbGxlcikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVuZGVyRmxvd1RocmVhZCogY3VycmVudEZsb3dUaHJlYWQgPSBtX2Zs
b3dUaHJlYWRDb250cm9sbGVyLT5jdXJyZW50UmVuZGVyRmxvd1RocmVhZCgpOworICAgIFJlbmRl
ckZsb3dUaHJlYWQqIGN1cnJlbnRGbG93VGhyZWFkID0gb2JqZWN0LmZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKTsKICAgICBpZiAoIWN1cnJlbnRGbG93VGhyZWFkKQogICAgICAgICByZXR1cm47
CiAKKyAgICBtX2xheW91dFN0YXRlLT5zZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChjdXJyZW50
Rmxvd1RocmVhZCk7CisKICAgICBjdXJyZW50Rmxvd1RocmVhZC0+cHVzaEZsb3dUaHJlYWRMYXlv
dXRTdGF0ZShvYmplY3QpOwogfQogCkBAIC0xMzI4LDcgKzEzMzAsNyBAQCB2b2lkIFJlbmRlclZp
ZXc6OnBvcExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJlYWQoKQogICAgIGlmICghbV9mbG93
VGhyZWFkQ29udHJvbGxlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyRmxvd1RocmVh
ZCogY3VycmVudEZsb3dUaHJlYWQgPSBtX2Zsb3dUaHJlYWRDb250cm9sbGVyLT5jdXJyZW50UmVu
ZGVyRmxvd1RocmVhZCgpOworICAgIFJlbmRlckZsb3dUaHJlYWQqIGN1cnJlbnRGbG93VGhyZWFk
ID0gbV9sYXlvdXRTdGF0ZS0+Y3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKICAgICBpZiAoIWN1
cnJlbnRGbG93VGhyZWFkKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5oCmluZGV4IDU2N2M1M2ZiNTY4YjY4MDY3YmM5MTJjNDMzNjg5ZjA1ZjljMTAy
OTcuLjdmMWY5ODE2YzQ4ZDJlMmNlMzlhYmFhMDgzODE2ZTI4Y2IzZDE2MWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMjk1LDcgKzI5NSw3IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHB1c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKGNvbnN0IFJlbmRl
ck9iamVjdCYpOwogICAgIHZvaWQgcG9wTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCgp
OwotICAgIAorCiAgICAgZnJpZW5kIGNsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lcjsKICAgICBm
cmllbmQgY2xhc3MgTGF5b3V0U3RhdGVEaXNhYmxlcjsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRjNzE1ZjE5ZmRhYTgx
YTljYTRhMzAwNjE3Mzk0MzZlOGFlZTcyMjMuLjk4ODhjZTQ1MWExZmE4ZGIwOWUzOGJkMWZiYTZl
M2VjNWE2MjA2NWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNC0xMC0xNCAgQW5kcmVpIEJ1
Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KKworICAgICAgICBBU1NFUlRJT04gIEZBSUxFRCBpbiBX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpnZXRSZWdpb25SYW5nZUZvckJveAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NTYzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSB0ZXN0IHZlcmlmeWluZyB0
aGF0IHBvc2l0aW9uZWQgZWxlbWVudHMgaW5zaWRlIG11bHRpLWNvbHVtbiBjb250YWluZXJzIGRv
bid0CisgICAgICAgIGNhdXNlIGFzc2VydGlvbnMgb3IgY3Jhc2hlcy4KKworICAgICAgICAqIGZh
c3QvbXVsdGljb2wvbXVsdGljb2wtYWxsLXBvc2l0aW9uZWQtY3Jhc2gtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L211bHRpY29sL211bHRpY29sLWFsbC1wb3NpdGlvbmVkLWNy
YXNoLmh0bWw6IEFkZGVkLgorCiAyMDE0LTEwLTE0ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxl
eEBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFkZCB0ZXN0IHRvIGNoZWNrIHN0cmV0Y2h5IHZhbHVl
IGlzIGNhc2Ugc2Vuc2l0aXZlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211bHRpY29s
L211bHRpY29sLWFsbC1wb3NpdGlvbmVkLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvbXVsdGljb2wvbXVsdGljb2wtYWxsLXBvc2l0aW9uZWQtY3Jhc2gtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVkM2VlMWNmZWY2NGI0Y2QxNjQ4ZDI2NDNhMTM1ZjYxM2Y2NDY1NWUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL211bHRpY29sLWFsbC1w
b3NpdGlvbmVkLWNyYXNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitUZXN0IGZvciB0aGUg
YnVnIDEzNTU2My4gSXQgc2hvdWxkIG5vdCBjcmFzaCBvciBhc3NlcnQuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L211bHRpY29sL211bHRpY29sLWFsbC1wb3NpdGlvbmVkLWNyYXNoLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL211bHRpY29sLWFsbC1wb3NpdGlvbmVkLWNy
YXNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjE1NWE4MDZmNTBiY2Y5N2E5NzYwMjY0MjhjNjNkMGY1YjY4
ZWNjNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbXVsdGlj
b2wtYWxsLXBvc2l0aW9uZWQtY3Jhc2guaHRtbApAQCAtMCwwICsxLDE3IEBACis8aHRtbD4KKzxo
ZWFkPgorPHN0eWxlPgorKiB7CisgICAgLXdlYmtpdC1jb2x1bW5zOiAyOworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KK1Rlc3QgZm9yIDxhIGhy
ZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU1NjMiPnRoZSBi
dWcgMTM1NTYzPC9hPi4gSXQgc2hvdWxkIG5vdCBjcmFzaCBvciBhc3NlcnQuCis8c2NyaXB0Pgor
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239803</attachid>
            <date>2014-10-14 09:47:30 -0700</date>
            <delta_ts>2014-10-15 05:40:16 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-135563-20141014194731.patch</filename>
            <type>text/plain</type>
            <size>41693</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGU4MzhiMDZmZjcyZDY3
NjNkYjcwNTU0YWM5Yjg4ZDgzNzZmMzc1Ny4uNTEyZTMyMjAzMzgwNDJjMDhjNGM2ZWEyMWU0OGYx
ZmE1YzRhZGYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE0LTEwLTE0ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIEFTU0VSVElPTiAgRkFJTEVE
IGluIFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU1NjMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgbmV3IG11bHRp
LWNvbHVtbiBjb2RlIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2hlbiB0aGUgZG9jdW1lbnQgY29u
dGFpbnMgbmVzdGVkIGZyYWdtZW50YXRpb24KKyAgICAgICAgY29udGV4dHMuIFRoZSBwcm9ibGVt
IGlzIHRoZSBjdXJyZW50IGZsb3cgdGhyZWFkIGNvbmNlcHQgdGhhdCBjYW4gc3RvcmUgb25seSBv
bmUgUmVuZGVyRmxvd1RocmVhZAorICAgICAgICBhdCBhIHRpbWUgYW5kIHVzZSBpdCBkdXJpbmcg
bGF5b3V0LgorCisgICAgICAgIFRoZSBzdG9yZWQgZmxvdyB0aHJlYWQgaXMgYWx3YXlzIGNvcnJl
Y3QgZm9yIHJlZ2lvbnMgYmVjYXVzZSBuYW1lZCBmbG93IHRocmVhZHMgYXJlIGFic29sdXRsZXkg
cG9zaXRpb25lZAorICAgICAgICBzbyBldmVyeSBjaGlsZCByZW5kZXJlciBpcyBjb250YWluZWQg
aW5zaWRlIHRoZW0gKHdpdGggdGhlIGV4cGNldGlvbiBvZiBmaXhlZCBwb3NpdGlvbmVkIGVsZW1l
bnRzIHdoaWNoIGFyZQorICAgICAgICB0cmVhdGVkIHNlcGFyYXRlbHkpLgorCisgICAgICAgIEZv
ciBtdWx0aS1jb2x1bW4gZWxlbWVudHMgdGhpcyBpcyBubyBsb25nZXIgdGhlIGNhc2UuIEFuIGFi
c29sdXRlbHkgcG9zaXRpb25lZCBlbGVtZW50IGluc2lkZSBhIHN0YXRpYworICAgICAgICBtdWx0
aS1jb2x1bW4gZWxlbWVudCB3aWxsIGJlIGNvbnRhaW5lZCBieSBhIGJsb2NrIG91dHNpZGUgdGhl
IGZyYWdtZW50YXRpb24gY29udGV4dC4gSXQgY2FuIGV2ZW4gYmUKKyAgICAgICAgY29udGFpbmVk
IGJ5IGEgZGlmZmVyZW50IG11bHRpLWNvbHVtbiBlbGVtZW50IGluIHRoZSBjYXNlIG9mIG5lc3Rl
ZCBmbG93IHRocmVhZHMuCisKKyAgICAgICAgVGhlIHBhdGNoIGJlbG93IGV4cGxvcmVzIGEgc29s
dXRpb24gdGhhdCdzIG5vdCBiYXNlZCBvbiBhIGN1cnJlbnQgZmxvdyB0aHJlYWQgc3RvcmVkIGds
b2JhbGx5LiBUaGUgcHJvcG9zZWQKKyAgICAgICAgcGF0Y2ggbWFrZXMgZXZlcnkgYmxvY2sgdG8g
c3RvcmUgYSBwb2ludGVyIHRvIGl0cyBmcmFnbWVudGF0aW9uIGNvbnRleHQgYW5kIGEgZmxhZyB0
aGF0IHN0YXRlcyBpZiB0aGlzIHBvaW50ZXIKKyAgICAgICAgbmVlZHMgdG8gYmUgdXBkYXRlZCBv
ciBub3QuIElmIHRoZSByZW5kZXJlciBpcyBub3QgYSBibG9jayBpdCB3aWxsIGdldCBpdHMgZmxv
dyB0aHJlYWQgZnJvbSB0aGUgY29udGFpbmluZworICAgICAgICBibG9jay4gT25jZSB0aGUgY29u
dGFpbmluZyBmbG93IHRocmVhZCBpcyByZXF1ZXN0ZWQgZm9yIHRoZSBibG9jaywgdGhlIHBvaW50
ZXIgaXMgY29tcHV0ZWQgYW5kIGNhY2hlZCB1bnRpbAorICAgICAgICBpbnZhbGlkYXRlZDoKKyAg
ICAgICAgLSB3aGVuIGEgc3VidHJlZSBpcyByZW1vdmVkIGZyb20gYSBmbG93IHRocmVhZAorICAg
ICAgICAtIHdoZW4gdGhlIHBvc2l0aW9uIHByb3BlcnR5IG9mIGFuIGVsZW1lbnQgaW5zaWRlIGEg
ZmxvdyB0aHJlYWQgY2hhbmdlcworCisgICAgICAgIFRoZSBwcm9jZXNzIGlzIHJlY3Vyc2l2ZSBh
bmQgaXQgZG9lc24ndCBhZmZlY3QgZWxlbWVudHMgdGhhdCBhcmUgbm90IG5lc3RlZCBpbnNpZGUg
YSBmbG93IHRocmVhZC4gSWYgYSBibG9jaworICAgICAgICBjaGFuZ2VzIHBvc2l0aW9uIGZyb20g
cmVsYXRpdmUgdG8gc3RhdGljLCBhbnkgZWxlbWVudCB0aGF0IHdhcyBjb250YWluZWQgYnkgaXQg
Y2FuIG9ubHkgYmUgY29udGFpbmVkIGJ5IGFuCisgICAgICAgIGFuY2VzdG9yIG9mIHRoZSBibG9j
ay4gVGhpcyBhbmNlc3RvciB3aWxsIHN0aWxsIGJlIG91dHNpZGUgb2YgYW55IGZsb3cgdGhyZWFk
LiBUaGlzIGVuc3VyZXMgdGhhdCBub24tZnJhZ21lbnRhdGlvbgorICAgICAgICBjb2RlIGlzIG5v
dCBhZmZlY3RlZCBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuCisKKyAgICAgICAgVGhl
IHBhdGNoIGFmZmVjdHMgdGhlIHJlc3VsdHMgb2YgdGhlIHBlcmZvcm1hbmNlIHRlc3RzOgorICAg
ICAgICAtIHRoZSByZWdpb25zIGxheW91dCB0ZXN0cyBoYXZlIGEgZGVjcmVhc2VkIHBlcmZvcm1h
bmNlIHJhZ2luZyBmcm9tIDIlIHRvIDUtNiUKKyAgICAgICAgLSB0aGUgcmVnaW9ucyBzZWxlY3Rp
b24gdGVzdHMgaGF2ZSBhbiBpbmNyZWFzZWQgcGVyZm9ybWFuY2UgcmFnaW5nIGZyb20gMS0yJSB0
byAxMCUKKyAgICAgICAgLSB0aGUgbXVsdGljb2x1bW4gbGF5b3V0IHRlc3RzIChub3cgcGVuZGlu
ZyByZXZpZXcgaW4gYjEzNzY4NykgaGF2ZSBhbiBpbmNyZWFzZWQgcGVyZm9ybWFuY2UKKyAgICAg
ICAgcmFnaW5nIGZyb20gMS44JSB0byA1JQorCisgICAgICAgIFRlc3Q6IGZhc3QvbXVsdGljb2wv
bXVsdGljb2wtYWxsLXBvc2l0aW9uZWQtY3Jhc2guaHRtbAorCisgICAgICAgICogcmVuZGVyaW5n
L0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb3dUaHJlYWRD
b250cm9sbGVyOjpGbG93VGhyZWFkQ29udHJvbGxlcik6CisgICAgICAgICogcmVuZGVyaW5nL0Zs
b3dUaHJlYWRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJv
bGxlcjo6Y3VycmVudFJlbmRlckZsb3dUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Rmxvd1RocmVhZENvbnRyb2xsZXI6OnNldEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dFN0YXRlOjpjdXJyZW50UmVuZGVyRmxvd1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXRTdGF0ZTo6c2V0Q3VycmVudFJlbmRlckZsb3dUaHJlYWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a1JhcmVEYXRhOjpSZW5kZXJCbG9ja1JhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpzdHlsZVdpbGxDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb2xsYXBz
ZUFub255bW91c0JveENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjYWNo
ZWRGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpjYWNoZWRGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrTmVlZHNVcGRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNldENhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2tOZWVkc1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlQ2Fj
aGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6bG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlV2lsbENoYW5nZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmJvcmRlckJveFJlY3RJblJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUFsbExh
eWVyVG9SZWdpb25NYXBwaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjpyZXBhaW50UmVjdGFuZ2xlSW5SZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJlbnRS
ZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lcjo6Q3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFp
bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cnJlbnRSZW5kZXJGbG93VGhyZWFk
TWFpbnRhaW5lcjo6fkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyOjpDdXJy
ZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXI6On5DdXJyZW50UmVuZGVyRmxvd1RocmVh
ZERpc2FibGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjptYXBM
YXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzaG93UmVnaW9u
c0luZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aW5zZXJ0ZWRJ
bnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5k
ZXJGbG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVtb3ZlRnJv
bVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjppbnZhbGlkYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja0luY2x1ZGluZ0Rlc2NlbmRh
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y3VycmVudFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYXRlRmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6
OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tOb0NhY2hlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJP
YmplY3Q6OmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJSZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpjb21wdXRl
T3ZlcmZsb3dGcm9tRmxvd1RocmVhZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlRm9yQ3Vy
cmVudEZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cG9wTGF5b3V0
U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaDoKKwogMjAxNC0xMC0xNCAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNv
bT4KIAogICAgICAgICBNdWx0aXBsZSByZWZhY3RvcnMgaW4gUmVuZGVyTWF0aE1MT3BlcmF0b3IK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3Bw
CmluZGV4IDJjZmE0MjgzYzc5ZjliNWVlYTNlMTc4YWQxMjJkYzhiNjlmYmI5YTguLjhjZjE0YWNm
YTIwYzg0NGMxMWZlNzkxYWI4MzU1ZjRhYzg0OGFkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcApAQCAtNDIsNyArNDIsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZsb3dUaHJlYWRDb250cm9sbGVyOjpGbG93VGhyZWFkQ29u
dHJvbGxlcihSZW5kZXJWaWV3KiB2aWV3KQogICAgIDogbV92aWV3KHZpZXcpCi0gICAgLCBtX2N1
cnJlbnRSZW5kZXJGbG93VGhyZWFkKDApCiAgICAgLCBtX2lzUmVuZGVyTmFtZWRGbG93VGhyZWFk
T3JkZXJEaXJ0eShmYWxzZSkKICAgICAsIG1fZmxvd1RocmVhZHNXaXRoQXV0b0xvZ2ljYWxIZWln
aHRSZWdpb25zKDApCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxv
d1RocmVhZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFk
Q29udHJvbGxlci5oCmluZGV4IDBjZGI1NmNhMzJiYmRjYjA1MjE2OTlkYmU3YTEyYzQwNzIxZDcw
N2MuLmZkNmU2MjFkMGJkYTFhNGFkYWQ2NWNjM2MwN2ZjZTYzZjE0ZTU1MWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5oCkBAIC00OCw5ICs0
OCw2IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBGbG93VGhyZWFkQ29udHJvbGxlcihSZW5kZXJW
aWV3Kik7CiAgICAgfkZsb3dUaHJlYWRDb250cm9sbGVyKCk7CiAKLSAgICBSZW5kZXJGbG93VGhy
ZWFkKiBjdXJyZW50UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFJl
bmRlckZsb3dUaHJlYWQ7IH0KLSAgICB2b2lkIHNldEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKFJl
bmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpIHsgbV9jdXJyZW50UmVuZGVyRmxvd1RocmVhZCA9
IGZsb3dUaHJlYWQ7IH0KLQogICAgIGJvb2wgaXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRPcmRlckRp
cnR5KCkgY29uc3QgeyByZXR1cm4gbV9pc1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVyRGlydHk7
IH0KICAgICB2b2lkIHNldElzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3JkZXJEaXJ0eShib29sIGRp
cnR5KQogICAgIHsKQEAgLTk2LDcgKzkzLDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAg
IFJlbmRlclZpZXcqIG1fdmlldzsKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBtX2N1cnJlbnRSZW5k
ZXJGbG93VGhyZWFkOwogICAgIGJvb2wgbV9pc1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVyRGly
dHk7CiAgICAgdW5zaWduZWQgbV9mbG93VGhyZWFkc1dpdGhBdXRvTG9naWNhbEhlaWdodFJlZ2lv
bnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q+IG1fcmVu
ZGVyTmFtZWRGbG93VGhyZWFkTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRl
LmgKaW5kZXggMmY3Mjk5ZWNkMWFjOTlkMGRlZTA0YTFhYjI2Zjg3ZWE2ZjhlYjE5Zi4uZDBlN2E5
ZTUwNjExZjAyZmIwMjJlMDg0NmYxOWNiZjhlYWVkYmVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xheW91dFN0YXRlLmgKQEAgLTgzLDYgKzgzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dExpbmVHcmlkUGFnaW5hdGlvbk9yaWdpbihjb25zdCBMYXlvdXRTaXplJiBvcmlnaW4pIHsgbV9s
aW5lR3JpZFBhZ2luYXRpb25PcmlnaW4gPSBvcmlnaW47IH0KICAgICAKICAgICBib29sIG5lZWRz
QmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9yZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGluZUdyaWQgfHwgKG1faXNQYWdpbmF0ZWQgJiYgbV9wYWdlTG9naWNhbEhlaWdodCk7IH0KKwor
ICAgIFJlbmRlckZsb3dUaHJlYWQqIGN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJyZW50UmVuZGVyRmxvd1RocmVhZDsgfQorICAgIHZvaWQgc2V0Q3VycmVudFJl
bmRlckZsb3dUaHJlYWQoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkgeyBtX2N1cnJlbnRS
ZW5kZXJGbG93VGhyZWFkID0gZmxvd1RocmVhZDsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgcHJv
cGFnYXRlTGluZUdyaWRJbmZvKFJlbmRlckJveCopOwogICAgIHZvaWQgZXN0YWJsaXNoTGluZUdy
aWQoUmVuZGVyQmxvY2tGbG93Kik7CkBAIC0xMjIsNiArMTI2LDggQEAgcHVibGljOgogICAgIExh
eW91dFNpemUgbV9saW5lR3JpZE9mZnNldDsKICAgICBMYXlvdXRTaXplIG1fbGluZUdyaWRQYWdp
bmF0aW9uT3JpZ2luOwogCisgICAgUmVuZGVyRmxvd1RocmVhZCogbV9jdXJyZW50UmVuZGVyRmxv
d1RocmVhZCB7IG51bGxwdHIgfTsKKwogI2lmbmRlZiBOREVCVUcKICAgICBSZW5kZXJPYmplY3Qq
IG1fcmVuZGVyZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCmluZGV4IDgyNDEyODczYTg1MDU1OTdlNTY0OGI5ZTc2OGI0ZTNlNjRhYWM4NjguLjc3Mzk2
NjIyYWFmMjRiNGExNGUxNTk4OTgyNjhkNzNjODZiMmRlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNjgsNyArNjgsOSBAQAogI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybVN0YXRlLmgiCisKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgogI2luY2x1ZGUg
PHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIApAQCAtOTQsNyArOTYsNyBAQCBzdGF0aWMgVHJhY2tl
ZERlc2NlbmRhbnRzTWFwKiBnUGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwID0gMDsKIAogc3Rh
dGljIFRyYWNrZWRDb250YWluZXJNYXAqIGdQb3NpdGlvbmVkQ29udGFpbmVyTWFwID0gMDsKIHN0
YXRpYyBUcmFja2VkQ29udGFpbmVyTWFwKiBnUGVyY2VudEhlaWdodENvbnRhaW5lck1hcCA9IDA7
Ci0gICAgCisKIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxM
aXN0SGFzaFNldDxSZW5kZXJJbmxpbmUqPj4+IENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcDsK
IAogc3RydWN0IFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uIHsKQEAgLTEy
MSwxNCArMTIzLDE3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RGVsYXllZFVwZGF0ZVNjcm9s
bEluZm9TdGFjaz4mIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91CiBzdHJ1Y3QgUmVuZGVyQmxv
Y2tSYXJlRGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyQmxvY2tSYXJlRGF0
YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFJlbmRlckJsb2NrUmFy
ZURhdGEoKSAKKyAgICBSZW5kZXJCbG9ja1JhcmVEYXRhKCkKICAgICAgICAgOiBtX3BhZ2luYXRp
b25TdHJ1dCgwKQogICAgICAgICAsIG1fcGFnZUxvZ2ljYWxPZmZzZXQoMCkKLSAgICB7IAorICAg
ICAgICAsIG1fZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayhOdWxsb3B0KQorICAgIHsKICAgICB9
CiAKICAgICBMYXlvdXRVbml0IG1fcGFnaW5hdGlvblN0cnV0OwogICAgIExheW91dFVuaXQgbV9w
YWdlTG9naWNhbE9mZnNldDsKKworICAgIE9wdGlvbmFsPFJlbmRlckZsb3dUaHJlYWQqPiBtX2Zs
b3dUaHJlYWRDb250YWluaW5nQmxvY2s7CiB9OwogCiB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgUmVu
ZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tSYXJlRGF0YT4+IFJlbmRlckJs
b2NrUmFyZURhdGFNYXA7CkBAIC0yNjYsNyArMjcxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5
bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3
U3QKICAgICBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxl
KCkgPyAmc3R5bGUoKSA6IG51bGxwdHI7CiAKICAgICBzZXRSZXBsYWNlZChuZXdTdHlsZS5pc0Rp
c3BsYXlJbmxpbmVUeXBlKCkpOwotICAgIAorCiAgICAgaWYgKG9sZFN0eWxlICYmIHBhcmVudCgp
ICYmIGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0ICYmIG9sZFN0eWxlLT5wb3NpdGlvbigp
ICE9IG5ld1N0eWxlLnBvc2l0aW9uKCkpIHsKICAgICAgICAgaWYgKG5ld1N0eWxlLnBvc2l0aW9u
KCkgPT0gU3RhdGljUG9zaXRpb24pCiAgICAgICAgICAgICAvLyBDbGVhciBvdXIgcG9zaXRpb25l
ZCBvYmplY3RzIGxpc3QuIE91ciBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgZGVzY2VuZGFudHMgd2ls
bCBiZQpAQCAtMjgzLDcgKzI4OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdC
bG9jay0+cGFyZW50KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAg
ICAgaWYgKGlzPFJlbmRlckJsb2NrPigqY29udGFpbmluZ0Jsb2NrKSkKICAgICAgICAgICAgICAg
ICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykucmVtb3ZlUG9zaXRpb25l
ZE9iamVjdHModGhpcywgTmV3Q29udGFpbmluZ0Jsb2NrKTsKICAgICAgICAgfQpAQCAtMzA4LDEw
ICszMTMsMTMgQEAgc3RhdGljIGJvb2wgYm9yZGVyT3JQYWRkaW5nTG9naWNhbFdpZHRoQ2hhbmdl
ZChjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUsIGNvbnMKIAogdm9pZCBSZW5kZXJCbG9jazo6
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKIHsKLSAgICBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxl
KTsKLSAgICAKICAgICBSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOwogCisgICAgaWYg
KG9sZFN0eWxlICYmIG9sZFN0eWxlLT5wb3NpdGlvbigpICE9IG5ld1N0eWxlLnBvc2l0aW9uKCkp
CisgICAgICAgIGludmFsaWRhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrSW5jbHVkaW5nRGVz
Y2VuZGFudHMoKTsKKworICAgIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5
bGUpOworCiAgICAgaWYgKCFpc0Fub255bW91c0Jsb2NrKCkpIHsKICAgICAgICAgLy8gRW5zdXJl
IHRoYXQgYWxsIG9mIG91ciBjb250aW51YXRpb24gYmxvY2tzIHBpY2sgdXAgdGhlIG5ldyBzdHls
ZS4KICAgICAgICAgZm9yIChSZW5kZXJCbG9jayogY3VyckNvbnQgPSBibG9ja0VsZW1lbnRDb250
aW51YXRpb24oKTsgY3VyckNvbnQ7IGN1cnJDb250ID0gY3VyckNvbnQtPmJsb2NrRWxlbWVudENv
bnRpbnVhdGlvbigpKSB7CkBAIC0zMjQsNyArMzMyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHkKIAogICAgIHByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihQcm9wYWdhdGVUb0Js
b2NrQ2hpbGRyZW5Pbmx5KTsKICAgICBtX2xpbmVIZWlnaHQgPSAtMTsKLSAgICAKKwogICAgIC8v
IEl0J3MgcG9zc2libGUgZm9yIG91ciBib3JkZXIvcGFkZGluZyB0byBjaGFuZ2UsIGJ1dCBmb3Ig
dGhlIG92ZXJhbGwgbG9naWNhbCB3aWR0aCBvZiB0aGUgYmxvY2sgdG8KICAgICAvLyBlbmQgdXAg
YmVpbmcgdGhlIHNhbWUuIFdlIGtlZXAgdHJhY2sgb2YgdGhpcyBjaGFuZ2Ugc28gaW4gbGF5b3V0
QmxvY2ssIHdlIGNhbiBrbm93IHRvIHNldCByZWxheW91dENoaWxkcmVuPXRydWUuCiAgICAgbV9o
YXNCb3JkZXJPclBhZGRpbmdMb2dpY2FsV2lkdGhDaGFuZ2VkID0gb2xkU3R5bGUgJiYgZGlmZiA9
PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgbmVlZHNMYXlvdXQoKSAmJiBib3JkZXJPclBhZGRp
bmdMb2dpY2FsV2lkdGhDaGFuZ2VkKG9sZFN0eWxlLCAmbmV3U3R5bGUpOwpAQCAtNjkwLDcgKzY5
OCw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVy
QmxvY2smIHBhcmVudCwgUmVuZGVyQmxvY2sqIGNoCiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2li
bGluZyA9IGNoaWxkLT5uZXh0U2libGluZygpOwogCiAgICAgUmVuZGVyRmxvd1RocmVhZCogY2hp
bGRGbG93VGhyZWFkID0gY2hpbGQtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBD
dXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxvd1RocmVhZE1haW50YWluZXIoY2hp
bGRGbG93VGhyZWFkKTsKICAgICBpZiAoY2hpbGRGbG93VGhyZWFkICYmIGNoaWxkRmxvd1RocmVh
ZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKICAgICAgICAgdG9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQoY2hpbGRGbG93VGhyZWFkKS0+cmVtb3ZlRmxvd0NoaWxkSW5mbyhjaGlsZCk7CiAKQEAg
LTMyNTQsNiArMzI2MSw1MCBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlcigp
CiAgICAgY3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihmaXJzdExldHRlckNvbnRhaW5lciwgZG93
bmNhc3Q8UmVuZGVyVGV4dD4oZmlyc3RMZXR0ZXJPYmopKTsKIH0KIAorUmVuZGVyRmxvd1RocmVh
ZCogUmVuZGVyQmxvY2s6OmNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdAor
eworICAgIFJlbmRlckJsb2NrUmFyZURhdGEqIHJhcmVEYXRhID0gZ2V0UmFyZURhdGEodGhpcyk7
CisKKyAgICBpZiAoIXJhcmVEYXRhIHx8ICFyYXJlRGF0YS0+bV9mbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiByYXJlRGF0YS0+
bV9mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrLnZhbHVlKCk7Cit9CisKK2Jvb2wgUmVuZGVyQmxv
Y2s6OmNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tOZWVkc1VwZGF0ZSgpIGNvbnN0Cit7
CisgICAgUmVuZGVyQmxvY2tSYXJlRGF0YSogcmFyZURhdGEgPSBnZXRSYXJlRGF0YSh0aGlzKTsK
KworICAgIGlmICghcmFyZURhdGEgfHwgIXJhcmVEYXRhLT5tX2Zsb3dUaHJlYWRDb250YWluaW5n
QmxvY2spCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFJlbmRlckJsb2NrOjpzZXRDYWNoZWRGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrTmVlZHNV
cGRhdGUoKQoreworICAgIFJlbmRlckJsb2NrUmFyZURhdGEmIHJhcmVEYXRhID0gZW5zdXJlUmFy
ZURhdGEodGhpcyk7CisgICAgcmFyZURhdGEubV9mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrID0g
TnVsbG9wdDsKK30KKworUmVuZGVyRmxvd1RocmVhZCogUmVuZGVyQmxvY2s6OnVwZGF0ZUNhY2hl
ZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkg
Y29uc3QKK3sKKyAgICBSZW5kZXJCbG9ja1JhcmVEYXRhJiByYXJlRGF0YSA9IGVuc3VyZVJhcmVE
YXRhKHRoaXMpOworICAgIHJhcmVEYXRhLm1fZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayA9IGZs
b3dUaHJlYWQ7CisKKyAgICByZXR1cm4gZmxvd1RocmVhZDsKK30KKworUmVuZGVyRmxvd1RocmVh
ZCogUmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdAor
eworICAgIFJlbmRlckJsb2NrUmFyZURhdGEqIHJhcmVEYXRhID0gZ2V0UmFyZURhdGEodGhpcyk7
CisgICAgaWYgKCFyYXJlRGF0YSB8fCAhcmFyZURhdGEtPm1fZmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaykKKyAgICAgICAgcmV0dXJuIHVwZGF0ZUNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2soUmVuZGVyQm94Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpOworCisgICAg
QVNTRVJUKHJhcmVEYXRhLT5tX2Zsb3dUaHJlYWRDb250YWluaW5nQmxvY2sudmFsdWUoKSA9PSBS
ZW5kZXJCb3g6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSk7CisgICAgcmV0dXJu
IHJhcmVEYXRhLT5tX2Zsb3dUaHJlYWRDb250YWluaW5nQmxvY2sudmFsdWUoKTsKK30KKwogTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6cGFnaW5hdGlvblN0cnV0KCkgY29uc3QKIHsKICAgICBSZW5k
ZXJCbG9ja1JhcmVEYXRhKiByYXJlRGF0YSA9IGdldFJhcmVEYXRhKHRoaXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCA3MmQ0YTg4ZDc3NTcyMzlhYmY3ZmQzNjZi
MjA5ODFmNDk4MTNmZjNmLi4xMzJkNmUxNGJiMmVhZmI1MjE2OTYyYmY3MjEwZjQyYjU5ZDBjMzk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMzEyLDcgKzMxMiwx
MiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29sbGFwc2VBbm9u
eW1vdXNCbG9ja0NoaWxkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgUmVuZGVyRmxv
d1RocmVhZCogY2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0OworICAgIHZv
aWQgc2V0Q2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja05lZWRzVXBkYXRlKCk7CisgICAg
Ym9vbCBjYWNoZWRGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrTmVlZHNVcGRhdGUoKSBjb25zdDsK
KwogcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgUmVuZGVyRmxvd1RocmVhZCogbG9jYXRlRmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB3
aWxsQmVEZXN0cm95ZWQoKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBv
dmVycmlkZTsKQEAgLTQ0OSw3ICs0NTQsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBMYXlv
dXRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0VW5pdCBvdXRsaW5lV2lkdGgpIGNvbnN0IG92
ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyU3R5bGUmIG91dGxpbmVTdHls
ZUZvclJlcGFpbnQoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKLSAgICAKKwogICAgIHZpcnR1YWwg
UmVuZGVyRWxlbWVudCogaG92ZXJBbmNlc3RvcigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pIG92ZXJyaWRlIGZpbmFs
OwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZEJlY2FtZU5vbklubGluZShSZW5kZXJPYmplY3QqIGNo
aWxkKSBvdmVycmlkZSBmaW5hbDsKQEAgLTQ4OSw2ICs0OTQsOCBAQCBwcml2YXRlOgogICAgIFJl
bmRlclB0cjxSZW5kZXJCbG9jaz4gY2xvbmUoKSBjb25zdDsKICAgICBSZW5kZXJCbG9jayogY29u
dGludWF0aW9uQmVmb3JlKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogCisgICAgUmVuZGVy
Rmxvd1RocmVhZCogdXBkYXRlQ2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayhSZW5kZXJG
bG93VGhyZWFkKikgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNv
bnN0OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cAppbmRleCBmMGVlYjAxYmZlMzg3NGQ1YjU3ODJiNjhkOTM4ZGJmYzdjMjRmYmMwLi4zZmVmYTQ1
Yjc4ZDY3NWNiZWQzM2RkM2M0ZTA2YTNhZWZlNGJlYjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMTk4NSwxOCArMTk4NSwxMCBAQCB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSYgbgogICAgIGlmIChvbGRTdHlsZSkgewogICAgICAgICBFUG9zaXRp
b24gb2xkUG9zaXRpb24gPSBvbGRTdHlsZS0+cG9zaXRpb24oKTsKICAgICAgICAgRVBvc2l0aW9u
IG5ld1Bvc2l0aW9uID0gbmV3U3R5bGUucG9zaXRpb24oKTsKLSAgICAgICAgCisKICAgICAgICAg
aWYgKHBhcmVudCgpICYmIGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0ICYmIG9sZFBvc2l0
aW9uICE9IG5ld1Bvc2l0aW9uKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbnNGbG9hdHMoKSAm
JiAhaXNGbG9hdGluZygpICYmICFpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBuZXdTdHlsZS5o
YXNPdXRPZkZsb3dQb3NpdGlvbigpKQogICAgICAgICAgICAgICAgIG1hcmtBbGxEZXNjZW5kYW50
c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKLQotICAgICAgICAgICAgLy8gSWYgdGhpcyBibG9jayBp
cyBpbnNpZGUgYSBtdWx0aWNvbCBhbmQgaXMgbW92aW5nIGZyb20gaW4tZmxvdyBwb3NpdGlvbmlu
ZyB0byBvdXQtb2YtZmxvdyBwb3NpdGlvbmluZywKLSAgICAgICAgICAgIC8vIHJlbW92ZSBpdHMg
aW5mbyAoc3VjaCBhcyBsaW5lcy10by1yZWdpb24gbWFwcGluZykgZnJvbSB0aGUgZmxvd3RocmVh
ZCBiZWNhdXNlIGl0IHdvbid0IGJlIGFibGUgdG8gZG8gaXQgbGF0ZXIuCi0gICAgICAgICAgICAv
LyBUaGUgZmxvd3RocmVhZCB3aWxsIG5vIGxvbmdlciBiZSBpbiBpdHMgY29udGFpbmluZyBibG9j
ayBjaGFpbiBhbmQsIGFzIHN1Y2gsIGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2sgd2lsbCByZXR1
cm4gbnVsbC4KLSAgICAgICAgICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0g
Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayhTa2lwRmxvd1RocmVhZENhY2hlKSkgewotICAgICAg
ICAgICAgICAgIGlmIChmbG93VGhyZWFkLT5pc1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCgp
ICYmICFpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAobmV3UG9zaXRpb24gPT0gQWJzb2x1dGVQ
b3NpdGlvbiB8fCBuZXdQb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uKSkKLSAgICAgICAgICAgICAg
ICAgICAgZmxvd1RocmVhZC0+cmVtb3ZlRmxvd0NoaWxkSW5mbyh0aGlzKTsKLSAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAppbmRleCAwNWNjZDNhN2JhODJhODlkNWZmZjIxNGJkNDBhMmM5ZTc1YWJiNjMxLi4xNTUzMjFh
MzllNTllMGQ3ZDQxNDViODhhZWVmOWM4ZWExM2Y1OGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIExheW91dFJlY3QgUmVuZGVyQm94
Ojpib3JkZXJCb3hSZWN0SW5SZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24sIFJlbmRlckJveFJl
Z2lvCiAgICAgICAgIC8vIEZJWE1FOiBJbiBhIHBlcmZlY3Qgd29ybGQgdGhpcyBjb25kaXRpb24g
c2hvdWxkIG5ldmVyIGhhcHBlbi4KICAgICAgICAgcmV0dXJuIGJvcmRlckJveFJlY3QoKTsKICAg
ICB9Ci0gICAgCisKICAgICBBU1NFUlQoZmxvd1RocmVhZC0+cmVnaW9uSW5SYW5nZShyZWdpb24s
IHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIGxvZ2ljYWwg
d2lkdGggYW5kIHBsYWNlbWVudCBpbiB0aGlzIHJlZ2lvbi4KQEAgLTIwNywyMSArMjA3LDI2IEBA
IExheW91dFJlY3QgUmVuZGVyQm94Ojpib3JkZXJCb3hSZWN0SW5SZWdpb24oUmVuZGVyUmVnaW9u
KiByZWdpb24sIFJlbmRlckJveFJlZ2lvCiAgICAgLy8gV2UgaGF2ZSBjYWNoZWQgaW5zZXRzLgog
ICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gYm94SW5mby0+bG9naWNhbFdpZHRoKCk7CiAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IGJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7Ci0gICAg
ICAgIAorCiAgICAgLy8gTm93IGFwcGx5IHRoZSBwYXJlbnQgaW5zZXQgc2luY2UgaXQgaXMgY3Vt
dWxhdGl2ZSB3aGVuZXZlciBhbnl0aGluZyBpbiB0aGUgY29udGFpbmluZyBibG9jayBjaGFpbiBz
aGlmdHMuCiAgICAgLy8gRklYTUU6IERvZXNuJ3Qgd29yayByaWdodCB3aXRoIHBlcnBlbmRpY3Vs
YXIgd3JpdGluZyBtb2Rlcy4KICAgICBjb25zdCBSZW5kZXJCbG9jayogY3VycmVudEJveCA9IGNv
bnRhaW5pbmdCbG9jaygpOwotICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGN1cnJlbnRCb3hJbmZv
ID0gY3VycmVudEJveC0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24pOworICAgIFJlbmRlckJv
eFJlZ2lvbkluZm8qIGN1cnJlbnRCb3hJbmZvID0gaXNSZW5kZXJGbG93VGhyZWFkKCkgPyBudWxs
cHRyIDogY3VycmVudEJveC0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24pOwogICAgIHdoaWxl
IChjdXJyZW50Qm94SW5mbyAmJiBjdXJyZW50Qm94SW5mby0+aXNTaGlmdGVkKCkpIHsKICAgICAg
ICAgaWYgKGN1cnJlbnRCb3gtPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gTFRSKQogICAgICAgICAg
ICAgbG9naWNhbExlZnQgKz0gY3VycmVudEJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0IC09IChjdXJyZW50Qm94LT5sb2dpY2FsV2lk
dGgoKSAtIGN1cnJlbnRCb3hJbmZvLT5sb2dpY2FsV2lkdGgoKSkgLSBjdXJyZW50Qm94SW5mby0+
bG9naWNhbExlZnQoKTsKKworICAgICAgICAvLyBPbmNlIHdlIHJlYWNoIHRoZSBmcmFnbWVudGF0
aW9uIGNvbnRhaW5lciB3ZSBzaG91bGQgc3RvcC4KKyAgICAgICAgaWYgKGN1cnJlbnRCb3gtPmlz
UmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgY3VycmVu
dEJveCA9IGN1cnJlbnRCb3gtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICByZWdpb24gPSBj
dXJyZW50Qm94LT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7CiAgICAgICAgIGN1
cnJlbnRCb3hJbmZvID0gY3VycmVudEJveC0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24pOwog
ICAgIH0KLSAgICAKKwogICAgIGlmIChjYWNoZUZsYWcgPT0gRG9Ob3RDYWNoZVJlbmRlckJveFJl
Z2lvbkluZm8pCiAgICAgICAgIGRlbGV0ZSBib3hJbmZvOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggOTYxNTA5NmMyNjJlZDNiN2Y1Yjcy
Njc5N2Q4MTNmNjg3NGRhNDZkZi4uOWM5NzI1YTJlNzZhNWRlNmQyMWFlMzM3MWViYjFiZGZkNGRi
ZTIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNw
cApAQCAtMTk3LDcgKzE5Nyw2IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6bGF5b3V0KCkKIAog
ICAgIHZhbGlkYXRlUmVnaW9ucygpOwogCi0gICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWlu
dGFpbmVyIGN1cnJlbnRGbG93VGhyZWFkU2V0dGVyKHRoaXMpOwogICAgIFJlbmRlckJsb2NrRmxv
dzo6bGF5b3V0KCk7CiAKICAgICBtX3BhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQgPSBmYWxzZTsKQEAg
LTI4OCwxMCArMjg3LDYgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVBbGxMYXllclRv
UmVnaW9uTWFwcGluZ3MoKQogICAgIGlmICghY29sbGVjdHNHcmFwaGljc0xheWVyc1VuZGVyUmVn
aW9ucygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBXZSBjYW4ndCB1c2UgY3Vy
cmVudEZsb3dUaHJlYWQgYXMgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBpbnRlcmxlYXZlZCBmbG93
IHRocmVhZHMgYW5kIHRoZSB3cm9uZyBvbmUgY291bGQgYmUgdXNlZC4KLSAgICAvLyBMZXQgZWFj
aCByZWdpb24gZmlndXJlIG91dCB0aGUgcHJvcGVyIGVuY2xvc2luZyBmbG93IHRocmVhZC4KLSAg
ICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyIGRpc2FibGVyKCZ2aWV3KCkpOwotCiAg
ICAgLy8gSWYgdGhlIFJlbmRlckZsb3dUaHJlYWQgaGFkIGEgei1pbmRleCBsYXllciB1cGRhdGUs
IHRoZW4gd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIHRvby4KICAgICBi
b29sIG5lZWRzTGF5ZXJVcGRhdGUgPSBsYXllcigpLT5pc0RpcnR5UmVuZGVyRmxvd1RocmVhZCgp
IHx8IG1fbGF5ZXJzVG9SZWdpb25NYXBwaW5nc0RpcnR5IHx8ICFtX2xheWVyVG9SZWdpb25NYXAu
Z2V0KCk7CiAgICAgbGF5ZXIoKS0+dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CkBAIC0zODgs
MTAgKzM4Myw2IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cmVwYWludFJlY3RhbmdsZUluUmVn
aW9ucyhjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVjdCkKIAogICAgIExheW91dFN0YXRlRGlz
YWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcigmdmlldygpKTsgLy8gV2UgY2FuJ3QgdXNlIGxheW91
dCBzdGF0ZSB0byByZXBhaW50LCBzaW5jZSB0aGUgcmVnaW9ucyBhcmUgc29tZXdoZXJlIGVsc2Uu
CiAKLSAgICAvLyBXZSBjYW4ndCB1c2UgY3VycmVudEZsb3dUaHJlYWQgYXMgaXQgaXMgcG9zc2li
bGUgdG8gaGF2ZSBpbnRlcmxlYXZlZCBmbG93IHRocmVhZHMgYW5kIHRoZSB3cm9uZyBvbmUgY291
bGQgYmUgdXNlZC4KLSAgICAvLyBMZXQgZWFjaCByZWdpb24gZmlndXJlIG91dCB0aGUgcHJvcGVy
IGVuY2xvc2luZyBmbG93IHRocmVhZC4KLSAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2Fi
bGVyIGRpc2FibGVyKCZ2aWV3KCkpOwotICAgIAogICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9y
ZWdpb25MaXN0KQogICAgICAgICByZWdpb24tPnJlcGFpbnRGbG93VGhyZWFkQ29udGVudChyZXBh
aW50UmVjdCk7CiB9CkBAIC0xNTIyLDQyICsxNTEzLDUgQEAgQ29udGFpbmluZ1JlZ2lvbk1hcCYg
UmVuZGVyRmxvd1RocmVhZDo6Y29udGFpbmluZ1JlZ2lvbk1hcCgpCiAgICAgcmV0dXJuICptX2xp
bmVUb1JlZ2lvbk1hcC5nZXQoKTsKIH0KIAotQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFp
bmVyOjpDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIoUmVuZGVyRmxvd1RocmVhZCog
cmVuZGVyRmxvd1RocmVhZCkKLSAgICA6IG1fcmVuZGVyRmxvd1RocmVhZChyZW5kZXJGbG93VGhy
ZWFkKQotICAgICwgbV9wcmV2aW91c1JlbmRlckZsb3dUaHJlYWQoMCkKLXsKLSAgICBpZiAoIW1f
cmVuZGVyRmxvd1RocmVhZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEZsb3dUaHJlYWRDb250cm9s
bGVyJiBjb250cm9sbGVyID0gbV9yZW5kZXJGbG93VGhyZWFkLT52aWV3KCkuZmxvd1RocmVhZENv
bnRyb2xsZXIoKTsKLSAgICBtX3ByZXZpb3VzUmVuZGVyRmxvd1RocmVhZCA9IGNvbnRyb2xsZXIu
Y3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKLSAgICAvLyBSZW1vdmUgdGhlIGFzc2VydCBzbyB3
ZSBjYW4gdXNlIHRoaXMgdG8gY2hhbmdlIHRoZSBmbG93IHRocmVhZCBjb250ZXh0LgotICAgIC8v
IEFTU0VSVCghbV9wcmV2aW91c1JlbmRlckZsb3dUaHJlYWQgfHwgIXJlbmRlckZsb3dUaHJlYWQt
PmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpOwotICAgIGNvbnRyb2xsZXIuc2V0Q3VycmVudFJl
bmRlckZsb3dUaHJlYWQobV9yZW5kZXJGbG93VGhyZWFkKTsKLX0KLQotQ3VycmVudFJlbmRlckZs
b3dUaHJlYWRNYWludGFpbmVyOjp+Q3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyKCkK
LXsKLSAgICBpZiAoIW1fcmVuZGVyRmxvd1RocmVhZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEZs
b3dUaHJlYWRDb250cm9sbGVyJiBjb250cm9sbGVyID0gbV9yZW5kZXJGbG93VGhyZWFkLT52aWV3
KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKTsKLSAgICBBU1NFUlQoY29udHJvbGxlci5jdXJyZW50
UmVuZGVyRmxvd1RocmVhZCgpID09IG1fcmVuZGVyRmxvd1RocmVhZCk7Ci0gICAgY29udHJvbGxl
ci5zZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChtX3ByZXZpb3VzUmVuZGVyRmxvd1RocmVhZCk7
Ci19Ci0KLUN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXI6OkN1cnJlbnRSZW5kZXJGbG93
VGhyZWFkRGlzYWJsZXIoUmVuZGVyVmlldyogdmlldykKLSAgICA6IG1fdmlldyh2aWV3KQotICAg
ICwgbV9yZW5kZXJGbG93VGhyZWFkKDApCi17Ci0gICAgbV9yZW5kZXJGbG93VGhyZWFkID0gbV92
aWV3LT5mbG93VGhyZWFkQ29udHJvbGxlcigpLmN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCk7Ci0g
ICAgaWYgKG1fcmVuZGVyRmxvd1RocmVhZCkKLSAgICAgICAgdmlldy0+Zmxvd1RocmVhZENvbnRy
b2xsZXIoKS5zZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZCgwKTsKLX0KLQotQ3VycmVudFJlbmRl
ckZsb3dUaHJlYWREaXNhYmxlcjo6fkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXIoKQot
ewotICAgIGlmIChtX3JlbmRlckZsb3dUaHJlYWQpCi0gICAgICAgIG1fdmlldy0+Zmxvd1RocmVh
ZENvbnRyb2xsZXIoKS5zZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChtX3JlbmRlckZsb3dUaHJl
YWQpOwotfQotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCmluZGV4IGJiNTE2ZWYzOTA0ZjA1OTdmZTJhMjlmM2U1
OGRiZDExNWYxMmYzOGMuLjc3ZDJjMmUyMTRhOTAzNjBkOTI0OTBlMjgyYTY0ZjgxNmI4MDZjNjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaApAQCAtMjQ0
LDYgKzI0NCw4IEBAIHByaXZhdGU6CiBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyRmxvd1RocmVhZChE
b2N1bWVudCYsIFBhc3NSZWY8UmVuZGVyU3R5bGU+KTsKIAorICAgIHZpcnR1YWwgUmVuZGVyRmxv
d1RocmVhZCogbG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyRmxvd1RocmVhZCo+KHRoaXMpOyB9CisKICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCA9IDA7CiAKICAgICAvLyBPdmVy
cmlkZGVuIGJ5IGNvbHVtbnMvcGFnZXMgdG8gc2V0IHVwIGFuIGluaXRpYWwgbG9naWNhbCB3aWR0
aCBvZiB0aGUgcGFnZSB3aWR0aCBldmVuIHdoZW4KQEAgLTM3NCwyNiArMzc2LDYgQEAgcHJvdGVj
dGVkOgogCiBSRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyRmxvd1RocmVhZCwgaXNSZW5k
ZXJGbG93VGhyZWFkKCkpCiAKLWNsYXNzIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5l
ciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWlu
dGFpbmVyKTsKLXB1YmxpYzoKLSAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIo
UmVuZGVyRmxvd1RocmVhZCopOwotICAgIH5DdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWlu
ZXIoKTsKLXByaXZhdGU6Ci0gICAgUmVuZGVyRmxvd1RocmVhZCogbV9yZW5kZXJGbG93VGhyZWFk
OwotICAgIFJlbmRlckZsb3dUaHJlYWQqIG1fcHJldmlvdXNSZW5kZXJGbG93VGhyZWFkOwotfTsK
LQotY2xhc3MgQ3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlciB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcik7Ci1wdWJsaWM6Ci0g
ICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcihSZW5kZXJWaWV3Kik7Ci0gICAgfkN1
cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXIoKTsKLXByaXZhdGU6Ci0gICAgUmVuZGVyVmll
dyogbV92aWV3OwotICAgIFJlbmRlckZsb3dUaHJlYWQqIG1fcmVuZGVyRmxvd1RocmVhZDsKLX07
Ci0KIC8vIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1
Z2dpbmcuCiAjaWZuZGVmIE5ERUJVRwogdGVtcGxhdGUgPD4gc3RydWN0IFZhbHVlVG9TdHJpbmc8
UmVuZGVyUmVnaW9uKj4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
aW5kZXggNDRmMjQyZmI0Yjc2OWNkMzM1NGI0MGQxMzk2NmVkYmNhZDZlODMwNS4uZWFiOTI1YTgw
YWRmNDc0MDcxYWZhMzJjOGY1ZjRjMDBmZDVhNDVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zNzcxLDEyICszNzcxLDYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJgogCiAgICAgLy8gRG9uJ3QgcGFpbnQgdGhlIGxheWVyIGlmIHRoZSByZW5kZXJlciBk
b2Vzbid0IGJlbG9uZyB0byB0aGlzIHJlZ2lvbi4KICAgICAvLyBUaGlzIGlzIHRydWUgYXMgbG9u
ZyBhcyB3ZSBjbGFtcCB0aGUgcmFuZ2Ugb2YgYSBib3ggdG8gaXRzIGNvbnRhaW5pbmcgYmxvY2sg
cmFuZ2UuCi0KLSAgICAvLyBEaXNhYmxlIG5hbWVkIGZsb3cgcmVnaW9uIGluZm9ybWF0aW9uIGZv
ciBpbiBmbG93IHRocmVhZHMgc3VjaCBhcyBtdWx0aS1jb2wuCi0gICAgc3RkOjp1bmlxdWVfcHRy
PEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXI+IGZsb3dUaHJlYWREaXNhYmxlcjsKLSAg
ICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVk
TGF5ZXJzKSkKLSAgICAgICAgZmxvd1RocmVhZERpc2FibGVyID0gc3RkOjptYWtlX3VuaXF1ZTxD
dXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyPigmcmVuZGVyZXIoKS52aWV3KCkpOwotCiAg
ICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KSB7CiAg
ICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgpKTsKQEAgLTQ4MjEsMTEg
KzQ4MTUsNiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJM
YXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgIGlmICghaXNTZWxmUGFpbnRp
bmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICAvLyBEaXNhYmxlIG5hbWVkIGZsb3cgcmVnaW9uIGluZm9ybWF0aW9u
IGZvciBpbiBmbG93IHRocmVhZHMgc3VjaCBhcyBtdWx0aS1jb2wuCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXI+IGZsb3dUaHJlYWREaXNhYmxlcjsK
LSAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5h
dGVkTGF5ZXJzKSkKLSAgICAgICAgZmxvd1RocmVhZERpc2FibGVyID0gc3RkOjptYWtlX3VuaXF1
ZTxDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyPigmcmVuZGVyZXIoKS52aWV3KCkpOwot
CiAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVu
dFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAKICAgICAvLyBQcmV2ZW50IGhpdHRpbmcgdGhl
IGZpeGVkIGxheWVycyBpbnNpZGUgdGhlIGZsb3cgdGhyZWFkIHdoZW4gaGl0dGluZyB0aHJvdWdo
IHJlZ2lvbnMuCkBAIC01MjMyLDggKzUyMjEsNyBAQCBib29sIFJlbmRlckxheWVyOjptYXBMYXll
ckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKENsaXBSZWN0cyYgY2xpcFJlY3RzKSBjbwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPnBh
cmVudCgpICYmIG5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnQoKS0+aXNSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudENvbnRhaW5lcigpKTsKLSAgICAKLSAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZERp
c2FibGVyIGZsb3dUaHJlYWREaXNhYmxlcigmcmVuZGVyZXIoKS52aWV3KCkpOworCiAgICAgQ2xp
cFJlY3RzQ29udGV4dCB0YXJnZXRDbGlwUmVjdHNDb250ZXh0KCZuYW1lZEZsb3dGcmFnbWVudC0+
ZnJhZ21lbnRDb250YWluZXJMYXllcigpLCBUZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgIG5hbWVk
Rmxvd0ZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5lckxheWVyKCkuY2FsY3VsYXRlQ2xpcFJlY3Rz
KHRhcmdldENsaXBSZWN0c0NvbnRleHQsIGNsaXBSZWN0cyk7CiAKQEAgLTY3MDksNyArNjY5Nyw2
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgpCiB2b2lkIFJlbmRlckxh
eWVyOjpwYWludE5hbWVkRmxvd1RocmVhZEluc2lkZVJlZ2lvbihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZWdpb24sIExheW91dFJlY3QgcGFpbnRE
aXJ0eVJlY3QsIExheW91dFBvaW50IHBhaW50T2Zmc2V0LCBQYWludEJlaGF2aW9yIHBhaW50QmVo
YXZpb3IsIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQogewogICAgIExheW91dFJlY3QgcmVn
aW9uQ29udGVudEJveCA9IHRvUmVuZGVyQm94KHJlZ2lvbi0+bGF5ZXJPd25lcigpKS5jb250ZW50
Qm94UmVjdCgpOwotICAgIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lciBmbG93VGhy
ZWFkTWFpbnRhaW5lcih0b1JlbmRlckZsb3dUaHJlYWQoJnJlbmRlcmVyKCkpKTsKICAgICBDdXJy
ZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciByZWdpb25NYWludGFpbmVyKCpyZWdpb24pOwogICAg
IHJlZ2lvbi0+c2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKCk7CiAKQEAgLTY4MTYsNyArNjgw
Myw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdEZsb3dUaHJlYWRJZlJlZ2lv
bkZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtCiAgICAgICAgIGhpdFRlc3RSZWN0SW5GbG93
VGhyZWFkLm1vdmUoaGl0VGVzdE9mZnNldCk7CiAgICAgICAgIGhpdFRlc3RSZWN0SW5GbG93VGhy
ZWFkLmV4cGFuZChMYXlvdXRTaXplKGZhYnMoKGRvdWJsZSloaXRUZXN0T2Zmc2V0LndpZHRoKCkp
LCBmYWJzKChkb3VibGUpaGl0VGVzdE9mZnNldC5oZWlnaHQoKSkpKTsKIAotICAgICAgICBDdXJy
ZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxvd1RocmVhZE1haW50YWluZXIoZmxvd1Ro
cmVhZCk7CiAgICAgICAgIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyIHJlZ2lvbk1haW50
YWluZXIocmVnaW9uKTsKIAogICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0
LmhpdFRlc3RMb2NhdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKaW5kZXggMzg3YzFjOTIyMTc4ZmI0ZDE5YmIyMjZjNzkyNTFiMzVjYTMwNTQ4OS4uZDhh
MzY4ZWVjMGVmMDNjYmQ2ZDQ5NTVhNjcyYjc0NmUxNzJkZDc5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTUyMiwzOCArNTIyLDYgQEAgc3RhdGljIGJv
b2wgaGFzRml4ZWRQb3NJbk5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jayhjb25zdCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVuZGVyRmxvd1RocmVhZCog
UmVuZGVyT2JqZWN0Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrTm9DYWNoZSgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKGZsb3dUaHJlYWRTdGF0ZSgpICE9IE5vdEluc2lkZUZsb3dUaHJl
YWQpOwotCi0gICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3Qq
Pih0aGlzKTsKLSAgICB3aGlsZSAoY3VycikgewotICAgICAgICBpZiAoY3Vyci0+aXNSZW5kZXJG
bG93VGhyZWFkKCkpCi0gICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJGbG93VGhyZWFkKGN1cnIp
OwotICAgICAgICBjdXJyID0gY3Vyci0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgfQotICAgIHJl
dHVybiAwOwotfQotCi1SZW5kZXJGbG93VGhyZWFkKiBSZW5kZXJPYmplY3Q6OmxvY2F0ZUZsb3dU
aHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdAotewotICAgIEFTU0VSVChmbG93VGhyZWFkU3Rh
dGUoKSAhPSBOb3RJbnNpZGVGbG93VGhyZWFkKTsKLQotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIHRo
ZSB0aHJlYWQgY2FjaGVkIGJlY2F1c2Ugd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQuCi0g
ICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IHZpZXcoKS5mbG93VGhyZWFkQ29udHJv
bGxlcigpLmN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCk7Ci0gICAgaWYgKGZsb3dUaHJlYWQgJiYg
KGZsb3dUaHJlYWRTdGF0ZSgpID09IGZsb3dUaHJlYWQtPmZsb3dUaHJlYWRTdGF0ZSgpKSkgewot
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHNsb3cgcGF0aCB3b3VsZCByZXR1cm4gdGhlIHNhbWUg
cmVzdWx0IGFzIG91ciBjYWNoZS4KLSAgICAgICAgLy8gRklYTUU6IEZvciB0aGUgbW9tZW50LCBv
bmx5IGFwcGx5IHRoaXMgYXNzZXJ0aW9uIHRvIHJlZ2lvbnMsIGFzIG11bHRpY29sCi0gICAgICAg
IC8vIHN0aWxsIGhhcyBzb21lIGlzc3VlcyBhbmQgdHJpZ2dlcnMgdGhpcyBhc3NlcnQuCi0gICAg
ICAgIC8vIENyZWF0ZWQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
Mjk0NiBmb3IgdGhpcyBpc3N1ZS4KLSAgICAgICAgQVNTRVJUKCFmbG93VGhyZWFkLT5pc1JlbmRl
ck5hbWVkRmxvd1RocmVhZCgpIHx8IGZsb3dUaHJlYWQgPT0gbG9jYXRlRmxvd1RocmVhZENvbnRh
aW5pbmdCbG9ja05vQ2FjaGUoKSk7Ci0gICAgICAgIHJldHVybiBmbG93VGhyZWFkOwotICAgIH0K
LSAgICAKLSAgICAvLyBOb3QgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQgc28gaGF2ZSB0byBmaW5k
IHRoZSB0aHJlYWQgdGhlIHNsb3cgd2F5LgotICAgIHJldHVybiBsb2NhdGVGbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrTm9DYWNoZSgpOwotfQotCiBSZW5kZXJCbG9jayogUmVuZGVyT2JqZWN0Ojpm
aXJzdExpbmVCbG9jaygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CkBAIC0xNDM4LDggKzE0MDYs
NiBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2hvd0xpbmVUcmVlRm9yVGhpcygpIGNvbnN0CiAKIHZv
aWQgUmVuZGVyT2JqZWN0OjpzaG93UmVnaW9uc0luZm9ybWF0aW9uKCkgY29uc3QKIHsKLSAgICBD
dXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyIGZsb3dUaHJlYWREaXNhYmxlcigmdmlldygp
KTsKLQogICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jaygpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gaXNCb3go
KSA/IHRvUmVuZGVyQm94KHRoaXMpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKGJveCkgewpAQCAt
MjA0OCwxNyArMjAxNCw5IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjppbnNlcnRlZEludG9UcmVlKCkK
IAogICAgIGlmICghaXNGbG9hdGluZygpICYmIHBhcmVudCgpLT5jaGlsZHJlbklubGluZSgpKQog
ICAgICAgICBwYXJlbnQoKS0+ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQodGhpcyk7Ci0gICAg
Ci0gICAgLy8gV2UgaGF2ZSB0byB1bnNldCB0aGUgY3VycmVudCBsYXlvdXQgUmVuZGVyRmxvd1Ro
cmVhZCBoZXJlLCBzaW5jZSBpbnNlcnRlZEludG9UcmVlKCkgY2FuIGhhcHBlbiBpbgotICAgIC8v
IHRoZSBtaWRkbGUgb2YgbGF5b3V0IGJ1dCBmb3Igb2JqZWN0cyBpbnNpZGUgYSBuZXN0ZWQgZmxv
dyB0aHJlYWQgdGhhdCBpcyBzdGlsbCBiZWluZyBwb3B1bGF0ZWQuIFRoaXMKLSAgICAvLyB3aWxs
IGNhdXNlIGFuIGFjY3VyYXRlIGNyYXdsIHRvIGhhcHBlbiBpbiBvcmRlciB0byBlbnN1cmUgdGhh
dCB0aGUgcmlnaHQgZmxvdyB0aHJlYWQgaXMgbm90aWZpZWQuCi0gICAgUmVuZGVyRmxvd1RocmVh
ZCogcHJldmlvdXNUaHJlYWQgPSB2aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS5jdXJyZW50
UmVuZGVyRmxvd1RocmVhZCgpOwotICAgIHZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxlcigpLnNl
dEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKG51bGxwdHIpOwotICAgIGlmIChwYXJlbnQoKS0+aXNS
ZW5kZXJGbG93VGhyZWFkKCkpCi0gICAgICAgIHRvUmVuZGVyRmxvd1RocmVhZChwYXJlbnQoKSkt
PmZsb3dUaHJlYWREZXNjZW5kYW50SW5zZXJ0ZWQodGhpcyk7Ci0gICAgZWxzZSBpZiAoUmVuZGVy
Rmxvd1RocmVhZCogZmxvd1RocmVhZCA9IHBhcmVudCgpLT5mbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCkpCisKKyAgICBpZiAoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKSkKICAgICAgICAgZmxvd1RocmVhZC0+Zmxvd1RocmVhZERlc2Nl
bmRhbnRJbnNlcnRlZCh0aGlzKTsKLSAgICB2aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS5z
ZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChwcmV2aW91c1RocmVhZCk7CiB9CiAKIHZvaWQgUmVu
ZGVyT2JqZWN0Ojp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKQpAQCAtMjA3NSw5ICsyMDMzLDkgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkKCkKIHsKICAgICBp
ZiAoZmxvd1RocmVhZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkKICAgICAgICAgcmV0
dXJuOwotICAgIAorCiAgICAgLy8gU29tZXRpbWVzIHdlIHJlbW92ZSB0aGUgZWxlbWVudCBmcm9t
IHRoZSBmbG93LCBidXQgaXQncyBub3QgZGVzdHJveWVkIGF0IHRoYXQgdGltZS4KLSAgICAvLyBJ
dCdzIG9ubHkgdW50aWwgbGF0ZXIgd2hlbiB3ZSBhY3R1YWxseSBkZXN0cm95IGl0IGFuZCByZW1v
dmUgYWxsIHRoZSBjaGlsZHJlbiBmcm9tIGl0LiAKKyAgICAvLyBJdCdzIG9ubHkgdW50aWwgbGF0
ZXIgd2hlbiB3ZSBhY3R1YWxseSBkZXN0cm95IGl0IGFuZCByZW1vdmUgYWxsIHRoZSBjaGlsZHJl
biBmcm9tIGl0LgogICAgIC8vIEN1cnJlbnRseSwgdGhhdCBoYXBwZW5zIGZvciBmaXJzdExldHRl
ciBlbGVtZW50cyBhbmQgbGlzdCBtYXJrZXJzLgogICAgIC8vIFBhc3MgaW4gdGhlIGZsb3cgdGhy
ZWFkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBsb29rIGl0IHVwIGZvciBhbGwgdGhlIGNoaWxk
cmVuLgogICAgIHJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKGZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2soKSk7CkBAIC0yMDkzLDcgKzIwNTEsMzIgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKFJlbmRlckZsb3dUaHJlYWQq
IHJlbmRlckYKICAgICAgICAgbG9jYWxGbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpOyAvLyBXZSBoYXZlIHRvIGFzay4gV2UgY2FuJ3QganVzdCBhc3N1bWUgd2UgYXJlIGlu
IHRoZSBzYW1lIGZsb3cgdGhyZWFkLgogICAgIGlmIChsb2NhbEZsb3dUaHJlYWQpCiAgICAgICAg
IGxvY2FsRmxvd1RocmVhZC0+cmVtb3ZlRmxvd0NoaWxkSW5mbyh0aGlzKTsKLSAgICBzZXRGbG93
VGhyZWFkU3RhdGUoTm90SW5zaWRlRmxvd1RocmVhZCk7CisgICAgaWYgKGlzPFJlbmRlckJsb2Nr
PigqdGhpcykpCisgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqdGhpcykuc2V0Q2FjaGVk
Rmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja05lZWRzVXBkYXRlKCk7CisKKyAgICBzZXRGbG93VGhy
ZWFkU3RhdGUobG9jYWxGbG93VGhyZWFkID09IHJlbmRlckZsb3dUaHJlYWQgPyBOb3RJbnNpZGVG
bG93VGhyZWFkIDogSW5zaWRlSW5GbG93VGhyZWFkKTsKK30KKwordm9pZCBSZW5kZXJPYmplY3Q6
OmludmFsaWRhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrSW5jbHVkaW5nRGVzY2VuZGFudHMo
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKK3sKKyAgICBpZiAoZmxvd1RocmVhZFN0YXRl
KCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlz
PFJlbmRlckJsb2NrPigqdGhpcykpIHsKKyAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KCp0aGlzKTsKKworICAgICAgICBpZiAoYmxvY2suY2FjaGVkRmxv
d1RocmVhZENvbnRhaW5pbmdCbG9ja05lZWRzVXBkYXRlKCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgZmxvd1RocmVhZCA9IGJsb2NrLmNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soKTsKKyAgICAgICAgYmxvY2suc2V0Q2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9j
a05lZWRzVXBkYXRlKCk7CisgICAgfQorCisgICAgaWYgKGZsb3dUaHJlYWQpCisgICAgICAgIGZs
b3dUaHJlYWQtPnJlbW92ZUZsb3dDaGlsZEluZm8odGhpcyk7CisKKyAgICBmb3IgKFJlbmRlck9i
amVjdCogY2hpbGQgPSBmaXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkKKyAgICAgICAgY2hpbGQtPmludmFsaWRhdGVGbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrSW5jbHVkaW5nRGVzY2VuZGFudHMoZmxvd1RocmVhZCk7CiB9CiAKIHZvaWQgUmVuZGVy
T2JqZWN0OjpkZXN0cm95QW5kQ2xlYW51cEFub255bW91c1dyYXBwZXJzKCkKQEAgLTI1OTcsMjIg
KzI1ODAsMjIgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QKIAogUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQqIFJlbmRlck9iamVjdDo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29u
c3QKIHsKLSAgICBpZiAoZmxvd1RocmVhZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhy
ZWFkID0gdmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuY3VycmVudFJlbmRlckZsb3dUaHJl
YWQoKTsKLSAgICBpZiAoIWZsb3dUaHJlYWQpCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoIWZsb3dUaHJlYWQg
fHwgIWZsb3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgQVNTRVJUKGZsb3dUaHJlYWQgPT0gZmxvd1RocmVhZENvbnRhaW5p
bmdCbG9jaygpKTsKLQogICAgIC8vIEZJWE1FOiBPbmNlIHJlZ2lvbnMgYXJlIGZ1bGx5IGludGVn
cmF0ZWQgd2l0aCB0aGUgY29tcG9zaXRpbmcgc3lzdGVtIHdlIHNob3VsZCB1bmNvbW1lbnQgdGhp
cyBhc3NlcnQuCiAgICAgLy8gVGhpcyBhc3NlcnQgbmVlZHMgdG8gYmUgZGlzYWJsZWQgYmVjYXVz
ZSBpdCdzIHBvc3NpYmxlIHRvIGFzayBmb3IgdGhlIGFuY2VzdG9yIGNsaXBwaW5nIHJlY3Rhbmds
ZSBvZgogICAgIC8vIGEgbGF5ZXIgd2l0aG91dCBrbm93aW5nIHRoZSBjb250YWluaW5nIHJlZ2lv
biBpbiBhZHZhbmNlLgogICAgIC8vIEFTU0VSVChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkg
JiYgZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KCkpOwogCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0g
dG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpOwot
ICAgIHJldHVybiBuYW1lZEZsb3dGcmFnbWVudDsKKyAgICByZXR1cm4gdG9SZW5kZXJOYW1lZEZs
b3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpOworfQorCitSZW5kZXJGbG93
VGhyZWFkKiBSZW5kZXJPYmplY3Q6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBj
b25zdAoreworICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWlu
aW5nQmxvY2soKTsKKyAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrID8gY29udGFpbmluZ0Jsb2Nr
LT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgOiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXgg
NDQyMzJmYTM2NGJlOTM3MmJiMjg1OTA3MTcxYWNiMDc1MmQ5MDk2OS4uNTJjNTU1MzNlMGUyNmZm
MTdjMDE1NTUyNTMwYzgxMzVmZjVlZmQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaApAQCAtMjEyLDE4ICsyMTIsMTQgQEAgcHVibGljOgogCiAgICAgYm9vbCBmaXhl
ZFBvc2l0aW9uZWRXaXRoTmFtZWRGbG93Q29udGFpbmluZ0Jsb2NrKCkgY29uc3Q7CiAKLSAgICBl
bnVtIFNob3VsZFVzZUZsb3dUaHJlYWRDYWNoZSB7Ci0gICAgICAgIFVzZUZsb3dUaHJlYWRDYWNo
ZSwKLSAgICAgICAgU2tpcEZsb3dUaHJlYWRDYWNoZQotICAgIH07Ci0KICAgICAvLyBGdW5jdGlv
biB0byByZXR1cm4gb3VyIGVuY2xvc2luZyBmbG93IHRocmVhZCBpZiB3ZSBhcmUgY29udGFpbmVk
IGluc2lkZSBvbmUuIFRoaXMKICAgICAvLyBmdW5jdGlvbiBmb2xsb3dzIHRoZSBjb250YWluaW5n
IGJsb2NrIGNoYWluLgotICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soU2hvdWxkVXNlRmxvd1RocmVhZENhY2hlIHVzZUNhY2hlID0gVXNlRmxvd1RocmVhZENh
Y2hlKSBjb25zdAorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2soKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGZsb3dUaHJlYWRTdGF0ZSgpID09IE5vdElu
c2lkZUZsb3dUaHJlYWQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICh1
c2VDYWNoZSA9PSBTa2lwRmxvd1RocmVhZENhY2hlKSA/IGxvY2F0ZUZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2tOb0NhY2hlKCkgOiBsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gbG9jYXRlRmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIH0KIAogICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KiBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdDsKQEAgLTg5MiwxMCAr
ODg4LDEwIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFBvc0NoaWxkTmVlZHNMYXlvdXRCaXQo
Ym9vbCBiKSB7IG1fYml0ZmllbGRzLnNldFBvc0NoaWxkTmVlZHNMYXlvdXQoYik7IH0KICAgICB2
b2lkIHNldE5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXRCaXQoYm9vbCBiKSB7IG1fYml0
ZmllbGRzLnNldE5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoYik7IH0KIAorICAgIHZp
cnR1YWwgUmVuZGVyRmxvd1RocmVhZCogbG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygp
IGNvbnN0OworICAgIHZvaWQgaW52YWxpZGF0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tJbmNs
dWRpbmdEZXNjZW5kYW50cyhSZW5kZXJGbG93VGhyZWFkKiA9IG51bGxwdHIpOworCiBwcml2YXRl
OgotICAgIFJlbmRlckZsb3dUaHJlYWQqIGxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KSBjb25zdDsKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBsb2NhdGVGbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrTm9DYWNoZSgpIGNvbnN0OwotICAgIAogICAgIHZvaWQgcmVtb3ZlRnJvbVJlbmRlckZs
b3dUaHJlYWQoKTsKICAgICB2b2lkIHJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZl
KFJlbmRlckZsb3dUaHJlYWQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmNwcAppbmRleCBjZjUzYTMwMTdjZWYwY2FkNmU4M2YxM2VkMzZjODMxMzBiMGEyNWFhLi5l
ODRhNTY5MDM3Yzk4ZWU4ZTQ5NThkMWRkMTQ5NzUxM2NkMDc4NmZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApAQCAtMjE4LDE1ICsyMTgsOCBAQCB2b2lkIFJl
bmRlclJlZ2lvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdAogdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVPdmVyZmxvd0Zyb21G
bG93VGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICAKLSAgICBMYXlvdXRS
ZWN0IGxheW91dFJlY3Q7Ci0gICAgewotICAgICAgICAvLyBXaGVuIGdldHRpbmcgdGhlIG92ZXJm
bG93IGZyb20gdGhlIGZsb3cgdGhyZWFkIHdlIG5lZWQgdG8gdGVtcG9yYXJseSByZXNldCB0aGUg
Y3VycmVudCBmbG93IHRocmVhZCBiZWNhdXNlCi0gICAgICAgIC8vIHdlJ3JlIGNoYW5naW5nIGZs
b3dzLgotICAgICAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxvd1RocmVh
ZE1haW50YWluZXIobV9mbG93VGhyZWFkKTsKLSAgICAgICAgbGF5b3V0UmVjdCA9IGxheW91dE92
ZXJmbG93UmVjdEZvckJveChtX2Zsb3dUaHJlYWQpOwotICAgIH0KIAorICAgIExheW91dFJlY3Qg
bGF5b3V0UmVjdCA9IGxheW91dE92ZXJmbG93UmVjdEZvckJveChtX2Zsb3dUaHJlYWQpOwogICAg
IGxheW91dFJlY3Quc2V0TG9jYXRpb24oY29udGVudEJveFJlY3QoKS5sb2NhdGlvbigpICsgKGxh
eW91dFJlY3QubG9jYXRpb24oKSAtIG1fZmxvd1RocmVhZFBvcnRpb25SZWN0LmxvY2F0aW9uKCkp
KTsKIAogICAgIC8vIEZJWE1FOiBDb3JyZWN0bHkgYWRqdXN0IHRoZSBsYXlvdXQgb3ZlcmZsb3cg
Zm9yIHdyaXRpbmcgbW9kZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAK
aW5kZXggZDYwOTUzMTVjYWM1YzczNTM0MWM4YjA5NGM4ZjgyYmNiMmI3NzY1NS4uNWRkNmFmOWJm
M2UzZDdiY2VlNDFhNmEwMDFhM2IzZjU1ZjhmY2EzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcApAQCAtMTMxNiwxMCArMTMxNiwxMiBAQCB2b2lkIFJlbmRlclZpZXc6
OnB1c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKGNvbnN0IFJlbmRlck9iamVjdCYg
b2JqZWN0KQogICAgIGlmICghbV9mbG93VGhyZWFkQ29udHJvbGxlcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmVuZGVyRmxvd1RocmVhZCogY3VycmVudEZsb3dUaHJlYWQgPSBtX2Zsb3dUaHJl
YWRDb250cm9sbGVyLT5jdXJyZW50UmVuZGVyRmxvd1RocmVhZCgpOworICAgIFJlbmRlckZsb3dU
aHJlYWQqIGN1cnJlbnRGbG93VGhyZWFkID0gb2JqZWN0LmZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2soKTsKICAgICBpZiAoIWN1cnJlbnRGbG93VGhyZWFkKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBtX2xheW91dFN0YXRlLT5zZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChjdXJyZW50Rmxvd1Ro
cmVhZCk7CisKICAgICBjdXJyZW50Rmxvd1RocmVhZC0+cHVzaEZsb3dUaHJlYWRMYXlvdXRTdGF0
ZShvYmplY3QpOwogfQogCkBAIC0xMzI4LDcgKzEzMzAsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnBv
cExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJlYWQoKQogICAgIGlmICghbV9mbG93VGhyZWFk
Q29udHJvbGxlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyRmxvd1RocmVhZCogY3Vy
cmVudEZsb3dUaHJlYWQgPSBtX2Zsb3dUaHJlYWRDb250cm9sbGVyLT5jdXJyZW50UmVuZGVyRmxv
d1RocmVhZCgpOworICAgIFJlbmRlckZsb3dUaHJlYWQqIGN1cnJlbnRGbG93VGhyZWFkID0gbV9s
YXlvdXRTdGF0ZS0+Y3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKICAgICBpZiAoIWN1cnJlbnRG
bG93VGhyZWFkKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCmluZGV4IDU2N2M1M2ZiNTY4YjY4MDY3YmM5MTJjNDMzNjg5ZjA1ZjljMTAyOTcuLjdm
MWY5ODE2YzQ4ZDJlMmNlMzlhYmFhMDgzODE2ZTI4Y2IzZDE2MWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMjk1LDcgKzI5NSw3IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIHB1c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKGNvbnN0IFJlbmRlck9iamVj
dCYpOwogICAgIHZvaWQgcG9wTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCgpOwotICAg
IAorCiAgICAgZnJpZW5kIGNsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lcjsKICAgICBmcmllbmQg
Y2xhc3MgTGF5b3V0U3RhdGVEaXNhYmxlcjsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRjNzE1ZjE5ZmRhYTgxYTljYTRh
MzAwNjE3Mzk0MzZlOGFlZTcyMjMuLjk4ODhjZTQ1MWExZmE4ZGIwOWUzOGJkMWZiYTZlM2VjNWE2
MjA2NWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNC0xMC0xNCAgQW5kcmVpIEJ1Y3VyICA8
YWJ1Y3VyQGFkb2JlLmNvbT4KKworICAgICAgICBBU1NFUlRJT04gIEZBSUxFRCBpbiBXZWJDb3Jl
OjpSZW5kZXJGbG93VGhyZWFkOjpnZXRSZWdpb25SYW5nZUZvckJveAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NTYzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSB0ZXN0IHZlcmlmeWluZyB0aGF0IHBv
c2l0aW9uZWQgZWxlbWVudHMgaW5zaWRlIG11bHRpLWNvbHVtbiBjb250YWluZXJzIGRvbid0Cisg
ICAgICAgIGNhdXNlIGFzc2VydGlvbnMgb3IgY3Jhc2hlcy4KKworICAgICAgICAqIGZhc3QvbXVs
dGljb2wvbXVsdGljb2wtYWxsLXBvc2l0aW9uZWQtY3Jhc2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L211bHRpY29sL211bHRpY29sLWFsbC1wb3NpdGlvbmVkLWNyYXNoLmh0
bWw6IEFkZGVkLgorCiAyMDE0LTEwLTE0ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIEFkZCB0ZXN0IHRvIGNoZWNrIHN0cmV0Y2h5IHZhbHVlIGlzIGNh
c2Ugc2Vuc2l0aXZlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL211bHRp
Y29sLWFsbC1wb3NpdGlvbmVkLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
bXVsdGljb2wvbXVsdGljb2wtYWxsLXBvc2l0aW9uZWQtY3Jhc2gtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmVkM2VlMWNmZWY2NGI0Y2QxNjQ4ZDI2NDNhMTM1ZjYxM2Y2NDY1NWUKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL211bHRpY29sLWFsbC1wb3NpdGlv
bmVkLWNyYXNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitUZXN0IGZvciB0aGUgYnVnIDEz
NTU2My4gSXQgc2hvdWxkIG5vdCBjcmFzaCBvciBhc3NlcnQuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L211bHRpY29sL211bHRpY29sLWFsbC1wb3NpdGlvbmVkLWNyYXNoLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L211bHRpY29sL211bHRpY29sLWFsbC1wb3NpdGlvbmVkLWNyYXNoLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjE1NWE4MDZmNTBiY2Y5N2E5NzYwMjY0MjhjNjNkMGY1YjY4ZWNjNAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbXVsdGljb2wtYWxs
LXBvc2l0aW9uZWQtY3Jhc2guaHRtbApAQCAtMCwwICsxLDE3IEBACis8aHRtbD4KKzxoZWFkPgor
PHN0eWxlPgorKiB7CisgICAgLXdlYmtpdC1jb2x1bW5zOiAyOworICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KK1Rlc3QgZm9yIDxhIGhyZWY9Imh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU1NjMiPnRoZSBidWcgMTM1
NTYzPC9hPi4gSXQgc2hvdWxkIG5vdCBjcmFzaCBvciBhc3NlcnQuCis8c2NyaXB0PgoraWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239867</attachid>
            <date>2014-10-15 05:40:25 -0700</date>
            <delta_ts>2014-10-15 23:50:31 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>bug-135563-20141015154028.patch</filename>
            <type>text/plain</type>
            <size>45837</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDVmNDk5MTU3NzJlODc1
MzIyYmEzYmE4OTNiNGM3YWRmYmVhZDg2My4uMjE0YTBkMmNlOTk0OTljOTRhZjg2NGM3MTMwMjM4
MjViMTE3MjM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMCBAQAorMjAxNC0xMC0xNSAgQW5k
cmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KKworICAgICAgICBBU1NFUlRJT04gIEZBSUxF
RCBpbiBXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpnZXRSZWdpb25SYW5nZUZvckJveAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NTYzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCisKKyAgICAgICAgVGhlIG5ldyBtdWx0aS1j
b2x1bW4gY29kZSBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdoZW4gdGhlIGRvY3VtZW50IGNvbnRh
aW5zIG5lc3RlZCBmcmFnbWVudGF0aW9uCisgICAgICAgIGNvbnRleHRzLiBUaGUgcHJvYmxlbSBp
cyB0aGUgY3VycmVudCBmbG93IHRocmVhZCBjb25jZXB0IHRoYXQgY2FuIHN0b3JlIG9ubHkgb25l
IFJlbmRlckZsb3dUaHJlYWQKKyAgICAgICAgYXQgYSB0aW1lIGFuZCB1c2UgaXQgZHVyaW5nIGxh
eW91dC4KKworICAgICAgICBUaGUgc3RvcmVkIGZsb3cgdGhyZWFkIGlzIGFsd2F5cyBjb3JyZWN0
IGZvciByZWdpb25zIGJlY2F1c2UgbmFtZWQgZmxvdyB0aHJlYWRzIGFyZSBhYnNvbHV0bGV5IHBv
c2l0aW9uZWQKKyAgICAgICAgc28gZXZlcnkgY2hpbGQgcmVuZGVyZXIgaXMgY29udGFpbmVkIGlu
c2lkZSB0aGVtICh3aXRoIHRoZSBleHBjZXRpb24gb2YgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50
cyB3aGljaCBhcmUKKyAgICAgICAgdHJlYXRlZCBzZXBhcmF0ZWx5KS4KKworICAgICAgICBGb3Ig
bXVsdGktY29sdW1uIGVsZW1lbnRzIHRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlLiBBbiBhYnNv
bHV0ZWx5IHBvc2l0aW9uZWQgZWxlbWVudCBpbnNpZGUgYSBzdGF0aWMKKyAgICAgICAgbXVsdGkt
Y29sdW1uIGVsZW1lbnQgd2lsbCBiZSBjb250YWluZWQgYnkgYSBibG9jayBvdXRzaWRlIHRoZSBm
cmFnbWVudGF0aW9uIGNvbnRleHQuIEl0IGNhbiBldmVuIGJlCisgICAgICAgIGNvbnRhaW5lZCBi
eSBhIGRpZmZlcmVudCBtdWx0aS1jb2x1bW4gZWxlbWVudCBpbiB0aGUgY2FzZSBvZiBuZXN0ZWQg
ZmxvdyB0aHJlYWRzLgorCisgICAgICAgIFRoZSBwYXRjaCBiZWxvdyBleHBsb3JlcyBhIHNvbHV0
aW9uIHRoYXQncyBub3QgYmFzZWQgb24gYSBjdXJyZW50IGZsb3cgdGhyZWFkIHN0b3JlZCBnbG9i
YWxseS4gVGhlIHByb3Bvc2VkCisgICAgICAgIHBhdGNoIG1ha2VzIGV2ZXJ5IGJsb2NrIHRvIHN0
b3JlIGEgcG9pbnRlciB0byBpdHMgZnJhZ21lbnRhdGlvbiBjb250ZXh0IGFuZCBhIGZsYWcgdGhh
dCBzdGF0ZXMgaWYgdGhpcyBwb2ludGVyCisgICAgICAgIG5lZWRzIHRvIGJlIHVwZGF0ZWQgb3Ig
bm90LiBJZiB0aGUgcmVuZGVyZXIgaXMgbm90IGEgYmxvY2sgaXQgd2lsbCBnZXQgaXRzIGZsb3cg
dGhyZWFkIGZyb20gdGhlIGNvbnRhaW5pbmcKKyAgICAgICAgYmxvY2suIE9uY2UgdGhlIGNvbnRh
aW5pbmcgZmxvdyB0aHJlYWQgaXMgcmVxdWVzdGVkIGZvciB0aGUgYmxvY2ssIHRoZSBwb2ludGVy
IGlzIGNvbXB1dGVkIGFuZCBjYWNoZWQgdW50aWwKKyAgICAgICAgaW52YWxpZGF0ZWQ6CisgICAg
ICAgIC0gd2hlbiBhIHN1YnRyZWUgaXMgcmVtb3ZlZCBmcm9tIGEgZmxvdyB0aHJlYWQKKyAgICAg
ICAgLSB3aGVuIHRoZSBwb3NpdGlvbiBwcm9wZXJ0eSBvZiBhbiBlbGVtZW50IGluc2lkZSBhIGZs
b3cgdGhyZWFkIGNoYW5nZXMKKworICAgICAgICBUaGUgcHJvY2VzcyBpcyByZWN1cnNpdmUgYW5k
IGl0IGRvZXNuJ3QgYWZmZWN0IGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBuZXN0ZWQgaW5zaWRlIGEg
ZmxvdyB0aHJlYWQuIElmIGEgYmxvY2sKKyAgICAgICAgY2hhbmdlcyBwb3NpdGlvbiBmcm9tIHJl
bGF0aXZlIHRvIHN0YXRpYywgYW55IGVsZW1lbnQgdGhhdCB3YXMgY29udGFpbmVkIGJ5IGl0IGNh
biBvbmx5IGJlIGNvbnRhaW5lZCBieSBhbgorICAgICAgICBhbmNlc3RvciBvZiB0aGUgYmxvY2su
IFRoaXMgYW5jZXN0b3Igd2lsbCBzdGlsbCBiZSBvdXRzaWRlIG9mIGFueSBmbG93IHRocmVhZC4g
VGhpcyBlbnN1cmVzIHRoYXQgbm9uLWZyYWdtZW50YXRpb24KKyAgICAgICAgY29kZSBpcyBub3Qg
YWZmZWN0ZWQgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLgorCisgICAgICAgIFRoZSBw
YXRjaCBhZmZlY3RzIHRoZSByZXN1bHRzIG9mIHRoZSBwZXJmb3JtYW5jZSB0ZXN0czoKKyAgICAg
ICAgLSB0aGUgcmVnaW9ucyBsYXlvdXQgdGVzdHMgaGF2ZSBhIGRlY3JlYXNlZCBwZXJmb3JtYW5j
ZSByYWdpbmcgZnJvbSAyJSB0byA1LTYlCisgICAgICAgIC0gdGhlIHJlZ2lvbnMgc2VsZWN0aW9u
IHRlc3RzIGhhdmUgYW4gaW5jcmVhc2VkIHBlcmZvcm1hbmNlIHJhZ2luZyBmcm9tIDEtMiUgdG8g
MTAlCisgICAgICAgIC0gdGhlIG11bHRpY29sdW1uIGxheW91dCB0ZXN0cyAobm93IHBlbmRpbmcg
cmV2aWV3IGluIGIxMzc2ODcpIGhhdmUgYW4gaW5jcmVhc2VkIHBlcmZvcm1hbmNlCisgICAgICAg
IHJhZ2luZyBmcm9tIDEuOCUgdG8gNSUKKworICAgICAgICBUZXN0czogZmFzdC9tdWx0aWNvbC9t
dWx0aWNvbC1hbGwtcG9zaXRpb25lZC1jcmFzaC5odG1sCisgICAgICAgICAgICAgICBmYXN0L211
bHRpY29sL211bHRpY29sLXRyYW5zZm9ybS1jb250YWluaW5nLWJsb2NrLmh0bWwKKworICAgICAg
ICAqIHJlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGbG93VGhyZWFkQ29udHJvbGxlcjo6Rmxvd1RocmVhZENvbnRyb2xsZXIpOgorICAgICAgICAq
IHJlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
d1RocmVhZENvbnRyb2xsZXI6OmN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZsb3dUaHJlYWRDb250cm9sbGVyOjpzZXRDdXJyZW50UmVuZGVyRmxv
d1RocmVhZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFN0YXRlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6Y3VycmVudFJlbmRlckZsb3dUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OnNldEN1cnJlbnRSZW5kZXJGbG93VGhyZWFk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2tSYXJlRGF0YTo6UmVuZGVyQmxvY2tSYXJlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6c3R5bGVXaWxsQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6Y2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja05lZWRzVXBk
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRDYWNoZWRGbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrTmVlZHNVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OnVwZGF0ZUNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2spOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpzdHls
ZVdpbGxDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpib3JkZXJCb3hSZWN0SW5SZWdpb24pOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZsb3dUaHJlYWQ6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
Ojp1cGRhdGVBbGxMYXllclRvUmVnaW9uTWFwcGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6cmVwYWludFJlY3RhbmdsZUluUmVnaW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXI6OkN1cnJlbnRSZW5kZXJGbG93
VGhyZWFkTWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50UmVu
ZGVyRmxvd1RocmVhZE1haW50YWluZXI6On5DdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWlu
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VycmVudFJlbmRlckZsb3dUaHJlYWRE
aXNhYmxlcjo6Q3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyOjp+Q3VycmVudFJl
bmRlckZsb3dUaHJlYWREaXNhYmxlcik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6bWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25MYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6c2hvd1JlZ2lvbnNJbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6Omluc2VydGVkSW50b1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpy
ZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkSW5jbHVkaW5nRGVzY2VuZGFudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjppbnZhbGlkYXRlRmxvd1RocmVhZENvbnRhaW5p
bmdCbG9ja0luY2x1ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6bG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tO
b0NhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVtb3Zl
RnJvbVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Zmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1dGVPdmVyZmxvd0Zy
b21GbG93VGhyZWFkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojpwb3BMYXlvdXRTdGF0ZUZvckN1
cnJlbnRGbG93VGhyZWFkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorCiAy
MDE0LTEwLTE1ICBNaWhuZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgogCiAgICAgICAg
IFVzZSBtb2Rlcm4gbG9vcHMgaW4gc3VidHJlZXMgc2VsZWN0aW9uIGNvZGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCmluZGV4IDJjZmE0
MjgzYzc5ZjliNWVlYTNlMTc4YWQxMjJkYzhiNjlmYmI5YTguLjhjZjE0YWNmYTIwYzg0NGMxMWZl
NzkxYWI4MzU1ZjRhYzg0OGFkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcApAQCAtNDIsNyArNDIsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIEZsb3dUaHJlYWRDb250cm9sbGVyOjpGbG93VGhyZWFkQ29udHJvbGxlcihSZW5k
ZXJWaWV3KiB2aWV3KQogICAgIDogbV92aWV3KHZpZXcpCi0gICAgLCBtX2N1cnJlbnRSZW5kZXJG
bG93VGhyZWFkKDApCiAgICAgLCBtX2lzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3JkZXJEaXJ0eShm
YWxzZSkKICAgICAsIG1fZmxvd1RocmVhZHNXaXRoQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKDAp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5o
CmluZGV4IDBjZGI1NmNhMzJiYmRjYjA1MjE2OTlkYmU3YTEyYzQwNzIxZDcwN2MuLmZkNmU2MjFk
MGJkYTFhNGFkYWQ2NWNjM2MwN2ZjZTYzZjE0ZTU1MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5oCkBAIC00OCw5ICs0OCw2IEBAIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBGbG93VGhyZWFkQ29udHJvbGxlcihSZW5kZXJWaWV3Kik7CiAgICAg
fkZsb3dUaHJlYWRDb250cm9sbGVyKCk7CiAKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBjdXJyZW50
UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFJlbmRlckZsb3dUaHJl
YWQ7IH0KLSAgICB2b2lkIHNldEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKFJlbmRlckZsb3dUaHJl
YWQqIGZsb3dUaHJlYWQpIHsgbV9jdXJyZW50UmVuZGVyRmxvd1RocmVhZCA9IGZsb3dUaHJlYWQ7
IH0KLQogICAgIGJvb2wgaXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRPcmRlckRpcnR5KCkgY29uc3Qg
eyByZXR1cm4gbV9pc1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVyRGlydHk7IH0KICAgICB2b2lk
IHNldElzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3JkZXJEaXJ0eShib29sIGRpcnR5KQogICAgIHsK
QEAgLTk2LDcgKzkzLDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIFJlbmRlclZpZXcq
IG1fdmlldzsKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBtX2N1cnJlbnRSZW5kZXJGbG93VGhyZWFk
OwogICAgIGJvb2wgbV9pc1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVyRGlydHk7CiAgICAgdW5z
aWduZWQgbV9mbG93VGhyZWFkc1dpdGhBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnM7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q+IG1fcmVuZGVyTmFtZWRGbG93
VGhyZWFkTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRT
dGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKaW5kZXggMmY3
Mjk5ZWNkMWFjOTlkMGRlZTA0YTFhYjI2Zjg3ZWE2ZjhlYjE5Zi4uZDBlN2E5ZTUwNjExZjAyZmIw
MjJlMDg0NmYxOWNiZjhlYWVkYmVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xheW91dFN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0
YXRlLmgKQEAgLTgzLDYgKzgzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExpbmVHcmlkUGFn
aW5hdGlvbk9yaWdpbihjb25zdCBMYXlvdXRTaXplJiBvcmlnaW4pIHsgbV9saW5lR3JpZFBhZ2lu
YXRpb25PcmlnaW4gPSBvcmlnaW47IH0KICAgICAKICAgICBib29sIG5lZWRzQmxvY2tEaXJlY3Rp
b25Mb2NhdGlvblNldEJlZm9yZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUdyaWQgfHwg
KG1faXNQYWdpbmF0ZWQgJiYgbV9wYWdlTG9naWNhbEhlaWdodCk7IH0KKworICAgIFJlbmRlckZs
b3dUaHJlYWQqIGN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50UmVuZGVyRmxvd1RocmVhZDsgfQorICAgIHZvaWQgc2V0Q3VycmVudFJlbmRlckZsb3dUaHJl
YWQoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkgeyBtX2N1cnJlbnRSZW5kZXJGbG93VGhy
ZWFkID0gZmxvd1RocmVhZDsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgcHJvcGFnYXRlTGluZUdy
aWRJbmZvKFJlbmRlckJveCopOwogICAgIHZvaWQgZXN0YWJsaXNoTGluZUdyaWQoUmVuZGVyQmxv
Y2tGbG93Kik7CkBAIC0xMjIsNiArMTI2LDggQEAgcHVibGljOgogICAgIExheW91dFNpemUgbV9s
aW5lR3JpZE9mZnNldDsKICAgICBMYXlvdXRTaXplIG1fbGluZUdyaWRQYWdpbmF0aW9uT3JpZ2lu
OwogCisgICAgUmVuZGVyRmxvd1RocmVhZCogbV9jdXJyZW50UmVuZGVyRmxvd1RocmVhZCB7IG51
bGxwdHIgfTsKKwogI2lmbmRlZiBOREVCVUcKICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IGYw
NjYxNDA1OGEwMmJlMTI2MWVjMDc4YTQ3MTBhNzQ5NDc3ZWRkMWEuLjVhNGY3MzRjMDkxY2RkMDQ3
Nzk3MDFlZjc0NDNiYjZhYTIxY2EyMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcApAQCAtNjgsNyArNjgsOSBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNp
bmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgi
CisKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3Jh
cnlDaGFuZ2UuaD4KIApAQCAtOTQsNyArOTYsNyBAQCBzdGF0aWMgVHJhY2tlZERlc2NlbmRhbnRz
TWFwKiBnUGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwID0gMDsKIAogc3RhdGljIFRyYWNrZWRD
b250YWluZXJNYXAqIGdQb3NpdGlvbmVkQ29udGFpbmVyTWFwID0gMDsKIHN0YXRpYyBUcmFja2Vk
Q29udGFpbmVyTWFwKiBnUGVyY2VudEhlaWdodENvbnRhaW5lck1hcCA9IDA7Ci0gICAgCisKIHR5
cGVkZWYgSGFzaE1hcDxSZW5kZXJCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxMaXN0SGFzaFNldDxS
ZW5kZXJJbmxpbmUqPj4+IENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcDsKIAogc3RydWN0IFVw
ZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uIHsKQEAgLTEyMSwxNCArMTIzLDE3
IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RGVsYXllZFVwZGF0ZVNjcm9sbEluZm9TdGFjaz4m
IHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91CiBzdHJ1Y3QgUmVuZGVyQmxvY2tSYXJlRGF0YSB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyQmxvY2tSYXJlRGF0YSk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFJlbmRlckJsb2NrUmFyZURhdGEoKSAKKyAg
ICBSZW5kZXJCbG9ja1JhcmVEYXRhKCkKICAgICAgICAgOiBtX3BhZ2luYXRpb25TdHJ1dCgwKQog
ICAgICAgICAsIG1fcGFnZUxvZ2ljYWxPZmZzZXQoMCkKLSAgICB7IAorICAgICAgICAsIG1fZmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jayhOdWxsb3B0KQorICAgIHsKICAgICB9CiAKICAgICBMYXlv
dXRVbml0IG1fcGFnaW5hdGlvblN0cnV0OwogICAgIExheW91dFVuaXQgbV9wYWdlTG9naWNhbE9m
ZnNldDsKKworICAgIE9wdGlvbmFsPFJlbmRlckZsb3dUaHJlYWQqPiBtX2Zsb3dUaHJlYWRDb250
YWluaW5nQmxvY2s7CiB9OwogCiB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tSYXJlRGF0YT4+IFJlbmRlckJsb2NrUmFyZURhdGFN
YXA7CkBAIC0yNjYsNyArMjcxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVXaWxsQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3QKICAgICBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmc3R5bGUo
KSA6IG51bGxwdHI7CiAKICAgICBzZXRSZXBsYWNlZChuZXdTdHlsZS5pc0Rpc3BsYXlJbmxpbmVU
eXBlKCkpOwotICAgIAorCiAgICAgaWYgKG9sZFN0eWxlICYmIHBhcmVudCgpICYmIGRpZmYgPT0g
U3R5bGVEaWZmZXJlbmNlTGF5b3V0ICYmIG9sZFN0eWxlLT5wb3NpdGlvbigpICE9IG5ld1N0eWxl
LnBvc2l0aW9uKCkpIHsKICAgICAgICAgaWYgKG5ld1N0eWxlLnBvc2l0aW9uKCkgPT0gU3RhdGlj
UG9zaXRpb24pCiAgICAgICAgICAgICAvLyBDbGVhciBvdXIgcG9zaXRpb25lZCBvYmplY3RzIGxp
c3QuIE91ciBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgZGVzY2VuZGFudHMgd2lsbCBiZQpAQCAtMjgz
LDcgKzI4OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+cGFyZW50
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGlzPFJl
bmRlckJsb2NrPigqY29udGFpbmluZ0Jsb2NrKSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykucmVtb3ZlUG9zaXRpb25lZE9iamVjdHModGhp
cywgTmV3Q29udGFpbmluZ0Jsb2NrKTsKICAgICAgICAgfQpAQCAtMzA4LDEwICszMTMsMjAgQEAg
c3RhdGljIGJvb2wgYm9yZGVyT3JQYWRkaW5nTG9naWNhbFdpZHRoQ2hhbmdlZChjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUsIGNvbnMKIAogdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsK
LSAgICBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICAKICAg
ICBSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOwogCisgICAgYm9vbCBoYWRUcmFuc2Zv
cm0gPSBoYXNUcmFuc2Zvcm0oKTsKKyAgICBib29sIGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tJ
bnZhbGlkYXRlZCA9IGZhbHNlOworICAgIGlmIChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+cG9zaXRp
b24oKSAhPSBuZXdTdHlsZS5wb3NpdGlvbigpKSB7CisgICAgICAgIGludmFsaWRhdGVGbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKKyAgICAgICAgZmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9ja0ludmFsaWRhdGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBSZW5k
ZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKworICAgIGlmIChoYWRUcmFu
c2Zvcm0gIT0gaGFzVHJhbnNmb3JtKCkgJiYgIWZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tJbnZh
bGlkYXRlZCkKKyAgICAgICAgaW52YWxpZGF0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tJbmNs
dWRpbmdEZXNjZW5kYW50cygpOworCiAgICAgaWYgKCFpc0Fub255bW91c0Jsb2NrKCkpIHsKICAg
ICAgICAgLy8gRW5zdXJlIHRoYXQgYWxsIG9mIG91ciBjb250aW51YXRpb24gYmxvY2tzIHBpY2sg
dXAgdGhlIG5ldyBzdHlsZS4KICAgICAgICAgZm9yIChSZW5kZXJCbG9jayogY3VyckNvbnQgPSBi
bG9ja0VsZW1lbnRDb250aW51YXRpb24oKTsgY3VyckNvbnQ7IGN1cnJDb250ID0gY3VyckNvbnQt
PmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbigpKSB7CkBAIC0zMjQsNyArMzM5LDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHkKIAogICAgIHByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJl
bihQcm9wYWdhdGVUb0Jsb2NrQ2hpbGRyZW5Pbmx5KTsKICAgICBtX2xpbmVIZWlnaHQgPSAtMTsK
LSAgICAKKwogICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIG91ciBib3JkZXIvcGFkZGluZyB0byBj
aGFuZ2UsIGJ1dCBmb3IgdGhlIG92ZXJhbGwgbG9naWNhbCB3aWR0aCBvZiB0aGUgYmxvY2sgdG8K
ICAgICAvLyBlbmQgdXAgYmVpbmcgdGhlIHNhbWUuIFdlIGtlZXAgdHJhY2sgb2YgdGhpcyBjaGFu
Z2Ugc28gaW4gbGF5b3V0QmxvY2ssIHdlIGNhbiBrbm93IHRvIHNldCByZWxheW91dENoaWxkcmVu
PXRydWUuCiAgICAgbV9oYXNCb3JkZXJPclBhZGRpbmdMb2dpY2FsV2lkdGhDaGFuZ2VkID0gb2xk
U3R5bGUgJiYgZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgbmVlZHNMYXlvdXQoKSAm
JiBib3JkZXJPclBhZGRpbmdMb2dpY2FsV2lkdGhDaGFuZ2VkKG9sZFN0eWxlLCAmbmV3U3R5bGUp
OwpAQCAtNjkwLDcgKzcwNSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3Vz
Qm94Q2hpbGQoUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyQmxvY2sqIGNoCiAgICAgUmVuZGVy
T2JqZWN0KiBuZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygpOwogCiAgICAgUmVuZGVy
Rmxvd1RocmVhZCogY2hpbGRGbG93VGhyZWFkID0gY2hpbGQtPmZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soKTsKLSAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxvd1RocmVh
ZE1haW50YWluZXIoY2hpbGRGbG93VGhyZWFkKTsKICAgICBpZiAoY2hpbGRGbG93VGhyZWFkICYm
IGNoaWxkRmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKICAgICAgICAgdG9S
ZW5kZXJOYW1lZEZsb3dUaHJlYWQoY2hpbGRGbG93VGhyZWFkKS0+cmVtb3ZlRmxvd0NoaWxkSW5m
byhjaGlsZCk7CiAKQEAgLTMyNTQsNiArMzI2OCw1MCBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRh
dGVGaXJzdExldHRlcigpCiAgICAgY3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihmaXJzdExldHRl
ckNvbnRhaW5lciwgZG93bmNhc3Q8UmVuZGVyVGV4dD4oZmlyc3RMZXR0ZXJPYmopKTsKIH0KIAor
UmVuZGVyRmxvd1RocmVhZCogUmVuZGVyQmxvY2s6OmNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soKSBjb25zdAoreworICAgIFJlbmRlckJsb2NrUmFyZURhdGEqIHJhcmVEYXRhID0gZ2V0
UmFyZURhdGEodGhpcyk7CisKKyAgICBpZiAoIXJhcmVEYXRhIHx8ICFyYXJlRGF0YS0+bV9mbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiByYXJlRGF0YS0+bV9mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrLnZhbHVlKCk7Cit9CisK
K2Jvb2wgUmVuZGVyQmxvY2s6OmNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tOZWVkc1Vw
ZGF0ZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyQmxvY2tSYXJlRGF0YSogcmFyZURhdGEgPSBnZXRS
YXJlRGF0YSh0aGlzKTsKKworICAgIGlmICghcmFyZURhdGEgfHwgIXJhcmVEYXRhLT5tX2Zsb3dU
aHJlYWRDb250YWluaW5nQmxvY2spCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFJlbmRlckJsb2NrOjpzZXRDYWNoZWRGbG93VGhyZWFkQ29udGFp
bmluZ0Jsb2NrTmVlZHNVcGRhdGUoKQoreworICAgIFJlbmRlckJsb2NrUmFyZURhdGEmIHJhcmVE
YXRhID0gZW5zdXJlUmFyZURhdGEodGhpcyk7CisgICAgcmFyZURhdGEubV9mbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrID0gTnVsbG9wdDsKK30KKworUmVuZGVyRmxvd1RocmVhZCogUmVuZGVyQmxv
Y2s6OnVwZGF0ZUNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soUmVuZGVyRmxvd1RocmVh
ZCogZmxvd1RocmVhZCkgY29uc3QKK3sKKyAgICBSZW5kZXJCbG9ja1JhcmVEYXRhJiByYXJlRGF0
YSA9IGVuc3VyZVJhcmVEYXRhKHRoaXMpOworICAgIHJhcmVEYXRhLm1fZmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jayA9IGZsb3dUaHJlYWQ7CisKKyAgICByZXR1cm4gZmxvd1RocmVhZDsKK30KKwor
UmVuZGVyRmxvd1RocmVhZCogUmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soKSBjb25zdAoreworICAgIFJlbmRlckJsb2NrUmFyZURhdGEqIHJhcmVEYXRhID0gZ2V0
UmFyZURhdGEodGhpcyk7CisgICAgaWYgKCFyYXJlRGF0YSB8fCAhcmFyZURhdGEtPm1fZmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaykKKyAgICAgICAgcmV0dXJuIHVwZGF0ZUNhY2hlZEZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soUmVuZGVyQm94Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCkpOworCisgICAgQVNTRVJUKHJhcmVEYXRhLT5tX2Zsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2sudmFsdWUoKSA9PSBSZW5kZXJCb3g6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KSk7CisgICAgcmV0dXJuIHJhcmVEYXRhLT5tX2Zsb3dUaHJlYWRDb250YWluaW5nQmxvY2sudmFs
dWUoKTsKK30KKwogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6cGFnaW5hdGlvblN0cnV0KCkgY29u
c3QKIHsKICAgICBSZW5kZXJCbG9ja1JhcmVEYXRhKiByYXJlRGF0YSA9IGdldFJhcmVEYXRhKHRo
aXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCA3MmQ0YTg4ZDc3
NTcyMzlhYmY3ZmQzNjZiMjA5ODFmNDk4MTNmZjNmLi5lNDUwM2Q3MjExMWJlMTRlMjA5MmM3OWRl
ZGI4MmFiNDc4YjQ4MWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApA
QCAtMzEyLDcgKzMxMiwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGls
ZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wg
Y2FuQ29sbGFwc2VBbm9ueW1vdXNCbG9ja0NoaWxkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CisgICAgUmVuZGVyRmxvd1RocmVhZCogY2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygp
IGNvbnN0OworICAgIHZvaWQgc2V0Q2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja05lZWRz
VXBkYXRlKCk7CisgICAgdmlydHVhbCBib29sIGNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2tOZWVkc1VwZGF0ZSgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBSZW5kZXJG
bG93VGhyZWFkKiBsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOwogCiAgICAg
dmlydHVhbCB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwpAQCAtNDQ5LDcgKzQ1NCw3IEBAIHByaXZh
dGU6CiAKICAgICB2aXJ0dWFsIExheW91dFJlY3QgcmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRVbml0
IG91dGxpbmVXaWR0aCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCBjb25zdCBS
ZW5kZXJTdHlsZSYgb3V0bGluZVN0eWxlRm9yUmVwYWludCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFs
OwotICAgIAorCiAgICAgdmlydHVhbCBSZW5kZXJFbGVtZW50KiBob3ZlckFuY2VzdG9yKCkgY29u
c3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURyYWdTdGF0ZShib29s
IGRyYWdPbikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkQmVjYW1lTm9u
SW5saW5lKFJlbmRlck9iamVjdCogY2hpbGQpIG92ZXJyaWRlIGZpbmFsOwpAQCAtNDg5LDYgKzQ5
NCw4IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBjbG9uZSgpIGNvbnN0
OwogICAgIFJlbmRlckJsb2NrKiBjb250aW51YXRpb25CZWZvcmUoUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCk7CiAKKyAgICBSZW5kZXJGbG93VGhyZWFkKiB1cGRhdGVDYWNoZWRGbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKFJlbmRlckZsb3dUaHJlYWQqKSBjb25zdDsKKwogcHJpdmF0ZToKICAg
ICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3Q7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IDU0OGQ1NWRjNGY3ZDY2ZGNjNjFmOGMyNWI4
YjgwMWY5ZGQ4Yjk4MTEuLjc3MzNhMDkwNDRjZGRkMTI5MDVjZmY4ZTcxMjQ0MjhiZGRjYmZmOWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0x
OTg1LDE4ICsxOTg1LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpzdHlsZVdpbGxDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuCiAgICAgaWYgKG9sZFN0
eWxlKSB7CiAgICAgICAgIEVQb3NpdGlvbiBvbGRQb3NpdGlvbiA9IG9sZFN0eWxlLT5wb3NpdGlv
bigpOwogICAgICAgICBFUG9zaXRpb24gbmV3UG9zaXRpb24gPSBuZXdTdHlsZS5wb3NpdGlvbigp
OwotICAgICAgICAKKwogICAgICAgICBpZiAocGFyZW50KCkgJiYgZGlmZiA9PSBTdHlsZURpZmZl
cmVuY2VMYXlvdXQgJiYgb2xkUG9zaXRpb24gIT0gbmV3UG9zaXRpb24pIHsKICAgICAgICAgICAg
IGlmIChjb250YWluc0Zsb2F0cygpICYmICFpc0Zsb2F0aW5nKCkgJiYgIWlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpICYmIG5ld1N0eWxlLmhhc091dE9mRmxvd1Bvc2l0aW9uKCkpCiAgICAgICAgICAg
ICAgICAgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwotCi0gICAgICAg
ICAgICAvLyBJZiB0aGlzIGJsb2NrIGlzIGluc2lkZSBhIG11bHRpY29sIGFuZCBpcyBtb3Zpbmcg
ZnJvbSBpbi1mbG93IHBvc2l0aW9uaW5nIHRvIG91dC1vZi1mbG93IHBvc2l0aW9uaW5nLAotICAg
ICAgICAgICAgLy8gcmVtb3ZlIGl0cyBpbmZvIChzdWNoIGFzIGxpbmVzLXRvLXJlZ2lvbiBtYXBw
aW5nKSBmcm9tIHRoZSBmbG93dGhyZWFkIGJlY2F1c2UgaXQgd29uJ3QgYmUgYWJsZSB0byBkbyBp
dCBsYXRlci4KLSAgICAgICAgICAgIC8vIFRoZSBmbG93dGhyZWFkIHdpbGwgbm8gbG9uZ2VyIGJl
IGluIGl0cyBjb250YWluaW5nIGJsb2NrIGNoYWluIGFuZCwgYXMgc3VjaCwgZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jayB3aWxsIHJldHVybiBudWxsLgotICAgICAgICAgICAgaWYgKFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKFNraXBGbG93
VGhyZWFkQ2FjaGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZsb3dUaHJlYWQtPmlzUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkKCkgJiYgIWlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChu
ZXdQb3NpdGlvbiA9PSBBYnNvbHV0ZVBvc2l0aW9uIHx8IG5ld1Bvc2l0aW9uID09IEZpeGVkUG9z
aXRpb24pKQotICAgICAgICAgICAgICAgICAgICBmbG93VGhyZWFkLT5yZW1vdmVGbG93Q2hpbGRJ
bmZvKHRoaXMpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDFjMjdhMTlhZTFkYjM5MDg0MDc3NTQ4YjE5
MDE2Njg2ZmFiNDVmMTguLmFhNDg2Mzg5MGY4NDlhNWRiYjMzNmNlZjNiYmVmYjRmMDFlNmUwNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xOTYsNyArMTk2LDcg
QEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmJvcmRlckJveFJlY3RJblJlZ2lvbihSZW5kZXJSZWdp
b24qIHJlZ2lvbiwgUmVuZGVyQm94UmVnaW8KICAgICAgICAgLy8gRklYTUU6IEluIGEgcGVyZmVj
dCB3b3JsZCB0aGlzIGNvbmRpdGlvbiBzaG91bGQgbmV2ZXIgaGFwcGVuLgogICAgICAgICByZXR1
cm4gYm9yZGVyQm94UmVjdCgpOwogICAgIH0KLSAgICAKKwogICAgIEFTU0VSVChmbG93VGhyZWFk
LT5yZWdpb25JblJhbmdlKHJlZ2lvbiwgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpOwogCiAgICAg
Ly8gQ29tcHV0ZSB0aGUgbG9naWNhbCB3aWR0aCBhbmQgcGxhY2VtZW50IGluIHRoaXMgcmVnaW9u
LgpAQCAtMjA3LDIxICsyMDcsMjYgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmJvcmRlckJveFJl
Y3RJblJlZ2lvbihSZW5kZXJSZWdpb24qIHJlZ2lvbiwgUmVuZGVyQm94UmVnaW8KICAgICAvLyBX
ZSBoYXZlIGNhY2hlZCBpbnNldHMuCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggPSBib3hJ
bmZvLT5sb2dpY2FsV2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gYm94SW5m
by0+bG9naWNhbExlZnQoKTsKLSAgICAgICAgCisKICAgICAvLyBOb3cgYXBwbHkgdGhlIHBhcmVu
dCBpbnNldCBzaW5jZSBpdCBpcyBjdW11bGF0aXZlIHdoZW5ldmVyIGFueXRoaW5nIGluIHRoZSBj
b250YWluaW5nIGJsb2NrIGNoYWluIHNoaWZ0cy4KICAgICAvLyBGSVhNRTogRG9lc24ndCB3b3Jr
IHJpZ2h0IHdpdGggcGVycGVuZGljdWxhciB3cml0aW5nIG1vZGVzLgogICAgIGNvbnN0IFJlbmRl
ckJsb2NrKiBjdXJyZW50Qm94ID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgUmVuZGVyQm94UmVn
aW9uSW5mbyogY3VycmVudEJveEluZm8gPSBjdXJyZW50Qm94LT5yZW5kZXJCb3hSZWdpb25JbmZv
KHJlZ2lvbik7CisgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogY3VycmVudEJveEluZm8gPSBpc1Jl
bmRlckZsb3dUaHJlYWQoKSA/IG51bGxwdHIgOiBjdXJyZW50Qm94LT5yZW5kZXJCb3hSZWdpb25J
bmZvKHJlZ2lvbik7CiAgICAgd2hpbGUgKGN1cnJlbnRCb3hJbmZvICYmIGN1cnJlbnRCb3hJbmZv
LT5pc1NoaWZ0ZWQoKSkgewogICAgICAgICBpZiAoY3VycmVudEJveC0+c3R5bGUoKS5kaXJlY3Rp
b24oKSA9PSBMVFIpCiAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBjdXJyZW50Qm94SW5mby0+
bG9naWNhbExlZnQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9naWNhbExlZnQgLT0g
KGN1cnJlbnRCb3gtPmxvZ2ljYWxXaWR0aCgpIC0gY3VycmVudEJveEluZm8tPmxvZ2ljYWxXaWR0
aCgpKSAtIGN1cnJlbnRCb3hJbmZvLT5sb2dpY2FsTGVmdCgpOworCisgICAgICAgIC8vIE9uY2Ug
d2UgcmVhY2ggdGhlIGZyYWdtZW50YXRpb24gY29udGFpbmVyIHdlIHNob3VsZCBzdG9wLgorICAg
ICAgICBpZiAoY3VycmVudEJveC0+aXNSZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAgICAgICBi
cmVhazsKKwogICAgICAgICBjdXJyZW50Qm94ID0gY3VycmVudEJveC0+Y29udGFpbmluZ0Jsb2Nr
KCk7CiAgICAgICAgIHJlZ2lvbiA9IGN1cnJlbnRCb3gtPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lv
bnMocmVnaW9uKTsKICAgICAgICAgY3VycmVudEJveEluZm8gPSBjdXJyZW50Qm94LT5yZW5kZXJC
b3hSZWdpb25JbmZvKHJlZ2lvbik7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGNhY2hlRmxhZyA9
PSBEb05vdENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbykKICAgICAgICAgZGVsZXRlIGJveEluZm87
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAppbmRl
eCBlYjhjNzcwYmU0OThhZGMyMWMxNzk5ZjAzZTJiN2YxNzZhNzc1Y2E2Li4wNzgxZDZjOWZkOWFi
Yjk1YzY5MGE4ZGU2NGMyNGZmOWQwNjgzYzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCkBAIC0xOTcsNyArMTk3LDYgQEAgdm9pZCBSZW5kZXJG
bG93VGhyZWFkOjpsYXlvdXQoKQogCiAgICAgdmFsaWRhdGVSZWdpb25zKCk7CiAKLSAgICBDdXJy
ZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgY3VycmVudEZsb3dUaHJlYWRTZXR0ZXIodGhp
cyk7CiAgICAgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXQoKTsKIAogICAgIG1fcGFnZUxvZ2ljYWxT
aXplQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMjg4LDEwICsyODcsNiBAQCBib29sIFJlbmRlckZsb3dU
aHJlYWQ6OnVwZGF0ZUFsbExheWVyVG9SZWdpb25NYXBwaW5ncygpCiAgICAgaWYgKCFjb2xsZWN0
c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIC8vIFdlIGNhbid0IHVzZSBjdXJyZW50Rmxvd1RocmVhZCBhcyBpdCBpcyBwb3NzaWJsZSB0
byBoYXZlIGludGVybGVhdmVkIGZsb3cgdGhyZWFkcyBhbmQgdGhlIHdyb25nIG9uZSBjb3VsZCBi
ZSB1c2VkLgotICAgIC8vIExldCBlYWNoIHJlZ2lvbiBmaWd1cmUgb3V0IHRoZSBwcm9wZXIgZW5j
bG9zaW5nIGZsb3cgdGhyZWFkLgotICAgIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXIg
ZGlzYWJsZXIoJnZpZXcoKSk7Ci0KICAgICAvLyBJZiB0aGUgUmVuZGVyRmxvd1RocmVhZCBoYWQg
YSB6LWluZGV4IGxheWVyIHVwZGF0ZSwgdGhlbiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29tcG9z
aXRlZCBsYXllcnMgdG9vLgogICAgIGJvb2wgbmVlZHNMYXllclVwZGF0ZSA9IGxheWVyKCktPmlz
RGlydHlSZW5kZXJGbG93VGhyZWFkKCkgfHwgbV9sYXllcnNUb1JlZ2lvbk1hcHBpbmdzRGlydHkg
fHwgIW1fbGF5ZXJUb1JlZ2lvbk1hcC5nZXQoKTsKICAgICBsYXllcigpLT51cGRhdGVMYXllckxp
c3RzSWZOZWVkZWQoKTsKQEAgLTM4OCwxMCArMzgzLDYgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFk
OjpyZXBhaW50UmVjdGFuZ2xlSW5SZWdpb25zKGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0
KQogCiAgICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKCZ2aWV3KCkp
OyAvLyBXZSBjYW4ndCB1c2UgbGF5b3V0IHN0YXRlIHRvIHJlcGFpbnQsIHNpbmNlIHRoZSByZWdp
b25zIGFyZSBzb21ld2hlcmUgZWxzZS4KIAotICAgIC8vIFdlIGNhbid0IHVzZSBjdXJyZW50Rmxv
d1RocmVhZCBhcyBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIGludGVybGVhdmVkIGZsb3cgdGhyZWFk
cyBhbmQgdGhlIHdyb25nIG9uZSBjb3VsZCBiZSB1c2VkLgotICAgIC8vIExldCBlYWNoIHJlZ2lv
biBmaWd1cmUgb3V0IHRoZSBwcm9wZXIgZW5jbG9zaW5nIGZsb3cgdGhyZWFkLgotICAgIEN1cnJl
bnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXIgZGlzYWJsZXIoJnZpZXcoKSk7Ci0gICAgCiAgICAg
Zm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lvbkxpc3QpCiAgICAgICAgIHJlZ2lvbi0+cmVwYWlu
dEZsb3dUaHJlYWRDb250ZW50KHJlcGFpbnRSZWN0KTsKIH0KQEAgLTE1MjIsNDIgKzE1MTMsNSBA
QCBDb250YWluaW5nUmVnaW9uTWFwJiBSZW5kZXJGbG93VGhyZWFkOjpjb250YWluaW5nUmVnaW9u
TWFwKCkKICAgICByZXR1cm4gKm1fbGluZVRvUmVnaW9uTWFwLmdldCgpOwogfQogCi1DdXJyZW50
UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXI6OkN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRh
aW5lcihSZW5kZXJGbG93VGhyZWFkKiByZW5kZXJGbG93VGhyZWFkKQotICAgIDogbV9yZW5kZXJG
bG93VGhyZWFkKHJlbmRlckZsb3dUaHJlYWQpCi0gICAgLCBtX3ByZXZpb3VzUmVuZGVyRmxvd1Ro
cmVhZCgwKQotewotICAgIGlmICghbV9yZW5kZXJGbG93VGhyZWFkKQotICAgICAgICByZXR1cm47
Ci0gICAgRmxvd1RocmVhZENvbnRyb2xsZXImIGNvbnRyb2xsZXIgPSBtX3JlbmRlckZsb3dUaHJl
YWQtPnZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxlcigpOwotICAgIG1fcHJldmlvdXNSZW5kZXJG
bG93VGhyZWFkID0gY29udHJvbGxlci5jdXJyZW50UmVuZGVyRmxvd1RocmVhZCgpOwotICAgIC8v
IFJlbW92ZSB0aGUgYXNzZXJ0IHNvIHdlIGNhbiB1c2UgdGhpcyB0byBjaGFuZ2UgdGhlIGZsb3cg
dGhyZWFkIGNvbnRleHQuCi0gICAgLy8gQVNTRVJUKCFtX3ByZXZpb3VzUmVuZGVyRmxvd1RocmVh
ZCB8fCAhcmVuZGVyRmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSk7Ci0gICAg
Y29udHJvbGxlci5zZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChtX3JlbmRlckZsb3dUaHJlYWQp
OwotfQotCi1DdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXI6On5DdXJyZW50UmVuZGVy
Rmxvd1RocmVhZE1haW50YWluZXIoKQotewotICAgIGlmICghbV9yZW5kZXJGbG93VGhyZWFkKQot
ICAgICAgICByZXR1cm47Ci0gICAgRmxvd1RocmVhZENvbnRyb2xsZXImIGNvbnRyb2xsZXIgPSBt
X3JlbmRlckZsb3dUaHJlYWQtPnZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxlcigpOwotICAgIEFT
U0VSVChjb250cm9sbGVyLmN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCkgPT0gbV9yZW5kZXJGbG93
VGhyZWFkKTsKLSAgICBjb250cm9sbGVyLnNldEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKG1fcHJl
dmlvdXNSZW5kZXJGbG93VGhyZWFkKTsKLX0KLQotQ3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNh
Ymxlcjo6Q3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcihSZW5kZXJWaWV3KiB2aWV3KQot
ICAgIDogbV92aWV3KHZpZXcpCi0gICAgLCBtX3JlbmRlckZsb3dUaHJlYWQoMCkKLXsKLSAgICBt
X3JlbmRlckZsb3dUaHJlYWQgPSBtX3ZpZXctPmZsb3dUaHJlYWRDb250cm9sbGVyKCkuY3VycmVu
dFJlbmRlckZsb3dUaHJlYWQoKTsKLSAgICBpZiAobV9yZW5kZXJGbG93VGhyZWFkKQotICAgICAg
ICB2aWV3LT5mbG93VGhyZWFkQ29udHJvbGxlcigpLnNldEN1cnJlbnRSZW5kZXJGbG93VGhyZWFk
KDApOwotfQotCi1DdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyOjp+Q3VycmVudFJlbmRl
ckZsb3dUaHJlYWREaXNhYmxlcigpCi17Ci0gICAgaWYgKG1fcmVuZGVyRmxvd1RocmVhZCkKLSAg
ICAgICAgbV92aWV3LT5mbG93VGhyZWFkQ29udHJvbGxlcigpLnNldEN1cnJlbnRSZW5kZXJGbG93
VGhyZWFkKG1fcmVuZGVyRmxvd1RocmVhZCk7Ci19Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKaW5kZXggYmI1
MTZlZjM5MDRmMDU5N2ZlMmEyOWYzZTU4ZGJkMTE1ZjEyZjM4Yy4uNGM2ZDE4ZTMwYjE2ZmYxNDI4
ZDQ1M2M3ZGFjMDI4NmU0YmM2YzU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5oCkBAIC0yMzEsNiArMjMxLDggQEAgcHVibGljOgogCiAgICAgQ29udGFp
bmluZ1JlZ2lvbk1hcCYgY29udGFpbmluZ1JlZ2lvbk1hcCgpOwogCisgICAgdmlydHVhbCBib29s
IGNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tOZWVkc1VwZGF0ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSBhcyBjb2x1
bW4gYW5kIHJlZ2lvbiBmbG93IHRocmVhZHMgc3RhcnQgbmVzdGluZywgdGhpcyBtYXkgZW5kIHVw
IGNoYW5naW5nLgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGVja0NvbHVtbkJyZWFrcygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKQEAgLTI0NCw2ICsyNDYsOCBAQCBwcml2YXRlOgogcHJv
dGVjdGVkOgogICAgIFJlbmRlckZsb3dUaHJlYWQoRG9jdW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0
eWxlPik7CiAKKyAgICB2aXJ0dWFsIFJlbmRlckZsb3dUaHJlYWQqIGxvY2F0ZUZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2soKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjb25zdF9jYXN0PFJlbmRl
ckZsb3dUaHJlYWQqPih0aGlzKTsgfQorCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJO
YW1lKCkgY29uc3QgPSAwOwogCiAgICAgLy8gT3ZlcnJpZGRlbiBieSBjb2x1bW5zL3BhZ2VzIHRv
IHNldCB1cCBhbiBpbml0aWFsIGxvZ2ljYWwgd2lkdGggb2YgdGhlIHBhZ2Ugd2lkdGggZXZlbiB3
aGVuCkBAIC0zNzQsMjYgKzM3OCw2IEBAIHByb3RlY3RlZDoKIAogUkVOREVSX09CSkVDVF9UWVBF
X0NBU1RTKFJlbmRlckZsb3dUaHJlYWQsIGlzUmVuZGVyRmxvd1RocmVhZCgpKQogCi1jbGFzcyBD
dXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lcik7Ci1wdWJsaWM6Ci0gICAgQ3Vy
cmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyKFJlbmRlckZsb3dUaHJlYWQqKTsKLSAgICB+
Q3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyKCk7Ci1wcml2YXRlOgotICAgIFJlbmRl
ckZsb3dUaHJlYWQqIG1fcmVuZGVyRmxvd1RocmVhZDsKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBt
X3ByZXZpb3VzUmVuZGVyRmxvd1RocmVhZDsKLX07Ci0KLWNsYXNzIEN1cnJlbnRSZW5kZXJGbG93
VGhyZWFkRGlzYWJsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cnJlbnRSZW5kZXJG
bG93VGhyZWFkRGlzYWJsZXIpOwotcHVibGljOgotICAgIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFk
RGlzYWJsZXIoUmVuZGVyVmlldyopOwotICAgIH5DdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2Fi
bGVyKCk7Ci1wcml2YXRlOgotICAgIFJlbmRlclZpZXcqIG1fdmlldzsKLSAgICBSZW5kZXJGbG93
VGhyZWFkKiBtX3JlbmRlckZsb3dUaHJlYWQ7Ci19OwotCiAvLyBUaGlzIHN0cnVjdHVyZSBpcyB1
c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nLgogI2lmbmRlZiBOREVCVUcKIHRl
bXBsYXRlIDw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPFJlbmRlclJlZ2lvbio+IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGM0MGJmYTgzM2JmYjhlZGY1Mzc1
ZWY2ZWE2MDJkNDk5Y2ZhODU3OWYuLmU4OTg0NDBiMTg0YTA3NTgyMDgxN2VjYWM4ZTVkNjk2Njgy
NmM3MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzc3
MSwxMiArMzc3MSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYKIAogICAgIC8vIERvbid0IHBh
aW50IHRoZSBsYXllciBpZiB0aGUgcmVuZGVyZXIgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyByZWdp
b24uCiAgICAgLy8gVGhpcyBpcyB0cnVlIGFzIGxvbmcgYXMgd2UgY2xhbXAgdGhlIHJhbmdlIG9m
IGEgYm94IHRvIGl0cyBjb250YWluaW5nIGJsb2NrIHJhbmdlLgotCi0gICAgLy8gRGlzYWJsZSBu
YW1lZCBmbG93IHJlZ2lvbiBpbmZvcm1hdGlvbiBmb3IgaW4gZmxvdyB0aHJlYWRzIHN1Y2ggYXMg
bXVsdGktY29sLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXJyZW50UmVuZGVyRmxvd1RocmVhZERp
c2FibGVyPiBmbG93VGhyZWFkRGlzYWJsZXI7Ci0gICAgaWYgKGVuY2xvc2luZ1BhZ2luYXRpb25M
YXllcihFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycykpCi0gICAgICAgIGZsb3dUaHJl
YWREaXNhYmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNh
Ymxlcj4oJnJlbmRlcmVyKCkudmlldygpKTsKLQogICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwog
ICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCkgewogICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJh
Z21lbnQtPmlzVmFsaWQoKSk7CkBAIC00ODIxLDExICs0ODE1LDYgQEAgUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5
ZXIqIGNvbnQKICAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhaGFzU2VsZlBhaW50
aW5nTGF5ZXJEZXNjZW5kYW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gRGlzYWJs
ZSBuYW1lZCBmbG93IHJlZ2lvbiBpbmZvcm1hdGlvbiBmb3IgaW4gZmxvdyB0aHJlYWRzIHN1Y2gg
YXMgbXVsdGktY29sLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXJyZW50UmVuZGVyRmxvd1RocmVh
ZERpc2FibGVyPiBmbG93VGhyZWFkRGlzYWJsZXI7Ci0gICAgaWYgKGVuY2xvc2luZ1BhZ2luYXRp
b25MYXllcihFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycykpCi0gICAgICAgIGZsb3dU
aHJlYWREaXNhYmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q3VycmVudFJlbmRlckZsb3dUaHJlYWRE
aXNhYmxlcj4oJnJlbmRlcmVyKCkudmlldygpKTsKLQogICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgp
OwogCiAgICAgLy8gUHJldmVudCBoaXR0aW5nIHRoZSBmaXhlZCBsYXllcnMgaW5zaWRlIHRoZSBm
bG93IHRocmVhZCB3aGVuIGhpdHRpbmcgdGhyb3VnaCByZWdpb25zLgpAQCAtNTIzMiw4ICs1MjIx
LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6bWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25M
YXllcihDbGlwUmVjdHMmIGNsaXBSZWN0cykgY28KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnQoKSAmJiBuYW1lZEZsb3dGcmFnbWVu
dC0+cGFyZW50KCktPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSk7Ci0gICAg
Ci0gICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlciBmbG93VGhyZWFkRGlzYWJsZXIo
JnJlbmRlcmVyKCkudmlldygpKTsKKwogICAgIENsaXBSZWN0c0NvbnRleHQgdGFyZ2V0Q2xpcFJl
Y3RzQ29udGV4dCgmbmFtZWRGbG93RnJhZ21lbnQtPmZyYWdtZW50Q29udGFpbmVyTGF5ZXIoKSwg
VGVtcG9yYXJ5Q2xpcFJlY3RzKTsKICAgICBuYW1lZEZsb3dGcmFnbWVudC0+ZnJhZ21lbnRDb250
YWluZXJMYXllcigpLmNhbGN1bGF0ZUNsaXBSZWN0cyh0YXJnZXRDbGlwUmVjdHNDb250ZXh0LCBj
bGlwUmVjdHMpOwogCkBAIC02NzEwLDcgKzY2OTgsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpmaWx0
ZXJOZWVkc1JlcGFpbnQoKQogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnROYW1lZEZsb3dUaHJlYWRJ
bnNpZGVSZWdpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCogcmVnaW9uLCBMYXlvdXRSZWN0IHBhaW50RGlydHlSZWN0LCBMYXlvdXRQb2ludCBwYWlu
dE9mZnNldCwgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBQYWludExheWVyRmxhZ3MgcGFp
bnRGbGFncykKIHsKICAgICBMYXlvdXRSZWN0IHJlZ2lvbkNvbnRlbnRCb3ggPSB0b1JlbmRlckJv
eChyZWdpb24tPmxheWVyT3duZXIoKSkuY29udGVudEJveFJlY3QoKTsKLSAgICBDdXJyZW50UmVu
ZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxvd1RocmVhZE1haW50YWluZXIodG9SZW5kZXJGbG93
VGhyZWFkKCZyZW5kZXJlcigpKSk7CiAgICAgQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIg
cmVnaW9uTWFpbnRhaW5lcigqcmVnaW9uKTsKICAgICByZWdpb24tPnNldFJlZ2lvbk9iamVjdHNS
ZWdpb25TdHlsZSgpOwogCkBAIC02ODE3LDcgKzY4MDQsNiBAQCBSZW5kZXJMYXllciogUmVuZGVy
TGF5ZXI6OmhpdFRlc3RGbG93VGhyZWFkSWZSZWdpb25Gb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbQogICAgICAgICBoaXRUZXN0UmVjdEluRmxvd1RocmVhZC5tb3ZlKGhpdFRlc3RPZmZzZXQp
OwogICAgICAgICBoaXRUZXN0UmVjdEluRmxvd1RocmVhZC5leHBhbmQoTGF5b3V0U2l6ZShmYWJz
KChkb3VibGUpaGl0VGVzdE9mZnNldC53aWR0aCgpKSwgZmFicygoZG91YmxlKWhpdFRlc3RPZmZz
ZXQuaGVpZ2h0KCkpKSk7CiAKLSAgICAgICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFp
bmVyIGZsb3dUaHJlYWRNYWludGFpbmVyKGZsb3dUaHJlYWQpOwogICAgICAgICBDdXJyZW50UmVu
ZGVyUmVnaW9uTWFpbnRhaW5lciByZWdpb25NYWludGFpbmVyKHJlZ2lvbik7CiAKICAgICAgICAg
SGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGZiOWZlOGZhM2Q0MDZk
OTRjZDI0MWYwMWM1OTIwNGM5MWQyNWM5NTkuLjZlMGZlNWM1OTEyNTkzNWIyODAzNGU3NmZhNGYw
ZjdmYjg2MTRhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CkBAIC01MjIsMzggKzUyMiw2IEBAIHN0YXRpYyBib29sIGhhc0ZpeGVkUG9zSW5OYW1lZEZsb3dD
b250YWluaW5nQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVJlbmRlckZsb3dUaHJlYWQqIFJlbmRlck9iamVjdDo6bG9jYXRlRmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9ja05vQ2FjaGUoKSBjb25zdAotewotICAgIEFTU0VSVChmbG93VGhy
ZWFkU3RhdGUoKSAhPSBOb3RJbnNpZGVGbG93VGhyZWFkKTsKLQotICAgIFJlbmRlck9iamVjdCog
Y3VyciA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4odGhpcyk7Ci0gICAgd2hpbGUgKGN1cnIp
IHsKLSAgICAgICAgaWYgKGN1cnItPmlzUmVuZGVyRmxvd1RocmVhZCgpKQotICAgICAgICAgICAg
cmV0dXJuIHRvUmVuZGVyRmxvd1RocmVhZChjdXJyKTsKLSAgICAgICAgY3VyciA9IGN1cnItPmNv
bnRhaW5pbmdCbG9jaygpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotUmVuZGVyRmxvd1Ro
cmVhZCogUmVuZGVyT2JqZWN0Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoZmxvd1RocmVhZFN0YXRlKCkgIT0gTm90SW5zaWRlRmxvd1RocmVh
ZCk7Ci0KLSAgICAvLyBTZWUgaWYgd2UgaGF2ZSB0aGUgdGhyZWFkIGNhY2hlZCBiZWNhdXNlIHdl
J3JlIGluIHRoZSBtaWRkbGUgb2YgbGF5b3V0LgotICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dU
aHJlYWQgPSB2aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS5jdXJyZW50UmVuZGVyRmxvd1Ro
cmVhZCgpOwotICAgIGlmIChmbG93VGhyZWFkICYmIChmbG93VGhyZWFkU3RhdGUoKSA9PSBmbG93
VGhyZWFkLT5mbG93VGhyZWFkU3RhdGUoKSkpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBz
bG93IHBhdGggd291bGQgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBhcyBvdXIgY2FjaGUuCi0gICAg
ICAgIC8vIEZJWE1FOiBGb3IgdGhlIG1vbWVudCwgb25seSBhcHBseSB0aGlzIGFzc2VydGlvbiB0
byByZWdpb25zLCBhcyBtdWx0aWNvbAotICAgICAgICAvLyBzdGlsbCBoYXMgc29tZSBpc3N1ZXMg
YW5kIHRyaWdnZXJzIHRoaXMgYXNzZXJ0LgotICAgICAgICAvLyBDcmVhdGVkIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI5NDYgZm9yIHRoaXMgaXNzdWUuCi0gICAg
ICAgIEFTU0VSVCghZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSB8fCBmbG93
VGhyZWFkID09IGxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tOb0NhY2hlKCkpOwotICAg
ICAgICByZXR1cm4gZmxvd1RocmVhZDsKLSAgICB9Ci0gICAgCi0gICAgLy8gTm90IGluIHRoZSBt
aWRkbGUgb2YgbGF5b3V0IHNvIGhhdmUgdG8gZmluZCB0aGUgdGhyZWFkIHRoZSBzbG93IHdheS4K
LSAgICByZXR1cm4gbG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja05vQ2FjaGUoKTsKLX0K
LQogUmVuZGVyQmxvY2sqIFJlbmRlck9iamVjdDo6Zmlyc3RMaW5lQmxvY2soKSBjb25zdAogewog
ICAgIHJldHVybiAwOwpAQCAtMTQzOCw4ICsxNDA2LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNo
b3dMaW5lVHJlZUZvclRoaXMoKSBjb25zdAogCiB2b2lkIFJlbmRlck9iamVjdDo6c2hvd1JlZ2lv
bnNJbmZvcm1hdGlvbigpIGNvbnN0CiB7Ci0gICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNh
YmxlciBmbG93VGhyZWFkRGlzYWJsZXIoJnZpZXcoKSk7Ci0KICAgICBpZiAoUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkgewogICAgICAg
ICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKSA6IG51
bGxwdHI7CiAgICAgICAgIGlmIChib3gpIHsKQEAgLTIwNDgsMTcgKzIwMTQsOSBAQCB2b2lkIFJl
bmRlck9iamVjdDo6aW5zZXJ0ZWRJbnRvVHJlZSgpCiAKICAgICBpZiAoIWlzRmxvYXRpbmcoKSAm
JiBwYXJlbnQoKS0+Y2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgcGFyZW50KCktPmRpcnR5TGlu
ZXNGcm9tQ2hhbmdlZENoaWxkKCp0aGlzKTsKLSAgICAKLSAgICAvLyBXZSBoYXZlIHRvIHVuc2V0
IHRoZSBjdXJyZW50IGxheW91dCBSZW5kZXJGbG93VGhyZWFkIGhlcmUsIHNpbmNlIGluc2VydGVk
SW50b1RyZWUoKSBjYW4gaGFwcGVuIGluCi0gICAgLy8gdGhlIG1pZGRsZSBvZiBsYXlvdXQgYnV0
IGZvciBvYmplY3RzIGluc2lkZSBhIG5lc3RlZCBmbG93IHRocmVhZCB0aGF0IGlzIHN0aWxsIGJl
aW5nIHBvcHVsYXRlZC4gVGhpcwotICAgIC8vIHdpbGwgY2F1c2UgYW4gYWNjdXJhdGUgY3Jhd2wg
dG8gaGFwcGVuIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSByaWdodCBmbG93IHRocmVhZCBp
cyBub3RpZmllZC4KLSAgICBSZW5kZXJGbG93VGhyZWFkKiBwcmV2aW91c1RocmVhZCA9IHZpZXco
KS5mbG93VGhyZWFkQ29udHJvbGxlcigpLmN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCk7Ci0gICAg
dmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuc2V0Q3VycmVudFJlbmRlckZsb3dUaHJlYWQo
bnVsbHB0cik7Ci0gICAgaWYgKHBhcmVudCgpLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkKLSAgICAg
ICAgdG9SZW5kZXJGbG93VGhyZWFkKHBhcmVudCgpKS0+Zmxvd1RocmVhZERlc2NlbmRhbnRJbnNl
cnRlZCh0aGlzKTsKLSAgICBlbHNlIGlmIChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0g
cGFyZW50KCktPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkKKworICAgIGlmIChSZW5kZXJG
bG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKQogICAg
ICAgICBmbG93VGhyZWFkLT5mbG93VGhyZWFkRGVzY2VuZGFudEluc2VydGVkKHRoaXMpOwotICAg
IHZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxlcigpLnNldEN1cnJlbnRSZW5kZXJGbG93VGhyZWFk
KHByZXZpb3VzVGhyZWFkKTsKIH0KIAogdm9pZCBSZW5kZXJPYmplY3Q6OndpbGxCZVJlbW92ZWRG
cm9tVHJlZSgpCkBAIC0yMDc1LDI1ICsyMDMzLDU0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZW1v
dmVGcm9tUmVuZGVyRmxvd1RocmVhZCgpCiB7CiAgICAgaWYgKGZsb3dUaHJlYWRTdGF0ZSgpID09
IE5vdEluc2lkZUZsb3dUaHJlYWQpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIC8vIFNv
bWV0aW1lcyB3ZSByZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSB0aGUgZmxvdywgYnV0IGl0J3Mgbm90
IGRlc3Ryb3llZCBhdCB0aGF0IHRpbWUuCi0gICAgLy8gSXQncyBvbmx5IHVudGlsIGxhdGVyIHdo
ZW4gd2UgYWN0dWFsbHkgZGVzdHJveSBpdCBhbmQgcmVtb3ZlIGFsbCB0aGUgY2hpbGRyZW4gZnJv
bSBpdC4gCisgICAgLy8gSXQncyBvbmx5IHVudGlsIGxhdGVyIHdoZW4gd2UgYWN0dWFsbHkgZGVz
dHJveSBpdCBhbmQgcmVtb3ZlIGFsbCB0aGUgY2hpbGRyZW4gZnJvbSBpdC4KICAgICAvLyBDdXJy
ZW50bHksIHRoYXQgaGFwcGVucyBmb3IgZmlyc3RMZXR0ZXIgZWxlbWVudHMgYW5kIGxpc3QgbWFy
a2Vycy4KICAgICAvLyBQYXNzIGluIHRoZSBmbG93IHRocmVhZCBzbyB0aGF0IHdlIGRvbid0IGhh
dmUgdG8gbG9vayBpdCB1cCBmb3IgYWxsIHRoZSBjaGlsZHJlbi4KLSAgICByZW1vdmVGcm9tUmVu
ZGVyRmxvd1RocmVhZFJlY3Vyc2l2ZShmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpOworICAg
IHJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkSW5jbHVkaW5nRGVzY2VuZGFudHModHJ1ZSk7CiB9
CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZFJlY3Vyc2l2
ZShSZW5kZXJGbG93VGhyZWFkKiByZW5kZXJGbG93VGhyZWFkKQordm9pZCBSZW5kZXJPYmplY3Q6
OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkSW5jbHVkaW5nRGVzY2VuZGFudHMoYm9vbCBzaG91
bGRVcGRhdGVTdGF0ZSkKIHsKKyAgICAvLyBPbmNlIHdlIHJlYWNoIGFub3RoZXIgZmxvdyB0aHJl
YWQgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGZsb3cgdGhyZWFkIHN0YXRlCisgICAgLy8g
YnV0IHdlIGhhdmUgdG8gY29udGludWUgY2xlYW51cCB0aGUgZmxvdyB0aHJlYWQgaW5mby4KKyAg
ICBpZiAoaXNSZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAgIHNob3VsZFVwZGF0ZVN0YXRlID0g
ZmFsc2U7CisKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkU2xvdygp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnJl
bW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKHJlbmRlckZsb3dUaHJlYWQpOworICAg
ICAgICBjaGlsZC0+cmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWRJbmNsdWRpbmdEZXNjZW5kYW50
cyhzaG91bGRVcGRhdGVTdGF0ZSk7CiAKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBsb2NhbEZsb3dU
aHJlYWQgPSByZW5kZXJGbG93VGhyZWFkOwotICAgIGlmIChmbG93VGhyZWFkU3RhdGUoKSA9PSBJ
bnNpZGVJbkZsb3dUaHJlYWQpCi0gICAgICAgIGxvY2FsRmxvd1RocmVhZCA9IGZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2soKTsgLy8gV2UgaGF2ZSB0byBhc2suIFdlIGNhbid0IGp1c3QgYXNzdW1l
IHdlIGFyZSBpbiB0aGUgc2FtZSBmbG93IHRocmVhZC4KLSAgICBpZiAobG9jYWxGbG93VGhyZWFk
KQotICAgICAgICBsb2NhbEZsb3dUaHJlYWQtPnJlbW92ZUZsb3dDaGlsZEluZm8odGhpcyk7Ci0g
ICAgc2V0Rmxvd1RocmVhZFN0YXRlKE5vdEluc2lkZUZsb3dUaHJlYWQpOworICAgIC8vIFdlIGhh
dmUgdG8gYXNrIGZvciBvdXIgY29udGFpbmluZyBmbG93IHRocmVhZCBhcyBpdCBtYXkgYmUgYWJv
dmUgdGhlIHJlbW92ZWQgc3ViLXRyZWUuCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9jayA9IHRoaXMtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAg
ICBpZiAoZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaykKKyAgICAgICAgZmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jay0+cmVtb3ZlRmxvd0NoaWxkSW5mbyh0aGlzKTsKKyAgICBpZiAoaXM8UmVuZGVy
QmxvY2s+KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCp0aGlzKS5zZXRD
YWNoZWRGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrTmVlZHNVcGRhdGUoKTsKKyAgICBpZiAoc2hv
dWxkVXBkYXRlU3RhdGUpCisgICAgICAgIHNldEZsb3dUaHJlYWRTdGF0ZShOb3RJbnNpZGVGbG93
VGhyZWFkKTsKK30KKwordm9pZCBSZW5kZXJPYmplY3Q6OmludmFsaWRhdGVGbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrSW5jbHVkaW5nRGVzY2VuZGFudHMoUmVuZGVyRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCkKK3sKKyAgICBpZiAoZmxvd1RocmVhZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVh
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzPFJlbmRlckJsb2NrPigqdGhpcykpIHsK
KyAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCp0aGlz
KTsKKworICAgICAgICBpZiAoYmxvY2suY2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja05l
ZWRzVXBkYXRlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZmxvd1RocmVhZCA9
IGJsb2NrLmNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgYmxvY2su
c2V0Q2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja05lZWRzVXBkYXRlKCk7CisgICAgfQor
CisgICAgaWYgKGZsb3dUaHJlYWQpCisgICAgICAgIGZsb3dUaHJlYWQtPnJlbW92ZUZsb3dDaGls
ZEluZm8odGhpcyk7CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxk
U2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY2hp
bGQtPmludmFsaWRhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrSW5jbHVkaW5nRGVzY2VuZGFu
dHMoZmxvd1RocmVhZCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpkZXN0cm95QW5kQ2xlYW51
cEFub255bW91c1dyYXBwZXJzKCkKQEAgLTI1OTcsMjIgKzI1ODQsMjIgQEAgYm9vbCBSZW5kZXJP
YmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QKIAogUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlck9iamVjdDo6Y3Vy
cmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3QKIHsKLSAgICBpZiAoZmxvd1RocmVh
ZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gdmlldygpLmZsb3dUaHJlYWRD
b250cm9sbGVyKCkuY3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKLSAgICBpZiAoIWZsb3dUaHJl
YWQpCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKTsKKyAgICBpZiAoIWZsb3dUaHJlYWQgfHwgIWZsb3dUaHJlYWQtPmlzUmVuZGVy
TmFtZWRGbG93VGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgQVNTRVJU
KGZsb3dUaHJlYWQgPT0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKTsKLQogICAgIC8vIEZJ
WE1FOiBPbmNlIHJlZ2lvbnMgYXJlIGZ1bGx5IGludGVncmF0ZWQgd2l0aCB0aGUgY29tcG9zaXRp
bmcgc3lzdGVtIHdlIHNob3VsZCB1bmNvbW1lbnQgdGhpcyBhc3NlcnQuCiAgICAgLy8gVGhpcyBh
c3NlcnQgbmVlZHMgdG8gYmUgZGlzYWJsZWQgYmVjYXVzZSBpdCdzIHBvc3NpYmxlIHRvIGFzayBm
b3IgdGhlIGFuY2VzdG9yIGNsaXBwaW5nIHJlY3RhbmdsZSBvZgogICAgIC8vIGEgbGF5ZXIgd2l0
aG91dCBrbm93aW5nIHRoZSBjb250YWluaW5nIHJlZ2lvbiBpbiBhZHZhbmNlLgogICAgIC8vIEFT
U0VSVChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkgJiYgZmxvd1RocmVhZC0+Y3VycmVudFJl
Z2lvbigpLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpOwogCi0gICAgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpOwotICAgIHJldHVybiBuYW1lZEZsb3dGcmFn
bWVudDsKKyAgICByZXR1cm4gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5j
dXJyZW50UmVnaW9uKCkpOworfQorCitSZW5kZXJGbG93VGhyZWFkKiBSZW5kZXJPYmplY3Q6Omxv
Y2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdAoreworICAgIFJlbmRlckJsb2Nr
KiBjb250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKKyAgICByZXR1cm4g
Y29udGFpbmluZ0Jsb2NrID8gY29udGFpbmluZ0Jsb2NrLT5mbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCkgOiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggNWU1NDQzNDAzNzY2MzMwZmFiMGFiMmZj
ZGViMTMxNmU1NTViZjM5MS4uZTI5ZTQ5MmU4YWMwNTMzNzU4NzI2NjU4MzBhY2VkODIyMTg0MGMy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMjEyLDE4ICsy
MTIsMTQgQEAgcHVibGljOgogCiAgICAgYm9vbCBmaXhlZFBvc2l0aW9uZWRXaXRoTmFtZWRGbG93
Q29udGFpbmluZ0Jsb2NrKCkgY29uc3Q7CiAKLSAgICBlbnVtIFNob3VsZFVzZUZsb3dUaHJlYWRD
YWNoZSB7Ci0gICAgICAgIFVzZUZsb3dUaHJlYWRDYWNoZSwKLSAgICAgICAgU2tpcEZsb3dUaHJl
YWRDYWNoZQotICAgIH07Ci0KICAgICAvLyBGdW5jdGlvbiB0byByZXR1cm4gb3VyIGVuY2xvc2lu
ZyBmbG93IHRocmVhZCBpZiB3ZSBhcmUgY29udGFpbmVkIGluc2lkZSBvbmUuIFRoaXMKICAgICAv
LyBmdW5jdGlvbiBmb2xsb3dzIHRoZSBjb250YWluaW5nIGJsb2NrIGNoYWluLgotICAgIFJlbmRl
ckZsb3dUaHJlYWQqIGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soU2hvdWxkVXNlRmxvd1RocmVh
ZENhY2hlIHVzZUNhY2hlID0gVXNlRmxvd1RocmVhZENhY2hlKSBjb25zdAorICAgIFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdAogICAgIHsKICAgICAg
ICAgaWYgKGZsb3dUaHJlYWRTdGF0ZSgpID09IE5vdEluc2lkZUZsb3dUaHJlYWQpCi0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICh1c2VDYWNoZSA9PSBTa2lwRmxvd1RocmVh
ZENhY2hlKSA/IGxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tOb0NhY2hlKCkgOiBsb2Nh
dGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICByZXR1cm4gbG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwog
ICAgIH0KIAogICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBjdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKSBjb25zdDsKQEAgLTg5MiwxMiArODg4LDEyIEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIHNldFBvc0NoaWxkTmVlZHNMYXlvdXRCaXQoYm9vbCBiKSB7IG1fYml0ZmllbGRzLnNl
dFBvc0NoaWxkTmVlZHNMYXlvdXQoYik7IH0KICAgICB2b2lkIHNldE5lZWRzU2ltcGxpZmllZE5v
cm1hbEZsb3dMYXlvdXRCaXQoYm9vbCBiKSB7IG1fYml0ZmllbGRzLnNldE5lZWRzU2ltcGxpZmll
ZE5vcm1hbEZsb3dMYXlvdXQoYik7IH0KIAorICAgIHZpcnR1YWwgUmVuZGVyRmxvd1RocmVhZCog
bG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0OworICAgIHZvaWQgaW52YWxp
ZGF0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tJbmNsdWRpbmdEZXNjZW5kYW50cyhSZW5kZXJG
bG93VGhyZWFkKiA9IG51bGxwdHIpOworCiBwcml2YXRlOgotICAgIFJlbmRlckZsb3dUaHJlYWQq
IGxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdDsKLSAgICBSZW5kZXJGbG93
VGhyZWFkKiBsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrTm9DYWNoZSgpIGNvbnN0Owot
ICAgIAogICAgIHZvaWQgcmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWQoKTsKLSAgICB2b2lkIHJl
bW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKFJlbmRlckZsb3dUaHJlYWQqKTsKKyAg
ICB2b2lkIHJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkSW5jbHVkaW5nRGVzY2VuZGFudHMoYm9v
bCk7CiAKICAgICBDb2xvciBzZWxlY3Rpb25Db2xvcihpbnQgY29sb3JQcm9wZXJ0eSkgY29uc3Q7
CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc2VsZWN0aW9uUHNldWRvU3R5bGUoKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKaW5kZXggZjlkZThj
ZThjZDU2MjViYTUwYjE3MDM3MWJhY2ZiMTQyYzVlMTkxOC4uZmYyOWMyODQ4Nzg2NjJkNDEzMmM5
MjlkMmIzMGEzMWIxMTFjNmU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlZ2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
Z2lvbi5jcHAKQEAgLTIxOCwxNSArMjE4LDggQEAgdm9pZCBSZW5kZXJSZWdpb246OnN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKIHZv
aWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlT3ZlcmZsb3dGcm9tRmxvd1RocmVhZCgpCiB7CiAgICAg
QVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgCi0gICAgTGF5b3V0UmVjdCBsYXlvdXRSZWN0OwotICAg
IHsKLSAgICAgICAgLy8gV2hlbiBnZXR0aW5nIHRoZSBvdmVyZmxvdyBmcm9tIHRoZSBmbG93IHRo
cmVhZCB3ZSBuZWVkIHRvIHRlbXBvcmFybHkgcmVzZXQgdGhlIGN1cnJlbnQgZmxvdyB0aHJlYWQg
YmVjYXVzZQotICAgICAgICAvLyB3ZSdyZSBjaGFuZ2luZyBmbG93cy4KLSAgICAgICAgQ3VycmVu
dFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyIGZsb3dUaHJlYWRNYWludGFpbmVyKG1fZmxvd1Ro
cmVhZCk7Ci0gICAgICAgIGxheW91dFJlY3QgPSBsYXlvdXRPdmVyZmxvd1JlY3RGb3JCb3gobV9m
bG93VGhyZWFkKTsKLSAgICB9CiAKKyAgICBMYXlvdXRSZWN0IGxheW91dFJlY3QgPSBsYXlvdXRP
dmVyZmxvd1JlY3RGb3JCb3gobV9mbG93VGhyZWFkKTsKICAgICBsYXlvdXRSZWN0LnNldExvY2F0
aW9uKGNvbnRlbnRCb3hSZWN0KCkubG9jYXRpb24oKSArIChsYXlvdXRSZWN0LmxvY2F0aW9uKCkg
LSBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC5sb2NhdGlvbigpKSk7CiAKICAgICAvLyBGSVhNRTog
Q29ycmVjdGx5IGFkanVzdCB0aGUgbGF5b3V0IG92ZXJmbG93IGZvciB3cml0aW5nIG1vZGVzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IDdjYzc0ODFkM2MyYjk0
NTg5NjVjYmQ5OWI5YWU1NWE0MTQzYmYwMjYuLjAwMTc2YmM2MGIwYzExMDFjMjk1ZTAzNTQ0OTQx
NWQxMDAyZThmZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAg
LTEzMTEsMTAgKzEzMTEsMTIgQEAgdm9pZCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGVGb3JD
dXJyZW50Rmxvd1RocmVhZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKICAgICBpZiAoIW1f
Zmxvd1RocmVhZENvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckZsb3dU
aHJlYWQqIGN1cnJlbnRGbG93VGhyZWFkID0gbV9mbG93VGhyZWFkQ29udHJvbGxlci0+Y3VycmVu
dFJlbmRlckZsb3dUaHJlYWQoKTsKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBjdXJyZW50Rmxvd1Ro
cmVhZCA9IG9iamVjdC5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKCFjdXJy
ZW50Rmxvd1RocmVhZCkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9sYXlvdXRTdGF0ZS0+c2V0
Q3VycmVudFJlbmRlckZsb3dUaHJlYWQoY3VycmVudEZsb3dUaHJlYWQpOworCiAgICAgY3VycmVu
dEZsb3dUaHJlYWQtPnB1c2hGbG93VGhyZWFkTGF5b3V0U3RhdGUob2JqZWN0KTsKIH0KIApAQCAt
MTMyMyw3ICsxMzI1LDcgQEAgdm9pZCBSZW5kZXJWaWV3Ojpwb3BMYXlvdXRTdGF0ZUZvckN1cnJl
bnRGbG93VGhyZWFkKCkKICAgICBpZiAoIW1fZmxvd1RocmVhZENvbnRyb2xsZXIpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlbmRlckZsb3dUaHJlYWQqIGN1cnJlbnRGbG93VGhyZWFkID0gbV9m
bG93VGhyZWFkQ29udHJvbGxlci0+Y3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKKyAgICBSZW5k
ZXJGbG93VGhyZWFkKiBjdXJyZW50Rmxvd1RocmVhZCA9IG1fbGF5b3V0U3RhdGUtPmN1cnJlbnRS
ZW5kZXJGbG93VGhyZWFkKCk7CiAgICAgaWYgKCFjdXJyZW50Rmxvd1RocmVhZCkKICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCBhOTgwYmRh
ODNmMjQxZjM3OWQxOWI3YWMwY2JkZmQ3ZDUxZDFmN2RhLi44M2FiZTcyYTY3NzUxYzRiNTAzMzlm
NDJhMTU3MDY5YjJlMzVmOWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgK
QEAgLTI5NSw3ICsyOTUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGVG
b3JDdXJyZW50Rmxvd1RocmVhZChjb25zdCBSZW5kZXJPYmplY3QmKTsKICAgICB2b2lkIHBvcExh
eW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJlYWQoKTsKLSAgICAKKwogICAgIGZyaWVuZCBjbGFz
cyBMYXlvdXRTdGF0ZU1haW50YWluZXI7CiAgICAgZnJpZW5kIGNsYXNzIExheW91dFN0YXRlRGlz
YWJsZXI7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCBkY2I4ODljNjc2M2I5NGU1MGZmMDkyNTI5NzM2N2JhY2FjMjAxYTM1
Li45ZGMwNWIwNmQ4YjAwN2Q0NmQyNjMyYTc3NTA3YzI5YTEzNTNkODJmIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTggQEAKKzIwMTQtMTAtMTUgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CisK
KyAgICAgICAgQVNTRVJUSU9OICBGQUlMRUQgaW4gV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
Z2V0UmVnaW9uUmFuZ2VGb3JCb3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNTU2MworCisgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0Lgor
CisgICAgICAgIEEgdGVzdCB2ZXJpZnlpbmcgdGhhdCBwb3NpdGlvbmVkIGVsZW1lbnRzIGluc2lk
ZSBtdWx0aS1jb2x1bW4gY29udGFpbmVycyBkb24ndAorICAgICAgICBjYXVzZSBhc3NlcnRpb25z
IG9yIGNyYXNoZXMuCisKKyAgICAgICAgKiBmYXN0L211bHRpY29sL211bHRpY29sLWFsbC1wb3Np
dGlvbmVkLWNyYXNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9tdWx0aWNv
bC9tdWx0aWNvbC1hbGwtcG9zaXRpb25lZC1jcmFzaC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L211bHRpY29sL211bHRpY29sLXRyYW5zZm9ybS1jb250YWluaW5nLWJsb2NrLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9tdWx0aWNvbC9tdWx0aWNvbC10cmFuc2Zvcm0t
Y29udGFpbmluZy1ibG9jay5odG1sOiBBZGRlZC4KKwogMjAxNC0xMC0xNCAgWmFsYW4gQnVqdGFz
ICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKFNhZmFyaSA3LjEvOC4w
KTogQm9yZGVyLXJhZGl1cyBhbmQgb3ZlcmZsb3cgaGlkZGVuIHJlbmRlcnMgaW5jb3JyZWN0bHku
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL211bHRpY29sLWFsbC1wb3Np
dGlvbmVkLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbXVs
dGljb2wtYWxsLXBvc2l0aW9uZWQtY3Jhc2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkM2Vl
MWNmZWY2NGI0Y2QxNjQ4ZDI2NDNhMTM1ZjYxM2Y2NDY1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L211bHRpY29sL211bHRpY29sLWFsbC1wb3NpdGlvbmVkLWNyYXNoLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitUZXN0IGZvciB0aGUgYnVnIDEzNTU2My4gSXQgc2hv
dWxkIG5vdCBjcmFzaCBvciBhc3NlcnQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211
bHRpY29sL211bHRpY29sLWFsbC1wb3NpdGlvbmVkLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L211bHRpY29sL211bHRpY29sLWFsbC1wb3NpdGlvbmVkLWNyYXNoLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjE1NWE4MDZmNTBiY2Y5N2E5NzYwMjY0MjhjNjNkMGY1YjY4ZWNjNAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbXVsdGljb2wtYWxsLXBvc2l0aW9uZWQt
Y3Jhc2guaHRtbApAQCAtMCwwICsxLDE3IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorKiB7
CisgICAgLXdlYmtpdC1jb2x1bW5zOiAyOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKK30KKzwv
c3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KK1Rlc3QgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU1NjMiPnRoZSBidWcgMTM1NTYzPC9hPi4gSXQg
c2hvdWxkIG5vdCBjcmFzaCBvciBhc3NlcnQuCis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9tdWx0
aWNvbC10cmFuc2Zvcm0tY29udGFpbmluZy1ibG9jay1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L211bHRpY29sL211bHRpY29sLXRyYW5zZm9ybS1jb250YWluaW5nLWJsb2NrLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kNGZhNTcyM2I4ZTM3ZDg0M2YwMThhZGQ3YzJiMzcyZWY0NGRi
MzhkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9tdWx0aWNv
bC10cmFuc2Zvcm0tY29udGFpbmluZy1ibG9jay1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAor
VGVzdCBmb3IgYjEzNTU2My4gSXQgc2hvdWxkIG5vdCBjcmFzaCBvciBhc3NlcnQuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL211bHRpY29sLXRyYW5zZm9ybS1jb250YWlu
aW5nLWJsb2NrLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL211bHRpY29sLXRyYW5z
Zm9ybS1jb250YWluaW5nLWJsb2NrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODMxZGNkMTU2OTBhODY5Yjc5
ZGYzYjA4ZjFmNTY1ODcxMmU3ZDU2YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvbXVsdGljb2wvbXVsdGljb2wtdHJhbnNmb3JtLWNvbnRhaW5pbmctYmxvY2suaHRtbApAQCAt
MCwwICsxLDU3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPHN0eWxlPgorICAgICNwb3Mg
eworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIHRvcDogMTBweDsKKyAgICAg
ICAgbGVmdDogMTBweDsKKyAgICB9CisKKyAgICAubXVsdGljb2wgeworICAgICAgICAtd2Via2l0
LWNvbHVtbi1jb3VudDogMjsKKyAgICAgICAgaGVpZ2h0OiAzMDBweDsKKyAgICB9CisKKyAgICAj
dHJhbnNmb3JtZWQgeworICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CisgICAgICAgIHdpZHRoOiAx
MHB4OworICAgICAgICBoZWlnaHQ6IDEwcHg7CisgICAgfQorCisgICAgLnVwZGF0ZSB7CisgICAg
ICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEwZGVnKTsKKyAgICB9CisKKyAgICAucGFy
ZW50IHsKKyAgICAgICAgaGVpZ2h0OiA0MDBweDsKKyAgICB9CisKKyAgICAuY29udGFpbmVyIHsK
KyAgICAgICAgcGFkZGluZzogNTBweDsKKyAgICAgICAgbWFyZ2luOiAyMHB4OworICAgIH0KKzwv
c3R5bGU+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im11bHRpY29sIHBhcmVudCI+CisgICAgPGRpdiBp
ZD0iY2hhbmdlIiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGlj
b2wiPgorICAgICAgICAgICAgPGRpdj5TdGF0aWM8L2Rpdj4KKyAgICAgICAgICAgIDxkaXY+U3Rh
dGljPC9kaXY+CisgICAgICAgICAgICA8ZGl2PlN0YXRpYzwvZGl2PgorICAgICAgICAgICAgPGRp
diBpZD0icG9zIj5Qb3NpdGlvbmVkPC9kaXY+CisgICAgICAgICAgICA8ZGl2PlN0YXRpYzwvZGl2
PgorICAgICAgICAgICAgPGRpdj5TdGF0aWM8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgPC9k
aXY+Cis8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsK
KworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjaGFuZ2UiKS5jbGFzc05hbWUgKz0gIiB1cGRhdGUiOworICAgIGRvY3VtZW50LmJvZHku
b2Zmc2V0VG9wOworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIlRlc3QgZm9yIGIxMzU1
NjMuIEl0IHNob3VsZCBub3QgY3Jhc2ggb3IgYXNzZXJ0LiI7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>