<?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>174594</bug_id>
          
          <creation_ts>2017-07-17 14:23:13 -0700</creation_ts>
          <short_desc>Cleanup: Use OptionSet to represent marker types</short_desc>
          <delta_ts>2017-07-17 20:27:17 -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>WebCore Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1329711</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-17 14:23:13 -0700</bug_when>
    <thetext>Class DocumentMarker::MarkerTypes represents bitmask of marker types and duplicates most of the functionality of OptionSet. Unlike OptionSet, DocumentMarker::MarkerTypes does not support iteration and hence code, such as AlternativeTextController::applyAlternativeTextToRange(), uses Vector&lt;DocumentMarker::MarkerType&gt; to represent a set of marker types. We can use OptionSet to support both uses cases in a space- and time- efficient manner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329714</commentid>
    <comment_count>1</comment_count>
      <attachid>315713</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-17 14:25:46 -0700</bug_when>
    <thetext>Created attachment 315713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329809</commentid>
    <comment_count>2</comment_count>
      <attachid>315713</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-17 18:50:50 -0700</bug_when>
    <thetext>Comment on attachment 315713
Patch

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

&gt; Source/WebCore/dom/DocumentMarker.h:164
&gt; +        AcceptedCandidate
&gt; +        , Autocorrected
&gt; +        , CorrectionIndicator
&gt; +        , DeletedAutocorrection
&gt; +        , DictationAlternatives
&gt; +        , Grammar
&gt; +        , RejectedCorrection
&gt; +        , Replacement
&gt; +        , SpellCheckingExemption
&gt; +        , Spelling
&gt; +        , TextMatch
&gt; +#if ENABLE(TELEPHONE_NUMBER_DETECTION)
&gt; +        , TelephoneNumber
&gt; +#endif
&gt; +#if PLATFORM(IOS)
&gt; +        , DictationPhraseWithAlternatives
&gt; +        , DictationResult
&gt; +#endif
&gt; +        , DraggedContent

