<?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>224126</bug_id>
          
          <creation_ts>2021-04-02 13:08:52 -0700</creation_ts>
          <short_desc>[macOS] Image preview context menu action should be shown conditionally</short_desc>
          <delta_ts>2021-04-06 16:59:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>hi</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1746624</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-02 13:08:52 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746628</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-02 13:21:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/76162272&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746652</commentid>
    <comment_count>2</comment_count>
      <attachid>425051</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-02 14:01:45 -0700</bug_when>
    <thetext>Created attachment 425051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746737</commentid>
    <comment_count>3</comment_count>
      <attachid>425051</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-02 17:25:03 -0700</bug_when>
    <thetext>Comment on attachment 425051
Patch

The test failure (media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-drag-is-prevented-over-button.html) does not seem related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747236</commentid>
    <comment_count>4</comment_count>
      <attachid>425051</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-04-05 19:18:01 -0700</bug_when>
    <thetext>Comment on attachment 425051
Patch

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

r=me

&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:537
&gt; +    auto insertMenuItem = makeBlockPtr([protectedThis = makeRef(*this), weakPage = makeWeakPtr(page()), imageURL, imageBitmap, completionHandler = WTFMove(completionHandler), itemsRemaining = filteredItems.size(), menu = WTFMove(menu), sparseMenuItems, revealImageItem](NSMenuItem *item, NSUInteger index) mutable {

NIT: Should this have `imageURL = WTFMove(imageURL)` and `revealImageItem = WTFMove(revealImageItem)`?  Maybe even `imageBitmap = WTFMove(imageBitmap)` too (dunno if it&apos;s needed on the `WebHitTestResultData` still)?

&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:549
&gt; +            page-&gt;computeCanRevealImage(imageURL, *imageBitmap, [protectedThis = WTFMove(protectedThis), menuItem = WTFMove(*revealImageItem)] (bool canRevealImage) mutable {

NIT: Can we keep this named `revealImageItem`?  Or does it complain about the same name having a different type?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747254</commentid>
    <comment_count>5</comment_count>
      <attachid>425051</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-05 20:17:40 -0700</bug_when>
    <thetext>Comment on attachment 425051
Patch

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

Thanks for the review!

&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:537
&gt;&gt; +    auto insertMenuItem = makeBlockPtr([protectedThis = makeRef(*this), weakPage = makeWeakPtr(page()), imageURL, imageBitmap, completionHandler = WTFMove(completionHandler), itemsRemaining = filteredItems.size(), menu = WTFMove(menu), sparseMenuItems, revealImageItem](NSMenuItem *item, NSUInteger index) mutable {
&gt; 
&gt; NIT: Should this have `imageURL = WTFMove(imageURL)` and `revealImageItem = WTFMove(revealImageItem)`?  Maybe even `imageBitmap = WTFMove(imageBitmap)` too (dunno if it&apos;s needed on the `WebHitTestResultData` still)?

Sounds good! Made these use move semantics.

&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:549
&gt;&gt; +            page-&gt;computeCanRevealImage(imageURL, *imageBitmap, [protectedThis = WTFMove(protectedThis), menuItem = WTFMove(*revealImageItem)] (bool canRevealImage) mutable {
&gt; 
&gt; NIT: Can we keep this named `revealImageItem`?  Or does it complain about the same name having a different type?

Yes, we can keep the name — renamed to `revealImageItem`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747261</commentid>
    <comment_count>6</comment_count>
      <attachid>425236</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-05 20:32:28 -0700</bug_when>
    <thetext>Created attachment 425236
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747274</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-05 21:31:17 -0700</bug_when>
    <thetext>Committed r275491: &lt;https://commits.webkit.org/r275491&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 425236.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747668</commentid>
    <comment_count>8</comment_count>
      <attachid>425236</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-06 15:18:57 -0700</bug_when>
    <thetext>Comment on attachment 425236
Patch for landing

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

&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:485
&gt; +        auto wrapper = adoptNS([[WKUserDataWrapper alloc] initWithUserData:item.userData()]);
&gt; +        [menuItem setRepresentedObject:wrapper.get()];

Seems like this reads better as a one-liner without the local variable.

&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:533
&gt; +    auto imageURL = URL([NSURL _web_URLWithWTFString:m_context.webHitTestResultData().absoluteImageURL]);

This could be written like this:

    auto imageURL = URL { URL { }, m_context.webHitTestResultData().absoluteImageURL };

No reason to involve NSURL.

&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:536
&gt; +    auto sparseMenuItems = retainPtr([NSPointerArray strongObjectsPointerArray]);

Not sure why we do retainPtr here.

&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:554
&gt; +                auto nsMenuItem = createMenuActionItem(revealImageItem);
&gt; +                [protectedThis-&gt;m_menu addItem:nsMenuItem.get()];

Seems like this reads better as a one-liner without the local variable.

&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:585
&gt; +        auto nsMenuItem = createMenuActionItem(item);
&gt; +        completionHandler(nsMenuItem.get());

Seems like this reads better as a one-liner without the local variable. Then we also don’t need the braces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747672</commentid>
    <comment_count>9</comment_count>
      <attachid>425236</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-06 15:26:22 -0700</bug_when>
    <thetext>Comment on attachment 425236
Patch for landing

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

&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:485
&gt;&gt; +        [menuItem setRepresentedObject:wrapper.get()];
&gt; 
&gt; Seems like this reads better as a one-liner without the local variable.

Changed to a one-liner.

&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:533
&gt;&gt; +    auto imageURL = URL([NSURL _web_URLWithWTFString:m_context.webHitTestResultData().absoluteImageURL]);
&gt; 
&gt; This could be written like this:
&gt; 
&gt;     auto imageURL = URL { URL { }, m_context.webHitTestResultData().absoluteImageURL };
&gt; 
&gt; No reason to involve NSURL.

Sounds good, changed to use URL only (this means we can also avoid importing `WKNSURLExtras.h`).

&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:536
&gt;&gt; +    auto sparseMenuItems = retainPtr([NSPointerArray strongObjectsPointerArray]);
&gt; 
&gt; Not sure why we do retainPtr here.

This code was only moved, but I assume it&apos;s because the completion handler below needs to keep this alive while context menu items are being added. Are you suggesting that we should just do `RetainPtr&lt;NSPointerArray&gt;` instead of `auto` + `retainPtr`?

&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:554
&gt;&gt; +                [protectedThis-&gt;m_menu addItem:nsMenuItem.get()];
&gt; 
&gt; Seems like this reads better as a one-liner without the local variable.

Changed to a one-liner.

&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:585
&gt;&gt; +        completionHandler(nsMenuItem.get());
&gt; 
&gt; Seems like this reads better as a one-liner without the local variable. Then we also don’t need the braces.

Changed to a one-liner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747682</commentid>
    <comment_count>10</comment_count>
      <attachid>425236</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-06 15:42:01 -0700</bug_when>
    <thetext>Comment on attachment 425236
Patch for landing

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

&gt;&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:536
&gt;&gt;&gt; +    auto sparseMenuItems = retainPtr([NSPointerArray strongObjectsPointerArray]);
&gt;&gt; 
&gt;&gt; Not sure why we do retainPtr here.
&gt; 
&gt; This code was only moved, but I assume it&apos;s because the completion handler below needs to keep this alive while context menu items are being added. Are you suggesting that we should just do `RetainPtr&lt;NSPointerArray&gt;` instead of `auto` + `retainPtr`?

No, I do not think the completion handler needs to use a RetainPtr to keep this object alive. The object is autoreleased and the function hasn’t returned yet. These are synchronous callbacks. The code relies on that, doesn’t it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747683</commentid>
    <comment_count>11</comment_count>
      <attachid>425236</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-06 15:51:46 -0700</bug_when>
    <thetext>Comment on attachment 425236
Patch for landing

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

&gt;&gt;&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:536
&gt;&gt;&gt;&gt; +    auto sparseMenuItems = retainPtr([NSPointerArray strongObjectsPointerArray]);
&gt;&gt;&gt; 
&gt;&gt;&gt; Not sure why we do retainPtr here.
&gt;&gt; 
&gt;&gt; This code was only moved, but I assume it&apos;s because the completion handler below needs to keep this alive while context menu items are being added. Are you suggesting that we should just do `RetainPtr&lt;NSPointerArray&gt;` instead of `auto` + `retainPtr`?
&gt; 
&gt; No, I do not think the completion handler needs to use a RetainPtr to keep this object alive. The object is autoreleased and the function hasn’t returned yet. These are synchronous callbacks. The code relies on that, doesn’t it?

While most of the default items yield results synchronously, there appear to be other items (e.g. the share menu item) that may call the completion handler asynchronously, since it uses `-[NSSharingServicePicker getMenuWithCompletion:]`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747689</commentid>
    <comment_count>12</comment_count>
      <attachid>425236</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-06 16:01:06 -0700</bug_when>
    <thetext>Comment on attachment 425236
Patch for landing

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

&gt;&gt;&gt;&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:536
&gt;&gt;&gt;&gt;&gt; +    auto sparseMenuItems = retainPtr([NSPointerArray strongObjectsPointerArray]);
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Not sure why we do retainPtr here.
&gt;&gt;&gt; 
&gt;&gt;&gt; This code was only moved, but I assume it&apos;s because the completion handler below needs to keep this alive while context menu items are being added. Are you suggesting that we should just do `RetainPtr&lt;NSPointerArray&gt;` instead of `auto` + `retainPtr`?
&gt;&gt; 
&gt;&gt; No, I do not think the completion handler needs to use a RetainPtr to keep this object alive. The object is autoreleased and the function hasn’t returned yet. These are synchronous callbacks. The code relies on that, doesn’t it?
&gt; 
&gt; While most of the default items yield results synchronously, there appear to be other items (e.g. the share menu item) that may call the completion handler asynchronously, since it uses `-[NSSharingServicePicker getMenuWithCompletion:]`.

I see now, this was just too subtle for me. The magic where insertMenuItem decrements itemsRemaining until it hits zero and then finally we call completionHandler. Oblique! And every one of the calls to getContextMenuItem copies the insertMenuItem block, and thus makes N copies of everything it captures. Not very efficient!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747694</commentid>
    <comment_count>13</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-06 16:10:48 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Comment on attachment 425236 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=425236&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:536
&gt; &gt;&gt;&gt;&gt;&gt; +    auto sparseMenuItems = retainPtr([NSPointerArray strongObjectsPointerArray]);
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; Not sure why we do retainPtr here.
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; This code was only moved, but I assume it&apos;s because the completion handler below needs to keep this alive while context menu items are being added. Are you suggesting that we should just do `RetainPtr&lt;NSPointerArray&gt;` instead of `auto` + `retainPtr`?
&gt; &gt;&gt; 
&gt; &gt;&gt; No, I do not think the completion handler needs to use a RetainPtr to keep this object alive. The object is autoreleased and the function hasn’t returned yet. These are synchronous callbacks. The code relies on that, doesn’t it?
&gt; &gt; 
&gt; &gt; While most of the default items yield results synchronously, there appear to be other items (e.g. the share menu item) that may call the completion handler asynchronously, since it uses `-[NSSharingServicePicker getMenuWithCompletion:]`.
&gt; 
&gt; I see now, this was just too subtle for me. The magic where insertMenuItem
&gt; decrements itemsRemaining until it hits zero and then finally we call
&gt; completionHandler. Oblique! And every one of the calls to getContextMenuItem
&gt; copies the insertMenuItem block, and thus makes N copies of everything it
&gt; captures. Not very efficient!

That&apos;s a good point..I think it should be possible to avoid all this copying by introducing something like a ref-counted helper class that encapsulates all of the captured state (e.g., `ContextMenuItemAccumulator`) and just copy around a `Ref` of that instead for each of the `getContextMenuItem` calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747696</commentid>
    <comment_count>14</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-06 16:14:35 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747697</commentid>
    <comment_count>15</comment_count>
      <attachid>425334</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-06 16:14:36 -0700</bug_when>
    <thetext>Created attachment 425334
Address some comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747706</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-06 16:54:12 -0700</bug_when>
    <thetext>Committed r275572: &lt;https://commits.webkit.org/r275572&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 425334.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747710</commentid>
    <comment_count>17</comment_count>
      <attachid>425236</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-06 16:59:30 -0700</bug_when>
    <thetext>Comment on attachment 425236
Patch for landing

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

&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm:536
&gt;&gt;&gt;&gt;&gt;&gt;&gt; +    auto sparseMenuItems = retainPtr([NSPointerArray strongObjectsPointerArray]);
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; Not sure why we do retainPtr here.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; This code was only moved, but I assume it&apos;s because the completion handler below needs to keep this alive while context menu items are being added. Are you suggesting that we should just do `RetainPtr&lt;NSPointerArray&gt;` instead of `auto` + `retainPtr`?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; No, I do not think the completion handler needs to use a RetainPtr to keep this object alive. The object is autoreleased and the function hasn’t returned yet. These are synchronous callbacks. The code relies on that, doesn’t it?
&gt;&gt;&gt; 
&gt;&gt;&gt; While most of the default items yield results synchronously, there appear to be other items (e.g. the share menu item) that may call the completion handler asynchronously, since it uses `-[NSSharingServicePicker getMenuWithCompletion:]`.
&gt;&gt; 
&gt;&gt; I see now, this was just too subtle for me. The magic where insertMenuItem decrements itemsRemaining until it hits zero and then finally we call completionHandler. Oblique! And every one of the calls to getContextMenuItem copies the insertMenuItem block, and thus makes N copies of everything it captures. Not very efficient!
&gt; 
&gt; That&apos;s a good point..I think it should be possible to avoid all this copying by introducing something like a ref-counted helper class that encapsulates all of the captured state (e.g., `ContextMenuItemAccumulator`) and just copy around a `Ref` of that instead for each of the `getContextMenuItem` calls.

I was wrong about this, too. There is only one insertMenuItem block and it is reference counted. That’s what makeBlockPtr does. Otherwise this wouldn’t work because each copy of the insertMenuItem block would have its own copy of the itemsRemaining integer.

We could put the retainPtr in the capture expression instead of above:

    imageBitMap = retainPtr(imageBitmap),

instead of

    imageBitMap = WTFMove(imageBitmap),

But really, no change needed. This is just very tricky code! Would be nice to find a more straightforward way to write it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425051</attachid>
            <date>2021-04-02 14:01:45 -0700</date>
            <delta_ts>2021-04-05 19:18:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224126-20210402140144.patch</filename>
            <type>text/plain</type>
            <size>15721</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDJjZTYwZGIwN2JkZGU4NGU0
MjI0MjNmYjg0M2RmOTg2ZjcyOTE2ZjUuLmNmMWQ2YzllYjkwNjk4NzI2YTRmYTgzN2FmMzBlOWNk
N2YxN2U3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMjEtMDQtMDIgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBJbWFnZSBw
cmV2aWV3IGNvbnRleHQgbWVudSBhY3Rpb24gc2hvdWxkIGJlIHNob3duIGNvbmRpdGlvbmFsbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDEyNgor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzYxNjIyNzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgcGFnZSBjbGllbnQgaG9vayB0byByZXR1
cm4gd2hldGhlciBvciBub3QgdGhlICJyZXZlYWwgaW1hZ2UiIGNvbnRleHQgbWVudSBpdGVtIHNo
b3VsZCBiZSBlbmFibGVkLCBnaXZlbgorICAgICAgICB0aGUgaW1hZ2UgVVJMIGFuZCBkZWNvZGVk
IGltYWdlIGJpdG1hcDsgd2UgdGhlbiB1c2UgdGhpcyBtZXRob2QgdG8gY29uZGl0aW9uYWxseSBp
bnNlcnQgYSBjb250ZXh0IG1lbnUgaXRlbSBmb3IKKyAgICAgICAgcmV2ZWFsaW5nIHRoZSBpbWFn
ZSBpbiBjb250ZXh0IG1lbnUgZGF0YS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnQ6OmNvbXB1dGVDYW5SZXZlYWxJbWFnZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
Y29tcHV0ZUNhblJldmVhbEltYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRJbXBsOjpjb21wdXRlQ2FuUmV2ZWFsSW1hZ2UpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y3Jl
YXRlTWVudUFjdGlvbkl0ZW0pOgorCisgICAgICAgIFB1bGwgbG9naWMgZm9yIG1hcHBpbmcgYSBg
V2ViQ29udGV4dE1lbnVJdGVtRGF0YWAgb2YgdHlwZSBgQWN0aW9uVHlwZWAgb3IgYENoZWNrYWJs
ZUFjdGlvblR5cGVgIHRvIGEgcGxhdGZvcm0KKyAgICAgICAgYE5TTWVudUl0ZW1gIG91dCBpbnRv
IGEgc2VwYXJhdGUgaGVscGVyIGZ1bmN0aW9uLiBVc2UgdGhpcyBoZWxwZXIgaW4gYGdldENvbnRl
eHRNZW51SXRlbWAsIGFzIHdlbGwgYXMgdGhlCisgICAgICAgIGNvbXBsZXRpb24gaGFuZGxlciBm
b3IgdGhlIGNhbGwgdG8gYGNvbXB1dGVDYW5SZXZlYWxJbWFnZWAuIE5vdGUgdGhhdCB0aGlzIGFs
c28gcmVxdWlyZXMgbW92aW5nIHRoZQorICAgICAgICBgbWVudUl0ZW1JZGVudGlmaWVyYCBmdW5j
dGlvbiB1cCBhYm92ZSBgZ2V0Q29udGV4dE1lbnVGcm9tSXRlbXNgLgorCisgICAgICAgIChXZWJL
aXQ6OldlYkNvbnRleHRNZW51UHJveHlNYWM6OmdldENvbnRleHRNZW51RnJvbUl0ZW1zKToKKwor
ICAgICAgICBTcGVjaWFsIGNhc2UgdGhlIGBDb250ZXh0TWVudUl0ZW1UYWdSZXZlYWxJbWFnZWAg
aXRlbTsgaW5zdGVhZCBvZiBhZGRpbmcgdGhpcyBpdGVtIHRvIHRoZSBjb250ZXh0IG1lbnUgcmln
aHQKKyAgICAgICAgYXdheSwgd2UgaGlkZSBpdCBieSBkZWZhdWx0LCBhbmQgb25seSByZWluc2Vy
dCBpdCBpZiB0aGUgcGFnZSBjbGllbnQgaW5kaWNhdGVzIHRoYXQgd2UgcmVxdWlyZSB0aGUgaXRl
bSAodmlhCisgICAgICAgIGBjb21wdXRlQ2FuUmV2ZWFsSW1hZ2VgKS4KKworICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpnZXRDb250ZXh0TWVudUl0ZW0pOgorCiAyMDIx
LTA0LTAxICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCBzaG91bGQgY2xlYW4gdXAgQ0cgcmVzb3VyY2VzIGFmdGVy
IGxhc3QgQ2FudmFzIGlzIGRlc3Ryb3llZCBpbiBHcHUgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKaW5kZXggODU4NTQ0ZDI3ZDcwNGIzZjAyMzhm
Yjk4OGE1NTZkNWJkOGYwY2I5NC4uYTQwNDEyZjNmYzBkZWI3ZmQxNDdjZjkzZmMzYmEyNjk0MGIx
OGI3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0lt
cGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCkBA
IC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9XZWFrT2JqQ1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBf
V0tSZWN0RWRnZSA9IE5TVUludGVnZXI7CkBAIC01ODUsNiArNTg2LDcgQEAgcHVibGljOgogCiAj
aWYgRU5BQkxFKElNQUdFX0VYVFJBQ1RJT04pCiAgICAgdm9pZCByZXF1ZXN0SW1hZ2VFeHRyYWN0
aW9uKGNvbnN0IFVSTCYgaW1hZ2VVUkwsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBp
bWFnZURhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SW1hZ2VFeHRyYWN0aW9u
UmVzdWx0JiYpPiYmKTsKKyAgICB2b2lkIGNvbXB1dGVDYW5SZXZlYWxJbWFnZShjb25zdCBVUkwm
IGltYWdlVVJMLCBTaGFyZWFibGVCaXRtYXAmIGltYWdlQml0bWFwLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmKTsKICNlbmRpZgogCiAgICAgYm9vbCB3aW5kb3dJc0Zyb250V2luZG93
VW5kZXJNb3VzZShOU0V2ZW50ICopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmlu
ZGV4IDlkMmRiMGJhZjBhZjAzNWJjODUwN2E5ZTRjZjI4Yjc3YWNlYTc3OGIuLjA0ODA0MjU4Y2Jm
MTliMjU5ZjY3ZjM3ZWFkN2UxMTVhZGIxNDk2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdl
Q2xpZW50LmgKQEAgLTUyNSw2ICs1MjUsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoSU1BR0Vf
RVhUUkFDVElPTikKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEltYWdlRXh0cmFjdGlvbihjb25z
dCBVUkwmIGltYWdlVVJMLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaW1hZ2VEYXRh
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkltYWdlRXh0cmFjdGlvblJlc3VsdCYm
KT4mJiBjb21wbGV0aW9uKSB7IGNvbXBsZXRpb24oeyB9KTsgfQorICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlQ2FuUmV2ZWFsSW1hZ2UoY29uc3QgVVJMJiwgU2hhcmVhYmxlQml0bWFwJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uKSB7IGNvbXBsZXRpb24oZmFsc2Up
OyB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19DT05URVhUX01FTlVTKSAm
JiBVU0UoVUlDT05URVhUTUVOVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCmluZGV4IDc1OGEwZjM1YWE1OTc5MzkwN2E5MTEwNTg3ZTI5ZWNiOTliMWYxZjYuLjVjYzUx
OWIyYzNmZjllNTRkNDI0ZTdhYWRjOGI2ZGE0NWM5YzdkN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtODI0NSw2ICs4MjQ1LDExIEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpyZXF1ZXN0SW1hZ2VFeHRyYWN0aW9uKGNvbnN0IFVSTCYgaW1hZ2VVUkwsIGNvbnN0
IFNoYXJlYWJsZUJpCiAgICAgcGFnZUNsaWVudCgpLnJlcXVlc3RJbWFnZUV4dHJhY3Rpb24oaW1h
Z2VVUkwsIGltYWdlRGF0YSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCit2b2lk
IFdlYlBhZ2VQcm94eTo6Y29tcHV0ZUNhblJldmVhbEltYWdlKGNvbnN0IFVSTCYgaW1hZ2VVUkws
IFNoYXJlYWJsZUJpdG1hcCYgaW1hZ2VCaXRtYXAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbikKK3sKKyAgICBwYWdlQ2xpZW50KCkuY29tcHV0ZUNhblJldmVhbElt
YWdlKGltYWdlVVJMLCBpbWFnZUJpdG1hcCwgV1RGTW92ZShjb21wbGV0aW9uKSk7Cit9CisKIHZv
aWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVXaXRoSW1hZ2VFeHRyYWN0aW9uUmVzdWx0KEltYWdlRXh0
cmFjdGlvblJlc3VsdCYmIHJlc3VsdHMsIGNvbnN0IEVsZW1lbnRDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIHRl
eHRFeGlzdHNBdExvY2F0aW9uKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWhh
c1J1bm5pbmdQcm9jZXNzKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
aW5kZXggZWE5YjBjMTRhMWRjNmRhODg3NDRjNmFmMDYzN2ZlOTQxMjRmMTNmYy4uYmJmYTBmZjM4
MDVlY2JmN2FiNzAxMGUzMTEzNGE0MTNlZTA2ODVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKQEAgLTE2MzYsNiArMTYzNiw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUo
SU1BR0VfRVhUUkFDVElPTikKICAgICB2b2lkIHJlcXVlc3RJbWFnZUV4dHJhY3Rpb24oY29uc3Qg
VVJMJiBpbWFnZVVSTCwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGltYWdlRGF0YSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpJbWFnZUV4dHJhY3Rpb25SZXN1bHQmJik+
JiYpOwogICAgIHZvaWQgdXBkYXRlV2l0aEltYWdlRXh0cmFjdGlvblJlc3VsdChXZWJDb3JlOjpJ
bWFnZUV4dHJhY3Rpb25SZXN1bHQmJiwgY29uc3QgV2ViQ29yZTo6RWxlbWVudENvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sIHRleHRFeGlzdHNBdExvY2F0aW9uKT4mJik7CisgICAgdm9pZCBjb21wdXRlQ2FuUmV2
ZWFsSW1hZ2UoY29uc3QgVVJMJiBpbWFnZVVSTCwgU2hhcmVhYmxlQml0bWFwJiBpbWFnZUJpdG1h
cCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShNRURJQV9DT05UUk9MU19DT05URVhUX01FTlVTKSAmJiBVU0UoVUlDT05URVhUTUVOVSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKaW5kZXgg
NTkzNGRhM2RjNDI0YTYyOWQ5MGFjOWYxODMxNzVhZTdhM2IzMTk1NC4uY2Y3OTMyNDIwM2I3NDRm
M2NjMzQwZGM5NTQ5NzcwZjk3NTI5Y2YzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKQEAgLTEzMiw2ICsxMzIsNyBAQCBwcml2YXRlOgog
CiAjaWYgRU5BQkxFKElNQUdFX0VYVFJBQ1RJT04pCiAgICAgdm9pZCByZXF1ZXN0SW1hZ2VFeHRy
YWN0aW9uKGNvbnN0IFVSTCYgaW1hZ2VVUkwsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiBpbWFnZURhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SW1hZ2VFeHRyYWN0
aW9uUmVzdWx0JiYpPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbXB1dGVDYW5SZXZlYWxJbWFn
ZShjb25zdCBVUkwmLCBTaGFyZWFibGVCaXRtYXAmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmKSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5
PiBjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkmKSBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQppbmRleCAxOGYz
NzNhMjNkODdmNDBmNzViYWQ0OWMwZWEzMDIxY2VjNTllYWFkLi40NjNmYzk3MzUzMmM2NGMwNDFk
N2I1OTA5ZGU2M2QwZDQ5NjBiNTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCkBAIC00ODgsNiArNDg4LDExIEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6OnJlcXVlc3RJbWFnZUV4dHJhY3Rpb24oY29uc3QgVVJMJiBpbWFnZVVSTCwgY29u
c3QgU2hhcmVhYmxlCiAgICAgbV9pbXBsLT5yZXF1ZXN0SW1hZ2VFeHRyYWN0aW9uKGltYWdlVVJM
LCBpbWFnZURhdGEsIFdURk1vdmUoY29tcGxldGlvbikpOwogfQogCit2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpjb21wdXRlQ2FuUmV2ZWFsSW1hZ2UoY29uc3QgVVJMJiBpbWFnZVVSTCwgU2hhcmVhYmxl
Qml0bWFwJiBpbWFnZUJpdG1hcCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uKQoreworICAgIG1faW1wbC0+Y29tcHV0ZUNhblJldmVhbEltYWdlKGltYWdlVVJMLCBp
bWFnZUJpdG1hcCwgV1RGTW92ZShjb21wbGV0aW9uKSk7Cit9CisKICNlbmRpZgogCiBSZWZQdHI8
V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQb3B1cE1lbnVQcm94eShX
ZWJQYWdlUHJveHkmIHBhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCmluZGV4IDZiZmZkMTRkZTQ0ODFhNGY0NmNiNzAw
ZWQ3YTM1MDRhNTU0Njc1NzcuLmViMGM3MTk1ZGM1MzhjNTBmNDRjYmY1MmVmZGRiNmJjNmE2N2Iy
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVu
dVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0
TWVudVByb3h5TWFjLm1tCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0ICJTZXJ2aWNlc0NvbnRy
b2xsZXIuaCIKICNpbXBvcnQgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2ltcG9ydCAiV0tNZW51SXRl
bUlkZW50aWZpZXJzUHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tOU1VSTEV4dHJhcy5oIgogI2ltcG9y
dCAiV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0
TWVudUl0ZW0uaCIKICNpbXBvcnQgIldlYkNvbnRleHRNZW51SXRlbURhdGEuaCIKQEAgLTM3Myw1
NiArMzc0LDYgQEAgdm9pZCBXZWJDb250ZXh0TWVudVByb3h5TWFjOjpzaG93KCkKICAgICBXZWJD
b250ZXh0TWVudVByb3h5OjpzaG93KCk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1h
Yzo6Z2V0Q29udGV4dE1lbnVGcm9tSXRlbXMoY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRl
bURhdGE+JiBpdGVtcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChOU01lbnUgKik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCi17Ci0gICAgYXV0byBtZW51ID0gYWRvcHROUyhbW05TTWVudSBhbGxvY10g
aW5pdFdpdGhUaXRsZTpAIiJdKTsKLSAgICBbbWVudSBzZXRBdXRvZW5hYmxlc0l0ZW1zOk5PXTsK
LQotICAgIGlmIChpdGVtcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
bWVudS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgYXV0byBmaWx0
ZXJlZEl0ZW1zID0gaXRlbXM7Ci0gICAgYXV0byB3ZWJWaWV3ID0gbV93ZWJWaWV3LmdldCgpOwot
ICAgIAotICAgIGJvb2wgaXNQb3BvdmVyID0gd2ViVmlldy5nZXQoKS53aW5kb3cuX2NoaWxkV2lu
ZG93T3JkZXJpbmdQcmlvcml0eSA9PSBOU1dpbmRvd0NoaWxkT3JkZXJpbmdQcmlvcml0eVBvcG92
ZXI7Ci0gICAgYm9vbCBpc0xvb2t1cERpc2FibGVkID0gW05TVXNlckRlZmF1bHRzLnN0YW5kYXJk
VXNlckRlZmF1bHRzIGJvb2xGb3JLZXk6QCJMVUxvb2t1cERpc2FibGVkIl07Ci0gICAgCi0gICAg
aWYgKGlzTG9va3VwRGlzYWJsZWQgfHwgaXNQb3BvdmVyKSB7Ci0gICAgICAgIGZpbHRlcmVkSXRl
bXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKGF1dG8mIGl0ZW0pIHsKLSAgICAgICAgICAgIHJldHVy
biBpdGVtLmFjdGlvbigpID09IFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGlj
dGlvbmFyeTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0jaWYgSEFWRShUUkFOU0xBVElPTl9VSV9T
RVJWSUNFUykKLSAgICBpZiAoIXBhZ2UoKS0+Y2FuSGFuZGxlQ29udGV4dE1lbnVUcmFuc2xhdGlv
bigpIHx8IGlzUG9wb3ZlcikgewotICAgICAgICBmaWx0ZXJlZEl0ZW1zLnJlbW92ZUFsbE1hdGNo
aW5nKFtdIChhdXRvJiBpdGVtKSB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlbS5hY3Rpb24oKSA9
PSBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2xhdGU7Ci0gICAgICAgIH0pOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgYXV0byBzcGFyc2VNZW51SXRlbXMgPSByZXRhaW5QdHIoW05TUG9pbnRlckFycmF5
IHN0cm9uZ09iamVjdHNQb2ludGVyQXJyYXldKTsKLSAgICBhdXRvIGluc2VydE1lbnVJdGVtID0g
bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBpdGVtc1JlbWFpbmluZyA9IGZpbHRlcmVkSXRlbXMuc2l6ZSgpLCBtZW51ID0gV1RGTW92
ZShtZW51KSwgc3BhcnNlTWVudUl0ZW1zXShOU01lbnVJdGVtICppdGVtLCBOU1VJbnRlZ2VyIGlu
ZGV4KSBtdXRhYmxlIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgW3NwYXJzZU1lbnVJdGVtcyBj
b3VudF0pOwotICAgICAgICBBU1NFUlQoIVtzcGFyc2VNZW51SXRlbXMgcG9pbnRlckF0SW5kZXg6
aW5kZXhdKTsKLSAgICAgICAgW3NwYXJzZU1lbnVJdGVtcyByZXBsYWNlUG9pbnRlckF0SW5kZXg6
aW5kZXggd2l0aFBvaW50ZXI6aXRlbV07Ci0gICAgICAgIGlmICgtLWl0ZW1zUmVtYWluaW5nKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFttZW51IHNldEl0ZW1BcnJheTpbc3BhcnNl
TWVudUl0ZW1zIGFsbE9iamVjdHNdXTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobWVudS5n
ZXQoKSk7Ci0gICAgfSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbHRlcmVkSXRl
bXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgW3NwYXJzZU1lbnVJdGVtcyBhZGRQb2ludGVyOm51
bGxwdHJdOwotICAgICAgICBnZXRDb250ZXh0TWVudUl0ZW0oZmlsdGVyZWRJdGVtc1tpXSwgW2lu
c2VydE1lbnVJdGVtLCBpXShOU01lbnVJdGVtICptZW51SXRlbSkgewotICAgICAgICAgICAgaW5z
ZXJ0TWVudUl0ZW0obWVudUl0ZW0sIGkpOwotICAgICAgICB9KTsKLSAgICB9Ci19Ci0KIHN0YXRp
YyBOU1N0cmluZyAqbWVudUl0ZW1JZGVudGlmaWVyKGNvbnN0IFdlYkNvcmU6OkNvbnRleHRNZW51
QWN0aW9uIGFjdGlvbikKIHsKICAgICBzd2l0Y2ggKGFjdGlvbikgewpAQCAtNTE1LDYgKzQ2Niwx
MDkgQEAgc3RhdGljIE5TU3RyaW5nICptZW51SXRlbUlkZW50aWZpZXIoY29uc3QgV2ViQ29yZTo6
Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQogICAgIH0KIH0KIAorc3RhdGljIFJldGFpblB0cjxO
U01lbnVJdGVtPiBjcmVhdGVNZW51QWN0aW9uSXRlbShjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1E
YXRhJiBpdGVtKQoreworICAgIGF1dG8gdHlwZSA9IGl0ZW0udHlwZSgpOworICAgIEFTU0VSVF9V
TlVTRUQodHlwZSwgdHlwZSA9PSBXZWJDb3JlOjpBY3Rpb25UeXBlIHx8IHR5cGUgPT0gV2ViQ29y
ZTo6Q2hlY2thYmxlQWN0aW9uVHlwZSk7CisKKyAgICBhdXRvIG1lbnVJdGVtID0gYWRvcHROUyhb
W05TTWVudUl0ZW0gYWxsb2NdIGluaXRXaXRoVGl0bGU6aXRlbS50aXRsZSgpIGFjdGlvbjpAc2Vs
ZWN0b3IoZm9yd2FyZENvbnRleHRNZW51QWN0aW9uOikga2V5RXF1aXZhbGVudDpAIiJdKTsKKwor
ICAgIFttZW51SXRlbSBzZXRUYWc6aXRlbS5hY3Rpb24oKV07CisgICAgW21lbnVJdGVtIHNldEVu
YWJsZWQ6aXRlbS5lbmFibGVkKCldOworICAgIFttZW51SXRlbSBzZXRTdGF0ZTppdGVtLmNoZWNr
ZWQoKSA/IE5TQ29udHJvbFN0YXRlVmFsdWVPbiA6IE5TQ29udHJvbFN0YXRlVmFsdWVPZmZdOwor
ICAgIFttZW51SXRlbSBzZXRJbmRlbnRhdGlvbkxldmVsOml0ZW0uaW5kZW50YXRpb25MZXZlbCgp
XTsKKyAgICBbbWVudUl0ZW0gc2V0VGFyZ2V0OltXS01lbnVUYXJnZXQgc2hhcmVkTWVudVRhcmdl
dF1dOworICAgIFttZW51SXRlbSBzZXRJZGVudGlmaWVyOm1lbnVJdGVtSWRlbnRpZmllcihpdGVt
LmFjdGlvbigpKV07CisKKyAgICBpZiAoaXRlbS51c2VyRGF0YSgpKSB7CisgICAgICAgIGF1dG8g
d3JhcHBlciA9IGFkb3B0TlMoW1tXS1VzZXJEYXRhV3JhcHBlciBhbGxvY10gaW5pdFdpdGhVc2Vy
RGF0YTppdGVtLnVzZXJEYXRhKCldKTsKKyAgICAgICAgW21lbnVJdGVtIHNldFJlcHJlc2VudGVk
T2JqZWN0OndyYXBwZXIuZ2V0KCldOworICAgIH0KKworICAgIHJldHVybiBtZW51SXRlbTsKK30K
Kwordm9pZCBXZWJDb250ZXh0TWVudVByb3h5TWFjOjpnZXRDb250ZXh0TWVudUZyb21JdGVtcyhj
b25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKE5TTWVudSAqKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIG1l
bnUgPSBhZG9wdE5TKFtbTlNNZW51IGFsbG9jXSBpbml0V2l0aFRpdGxlOkAiIl0pOworICAgIFtt
ZW51IHNldEF1dG9lbmFibGVzSXRlbXM6Tk9dOworCisgICAgaWYgKGl0ZW1zLmlzRW1wdHkoKSkg
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtZW51LmdldCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGF1dG8gZmlsdGVyZWRJdGVtcyA9IGl0ZW1zOworICAgIGF1dG8gd2Vi
VmlldyA9IG1fd2ViVmlldy5nZXQoKTsKKworICAgIGJvb2wgaXNQb3BvdmVyID0gd2ViVmlldy5n
ZXQoKS53aW5kb3cuX2NoaWxkV2luZG93T3JkZXJpbmdQcmlvcml0eSA9PSBOU1dpbmRvd0NoaWxk
T3JkZXJpbmdQcmlvcml0eVBvcG92ZXI7CisgICAgYm9vbCBpc0xvb2t1cERpc2FibGVkID0gW05T
VXNlckRlZmF1bHRzLnN0YW5kYXJkVXNlckRlZmF1bHRzIGJvb2xGb3JLZXk6QCJMVUxvb2t1cERp
c2FibGVkIl07CisKKyAgICBpZiAoaXNMb29rdXBEaXNhYmxlZCB8fCBpc1BvcG92ZXIpIHsKKyAg
ICAgICAgZmlsdGVyZWRJdGVtcy5yZW1vdmVBbGxNYXRjaGluZyhbXSAoYXV0byYgaXRlbSkgewor
ICAgICAgICAgICAgcmV0dXJuIGl0ZW0uYWN0aW9uKCkgPT0gV2ViQ29yZTo6Q29udGV4dE1lbnVJ
dGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBPcHRp
b25hbDxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiByZXZlYWxJbWFnZUl0ZW07CisKKyNpZiBFTkFC
TEUoSU1BR0VfRVhUUkFDVElPTikKKyAgICBmaWx0ZXJlZEl0ZW1zLnJlbW92ZUZpcnN0TWF0Y2hp
bmcoWyZdIChhdXRvJiBpdGVtKSB7CisgICAgICAgIGlmIChpdGVtLmFjdGlvbigpICE9IFdlYkNv
cmU6OkNvbnRleHRNZW51SXRlbVRhZ1JldmVhbEltYWdlKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHJldmVhbEltYWdlSXRlbSA9IHsgaXRlbSB9OworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9KTsKKyNlbmRpZgorCisjaWYgSEFWRShUUkFOU0xBVElPTl9VSV9TRVJW
SUNFUykKKyAgICBpZiAoIXBhZ2UoKS0+Y2FuSGFuZGxlQ29udGV4dE1lbnVUcmFuc2xhdGlvbigp
IHx8IGlzUG9wb3ZlcikgeworICAgICAgICBmaWx0ZXJlZEl0ZW1zLnJlbW92ZUFsbE1hdGNoaW5n
KFtdIChhdXRvJiBpdGVtKSB7CisgICAgICAgICAgICByZXR1cm4gaXRlbS5hY3Rpb24oKSA9PSBD
b250ZXh0TWVudUl0ZW1UYWdUcmFuc2xhdGU7CisgICAgICAgIH0pOworICAgIH0KKyNlbmRpZgor
CisgICAgYXV0byBpbWFnZVVSTCA9IFVSTChbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOm1f
Y29udGV4dC53ZWJIaXRUZXN0UmVzdWx0RGF0YSgpLmFic29sdXRlSW1hZ2VVUkxdKTsKKyAgICBh
dXRvIGltYWdlQml0bWFwID0gbV9jb250ZXh0LndlYkhpdFRlc3RSZXN1bHREYXRhKCkuaW1hZ2VC
aXRtYXA7CisKKyAgICBhdXRvIHNwYXJzZU1lbnVJdGVtcyA9IHJldGFpblB0cihbTlNQb2ludGVy
QXJyYXkgc3Ryb25nT2JqZWN0c1BvaW50ZXJBcnJheV0pOworICAgIGF1dG8gaW5zZXJ0TWVudUl0
ZW0gPSBtYWtlQmxvY2tQdHIoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgd2Vha1Bh
Z2UgPSBtYWtlV2Vha1B0cihwYWdlKCkpLCBpbWFnZVVSTCwgaW1hZ2VCaXRtYXAsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGl0ZW1zUmVtYWluaW5nID0g
ZmlsdGVyZWRJdGVtcy5zaXplKCksIG1lbnUgPSBXVEZNb3ZlKG1lbnUpLCBzcGFyc2VNZW51SXRl
bXMsIHJldmVhbEltYWdlSXRlbV0oTlNNZW51SXRlbSAqaXRlbSwgTlNVSW50ZWdlciBpbmRleCkg
bXV0YWJsZSB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IFtzcGFyc2VNZW51SXRlbXMgY291bnRd
KTsKKyAgICAgICAgQVNTRVJUKCFbc3BhcnNlTWVudUl0ZW1zIHBvaW50ZXJBdEluZGV4OmluZGV4
XSk7CisgICAgICAgIFtzcGFyc2VNZW51SXRlbXMgcmVwbGFjZVBvaW50ZXJBdEluZGV4OmluZGV4
IHdpdGhQb2ludGVyOml0ZW1dOworICAgICAgICBpZiAoLS1pdGVtc1JlbWFpbmluZykKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBbbWVudSBzZXRJdGVtQXJyYXk6W3NwYXJzZU1lbnVJ
dGVtcyBhbGxPYmplY3RzXV07CisKKyAgICAgICAgYXV0byBwYWdlID0gbWFrZVJlZlB0cih3ZWFr
UGFnZS5nZXQoKSk7CisgICAgICAgIGlmIChyZXZlYWxJbWFnZUl0ZW0gJiYgcGFnZSAmJiBpbWFn
ZUJpdG1hcCkgeworI2lmIEVOQUJMRShJTUFHRV9FWFRSQUNUSU9OKQorICAgICAgICAgICAgcGFn
ZS0+Y29tcHV0ZUNhblJldmVhbEltYWdlKGltYWdlVVJMLCAqaW1hZ2VCaXRtYXAsIFtwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgbWVudUl0ZW0gPSBXVEZNb3ZlKCpyZXZl
YWxJbWFnZUl0ZW0pXSAoYm9vbCBjYW5SZXZlYWxJbWFnZSkgbXV0YWJsZSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFjYW5SZXZlYWxJbWFnZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICAgICAgYXV0byBuc01lbnVJdGVtID0gY3JlYXRlTWVudUFjdGlvbkl0ZW0o
bWVudUl0ZW0pOworICAgICAgICAgICAgICAgIFtwcm90ZWN0ZWRUaGlzLT5tX21lbnUgYWRkSXRl
bTpuc01lbnVJdGVtLmdldCgpXTsKKyAgICAgICAgICAgIH0pOworI2Vsc2UKKyAgICAgICAgICAg
IFVOVVNFRF9QQVJBTShpbWFnZVVSTCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKG1lbnUuZ2V0KCkpOworICAgIH0pOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmaWx0ZXJlZEl0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFtzcGFyc2VN
ZW51SXRlbXMgYWRkUG9pbnRlcjpudWxscHRyXTsKKyAgICAgICAgZ2V0Q29udGV4dE1lbnVJdGVt
KGZpbHRlcmVkSXRlbXNbaV0sIFtpbnNlcnRNZW51SXRlbSwgaV0oTlNNZW51SXRlbSAqbWVudUl0
ZW0pIHsKKyAgICAgICAgICAgIGluc2VydE1lbnVJdGVtKG1lbnVJdGVtLCBpKTsKKyAgICAgICAg
fSk7CisgICAgfQorfQorCiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlNYWM6OmdldENvbnRleHRN
ZW51SXRlbShjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBpdGVtLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKE5TTWVudUl0ZW0gKik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpCkBAIC01MjcsMjEgKzU4MSw4IEBAIHZvaWQgV2ViQ29udGV4
dE1lbnVQcm94eU1hYzo6Z2V0Q29udGV4dE1lbnVJdGVtKGNvbnN0IFdlYkNvbnRleHRNZW51SXRl
bURhdGEmIGl0CiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewogICAgIGNhc2UgV2ViQ29yZTo6
QWN0aW9uVHlwZToKICAgICBjYXNlIFdlYkNvcmU6OkNoZWNrYWJsZUFjdGlvblR5cGU6IHsKLSAg
ICAgICAgYXV0byBtZW51SXRlbSA9IGFkb3B0TlMoW1tOU01lbnVJdGVtIGFsbG9jXSBpbml0V2l0
aFRpdGxlOml0ZW0udGl0bGUoKSBhY3Rpb246QHNlbGVjdG9yKGZvcndhcmRDb250ZXh0TWVudUFj
dGlvbjopIGtleUVxdWl2YWxlbnQ6QCIiXSk7Ci0KLSAgICAgICAgW21lbnVJdGVtIHNldFRhZzpp
dGVtLmFjdGlvbigpXTsKLSAgICAgICAgW21lbnVJdGVtIHNldEVuYWJsZWQ6aXRlbS5lbmFibGVk
KCldOwotICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6aXRlbS5jaGVja2VkKCkgPyBOU0NvbnRy
b2xTdGF0ZVZhbHVlT24gOiBOU0NvbnRyb2xTdGF0ZVZhbHVlT2ZmXTsKLSAgICAgICAgW21lbnVJ
dGVtIHNldEluZGVudGF0aW9uTGV2ZWw6aXRlbS5pbmRlbnRhdGlvbkxldmVsKCldOwotICAgICAg
ICBbbWVudUl0ZW0gc2V0VGFyZ2V0OltXS01lbnVUYXJnZXQgc2hhcmVkTWVudVRhcmdldF1dOwot
ICAgICAgICBbbWVudUl0ZW0gc2V0SWRlbnRpZmllcjptZW51SXRlbUlkZW50aWZpZXIoaXRlbS5h
Y3Rpb24oKSldOwotCi0gICAgICAgIGlmIChpdGVtLnVzZXJEYXRhKCkpIHsKLSAgICAgICAgICAg
IGF1dG8gd3JhcHBlciA9IGFkb3B0TlMoW1tXS1VzZXJEYXRhV3JhcHBlciBhbGxvY10gaW5pdFdp
dGhVc2VyRGF0YTppdGVtLnVzZXJEYXRhKCldKTsKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRS
ZXByZXNlbnRlZE9iamVjdDp3cmFwcGVyLmdldCgpXTsKLSAgICAgICAgfQotCi0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKG1lbnVJdGVtLmdldCgpKTsKKyAgICAgICAgYXV0byBuc01lbnVJdGVt
ID0gY3JlYXRlTWVudUFjdGlvbkl0ZW0oaXRlbSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KG5zTWVudUl0ZW0uZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCg==
</data>
<flag name="review"
          id="444885"
          type_id="1"
          status="+"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425236</attachid>
            <date>2021-04-05 20:32:28 -0700</date>
            <delta_ts>2021-04-05 21:31:18 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-224126-20210405203227.patch</filename>
            <type>text/plain</type>
            <size>15837</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFjZjgzMTU3Y2NlNmRhMjYy
NzAxZjM1NzI4Zjc5NDliNTgzZWUyYWYuLmIzZDBlOTMwMDE5MTQ1ZDIzOTMyMjJmNmYwMmIwN2Nh
NTI1YTk5NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMjEtMDQtMDIgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBJbWFnZSBw
cmV2aWV3IGNvbnRleHQgbWVudSBhY3Rpb24gc2hvdWxkIGJlIHNob3duIGNvbmRpdGlvbmFsbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDEyNgor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzYxNjIyNzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGV2aW4gUm91c3NvLgorCisgICAgICAgIEFkZCBhIHBhZ2UgY2xpZW50IGhvb2sgdG8gcmV0dXJu
IHdoZXRoZXIgb3Igbm90IHRoZSAicmV2ZWFsIGltYWdlIiBjb250ZXh0IG1lbnUgaXRlbSBzaG91
bGQgYmUgZW5hYmxlZCwgZ2l2ZW4KKyAgICAgICAgdGhlIGltYWdlIFVSTCBhbmQgZGVjb2RlZCBp
bWFnZSBiaXRtYXA7IHdlIHRoZW4gdXNlIHRoaXMgbWV0aG9kIHRvIGNvbmRpdGlvbmFsbHkgaW5z
ZXJ0IGEgY29udGV4dCBtZW51IGl0ZW0gZm9yCisgICAgICAgIHJldmVhbGluZyB0aGUgaW1hZ2Ug
aW4gY29udGV4dCBtZW51IGRhdGEuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmll
d0ltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50Ojpjb21wdXRlQ2FuUmV2ZWFsSW1hZ2UpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNv
bXB1dGVDYW5SZXZlYWxJbWFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6Y29tcHV0ZUNhblJldmVhbEltYWdlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OmNyZWF0
ZU1lbnVBY3Rpb25JdGVtKToKKworICAgICAgICBQdWxsIGxvZ2ljIGZvciBtYXBwaW5nIGEgYFdl
YkNvbnRleHRNZW51SXRlbURhdGFgIG9mIHR5cGUgYEFjdGlvblR5cGVgIG9yIGBDaGVja2FibGVB
Y3Rpb25UeXBlYCB0byBhIHBsYXRmb3JtCisgICAgICAgIGBOU01lbnVJdGVtYCBvdXQgaW50byBh
IHNlcGFyYXRlIGhlbHBlciBmdW5jdGlvbi4gVXNlIHRoaXMgaGVscGVyIGluIGBnZXRDb250ZXh0
TWVudUl0ZW1gLCBhcyB3ZWxsIGFzIHRoZQorICAgICAgICBjb21wbGV0aW9uIGhhbmRsZXIgZm9y
IHRoZSBjYWxsIHRvIGBjb21wdXRlQ2FuUmV2ZWFsSW1hZ2VgLiBOb3RlIHRoYXQgdGhpcyBhbHNv
IHJlcXVpcmVzIG1vdmluZyB0aGUKKyAgICAgICAgYG1lbnVJdGVtSWRlbnRpZmllcmAgZnVuY3Rp
b24gdXAgYWJvdmUgYGdldENvbnRleHRNZW51RnJvbUl0ZW1zYC4KKworICAgICAgICAoV2ViS2l0
OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpnZXRDb250ZXh0TWVudUZyb21JdGVtcyk6CisKKyAg
ICAgICAgU3BlY2lhbCBjYXNlIHRoZSBgQ29udGV4dE1lbnVJdGVtVGFnUmV2ZWFsSW1hZ2VgIGl0
ZW07IGluc3RlYWQgb2YgYWRkaW5nIHRoaXMgaXRlbSB0byB0aGUgY29udGV4dCBtZW51IHJpZ2h0
CisgICAgICAgIGF3YXksIHdlIGhpZGUgaXQgYnkgZGVmYXVsdCwgYW5kIG9ubHkgcmVpbnNlcnQg
aXQgaWYgdGhlIHBhZ2UgY2xpZW50IGluZGljYXRlcyB0aGF0IHdlIHJlcXVpcmUgdGhlIGl0ZW0g
KHZpYQorICAgICAgICBgY29tcHV0ZUNhblJldmVhbEltYWdlYCkuCisKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGV4dE1lbnVQcm94eU1hYzo6Z2V0Q29udGV4dE1lbnVJdGVtKToKKwogMjAyMS0w
NC0wNSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBS
RUdSRVNTSU9OOiBBU1NFUlRJT04gRkFJTEVEOiBzZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nRW5h
YmxlZCgpICYmIHNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdVc2VzSWRlbXBvdGVudE1vZGUoKSBv
biB2YXJpb3VzIHRlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0lt
cGwuaAppbmRleCA4NTg1NDRkMjdkNzA0YjNmMDIzOGZiOTg4YTU1NmQ1YmQ4ZjBjYjk0Li5hNDA0
MTJmM2ZjMGRlYjdmZDE0N2NmOTNmYzNiYTI2OTQwYjE4YjdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIF9XS1JlY3RFZGdlID0gTlNVSW50ZWdlcjsK
QEAgLTU4NSw2ICs1ODYsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoSU1BR0VfRVhUUkFDVElP
TikKICAgICB2b2lkIHJlcXVlc3RJbWFnZUV4dHJhY3Rpb24oY29uc3QgVVJMJiBpbWFnZVVSTCwg
Y29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGltYWdlRGF0YSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChXZWJDb3JlOjpJbWFnZUV4dHJhY3Rpb25SZXN1bHQmJik+JiYpOworICAgIHZvaWQg
Y29tcHV0ZUNhblJldmVhbEltYWdlKGNvbnN0IFVSTCYgaW1hZ2VVUkwsIFNoYXJlYWJsZUJpdG1h
cCYgaW1hZ2VCaXRtYXAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogI2VuZGlm
CiAKICAgICBib29sIHdpbmRvd0lzRnJvbnRXaW5kb3dVbmRlck1vdXNlKE5TRXZlbnQgKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggOWQyZGIwYmFmMGFmMDM1YmM4NTA3
YTllNGNmMjhiNzdhY2VhNzc4Yi4uMDQ4MDQyNThjYmYxOWIyNTlmNjdmMzdlYWQ3ZTExNWFkYjE0
OTZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtNTI1LDYgKzUyNSw3
IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShJTUFHRV9FWFRSQUNUSU9OKQogICAgIHZpcnR1YWwg
dm9pZCByZXF1ZXN0SW1hZ2VFeHRyYWN0aW9uKGNvbnN0IFVSTCYgaW1hZ2VVUkwsIGNvbnN0IFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBpbWFnZURhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
V2ViQ29yZTo6SW1hZ2VFeHRyYWN0aW9uUmVzdWx0JiYpPiYmIGNvbXBsZXRpb24pIHsgY29tcGxl
dGlvbih7IH0pOyB9CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVDYW5SZXZlYWxJbWFnZShjb25z
dCBVUkwmLCBTaGFyZWFibGVCaXRtYXAmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb24pIHsgY29tcGxldGlvbihmYWxzZSk7IH0KICNlbmRpZgogCiAjaWYgRU5BQkxF
KE1FRElBX0NPTlRST0xTX0NPTlRFWFRfTUVOVVMpICYmIFVTRShVSUNPTlRFWFRNRU5VKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZGU1Y2UxOTYwZDU3NGJl
NjEzMGY1MWYwZWU2ODEwOGZmZjZiYjk5MC4uNDkwY2IxZDZlZDZkYmZjYmZlNjg3MzEzNWVlYTM0
ODAxNWMwZWUzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBA
IC04MjMxLDYgKzgyMzEsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RJbWFnZUV4dHJh
Y3Rpb24oY29uc3QgVVJMJiBpbWFnZVVSTCwgY29uc3QgU2hhcmVhYmxlQmkKICAgICBwYWdlQ2xp
ZW50KCkucmVxdWVzdEltYWdlRXh0cmFjdGlvbihpbWFnZVVSTCwgaW1hZ2VEYXRhLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5Ojpjb21wdXRlQ2Fu
UmV2ZWFsSW1hZ2UoY29uc3QgVVJMJiBpbWFnZVVSTCwgU2hhcmVhYmxlQml0bWFwJiBpbWFnZUJp
dG1hcCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uKQoreworICAg
IHBhZ2VDbGllbnQoKS5jb21wdXRlQ2FuUmV2ZWFsSW1hZ2UoaW1hZ2VVUkwsIGltYWdlQml0bWFw
LCBXVEZNb3ZlKGNvbXBsZXRpb24pKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVdp
dGhJbWFnZUV4dHJhY3Rpb25SZXN1bHQoSW1hZ2VFeHRyYWN0aW9uUmVzdWx0JiYgcmVzdWx0cywg
Y29uc3QgRWxlbWVudENvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9u
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgdGV4dEV4aXN0c0F0TG9jYXRpb24pPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBkZTZlODIyNjM5OTU2ZDhkNjk5
ZTJhMjRiNjMxY2E0N2Q4NjVjN2M0Li5iNGNiMGQ5NWQwNjllNDBmMzBjZjNlYjVkMmYwZjVmNjA0
ZWM0MDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMTYzNyw2
ICsxNjM3LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShJTUFHRV9FWFRSQUNUSU9OKQogICAgIHZv
aWQgcmVxdWVzdEltYWdlRXh0cmFjdGlvbihjb25zdCBVUkwmIGltYWdlVVJMLCBjb25zdCBTaGFy
ZWFibGVCaXRtYXA6OkhhbmRsZSYgaW1hZ2VEYXRhLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YkNvcmU6OkltYWdlRXh0cmFjdGlvblJlc3VsdCYmKT4mJik7CiAgICAgdm9pZCB1cGRhdGVXaXRo
SW1hZ2VFeHRyYWN0aW9uUmVzdWx0KFdlYkNvcmU6OkltYWdlRXh0cmFjdGlvblJlc3VsdCYmLCBj
b25zdCBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IGxvY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgdGV4dEV4aXN0c0F0TG9jYXRp
b24pPiYmKTsKKyAgICB2b2lkIGNvbXB1dGVDYW5SZXZlYWxJbWFnZShjb25zdCBVUkwmIGltYWdl
VVJMLCBTaGFyZWFibGVCaXRtYXAmIGltYWdlQml0bWFwLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX0NPTlRFWFRf
TUVOVVMpICYmIFVTRShVSUNPTlRFWFRNRU5VKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAppbmRleCA1OTM0ZGEzZGM0MjRhNjI5ZDkwYWM5ZjE4
MzE3NWFlN2EzYjMxOTU0Li5jZjc5MzI0MjAzYjc0NGYzY2MzNDBkYzk1NDk3NzBmOTc1MjljZjMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxN
YWMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMu
aApAQCAtMTMyLDYgKzEzMiw3IEBAIHByaXZhdGU6CiAKICNpZiBFTkFCTEUoSU1BR0VfRVhUUkFD
VElPTikKICAgICB2b2lkIHJlcXVlc3RJbWFnZUV4dHJhY3Rpb24oY29uc3QgVVJMJiBpbWFnZVVS
TCwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGltYWdlRGF0YSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChXZWJDb3JlOjpJbWFnZUV4dHJhY3Rpb25SZXN1bHQmJik+JiYpIG92ZXJyaWRl
OworICAgIHZvaWQgY29tcHV0ZUNhblJldmVhbEltYWdlKGNvbnN0IFVSTCYsIFNoYXJlYWJsZUJp
dG1hcCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOwogI2VuZGlm
CiAKICAgICBSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdl
YlBhZ2VQcm94eSYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLm1tCmluZGV4IDE4ZjM3M2EyM2Q4N2Y0MGY3NWJhZDQ5YzBlYTMw
MjFjZWM1OWVhYWQuLjQ2M2ZjOTczNTMyYzY0YzA0MWQ3YjU5MDlkZTYzZDBkNDk2MGI1NTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0K
QEAgLTQ4OCw2ICs0ODgsMTEgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVxdWVzdEltYWdlRXh0
cmFjdGlvbihjb25zdCBVUkwmIGltYWdlVVJMLCBjb25zdCBTaGFyZWFibGUKICAgICBtX2ltcGwt
PnJlcXVlc3RJbWFnZUV4dHJhY3Rpb24oaW1hZ2VVUkwsIGltYWdlRGF0YSwgV1RGTW92ZShjb21w
bGV0aW9uKSk7CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmNvbXB1dGVDYW5SZXZlYWxJbWFn
ZShjb25zdCBVUkwmIGltYWdlVVJMLCBTaGFyZWFibGVCaXRtYXAmIGltYWdlQml0bWFwLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb24pCit7CisgICAgbV9pbXBsLT5j
b21wdXRlQ2FuUmV2ZWFsSW1hZ2UoaW1hZ2VVUkwsIGltYWdlQml0bWFwLCBXVEZNb3ZlKGNvbXBs
ZXRpb24pKTsKK30KKwogI2VuZGlmCiAKIFJlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gUGFnZUNs
aWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFj
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMu
bW0KaW5kZXggNmJmZmQxNGRlNDQ4MWE0ZjQ2Y2I3MDBlZDdhMzUwNGE1NTQ2NzU3Ny4uNDkxNDdl
MDQ2MmVjZWIwNDFmYmFjMjBjYmQzNzc2MDQ2MmYwNDY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0KQEAgLTM0LDYg
KzM0LDcgQEAKICNpbXBvcnQgIlNlcnZpY2VzQ29udHJvbGxlci5oIgogI2ltcG9ydCAiU2hhcmVh
YmxlQml0bWFwLmgiCiAjaW1wb3J0ICJXS01lbnVJdGVtSWRlbnRpZmllcnNQcml2YXRlLmgiCisj
aW1wb3J0ICJXS05TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJXS1NoYXJpbmdTZXJ2aWNlUGlja2Vy
RGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYkNvbnRleHRNZW51SXRlbS5oIgogI2ltcG9ydCAiV2Vi
Q29udGV4dE1lbnVJdGVtRGF0YS5oIgpAQCAtMzczLDU2ICszNzQsNiBAQCB2b2lkIFdlYkNvbnRl
eHRNZW51UHJveHlNYWM6OnNob3coKQogICAgIFdlYkNvbnRleHRNZW51UHJveHk6OnNob3coKTsK
IH0KIAotdm9pZCBXZWJDb250ZXh0TWVudVByb3h5TWFjOjpnZXRDb250ZXh0TWVudUZyb21JdGVt
cyhjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKE5TTWVudSAqKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBhdXRv
IG1lbnUgPSBhZG9wdE5TKFtbTlNNZW51IGFsbG9jXSBpbml0V2l0aFRpdGxlOkAiIl0pOwotICAg
IFttZW51IHNldEF1dG9lbmFibGVzSXRlbXM6Tk9dOwotCi0gICAgaWYgKGl0ZW1zLmlzRW1wdHko
KSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtZW51LmdldCgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBhdXRvIGZpbHRlcmVkSXRlbXMgPSBpdGVtczsKLSAgICBh
dXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCk7Ci0gICAgCi0gICAgYm9vbCBpc1BvcG92ZXIg
PSB3ZWJWaWV3LmdldCgpLndpbmRvdy5fY2hpbGRXaW5kb3dPcmRlcmluZ1ByaW9yaXR5ID09IE5T
V2luZG93Q2hpbGRPcmRlcmluZ1ByaW9yaXR5UG9wb3ZlcjsKLSAgICBib29sIGlzTG9va3VwRGlz
YWJsZWQgPSBbTlNVc2VyRGVmYXVsdHMuc3RhbmRhcmRVc2VyRGVmYXVsdHMgYm9vbEZvcktleTpA
IkxVTG9va3VwRGlzYWJsZWQiXTsKLSAgICAKLSAgICBpZiAoaXNMb29rdXBEaXNhYmxlZCB8fCBp
c1BvcG92ZXIpIHsKLSAgICAgICAgZmlsdGVyZWRJdGVtcy5yZW1vdmVBbGxNYXRjaGluZyhbXSAo
YXV0byYgaXRlbSkgewotICAgICAgICAgICAgcmV0dXJuIGl0ZW0uYWN0aW9uKCkgPT0gV2ViQ29y
ZTo6Q29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5OwotICAgICAgICB9KTsKLSAg
ICB9Ci0KLSNpZiBIQVZFKFRSQU5TTEFUSU9OX1VJX1NFUlZJQ0VTKQotICAgIGlmICghcGFnZSgp
LT5jYW5IYW5kbGVDb250ZXh0TWVudVRyYW5zbGF0aW9uKCkgfHwgaXNQb3BvdmVyKSB7Ci0gICAg
ICAgIGZpbHRlcmVkSXRlbXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKGF1dG8mIGl0ZW0pIHsKLSAg
ICAgICAgICAgIHJldHVybiBpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ1RyYW5z
bGF0ZTsKLSAgICAgICAgfSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBhdXRvIHNwYXJzZU1lbnVJ
dGVtcyA9IHJldGFpblB0cihbTlNQb2ludGVyQXJyYXkgc3Ryb25nT2JqZWN0c1BvaW50ZXJBcnJh
eV0pOwotICAgIGF1dG8gaW5zZXJ0TWVudUl0ZW0gPSBtYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGl0ZW1zUmVtYWluaW5nID0gZmls
dGVyZWRJdGVtcy5zaXplKCksIG1lbnUgPSBXVEZNb3ZlKG1lbnUpLCBzcGFyc2VNZW51SXRlbXNd
KE5TTWVudUl0ZW0gKml0ZW0sIE5TVUludGVnZXIgaW5kZXgpIG11dGFibGUgewotICAgICAgICBB
U1NFUlQoaW5kZXggPCBbc3BhcnNlTWVudUl0ZW1zIGNvdW50XSk7Ci0gICAgICAgIEFTU0VSVCgh
W3NwYXJzZU1lbnVJdGVtcyBwb2ludGVyQXRJbmRleDppbmRleF0pOwotICAgICAgICBbc3BhcnNl
TWVudUl0ZW1zIHJlcGxhY2VQb2ludGVyQXRJbmRleDppbmRleCB3aXRoUG9pbnRlcjppdGVtXTsK
LSAgICAgICAgaWYgKC0taXRlbXNSZW1haW5pbmcpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgW21lbnUgc2V0SXRlbUFycmF5OltzcGFyc2VNZW51SXRlbXMgYWxsT2JqZWN0c11dOwot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtZW51LmdldCgpKTsKLSAgICB9KTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVyZWRJdGVtcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBbc3BhcnNlTWVudUl0ZW1zIGFkZFBvaW50ZXI6bnVsbHB0cl07Ci0gICAgICAgIGdldENvbnRl
eHRNZW51SXRlbShmaWx0ZXJlZEl0ZW1zW2ldLCBbaW5zZXJ0TWVudUl0ZW0sIGldKE5TTWVudUl0
ZW0gKm1lbnVJdGVtKSB7Ci0gICAgICAgICAgICBpbnNlcnRNZW51SXRlbShtZW51SXRlbSwgaSk7
Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogc3RhdGljIE5TU3RyaW5nICptZW51SXRlbUlkZW50
aWZpZXIoY29uc3QgV2ViQ29yZTo6Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQogewogICAgIHN3
aXRjaCAoYWN0aW9uKSB7CkBAIC01MTUsNiArNDY2LDEwOSBAQCBzdGF0aWMgTlNTdHJpbmcgKm1l
bnVJdGVtSWRlbnRpZmllcihjb25zdCBXZWJDb3JlOjpDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24p
CiAgICAgfQogfQogCitzdGF0aWMgUmV0YWluUHRyPE5TTWVudUl0ZW0+IGNyZWF0ZU1lbnVBY3Rp
b25JdGVtKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmIGl0ZW0pCit7CisgICAgYXV0byB0
eXBlID0gaXRlbS50eXBlKCk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IFdlYkNv
cmU6OkFjdGlvblR5cGUgfHwgdHlwZSA9PSBXZWJDb3JlOjpDaGVja2FibGVBY3Rpb25UeXBlKTsK
KworICAgIGF1dG8gbWVudUl0ZW0gPSBhZG9wdE5TKFtbTlNNZW51SXRlbSBhbGxvY10gaW5pdFdp
dGhUaXRsZTppdGVtLnRpdGxlKCkgYWN0aW9uOkBzZWxlY3Rvcihmb3J3YXJkQ29udGV4dE1lbnVB
Y3Rpb246KSBrZXlFcXVpdmFsZW50OkAiIl0pOworCisgICAgW21lbnVJdGVtIHNldFRhZzppdGVt
LmFjdGlvbigpXTsKKyAgICBbbWVudUl0ZW0gc2V0RW5hYmxlZDppdGVtLmVuYWJsZWQoKV07Cisg
ICAgW21lbnVJdGVtIHNldFN0YXRlOml0ZW0uY2hlY2tlZCgpID8gTlNDb250cm9sU3RhdGVWYWx1
ZU9uIDogTlNDb250cm9sU3RhdGVWYWx1ZU9mZl07CisgICAgW21lbnVJdGVtIHNldEluZGVudGF0
aW9uTGV2ZWw6aXRlbS5pbmRlbnRhdGlvbkxldmVsKCldOworICAgIFttZW51SXRlbSBzZXRUYXJn
ZXQ6W1dLTWVudVRhcmdldCBzaGFyZWRNZW51VGFyZ2V0XV07CisgICAgW21lbnVJdGVtIHNldElk
ZW50aWZpZXI6bWVudUl0ZW1JZGVudGlmaWVyKGl0ZW0uYWN0aW9uKCkpXTsKKworICAgIGlmIChp
dGVtLnVzZXJEYXRhKCkpIHsKKyAgICAgICAgYXV0byB3cmFwcGVyID0gYWRvcHROUyhbW1dLVXNl
ckRhdGFXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFVzZXJEYXRhOml0ZW0udXNlckRhdGEoKV0pOwor
ICAgICAgICBbbWVudUl0ZW0gc2V0UmVwcmVzZW50ZWRPYmplY3Q6d3JhcHBlci5nZXQoKV07Cisg
ICAgfQorCisgICAgcmV0dXJuIG1lbnVJdGVtOworfQorCit2b2lkIFdlYkNvbnRleHRNZW51UHJv
eHlNYWM6OmdldENvbnRleHRNZW51RnJvbUl0ZW1zKGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVu
dUl0ZW1EYXRhPiYgaXRlbXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoTlNNZW51ICopPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gbWVudSA9IGFkb3B0TlMoW1tOU01lbnUgYWxs
b2NdIGluaXRXaXRoVGl0bGU6QCIiXSk7CisgICAgW21lbnUgc2V0QXV0b2VuYWJsZXNJdGVtczpO
T107CisKKyAgICBpZiAoaXRlbXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKG1lbnUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBmaWx0
ZXJlZEl0ZW1zID0gaXRlbXM7CisgICAgYXV0byB3ZWJWaWV3ID0gbV93ZWJWaWV3LmdldCgpOwor
CisgICAgYm9vbCBpc1BvcG92ZXIgPSB3ZWJWaWV3LmdldCgpLndpbmRvdy5fY2hpbGRXaW5kb3dP
cmRlcmluZ1ByaW9yaXR5ID09IE5TV2luZG93Q2hpbGRPcmRlcmluZ1ByaW9yaXR5UG9wb3ZlcjsK
KyAgICBib29sIGlzTG9va3VwRGlzYWJsZWQgPSBbTlNVc2VyRGVmYXVsdHMuc3RhbmRhcmRVc2Vy
RGVmYXVsdHMgYm9vbEZvcktleTpAIkxVTG9va3VwRGlzYWJsZWQiXTsKKworICAgIGlmIChpc0xv
b2t1cERpc2FibGVkIHx8IGlzUG9wb3ZlcikgeworICAgICAgICBmaWx0ZXJlZEl0ZW1zLnJlbW92
ZUFsbE1hdGNoaW5nKFtdIChhdXRvJiBpdGVtKSB7CisgICAgICAgICAgICByZXR1cm4gaXRlbS5h
Y3Rpb24oKSA9PSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnk7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIE9wdGlvbmFsPFdlYkNvbnRleHRNZW51SXRlbURh
dGE+IHJldmVhbEltYWdlSXRlbTsKKworI2lmIEVOQUJMRShJTUFHRV9FWFRSQUNUSU9OKQorICAg
IGZpbHRlcmVkSXRlbXMucmVtb3ZlRmlyc3RNYXRjaGluZyhbJl0gKGF1dG8mIGl0ZW0pIHsKKyAg
ICAgICAgaWYgKGl0ZW0uYWN0aW9uKCkgIT0gV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnUmV2
ZWFsSW1hZ2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV2ZWFsSW1h
Z2VJdGVtID0geyBpdGVtIH07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworI2VuZGlm
CisKKyNpZiBIQVZFKFRSQU5TTEFUSU9OX1VJX1NFUlZJQ0VTKQorICAgIGlmICghcGFnZSgpLT5j
YW5IYW5kbGVDb250ZXh0TWVudVRyYW5zbGF0aW9uKCkgfHwgaXNQb3BvdmVyKSB7CisgICAgICAg
IGZpbHRlcmVkSXRlbXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKGF1dG8mIGl0ZW0pIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ1RyYW5zbGF0
ZTsKKyAgICAgICAgfSk7CisgICAgfQorI2VuZGlmCisKKyAgICBhdXRvIGltYWdlVVJMID0gVVJM
KFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6bV9jb250ZXh0LndlYkhpdFRlc3RSZXN1bHRE
YXRhKCkuYWJzb2x1dGVJbWFnZVVSTF0pOworICAgIGF1dG8gaW1hZ2VCaXRtYXAgPSBtX2NvbnRl
eHQud2ViSGl0VGVzdFJlc3VsdERhdGEoKS5pbWFnZUJpdG1hcDsKKworICAgIGF1dG8gc3BhcnNl
TWVudUl0ZW1zID0gcmV0YWluUHRyKFtOU1BvaW50ZXJBcnJheSBzdHJvbmdPYmplY3RzUG9pbnRl
ckFycmF5XSk7CisgICAgYXV0byBpbnNlcnRNZW51SXRlbSA9IG1ha2VCbG9ja1B0cihbcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB3ZWFrUGFnZSA9IG1ha2VXZWFrUHRyKHBhZ2UoKSks
IGltYWdlVVJMID0gV1RGTW92ZShpbWFnZVVSTCksIGltYWdlQml0bWFwID0gV1RGTW92ZShpbWFn
ZUJpdG1hcCksIHJldmVhbEltYWdlSXRlbSA9IFdURk1vdmUocmV2ZWFsSW1hZ2VJdGVtKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgaXRlbXNSZW1haW5p
bmcgPSBmaWx0ZXJlZEl0ZW1zLnNpemUoKSwgbWVudSA9IFdURk1vdmUobWVudSksIHNwYXJzZU1l
bnVJdGVtc10oTlNNZW51SXRlbSAqaXRlbSwgTlNVSW50ZWdlciBpbmRleCkgbXV0YWJsZSB7Cisg
ICAgICAgIEFTU0VSVChpbmRleCA8IFtzcGFyc2VNZW51SXRlbXMgY291bnRdKTsKKyAgICAgICAg
QVNTRVJUKCFbc3BhcnNlTWVudUl0ZW1zIHBvaW50ZXJBdEluZGV4OmluZGV4XSk7CisgICAgICAg
IFtzcGFyc2VNZW51SXRlbXMgcmVwbGFjZVBvaW50ZXJBdEluZGV4OmluZGV4IHdpdGhQb2ludGVy
Oml0ZW1dOworICAgICAgICBpZiAoLS1pdGVtc1JlbWFpbmluZykKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBbbWVudSBzZXRJdGVtQXJyYXk6W3NwYXJzZU1lbnVJdGVtcyBhbGxPYmpl
Y3RzXV07CisKKyAgICAgICAgYXV0byBwYWdlID0gbWFrZVJlZlB0cih3ZWFrUGFnZS5nZXQoKSk7
CisgICAgICAgIGlmIChyZXZlYWxJbWFnZUl0ZW0gJiYgcGFnZSAmJiBpbWFnZUJpdG1hcCkgewor
I2lmIEVOQUJMRShJTUFHRV9FWFRSQUNUSU9OKQorICAgICAgICAgICAgcGFnZS0+Y29tcHV0ZUNh
blJldmVhbEltYWdlKGltYWdlVVJMLCAqaW1hZ2VCaXRtYXAsIFtwcm90ZWN0ZWRUaGlzID0gV1RG
TW92ZShwcm90ZWN0ZWRUaGlzKSwgcmV2ZWFsSW1hZ2VJdGVtID0gV1RGTW92ZSgqcmV2ZWFsSW1h
Z2VJdGVtKV0gKGJvb2wgY2FuUmV2ZWFsSW1hZ2UpIG11dGFibGUgeworICAgICAgICAgICAgICAg
IGlmICghY2FuUmV2ZWFsSW1hZ2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgICAgIGF1dG8gbnNNZW51SXRlbSA9IGNyZWF0ZU1lbnVBY3Rpb25JdGVtKHJldmVh
bEltYWdlSXRlbSk7CisgICAgICAgICAgICAgICAgW3Byb3RlY3RlZFRoaXMtPm1fbWVudSBhZGRJ
dGVtOm5zTWVudUl0ZW0uZ2V0KCldOworICAgICAgICAgICAgfSk7CisjZWxzZQorICAgICAgICAg
ICAgVU5VU0VEX1BBUkFNKGltYWdlVVJMKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIobWVudS5nZXQoKSk7CisgICAgfSk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGZpbHRlcmVkSXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgW3NwYXJz
ZU1lbnVJdGVtcyBhZGRQb2ludGVyOm51bGxwdHJdOworICAgICAgICBnZXRDb250ZXh0TWVudUl0
ZW0oZmlsdGVyZWRJdGVtc1tpXSwgW2luc2VydE1lbnVJdGVtLCBpXShOU01lbnVJdGVtICptZW51
SXRlbSkgeworICAgICAgICAgICAgaW5zZXJ0TWVudUl0ZW0obWVudUl0ZW0sIGkpOworICAgICAg
ICB9KTsKKyAgICB9Cit9CisKIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6Z2V0Q29udGV4
dE1lbnVJdGVtKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmIGl0ZW0sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoTlNNZW51SXRlbSAqKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykKQEAgLTUyNywyMSArNTgxLDggQEAgdm9pZCBXZWJDb250
ZXh0TWVudVByb3h5TWFjOjpnZXRDb250ZXh0TWVudUl0ZW0oY29uc3QgV2ViQ29udGV4dE1lbnVJ
dGVtRGF0YSYgaXQKICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgY2FzZSBXZWJDb3Jl
OjpBY3Rpb25UeXBlOgogICAgIGNhc2UgV2ViQ29yZTo6Q2hlY2thYmxlQWN0aW9uVHlwZTogewot
ICAgICAgICBhdXRvIG1lbnVJdGVtID0gYWRvcHROUyhbW05TTWVudUl0ZW0gYWxsb2NdIGluaXRX
aXRoVGl0bGU6aXRlbS50aXRsZSgpIGFjdGlvbjpAc2VsZWN0b3IoZm9yd2FyZENvbnRleHRNZW51
QWN0aW9uOikga2V5RXF1aXZhbGVudDpAIiJdKTsKLQotICAgICAgICBbbWVudUl0ZW0gc2V0VGFn
Oml0ZW0uYWN0aW9uKCldOwotICAgICAgICBbbWVudUl0ZW0gc2V0RW5hYmxlZDppdGVtLmVuYWJs
ZWQoKV07Ci0gICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTppdGVtLmNoZWNrZWQoKSA/IE5TQ29u
dHJvbFN0YXRlVmFsdWVPbiA6IE5TQ29udHJvbFN0YXRlVmFsdWVPZmZdOwotICAgICAgICBbbWVu
dUl0ZW0gc2V0SW5kZW50YXRpb25MZXZlbDppdGVtLmluZGVudGF0aW9uTGV2ZWwoKV07Ci0gICAg
ICAgIFttZW51SXRlbSBzZXRUYXJnZXQ6W1dLTWVudVRhcmdldCBzaGFyZWRNZW51VGFyZ2V0XV07
Ci0gICAgICAgIFttZW51SXRlbSBzZXRJZGVudGlmaWVyOm1lbnVJdGVtSWRlbnRpZmllcihpdGVt
LmFjdGlvbigpKV07Ci0KLSAgICAgICAgaWYgKGl0ZW0udXNlckRhdGEoKSkgewotICAgICAgICAg
ICAgYXV0byB3cmFwcGVyID0gYWRvcHROUyhbW1dLVXNlckRhdGFXcmFwcGVyIGFsbG9jXSBpbml0
V2l0aFVzZXJEYXRhOml0ZW0udXNlckRhdGEoKV0pOwotICAgICAgICAgICAgW21lbnVJdGVtIHNl
dFJlcHJlc2VudGVkT2JqZWN0OndyYXBwZXIuZ2V0KCldOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIobWVudUl0ZW0uZ2V0KCkpOworICAgICAgICBhdXRvIG5zTWVudUl0
ZW0gPSBjcmVhdGVNZW51QWN0aW9uSXRlbShpdGVtKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIobnNNZW51SXRlbS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425334</attachid>
            <date>2021-04-06 16:14:36 -0700</date>
            <delta_ts>2021-04-06 16:54:13 -0700</delta_ts>
            <desc>Address some comments</desc>
            <filename>bug-224126-20210406161435.patch</filename>
            <type>text/plain</type>
            <size>4060</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNlMjkzZTg4Y2Q1YmNmZGYx
NDAxMDVlNzM1YmNjMjZlZjg4MjIxOTMuLmRjNzBjYzY2Y2FjZGRlMTU3MDVmYTM5NmNlMGM4MGUw
MWJlNjBiNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDQtMDYgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkcmVzcyBzb21lIHBv
c3QtbGFuZGluZyBjb21tZW50cyBhZnRlciByMjc1NDkxCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQxMjYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRyZXNzIHNvbWUgbWlub3IgZmVlZGJhY2s7IG5v
IGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4
dE1lbnVQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlTWVudUFjdGlvbkl0ZW0p
OgorCisgICAgICAgIFJlbW92ZSBhbiB1bm5lY2Vzc2FyeSBsb2NhbCB2YXJpYWJsZS4KKworICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpnZXRDb250ZXh0TWVudUZyb21J
dGVtcyk6CisKKyAgICAgICAgVXNlIGBXVEY6OlVSTGAgaW5zdGVhZCBvZiBgTlNVUkxgLCBhbmQg
cmVtb3ZlIGEgaGVhZGVyIGltcG9ydCB0aGF0IGlzIG5vdyB1bm5lY2Vzc2FyeS4KKworICAgICAg
ICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpnZXRDb250ZXh0TWVudUl0ZW0pOgor
CisgICAgICAgIFJlbW92ZSBzb21lIG1vcmUgdW5uZWNlc3NhcnkgbG9jYWwgdmFyaWFibGVzLgor
CiAyMDIxLTA0LTA2ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJFR1JFU1NJT04gKHIyNzQ2MTApOiBVbmFibGUgdG8gZHJhZyBpbWFnZXMgd2hlbiBp
bWFnZSBleHRyYWN0aW9uIGlzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0KaW5kZXggNDkxNDdlMDQ2MmVjZWIw
NDFmYmFjMjBjYmQzNzc2MDQ2MmYwNDY1Yy4uNThiM2EzM2MyOWU5OWIzOGYwZTIzNDQ1ZDFjYTcy
YmNkYzc1Yjc0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkNv
bnRleHRNZW51UHJveHlNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dl
YkNvbnRleHRNZW51UHJveHlNYWMubW0KQEAgLTM0LDcgKzM0LDYgQEAKICNpbXBvcnQgIlNlcnZp
Y2VzQ29udHJvbGxlci5oIgogI2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW1wb3J0ICJX
S01lbnVJdGVtSWRlbnRpZmllcnNQcml2YXRlLmgiCi0jaW1wb3J0ICJXS05TVVJMRXh0cmFzLmgi
CiAjaW1wb3J0ICJXS1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUuaCIKICNpbXBvcnQgIldl
YkNvbnRleHRNZW51SXRlbS5oIgogI2ltcG9ydCAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgpA
QCAtNDgwLDEwICs0NzksOCBAQCBzdGF0aWMgUmV0YWluUHRyPE5TTWVudUl0ZW0+IGNyZWF0ZU1l
bnVBY3Rpb25JdGVtKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmCiAgICAgW21lbnVJdGVt
IHNldFRhcmdldDpbV0tNZW51VGFyZ2V0IHNoYXJlZE1lbnVUYXJnZXRdXTsKICAgICBbbWVudUl0
ZW0gc2V0SWRlbnRpZmllcjptZW51SXRlbUlkZW50aWZpZXIoaXRlbS5hY3Rpb24oKSldOwogCi0g
ICAgaWYgKGl0ZW0udXNlckRhdGEoKSkgewotICAgICAgICBhdXRvIHdyYXBwZXIgPSBhZG9wdE5T
KFtbV0tVc2VyRGF0YVdyYXBwZXIgYWxsb2NdIGluaXRXaXRoVXNlckRhdGE6aXRlbS51c2VyRGF0
YSgpXSk7Ci0gICAgICAgIFttZW51SXRlbSBzZXRSZXByZXNlbnRlZE9iamVjdDp3cmFwcGVyLmdl
dCgpXTsKLSAgICB9CisgICAgaWYgKGl0ZW0udXNlckRhdGEoKSkKKyAgICAgICAgW21lbnVJdGVt
IHNldFJlcHJlc2VudGVkT2JqZWN0OmFkb3B0TlMoW1tXS1VzZXJEYXRhV3JhcHBlciBhbGxvY10g
aW5pdFdpdGhVc2VyRGF0YTppdGVtLnVzZXJEYXRhKCldKS5nZXQoKV07CiAKICAgICByZXR1cm4g
bWVudUl0ZW07CiB9CkBAIC01MzAsNyArNTI3LDcgQEAgdm9pZCBXZWJDb250ZXh0TWVudVByb3h5
TWFjOjpnZXRDb250ZXh0TWVudUZyb21JdGVtcyhjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnUK
ICAgICB9CiAjZW5kaWYKIAotICAgIGF1dG8gaW1hZ2VVUkwgPSBVUkwoW05TVVJMIF93ZWJfVVJM
V2l0aFdURlN0cmluZzptX2NvbnRleHQud2ViSGl0VGVzdFJlc3VsdERhdGEoKS5hYnNvbHV0ZUlt
YWdlVVJMXSk7CisgICAgYXV0byBpbWFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIG1fY29udGV4dC53
ZWJIaXRUZXN0UmVzdWx0RGF0YSgpLmFic29sdXRlSW1hZ2VVUkwgfTsKICAgICBhdXRvIGltYWdl
Qml0bWFwID0gbV9jb250ZXh0LndlYkhpdFRlc3RSZXN1bHREYXRhKCkuaW1hZ2VCaXRtYXA7CiAK
ICAgICBhdXRvIHNwYXJzZU1lbnVJdGVtcyA9IHJldGFpblB0cihbTlNQb2ludGVyQXJyYXkgc3Ry
b25nT2JqZWN0c1BvaW50ZXJBcnJheV0pOwpAQCAtNTQ3LDExICs1NDQsOCBAQCB2b2lkIFdlYkNv
bnRleHRNZW51UHJveHlNYWM6OmdldENvbnRleHRNZW51RnJvbUl0ZW1zKGNvbnN0IFZlY3RvcjxX
ZWJDb250ZXh0TWVudQogICAgICAgICBpZiAocmV2ZWFsSW1hZ2VJdGVtICYmIHBhZ2UgJiYgaW1h
Z2VCaXRtYXApIHsKICNpZiBFTkFCTEUoSU1BR0VfRVhUUkFDVElPTikKICAgICAgICAgICAgIHBh
Z2UtPmNvbXB1dGVDYW5SZXZlYWxJbWFnZShpbWFnZVVSTCwgKmltYWdlQml0bWFwLCBbcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHJldmVhbEltYWdlSXRlbSA9IFdURk1v
dmUoKnJldmVhbEltYWdlSXRlbSldIChib29sIGNhblJldmVhbEltYWdlKSBtdXRhYmxlIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWNhblJldmVhbEltYWdlKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBhdXRvIG5zTWVudUl0ZW0gPSBjcmVhdGVNZW51QWN0
aW9uSXRlbShyZXZlYWxJbWFnZUl0ZW0pOwotICAgICAgICAgICAgICAgIFtwcm90ZWN0ZWRUaGlz
LT5tX21lbnUgYWRkSXRlbTpuc01lbnVJdGVtLmdldCgpXTsKKyAgICAgICAgICAgICAgICBpZiAo
Y2FuUmV2ZWFsSW1hZ2UpCisgICAgICAgICAgICAgICAgICAgIFtwcm90ZWN0ZWRUaGlzLT5tX21l
bnUgYWRkSXRlbTpjcmVhdGVNZW51QWN0aW9uSXRlbShyZXZlYWxJbWFnZUl0ZW0pLmdldCgpXTsK
ICAgICAgICAgICAgIH0pOwogI2Vsc2UKICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpbWFnZVVS
TCk7CkBAIC01ODAsMTEgKzU3NCw5IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6Z2V0
Q29udGV4dE1lbnVJdGVtKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmIGl0CiAKICAgICBz
d2l0Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgY2FzZSBXZWJDb3JlOjpBY3Rpb25UeXBlOgotICAg
IGNhc2UgV2ViQ29yZTo6Q2hlY2thYmxlQWN0aW9uVHlwZTogewotICAgICAgICBhdXRvIG5zTWVu
dUl0ZW0gPSBjcmVhdGVNZW51QWN0aW9uSXRlbShpdGVtKTsKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobnNNZW51SXRlbS5nZXQoKSk7CisgICAgY2FzZSBXZWJDb3JlOjpDaGVja2FibGVBY3Rp
b25UeXBlOgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjcmVhdGVNZW51QWN0aW9uSXRlbShp
dGVtKS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBjYXNlIFdlYkNvcmU6
OlNlcGFyYXRvclR5cGU6CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5TTWVudUl0ZW0uc2Vw
YXJhdG9ySXRlbSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>