<?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>225900</bug_id>
          
          <creation_ts>2021-05-17 17:39:20 -0700</creation_ts>
          <short_desc>[Modern Media Controls] give more weight to tracks that are in non-default languages configured by the user</short_desc>
          <delta_ts>2021-05-20 12:48:26 -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>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>MOVED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225992</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225993</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225994</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225995</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=226038</see_also>
          <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="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hi</cc>
    
    <cc>jer.noble</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1760974</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-17 17:39:20 -0700</bug_when>
    <thetext>e.g. if the user has both english (default) and spanish (alternate) languages configured, tracks that are in spanish should be weighted higher than french</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760975</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-17 17:39:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/78130864&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760985</commentid>
    <comment_count>2</comment_count>
      <attachid>428903</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-17 18:20:08 -0700</bug_when>
    <thetext>Created attachment 428903
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761009</commentid>
    <comment_count>3</comment_count>
      <attachid>428903</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2021-05-17 19:42:30 -0700</bug_when>
    <thetext>Comment on attachment 428903
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        that are in Spanish should be weighted higher than French.

I guess you mean &quot;English&quot; here. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761010</commentid>
    <comment_count>4</comment_count>
      <attachid>428903</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-17 19:46:44 -0700</bug_when>
    <thetext>Comment on attachment 428903
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        that are in Spanish should be weighted higher than French.
&gt; 
&gt; I guess you mean &quot;English&quot; here. :-)

Actually no.  Well yes.  Kinda.  English would be ranked the highest.  Prior to this change, Spanish would be ranked lower than French since it&apos;s alphabetically after.  This change makes it so that Spanish would rank higher than French (but still lower than English) because it&apos;s a non-default configured language.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761067</commentid>
    <comment_count>5</comment_count>
      <attachid>428903</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-18 00:22:52 -0700</bug_when>
    <thetext>Comment on attachment 428903
Patch

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

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:629
&gt; +    RetainPtr&lt;CFLocaleRef&gt; currentLocale = adoptCF(CFLocaleCreate(kCFAllocatorDefault, defaultLanguage.createCFString().get()));

auto

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:630
&gt;      RetainPtr&lt;CFStringRef&gt; localeIdentifier = adoptCF(CFLocaleCreateCanonicalLocaleIdentifierFromString(kCFAllocatorDefault, trackLanguageIdentifier.createCFString().get()));

auto

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:631
&gt;      RetainPtr&lt;CFStringRef&gt; languageCF = adoptCF(CFLocaleCopyDisplayNameForPropertyValue(currentLocale.get(), kCFLocaleLanguageCode, localeIdentifier.get()));

auto

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:670
&gt; +            const auto&amp; textTrack = downcast&lt;TextTrack&gt;(track);

Just auto&amp; is fine. It will be const&amp; without explicitly writing that since track is a const&amp;.

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:770
&gt; +        bool aIsPreferredLanguage = !codePointCompare(aLanguageDisplayName, preferredLanguageDisplayName);
&gt; +        bool bIsPreferredLanguage = !codePointCompare(bLanguageDisplayName, preferredLanguageDisplayName);

There is no need to use !codePointCompare to check if two strings are exactly equal. The &quot;==&quot; operator does that and is more efficient than codePointCompare. The codePointCompare function is for operations like sorting, when we want to sort by code points and not in a language sensitive way.

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:772
&gt; +        if (aIsPreferredLanguage != bIsPreferredLanguage)
&gt; +            return aIsPreferredLanguage;

This says that preferred languages should be sorted in the order of the preferredLanguages array. Is that what we want?

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:792
&gt; +    if (auto trackDisplayComparison = codePointCompare(displayNameForTrack(&amp;a), displayNameForTrack(&amp;b)))

It’s not appropriate to use codePointCompare for sorting user-visible display names. The whole point of codePointCompare doesn’t do the language-rule-sensitive ordering we’d want for user interface. To compare things you’d see in a UI we’d want a compare designed for that purpose. In WTF we have Collator::collate for this sort of use, although I don’t see much use of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761472</commentid>
    <comment_count>6</comment_count>
      <attachid>429031</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-18 22:42:31 -0700</bug_when>
    <thetext>Created attachment 429031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761624</commentid>
    <comment_count>7</comment_count>
      <attachid>429031</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-19 11:26:51 -0700</bug_when>
    <thetext>Comment on attachment 429031
Patch

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

&gt; Source/WebCore/page/CaptionUserPreferences.cpp:241
&gt; +    Collator collator;

Thanks for taking my pointer: Does this get the correct language for the collator? Does it run in the web process? If so, how does it inherit the appropriate language from the UI process?

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:770
&gt; +    for (auto&amp; preferredLanguage : userPreferredLanguages()) {
&gt; +        String preferredLanguageDisplayName = displayNameForLanguageLocale(languageIdentifier(preferredLanguage));
&gt; +        bool aIsPreferredLanguage = aLanguageDisplayName == preferredLanguageDisplayName;
&gt; +        bool bIsPreferredLanguage = bLanguageDisplayName == preferredLanguageDisplayName;
&gt; +        if (aIsPreferredLanguage != bIsPreferredLanguage)
&gt; +            return aIsPreferredLanguage;
&gt; +    }

I don’t understand the rule very well.

Is the idea that we sort the preferred languages in the order they appear in the userPreferredLanguages()? If so, then I think the code implements that rule.

Or maybe we sort all the preferred languages to the top of the menu, but we want them in an appropriate order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761759</commentid>
    <comment_count>8</comment_count>
      <attachid>429031</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-19 16:26:11 -0700</bug_when>
    <thetext>Comment on attachment 429031
Patch

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

&gt;&gt; Source/WebCore/page/CaptionUserPreferences.cpp:241
&gt;&gt; +    Collator collator;
&gt; 
&gt; Thanks for taking my pointer: Does this get the correct language for the collator? Does it run in the web process? If so, how does it inherit the appropriate language from the UI process?

Thanks for the suggestion!  Switching my language to Spanish in the Language &amp; Region view of System Preferences does cause `Collator` to use &quot;es-US&quot;, so I think so?  FWIW the only other usage I see of it is also inside WebCore (`xsltUnicodeSortFunction`).

&gt;&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:770
&gt;&gt; +    }
&gt; 
&gt; I don’t understand the rule very well.
&gt; 
&gt; Is the idea that we sort the preferred languages in the order they appear in the userPreferredLanguages()? If so, then I think the code implements that rule.
&gt; 
&gt; Or maybe we sort all the preferred languages to the top of the menu, but we want them in an appropriate order.

I think I actually misread my own logging when I was writing this change.  I thought `userPreferredLanguages` would return the list in the Language &amp; Region view of System Preferences, but it actually just appears to return all the different variants for only the select item (e.g. I&apos;d added Spanish as my new primary language and misread the output `[&quot;es-US&quot;, &quot;es&quot;]`).  As such, I&apos;m going to close this bug and make new bugs for the changes I still think we should do.

FWIW my goal was to prefer things that are in the list over things that are not (as well as preferring things earlier/higher in the last than later/lower) as previously we only cared about the currently selected language.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762102</commentid>
    <comment_count>9</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-20 12:48:20 -0700</bug_when>
    <thetext>I&apos;ll handle this in &lt;https://webkit.org/b/226038&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428903</attachid>
            <date>2021-05-17 18:20:08 -0700</date>
            <delta_ts>2021-05-18 22:42:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225900-20210517192007.patch</filename>
            <type>text/plain</type>
            <size>24546</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1ZTdlZGUxMWI1NWI1M2ZhZDU0Y2Q2OWIwMjk3ZjhjNDc5NzRmOWM4Li5l