I would like to see this sorted alphabetically (including &quot;DraggedContent&quot;, but not including the conditional items. And we should use trailing commas instead of leading commas, with the extra one at the end that C++ allows in initializer lists. That way we don’t have to have one line different from the others.

&gt; Source/WebCore/editing/Editor.cpp:2752
&gt; +        DocumentMarker::Spelling, DocumentMarker::CorrectionIndicator, DocumentMarker::SpellCheckingExemption,
&gt; +        DocumentMarker::DictationAlternatives
&gt; +#if !PLATFORM(IOS)
&gt; +        , DocumentMarker::Grammar
&gt;  #endif

Trailing commas after each item is a cleaner way to do this since you can have an extra comma.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329811</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-17 18:54:00 -0700</bug_when>
    <thetext>You will have to rebase and merge with r219595 since it overlaps some functions you changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329823</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-17 19:35:14 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; &gt; Source/WebCore/dom/DocumentMarker.h:164
&gt; &gt; +        AcceptedCandidate
&gt; &gt; +        , Autocorrected
&gt; &gt; +        , CorrectionIndicator
&gt; &gt; +        , DeletedAutocorrection
&gt; &gt; +        , DictationAlternatives
&gt; &gt; +        , Grammar
&gt; &gt; +        , RejectedCorrection
&gt; &gt; +        , Replacement
&gt; &gt; +        , SpellCheckingExemption
&gt; &gt; +        , Spelling
&gt; &gt; +        , TextMatch
&gt; &gt; +#if ENABLE(TELEPHONE_NUMBER_DETECTION)
&gt; &gt; +        , TelephoneNumber
&gt; &gt; +#endif
&gt; &gt; +#if PLATFORM(IOS)
&gt; &gt; +        , DictationPhraseWithAlternatives
&gt; &gt; +        , DictationResult
&gt; &gt; +#endif
&gt; &gt; +        , DraggedContent
&gt; 
&gt; I would like to see this sorted alphabetically (including &quot;DraggedContent&quot;,
&gt; but not including the conditional items. And we should use trailing commas
&gt; instead of leading commas, with the extra one at the end that C++ allows in
&gt; initializer lists. That way we don’t have to have one line different from
&gt; the others.
&gt; 

Will fix.

&gt; &gt; Source/WebCore/editing/Editor.cpp:2752
&gt; &gt; +        DocumentMarker::Spelling, DocumentMarker::CorrectionIndicator, DocumentMarker::SpellCheckingExemption,
&gt; &gt; +        DocumentMarker::DictationAlternatives
&gt; &gt; +#if !PLATFORM(IOS)
&gt; &gt; +        , DocumentMarker::Grammar
&gt; &gt;  #endif
&gt; 
&gt; Trailing commas after each item is a cleaner way to do this since you can
&gt; have an extra comma.


Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329827</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-17 19:43:17 -0700</bug_when>
    <thetext>Committed r219597: &lt;http://trac.webkit.org/changeset/219597&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329850</commentid>
    <comment_count>6</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-07-17 20:23:57 -0700</bug_when>
    <thetext>This change seems to break WinCairo bot

WebFrame.cpp.obj : error LNK2019: unresolved external symbol &quot;public: void __cdecl WebCore::DocumentMarkerController::removeMarkers(class WebCore::DocumentMarker::MarkerTypes)&quot; (?removeMarkers@DocumentMarkerController@WebCore@@QEAAXVMarkerTypes@DocumentMarker@2@@Z) referenced in function &quot;public: void __cdecl WebFrame::unmarkAllMisspellings(void)&quot; (?unmarkAllMisspellings@WebFrame@@QEAAXXZ)

https://build.webkit.org/builders/WinCairo%2064-Bit%20Release/builds/4428/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329851</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-17 20:27:17 -0700</bug_when>
    <thetext>That looks like a build dependency error that we would get if we tried to link WebKitLegacy against WebCore and had not recompiled WebKitLegacy, rather than a mistake in this patch.

Could force the WinCairo bot to do a clean build, or try to figure out how to fix the build system used by WinCairo to correctly understand this dependency.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315713</attachid>
            <date>2017-07-17 14:25:46 -0700</date>
            <delta_ts>2017-07-17 18:50:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174594-20170717142545.patch</filename>
            <type>text/plain</type>
            <size>35848</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDAzN2ZjYjlkYmVmZjYz
NzZkOWFkMjAxMmI4OTUyNTExMDgwYjUxMS4uZGFiNWEyOWRiMzg5Zjk0OWZkZDFmZGI4ZTgxNjNk
YzU1ZTAxZDQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDE3LTA3LTE3ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbnVwOiBVc2UgT3B0
aW9uU2V0IHRvIHJlcHJlc2VudCBtYXJrZXIgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDU5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBjbGFzcyBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZXMgdGhhdCBkdXBsaWNhdGVzIG1vc3Qgb2YgZnVuY3Rpb25hbGl0eSBvZiBPcHRpb25T
ZXQKKyAgICAgICAgYW5kIHVzZSBPcHRpb25TZXQgZGlyZWN0bHkgdG8gcmVwcmVzZW50IGEgc2V0
IG9mIG1hcmtlciB0eXBlcy4KKworICAgICAgICBObyBmdW5jdGlvbmFsaXR5IGNoYW5nZWQuIFNv
LCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUxheW91dCk6CisgICAgICAgICogZG9tL0RvY3VtZW50
TWFya2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXM6
Ok1hcmtlclR5cGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlczo6Y29udGFpbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzOjppbnRlcnNlY3RzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlczo6b3BlcmF0b3I9PSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXM6OmFkZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXM6
OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6QWxs
TWFya2Vyczo6QWxsTWFya2Vycyk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnBvc3NpYmx5SGFzTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNGb3IpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnNGcm9tTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKToK
KyAgICAgICAgKERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZSk6Cisg
ICAgICAgIChEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMpOgorICAgICAgICAo
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJz
ZWN0aW5nUmFuZ2UpOgorICAgICAgICBVcGRhdGUgY29kZSBhcyBuZWVkZWQuCisKKyAgICAgICAg
KiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMpOgorICAgICAgICBVcGRhdGUgY29kZSBh
cyBuZWVkZWQuCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjptYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Om1hcmtlclR5cGVzRm9yQXBwbGllZERpY3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAg
ICAgTWFya2VkIGFzIGlubGluZSBhbmQgcmV0dXJucyBhbiBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+LiBJdCBpcyB1bm5lY2Vzc2FyeSB0byB1c2UgTmV2ZXJEZXN0cm95ZWQK
KyAgICAgICAgaW4gdGhlc2UgZnVuY3Rpb25zIGFzIGNvbnN0cnVjdGluZyBhbiBPcHRpb25TZXQg
YW5kIGNvcHlpbmcvbW92aW5nIGl0IGlzIHZlcnkgZWZmaWNpZW50LiBTdWNoIG9wZXJhdGlvbnMg
YXJlCisgICAgICAgIGVmZmVjdGl2ZWx5IGVxdWl2YWxlbnQgdG8gYW4gaW50ZWdyYWwgYXNzaWdu
bWVudCBhbmQgY29weSBvZiBhbiBpbnRlZ3JhbCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LgorCisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZl
VGV4dFRvUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9uKToKKyAgICAgICAgVXBk
YXRlIGNvZGUgYXMgbmVlZGVkLgorCisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmg6IFdoaWxlIEkgYW0gaGVyZSwgcmVtb3ZlIHNvbWUgdW5uZWNlc3NhcnkgI2lu
Y2x1ZGVzIGFuZCBncm91cAorICAgICAgICBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBzdHJ1Y3Rz
LgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vydmlu
Z01hcmtlcnMpOiBVcGRhdGUgY29kZSBhcyBuZWVkZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNB
ZmZlY3RlZEJ5RWRpdGluZyk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVkKTog
RGl0dG8uCisgICAgICAgICogcGFnZS9pb3MvRnJhbWVJT1MubW06CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QpOiBEaXR0by4KKyAgICAgICAg
KiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYXJrZXJUeXBlc0Zy
b20pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyQ291bnRGb3JO
b2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Om1hcmtlckF0KTogRGl0
dG8uCisKIDIwMTctMDctMTUgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNv
bT4KIAogICAgICAgICBDbGVhbiB1cCBsaW5lLWhlaWdodCBhbmQgbWluaW11bUZvbnRTaXplIGZ1
bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IDllYjM5NDA1YmM5NmNkNDli
OGI3OWFiOWYxMTE4YWY1MTY1OWUwOTIuLjkwOGQyNGU2NjVjMWE5MjlmOGE2OWJhZTMxYTc2ZjYx
YWJkNDM5ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAor
MjAxNy0wNy0xNyAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q2xlYW51cDogVXNlIE9wdGlvblNldCB0byByZXByZXNlbnQgbWFya2VyIHR5cGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ1OTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgY2xhc3MgRG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIHRoYXQgZHVwbGljYXRlcyBtb3N0IG9mIGZ1bmN0aW9u
YWxpdHkgb2YgT3B0aW9uU2V0CisgICAgICAgIGFuZCB1c2UgT3B0aW9uU2V0IGRpcmVjdGx5IHRv
IHJlcHJlc2VudCBhIHNldCBvZiBtYXJrZXIgdHlwZXMuCisKKyAgICAgICAgTm8gZnVuY3Rpb25h
bGl0eSBjaGFuZ2VkLiBTbywgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tOgorICAgICAgICAoLVtXZWJWaXNpYmxlUG9zaXRpb24g
ZW5jbG9zaW5nUmFuZ2VXaXRoRGljdGF0aW9uUGhyYXNlQWx0ZXJuYXRpdmVzOl0pOiBVcGRhdGUg
Y29kZSBhcyBuZWVkZWQuCisgICAgICAgICgtW1dlYlZpc2libGVQb3NpdGlvbiBlbmNsb3NpbmdS
YW5nZVdpdGhDb3JyZWN0aW9uSW5kaWNhdG9yXSk6IERpdHRvLgorCiAyMDE3LTA3LTEyICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgTmF2aWdhdGlv
bkluaXRpYXRlZEJ5TWFpbkZyYW1lIHRvIEluaXRpYXRlZEJ5TWFpbkZyYW1lCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE1hcmtlci5oCmluZGV4IDAxZWEwNDlmOWVjYjYwMWM3YTE2NTEzM2U1Y2I1YTIz
MWViNWI5ZjYuLmU2ZGZlZTc4NDI1M2MzMDJkZjRiM2E1NDM5NmFhN2UwY2ViYjc4NGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIk5vZGUuaCIKIAog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
QEAgLTgxLDQ5ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgRHJhZ2dlZENvbnRlbnQgPSAxIDw8
IDE0CiAgICAgfTsKIAotICAgIGNsYXNzIE1hcmtlclR5cGVzIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgbGVmdCBpbXBsaWNpdCB0byBhbGxvdyBjb252ZXJz
aW9uIGZyb20gcmVzdWx0IG9mIGEgYml0LXdpc2Ugb3Igb2YgZW51bWVyYXRpb24gdmFsdWVzLgot
ICAgICAgICBNYXJrZXJUeXBlcyh1bnNpZ25lZCBtYXNrKSA6IG1fbWFzayhtYXNrKSB7IH0KLQot
ICAgICAgICBib29sIGNvbnRhaW5zKE1hcmtlclR5cGUgdHlwZSkgY29uc3QgeyByZXR1cm4gbV9t
YXNrICYgdHlwZTsgfQotICAgICAgICBib29sIGludGVyc2VjdHMoTWFya2VyVHlwZXMgdHlwZXMp
IGNvbnN0IHsgcmV0dXJuIG1fbWFzayAmIHR5cGVzLm1fbWFzazsgfQotICAgICAgICBib29sIG9w
ZXJhdG9yPT0oTWFya2VyVHlwZXMgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbWFzayA9PSBvdGhl
ci5tX21hc2s7IH0KLQotICAgICAgICB2b2lkIGFkZChNYXJrZXJUeXBlcyB0eXBlcykgeyBtX21h
c2sgfD0gdHlwZXMubV9tYXNrOyB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKE1hcmtlclR5cGVzIHR5
cGVzKSB7IG1fbWFzayAmPSB+dHlwZXMubV9tYXNrOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICB1bnNpZ25lZCBtX21hc2s7Ci0gICAgfTsKLQotICAgIGNsYXNzIEFsbE1hcmtlcnMgOiBwdWJs
aWMgTWFya2VyVHlwZXMgewotICAgIHB1YmxpYzoKLSAgICAgICAgQWxsTWFya2VycygpCi0gICAg
ICAgICAgICA6IE1hcmtlclR5cGVzKDAKLSAgICAgICAgICAgICAgICB8IEFjY2VwdGVkQ2FuZGlk
YXRlCi0gICAgICAgICAgICAgICAgfCBBdXRvY29ycmVjdGVkCi0gICAgICAgICAgICAgICAgfCBD
b3JyZWN0aW9uSW5kaWNhdG9yCi0gICAgICAgICAgICAgICAgfCBEZWxldGVkQXV0b2NvcnJlY3Rp
b24KLSAgICAgICAgICAgICAgICB8IERpY3RhdGlvbkFsdGVybmF0aXZlcwotICAgICAgICAgICAg
ICAgIHwgR3JhbW1hcgotICAgICAgICAgICAgICAgIHwgUmVqZWN0ZWRDb3JyZWN0aW9uCi0gICAg
ICAgICAgICAgICAgfCBSZXBsYWNlbWVudAotICAgICAgICAgICAgICAgIHwgU3BlbGxDaGVja2lu
Z0V4ZW1wdGlvbgotICAgICAgICAgICAgICAgIHwgU3BlbGxpbmcKLSAgICAgICAgICAgICAgICB8
IFRleHRNYXRjaAotI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKLSAgICAg
ICAgICAgICAgICB8IFRlbGVwaG9uZU51bWJlcgotI2VuZGlmCi0jaWYgUExBVEZPUk0oSU9TKQot
ICAgICAgICAgICAgICAgIHwgRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcwotICAgICAg
ICAgICAgICAgIHwgRGljdGF0aW9uUmVzdWx0Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB8IERy
YWdnZWRDb250ZW50Ci0gICAgICAgICAgICApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07
CisgICAgc3RhdGljIE9wdGlvblNldDxNYXJrZXJUeXBlPiBhbGxNYXJrZXJzKCk7CiAKICAgICB1
c2luZyBJc0FjdGl2ZU1hdGNoRGF0YSA9IGJvb2w7CiAgICAgdXNpbmcgRGVzY3JpcHRpb25EYXRh
ID0gU3RyaW5nOwpAQCAtMTgxLDYgKzE0MCwzMiBAQCBwcml2YXRlOgogICAgIERhdGEgbV9kYXRh
OwogfTsKIAoraW5saW5lIGF1dG8gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSAtPiBPcHRp
b25TZXQ8TWFya2VyVHlwZT4KK3sKKyAgICBPcHRpb25TZXQ8TWFya2VyVHlwZT4gbWFya2VycyB7
CisgICAgICAgIEFjY2VwdGVkQ2FuZGlkYXRlCisgICAgICAgICwgQXV0b2NvcnJlY3RlZAorICAg
ICAgICAsIENvcnJlY3Rpb25JbmRpY2F0b3IKKyAgICAgICAgLCBEZWxldGVkQXV0b2NvcnJlY3Rp
b24KKyAgICAgICAgLCBEaWN0YXRpb25BbHRlcm5hdGl2ZXMKKyAgICAgICAgLCBHcmFtbWFyCisg
ICAgICAgICwgUmVqZWN0ZWRDb3JyZWN0aW9uCisgICAgICAgICwgUmVwbGFjZW1lbnQKKyAgICAg
ICAgLCBTcGVsbENoZWNraW5nRXhlbXB0aW9uCisgICAgICAgICwgU3BlbGxpbmcKKyAgICAgICAg
LCBUZXh0TWF0Y2gKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCisgICAg
ICAgICwgVGVsZXBob25lTnVtYmVyCisjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAg
ICwgRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcworICAgICAgICAsIERpY3RhdGlvblJl
c3VsdAorI2VuZGlmCisgICAgICAgICwgRHJhZ2dlZENvbnRlbnQKKyAgICB9OworICAgIHJldHVy
biBtYXJrZXJzOworfQorCiBpbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFya2VyKHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgaXNBY3RpdmVNYXRj
aCkKICAgICA6IG1fdHlwZShUZXh0TWF0Y2gpCiAgICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zm
c2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNw
cAppbmRleCAxNjVhMWQyMzVhOGJlNzE5MDQzZjA4MTA0ZTA5MjYzZTdhMjM3MmExLi45MTRjNDVi
ZTkzNDc1NTU5ZmU2ZjdjNTk5M2U4ZTcwYzE1Y2YwOGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtNDIsOSArNDIsOSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBib29sIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6cG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyB0eXBlcykK
K2lubGluZSBib29sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cG9zc2libHlIYXNNYXJrZXJz
KE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgcmV0
dXJuIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLmludGVyc2VjdHModHlwZXMpOworICAg
IHJldHVybiBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5jb250YWlucyh0eXBlcyk7CiB9
CiAKIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKERv
Y3VtZW50JiBkb2N1bWVudCkKQEAgLTU5LDcgKzU5LDcgQEAgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjp+RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKCkKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpkZXRhY2goKQogewogICAgIG1fbWFya2Vycy5jbGVhcigpOwotICAgIG1fcG9zc2li
bHlFeGlzdGluZ01hcmtlclR5cGVzID0gMDsKKyAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJU
eXBlcyA9IHsgfTsKIH0KIAogdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtl
cihSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgZGVzY3JpcHRpb24pCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmFkZERyYWdnZWRDb250ZW50TWFya2VyKFJlZlB0cjxSYW5nZT4gcmFuZ2Up
CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vy
cyhSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcywg
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlcikKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1v
dmVNYXJrZXJzKFJhbmdlKiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBz
aG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKIHsKICAgICBmb3IgKFRleHRJ
dGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4
dC5hZHZhbmNlKCkpIHsKICAgICAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlw
ZXMpKQpAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjph
ZGRNYXJrZXIoTm9kZSogbm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hCiAgICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikuZW5zdXJlTGluZUJveGVz
KCk7CiAgICAgfQogCi0gICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuYWRkKG5ld01h
cmtlci50eXBlKCkpOworICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzIHw9IG5ld01h
cmtlci50eXBlKCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VyTGlzdD4mIGxpc3QgPSBt
X21hcmtlcnMuYWRkKG5vZGUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKIApAQCAtNDAzLDcg
KzQwMyw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhOb2Rl
KiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwKICAgICBpZiAobGVuZ3RoIDw9IDApCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50TWFy
a2VyOjpBbGxNYXJrZXJzKCkpKQorICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50
TWFya2VyOjphbGxNYXJrZXJzKCkpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21h
cmtlcnMuaXNFbXB0eSgpKTsKIApAQCAtNDM3LDcgKzQzNyw3IEBAIHZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwKICAgICAgICAgZHN0Tm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOwogfQogCi12b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVz
IG1hcmtlclR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNob3Vs
ZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQordm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2Vy
VHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3Zl
UGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCiB7CiAgICAgaWYgKGxlbmd0aCA8PSAwKQogICAg
ICAgICByZXR1cm47CkBAIC00OTUsNyArNDk1LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGkK
ICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKSB7CiAgICAgICAgIG1fbWFya2Vycy5yZW1vdmUobm9k
ZSk7CiAgICAgICAgIGlmIChtX21hcmtlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9wb3Nz
aWJseUV4aXN0aW5nTWFya2VyVHlwZXMgPSAwOworICAgICAgICAgICAgbV9wb3NzaWJseUV4aXN0
aW5nTWFya2VyVHlwZXMgPSB7IH07CiAgICAgfQogCiAgICAgaWYgKGRvY0RpcnR5ICYmIG5vZGUt
PnJlbmRlcmVyKCkpCkBAIC01MjMsNyArNTIzLDcgQEAgRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0IExheW91dFBvaW4K
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIq
PiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNGb3IoTm9kZSogbm9kZSwgRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5cGVzKQorVmVjdG9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNGb3IoTm9kZSogbm9k
ZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKIHsK
ICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVy
biB7IH07CkBAIC01NDEsNyArNTQxLDcgQEAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIq
PiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNGb3IoTm9kZSogbm9kZSwKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1WZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2UmIHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCitWZWN0b3I8UmVuZGVyZWREb2N1bWVu
dE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2Um
IHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVz
KQogewogICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKICAgICAgICAg
cmV0dXJuIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4oKTsKQEAgLTU2Niw3ICs1NjYs
NyBAQCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2UmCiAgICAgcmV0dXJuIGZvdW5kTWFya2VyczsKIH0K
IAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9k
ZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5cGVzKQordm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgT3B0aW9uU2V0PERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3Np
Ymx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybjsKQEAgLTU3Nyw3ICs1
NzcsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2Rl
KiBub2RlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVAogICAgICAgICByZW1vdmVNYXJrZXJzRnJv
bUxpc3QoaXRlcmF0b3IsIG1hcmtlclR5cGVzKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtl
clR5cGVzKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKIHsKICAgICBp
ZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybjsKQEAg
LTU5MSwxNSArNTkxLDE1IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVN
YXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUCiAgICAgICAgICAgICBy
ZW1vdmVNYXJrZXJzRnJvbUxpc3QoaXRlcmF0b3IsIG1hcmtlclR5cGVzKTsKICAgICB9CiAKLSAg
ICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5yZW1vdmUobWFya2VyVHlwZXMpOworICAg
IG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzIC09IG1hcmtlclR5cGVzOwogfQogCi12b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vyc0Zyb21MaXN0KE1hcmtlck1h
cDo6aXRlcmF0b3IgaXRlcmF0b3IsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJU
eXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzRnJvbUxp
c3QoTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvciwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKIHsKICAgICBib29sIG5lZWRzUmVwYWludGluZyA9
IGZhbHNlOwogICAgIGJvb2wgbGlzdENhbkJlUmVtb3ZlZDsKIAotICAgIGlmIChtYXJrZXJUeXBl
cyA9PSBEb2N1bWVudE1hcmtlcjo6QWxsTWFya2VycygpKSB7CisgICAgaWYgKG1hcmtlclR5cGVz
ID09IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpIHsKICAgICAgICAgbmVlZHNSZXBhaW50
aW5nID0gdHJ1ZTsKICAgICAgICAgbGlzdENhbkJlUmVtb3ZlZCA9IHRydWU7CiAgICAgfSBlbHNl
IHsKQEAgLTYzMSwxMSArNjMxLDExIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpy
ZW1vdmVNYXJrZXJzRnJvbUxpc3QoTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvCiAgICAgaWYg
KGxpc3RDYW5CZVJlbW92ZWQpIHsKICAgICAgICAgbV9tYXJrZXJzLnJlbW92ZShpdGVyYXRvcik7
CiAgICAgICAgIGlmIChtX21hcmtlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9wb3NzaWJs
eUV4aXN0aW5nTWFya2VyVHlwZXMgPSAwOworICAgICAgICAgICAgbV9wb3NzaWJseUV4aXN0aW5n
TWFya2VyVHlwZXMgPSB7IH07CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5
cGVzKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKE9wdGlv
blNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCiB7CiAgICAgaWYg
KCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQogICAgICAgICByZXR1cm47CkBAIC02
NjUsNyArNjY1LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJr
ZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXIKIAogdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgaW50IGRlbHRhKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50
TWFya2VyOjpBbGxNYXJrZXJzKCkpKQorICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKERvY3Vt
ZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFt
X21hcmtlcnMuaXNFbXB0eSgpKTsKIApAQCAtNzE2LDcgKzcxNiw3IEBAIHZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIGluCiAKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0
aXZlKFJhbmdlKiByYW5nZSwgYm9vbCBhY3RpdmUpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01h
cmtlcnMoRG9jdW1lbnRNYXJrZXI6OkFsbE1hcmtlcnMoKSkpCisgICAgaWYgKCFwb3NzaWJseUhh
c01hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCkBAIC03NTYsNyArNzU2LDcgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoTm9kZSogbm9k
ZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQKICAgICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+cmVwYWlu
dCgpOwogfQogCi1ib29sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFzTWFya2VycyhSYW5n
ZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKK2Jvb2wg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdlJiByYW5nZSwgT3B0aW9u
U2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAo
IXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTc4MCw3ICs3ODAsNyBAQCBib29sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFzTWFy
a2VycyhSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzY3JpcHRp
b25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZShSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UmIHJhbmdl
LCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQogewog
ICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCmluZGV4
IDhkZWI0MTdmNjZlZDM1MzMxNjk2MGQxZWVhNTYwZmNiYTViNTRkYzguLjkwMDdhMTg3M2FkNTlj
MWRjY2NhNTI3NmU4OTQ2ZWI0ZWU1YTkxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTYzLDI4ICs2MywyOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50
IGxlbmd0aCwgTm9kZSogZHN0Tm9kZSwgaW50IGRlbHRhKTsKICAgICBib29sIGhhc01hcmtlcnMo
KSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbWFya2Vycy5pc0VtcHR5KCkgPT0gIW1f
cG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLmludGVyc2VjdHMoRG9jdW1lbnRNYXJrZXI6OkFs
bE1hcmtlcnMoKSkpOworICAgICAgICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAhbV9w
b3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuY29udGFpbnMoRG9jdW1lbnRNYXJrZXI6OmFsbE1h
cmtlcnMoKSkpOwogICAgICAgICByZXR1cm4gIW1fbWFya2Vycy5pc0VtcHR5KCk7CiAgICAgfQot
ICAgIGJvb2wgaGFzTWFya2VycyhSYW5nZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9
IERvY3VtZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpOworICAgIGJvb2wgaGFzTWFya2VycyhSYW5n
ZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtl
cjo6YWxsTWFya2VycygpKTsKIAogICAgIC8vIFdoZW4gYSBtYXJrZXIgcGFydGlhbGx5IG92ZXJs
YXBzIHdpdGggcmFuZ2UsIGlmIHJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VycyBpcyB0
cnVlLCB3ZSBjb21wbGV0ZWx5CiAgICAgLy8gcmVtb3ZlIHRoZSBtYXJrZXIuIElmIHRoZSBhcmd1
bWVudCBpcyBmYWxzZSwgd2Ugd2lsbCBhZGp1c3QgdGhlIHNwYW4gb2YgdGhlIG1hcmtlciBzbyB0
aGF0IGl0IHJldGFpbnMKICAgICAvLyB0aGUgcG9ydGlvbiB0aGF0IGlzIG91dHNpZGUgb2YgdGhl
IHJhbmdlLgogICAgIGVudW0gUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCB7
IERvTm90UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIsIFJlbW92ZVBhcnRpYWxseU92
ZXJsYXBwaW5nTWFya2VyIH07Ci0gICAgdm9pZCByZW1vdmVNYXJrZXJzKFJhbmdlKiwgRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGVzID0gRG9jdW1lbnRNYXJrZXI6OkFsbE1hcmtlcnMoKSwgUmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5
T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlKiwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9
IERvY3VtZW50TWFya2VyOjpBbGxNYXJrZXJzKCksICBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGlu
Z01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Cisg
ICAgdm9pZCByZW1vdmVNYXJrZXJzKFJhbmdlKiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxs
eU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyKTsKKyAgICB2b2lkIHJlbW92ZU1hcmtlcnMoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCBpbnQgbGVuZ3RoLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0g
RG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZXMgPSBEb2N1bWVudE1hcmtlcjo6QWxsTWFya2VycygpKTsKLSAgICB2b2lkIHJlbW92
ZU1hcmtlcnMoTm9kZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9IERvY3VtZW50TWFy
a2VyOjpBbGxNYXJrZXJzKCkpOwotICAgIHZvaWQgcmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGVzID0gRG9jdW1lbnRNYXJrZXI6OkFsbE1hcmtlcnMoKSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByZW1vdmVNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKKyAgICB2b2lkIHJl
bW92ZU1hcmtlcnMoTm9kZSosIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4g
PSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKKyAgICB2b2lkIHJlcGFpbnRNYXJrZXJz
KE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6
YWxsTWFya2VycygpKTsKICAgICB2b2lkIHNoaWZ0TWFya2VycyhOb2RlKiwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIGludCBkZWx0YSk7CiAgICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZlKFJhbmdlKiwg
Ym9vbCk7CiAgICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZlKE5vZGUqLCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFZl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vyc0ZvcihOb2RlKiwgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGVzID0gRG9jdW1lbnRNYXJrZXI6OkFsbE1hcmtlcnMoKSk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzSW5S
YW5nZShSYW5nZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyk7Ci0gICAgdm9pZCBjbGVh
ckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UmLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZW5kZXJlZERv
Y3VtZW50TWFya2VyKj4gbWFya2Vyc0ZvcihOb2RlKiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOworICAgIFdFQkNP
UkVfRVhQT1JUIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vyc0luUmFuZ2Uo
UmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKKyAgICB2b2lk
IGNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZShSYW5nZSYsIE9wdGlv
blNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB1cGRhdGVSZWN0c0ZvckludmFsaWRhdGVkTWFya2Vyc09mVHlwZShEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSk7CiAKQEAgLTEwMywxMiArMTAzLDEyIEBAIHByaXZhdGU6CiAKICAgICB0
eXBlZGVmIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyPiBNYXJrZXJMaXN0OwogICAgIHR5
cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZXJMaXN0Pj4g
TWFya2VyTWFwOwotICAgIGJvb2wgcG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlcyk7Ci0gICAgdm9pZCByZW1vdmVNYXJrZXJzRnJvbUxpc3QoTWFya2VyTWFwOjpp
dGVyYXRvciwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzKTsKKyAgICBib29sIHBvc3NpYmx5
SGFzTWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKKyAgICB2
b2lkIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChNYXJrZXJNYXA6Oml0ZXJhdG9yLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKIAogICAgIE1hcmtlck1hcCBtX21hcmtlcnM7
CiAgICAgLy8gUHJvdmlkZSBhIHF1aWNrIHdheSB0byBkZXRlcm1pbmUgd2hldGhlciBhIHBhcnRp
Y3VsYXIgbWFya2VyIHR5cGUgaXMgYWJzZW50IHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgbWFw
LgotICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJr
ZXJUeXBlcyB7IDAgfTsKKyAgICBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
IG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzOwogICAgIERvY3VtZW50JiBtX2RvY3VtZW50
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAKaW5kZXggNTIxNDRkMjY4ZGFiNmRmMDA1MDA0ZTQ0NTA3N2YzNGFhYTM0
N2NhYy4uZjliOThhMzczNjVlMTAzMzNhOTJlNGZhZWQ0NTViOTdjNGE3OWYwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
CkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
VmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCi0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODQsMzQgKzgzLDE5IEBA
IHByaXZhdGU6CiAKICNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCiAKLXN0YXRpYyBjb25z
dCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvckF1dG9j
b3JyZWN0aW9uKCkKK3N0YXRpYyBpbmxpbmUgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkKIHsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8VmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPj4gbWFya2VyVHlw
ZXNGb3JBdXRvQ29ycmVjdGlvbjsKLSAgICBpZiAobWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlv
bi5nZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlv
bi5nZXQoKS5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICAgICAgbWFy
a2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5nZXQoKS5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OkNv
cnJlY3Rpb25JbmRpY2F0b3IpOwotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9u
LmdldCgpLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0g
ICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uZ2V0KCkuYXBwZW5kKERvY3VtZW50
TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcmtlclR5cGVzRm9y
QXV0b0NvcnJlY3Rpb247CisgICAgcmV0dXJuIHsgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
LCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvciwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsQ2hlY2tpbmdFeGVtcHRpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH07CiB9
CiAKLXN0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJr
ZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkKK3N0YXRpYyBpbmxpbmUgT3B0aW9uU2V0PERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkKIHsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPj4g
bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudDsKLSAgICBpZiAobWFya2VyVHlwZXNGb3JSZXBsYWNl
bWVudC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVu
dC5nZXQoKS5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICAgICAgbWFy
a2VyVHlwZXNGb3JSZXBsYWNlbWVudC5nZXQoKS5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JSZXBs
YWNlbWVudDsKKyAgICByZXR1cm4geyBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIERvY3Vt
ZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uIH07CiB9CiAKLXN0YXRpYyBjb25zdCBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvckFwcGxpZWRE
aWN0YXRpb25BbHRlcm5hdGl2ZSgpCitzdGF0aWMgaW5saW5lIE9wdGlvblNldDxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNGb3JBcHBsaWVkRGljdGF0aW9uQWx0ZXJuYXRp
dmUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+PiBtYXJrZXJUeXBlc0ZvckFwcGxpZWREaWN0YXRpb25BbHRlcm5hdGl2ZTsK
LSAgICBpZiAobWFya2VyVHlwZXNGb3JBcHBsaWVkRGljdGF0aW9uQWx0ZXJuYXRpdmUuZ2V0KCku
aXNFbXB0eSgpKQotICAgICAgICBtYXJrZXJUeXBlc0ZvckFwcGxpZWREaWN0YXRpb25BbHRlcm5h
dGl2ZS5nZXQoKS5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24p
OwotICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckFwcGxpZWREaWN0YXRpb25BbHRlcm5hdGl2ZTsK
KyAgICByZXR1cm4gRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb247CiB9CiAK
IHN0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiYgbWFya2VycykKQEAgLTIzNyw3ICsyMjEsNyBAQCBT
dHJpbmcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlz
bWlzc2luZ0FsdGVybmF0aXZlVGV4dAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29u
c3QgUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBBbHRlcm5hdGl2ZVRl
eHRUeXBlIGFsdGVybmF0aXZlVHlwZSwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgY29uc3Qg
U3RyaW5nJiBhbHRlcm5hdGl2ZSwgQWx0ZXJuYXRpdmVUZXh0VHlwZSBhbHRlcm5hdGl2ZVR5cGUs
IE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNUb0FkZCkK
IHsKICAgICBhdXRvIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSByYW5nZS5j
bG9uZVJhbmdlKCk7CiAKQEAgLTI4Myw3ICsyNjcsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2Us
CiAKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByZXBsYWNlbWVudFJh
bmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpOwogCi0gICAgZm9yIChh
dXRvJiBtYXJrZXJUeXBlIDogbWFya2VyVHlwZXNUb0FkZCkKKyAgICBmb3IgKGF1dG8gbWFya2Vy
VHlwZSA6IG1hcmtlclR5cGVzVG9BZGQpCiAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKHJlcGxh
Y2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGll
ZEFsdGVybmF0aXZlVGV4dChhbHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsKIH0KIApAQCAt
MzE5LDcgKzMwMyw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
VW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTCiAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmVuZCgpKTsKIAogICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VycyA9IG1f
ZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMucmVtb3ZlTWFya2Vycyhy
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1lbnRNYXJrZXI6OkF1
dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOworICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycyhyYW5nZS5nZXQoKSwg
T3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB7IERvY3VtZW50TWFya2VyOjpT
cGVsbGluZywgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQgfSwgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAgICAgbWFya2Vy
cy5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiAg
ICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENo
ZWNraW5nRXhlbXB0aW9uKTsKIH0KQEAgLTUyOCw3ICs1MTIsNyBAQCB2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6Om1hcmtSZXZlcnNlZChSYW5nZSYgY2hhbmdlZFJhbmdlKQogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihSYW5nZSYgcmVwbGFjZWRS
YW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKIHsKICAgICBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXImIG1hcmtlcnMgPSByZXBsYWNlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgZm9yIChhdXRvJiBtYXJrZXJUeXBlIDogbWFya2VyVHlw
ZXNGb3JBdXRvY29ycmVjdGlvbigpKSB7CisgICAgZm9yIChhdXRvIG1hcmtlclR5cGUgOiBtYXJr
ZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpIHsKICAgICAgICAgaWYgKG1hcmtlclR5cGUgPT0g
RG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJr
ZXI6OkF1dG9jb3JyZWN0ZWQpCiAgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcigmcmVwbGFj
ZWRSYW5nZSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAgICBlbHNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCmlu
ZGV4IDVmNjY1YThkM2VhZTQxNGMyN2RmNmRlNTJmNGEwOWM2NTc1MDZjODAuLjQzZGJlNjg3MTAw
OWQ5ZWViYWZlYjNiZjgyYWE2MzQ5MzczOWZmYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCkBAIC0yNywxMSArMjcsOCBAQAog
CiAjaW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRN
YXJrZXIuaCIKLSNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlJhbmdlLmgi
Ci0jaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRl
ICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQzLDcgKzQwLDEwIEBAIGNsYXNzIEVkaXRDb21tYW5kQ29t
cG9zaXRpb247CiBjbGFzcyBFdmVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgVGV4dENoZWNrZXJD
bGllbnQ7CitjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOworCiBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJu
YXRpdmU7CitzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogCiBjbGFzcyBBbHRlcm5hdGl2ZVRl
eHREZXRhaWxzIDogcHVibGljIFJlZkNvdW50ZWQ8QWx0ZXJuYXRpdmVUZXh0RGV0YWlscz4gewog
cHVibGljOgpAQCAtNTgsOCArNTgsNiBAQCBzdHJ1Y3QgQWx0ZXJuYXRpdmVUZXh0SW5mbyB7CiAg
ICAgUmVmUHRyPEFsdGVybmF0aXZlVGV4dERldGFpbHM+IGRldGFpbHM7CiB9OwogCi1zdHJ1Y3Qg
VGV4dENoZWNraW5nUmVzdWx0OwotCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQogLy8g
VGhlc2UgYmFja3NsYXNoZXMgYXJlIGZvciBtYWtpbmcgc3R5bGUgY2hlY2tlciBoYXBweS4KICNk
ZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBcCkBAIC0xMTcsNyArMTE1LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCiAgICAgU3Ry
aW5nIGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpOwotICAg
IHZvaWQgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdlJiwgY29uc3QgU3Ry
aW5nJiBhbHRlcm5hdGl2ZSwgQWx0ZXJuYXRpdmVUZXh0VHlwZSwgY29uc3QgVmVjdG9yPERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpOworICAgIHZvaWQgYXBwbHlBbHRlcm5hdGl2ZVRleHRU
b1JhbmdlKGNvbnN0IFJhbmdlJiwgY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSwgQWx0ZXJuYXRp
dmVUZXh0VHlwZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7CiAgICAg
dm9pZCB0aW1lckZpcmVkKCk7CiAgICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZv
ck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSYgcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogICAgIFN0cmluZyBtYXJr
ZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoQWx0ZXJuYXRpdmVUZXh0VHlw
ZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCA4N2RmNTE2NzE5OTQ5ZjI4ZTY0NDYw
ODFhN2MyMDE0NDg1ZTc4MTMxLi42ODU3NGM0YTMzMzIwZjc2YzJmMjExYjFkNGM2ZjY5NzU5NDM0
ZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcApAQCAtNzY2LDcgKzc2Niw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxh
Y2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoVGV4dCYgbm9kZSwgdW5zaWduCiB7CiAgICAg
UmVmPFRleHQ+IHByb3RlY3RlZE5vZGUobm9kZSk7CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyJiBtYXJrZXJDb250cm9sbGVyID0gZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgYXV0byBt
YXJrZXJzID0gY29weU1hcmtlcnMobWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShSYW5n
ZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2RlLCBvZmZzZXQgKyBjb3Vu
dCksIERvY3VtZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpKTsKKyAgICBhdXRvIG1hcmtlcnMgPSBj
b3B5TWFya2VycyhtYXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgJm5vZGUsIG9mZnNldCwgJm5vZGUsIG9mZnNldCArIGNvdW50KSwgRG9jdW1l
bnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpOwogICAgIHJlcGxhY2VUZXh0SW5Ob2RlKG5vZGUsIG9m
ZnNldCwgY291bnQsIHJlcGxhY2VtZW50VGV4dCk7CiAgICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgJm5vZGUsIG9mZnNldCwgJm5vZGUsIG9mZnNl
dCArIHJlcGxhY2VtZW50VGV4dC5sZW5ndGgoKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBtYXJr
ZXIgOiBtYXJrZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDBlNjA2MDVlMDE0
YzUyMTk4YjU0NDQ5ZDcxMmJkYzc3OWYwOTdiZGEuLjcxYzlhMDNjMjQ2YzlmZWRlM2EzYTM2MmEw
YjQyMGU1NWQ2MTdiMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTI3NDQsMTEg
KzI3NDQsMTQgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlF
ZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICBmb3IgKGF1dG8qIG1hcmtl
ciA6IG1hcmtlcnMpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVtb3Zl
RGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKCptYXJrZXIpOwogCi0jaWYgUExBVEZPUk0o
SU9TKQotICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLnB0
cigpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlv
bkluZGljYXRvciB8IERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uIHwgRG9j
dW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyB8IERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSNlbHNlCi0gICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkucmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UucHRyKCksIERvY3VtZW50TWFya2VyOjpT
cGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpHcmFtbWFyIHwgRG9jdW1lbnRNYXJrZXI6OkNvcnJl
Y3Rpb25JbmRpY2F0b3IgfCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbiB8
IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMsIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIE9wdGlvblNl
dDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNUb1JlbW92ZSB7CisgICAg
ICAgIERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25J
bmRpY2F0b3IsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uLAorICAgICAg
ICBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCisjaWYgIVBMQVRGT1JNKElP
UykKKyAgICAgICAgLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcgogI2VuZGlmCisgICAgfTsKKyAg
ICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5wdHIoKSwgbWFy
a2VyVHlwZXNUb1JlbW92ZSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlcik7CiAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY2xlYXJEZXNj
cmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKHdvcmRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwCmluZGV4IDhmM2Y1ZWJiNzNiNTljODYwMTVjZTY2ZmVlNzkzODRjNDIzZTkzZTYuLmEyOTRi
YjMwMzdhNDgxYjc0MDQyZmI3ZDUxYmQ2MjRmN2U5Zjk4YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsQ2hlY2tlci5jcHAKQEAgLTIxNywxMyArMjE3LDEzIEBAIHZvaWQgU3BlbGxDaGVj
a2VyOjpkaWRDaGVja1N1Y2NlZWQoaW50IHNlcXVlbmNlLCBjb25zdCBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0CiB7CiAgICAgVGV4dENoZWNraW5nUmVxdWVzdERhdGEgcmVxdWVzdERhdGEgPSBt
X3Byb2Nlc3NpbmdSZXF1ZXN0LT5kYXRhKCk7CiAgICAgaWYgKHJlcXVlc3REYXRhLnNlcXVlbmNl
KCkgPT0gc2VxdWVuY2UpIHsKLSAgICAgICAgdW5zaWduZWQgbWFya2VycyA9IDA7CisgICAgICAg
IE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXM7CiAgICAg
ICAgIGlmIChyZXF1ZXN0RGF0YS5tYXNrKCkgJiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpCi0g
ICAgICAgICAgICBtYXJrZXJzIHw9IERvY3VtZW50TWFya2VyOjpTcGVsbGluZzsKKyAgICAgICAg
ICAgIG1hcmtlclR5cGVzIHw9IERvY3VtZW50TWFya2VyOjpTcGVsbGluZzsKICAgICAgICAgaWYg
KHJlcXVlc3REYXRhLm1hc2soKSAmIFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKQotICAgICAgICAg
ICAgbWFya2VycyB8PSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjsKLSAgICAgICAgaWYgKG1hcmtl
cnMpCi0gICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJr
ZXJzKCZtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlcnMpOworICAg
ICAgICAgICAgbWFya2VyVHlwZXMgfD0gRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI7CisgICAgICAg
IGlmICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVu
dCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycygmbV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tp
bmdSYW5nZSgpLCBtYXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKHNlcXVlbmNlLCBy
ZXN1bHRzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggZTlkMzY1OWZh
NGQxYTMzOWY1OWExZjA5NTI2ZDgzNjQ2MWFlMGU5Ny4uYjY2Mzg3YmRmYjg5OWE2Yjc1MzM4Mjkz
NTE2MjNjMDAzMmJhNjA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJh
bWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTY1
Miw3ICs2NTIsNyBAQCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJv
b3QoKSBjb25zdAogCiAgICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2VPZlJvb3RDb250ZW50
cy0+cGFzdExhc3ROb2RlKCk7CiAgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2VPZlJvb3RDb250
ZW50cy0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBkb2N1bWVu
dCgpLT5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZXMoRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMpKSkgewor
ICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJz
Rm9yKG5vZGUsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVz
KSkgewogICAgICAgICAgICAgLy8gRmlyc3QsIGFkZCB0ZXh0IHRoYXQgcHJlY2VkZSB0aGUgbWFy
a2VyLgogICAgICAgICAgICAgaWYgKHByZWNlZGluZ1RleHRTdGFydFBvc2l0aW9uICE9IGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpKSB7CiAg
ICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBwcmVjZWRpbmdUZXh0UmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKCpkb2N1bWVudCgpLCBwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiwgY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDRiMDBlZTJlMzhkMzEwYjlkODM5ODljYWNi
NGM4YjMyYWFjMjI1NzIuLjkyZDllNWY1NzY4M2M0NDBiNmU5ZmFkMjFjMDk5NThmNzExMWViM2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTM2MSwxMiArMzYxLDEyIEBA
IHN0YXRpYyBib29sIG1hcmtlclR5cGVGcm9tKGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgRG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBi
b29sIG1hcmtlclR5cGVzRnJvbShjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlcyYgcmVzdWx0KQorc3RhdGljIGJvb2wgbWFya2VyVHlwZXNGcm9tKGNv
bnN0IFN0cmluZyYgbWFya2VyVHlwZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiYgcmVzdWx0KQogewogICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHNpbmd1bGFy
UmVzdWx0OwogCiAgICAgaWYgKG1hcmtlclR5cGUuaXNFbXB0eSgpIHx8IGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKG1hcmtlclR5cGUsICJhbGwiKSkKLSAgICAgICAgcmVzdWx0ID0gRG9j
dW1lbnRNYXJrZXI6OkFsbE1hcmtlcnMoKTsKKyAgICAgICAgcmVzdWx0ID0gRG9jdW1lbnRNYXJr
ZXI6OmFsbE1hcmtlcnMoKTsKICAgICBlbHNlIGlmIChtYXJrZXJUeXBlRnJvbShtYXJrZXJUeXBl
LCBzaW5ndWxhclJlc3VsdCkpCiAgICAgICAgIHJlc3VsdCA9IHNpbmd1bGFyUmVzdWx0OwogICAg
IGVsc2UKQEAgLTEzOTEsNyArMTM5MSw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxz
OjppbnNwZWN0b3JIaWdobGlnaHRPYmplY3QoKQogCiBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gSW50
ZXJuYWxzOjptYXJrZXJDb3VudEZvck5vZGUoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJr
ZXJUeXBlKQogewotICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcyA9
IDA7CisgICAgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBl
czsKICAgICBpZiAoIW1hcmtlclR5cGVzRnJvbShtYXJrZXJUeXBlLCBtYXJrZXJUeXBlcykpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CiAKQEAgLTE0MDMsNyArMTQw
Myw3IEBAIEV4Y2VwdGlvbk9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBJbnRlcm5hbHM6Om1h
cmtlckF0KE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluCiB7CiAgICAgbm9kZS5kb2N1bWVudCgpLnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5cGVzID0gMDsKKyAgICBPcHRpb25TZXQ8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzOwogICAgIGlmICghbWFya2VyVHlwZXNGcm9t
KG1hcmtlclR5cGUsIG1hcmtlclR5cGVzKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZ
TlRBWF9FUlIgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29y
ZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3Mv
V2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCmluZGV4IDc1Y2UzYjc4YzdlNWE0
NWU3MmVjNGJmNDQxZjZmYmY1Y2U1MTI5NTEuLjM4MTYzY2RmZGNkYjQ3NWViM2MwYmY4OTg5ZDQ4
MDZjNWJkMzVlYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVT
dXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lv
cy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KQEAgLTQyMyw3ICs0MjMsNyBA
QCBzdGF0aWMgaW5saW5lIFNlbGVjdGlvbkRpcmVjdGlvbiB0b1NlbGVjdGlvbkRpcmVjdGlvbihX
ZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbgogICAgIE5vZGUqIG5vZGUgPSBwLmRlZXBFcXVpdmFs
ZW50KCkuYW5jaG9yTm9kZSgpOwogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG5vZGUtPmRvY3Vt
ZW50KCk7CiAgICAgCi0gICAgY29uc3QgYXV0byYgbWFya2VycyA9IGRvY3VtZW50Lm1hcmtlcnMo
KS5tYXJrZXJzRm9yKG5vZGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyhEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykpOworICAgIGNvbnN0IGF1dG8m
IG1hcmtlcnMgPSBkb2N1bWVudC5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcyk7CiAgICAgaWYgKG1hcmtlcnMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAKQEAgLTQ1Nyw3ICs0NTcs
NyBAQCBzdGF0aWMgaW5saW5lIFNlbGVjdGlvbkRpcmVjdGlvbiB0b1NlbGVjdGlvbkRpcmVjdGlv
bihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbgogICAgIE5vZGUqIG5vZGUgPSBwLmRlZXBFcXVp
dmFsZW50KCkuYW5jaG9yTm9kZSgpOwogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG5vZGUtPmRv
Y3VtZW50KCk7CiAgICAgCi0gICAgY29uc3QgYXV0byYgbWFya2VycyA9IGRvY3VtZW50Lm1hcmtl
cnMoKS5tYXJrZXJzRm9yKG5vZGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyhEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpKTsKKyAgICBjb25zdCBhdXRvJiBtYXJrZXJzID0gZG9jdW1lbnQu
bWFya2VycygpLm1hcmtlcnNGb3Iobm9kZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAg
ICBpZiAobWFya2Vycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCg==
</data>
<flag name="review"
          id="336497"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>