NDA1ZjRkZjk5NDQ5ODJjNDIxOGRiMDI5MmI4OTE2OGJhY2ViMjI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMjEtMDUtMTcgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFtNb2Rlcm4gTWVkaWEgQ29udHJvbHNdIGdpdmUgbW9yZSB3ZWlnaHQgdG8g
dHJhY2tzIHRoYXQgYXJlIGluIG5vbi1kZWZhdWx0IGxhbmd1YWdlcyBjb25maWd1cmVkIGJ5IHRo
ZSB1c2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjU5MDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc4MTMwODY0PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHRoZSB1c2VyIGhhcyBib3RoIEVu
Z2xpc2ggKGRlZmF1bHQpIGFuZCBTcGFuaXNoIChhbHRlcm5hdGUpIGxhbmd1YWdlcyBjb25maWd1
cmVkLCB0cmFja3MKKyAgICAgICAgdGhhdCBhcmUgaW4gU3BhbmlzaCBzaG91bGQgYmUgd2VpZ2h0
ZWQgaGlnaGVyIHRoYW4gRnJlbmNoLgorCisgICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5oOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUY6OmJ1aWxkRGlzcGxheVN0cmluZ0ZvclRyYWNrQmFzZSBjb25zdCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmRpc3BsYXlOYW1lRm9y
VHJhY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUY6OmNvbXBhcmVUZXh0VHJhY2tzIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6YnVpbGREaXNwbGF5U3RyaW5nRm9yVHJhY2tCYXNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRyYWNrRGlzcGxheU5hbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6dGV4dFRyYWNrQ29tcGFyZSk6IERlbGV0ZWQuCisgICAgICAg
IEluIGFkZGl0aW9uIHRvIHRoZSBgV1RGOjpkZWZhdWx0TGFuZ3VhZ2VgLCBhbHNvIGNvbnNpZGVy
IGFsbCBpdGVtcyBpbiBgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OnByZWZlcnJlZExh
bmd1YWdlc2AuCisKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXMuaDoKKyAg
ICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dHJhY2tEaXNwbGF5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZl
cmVuY2VzOjpkaXNwbGF5TmFtZUZvclRyYWNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6Om1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2sgY29uc3Qp
OgorICAgICAgICBNYWtlIG1vcmUgcGFyYW1ldGVycyBgY29uc3RgLgorCisgICAgICAgICogcGxh
dGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oOgorICAgICAgICAqIHBsYXRmb3JtL0xvY2FsaXplZFN0
cmluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3VidGl0bGVzVGV4dFRyYWNrV2l0aG91dExh
YmVsTWVudUl0ZW1UZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjYXB0aW9uc1RleHRU
cmFja1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZGVzY3JpcHRpb25zVGV4dFRyYWNrV2l0aG91dExhYmVsTWVudUl0ZW1UZXh0KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjaGFwdGVyc1RleHRUcmFja1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4
dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWV0YWRhdGFUZXh0VHJhY2tXaXRob3V0TGFi
ZWxNZW51SXRlbVRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF1ZGlvVHJhY2tXaXRo
b3V0TGFiZWxNZW51SXRlbVRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnZpZGVvVHJh
Y2tXaXRob3V0TGFiZWxNZW51SXRlbVRleHQpOiBBZGRlZC4KKyAgICAgICAgKiBlbi5scHJvai9M
b2NhbGl6YWJsZS5zdHJpbmdzOgorCiAyMDIxLTA1LTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTnVsbCBjaGVjayBtX3Jlc291cmNlIGlu
IFN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VuLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MgYi9Tb3VyY2UvV2ViQ29yZS9l
bi5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzCmluZGV4IDlhZTQxMzcxNTI4OGE2Mjk5OWY1ZGM0
YzNlNjZmMTVjMmVkYzVkMTMuLjc3YWE5OWMwN2QxYTBlZmZjYzQxNDY4ZjEwNDhjNTFlMjBiNWFm
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VuLmxwcm9qL0xvY2FsaXphYmxlLnN0cmlu
Z3MKKysrIGIvU291cmNlL1dlYkNvcmUvZW4ubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncwpAQCAt
MjUsOSArMjUsMjEgQEAKIC8qIFRleHQgdHJhY2sgY29udGFpbnMgQXVkaW8gRGVzY3JpcHRpb25z
ICovCiAiJUAgQUQiID0gIiVAIEFEIjsKIAorLyogQXVkaW8gdHJhY2sgZGlzcGxheSBuYW1lIGZv
cm1hdCB0aGF0IGluY2x1ZGVzIHRoZSBsYW5ndWFnZSBhbmQvb3IgbG9jYWxlIChlLmcuICdFbmds
aXNoIEF1ZGlvJykuICovCisiJUAgQXVkaW8iID0gIiVAIEF1ZGlvIjsKKwogLyogVGV4dCB0cmFj
ayBjb250YWlucyBjbG9zZWQgY2FwdGlvbnMgKi8KICIlQCBDQyIgPSAiJUAgQ0MiOwogCisvKiBD
YXB0aW9ucyB0ZXh0IHRyYWNrIGRpc3BsYXkgbmFtZSBmb3JtYXQgdGhhdCBpbmNsdWRlcyB0aGUg
bGFuZ3VhZ2UgYW5kL29yIGxvY2FsZSAoZS5nLiAnRW5nbGlzaCBDYXB0aW9ucycpLiAqLworIiVA
IENhcHRpb25zIiA9ICIlQCBDYXB0aW9ucyI7CisKKy8qIENoYXB0ZXJzIHRleHQgdHJhY2sgZGlz
cGxheSBuYW1lIGZvcm1hdCB0aGF0IGluY2x1ZGVzIHRoZSBsYW5ndWFnZSBhbmQvb3IgbG9jYWxl
IChlLmcuICdFbmdsaXNoIENoYXB0ZXJzJykuICovCisiJUAgQ2hhcHRlcnMiID0gIiVAIENoYXB0
ZXJzIjsKKworLyogRGVzY3JpcHRpb25zIHRleHQgdHJhY2sgZGlzcGxheSBuYW1lIGZvcm1hdCB0
aGF0IGluY2x1ZGVzIHRoZSBsYW5ndWFnZSBhbmQvb3IgbG9jYWxlIChlLmcuICdFbmdsaXNoIERl
c2NyaXB0aW9ucycpLiAqLworIiVAIERlc2NyaXB0aW9ucyIgPSAiJUAgRGVzY3JpcHRpb25zIjsK
KwogLyogVGV4dCB0cmFjayBjb250YWlucyBzaW1wbGlmaWVkICgzcmQgZ3JhZGUgbGV2ZWwpIHN1
YnRpdGxlcyAqLwogIiVAIEVhc3kgUmVhZGVyIiA9ICIlQCBFYXN5IFJlYWRlciI7CiAKQEAgLTM3
LDYgKzQ5LDkgQEAKIC8qIHZpc2libGUgbmFtZSBvZiB0aGUgR1BVIHByb2Nlc3MuIFRoZSBhcmd1
bWVudCBpcyB0aGUgYXBwbGljYXRpb24gbmFtZS4gKi8KICIlQCBHcmFwaGljcyBhbmQgTWVkaWEi
ID0gIiVAIEdyYXBoaWNzIGFuZCBNZWRpYSI7CiAKKy8qIE1ldGFkYXRhIHRleHQgdHJhY2sgZGlz
cGxheSBuYW1lIGZvcm1hdCB0aGF0IGluY2x1ZGVzIHRoZSBsYW5ndWFnZSBhbmQvb3IgbG9jYWxl
IChlLmcuICdFbmdsaXNoIE1ldGFkYXRzJykuICovCisiJUAgTWV0YWRhdGEiID0gIiVAIE1ldGFk
YXRhIjsKKwogLyogdmlzaWJsZSBuYW1lIG9mIHRoZSBuZXR3b3JrIHByb2Nlc3MuIFRoZSBhcmd1
bWVudCBpcyB0aGUgYXBwbGljYXRpb24gbmFtZS4gKi8KICIlQCBOZXR3b3JraW5nIiA9ICIlQCBO
ZXR3b3JraW5nIjsKIApAQCAtNDYsNiArNjEsMTIgQEAKIC8qIFZpc2libGUgbmFtZSBvZiBTZXJ2
aWNlIFdvcmtlciBwcm9jZXNzLiBUaGUgYXJndW1lbnQgaXMgdGhlIGFwcGxpY2F0aW9uIG5hbWUu
ICovCiAiJUAgU2VydmljZSBXb3JrZXIgKCVAKSIgPSAiJUAgU2VydmljZSBXb3JrZXIgKCVAKSI7
CiAKKy8qIFN1YnRpdGxlcyB0ZXh0IHRyYWNrIGRpc3BsYXkgbmFtZSBmb3JtYXQgdGhhdCBpbmNs
dWRlcyB0aGUgbGFuZ3VhZ2UgYW5kL29yIGxvY2FsZSAoZS5nLiAnRW5nbGlzaCBTdWJ0aXRsZXMn
KS4gKi8KKyIlQCBTdWJ0aXRsZXMiID0gIiVAIFN1YnRpdGxlcyI7CisKKy8qIFZpZGVvIHRyYWNr
IGRpc3BsYXkgbmFtZSBmb3JtYXQgdGhhdCBpbmNsdWRlcyB0aGUgbGFuZ3VhZ2UgYW5kL29yIGxv
Y2FsZSAoZS5nLiAnRW5nbGlzaCBWaWRlbycpLiAqLworIiVAIFZpZGVvIiA9ICIlQCBWaWRlbyI7
CisKIC8qIHZpc2libGUgbmFtZSBvZiB0aGUgV2ViQXV0aG4gcHJvY2Vzcy4gVGhlIGFyZ3VtZW50
IGlzIHRoZSBhcHBsaWNhdGlvbiBuYW1lLiAqLwogIiVAIFdlYiBBdXRoZW50aWNhdGlvbiIgPSAi
JUAgV2ViIEF1dGhlbnRpY2F0aW9uIjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlv
blVzZXJQcmVmZXJlbmNlcy5jcHAKaW5kZXggOWRlMWI4NTJlOTUyMjNiNjY1NTYxNzIyMzhhNzZl
ZWIyODRhMmYwZS4uNjhlODVjYjI1ZThiMGY0MjJlZTFhY2Q3NTMwZjM1YWY5MzNkMWE1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXMuY3BwCkBAIC0x
OTYsNyArMTk2LDcgQEAgVmVjdG9yPFN0cmluZz4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6cHJl
ZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3MoKSBjb25zdAogICAgIHJldHVybiBjaGFyYWN0ZXJp
c3RpY3M7CiB9CiAKLXN0YXRpYyBTdHJpbmcgdHJhY2tEaXNwbGF5TmFtZShUZXh0VHJhY2sqIHRy
YWNrKQorc3RhdGljIFN0cmluZyB0cmFja0Rpc3BsYXlOYW1lKGNvbnN0IFRleHRUcmFjayogdHJh
Y2spCiB7CiAgICAgaWYgKHRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgp
KQogICAgICAgICByZXR1cm4gdGV4dFRyYWNrT2ZmTWVudUl0ZW1UZXh0KCk7CkBAIC0yMTAsMTIg
KzIxMCwxMiBAQCBzdGF0aWMgU3RyaW5nIHRyYWNrRGlzcGxheU5hbWUoVGV4dFRyYWNrKiB0cmFj
aykKICAgICByZXR1cm4gdHJhY2stPnZhbGlkQkNQNDdMYW5ndWFnZSgpOwogfQogCi1TdHJpbmcg
Q2FwdGlvblVzZXJQcmVmZXJlbmNlczo6ZGlzcGxheU5hbWVGb3JUcmFjayhUZXh0VHJhY2sqIHRy
YWNrKSBjb25zdAorU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OmRpc3BsYXlOYW1lRm9y
VHJhY2soY29uc3QgVGV4dFRyYWNrKiB0cmFjaykgY29uc3QKIHsKICAgICByZXR1cm4gdHJhY2tE
aXNwbGF5TmFtZSh0cmFjayk7CiB9CiAKLU1lZGlhU2VsZWN0aW9uT3B0aW9uIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXM6Om1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2soVGV4dFRyYWNrKiB0cmFj
aykgY29uc3QKK01lZGlhU2VsZWN0aW9uT3B0aW9uIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6Om1l
ZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2soY29uc3QgVGV4dFRyYWNrKiB0cmFjaykgY29uc3QK
IHsKICAgICBhdXRvIHR5cGUgPSBNZWRpYVNlbGVjdGlvbk9wdGlvbjo6VHlwZTo6UmVndWxhcjsK
ICAgICBpZiAodHJhY2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpCkBAIC0y
NDksNyArMjQ5LDcgQEAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBDYXB0aW9uVXNlclByZWZl
cmVuY2VzOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51KFRleHRUcmEKICAgICByZXR1cm4gdHJhY2tz
Rm9yTWVudTsKIH0KIAotc3RhdGljIFN0cmluZyB0cmFja0Rpc3BsYXlOYW1lKEF1ZGlvVHJhY2sq
IHRyYWNrKQorc3RhdGljIFN0cmluZyB0cmFja0Rpc3BsYXlOYW1lKGNvbnN0IEF1ZGlvVHJhY2sq
IHRyYWNrKQogewogICAgIGlmICh0cmFjay0+bGFiZWwoKS5pc0VtcHR5KCkgJiYgdHJhY2stPnZh
bGlkQkNQNDdMYW5ndWFnZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGF1ZGlvVHJhY2tO
b0xhYmVsVGV4dCgpOwpAQCAtMjU4LDEyICsyNTgsMTIgQEAgc3RhdGljIFN0cmluZyB0cmFja0Rp
c3BsYXlOYW1lKEF1ZGlvVHJhY2sqIHRyYWNrKQogICAgIHJldHVybiB0cmFjay0+dmFsaWRCQ1A0
N0xhbmd1YWdlKCk7CiB9CiAKLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpkaXNwbGF5
TmFtZUZvclRyYWNrKEF1ZGlvVHJhY2sqIHRyYWNrKSBjb25zdAorU3RyaW5nIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXM6OmRpc3BsYXlOYW1lRm9yVHJhY2soY29uc3QgQXVkaW9UcmFjayogdHJhY2sp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHRyYWNrRGlzcGxheU5hbWUodHJhY2spOwogfQogCi1NZWRp
YVNlbGVjdGlvbk9wdGlvbiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjptZWRpYVNlbGVjdGlvbk9w
dGlvbkZvclRyYWNrKEF1ZGlvVHJhY2sqIHRyYWNrKSBjb25zdAorTWVkaWFTZWxlY3Rpb25PcHRp
b24gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6bWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayhj
b25zdCBBdWRpb1RyYWNrKiB0cmFjaykgY29uc3QKIHsKICAgICByZXR1cm4geyBkaXNwbGF5TmFt
ZUZvclRyYWNrKHRyYWNrKSwgTWVkaWFTZWxlY3Rpb25PcHRpb246OlR5cGU6OlJlZ3VsYXIgfTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNl
cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmgKaW5kZXgg
NTg0NWIyMzkzYzM4ZGU2NmQ3YTIwODk1MGFkNjYwYTNkY2JiMzlmYS4uOTNjYWRlZWZiNGRhZWRh
N2ZkYWZhMDNkMDVhMWM4ZDJmMmM5YWNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0
aW9uVXNlclByZWZlcmVuY2VzLmgKQEAgLTg0LDEyICs4NCwxMiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldFByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWMoY29uc3QgU3RyaW5nJik7
CiAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBwcmVmZXJyZWRBdWRpb0NoYXJhY3RlcmlzdGlj
cygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWVGb3JUcmFjayhUZXh0
VHJhY2sqKSBjb25zdDsKLSAgICBNZWRpYVNlbGVjdGlvbk9wdGlvbiBtZWRpYVNlbGVjdGlvbk9w
dGlvbkZvclRyYWNrKFRleHRUcmFjayopIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGRpc3Bs
YXlOYW1lRm9yVHJhY2soY29uc3QgVGV4dFRyYWNrKikgY29uc3Q7CisgICAgTWVkaWFTZWxlY3Rp
b25PcHRpb24gbWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayhjb25zdCBUZXh0VHJhY2sqKSBj
b25zdDsKICAgICB2aXJ0dWFsIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gc29ydGVkVHJhY2tM
aXN0Rm9yTWVudShUZXh0VHJhY2tMaXN0KiwgSGFzaFNldDxUZXh0VHJhY2s6OktpbmQ+KTsKIAot
ICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lRm9yVHJhY2soQXVkaW9UcmFjayopIGNvbnN0
OwotICAgIE1lZGlhU2VsZWN0aW9uT3B0aW9uIG1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2so
QXVkaW9UcmFjayopIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lRm9yVHJh
Y2soY29uc3QgQXVkaW9UcmFjayopIGNvbnN0OworICAgIE1lZGlhU2VsZWN0aW9uT3B0aW9uIG1l
ZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2soY29uc3QgQXVkaW9UcmFjayopIGNvbnN0OwogICAg
IHZpcnR1YWwgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gc29ydGVkVHJhY2tMaXN0Rm9yTWVu
dShBdWRpb1RyYWNrTGlzdCopOwogCiAgICAgdm9pZCBzZXRQcmltYXJ5QXVkaW9UcmFja0xhbmd1
YWdlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkgeyBtX3ByaW1hcnlBdWRpb1RyYWNr
TGFuZ3VhZ2VPdmVycmlkZSA9IGxhbmd1YWdlOyAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAppbmRleCA3M2M4MDFiOTM4
YzdhOGQ4ZjRkNGQ3NTUzZWFlNmY3NTEzYTE4MTVlLi45ZTczMzlmMTNkOTNmOWRjNzhlYzg0MDM4
YjAzMTNhYmEyZmVjYmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcApAQCAtNjE5LDE4ICs2MTksMjAgQEAgc3RhdGlj
IFN0cmluZyBsYW5ndWFnZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBsYW5ndWFnZUNvZGUpCiAg
ICAgcmV0dXJuIGxvd2VyY2FzZUxhbmd1YWdlQ29kZTsKIH0KIAotc3RhdGljIHZvaWQgYnVpbGRE
aXNwbGF5U3RyaW5nRm9yVHJhY2tCYXNlKFN0cmluZ0J1aWxkZXImIGRpc3BsYXlOYW1lLCBjb25z
dCBUcmFja0Jhc2UmIHRyYWNrKQordm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6
YnVpbGREaXNwbGF5U3RyaW5nRm9yVHJhY2tCYXNlKFN0cmluZ0J1aWxkZXImIGRpc3BsYXlOYW1l
LCBjb25zdCBUcmFja0Jhc2UmIHRyYWNrKSBjb25zdAogewogICAgIFN0cmluZyBsYWJlbCA9IHRy
YWNrLmxhYmVsKCk7CiAgICAgU3RyaW5nIHRyYWNrTGFuZ3VhZ2VJZGVudGlmaWVyID0gdHJhY2su
dmFsaWRCQ1A0N0xhbmd1YWdlKCk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+IGN1cnJl
bnRMb2NhbGUgPSBhZG9wdENGKENGTG9jYWxlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRl
ZmF1bHRMYW5ndWFnZSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICBhdXRvIHByZWZl
cnJlZExhbmd1YWdlcyA9IHRoaXMtPnByZWZlcnJlZExhbmd1YWdlcygpOworICAgIGF1dG8gZGVm
YXVsdExhbmd1YWdlID0gIXByZWZlcnJlZExhbmd1YWdlcy5pc0VtcHR5KCkgPyBwcmVmZXJyZWRM
YW5ndWFnZXNbMF0gOiBlbXB0eVN0cmluZygpOworICAgIFJldGFpblB0cjxDRkxvY2FsZVJlZj4g
Y3VycmVudExvY2FsZSA9IGFkb3B0Q0YoQ0ZMb2NhbGVDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgZGVmYXVsdExhbmd1YWdlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGxvY2FsZUlkZW50aWZpZXIgPSBhZG9wdENGKENGTG9jYWxlQ3JlYXRl
Q2Fub25pY2FsTG9jYWxlSWRlbnRpZmllckZyb21TdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
dHJhY2tMYW5ndWFnZUlkZW50aWZpZXIuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwogICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gbGFuZ3VhZ2VDRiA9IGFkb3B0Q0YoQ0ZMb2NhbGVDb3B5RGlz
cGxheU5hbWVGb3JQcm9wZXJ0eVZhbHVlKGN1cnJlbnRMb2NhbGUuZ2V0KCksIGtDRkxvY2FsZUxh
bmd1YWdlQ29kZSwgbG9jYWxlSWRlbnRpZmllci5nZXQoKSkpOwogICAgIFN0cmluZyBsYW5ndWFn
ZSA9IGxhbmd1YWdlQ0YuZ2V0KCk7CiAKICAgICBpZiAoIWxhYmVsLmlzRW1wdHkoKSkgewotICAg
ICAgICBpZiAobGFuZ3VhZ2UuaXNFbXB0eSgpIHx8IGxhYmVsLmNvbnRhaW5zKGxhbmd1YWdlKSkK
KyAgICAgICAgaWYgKGxhbmd1YWdlLmlzRW1wdHkoKSB8fCBsYWJlbC5jb250YWlucyhsYW5ndWFn
ZSkgfHwgcHJlZmVycmVkTGFuZ3VhZ2VzLmNvbnRhaW5zKHRyYWNrTGFuZ3VhZ2VJZGVudGlmaWVy
KSkKICAgICAgICAgICAgIGRpc3BsYXlOYW1lLmFwcGVuZChsYWJlbCk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gbG9jYWxlRGljdCA9IGFk
b3B0Q0YoQ0ZMb2NhbGVDcmVhdGVDb21wb25lbnRzRnJvbUxvY2FsZUlkZW50aWZpZXIoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgbG9jYWxlSWRlbnRpZmllci5nZXQoKSkpOwpAQCAtNjUzLDE5ICs2NTUs
NjUgQEAgc3RhdGljIHZvaWQgYnVpbGREaXNwbGF5U3RyaW5nRm9yVHJhY2tCYXNlKFN0cmluZ0J1
aWxkZXImIGRpc3BsYXlOYW1lLCBjb25zdCBUcmEKICAgICB9IGVsc2UgewogICAgICAgICBTdHJp
bmcgbGFuZ3VhZ2VBbmRMb2NhbGUgPSBhZG9wdENGKENGTG9jYWxlQ29weURpc3BsYXlOYW1lRm9y
UHJvcGVydHlWYWx1ZShjdXJyZW50TG9jYWxlLmdldCgpLCBrQ0ZMb2NhbGVJZGVudGlmaWVyLCB0
cmFja0xhbmd1YWdlSWRlbnRpZmllci5jcmVhdGVDRlN0cmluZygpLmdldCgpKSkuZ2V0KCk7CiAg
ICAgICAgIGlmICghbGFuZ3VhZ2VBbmRMb2NhbGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgZGlz
cGxheU5hbWUuYXBwZW5kKGxhbmd1YWdlQW5kTG9jYWxlKTsKKyAgICAgICAgICAgIGxhYmVsID0g
bGFuZ3VhZ2VBbmRMb2NhbGU7CiAgICAgICAgIGVsc2UgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBkaXNwbGF5TmFtZS5hcHBlbmQobGFuZ3VhZ2UpOworICAgICAgICAgICAg
bGFiZWwgPSBsYW5ndWFnZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlzcGxheU5hbWUu
YXBwZW5kKGxvY2FsZUlkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgbGFiZWwgPSBsb2Nh
bGVJZGVudGlmaWVyLmdldCgpOworCisgICAgICAgIHN3aXRjaCAodHJhY2sudHlwZSgpKSB7Cisg
ICAgICAgIGNhc2UgVHJhY2tCYXNlOjpCYXNlVHJhY2s6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHJhY2tCYXNl
OjpUZXh0VHJhY2s6IHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHRleHRUcmFjayA9IGRvd25j
YXN0PFRleHRUcmFjaz4odHJhY2spOworICAgICAgICAgICAgc3dpdGNoICh0ZXh0VHJhY2sua2lu
ZCgpKSB7CisgICAgICAgICAgICBjYXNlIFRleHRUcmFjazo6S2luZDo6U3VidGl0bGVzOgorICAg
ICAgICAgICAgICAgIGxhYmVsID0gc3VidGl0bGVzVGV4dFRyYWNrV2l0aG91dExhYmVsTWVudUl0
ZW1UZXh0KGxhYmVsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2Fz
ZSBUZXh0VHJhY2s6OktpbmQ6OkNhcHRpb25zOgorICAgICAgICAgICAgICAgIGxhYmVsID0gY2Fw
dGlvbnNUZXh0VHJhY2tXaXRob3V0TGFiZWxNZW51SXRlbVRleHQobGFiZWwpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFRleHRUcmFjazo6S2luZDo6RGVzY3Jp
cHRpb25zOgorICAgICAgICAgICAgICAgIGxhYmVsID0gZGVzY3JpcHRpb25zVGV4dFRyYWNrV2l0
aG91dExhYmVsTWVudUl0ZW1UZXh0KGxhYmVsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgY2FzZSBUZXh0VHJhY2s6OktpbmQ6OkNoYXB0ZXJzOgorICAgICAgICAgICAg
ICAgIGxhYmVsID0gY2hhcHRlcnNUZXh0VHJhY2tXaXRob3V0TGFiZWxNZW51SXRlbVRleHQobGFi
ZWwpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFRleHRUcmFj
azo6S2luZDo6TWV0YWRhdGE6CisgICAgICAgICAgICAgICAgbGFiZWwgPSBtZXRhZGF0YVRleHRU
cmFja1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4dChsYWJlbCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIGNhc2UgVGV4dFRyYWNrOjpLaW5kOjpGb3JjZWQ6CisgICAgICAg
ICAgICAgICAgbGFiZWwgPSBmb3JjZWRUcmFja01lbnVJdGVtVGV4dChsYWJlbCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgVHJhY2tCYXNlOjpBdWRpb1RyYWNrOgorICAgICAgICAgICAg
bGFiZWwgPSBhdWRpb1RyYWNrV2l0aG91dExhYmVsTWVudUl0ZW1UZXh0KGxhYmVsKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHJhY2tCYXNlOjpWaWRlb1RyYWNrOgorICAg
ICAgICAgICAgbGFiZWwgPSB2aWRlb1RyYWNrV2l0aG91dExhYmVsTWVudUl0ZW1UZXh0KGxhYmVs
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGlzcGxheU5hbWUu
YXBwZW5kKGxhYmVsKTsKICAgICB9CiB9CiAKLXN0YXRpYyBTdHJpbmcgdHJhY2tEaXNwbGF5TmFt
ZShBdWRpb1RyYWNrKiB0cmFjaykKK1N0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Rjo6ZGlzcGxheU5hbWVGb3JUcmFjayhjb25zdCBBdWRpb1RyYWNrKiB0cmFjaykgY29uc3QKIHsK
ICAgICBTdHJpbmdCdWlsZGVyIGRpc3BsYXlOYW1lOwogICAgIGJ1aWxkRGlzcGxheVN0cmluZ0Zv
clRyYWNrQmFzZShkaXNwbGF5TmFtZSwgKnRyYWNrKTsKLSAgICAKKwogICAgIGlmIChkaXNwbGF5
TmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIGRpc3BsYXlOYW1lLmFwcGVuZChhdWRpb1RyYWNrTm9M
YWJlbFRleHQoKSk7CiAKQEAgLTY3NSwxMiArNzIzLDcgQEAgc3RhdGljIFN0cmluZyB0cmFja0Rp
c3BsYXlOYW1lKEF1ZGlvVHJhY2sqIHRyYWNrKQogICAgIHJldHVybiBhdWRpb0Rlc2NyaXB0aW9u
VHJhY2tTdWZmaXhUZXh0KGRpc3BsYXlOYW1lLnRvU3RyaW5nKCkpOwogfQogCi1TdHJpbmcgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmRpc3BsYXlOYW1lRm9yVHJhY2soQXVkaW9UcmFj
ayogdHJhY2spIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRyYWNrRGlzcGxheU5hbWUodHJhY2spOwot
fQotCi1zdGF0aWMgU3RyaW5nIHRyYWNrRGlzcGxheU5hbWUoVGV4dFRyYWNrKiB0cmFjaykKK1N0
cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6ZGlzcGxheU5hbWVGb3JUcmFjayhj
b25zdCBUZXh0VHJhY2sqIHRyYWNrKSBjb25zdAogewogICAgIGlmICh0cmFjayA9PSAmVGV4dFRy
YWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSkKICAgICAgICAgcmV0dXJuIHRleHRUcmFja09mZk1l
bnVJdGVtVGV4dCgpOwpAQCAtNzE1LDQ1ICs3NTgsNDIgQEAgc3RhdGljIFN0cmluZyB0cmFja0Rp
c3BsYXlOYW1lKFRleHRUcmFjayogdHJhY2spCiAgICAgcmV0dXJuIGRpc3BsYXlOYW1lOwogfQog
Ci1TdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmRpc3BsYXlOYW1lRm9yVHJh
Y2soVGV4dFRyYWNrKiB0cmFjaykgY29uc3QKK2Jvb2wgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUY6OmNvbXBhcmVUZXh0VHJhY2tzKGNvbnN0IFRleHRUcmFjayYgYSwgY29uc3QgVGV4dFRy
YWNrJiBiKSBjb25zdAogewotICAgIHJldHVybiB0cmFja0Rpc3BsYXlOYW1lKHRyYWNrKTsKLX0K
LQotc3RhdGljIGJvb2wgdGV4dFRyYWNrQ29tcGFyZShjb25zdCBSZWZQdHI8VGV4dFRyYWNrPiYg
YSwgY29uc3QgUmVmUHRyPFRleHRUcmFjaz4mIGIpCi17Ci0gICAgU3RyaW5nIHByZWZlcnJlZExh
bmd1YWdlRGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZUZvckxhbmd1YWdlTG9jYWxlKGxhbmd1YWdl
SWRlbnRpZmllcihkZWZhdWx0TGFuZ3VhZ2UoKSkpOwotICAgIFN0cmluZyBhTGFuZ3VhZ2VEaXNw
bGF5TmFtZSA9IGRpc3BsYXlOYW1lRm9yTGFuZ3VhZ2VMb2NhbGUobGFuZ3VhZ2VJZGVudGlmaWVy
KGEtPnZhbGlkQkNQNDdMYW5ndWFnZSgpKSk7Ci0gICAgU3RyaW5nIGJMYW5ndWFnZURpc3BsYXlO
YW1lID0gZGlzcGxheU5hbWVGb3JMYW5ndWFnZUxvY2FsZShsYW5ndWFnZUlkZW50aWZpZXIoYi0+
dmFsaWRCQ1A0N0xhbmd1YWdlKCkpKTsKKyAgICBTdHJpbmcgYUxhbmd1YWdlRGlzcGxheU5hbWUg
PSBkaXNwbGF5TmFtZUZvckxhbmd1YWdlTG9jYWxlKGxhbmd1YWdlSWRlbnRpZmllcihhLnZhbGlk
QkNQNDdMYW5ndWFnZSgpKSk7CisgICAgU3RyaW5nIGJMYW5ndWFnZURpc3BsYXlOYW1lID0gZGlz
cGxheU5hbWVGb3JMYW5ndWFnZUxvY2FsZShsYW5ndWFnZUlkZW50aWZpZXIoYi52YWxpZEJDUDQ3
TGFuZ3VhZ2UoKSkpOwogCiAgICAgLy8gVHJhY2tzIGluIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxh
bmd1YWdlIGFyZSBhbHdheXMgYXQgdGhlIHRvcCBvZiB0aGUgbWVudS4KLSAgICBib29sIGFJc1By
ZWZlcnJlZExhbmd1YWdlID0gIWNvZGVQb2ludENvbXBhcmUoYUxhbmd1YWdlRGlzcGxheU5hbWUs
IHByZWZlcnJlZExhbmd1YWdlRGlzcGxheU5hbWUpOwotICAgIGJvb2wgYklzUHJlZmVycmVkTGFu
Z3VhZ2UgPSAhY29kZVBvaW50Q29tcGFyZShiTGFuZ3VhZ2VEaXNwbGF5TmFtZSwgcHJlZmVycmVk
TGFuZ3VhZ2VEaXNwbGF5TmFtZSk7Ci0gICAgaWYgKGFJc1ByZWZlcnJlZExhbmd1YWdlICE9IGJJ
c1ByZWZlcnJlZExhbmd1YWdlKQotICAgICAgICByZXR1cm4gYUlzUHJlZmVycmVkTGFuZ3VhZ2U7
CisgICAgZm9yIChhdXRvJiBwcmVmZXJyZWRMYW5ndWFnZSA6IHByZWZlcnJlZExhbmd1YWdlcygp
KSB7CisgICAgICAgIFN0cmluZyBwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlOYW1lID0gZGlzcGxh
eU5hbWVGb3JMYW5ndWFnZUxvY2FsZShsYW5ndWFnZUlkZW50aWZpZXIocHJlZmVycmVkTGFuZ3Vh
Z2UpKTsKKyAgICAgICAgYm9vbCBhSXNQcmVmZXJyZWRMYW5ndWFnZSA9ICFjb2RlUG9pbnRDb21w
YXJlKGFMYW5ndWFnZURpc3BsYXlOYW1lLCBwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlOYW1lKTsK
KyAgICAgICAgYm9vbCBiSXNQcmVmZXJyZWRMYW5ndWFnZSA9ICFjb2RlUG9pbnRDb21wYXJlKGJM
YW5ndWFnZURpc3BsYXlOYW1lLCBwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlOYW1lKTsKKyAgICAg
ICAgaWYgKGFJc1ByZWZlcnJlZExhbmd1YWdlICE9IGJJc1ByZWZlcnJlZExhbmd1YWdlKQorICAg
ICAgICAgICAgcmV0dXJuIGFJc1ByZWZlcnJlZExhbmd1YWdlOworICAgIH0KIAogICAgIC8vIFRy
YWNrcyBub3QgaW4gdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2Ugc29ydCBmaXJzdCBieSBs
YW5ndWFnZSAuLi4KICAgICBpZiAoYXV0byBsYW5ndWFnZURpc3BsYXlOYW1lQ29tcGFyaXNvbiA9
IGNvZGVQb2ludENvbXBhcmUoYUxhbmd1YWdlRGlzcGxheU5hbWUsIGJMYW5ndWFnZURpc3BsYXlO
YW1lKSkKICAgICAgICAgcmV0dXJuIGxhbmd1YWdlRGlzcGxheU5hbWVDb21wYXJpc29uIDwgMDsK
IAogICAgIC8vIC4uLiBidXQgd2hlbiB0cmFja3MgaGF2ZSB0aGUgc2FtZSBsYW5ndWFnZSwgbWFp
biBwcm9ncmFtIGNvbnRlbnQgc29ydHMgbmV4dCBoaWdoZXN0IC4uLgotICAgIGJvb2wgYUlzTWFp
bkNvbnRlbnQgPSBhLT5pc01haW5Qcm9ncmFtQ29udGVudCgpOwotICAgIGJvb2wgYklzTWFpbkNv
bnRlbnQgPSBiLT5pc01haW5Qcm9ncmFtQ29udGVudCgpOworICAgIGJvb2wgYUlzTWFpbkNvbnRl
bnQgPSBhLmlzTWFpblByb2dyYW1Db250ZW50KCk7CisgICAgYm9vbCBiSXNNYWluQ29udGVudCA9
IGIuaXNNYWluUHJvZ3JhbUNvbnRlbnQoKTsKICAgICBpZiAoYUlzTWFpbkNvbnRlbnQgIT0gYklz
TWFpbkNvbnRlbnQpCiAgICAgICAgIHJldHVybiBhSXNNYWluQ29udGVudDsKIAogICAgIC8vIC4u
LiBhbmQgbWFpbiBwcm9ncmFtIHRyYWNrcyBzb3J0IGhpZ2hlciB0aGFuIENDIHRyYWNrcyAuLi4K
LSAgICBib29sIGFJc0NDID0gYS0+aXNDbG9zZWRDYXB0aW9ucygpOwotICAgIGJvb2wgYklzQ0Mg
PSBiLT5pc0Nsb3NlZENhcHRpb25zKCk7CisgICAgYm9vbCBhSXNDQyA9IGEuaXNDbG9zZWRDYXB0
aW9ucygpOworICAgIGJvb2wgYklzQ0MgPSBiLmlzQ2xvc2VkQ2FwdGlvbnMoKTsKICAgICBpZiAo
YUlzQ0MgIT0gYklzQ0MpCiAgICAgICAgIHJldHVybiBhSXNDQzsKIAogICAgIC8vIC4uLiBhbmQg
dHJhY2tzIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGxhbmd1YWdlIHNvcnQgYnkgdGhlIG1lbnUgaXRl
bSB0ZXh0LgotICAgIGlmIChhdXRvIHRyYWNrRGlzcGxheUNvbXBhcmlzb24gPSBjb2RlUG9pbnRD
b21wYXJlKHRyYWNrRGlzcGxheU5hbWUoYS5nZXQoKSksIHRyYWNrRGlzcGxheU5hbWUoYi5nZXQo
KSkpKQorICAgIGlmIChhdXRvIHRyYWNrRGlzcGxheUNvbXBhcmlzb24gPSBjb2RlUG9pbnRDb21w
YXJlKGRpc3BsYXlOYW1lRm9yVHJhY2soJmEpLCBkaXNwbGF5TmFtZUZvclRyYWNrKCZiKSkpCiAg
ICAgICAgIHJldHVybiB0cmFja0Rpc3BsYXlDb21wYXJpc29uIDwgMDsKIAogICAgIC8vIC4uLiBh
bmQgaWYgdGhlIG1lbnUgaXRlbSB0ZXh0IGlzIHRoZSBzYW1lLCBjb21wYXJlIHRoZSB1bmlxdWUg
SURzCi0gICAgcmV0dXJuIGEtPnVuaXF1ZUlkKCkgPCBiLT51bmlxdWVJZCgpOworICAgIHJldHVy
biBhLnVuaXF1ZUlkKCkgPCBiLnVuaXF1ZUlkKCk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8QXVkaW9U
cmFjaz4+IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpzb3J0ZWRUcmFja0xpc3RGb3JN
ZW51KEF1ZGlvVHJhY2tMaXN0KiB0cmFja0xpc3QpCkBAIC03NjgsOCArODA4LDggQEAgVmVjdG9y
PFJlZlB0cjxBdWRpb1RyYWNrPj4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OnNvcnRl
ZFRyYWNrTGlzdEZvck1lbnUKICAgICAgICAgdHJhY2tzRm9yTWVudS5hcHBlbmQodHJhY2spOwog
ICAgIH0KICAgICAKLSAgICBzdGQ6OnNvcnQodHJhY2tzRm9yTWVudS5iZWdpbigpLCB0cmFja3NG
b3JNZW51LmVuZCgpLCBbXShhdXRvJiBhLCBhdXRvJiBiKSB7Ci0gICAgICAgIGF1dG8gdHJhY2tE
aXNwbGF5Q29tcGFyaXNvbiA9IGNvZGVQb2ludENvbXBhcmUodHJhY2tEaXNwbGF5TmFtZShhLmdl
dCgpKSwgdHJhY2tEaXNwbGF5TmFtZShiLmdldCgpKSk7CisgICAgc3RkOjpzb3J0KHRyYWNrc0Zv
ck1lbnUuYmVnaW4oKSwgdHJhY2tzRm9yTWVudS5lbmQoKSwgWyZdIChhdXRvJiBhLCBhdXRvJiBi
KSB7CisgICAgICAgIGF1dG8gdHJhY2tEaXNwbGF5Q29tcGFyaXNvbiA9IGNvZGVQb2ludENvbXBh
cmUoZGlzcGxheU5hbWVGb3JUcmFjayhhLmdldCgpKSwgZGlzcGxheU5hbWVGb3JUcmFjayhiLmdl
dCgpKSk7CiAgICAgICAgIGlmICh0cmFja0Rpc3BsYXlDb21wYXJpc29uKQogICAgICAgICAgICAg
cmV0dXJuIHRyYWNrRGlzcGxheUNvbXBhcmlzb24gPCAwOwogCkBAIC03OTIsMTggKzgzMiwxOCBA
QCBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
Ojpzb3J0ZWRUcmFja0xpc3RGb3JNZW51KAogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVu
Z3RoID0gdHJhY2tMaXN0LT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIFRl
eHRUcmFjayogdHJhY2sgPSB0cmFja0xpc3QtPml0ZW0oaSk7Ci0gICAgICAgIFN0cmluZyBsYW5n
dWFnZSA9IGRpc3BsYXlOYW1lRm9yTGFuZ3VhZ2VMb2NhbGUodHJhY2stPnZhbGlkQkNQNDdMYW5n
dWFnZSgpKTsKLQotICAgICAgICBpZiAoZGlzcGxheU1vZGUgPT0gTWFudWFsKSB7Ci0gICAgICAg
ICAgICBMT0coTWVkaWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6c29ydGVkVHJh
Y2tMaXN0Rm9yTWVudSAtIGFkZGluZyAnJXMnIHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNh
dXNlIHNlbGVjdGlvbiBtb2RlIGlzICdtYW51YWwnIiwgdHJhY2stPmtpbmRLZXl3b3JkKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAg
ICB0cmFja3NGb3JNZW51LmFwcGVuZCh0cmFjayk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCiAgICAgICAgIGlmICgha2luZHMuY29udGFpbnModHJhY2stPmtpbmQoKSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBkaXNwbGF5
TmFtZUZvckxhbmd1YWdlTG9jYWxlKHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2UoKSk7CisKICAg
ICAgICAgaWYgKHJlcXVlc3RpbmdDYXB0aW9uc09yRGVzY3JpcHRpb25zT3JTdWJ0aXRsZXMpIHsK
KyAgICAgICAgICAgIGlmIChkaXNwbGF5TW9kZSA9PSBNYW51YWwpIHsKKyAgICAgICAgICAgICAg
ICBMT0coTWVkaWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6c29ydGVkVHJhY2tM
aXN0Rm9yTWVudSAtIGFkZGluZyAnJXMnIHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNl
IHNlbGVjdGlvbiBtb2RlIGlzICdtYW51YWwnIiwgdHJhY2stPmtpbmRLZXl3b3JkKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAg
ICAgdHJhY2tzRm9yTWVudS5hcHBlbmQodHJhY2spOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAodHJhY2stPmNvbnRhaW5zT25seUZv
cmNlZFN1YnRpdGxlcygpKSB7CiAgICAgICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01lZGlhQUY6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUgLSBza2lwcGluZyAn
JXMnIHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNlIGl0IGNvbnRhaW5zIG9ubHkgZm9y
Y2VkIHN1YnRpdGxlcyIsIHRyYWNrLT5raW5kS2V5d29yZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtODg1LDcgKzkyNSw5IEBAIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoCiAgICAgaWYgKHRyYWNr
c0Zvck1lbnUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJhY2tzRm9yTWVudTsKIAotICAg
IHN0ZDo6c29ydCh0cmFja3NGb3JNZW51LmJlZ2luKCksIHRyYWNrc0Zvck1lbnUuZW5kKCksIHRl
eHRUcmFja0NvbXBhcmUpOworICAgIHN0ZDo6c29ydCh0cmFja3NGb3JNZW51LmJlZ2luKCksIHRy
YWNrc0Zvck1lbnUuZW5kKCksIFsmXSAoY29uc3QgUmVmUHRyPFRleHRUcmFjaz4mIGEsIGNvbnN0
IFJlZlB0cjxUZXh0VHJhY2s+JiBiKSB7CisgICAgICAgIHJldHVybiBjb21wYXJlVGV4dFRyYWNr
cygqYSwgKmIpOworICAgIH0pOwogCiAgICAgaWYgKHJlcXVlc3RpbmdDYXB0aW9uc09yRGVzY3Jp
cHRpb25zT3JTdWJ0aXRsZXMpIHsKICAgICAgICAgdHJhY2tzRm9yTWVudS5pbnNlcnQoMCwgJlRl
eHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oCmluZGV4IDQ5ZDlmZDY0ZTlkMmE4
OGIwMzFmODhlY2ZmNjljNjA4MDc3YWRlY2YuLjY3OWUwMTM2N2Y1MWQ2MWI1NGM1OTY2MDA2NmY2
NGYwYjZlZTI5M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGLmgKQEAgLTY3LDEzICs2NywxNiBAQCBwdWJsaWM6CiAgICAgU3Ry
aW5nIGNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVj
dG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gc29ydGVkVHJhY2tMaXN0Rm9yTWVudShBdWRpb1RyYWNr
TGlzdCopIG92ZXJyaWRlOwogICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gc29ydGVkVHJh
Y2tMaXN0Rm9yTWVudShUZXh0VHJhY2tMaXN0KiwgSGFzaFNldDxUZXh0VHJhY2s6OktpbmQ+KSBv
dmVycmlkZTsKLSAgICBTdHJpbmcgZGlzcGxheU5hbWVGb3JUcmFjayhBdWRpb1RyYWNrKikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGRpc3BsYXlOYW1lRm9yVHJhY2soVGV4dFRyYWNrKikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGRpc3BsYXlOYW1lRm9yVHJhY2soY29uc3QgQXVk
aW9UcmFjayopIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBkaXNwbGF5TmFtZUZvclRyYWNr
KGNvbnN0IFRleHRUcmFjayopIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgogI2lmIEhBVkUo
TUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCiAgICAgdm9pZCB1cGRhdGVUaW1lckZpcmVk
KCk7CiAKKyAgICB2b2lkIGJ1aWxkRGlzcGxheVN0cmluZ0ZvclRyYWNrQmFzZShTdHJpbmdCdWls
ZGVyJiwgY29uc3QgVHJhY2tCYXNlJikgY29uc3Q7CisgICAgYm9vbCBjb21wYXJlVGV4dFRyYWNr
cyhjb25zdCBUZXh0VHJhY2smLCBjb25zdCBUZXh0VHJhY2smKSBjb25zdDsKKwogICAgIFN0cmlu
ZyBjYXB0aW9uc1dpbmRvd0NTUygpIGNvbnN0OwogICAgIFN0cmluZyBjYXB0aW9uc0JhY2tncm91
bmRDU1MoKSBjb25zdDsKICAgICBTdHJpbmcgY2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAKaW5kZXggY2Mz
NTUzZmZiOTczZjkyODBmN2I1N2Q0NGU4ZjQ1YTNhY2JhNThkNi4uMTM2YTA2NTUwYmE4ZTNkMjQz
NGFkMzFlYjE5ZjhlNDE3ZjVmMzMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTG9jYWxpemVkU3RyaW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9j
YWxpemVkU3RyaW5ncy5jcHAKQEAgLTExMTAsNiArMTExMCw0MSBAQCBTdHJpbmcgYXVkaW9UcmFj
a05vTGFiZWxUZXh0KCkKIAogI2lmIFVTRShDRikKIAorU3RyaW5nIHN1YnRpdGxlc1RleHRUcmFj
a1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4dChjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIHJl
dHVybiBmb3JtYXRMb2NhbGl6ZWRTdHJpbmcoV0VCX1VJX0NGU1RSSU5HKCIlQCBTdWJ0aXRsZXMi
LCAiU3VidGl0bGVzIHRleHQgdHJhY2sgZGlzcGxheSBuYW1lIGZvcm1hdCB0aGF0IGluY2x1ZGVz
IHRoZSBsYW5ndWFnZSBhbmQvb3IgbG9jYWxlIChlLmcuICdFbmdsaXNoIFN1YnRpdGxlcycpLiIp
LCB0aXRsZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKK30KKworU3RyaW5nIGNhcHRpb25zVGV4
dFRyYWNrV2l0aG91dExhYmVsTWVudUl0ZW1UZXh0KGNvbnN0IFN0cmluZyYgdGl0bGUpCit7Cisg
ICAgcmV0dXJuIGZvcm1hdExvY2FsaXplZFN0cmluZyhXRUJfVUlfQ0ZTVFJJTkcoIiVAIENhcHRp
b25zIiwgIkNhcHRpb25zIHRleHQgdHJhY2sgZGlzcGxheSBuYW1lIGZvcm1hdCB0aGF0IGluY2x1
ZGVzIHRoZSBsYW5ndWFnZSBhbmQvb3IgbG9jYWxlIChlLmcuICdFbmdsaXNoIENhcHRpb25zJyku
IiksIHRpdGxlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOworfQorCitTdHJpbmcgZGVzY3JpcHRp
b25zVGV4dFRyYWNrV2l0aG91dExhYmVsTWVudUl0ZW1UZXh0KGNvbnN0IFN0cmluZyYgdGl0bGUp
Cit7CisgICAgcmV0dXJuIGZvcm1hdExvY2FsaXplZFN0cmluZyhXRUJfVUlfQ0ZTVFJJTkcoIiVA
IERlc2NyaXB0aW9ucyIsICJEZXNjcmlwdGlvbnMgdGV4dCB0cmFjayBkaXNwbGF5IG5hbWUgZm9y
bWF0IHRoYXQgaW5jbHVkZXMgdGhlIGxhbmd1YWdlIGFuZC9vciBsb2NhbGUgKGUuZy4gJ0VuZ2xp
c2ggRGVzY3JpcHRpb25zJykuIiksIHRpdGxlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOworfQor
CitTdHJpbmcgY2hhcHRlcnNUZXh0VHJhY2tXaXRob3V0TGFiZWxNZW51SXRlbVRleHQoY29uc3Qg
U3RyaW5nJiB0aXRsZSkKK3sKKyAgICByZXR1cm4gZm9ybWF0TG9jYWxpemVkU3RyaW5nKFdFQl9V
SV9DRlNUUklORygiJUAgQ2hhcHRlcnMiLCAiQ2hhcHRlcnMgdGV4dCB0cmFjayBkaXNwbGF5IG5h
bWUgZm9ybWF0IHRoYXQgaW5jbHVkZXMgdGhlIGxhbmd1YWdlIGFuZC9vciBsb2NhbGUgKGUuZy4g
J0VuZ2xpc2ggQ2hhcHRlcnMnKS4iKSwgdGl0bGUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSk7Cit9
CisKK1N0cmluZyBtZXRhZGF0YVRleHRUcmFja1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4dChjb25z
dCBTdHJpbmcmIHRpdGxlKQoreworICAgIHJldHVybiBmb3JtYXRMb2NhbGl6ZWRTdHJpbmcoV0VC
X1VJX0NGU1RSSU5HKCIlQCBNZXRhZGF0YSIsICJNZXRhZGF0YSB0ZXh0IHRyYWNrIGRpc3BsYXkg
bmFtZSBmb3JtYXQgdGhhdCBpbmNsdWRlcyB0aGUgbGFuZ3VhZ2UgYW5kL29yIGxvY2FsZSAoZS5n
LiAnRW5nbGlzaCBNZXRhZGF0cycpLiIpLCB0aXRsZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsK
K30KKworU3RyaW5nIGF1ZGlvVHJhY2tXaXRob3V0TGFiZWxNZW51SXRlbVRleHQoY29uc3QgU3Ry
aW5nJiB0aXRsZSkKK3sKKyAgICByZXR1cm4gZm9ybWF0TG9jYWxpemVkU3RyaW5nKFdFQl9VSV9D
RlNUUklORygiJUAgQXVkaW8iLCAiQXVkaW8gdHJhY2sgZGlzcGxheSBuYW1lIGZvcm1hdCB0aGF0
IGluY2x1ZGVzIHRoZSBsYW5ndWFnZSBhbmQvb3IgbG9jYWxlIChlLmcuICdFbmdsaXNoIEF1ZGlv
JykuIiksIHRpdGxlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOworfQorCitTdHJpbmcgdmlkZW9U
cmFja1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4dChjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAg
IHJldHVybiBmb3JtYXRMb2NhbGl6ZWRTdHJpbmcoV0VCX1VJX0NGU1RSSU5HKCIlQCBWaWRlbyIs
ICJWaWRlbyB0cmFjayBkaXNwbGF5IG5hbWUgZm9ybWF0IHRoYXQgaW5jbHVkZXMgdGhlIGxhbmd1
YWdlIGFuZC9vciBsb2NhbGUgKGUuZy4gJ0VuZ2xpc2ggVmlkZW8nKS4iKSwgdGl0bGUuY3JlYXRl
Q0ZTdHJpbmcoKS5nZXQoKSk7Cit9CisKIFN0cmluZyB0ZXh0VHJhY2tDb3VudHJ5QW5kTGFuZ3Vh
Z2VNZW51SXRlbVRleHQoY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiBjb3VudHJ5
LCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlKQogewogICAgIHJldHVybiBmb3JtYXRMb2NhbGl6ZWRT
dHJpbmcoV0VCX1VJX0NGU1RSSU5HKCIlQCAoJUAtJUApIiwgIlRleHQgdHJhY2sgZGlzcGxheSBu
YW1lIGZvcm1hdCB0aGF0IGluY2x1ZGVzIHRoZSBjb3VudHJ5IGFuZCBsYW5ndWFnZSBvZiB0aGUg
c3VidGl0bGUsIGluIHRoZSBmb3JtIG9mICdUaXRsZSAoTGFuZ3VhZ2UtQ291bnRyeSknIiksIHRp
dGxlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGxhbmd1YWdlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCksIGNvdW50cnkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmgKaW5kZXggZGJmN2ViNzkzZGY1NzQwMWM3NWMwYTgzNzFj
ODc4ZjUwMjgxMmVkZS4uNTZjYmVhMTk0MzZkM2MwMzIzZmEwNmI4NTM0OWM4NDNkYTg0NDA4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaApAQCAtMzA1LDYg
KzMwNSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgU3RyaW5nIHRleHRUcmFja05vTGFi
ZWxUZXh0KCk7CiAgICAgU3RyaW5nIGF1ZGlvVHJhY2tOb0xhYmVsVGV4dCgpOwogI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCBQTEFURk9STShXSU4pCisgICAgU3RyaW5nIHN1YnRpdGxlc1RleHRUcmFj
a1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4dChjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgY2Fw
dGlvbnNUZXh0VHJhY2tXaXRob3V0TGFiZWxNZW51SXRlbVRleHQoY29uc3QgU3RyaW5nJik7Cisg
ICAgU3RyaW5nIGRlc2NyaXB0aW9uc1RleHRUcmFja1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4dChj
b25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgY2hhcHRlcnNUZXh0VHJhY2tXaXRob3V0TGFiZWxN
ZW51SXRlbVRleHQoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIG1ldGFkYXRhVGV4dFRyYWNr
V2l0aG91dExhYmVsTWVudUl0ZW1UZXh0KGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBhdWRp
b1RyYWNrV2l0aG91dExhYmVsTWVudUl0ZW1UZXh0KGNvbnN0IFN0cmluZyYpOworICAgIFN0cmlu
ZyB2aWRlb1RyYWNrV2l0aG91dExhYmVsTWVudUl0ZW1UZXh0KGNvbnN0IFN0cmluZyYpOwogICAg
IFN0cmluZyB0ZXh0VHJhY2tDb3VudHJ5QW5kTGFuZ3VhZ2VNZW51SXRlbVRleHQoY29uc3QgU3Ry
aW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiBjb3VudHJ5LCBjb25zdCBTdHJpbmcmIGxhbmd1YWdl
KTsKICAgICBTdHJpbmcgdGV4dFRyYWNrTGFuZ3VhZ2VNZW51SXRlbVRleHQoY29uc3QgU3RyaW5n
JiB0aXRsZSwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSk7CiAgICAgU3RyaW5nIGNsb3NlZENhcHRp
b25UcmFja01lbnVJdGVtVGV4dChjb25zdCBTdHJpbmcmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429031</attachid>
            <date>2021-05-18 22:42:31 -0700</date>
            <delta_ts>2021-05-20 12:48:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225900-20210518234230.patch</filename>
            <type>text/plain</type>
            <size>16972</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MDBhZGVjNDRiYTNmOTE4ZWE2MmRjODYxNzExNjMzMjdjNWY0OGExLi4z
ODFlMGExMmRkOGIyMTRjMzI3MTM0MzA0ZmM1NGNhZWZiZjAzYTQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzUgQEAKKzIwMjEtMDUtMTcgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFtNb2Rlcm4gTWVkaWEgQ29udHJvbHNdIGdpdmUgbW9yZSB3ZWlnaHQgdG8g
dHJhY2tzIHRoYXQgYXJlIGluIG5vbi1kZWZhdWx0IGxhbmd1YWdlcyBjb25maWd1cmVkIGJ5IHRo
ZSB1c2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjU5MDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc4MTMwODY0PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHRoZSB1c2VyIGhhcyBib3RoIEVu
Z2xpc2ggKGRlZmF1bHQpIGFuZCBTcGFuaXNoIChhbHRlcm5hdGUpIGxhbmd1YWdlcyBjb25maWd1
cmVkLCB0cmFja3MKKyAgICAgICAgdGhhdCBhcmUgaW4gU3BhbmlzaCBzaG91bGQgYmUgd2VpZ2h0
ZWQgaGlnaGVyIHRoYW4gRnJlbmNoLgorCisgICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzLmg6CisgICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRyYWNrRGlzcGxheU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fw
dGlvblVzZXJQcmVmZXJlbmNlczo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSk6CisgICAgICAgICog
cGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oOgorICAgICAgICAqIHBhZ2UvQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRE
aXNwbGF5U3RyaW5nRm9yVHJhY2tCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRUcmFja0Nv
bXBhcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6
OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUpOgorICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGUgYFdU
Rjo6ZGVmYXVsdExhbmd1YWdlYCwgYWxzbyBjb25zaWRlciBhbGwgaXRlbXMgaW4gYFdURjo6dXNl
clByZWZlcnJlZExhbmd1YWdlc2AuCisgICAgICAgIFN3aXRjaCB0byB1c2luZyBgV1RGOjpDb2xs
YXRvcmAgdG8gdGFrZSBpbnRvIGFjY291bnQgbGFuZ3VhZ2Utc3BlY2lmaWMgcnVsZXMgd2hlbiBz
b3J0aW5nLgorICAgICAgICBJZ25vcmUgYENhcHRpb25EaXNwbGF5TW9kZTo6TWFudWFsYCBpZiB0
aGUgYFRleHRUcmFjazo6S2luZGAgaXMgbm90IG9uZSBvZiB0aGUgZGVzaXJlZCB2YWx1ZXMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmg6CisgICAgICAgICogcGxhdGZv
cm0vTG9jYWxpemVkU3RyaW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYXB0aW9uc1RleHRU
cmFja1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZGVzY3JpcHRpb25zVGV4dFRyYWNrV2l0aG91dExhYmVsTWVudUl0ZW1UZXh0KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjaGFwdGVyc1RleHRUcmFja1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4
dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWV0YWRhdGFUZXh0VHJhY2tXaXRob3V0TGFi
ZWxNZW51SXRlbVRleHQpOiBBZGRlZC4KKyAgICAgICAgKiBlbi5scHJvai9Mb2NhbGl6YWJsZS5z
dHJpbmdzOgorCiAyMDIxLTA1LTE4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgVXNlIFdURjo6TG9ja2VyIGZvciBsb2NraW5nIEJhc2VBdWRpb0NvbnRleHQncyBn
cmFwaCBsb2NrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lbi5scHJvai9Mb2NhbGl6YWJs
ZS5zdHJpbmdzIGIvU291cmNlL1dlYkNvcmUvZW4ubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncwpp
bmRleCA5YWU0MTM3MTUyODhhNjI5OTlmNWRjNGMzZTY2ZjE1YzJlZGM1ZDEzLi41ZDA4OWIyZjJm
NWM4MjE5N2MxN2Q0ZDJkMjE1MTQ5ZjM0YWNlM2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lbi5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VuLmxw
cm9qL0xvY2FsaXphYmxlLnN0cmluZ3MKQEAgLTI4LDYgKzI4LDE1IEBACiAvKiBUZXh0IHRyYWNr
IGNvbnRhaW5zIGNsb3NlZCBjYXB0aW9ucyAqLwogIiVAIENDIiA9ICIlQCBDQyI7CiAKKy8qIENh
cHRpb25zIHRleHQgdHJhY2sgZGlzcGxheSBuYW1lIGZvcm1hdCB0aGF0IGluY2x1ZGVzIHRoZSBs
YW5ndWFnZSBhbmQvb3IgbG9jYWxlIChlLmcuICdFbmdsaXNoIENhcHRpb25zJykuICovCisiJUAg
Q2FwdGlvbnMiID0gIiVAIENhcHRpb25zIjsKKworLyogQ2hhcHRlcnMgdGV4dCB0cmFjayBkaXNw
bGF5IG5hbWUgZm9ybWF0IHRoYXQgaW5jbHVkZXMgdGhlIGxhbmd1YWdlIGFuZC9vciBsb2NhbGUg
KGUuZy4gJ0VuZ2xpc2ggQ2hhcHRlcnMnKS4gKi8KKyIlQCBDaGFwdGVycyIgPSAiJUAgQ2hhcHRl
cnMiOworCisvKiBEZXNjcmlwdGlvbnMgdGV4dCB0cmFjayBkaXNwbGF5IG5hbWUgZm9ybWF0IHRo
YXQgaW5jbHVkZXMgdGhlIGxhbmd1YWdlIGFuZC9vciBsb2NhbGUgKGUuZy4gJ0VuZ2xpc2ggRGVz
Y3JpcHRpb25zJykuICovCisiJUAgRGVzY3JpcHRpb25zIiA9ICIlQCBEZXNjcmlwdGlvbnMiOwor
CiAvKiBUZXh0IHRyYWNrIGNvbnRhaW5zIHNpbXBsaWZpZWQgKDNyZCBncmFkZSBsZXZlbCkgc3Vi
dGl0bGVzICovCiAiJUAgRWFzeSBSZWFkZXIiID0gIiVAIEVhc3kgUmVhZGVyIjsKIApAQCAtMzcs
NiArNDYsOSBAQAogLyogdmlzaWJsZSBuYW1lIG9mIHRoZSBHUFUgcHJvY2Vzcy4gVGhlIGFyZ3Vt
ZW50IGlzIHRoZSBhcHBsaWNhdGlvbiBuYW1lLiAqLwogIiVAIEdyYXBoaWNzIGFuZCBNZWRpYSIg
PSAiJUAgR3JhcGhpY3MgYW5kIE1lZGlhIjsKIAorLyogTWV0YWRhdGEgdGV4dCB0cmFjayBkaXNw
bGF5IG5hbWUgZm9ybWF0IHRoYXQgaW5jbHVkZXMgdGhlIGxhbmd1YWdlIGFuZC9vciBsb2NhbGUg
KGUuZy4gJ0VuZ2xpc2ggTWV0YWRhdHMnKS4gKi8KKyIlQCBNZXRhZGF0YSIgPSAiJUAgTWV0YWRh
dGEiOworCiAvKiB2aXNpYmxlIG5hbWUgb2YgdGhlIG5ldHdvcmsgcHJvY2Vzcy4gVGhlIGFyZ3Vt
ZW50IGlzIHRoZSBhcHBsaWNhdGlvbiBuYW1lLiAqLwogIiVAIE5ldHdvcmtpbmciID0gIiVAIE5l
dHdvcmtpbmciOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2Vy
UHJlZmVyZW5jZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVu
Y2VzLmNwcAppbmRleCA5ZGUxYjg1MmU5NTIyM2I2NjU1NjE3MjIzOGE3NmVlYjI4NGEyZjBlLi5k
M2U0NWU4YmI0YzdkMjAwY2QzYTRhMjEyODIwZGU0ZWRmY2QxYmY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NlbGxJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU3RydWN0dXJlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9MYW5ndWFnZS5o
PgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NvbGxhdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMjM3LDggKzIzOCwxMCBAQCBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IENhcHRp
b25Vc2VyUHJlZmVyZW5jZXM6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoVGV4dFRyYQogICAgICAg
ICAgICAgdHJhY2tzRm9yTWVudS5hcHBlbmQodHJhY2spOwogICAgIH0KIAotICAgIHN0ZDo6c29y
dCh0cmFja3NGb3JNZW51LmJlZ2luKCksIHRyYWNrc0Zvck1lbnUuZW5kKCksIFtdKGF1dG8mIGEs
IGF1dG8mIGIpIHsKLSAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUodHJhY2tEaXNwbGF5
TmFtZShhLmdldCgpKSwgdHJhY2tEaXNwbGF5TmFtZShiLmdldCgpKSkgPCAwOworICAgIENvbGxh
dG9yIGNvbGxhdG9yOworCisgICAgc3RkOjpzb3J0KHRyYWNrc0Zvck1lbnUuYmVnaW4oKSwgdHJh
Y2tzRm9yTWVudS5lbmQoKSwgWyZdIChhdXRvJiBhLCBhdXRvJiBiKSB7CisgICAgICAgIHJldHVy
biBjb2xsYXRvci5jb2xsYXRlKHRyYWNrRGlzcGxheU5hbWUoYS5nZXQoKSksIHRyYWNrRGlzcGxh
eU5hbWUoYi5nZXQoKSkpIDwgMDsKICAgICB9KTsKIAogICAgIGlmIChraW5kcy5jb250YWlucyhU
ZXh0VHJhY2s6OktpbmQ6OlN1YnRpdGxlcykgfHwga2luZHMuY29udGFpbnMoVGV4dFRyYWNrOjpL
aW5kOjpDYXB0aW9ucykgfHwga2luZHMuY29udGFpbnMoVGV4dFRyYWNrOjpLaW5kOjpEZXNjcmlw
dGlvbnMpKSB7CkBAIC0yNzksOCArMjgyLDEwIEBAIFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoQXVkaW9UCiAg
ICAgICAgIHRyYWNrc0Zvck1lbnUuYXBwZW5kKHRyYWNrKTsKICAgICB9CiAKLSAgICBzdGQ6OnNv
cnQodHJhY2tzRm9yTWVudS5iZWdpbigpLCB0cmFja3NGb3JNZW51LmVuZCgpLCBbXShhdXRvJiBh
LCBhdXRvJiBiKSB7Ci0gICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKHRyYWNrRGlzcGxh
eU5hbWUoYS5nZXQoKSksIHRyYWNrRGlzcGxheU5hbWUoYi5nZXQoKSkpIDwgMDsKKyAgICBDb2xs
YXRvciBjb2xsYXRvcjsKKworICAgIHN0ZDo6c29ydCh0cmFja3NGb3JNZW51LmJlZ2luKCksIHRy
YWNrc0Zvck1lbnUuZW5kKCksIFsmXSAoYXV0byYgYSwgYXV0byYgYikgeworICAgICAgICByZXR1
cm4gY29sbGF0b3IuY29sbGF0ZSh0cmFja0Rpc3BsYXlOYW1lKGEuZ2V0KCkpLCB0cmFja0Rpc3Bs
YXlOYW1lKGIuZ2V0KCkpKSA8IDA7CiAgICAgfSk7CiAKICAgICByZXR1cm4gdHJhY2tzRm9yTWVu
dTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01lZGlhQUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5jcHAKaW5kZXggNzNjODAxYjkzOGM3YThkOGY0ZDRkNzU1M2VhZTZmNzUxM2ExODE1
ZS4uNGFlNmE2Y2U2YjZiYWVhMGZjYWUyOGYzZGNiMGQzNGNlMzI0NjEyNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAK
QEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NvbGxhdG9yLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgpA
QCAtNjI0LDEzICs2MjUsMTUgQEAgc3RhdGljIHZvaWQgYnVpbGREaXNwbGF5U3RyaW5nRm9yVHJh
Y2tCYXNlKFN0cmluZ0J1aWxkZXImIGRpc3BsYXlOYW1lLCBjb25zdCBUcmEKICAgICBTdHJpbmcg
bGFiZWwgPSB0cmFjay5sYWJlbCgpOwogICAgIFN0cmluZyB0cmFja0xhbmd1YWdlSWRlbnRpZmll
ciA9IHRyYWNrLnZhbGlkQkNQNDdMYW5ndWFnZSgpOwogCi0gICAgUmV0YWluUHRyPENGTG9jYWxl
UmVmPiBjdXJyZW50TG9jYWxlID0gYWRvcHRDRihDRkxvY2FsZUNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBkZWZhdWx0TGFuZ3VhZ2UoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7Ci0gICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBsb2NhbGVJZGVudGlmaWVyID0gYWRvcHRDRihDRkxvY2Fs
ZUNyZWF0ZUNhbm9uaWNhbExvY2FsZUlkZW50aWZpZXJGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHRyYWNrTGFuZ3VhZ2VJZGVudGlmaWVyLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsK
LSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxhbmd1YWdlQ0YgPSBhZG9wdENGKENGTG9jYWxl
Q29weURpc3BsYXlOYW1lRm9yUHJvcGVydHlWYWx1ZShjdXJyZW50TG9jYWxlLmdldCgpLCBrQ0ZM
b2NhbGVMYW5ndWFnZUNvZGUsIGxvY2FsZUlkZW50aWZpZXIuZ2V0KCkpKTsKKyAgICBhdXRvIHBy
ZWZlcnJlZExhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsKKyAgICBhdXRvIGRl
ZmF1bHRMYW5ndWFnZSA9ICFwcmVmZXJyZWRMYW5ndWFnZXMuaXNFbXB0eSgpID8gcHJlZmVycmVk
TGFuZ3VhZ2VzWzBdIDogZW1wdHlTdHJpbmcoKTsgLy8gVGhpcyBtYXRjaGVzIGBXVEY6OmRlZmF1
bHRMYW5ndWFnZWAuCisgICAgYXV0byBjdXJyZW50TG9jYWxlID0gYWRvcHRDRihDRkxvY2FsZUNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkZWZhdWx0TGFuZ3VhZ2UuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSkpOworICAgIGF1dG8gbG9jYWxlSWRlbnRpZmllciA9IGFkb3B0Q0YoQ0ZMb2NhbGVD
cmVhdGVDYW5vbmljYWxMb2NhbGVJZGVudGlmaWVyRnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCB0cmFja0xhbmd1YWdlSWRlbnRpZmllci5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7Cisg
ICAgYXV0byBsYW5ndWFnZUNGID0gYWRvcHRDRihDRkxvY2FsZUNvcHlEaXNwbGF5TmFtZUZvclBy
b3BlcnR5VmFsdWUoY3VycmVudExvY2FsZS5nZXQoKSwga0NGTG9jYWxlTGFuZ3VhZ2VDb2RlLCBs
b2NhbGVJZGVudGlmaWVyLmdldCgpKSk7CiAgICAgU3RyaW5nIGxhbmd1YWdlID0gbGFuZ3VhZ2VD
Ri5nZXQoKTsKIAogICAgIGlmICghbGFiZWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChsYW5n
dWFnZS5pc0VtcHR5KCkgfHwgbGFiZWwuY29udGFpbnMobGFuZ3VhZ2UpKQorICAgICAgICBpZiAo
bGFuZ3VhZ2UuaXNFbXB0eSgpIHx8IGxhYmVsLmNvbnRhaW5zKGxhbmd1YWdlKSB8fCBwcmVmZXJy
ZWRMYW5ndWFnZXMuY29udGFpbnModHJhY2tMYW5ndWFnZUlkZW50aWZpZXIpKQogICAgICAgICAg
ICAgZGlzcGxheU5hbWUuYXBwZW5kKGxhYmVsKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBsb2NhbGVEaWN0ID0gYWRvcHRDRihDRkxvY2Fs
ZUNyZWF0ZUNvbXBvbmVudHNGcm9tTG9jYWxlSWRlbnRpZmllcihrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBsb2NhbGVJZGVudGlmaWVyLmdldCgpKSk7CkBAIC02NTMsMTEgKzY1Niw0MyBAQCBzdGF0aWMg
dm9pZCBidWlsZERpc3BsYXlTdHJpbmdGb3JUcmFja0Jhc2UoU3RyaW5nQnVpbGRlciYgZGlzcGxh
eU5hbWUsIGNvbnN0IFRyYQogICAgIH0gZWxzZSB7CiAgICAgICAgIFN0cmluZyBsYW5ndWFnZUFu
ZExvY2FsZSA9IGFkb3B0Q0YoQ0ZMb2NhbGVDb3B5RGlzcGxheU5hbWVGb3JQcm9wZXJ0eVZhbHVl
KGN1cnJlbnRMb2NhbGUuZ2V0KCksIGtDRkxvY2FsZUlkZW50aWZpZXIsIHRyYWNrTGFuZ3VhZ2VJ
ZGVudGlmaWVyLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKS5nZXQoKTsKICAgICAgICAgaWYgKCFs
YW5ndWFnZUFuZExvY2FsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBkaXNwbGF5TmFtZS5hcHBl
bmQobGFuZ3VhZ2VBbmRMb2NhbGUpOworICAgICAgICAgICAgbGFiZWwgPSBsYW5ndWFnZUFuZExv
Y2FsZTsKICAgICAgICAgZWxzZSBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGRpc3BsYXlOYW1lLmFwcGVuZChsYW5ndWFnZSk7CisgICAgICAgICAgICBsYWJlbCA9IGxhbmd1
YWdlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaXNwbGF5TmFtZS5hcHBlbmQobG9jYWxl
SWRlbnRpZmllci5nZXQoKSk7CisgICAgICAgICAgICBsYWJlbCA9IGxvY2FsZUlkZW50aWZpZXIu
Z2V0KCk7CisKKyAgICAgICAgaWYgKHRyYWNrLnR5cGUoKSA9PSBUcmFja0Jhc2U6OlRleHRUcmFj
aykgeworICAgICAgICAgICAgYXV0byYgdGV4dFRyYWNrID0gZG93bmNhc3Q8VGV4dFRyYWNrPih0
cmFjayk7CisgICAgICAgICAgICBzd2l0Y2ggKHRleHRUcmFjay5raW5kKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgVGV4dFRyYWNrOjpLaW5kOjpTdWJ0aXRsZXM6CisgICAgICAgICAgICAgICAgLy8g
U3VidGl0bGUgdGV4dCB0cmFja3MgYXJlIG9ubHkgc2hvd24gaW4gYSBkZWRpY2F0ZWQgIlN1YnRp
dGxlIiBncm91cGluZywgbWVhbmluZworICAgICAgICAgICAgICAgIC8vIGl0IHdvdWxkIGxvb2sg
b2RkIHRvIGFkZCB0aGUgc2FtZSB0aXRsZSBhcyBhIHN1ZmZpeCAoZS5nLiAiRW5nbGlzaCBTdWJ0
aXRsZXMiKS4KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBUZXh0
VHJhY2s6OktpbmQ6OkNhcHRpb25zOgorICAgICAgICAgICAgICAgIGxhYmVsID0gY2FwdGlvbnNU
ZXh0VHJhY2tXaXRob3V0TGFiZWxNZW51SXRlbVRleHQobGFiZWwpOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFRleHRUcmFjazo6S2luZDo6RGVzY3JpcHRpb25z
OgorICAgICAgICAgICAgICAgIGxhYmVsID0gZGVzY3JpcHRpb25zVGV4dFRyYWNrV2l0aG91dExh
YmVsTWVudUl0ZW1UZXh0KGxhYmVsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgY2FzZSBUZXh0VHJhY2s6OktpbmQ6OkNoYXB0ZXJzOgorICAgICAgICAgICAgICAgIGxh
YmVsID0gY2hhcHRlcnNUZXh0VHJhY2tXaXRob3V0TGFiZWxNZW51SXRlbVRleHQobGFiZWwpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFRleHRUcmFjazo6S2lu
ZDo6TWV0YWRhdGE6CisgICAgICAgICAgICAgICAgbGFiZWwgPSBtZXRhZGF0YVRleHRUcmFja1dp
dGhvdXRMYWJlbE1lbnVJdGVtVGV4dChsYWJlbCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGNhc2UgVGV4dFRyYWNrOjpLaW5kOjpGb3JjZWQ6CisgICAgICAgICAgICAg
ICAgbGFiZWwgPSBmb3JjZWRUcmFja01lbnVJdGVtVGV4dChsYWJlbCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkaXNwbGF5TmFt
ZS5hcHBlbmQobGFiZWwpOwogICAgIH0KIH0KIApAQCAtNzIyLDE4ICs3NTcsMjIgQEAgU3RyaW5n
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpkaXNwbGF5TmFtZUZvclRyYWNrKFRleHRU
cmFjayogdHJhY2spIGNvbnMKIAogc3RhdGljIGJvb2wgdGV4dFRyYWNrQ29tcGFyZShjb25zdCBS
ZWZQdHI8VGV4dFRyYWNrPiYgYSwgY29uc3QgUmVmUHRyPFRleHRUcmFjaz4mIGIpCiB7Ci0gICAg
U3RyaW5nIHByZWZlcnJlZExhbmd1YWdlRGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZUZvckxhbmd1
YWdlTG9jYWxlKGxhbmd1YWdlSWRlbnRpZmllcihkZWZhdWx0TGFuZ3VhZ2UoKSkpOwogICAgIFN0
cmluZyBhTGFuZ3VhZ2VEaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lRm9yTGFuZ3VhZ2VMb2NhbGUo
bGFuZ3VhZ2VJZGVudGlmaWVyKGEtPnZhbGlkQkNQNDdMYW5ndWFnZSgpKSk7CiAgICAgU3RyaW5n
IGJMYW5ndWFnZURpc3BsYXlOYW1lID0gZGlzcGxheU5hbWVGb3JMYW5ndWFnZUxvY2FsZShsYW5n
dWFnZUlkZW50aWZpZXIoYi0+dmFsaWRCQ1A0N0xhbmd1YWdlKCkpKTsKIAogICAgIC8vIFRyYWNr
cyBpbiB0aGUgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZSBhcmUgYWx3YXlzIGF0IHRoZSB0b3Ag
b2YgdGhlIG1lbnUuCi0gICAgYm9vbCBhSXNQcmVmZXJyZWRMYW5ndWFnZSA9ICFjb2RlUG9pbnRD
b21wYXJlKGFMYW5ndWFnZURpc3BsYXlOYW1lLCBwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlOYW1l
KTsKLSAgICBib29sIGJJc1ByZWZlcnJlZExhbmd1YWdlID0gIWNvZGVQb2ludENvbXBhcmUoYkxh
bmd1YWdlRGlzcGxheU5hbWUsIHByZWZlcnJlZExhbmd1YWdlRGlzcGxheU5hbWUpOwotICAgIGlm
IChhSXNQcmVmZXJyZWRMYW5ndWFnZSAhPSBiSXNQcmVmZXJyZWRMYW5ndWFnZSkKLSAgICAgICAg
cmV0dXJuIGFJc1ByZWZlcnJlZExhbmd1YWdlOworICAgIGZvciAoYXV0byYgcHJlZmVycmVkTGFu
Z3VhZ2UgOiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpIHsKKyAgICAgICAgU3RyaW5nIHByZWZl
cnJlZExhbmd1YWdlRGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZUZvckxhbmd1YWdlTG9jYWxlKGxh
bmd1YWdlSWRlbnRpZmllcihwcmVmZXJyZWRMYW5ndWFnZSkpOworICAgICAgICBib29sIGFJc1By
ZWZlcnJlZExhbmd1YWdlID0gYUxhbmd1YWdlRGlzcGxheU5hbWUgPT0gcHJlZmVycmVkTGFuZ3Vh
Z2VEaXNwbGF5TmFtZTsKKyAgICAgICAgYm9vbCBiSXNQcmVmZXJyZWRMYW5ndWFnZSA9IGJMYW5n
dWFnZURpc3BsYXlOYW1lID09IHByZWZlcnJlZExhbmd1YWdlRGlzcGxheU5hbWU7CisgICAgICAg
IGlmIChhSXNQcmVmZXJyZWRMYW5ndWFnZSAhPSBiSXNQcmVmZXJyZWRMYW5ndWFnZSkKKyAgICAg
ICAgICAgIHJldHVybiBhSXNQcmVmZXJyZWRMYW5ndWFnZTsKKyAgICB9CisKKyAgICBDb2xsYXRv
ciBjb2xsYXRvcjsKIAogICAgIC8vIFRyYWNrcyBub3QgaW4gdGhlIHVzZXIncyBwcmVmZXJyZWQg
bGFuZ3VhZ2Ugc29ydCBmaXJzdCBieSBsYW5ndWFnZSAuLi4KLSAgICBpZiAoYXV0byBsYW5ndWFn
ZURpc3BsYXlOYW1lQ29tcGFyaXNvbiA9IGNvZGVQb2ludENvbXBhcmUoYUxhbmd1YWdlRGlzcGxh
eU5hbWUsIGJMYW5ndWFnZURpc3BsYXlOYW1lKSkKKyAgICBpZiAoYXV0byBsYW5ndWFnZURpc3Bs
YXlOYW1lQ29tcGFyaXNvbiA9IGNvbGxhdG9yLmNvbGxhdGUoYUxhbmd1YWdlRGlzcGxheU5hbWUs
IGJMYW5ndWFnZURpc3BsYXlOYW1lKSkKICAgICAgICAgcmV0dXJuIGxhbmd1YWdlRGlzcGxheU5h
bWVDb21wYXJpc29uIDwgMDsKIAogICAgIC8vIC4uLiBidXQgd2hlbiB0cmFja3MgaGF2ZSB0aGUg
c2FtZSBsYW5ndWFnZSwgbWFpbiBwcm9ncmFtIGNvbnRlbnQgc29ydHMgbmV4dCBoaWdoZXN0IC4u
LgpAQCAtNzQ5LDcgKzc4OCw3IEBAIHN0YXRpYyBib29sIHRleHRUcmFja0NvbXBhcmUoY29uc3Qg
UmVmUHRyPFRleHRUcmFjaz4mIGEsIGNvbnN0IFJlZlB0cjxUZXh0VHJhY2s+CiAgICAgICAgIHJl
dHVybiBhSXNDQzsKIAogICAgIC8vIC4uLiBhbmQgdHJhY2tzIG9mIHRoZSBzYW1lIHR5cGUgYW5k
IGxhbmd1YWdlIHNvcnQgYnkgdGhlIG1lbnUgaXRlbSB0ZXh0LgotICAgIGlmIChhdXRvIHRyYWNr
RGlzcGxheUNvbXBhcmlzb24gPSBjb2RlUG9pbnRDb21wYXJlKHRyYWNrRGlzcGxheU5hbWUoYS5n
ZXQoKSksIHRyYWNrRGlzcGxheU5hbWUoYi5nZXQoKSkpKQorICAgIGlmIChhdXRvIHRyYWNrRGlz
cGxheUNvbXBhcmlzb24gPSBjb2xsYXRvci5jb2xsYXRlKHRyYWNrRGlzcGxheU5hbWUoYS5nZXQo
KSksIHRyYWNrRGlzcGxheU5hbWUoYi5nZXQoKSkpKQogICAgICAgICByZXR1cm4gdHJhY2tEaXNw
bGF5Q29tcGFyaXNvbiA8IDA7CiAKICAgICAvLyAuLi4gYW5kIGlmIHRoZSBtZW51IGl0ZW0gdGV4
dCBpcyB0aGUgc2FtZSwgY29tcGFyZSB0aGUgdW5pcXVlIElEcwpAQCAtNzY3LDkgKzgwNiwxMSBA
QCBWZWN0b3I8UmVmUHRyPEF1ZGlvVHJhY2s+PiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Rjo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudQogICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBkaXNw
bGF5TmFtZUZvckxhbmd1YWdlTG9jYWxlKHRyYWNrLT52YWxpZEJDUDQ3TGFuZ3VhZ2UoKSk7CiAg
ICAgICAgIHRyYWNrc0Zvck1lbnUuYXBwZW5kKHRyYWNrKTsKICAgICB9Ci0gICAgCi0gICAgc3Rk
Ojpzb3J0KHRyYWNrc0Zvck1lbnUuYmVnaW4oKSwgdHJhY2tzRm9yTWVudS5lbmQoKSwgW10oYXV0
byYgYSwgYXV0byYgYikgewotICAgICAgICBhdXRvIHRyYWNrRGlzcGxheUNvbXBhcmlzb24gPSBj
b2RlUG9pbnRDb21wYXJlKHRyYWNrRGlzcGxheU5hbWUoYS5nZXQoKSksIHRyYWNrRGlzcGxheU5h
bWUoYi5nZXQoKSkpOworCisgICAgQ29sbGF0b3IgY29sbGF0b3I7CisKKyAgICBzdGQ6OnNvcnQo
dHJhY2tzRm9yTWVudS5iZWdpbigpLCB0cmFja3NGb3JNZW51LmVuZCgpLCBbJl0gKGF1dG8mIGEs
IGF1dG8mIGIpIHsKKyAgICAgICAgYXV0byB0cmFja0Rpc3BsYXlDb21wYXJpc29uID0gY29sbGF0
b3IuY29sbGF0ZSh0cmFja0Rpc3BsYXlOYW1lKGEuZ2V0KCkpLCB0cmFja0Rpc3BsYXlOYW1lKGIu
Z2V0KCkpKTsKICAgICAgICAgaWYgKHRyYWNrRGlzcGxheUNvbXBhcmlzb24pCiAgICAgICAgICAg
ICByZXR1cm4gdHJhY2tEaXNwbGF5Q29tcGFyaXNvbiA8IDA7CiAKQEAgLTc5MiwxOCArODMzLDE4
IEBAIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUY6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBs
ZW5ndGggPSB0cmFja0xpc3QtPmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAg
VGV4dFRyYWNrKiB0cmFjayA9IHRyYWNrTGlzdC0+aXRlbShpKTsKLSAgICAgICAgU3RyaW5nIGxh
bmd1YWdlID0gZGlzcGxheU5hbWVGb3JMYW5ndWFnZUxvY2FsZSh0cmFjay0+dmFsaWRCQ1A0N0xh
bmd1YWdlKCkpOwotCi0gICAgICAgIGlmIChkaXNwbGF5TW9kZSA9PSBNYW51YWwpIHsKLSAgICAg
ICAgICAgIExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpzb3J0ZWRU
cmFja0xpc3RGb3JNZW51IC0gYWRkaW5nICclcycgdHJhY2sgd2l0aCBsYW5ndWFnZSAnJXMnIGJl
Y2F1c2Ugc2VsZWN0aW9uIG1vZGUgaXMgJ21hbnVhbCciLCB0cmFjay0+a2luZEtleXdvcmQoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIHRyYWNrc0Zvck1lbnUuYXBwZW5kKHRyYWNrKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KICAgICAgICAgaWYgKCFraW5kcy5jb250YWlucyh0cmFjay0+a2luZCgpKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IGRpc3Bs
YXlOYW1lRm9yTGFuZ3VhZ2VMb2NhbGUodHJhY2stPnZhbGlkQkNQNDdMYW5ndWFnZSgpKTsKKwog
ICAgICAgICBpZiAocmVxdWVzdGluZ0NhcHRpb25zT3JEZXNjcmlwdGlvbnNPclN1YnRpdGxlcykg
eworICAgICAgICAgICAgaWYgKGRpc3BsYXlNb2RlID09IE1hbnVhbCkgeworICAgICAgICAgICAg
ICAgIExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpzb3J0ZWRUcmFj
a0xpc3RGb3JNZW51IC0gYWRkaW5nICclcycgdHJhY2sgd2l0aCBsYW5ndWFnZSAnJXMnIGJlY2F1
c2Ugc2VsZWN0aW9uIG1vZGUgaXMgJ21hbnVhbCciLCB0cmFjay0+a2luZEtleXdvcmQoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICB0cmFja3NGb3JNZW51LmFwcGVuZCh0cmFjayk7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmICh0cmFjay0+Y29udGFpbnNPbmx5
Rm9yY2VkU3VidGl0bGVzKCkpIHsKICAgICAgICAgICAgICAgICBMT0coTWVkaWEsICJDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRjo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSAtIHNraXBwaW5n
ICclcycgdHJhY2sgd2l0aCBsYW5ndWFnZSAnJXMnIGJlY2F1c2UgaXQgY29udGFpbnMgb25seSBm
b3JjZWQgc3VidGl0bGVzIiwgdHJhY2stPmtpbmRLZXl3b3JkKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwCmluZGV4IGNj
MzU1M2ZmYjk3M2Y5MjgwZjdiNTdkNDRlOGY0NWEzYWNiYTU4ZDYuLmIwYTkzZjI2MjM3ZWIxNGFh
YmU1MWJmZGM4ZmZkMDQ3N2M1MzQ2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xv
Y2FsaXplZFN0cmluZ3MuY3BwCkBAIC0xMTEwLDYgKzExMTAsMjYgQEAgU3RyaW5nIGF1ZGlvVHJh
Y2tOb0xhYmVsVGV4dCgpCiAKICNpZiBVU0UoQ0YpCiAKK1N0cmluZyBjYXB0aW9uc1RleHRUcmFj
a1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4dChjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIHJl
dHVybiBmb3JtYXRMb2NhbGl6ZWRTdHJpbmcoV0VCX1VJX0NGU1RSSU5HKCIlQCBDYXB0aW9ucyIs
ICJDYXB0aW9ucyB0ZXh0IHRyYWNrIGRpc3BsYXkgbmFtZSBmb3JtYXQgdGhhdCBpbmNsdWRlcyB0
aGUgbGFuZ3VhZ2UgYW5kL29yIGxvY2FsZSAoZS5nLiAnRW5nbGlzaCBDYXB0aW9ucycpLiIpLCB0
aXRsZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKK30KKworU3RyaW5nIGRlc2NyaXB0aW9uc1Rl
eHRUcmFja1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4dChjb25zdCBTdHJpbmcmIHRpdGxlKQorewor
ICAgIHJldHVybiBmb3JtYXRMb2NhbGl6ZWRTdHJpbmcoV0VCX1VJX0NGU1RSSU5HKCIlQCBEZXNj
cmlwdGlvbnMiLCAiRGVzY3JpcHRpb25zIHRleHQgdHJhY2sgZGlzcGxheSBuYW1lIGZvcm1hdCB0
aGF0IGluY2x1ZGVzIHRoZSBsYW5ndWFnZSBhbmQvb3IgbG9jYWxlIChlLmcuICdFbmdsaXNoIERl
c2NyaXB0aW9ucycpLiIpLCB0aXRsZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKK30KKworU3Ry
aW5nIGNoYXB0ZXJzVGV4dFRyYWNrV2l0aG91dExhYmVsTWVudUl0ZW1UZXh0KGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCit7CisgICAgcmV0dXJuIGZvcm1hdExvY2FsaXplZFN0cmluZyhXRUJfVUlfQ0ZT
VFJJTkcoIiVAIENoYXB0ZXJzIiwgIkNoYXB0ZXJzIHRleHQgdHJhY2sgZGlzcGxheSBuYW1lIGZv
cm1hdCB0aGF0IGluY2x1ZGVzIHRoZSBsYW5ndWFnZSBhbmQvb3IgbG9jYWxlIChlLmcuICdFbmds
aXNoIENoYXB0ZXJzJykuIiksIHRpdGxlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOworfQorCitT
dHJpbmcgbWV0YWRhdGFUZXh0VHJhY2tXaXRob3V0TGFiZWxNZW51SXRlbVRleHQoY29uc3QgU3Ry
aW5nJiB0aXRsZSkKK3sKKyAgICByZXR1cm4gZm9ybWF0TG9jYWxpemVkU3RyaW5nKFdFQl9VSV9D
RlNUUklORygiJUAgTWV0YWRhdGEiLCAiTWV0YWRhdGEgdGV4dCB0cmFjayBkaXNwbGF5IG5hbWUg
Zm9ybWF0IHRoYXQgaW5jbHVkZXMgdGhlIGxhbmd1YWdlIGFuZC9vciBsb2NhbGUgKGUuZy4gJ0Vu
Z2xpc2ggTWV0YWRhdHMnKS4iKSwgdGl0bGUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSk7Cit9CisK
IFN0cmluZyB0ZXh0VHJhY2tDb3VudHJ5QW5kTGFuZ3VhZ2VNZW51SXRlbVRleHQoY29uc3QgU3Ry
aW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiBjb3VudHJ5LCBjb25zdCBTdHJpbmcmIGxhbmd1YWdl
KQogewogICAgIHJldHVybiBmb3JtYXRMb2NhbGl6ZWRTdHJpbmcoV0VCX1VJX0NGU1RSSU5HKCIl
QCAoJUAtJUApIiwgIlRleHQgdHJhY2sgZGlzcGxheSBuYW1lIGZvcm1hdCB0aGF0IGluY2x1ZGVz
IHRoZSBjb3VudHJ5IGFuZCBsYW5ndWFnZSBvZiB0aGUgc3VidGl0bGUsIGluIHRoZSBmb3JtIG9m
ICdUaXRsZSAoTGFuZ3VhZ2UtQ291bnRyeSknIiksIHRpdGxlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCksIGxhbmd1YWdlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGNvdW50cnkuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6
ZWRTdHJpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmgK
aW5kZXggZGJmN2ViNzkzZGY1NzQwMWM3NWMwYTgzNzFjODc4ZjUwMjgxMmVkZS4uYjhhMmNlODgz
ZGVjYTk2M2VlNjEzYjg3Yzk5ODM1NDhiYWU3ODBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xvY2FsaXplZFN0cmluZ3MuaApAQCAtMzA1LDYgKzMwNSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgU3RyaW5nIHRleHRUcmFja05vTGFiZWxUZXh0KCk7CiAgICAgU3RyaW5nIGF1
ZGlvVHJhY2tOb0xhYmVsVGV4dCgpOwogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShX
SU4pCisgICAgU3RyaW5nIGNhcHRpb25zVGV4dFRyYWNrV2l0aG91dExhYmVsTWVudUl0ZW1UZXh0
KGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBkZXNjcmlwdGlvbnNUZXh0VHJhY2tXaXRob3V0
TGFiZWxNZW51SXRlbVRleHQoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIGNoYXB0ZXJzVGV4
dFRyYWNrV2l0aG91dExhYmVsTWVudUl0ZW1UZXh0KGNvbnN0IFN0cmluZyYpOworICAgIFN0cmlu
ZyBtZXRhZGF0YVRleHRUcmFja1dpdGhvdXRMYWJlbE1lbnVJdGVtVGV4dChjb25zdCBTdHJpbmcm
KTsKICAgICBTdHJpbmcgdGV4dFRyYWNrQ291bnRyeUFuZExhbmd1YWdlTWVudUl0ZW1UZXh0KGNv
bnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgY291bnRyeSwgY29uc3QgU3RyaW5nJiBs
YW5ndWFnZSk7CiAgICAgU3RyaW5nIHRleHRUcmFja0xhbmd1YWdlTWVudUl0ZW1UZXh0KGNvbnN0
IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpOwogICAgIFN0cmluZyBjbG9z
ZWRDYXB0aW9uVHJhY2tNZW51SXRlbVRleHQoY29uc3QgU3RyaW5nJik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>