<?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>149446</bug_id>
          
          <creation_ts>2015-09-21 21:30:37 -0700</creation_ts>
          <short_desc>Split author style code out from DocumentStyleSheetCollection</short_desc>
          <delta_ts>2015-09-25 14:59:55 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149230</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1127923</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-21 21:30:37 -0700</bug_when>
    <thetext>Shadow trees may have their own author style. Factor the related code out so we can use it outside document context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128208</commentid>
    <comment_count>1</comment_count>
      <attachid>261794</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-22 21:33:16 -0700</bug_when>
    <thetext>Created attachment 261794
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128209</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-22 21:38:28 -0700</bug_when>
    <thetext>The patch is large because copy-moves, not because it changes that much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128235</commentid>
    <comment_count>3</comment_count>
      <attachid>261800</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-22 23:55:57 -0700</bug_when>
    <thetext>Created attachment 261800
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128236</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-22 23:59:17 -0700</bug_when>
    <thetext>Attachment 261800 did not pass style-queue:


ERROR: Source/WebCore/dom/DOMAllInOne.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 34 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128292</commentid>
    <comment_count>5</comment_count>
      <attachid>261800</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-09-23 04:31:58 -0700</bug_when>
    <thetext>Comment on attachment 261800
patch

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

r=me

&gt; Source/WebCore/ChangeLog:14
&gt; +        AuthorStyleSheets - author stylesheets and optimization code
&gt; +        ExtensionStyleSheets - user stylesheets, injected author stylesheets, content extension stylesheets

This is a nice split.

&gt; Source/WebCore/dom/AuthorStyleSheets.cpp:65
&gt; +    , m_pendingStylesheets(0)
&gt; +    , m_injectedStyleSheetCacheValid(false)
&gt; +    , m_hadActiveLoadingStylesheet(false)
&gt; +    , m_pendingUpdateType(NoUpdate)
&gt; +    , m_usesFirstLineRules(false)
&gt; +    , m_usesFirstLetterRules(false)
&gt; +    , m_usesRemUnits(false)
&gt; +    , m_usesStyleBasedEditability(false)

You know where we could do all this instead? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128309</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-23 08:05:29 -0700</bug_when>
    <thetext>https://webkit.org/b/149446</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261794</attachid>
            <date>2015-09-22 21:33:16 -0700</date>
            <delta_ts>2015-09-22 23:55:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylesheetcollection-split-3.patch</filename>
            <type>text/plain</type>
            <size>212449</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMSBAQAorMjAxNS0wOS0yMiAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgYXV0aG9yIHN0eWxl
IGNvZGUgb3V0IGZyb20gRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NDQ2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2hhZG93IHRyZWVzIG1heSBoYXZl
IHRoZWlyIG93biBhdXRob3Igc3R5bGUuIEZhY3RvciB0aGUgcmVsYXRlZCBjb2RlIG91dCBzbyB3
ZSBjYW4gbGF0ZXIgdXNlCisgICAgICAgIGl0IG91dHNpZGUgZG9jdW1lbnQgY29udGV4dC4KKwor
ICAgICAgICBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uIGlzIHJlcGxhY2VkIGJ5IHR3byBj
bGFzc2VzOgorCisgICAgICAgIEF1dGhvclN0eWxlU2hlZXRzIC0gYXV0aG9yIHN0eWxlc2hlZXRz
IGFuZCBvcHRpbWl6YXRpb24gY29kZQorICAgICAgICBFeHRlbnNpb25TdHlsZVNoZWV0cyAtIHVz
ZXIgc3R5bGVzaGVldHMsIGluamVjdGVkIGF1dGhvciBzdHlsZXNoZWV0cywgY29udGVudCBleHRl
bnNpb24gc3R5bGVzaGVldHMKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0Jh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb25zQmFja2VuZDo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgor
ICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2hlZXQ6OmRpZE11dGF0ZVJ1bGVzKToKKyAgICAgICAgKiBjc3MvRG9jdW1lbnRSdWxlU2V0
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjp+RG9jdW1lbnRSdWxl
U2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjppbml0VXNlclN0eWxl
KToKKyAgICAgICAgKiBjc3MvRG9jdW1lbnRSdWxlU2V0cy5oOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRSdWxlU2V0czo6c2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1
bGVTZXRzOjp1bmNvbW1vbkF0dHJpYnV0ZSk6CisgICAgICAgICogY3NzL0luc3BlY3RvckNTU09N
V3JhcHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTT01XcmFwcGVyczo6
Y29sbGVjdEZyb21TdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NP
TVdyYXBwZXJzOjpnZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNTU09NV3JhcHBlcnM6OmNvbGxlY3RGcm9tRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogY3NzL0luc3BlY3RvckNTU09NV3JhcHBlcnMu
aDoKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVl
dExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldExpc3Q6OnN0eWxlU2hlZXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0OjpkZXRhY2hGcm9tRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldExpc3Q6Omxlbmd0aCk6CisgICAgICAgICog
ZG9tL0F1dGhvclN0eWxlU2hlZXRzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBdXRo
b3JTdHlsZVNoZWV0czo6QXV0aG9yU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6QXV0
aG9yU3R5bGVTaGVldHM6OmNvbWJpbmVDU1NGZWF0dXJlRmxhZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6QXV0aG9yU3R5bGVTaGVldHM6OnJlc2V0Q1NTRmVhdHVyZUZsYWdzKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjphZGRBdXRob3JTaGVldCk6CisgICAgICAgIChXZWJD
b3JlOjpBdXRob3JTdHlsZVNoZWV0czo6cmVtb3ZlUGVuZGluZ1NoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjphZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6cmVtb3ZlU3R5bGVTaGVldENhbmRp
ZGF0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OmNvbGxlY3RB
Y3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6
YW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyRW5hYmxl
ZE5vbmVtcHR5Q1NTU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVT
aGVldHM6OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhv
clN0eWxlU2hlZXRzOjphY3RpdmVTdHlsZVNoZWV0c0Zvckluc3BlY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldHNDb250YWlucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6ZGV0YWNoRnJvbURvY3VtZW50KToK
KyAgICAgICAgKiBkb20vQXV0aG9yU3R5bGVTaGVldHMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpBdXRob3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldHMpOgorICAgICAgICAoV2Vi
Q29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OnN0eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1dGhvclN0eWxlU2hlZXRzOjpzdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpwZW5kaW5nVXBkYXRlVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6c2V0UGVuZGluZ1VwZGF0ZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OmZsdXNoUGVuZGluZ1VwZGF0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OnByZWZlcnJlZFN0eWxlc2hl
ZXRTZXROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpzZWxlY3Rl
ZFN0eWxlc2hlZXRTZXROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRz
OjpzZXRQcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBdXRo
b3JTdHlsZVNoZWV0czo6c2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6YWRkUGVuZGluZ1NoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpoYXNQZW5kaW5nU2hlZXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjp1c2VzRmlyc3RMaW5lUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OnVzZXNGaXJzdExldHRlclJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjp1c2VzUmVtVW5pdHMpOgorICAgICAgICAo
V2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OnNldFVzZXNSZW1Vbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjp1c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpzZXRVc2VzU3R5bGVCYXNlZEVkaXRh
YmlsaXR5KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp+RG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldENvbXBhdGliaWxpdHlNb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6Y3JlYXRlU3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Zm9udHNOZWVkVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpw
cm9jZXNzSHR0cEVxdWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVmZXJyZWRT
dHlsZXNoZWV0U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZWxlY3RlZFN0eWxl
c2hlZXRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFNlbGVjdGVkU3R5bGVz
aGVldFNldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2NoZWR1bGVPcHRpbWl6ZWRT
dHlsZVNoZWV0VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzdHlsZVJlc29s
dmVyQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aGF2ZVN0eWxlc2hlZXRz
TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRDYWNoZWRMb2NhbGUpOgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmF1
dGhvclN0eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpleHRlbnNpb25T
dHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Z290b0FuY2hvck5lZWRl
ZEFmdGVyU3R5bGVzaGVldHNMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRH
b3RvQW5jaG9yTmVlZGVkQWZ0ZXJTdHlsZXNoZWV0c0xvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnN0eWxlU2hlZXRDb2xsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20v
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZG9t
L0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20v
RXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25TdHlsZVNoZWV0czo6RXh0ZW5zaW9uU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OnBhZ2VVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OmNsZWFyUGFnZVVzZXJTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25TdHlsZVNoZWV0czo6dXBkYXRlUGFnZVVzZXJTaGVldCk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25TdHlsZVNoZWV0czo6aW5qZWN0ZWRVc2VyU3R5bGVTaGVl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OmluamVjdGVkQXV0
aG9yU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6
OnVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvblN0eWxlU2hlZXRzOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OmFkZFVzZXJTaGVldCk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25TdHlsZVNoZWV0czo6YWRkRGlzcGxheU5vbmVTZWxlY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25TdHlsZVNoZWV0czo6bWF5YmVBZGRDb250
ZW50RXh0ZW5zaW9uU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVl
dHM6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25TdHlsZVNoZWV0czo6ZGV0YWNoRnJvbURvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OkRvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6Y29tYmluZUNTU0ZlYXR1cmVGbGFncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpyZXNldENTU0ZlYXR1cmVGbGFncyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
OjpwYWdlVXNlclNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb246OmNsZWFyUGFnZVVzZXJTaGVldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVQYWdlVXNlclNo
ZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb246OmluamVjdGVkVXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmluamVjdGVkQXV0aG9yU3R5bGVTaGVl
dHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbjo6dXBkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6aW52YWxpZGF0ZUluamVjdGVk
U3R5bGVTaGVldENhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb246OmFkZEF1dGhvclNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFkZFVzZXJTaGVldCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphZGRE
aXNwbGF5Tm9uZVNlbGVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246Om1heWJlQWRkQ29udGVudEV4dGVuc2lvblNoZWV0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnN0
eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpyZW1vdmVQZW5kaW5nU2hlZXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRk
U3R5bGVTaGVldENhbmRpZGF0ZU5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbHRlckVuYWJsZWROb25lbXB0eUNTU1N0eWxl
U2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb246OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFjdGl2ZVN0eWxlU2hlZXRzRm9y
SW5zcGVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb246OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6ZGV0YWNoRnJvbURvY3Vt
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24u
aC4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvblN0eWxlU2hlZXRzOjpkb2N1bWVudFVzZXJT
dHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uOjpzdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFjdGl2ZUF1dGhvclN0eWxlU2hl
ZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb246OmRvY3VtZW50VXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmRvY3VtZW50QXV0aG9yU3R5bGVTaGVl
dHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbjo6cGVuZGluZ1VwZGF0ZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6c2V0UGVuZGluZ1VwZGF0ZVR5cGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Zmx1c2hQ
ZW5kaW5nVXBkYXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uOjpwcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpzZWxlY3RlZFN0
eWxlc2hlZXRTZXROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb246OnNldFByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnNldFNl
bGVjdGVkU3R5bGVzaGVldFNldE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkUGVuZGluZ1NoZWV0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246Omhhc1BlbmRpbmdT
aGVldHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6dXNlc0ZpcnN0TGluZVJ1bGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVzZXNGaXJzdExldHRlclJ1bGVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVz
ZXNSZW1Vbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjpzZXRVc2VzUmVtVW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b246OnNldFVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkpOiBEZWxldGVkLgorICAgICAgICAqIGRv
bS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lU3R5
bGVTaGVldE93bmVyOjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVTdHlsZVNoZWV0T3duZXI6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lU3R5bGVTaGVldE93bmVyOjpjbGVhckRvY3VtZW50RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZVN0eWxlU2hlZXRPd25lcjo6c2hlZXRMb2FkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lU3R5bGVTaGVldE93bmVyOjpzdGFydExvYWRpbmdEeW5hbWljU2hl
ZXQpOgorICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjp+UHJvY2Vzc2luZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6bm9kZU5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzaGVldExvYWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Omluc2VydGVkSW50byk6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnJlbW92ZWRGcm9tKToKKyAg
ICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TGlua0VsZW1lbnQ6On5IVE1MTGlua0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVt
ZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OmFk
ZFBlbmRpbmdTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnJlbW92
ZVBlbmRpbmdTaGVldCk6CisgICAgICAgICogaHRtbC9IVE1MUXVvdGVFbGVtZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RBbGxEb2N1bWVudFN0eWxlU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUpOgor
ICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudExvYWRlcjo6Y29tbWl0RGF0YSk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6CisgICAgICAg
ICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAgICAgICAqIHBhZ2UvVXNlckNvbnRlbnRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6aW52YWxp
ZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGlu
ZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Z2V0Rmlyc3RMZXR0ZXIp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckVsZW1lbnQ6OnVuY2FjaGVkRmlyc3RMaW5lU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRWxlbWVudDo6Y2FjaGVkRmlyc3RMaW5lU3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50
OjpmaXJzdExpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpzZXRB
bmNlc3RvckxpbmVCb3hEaXJ0eSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxp
bmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmxpbmVIZWlnaHQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGluZUJyZWFrOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojp2ZXJ0aWNh
bFBvc2l0aW9uRm9yQm94KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlTG9jYWwpOgorCiAyMDE1LTA5LTIyICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgR2V0IHJpZCBvZiBFTkFC
TEUoR0dDKQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02Mzc2LDYgKzYz
NzYsOCBAQAogCQlFNDUzOTA0OTBFQUZENjM3MDAzNjk1QzggLyogV2ViQ29yZVN5c3RlbUludGVy
ZmFjZUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0NTM5MDM4MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1t
ICovOyB9OwogCQlFNDUzOTA0RDBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwM0MwRUFGRDYz
NzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSAqLzsgfTsKIAkJRTQ1MzkwQUUwRUFGRjRCNTAwMzY5
NUM4IC8qIFN5c3RlbU1lbW9yeUlPUy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5
SU9TLmNwcCAqLzsgfTsKKwkJRTQ2MUQ2NUQxQkIwQzdGMDAwQ0I1NjQ1IC8qIEF1dGhvclN0eWxl
U2hlZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0NjFENjVDMUJCMEM3RjAwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5jcHAgKi87IHNl
dHRpbmdzID0ge0FTU0VUX1RBR1MgPSAoKTsgfTsgfTsKKwkJRTQ2MUQ2NUYxQkIwQzgwRDAwQ0I1
NjQ1IC8qIEF1dGhvclN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDYxRDY1RTFCQjBDODBEMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVT
aGVldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVNTRVRfVEFHUyA9ICgpOyB9OyB9OwogCQlFNDYyQTRB
MTExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50
UG9pbnRIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTQ2QTJCMUMxN0NBNjVCOTAwMERCQ0Q4IC8qIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4IC8qIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0
NkEyQjFFMTdDQTc2QjEwMDBEQkNEOCAvKiBFbGVtZW50Q2hpbGRJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2QTJCMUQxN0NBNzZCMTAw
MERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYzODUsOCArNjM4Nyw4IEBACiAJCUU0Nzc4Qjgw
MTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDc3OEI3RTExNUE1ODFBMDBCNUQzNzIgLyogSlND
dXN0b21FdmVudC5oICovOyB9OwogCQlFNDdCNEJFODBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0N0I0QkU2MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0N0I0
QkU5MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdCNEJFNzBFNzEyNDE2MDAw
Mzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwICovOyB9OwotCQlFNDdFMjc2NTE2MDM2
RUQyMDBFRTJBRkIgLyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3NjQxNjAzNkVEMjAwRUUy
QUZCIC8qIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlFNDdFMjc2ODE2MDM2RURDMDBFRTJBRkIg
LyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdFMjc2NzE2MDM2RURDMDBFRTJBRkIgLyogRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgKi87IH07CisJCUU0N0UyNzY1MTYwMzZFRDIw
MEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3NjQxNjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVu
c2lvblN0eWxlU2hlZXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJRTQ3RTI3NjgxNjAzNkVEQzAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hl
ZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
N0UyNzY3MTYwMzZFREMwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAgKi87IH07
CiAJCUU0ODk0NEEyMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEEwMTgwQjU3
RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLzsgfTsKIAkJRTQ4OTQ0QTMxODBC
NTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEExMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1w
bGVMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRTQ5MTZGRjcxOTVERjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDkx
NkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQxMjEsNiArMTQx
MjMsOCBAQAogCQlFNDUzOTAzODBFQUZENjM3MDAzNjk1QzggLyogV2ViQ29yZVN5c3RlbUludGVy
ZmFjZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
cmVTeXN0ZW1JbnRlcmZhY2VJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXaWRnZXRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0NTM5MEFEMEVBRkY0QjUwMDM2OTVDOCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lzdGVtTWVtb3J5SU9TLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2MUQ2NUMxQkIwQzdGMDAwQ0I1NjQ1
IC8qIEF1dGhvclN0eWxlU2hlZXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEF1dGhvclN0eWxlU2hlZXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ2MUQ2NUUxQkIwQzgwRDAwQ0I1NjQ1IC8qIEF1dGhvclN0eWxlU2hlZXRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1dGhvclN0eWxlU2hlZXRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NjJBNEEwMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQb2lu
dEhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50UG9pbnRIYXNoLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NkEyQjFCMTdDQTY1QjkwMDBEQkNEOCAv
KiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0NkEyQjFEMTdDQTc2QjEwMDBEQkNEOCAvKiBFbGVtZW50Q2hp
bGRJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50Q2hp
bGRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQxMzAsOCArMTQx
MzQsOCBAQAogCQlFNDdBOTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5bGVJbnZhbGlkYXRpb25B
bmFseXNpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUludmFsaWRh
dGlvbkFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0I0QkU2MEU3
MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VI
YW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDdFMjc2NDE2
MDM2RUQyMDBFRTJBRkIgLyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0N0UyNzY3MTYwMzZFREMwMEVFMkFGQiAv
KiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5z
aW9uU3R5bGVTaGVldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5z
aW9uU3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3RTI3Njcx
NjAzNkVEQzAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OTQ0QTAxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBs
ZUxpbmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lt
cGxlTGluZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODk0NEEx
MTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTQ5MTZGRjYxOTVERjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheWVyRmx1c2hUaHJvdHRs
ZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzI2OCw2ICsyMzI3Miw4
IEBACiAJCQkJQThDNEE3RkIwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuaCAqLywKIAkJCQk5M0VF
QzFFNTA5QzI4Nzc3MDBDNTE1RDEgLyogQXR0ci5pZGwgKi8sCiAJCQkJQThDNEE3RjkwOUQ1NjMy
NzAwMDNBQzhEIC8qIEF0dHJpYnV0ZS5oICovLAorCQkJCUU0NjFENjVDMUJCMEM3RjAwMENCNTY0
NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5jcHAgKi8sCisJCQkJRTQ2MUQ2NUUxQkIwQzgwRDAwQ0I1
NjQ1IC8qIEF1dGhvclN0eWxlU2hlZXRzLmggKi8sCiAJCQkJNzYwODQ3Q0QxOUE2QTI3NzAwNDI4
Q0NDIC8qIEF1dG9jb21wbGV0ZUVycm9yRXZlbnQuaCAqLywKIAkJCQk3NjA4NDdDRjE5QTZBMjg2
MDA0MjhDQ0MgLyogQXV0b2NvbXBsZXRlRXJyb3JFdmVudC5pZGwgKi8sCiAJCQkJQkM5NDYyRDcx
MDdBN0I0QzAwODU3MTkzIC8qIEJlZm9yZUxvYWRFdmVudC5oICovLApAQCAtMjMzNjMsOCArMjMz
NjksNiBAQAogCQkJCUJDQ0ZCQUU3MEI1MTUyRUQwMDAxRjFENyAvKiBEb2N1bWVudFBhcnNlci5o
ICovLAogCQkJCUFENkU3MUFBMTY2ODg5OUQwMDMyMEMxMyAvKiBEb2N1bWVudFNoYXJlZE9iamVj
dFBvb2wuY3BwICovLAogCQkJCUFENkU3MUFCMTY2ODg5OUQwMDMyMEMxMyAvKiBEb2N1bWVudFNo
YXJlZE9iamVjdFBvb2wuaCAqLywKLQkJCQlFNDdFMjc2NzE2MDM2RURDMDBFRTJBRkIgLyogRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgKi8sCi0JCQkJRTQ3RTI3NjQxNjAzNkVEMjAw
RUUyQUZCIC8qIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCAqLywKIAkJCQk4NkQ5ODJG
NjEyNUMxNTQwMDBBRDlFM0QgLyogRG9jdW1lbnRUaW1pbmcuaCAqLywKIAkJCQlBODE4NUYzMjA5
NzY1NzY1MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBlLmNwcCAqLywKIAkJCQlBODE4NUYzMTA5NzY1
NzY1MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBlLmggKi8sCkBAIC0yMzQzOCw2ICsyMzQ0Miw4IEBA
CiAJCQkJOTM1RkJDRjEwOUJBMTQzQjAwRTIzMEIxIC8qIEV4Y2VwdGlvbkNvZGUuaCAqLywKIAkJ
CQlBN0NBQ0RCMDEzQ0U4NzVCMDBCQkJFM0YgLyogRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmNw
cCAqLywKIAkJCQlBNzRCQjc2QTEzQkRBODYzMDBGRjdCRjAgLyogRXhjZXB0aW9uQ29kZVBsYWNl
aG9sZGVyLmggKi8sCisJCQkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIEV4dGVuc2lvblN0
eWxlU2hlZXRzLmNwcCAqLywKKwkJCQlFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5z
aW9uU3R5bGVTaGVldHMuaCAqLywKIAkJCQlCNkQ5RDIzNDE0RUFCRDI2MDA5MEQ3NUUgLyogRm9j
dXNFdmVudC5jcHAgKi8sCiAJCQkJQjZEOUQyMzMxNEVBQkQyNjAwOTBENzVFIC8qIEZvY3VzRXZl
bnQuaCAqLywKIAkJCQlCNkQ5RDI3MjE0RUFCRjAzMDA5MEQ3NUUgLyogRm9jdXNFdmVudC5pZGwg
Ki8sCkBAIC0yNDYxMSw3ICsyNDYxNyw3IEBACiAJCQkJQkNDRkJBRTgwQjUxNTJFRDAwMDFGMUQ3
IC8qIERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTRGNDhBQTE2QjBERkMw
MDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ2RTcx
QUQxNjY4ODk5RDAwMzIwQzEzIC8qIERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZCIC8qIERvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFG
QiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEI5MDU2MUEw
RjI1NzhCRjAwOTVGRjZBIC8qIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZEOTgyRjcxMjVDMTU0MDAwQUQ5RTNEIC8qIERvY3VtZW50VGltaW5nLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODE4NUYzOTA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBl
LmggaW4gSGVhZGVycyAqLywKQEAgLTI2ODEzLDYgKzI2ODE5LDcgQEAKIAkJCQk5OUNDMEI1RTE4
QkU5ODRBMDA2Q0VCQ0MgLyogU2VnbWVudGVkSW5wdXRTdG9yYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCRUE4MDdDOTBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRTQ2MUQ2NUYxQkIwQzgwRDAwQ0I1NjQ1IC8qIEF1dGhvclN0
eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTQwNUM4OTE5MEIwMTQ0MDA3NTRGOTQg
LyogU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRENGQUJCRDE4
QzBBRjc4MDA2Rjg0NTAgLyogU2VsZWN0aW9uU3VidHJlZVJvb3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0NEI0QkI0MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjgzNjYsNyArMjgzNzMsNyBAQAogCQkJCUE4QzIyODBFMTFENEE1OTcwMEQ1
QTdEMyAvKiBEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTRGNDhBOTE2
QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBRDZFNzFBQzE2Njg4OTlEMDAzMjBDMTMgLyogRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUU0N0UyNzY4MTYwMzZFREMwMEVFMkFGQiAvKiBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0N0UyNzY4MTYw
MzZFREMwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwQjkwNTYxOTBGMjU3OEJFMDA5NUZGNkEgLyogRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MTg1RjNBMDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1
bWVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTczODg5QTAxMTZFQTlEQzAwQURGMzEz
IC8qIERvY3VtZW50V3JpdGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg0NzEsNiArMjg0Nzgs
NyBAQAogCQkJCTg1RUNCRUY4MEFBNzYyNjkwMDU0NEYwQiAvKiBET01IVE1MUGFyYW1FbGVtZW50
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MzM0YzNjIxQjRBMDUwNDAwNTAyQ0FGIC8qIEpTRG9j
dW1lbnRGcmFnbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTE4M0I0OTBBQTY5
MjYxMDBGMTlGQTMgLyogRE9NSFRNTFByZUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlF
NDYxRDY1RDFCQjBDN0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTQyMjZFOTYxMTYzRDczQTAwOEI4Mzk3IC8qIERPTUhUTUxQcm9ncmVzc0Vs
ZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTE4M0I0QjBBQTY5MjYxMDBGMTlGQTMgLyog
RE9NSFRNTFF1b3RlRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1REY4MTlDMEFBNzdF
NEIwMDQ4NkFENyAvKiBET01IVE1MU2NyaXB0RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNr
ZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZBQnl0ZWNvZGVJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5o
IgpAQCAtMTc2LDcgKzE3Nyw3IEBAIHZvaWQgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpwcm9j
ZXNzQ28KICAgICAgICAgICAgIGlmIChyZXNvdXJjZVR5cGUgPT0gUmVzb3VyY2VUeXBlOjpEb2N1
bWVudCkKICAgICAgICAgICAgICAgICBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIuYWRkUGVuZGlu
Z0NvbnRlbnRFeHRlbnNpb25EaXNwbGF5Tm9uZVNlbGVjdG9yKGFjdGlvbi5leHRlbnNpb25JZGVu
dGlmaWVyKCksIGFjdGlvbi5zdHJpbmdBcmd1bWVudCgpLCBhY3Rpb24uYWN0aW9uSUQoKSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50RG9jdW1lbnQpCi0gICAgICAgICAgICAgICAgY3Vy
cmVudERvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLmFkZERpc3BsYXlOb25lU2VsZWN0
b3IoYWN0aW9uLmV4dGVuc2lvbklkZW50aWZpZXIoKSwgYWN0aW9uLnN0cmluZ0FyZ3VtZW50KCks
IGFjdGlvbi5hY3Rpb25JRCgpKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RG9jdW1lbnQtPmV4
dGVuc2lvblN0eWxlU2hlZXRzKCkuYWRkRGlzcGxheU5vbmVTZWxlY3RvcihhY3Rpb24uZXh0ZW5z
aW9uSWRlbnRpZmllcigpLCBhY3Rpb24uc3RyaW5nQXJndW1lbnQoKSwgYWN0aW9uLmFjdGlvbklE
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU3R5bGVTaGVldDogewogICAgICAgICAgICAgU3R5
bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0Q29udGVudHMgPSBnbG9iYWxEaXNwbGF5Tm9uZVN0
eWxlU2hlZXQoYWN0aW9uLnN0cmluZ0FyZ3VtZW50KCkpOwpAQCAtMTg0LDcgKzE4NSw3IEBAIHZv
aWQgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpwcm9jZXNzQ28KICAgICAgICAgICAgICAgICBp
ZiAocmVzb3VyY2VUeXBlID09IFJlc291cmNlVHlwZTo6RG9jdW1lbnQpCiAgICAgICAgICAgICAg
ICAgICAgIGluaXRpYXRpbmdEb2N1bWVudExvYWRlci5hZGRQZW5kaW5nQ29udGVudEV4dGVuc2lv
blNoZWV0KGFjdGlvbi5zdHJpbmdBcmd1bWVudCgpLCAqc3R5bGVTaGVldENvbnRlbnRzKTsKICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50RG9jdW1lbnQpCi0gICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnREb2N1bWVudC0+c3R5bGVTaGVldENvbGxlY3Rpb24oKS5tYXliZUFkZENvbnRl
bnRFeHRlbnNpb25TaGVldChhY3Rpb24uc3RyaW5nQXJndW1lbnQoKSwgKnN0eWxlU2hlZXRDb250
ZW50cyk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnREb2N1bWVudC0+ZXh0ZW5zaW9uU3R5
bGVTaGVldHMoKS5tYXliZUFkZENvbnRlbnRFeHRlbnNpb25TaGVldChhY3Rpb24uc3RyaW5nQXJn
dW1lbnQoKSwgKnN0eWxlU2hlZXRDb250ZW50cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNw
cAkocmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogCisjaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVl
dHMuaCIKICNpbmNsdWRlICJDU1NDaGFyc2V0UnVsZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNl
UnVsZS5oIgogI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKQEAgLTMwLDggKzMxLDggQEAKICNp
bmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4dGVuc2lv
blN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFN0
eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgpAQCAtMTcwLDcgKzE3MSw3IEBA
IHZvaWQgQ1NTU3R5bGVTaGVldDo6ZGlkTXV0YXRlUnVsZXMoUnVsZU0KICAgICBpZiAoIW93bmVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobXV0YXRpb25UeXBlID09IFJ1bGVJbnNlcnRp
b24gJiYgIWNvbnRlbnRzV2VyZUNsb25lZEZvck11dGF0aW9uICYmICFvd25lci0+c3R5bGVTaGVl
dENvbGxlY3Rpb24oKS5hY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5zKHRoaXMpKSB7CisgICAgaWYg
KG11dGF0aW9uVHlwZSA9PSBSdWxlSW5zZXJ0aW9uICYmICFjb250ZW50c1dlcmVDbG9uZWRGb3JN
dXRhdGlvbiAmJiAhb3duZXItPmF1dGhvclN0eWxlU2hlZXRzKCkuYWN0aXZlU3R5bGVTaGVldHND
b250YWlucyh0aGlzKSkgewogICAgICAgICBpZiAoaW5zZXJ0ZWRLZXlmcmFtZXNSdWxlKSB7CiAg
ICAgICAgICAgICBpZiAoU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIgPSBvd25lci0+c3R5bGVSZXNv
bHZlcklmRXhpc3RzKCkpCiAgICAgICAgICAgICAgICAgcmVzb2x2ZXItPmFkZEtleWZyYW1lU3R5
bGUoaW5zZXJ0ZWRLZXlmcmFtZXNSdWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1
bWVudFJ1bGVTZXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1l
bnRSdWxlU2V0cy5jcHAJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9E
b2N1bWVudFJ1bGVTZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAj
aW5jbHVkZSAiQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVl
dC5oIgotI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKKyNpbmNsdWRl
ICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3Iu
aCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRl
bnRzLmgiCkBAIC00NiwxMyArNDYsMTMgQEAgRG9jdW1lbnRSdWxlU2V0czo6fkRvY3VtZW50UnVs
ZVNldHMoKQogewogfQogCi12b2lkIERvY3VtZW50UnVsZVNldHM6OmluaXRVc2VyU3R5bGUoRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiYgc3R5bGVTaGVldENvbGxlY3Rpb24sIGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIpCit2b2lk
IERvY3VtZW50UnVsZVNldHM6OmluaXRVc2VyU3R5bGUoRXh0ZW5zaW9uU3R5bGVTaGVldHMmIGV4
dGVuc2lvblN0eWxlU2hlZXRzLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIFN0
eWxlUmVzb2x2ZXImIHJlc29sdmVyKQogewogICAgIGF1dG8gdGVtcFVzZXJTdHlsZSA9IHN0ZDo6
bWFrZV91bmlxdWU8UnVsZVNldD4oKTsKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJT
aGVldCA9IHN0eWxlU2hlZXRDb2xsZWN0aW9uLnBhZ2VVc2VyU2hlZXQoKSkKKyAgICBpZiAoQ1NT
U3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCA9IGV4dGVuc2lvblN0eWxlU2hlZXRzLnBhZ2VVc2Vy
U2hlZXQoKSkKICAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoJnBhZ2VV
c2VyU2hlZXQtPmNvbnRlbnRzKCksIG1lZGl1bSwgJnJlc29sdmVyKTsKLSAgICBjb2xsZWN0UnVs
ZXNGcm9tVXNlclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRDb2xsZWN0aW9uLmluamVjdGVkVXNlclN0
eWxlU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlLCBtZWRpdW0sIHJlc29sdmVyKTsKLSAgICBjb2xs
ZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRDb2xsZWN0aW9uLmRvY3VtZW50
VXNlclN0eWxlU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlLCBtZWRpdW0sIHJlc29sdmVyKTsKKyAg
ICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRzLmlu
amVjdGVkVXNlclN0eWxlU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlLCBtZWRpdW0sIHJlc29sdmVy
KTsKKyAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hl
ZXRzLmRvY3VtZW50VXNlclN0eWxlU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlLCBtZWRpdW0sIHJl
c29sdmVyKTsKICAgICBpZiAodGVtcFVzZXJTdHlsZS0+cnVsZUNvdW50KCkgPiAwIHx8IHRlbXBV
c2VyU3R5bGUtPnBhZ2VSdWxlcygpLnNpemUoKSA+IDApCiAgICAgICAgIG1fdXNlclN0eWxlID0g
V1RGOjptb3ZlKHRlbXBVc2VyU3R5bGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0Rv
Y3VtZW50UnVsZVNldHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1l
bnRSdWxlU2V0cy5oCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRG9j
dW1lbnRSdWxlU2V0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICBSdWxlU2V0KiBzaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaWJsaW5nUnVsZVNldC5n
ZXQoKTsgfQogICAgIFJ1bGVTZXQqIHVuY29tbW9uQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4g
bV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0KCk7IH0KIAotICAgIHZvaWQgaW5pdFVzZXJT
dHlsZShEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uJiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1
YXRvciYsIFN0eWxlUmVzb2x2ZXImKTsKKyAgICB2b2lkIGluaXRVc2VyU3R5bGUoRXh0ZW5zaW9u
U3R5bGVTaGVldHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciYp
OwogICAgIHZvaWQgcmVzZXRBdXRob3JTdHlsZSgpOwogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5
bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4+JiwgTWVkaWFRdWVyeUV2YWx1YXRvciosIEluc3BlY3RvckNTU09NV3JhcHBlcnMmLCBT
dHlsZVJlc29sdmVyKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9JbnNwZWN0b3JDU1NP
TVdyYXBwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvSW5zcGVjdG9y
Q1NTT01XcmFwcGVycy5jcHAJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9JbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU09NV3JhcHBl
cnMuaCIKIAorI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ1NTRGVm
YXVsdFN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgogI2luY2x1ZGUg
IkNTU01lZGlhUnVsZS5oIgpAQCAtMzYsNyArMzcsNyBAQAogI2luY2x1ZGUgIkNTU1N0eWxlUnVs
ZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NTdXBwb3J0c1J1
bGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgiCisjaW5jbHVk
ZSAiRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMu
aCIKICNpbmNsdWRlICJXZWJLaXRDU1NSZWdpb25SdWxlLmgiCiAKQEAgLTk1LDE1ICs5Niw3IEBA
IHZvaWQgSW5zcGVjdG9yQ1NTT01XcmFwcGVyczo6Y29sbGVjdEZyb20KICAgICAgICAgY29sbGVj
dChzaGVldHNbaV0uZ2V0KCkpOwogfQogCi12b2lkIEluc3BlY3RvckNTU09NV3JhcHBlcnM6OmNv
bGxlY3RGcm9tRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbihEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uJiBzdHlsZVNoZWV0Q29sbGVjdGlvbikKLXsKLSAgICBjb2xsZWN0RnJvbVN0eWxl
U2hlZXRzKHN0eWxlU2hlZXRDb2xsZWN0aW9uLmFjdGl2ZUF1dGhvclN0eWxlU2hlZXRzKCkpOwot
ICAgIGNvbGxlY3Qoc3R5bGVTaGVldENvbGxlY3Rpb24ucGFnZVVzZXJTaGVldCgpKTsKLSAgICBj
b2xsZWN0RnJvbVN0eWxlU2hlZXRzKHN0eWxlU2hlZXRDb2xsZWN0aW9uLmluamVjdGVkVXNlclN0
eWxlU2hlZXRzKCkpOwotICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxl
Y3Rpb24uZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSk7Ci19Ci0KLUNTU1N0eWxlUnVsZSogSW5z
cGVjdG9yQ1NTT01XcmFwcGVyczo6Z2V0V3JhcHBlckZvclJ1bGVJblNoZWV0cyhTdHlsZVJ1bGUq
IHJ1bGUsIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24mIHN0eWxlU2hlZXRDb2xsZWN0aW9u
KQorQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzOjpnZXRXcmFwcGVyRm9yUnVs
ZUluU2hlZXRzKFN0eWxlUnVsZSogcnVsZSwgQXV0aG9yU3R5bGVTaGVldHMmIGF1dGhvclN0eWxl
U2hlZXRzLCBFeHRlbnNpb25TdHlsZVNoZWV0cyYgZXh0ZW5zaW9uU3R5bGVTaGVldHMpCiB7CiAg
ICAgaWYgKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGNvbGxlY3RGcm9tU3R5bGVTaGVldENvbnRlbnRzKG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNl
dCwgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCk7CkBAIC0x
MTUsNyArMTA4LDEwIEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTT01XcmFwcGVyczo6Z2UK
ICAgICAgICAgY29sbGVjdEZyb21TdHlsZVNoZWV0Q29udGVudHMobV9zdHlsZVNoZWV0Q1NTT01X
cmFwcGVyU2V0LCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmZ1bGxzY3JlZW5TdHlsZVNoZWV0KTsK
ICAgICAgICAgY29sbGVjdEZyb21TdHlsZVNoZWV0Q29udGVudHMobV9zdHlsZVNoZWV0Q1NTT01X
cmFwcGVyU2V0LCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OnBsdWdJbnNTdHlsZVNoZWV0KTsKIAot
ICAgICAgICBjb2xsZWN0RnJvbURvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24oc3R5bGVTaGVl
dENvbGxlY3Rpb24pOworICAgICAgICBjb2xsZWN0RnJvbVN0eWxlU2hlZXRzKGF1dGhvclN0eWxl
U2hlZXRzLmFjdGl2ZVN0eWxlU2hlZXRzKCkpOworICAgICAgICBjb2xsZWN0KGV4dGVuc2lvblN0
eWxlU2hlZXRzLnBhZ2VVc2VyU2hlZXQoKSk7CisgICAgICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVl
dHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSk7CisgICAg
ICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuZG9jdW1lbnRV
c2VyU3R5bGVTaGVldHMoKSk7CiAgICAgfQogICAgIHJldHVybiBtX3N0eWxlUnVsZVRvQ1NTT01X
cmFwcGVyTWFwLmdldChydWxlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9JbnNwZWN0
b3JDU1NPTVdyYXBwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0luc3Bl
Y3RvckNTU09NV3JhcHBlcnMuaAkocmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0luc3BlY3RvckNTU09NV3JhcHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEs
MTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBdXRob3JTdHlsZVNoZWV0czsK
IGNsYXNzIENTU1N0eWxlUnVsZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uOworY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHM7CiBjbGFz
cyBTdHlsZVJ1bGU7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiAKQEAgLTQxLDcgKzQyLDcg
QEAgY2xhc3MgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyB7CiBwdWJsaWM6CiAgICAgLy8gV0FSTklO
Ry4gVGhpcyB3aWxsIGNvbnN0cnVjdCBDU1NPTSB3cmFwcGVycyBmb3IgYWxsIHN0eWxlIHJ1bGVz
IGFuZCBjYWNoZSB0aGVtIGluIGEgbWFwIGZvciBzaWduaWZpY2FudCBtZW1vcnkgY29zdC4KICAg
ICAvLyBJdCBpcyBoZXJlIHRvIHN1cHBvcnQgaW5zcGVjdG9yLiBEb24ndCB1c2UgZm9yIGFueSBy
ZWd1bGFyIGVuZ2luZSBmdW5jdGlvbnMuCi0gICAgQ1NTU3R5bGVSdWxlKiBnZXRXcmFwcGVyRm9y
UnVsZUluU2hlZXRzKFN0eWxlUnVsZSosIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24mKTsK
KyAgICBDU1NTdHlsZVJ1bGUqIGdldFdyYXBwZXJGb3JSdWxlSW5TaGVldHMoU3R5bGVSdWxlKiwg
QXV0aG9yU3R5bGVTaGVldHMmLCBFeHRlbnNpb25TdHlsZVNoZWV0cyYpOwogICAgIHZvaWQgY29s
bGVjdEZyb21TdHlsZVNoZWV0SWZOZWVkZWQoQ1NTU3R5bGVTaGVldCopOwogCiBwcml2YXRlOgpA
QCAtNTAsNyArNTEsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb2xsZWN0RnJvbVN0eWxlU2hl
ZXRDb250ZW50cyhIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHNoZWV0V3JhcHBlclNl
dCwgU3R5bGVTaGVldENvbnRlbnRzKik7CiAgICAgdm9pZCBjb2xsZWN0RnJvbVN0eWxlU2hlZXRz
KGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+Jik7Ci0gICAgdm9pZCBjb2xsZWN0
RnJvbURvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24oRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbiYpOwogCiAgICAgSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPj4g
bV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcDsKICAgICBIYXNoU2V0PFJlZlB0cjxDU1NTdHls
ZVNoZWV0Pj4gbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw2IEBACiAj
aW5jbHVkZSAiQ291bnRlci5oIgogI2luY2x1ZGUgIkNvdW50ZXJDb250ZW50LmgiCiAjaW5jbHVk
ZSAiQ3Vyc29yTGlzdC5oIgotI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24u
aCIKICNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkZpbHRlck9w
ZXJhdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0zMDEsOCArMzAwLDcgQEAgU3R5bGVS
ZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCYgZAogCiAgICAgbV9ydWxlU2V0cy5yZXNl
dEF1dGhvclN0eWxlKCk7CiAKLSAgICBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uJiBzdHls
ZVNoZWV0Q29sbGVjdGlvbiA9IG1fZG9jdW1lbnQuc3R5bGVTaGVldENvbGxlY3Rpb24oKTsKLSAg
ICBtX3J1bGVTZXRzLmluaXRVc2VyU3R5bGUoc3R5bGVTaGVldENvbGxlY3Rpb24sICptX21lZGl1
bSwgKnRoaXMpOworICAgIG1fcnVsZVNldHMuaW5pdFVzZXJTdHlsZShtX2RvY3VtZW50LmV4dGVu
c2lvblN0eWxlU2hlZXRzKCksICptX21lZGl1bSwgKnRoaXMpOwogCiAjaWYgRU5BQkxFKFNWR19G
T05UUykKICAgICBpZiAobV9kb2N1bWVudC5zdmdFeHRlbnNpb25zKCkpIHsKQEAgLTMxMSw4ICsz
MDksNiBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50JiBkCiAgICAgICAg
ICAgICBtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpLmFkZEZvbnRGYWNlUnVsZShzdmdGb250RmFj
ZUVsZW1lbnQtPmZvbnRGYWNlUnVsZSgpLCBzdmdGb250RmFjZUVsZW1lbnQtPmlzSW5Vc2VyQWdl
bnRTaGFkb3dUcmVlKCkpOwogICAgIH0KICNlbmRpZgotCi0gICAgYXBwZW5kQXV0aG9yU3R5bGVT
aGVldHMoMCwgc3R5bGVTaGVldENvbGxlY3Rpb24uYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMoKSk7
CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHModW5zaWdu
ZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBzdHlsZVNo
ZWV0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAkocmV2aXNpb24g
MTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsOSArMjEsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlN0eWxlU2hlZXRMaXN0LmgiCiAKKyNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2lu
Y2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CkBAIC00NSwxMyArNDUsMTMgQEAgaW5saW5lIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVTaGVldD4+JgogewogICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIG1fZGV0
YWNoZWRTdHlsZVNoZWV0czsKLSAgICByZXR1cm4gbV9kb2N1bWVudC0+c3R5bGVTaGVldENvbGxl
Y3Rpb24oKS5zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KCk7CisgICAgcmV0dXJuIG1fZG9j
dW1lbnQtPmF1dGhvclN0eWxlU2hlZXRzKCkuc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdCgp
OwogfQogCiB2b2lkIFN0eWxlU2hlZXRMaXN0OjpkZXRhY2hGcm9tRG9jdW1lbnQoKQogewotICAg
IG1fZGV0YWNoZWRTdHlsZVNoZWV0cyA9IG1fZG9jdW1lbnQtPnN0eWxlU2hlZXRDb2xsZWN0aW9u
KCkuc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdCgpOwotICAgIG1fZG9jdW1lbnQgPSAwOwor
ICAgIG1fZGV0YWNoZWRTdHlsZVNoZWV0cyA9IG1fZG9jdW1lbnQtPmF1dGhvclN0eWxlU2hlZXRz
KCkuc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdCgpOworICAgIG1fZG9jdW1lbnQgPSBudWxs
cHRyOwogfQogCiB1bnNpZ25lZCBTdHlsZVNoZWV0TGlzdDo6bGVuZ3RoKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRzLmNwcAkocmV2aXNpb24gMTkwMTUz
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5j
cHA6MTkwMTUzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQ
cm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC0yMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgorCisjaW5j
bHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVk
ZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNs
dWRlICJTVkdTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUg
IlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgi
CisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldExp
c3QuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJVc2Vy
Q29udGVudFVSTFBhdHRlcm4uaCIKKyNpbmNsdWRlICJVc2VyU3R5bGVTaGVldC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9uczsKK3Vz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246
OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDog
bV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fcGVuZGluZ1N0eWxlc2hlZXRzKDApCisgICAg
LCBtX2luamVjdGVkU3R5bGVTaGVldENhY2hlVmFsaWQoZmFsc2UpCisgICAgLCBtX2hhZEFjdGl2
ZUxvYWRpbmdTdHlsZXNoZWV0KGZhbHNlKQorICAgICwgbV9wZW5kaW5nVXBkYXRlVHlwZShOb1Vw
ZGF0ZSkKKyAgICAsIG1fdXNlc0ZpcnN0TGluZVJ1bGVzKGZhbHNlKQorICAgICwgbV91c2VzRmly
c3RMZXR0ZXJSdWxlcyhmYWxzZSkKKyAgICAsIG1fdXNlc1JlbVVuaXRzKGZhbHNlKQorICAgICwg
bV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KGZhbHNlKQorICAgICwgbV9zdHlsZVJlc29sdmVy
Q2hhbmdlZFRpbWVyKCp0aGlzLCAmRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6c3R5bGVS
ZXNvbHZlckNoYW5nZWRUaW1lckZpcmVkKQoreworfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb246OmNvbWJpbmVDU1NGZWF0dXJlRmxhZ3MoKQoreworICAgIC8vIERlbGF5IHJl
c2V0dGluZyB0aGUgZmxhZ3MgdW50aWwgYWZ0ZXIgbmV4dCBzdHlsZSByZWNhbGMgc2luY2UgdW5h
cHBseWluZyB0aGUgc3R5bGUgbWF5IG5vdCB3b3JrIHdpdGhvdXQgdGhlc2Ugc2V0ICh0aGlzIGlz
IHRydWUgYXQgbGVhc3Qgd2l0aCBiZWZvcmUvYWZ0ZXIpLgorICAgIGNvbnN0IFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKKyAg
ICBtX3VzZXNGaXJzdExpbmVSdWxlcyA9IG1fdXNlc0ZpcnN0TGluZVJ1bGVzIHx8IHN0eWxlUmVz
b2x2ZXIudXNlc0ZpcnN0TGluZVJ1bGVzKCk7CisgICAgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyA9
IG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXMgfHwgc3R5bGVSZXNvbHZlci51c2VzRmlyc3RMZXR0ZXJS
dWxlcygpOworfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnJlc2V0Q1NT
RmVhdHVyZUZsYWdzKCkKK3sKKyAgICBjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
ID0gbV9kb2N1bWVudC5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CisgICAgbV91c2VzRmlyc3RMaW5l
UnVsZXMgPSBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExpbmVSdWxlcygpOworICAgIG1fdXNlc0Zp
cnN0TGV0dGVyUnVsZXMgPSBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExldHRlclJ1bGVzKCk7Cit9
CisKK0NTU1N0eWxlU2hlZXQqIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnBhZ2VVc2Vy
U2hlZXQoKQoreworICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQpCisgICAgICAgIHJldHVybiBtX3Bh
Z2VVc2VyU2hlZXQuZ2V0KCk7CisgICAgCisgICAgUGFnZSogb3duaW5nUGFnZSA9IG1fZG9jdW1l
bnQucGFnZSgpOworICAgIGlmICghb3duaW5nUGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgU3RyaW5nIHVzZXJTaGVldFRleHQgPSBvd25pbmdQYWdlLT51c2VyU3R5bGVTaGVldCgp
OworICAgIGlmICh1c2VyU2hlZXRUZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgLy8gUGFyc2UgdGhlIHNoZWV0IGFuZCBjYWNoZSBpdC4KKyAgICBtX3BhZ2VVc2Vy
U2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUobV9kb2N1bWVudCwgbV9kb2N1bWVu
dC5zZXR0aW5ncygpLT51c2VyU3R5bGVTaGVldExvY2F0aW9uKCkpOworICAgIG1fcGFnZVVzZXJT
aGVldC0+Y29udGVudHMoKS5zZXRJc1VzZXJTdHlsZVNoZWV0KHRydWUpOworICAgIG1fcGFnZVVz
ZXJTaGVldC0+Y29udGVudHMoKS5wYXJzZVN0cmluZyh1c2VyU2hlZXRUZXh0KTsKKyAgICByZXR1
cm4gbV9wYWdlVXNlclNoZWV0LmdldCgpOworfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb246OmNsZWFyUGFnZVVzZXJTaGVldCgpCit7CisgICAgaWYgKG1fcGFnZVVzZXJTaGVl
dCkgeworICAgICAgICBtX3BhZ2VVc2VyU2hlZXQgPSBudWxscHRyOworICAgICAgICBtX2RvY3Vt
ZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOworICAgIH0KK30KKwor
dm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVQYWdlVXNlclNoZWV0KCkK
K3sKKyAgICBjbGVhclBhZ2VVc2VyU2hlZXQoKTsKKyAgICBpZiAocGFnZVVzZXJTaGVldCgpKQor
ICAgICAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRp
YXRlbHkpOworfQorCitjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6aW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSBjb25zdAor
eworICAgIHVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCk7CisgICAgcmV0dXJuIG1faW5q
ZWN0ZWRVc2VyU3R5bGVTaGVldHM7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4+JiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjppbmplY3RlZEF1dGhvclN0eWxl
U2hlZXRzKCkgY29uc3QKK3sKKyAgICB1cGRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpOwor
ICAgIHJldHVybiBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHM7Cit9CisKK3ZvaWQgRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKSBj
b25zdAoreworICAgIGlmIChtX2luamVjdGVkU3R5bGVTaGVldENhY2hlVmFsaWQpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2luamVjdGVkU3R5bGVTaGVldENhY2hlVmFsaWQgPSB0cnVlOworICAg
IG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuY2xlYXIoKTsKKyAgICBtX2luamVjdGVkQXV0aG9y
U3R5bGVTaGVldHMuY2xlYXIoKTsKKworICAgIFBhZ2UqIG93bmluZ1BhZ2UgPSBtX2RvY3VtZW50
LnBhZ2UoKTsKKyAgICBpZiAoIW93bmluZ1BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGNv
bnN0IGF1dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9IG93bmluZ1BhZ2UtPnVzZXJDb250ZW50
Q29udHJvbGxlcigpOworICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBVc2VyU3R5bGVTaGVldE1hcCogdXNlclN0eWxlU2hlZXRzID0g
dXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyU3R5bGVTaGVldHMoKTsKKyAgICBpZiAoIXVzZXJT
dHlsZVNoZWV0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBzdHlsZVNoZWV0
cyA6IHVzZXJTdHlsZVNoZWV0cy0+dmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBzaGVldCA6ICpzdHlsZVNoZWV0cykgeworICAgICAgICAgICAgaWYgKHNoZWV0LT5pbmplY3Rl
ZEZyYW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYmIG1fZG9jdW1lbnQub3duZXJFbGVt
ZW50KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICghVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMobV9kb2N1bWVudC51cmwoKSwgc2hl
ZXQtPndoaXRlbGlzdCgpLCBzaGVldC0+YmxhY2tsaXN0KCkpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZ3JvdXBTaGVldCA9
IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShjb25zdF9jYXN0PERvY3VtZW50Jj4obV9kb2N1
bWVudCksIHNoZWV0LT51cmwoKSk7CisgICAgICAgICAgICBib29sIGlzVXNlclN0eWxlU2hlZXQg
PSBzaGVldC0+bGV2ZWwoKSA9PSBVc2VyU3R5bGVVc2VyTGV2ZWw7CisgICAgICAgICAgICBpZiAo
aXNVc2VyU3R5bGVTaGVldCkKKyAgICAgICAgICAgICAgICBtX2luamVjdGVkVXNlclN0eWxlU2hl
ZXRzLmFwcGVuZChncm91cFNoZWV0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHMuYXBwZW5kKGdyb3VwU2hlZXQpOworCisgICAg
ICAgICAgICBncm91cFNoZWV0LT5jb250ZW50cygpLnNldElzVXNlclN0eWxlU2hlZXQoaXNVc2Vy
U3R5bGVTaGVldCk7CisgICAgICAgICAgICBncm91cFNoZWV0LT5jb250ZW50cygpLnBhcnNlU3Ry
aW5nKHNoZWV0LT5zb3VyY2UoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hl
KCkKK3sKKyAgICBpZiAoIW1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZCkKKyAgICAgICAg
cmV0dXJuOworICAgIG1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZCA9IGZhbHNlOworICAg
IGlmIChtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmlzRW1wdHkoKSAmJiBtX2luamVjdGVkQXV0
aG9yU3R5bGVTaGVldHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9kb2N1bWVu
dC5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKK30KKwordm9pZCBEb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphZGRBdXRob3JTaGVldChSZWY8U3R5bGVTaGVldENv
bnRlbnRzPiYmIGF1dGhvclNoZWV0KQoreworICAgIEFTU0VSVCghYXV0aG9yU2hlZXQuZ2V0KCku
aXNVc2VyU3R5bGVTaGVldCgpKTsKKyAgICBtX2F1dGhvclN0eWxlU2hlZXRzLmFwcGVuZChDU1NT
dHlsZVNoZWV0OjpjcmVhdGUoV1RGOjptb3ZlKGF1dGhvclNoZWV0KSwgJm1fZG9jdW1lbnQpKTsK
KyAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRl
bHkpOworfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFkZFVzZXJTaGVl
dChSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmIHVzZXJTaGVldCkKK3sKKyAgICBBU1NFUlQodXNl
clNoZWV0LmdldCgpLmlzVXNlclN0eWxlU2hlZXQoKSk7CisgICAgbV91c2VyU3R5bGVTaGVldHMu
YXBwZW5kKENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShXVEY6Om1vdmUodXNlclNoZWV0KSwgJm1fZG9j
dW1lbnQpKTsKKyAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxl
SW1tZWRpYXRlbHkpOworfQorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKK3ZvaWQg
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkRGlzcGxheU5vbmVTZWxlY3Rvcihjb25z
dCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIHVpbnQzMl90IHNl
bGVjdG9ySUQpCit7CisgICAgYXV0byByZXN1bHQgPSBtX2NvbnRlbnRFeHRlbnNpb25TZWxlY3Rv
clNoZWV0cy5hZGQoaWRlbnRpZmllciwgbnVsbHB0cik7CisgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KSB7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBDb250ZW50RXh0ZW5zaW9u
U3R5bGVTaGVldDo6Y3JlYXRlKG1fZG9jdW1lbnQpOworICAgICAgICBtX3VzZXJTdHlsZVNoZWV0
cy5hcHBlbmQoJnJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnN0eWxlU2hlZXQoKSk7CisgICAgfQor
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkRGlzcGxheU5vbmVTZWxlY3RvcihzZWxl
Y3Rvciwgc2VsZWN0b3JJRCk7CisgICAgbV9zdHlsZVJlc29sdmVyQ2hhbmdlZFRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKK30KKwordm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjptYXli
ZUFkZENvbnRlbnRFeHRlbnNpb25TaGVldChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFN0eWxl
U2hlZXRDb250ZW50cyYgc2hlZXQpCit7CisgICAgQVNTRVJUKHNoZWV0LmlzVXNlclN0eWxlU2hl
ZXQoKSk7CisKKyAgICBpZiAobV9jb250ZW50RXh0ZW5zaW9uU2hlZXRzLmNvbnRhaW5zKGlkZW50
aWZpZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWY8Q1NTU3R5bGVTaGVldD4gY3NzU2hl
ZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc2hlZXQsICZtX2RvY3VtZW50KTsKKyAgICBtX2Nv
bnRlbnRFeHRlbnNpb25TaGVldHMuc2V0KGlkZW50aWZpZXIsICZjc3NTaGVldC5nZXQoKSk7Cisg
ICAgbV91c2VyU3R5bGVTaGVldHMuYXBwZW5kKGFkb3B0UmVmKGNzc1NoZWV0LmxlYWtSZWYoKSkp
OworICAgIG1fc3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9Cisj
ZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKwordm9pZCBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uOjpzdHlsZVJlc29sdmVyQ2hhbmdlZFRpbWVyRmlyZWQoKQoreworICAg
IG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7
Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhIHRvcC1sZXZlbCBzdHls
ZXNoZWV0IGhhcyBmaW5pc2hlZCBsb2FkaW5nLgordm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uOjpyZW1vdmVQZW5kaW5nU2hlZXQoUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9u
VHlwZSBub3RpZmljYXRpb24pCit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGtuZXcgdGhpcyBzaGVl
dCB3YXMgcGVuZGluZywgYW5kIHRoYXQgb3VyIGNvdW50IGlzbid0IG91dCBvZiBzeW5jLgorICAg
IEFTU0VSVChtX3BlbmRpbmdTdHlsZXNoZWV0cyA+IDApOworCisgICAgbV9wZW5kaW5nU3R5bGVz
aGVldHMtLTsKKyAgICAKKyNpZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCisgICAg
aWYgKCFvd25lckVsZW1lbnQoKSkKKyAgICAgICAgcHJpbnRmKCJTdHlsZXNoZWV0IGxvYWRlZCBh
dCB0aW1lICVkLiAlZCBzdHlsZXNoZWV0cyBzdGlsbCByZW1haW4uXG4iLCBlbGFwc2VkVGltZSgp
LCBtX3BlbmRpbmdTdHlsZXNoZWV0cyk7CisjZW5kaWYKKworICAgIGlmIChtX3BlbmRpbmdTdHls
ZXNoZWV0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSBSZW1v
dmVQZW5kaW5nU2hlZXROb3RpZnlMYXRlcikgeworICAgICAgICBtX2RvY3VtZW50LnNldE5lZWRz
Tm90aWZ5UmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBtX2RvY3VtZW50LmRpZFJlbW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCk7
Cit9CisKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkU3R5bGVTaGVldENh
bmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgaWYg
KCFub2RlLmluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFVudGls
IHRoZSA8Ym9keT4gZXhpc3RzLCB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gY29tcGFyZSBkb2N1
bWVudCBwb3NpdGlvbnMsCisgICAgLy8gc2luY2Ugc3R5bGVzIG91dHNpZGUgb2YgdGhlIGJvZHkg
YW5kIGhlYWQgY29udGludWUgdG8gYmUgc2h1bnRlZCBpbnRvIHRoZSBoZWFkCisgICAgLy8gKGFu
ZCB0aHVzIGNhbiBzaGlmdCB0byBlbmQgdXAgYmVmb3JlIGR5bmFtaWNhbGx5IGFkZGVkIERPTSBj
b250ZW50IHRoYXQgaXMgYWxzbworICAgIC8vIG91dHNpZGUgdGhlIGJvZHkpLgorICAgIGlmICgo
Y3JlYXRlZEJ5UGFyc2VyICYmIG1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKSkgfHwgbV9zdHls
ZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fc3R5bGVTaGVldENh
bmRpZGF0ZU5vZGVzLmFkZCgmbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBEZXRlcm1pbmUgYW4gYXBwcm9wcmlhdGUgaW5zZXJ0aW9uIHBvaW50LgorICAgIFN0eWxlU2hl
ZXRDYW5kaWRhdGVMaXN0SGFzaFNldDo6aXRlcmF0b3IgYmVnaW4gPSBtX3N0eWxlU2hlZXRDYW5k
aWRhdGVOb2Rlcy5iZWdpbigpOworICAgIFN0eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDo6
aXRlcmF0b3IgZW5kID0gbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuZW5kKCk7CisgICAgU3R5
bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0OjppdGVyYXRvciBpdCA9IGVuZDsKKyAgICBOb2Rl
KiBmb2xsb3dpbmdOb2RlID0gMDsKKyAgICBkbyB7CisgICAgICAgIC0taXQ7CisgICAgICAgIE5v
ZGUqIG4gPSAqaXQ7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHBvc2l0aW9uID0gbi0+Y29tcGFy
ZURvY3VtZW50UG9zaXRpb24oJm5vZGUpOworICAgICAgICBpZiAocG9zaXRpb24gPT0gTm9kZTo6
RE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSB7CisgICAgICAgICAgICBtX3N0eWxlU2hlZXRD
YW5kaWRhdGVOb2Rlcy5pbnNlcnRCZWZvcmUoZm9sbG93aW5nTm9kZSwgJm5vZGUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvbGxvd2luZ05vZGUgPSBuOworICAg
IH0gd2hpbGUgKGl0ICE9IGJlZ2luKTsKKyAgICAKKyAgICBtX3N0eWxlU2hlZXRDYW5kaWRhdGVO
b2Rlcy5pbnNlcnRCZWZvcmUoZm9sbG93aW5nTm9kZSwgJm5vZGUpOworfQorCit2b2lkIERvY3Vt
ZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5v
ZGUmIG5vZGUpCit7CisgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMucmVtb3ZlKCZub2Rl
KTsKK30KKwordm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZl
U3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mIHNoZWV0cykKK3sKKyAgICBp
ZiAobV9kb2N1bWVudC5zZXR0aW5ncygpICYmICFtX2RvY3VtZW50LnNldHRpbmdzKCktPmF1dGhv
ckFuZFVzZXJTdHlsZXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0
byYgbm9kZSA6IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzKSB7CisgICAgICAgIFN0eWxlU2hl
ZXQqIHNoZWV0ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGlzPFByb2Nlc3NpbmdJbnN0cnVjdGlv
bj4oKm5vZGUpKSB7CisgICAgICAgICAgICAvLyBQcm9jZXNzaW5nIGluc3RydWN0aW9uIChYTUwg
ZG9jdW1lbnRzIG9ubHkpLgorICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBsaW5raW5n
IHRvIGVtYmVkZGVkIENTUyBzdHlsZXNoZWV0cywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDkyODE+IGZvciBkaXNjdXNzaW9uLgorICAgICAgICAgICAgUHJv
Y2Vzc2luZ0luc3RydWN0aW9uJiBwaSA9IGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4o
Km5vZGUpOworICAgICAgICAgICAgc2hlZXQgPSBwaS5zaGVldCgpOworI2lmIEVOQUJMRShYU0xU
KQorICAgICAgICAgICAgLy8gRG9uJ3QgYXBwbHkgWFNMIHRyYW5zZm9ybXMgdG8gYWxyZWFkeSB0
cmFuc2Zvcm1lZCBkb2N1bWVudHMgLS0gPHJkYXI6Ly9wcm9ibGVtLzQxMzI4MDY+CisgICAgICAg
ICAgICBpZiAocGkuaXNYU0woKSAmJiAhbV9kb2N1bWVudC50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYXBwbHkgWFNMIHRyYW5zZm9ybXMgdW50
aWwgbG9hZGluZyBpcyBmaW5pc2hlZC4KKyAgICAgICAgICAgICAgICBpZiAoIW1fZG9jdW1lbnQu
cGFyc2luZygpKQorICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LmFwcGx5WFNMVHJhbnNm
b3JtKCZwaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorI2VuZGlm
CisgICAgICAgIH0gZWxzZSBpZiAoaXM8SFRNTExpbmtFbGVtZW50Pigqbm9kZSkgfHwgaXM8SFRN
TFN0eWxlRWxlbWVudD4oKm5vZGUpIHx8IGlzPFNWR1N0eWxlRWxlbWVudD4oKm5vZGUpKSB7Cisg
ICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwor
ICAgICAgICAgICAgQXRvbWljU3RyaW5nIHRpdGxlID0gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRl
KHRpdGxlQXR0cik7CisgICAgICAgICAgICBib29sIGVuYWJsZWRWaWFTY3JpcHQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGlmIChpczxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAg
ICAgICAgICAgLy8gPExJTks+IGVsZW1lbnQKKyAgICAgICAgICAgICAgICBIVE1MTGlua0VsZW1l
bnQmIGxpbmtFbGVtZW50ID0gZG93bmNhc3Q8SFRNTExpbmtFbGVtZW50PihlbGVtZW50KTsKKyAg
ICAgICAgICAgICAgICBpZiAobGlua0VsZW1lbnQuaXNEaXNhYmxlZCgpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBlbmFibGVkVmlhU2NyaXB0ID0gbGlu
a0VsZW1lbnQuaXNFbmFibGVkVmlhU2NyaXB0KCk7CisgICAgICAgICAgICAgICAgaWYgKGxpbmtF
bGVtZW50LnN0eWxlU2hlZXRJc0xvYWRpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBp
dCBpcyBsb2FkaW5nIGJ1dCB3ZSBzaG91bGQgc3RpbGwgZGVjaWRlIHdoaWNoIHN0eWxlIHNoZWV0
IHNldCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmFibGVkVmlhU2NyaXB0ICYm
ICF0aXRsZS5pc0VtcHR5KCkgJiYgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGlua0VsZW1lbnQuZmFzdEdldEF0
dHJpYnV0ZShyZWxBdHRyKS5jb250YWlucygiYWx0ZXJuYXRlIikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lID0gdGl0bGU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lID0gdGl0
bGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICghbGlua0VsZW1lbnQuc2hlZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgdGl0
bGUgPSBudWxsQXRvbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEdldCB0aGUgY3Vy
cmVudCBwcmVmZXJyZWQgc3R5bGVzZXQuIFRoaXMgaXMgdGhlCisgICAgICAgICAgICAvLyBzZXQg
b2Ygc2hlZXRzIHRoYXQgd2lsbCBiZSBlbmFibGVkLgorICAgICAgICAgICAgaWYgKGlzPFNWR1N0
eWxlRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgICAgICAgICAgc2hlZXQgPSBkb3duY2FzdDxT
VkdTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CisgICAgICAgICAgICBlbHNlIGlmIChp
czxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHNoZWV0ID0gZG93
bmNhc3Q8SFRNTExpbmtFbGVtZW50PihlbGVtZW50KS5zaGVldCgpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHNoZWV0ID0gZG93bmNhc3Q8SFRNTFN0eWxlRWxlbWVudD4oZWxl
bWVudCkuc2hlZXQoKTsKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIHNoZWV0
IGJlbG9uZ3MgdG8gYSBzdHlsZXNldAorICAgICAgICAgICAgLy8gKHRodXMgbWFraW5nIGl0IFBS
RUZFUlJFRCBvciBBTFRFUk5BVEUgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIC8vIFBFUlNJU1RF
TlQpLgorICAgICAgICAgICAgYXV0byYgcmVsID0gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHJl
bEF0dHIpOworICAgICAgICAgICAgaWYgKCFlbmFibGVkVmlhU2NyaXB0ICYmICF0aXRsZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBZZXMsIHdlIGhhdmUgYSB0aXRsZS4KKyAgICAg
ICAgICAgICAgICBpZiAobV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gTm8gcHJlZmVycmVkIHNldCBoYXMgYmVlbiBlc3RhYmxp
c2hlZC4gSWYKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgYXJlIE5PVCBhbiBhbHRlcm5hdGUg
c2hlZXQsIHRoZW4gZXN0YWJsaXNoCisgICAgICAgICAgICAgICAgICAgIC8vIHVzIGFzIHRoZSBw
cmVmZXJyZWQgc2V0LiBPdGhlcndpc2UsIGp1c3QgaWdub3JlCisgICAgICAgICAgICAgICAgICAg
IC8vIHRoaXMgc2hlZXQuCisgICAgICAgICAgICAgICAgICAgIGlmIChpczxIVE1MU3R5bGVFbGVt
ZW50PihlbGVtZW50KSB8fCAhcmVsLmNvbnRhaW5zKCJhbHRlcm5hdGUiKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUgPSBtX3NlbGVjdGVkU3R5
bGVzaGVldFNldE5hbWUgPSB0aXRsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHRpdGxlICE9IG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUpCisgICAgICAgICAg
ICAgICAgICAgIHNoZWV0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHJlbC5jb250YWlucygiYWx0ZXJuYXRlIikgJiYgdGl0bGUuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIHNoZWV0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2hlZXQp
CisgICAgICAgICAgICBzaGVldHMuYXBwZW5kKHNoZWV0KTsKKyAgICB9Cit9CisKK3ZvaWQgRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UoVXBkYXRl
RmxhZyB1cGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgbmV3
U3R5bGVzaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlJiBzdHlsZVJlc29sdmVyVXBkYXRl
VHlwZSwgYm9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpCit7CisgICAgc3R5bGVSZXNvbHZl
clVwZGF0ZVR5cGUgPSBSZWNvbnN0cnVjdDsKKyAgICByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyA9
IHRydWU7CisgICAgCisgICAgLy8gU3R5bGVzaGVldHMgb2YgPHN0eWxlPiBlbGVtZW50cyB0aGF0
IEBpbXBvcnQgc3R5bGVzaGVldHMgYXJlIGFjdGl2ZSBidXQgbG9hZGluZy4gV2UgbmVlZCB0byB0
cmlnZ2VyIGEgZnVsbCByZWNhbGMgd2hlbiBzdWNoIGxvYWRzIGFyZSBkb25lLgorICAgIGJvb2wg
aGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBuZXdTdHls
ZXNoZWV0Q291bnQgPSBuZXdTdHlsZXNoZWV0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG5ld1N0eWxlc2hlZXRDb3VudDsgKytpKSB7CisgICAgICAgIGlmIChuZXdTdHls
ZXNoZWV0c1tpXS0+aXNMb2FkaW5nKCkpCisgICAgICAgICAgICBoYXNBY3RpdmVMb2FkaW5nU3R5
bGVzaGVldCA9IHRydWU7CisgICAgfQorICAgIGlmIChtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNo
ZWV0ICYmICFoYXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCkgeworICAgICAgICBtX2hhZEFjdGl2
ZUxvYWRpbmdTdHlsZXNoZWV0ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
bV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IGhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0
OworCisgICAgaWYgKHVwZGF0ZUZsYWcgIT0gT3B0aW1pemVkVXBkYXRlKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCFtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpKQorICAgICAg
ICByZXR1cm47CisgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9ICptX2RvY3VtZW50
LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpOworCisgICAgLy8gRmluZCBvdXQgd2hpY2ggc3R5bGVz
aGVldHMgYXJlIG5ldy4KKyAgICB1bnNpZ25lZCBvbGRTdHlsZXNoZWV0Q291bnQgPSBtX2FjdGl2
ZUF1dGhvclN0eWxlU2hlZXRzLnNpemUoKTsKKyAgICBpZiAobmV3U3R5bGVzaGVldENvdW50IDwg
b2xkU3R5bGVzaGVldENvdW50KQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPFN0eWxlU2hl
ZXRDb250ZW50cyo+IGFkZGVkU2hlZXRzOworICAgIHVuc2lnbmVkIG5ld0luZGV4ID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIG9sZEluZGV4ID0gMDsgb2xkSW5kZXggPCBvbGRTdHlsZXNoZWV0Q291
bnQ7ICsrb2xkSW5kZXgpIHsKKyAgICAgICAgaWYgKG5ld0luZGV4ID49IG5ld1N0eWxlc2hlZXRD
b3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2hpbGUgKG1fYWN0aXZlQXV0aG9y
U3R5bGVTaGVldHNbb2xkSW5kZXhdICE9IG5ld1N0eWxlc2hlZXRzW25ld0luZGV4XSkgeworICAg
ICAgICAgICAgYWRkZWRTaGVldHMuYXBwZW5kKCZuZXdTdHlsZXNoZWV0c1tuZXdJbmRleF0tPmNv
bnRlbnRzKCkpOworICAgICAgICAgICAgKytuZXdJbmRleDsKKyAgICAgICAgICAgIGlmIChuZXdJ
bmRleCA9PSBuZXdTdHlsZXNoZWV0Q291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgICsrbmV3SW5kZXg7CisgICAgfQorICAgIGJvb2wgaGFzSW5zZXJ0aW9u
cyA9ICFhZGRlZFNoZWV0cy5pc0VtcHR5KCk7CisgICAgd2hpbGUgKG5ld0luZGV4IDwgbmV3U3R5
bGVzaGVldENvdW50KSB7CisgICAgICAgIGFkZGVkU2hlZXRzLmFwcGVuZCgmbmV3U3R5bGVzaGVl
dHNbbmV3SW5kZXhdLT5jb250ZW50cygpKTsKKyAgICAgICAgKytuZXdJbmRleDsKKyAgICB9Cisg
ICAgLy8gSWYgYWxsIG5ldyBzaGVldHMgd2VyZSBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0
IHdlIGNhbiBqdXN0IGFkZCB0aGVtIHRvIGV4aXN0aW5nIFN0eWxlUmVzb2x2ZXIuCisgICAgLy8g
SWYgdGhlcmUgd2VyZSBpbnNlcnRpb25zIHdlIG5lZWQgdG8gcmUtYWRkIGFsbCB0aGUgc3R5bGVz
aGVldHMgc28gcnVsZXMgYXJlIG9yZGVyZWQgY29ycmVjdGx5LgorICAgIHN0eWxlUmVzb2x2ZXJV
cGRhdGVUeXBlID0gaGFzSW5zZXJ0aW9ucyA/IFJlc2V0IDogQWRkaXRpdmU7CisKKyAgICAvLyBJ
ZiB3ZSBhcmUgYWxyZWFkeSBwYXJzaW5nIHRoZSBib2R5IGFuZCBzbyBtYXkgaGF2ZSBzaWduaWZp
Y2FudCBhbW91bnQgb2YgZWxlbWVudHMsIHB1dCBzb21lIGVmZm9ydCBpbnRvIHRyeWluZyB0byBh
dm9pZCBzdHlsZSByZWNhbGNzLgorICAgIGlmICghbV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgp
IHx8IG1fZG9jdW1lbnQuaGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyBpbnZhbGlkYXRpb25BbmFseXNp
cyhhZGRlZFNoZWV0cywgc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5RXZhbHVhdG9yKCkpOworICAg
IGlmIChpbnZhbGlkYXRpb25BbmFseXNpcy5kaXJ0aWVzQWxsU3R5bGUoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGludmFsaWRhdGlvbkFuYWx5c2lzLmludmFsaWRhdGVTdHlsZShtX2RvY3VtZW50
KTsKKyAgICByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyA9IGZhbHNlOworfQorCitzdGF0aWMgdm9p
ZCBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiYgcmVzdWx0LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hl
ZXRzKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaGVldHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKCFpczxDU1NTdHlsZVNoZWV0Pigqc2hlZXRzW2ldKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBDU1NTdHlsZVNoZWV0JiBzaGVldCA9IGRvd25jYXN0PENT
U1N0eWxlU2hlZXQ+KCpzaGVldHNbaV0pOworICAgICAgICBpZiAoc2hlZXQuZGlzYWJsZWQoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIXNoZWV0Lmxlbmd0aCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJnNoZWV0KTsKKyAgICB9
Cit9CisKK2Jvb2wgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlQWN0aXZlU3R5
bGVTaGVldHMoVXBkYXRlRmxhZyB1cGRhdGVGbGFnKQoreworICAgIGlmIChtX2RvY3VtZW50Lmlu
U3R5bGVSZWNhbGMoKSkgeworICAgICAgICAvLyBTVkcgPHVzZT4gZWxlbWVudCBtYXkgbWFuYWdl
IHRvIGludmFsaWRhdGUgc3R5bGUgc2VsZWN0b3IgaW4gdGhlIG1pZGRsZSBvZiBhIHN0eWxlIHJl
Y2FsYy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU0MzQ0CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiBTVkcgYW5k
IHRoZSBjYWxsIHNpdGUgcmVwbGFjZWQgYnkgQVNTRVJUKCFtX2luU3R5bGVSZWNhbGMpLgorICAg
ICAgICBtX3BlbmRpbmdVcGRhdGVUeXBlID0gRnVsbFVwZGF0ZTsKKyAgICAgICAgbV9kb2N1bWVu
dC5zY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIH0KKyAgICBpZiAoIW1fZG9jdW1lbnQuaGFzTGl2aW5nUmVuZGVyVHJlZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiBhY3RpdmVT
dHlsZVNoZWV0czsKKyAgICBjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoYWN0aXZlU3R5bGVTaGVl
dHMpOworCisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gYWN0aXZlQ1NTU3R5bGVT
aGVldHM7CisgICAgYWN0aXZlQ1NTU3R5bGVTaGVldHMuYXBwZW5kVmVjdG9yKGluamVjdGVkQXV0
aG9yU3R5bGVTaGVldHMoKSk7CisgICAgYWN0aXZlQ1NTU3R5bGVTaGVldHMuYXBwZW5kVmVjdG9y
KGRvY3VtZW50QXV0aG9yU3R5bGVTaGVldHMoKSk7CisgICAgZmlsdGVyRW5hYmxlZE5vbmVtcHR5
Q1NTU3R5bGVTaGVldHMoYWN0aXZlQ1NTU3R5bGVTaGVldHMsIGFjdGl2ZVN0eWxlU2hlZXRzKTsK
KworICAgIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlOwor
ICAgIGJvb2wgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGM7CisgICAgYW5hbHl6ZVN0eWxlU2hlZXRD
aGFuZ2UodXBkYXRlRmxhZywgYWN0aXZlQ1NTU3R5bGVTaGVldHMsIHN0eWxlUmVzb2x2ZXJVcGRh
dGVUeXBlLCByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyk7CisKKyAgICBpZiAoc3R5bGVSZXNvbHZl
clVwZGF0ZVR5cGUgPT0gUmVjb25zdHJ1Y3QpCisgICAgICAgIG1fZG9jdW1lbnQuY2xlYXJTdHls
ZVJlc29sdmVyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKKyAgICAgICAgaWYgKHN0
eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID09IFJlc2V0KSB7CisgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLnJ1bGVTZXRzKCkucmVzZXRBdXRob3JTdHlsZSgpOworICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cygwLCBhY3RpdmVDU1NTdHlsZVNoZWV0cyk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc3R5bGVSZXNvbHZlclVwZGF0ZVR5
cGUgPT0gQWRkaXRpdmUpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5hcHBlbmRBdXRob3JT
dHlsZVNoZWV0cyhtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzLnNpemUoKSwgYWN0aXZlQ1NTU3R5
bGVTaGVldHMpOworICAgICAgICB9CisgICAgICAgIHJlc2V0Q1NTRmVhdHVyZUZsYWdzKCk7Cisg
ICAgfQorCisgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3Vw
ID0gbnVsbHB0cjsKKyAgICBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzLnN3YXAoYWN0aXZlQ1NT
U3R5bGVTaGVldHMpOworICAgIG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdC5zd2FwKGFj
dGl2ZVN0eWxlU2hlZXRzKTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWN0aXZl
U3R5bGVTaGVldHNVcGRhdGVkKG1fZG9jdW1lbnQpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBz
aGVldCA6IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMpIHsKKyAgICAgICAgaWYgKHNoZWV0LT5j
b250ZW50cygpLnVzZXNSZW1Vbml0cygpKQorICAgICAgICAgICAgbV91c2VzUmVtVW5pdHMgPSB0
cnVlOworICAgICAgICBpZiAoc2hlZXQtPmNvbnRlbnRzKCkudXNlc1N0eWxlQmFzZWRFZGl0YWJp
bGl0eSgpKQorICAgICAgICAgICAgbV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5ID0gdHJ1ZTsK
KyAgICB9CisgICAgbV9wZW5kaW5nVXBkYXRlVHlwZSA9IE5vVXBkYXRlOworCisgICAgcmV0dXJu
IHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjOworfQorCitjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphY3RpdmVTdHlsZVNoZWV0
c0Zvckluc3BlY3RvcigpIGNvbnN0Cit7CisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0
Pj4gcmVzdWx0OworCisgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihpbmplY3RlZEF1dGhvclN0eWxl
U2hlZXRzKCkpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZG9jdW1lbnRBdXRob3JTdHlsZVNo
ZWV0cygpKTsKKworICAgIGZvciAoYXV0byYgc3R5bGVTaGVldCA6IG1fc3R5bGVTaGVldHNGb3JT
dHlsZVNoZWV0TGlzdCkgeworICAgICAgICBpZiAoIWlzPENTU1N0eWxlU2hlZXQ+KCpzdHlsZVNo
ZWV0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENTU1N0eWxlU2hlZXQmIHNo
ZWV0ID0gZG93bmNhc3Q8Q1NTU3R5bGVTaGVldD4oKnN0eWxlU2hlZXQpOworICAgICAgICBpZiAo
c2hlZXQuZGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJnNoZWV0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29s
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMo
Y29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQpIGNvbnN0Cit7CisgICAgaWYgKCFtX3dlYWtDb3B5
T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXApIHsKKyAgICAgICAgbV93ZWFrQ29w
eU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwID0gc3RkOjptYWtlX3VuaXF1ZTxI
YXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4oKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAtPmFkZCht
X2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzW2ldLmdldCgpKTsKKyAgICB9CisgICAgcmV0dXJuIG1f
d2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+Y29udGFpbnMoc2hl
ZXQpOworfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmRldGFjaEZyb21E
b2N1bWVudCgpCit7CisgICAgaWYgKG1fcGFnZVVzZXJTaGVldCkKKyAgICAgICAgbV9wYWdlVXNl
clNoZWV0LT5kZXRhY2hGcm9tRG9jdW1lbnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9pbmpl
Y3RlZFVzZXJTdHlsZVNoZWV0c1tpXS0+ZGV0YWNoRnJvbURvY3VtZW50KCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5zaXplKCk7ICsr
aSkKKyAgICAgICAgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzW2ldLT5kZXRhY2hGcm9tRG9j
dW1lbnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91c2VyU3R5bGVTaGVldHMu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzW2ldLT5kZXRhY2hGcm9tRG9j
dW1lbnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hdXRob3JTdHlsZVNoZWV0
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9hdXRob3JTdHlsZVNoZWV0c1tpXS0+ZGV0YWNoRnJv
bURvY3VtZW50KCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHls
ZVNoZWV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0F1dGhvclN0eWxl
U2hlZXRzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0F1dGhvclN0
eWxlU2hlZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5LCAy
MDExLTIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
IChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKQEAgLTI2LDEwICsyNiwxMSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiQXV0aG9yU3R5
bGVTaGVldHMuaCIKIAogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJFbGVt
ZW50LmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJIVE1M
SUZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxTdHlsZUVsZW1lbnQuaCIKQEAgLTUzLDE5MyArNTQsMjUgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zOwogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAotRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6RG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBtX2RvY3VtZW50KGRv
Y3VtZW50KQotICAgICwgbV9wZW5kaW5nU3R5bGVzaGVldHMoMCkKLSAgICAsIG1faW5qZWN0ZWRT
dHlsZVNoZWV0Q2FjaGVWYWxpZChmYWxzZSkKLSAgICAsIG1faGFkQWN0aXZlTG9hZGluZ1N0eWxl
c2hlZXQoZmFsc2UpCi0gICAgLCBtX3BlbmRpbmdVcGRhdGVUeXBlKE5vVXBkYXRlKQotICAgICwg
bV91c2VzRmlyc3RMaW5lUnVsZXMoZmFsc2UpCi0gICAgLCBtX3VzZXNGaXJzdExldHRlclJ1bGVz
KGZhbHNlKQotICAgICwgbV91c2VzUmVtVW5pdHMoZmFsc2UpCi0gICAgLCBtX3VzZXNTdHlsZUJh
c2VkRWRpdGFiaWxpdHkoZmFsc2UpCi0gICAgLCBtX3N0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXIo
KnRoaXMsICZEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpzdHlsZVJlc29sdmVyQ2hhbmdl
ZFRpbWVyRmlyZWQpCitBdXRob3JTdHlsZVNoZWV0czo6QXV0aG9yU3R5bGVTaGVldHMoVHJlZVNj
b3BlJiB0cmVlU2NvcGUpCisgICAgOiBtX2RvY3VtZW50KHRyZWVTY29wZS5kb2N1bWVudFNjb3Bl
KCkpCiB7CiB9CiAKLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y29tYmluZUNT
U0ZlYXR1cmVGbGFncygpCi17Ci0gICAgLy8gRGVsYXkgcmVzZXR0aW5nIHRoZSBmbGFncyB1bnRp
bCBhZnRlciBuZXh0IHN0eWxlIHJlY2FsYyBzaW5jZSB1bmFwcGx5aW5nIHRoZSBzdHlsZSBtYXkg
bm90IHdvcmsgd2l0aG91dCB0aGVzZSBzZXQgKHRoaXMgaXMgdHJ1ZSBhdCBsZWFzdCB3aXRoIGJl
Zm9yZS9hZnRlcikuCi0gICAgY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IG1f
ZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwotICAgIG1fdXNlc0ZpcnN0TGluZVJ1bGVz
ID0gbV91c2VzRmlyc3RMaW5lUnVsZXMgfHwgc3R5bGVSZXNvbHZlci51c2VzRmlyc3RMaW5lUnVs
ZXMoKTsKLSAgICBtX3VzZXNGaXJzdExldHRlclJ1bGVzID0gbV91c2VzRmlyc3RMZXR0ZXJSdWxl
cyB8fCBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExldHRlclJ1bGVzKCk7Ci19Ci0KLXZvaWQgRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVzZXRDU1NGZWF0dXJlRmxhZ3MoKQotewotICAg
IGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0
eWxlUmVzb2x2ZXIoKTsKLSAgICBtX3VzZXNGaXJzdExpbmVSdWxlcyA9IHN0eWxlUmVzb2x2ZXIu
dXNlc0ZpcnN0TGluZVJ1bGVzKCk7Ci0gICAgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyA9IHN0eWxl
UmVzb2x2ZXIudXNlc0ZpcnN0TGV0dGVyUnVsZXMoKTsKLX0KLQotQ1NTU3R5bGVTaGVldCogRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cGFnZVVzZXJTaGVldCgpCi17Ci0gICAgaWYgKG1f
cGFnZVVzZXJTaGVldCkKLSAgICAgICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKLSAg
ICAKLSAgICBQYWdlKiBvd25pbmdQYWdlID0gbV9kb2N1bWVudC5wYWdlKCk7Ci0gICAgaWYgKCFv
d25pbmdQYWdlKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBTdHJpbmcgdXNlclNoZWV0
VGV4dCA9IG93bmluZ1BhZ2UtPnVzZXJTdHlsZVNoZWV0KCk7Ci0gICAgaWYgKHVzZXJTaGVldFRl
eHQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICAvLyBQYXJzZSB0aGUg
c2hlZXQgYW5kIGNhY2hlIGl0LgotICAgIG1fcGFnZVVzZXJTaGVldCA9IENTU1N0eWxlU2hlZXQ6
OmNyZWF0ZUlubGluZShtX2RvY3VtZW50LCBtX2RvY3VtZW50LnNldHRpbmdzKCktPnVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oKSk7Ci0gICAgbV9wYWdlVXNlclNoZWV0LT5jb250ZW50cygpLnNldElz
VXNlclN0eWxlU2hlZXQodHJ1ZSk7Ci0gICAgbV9wYWdlVXNlclNoZWV0LT5jb250ZW50cygpLnBh
cnNlU3RyaW5nKHVzZXJTaGVldFRleHQpOwotICAgIHJldHVybiBtX3BhZ2VVc2VyU2hlZXQuZ2V0
KCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y2xlYXJQYWdlVXNl
clNoZWV0KCkKLXsKLSAgICBpZiAobV9wYWdlVXNlclNoZWV0KSB7Ci0gICAgICAgIG1fcGFnZVVz
ZXJTaGVldCA9IG51bGxwdHI7Ci0gICAgICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5n
ZWQoRGVmZXJSZWNhbGNTdHlsZSk7Ci0gICAgfQotfQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb246OnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKQotewotICAgIGNsZWFyUGFnZVVzZXJT
aGVldCgpOwotICAgIGlmIChwYWdlVXNlclNoZWV0KCkpCi0gICAgICAgIG1fZG9jdW1lbnQuc3R5
bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci19Ci0KLWNvbnN0IFZl
Y3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
OjppbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpIGNvbnN0Ci17Ci0gICAgdXBkYXRlSW5qZWN0ZWRT
dHlsZVNoZWV0Q2FjaGUoKTsKLSAgICByZXR1cm4gbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0czsK
LX0KLQotY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb246OmluamVjdGVkQXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdAotewotICAg
IHVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCk7Ci0gICAgcmV0dXJuIG1faW5qZWN0ZWRB
dXRob3JTdHlsZVNoZWV0czsKLX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
Ojp1cGRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW5q
ZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faW5qZWN0
ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZCA9IHRydWU7Ci0gICAgbV9pbmplY3RlZFVzZXJTdHlsZVNo
ZWV0cy5jbGVhcigpOwotICAgIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5jbGVhcigpOwot
Ci0gICAgUGFnZSogb3duaW5nUGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpOwotICAgIGlmICghb3du
aW5nUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgYXV0byogdXNlckNvbnRlbnRD
b250cm9sbGVyID0gb3duaW5nUGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7Ci0gICAgaWYg
KCF1c2VyQ29udGVudENvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFVz
ZXJTdHlsZVNoZWV0TWFwKiB1c2VyU3R5bGVTaGVldHMgPSB1c2VyQ29udGVudENvbnRyb2xsZXIt
PnVzZXJTdHlsZVNoZWV0cygpOwotICAgIGlmICghdXNlclN0eWxlU2hlZXRzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXRzIDogdXNlclN0eWxlU2hlZXRzLT52
YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHNoZWV0IDogKnN0eWxlU2hlZXRz
KSB7Ci0gICAgICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVkRnJhbWVzKCkgPT0gSW5qZWN0SW5U
b3BGcmFtZU9ubHkgJiYgbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKCFVc2VyQ29udGVudFVSTFBhdHRlcm46Om1h
dGNoZXNQYXR0ZXJucyhtX2RvY3VtZW50LnVybCgpLCBzaGVldC0+d2hpdGVsaXN0KCksIHNoZWV0
LT5ibGFja2xpc3QoKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBncm91cFNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRl
SW5saW5lKGNvbnN0X2Nhc3Q8RG9jdW1lbnQmPihtX2RvY3VtZW50KSwgc2hlZXQtPnVybCgpKTsK
LSAgICAgICAgICAgIGJvb2wgaXNVc2VyU3R5bGVTaGVldCA9IHNoZWV0LT5sZXZlbCgpID09IFVz
ZXJTdHlsZVVzZXJMZXZlbDsKLSAgICAgICAgICAgIGlmIChpc1VzZXJTdHlsZVNoZWV0KQotICAg
ICAgICAgICAgICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuYXBwZW5kKGdyb3VwU2hlZXQp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRBdXRob3JTdHls
ZVNoZWV0cy5hcHBlbmQoZ3JvdXBTaGVldCk7Ci0KLSAgICAgICAgICAgIGdyb3VwU2hlZXQtPmNv
bnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVTaGVldChpc1VzZXJTdHlsZVNoZWV0KTsKLSAgICAgICAg
ICAgIGdyb3VwU2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJpbmcoc2hlZXQtPnNvdXJjZSgpKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
OjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKQotewotICAgIGlmICghbV9pbmpl
Y3RlZFN0eWxlU2hlZXRDYWNoZVZhbGlkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pbmplY3Rl
ZFN0eWxlU2hlZXRDYWNoZVZhbGlkID0gZmFsc2U7Ci0gICAgaWYgKG1faW5qZWN0ZWRVc2VyU3R5
bGVTaGVldHMuaXNFbXB0eSgpICYmIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2Vk
KERlZmVyUmVjYWxjU3R5bGUpOwotfQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b246OmFkZEF1dGhvclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgYXV0aG9yU2hlZXQp
Ci17Ci0gICAgQVNTRVJUKCFhdXRob3JTaGVldC5nZXQoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOwot
ICAgIG1fYXV0aG9yU3R5bGVTaGVldHMuYXBwZW5kKENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShXVEY6
Om1vdmUoYXV0aG9yU2hlZXQpLCAmbV9kb2N1bWVudCkpOwotICAgIG1fZG9jdW1lbnQuc3R5bGVS
ZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci19Ci0KLXZvaWQgRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkVXNlclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVu
dHM+JiYgdXNlclNoZWV0KQotewotICAgIEFTU0VSVCh1c2VyU2hlZXQuZ2V0KCkuaXNVc2VyU3R5
bGVTaGVldCgpKTsKLSAgICBtX3VzZXJTdHlsZVNoZWV0cy5hcHBlbmQoQ1NTU3R5bGVTaGVldDo6
Y3JlYXRlKFdURjo6bW92ZSh1c2VyU2hlZXQpLCAmbV9kb2N1bWVudCkpOwotICAgIG1fZG9jdW1l
bnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci19Ci0KLSNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uOjphZGREaXNwbGF5Tm9uZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgdWludDMyX3Qgc2VsZWN0b3JJRCkKLXsKLSAgICBhdXRv
IHJlc3VsdCA9IG1fY29udGVudEV4dGVuc2lvblNlbGVjdG9yU2hlZXRzLmFkZChpZGVudGlmaWVy
LCBudWxscHRyKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0OjpjcmVhdGUobV9k
b2N1bWVudCk7Ci0gICAgICAgIG1fdXNlclN0eWxlU2hlZXRzLmFwcGVuZCgmcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS0+c3R5bGVTaGVldCgpKTsKLSAgICB9Ci0KLSAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5hZGREaXNwbGF5Tm9uZVNlbGVjdG9yKHNlbGVjdG9yLCBzZWxlY3RvcklEKTsKLSAg
ICBtX3N0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lk
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246Om1heWJlQWRkQ29udGVudEV4dGVuc2lvblNo
ZWV0KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkK
LXsKLSAgICBBU1NFUlQoc2hlZXQuaXNVc2VyU3R5bGVTaGVldCgpKTsKLQotICAgIGlmIChtX2Nv
bnRlbnRFeHRlbnNpb25TaGVldHMuY29udGFpbnMoaWRlbnRpZmllcikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFJlZjxDU1NTdHlsZVNoZWV0PiBjc3NTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNy
ZWF0ZShzaGVldCwgJm1fZG9jdW1lbnQpOwotICAgIG1fY29udGVudEV4dGVuc2lvblNoZWV0cy5z
ZXQoaWRlbnRpZmllciwgJmNzc1NoZWV0LmdldCgpKTsKLSAgICBtX3VzZXJTdHlsZVNoZWV0cy5h
cHBlbmQoYWRvcHRSZWYoY3NzU2hlZXQubGVha1JlZigpKSk7Ci0gICAgbV9zdHlsZVJlc29sdmVy
Q2hhbmdlZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnN0eWxl
UmVzb2x2ZXJDaGFuZ2VkVGltZXJGaXJlZCgpCi17Ci0gICAgbV9kb2N1bWVudC5zdHlsZVJlc29s
dmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKLX0KLQogLy8gVGhpcyBtZXRob2Qg
aXMgY2FsbGVkIHdoZW5ldmVyIGEgdG9wLWxldmVsIHN0eWxlc2hlZXQgaGFzIGZpbmlzaGVkIGxv
YWRpbmcuCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnJlbW92ZVBlbmRpbmdT
aGVldChSZW1vdmVQZW5kaW5nU2hlZXROb3RpZmljYXRpb25UeXBlIG5vdGlmaWNhdGlvbikKK3Zv
aWQgQXV0aG9yU3R5bGVTaGVldHM6OnJlbW92ZVBlbmRpbmdTaGVldChSZW1vdmVQZW5kaW5nU2hl
ZXROb3RpZmljYXRpb25UeXBlIG5vdGlmaWNhdGlvbikKIHsKICAgICAvLyBNYWtlIHN1cmUgd2Ug
a25ldyB0aGlzIHNoZWV0IHdhcyBwZW5kaW5nLCBhbmQgdGhhdCBvdXIgY291bnQgaXNuJ3Qgb3V0
IG9mIHN5bmMuCi0gICAgQVNTRVJUKG1fcGVuZGluZ1N0eWxlc2hlZXRzID4gMCk7CisgICAgQVNT
RVJUKG1fcGVuZGluZ1N0eWxlU2hlZXRDb3VudCA+IDApOwogCi0gICAgbV9wZW5kaW5nU3R5bGVz
aGVldHMtLTsKKyAgICBtX3BlbmRpbmdTdHlsZVNoZWV0Q291bnQtLTsKICAgICAKICNpZmRlZiBJ
TlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCiAgICAgaWYgKCFvd25lckVsZW1lbnQoKSkKICAg
ICAgICAgcHJpbnRmKCJTdHlsZXNoZWV0IGxvYWRlZCBhdCB0aW1lICVkLiAlZCBzdHlsZXNoZWV0
cyBzdGlsbCByZW1haW4uXG4iLCBlbGFwc2VkVGltZSgpLCBtX3BlbmRpbmdTdHlsZXNoZWV0cyk7
CiAjZW5kaWYKIAotICAgIGlmIChtX3BlbmRpbmdTdHlsZXNoZWV0cykKKyAgICBpZiAobV9wZW5k
aW5nU3R5bGVTaGVldENvdW50KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobm90aWZpY2F0
aW9uID09IFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUxhdGVyKSB7CkBAIC0yNTAsNyArODMsNyBA
QCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnJlbW92CiAgICAgbV9kb2N1bWVu
dC5kaWRSZW1vdmVBbGxQZW5kaW5nU3R5bGVzaGVldCgpOwogfQogCi12b2lkIERvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb246OmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmIG5vZGUs
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQordm9pZCBBdXRob3JTdHlsZVNoZWV0czo6YWRkU3R5bGVT
aGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7CiAg
ICAgaWYgKCFub2RlLmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgzLDEyICsx
MTYsMTIgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphZGRTdAogICAgIG1f
c3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmluc2VydEJlZm9yZShmb2xsb3dpbmdOb2RlLCAmbm9k
ZSk7CiB9CiAKLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVtb3ZlU3R5bGVT
aGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSkKK3ZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OnJl
bW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmIG5vZGUpCiB7CiAgICAgbV9zdHlsZVNo
ZWV0Q2FuZGlkYXRlTm9kZXMucmVtb3ZlKCZub2RlKTsKIH0KIAotdm9pZCBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxT
dHlsZVNoZWV0Pj4mIHNoZWV0cykKK3ZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OmNvbGxlY3RBY3Rp
dmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQogewogICAg
IGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkgJiYgIW1fZG9jdW1lbnQuc2V0dGluZ3MoKS0+YXV0
aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzY2LDcgKzE5
OSw3IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y29sbGUKICAgICB9CiB9
CiAKLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YW5hbHl6ZVN0eWxlU2hlZXRD
aGFuZ2UoVXBkYXRlRmxhZyB1cGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxl
U2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlJiBzdHlsZVJl
c29sdmVyVXBkYXRlVHlwZSwgYm9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpCit2b2lkIEF1
dGhvclN0eWxlU2hlZXRzOjphbmFseXplU3R5bGVTaGVldENoYW5nZShVcGRhdGVGbGFnIHVwZGF0
ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBuZXdTdHlsZXNoZWV0
cywgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUmIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlLCBib29s
JiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYykKIHsKICAgICBzdHlsZVJlc29sdmVyVXBkYXRlVHlw
ZSA9IFJlY29uc3RydWN0OwogICAgIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gdHJ1ZTsKQEAg
LTM5MSw3ICsyMjQsNyBAQCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFuYWx5
CiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9ICptX2RvY3VtZW50LnN0eWxlUmVz
b2x2ZXJJZkV4aXN0cygpOwogCiAgICAgLy8gRmluZCBvdXQgd2hpY2ggc3R5bGVzaGVldHMgYXJl
IG5ldy4KLSAgICB1bnNpZ25lZCBvbGRTdHlsZXNoZWV0Q291bnQgPSBtX2FjdGl2ZUF1dGhvclN0
eWxlU2hlZXRzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBvbGRTdHlsZXNoZWV0Q291bnQgPSBtX2Fj
dGl2ZVN0eWxlU2hlZXRzLnNpemUoKTsKICAgICBpZiAobmV3U3R5bGVzaGVldENvdW50IDwgb2xk
U3R5bGVzaGVldENvdW50KQogICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPFN0eWxlU2hlZXRD
b250ZW50cyo+IGFkZGVkU2hlZXRzOwpAQCAtMzk5LDcgKzIzMiw3IEBAIHZvaWQgRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbjo6YW5hbHkKICAgICBmb3IgKHVuc2lnbmVkIG9sZEluZGV4ID0g
MDsgb2xkSW5kZXggPCBvbGRTdHlsZXNoZWV0Q291bnQ7ICsrb2xkSW5kZXgpIHsKICAgICAgICAg
aWYgKG5ld0luZGV4ID49IG5ld1N0eWxlc2hlZXRDb3VudCkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgd2hpbGUgKG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHNbb2xkSW5kZXhdICE9IG5l
d1N0eWxlc2hlZXRzW25ld0luZGV4XSkgeworICAgICAgICB3aGlsZSAobV9hY3RpdmVTdHlsZVNo
ZWV0c1tvbGRJbmRleF0gIT0gbmV3U3R5bGVzaGVldHNbbmV3SW5kZXhdKSB7CiAgICAgICAgICAg
ICBhZGRlZFNoZWV0cy5hcHBlbmQoJm5ld1N0eWxlc2hlZXRzW25ld0luZGV4XS0+Y29udGVudHMo
KSk7CiAgICAgICAgICAgICArK25ld0luZGV4OwogICAgICAgICAgICAgaWYgKG5ld0luZGV4ID09
IG5ld1N0eWxlc2hlZXRDb3VudCkKQEAgLTQ0MCw3ICsyNzMsNyBAQCBzdGF0aWMgdm9pZCBmaWx0
ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsCiAgICAgfQogfQogCi1ib29sIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb246OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKFVwZGF0ZUZsYWcgdXBkYXRl
RmxhZykKK2Jvb2wgQXV0aG9yU3R5bGVTaGVldHM6OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKFVw
ZGF0ZUZsYWcgdXBkYXRlRmxhZykKIHsKICAgICBpZiAobV9kb2N1bWVudC5pblN0eWxlUmVjYWxj
KCkpIHsKICAgICAgICAgLy8gU1ZHIDx1c2U+IGVsZW1lbnQgbWF5IG1hbmFnZSB0byBpbnZhbGlk
YXRlIHN0eWxlIHNlbGVjdG9yIGluIHRoZSBtaWRkbGUgb2YgYSBzdHlsZSByZWNhbGMuCkBAIC00
NTgsOCArMjkxLDggQEAgYm9vbCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdAog
ICAgIGNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhhY3RpdmVTdHlsZVNoZWV0cyk7CiAKICAgICBW
ZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBhY3RpdmVDU1NTdHlsZVNoZWV0czsKLSAgICBh
Y3RpdmVDU1NTdHlsZVNoZWV0cy5hcHBlbmRWZWN0b3IoaW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0
cygpKTsKLSAgICBhY3RpdmVDU1NTdHlsZVNoZWV0cy5hcHBlbmRWZWN0b3IoZG9jdW1lbnRBdXRo
b3JTdHlsZVNoZWV0cygpKTsKKyAgICBhY3RpdmVDU1NTdHlsZVNoZWV0cy5hcHBlbmRWZWN0b3Io
bV9kb2N1bWVudC5leHRlbnNpb25TdHlsZVNoZWV0cygpLmluamVjdGVkQXV0aG9yU3R5bGVTaGVl
dHMoKSk7CisgICAgYWN0aXZlQ1NTU3R5bGVTaGVldHMuYXBwZW5kVmVjdG9yKG1fZG9jdW1lbnQu
ZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5hdXRob3JTdHlsZVNoZWV0c0ZvclRlc3RpbmcoKSk7CiAg
ICAgZmlsdGVyRW5hYmxlZE5vbmVtcHR5Q1NTU3R5bGVTaGVldHMoYWN0aXZlQ1NTU3R5bGVTaGVl
dHMsIGFjdGl2ZVN0eWxlU2hlZXRzKTsKIAogICAgIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHN0
eWxlUmVzb2x2ZXJVcGRhdGVUeXBlOwpAQCAtNDc1LDE4ICszMDgsMTcgQEAgYm9vbCBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdAogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5h
cHBlbmRBdXRob3JTdHlsZVNoZWV0cygwLCBhY3RpdmVDU1NTdHlsZVNoZWV0cyk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPT0g
QWRkaXRpdmUpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5hcHBlbmRBdXRob3JTdHlsZVNo
ZWV0cyhtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzLnNpemUoKSwgYWN0aXZlQ1NTU3R5bGVTaGVl
dHMpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cyht
X2FjdGl2ZVN0eWxlU2hlZXRzLnNpemUoKSwgYWN0aXZlQ1NTU3R5bGVTaGVldHMpOwogICAgICAg
ICB9Ci0gICAgICAgIHJlc2V0Q1NTRmVhdHVyZUZsYWdzKCk7CiAgICAgfQogCiAgICAgbV93ZWFr
Q29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwID0gbnVsbHB0cjsKLSAgICBt
X2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzLnN3YXAoYWN0aXZlQ1NTU3R5bGVTaGVldHMpOworICAg
IG1fYWN0aXZlU3R5bGVTaGVldHMuc3dhcChhY3RpdmVDU1NTdHlsZVNoZWV0cyk7CiAgICAgbV9z
dHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0LnN3YXAoYWN0aXZlU3R5bGVTaGVldHMpOwogCiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphY3RpdmVTdHlsZVNoZWV0c1VwZGF0ZWQobV9k
b2N1bWVudCk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNoZWV0IDogbV9hY3RpdmVBdXRob3JT
dHlsZVNoZWV0cykgeworICAgIGZvciAoY29uc3QgYXV0byYgc2hlZXQgOiBtX2FjdGl2ZVN0eWxl
U2hlZXRzKSB7CiAgICAgICAgIGlmIChzaGVldC0+Y29udGVudHMoKS51c2VzUmVtVW5pdHMoKSkK
ICAgICAgICAgICAgIG1fdXNlc1JlbVVuaXRzID0gdHJ1ZTsKICAgICAgICAgaWYgKHNoZWV0LT5j
b250ZW50cygpLnVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKSkKQEAgLTQ5NywxMiArMzI5LDEy
IEBAIGJvb2wgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXQKICAgICByZXR1cm4g
cmVxdWlyZXNGdWxsU3R5bGVSZWNhbGM7CiB9CiAKLWNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5
bGVTaGVldD4+IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFjdGl2ZVN0eWxlU2hlZXRz
Rm9ySW5zcGVjdG9yKCkgY29uc3QKK2NvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+
IEF1dGhvclN0eWxlU2hlZXRzOjphY3RpdmVTdHlsZVNoZWV0c0Zvckluc3BlY3RvcigpIGNvbnN0
CiB7CiAgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gcmVzdWx0OwogCi0gICAgcmVz
dWx0LmFwcGVuZFZlY3RvcihpbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzKCkpOwotICAgIHJlc3Vs
dC5hcHBlbmRWZWN0b3IoZG9jdW1lbnRBdXRob3JTdHlsZVNoZWV0cygpKTsKKyAgICByZXN1bHQu
YXBwZW5kVmVjdG9yKG1fZG9jdW1lbnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5pbmplY3RlZEF1
dGhvclN0eWxlU2hlZXRzKCkpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IobV9kb2N1bWVudC5l
eHRlbnNpb25TdHlsZVNoZWV0cygpLmF1dGhvclN0eWxlU2hlZXRzRm9yVGVzdGluZygpKTsKIAog
ICAgIGZvciAoYXV0byYgc3R5bGVTaGVldCA6IG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlz
dCkgewogICAgICAgICBpZiAoIWlzPENTU1N0eWxlU2hlZXQ+KCpzdHlsZVNoZWV0KSkKQEAgLTUx
OCwyOCArMzUwLDE0IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IERvY3UK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b246OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQp
IGNvbnN0Citib29sIEF1dGhvclN0eWxlU2hlZXRzOjphY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5z
KGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0KSBjb25zdAogewogICAgIGlmICghbV93ZWFrQ29w
eU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwKSB7CiAgICAgICAgIG1fd2Vha0Nv
cHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cCA9IHN0ZDo6bWFrZV91bmlxdWU8
SGFzaFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwLT5hZGQo
bV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0c1tpXS5nZXQoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2FjdGl2ZVN0eWxlU2hlZXRzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwLT5hZGQobV9h
Y3RpdmVTdHlsZVNoZWV0c1tpXS5nZXQoKSk7CiAgICAgfQogICAgIHJldHVybiBtX3dlYWtDb3B5
T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAtPmNvbnRhaW5zKHNoZWV0KTsKIH0K
IAotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpkZXRhY2hGcm9tRG9jdW1lbnQo
KQotewotICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQpCi0gICAgICAgIG1fcGFnZVVzZXJTaGVldC0+
ZGV0YWNoRnJvbURvY3VtZW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5q
ZWN0ZWRVc2VyU3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1faW5qZWN0ZWRVc2Vy
U3R5bGVTaGVldHNbaV0tPmRldGFjaEZyb21Eb2N1bWVudCgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0c1tpXS0+ZGV0YWNoRnJvbURvY3VtZW50KCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXNlclN0eWxlU2hlZXRzLnNpemUoKTsg
KytpKQotICAgICAgICBtX3VzZXJTdHlsZVNoZWV0c1tpXS0+ZGV0YWNoRnJvbURvY3VtZW50KCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1fYXV0aG9yU3R5bGVTaGVldHNbaV0tPmRldGFjaEZyb21Eb2N1bWVu
dCgpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMuaAko
cmV2aXNpb24gMTkwMDc0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNo
ZWV0Q29sbGVjdGlvbi5oOjE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHls
ZVNoZWV0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uX2gKKyNkZWZpbmUgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbl9oCisKKyNpbmNs
dWRlICJUaW1lci5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBEb2N1
bWVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBTdHlsZVNoZWV0OworY2xhc3MgU3R5bGVTaGVldENv
bnRlbnRzOworY2xhc3MgU3R5bGVTaGVldExpc3Q7CisKK2NsYXNzIERvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IGV4cGxpY2l0IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24oRG9jdW1lbnQmKTsKKworICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0c0ZvclN0eWxlU2hl
ZXRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0OyB9
CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgYWN0aXZlQXV0aG9y
U3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzOyB9
CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBhY3RpdmVTdHlsZVNo
ZWV0c0Zvckluc3BlY3RvcigpIGNvbnN0OworCisgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJT
aGVldCgpOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBkb2N1bWVu
dFVzZXJTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRzOyB9Cisg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGRvY3VtZW50QXV0aG9yU3R5
bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX2F1dGhvclN0eWxlU2hlZXRzOyB9CisgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGluamVjdGVkVXNlclN0eWxlU2hlZXRz
KCkgY29uc3Q7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGluamVj
dGVkQXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdDsKKworICAgIHZvaWQgYWRkU3R5bGVTaGVldENh
bmRpZGF0ZU5vZGUoTm9kZSYsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICB2b2lkIHJlbW92
ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmKTsKKworICAgIHZvaWQgY2xlYXJQYWdlVXNl
clNoZWV0KCk7CisgICAgdm9pZCB1cGRhdGVQYWdlVXNlclNoZWV0KCk7CisgICAgdm9pZCBpbnZh
bGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKKyAgICB2b2lkIHVwZGF0ZUluamVjdGVk
U3R5bGVTaGVldENhY2hlKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEF1
dGhvclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgYXV0aG9yU2hlZXQpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYg
dXNlclNoZWV0KTsKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgdm9pZCBh
ZGREaXNwbGF5Tm9uZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBzZWxlY3RvciwgdWludDMyX3Qgc2VsZWN0b3JJRCk7CisgICAgdm9pZCBtYXliZUFkZENv
bnRlbnRFeHRlbnNpb25TaGVldChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFN0eWxlU2hlZXRD
b250ZW50cyYpOworI2VuZGlmCisKKyAgICBlbnVtIFVwZGF0ZUZsYWcgeyBOb1VwZGF0ZSA9IDAs
IE9wdGltaXplZFVwZGF0ZSwgRnVsbFVwZGF0ZSB9OworCisgICAgVXBkYXRlRmxhZyBwZW5kaW5n
VXBkYXRlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ1VwZGF0ZVR5cGU7IH0KKyAgICB2
b2lkIHNldFBlbmRpbmdVcGRhdGVUeXBlKFVwZGF0ZUZsYWcgdXBkYXRlVHlwZSkKKyAgICB7Cisg
ICAgICAgIGlmICh1cGRhdGVUeXBlID4gbV9wZW5kaW5nVXBkYXRlVHlwZSkKKyAgICAgICAgICAg
IG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSB1cGRhdGVUeXBlOworICAgIH0KKworICAgIHZvaWQgZmx1
c2hQZW5kaW5nVXBkYXRlcygpCisgICAgeworICAgICAgICBpZiAobV9wZW5kaW5nVXBkYXRlVHlw
ZSAhPSBOb1VwZGF0ZSkKKyAgICAgICAgICAgIHVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKG1fcGVu
ZGluZ1VwZGF0ZVR5cGUpOworICAgIH0KKworICAgIGJvb2wgdXBkYXRlQWN0aXZlU3R5bGVTaGVl
dHMoVXBkYXRlRmxhZyk7CisKKyAgICBTdHJpbmcgcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUo
KSBjb25zdCB7IHJldHVybiBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lOyB9CisgICAgU3Ry
aW5nIHNlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGVk
U3R5bGVzaGVldFNldE5hbWU7IH0KKyAgICB2b2lkIHNldFByZWZlcnJlZFN0eWxlc2hlZXRTZXRO
YW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lID0g
bmFtZTsgfQorICAgIHZvaWQgc2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZShjb25zdCBTdHJp
bmcmIG5hbWUpIHsgbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lID0gbmFtZTsgfQorCisgICAg
dm9pZCBhZGRQZW5kaW5nU2hlZXQoKSB7IG1fcGVuZGluZ1N0eWxlc2hlZXRzKys7IH0KKyAgICBl
bnVtIFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUgeworICAgICAgICBSZW1vdmVQ
ZW5kaW5nU2hlZXROb3RpZnlJbW1lZGlhdGVseSwKKyAgICAgICAgUmVtb3ZlUGVuZGluZ1NoZWV0
Tm90aWZ5TGF0ZXIKKyAgICB9OworICAgIHZvaWQgcmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92ZVBl
bmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUgPSBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlJbW1l
ZGlhdGVseSk7CisKKyAgICBib29sIGhhc1BlbmRpbmdTaGVldHMoKSBjb25zdCB7IHJldHVybiBt
X3BlbmRpbmdTdHlsZXNoZWV0cyA+IDA7IH0KKworICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVz
KCkgY29uc3QgeyByZXR1cm4gbV91c2VzRmlyc3RMaW5lUnVsZXM7IH0KKyAgICBib29sIHVzZXNG
aXJzdExldHRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRmlyc3RMZXR0ZXJSdWxlczsg
fQorICAgIGJvb2wgdXNlc1JlbVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzUmVtVW5pdHM7
IH0KKyAgICB2b2lkIHNldFVzZXNSZW1Vbml0KGJvb2wgYikgeyBtX3VzZXNSZW1Vbml0cyA9IGI7
IH0KKyAgICBib29sIHVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKSB7IHJldHVybiBtX3VzZXNT
dHlsZUJhc2VkRWRpdGFiaWxpdHk7IH0KKyAgICB2b2lkIHNldFVzZXNTdHlsZUJhc2VkRWRpdGFi
aWxpdHkoYm9vbCBiKSB7IG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSA9IGI7IH0KKworICAg
IHZvaWQgY29tYmluZUNTU0ZlYXR1cmVGbGFncygpOworICAgIHZvaWQgcmVzZXRDU1NGZWF0dXJl
RmxhZ3MoKTsKKworICAgIGJvb2wgYWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBDU1NT
dHlsZVNoZWV0KikgY29uc3Q7CisKKyAgICB2b2lkIGRldGFjaEZyb21Eb2N1bWVudCgpOworCitw
cml2YXRlOgorICAgIHZvaWQgY29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8
U3R5bGVTaGVldD4+Jik7CisgICAgZW51bSBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSB7CisgICAg
ICAgIFJlY29uc3RydWN0LAorICAgICAgICBSZXNldCwKKyAgICAgICAgQWRkaXRpdmUKKyAgICB9
OworICAgIHZvaWQgYW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UoVXBkYXRlRmxhZywgY29uc3QgVmVj
dG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIG5ld1N0eWxlc2hlZXRzLCBTdHlsZVJlc29sdmVy
VXBkYXRlVHlwZSYsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKTsKKworICAgIHZvaWQg
c3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lckZpcmVkKCk7CisKKyAgICBEb2N1bWVudCYgbV9kb2N1
bWVudDsKKworICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+IG1fc3R5bGVTaGVldHNGb3JT
dHlsZVNoZWV0TGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2FjdGl2
ZUF1dGhvclN0eWxlU2hlZXRzOworCisgICAgLy8gVGhpcyBpcyBhIG1pcnJvciBvZiBtX2FjdGl2
ZUF1dGhvclN0eWxlU2hlZXRzIHRoYXQgZ2V0cyBwb3B1bGF0ZWQgb24gZGVtYW5kIGZvciBhY3Rp
dmVTdHlsZVNoZWV0c0NvbnRhaW5zKCkuCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8SGFz
aFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+IG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRM
aXN0Rm9yRmFzdExvb2t1cDsKKworICAgIC8vIFRyYWNrIHRoZSBudW1iZXIgb2YgY3VycmVudGx5
IGxvYWRpbmcgdG9wLWxldmVsIHN0eWxlc2hlZXRzIG5lZWRlZCBmb3IgcmVuZGVyaW5nLgorICAg
IC8vIFNoZWV0cyBsb2FkZWQgdXNpbmcgdGhlIEBpbXBvcnQgZGlyZWN0aXZlIGFyZSBub3QgaW5j
bHVkZWQgaW4gdGhpcyBjb3VudC4KKyAgICAvLyBXZSB1c2UgdGhpcyBjb3VudCBvZiBwZW5kaW5n
IHNoZWV0cyB0byBkZXRlY3Qgd2hlbiB3ZSBjYW4gYmVnaW4gYXR0YWNoaW5nCisgICAgLy8gZWxl
bWVudHMgYW5kIHdoZW4gaXQgaXMgc2FmZSB0byBleGVjdXRlIHNjcmlwdHMuCisgICAgaW50IG1f
cGVuZGluZ1N0eWxlc2hlZXRzOworCisgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fcGFnZVVz
ZXJTaGVldDsKKworICAgIG11dGFibGUgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9p
bmplY3RlZFVzZXJTdHlsZVNoZWV0czsKKyAgICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8Q1NTU3R5
bGVTaGVldD4+IG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0czsKKyAgICBtdXRhYmxlIGJvb2wg
bV9pbmplY3RlZFN0eWxlU2hlZXRDYWNoZVZhbGlkOworCisgICAgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4gbV91c2VyU3R5bGVTaGVldHM7CisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0Pj4gbV9hdXRob3JTdHlsZVNoZWV0czsKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9jb250
ZW50RXh0ZW5zaW9uU2hlZXRzOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8Q29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0Pj4gbV9jb250ZW50RXh0ZW5zaW9u
U2VsZWN0b3JTaGVldHM7CisjZW5kaWYKKworICAgIGJvb2wgbV9oYWRBY3RpdmVMb2FkaW5nU3R5
bGVzaGVldDsKKyAgICBVcGRhdGVGbGFnIG1fcGVuZGluZ1VwZGF0ZVR5cGU7CisKKyAgICB0eXBl
ZGVmIExpc3RIYXNoU2V0PE5vZGUqPiBTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQ7Cisg
ICAgU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5v
ZGVzOworCisgICAgU3RyaW5nIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWU7CisgICAgU3Ry
aW5nIG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZTsKKworICAgIGJvb2wgbV91c2VzRmlyc3RM
aW5lUnVsZXM7CisgICAgYm9vbCBtX3VzZXNGaXJzdExldHRlclJ1bGVzOworICAgIGJvb2wgbV91
c2VzUmVtVW5pdHM7CisgICAgYm9vbCBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHk7CisKKyAg
ICBUaW1lciBtX3N0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXI7Cit9OworCit9CisKKyNlbmRpZgor
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMuaAkod29ya2luZyBjb3B5
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCwgMjAxMi0yMDEzLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0yNSw4ICsyNSw4IEBACiAgKgogICovCiAKLSNpZm5k
ZWYgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbl9oCi0jZGVmaW5lIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb25faAorI2lmbmRlZiBBdXRob3JTdHlsZVNoZWV0c19oCisjZGVmaW5lIEF1
dGhvclN0eWxlU2hlZXRzX2gKIAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8bWVtb3J5
PgpAQCAtMzcsMTAgKzM3LDYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQot
I2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmgiCi0jZW5kaWYKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NTdHlsZVNoZWV0OwpAQCAtNDksNDAgKzQ1LDIxIEBA
IGNsYXNzIE5vZGU7CiBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRz
OwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CitjbGFzcyBUcmVlU2NvcGU7CiAKLWNsYXNzIERvY3Vt
ZW50U3R5bGVTaGVldENvbGxlY3Rpb24geworY2xhc3MgQXV0aG9yU3R5bGVTaGVldHMgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24oRG9jdW1lbnQmKTsKKyAgICBleHBsaWNpdCBBdXRob3JTdHls
ZVNoZWV0cyhUcmVlU2NvcGUmKTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVl
dD4+JiBzdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0OyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+PiYgYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBt
X2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzOyB9CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4mIGFjdGl2ZVN0eWxlU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVT
dHlsZVNoZWV0czsgfQogCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mIHN0
eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRz
Rm9yU3R5bGVTaGVldExpc3Q7IH0KICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+PiBhY3RpdmVTdHlsZVNoZWV0c0Zvckluc3BlY3RvcigpIGNvbnN0OwogCi0gICAgQ1NTU3R5
bGVTaGVldCogcGFnZVVzZXJTaGVldCgpOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5
bGVTaGVldD4+JiBkb2N1bWVudFVzZXJTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
clN0eWxlU2hlZXRzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4m
IGRvY3VtZW50QXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX2F1dGhvclN0eWxl
U2hlZXRzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGluamVj
dGVkVXNlclN0eWxlU2hlZXRzKCkgY29uc3Q7Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4mIGluamVjdGVkQXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdDsKLQogICAgIHZv
aWQgYWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYsIGJvb2wgY3JlYXRlZEJ5UGFyc2Vy
KTsKICAgICB2b2lkIHJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmKTsKIAotICAg
IHZvaWQgY2xlYXJQYWdlVXNlclNoZWV0KCk7Ci0gICAgdm9pZCB1cGRhdGVQYWdlVXNlclNoZWV0
KCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKLSAgICB2
b2lkIHVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFkZEF1dGhvclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgYXV0
aG9yU2hlZXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlclNoZWV0KFJlZjxTdHls
ZVNoZWV0Q29udGVudHM+JiYgdXNlclNoZWV0KTsKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0gICAgdm9pZCBhZGREaXNwbGF5Tm9uZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgdWludDMyX3Qgc2VsZWN0b3JJRCk7Ci0g
ICAgdm9pZCBtYXliZUFkZENvbnRlbnRFeHRlbnNpb25TaGVldChjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXIsIFN0eWxlU2hlZXRDb250ZW50cyYpOwotI2VuZGlmCi0KICAgICBlbnVtIFVwZGF0ZUZs
YWcgeyBOb1VwZGF0ZSA9IDAsIE9wdGltaXplZFVwZGF0ZSwgRnVsbFVwZGF0ZSB9OwogCiAgICAg
VXBkYXRlRmxhZyBwZW5kaW5nVXBkYXRlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ1Vw
ZGF0ZVR5cGU7IH0KQEAgLTEwNSwxNCArODIsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UHJl
ZmVycmVkU3R5bGVzaGVldFNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fcHJlZmVycmVk
U3R5bGVzaGVldFNldE5hbWUgPSBuYW1lOyB9CiAgICAgdm9pZCBzZXRTZWxlY3RlZFN0eWxlc2hl
ZXRTZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX3NlbGVjdGVkU3R5bGVzaGVldFNldE5h
bWUgPSBuYW1lOyB9CiAKLSAgICB2b2lkIGFkZFBlbmRpbmdTaGVldCgpIHsgbV9wZW5kaW5nU3R5
bGVzaGVldHMrKzsgfQorICAgIHZvaWQgYWRkUGVuZGluZ1NoZWV0KCkgeyBtX3BlbmRpbmdTdHls
ZVNoZWV0Q291bnQrKzsgfQogICAgIGVudW0gUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9u
VHlwZSB7CiAgICAgICAgIFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5LAogICAg
ICAgICBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlMYXRlcgogICAgIH07CiAgICAgdm9pZCByZW1v
dmVQZW5kaW5nU2hlZXQoUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9uVHlwZSA9IFJlbW92
ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5KTsKIAotICAgIGJvb2wgaGFzUGVuZGluZ1No
ZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ1N0eWxlc2hlZXRzID4gMDsgfQorICAgIGJv
b2wgaGFzUGVuZGluZ1NoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ1N0eWxlU2hlZXRD
b3VudCA+IDA7IH0KIAogICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyByZXR1
cm4gbV91c2VzRmlyc3RMaW5lUnVsZXM7IH0KICAgICBib29sIHVzZXNGaXJzdExldHRlclJ1bGVz
KCkgY29uc3QgeyByZXR1cm4gbV91c2VzRmlyc3RMZXR0ZXJSdWxlczsgfQpAQCAtMTIxLDEzICs5
OCw4IEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKSB7IHJl
dHVybiBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHk7IH0KICAgICB2b2lkIHNldFVzZXNTdHls
ZUJhc2VkRWRpdGFiaWxpdHkoYm9vbCBiKSB7IG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSA9
IGI7IH0KIAotICAgIHZvaWQgY29tYmluZUNTU0ZlYXR1cmVGbGFncygpOwotICAgIHZvaWQgcmVz
ZXRDU1NGZWF0dXJlRmxhZ3MoKTsKLQogICAgIGJvb2wgYWN0aXZlU3R5bGVTaGVldHNDb250YWlu
cyhjb25zdCBDU1NTdHlsZVNoZWV0KikgY29uc3Q7CiAKLSAgICB2b2lkIGRldGFjaEZyb21Eb2N1
bWVudCgpOwotCiBwcml2YXRlOgogICAgIHZvaWQgY29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZl
Y3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+Jik7CiAgICAgZW51bSBTdHlsZVJlc29sdmVyVXBkYXRl
VHlwZSB7CkBAIC0xMzcsMTIgKzEwOSwxMCBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdm9pZCBh
bmFseXplU3R5bGVTaGVldENoYW5nZShVcGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlJiwg
Ym9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpOwogCi0gICAgdm9pZCBzdHlsZVJlc29sdmVy
Q2hhbmdlZFRpbWVyRmlyZWQoKTsKLQogICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogCiAgICAg
VmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4gbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0
OwotICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG1fYWN0aXZlQXV0aG9yU3R5bGVT
aGVldHM7CisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9hY3RpdmVTdHlsZVNo
ZWV0czsKIAogICAgIC8vIFRoaXMgaXMgYSBtaXJyb3Igb2YgbV9hY3RpdmVBdXRob3JTdHlsZVNo
ZWV0cyB0aGF0IGdldHMgcG9wdWxhdGVkIG9uIGRlbWFuZCBmb3IgYWN0aXZlU3R5bGVTaGVldHND
b250YWlucygpLgogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8Y29uc3QgQ1NT
U3R5bGVTaGVldCo+PiBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29r
dXA7CkBAIC0xNTEsMjQgKzEyMSwxMCBAQCBwcml2YXRlOgogICAgIC8vIFNoZWV0cyBsb2FkZWQg
dXNpbmcgdGhlIEBpbXBvcnQgZGlyZWN0aXZlIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBjb3Vu
dC4KICAgICAvLyBXZSB1c2UgdGhpcyBjb3VudCBvZiBwZW5kaW5nIHNoZWV0cyB0byBkZXRlY3Qg
d2hlbiB3ZSBjYW4gYmVnaW4gYXR0YWNoaW5nCiAgICAgLy8gZWxlbWVudHMgYW5kIHdoZW4gaXQg
aXMgc2FmZSB0byBleGVjdXRlIHNjcmlwdHMuCi0gICAgaW50IG1fcGVuZGluZ1N0eWxlc2hlZXRz
OwotCi0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fcGFnZVVzZXJTaGVldDsKLQotICAgIG11
dGFibGUgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9pbmplY3RlZFVzZXJTdHlsZVNo
ZWV0czsKLSAgICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG1faW5qZWN0
ZWRBdXRob3JTdHlsZVNoZWV0czsKLSAgICBtdXRhYmxlIGJvb2wgbV9pbmplY3RlZFN0eWxlU2hl
ZXRDYWNoZVZhbGlkOworICAgIGludCBtX3BlbmRpbmdTdHlsZVNoZWV0Q291bnQgeyAwIH07CiAK
LSAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX3VzZXJTdHlsZVNoZWV0czsKLSAg
ICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2F1dGhvclN0eWxlU2hlZXRzOwotCi0j
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PENTU1N0eWxlU2hlZXQ+PiBtX2NvbnRlbnRFeHRlbnNpb25TaGVldHM7Ci0gICAgSGFzaE1hcDxT
dHJpbmcsIFJlZlB0cjxDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvblN0eWxlU2hl
ZXQ+PiBtX2NvbnRlbnRFeHRlbnNpb25TZWxlY3RvclNoZWV0czsKLSNlbmRpZgotCi0gICAgYm9v
bCBtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0OwotICAgIFVwZGF0ZUZsYWcgbV9wZW5kaW5n
VXBkYXRlVHlwZTsKKyAgICBib29sIG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgeyBmYWxz
ZSB9OworICAgIFVwZGF0ZUZsYWcgbV9wZW5kaW5nVXBkYXRlVHlwZSB7IE5vVXBkYXRlIH07CiAK
ICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PE5vZGUqPiBTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhh
c2hTZXQ7CiAgICAgU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0IG1fc3R5bGVTaGVldENh
bmRpZGF0ZU5vZGVzOwpAQCAtMTc2LDEyICsxMzIsMTAgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZTsKICAgICBTdHJpbmcgbV9zZWxlY3RlZFN0eWxl
c2hlZXRTZXROYW1lOwogCi0gICAgYm9vbCBtX3VzZXNGaXJzdExpbmVSdWxlczsKLSAgICBib29s
IG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXM7Ci0gICAgYm9vbCBtX3VzZXNSZW1Vbml0czsKLSAgICBi
b29sIG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eTsKLQotICAgIFRpbWVyIG1fc3R5bGVSZXNv
bHZlckNoYW5nZWRUaW1lcjsKKyAgICBib29sIG1fdXNlc0ZpcnN0TGluZVJ1bGVzIHsgZmFsc2Ug
fTsKKyAgICBib29sIG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXMgeyBmYWxzZSB9OworICAgIGJvb2wg
bV91c2VzUmVtVW5pdHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV91c2VzU3R5bGVCYXNlZEVkaXRh
YmlsaXR5IHsgZmFsc2UgfTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIK
ICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQXR0ci5oIgorI2lu
Y2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCiAj
aW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oIgpAQCAtNTcsNiArNTgsNyBAQAogI2luY2x1ZGUgIkVudGl0eVJlZmVyZW5jZS5oIgogI2lu
Y2x1ZGUgIkV2ZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1
ZGUgIkV4dGVuc2lvblN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRm9udExvYWRlci5oIgogI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCkBA
IC00MzksNyArNDQxLDggQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3Qg
VQogICAgICwgbV9kb21UcmVlVmVyc2lvbigrK3NfZ2xvYmFsVHJlZVZlcnNpb24pCiAgICAgLCBt
X2xpc3RlbmVyVHlwZXMoMCkKICAgICAsIG1fbXV0YXRpb25PYnNlcnZlclR5cGVzKDApCi0gICAg
LCBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uKCp0aGlzKQorICAgICwgbV9hdXRob3JTdHlsZVNoZWV0
cyhzdGQ6Om1ha2VfdW5pcXVlPEF1dGhvclN0eWxlU2hlZXRzPigqdGhpcykpCisgICAgLCBtX2V4
dGVuc2lvblN0eWxlU2hlZXRzKHN0ZDo6bWFrZV91bmlxdWU8RXh0ZW5zaW9uU3R5bGVTaGVldHM+
KCp0aGlzKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdGF0ZShzdGQ6Om1ha2VfdW5pcXVlPFZpc2l0
ZWRMaW5rU3RhdGU+KCp0aGlzKSkKICAgICAsIG1fdmlzdWFsbHlPcmRlcmVkKGZhbHNlKQogICAg
ICwgbV9yZWFkeVN0YXRlKENvbXBsZXRlKQpAQCAtNjI0LDcgKzYyNyw3IEBAIERvY3VtZW50Ojp+
RG9jdW1lbnQoKQogCiAgICAgaWYgKG1fZWxlbWVudFNoZWV0KQogICAgICAgICBtX2VsZW1lbnRT
aGVldC0+ZGV0YWNoRnJvbURvY3VtZW50KCk7Ci0gICAgbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi5k
ZXRhY2hGcm9tRG9jdW1lbnQoKTsKKyAgICBleHRlbnNpb25TdHlsZVNoZWV0cygpLmRldGFjaEZy
b21Eb2N1bWVudCgpOwogCiAgICAgY2xlYXJTdHlsZVJlc29sdmVyKCk7IC8vIFdlIG5lZWQgdG8g
ZGVzdHJveSBDU1NGb250U2VsZWN0b3IgYmVmb3JlIGRlc3Ryb3lpbmcgbV9jYWNoZWRSZXNvdXJj
ZUxvYWRlci4KIApAQCAtNzkxLDggKzc5NCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnNldENvbXBhdGli
aWxpdHlNb2RlKERvY3UKIAogICAgIGlmIChpblF1aXJrc01vZGUoKSAhPSB3YXNJblF1aXJrc01v
ZGUpIHsKICAgICAgICAgLy8gQWxsIHVzZXIgc3R5bGVzaGVldHMgaGF2ZSB0byByZXBhcnNlIHVz
aW5nIHRoZSBkaWZmZXJlbnQgbW9kZS4KLSAgICAgICAgbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi5j
bGVhclBhZ2VVc2VyU2hlZXQoKTsKLSAgICAgICAgbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi5pbnZh
bGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKKyAgICAgICAgZXh0ZW5zaW9uU3R5bGVT
aGVldHMoKS5jbGVhclBhZ2VVc2VyU2hlZXQoKTsKKyAgICAgICAgZXh0ZW5zaW9uU3R5bGVTaGVl
dHMoKS5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKICAgICB9CiB9CiAKQEAg
LTE4MjMsNyArMTgyNiw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlOjpDaGFu
Z2UKICAgICAvLyByZS1hdHRhY2hpbmcgb3VyIGNvbnRhaW5pbmcgaWZyYW1lLCB3aGljaCB3aGVu
IGFza2VkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjppc1VSTEFsbG93ZWQKICAgICAvLyBoaXRzIGEg
bnVsbC1kZXJlZmVyZW5jZSBkdWUgdG8gc2VjdXJpdHkgY29kZSBhbHdheXMgYXNzdW1pbmcgdGhl
IGRvY3VtZW50IGhhcyBhIFNlY3VyaXR5T3JpZ2luLgogCi0gICAgbV9zdHlsZVNoZWV0Q29sbGVj
dGlvbi5mbHVzaFBlbmRpbmdVcGRhdGVzKCk7CisgICAgYXV0aG9yU3R5bGVTaGVldHMoKS5mbHVz
aFBlbmRpbmdVcGRhdGVzKCk7CiAKICAgICBmcmFtZVZpZXcud2lsbFJlY2FsY1N0eWxlKCk7CiAK
QEAgLTE4MzEsNyArMTgzNCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlOjpD
aGFuZ2UKIAogICAgIC8vIEZJWE1FOiBXZSBuZXZlciByZXNldCB0aGlzIGZsYWdzLgogICAgIGlm
IChtX2VsZW1lbnRTaGVldCAmJiBtX2VsZW1lbnRTaGVldC0+Y29udGVudHMoKS51c2VzUmVtVW5p
dHMoKSkKLSAgICAgICAgbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi5zZXRVc2VzUmVtVW5pdCh0cnVl
KTsKKyAgICAgICAgYXV0aG9yU3R5bGVTaGVldHMoKS5zZXRVc2VzUmVtVW5pdCh0cnVlKTsKICAg
ICAvLyBXZSBkb24ndCBjYWxsIHNldFVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkgaGVyZSBiZWNh
dXNlIHRoZSB3aG9sZSBwb2ludCBvZiB0aGUgZmxhZyBpcyB0byBhdm9pZCBzdHlsZSByZWNhbGMu
CiAgICAgLy8gaS5lLiB1cGRhdGluZyB0aGUgZmxhZyBoZXJlIHdvdWxkIGJlIHRvbyBsYXRlLgog
CkBAIC0xODU4LDEwICsxODYxLDYgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGUoU3R5bGU6
OkNoYW5nZQogICAgICAgICB1bnNjaGVkdWxlU3R5bGVSZWNhbGMoKTsKIAogICAgICAgICBtX2lu
U3R5bGVSZWNhbGMgPSBmYWxzZTsKLQotICAgICAgICAvLyBQc2V1ZG8gZWxlbWVudCByZW1vdmFs
IGFuZCBzaW1pbGFyIG1heSBvbmx5IHdvcmsgd2l0aCB0aGVzZSBmbGFncyBzdGlsbCBzZXQuIFJl
c2V0IHRoZW0gYWZ0ZXIgdGhlIHN0eWxlIHJlY2FsYy4KLSAgICAgICAgaWYgKG1fc3R5bGVSZXNv
bHZlcikKLSAgICAgICAgICAgIG1fc3R5bGVTaGVldENvbGxlY3Rpb24ucmVzZXRDU1NGZWF0dXJl
RmxhZ3MoKTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSB3YW50ZWQgdG8gY2FsbCBpbXBsaWNpdENs
b3NlKCkgZHVyaW5nIHJlY2FsY1N0eWxlLCBkbyBzbyBub3cgdGhhdCB3ZSdyZSBmaW5pc2hlZC4K
QEAgLTIxMzAsNyArMjEyOSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmNyZWF0ZVN0eWxlUmVzb2x2ZXIo
KQogICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSB0aGlzLT5zZXR0aW5ncygpKQogICAgICAg
ICBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSBzZXR0aW5ncy0+YXV0aG9yQW5kVXNlclN0eWxl
c0VuYWJsZWQoKTsKICAgICBtX3N0eWxlUmVzb2x2ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFN0eWxl
UmVzb2x2ZXI+KCp0aGlzLCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpOwotICAgIG1fc3R5bGVT
aGVldENvbGxlY3Rpb24uY29tYmluZUNTU0ZlYXR1cmVGbGFncygpOworICAgIG1fc3R5bGVSZXNv
bHZlci0+YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoMCwgYXV0aG9yU3R5bGVTaGVldHMoKS5hY3Rp
dmVTdHlsZVNoZWV0cygpKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6Zm9udHNOZWVkVXBkYXRlKEZv
bnRTZWxlY3RvciYpCkBAIC0zMDkwLDkgKzMwODksOSBAQCBib29sIERvY3VtZW50Ojp1c2VzU3R5
bGVCYXNlZEVkaXRhYmlsaXR5CiAgICAgQVNTRVJUKCFtX3JlbmRlclZpZXcgfHwgIW1fcmVuZGVy
Vmlldy0+ZnJhbWVWaWV3KCkuaXNQYWludGluZygpKTsKICAgICBBU1NFUlQoIW1faW5TdHlsZVJl
Y2FsYyk7CiAKLSAgICBhdXRvJiBjb2xsZWN0aW9uID0gZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29s
bGVjdGlvbigpOwotICAgIGNvbGxlY3Rpb24uZmx1c2hQZW5kaW5nVXBkYXRlcygpOwotICAgIHJl
dHVybiBjb2xsZWN0aW9uLnVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKTsKKyAgICBhdXRvJiBh
dXRob3JTaGVldHMgPSBjb25zdF9jYXN0PEF1dGhvclN0eWxlU2hlZXRzJj4oYXV0aG9yU3R5bGVT
aGVldHMoKSk7CisgICAgYXV0aG9yU2hlZXRzLmZsdXNoUGVuZGluZ1VwZGF0ZXMoKTsKKyAgICBy
ZXR1cm4gYXV0aG9yU2hlZXRzLnVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKTsKIH0KIAogdm9p
ZCBEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zdCBTdHJpbmcmIGVxdWl2LCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQpCkBAIC0zMTMyLDggKzMxMzEsOCBAQCB2b2lkIERvY3VtZW50Ojpwcm9j
ZXNzSHR0cEVxdWl2KGNvbnN0IFN0CiAgICAgICAgIC8vIEZvciBtb3JlIGluZm8sIHNlZSB0aGUg
dGVzdCBhdDoKICAgICAgICAgLy8gaHR0cDovL3d3dy5oaXhpZS5jaC90ZXN0cy9ldmlsL2Nzcy9p
bXBvcnQvbWFpbi9wcmVmZXJyZWQuaHRtbAogICAgICAgICAvLyAtZHdoCi0gICAgICAgIG1fc3R5
bGVTaGVldENvbGxlY3Rpb24uc2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZShjb250ZW50KTsK
LSAgICAgICAgbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi5zZXRQcmVmZXJyZWRTdHlsZXNoZWV0U2V0
TmFtZShjb250ZW50KTsKKyAgICAgICAgYXV0aG9yU3R5bGVTaGVldHMoKS5zZXRTZWxlY3RlZFN0
eWxlc2hlZXRTZXROYW1lKGNvbnRlbnQpOworICAgICAgICBhdXRob3JTdHlsZVNoZWV0cygpLnNl
dFByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKGNvbnRlbnQpOwogICAgICAgICBzdHlsZVJlc29s
dmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTM0ODgs
MTcgKzM0ODcsMTcgQEAgU3R5bGVTaGVldExpc3QmIERvY3VtZW50OjpzdHlsZVNoZWV0cygpCiAK
IFN0cmluZyBEb2N1bWVudDo6cHJlZmVycmVkU3R5bGVzaGVldFNldCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fc3R5bGVTaGVldENvbGxlY3Rpb24ucHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUo
KTsKKyAgICByZXR1cm4gYXV0aG9yU3R5bGVTaGVldHMoKS5wcmVmZXJyZWRTdHlsZXNoZWV0U2V0
TmFtZSgpOwogfQogCiBTdHJpbmcgRG9jdW1lbnQ6OnNlbGVjdGVkU3R5bGVzaGVldFNldCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fc3R5bGVTaGVldENvbGxlY3Rpb24uc2VsZWN0ZWRTdHlsZXNo
ZWV0U2V0TmFtZSgpOworICAgIHJldHVybiBhdXRob3JTdHlsZVNoZWV0cygpLnNlbGVjdGVkU3R5
bGVzaGVldFNldE5hbWUoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0U2VsZWN0ZWRTdHlsZXNo
ZWV0U2V0KGNvbnN0IFN0cmluZyYgYVN0cmluZykKIHsKLSAgICBtX3N0eWxlU2hlZXRDb2xsZWN0
aW9uLnNldFNlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUoYVN0cmluZyk7CisgICAgYXV0aG9yU3R5
bGVTaGVldHMoKS5zZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lKGFTdHJpbmcpOwogICAgIHN0
eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwogfQogCkBAIC0zNTE3LDcgKzM1
MTYsNyBAQCB2b2lkIERvY3VtZW50OjpzY2hlZHVsZU9wdGltaXplZFN0eWxlU2hlCiB7CiAgICAg
aWYgKG1fb3B0aW1pemVkU3R5bGVTaGVldFVwZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLnNldFBlbmRpbmdVcGRhdGVUeXBl
KERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246Ok9wdGltaXplZFVwZGF0ZSk7CisgICAgYXV0
aG9yU3R5bGVTaGVldHMoKS5zZXRQZW5kaW5nVXBkYXRlVHlwZShBdXRob3JTdHlsZVNoZWV0czo6
T3B0aW1pemVkVXBkYXRlKTsKICAgICBtX29wdGltaXplZFN0eWxlU2hlZXRVcGRhdGVUaW1lci5z
dGFydE9uZVNob3QoMCk7CiB9CiAKQEAgLTM2MDQsMTAgKzM2MDMsMTAgQEAgdm9pZCBEb2N1bWVu
dDo6c3R5bGVSZXNvbHZlckNoYW5nZWQoU3R5bAogICAgICAgICBwcmludGYoIkJlZ2lubmluZyB1
cGRhdGUgb2Ygc3R5bGUgc2VsZWN0b3IgYXQgdGltZSAlbGxkLlxuIiwgZWxhcHNlZFRpbWUoKS5j
b3VudCgpKTsKICNlbmRpZgogCi0gICAgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6VXBk
YXRlRmxhZyBzdHlsZVNoZWV0VXBkYXRlID0gKHVwZGF0ZUZsYWcgPT0gUmVjYWxjU3R5bGVJZk5l
ZWRlZCB8fCB1cGRhdGVGbGFnID09IERlZmVyUmVjYWxjU3R5bGVJZk5lZWRlZCkKLSAgICAgICAg
PyBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpPcHRpbWl6ZWRVcGRhdGUKLSAgICAgICAg
OiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpGdWxsVXBkYXRlOwotICAgIGJvb2wgc3R5
bGVzaGVldENoYW5nZVJlcXVpcmVzU3R5bGVSZWNhbGMgPSBtX3N0eWxlU2hlZXRDb2xsZWN0aW9u
LnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKHN0eWxlU2hlZXRVcGRhdGUpOworICAgIGF1dG8gc3R5
bGVTaGVldFVwZGF0ZSA9ICh1cGRhdGVGbGFnID09IFJlY2FsY1N0eWxlSWZOZWVkZWQgfHwgdXBk
YXRlRmxhZyA9PSBEZWZlclJlY2FsY1N0eWxlSWZOZWVkZWQpCisgICAgICAgID8gQXV0aG9yU3R5
bGVTaGVldHM6Ok9wdGltaXplZFVwZGF0ZQorICAgICAgICA6IEF1dGhvclN0eWxlU2hlZXRzOjpG
dWxsVXBkYXRlOworICAgIGJvb2wgc3R5bGVzaGVldENoYW5nZVJlcXVpcmVzU3R5bGVSZWNhbGMg
PSBhdXRob3JTdHlsZVNoZWV0cygpLnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKHN0eWxlU2hlZXRV
cGRhdGUpOwogCiAgICAgaWYgKHVwZGF0ZUZsYWcgPT0gRGVmZXJSZWNhbGNTdHlsZSkgewogICAg
ICAgICBzY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjKCk7CkBAIC02NTAyLDcgKzY1MDEsNyBAQCB2
b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvCiAKIGJvb2wgRG9jdW1lbnQ6
OmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3N0eWxlU2hl
ZXRDb2xsZWN0aW9uLmhhc1BlbmRpbmdTaGVldHMoKSB8fCBtX2lnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0czsKKyAgICByZXR1cm4gIWF1dGhvclN0eWxlU2hlZXRzKCkuaGFzUGVuZGluZ1NoZWV0cygp
IHx8IG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzOwogfQogCiBMb2NhbGUmIERvY3VtZW50Ojpn
ZXRDYWNoZWRMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkocmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5
OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYg
QWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCwgMjAx
Mi0yMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAo
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0zMiw3ICszMiw2IEBA
CiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50VGltaW5nLmgiCiAjaW5jbHVkZSAiRm9jdXNE
aXJlY3Rpb24uaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKQEAgLTcwLDYgKzY5LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBWE9iamVjdENhY2hlOwogY2xhc3MgQXR0cjsK
K2NsYXNzIEF1dGhvclN0eWxlU2hlZXRzOwogY2xhc3MgQ0RBVEFTZWN0aW9uOwogY2xhc3MgQ1NT
Rm9udFNlbGVjdG9yOwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKQEAgLTk3LDYgKzk3LDcg
QEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEVudGl0eVJlZmVyZW5jZTsKIGNsYXNzIEV2ZW50Owog
Y2xhc3MgRXZlbnRMaXN0ZW5lcjsKK2NsYXNzIEV4dGVuc2lvblN0eWxlU2hlZXRzOwogY2xhc3Mg
RmxvYXRSZWN0OwogY2xhc3MgRmxvYXRRdWFkOwogY2xhc3MgRm9ybUNvbnRyb2xsZXI7CkBAIC01
MDMsNyArNTA0LDEwIEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGlzIGEgRE9NIGZ1bmN0aW9uLgog
ICAgIFN0eWxlU2hlZXRMaXN0JiBzdHlsZVNoZWV0cygpOwogCi0gICAgRG9jdW1lbnRTdHlsZVNo
ZWV0Q29sbGVjdGlvbiYgc3R5bGVTaGVldENvbGxlY3Rpb24oKSB7IHJldHVybiBtX3N0eWxlU2hl
ZXRDb2xsZWN0aW9uOyB9CisgICAgQXV0aG9yU3R5bGVTaGVldHMmIGF1dGhvclN0eWxlU2hlZXRz
KCkgeyByZXR1cm4gKm1fYXV0aG9yU3R5bGVTaGVldHM7IH0KKyAgICBjb25zdCBBdXRob3JTdHls
ZVNoZWV0cyYgYXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiAqbV9hdXRob3JTdHls
ZVNoZWV0czsgfQorICAgIEV4dGVuc2lvblN0eWxlU2hlZXRzJiBleHRlbnNpb25TdHlsZVNoZWV0
cygpIHsgcmV0dXJuICptX2V4dGVuc2lvblN0eWxlU2hlZXRzOyB9CisgICAgY29uc3QgRXh0ZW5z
aW9uU3R5bGVTaGVldHMmIGV4dGVuc2lvblN0eWxlU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gKm1f
ZXh0ZW5zaW9uU3R5bGVTaGVldHM7IH0KIAogICAgIGJvb2wgZ290b0FuY2hvck5lZWRlZEFmdGVy
U3R5bGVzaGVldHNMb2FkKCkgeyByZXR1cm4gbV9nb3RvQW5jaG9yTmVlZGVkQWZ0ZXJTdHlsZXNo
ZWV0c0xvYWQ7IH0KICAgICB2b2lkIHNldEdvdG9BbmNob3JOZWVkZWRBZnRlclN0eWxlc2hlZXRz
TG9hZChib29sIGIpIHsgbV9nb3RvQW5jaG9yTmVlZGVkQWZ0ZXJTdHlsZXNoZWV0c0xvYWQgPSBi
OyB9CkBAIC0xNDU5LDcgKzE0NjMsOCBAQCBwcml2YXRlOgogCiAgICAgTXV0YXRpb25PYnNlcnZl
ck9wdGlvbnMgbV9tdXRhdGlvbk9ic2VydmVyVHlwZXM7CiAKLSAgICBEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uIG1fc3R5bGVTaGVldENvbGxlY3Rpb247CisgICAgc3RkOjp1bmlxdWVfcHRy
PEF1dGhvclN0eWxlU2hlZXRzPiBtX2F1dGhvclN0eWxlU2hlZXRzOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxFeHRlbnNpb25TdHlsZVNoZWV0cz4gbV9leHRlbnNpb25TdHlsZVNoZWV0czsKICAgICBS
ZWZQdHI8U3R5bGVTaGVldExpc3Q+IG1fc3R5bGVTaGVldExpc3Q7CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Rm9ybUNvbnRyb2xsZXI+IG1fZm9ybUNvbnRyb2xsZXI7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCShyZXZp
c2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vKQotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAtMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b24uaCIKLQotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTGlua0VsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91
cC5oIgotI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIlNWR05h
bWVzLmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKLSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCi0jaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgotI2luY2x1ZGUg
IlN0eWxlU2hlZXRMaXN0LmgiCi0jaW5jbHVkZSAiVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCi0j
aW5jbHVkZSAiVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiVXNlclN0eWxlU2hl
ZXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgQ29udGVudEV4
dGVuc2lvbnM7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1Eb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKERvY3VtZW50JiBkb2N1
bWVudCkKLSAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX3BlbmRpbmdTdHlsZXNo
ZWV0cygwKQotICAgICwgbV9pbmplY3RlZFN0eWxlU2hlZXRDYWNoZVZhbGlkKGZhbHNlKQotICAg
ICwgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldChmYWxzZSkKLSAgICAsIG1fcGVuZGluZ1Vw
ZGF0ZVR5cGUoTm9VcGRhdGUpCi0gICAgLCBtX3VzZXNGaXJzdExpbmVSdWxlcyhmYWxzZSkKLSAg
ICAsIG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXMoZmFsc2UpCi0gICAgLCBtX3VzZXNSZW1Vbml0cyhm
YWxzZSkKLSAgICAsIG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eShmYWxzZSkKLSAgICAsIG1f
c3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lcigqdGhpcywgJkRvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb246OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXJGaXJlZCkKLXsKLX0KLQotdm9pZCBEb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb21iaW5lQ1NTRmVhdHVyZUZsYWdzKCkKLXsKLSAg
ICAvLyBEZWxheSByZXNldHRpbmcgdGhlIGZsYWdzIHVudGlsIGFmdGVyIG5leHQgc3R5bGUgcmVj
YWxjIHNpbmNlIHVuYXBwbHlpbmcgdGhlIHN0eWxlIG1heSBub3Qgd29yayB3aXRob3V0IHRoZXNl
IHNldCAodGhpcyBpcyB0cnVlIGF0IGxlYXN0IHdpdGggYmVmb3JlL2FmdGVyKS4KLSAgICBjb25z
dCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gbV9kb2N1bWVudC5lbnN1cmVTdHlsZVJl
c29sdmVyKCk7Ci0gICAgbV91c2VzRmlyc3RMaW5lUnVsZXMgPSBtX3VzZXNGaXJzdExpbmVSdWxl
cyB8fCBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExpbmVSdWxlcygpOwotICAgIG1fdXNlc0ZpcnN0
TGV0dGVyUnVsZXMgPSBtX3VzZXNGaXJzdExldHRlclJ1bGVzIHx8IHN0eWxlUmVzb2x2ZXIudXNl
c0ZpcnN0TGV0dGVyUnVsZXMoKTsKLX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uOjpyZXNldENTU0ZlYXR1cmVGbGFncygpCi17Ci0gICAgY29uc3QgU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwotICAgIG1f
dXNlc0ZpcnN0TGluZVJ1bGVzID0gc3R5bGVSZXNvbHZlci51c2VzRmlyc3RMaW5lUnVsZXMoKTsK
LSAgICBtX3VzZXNGaXJzdExldHRlclJ1bGVzID0gc3R5bGVSZXNvbHZlci51c2VzRmlyc3RMZXR0
ZXJSdWxlcygpOwotfQotCi1DU1NTdHlsZVNoZWV0KiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uOjpwYWdlVXNlclNoZWV0KCkKLXsKLSAgICBpZiAobV9wYWdlVXNlclNoZWV0KQotICAgICAg
ICByZXR1cm4gbV9wYWdlVXNlclNoZWV0LmdldCgpOwotICAgIAotICAgIFBhZ2UqIG93bmluZ1Bh
Z2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKLSAgICBpZiAoIW93bmluZ1BhZ2UpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIAotICAgIFN0cmluZyB1c2VyU2hlZXRUZXh0ID0gb3duaW5nUGFnZS0+dXNl
clN0eWxlU2hlZXQoKTsKLSAgICBpZiAodXNlclNoZWV0VGV4dC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIC8vIFBhcnNlIHRoZSBzaGVldCBhbmQgY2FjaGUgaXQuCi0g
ICAgbV9wYWdlVXNlclNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKG1fZG9jdW1l
bnQsIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpKTsKLSAg
ICBtX3BhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVTaGVldCh0cnVlKTsK
LSAgICBtX3BhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJpbmcodXNlclNoZWV0VGV4
dCk7Ci0gICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKLX0KLQotdm9pZCBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjbGVhclBhZ2VVc2VyU2hlZXQoKQotewotICAgIGlmICht
X3BhZ2VVc2VyU2hlZXQpIHsKLSAgICAgICAgbV9wYWdlVXNlclNoZWV0ID0gbnVsbHB0cjsKLSAg
ICAgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsK
LSAgICB9Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlUGFn
ZVVzZXJTaGVldCgpCi17Ci0gICAgY2xlYXJQYWdlVXNlclNoZWV0KCk7Ci0gICAgaWYgKHBhZ2VV
c2VyU2hlZXQoKSkKLSAgICAgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNh
bGNTdHlsZUltbWVkaWF0ZWx5KTsKLX0KLQotY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0Pj4mIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmluamVjdGVkVXNlclN0eWxlU2hl
ZXRzKCkgY29uc3QKLXsKLSAgICB1cGRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpOwotICAg
IHJldHVybiBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzOwotfQotCi1jb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+PiYgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6aW5qZWN0
ZWRBdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0Ci17Ci0gICAgdXBkYXRlSW5qZWN0ZWRTdHlsZVNo
ZWV0Q2FjaGUoKTsKLSAgICByZXR1cm4gbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzOwotfQot
Ci12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVwZGF0ZUluamVjdGVkU3R5bGVT
aGVldENhY2hlKCkgY29uc3QKLXsKLSAgICBpZiAobV9pbmplY3RlZFN0eWxlU2hlZXRDYWNoZVZh
bGlkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pbmplY3RlZFN0eWxlU2hlZXRDYWNoZVZhbGlk
ID0gdHJ1ZTsKLSAgICBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmNsZWFyKCk7Ci0gICAgbV9p
bmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLmNsZWFyKCk7Ci0KLSAgICBQYWdlKiBvd25pbmdQYWdl
ID0gbV9kb2N1bWVudC5wYWdlKCk7Ci0gICAgaWYgKCFvd25pbmdQYWdlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjb25zdCBhdXRvKiB1c2VyQ29udGVudENvbnRyb2xsZXIgPSBvd25pbmdQYWdl
LT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKLSAgICBpZiAoIXVzZXJDb250ZW50Q29udHJvbGxl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVXNlclN0eWxlU2hlZXRNYXAqIHVzZXJT
dHlsZVNoZWV0cyA9IHVzZXJDb250ZW50Q29udHJvbGxlci0+dXNlclN0eWxlU2hlZXRzKCk7Ci0g
ICAgaWYgKCF1c2VyU3R5bGVTaGVldHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0
byYgc3R5bGVTaGVldHMgOiB1c2VyU3R5bGVTaGVldHMtPnZhbHVlcygpKSB7Ci0gICAgICAgIGZv
ciAoY29uc3QgYXV0byYgc2hlZXQgOiAqc3R5bGVTaGVldHMpIHsKLSAgICAgICAgICAgIGlmIChz
aGVldC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25seSAmJiBtX2RvY3Vt
ZW50Lm93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICBpZiAoIVVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc1BhdHRlcm5zKG1fZG9jdW1l
bnQudXJsKCksIHNoZWV0LT53aGl0ZWxpc3QoKSwgc2hlZXQtPmJsYWNrbGlzdCgpKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+
IGdyb3VwU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUoY29uc3RfY2FzdDxEb2N1
bWVudCY+KG1fZG9jdW1lbnQpLCBzaGVldC0+dXJsKCkpOwotICAgICAgICAgICAgYm9vbCBpc1Vz
ZXJTdHlsZVNoZWV0ID0gc2hlZXQtPmxldmVsKCkgPT0gVXNlclN0eWxlVXNlckxldmVsOwotICAg
ICAgICAgICAgaWYgKGlzVXNlclN0eWxlU2hlZXQpCi0gICAgICAgICAgICAgICAgbV9pbmplY3Rl
ZFVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoZ3JvdXBTaGVldCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLmFwcGVuZChncm91cFNo
ZWV0KTsKLQotICAgICAgICAgICAgZ3JvdXBTaGVldC0+Y29udGVudHMoKS5zZXRJc1VzZXJTdHls
ZVNoZWV0KGlzVXNlclN0eWxlU2hlZXQpOwotICAgICAgICAgICAgZ3JvdXBTaGVldC0+Y29udGVu
dHMoKS5wYXJzZVN0cmluZyhzaGVldC0+c291cmNlKCkpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmludmFsaWRhdGVJbmplY3RlZFN0
eWxlU2hlZXRDYWNoZSgpCi17Ci0gICAgaWYgKCFtX2luamVjdGVkU3R5bGVTaGVldENhY2hlVmFs
aWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2luamVjdGVkU3R5bGVTaGVldENhY2hlVmFsaWQg
PSBmYWxzZTsKLSAgICBpZiAobV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5pc0VtcHR5KCkgJiYg
bV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7Ci19
Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkQXV0aG9yU2hlZXQoUmVm
PFN0eWxlU2hlZXRDb250ZW50cz4mJiBhdXRob3JTaGVldCkKLXsKLSAgICBBU1NFUlQoIWF1dGhv
clNoZWV0LmdldCgpLmlzVXNlclN0eWxlU2hlZXQoKSk7Ci0gICAgbV9hdXRob3JTdHlsZVNoZWV0
cy5hcHBlbmQoQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKFdURjo6bW92ZShhdXRob3JTaGVldCksICZt
X2RvY3VtZW50KSk7Ci0gICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNT
dHlsZUltbWVkaWF0ZWx5KTsKLX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
OjphZGRVc2VyU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiB1c2VyU2hlZXQpCi17Ci0g
ICAgQVNTRVJUKHVzZXJTaGVldC5nZXQoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOwotICAgIG1fdXNl
clN0eWxlU2hlZXRzLmFwcGVuZChDU1NTdHlsZVNoZWV0OjpjcmVhdGUoV1RGOjptb3ZlKHVzZXJT
aGVldCksICZtX2RvY3VtZW50KSk7Ci0gICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdl
ZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKLX0KLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFkZERpc3BsYXlOb25l
U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCB1aW50MzJfdCBzZWxlY3RvcklEKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9jb250ZW50RXh0
ZW5zaW9uU2VsZWN0b3JTaGVldHMuYWRkKGlkZW50aWZpZXIsIG51bGxwdHIpOwotICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gQ29u
dGVudEV4dGVuc2lvblN0eWxlU2hlZXQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKLSAgICAgICAgbV91
c2VyU3R5bGVTaGVldHMuYXBwZW5kKCZyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zdHlsZVNoZWV0
KCkpOwotICAgIH0KLQotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFkZERpc3BsYXlOb25l
U2VsZWN0b3Ioc2VsZWN0b3IsIHNlbGVjdG9ySUQpOwotICAgIG1fc3R5bGVSZXNvbHZlckNoYW5n
ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6bWF5YmVBZGRDb250ZW50RXh0ZW5zaW9uU2hlZXQoY29uc3QgU3RyaW5nJiBpZGVu
dGlmaWVyLCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0KQotewotICAgIEFTU0VSVChzaGVldC5p
c1VzZXJTdHlsZVNoZWV0KCkpOwotCi0gICAgaWYgKG1fY29udGVudEV4dGVuc2lvblNoZWV0cy5j
b250YWlucyhpZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmPENTU1N0eWxl
U2hlZXQ+IGNzc1NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHNoZWV0LCAmbV9kb2N1bWVu
dCk7Ci0gICAgbV9jb250ZW50RXh0ZW5zaW9uU2hlZXRzLnNldChpZGVudGlmaWVyLCAmY3NzU2hl
ZXQuZ2V0KCkpOwotICAgIG1fdXNlclN0eWxlU2hlZXRzLmFwcGVuZChhZG9wdFJlZihjc3NTaGVl
dC5sZWFrUmVmKCkpKTsKLSAgICBtX3N0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXIuc3RhcnRPbmVT
aG90KDApOwotfQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0KLXZvaWQg
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6c3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lckZp
cmVkKCkKLXsKLSAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxl
SW1tZWRpYXRlbHkpOwotfQotCi0vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSB0
b3AtbGV2ZWwgc3R5bGVzaGVldCBoYXMgZmluaXNoZWQgbG9hZGluZy4KLXZvaWQgRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92ZVBlbmRpbmdTaGVl
dE5vdGlmaWNhdGlvblR5cGUgbm90aWZpY2F0aW9uKQotewotICAgIC8vIE1ha2Ugc3VyZSB3ZSBr
bmV3IHRoaXMgc2hlZXQgd2FzIHBlbmRpbmcsIGFuZCB0aGF0IG91ciBjb3VudCBpc24ndCBvdXQg
b2Ygc3luYy4KLSAgICBBU1NFUlQobV9wZW5kaW5nU3R5bGVzaGVldHMgPiAwKTsKLQotICAgIG1f
cGVuZGluZ1N0eWxlc2hlZXRzLS07Ci0gICAgCi0jaWZkZWYgSU5TVFJVTUVOVF9MQVlPVVRfU0NI
RURVTElORwotICAgIGlmICghb3duZXJFbGVtZW50KCkpCi0gICAgICAgIHByaW50ZigiU3R5bGVz
aGVldCBsb2FkZWQgYXQgdGltZSAlZC4gJWQgc3R5bGVzaGVldHMgc3RpbGwgcmVtYWluLlxuIiwg
ZWxhcHNlZFRpbWUoKSwgbV9wZW5kaW5nU3R5bGVzaGVldHMpOwotI2VuZGlmCi0KLSAgICBpZiAo
bV9wZW5kaW5nU3R5bGVzaGVldHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChub3RpZmlj
YXRpb24gPT0gUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0ZXIpIHsKLSAgICAgICAgbV9kb2N1
bWVudC5zZXROZWVkc05vdGlmeVJlbW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9kb2N1bWVudC5kaWRSZW1vdmVBbGxQZW5kaW5n
U3R5bGVzaGVldCgpOwotfQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFk
ZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmIG5vZGUsIGJvb2wgY3JlYXRlZEJ5UGFyc2Vy
KQotewotICAgIGlmICghbm9kZS5pbkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICAvLyBVbnRpbCB0aGUgPGJvZHk+IGV4aXN0cywgd2UgaGF2ZSBubyBjaG9pY2UgYnV0IHRv
IGNvbXBhcmUgZG9jdW1lbnQgcG9zaXRpb25zLAotICAgIC8vIHNpbmNlIHN0eWxlcyBvdXRzaWRl
IG9mIHRoZSBib2R5IGFuZCBoZWFkIGNvbnRpbnVlIHRvIGJlIHNodW50ZWQgaW50byB0aGUgaGVh
ZAotICAgIC8vIChhbmQgdGh1cyBjYW4gc2hpZnQgdG8gZW5kIHVwIGJlZm9yZSBkeW5hbWljYWxs
eSBhZGRlZCBET00gY29udGVudCB0aGF0IGlzIGFsc28KLSAgICAvLyBvdXRzaWRlIHRoZSBib2R5
KS4KLSAgICBpZiAoKGNyZWF0ZWRCeVBhcnNlciAmJiBtX2RvY3VtZW50LmJvZHlPckZyYW1lc2V0
KCkpIHx8IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmlzRW1wdHkoKSkgewotICAgICAgICBt
X3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5hZGQoJm5vZGUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRGV0ZXJtaW5lIGFuIGFwcHJvcHJpYXRlIGluc2VydGlvbiBwb2ludC4K
LSAgICBTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGJlZ2luID0gbV9z
dHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuYmVnaW4oKTsKLSAgICBTdHlsZVNoZWV0Q2FuZGlkYXRl
TGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmVu
ZCgpOwotICAgIFN0eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDo6aXRlcmF0b3IgaXQgPSBl
bmQ7Ci0gICAgTm9kZSogZm9sbG93aW5nTm9kZSA9IDA7Ci0gICAgZG8gewotICAgICAgICAtLWl0
OwotICAgICAgICBOb2RlKiBuID0gKml0OwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3NpdGlv
biA9IG4tPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCZub2RlKTsKLSAgICAgICAgaWYgKHBvc2l0
aW9uID09IE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORykgewotICAgICAgICAgICAg
bV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaW5zZXJ0QmVmb3JlKGZvbGxvd2luZ05vZGUsICZu
b2RlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBmb2xsb3dpbmdO
b2RlID0gbjsKLSAgICB9IHdoaWxlIChpdCAhPSBiZWdpbik7Ci0gICAgCi0gICAgbV9zdHlsZVNo
ZWV0Q2FuZGlkYXRlTm9kZXMuaW5zZXJ0QmVmb3JlKGZvbGxvd2luZ05vZGUsICZub2RlKTsKLX0K
LQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpyZW1vdmVTdHlsZVNoZWV0Q2Fu
ZGlkYXRlTm9kZShOb2RlJiBub2RlKQotewotICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVz
LnJlbW92ZSgmbm9kZSk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6
Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+JiBzaGVl
dHMpCi17Ci0gICAgaWYgKG1fZG9jdW1lbnQuc2V0dGluZ3MoKSAmJiAhbV9kb2N1bWVudC5zZXR0
aW5ncygpLT5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2RlcykgewotICAg
ICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChpczxQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24+KCpub2RlKSkgewotICAgICAgICAgICAgLy8gUHJvY2Vzc2luZyBpbnN0
cnVjdGlvbiAoWE1MIGRvY3VtZW50cyBvbmx5KS4KLSAgICAgICAgICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgbGlua2luZyB0byBlbWJlZGRlZCBDU1Mgc3R5bGVzaGVldHMsIHNlZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MjgxPiBmb3IgZGlzY3Vzc2lvbi4KLSAg
ICAgICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYgcGkgPSBkb3duY2FzdDxQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24+KCpub2RlKTsKLSAgICAgICAgICAgIHNoZWV0ID0gcGkuc2hlZXQoKTsKLSNp
ZiBFTkFCTEUoWFNMVCkKLSAgICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1z
IHRvIGFscmVhZHkgdHJhbnNmb3JtZWQgZG9jdW1lbnRzIC0tIDxyZGFyOi8vcHJvYmxlbS80MTMy
ODA2PgotICAgICAgICAgICAgaWYgKHBpLmlzWFNMKCkgJiYgIW1fZG9jdW1lbnQudHJhbnNmb3Jt
U291cmNlRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0
cmFuc2Zvcm1zIHVudGlsIGxvYWRpbmcgaXMgZmluaXNoZWQuCi0gICAgICAgICAgICAgICAgaWYg
KCFtX2RvY3VtZW50LnBhcnNpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5h
cHBseVhTTFRyYW5zZm9ybSgmcGkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSNlbmRpZgotICAgICAgICB9IGVsc2UgaWYgKGlzPEhUTUxMaW5rRWxlbWVudD4oKm5v
ZGUpIHx8IGlzPEhUTUxTdHlsZUVsZW1lbnQ+KCpub2RlKSB8fCBpczxTVkdTdHlsZUVsZW1lbnQ+
KCpub2RlKSkgewotICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKTsKLSAgICAgICAgICAgIEF0b21pY1N0cmluZyB0aXRsZSA9IGVsZW1lbnQuZmFz
dEdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwotICAgICAgICAgICAgYm9vbCBlbmFibGVkVmlhU2Ny
aXB0ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTExpbmtFbGVtZW50PihlbGVtZW50
KSkgewotICAgICAgICAgICAgICAgIC8vIDxMSU5LPiBlbGVtZW50Ci0gICAgICAgICAgICAgICAg
SFRNTExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVudD4o
ZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmtFbGVtZW50LmlzRGlzYWJsZWQoKSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZW5hYmxlZFZp
YVNjcmlwdCA9IGxpbmtFbGVtZW50LmlzRW5hYmxlZFZpYVNjcmlwdCgpOwotICAgICAgICAgICAg
ICAgIGlmIChsaW5rRWxlbWVudC5zdHlsZVNoZWV0SXNMb2FkaW5nKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gaXQgaXMgbG9hZGluZyBidXQgd2Ugc2hvdWxkIHN0aWxsIGRlY2lkZSB3aGlj
aCBzdHlsZSBzaGVldCBzZXQgdG8gdXNlCi0gICAgICAgICAgICAgICAgICAgIGlmICghZW5hYmxl
ZFZpYVNjcmlwdCAmJiAhdGl0bGUuaXNFbXB0eSgpICYmIG1fcHJlZmVycmVkU3R5bGVzaGVldFNl
dE5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmtFbGVt
ZW50LmZhc3RHZXRBdHRyaWJ1dGUocmVsQXR0cikuY29udGFpbnMoImFsdGVybmF0ZSIpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSA9
IHRpdGxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2VsZWN0ZWRTdHlsZXNoZWV0
U2V0TmFtZSA9IHRpdGxlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoIWxpbmtFbGVtZW50LnNoZWV0KCkpCi0gICAgICAgICAg
ICAgICAgICAgIHRpdGxlID0gbnVsbEF0b207Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAv
LyBHZXQgdGhlIGN1cnJlbnQgcHJlZmVycmVkIHN0eWxlc2V0LiBUaGlzIGlzIHRoZQotICAgICAg
ICAgICAgLy8gc2V0IG9mIHNoZWV0cyB0aGF0IHdpbGwgYmUgZW5hYmxlZC4KLSAgICAgICAgICAg
IGlmIChpczxTVkdTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHNoZWV0
ID0gZG93bmNhc3Q8U1ZHU3R5bGVFbGVtZW50PihlbGVtZW50KS5zaGVldCgpOwotICAgICAgICAg
ICAgZWxzZSBpZiAoaXM8SFRNTExpbmtFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgICAgICAg
ICBzaGVldCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCkuc2hlZXQoKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzaGVldCA9IGRvd25jYXN0PEhUTUxTdHls
ZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7Ci0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUg
aWYgdGhpcyBzaGVldCBiZWxvbmdzIHRvIGEgc3R5bGVzZXQKLSAgICAgICAgICAgIC8vICh0aHVz
IG1ha2luZyBpdCBQUkVGRVJSRUQgb3IgQUxURVJOQVRFIHJhdGhlciB0aGFuCi0gICAgICAgICAg
ICAvLyBQRVJTSVNURU5UKS4KLSAgICAgICAgICAgIGF1dG8mIHJlbCA9IGVsZW1lbnQuZmFzdEdl
dEF0dHJpYnV0ZShyZWxBdHRyKTsKLSAgICAgICAgICAgIGlmICghZW5hYmxlZFZpYVNjcmlwdCAm
JiAhdGl0bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gWWVzLCB3ZSBoYXZlIGEg
dGl0bGUuCi0gICAgICAgICAgICAgICAgaWYgKG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vIHByZWZlcnJlZCBzZXQgaGFz
IGJlZW4gZXN0YWJsaXNoZWQuIElmCi0gICAgICAgICAgICAgICAgICAgIC8vIHdlIGFyZSBOT1Qg
YW4gYWx0ZXJuYXRlIHNoZWV0LCB0aGVuIGVzdGFibGlzaAotICAgICAgICAgICAgICAgICAgICAv
LyB1cyBhcyB0aGUgcHJlZmVycmVkIHNldC4gT3RoZXJ3aXNlLCBqdXN0IGlnbm9yZQotICAgICAg
ICAgICAgICAgICAgICAvLyB0aGlzIHNoZWV0LgotICAgICAgICAgICAgICAgICAgICBpZiAoaXM8
SFRNTFN0eWxlRWxlbWVudD4oZWxlbWVudCkgfHwgIXJlbC5jb250YWlucygiYWx0ZXJuYXRlIikp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lID0g
bV9zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lID0gdGl0bGU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmICh0aXRsZSAhPSBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1l
KQotICAgICAgICAgICAgICAgICAgICBzaGVldCA9IG51bGxwdHI7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChyZWwuY29udGFpbnMoImFsdGVybmF0ZSIpICYmIHRpdGxlLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICBzaGVldCA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHNoZWV0KQotICAgICAgICAgICAgc2hlZXRzLmFwcGVuZChzaGVldCk7Ci0gICAgfQot
fQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFuYWx5emVTdHlsZVNoZWV0
Q2hhbmdlKFVwZGF0ZUZsYWcgdXBkYXRlRmxhZywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0Pj4mIG5ld1N0eWxlc2hlZXRzLCBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSYgc3R5bGVS
ZXNvbHZlclVwZGF0ZVR5cGUsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKQotewotICAg
IHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID0gUmVjb25zdHJ1Y3Q7Ci0gICAgcmVxdWlyZXNGdWxs
U3R5bGVSZWNhbGMgPSB0cnVlOwotICAgIAotICAgIC8vIFN0eWxlc2hlZXRzIG9mIDxzdHlsZT4g
ZWxlbWVudHMgdGhhdCBAaW1wb3J0IHN0eWxlc2hlZXRzIGFyZSBhY3RpdmUgYnV0IGxvYWRpbmcu
IFdlIG5lZWQgdG8gdHJpZ2dlciBhIGZ1bGwgcmVjYWxjIHdoZW4gc3VjaCBsb2FkcyBhcmUgZG9u
ZS4KLSAgICBib29sIGhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ID0gZmFsc2U7Ci0gICAgdW5z
aWduZWQgbmV3U3R5bGVzaGVldENvdW50ID0gbmV3U3R5bGVzaGVldHMuc2l6ZSgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdTdHlsZXNoZWV0Q291bnQ7ICsraSkgewotICAgICAg
ICBpZiAobmV3U3R5bGVzaGVldHNbaV0tPmlzTG9hZGluZygpKQotICAgICAgICAgICAgaGFzQWN0
aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobV9oYWRBY3RpdmVM
b2FkaW5nU3R5bGVzaGVldCAmJiAhaGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQpIHsKLSAgICAg
ICAgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IGZhbHNlOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBoYXNBY3RpdmVMb2Fk
aW5nU3R5bGVzaGVldDsKLQotICAgIGlmICh1cGRhdGVGbGFnICE9IE9wdGltaXplZFVwZGF0ZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9kb2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlz
dHMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIg
PSAqbV9kb2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlzdHMoKTsKLQotICAgIC8vIEZpbmQgb3V0
IHdoaWNoIHN0eWxlc2hlZXRzIGFyZSBuZXcuCi0gICAgdW5zaWduZWQgb2xkU3R5bGVzaGVldENv
dW50ID0gbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0cy5zaXplKCk7Ci0gICAgaWYgKG5ld1N0eWxl
c2hlZXRDb3VudCA8IG9sZFN0eWxlc2hlZXRDb3VudCkKLSAgICAgICAgcmV0dXJuOwotICAgIFZl
Y3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiBhZGRlZFNoZWV0czsKLSAgICB1bnNpZ25lZCBuZXdJ
bmRleCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBvbGRJbmRleCA9IDA7IG9sZEluZGV4IDwgb2xk
U3R5bGVzaGVldENvdW50OyArK29sZEluZGV4KSB7Ci0gICAgICAgIGlmIChuZXdJbmRleCA+PSBu
ZXdTdHlsZXNoZWV0Q291bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdoaWxlICht
X2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzW29sZEluZGV4XSAhPSBuZXdTdHlsZXNoZWV0c1tuZXdJ
bmRleF0pIHsKLSAgICAgICAgICAgIGFkZGVkU2hlZXRzLmFwcGVuZCgmbmV3U3R5bGVzaGVldHNb
bmV3SW5kZXhdLT5jb250ZW50cygpKTsKLSAgICAgICAgICAgICsrbmV3SW5kZXg7Ci0gICAgICAg
ICAgICBpZiAobmV3SW5kZXggPT0gbmV3U3R5bGVzaGVldENvdW50KQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICArK25ld0luZGV4OwotICAgIH0KLSAgICBib29s
IGhhc0luc2VydGlvbnMgPSAhYWRkZWRTaGVldHMuaXNFbXB0eSgpOwotICAgIHdoaWxlIChuZXdJ
bmRleCA8IG5ld1N0eWxlc2hlZXRDb3VudCkgewotICAgICAgICBhZGRlZFNoZWV0cy5hcHBlbmQo
Jm5ld1N0eWxlc2hlZXRzW25ld0luZGV4XS0+Y29udGVudHMoKSk7Ci0gICAgICAgICsrbmV3SW5k
ZXg7Ci0gICAgfQotICAgIC8vIElmIGFsbCBuZXcgc2hlZXRzIHdlcmUgYWRkZWQgYXQgdGhlIGVu
ZCBvZiB0aGUgbGlzdCB3ZSBjYW4ganVzdCBhZGQgdGhlbSB0byBleGlzdGluZyBTdHlsZVJlc29s
dmVyLgotICAgIC8vIElmIHRoZXJlIHdlcmUgaW5zZXJ0aW9ucyB3ZSBuZWVkIHRvIHJlLWFkZCBh
bGwgdGhlIHN0eWxlc2hlZXRzIHNvIHJ1bGVzIGFyZSBvcmRlcmVkIGNvcnJlY3RseS4KLSAgICBz
dHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9IGhhc0luc2VydGlvbnMgPyBSZXNldCA6IEFkZGl0aXZl
OwotCi0gICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgcGFyc2luZyB0aGUgYm9keSBhbmQgc28gbWF5
IGhhdmUgc2lnbmlmaWNhbnQgYW1vdW50IG9mIGVsZW1lbnRzLCBwdXQgc29tZSBlZmZvcnQgaW50
byB0cnlpbmcgdG8gYXZvaWQgc3R5bGUgcmVjYWxjcy4KLSAgICBpZiAoIW1fZG9jdW1lbnQuYm9k
eU9yRnJhbWVzZXQoKSB8fCBtX2RvY3VtZW50Lmhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMgaW52YWxp
ZGF0aW9uQW5hbHlzaXMoYWRkZWRTaGVldHMsIHN0eWxlUmVzb2x2ZXIubWVkaWFRdWVyeUV2YWx1
YXRvcigpKTsKLSAgICBpZiAoaW52YWxpZGF0aW9uQW5hbHlzaXMuZGlydGllc0FsbFN0eWxlKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpbnZhbGlkYXRpb25BbmFseXNpcy5pbnZhbGlkYXRlU3R5
bGUobV9kb2N1bWVudCk7Ci0gICAgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMgPSBmYWxzZTsKLX0K
LQotc3RhdGljIHZvaWQgZmlsdGVyRW5hYmxlZE5vbmVtcHR5Q1NTU3R5bGVTaGVldHMoVmVjdG9y
PFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHJlc3VsdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVNoZWV0Pj4mIHNoZWV0cykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2hlZXRz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghaXM8Q1NTU3R5bGVTaGVldD4oKnNoZWV0c1tp
XSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQ1NTU3R5bGVTaGVldCYgc2hlZXQg
PSBkb3duY2FzdDxDU1NTdHlsZVNoZWV0Pigqc2hlZXRzW2ldKTsKLSAgICAgICAgaWYgKHNoZWV0
LmRpc2FibGVkKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFzaGVldC5s
ZW5ndGgoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXN1bHQuYXBwZW5kKCZz
aGVldCk7Ci0gICAgfQotfQotCi1ib29sIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVw
ZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKFVwZGF0ZUZsYWcgdXBkYXRlRmxhZykKLXsKLSAgICBpZiAo
bV9kb2N1bWVudC5pblN0eWxlUmVjYWxjKCkpIHsKLSAgICAgICAgLy8gU1ZHIDx1c2U+IGVsZW1l
bnQgbWF5IG1hbmFnZSB0byBpbnZhbGlkYXRlIHN0eWxlIHNlbGVjdG9yIGluIHRoZSBtaWRkbGUg
b2YgYSBzdHlsZSByZWNhbGMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NDM0NAotICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZml4
ZWQgaW4gU1ZHIGFuZCB0aGUgY2FsbCBzaXRlIHJlcGxhY2VkIGJ5IEFTU0VSVCghbV9pblN0eWxl
UmVjYWxjKS4KLSAgICAgICAgbV9wZW5kaW5nVXBkYXRlVHlwZSA9IEZ1bGxVcGRhdGU7Ci0gICAg
ICAgIG1fZG9jdW1lbnQuc2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICB9Ci0gICAgaWYgKCFtX2RvY3VtZW50Lmhhc0xpdmluZ1JlbmRlclRy
ZWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPFJlZlB0cjxTdHlsZVNo
ZWV0Pj4gYWN0aXZlU3R5bGVTaGVldHM7Ci0gICAgY29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKGFj
dGl2ZVN0eWxlU2hlZXRzKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IGFj
dGl2ZUNTU1N0eWxlU2hlZXRzOwotICAgIGFjdGl2ZUNTU1N0eWxlU2hlZXRzLmFwcGVuZFZlY3Rv
cihpbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzKCkpOwotICAgIGFjdGl2ZUNTU1N0eWxlU2hlZXRz
LmFwcGVuZFZlY3Rvcihkb2N1bWVudEF1dGhvclN0eWxlU2hlZXRzKCkpOwotICAgIGZpbHRlckVu
YWJsZWROb25lbXB0eUNTU1N0eWxlU2hlZXRzKGFjdGl2ZUNTU1N0eWxlU2hlZXRzLCBhY3RpdmVT
dHlsZVNoZWV0cyk7Ci0KLSAgICBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSBzdHlsZVJlc29sdmVy
VXBkYXRlVHlwZTsKLSAgICBib29sIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjOwotICAgIGFuYWx5
emVTdHlsZVNoZWV0Q2hhbmdlKHVwZGF0ZUZsYWcsIGFjdGl2ZUNTU1N0eWxlU2hlZXRzLCBzdHls
ZVJlc29sdmVyVXBkYXRlVHlwZSwgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpOwotCi0gICAgaWYg
KHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID09IFJlY29uc3RydWN0KQotICAgICAgICBtX2RvY3Vt
ZW50LmNsZWFyU3R5bGVSZXNvbHZlcigpOwotICAgIGVsc2UgewotICAgICAgICBTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyID0gbV9kb2N1bWVudC5lbnN1cmVTdHlsZVJlc29sdmVyKCk7Ci0g
ICAgICAgIGlmIChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9PSBSZXNldCkgewotICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci5ydWxlU2V0cygpLnJlc2V0QXV0aG9yU3R5bGUoKTsKLSAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXIuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoMCwgYWN0aXZlQ1NTU3R5
bGVTaGVldHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHN0eWxlUmVz
b2x2ZXJVcGRhdGVUeXBlID09IEFkZGl0aXZlKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIu
YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMobV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0cy5zaXplKCks
IGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKLSAgICAgICAgfQotICAgICAgICByZXNldENTU0ZlYXR1
cmVGbGFncygpOwotICAgIH0KLQotICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0
Rm9yRmFzdExvb2t1cCA9IG51bGxwdHI7Ci0gICAgbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0cy5z
d2FwKGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKLSAgICBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVl
dExpc3Quc3dhcChhY3RpdmVTdHlsZVNoZWV0cyk7Ci0KLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmFjdGl2ZVN0eWxlU2hlZXRzVXBkYXRlZChtX2RvY3VtZW50KTsKLQotICAgIGZvciAo
Y29uc3QgYXV0byYgc2hlZXQgOiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzKSB7Ci0gICAgICAg
IGlmIChzaGVldC0+Y29udGVudHMoKS51c2VzUmVtVW5pdHMoKSkKLSAgICAgICAgICAgIG1fdXNl
c1JlbVVuaXRzID0gdHJ1ZTsKLSAgICAgICAgaWYgKHNoZWV0LT5jb250ZW50cygpLnVzZXNTdHls
ZUJhc2VkRWRpdGFiaWxpdHkoKSkKLSAgICAgICAgICAgIG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJp
bGl0eSA9IHRydWU7Ci0gICAgfQotICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSBOb1VwZGF0ZTsK
LQotICAgIHJldHVybiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYzsKLX0KLQotY29uc3QgVmVjdG9y
PFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWN0
aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKSBjb25zdAotewotICAgIFZlY3RvcjxSZWZQdHI8
Q1NTU3R5bGVTaGVldD4+IHJlc3VsdDsKLQotICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoaW5qZWN0
ZWRBdXRob3JTdHlsZVNoZWV0cygpKTsKLSAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGRvY3VtZW50
QXV0aG9yU3R5bGVTaGVldHMoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXQgOiBtX3N0
eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QpIHsKLSAgICAgICAgaWYgKCFpczxDU1NTdHlsZVNo
ZWV0Pigqc3R5bGVTaGVldCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDU1NT
dHlsZVNoZWV0JiBzaGVldCA9IGRvd25jYXN0PENTU1N0eWxlU2hlZXQ+KCpzdHlsZVNoZWV0KTsK
LSAgICAgICAgaWYgKHNoZWV0LmRpc2FibGVkKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICByZXN1bHQuYXBwZW5kKCZzaGVldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotYm9vbCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphY3RpdmVTdHlsZVNo
ZWV0c0NvbnRhaW5zKGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0KSBjb25zdAotewotICAgIGlm
ICghbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwKSB7Ci0gICAg
ICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cCA9IHN0ZDo6
bWFrZV91bmlxdWU8SGFzaFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+KCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzLnNpemUoKTsg
KytpKQotICAgICAgICAgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0
TG9va3VwLT5hZGQobV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0c1tpXS5nZXQoKSk7Ci0gICAgfQot
ICAgIHJldHVybiBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAt
PmNvbnRhaW5zKHNoZWV0KTsKLX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
OjpkZXRhY2hGcm9tRG9jdW1lbnQoKQotewotICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQpCi0gICAg
ICAgIG1fcGFnZVVzZXJTaGVldC0+ZGV0YWNoRnJvbURvY3VtZW50KCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHNbaV0tPmRldGFjaEZyb21Eb2N1bWVudCgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVl
dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0c1tpXS0+
ZGV0YWNoRnJvbURvY3VtZW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXNl
clN0eWxlU2hlZXRzLnNpemUoKTsgKytpKQotICAgICAgICBtX3VzZXJTdHlsZVNoZWV0c1tpXS0+
ZGV0YWNoRnJvbURvY3VtZW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXV0
aG9yU3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXV0aG9yU3R5bGVTaGVldHNb
aV0tPmRldGFjaEZyb21Eb2N1bWVudCgpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDE5MDA3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
KQotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaWZuZGVmIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb25faAot
I2RlZmluZSBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uX2gKLQotI2luY2x1ZGUgIlRpbWVy
LmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSNp
bmNsdWRlICJDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIERvY3VtZW50OwotY2xh
c3MgTm9kZTsKLWNsYXNzIFN0eWxlU2hlZXQ7Ci1jbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1j
bGFzcyBTdHlsZVNoZWV0TGlzdDsKLQotY2xhc3MgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
biB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbihEb2N1bWVudCYpOwotCi0gICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3Q7IH0KLQotICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBhY3RpdmVBdXRob3JTdHlsZVNoZWV0
cygpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHM7IH0KLQotICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IGFjdGl2ZVN0eWxlU2hlZXRzRm9ySW5z
cGVjdG9yKCkgY29uc3Q7Ci0KLSAgICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0KCk7Ci0g
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGRvY3VtZW50VXNlclN0eWxl
U2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU3R5bGVTaGVldHM7IH0KLSAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgZG9jdW1lbnRBdXRob3JTdHlsZVNoZWV0cygp
IGNvbnN0IHsgcmV0dXJuIG1fYXV0aG9yU3R5bGVTaGVldHM7IH0KLSAgICBjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSBjb25zdDsK
LSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgaW5qZWN0ZWRBdXRob3JT
dHlsZVNoZWV0cygpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9k
ZShOb2RlJiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwotICAgIHZvaWQgcmVtb3ZlU3R5bGVTaGVl
dENhbmRpZGF0ZU5vZGUoTm9kZSYpOwotCi0gICAgdm9pZCBjbGVhclBhZ2VVc2VyU2hlZXQoKTsK
LSAgICB2b2lkIHVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKLSAgICB2b2lkIGludmFsaWRhdGVJbmpl
Y3RlZFN0eWxlU2hlZXRDYWNoZSgpOwotICAgIHZvaWQgdXBkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0
Q2FjaGUoKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQXV0aG9yU2hlZXQo
UmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiBhdXRob3JTaGVldCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhZGRVc2VyU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiB1c2VyU2hlZXQp
OwotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB2b2lkIGFkZERpc3BsYXlO
b25lU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNlbGVj
dG9yLCB1aW50MzJfdCBzZWxlY3RvcklEKTsKLSAgICB2b2lkIG1heWJlQWRkQ29udGVudEV4dGVu
c2lvblNoZWV0KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3R5bGVTaGVldENvbnRlbnRzJik7
Ci0jZW5kaWYKLQotICAgIGVudW0gVXBkYXRlRmxhZyB7IE5vVXBkYXRlID0gMCwgT3B0aW1pemVk
VXBkYXRlLCBGdWxsVXBkYXRlIH07Ci0KLSAgICBVcGRhdGVGbGFnIHBlbmRpbmdVcGRhdGVUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nVXBkYXRlVHlwZTsgfQotICAgIHZvaWQgc2V0UGVu
ZGluZ1VwZGF0ZVR5cGUoVXBkYXRlRmxhZyB1cGRhdGVUeXBlKQotICAgIHsKLSAgICAgICAgaWYg
KHVwZGF0ZVR5cGUgPiBtX3BlbmRpbmdVcGRhdGVUeXBlKQotICAgICAgICAgICAgbV9wZW5kaW5n
VXBkYXRlVHlwZSA9IHVwZGF0ZVR5cGU7Ci0gICAgfQotCi0gICAgdm9pZCBmbHVzaFBlbmRpbmdV
cGRhdGVzKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3BlbmRpbmdVcGRhdGVUeXBlICE9IE5vVXBk
YXRlKQotICAgICAgICAgICAgdXBkYXRlQWN0aXZlU3R5bGVTaGVldHMobV9wZW5kaW5nVXBkYXRl
VHlwZSk7Ci0gICAgfQotCi0gICAgYm9vbCB1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRhdGVG
bGFnKTsKLQotICAgIFN0cmluZyBwcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWU7IH0KLSAgICBTdHJpbmcgc2VsZWN0
ZWRTdHlsZXNoZWV0U2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWRTdHlsZXNoZWV0
U2V0TmFtZTsgfQotICAgIHZvaWQgc2V0UHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUoY29uc3Qg
U3RyaW5nJiBuYW1lKSB7IG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUgPSBuYW1lOyB9Ci0g
ICAgdm9pZCBzZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkg
eyBtX3NlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUgPSBuYW1lOyB9Ci0KLSAgICB2b2lkIGFkZFBl
bmRpbmdTaGVldCgpIHsgbV9wZW5kaW5nU3R5bGVzaGVldHMrKzsgfQotICAgIGVudW0gUmVtb3Zl
UGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9uVHlwZSB7Ci0gICAgICAgIFJlbW92ZVBlbmRpbmdTaGVl
dE5vdGlmeUltbWVkaWF0ZWx5LAotICAgICAgICBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlMYXRl
cgotICAgIH07Ci0gICAgdm9pZCByZW1vdmVQZW5kaW5nU2hlZXQoUmVtb3ZlUGVuZGluZ1NoZWV0
Tm90aWZpY2F0aW9uVHlwZSA9IFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5KTsK
LQotICAgIGJvb2wgaGFzUGVuZGluZ1NoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ1N0
eWxlc2hlZXRzID4gMDsgfQotCi0gICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7
IHJldHVybiBtX3VzZXNGaXJzdExpbmVSdWxlczsgfQotICAgIGJvb2wgdXNlc0ZpcnN0TGV0dGVy
UnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3VzZXNGaXJzdExldHRlclJ1bGVzOyB9Ci0gICAgYm9v
bCB1c2VzUmVtVW5pdHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXNSZW1Vbml0czsgfQotICAgIHZv
aWQgc2V0VXNlc1JlbVVuaXQoYm9vbCBiKSB7IG1fdXNlc1JlbVVuaXRzID0gYjsgfQotICAgIGJv
b2wgdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpIHsgcmV0dXJuIG1fdXNlc1N0eWxlQmFzZWRF
ZGl0YWJpbGl0eTsgfQotICAgIHZvaWQgc2V0VXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eShib29s
IGIpIHsgbV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5ID0gYjsgfQotCi0gICAgdm9pZCBjb21i
aW5lQ1NTRmVhdHVyZUZsYWdzKCk7Ci0gICAgdm9pZCByZXNldENTU0ZlYXR1cmVGbGFncygpOwot
Ci0gICAgYm9vbCBhY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5zKGNvbnN0IENTU1N0eWxlU2hlZXQq
KSBjb25zdDsKLQotICAgIHZvaWQgZGV0YWNoRnJvbURvY3VtZW50KCk7Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCBjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0
Pj4mKTsKLSAgICBlbnVtIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHsKLSAgICAgICAgUmVjb25z
dHJ1Y3QsCi0gICAgICAgIFJlc2V0LAotICAgICAgICBBZGRpdGl2ZQotICAgIH07Ci0gICAgdm9p
ZCBhbmFseXplU3R5bGVTaGVldENoYW5nZShVcGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBl
JiwgYm9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpOwotCi0gICAgdm9pZCBzdHlsZVJlc29s
dmVyQ2hhbmdlZFRpbWVyRmlyZWQoKTsKLQotICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwotCi0g
ICAgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4gbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRM
aXN0OwotICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG1fYWN0aXZlQXV0aG9yU3R5
bGVTaGVldHM7Ci0KLSAgICAvLyBUaGlzIGlzIGEgbWlycm9yIG9mIG1fYWN0aXZlQXV0aG9yU3R5
bGVTaGVldHMgdGhhdCBnZXRzIHBvcHVsYXRlZCBvbiBkZW1hbmQgZm9yIGFjdGl2ZVN0eWxlU2hl
ZXRzQ29udGFpbnMoKS4KLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PGNvbnN0
IENTU1N0eWxlU2hlZXQqPj4gbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0
TG9va3VwOwotCi0gICAgLy8gVHJhY2sgdGhlIG51bWJlciBvZiBjdXJyZW50bHkgbG9hZGluZyB0
b3AtbGV2ZWwgc3R5bGVzaGVldHMgbmVlZGVkIGZvciByZW5kZXJpbmcuCi0gICAgLy8gU2hlZXRz
IGxvYWRlZCB1c2luZyB0aGUgQGltcG9ydCBkaXJlY3RpdmUgYXJlIG5vdCBpbmNsdWRlZCBpbiB0
aGlzIGNvdW50LgotICAgIC8vIFdlIHVzZSB0aGlzIGNvdW50IG9mIHBlbmRpbmcgc2hlZXRzIHRv
IGRldGVjdCB3aGVuIHdlIGNhbiBiZWdpbiBhdHRhY2hpbmcKLSAgICAvLyBlbGVtZW50cyBhbmQg
d2hlbiBpdCBpcyBzYWZlIHRvIGV4ZWN1dGUgc2NyaXB0cy4KLSAgICBpbnQgbV9wZW5kaW5nU3R5
bGVzaGVldHM7Ci0KLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9wYWdlVXNlclNoZWV0Owot
Ci0gICAgbXV0YWJsZSBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2luamVjdGVkVXNl
clN0eWxlU2hlZXRzOwotICAgIG11dGFibGUgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4g
bV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzOwotICAgIG11dGFibGUgYm9vbCBtX2luamVjdGVk
U3R5bGVTaGVldENhY2hlVmFsaWQ7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
PiBtX3VzZXJTdHlsZVNoZWV0czsKLSAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBt
X2F1dGhvclN0eWxlU2hlZXRzOwotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2NvbnRlbnRFeHRlbnNp
b25TaGVldHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxDb250ZW50RXh0ZW5zaW9uczo6
Q29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQ+PiBtX2NvbnRlbnRFeHRlbnNpb25TZWxlY3RvclNo
ZWV0czsKLSNlbmRpZgotCi0gICAgYm9vbCBtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0Owot
ICAgIFVwZGF0ZUZsYWcgbV9wZW5kaW5nVXBkYXRlVHlwZTsKLQotICAgIHR5cGVkZWYgTGlzdEhh
c2hTZXQ8Tm9kZSo+IFN0eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDsKLSAgICBTdHlsZVNo
ZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXM7Ci0KLSAg
ICBTdHJpbmcgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZTsKLSAgICBTdHJpbmcgbV9zZWxl
Y3RlZFN0eWxlc2hlZXRTZXROYW1lOwotCi0gICAgYm9vbCBtX3VzZXNGaXJzdExpbmVSdWxlczsK
LSAgICBib29sIG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXM7Ci0gICAgYm9vbCBtX3VzZXNSZW1Vbml0
czsKLSAgICBib29sIG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eTsKLQotICAgIFRpbWVyIG1f
c3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lcjsKLX07Ci0KLX0KLQotI2VuZGlmCi0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRzLmNwcAkocmV2aXNpb24gMTkw
MDc0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bi5jcHA6MTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8p
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC0yMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgor
CisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisj
aW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
KyNpbmNsdWRlICJTVkdTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2lu
Y2x1ZGUgIlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisjaW5jbHVkZSAiU3R5bGVT
aGVldExpc3QuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCIKKyNpbmNsdWRlICJVc2VyU3R5bGVTaGVldC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9u
czsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK0RvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb246OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQor
ICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fcGVuZGluZ1N0eWxlc2hlZXRzKDAp
CisgICAgLCBtX2luamVjdGVkU3R5bGVTaGVldENhY2hlVmFsaWQoZmFsc2UpCisgICAgLCBtX2hh
ZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0KGZhbHNlKQorICAgICwgbV9wZW5kaW5nVXBkYXRlVHlw
ZShOb1VwZGF0ZSkKKyAgICAsIG1fdXNlc0ZpcnN0TGluZVJ1bGVzKGZhbHNlKQorICAgICwgbV91
c2VzRmlyc3RMZXR0ZXJSdWxlcyhmYWxzZSkKKyAgICAsIG1fdXNlc1JlbVVuaXRzKGZhbHNlKQor
ICAgICwgbV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KGZhbHNlKQorICAgICwgbV9zdHlsZVJl
c29sdmVyQ2hhbmdlZFRpbWVyKCp0aGlzLCAmRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6
c3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lckZpcmVkKQoreworfQorCit2b2lkIERvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb246OmNvbWJpbmVDU1NGZWF0dXJlRmxhZ3MoKQoreworICAgIC8vIERl
bGF5IHJlc2V0dGluZyB0aGUgZmxhZ3MgdW50aWwgYWZ0ZXIgbmV4dCBzdHlsZSByZWNhbGMgc2lu
Y2UgdW5hcHBseWluZyB0aGUgc3R5bGUgbWF5IG5vdCB3b3JrIHdpdGhvdXQgdGhlc2Ugc2V0ICh0
aGlzIGlzIHRydWUgYXQgbGVhc3Qgd2l0aCBiZWZvcmUvYWZ0ZXIpLgorICAgIGNvbnN0IFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIo
KTsKKyAgICBtX3VzZXNGaXJzdExpbmVSdWxlcyA9IG1fdXNlc0ZpcnN0TGluZVJ1bGVzIHx8IHN0
eWxlUmVzb2x2ZXIudXNlc0ZpcnN0TGluZVJ1bGVzKCk7CisgICAgbV91c2VzRmlyc3RMZXR0ZXJS
dWxlcyA9IG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXMgfHwgc3R5bGVSZXNvbHZlci51c2VzRmlyc3RM
ZXR0ZXJSdWxlcygpOworfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnJl
c2V0Q1NTRmVhdHVyZUZsYWdzKCkKK3sKKyAgICBjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyID0gbV9kb2N1bWVudC5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CisgICAgbV91c2VzRmly
c3RMaW5lUnVsZXMgPSBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExpbmVSdWxlcygpOworICAgIG1f
dXNlc0ZpcnN0TGV0dGVyUnVsZXMgPSBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExldHRlclJ1bGVz
KCk7Cit9CisKK0NTU1N0eWxlU2hlZXQqIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnBh
Z2VVc2VyU2hlZXQoKQoreworICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQpCisgICAgICAgIHJldHVy
biBtX3BhZ2VVc2VyU2hlZXQuZ2V0KCk7CisgICAgCisgICAgUGFnZSogb3duaW5nUGFnZSA9IG1f
ZG9jdW1lbnQucGFnZSgpOworICAgIGlmICghb3duaW5nUGFnZSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgCisgICAgU3RyaW5nIHVzZXJTaGVldFRleHQgPSBvd25pbmdQYWdlLT51c2VyU3R5bGVT
aGVldCgpOworICAgIGlmICh1c2VyU2hlZXRUZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgLy8gUGFyc2UgdGhlIHNoZWV0IGFuZCBjYWNoZSBpdC4KKyAgICBtX3Bh
Z2VVc2VyU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUobV9kb2N1bWVudCwgbV9k
b2N1bWVudC5zZXR0aW5ncygpLT51c2VyU3R5bGVTaGVldExvY2F0aW9uKCkpOworICAgIG1fcGFn
ZVVzZXJTaGVldC0+Y29udGVudHMoKS5zZXRJc1VzZXJTdHlsZVNoZWV0KHRydWUpOworICAgIG1f
cGFnZVVzZXJTaGVldC0+Y29udGVudHMoKS5wYXJzZVN0cmluZyh1c2VyU2hlZXRUZXh0KTsKKyAg
ICByZXR1cm4gbV9wYWdlVXNlclNoZWV0LmdldCgpOworfQorCit2b2lkIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb246OmNsZWFyUGFnZVVzZXJTaGVldCgpCit7CisgICAgaWYgKG1fcGFnZVVz
ZXJTaGVldCkgeworICAgICAgICBtX3BhZ2VVc2VyU2hlZXQgPSBudWxscHRyOworICAgICAgICBt
X2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOworICAgIH0K
K30KKwordm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVQYWdlVXNlclNo
ZWV0KCkKK3sKKyAgICBjbGVhclBhZ2VVc2VyU2hlZXQoKTsKKyAgICBpZiAocGFnZVVzZXJTaGVl
dCgpKQorICAgICAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxl
SW1tZWRpYXRlbHkpOworfQorCitjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYg
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6aW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSBj
b25zdAoreworICAgIHVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCk7CisgICAgcmV0dXJu
IG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHM7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWZQdHI8Q1NT
U3R5bGVTaGVldD4+JiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjppbmplY3RlZEF1dGhv
clN0eWxlU2hlZXRzKCkgY29uc3QKK3sKKyAgICB1cGRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNo
ZSgpOworICAgIHJldHVybiBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHM7Cit9CisKK3ZvaWQg
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2Fj
aGUoKSBjb25zdAoreworICAgIGlmIChtX2luamVjdGVkU3R5bGVTaGVldENhY2hlVmFsaWQpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2luamVjdGVkU3R5bGVTaGVldENhY2hlVmFsaWQgPSB0cnVl
OworICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuY2xlYXIoKTsKKyAgICBtX2luamVjdGVk
QXV0aG9yU3R5bGVTaGVldHMuY2xlYXIoKTsKKworICAgIFBhZ2UqIG93bmluZ1BhZ2UgPSBtX2Rv
Y3VtZW50LnBhZ2UoKTsKKyAgICBpZiAoIW93bmluZ1BhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbnN0IGF1dG8qIHVzZXJDb250ZW50Q29udHJvbGxlciA9IG93bmluZ1BhZ2UtPnVzZXJD
b250ZW50Q29udHJvbGxlcigpOworICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb25zdCBVc2VyU3R5bGVTaGVldE1hcCogdXNlclN0eWxlU2hl
ZXRzID0gdXNlckNvbnRlbnRDb250cm9sbGVyLT51c2VyU3R5bGVTaGVldHMoKTsKKyAgICBpZiAo
IXVzZXJTdHlsZVNoZWV0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBzdHls
ZVNoZWV0cyA6IHVzZXJTdHlsZVNoZWV0cy0+dmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBzaGVldCA6ICpzdHlsZVNoZWV0cykgeworICAgICAgICAgICAgaWYgKHNoZWV0LT5p
bmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYmIG1fZG9jdW1lbnQub3du
ZXJFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlm
ICghVXNlckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMobV9kb2N1bWVudC51cmwo
KSwgc2hlZXQtPndoaXRlbGlzdCgpLCBzaGVldC0+YmxhY2tsaXN0KCkpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZ3JvdXBT
aGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShjb25zdF9jYXN0PERvY3VtZW50Jj4o
bV9kb2N1bWVudCksIHNoZWV0LT51cmwoKSk7CisgICAgICAgICAgICBib29sIGlzVXNlclN0eWxl
U2hlZXQgPSBzaGVldC0+bGV2ZWwoKSA9PSBVc2VyU3R5bGVVc2VyTGV2ZWw7CisgICAgICAgICAg
ICBpZiAoaXNVc2VyU3R5bGVTaGVldCkKKyAgICAgICAgICAgICAgICBtX2luamVjdGVkVXNlclN0
eWxlU2hlZXRzLmFwcGVuZChncm91cFNoZWV0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHMuYXBwZW5kKGdyb3VwU2hlZXQpOwor
CisgICAgICAgICAgICBncm91cFNoZWV0LT5jb250ZW50cygpLnNldElzVXNlclN0eWxlU2hlZXQo
aXNVc2VyU3R5bGVTaGVldCk7CisgICAgICAgICAgICBncm91cFNoZWV0LT5jb250ZW50cygpLnBh
cnNlU3RyaW5nKHNoZWV0LT5zb3VyY2UoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVl
dENhY2hlKCkKK3sKKyAgICBpZiAoIW1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZCA9IGZhbHNl
OworICAgIGlmIChtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmlzRW1wdHkoKSAmJiBtX2luamVj
dGVkQXV0aG9yU3R5bGVTaGVldHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9k
b2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKK30KKwordm9p
ZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphZGRBdXRob3JTaGVldChSZWY8U3R5bGVT
aGVldENvbnRlbnRzPiYmIGF1dGhvclNoZWV0KQoreworICAgIEFTU0VSVCghYXV0aG9yU2hlZXQu
Z2V0KCkuaXNVc2VyU3R5bGVTaGVldCgpKTsKKyAgICBtX2F1dGhvclN0eWxlU2hlZXRzLmFwcGVu
ZChDU1NTdHlsZVNoZWV0OjpjcmVhdGUoV1RGOjptb3ZlKGF1dGhvclNoZWV0KSwgJm1fZG9jdW1l
bnQpKTsKKyAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxlSW1t
ZWRpYXRlbHkpOworfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFkZFVz
ZXJTaGVldChSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmIHVzZXJTaGVldCkKK3sKKyAgICBBU1NF
UlQodXNlclNoZWV0LmdldCgpLmlzVXNlclN0eWxlU2hlZXQoKSk7CisgICAgbV91c2VyU3R5bGVT
aGVldHMuYXBwZW5kKENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShXVEY6Om1vdmUodXNlclNoZWV0KSwg
Jm1fZG9jdW1lbnQpKTsKKyAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2Fs
Y1N0eWxlSW1tZWRpYXRlbHkpOworfQorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
K3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkRGlzcGxheU5vbmVTZWxlY3Rv
cihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIHVpbnQz
Ml90IHNlbGVjdG9ySUQpCit7CisgICAgYXV0byByZXN1bHQgPSBtX2NvbnRlbnRFeHRlbnNpb25T
ZWxlY3RvclNoZWV0cy5hZGQoaWRlbnRpZmllciwgbnVsbHB0cik7CisgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KSB7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBDb250ZW50RXh0
ZW5zaW9uU3R5bGVTaGVldDo6Y3JlYXRlKG1fZG9jdW1lbnQpOworICAgICAgICBtX3VzZXJTdHls
ZVNoZWV0cy5hcHBlbmQoJnJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnN0eWxlU2hlZXQoKSk7Cisg
ICAgfQorCisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkRGlzcGxheU5vbmVTZWxlY3Rv
cihzZWxlY3Rvciwgc2VsZWN0b3JJRCk7CisgICAgbV9zdHlsZVJlc29sdmVyQ2hhbmdlZFRpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
OjptYXliZUFkZENvbnRlbnRFeHRlbnNpb25TaGVldChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIs
IFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQpCit7CisgICAgQVNTRVJUKHNoZWV0LmlzVXNlclN0
eWxlU2hlZXQoKSk7CisKKyAgICBpZiAobV9jb250ZW50RXh0ZW5zaW9uU2hlZXRzLmNvbnRhaW5z
KGlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWY8Q1NTU3R5bGVTaGVldD4g
Y3NzU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc2hlZXQsICZtX2RvY3VtZW50KTsKKyAg
ICBtX2NvbnRlbnRFeHRlbnNpb25TaGVldHMuc2V0KGlkZW50aWZpZXIsICZjc3NTaGVldC5nZXQo
KSk7CisgICAgbV91c2VyU3R5bGVTaGVldHMuYXBwZW5kKGFkb3B0UmVmKGNzc1NoZWV0LmxlYWtS
ZWYoKSkpOworICAgIG1fc3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lci5zdGFydE9uZVNob3QoMCk7
Cit9CisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKwordm9pZCBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpzdHlsZVJlc29sdmVyQ2hhbmdlZFRpbWVyRmlyZWQoKQor
eworICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlh
dGVseSk7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhIHRvcC1sZXZl
bCBzdHlsZXNoZWV0IGhhcyBmaW5pc2hlZCBsb2FkaW5nLgordm9pZCBEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjpyZW1vdmVQZW5kaW5nU2hlZXQoUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZp
Y2F0aW9uVHlwZSBub3RpZmljYXRpb24pCit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGtuZXcgdGhp
cyBzaGVldCB3YXMgcGVuZGluZywgYW5kIHRoYXQgb3VyIGNvdW50IGlzbid0IG91dCBvZiBzeW5j
LgorICAgIEFTU0VSVChtX3BlbmRpbmdTdHlsZXNoZWV0cyA+IDApOworCisgICAgbV9wZW5kaW5n
U3R5bGVzaGVldHMtLTsKKyAgICAKKyNpZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5H
CisgICAgaWYgKCFvd25lckVsZW1lbnQoKSkKKyAgICAgICAgcHJpbnRmKCJTdHlsZXNoZWV0IGxv
YWRlZCBhdCB0aW1lICVkLiAlZCBzdHlsZXNoZWV0cyBzdGlsbCByZW1haW4uXG4iLCBlbGFwc2Vk
VGltZSgpLCBtX3BlbmRpbmdTdHlsZXNoZWV0cyk7CisjZW5kaWYKKworICAgIGlmIChtX3BlbmRp
bmdTdHlsZXNoZWV0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG5vdGlmaWNhdGlvbiA9
PSBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlMYXRlcikgeworICAgICAgICBtX2RvY3VtZW50LnNl
dE5lZWRzTm90aWZ5UmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBtX2RvY3VtZW50LmRpZFJlbW92ZUFsbFBlbmRpbmdTdHlsZXNo
ZWV0KCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkU3R5bGVT
aGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7Cisg
ICAgaWYgKCFub2RlLmluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8v
IFVudGlsIHRoZSA8Ym9keT4gZXhpc3RzLCB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gY29tcGFy
ZSBkb2N1bWVudCBwb3NpdGlvbnMsCisgICAgLy8gc2luY2Ugc3R5bGVzIG91dHNpZGUgb2YgdGhl
IGJvZHkgYW5kIGhlYWQgY29udGludWUgdG8gYmUgc2h1bnRlZCBpbnRvIHRoZSBoZWFkCisgICAg
Ly8gKGFuZCB0aHVzIGNhbiBzaGlmdCB0byBlbmQgdXAgYmVmb3JlIGR5bmFtaWNhbGx5IGFkZGVk
IERPTSBjb250ZW50IHRoYXQgaXMgYWxzbworICAgIC8vIG91dHNpZGUgdGhlIGJvZHkpLgorICAg
IGlmICgoY3JlYXRlZEJ5UGFyc2VyICYmIG1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKSkgfHwg
bV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fc3R5bGVT
aGVldENhbmRpZGF0ZU5vZGVzLmFkZCgmbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBEZXRlcm1pbmUgYW4gYXBwcm9wcmlhdGUgaW5zZXJ0aW9uIHBvaW50LgorICAgIFN0
eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDo6aXRlcmF0b3IgYmVnaW4gPSBtX3N0eWxlU2hl
ZXRDYW5kaWRhdGVOb2Rlcy5iZWdpbigpOworICAgIFN0eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFz
aFNldDo6aXRlcmF0b3IgZW5kID0gbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuZW5kKCk7Cisg
ICAgU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0OjppdGVyYXRvciBpdCA9IGVuZDsKKyAg
ICBOb2RlKiBmb2xsb3dpbmdOb2RlID0gMDsKKyAgICBkbyB7CisgICAgICAgIC0taXQ7CisgICAg
ICAgIE5vZGUqIG4gPSAqaXQ7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHBvc2l0aW9uID0gbi0+
Y29tcGFyZURvY3VtZW50UG9zaXRpb24oJm5vZGUpOworICAgICAgICBpZiAocG9zaXRpb24gPT0g
Tm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSB7CisgICAgICAgICAgICBtX3N0eWxl
U2hlZXRDYW5kaWRhdGVOb2Rlcy5pbnNlcnRCZWZvcmUoZm9sbG93aW5nTm9kZSwgJm5vZGUpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvbGxvd2luZ05vZGUgPSBu
OworICAgIH0gd2hpbGUgKGl0ICE9IGJlZ2luKTsKKyAgICAKKyAgICBtX3N0eWxlU2hlZXRDYW5k
aWRhdGVOb2Rlcy5pbnNlcnRCZWZvcmUoZm9sbG93aW5nTm9kZSwgJm5vZGUpOworfQorCit2b2lk
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVO
b2RlKE5vZGUmIG5vZGUpCit7CisgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMucmVtb3Zl
KCZub2RlKTsKK30KKwordm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZWN0
QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mIHNoZWV0cykKK3sK
KyAgICBpZiAobV9kb2N1bWVudC5zZXR0aW5ncygpICYmICFtX2RvY3VtZW50LnNldHRpbmdzKCkt
PmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZv
ciAoYXV0byYgbm9kZSA6IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzKSB7CisgICAgICAgIFN0
eWxlU2hlZXQqIHNoZWV0ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGlzPFByb2Nlc3NpbmdJbnN0
cnVjdGlvbj4oKm5vZGUpKSB7CisgICAgICAgICAgICAvLyBQcm9jZXNzaW5nIGluc3RydWN0aW9u
IChYTUwgZG9jdW1lbnRzIG9ubHkpLgorICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBs
aW5raW5nIHRvIGVtYmVkZGVkIENTUyBzdHlsZXNoZWV0cywgc2VlIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkyODE+IGZvciBkaXNjdXNzaW9uLgorICAgICAgICAg
ICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uJiBwaSA9IGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVj
dGlvbj4oKm5vZGUpOworICAgICAgICAgICAgc2hlZXQgPSBwaS5zaGVldCgpOworI2lmIEVOQUJM
RShYU0xUKQorICAgICAgICAgICAgLy8gRG9uJ3QgYXBwbHkgWFNMIHRyYW5zZm9ybXMgdG8gYWxy
ZWFkeSB0cmFuc2Zvcm1lZCBkb2N1bWVudHMgLS0gPHJkYXI6Ly9wcm9ibGVtLzQxMzI4MDY+Cisg
ICAgICAgICAgICBpZiAocGkuaXNYU0woKSAmJiAhbV9kb2N1bWVudC50cmFuc2Zvcm1Tb3VyY2VE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYXBwbHkgWFNMIHRyYW5zZm9y
bXMgdW50aWwgbG9hZGluZyBpcyBmaW5pc2hlZC4KKyAgICAgICAgICAgICAgICBpZiAoIW1fZG9j
dW1lbnQucGFyc2luZygpKQorICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LmFwcGx5WFNM
VHJhbnNmb3JtKCZwaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
I2VuZGlmCisgICAgICAgIH0gZWxzZSBpZiAoaXM8SFRNTExpbmtFbGVtZW50Pigqbm9kZSkgfHwg
aXM8SFRNTFN0eWxlRWxlbWVudD4oKm5vZGUpIHx8IGlzPFNWR1N0eWxlRWxlbWVudD4oKm5vZGUp
KSB7CisgICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5v
ZGUpOworICAgICAgICAgICAgQXRvbWljU3RyaW5nIHRpdGxlID0gZWxlbWVudC5mYXN0R2V0QXR0
cmlidXRlKHRpdGxlQXR0cik7CisgICAgICAgICAgICBib29sIGVuYWJsZWRWaWFTY3JpcHQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGlmIChpczxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gPExJTks+IGVsZW1lbnQKKyAgICAgICAgICAgICAgICBIVE1MTGlu
a0VsZW1lbnQmIGxpbmtFbGVtZW50ID0gZG93bmNhc3Q8SFRNTExpbmtFbGVtZW50PihlbGVtZW50
KTsKKyAgICAgICAgICAgICAgICBpZiAobGlua0VsZW1lbnQuaXNEaXNhYmxlZCgpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBlbmFibGVkVmlhU2NyaXB0
ID0gbGlua0VsZW1lbnQuaXNFbmFibGVkVmlhU2NyaXB0KCk7CisgICAgICAgICAgICAgICAgaWYg
KGxpbmtFbGVtZW50LnN0eWxlU2hlZXRJc0xvYWRpbmcoKSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBpdCBpcyBsb2FkaW5nIGJ1dCB3ZSBzaG91bGQgc3RpbGwgZGVjaWRlIHdoaWNoIHN0eWxl
IHNoZWV0IHNldCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmFibGVkVmlhU2Ny
aXB0ICYmICF0aXRsZS5pc0VtcHR5KCkgJiYgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGlua0VsZW1lbnQuZmFz
dEdldEF0dHJpYnV0ZShyZWxBdHRyKS5jb250YWlucygiYWx0ZXJuYXRlIikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lID0gdGl0bGU7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1l
ID0gdGl0bGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICghbGlua0VsZW1lbnQuc2hlZXQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgdGl0bGUgPSBudWxsQXRvbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEdldCB0
aGUgY3VycmVudCBwcmVmZXJyZWQgc3R5bGVzZXQuIFRoaXMgaXMgdGhlCisgICAgICAgICAgICAv
LyBzZXQgb2Ygc2hlZXRzIHRoYXQgd2lsbCBiZSBlbmFibGVkLgorICAgICAgICAgICAgaWYgKGlz
PFNWR1N0eWxlRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgICAgICAgICAgc2hlZXQgPSBkb3du
Y2FzdDxTVkdTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CisgICAgICAgICAgICBlbHNl
IGlmIChpczxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHNoZWV0
ID0gZG93bmNhc3Q8SFRNTExpbmtFbGVtZW50PihlbGVtZW50KS5zaGVldCgpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHNoZWV0ID0gZG93bmNhc3Q8SFRNTFN0eWxlRWxlbWVu
dD4oZWxlbWVudCkuc2hlZXQoKTsKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlz
IHNoZWV0IGJlbG9uZ3MgdG8gYSBzdHlsZXNldAorICAgICAgICAgICAgLy8gKHRodXMgbWFraW5n
IGl0IFBSRUZFUlJFRCBvciBBTFRFUk5BVEUgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIC8vIFBF
UlNJU1RFTlQpLgorICAgICAgICAgICAgYXV0byYgcmVsID0gZWxlbWVudC5mYXN0R2V0QXR0cmli
dXRlKHJlbEF0dHIpOworICAgICAgICAgICAgaWYgKCFlbmFibGVkVmlhU2NyaXB0ICYmICF0aXRs
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBZZXMsIHdlIGhhdmUgYSB0aXRsZS4K
KyAgICAgICAgICAgICAgICBpZiAobV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm8gcHJlZmVycmVkIHNldCBoYXMgYmVlbiBl
c3RhYmxpc2hlZC4gSWYKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgYXJlIE5PVCBhbiBhbHRl
cm5hdGUgc2hlZXQsIHRoZW4gZXN0YWJsaXNoCisgICAgICAgICAgICAgICAgICAgIC8vIHVzIGFz
IHRoZSBwcmVmZXJyZWQgc2V0LiBPdGhlcndpc2UsIGp1c3QgaWdub3JlCisgICAgICAgICAgICAg
ICAgICAgIC8vIHRoaXMgc2hlZXQuCisgICAgICAgICAgICAgICAgICAgIGlmIChpczxIVE1MU3R5
bGVFbGVtZW50PihlbGVtZW50KSB8fCAhcmVsLmNvbnRhaW5zKCJhbHRlcm5hdGUiKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUgPSBtX3NlbGVj
dGVkU3R5bGVzaGVldFNldE5hbWUgPSB0aXRsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKHRpdGxlICE9IG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUpCisgICAg
ICAgICAgICAgICAgICAgIHNoZWV0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHJlbC5jb250YWlucygiYWx0ZXJuYXRlIikgJiYgdGl0bGUuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIHNoZWV0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
c2hlZXQpCisgICAgICAgICAgICBzaGVldHMuYXBwZW5kKHNoZWV0KTsKKyAgICB9Cit9CisKK3Zv
aWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2Uo
VXBkYXRlRmxhZyB1cGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
PiYgbmV3U3R5bGVzaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlJiBzdHlsZVJlc29sdmVy
VXBkYXRlVHlwZSwgYm9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpCit7CisgICAgc3R5bGVS
ZXNvbHZlclVwZGF0ZVR5cGUgPSBSZWNvbnN0cnVjdDsKKyAgICByZXF1aXJlc0Z1bGxTdHlsZVJl
Y2FsYyA9IHRydWU7CisgICAgCisgICAgLy8gU3R5bGVzaGVldHMgb2YgPHN0eWxlPiBlbGVtZW50
cyB0aGF0IEBpbXBvcnQgc3R5bGVzaGVldHMgYXJlIGFjdGl2ZSBidXQgbG9hZGluZy4gV2UgbmVl
ZCB0byB0cmlnZ2VyIGEgZnVsbCByZWNhbGMgd2hlbiBzdWNoIGxvYWRzIGFyZSBkb25lLgorICAg
IGJvb2wgaGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBu
ZXdTdHlsZXNoZWV0Q291bnQgPSBuZXdTdHlsZXNoZWV0cy5zaXplKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG5ld1N0eWxlc2hlZXRDb3VudDsgKytpKSB7CisgICAgICAgIGlmIChu
ZXdTdHlsZXNoZWV0c1tpXS0+aXNMb2FkaW5nKCkpCisgICAgICAgICAgICBoYXNBY3RpdmVMb2Fk
aW5nU3R5bGVzaGVldCA9IHRydWU7CisgICAgfQorICAgIGlmIChtX2hhZEFjdGl2ZUxvYWRpbmdT
dHlsZXNoZWV0ICYmICFoYXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCkgeworICAgICAgICBtX2hh
ZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IGhhc0FjdGl2ZUxvYWRpbmdTdHls
ZXNoZWV0OworCisgICAgaWYgKHVwZGF0ZUZsYWcgIT0gT3B0aW1pemVkVXBkYXRlKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpKQor
ICAgICAgICByZXR1cm47CisgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9ICptX2Rv
Y3VtZW50LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpOworCisgICAgLy8gRmluZCBvdXQgd2hpY2gg
c3R5bGVzaGVldHMgYXJlIG5ldy4KKyAgICB1bnNpZ25lZCBvbGRTdHlsZXNoZWV0Q291bnQgPSBt
X2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzLnNpemUoKTsKKyAgICBpZiAobmV3U3R5bGVzaGVldENv
dW50IDwgb2xkU3R5bGVzaGVldENvdW50KQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPFN0
eWxlU2hlZXRDb250ZW50cyo+IGFkZGVkU2hlZXRzOworICAgIHVuc2lnbmVkIG5ld0luZGV4ID0g
MDsKKyAgICBmb3IgKHVuc2lnbmVkIG9sZEluZGV4ID0gMDsgb2xkSW5kZXggPCBvbGRTdHlsZXNo
ZWV0Q291bnQ7ICsrb2xkSW5kZXgpIHsKKyAgICAgICAgaWYgKG5ld0luZGV4ID49IG5ld1N0eWxl
c2hlZXRDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2hpbGUgKG1fYWN0aXZl
QXV0aG9yU3R5bGVTaGVldHNbb2xkSW5kZXhdICE9IG5ld1N0eWxlc2hlZXRzW25ld0luZGV4XSkg
eworICAgICAgICAgICAgYWRkZWRTaGVldHMuYXBwZW5kKCZuZXdTdHlsZXNoZWV0c1tuZXdJbmRl
eF0tPmNvbnRlbnRzKCkpOworICAgICAgICAgICAgKytuZXdJbmRleDsKKyAgICAgICAgICAgIGlm
IChuZXdJbmRleCA9PSBuZXdTdHlsZXNoZWV0Q291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgICsrbmV3SW5kZXg7CisgICAgfQorICAgIGJvb2wgaGFzSW5z
ZXJ0aW9ucyA9ICFhZGRlZFNoZWV0cy5pc0VtcHR5KCk7CisgICAgd2hpbGUgKG5ld0luZGV4IDwg
bmV3U3R5bGVzaGVldENvdW50KSB7CisgICAgICAgIGFkZGVkU2hlZXRzLmFwcGVuZCgmbmV3U3R5
bGVzaGVldHNbbmV3SW5kZXhdLT5jb250ZW50cygpKTsKKyAgICAgICAgKytuZXdJbmRleDsKKyAg
ICB9CisgICAgLy8gSWYgYWxsIG5ldyBzaGVldHMgd2VyZSBhZGRlZCBhdCB0aGUgZW5kIG9mIHRo
ZSBsaXN0IHdlIGNhbiBqdXN0IGFkZCB0aGVtIHRvIGV4aXN0aW5nIFN0eWxlUmVzb2x2ZXIuCisg
ICAgLy8gSWYgdGhlcmUgd2VyZSBpbnNlcnRpb25zIHdlIG5lZWQgdG8gcmUtYWRkIGFsbCB0aGUg
c3R5bGVzaGVldHMgc28gcnVsZXMgYXJlIG9yZGVyZWQgY29ycmVjdGx5LgorICAgIHN0eWxlUmVz
b2x2ZXJVcGRhdGVUeXBlID0gaGFzSW5zZXJ0aW9ucyA/IFJlc2V0IDogQWRkaXRpdmU7CisKKyAg
ICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBwYXJzaW5nIHRoZSBib2R5IGFuZCBzbyBtYXkgaGF2ZSBz
aWduaWZpY2FudCBhbW91bnQgb2YgZWxlbWVudHMsIHB1dCBzb21lIGVmZm9ydCBpbnRvIHRyeWlu
ZyB0byBhdm9pZCBzdHlsZSByZWNhbGNzLgorICAgIGlmICghbV9kb2N1bWVudC5ib2R5T3JGcmFt
ZXNldCgpIHx8IG1fZG9jdW1lbnQuaGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpKQorICAg
ICAgICByZXR1cm47CisgICAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyBpbnZhbGlkYXRpb25B
bmFseXNpcyhhZGRlZFNoZWV0cywgc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5RXZhbHVhdG9yKCkp
OworICAgIGlmIChpbnZhbGlkYXRpb25BbmFseXNpcy5kaXJ0aWVzQWxsU3R5bGUoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGludmFsaWRhdGlvbkFuYWx5c2lzLmludmFsaWRhdGVTdHlsZShtX2Rv
Y3VtZW50KTsKKyAgICByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyA9IGZhbHNlOworfQorCitzdGF0
aWMgdm9pZCBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+PiYgcmVzdWx0LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+
PiYgc2hlZXRzKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaGVldHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKCFpczxDU1NTdHlsZVNoZWV0Pigqc2hlZXRzW2ldKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBDU1NTdHlsZVNoZWV0JiBzaGVldCA9IGRvd25j
YXN0PENTU1N0eWxlU2hlZXQ+KCpzaGVldHNbaV0pOworICAgICAgICBpZiAoc2hlZXQuZGlzYWJs
ZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIXNoZWV0Lmxlbmd0aCgp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJnNoZWV0KTsK
KyAgICB9Cit9CisKK2Jvb2wgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlQWN0
aXZlU3R5bGVTaGVldHMoVXBkYXRlRmxhZyB1cGRhdGVGbGFnKQoreworICAgIGlmIChtX2RvY3Vt
ZW50LmluU3R5bGVSZWNhbGMoKSkgeworICAgICAgICAvLyBTVkcgPHVzZT4gZWxlbWVudCBtYXkg
bWFuYWdlIHRvIGludmFsaWRhdGUgc3R5bGUgc2VsZWN0b3IgaW4gdGhlIG1pZGRsZSBvZiBhIHN0
eWxlIHJlY2FsYy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0MzQ0CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiBT
VkcgYW5kIHRoZSBjYWxsIHNpdGUgcmVwbGFjZWQgYnkgQVNTRVJUKCFtX2luU3R5bGVSZWNhbGMp
LgorICAgICAgICBtX3BlbmRpbmdVcGRhdGVUeXBlID0gRnVsbFVwZGF0ZTsKKyAgICAgICAgbV9k
b2N1bWVudC5zY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIH0KKyAgICBpZiAoIW1fZG9jdW1lbnQuaGFzTGl2aW5nUmVuZGVyVHJlZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiBh
Y3RpdmVTdHlsZVNoZWV0czsKKyAgICBjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoYWN0aXZlU3R5
bGVTaGVldHMpOworCisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gYWN0aXZlQ1NT
U3R5bGVTaGVldHM7CisgICAgYWN0aXZlQ1NTU3R5bGVTaGVldHMuYXBwZW5kVmVjdG9yKGluamVj
dGVkQXV0aG9yU3R5bGVTaGVldHMoKSk7CisgICAgYWN0aXZlQ1NTU3R5bGVTaGVldHMuYXBwZW5k
VmVjdG9yKGRvY3VtZW50QXV0aG9yU3R5bGVTaGVldHMoKSk7CisgICAgZmlsdGVyRW5hYmxlZE5v
bmVtcHR5Q1NTU3R5bGVTaGVldHMoYWN0aXZlQ1NTU3R5bGVTaGVldHMsIGFjdGl2ZVN0eWxlU2hl
ZXRzKTsKKworICAgIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHN0eWxlUmVzb2x2ZXJVcGRhdGVU
eXBlOworICAgIGJvb2wgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGM7CisgICAgYW5hbHl6ZVN0eWxl
U2hlZXRDaGFuZ2UodXBkYXRlRmxhZywgYWN0aXZlQ1NTU3R5bGVTaGVldHMsIHN0eWxlUmVzb2x2
ZXJVcGRhdGVUeXBlLCByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyk7CisKKyAgICBpZiAoc3R5bGVS
ZXNvbHZlclVwZGF0ZVR5cGUgPT0gUmVjb25zdHJ1Y3QpCisgICAgICAgIG1fZG9jdW1lbnQuY2xl
YXJTdHlsZVJlc29sdmVyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKKyAgICAgICAg
aWYgKHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID09IFJlc2V0KSB7CisgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLnJ1bGVTZXRzKCkucmVzZXRBdXRob3JTdHlsZSgpOworICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cygwLCBhY3RpdmVDU1NTdHlsZVNoZWV0
cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc3R5bGVSZXNvbHZlclVw
ZGF0ZVR5cGUgPT0gQWRkaXRpdmUpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5hcHBlbmRB
dXRob3JTdHlsZVNoZWV0cyhtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzLnNpemUoKSwgYWN0aXZl
Q1NTU3R5bGVTaGVldHMpOworICAgICAgICB9CisgICAgICAgIHJlc2V0Q1NTRmVhdHVyZUZsYWdz
KCk7CisgICAgfQorCisgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0
TG9va3VwID0gbnVsbHB0cjsKKyAgICBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzLnN3YXAoYWN0
aXZlQ1NTU3R5bGVTaGVldHMpOworICAgIG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdC5z
d2FwKGFjdGl2ZVN0eWxlU2hlZXRzKTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
YWN0aXZlU3R5bGVTaGVldHNVcGRhdGVkKG1fZG9jdW1lbnQpOworCisgICAgZm9yIChjb25zdCBh
dXRvJiBzaGVldCA6IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMpIHsKKyAgICAgICAgaWYgKHNo
ZWV0LT5jb250ZW50cygpLnVzZXNSZW1Vbml0cygpKQorICAgICAgICAgICAgbV91c2VzUmVtVW5p
dHMgPSB0cnVlOworICAgICAgICBpZiAoc2hlZXQtPmNvbnRlbnRzKCkudXNlc1N0eWxlQmFzZWRF
ZGl0YWJpbGl0eSgpKQorICAgICAgICAgICAgbV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5ID0g
dHJ1ZTsKKyAgICB9CisgICAgbV9wZW5kaW5nVXBkYXRlVHlwZSA9IE5vVXBkYXRlOworCisgICAg
cmV0dXJuIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjOworfQorCitjb25zdCBWZWN0b3I8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+PiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphY3RpdmVTdHls
ZVNoZWV0c0Zvckluc3BlY3RvcigpIGNvbnN0Cit7CisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0Pj4gcmVzdWx0OworCisgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihpbmplY3RlZEF1dGhv
clN0eWxlU2hlZXRzKCkpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZG9jdW1lbnRBdXRob3JT
dHlsZVNoZWV0cygpKTsKKworICAgIGZvciAoYXV0byYgc3R5bGVTaGVldCA6IG1fc3R5bGVTaGVl
dHNGb3JTdHlsZVNoZWV0TGlzdCkgeworICAgICAgICBpZiAoIWlzPENTU1N0eWxlU2hlZXQ+KCpz
dHlsZVNoZWV0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENTU1N0eWxlU2hl
ZXQmIHNoZWV0ID0gZG93bmNhc3Q8Q1NTU3R5bGVTaGVldD4oKnN0eWxlU2hlZXQpOworICAgICAg
ICBpZiAoc2hlZXQuZGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IHJlc3VsdC5hcHBlbmQoJnNoZWV0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citib29sIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFjdGl2ZVN0eWxlU2hlZXRzQ29u
dGFpbnMoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQpIGNvbnN0Cit7CisgICAgaWYgKCFtX3dl
YWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXApIHsKKyAgICAgICAgbV93
ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwID0gc3RkOjptYWtlX3Vu
aXF1ZTxIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4oKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAt
PmFkZChtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzW2ldLmdldCgpKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+Y29udGFp
bnMoc2hlZXQpOworfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmRldGFj
aEZyb21Eb2N1bWVudCgpCit7CisgICAgaWYgKG1fcGFnZVVzZXJTaGVldCkKKyAgICAgICAgbV9w
YWdlVXNlclNoZWV0LT5kZXRhY2hGcm9tRG9jdW1lbnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0c1tpXS0+ZGV0YWNoRnJvbURvY3VtZW50KCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzW2ldLT5kZXRhY2hG
cm9tRG9jdW1lbnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91c2VyU3R5bGVT
aGVldHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzW2ldLT5kZXRhY2hG
cm9tRG9jdW1lbnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hdXRob3JTdHls
ZVNoZWV0cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9hdXRob3JTdHlsZVNoZWV0c1tpXS0+ZGV0
YWNoRnJvbURvY3VtZW50KCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRl
bnNpb25TdHlsZVNoZWV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V4
dGVuc2lvblN0eWxlU2hlZXRzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcg
QEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3Jn
KQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDA5LCAyMDExLTIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKQEAgLTI2LDcgKzI2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgorI2luY2x1
ZGUgIkV4dGVuc2lvblN0eWxlU2hlZXRzLmgiCiAKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0Lmgi
CiAjaW5jbHVkZSAiRWxlbWVudC5oIgpAQCAtNTMsMzYgKzUzLDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9uczsKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLURvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OkRvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQorRXh0ZW5zaW9uU3R5bGVTaGVl
dHM6OkV4dGVuc2lvblN0eWxlU2hlZXRzKERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fZG9j
dW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX3BlbmRpbmdTdHlsZXNoZWV0cygwKQotICAgICwgbV9p
bmplY3RlZFN0eWxlU2hlZXRDYWNoZVZhbGlkKGZhbHNlKQotICAgICwgbV9oYWRBY3RpdmVMb2Fk
aW5nU3R5bGVzaGVldChmYWxzZSkKLSAgICAsIG1fcGVuZGluZ1VwZGF0ZVR5cGUoTm9VcGRhdGUp
Ci0gICAgLCBtX3VzZXNGaXJzdExpbmVSdWxlcyhmYWxzZSkKLSAgICAsIG1fdXNlc0ZpcnN0TGV0
dGVyUnVsZXMoZmFsc2UpCi0gICAgLCBtX3VzZXNSZW1Vbml0cyhmYWxzZSkKLSAgICAsIG1fdXNl
c1N0eWxlQmFzZWRFZGl0YWJpbGl0eShmYWxzZSkKLSAgICAsIG1fc3R5bGVSZXNvbHZlckNoYW5n
ZWRUaW1lcigqdGhpcywgJkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnN0eWxlUmVzb2x2
ZXJDaGFuZ2VkVGltZXJGaXJlZCkKKyAgICAsIG1fc3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lcigq
dGhpcywgJkV4dGVuc2lvblN0eWxlU2hlZXRzOjpzdHlsZVJlc29sdmVyQ2hhbmdlZFRpbWVyRmly
ZWQpCiB7CiB9CiAKLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y29tYmluZUNT
U0ZlYXR1cmVGbGFncygpCi17Ci0gICAgLy8gRGVsYXkgcmVzZXR0aW5nIHRoZSBmbGFncyB1bnRp
bCBhZnRlciBuZXh0IHN0eWxlIHJlY2FsYyBzaW5jZSB1bmFwcGx5aW5nIHRoZSBzdHlsZSBtYXkg
bm90IHdvcmsgd2l0aG91dCB0aGVzZSBzZXQgKHRoaXMgaXMgdHJ1ZSBhdCBsZWFzdCB3aXRoIGJl
Zm9yZS9hZnRlcikuCi0gICAgY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IG1f
ZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwotICAgIG1fdXNlc0ZpcnN0TGluZVJ1bGVz
ID0gbV91c2VzRmlyc3RMaW5lUnVsZXMgfHwgc3R5bGVSZXNvbHZlci51c2VzRmlyc3RMaW5lUnVs
ZXMoKTsKLSAgICBtX3VzZXNGaXJzdExldHRlclJ1bGVzID0gbV91c2VzRmlyc3RMZXR0ZXJSdWxl
cyB8fCBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExldHRlclJ1bGVzKCk7Ci19Ci0KLXZvaWQgRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVzZXRDU1NGZWF0dXJlRmxhZ3MoKQotewotICAg
IGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0
eWxlUmVzb2x2ZXIoKTsKLSAgICBtX3VzZXNGaXJzdExpbmVSdWxlcyA9IHN0eWxlUmVzb2x2ZXIu
dXNlc0ZpcnN0TGluZVJ1bGVzKCk7Ci0gICAgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyA9IHN0eWxl
UmVzb2x2ZXIudXNlc0ZpcnN0TGV0dGVyUnVsZXMoKTsKLX0KLQotQ1NTU3R5bGVTaGVldCogRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cGFnZVVzZXJTaGVldCgpCitDU1NTdHlsZVNoZWV0
KiBFeHRlbnNpb25TdHlsZVNoZWV0czo6cGFnZVVzZXJTaGVldCgpCiB7CiAgICAgaWYgKG1fcGFn
ZVVzZXJTaGVldCkKICAgICAgICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKQEAgLTEw
Miw3ICs3OSw3IEBAIENTU1N0eWxlU2hlZXQqIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3QKICAg
ICByZXR1cm4gbV9wYWdlVXNlclNoZWV0LmdldCgpOwogfQogCi12b2lkIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb246OmNsZWFyUGFnZVVzZXJTaGVldCgpCit2b2lkIEV4dGVuc2lvblN0eWxl
U2hlZXRzOjpjbGVhclBhZ2VVc2VyU2hlZXQoKQogewogICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQp
IHsKICAgICAgICAgbV9wYWdlVXNlclNoZWV0ID0gbnVsbHB0cjsKQEAgLTExMCwyNiArODcsMjYg
QEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjbGVhcgogICAgIH0KIH0KIAot
dm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVQYWdlVXNlclNoZWV0KCkK
K3ZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKQogewogICAg
IGNsZWFyUGFnZVVzZXJTaGVldCgpOwogICAgIGlmIChwYWdlVXNlclNoZWV0KCkpCiAgICAgICAg
IG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7
CiB9CiAKLWNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uOjppbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpIGNvbnN0Citjb25zdCBW
ZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OmluamVj
dGVkVXNlclN0eWxlU2hlZXRzKCkgY29uc3QKIHsKICAgICB1cGRhdGVJbmplY3RlZFN0eWxlU2hl
ZXRDYWNoZSgpOwogICAgIHJldHVybiBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzOwogfQogCi1j
b25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6aW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0Citjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OmluamVjdGVkQXV0
aG9yU3R5bGVTaGVldHMoKSBjb25zdAogewogICAgIHVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENh
Y2hlKCk7CiAgICAgcmV0dXJuIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0czsKIH0KIAotdm9p
ZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVJbmplY3RlZFN0eWxlU2hlZXRD
YWNoZSgpIGNvbnN0Cit2b2lkIEV4dGVuc2lvblN0eWxlU2hlZXRzOjp1cGRhdGVJbmplY3RlZFN0
eWxlU2hlZXRDYWNoZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1faW5qZWN0ZWRTdHlsZVNoZWV0Q2Fj
aGVWYWxpZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcwLDcgKzE0Nyw3IEBAIHZvaWQgRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXQKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbjo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCkK
K3ZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRD
YWNoZSgpCiB7CiAgICAgaWYgKCFtX2luamVjdGVkU3R5bGVTaGVldENhY2hlVmFsaWQpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE4MCwyMiArMTU3LDIyIEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbjo6aW52YWwKICAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERl
ZmVyUmVjYWxjU3R5bGUpOwogfQogCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246
OmFkZEF1dGhvclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgYXV0aG9yU2hlZXQpCit2
b2lkIEV4dGVuc2lvblN0eWxlU2hlZXRzOjphZGRVc2VyU3R5bGVTaGVldChSZWY8U3R5bGVTaGVl
dENvbnRlbnRzPiYmIHVzZXJTaGVldCkKIHsKLSAgICBBU1NFUlQoIWF1dGhvclNoZWV0LmdldCgp
LmlzVXNlclN0eWxlU2hlZXQoKSk7Ci0gICAgbV9hdXRob3JTdHlsZVNoZWV0cy5hcHBlbmQoQ1NT
U3R5bGVTaGVldDo6Y3JlYXRlKFdURjo6bW92ZShhdXRob3JTaGVldCksICZtX2RvY3VtZW50KSk7
CisgICAgQVNTRVJUKHVzZXJTaGVldC5nZXQoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOworICAgIG1f
dXNlclN0eWxlU2hlZXRzLmFwcGVuZChDU1NTdHlsZVNoZWV0OjpjcmVhdGUoV1RGOjptb3ZlKHVz
ZXJTaGVldCksICZtX2RvY3VtZW50KSk7CiAgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hh
bmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAotdm9pZCBEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjphZGRVc2VyU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiB1c2Vy
U2hlZXQpCit2b2lkIEV4dGVuc2lvblN0eWxlU2hlZXRzOjphZGRBdXRob3JTdHlsZVNoZWV0Rm9y
VGVzdGluZyhSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmIGF1dGhvclNoZWV0KQogewotICAgIEFT
U0VSVCh1c2VyU2hlZXQuZ2V0KCkuaXNVc2VyU3R5bGVTaGVldCgpKTsKLSAgICBtX3VzZXJTdHls
ZVNoZWV0cy5hcHBlbmQoQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKFdURjo6bW92ZSh1c2VyU2hlZXQp
LCAmbV9kb2N1bWVudCkpOworICAgIEFTU0VSVCghYXV0aG9yU2hlZXQuZ2V0KCkuaXNVc2VyU3R5
bGVTaGVldCgpKTsKKyAgICBtX2F1dGhvclN0eWxlU2hlZXRzRm9yVGVzdGluZy5hcHBlbmQoQ1NT
U3R5bGVTaGVldDo6Y3JlYXRlKFdURjo6bW92ZShhdXRob3JTaGVldCksICZtX2RvY3VtZW50KSk7
CiAgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0
ZWx5KTsKIH0KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi12b2lkIERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246OmFkZERpc3BsYXlOb25lU2VsZWN0b3IoY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCB1aW50MzJfdCBzZWxlY3RvcklE
KQordm9pZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6YWRkRGlzcGxheU5vbmVTZWxlY3Rvcihjb25z
dCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIHVpbnQzMl90IHNl
bGVjdG9ySUQpCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX2NvbnRlbnRFeHRlbnNpb25TZWxlY3Rv
clNoZWV0cy5hZGQoaWRlbnRpZmllciwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KSB7CkBAIC0yMDcsNyArMTg0LDcgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uOjphZGREaQogICAgIG1fc3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lci5zdGFydE9uZVNob3Qo
MCk7CiB9CiAKLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6bWF5YmVBZGRDb250
ZW50RXh0ZW5zaW9uU2hlZXQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHlsZVNoZWV0Q29u
dGVudHMmIHNoZWV0KQordm9pZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6bWF5YmVBZGRDb250ZW50
RXh0ZW5zaW9uU2hlZXQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHlsZVNoZWV0Q29udGVu
dHMmIHNoZWV0KQogewogICAgIEFTU0VSVChzaGVldC5pc1VzZXJTdHlsZVNoZWV0KCkpOwogCkBA
IC0yMjEsMzI1ICsxOTgsMjMgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpt
YXliZQogfQogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKLXZvaWQgRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6c3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lckZpcmVk
KCkKK3ZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXJG
aXJlZCgpCiB7CiAgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHls
ZUltbWVkaWF0ZWx5KTsKIH0KIAotLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEg
dG9wLWxldmVsIHN0eWxlc2hlZXQgaGFzIGZpbmlzaGVkIGxvYWRpbmcuCi12b2lkIERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246OnJlbW92ZVBlbmRpbmdTaGVldChSZW1vdmVQZW5kaW5nU2hl
ZXROb3RpZmljYXRpb25UeXBlIG5vdGlmaWNhdGlvbikKLXsKLSAgICAvLyBNYWtlIHN1cmUgd2Ug
a25ldyB0aGlzIHNoZWV0IHdhcyBwZW5kaW5nLCBhbmQgdGhhdCBvdXIgY291bnQgaXNuJ3Qgb3V0
IG9mIHN5bmMuCi0gICAgQVNTRVJUKG1fcGVuZGluZ1N0eWxlc2hlZXRzID4gMCk7Ci0KLSAgICBt
X3BlbmRpbmdTdHlsZXNoZWV0cy0tOwotICAgIAotI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1ND
SEVEVUxJTkcKLSAgICBpZiAoIW93bmVyRWxlbWVudCgpKQotICAgICAgICBwcmludGYoIlN0eWxl
c2hlZXQgbG9hZGVkIGF0IHRpbWUgJWQuICVkIHN0eWxlc2hlZXRzIHN0aWxsIHJlbWFpbi5cbiIs
IGVsYXBzZWRUaW1lKCksIG1fcGVuZGluZ1N0eWxlc2hlZXRzKTsKLSNlbmRpZgotCi0gICAgaWYg
KG1fcGVuZGluZ1N0eWxlc2hlZXRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobm90aWZp
Y2F0aW9uID09IFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUxhdGVyKSB7Ci0gICAgICAgIG1fZG9j
dW1lbnQuc2V0TmVlZHNOb3RpZnlSZW1vdmVBbGxQZW5kaW5nU3R5bGVzaGVldCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fZG9jdW1lbnQuZGlkUmVtb3ZlQWxsUGVuZGlu
Z1N0eWxlc2hlZXQoKTsKLX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjph
ZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiBub2RlLCBib29sIGNyZWF0ZWRCeVBhcnNl
cikKLXsKLSAgICBpZiAoIW5vZGUuaW5Eb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgLy8gVW50aWwgdGhlIDxib2R5PiBleGlzdHMsIHdlIGhhdmUgbm8gY2hvaWNlIGJ1dCB0
byBjb21wYXJlIGRvY3VtZW50IHBvc2l0aW9ucywKLSAgICAvLyBzaW5jZSBzdHlsZXMgb3V0c2lk
ZSBvZiB0aGUgYm9keSBhbmQgaGVhZCBjb250aW51ZSB0byBiZSBzaHVudGVkIGludG8gdGhlIGhl
YWQKLSAgICAvLyAoYW5kIHRodXMgY2FuIHNoaWZ0IHRvIGVuZCB1cCBiZWZvcmUgZHluYW1pY2Fs
bHkgYWRkZWQgRE9NIGNvbnRlbnQgdGhhdCBpcyBhbHNvCi0gICAgLy8gb3V0c2lkZSB0aGUgYm9k
eSkuCi0gICAgaWYgKChjcmVhdGVkQnlQYXJzZXIgJiYgbV9kb2N1bWVudC5ib2R5T3JGcmFtZXNl
dCgpKSB8fCBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
bV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuYWRkKCZub2RlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIERldGVybWluZSBhbiBhcHByb3ByaWF0ZSBpbnNlcnRpb24gcG9pbnQu
Ci0gICAgU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0OjppdGVyYXRvciBiZWdpbiA9IG1f
c3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmJlZ2luKCk7Ci0gICAgU3R5bGVTaGVldENhbmRpZGF0
ZUxpc3RIYXNoU2V0OjppdGVyYXRvciBlbmQgPSBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5l
bmQoKTsKLSAgICBTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0g
ZW5kOwotICAgIE5vZGUqIGZvbGxvd2luZ05vZGUgPSAwOwotICAgIGRvIHsKLSAgICAgICAgLS1p
dDsKLSAgICAgICAgTm9kZSogbiA9ICppdDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9zaXRp
b24gPSBuLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbigmbm9kZSk7Ci0gICAgICAgIGlmIChwb3Np
dGlvbiA9PSBOb2RlOjpET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcpIHsKLSAgICAgICAgICAg
IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmluc2VydEJlZm9yZShmb2xsb3dpbmdOb2RlLCAm
bm9kZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZm9sbG93aW5n
Tm9kZSA9IG47Ci0gICAgfSB3aGlsZSAoaXQgIT0gYmVnaW4pOwotICAgIAotICAgIG1fc3R5bGVT
aGVldENhbmRpZGF0ZU5vZGVzLmluc2VydEJlZm9yZShmb2xsb3dpbmdOb2RlLCAmbm9kZSk7Ci19
Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVtb3ZlU3R5bGVTaGVldENh
bmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSkKLXsKLSAgICBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rl
cy5yZW1vdmUoJm5vZGUpOwotfQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246
OmNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hl
ZXRzKQotewotICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkgJiYgIW1fZG9jdW1lbnQuc2V0
dGluZ3MoKS0+YXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZm9yIChhdXRvJiBub2RlIDogbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMpIHsKLSAg
ICAgICAgU3R5bGVTaGVldCogc2hlZXQgPSBudWxscHRyOwotICAgICAgICBpZiAoaXM8UHJvY2Vz
c2luZ0luc3RydWN0aW9uPigqbm9kZSkpIHsKLSAgICAgICAgICAgIC8vIFByb2Nlc3NpbmcgaW5z
dHJ1Y3Rpb24gKFhNTCBkb2N1bWVudHMgb25seSkuCi0gICAgICAgICAgICAvLyBXZSBkb24ndCBz
dXBwb3J0IGxpbmtpbmcgdG8gZW1iZWRkZWQgQ1NTIHN0eWxlc2hlZXRzLCBzZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTI4MT4gZm9yIGRpc2N1c3Npb24uCi0g
ICAgICAgICAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIHBpID0gZG93bmNhc3Q8UHJvY2Vzc2lu
Z0luc3RydWN0aW9uPigqbm9kZSk7Ci0gICAgICAgICAgICBzaGVldCA9IHBpLnNoZWV0KCk7Ci0j
aWYgRU5BQkxFKFhTTFQpCi0gICAgICAgICAgICAvLyBEb24ndCBhcHBseSBYU0wgdHJhbnNmb3Jt
cyB0byBhbHJlYWR5IHRyYW5zZm9ybWVkIGRvY3VtZW50cyAtLSA8cmRhcjovL3Byb2JsZW0vNDEz
MjgwNj4KLSAgICAgICAgICAgIGlmIChwaS5pc1hTTCgpICYmICFtX2RvY3VtZW50LnRyYW5zZm9y
bVNvdXJjZURvY3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBhcHBseSBYU0wg
dHJhbnNmb3JtcyB1bnRpbCBsb2FkaW5nIGlzIGZpbmlzaGVkLgotICAgICAgICAgICAgICAgIGlm
ICghbV9kb2N1bWVudC5wYXJzaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQu
YXBwbHlYU0xUcmFuc2Zvcm0oJnBpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MTGlua0VsZW1lbnQ+KCpu
b2RlKSB8fCBpczxIVE1MU3R5bGVFbGVtZW50Pigqbm9kZSkgfHwgaXM8U1ZHU3R5bGVFbGVtZW50
Pigqbm9kZSkpIHsKLSAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVt
ZW50Pigqbm9kZSk7Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgdGl0bGUgPSBlbGVtZW50LmZh
c3RHZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKLSAgICAgICAgICAgIGJvb2wgZW5hYmxlZFZpYVNj
cmlwdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGlzPEhUTUxMaW5rRWxlbWVudD4oZWxlbWVu
dCkpIHsKLSAgICAgICAgICAgICAgICAvLyA8TElOSz4gZWxlbWVudAotICAgICAgICAgICAgICAg
IEhUTUxMaW5rRWxlbWVudCYgbGlua0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+
KGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChsaW5rRWxlbWVudC5pc0Rpc2FibGVkKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGVuYWJsZWRW
aWFTY3JpcHQgPSBsaW5rRWxlbWVudC5pc0VuYWJsZWRWaWFTY3JpcHQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAobGlua0VsZW1lbnQuc3R5bGVTaGVldElzTG9hZGluZygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIGl0IGlzIGxvYWRpbmcgYnV0IHdlIHNob3VsZCBzdGlsbCBkZWNpZGUgd2hp
Y2ggc3R5bGUgc2hlZXQgc2V0IHRvIHVzZQotICAgICAgICAgICAgICAgICAgICBpZiAoIWVuYWJs
ZWRWaWFTY3JpcHQgJiYgIXRpdGxlLmlzRW1wdHkoKSAmJiBtX3ByZWZlcnJlZFN0eWxlc2hlZXRT
ZXROYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaW5rRWxl
bWVudC5mYXN0R2V0QXR0cmlidXRlKHJlbEF0dHIpLmNvbnRhaW5zKCJhbHRlcm5hdGUiKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUg
PSB0aXRsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NlbGVjdGVkU3R5bGVzaGVl
dFNldE5hbWUgPSB0aXRsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFsaW5rRWxlbWVudC5zaGVldCgpKQotICAgICAgICAg
ICAgICAgICAgICB0aXRsZSA9IG51bGxBdG9tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ly8gR2V0IHRoZSBjdXJyZW50IHByZWZlcnJlZCBzdHlsZXNldC4gVGhpcyBpcyB0aGUKLSAgICAg
ICAgICAgIC8vIHNldCBvZiBzaGVldHMgdGhhdCB3aWxsIGJlIGVuYWJsZWQuCi0gICAgICAgICAg
ICBpZiAoaXM8U1ZHU3R5bGVFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgICAgICAgICBzaGVl
dCA9IGRvd25jYXN0PFNWR1N0eWxlRWxlbWVudD4oZWxlbWVudCkuc2hlZXQoKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGlzPEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCkpCi0gICAgICAgICAgICAg
ICAgc2hlZXQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2hlZXQgPSBkb3duY2FzdDxIVE1MU3R5
bGVFbGVtZW50PihlbGVtZW50KS5zaGVldCgpOwotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHRoaXMgc2hlZXQgYmVsb25ncyB0byBhIHN0eWxlc2V0Ci0gICAgICAgICAgICAvLyAodGh1
cyBtYWtpbmcgaXQgUFJFRkVSUkVEIG9yIEFMVEVSTkFURSByYXRoZXIgdGhhbgotICAgICAgICAg
ICAgLy8gUEVSU0lTVEVOVCkuCi0gICAgICAgICAgICBhdXRvJiByZWwgPSBlbGVtZW50LmZhc3RH
ZXRBdHRyaWJ1dGUocmVsQXR0cik7Ci0gICAgICAgICAgICBpZiAoIWVuYWJsZWRWaWFTY3JpcHQg
JiYgIXRpdGxlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIC8vIFllcywgd2UgaGF2ZSBh
IHRpdGxlLgotICAgICAgICAgICAgICAgIGlmIChtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1l
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBObyBwcmVmZXJyZWQgc2V0IGhh
cyBiZWVuIGVzdGFibGlzaGVkLiBJZgotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgTk9U
IGFuIGFsdGVybmF0ZSBzaGVldCwgdGhlbiBlc3RhYmxpc2gKLSAgICAgICAgICAgICAgICAgICAg
Ly8gdXMgYXMgdGhlIHByZWZlcnJlZCBzZXQuIE90aGVyd2lzZSwganVzdCBpZ25vcmUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gdGhpcyBzaGVldC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlz
PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpIHx8ICFyZWwuY29udGFpbnMoImFsdGVybmF0ZSIp
KQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSA9
IG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZSA9IHRpdGxlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBpZiAodGl0bGUgIT0gbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFt
ZSkKLSAgICAgICAgICAgICAgICAgICAgc2hlZXQgPSBudWxscHRyOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAocmVsLmNvbnRhaW5zKCJhbHRlcm5hdGUiKSAmJiB0aXRsZS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgc2hlZXQgPSBudWxscHRyOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChzaGVldCkKLSAgICAgICAgICAgIHNoZWV0cy5hcHBlbmQoc2hlZXQpOwotICAgIH0K
LX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphbmFseXplU3R5bGVTaGVl
dENoYW5nZShVcGRhdGVGbGFnIHVwZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5
bGVTaGVldD4+JiBuZXdTdHlsZXNoZWV0cywgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUmIHN0eWxl
UmVzb2x2ZXJVcGRhdGVUeXBlLCBib29sJiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYykKLXsKLSAg
ICBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9IFJlY29uc3RydWN0OwotICAgIHJlcXVpcmVzRnVs
bFN0eWxlUmVjYWxjID0gdHJ1ZTsKLSAgICAKLSAgICAvLyBTdHlsZXNoZWV0cyBvZiA8c3R5bGU+
IGVsZW1lbnRzIHRoYXQgQGltcG9ydCBzdHlsZXNoZWV0cyBhcmUgYWN0aXZlIGJ1dCBsb2FkaW5n
LiBXZSBuZWVkIHRvIHRyaWdnZXIgYSBmdWxsIHJlY2FsYyB3aGVuIHN1Y2ggbG9hZHMgYXJlIGRv
bmUuCi0gICAgYm9vbCBoYXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IGZhbHNlOwotICAgIHVu
c2lnbmVkIG5ld1N0eWxlc2hlZXRDb3VudCA9IG5ld1N0eWxlc2hlZXRzLnNpemUoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmV3U3R5bGVzaGVldENvdW50OyArK2kpIHsKLSAgICAg
ICAgaWYgKG5ld1N0eWxlc2hlZXRzW2ldLT5pc0xvYWRpbmcoKSkKLSAgICAgICAgICAgIGhhc0Fj
dGl2ZUxvYWRpbmdTdHlsZXNoZWV0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG1faGFkQWN0aXZl
TG9hZGluZ1N0eWxlc2hlZXQgJiYgIWhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0KSB7Ci0gICAg
ICAgIG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ID0gaGFzQWN0aXZlTG9h
ZGluZ1N0eWxlc2hlZXQ7Ci0KLSAgICBpZiAodXBkYXRlRmxhZyAhPSBPcHRpbWl6ZWRVcGRhdGUp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhp
c3RzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
ID0gKm1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7Ci0KLSAgICAvLyBGaW5kIG91
dCB3aGljaCBzdHlsZXNoZWV0cyBhcmUgbmV3LgotICAgIHVuc2lnbmVkIG9sZFN0eWxlc2hlZXRD
b3VudCA9IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpOwotICAgIGlmIChuZXdTdHls
ZXNoZWV0Q291bnQgPCBvbGRTdHlsZXNoZWV0Q291bnQpCi0gICAgICAgIHJldHVybjsKLSAgICBW
ZWN0b3I8U3R5bGVTaGVldENvbnRlbnRzKj4gYWRkZWRTaGVldHM7Ci0gICAgdW5zaWduZWQgbmV3
SW5kZXggPSAwOwotICAgIGZvciAodW5zaWduZWQgb2xkSW5kZXggPSAwOyBvbGRJbmRleCA8IG9s
ZFN0eWxlc2hlZXRDb3VudDsgKytvbGRJbmRleCkgewotICAgICAgICBpZiAobmV3SW5kZXggPj0g
bmV3U3R5bGVzaGVldENvdW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3aGlsZSAo
bV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0c1tvbGRJbmRleF0gIT0gbmV3U3R5bGVzaGVldHNbbmV3
SW5kZXhdKSB7Ci0gICAgICAgICAgICBhZGRlZFNoZWV0cy5hcHBlbmQoJm5ld1N0eWxlc2hlZXRz
W25ld0luZGV4XS0+Y29udGVudHMoKSk7Ci0gICAgICAgICAgICArK25ld0luZGV4OwotICAgICAg
ICAgICAgaWYgKG5ld0luZGV4ID09IG5ld1N0eWxlc2hlZXRDb3VudCkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgKytuZXdJbmRleDsKLSAgICB9Ci0gICAgYm9v
bCBoYXNJbnNlcnRpb25zID0gIWFkZGVkU2hlZXRzLmlzRW1wdHkoKTsKLSAgICB3aGlsZSAobmV3
SW5kZXggPCBuZXdTdHlsZXNoZWV0Q291bnQpIHsKLSAgICAgICAgYWRkZWRTaGVldHMuYXBwZW5k
KCZuZXdTdHlsZXNoZWV0c1tuZXdJbmRleF0tPmNvbnRlbnRzKCkpOwotICAgICAgICArK25ld0lu
ZGV4OwotICAgIH0KLSAgICAvLyBJZiBhbGwgbmV3IHNoZWV0cyB3ZXJlIGFkZGVkIGF0IHRoZSBl
bmQgb2YgdGhlIGxpc3Qgd2UgY2FuIGp1c3QgYWRkIHRoZW0gdG8gZXhpc3RpbmcgU3R5bGVSZXNv
bHZlci4KLSAgICAvLyBJZiB0aGVyZSB3ZXJlIGluc2VydGlvbnMgd2UgbmVlZCB0byByZS1hZGQg
YWxsIHRoZSBzdHlsZXNoZWV0cyBzbyBydWxlcyBhcmUgb3JkZXJlZCBjb3JyZWN0bHkuCi0gICAg
c3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPSBoYXNJbnNlcnRpb25zID8gUmVzZXQgOiBBZGRpdGl2
ZTsKLQotICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IHBhcnNpbmcgdGhlIGJvZHkgYW5kIHNvIG1h
eSBoYXZlIHNpZ25pZmljYW50IGFtb3VudCBvZiBlbGVtZW50cywgcHV0IHNvbWUgZWZmb3J0IGlu
dG8gdHJ5aW5nIHRvIGF2b2lkIHN0eWxlIHJlY2FsY3MuCi0gICAgaWYgKCFtX2RvY3VtZW50LmJv
ZHlPckZyYW1lc2V0KCkgfHwgbV9kb2N1bWVudC5oYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxl
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzIGludmFs
aWRhdGlvbkFuYWx5c2lzKGFkZGVkU2hlZXRzLCBzdHlsZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFs
dWF0b3IoKSk7Ci0gICAgaWYgKGludmFsaWRhdGlvbkFuYWx5c2lzLmRpcnRpZXNBbGxTdHlsZSgp
KQotICAgICAgICByZXR1cm47Ci0gICAgaW52YWxpZGF0aW9uQW5hbHlzaXMuaW52YWxpZGF0ZVN0
eWxlKG1fZG9jdW1lbnQpOwotICAgIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gZmFsc2U7Ci19
Ci0KLXN0YXRpYyB2b2lkIGZpbHRlckVuYWJsZWROb25lbXB0eUNTU1N0eWxlU2hlZXRzKFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiByZXN1bHQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVTaGVldD4+JiBzaGVldHMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNoZWV0
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWlzPENTU1N0eWxlU2hlZXQ+KCpzaGVldHNb
aV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIENTU1N0eWxlU2hlZXQmIHNoZWV0
ID0gZG93bmNhc3Q8Q1NTU3R5bGVTaGVldD4oKnNoZWV0c1tpXSk7Ci0gICAgICAgIGlmIChzaGVl
dC5kaXNhYmxlZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghc2hlZXQu
bGVuZ3RoKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgm
c2hlZXQpOwotICAgIH0KLX0KLQotYm9vbCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1
cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRhdGVGbGFnIHVwZGF0ZUZsYWcpCi17Ci0gICAgaWYg
KG1fZG9jdW1lbnQuaW5TdHlsZVJlY2FsYygpKSB7Ci0gICAgICAgIC8vIFNWRyA8dXNlPiBlbGVt
ZW50IG1heSBtYW5hZ2UgdG8gaW52YWxpZGF0ZSBzdHlsZSBzZWxlY3RvciBpbiB0aGUgbWlkZGxl
IG9mIGEgc3R5bGUgcmVjYWxjLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTQzNDQKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGZp
eGVkIGluIFNWRyBhbmQgdGhlIGNhbGwgc2l0ZSByZXBsYWNlZCBieSBBU1NFUlQoIW1faW5TdHls
ZVJlY2FsYykuCi0gICAgICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSBGdWxsVXBkYXRlOwotICAg
ICAgICBtX2RvY3VtZW50LnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgfQotICAgIGlmICghbV9kb2N1bWVudC5oYXNMaXZpbmdSZW5kZXJU
cmVlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVT
aGVldD4+IGFjdGl2ZVN0eWxlU2hlZXRzOwotICAgIGNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhh
Y3RpdmVTdHlsZVNoZWV0cyk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBh
Y3RpdmVDU1NTdHlsZVNoZWV0czsKLSAgICBhY3RpdmVDU1NTdHlsZVNoZWV0cy5hcHBlbmRWZWN0
b3IoaW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cygpKTsKLSAgICBhY3RpdmVDU1NTdHlsZVNoZWV0
cy5hcHBlbmRWZWN0b3IoZG9jdW1lbnRBdXRob3JTdHlsZVNoZWV0cygpKTsKLSAgICBmaWx0ZXJF
bmFibGVkTm9uZW1wdHlDU1NTdHlsZVNoZWV0cyhhY3RpdmVDU1NTdHlsZVNoZWV0cywgYWN0aXZl
U3R5bGVTaGVldHMpOwotCi0gICAgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgc3R5bGVSZXNvbHZl
clVwZGF0ZVR5cGU7Ci0gICAgYm9vbCByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYzsKLSAgICBhbmFs
eXplU3R5bGVTaGVldENoYW5nZSh1cGRhdGVGbGFnLCBhY3RpdmVDU1NTdHlsZVNoZWV0cywgc3R5
bGVSZXNvbHZlclVwZGF0ZVR5cGUsIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKTsKLQotICAgIGlm
IChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9PSBSZWNvbnN0cnVjdCkKLSAgICAgICAgbV9kb2N1
bWVudC5jbGVhclN0eWxlUmVzb2x2ZXIoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwot
ICAgICAgICBpZiAoc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPT0gUmVzZXQpIHsKLSAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXIucnVsZVNldHMoKS5yZXNldEF1dGhvclN0eWxlKCk7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKDAsIGFjdGl2ZUNTU1N0
eWxlU2hlZXRzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChzdHlsZVJl
c29sdmVyVXBkYXRlVHlwZSA9PSBBZGRpdGl2ZSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgp
LCBhY3RpdmVDU1NTdHlsZVNoZWV0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzZXRDU1NGZWF0
dXJlRmxhZ3MoKTsKLSAgICB9Ci0KLSAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlz
dEZvckZhc3RMb29rdXAgPSBudWxscHRyOwotICAgIG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMu
c3dhcChhY3RpdmVDU1NTdHlsZVNoZWV0cyk7Ci0gICAgbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hl
ZXRMaXN0LnN3YXAoYWN0aXZlU3R5bGVTaGVldHMpOwotCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjphY3RpdmVTdHlsZVNoZWV0c1VwZGF0ZWQobV9kb2N1bWVudCk7Ci0KLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIHNoZWV0IDogbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0cykgewotICAgICAg
ICBpZiAoc2hlZXQtPmNvbnRlbnRzKCkudXNlc1JlbVVuaXRzKCkpCi0gICAgICAgICAgICBtX3Vz
ZXNSZW1Vbml0cyA9IHRydWU7Ci0gICAgICAgIGlmIChzaGVldC0+Y29udGVudHMoKS51c2VzU3R5
bGVCYXNlZEVkaXRhYmlsaXR5KCkpCi0gICAgICAgICAgICBtX3VzZXNTdHlsZUJhc2VkRWRpdGFi
aWxpdHkgPSB0cnVlOwotICAgIH0KLSAgICBtX3BlbmRpbmdVcGRhdGVUeXBlID0gTm9VcGRhdGU7
Ci0KLSAgICByZXR1cm4gcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGM7Ci19Ci0KLWNvbnN0IFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFj
dGl2ZVN0eWxlU2hlZXRzRm9ySW5zcGVjdG9yKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+PiByZXN1bHQ7Ci0KLSAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGluamVj
dGVkQXV0aG9yU3R5bGVTaGVldHMoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZFZlY3Rvcihkb2N1bWVu
dEF1dGhvclN0eWxlU2hlZXRzKCkpOwotCi0gICAgZm9yIChhdXRvJiBzdHlsZVNoZWV0IDogbV9z
dHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KSB7Ci0gICAgICAgIGlmICghaXM8Q1NTU3R5bGVT
aGVldD4oKnN0eWxlU2hlZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQ1NT
U3R5bGVTaGVldCYgc2hlZXQgPSBkb3duY2FzdDxDU1NTdHlsZVNoZWV0Pigqc3R5bGVTaGVldCk7
Ci0gICAgICAgIGlmIChzaGVldC5kaXNhYmxlZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgcmVzdWx0LmFwcGVuZCgmc2hlZXQpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLWJvb2wgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWN0aXZlU3R5bGVT
aGVldHNDb250YWlucyhjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cCkgewotICAg
ICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAgPSBzdGQ6
Om1ha2VfdW5pcXVlPEhhc2hTZXQ8Y29uc3QgQ1NTU3R5bGVTaGVldCo+PigpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0cy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFz
dExvb2t1cC0+YWRkKG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHNbaV0uZ2V0KCkpOwotICAgIH0K
LSAgICByZXR1cm4gbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3Vw
LT5jb250YWlucyhzaGVldCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bjo6ZGV0YWNoRnJvbURvY3VtZW50KCkKK3ZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OmRldGFj
aEZyb21Eb2N1bWVudCgpCiB7CiAgICAgaWYgKG1fcGFnZVVzZXJTaGVldCkKICAgICAgICAgbV9w
YWdlVXNlclNoZWV0LT5kZXRhY2hGcm9tRG9jdW1lbnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5zaXplKCk7ICsraSkKLSAgICAgICAg
bV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0c1tpXS0+ZGV0YWNoRnJvbURvY3VtZW50KCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5zaXpl
KCk7ICsraSkKLSAgICAgICAgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzW2ldLT5kZXRhY2hG
cm9tRG9jdW1lbnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91c2VyU3R5bGVT
aGVldHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fdXNlclN0eWxlU2hlZXRzW2ldLT5kZXRhY2hG
cm9tRG9jdW1lbnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hdXRob3JTdHls
ZVNoZWV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9hdXRob3JTdHlsZVNoZWV0c1tpXS0+ZGV0
YWNoRnJvbURvY3VtZW50KCk7CisgICAgZm9yIChhdXRvJiBzaGVldCA6IG1faW5qZWN0ZWRVc2Vy
U3R5bGVTaGVldHMpCisgICAgICAgIHNoZWV0LT5kZXRhY2hGcm9tRG9jdW1lbnQoKTsKKyAgICBm
b3IgKGF1dG8mIHNoZWV0IDogIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cykKKyAgICAgICAg
c2hlZXQtPmRldGFjaEZyb21Eb2N1bWVudCgpOworICAgIGZvciAoYXV0byYgc2hlZXQgOiBtX3Vz
ZXJTdHlsZVNoZWV0cykKKyAgICAgICAgc2hlZXQtPmRldGFjaEZyb21Eb2N1bWVudCgpOworICAg
IGZvciAoYXV0byYgc2hlZXQgOiBtX2F1dGhvclN0eWxlU2hlZXRzRm9yVGVzdGluZykKKyAgICAg
ICAgc2hlZXQtPmRldGFjaEZyb21Eb2N1bWVudCgpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuaAkocmV2aXNpb24gMTkwMDc0KQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oOjE5MDA3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diAoYXBAd2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uX2gKKyNkZWZpbmUgRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbl9oCisKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVkZSAiQ29u
dGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIE5vZGU7Citj
bGFzcyBTdHlsZVNoZWV0OworY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOworY2xhc3MgU3R5bGVT
aGVldExpc3Q7CisKK2NsYXNzIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24geworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IERvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb24oRG9jdW1lbnQmKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
U3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KCkgY29uc3QgeyByZXR1
cm4gbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0OyB9CisKKyAgICBjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdCB7
IHJldHVybiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzOyB9CisKKyAgICBjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBhY3RpdmVTdHlsZVNoZWV0c0Zvckluc3BlY3RvcigpIGNv
bnN0OworCisgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCgpOworICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBkb2N1bWVudFVzZXJTdHlsZVNoZWV0cygpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRzOyB9CisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNoZWV0Pj4mIGRvY3VtZW50QXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdCB7IHJl
dHVybiBtX2F1dGhvclN0eWxlU2hlZXRzOyB9CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4mIGluamVjdGVkVXNlclN0eWxlU2hlZXRzKCkgY29uc3Q7CisgICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGluamVjdGVkQXV0aG9yU3R5bGVTaGVldHMo
KSBjb25zdDsKKworICAgIHZvaWQgYWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYsIGJv
b2wgY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICB2b2lkIHJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVO
b2RlKE5vZGUmKTsKKworICAgIHZvaWQgY2xlYXJQYWdlVXNlclNoZWV0KCk7CisgICAgdm9pZCB1
cGRhdGVQYWdlVXNlclNoZWV0KCk7CisgICAgdm9pZCBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNo
ZWV0Q2FjaGUoKTsKKyAgICB2b2lkIHVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCkgY29u
c3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEF1dGhvclNoZWV0KFJlZjxTdHlsZVNo
ZWV0Q29udGVudHM+JiYgYXV0aG9yU2hlZXQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRk
VXNlclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgdXNlclNoZWV0KTsKKworI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgdm9pZCBhZGREaXNwbGF5Tm9uZVNlbGVjdG9y
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgdWludDMy
X3Qgc2VsZWN0b3JJRCk7CisgICAgdm9pZCBtYXliZUFkZENvbnRlbnRFeHRlbnNpb25TaGVldChj
b25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFN0eWxlU2hlZXRDb250ZW50cyYpOworI2VuZGlmCisK
KyAgICBlbnVtIFVwZGF0ZUZsYWcgeyBOb1VwZGF0ZSA9IDAsIE9wdGltaXplZFVwZGF0ZSwgRnVs
bFVwZGF0ZSB9OworCisgICAgVXBkYXRlRmxhZyBwZW5kaW5nVXBkYXRlVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcGVuZGluZ1VwZGF0ZVR5cGU7IH0KKyAgICB2b2lkIHNldFBlbmRpbmdVcGRhdGVU
eXBlKFVwZGF0ZUZsYWcgdXBkYXRlVHlwZSkKKyAgICB7CisgICAgICAgIGlmICh1cGRhdGVUeXBl
ID4gbV9wZW5kaW5nVXBkYXRlVHlwZSkKKyAgICAgICAgICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUg
PSB1cGRhdGVUeXBlOworICAgIH0KKworICAgIHZvaWQgZmx1c2hQZW5kaW5nVXBkYXRlcygpCisg
ICAgeworICAgICAgICBpZiAobV9wZW5kaW5nVXBkYXRlVHlwZSAhPSBOb1VwZGF0ZSkKKyAgICAg
ICAgICAgIHVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKG1fcGVuZGluZ1VwZGF0ZVR5cGUpOworICAg
IH0KKworICAgIGJvb2wgdXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoVXBkYXRlRmxhZyk7CisKKyAg
ICBTdHJpbmcgcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3By
ZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lOyB9CisgICAgU3RyaW5nIHNlbGVjdGVkU3R5bGVzaGVl
dFNldE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGVkU3R5bGVzaGVldFNldE5hbWU7IH0K
KyAgICB2b2lkIHNldFByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKGNvbnN0IFN0cmluZyYgbmFt
ZSkgeyBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lID0gbmFtZTsgfQorICAgIHZvaWQgc2V0
U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9zZWxlY3Rl
ZFN0eWxlc2hlZXRTZXROYW1lID0gbmFtZTsgfQorCisgICAgdm9pZCBhZGRQZW5kaW5nU2hlZXQo
KSB7IG1fcGVuZGluZ1N0eWxlc2hlZXRzKys7IH0KKyAgICBlbnVtIFJlbW92ZVBlbmRpbmdTaGVl
dE5vdGlmaWNhdGlvblR5cGUgeworICAgICAgICBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlJbW1l
ZGlhdGVseSwKKyAgICAgICAgUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0ZXIKKyAgICB9Owor
ICAgIHZvaWQgcmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlv
blR5cGUgPSBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlJbW1lZGlhdGVseSk7CisKKyAgICBib29s
IGhhc1BlbmRpbmdTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdTdHlsZXNoZWV0cyA+
IDA7IH0KKworICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV91
c2VzRmlyc3RMaW5lUnVsZXM7IH0KKyAgICBib29sIHVzZXNGaXJzdExldHRlclJ1bGVzKCkgY29u
c3QgeyByZXR1cm4gbV91c2VzRmlyc3RMZXR0ZXJSdWxlczsgfQorICAgIGJvb2wgdXNlc1JlbVVu
aXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzUmVtVW5pdHM7IH0KKyAgICB2b2lkIHNldFVzZXNS
ZW1Vbml0KGJvb2wgYikgeyBtX3VzZXNSZW1Vbml0cyA9IGI7IH0KKyAgICBib29sIHVzZXNTdHls
ZUJhc2VkRWRpdGFiaWxpdHkoKSB7IHJldHVybiBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHk7
IH0KKyAgICB2b2lkIHNldFVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoYm9vbCBiKSB7IG1fdXNl
c1N0eWxlQmFzZWRFZGl0YWJpbGl0eSA9IGI7IH0KKworICAgIHZvaWQgY29tYmluZUNTU0ZlYXR1
cmVGbGFncygpOworICAgIHZvaWQgcmVzZXRDU1NGZWF0dXJlRmxhZ3MoKTsKKworICAgIGJvb2wg
YWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBDU1NTdHlsZVNoZWV0KikgY29uc3Q7CisK
KyAgICB2b2lkIGRldGFjaEZyb21Eb2N1bWVudCgpOworCitwcml2YXRlOgorICAgIHZvaWQgY29s
bGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+Jik7CisgICAg
ZW51bSBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSB7CisgICAgICAgIFJlY29uc3RydWN0LAorICAg
ICAgICBSZXNldCwKKyAgICAgICAgQWRkaXRpdmUKKyAgICB9OworICAgIHZvaWQgYW5hbHl6ZVN0
eWxlU2hlZXRDaGFuZ2UoVXBkYXRlRmxhZywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0Pj4mIG5ld1N0eWxlc2hlZXRzLCBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSYsIGJvb2wmIHJl
cXVpcmVzRnVsbFN0eWxlUmVjYWxjKTsKKworICAgIHZvaWQgc3R5bGVSZXNvbHZlckNoYW5nZWRU
aW1lckZpcmVkKCk7CisKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKKworICAgIFZlY3RvcjxS
ZWZQdHI8U3R5bGVTaGVldD4+IG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdDsKKyAgICBW
ZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzOwor
CisgICAgLy8gVGhpcyBpcyBhIG1pcnJvciBvZiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzIHRo
YXQgZ2V0cyBwb3B1bGF0ZWQgb24gZGVtYW5kIGZvciBhY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5z
KCkuCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxjb25zdCBDU1NTdHlsZVNo
ZWV0Kj4+IG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cDsKKwor
ICAgIC8vIFRyYWNrIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGxvYWRpbmcgdG9wLWxldmVsIHN0
eWxlc2hlZXRzIG5lZWRlZCBmb3IgcmVuZGVyaW5nLgorICAgIC8vIFNoZWV0cyBsb2FkZWQgdXNp
bmcgdGhlIEBpbXBvcnQgZGlyZWN0aXZlIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBjb3VudC4K
KyAgICAvLyBXZSB1c2UgdGhpcyBjb3VudCBvZiBwZW5kaW5nIHNoZWV0cyB0byBkZXRlY3Qgd2hl
biB3ZSBjYW4gYmVnaW4gYXR0YWNoaW5nCisgICAgLy8gZWxlbWVudHMgYW5kIHdoZW4gaXQgaXMg
c2FmZSB0byBleGVjdXRlIHNjcmlwdHMuCisgICAgaW50IG1fcGVuZGluZ1N0eWxlc2hlZXRzOwor
CisgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fcGFnZVVzZXJTaGVldDsKKworICAgIG11dGFi
bGUgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0
czsKKyAgICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG1faW5qZWN0ZWRB
dXRob3JTdHlsZVNoZWV0czsKKyAgICBtdXRhYmxlIGJvb2wgbV9pbmplY3RlZFN0eWxlU2hlZXRD
YWNoZVZhbGlkOworCisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV91c2VyU3R5
bGVTaGVldHM7CisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9hdXRob3JTdHls
ZVNoZWV0czsKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgSGFzaE1hcDxT
dHJpbmcsIFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9jb250ZW50RXh0ZW5zaW9uU2hlZXRzOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRl
bnNpb25TdHlsZVNoZWV0Pj4gbV9jb250ZW50RXh0ZW5zaW9uU2VsZWN0b3JTaGVldHM7CisjZW5k
aWYKKworICAgIGJvb2wgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldDsKKyAgICBVcGRhdGVG
bGFnIG1fcGVuZGluZ1VwZGF0ZVR5cGU7CisKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PE5vZGUq
PiBTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQ7CisgICAgU3R5bGVTaGVldENhbmRpZGF0
ZUxpc3RIYXNoU2V0IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzOworCisgICAgU3RyaW5nIG1f
cHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWU7CisgICAgU3RyaW5nIG1fc2VsZWN0ZWRTdHlsZXNo
ZWV0U2V0TmFtZTsKKworICAgIGJvb2wgbV91c2VzRmlyc3RMaW5lUnVsZXM7CisgICAgYm9vbCBt
X3VzZXNGaXJzdExldHRlclJ1bGVzOworICAgIGJvb2wgbV91c2VzUmVtVW5pdHM7CisgICAgYm9v
bCBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHk7CisKKyAgICBUaW1lciBtX3N0eWxlUmVzb2x2
ZXJDaGFuZ2VkVGltZXI7Cit9OworCit9CisKKyNlbmRpZgorCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyAr
Myw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAxMCwgMjAxMi0yMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQog
ICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCkBAIC0yNSw4ICsyNSw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbl9oCi0jZGVmaW5lIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b25faAorI2lmbmRlZiBFeHRlbnNpb25TdHlsZVNoZWV0c19oCisjZGVmaW5lIEV4dGVuc2lvblN0
eWxlU2hlZXRzX2gKIAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAt
NTAsMTM3ICs1MCw1MiBAQCBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldENvbnRl
bnRzOwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CiAKLWNsYXNzIERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb24geworY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHMgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb24oRG9jdW1lbnQmKTsKLQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVl
dD4+JiBzdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0OyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+PiYgYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBt
X2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzOyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+PiBhY3RpdmVTdHlsZVNoZWV0c0Zvckluc3BlY3RvcigpIGNvbnN0OworICAg
IGV4cGxpY2l0IEV4dGVuc2lvblN0eWxlU2hlZXRzKERvY3VtZW50Jik7CiAKICAgICBDU1NTdHls
ZVNoZWV0KiBwYWdlVXNlclNoZWV0KCk7CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0Pj4mIGRvY3VtZW50VXNlclN0eWxlU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2Vy
U3R5bGVTaGVldHM7IH0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYg
ZG9jdW1lbnRBdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aG9yU3R5bGVT
aGVldHM7IH0KICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgaW5qZWN0
ZWRVc2VyU3R5bGVTaGVldHMoKSBjb25zdDsKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiYgaW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0OwotCi0gICAgdm9p
ZCBhZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
OwotICAgIHZvaWQgcmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYpOworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBhdXRob3JTdHlsZVNoZWV0c0ZvclRl
c3RpbmcoKSBjb25zdCB7IHJldHVybiBtX2F1dGhvclN0eWxlU2hlZXRzRm9yVGVzdGluZzsgfQog
CiAgICAgdm9pZCBjbGVhclBhZ2VVc2VyU2hlZXQoKTsKICAgICB2b2lkIHVwZGF0ZVBhZ2VVc2Vy
U2hlZXQoKTsKICAgICB2b2lkIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpOwog
ICAgIHZvaWQgdXBkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKSBjb25zdDsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYWRkQXV0aG9yU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4m
JiBhdXRob3JTaGVldCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyU2hlZXQoUmVm
PFN0eWxlU2hlZXRDb250ZW50cz4mJiB1c2VyU2hlZXQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYWRkVXNlclN0eWxlU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJik7CisKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFkZEF1dGhvclN0eWxlU2hlZXRGb3JUZXN0aW5nKFJlZjxTdHls
ZVNoZWV0Q29udGVudHM+JiYpOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAg
ICB2b2lkIGFkZERpc3BsYXlOb25lU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIHNlbGVjdG9yLCB1aW50MzJfdCBzZWxlY3RvcklEKTsKICAgICB2b2lkIG1h
eWJlQWRkQ29udGVudEV4dGVuc2lvblNoZWV0KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3R5
bGVTaGVldENvbnRlbnRzJik7CiAjZW5kaWYKIAotICAgIGVudW0gVXBkYXRlRmxhZyB7IE5vVXBk
YXRlID0gMCwgT3B0aW1pemVkVXBkYXRlLCBGdWxsVXBkYXRlIH07Ci0KLSAgICBVcGRhdGVGbGFn
IHBlbmRpbmdVcGRhdGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nVXBkYXRlVHlwZTsg
fQotICAgIHZvaWQgc2V0UGVuZGluZ1VwZGF0ZVR5cGUoVXBkYXRlRmxhZyB1cGRhdGVUeXBlKQot
ICAgIHsKLSAgICAgICAgaWYgKHVwZGF0ZVR5cGUgPiBtX3BlbmRpbmdVcGRhdGVUeXBlKQotICAg
ICAgICAgICAgbV9wZW5kaW5nVXBkYXRlVHlwZSA9IHVwZGF0ZVR5cGU7Ci0gICAgfQotCi0gICAg
dm9pZCBmbHVzaFBlbmRpbmdVcGRhdGVzKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3BlbmRpbmdV
cGRhdGVUeXBlICE9IE5vVXBkYXRlKQotICAgICAgICAgICAgdXBkYXRlQWN0aXZlU3R5bGVTaGVl
dHMobV9wZW5kaW5nVXBkYXRlVHlwZSk7Ci0gICAgfQotCi0gICAgYm9vbCB1cGRhdGVBY3RpdmVT
dHlsZVNoZWV0cyhVcGRhdGVGbGFnKTsKLQotICAgIFN0cmluZyBwcmVmZXJyZWRTdHlsZXNoZWV0
U2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWU7IH0K
LSAgICBTdHJpbmcgc2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZTsgfQotICAgIHZvaWQgc2V0UHJlZmVycmVkU3R5bGVz
aGVldFNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fcHJlZmVycmVkU3R5bGVzaGVldFNl
dE5hbWUgPSBuYW1lOyB9Ci0gICAgdm9pZCBzZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lKGNv
bnN0IFN0cmluZyYgbmFtZSkgeyBtX3NlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUgPSBuYW1lOyB9
Ci0KLSAgICB2b2lkIGFkZFBlbmRpbmdTaGVldCgpIHsgbV9wZW5kaW5nU3R5bGVzaGVldHMrKzsg
fQotICAgIGVudW0gUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9uVHlwZSB7Ci0gICAgICAg
IFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5LAotICAgICAgICBSZW1vdmVQZW5k
aW5nU2hlZXROb3RpZnlMYXRlcgotICAgIH07Ci0gICAgdm9pZCByZW1vdmVQZW5kaW5nU2hlZXQo
UmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9uVHlwZSA9IFJlbW92ZVBlbmRpbmdTaGVldE5v
dGlmeUltbWVkaWF0ZWx5KTsKLQotICAgIGJvb2wgaGFzUGVuZGluZ1NoZWV0cygpIGNvbnN0IHsg
cmV0dXJuIG1fcGVuZGluZ1N0eWxlc2hlZXRzID4gMDsgfQotCi0gICAgYm9vbCB1c2VzRmlyc3RM
aW5lUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3VzZXNGaXJzdExpbmVSdWxlczsgfQotICAgIGJv
b2wgdXNlc0ZpcnN0TGV0dGVyUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3VzZXNGaXJzdExldHRl
clJ1bGVzOyB9Ci0gICAgYm9vbCB1c2VzUmVtVW5pdHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXNS
ZW1Vbml0czsgfQotICAgIHZvaWQgc2V0VXNlc1JlbVVuaXQoYm9vbCBiKSB7IG1fdXNlc1JlbVVu
aXRzID0gYjsgfQotICAgIGJvb2wgdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpIHsgcmV0dXJu
IG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eTsgfQotICAgIHZvaWQgc2V0VXNlc1N0eWxlQmFz
ZWRFZGl0YWJpbGl0eShib29sIGIpIHsgbV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5ID0gYjsg
fQotCi0gICAgdm9pZCBjb21iaW5lQ1NTRmVhdHVyZUZsYWdzKCk7Ci0gICAgdm9pZCByZXNldENT
U0ZlYXR1cmVGbGFncygpOwotCi0gICAgYm9vbCBhY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5zKGNv
bnN0IENTU1N0eWxlU2hlZXQqKSBjb25zdDsKLQogICAgIHZvaWQgZGV0YWNoRnJvbURvY3VtZW50
KCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9y
PFJlZlB0cjxTdHlsZVNoZWV0Pj4mKTsKLSAgICBlbnVtIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBl
IHsKLSAgICAgICAgUmVjb25zdHJ1Y3QsCi0gICAgICAgIFJlc2V0LAotICAgICAgICBBZGRpdGl2
ZQotICAgIH07Ci0gICAgdm9pZCBhbmFseXplU3R5bGVTaGVldENoYW5nZShVcGRhdGVGbGFnLCBj
b25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIFN0eWxl
UmVzb2x2ZXJVcGRhdGVUeXBlJiwgYm9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpOwotCiAg
ICAgdm9pZCBzdHlsZVJlc29sdmVyQ2hhbmdlZFRpbWVyRmlyZWQoKTsKIAogICAgIERvY3VtZW50
JiBtX2RvY3VtZW50OwogCi0gICAgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4gbV9zdHlsZVNo
ZWV0c0ZvclN0eWxlU2hlZXRMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+
IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHM7Ci0KLSAgICAvLyBUaGlzIGlzIGEgbWlycm9yIG9m
IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMgdGhhdCBnZXRzIHBvcHVsYXRlZCBvbiBkZW1hbmQg
Zm9yIGFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMoKS4KLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVl
X3B0cjxIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4gbV93ZWFrQ29weU9mQWN0aXZlU3R5
bGVTaGVldExpc3RGb3JGYXN0TG9va3VwOwotCi0gICAgLy8gVHJhY2sgdGhlIG51bWJlciBvZiBj
dXJyZW50bHkgbG9hZGluZyB0b3AtbGV2ZWwgc3R5bGVzaGVldHMgbmVlZGVkIGZvciByZW5kZXJp
bmcuCi0gICAgLy8gU2hlZXRzIGxvYWRlZCB1c2luZyB0aGUgQGltcG9ydCBkaXJlY3RpdmUgYXJl
IG5vdCBpbmNsdWRlZCBpbiB0aGlzIGNvdW50LgotICAgIC8vIFdlIHVzZSB0aGlzIGNvdW50IG9m
IHBlbmRpbmcgc2hlZXRzIHRvIGRldGVjdCB3aGVuIHdlIGNhbiBiZWdpbiBhdHRhY2hpbmcKLSAg
ICAvLyBlbGVtZW50cyBhbmQgd2hlbiBpdCBpcyBzYWZlIHRvIGV4ZWN1dGUgc2NyaXB0cy4KLSAg
ICBpbnQgbV9wZW5kaW5nU3R5bGVzaGVldHM7Ci0KICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
bV9wYWdlVXNlclNoZWV0OwogCiAgICAgbXV0YWJsZSBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+PiBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzOwogICAgIG11dGFibGUgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNoZWV0Pj4gbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzOwotICAgIG11dGFi
bGUgYm9vbCBtX2luamVjdGVkU3R5bGVTaGVldENhY2hlVmFsaWQ7CisgICAgbXV0YWJsZSBib29s
IG1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZCB7IGZhbHNlIH07CiAKICAgICBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX3VzZXJTdHlsZVNoZWV0czsKLSAgICBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+PiBtX2F1dGhvclN0eWxlU2hlZXRzOworICAgIFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4+IG1fYXV0aG9yU3R5bGVTaGVldHNGb3JUZXN0aW5nOwogCiAjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPENT
U1N0eWxlU2hlZXQ+PiBtX2NvbnRlbnRFeHRlbnNpb25TaGVldHM7CiAgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQ+
PiBtX2NvbnRlbnRFeHRlbnNpb25TZWxlY3RvclNoZWV0czsKICNlbmRpZgogCi0gICAgYm9vbCBt
X2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0OwotICAgIFVwZGF0ZUZsYWcgbV9wZW5kaW5nVXBk
YXRlVHlwZTsKLQotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8Tm9kZSo+IFN0eWxlU2hlZXRDYW5k
aWRhdGVMaXN0SGFzaFNldDsKLSAgICBTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQgbV9z
dHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXM7Ci0KLSAgICBTdHJpbmcgbV9wcmVmZXJyZWRTdHlsZXNo
ZWV0U2V0TmFtZTsKLSAgICBTdHJpbmcgbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lOwotCi0g
ICAgYm9vbCBtX3VzZXNGaXJzdExpbmVSdWxlczsKLSAgICBib29sIG1fdXNlc0ZpcnN0TGV0dGVy
UnVsZXM7Ci0gICAgYm9vbCBtX3VzZXNSZW1Vbml0czsKLSAgICBib29sIG1fdXNlc1N0eWxlQmFz
ZWRFZGl0YWJpbGl0eTsKLQogICAgIFRpbWVyIG1fc3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lcjsK
IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIu
Y3BwCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVT
aGVldE93bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIklubGluZVN0eWxlU2hlZXRPd25lci5oIgogCisjaW5jbHVk
ZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3ku
aCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCkBAIC00Nyw3
ICs0OCw3IEBAIElubGluZVN0eWxlU2hlZXRPd25lcjo6fklubGluZVN0eWxlU2hlZXQKIAogdm9p
ZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6Omluc2VydGVkSW50b0RvY3VtZW50KERvY3VtZW50JiBk
b2N1bWVudCwgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBkb2N1bWVudC5zdHlsZVNoZWV0Q29s
bGVjdGlvbigpLmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKGVsZW1lbnQsIG1faXNQYXJzaW5n
Q2hpbGRyZW4pOworICAgIGRvY3VtZW50LmF1dGhvclN0eWxlU2hlZXRzKCkuYWRkU3R5bGVTaGVl
dENhbmRpZGF0ZU5vZGUoZWxlbWVudCwgbV9pc1BhcnNpbmdDaGlsZHJlbik7CiAKICAgICBpZiAo
bV9pc1BhcnNpbmdDaGlsZHJlbikKICAgICAgICAgcmV0dXJuOwpAQCAtNTYsNyArNTcsNyBAQCB2
b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6aW5zZXJ0ZWRJbnRvCiAKIHZvaWQgSW5saW5lU3R5
bGVTaGVldE93bmVyOjpyZW1vdmVkRnJvbURvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCwgRWxl
bWVudCYgZWxlbWVudCkKIHsKLSAgICBkb2N1bWVudC5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnJl
bW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKGVsZW1lbnQpOworICAgIGRvY3VtZW50LmF1dGhv
clN0eWxlU2hlZXRzKCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoZWxlbWVudCk7CiAK
ICAgICBpZiAobV9zaGVldCkKICAgICAgICAgY2xlYXJTaGVldCgpOwpAQCAtNzMsNyArNzQsNyBA
QCB2b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6Y2xlYXJEb2N1bWVuCiAKICAgICBpZiAoIWVs
ZW1lbnQuaW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQuc3R5bGVT
aGVldENvbGxlY3Rpb24oKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50KTsK
KyAgICBkb2N1bWVudC5hdXRob3JTdHlsZVNoZWV0cygpLnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRh
dGVOb2RlKGVsZW1lbnQpOwogfQogCiB2b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6Y2hpbGRy
ZW5DaGFuZ2VkKEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xMTcsNyArMTE4LDcgQEAgdm9pZCBJbmxp
bmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0KAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9
IGVsZW1lbnQuZG9jdW1lbnQoKTsKICAgICBpZiAobV9zaGVldCkgewogICAgICAgICBpZiAobV9z
aGVldC0+aXNMb2FkaW5nKCkpCi0gICAgICAgICAgICBkb2N1bWVudC5zdHlsZVNoZWV0Q29sbGVj
dGlvbigpLnJlbW92ZVBlbmRpbmdTaGVldCgpOworICAgICAgICAgICAgZG9jdW1lbnQuYXV0aG9y
U3R5bGVTaGVldHMoKS5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKICAgICAgICAgY2xlYXJTaGVldCgp
OwogICAgIH0KIApAQCAtMTM3LDcgKzEzOCw3IEBAIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVy
OjpjcmVhdGVTaGVldCgKICAgICBpZiAoIXNjcmVlbkV2YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0
KCkpICYmICFwcmludEV2YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBkb2N1bWVudC5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLmFkZFBlbmRpbmdTaGVl
dCgpOworICAgIGRvY3VtZW50LmF1dGhvclN0eWxlU2hlZXRzKCkuYWRkUGVuZGluZ1NoZWV0KCk7
CiAKICAgICBtX2xvYWRpbmcgPSB0cnVlOwogCkBAIC0xNjQsMTMgKzE2NSwxMyBAQCBib29sIElu
bGluZVN0eWxlU2hlZXRPd25lcjo6c2hlZXRMb2FkZWQoCiAgICAgaWYgKGlzTG9hZGluZygpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkb2N1bWVudC5zdHlsZVNoZWV0Q29sbGVjdGlv
bigpLnJlbW92ZVBlbmRpbmdTaGVldCgpOworICAgIGRvY3VtZW50LmF1dGhvclN0eWxlU2hlZXRz
KCkucmVtb3ZlUGVuZGluZ1NoZWV0KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSW5s
aW5lU3R5bGVTaGVldE93bmVyOjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQoRG9jdW1lbnQmIGRv
Y3VtZW50KQogewotICAgIGRvY3VtZW50LnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuYWRkUGVuZGlu
Z1NoZWV0KCk7CisgICAgZG9jdW1lbnQuYXV0aG9yU3R5bGVTaGVldHMoKS5hZGRQZW5kaW5nU2hl
ZXQoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0
cnVjdGlvbi5jcHAJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAK
KyNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQu
aCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuaCIKQEAgLTY2LDcgKzY3LDcgQEAgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjp+
UHJvY2Vzc2luZ0luc3RydQogICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZW1vdmVDbGllbnQodGhp
cyk7CiAKICAgICBpZiAoaW5Eb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2hl
ZXRDb2xsZWN0aW9uKCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRoaXMpOworICAg
ICAgICBkb2N1bWVudCgpLmF1dGhvclN0eWxlU2hlZXRzKCkucmVtb3ZlU3R5bGVTaGVldENhbmRp
ZGF0ZU5vZGUoKnRoaXMpOwogfQogCiBTdHJpbmcgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpub2Rl
TmFtZSgpIGNvbnN0CkBAIC0xNDIsNyArMTQzLDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b246OmNoZWNrU3R5bGVTaAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGRvY3VtZW50KCkuc3R5
bGVTaGVldENvbGxlY3Rpb24oKS5hZGRQZW5kaW5nU2hlZXQoKTsKKyAgICAgICAgICAgIGRvY3Vt
ZW50KCkuYXV0aG9yU3R5bGVTaGVldHMoKS5hZGRQZW5kaW5nU2hlZXQoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1
ZXN0KGRvY3VtZW50KCkuY29tcGxldGVVUkwoaHJlZikpKTsKICNpZiBFTkFCTEUoWFNMVCkKQEAg
LTE2Myw3ICsxNjQsNyBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y2hlY2tTdHlsZVNo
CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgcmVxdWVzdCBtYXkg
aGF2ZSBiZWVuIGRlbmllZCBpZiAoZm9yIGV4YW1wbGUpIHRoZSBzdHlsZXNoZWV0IGlzIGxvY2Fs
IGFuZCB0aGUgZG9jdW1lbnQgaXMgcmVtb3RlLgogICAgICAgICAgICAgICAgIG1fbG9hZGluZyA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24o
KS5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmF1dGhv
clN0eWxlU2hlZXRzKCkucmVtb3ZlUGVuZGluZ1NoZWV0KCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC0xODEsNyArMTgyLDcgQEAgYm9vbCBQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b246OmlzTG9hZGluZygpIAogYm9vbCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNoZWV0TG9hZGVk
KCkKIHsKICAgICBpZiAoIWlzTG9hZGluZygpKSB7Ci0gICAgICAgIGRvY3VtZW50KCkuc3R5bGVT
aGVldENvbGxlY3Rpb24oKS5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKKyAgICAgICAgZG9jdW1lbnQo
KS5hdXRob3JTdHlsZVNoZWV0cygpLnJlbW92ZVBlbmRpbmdTaGVldCgpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjY1LDcgKzI2Niw3IEBAIE5v
ZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgUHJvY2UKICAgICBDaGFyYWN0ZXJEYXRh
OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwogICAgIGlmICghaW5zZXJ0aW9uUG9pbnQu
aW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKLSAgICBkb2N1bWVu
dCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuYWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRo
aXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICBkb2N1bWVudCgpLmF1dGhvclN0eWxlU2hlZXRz
KCkuYWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsK
ICAgICBjaGVja1N0eWxlU2hlZXQoKTsKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIH0KQEAg
LTI3Niw3ICsyNzcsNyBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6cmVtb3ZlZEZyb20o
CiAgICAgaWYgKCFpbnNlcnRpb25Qb2ludC5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkucmVtb3ZlU3R5bGVT
aGVldENhbmRpZGF0ZU5vZGUoKnRoaXMpOworICAgIGRvY3VtZW50KCkuYXV0aG9yU3R5bGVTaGVl
dHMoKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhpcyk7CiAKICAgICBpZiAobV9z
aGVldCkgewogICAgICAgICBBU1NFUlQobV9zaGVldC0+b3duZXJOb2RlKCkgPT0gdGhpcyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTAw
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDEyICsyNywxMiBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiQXR0cmlidXRlRE9NVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVl
dHMuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAj
aW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtOTUsNyArOTUs
NyBAQCBIVE1MTGlua0VsZW1lbnQ6On5IVE1MTGlua0VsZW1lbnQoKQogICAgICAgICBtX2NhY2hl
ZFNoZWV0LT5yZW1vdmVDbGllbnQodGhpcyk7CiAKICAgICBpZiAoaW5Eb2N1bWVudCgpKQotICAg
ICAgICBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkucmVtb3ZlU3R5bGVTaGVldENh
bmRpZGF0ZU5vZGUoKnRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmF1dGhvclN0eWxlU2hlZXRz
KCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRoaXMpOwogCiAgICAgbGlua0xvYWRF
dmVudFNlbmRlcigpLmNhbmNlbEV2ZW50KCp0aGlzKTsKIH0KQEAgLTI3OSw3ICsyNzksNyBAQCBO
b2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxMCiAgICAgaWYgKG1faXNJblNo
YWRvd1RyZWUpCiAgICAgICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogCi0gICAgZG9jdW1lbnQo
KS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlz
LCBtX2NyZWF0ZWRCeVBhcnNlcik7CisgICAgZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0cygp
LmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzLCBtX2NyZWF0ZWRCeVBhcnNlcik7CiAK
ICAgICBwcm9jZXNzKCk7CiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CkBAIC0yOTUsNyArMjk1
LDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaQogICAgICAgICBB
U1NFUlQoIW1fc2hlZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRvY3VtZW50KCku
c3R5bGVTaGVldENvbGxlY3Rpb24oKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhp
cyk7CisgICAgZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0cygpLnJlbW92ZVN0eWxlU2hlZXRD
YW5kaWRhdGVOb2RlKCp0aGlzKTsKIAogICAgIGlmIChtX3NoZWV0KQogICAgICAgICBjbGVhclNo
ZWV0KCk7CkBAIC01MDcsNyArNTA3LDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OmFkZFBlbmRp
bmdTaGVldChQZQogCiAgICAgaWYgKG1fcGVuZGluZ1NoZWV0VHlwZSA9PSBJbmFjdGl2ZVNoZWV0
KQogICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigp
LmFkZFBlbmRpbmdTaGVldCgpOworICAgIGRvY3VtZW50KCkuYXV0aG9yU3R5bGVTaGVldHMoKS5h
ZGRQZW5kaW5nU2hlZXQoKTsKIH0KIAogdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnJlbW92ZVBlbmRp
bmdTaGVldChSZW1vdmVQZW5kaW5nU2hlZXROb3RpZmljYXRpb25UeXBlIG5vdGlmaWNhdGlvbikK
QEAgLTUyMCwxNCArNTIwLDE0IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpyZW1vdmVQZW5kaW5n
U2hlZXQKIAogICAgIGlmICh0eXBlID09IEluYWN0aXZlU2hlZXQpIHsKICAgICAgICAgLy8gRG9j
dW1lbnQganVzdCBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBzaGVldCBmb3IgZXhwb3N1cmUgdGhy
b3VnaCBkb2N1bWVudC5zdHlsZVNoZWV0cwotICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2hlZXRD
b2xsZWN0aW9uKCkudXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6T3B0aW1pemVkVXBkYXRlKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hdXRob3JTdHls
ZVNoZWV0cygpLnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKEF1dGhvclN0eWxlU2hlZXRzOjpPcHRp
bWl6ZWRVcGRhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZG9jdW1lbnQoKS5z
dHlsZVNoZWV0Q29sbGVjdGlvbigpLnJlbW92ZVBlbmRpbmdTaGVldCgKKyAgICBkb2N1bWVudCgp
LmF1dGhvclN0eWxlU2hlZXRzKCkucmVtb3ZlUGVuZGluZ1NoZWV0KAogICAgICAgICBub3RpZmlj
YXRpb24gPT0gUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5SW1tZWRpYXRlbHkKLSAgICAgICAgPyBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlJbW1l
ZGlhdGVseQotICAgICAgICA6IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OlJlbW92ZVBl
bmRpbmdTaGVldE5vdGlmeUxhdGVyKTsKKyAgICAgICAgPyBBdXRob3JTdHlsZVNoZWV0czo6UmVt
b3ZlUGVuZGluZ1NoZWV0Tm90aWZ5SW1tZWRpYXRlbHkKKyAgICAgICAgOiBBdXRob3JTdHlsZVNo
ZWV0czo6UmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxRdW90ZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFF1b3RlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFF1b3RlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJIVE1MUXVv
dGVFbGVtZW50LmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIK
IAorI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKQEAgLTY2NSw3ICs2NjYsNyBAQCB2b2lkIEluc3BlY3RvckNT
U0FnZW50Ojpjb2xsZWN0QWxsU3R5bGVTCiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxl
Y3RBbGxEb2N1bWVudFN0eWxlU2hlZXRzKERvY3VtZW50JiBkb2N1bWVudCwgVmVjdG9yPENTU1N0
eWxlU2hlZXQqPiYgcmVzdWx0KQogewotICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+
IGNzc1N0eWxlU2hlZXRzID0gZG9jdW1lbnQuc3R5bGVTaGVldENvbGxlY3Rpb24oKS5hY3RpdmVT
dHlsZVNoZWV0c0Zvckluc3BlY3RvcigpOworICAgIGF1dG8gY3NzU3R5bGVTaGVldHMgPSBkb2N1
bWVudC5hdXRob3JTdHlsZVNoZWV0cygpLmFjdGl2ZVN0eWxlU2hlZXRzRm9ySW5zcGVjdG9yKCk7
CiAgICAgZm9yIChhdXRvJiBjc3NTdHlsZVNoZWV0IDogY3NzU3R5bGVTaGVldHMpCiAgICAgICAg
IGNvbGxlY3RTdHlsZVNoZWV0cyhjc3NTdHlsZVNoZWV0LmdldCgpLCByZXN1bHQpOwogfQpAQCAt
MTAxNSw3ICsxMDE2LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZQogCiAgICAgLy8gU3R5bGVSdWxlcyByZXR1cm5lZCBieSBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1
bGVzRm9yRWxlbWVudCBsYWNrIHBhcmVudCBwb2ludGVycyBzaW5jZSB0aGF0IGluZm9tYXRpb24g
aXMgbm90IGNoZWFwbHkgYXZhaWxhYmxlLgogICAgIC8vIFNpbmNlIHRoZSBpbnNwZWN0b3Igd2Fu
dHMgdG8gd2FsayB0aGUgcGFyZW50IGNoYWluLCB3ZSBjb25zdHJ1Y3QgdGhlIGZ1bGwgd3JhcHBl
cnMgaGVyZS4KLSAgICBDU1NTdHlsZVJ1bGUqIGNzc29tV3JhcHBlciA9IHN0eWxlUmVzb2x2ZXIu
aW5zcGVjdG9yQ1NTT01XcmFwcGVycygpLmdldFdyYXBwZXJGb3JSdWxlSW5TaGVldHMoc3R5bGVS
dWxlLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKSk7Cisg
ICAgQ1NTU3R5bGVSdWxlKiBjc3NvbVdyYXBwZXIgPSBzdHlsZVJlc29sdmVyLmluc3BlY3RvckNT
U09NV3JhcHBlcnMoKS5nZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRzKHN0eWxlUnVsZSwgc3R5bGVS
ZXNvbHZlci5kb2N1bWVudCgpLmF1dGhvclN0eWxlU2hlZXRzKCksIHN0eWxlUmVzb2x2ZXIuZG9j
dW1lbnQoKS5leHRlbnNpb25TdHlsZVNoZWV0cygpKTsKICAgICBpZiAoIWNzc29tV3JhcHBlcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVj
dG9yU3R5bGVTaGVldCA9IGJpbmRTdHlsZVNoZWV0KGNzc29tV3JhcHBlci0+cGFyZW50U3R5bGVT
aGVldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAko
cmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50
UGFyc2VyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRXcml0ZXIuaCIKICNpbmNsdWRlICJFdmVudC5o
IgorI2luY2x1ZGUgIkV4dGVuc2lvblN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiRm9ybVN0YXRl
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgpAQCAtODQ1LDEzICs4NDYsMTMgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6Y29tbWl0RGF0
YShjb25zdCBjaAogICAgIH0KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAg
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiYgc3R5bGVTaGVldENvbGxlY3Rpb24gPSBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpOworICAgIGF1dG8mIGV4dGVu
c2lvblN0eWxlU2hlZXRzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZXh0ZW5zaW9uU3R5bGVTaGVl
dHMoKTsKIAogICAgIGZvciAoYXV0byYgcGVuZGluZ1N0eWxlU2hlZXQgOiBtX3BlbmRpbmdOYW1l
ZENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0cykKLSAgICAgICAgc3R5bGVTaGVldENvbGxlY3Rp
b24ubWF5YmVBZGRDb250ZW50RXh0ZW5zaW9uU2hlZXQocGVuZGluZ1N0eWxlU2hlZXQua2V5LCAq
cGVuZGluZ1N0eWxlU2hlZXQudmFsdWUpOworICAgICAgICBleHRlbnNpb25TdHlsZVNoZWV0cy5t
YXliZUFkZENvbnRlbnRFeHRlbnNpb25TaGVldChwZW5kaW5nU3R5bGVTaGVldC5rZXksICpwZW5k
aW5nU3R5bGVTaGVldC52YWx1ZSk7CiAgICAgZm9yIChhdXRvJiBwZW5kaW5nU2VsZWN0b3JFbnRy
eSA6IG1fcGVuZGluZ0NvbnRlbnRFeHRlbnNpb25EaXNwbGF5Tm9uZVNlbGVjdG9ycykgewogICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIHBlbmRpbmdTZWxlY3RvciA6IHBlbmRpbmdTZWxlY3RvckVu
dHJ5LnZhbHVlKQotICAgICAgICAgICAgc3R5bGVTaGVldENvbGxlY3Rpb24uYWRkRGlzcGxheU5v
bmVTZWxlY3RvcihwZW5kaW5nU2VsZWN0b3JFbnRyeS5rZXksIHBlbmRpbmdTZWxlY3Rvci5maXJz
dCwgcGVuZGluZ1NlbGVjdG9yLnNlY29uZCk7CisgICAgICAgICAgICBleHRlbnNpb25TdHlsZVNo
ZWV0cy5hZGREaXNwbGF5Tm9uZVNlbGVjdG9yKHBlbmRpbmdTZWxlY3RvckVudHJ5LmtleSwgcGVu
ZGluZ1NlbGVjdG9yLmZpcnN0LCBwZW5kaW5nU2VsZWN0b3Iuc2Vjb25kKTsKICAgICB9CiAKICAg
ICBtX3BlbmRpbmdOYW1lZENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0cy5jbGVhcigpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAi
Q29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VQcm92aWRlci5oIgog
I2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgpAQCAtNDAsNiArMzks
NyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCisjaW5jbHVkZSAiRXh0ZW5z
aW9uU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9j
dXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTEwMTMsNyArMTAx
Myw3IEBAIHZvaWQgUGFnZTo6dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQKIAogICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAg
ICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnVwZGF0
ZVBhZ2VVc2VyU2hlZXQoKTsKKyAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5leHRlbnNp
b25TdHlsZVNoZWV0cygpLnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKICAgICB9CiB9CiAKQEAgLTE2
MzEsNyArMTYzMSw3IEBAIHZvaWQgUGFnZTo6c2V0VXNlckNvbnRlbnRDb250cm9sbGVyKFVzZXIK
IAogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgIGlmIChEb2N1bWVudCAqZG9j
dW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQtPnN0eWxl
U2hlZXRDb2xsZWN0aW9uKCkuaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCk7Cisg
ICAgICAgICAgICBkb2N1bWVudC0+ZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5pbnZhbGlkYXRlSW5q
ZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKICAgICAgICAgICAgIGRvY3VtZW50LT5zdHlsZVJlc29s
dmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAog
I2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbi5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQYWdlQ2FjaGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250
ZW50Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIk1haW5GcmFt
ZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCkBA
IC0yNDMsNyArMjQ0LDcgQEAgdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmludmFsaWRhdGVJ
bgogewogICAgIGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZXMpIHsKICAgICAgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zdHls
ZVNoZWV0Q29sbGVjdGlvbigpLmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpOwor
ICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmV4dGVuc2lvblN0eWxlU2hlZXRzKCkuaW52
YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCk7CiAgICAgICAgICAgICBmcmFtZS0+ZG9j
dW1lbnQoKS0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MjQsNyArMjgyNCw3IEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2s6OmxpbmVIZWlnaHQoYm9vbCAKICAgICBpZiAoaXNSZXBsYWNlZCgpICYmIGxpbmVQ
b3NpdGlvbk1vZGUgPT0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKQogICAgICAgICByZXR1cm4g
UmVuZGVyQm94OjpsaW5lSGVpZ2h0KGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25N
b2RlKTsKIAotICAgIGlmIChmaXJzdExpbmUgJiYgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVj
dGlvbigpLnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CisgICAgaWYgKGZpcnN0TGluZSAmJiB2aWV3
KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpIHsKICAgICAgICAgUmVuZGVyU3R5bGUmIHMgPSBmaXJz
dExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsKICAgICAgICAgaWYgKCZzICE9ICZz
dHlsZSgpKQogICAgICAgICAgICAgcmV0dXJuIHMuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CkBAIC0z
MTYxLDcgKzMxNjEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpnZXRGaXJzdExldHRlcihSZW5kZXJP
CiAgICAgZmlyc3RMZXR0ZXIgPSBudWxscHRyOwogICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyID0g
bnVsbHB0cjsKIAotICAgIGlmICghZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnVz
ZXNGaXJzdExldHRlclJ1bGVzKCkpCisgICAgaWYgKCF2aWV3KCkudXNlc0ZpcnN0TGV0dGVyUnVs
ZXMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRG9uJ3QgcmVjdXIKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDA3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBm
aXJzdExpbmUKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRWxlbWVudDo6dW5jYWNo
ZWRGaXJzdExpbmVTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFk
b2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpCisg
ICAgaWYgKCF2aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgcmV0dXJuIGZpcnN0TGluZVN0eWxlRm9yQ2FjaGVkVW5jYWNoZWRUeXBlKFVu
Y2FjaGVkLCAqdGhpcywgc3R5bGUpOwpAQCAtMjQwLDcgKzI0MCw3IEBAIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IFJlbmRlckVsZW1lbnQ6OnUKIAogUmVuZGVyU3R5bGUqIFJlbmRlckVsZW1lbnQ6
OmNhY2hlZEZpcnN0TGluZVN0eWxlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS5z
dHlsZVNoZWV0Q29sbGVjdGlvbigpLnVzZXNGaXJzdExpbmVSdWxlcygpKTsKKyAgICBBU1NFUlQo
dmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKTsKIAogICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9
IHRoaXMtPnN0eWxlKCk7CiAgICAgaWYgKFJlZlB0cjxSZW5kZXJTdHlsZT4gZmlyc3RMaW5lU3R5
bGUgPSBmaXJzdExpbmVTdHlsZUZvckNhY2hlZFVuY2FjaGVkVHlwZShDYWNoZWQsICp0aGlzLCAm
c3R5bGUpKQpAQCAtMjQ5LDYgKzI0OSwxMSBAQCBSZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6
Y2FjaGVkRmlyc3RMCiAgICAgcmV0dXJuICZzdHlsZTsKIH0KIAorUmVuZGVyU3R5bGUmIFJlbmRl
ckVsZW1lbnQ6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdmlldygpLnVz
ZXNGaXJzdExpbmVSdWxlcygpID8gKmNhY2hlZEZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwor
fQorCiBTdHlsZURpZmZlcmVuY2UgUmVuZGVyRWxlbWVudDo6YWRqdXN0U3R5bGVEaWZmZXJlbmNl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCB1bnNpZ25lZCBjb250ZXh0U2Vuc2l0aXZlUHJvcGVydGll
cykgY29uc3QKIHsKICAgICAvLyBJZiB0cmFuc2Zvcm0gY2hhbmdlZCwgYW5kIHdlIGFyZSBub3Qg
Y29tcG9zaXRlZCwgbmVlZCB0byBkbyBhIGxheW91dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkocmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDExICsz
NDYsNiBAQCBpbmxpbmUgdm9pZCBSZW5kZXJFbGVtZW50OjpzZXRBbmltYXRhYmxlCiAgICAgc2V0
U3R5bGUoV1RGOjptb3ZlKGFuaW1hdGVkU3R5bGUpLCBtaW5pbWFsU3R5bGVEaWZmZXJlbmNlKTsK
IH0KIAotaW5saW5lIFJlbmRlclN0eWxlJiBSZW5kZXJFbGVtZW50OjpmaXJzdExpbmVTdHlsZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS51
c2VzRmlyc3RMaW5lUnVsZXMoKSA/ICpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsK
LX0KLQogaW5saW5lIHZvaWQgUmVuZGVyRWxlbWVudDo6c2V0QW5jZXN0b3JMaW5lQm94RGlydHko
Ym9vbCBmKQogewogICAgIG1fYW5jZXN0b3JMaW5lQm94RGlydHkgPSBmOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDE5MDA3NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTksNyArMjE5LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0
ZUxpbgogICAgICAgICB8fCBwYXJlbnRTdHlsZS0+bGluZUhlaWdodCgpICE9IHN0eWxlKCkubGlu
ZUhlaWdodCgpKSkKICAgICAgICAgfHwgKGZsb3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+aXNSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQoKSk7IC8vIEZJWE1FOiBFbmFibGUgdGhlIG9wdGltaXphdGlvbiBv
bmNlIHdlIG1ha2Ugb3ZlcmZsb3cgY29tcHV0YXRpb24gZm9yIGN1bGxlZCBpbmxpbmVzIGluIHJl
Z2lvbnMuCiAKLSAgICBpZiAoIWFsd2F5c0NyZWF0ZUxpbmVCb3hlcyAmJiBjaGVja0ZvbnRzICYm
IGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS51c2VzRmlyc3RMaW5lUnVsZXMoKSkg
eworICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzICYmIGNoZWNrRm9udHMgJiYgdmlldygp
LnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CiAgICAgICAgIC8vIEhhdmUgdG8gY2hlY2sgdGhlIGZp
cnN0IGxpbmUgc3R5bGUgYXMgd2VsbC4KICAgICAgICAgcGFyZW50U3R5bGUgPSAmcGFyZW50KCkt
PmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIFJlbmRlclN0eWxlJiBjaGlsZFN0eWxlID0gZmly
c3RMaW5lU3R5bGUoKTsKQEAgLTE0NTcsNyArMTQ1Nyw3IEBAIElubGluZUZsb3dCb3gqIFJlbmRl
cklubGluZTo6Y3JlYXRlQW5kQXAKIAogTGF5b3V0VW5pdCBSZW5kZXJJbmxpbmU6OmxpbmVIZWln
aHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIC8qZGlyZWN0aW9uKi8sIExpbmVQ
b3NpdGlvbk1vZGUgLypsaW5lUG9zaXRpb25Nb2RlKi8pIGNvbnN0CiB7Ci0gICAgaWYgKGZpcnN0
TGluZSAmJiBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkudXNlc0ZpcnN0TGluZVJ1
bGVzKCkpIHsKKyAgICBpZiAoZmlyc3RMaW5lICYmIHZpZXcoKS51c2VzRmlyc3RMaW5lUnVsZXMo
KSkgewogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUgPSB0aGlzLT5m
aXJzdExpbmVTdHlsZSgpOwogICAgICAgICBpZiAoJmZpcnN0TGluZVN0eWxlICE9ICZzdHlsZSgp
KQogICAgICAgICAgICAgcmV0dXJuIGZpcnN0TGluZVN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAJ
KHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5l
QnJlYWsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIFJlbmRlckxpbmVCcmVh
azo6flJlbmRlckxpbmVCcmVhaygpCiAKIExheW91dFVuaXQgUmVuZGVyTGluZUJyZWFrOjpsaW5l
SGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSAvKmRpcmVjdGlvbiovLCBM
aW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9kZSovKSBjb25zdAogewotICAgIGlmIChm
aXJzdExpbmUgJiYgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnVzZXNGaXJzdExp
bmVSdWxlcygpKSB7CisgICAgaWYgKGZpcnN0TGluZSAmJiB2aWV3KCkudXNlc0ZpcnN0TGluZVJ1
bGVzKCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxlID0gdGhp
cy0+Zmlyc3RMaW5lU3R5bGUoKTsKICAgICAgICAgaWYgKCZmaXJzdExpbmVTdHlsZSAhPSAmc3R5
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBmaXJzdExpbmVTdHlsZS5jb21wdXRlZExpbmVIZWln
aHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24g
MTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg3LDYgKzE4NywxMSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yJiBjb21wb3NpdG9yKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCB1c2VzQ29tcG9zaXRpbmcoKSBjb25zdDsKIAorICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1
bGVzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRmlyc3RMaW5lUnVsZXM7IH0KKyAgICBib29sIHVz
ZXNGaXJzdExldHRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRmlyc3RMZXR0ZXJSdWxl
czsgfQorICAgIHZvaWQgc2V0VXNlc0ZpcnN0TGluZVJ1bGVzKGJvb2wgdmFsdWUpIHsgbV91c2Vz
Rmlyc3RMaW5lUnVsZXMgPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0VXNlc0ZpcnN0TGV0dGVyUnVs
ZXMoYm9vbCB2YWx1ZSkgeyBtX3VzZXNGaXJzdExldHRlclJ1bGVzID0gdmFsdWU7IH0KKwogICAg
IFdFQkNPUkVfRVhQT1JUIEludFJlY3QgdW5zY2FsZWREb2N1bWVudFJlY3QoKSBjb25zdDsKICAg
ICBMYXlvdXRSZWN0IHVuZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCgpIGNvbnN0OwogICAgIExheW91
dFJlY3QgYmFja2dyb3VuZFJlY3QoKSBjb25zdDsKQEAgLTM2OSw2ICszNzQsOCBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBtX3NlbGVjdGlvbldhc0NhcmV0OwogICAgIGJvb2wgbV9oYXNTb2Z0d2Fy
ZUZpbHRlcnM7CisgICAgYm9vbCBtX3VzZXNGaXJzdExpbmVSdWxlcyB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3VzZXNGaXJzdExldHRlclJ1bGVzIHsgZmFsc2UgfTsKIAogICAgIEhhc2hTZXQ8UmVu
ZGVyRWxlbWVudCo+IG1fcmVuZGVyZXJzV2l0aFBhdXNlZEltYWdlQW5pbWF0aW9uOwogICAgIFZl
Y3RvcjxSZWZQdHI8UmVuZGVyV2lkZ2V0Pj4gbV9wcm90ZWN0ZWRSZW5kZXJXaWRnZXRzOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24g
MTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05OTksNyArOTk5LDcgQEAgTGF5b3V0VW5pdCBSb290SW5saW5lQm94
Ojp2ZXJ0aWNhbFBvc2l0aQogCiAgICAgLy8gVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdmVy
dGljYWwgcG9zaXRpb24gZm9yIGlubGluZSBlbGVtZW50cy4KICAgICBib29sIGZpcnN0TGluZSA9
IGlzRmlyc3RMaW5lKCk7Ci0gICAgaWYgKGZpcnN0TGluZSAmJiAhcmVuZGVyZXItPmRvY3VtZW50
KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS51c2VzRmlyc3RMaW5lUnVsZXMoKSkKKyAgICBpZiAo
Zmlyc3RMaW5lICYmICFibG9ja0Zsb3coKS52aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpCiAg
ICAgICAgIGZpcnN0TGluZSA9IGZhbHNlOwogCiAgICAgLy8gQ2hlY2sgdGhlIGNhY2hlLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHJldmlzaW9uIDE5
MDA4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgi
CiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkF1dGhvclN0eWxl
U2hlZXRzLmgiCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVu
dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVudFJhcmVEYXRhLmgiCkBAIC02ODUsNyArNjg2
LDcgQEAgc3RhdGljIENoYW5nZSByZXNvbHZlTG9jYWwoRWxlbWVudCYgY3VycgogCiAgICAgLy8g
SWYgInJlbSIgdW5pdHMgYXJlIHVzZWQgYW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LCBhbmQgaWYg
dGhlIGRvY3VtZW50IGVsZW1lbnQncyBmb250IHNpemUgY2hhbmdlcywgdGhlbiBmb3JjZSBmb250
IHVwZGF0aW5nCiAgICAgLy8gYWxsIHRoZSB3YXkgZG93biB0aGUgdHJlZS4gVGhpcyBpcyBzaW1w
bGVyIHRoYW4gaGF2aW5nIHRvIG1haW50YWluIGEgY2FjaGUgb2Ygb2JqZWN0cyAoYW5kIHN1Y2gg
Zm9udCBzaXplIGNoYW5nZXMgc2hvdWxkIGJlIHJhcmUgYW55d2F5KS4KLSAgICBpZiAoZG9jdW1l
bnQuc3R5bGVTaGVldENvbGxlY3Rpb24oKS51c2VzUmVtVW5pdHMoKSAmJiBkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQoKSA9PSAmY3VycmVudCAmJiBsb2NhbENoYW5nZSAhPSBOb0NoYW5nZSAmJiBj
dXJyZW50U3R5bGUgJiYgbmV3U3R5bGUgJiYgY3VycmVudFN0eWxlLT5mb250U2l6ZSgpICE9IG5l
d1N0eWxlLT5mb250U2l6ZSgpKSB7CisgICAgaWYgKGRvY3VtZW50LmF1dGhvclN0eWxlU2hlZXRz
KCkudXNlc1JlbVVuaXRzKCkgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkgPT0gJmN1cnJl
bnQgJiYgbG9jYWxDaGFuZ2UgIT0gTm9DaGFuZ2UgJiYgY3VycmVudFN0eWxlICYmIG5ld1N0eWxl
ICYmIGN1cnJlbnRTdHlsZS0+Zm9udFNpemUoKSAhPSBuZXdTdHlsZS0+Zm9udFNpemUoKSkgewog
ICAgICAgICAvLyBDYWNoZWQgUmVuZGVyU3R5bGVzIG1heSBkZXBlbmQgb24gdGhlIHJlIHVuaXRz
LgogICAgICAgICBpZiAoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGRvY3VtZW50LnN0
eWxlUmVzb2x2ZXJJZkV4aXN0cygpKQogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+aW52YWxp
ZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKQEAgLTkxNCw2ICs5MTUsOCBAQCB2b2lkIHJl
c29sdmVUcmVlKEVsZW1lbnQmIGN1cnJlbnQsIFJlbmRlCiAKIHZvaWQgcmVzb2x2ZVRyZWUoRG9j
dW1lbnQmIGRvY3VtZW50LCBDaGFuZ2UgY2hhbmdlKQogeworICAgIGF1dG8mIHJlbmRlclZpZXcg
PSAqZG9jdW1lbnQucmVuZGVyVmlldygpOworCiAgICAgaWYgKGNoYW5nZSA9PSBGb3JjZSkgewog
ICAgICAgICBhdXRvIGRvY3VtZW50U3R5bGUgPSByZXNvbHZlRm9yRG9jdW1lbnQoZG9jdW1lbnQp
OwogCkBAIC05MjQsOSArOTI3LDkgQEAgdm9pZCByZXNvbHZlVHJlZShEb2N1bWVudCYgZG9jdW1l
bnQsIENoYQogICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udENhc2NhZGUo
KS51cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgfQogCi0gICAgICAg
IFN0eWxlOjpDaGFuZ2UgZG9jdW1lbnRDaGFuZ2UgPSBkZXRlcm1pbmVDaGFuZ2UoZG9jdW1lbnRT
dHlsZS5nZXQoKSwgZG9jdW1lbnQucmVuZGVyVmlldygpLT5zdHlsZSgpKTsKKyAgICAgICAgU3R5
bGU6OkNoYW5nZSBkb2N1bWVudENoYW5nZSA9IGRldGVybWluZUNoYW5nZShkb2N1bWVudFN0eWxl
LmdldCgpLCByZW5kZXJWaWV3LnN0eWxlKCkpOwogICAgICAgICBpZiAoZG9jdW1lbnRDaGFuZ2Ug
IT0gTm9DaGFuZ2UpCi0gICAgICAgICAgICBkb2N1bWVudC5yZW5kZXJWaWV3KCktPnNldFN0eWxl
KFdURjo6bW92ZShkb2N1bWVudFN0eWxlKSk7CisgICAgICAgICAgICByZW5kZXJWaWV3LnNldFN0
eWxlKFdURjo6bW92ZShkb2N1bWVudFN0eWxlKSk7CiAgICAgfQogCiAgICAgRWxlbWVudCogZG9j
dW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCk7CkBAIC05MzQsOCArOTM3
LDE4IEBAIHZvaWQgcmVzb2x2ZVRyZWUoRG9jdW1lbnQmIGRvY3VtZW50LCBDaGEKICAgICAgICAg
cmV0dXJuOwogICAgIGlmIChjaGFuZ2UgPCBJbmhlcml0ICYmICFkb2N1bWVudEVsZW1lbnQtPmNo
aWxkTmVlZHNTdHlsZVJlY2FsYygpICYmICFkb2N1bWVudEVsZW1lbnQtPm5lZWRzU3R5bGVSZWNh
bGMoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlclRyZWVQb3NpdGlvbiByZW5kZXJUcmVl
UG9zaXRpb24oKmRvY3VtZW50LnJlbmRlclZpZXcoKSk7CisKKyAgICBhdXRvJiBzdHlsZVJlc29s
dmVkID0gZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOworCisgICAgLy8gUHNldWRvIGVs
ZW1lbnQgcmVtb3ZhbCBhbmQgc2ltaWxhciBtYXkgb25seSB3b3JrIHdpdGggdGhlc2UgZmxhZ3Mg
c3RpbGwgc2V0LiBSZXNldCB0aGVtIGFmdGVyIHRoZSBzdHlsZSByZWNhbGMuCisgICAgcmVuZGVy
Vmlldy5zZXRVc2VzRmlyc3RMaW5lUnVsZXMocmVuZGVyVmlldy51c2VzRmlyc3RMaW5lUnVsZXMo
KSB8fCBzdHlsZVJlc29sdmVkLnVzZXNGaXJzdExpbmVSdWxlcygpKTsKKyAgICByZW5kZXJWaWV3
LnNldFVzZXNGaXJzdExldHRlclJ1bGVzKHJlbmRlclZpZXcudXNlc0ZpcnN0TGV0dGVyUnVsZXMo
KSB8fCBzdHlsZVJlc29sdmVkLnVzZXNGaXJzdExldHRlclJ1bGVzKCkpOworCisgICAgUmVuZGVy
VHJlZVBvc2l0aW9uIHJlbmRlclRyZWVQb3NpdGlvbihyZW5kZXJWaWV3KTsKICAgICByZXNvbHZl
VHJlZSgqZG9jdW1lbnRFbGVtZW50LCAqZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgcmVuZGVyVHJl
ZVBvc2l0aW9uLCBjaGFuZ2UpOworCisgICAgcmVuZGVyVmlldy5zZXRVc2VzRmlyc3RMaW5lUnVs
ZXMoc3R5bGVSZXNvbHZlZC51c2VzRmlyc3RMaW5lUnVsZXMoKSk7CisgICAgcmVuZGVyVmlldy5z
ZXRVc2VzRmlyc3RMZXR0ZXJSdWxlcyhzdHlsZVJlc29sdmVkLnVzZXNGaXJzdExldHRlclJ1bGVz
KCkpOwogfQogCiB2b2lkIGRldGFjaFJlbmRlclRyZWUoRWxlbWVudCYgZWxlbWVudCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
NiArNDksNyBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uU3R5bGVT
aGVldHMuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5j
bHVkZSAiRm9ybUNvbnRyb2xsZXIuaCIKQEAgLTE5NDAsNyArMTk0MSw3IEBAIHZvaWQgSW50ZXJu
YWxzOjppbnNlcnRBdXRob3JDU1MoY29uc3QgU3QKICAgICBhdXRvIHBhcnNlZFNoZWV0ID0gU3R5
bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoKmRvY3VtZW50KTsKICAgICBwYXJzZWRTaGVldC5nZXQo
KS5zZXRJc1VzZXJTdHlsZVNoZWV0KGZhbHNlKTsKICAgICBwYXJzZWRTaGVldC5nZXQoKS5wYXJz
ZVN0cmluZyhjc3MpOwotICAgIGRvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLmFkZEF1
dGhvclNoZWV0KFdURjo6bW92ZShwYXJzZWRTaGVldCkpOworICAgIGRvY3VtZW50LT5leHRlbnNp
b25TdHlsZVNoZWV0cygpLmFkZEF1dGhvclN0eWxlU2hlZXRGb3JUZXN0aW5nKFdURjo6bW92ZShw
YXJzZWRTaGVldCkpOwogfQogCiB2b2lkIEludGVybmFsczo6aW5zZXJ0VXNlckNTUyhjb25zdCBT
dHJpbmcmIGNzcywgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkBAIC0xOTU0LDcgKzE5NTUsNyBA
QCB2b2lkIEludGVybmFsczo6aW5zZXJ0VXNlckNTUyhjb25zdCBTdHJpCiAgICAgYXV0byBwYXJz
ZWRTaGVldCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKCpkb2N1bWVudCk7CiAgICAgcGFy
c2VkU2hlZXQuZ2V0KCkuc2V0SXNVc2VyU3R5bGVTaGVldCh0cnVlKTsKICAgICBwYXJzZWRTaGVl
dC5nZXQoKS5wYXJzZVN0cmluZyhjc3MpOwotICAgIGRvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVj
dGlvbigpLmFkZFVzZXJTaGVldChXVEY6Om1vdmUocGFyc2VkU2hlZXQpKTsKKyAgICBkb2N1bWVu
dC0+ZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5hZGRVc2VyU3R5bGVTaGVldChXVEY6Om1vdmUocGFy
c2VkU2hlZXQpKTsKIH0KIAogU3RyaW5nIEludGVybmFsczo6Y291bnRlclZhbHVlKEVsZW1lbnQq
IGVsZW1lbnQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261800</attachid>
            <date>2015-09-22 23:55:57 -0700</date>
            <delta_ts>2015-09-23 04:31:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylesheetcollection-split-4.patch</filename>
            <type>text/plain</type>
            <size>221810</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMSBAQAorMjAxNS0wOS0yMiAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgYXV0aG9yIHN0eWxl
IGNvZGUgb3V0IGZyb20gRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NDQ2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2hhZG93IHRyZWVzIG1heSBoYXZl
IHRoZWlyIG93biBhdXRob3Igc3R5bGUuIEZhY3RvciB0aGUgcmVsYXRlZCBjb2RlIG91dCBzbyB3
ZSBjYW4gbGF0ZXIgdXNlCisgICAgICAgIGl0IG91dHNpZGUgZG9jdW1lbnQgY29udGV4dC4KKwor
ICAgICAgICBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uIGlzIHJlcGxhY2VkIGJ5IHR3byBj
bGFzc2VzOgorCisgICAgICAgIEF1dGhvclN0eWxlU2hlZXRzIC0gYXV0aG9yIHN0eWxlc2hlZXRz
IGFuZCBvcHRpbWl6YXRpb24gY29kZQorICAgICAgICBFeHRlbnNpb25TdHlsZVNoZWV0cyAtIHVz
ZXIgc3R5bGVzaGVldHMsIGluamVjdGVkIGF1dGhvciBzdHlsZXNoZWV0cywgY29udGVudCBleHRl
bnNpb24gc3R5bGVzaGVldHMKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0Jh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb25zQmFja2VuZDo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgor
ICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2hlZXQ6OmRpZE11dGF0ZVJ1bGVzKToKKyAgICAgICAgKiBjc3MvRG9jdW1lbnRSdWxlU2V0
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjp+RG9jdW1lbnRSdWxl
U2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjppbml0VXNlclN0eWxl
KToKKyAgICAgICAgKiBjc3MvRG9jdW1lbnRSdWxlU2V0cy5oOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRSdWxlU2V0czo6c2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1
bGVTZXRzOjp1bmNvbW1vbkF0dHJpYnV0ZSk6CisgICAgICAgICogY3NzL0luc3BlY3RvckNTU09N
V3JhcHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTT01XcmFwcGVyczo6
Y29sbGVjdEZyb21TdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NP
TVdyYXBwZXJzOjpnZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNTU09NV3JhcHBlcnM6OmNvbGxlY3RGcm9tRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogY3NzL0luc3BlY3RvckNTU09NV3JhcHBlcnMu
aDoKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVl
dExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldExpc3Q6OnN0eWxlU2hlZXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0OjpkZXRhY2hGcm9tRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldExpc3Q6Omxlbmd0aCk6CisgICAgICAgICog
ZG9tL0F1dGhvclN0eWxlU2hlZXRzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBdXRo
b3JTdHlsZVNoZWV0czo6QXV0aG9yU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6QXV0
aG9yU3R5bGVTaGVldHM6OmNvbWJpbmVDU1NGZWF0dXJlRmxhZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6QXV0aG9yU3R5bGVTaGVldHM6OnJlc2V0Q1NTRmVhdHVyZUZsYWdzKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjphZGRBdXRob3JTaGVldCk6CisgICAgICAgIChXZWJD
b3JlOjpBdXRob3JTdHlsZVNoZWV0czo6cmVtb3ZlUGVuZGluZ1NoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjphZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6cmVtb3ZlU3R5bGVTaGVldENhbmRp
ZGF0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OmNvbGxlY3RB
Y3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6
YW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyRW5hYmxl
ZE5vbmVtcHR5Q1NTU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVT
aGVldHM6OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhv
clN0eWxlU2hlZXRzOjphY3RpdmVTdHlsZVNoZWV0c0Zvckluc3BlY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldHNDb250YWlucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6ZGV0YWNoRnJvbURvY3VtZW50KToK
KyAgICAgICAgKiBkb20vQXV0aG9yU3R5bGVTaGVldHMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpBdXRob3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldHMpOgorICAgICAgICAoV2Vi
Q29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OnN0eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1dGhvclN0eWxlU2hlZXRzOjpzdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpwZW5kaW5nVXBkYXRlVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6c2V0UGVuZGluZ1VwZGF0ZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OmZsdXNoUGVuZGluZ1VwZGF0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OnByZWZlcnJlZFN0eWxlc2hl
ZXRTZXROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpzZWxlY3Rl
ZFN0eWxlc2hlZXRTZXROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRz
OjpzZXRQcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBdXRo
b3JTdHlsZVNoZWV0czo6c2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6YWRkUGVuZGluZ1NoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpoYXNQZW5kaW5nU2hlZXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjp1c2VzRmlyc3RMaW5lUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OnVzZXNGaXJzdExldHRlclJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjp1c2VzUmVtVW5pdHMpOgorICAgICAgICAo
V2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OnNldFVzZXNSZW1Vbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjp1c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpzZXRVc2VzU3R5bGVCYXNlZEVkaXRh
YmlsaXR5KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp+RG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldENvbXBhdGliaWxpdHlNb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6Y3JlYXRlU3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Zm9udHNOZWVkVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpw
cm9jZXNzSHR0cEVxdWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVmZXJyZWRT
dHlsZXNoZWV0U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZWxlY3RlZFN0eWxl
c2hlZXRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFNlbGVjdGVkU3R5bGVz
aGVldFNldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2NoZWR1bGVPcHRpbWl6ZWRT
dHlsZVNoZWV0VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzdHlsZVJlc29s
dmVyQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aGF2ZVN0eWxlc2hlZXRz
TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRDYWNoZWRMb2NhbGUpOgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmF1
dGhvclN0eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpleHRlbnNpb25T
dHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Z290b0FuY2hvck5lZWRl
ZEFmdGVyU3R5bGVzaGVldHNMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRH
b3RvQW5jaG9yTmVlZGVkQWZ0ZXJTdHlsZXNoZWV0c0xvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnN0eWxlU2hlZXRDb2xsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20v
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZG9t
L0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20v
RXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25TdHlsZVNoZWV0czo6RXh0ZW5zaW9uU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OnBhZ2VVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OmNsZWFyUGFnZVVzZXJTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25TdHlsZVNoZWV0czo6dXBkYXRlUGFnZVVzZXJTaGVldCk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25TdHlsZVNoZWV0czo6aW5qZWN0ZWRVc2VyU3R5bGVTaGVl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OmluamVjdGVkQXV0
aG9yU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6
OnVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvblN0eWxlU2hlZXRzOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OmFkZFVzZXJTaGVldCk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25TdHlsZVNoZWV0czo6YWRkRGlzcGxheU5vbmVTZWxlY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25TdHlsZVNoZWV0czo6bWF5YmVBZGRDb250
ZW50RXh0ZW5zaW9uU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVl
dHM6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25TdHlsZVNoZWV0czo6ZGV0YWNoRnJvbURvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OkRvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6Y29tYmluZUNTU0ZlYXR1cmVGbGFncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpyZXNldENTU0ZlYXR1cmVGbGFncyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
OjpwYWdlVXNlclNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb246OmNsZWFyUGFnZVVzZXJTaGVldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVQYWdlVXNlclNo
ZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb246OmluamVjdGVkVXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmluamVjdGVkQXV0aG9yU3R5bGVTaGVl
dHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbjo6dXBkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6aW52YWxpZGF0ZUluamVjdGVk
U3R5bGVTaGVldENhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb246OmFkZEF1dGhvclNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFkZFVzZXJTaGVldCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphZGRE
aXNwbGF5Tm9uZVNlbGVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246Om1heWJlQWRkQ29udGVudEV4dGVuc2lvblNoZWV0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnN0
eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpyZW1vdmVQZW5kaW5nU2hlZXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRk
U3R5bGVTaGVldENhbmRpZGF0ZU5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbHRlckVuYWJsZWROb25lbXB0eUNTU1N0eWxl
U2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb246OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFjdGl2ZVN0eWxlU2hlZXRzRm9y
SW5zcGVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb246OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6ZGV0YWNoRnJvbURvY3Vt
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24u
aC4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvblN0eWxlU2hlZXRzOjpkb2N1bWVudFVzZXJT
dHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uOjpzdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFjdGl2ZUF1dGhvclN0eWxlU2hl
ZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb246OmRvY3VtZW50VXNlclN0eWxlU2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmRvY3VtZW50QXV0aG9yU3R5bGVTaGVl
dHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbjo6cGVuZGluZ1VwZGF0ZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6c2V0UGVuZGluZ1VwZGF0ZVR5cGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Zmx1c2hQ
ZW5kaW5nVXBkYXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uOjpwcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpzZWxlY3RlZFN0
eWxlc2hlZXRTZXROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb246OnNldFByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnNldFNl
bGVjdGVkU3R5bGVzaGVldFNldE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkUGVuZGluZ1NoZWV0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246Omhhc1BlbmRpbmdT
aGVldHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6dXNlc0ZpcnN0TGluZVJ1bGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVzZXNGaXJzdExldHRlclJ1bGVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVz
ZXNSZW1Vbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjpzZXRVc2VzUmVtVW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b246OnNldFVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkpOiBEZWxldGVkLgorICAgICAgICAqIGRv
bS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lU3R5
bGVTaGVldE93bmVyOjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVTdHlsZVNoZWV0T3duZXI6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lU3R5bGVTaGVldE93bmVyOjpjbGVhckRvY3VtZW50RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZVN0eWxlU2hlZXRPd25lcjo6c2hlZXRMb2FkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lU3R5bGVTaGVldE93bmVyOjpzdGFydExvYWRpbmdEeW5hbWljU2hl
ZXQpOgorICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjp+UHJvY2Vzc2luZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6bm9kZU5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzaGVldExvYWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Omluc2VydGVkSW50byk6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnJlbW92ZWRGcm9tKToKKyAg
ICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TGlua0VsZW1lbnQ6On5IVE1MTGlua0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVt
ZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OmFk
ZFBlbmRpbmdTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnJlbW92
ZVBlbmRpbmdTaGVldCk6CisgICAgICAgICogaHRtbC9IVE1MUXVvdGVFbGVtZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RBbGxEb2N1bWVudFN0eWxlU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUpOgor
ICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudExvYWRlcjo6Y29tbWl0RGF0YSk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6CisgICAgICAg
ICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAgICAgICAqIHBhZ2UvVXNlckNvbnRlbnRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6aW52YWxp
ZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGlu
ZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Z2V0Rmlyc3RMZXR0ZXIp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckVsZW1lbnQ6OnVuY2FjaGVkRmlyc3RMaW5lU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRWxlbWVudDo6Y2FjaGVkRmlyc3RMaW5lU3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50
OjpmaXJzdExpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpzZXRB
bmNlc3RvckxpbmVCb3hEaXJ0eSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxp
bmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmxpbmVIZWlnaHQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGluZUJyZWFrOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojp2ZXJ0aWNh
bFBvc2l0aW9uRm9yQm94KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlTG9jYWwpOgorCiAyMDE1LTA5LTIyICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgR2V0IHJpZCBvZiBFTkFC
TEUoR0dDKQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzc3LDYgKzEz
NzcsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAK
ICAgICBkb20vQW5pbWF0aW9uRXZlbnQuY3BwCiAgICAgZG9tL0F0dHIuY3BwCisgICAgZG9tL0F1
dGhvclN0eWxlU2hlZXRzLmNwcAogICAgIGRvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAK
ICAgICBkb20vQmVmb3JlVW5sb2FkRXZlbnQuY3BwCiAgICAgZG9tL0NEQVRBU2VjdGlvbi5jcHAK
QEAgLTE0MTgsNyArMTQxOSw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmNwcAogICAgIGRvbS9Eb2N1bWVudFBhcnNlci5jcHAKICAgICBkb20vRG9j
dW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcAotICAgIGRvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uLmNwcAogICAgIGRvbS9Eb2N1bWVudFR5cGUuY3BwCiAgICAgZG9tL0VsZW1lbnQuY3Bw
CiAgICAgZG9tL0VsZW1lbnREYXRhLmNwcApAQCAtMTQzNCw2ICsxNDM0LDcgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIGRvbS9FdmVudFRhcmdldC5jcHAKICAgICBkb20vRXhjZXB0aW9uQmFz
ZS5jcHAKICAgICBkb20vRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmNwcAorICAgIGRvbS9FeHRl
bnNpb25TdHlsZVNoZWV0cy5jcHAKICAgICBkb20vRm9jdXNFdmVudC5jcHAKICAgICBkb20vR2Vu
ZXJpY0V2ZW50UXVldWUuY3BwCiAgICAgZG9tL0lkVGFyZ2V0T2JzZXJ2ZXIuY3BwCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlz
aW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzNTExLDYgKzEzNTExLDIwIEBACiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21w
aWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZG9tXEF1dGhvclN0eWxlU2hlZXRzLmNw
cCI+CisgICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CisgICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAg
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgorICAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CisgICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgorICAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkb21cQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwIj4KICAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTEzOTg3LDIwICsxNDAwMSw2IEBA
CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgog
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZG9tXERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwIj4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4NjQnIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRvbVxEb2N1bWVudFR5cGUuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMy
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTE0MjgyLDYgKzE0MjgyLDIwIEBACiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21w
aWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZG9tXEV4dGVuc2lvblN0eWxlU2hlZXRz
LmNwcCI+CisgICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CisgICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgor
ICAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgorICAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CisgICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkb21cR2VuZXJpY0V2ZW50UXVldWUuY3BwIj4KICAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4
NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTIxOTU1LDYgKzIxOTY5LDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRvbVxBbmltYXRpb25FdmVudC5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXEF0dHIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRvbVxBdHRyaWJ1dGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRv
bVxBdXRob3JTdHlsZVNoZWV0cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9t
XEJlZm9yZUxvYWRFdmVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXEJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
b21cQmVmb3JlVW5sb2FkRXZlbnQuaCIgLz4KQEAgLTIxOTk0LDcgKzIyMDA5LDYgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRvbVxEb2N1bWVudE9yZGVyZWRNYXAuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRvbVxEb2N1bWVudFBhcnNlci5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZG9tXERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24u
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRvbVxEb2N1bWVudFRpbWluZy5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXERvY3VtZW50VHlwZS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXERPTUNvcmVFeGNlcHRpb24uaCIgLz4KQEAgLTIy
MDI4LDYgKzIyMDQyLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRvbVxFeGNlcHRp
b25CYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cRXhjZXB0aW9uQ29k
ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXEV4Y2VwdGlvbkNvZGVQbGFj
ZWhvbGRlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXEV4dGVuc2lvblN0
eWxlU2hlZXRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cR2VuZXJpY0V2
ZW50UXVldWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRvbVxIYXNoQ2hhbmdl
RXZlbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRvbVxJY29uVVJMLmgiIC8+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYzNzYsNiArNjM3Niw4IEBA
CiAJCUU0NTM5MDQ5MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1Mzkw
MzgwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW0gKi87IH07
CiAJCUU0NTM5MDREMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzOTAzQzBFQUZENjM3MDAzNjk1
QzggLyogV2lkZ2V0SU9TLm1tICovOyB9OwogCQlFNDUzOTBBRTBFQUZGNEI1MDAzNjk1QzggLyog
U3lzdGVtTWVtb3J5SU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0NTM5MEFEMEVBRkY0QjUwMDM2OTVDOCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3Bw
ICovOyB9OworCQlFNDYxRDY1RDFCQjBDN0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2MUQ2
NUMxQkIwQzdGMDAwQ0I1NjQ1IC8qIEF1dGhvclN0eWxlU2hlZXRzLmNwcCAqLzsgc2V0dGluZ3Mg
PSB7QVNTRVRfVEFHUyA9ICgpOyB9OyB9OworCQlFNDYxRDY1RjFCQjBDODBEMDBDQjU2NDUgLyog
QXV0aG9yU3R5bGVTaGVldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0NjFENjVFMUJCMEM4MEQwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5o
ICovOyBzZXR0aW5ncyA9IHtBU1NFVF9UQUdTID0gKCk7IH07IH07CiAJCUU0NjJBNEExMTEzRTcx
QkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjJBNEEwMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQb2ludEhh
c2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
NDZBMkIxQzE3Q0E2NUI5MDAwREJDRDggLyogVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDZBMkIx
QjE3Q0E2NUI5MDAwREJDRDggLyogVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ2QTJCMUUx
N0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDZBMkIxRDE3Q0E3NkIxMDAwREJDRDgg
LyogRWxlbWVudENoaWxkSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtNjM4NSw4ICs2Mzg3LDggQEAKIAkJRTQ3NzhCODAxMTVBNTgx
QTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0Nzc4QjdFMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2
ZW50LmggKi87IH07CiAJCUU0N0I0QkU4MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ3QjRCRTYwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ3QjRCRTkwRTcx
MjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAv
KiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgKi87IH07Ci0JCUU0N0UyNzY1MTYwMzZFRDIwMEVF
MkFGQiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyog
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUU0N0UyNzY4MTYwMzZFREMwMEVFMkFGQiAvKiBEb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0UyNzY3MTYwMzZFREMwMEVFMkFGQiAvKiBEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCAqLzsgfTsKKwkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZC
IC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5
bGVTaGVldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlFNDdFMjc2ODE2MDM2RURDMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3Njcx
NjAzNkVEQzAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcCAqLzsgfTsKIAkJRTQ4
OTQ0QTIxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OTQ0QTAxODBCNTdEODAwRjE2
NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuY3BwICovOyB9OwogCQlFNDg5NDRBMzE4MEI1N0Q4MDBG
MTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVM
YXlvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFNDkxNkZGNzE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OTE2RkY2MTk1
REY2QTAwMDVBQjM0OSAvKiBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDEyMSw2ICsxNDEyMyw4IEBA
CiAJCUU0NTM5MDM4MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9T
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVN5c3Rl
bUludGVyZmFjZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ1MzkwM0Mw
RUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdpZGdldElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ1MzkwQUQwRUFGRjRCNTAwMzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlPUy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeXN0ZW1NZW1vcnlJT1MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDYxRDY1QzFCQjBDN0YwMDBDQjU2NDUgLyogQXV0
aG9yU3R5bGVTaGVldHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QXV0aG9yU3R5bGVTaGVldHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDYx
RDY1RTFCQjBDODBEMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0aG9yU3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQ2MkE0QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludEhhc2guaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4IC8qIFR5cGVk
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ2QTJCMUQxN0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRDaGlsZEl0ZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDEzMCw4ICsxNDEzNCw4IEBA
CiAJCUU0N0E5N0NGMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3QjRCRTYwRTcxMjQxNjAw
MDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhY2hlZFJlc291cmNlSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhh
bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0N0UyNzY0MTYwMzZFRDIw
MEVFMkFGQiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIERvY3Vt
ZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUU0N0UyNzY0MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHls
ZVNoZWV0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25TdHls
ZVNoZWV0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDdFMjc2NzE2MDM2RURD
MDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxh
eW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5l
TGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OTQ0QTExODBCNTdE
ODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2ltcGxlTGluZUxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDkxNkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMjY4LDYgKzIzMjcyLDggQEAKIAkJ
CQlBOEM0QTdGQjA5RDU2MzI3MDAwM0FDOEQgLyogQXR0ci5oICovLAogCQkJCTkzRUVDMUU1MDlD
Mjg3NzcwMEM1MTVEMSAvKiBBdHRyLmlkbCAqLywKIAkJCQlBOEM0QTdGOTA5RDU2MzI3MDAwM0FD
OEQgLyogQXR0cmlidXRlLmggKi8sCisJCQkJRTQ2MUQ2NUMxQkIwQzdGMDAwQ0I1NjQ1IC8qIEF1
dGhvclN0eWxlU2hlZXRzLmNwcCAqLywKKwkJCQlFNDYxRDY1RTFCQjBDODBEMDBDQjU2NDUgLyog
QXV0aG9yU3R5bGVTaGVldHMuaCAqLywKIAkJCQk3NjA4NDdDRDE5QTZBMjc3MDA0MjhDQ0MgLyog
QXV0b2NvbXBsZXRlRXJyb3JFdmVudC5oICovLAogCQkJCTc2MDg0N0NGMTlBNkEyODYwMDQyOEND
QyAvKiBBdXRvY29tcGxldGVFcnJvckV2ZW50LmlkbCAqLywKIAkJCQlCQzk0NjJENzEwN0E3QjRD
MDA4NTcxOTMgLyogQmVmb3JlTG9hZEV2ZW50LmggKi8sCkBAIC0yMzM2Myw4ICsyMzM2OSw2IEBA
CiAJCQkJQkNDRkJBRTcwQjUxNTJFRDAwMDFGMUQ3IC8qIERvY3VtZW50UGFyc2VyLmggKi8sCiAJ
CQkJQUQ2RTcxQUExNjY4ODk5RDAwMzIwQzEzIC8qIERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5j
cHAgKi8sCiAJCQkJQUQ2RTcxQUIxNjY4ODk5RDAwMzIwQzEzIC8qIERvY3VtZW50U2hhcmVkT2Jq
ZWN0UG9vbC5oICovLAotCQkJCUU0N0UyNzY3MTYwMzZFREMwMEVFMkFGQiAvKiBEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCAqLywKLQkJCQlFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIg
LyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oICovLAogCQkJCTg2RDk4MkY2MTI1QzE1
NDAwMEFEOUUzRCAvKiBEb2N1bWVudFRpbWluZy5oICovLAogCQkJCUE4MTg1RjMyMDk3NjU3NjUw
MDU4MjZEOSAvKiBEb2N1bWVudFR5cGUuY3BwICovLAogCQkJCUE4MTg1RjMxMDk3NjU3NjUwMDU4
MjZEOSAvKiBEb2N1bWVudFR5cGUuaCAqLywKQEAgLTIzNDM4LDYgKzIzNDQyLDggQEAKIAkJCQk5
MzVGQkNGMTA5QkExNDNCMDBFMjMwQjEgLyogRXhjZXB0aW9uQ29kZS5oICovLAogCQkJCUE3Q0FD
REIwMTNDRTg3NUIwMEJCQkUzRiAvKiBFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuY3BwICovLAog
CQkJCUE3NEJCNzZBMTNCREE4NjMwMEZGN0JGMCAvKiBFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIu
aCAqLywKKwkJCQlFNDdFMjc2NzE2MDM2RURDMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVl
dHMuY3BwICovLAorCQkJCUU0N0UyNzY0MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHls
ZVNoZWV0cy5oICovLAogCQkJCUI2RDlEMjM0MTRFQUJEMjYwMDkwRDc1RSAvKiBGb2N1c0V2ZW50
LmNwcCAqLywKIAkJCQlCNkQ5RDIzMzE0RUFCRDI2MDA5MEQ3NUUgLyogRm9jdXNFdmVudC5oICov
LAogCQkJCUI2RDlEMjcyMTRFQUJGMDMwMDkwRDc1RSAvKiBGb2N1c0V2ZW50LmlkbCAqLywKQEAg
LTI0NjExLDcgKzI0NjE3LDcgQEAKIAkJCQlCQ0NGQkFFODBCNTE1MkVEMDAwMUYxRDcgLyogRG9j
dW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTRBNEY0OEFBMTZCMERGQzAwMEVEQkIy
OSAvKiBEb2N1bWVudFJ1bGVTZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDZFNzFBRDE2Njg4
OTlEMDAzMjBDMTMgLyogRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmggaW4gSGVhZGVycyAqLywK
LQkJCQlFNDdFMjc2NTE2MDM2RUQyMDBFRTJBRkIgLyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZCIC8qIEV4
dGVuc2lvblN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQjkwNTYxQTBGMjU3OEJG
MDA5NUZGNkEgLyogRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkQ5ODJGNzEyNUMxNTQwMDBBRDlFM0QgLyogRG9jdW1lbnRUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4MTg1RjM5MDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudFR5cGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjY4MTMsNiArMjY4MTksNyBAQAogCQkJCTk5Q0MwQjVFMThCRTk4NEEw
MDZDRUJDQyAvKiBTZWdtZW50ZWRJbnB1dFN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
QzNEQTJGMEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJFQTgwN0M5MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlFNDYxRDY1RjFCQjBDODBEMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVl
dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNDA1Qzg5MTkwQjAxNDQwMDc1NEY5NCAvKiBTZWxl
Y3Rpb25SZWN0R2F0aGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQ0ZBQkJEMThDMEFGNzgw
MDZGODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0
QjRCQjQxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yODM2Niw3ICsyODM3Myw3IEBACiAJCQkJQThDMjI4MEUxMUQ0QTU5NzAwRDVBN0QzIC8q
IERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRBNEY0OEE5MTZCMERGQzAw
MEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFENkU3
MUFDMTY2ODg5OUQwMDMyMEMxMyAvKiBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJRTQ3RTI3NjgxNjAzNkVEQzAwRUUyQUZCIC8qIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ3RTI3NjgxNjAzNkVEQzAw
RUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBC
OTA1NjE5MEYyNTc4QkUwMDk1RkY2QSAvKiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTgxODVGM0EwOTc2NTc2NjAwNTgyNkQ5IC8qIERvY3VtZW50VHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzM4ODlBMDExNkVBOURDMDBBREYzMTMgLyogRG9j
dW1lbnRXcml0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODQ3MSw2ICsyODQ3OCw3IEBACiAJ
CQkJODVFQ0JFRjgwQUE3NjI2OTAwNTQ0RjBCIC8qIERPTUhUTUxQYXJhbUVsZW1lbnQubW0gaW4g
U291cmNlcyAqLywKIAkJCQk3QzMzRjM2MjFCNEEwNTA0MDA1MDJDQUYgLyogSlNEb2N1bWVudEZy
YWdtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1MTgzQjQ5MEFBNjkyNjEwMEYx
OUZBMyAvKiBET01IVE1MUHJlRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUU0NjFENjVE
MUJCMEM3RjAwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNDIyNkU5NjExNjNENzNBMDA4QjgzOTcgLyogRE9NSFRNTFByb2dyZXNzRWxlbWVudC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTg1MTgzQjRCMEFBNjkyNjEwMEYxOUZBMyAvKiBET01IVE1M
UXVvdGVFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVERjgxOUMwQUE3N0U0QjAwNDg2
QUQ3IC8qIERPTUhUTUxTY3JpcHRFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25zQmFja2VuZC5jcHAJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkFCeXRlY29kZUludGVycHJldGVy
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgor
I2luY2x1ZGUgIkV4dGVuc2lvblN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCkBAIC0x
NzYsNyArMTc3LDcgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDbwog
ICAgICAgICAgICAgaWYgKHJlc291cmNlVHlwZSA9PSBSZXNvdXJjZVR5cGU6OkRvY3VtZW50KQog
ICAgICAgICAgICAgICAgIGluaXRpYXRpbmdEb2N1bWVudExvYWRlci5hZGRQZW5kaW5nQ29udGVu
dEV4dGVuc2lvbkRpc3BsYXlOb25lU2VsZWN0b3IoYWN0aW9uLmV4dGVuc2lvbklkZW50aWZpZXIo
KSwgYWN0aW9uLnN0cmluZ0FyZ3VtZW50KCksIGFjdGlvbi5hY3Rpb25JRCgpKTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKGN1cnJlbnREb2N1bWVudCkKLSAgICAgICAgICAgICAgICBjdXJyZW50RG9j
dW1lbnQtPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuYWRkRGlzcGxheU5vbmVTZWxlY3RvcihhY3Rp
b24uZXh0ZW5zaW9uSWRlbnRpZmllcigpLCBhY3Rpb24uc3RyaW5nQXJndW1lbnQoKSwgYWN0aW9u
LmFjdGlvbklEKCkpOworICAgICAgICAgICAgICAgIGN1cnJlbnREb2N1bWVudC0+ZXh0ZW5zaW9u
U3R5bGVTaGVldHMoKS5hZGREaXNwbGF5Tm9uZVNlbGVjdG9yKGFjdGlvbi5leHRlbnNpb25JZGVu
dGlmaWVyKCksIGFjdGlvbi5zdHJpbmdBcmd1bWVudCgpLCBhY3Rpb24uYWN0aW9uSUQoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6Q1NTRGlzcGxheU5vbmVTdHlsZVNoZWV0OiB7CiAgICAgICAgICAgICBTdHlsZVNoZWV0
Q29udGVudHMqIHN0eWxlU2hlZXRDb250ZW50cyA9IGdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVl
dChhY3Rpb24uc3RyaW5nQXJndW1lbnQoKSk7CkBAIC0xODQsNyArMTg1LDcgQEAgdm9pZCBDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDbwogICAgICAgICAgICAgICAgIGlmIChyZXNv
dXJjZVR5cGUgPT0gUmVzb3VyY2VUeXBlOjpEb2N1bWVudCkKICAgICAgICAgICAgICAgICAgICAg
aW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyLmFkZFBlbmRpbmdDb250ZW50RXh0ZW5zaW9uU2hlZXQo
YWN0aW9uLnN0cmluZ0FyZ3VtZW50KCksICpzdHlsZVNoZWV0Q29udGVudHMpOwogICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGN1cnJlbnREb2N1bWVudCkKLSAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudERvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLm1heWJlQWRkQ29udGVudEV4dGVu
c2lvblNoZWV0KGFjdGlvbi5zdHJpbmdBcmd1bWVudCgpLCAqc3R5bGVTaGVldENvbnRlbnRzKTsK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudERvY3VtZW50LT5leHRlbnNpb25TdHlsZVNoZWV0
cygpLm1heWJlQWRkQ29udGVudEV4dGVuc2lvblNoZWV0KGFjdGlvbi5zdHJpbmdBcmd1bWVudCgp
LCAqc3R5bGVTaGVldENvbnRlbnRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCShyZXZp
c2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCiAKKyNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgog
I2luY2x1ZGUgIkNTU0NoYXJzZXRSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxlLmgi
CiAjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgpAQCAtMzAsOCArMzEsOCBAQAogI2luY2x1ZGUg
IkNTU1N0eWxlUnVsZS5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24u
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uU3R5bGVT
aGVldHMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCkBAIC0xNzAsNyArMTcxLDcgQEAgdm9pZCBD
U1NTdHlsZVNoZWV0OjpkaWRNdXRhdGVSdWxlcyhSdWxlTQogICAgIGlmICghb3duZXIpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtdXRhdGlvblR5cGUgPT0gUnVsZUluc2VydGlvbiAmJiAh
Y29udGVudHNXZXJlQ2xvbmVkRm9yTXV0YXRpb24gJiYgIW93bmVyLT5zdHlsZVNoZWV0Q29sbGVj
dGlvbigpLmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnModGhpcykpIHsKKyAgICBpZiAobXV0YXRp
b25UeXBlID09IFJ1bGVJbnNlcnRpb24gJiYgIWNvbnRlbnRzV2VyZUNsb25lZEZvck11dGF0aW9u
ICYmICFvd25lci0+YXV0aG9yU3R5bGVTaGVldHMoKS5hY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5z
KHRoaXMpKSB7CiAgICAgICAgIGlmIChpbnNlcnRlZEtleWZyYW1lc1J1bGUpIHsKICAgICAgICAg
ICAgIGlmIChTdHlsZVJlc29sdmVyKiByZXNvbHZlciA9IG93bmVyLT5zdHlsZVJlc29sdmVySWZF
eGlzdHMoKSkKICAgICAgICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHlsZShpbnNl
cnRlZEtleWZyYW1lc1J1bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVs
ZVNldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVT
ZXRzLmNwcAkocmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50
UnVsZVNldHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRl
ICJDU1NEZWZhdWx0U3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkV4dGVu
c2lvblN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgogI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIK
QEAgLTQ2LDEzICs0NiwxMyBAQCBEb2N1bWVudFJ1bGVTZXRzOjp+RG9jdW1lbnRSdWxlU2V0cygp
CiB7CiB9CiAKLXZvaWQgRG9jdW1lbnRSdWxlU2V0czo6aW5pdFVzZXJTdHlsZShEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uJiBzdHlsZVNoZWV0Q29sbGVjdGlvbiwgY29uc3QgTWVkaWFRdWVy
eUV2YWx1YXRvciYgbWVkaXVtLCBTdHlsZVJlc29sdmVyJiByZXNvbHZlcikKK3ZvaWQgRG9jdW1l
bnRSdWxlU2V0czo6aW5pdFVzZXJTdHlsZShFeHRlbnNpb25TdHlsZVNoZWV0cyYgZXh0ZW5zaW9u
U3R5bGVTaGVldHMsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVSZXNv
bHZlciYgcmVzb2x2ZXIpCiB7CiAgICAgYXV0byB0ZW1wVXNlclN0eWxlID0gc3RkOjptYWtlX3Vu
aXF1ZTxSdWxlU2V0PigpOwotICAgIGlmIChDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0ID0g
c3R5bGVTaGVldENvbGxlY3Rpb24ucGFnZVVzZXJTaGVldCgpKQorICAgIGlmIChDU1NTdHlsZVNo
ZWV0KiBwYWdlVXNlclNoZWV0ID0gZXh0ZW5zaW9uU3R5bGVTaGVldHMucGFnZVVzZXJTaGVldCgp
KQogICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgmcGFnZVVzZXJTaGVl
dC0+Y29udGVudHMoKSwgbWVkaXVtLCAmcmVzb2x2ZXIpOwotICAgIGNvbGxlY3RSdWxlc0Zyb21V
c2VyU3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxlY3Rpb24uaW5qZWN0ZWRVc2VyU3R5bGVTaGVl
dHMoKSwgKnRlbXBVc2VyU3R5bGUsIG1lZGl1bSwgcmVzb2x2ZXIpOwotICAgIGNvbGxlY3RSdWxl
c0Zyb21Vc2VyU3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxlY3Rpb24uZG9jdW1lbnRVc2VyU3R5
bGVTaGVldHMoKSwgKnRlbXBVc2VyU3R5bGUsIG1lZGl1bSwgcmVzb2x2ZXIpOworICAgIGNvbGxl
Y3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRV
c2VyU3R5bGVTaGVldHMoKSwgKnRlbXBVc2VyU3R5bGUsIG1lZGl1bSwgcmVzb2x2ZXIpOworICAg
IGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuZG9j
dW1lbnRVc2VyU3R5bGVTaGVldHMoKSwgKnRlbXBVc2VyU3R5bGUsIG1lZGl1bSwgcmVzb2x2ZXIp
OwogICAgIGlmICh0ZW1wVXNlclN0eWxlLT5ydWxlQ291bnQoKSA+IDAgfHwgdGVtcFVzZXJTdHls
ZS0+cGFnZVJ1bGVzKCkuc2l6ZSgpID4gMCkKICAgICAgICAgbV91c2VyU3R5bGUgPSBXVEY6Om1v
dmUodGVtcFVzZXJTdHlsZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRS
dWxlU2V0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVT
ZXRzLmgJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1
bGVTZXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIFJ1
bGVTZXQqIHNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3NpYmxpbmdSdWxlU2V0LmdldCgpOyB9
CiAgICAgUnVsZVNldCogdW5jb21tb25BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX3VuY29t
bW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKTsgfQogCi0gICAgdm9pZCBpbml0VXNlclN0eWxlKERv
Y3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24mLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwg
U3R5bGVSZXNvbHZlciYpOworICAgIHZvaWQgaW5pdFVzZXJTdHlsZShFeHRlbnNpb25TdHlsZVNo
ZWV0cyYsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBTdHlsZVJlc29sdmVyJik7CiAgICAg
dm9pZCByZXNldEF1dGhvclN0eWxlKCk7CiAgICAgdm9pZCBhcHBlbmRBdXRob3JTdHlsZVNoZWV0
cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4m
LCBNZWRpYVF1ZXJ5RXZhbHVhdG9yKiwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYsIFN0eWxlUmVz
b2x2ZXIqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0luc3BlY3RvckNTU09NV3JhcHBl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9JbnNwZWN0b3JDU1NPTVdy
YXBwZXJzLmNwcAkocmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0luc3Bl
Y3RvckNTU09NV3JhcHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oIgog
CisjaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJDU1NEZWZhdWx0U3R5
bGVTaGVldHMuaCIKICNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTTWVk
aWFSdWxlLmgiCkBAIC0zNiw3ICszNyw3IEBACiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAj
aW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1N1cHBvcnRzUnVsZS5oIgot
I2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJFeHRl
bnNpb25TdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2lu
Y2x1ZGUgIldlYktpdENTU1JlZ2lvblJ1bGUuaCIKIApAQCAtOTUsMTUgKzk2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDU1NPTVdyYXBwZXJzOjpjb2xsZWN0RnJvbQogICAgICAgICBjb2xsZWN0KHNoZWV0
c1tpXS5nZXQoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTT01XcmFwcGVyczo6Y29sbGVjdEZy
b21Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b24mIHN0eWxlU2hlZXRDb2xsZWN0aW9uKQotewotICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldHMo
c3R5bGVTaGVldENvbGxlY3Rpb24uYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMoKSk7Ci0gICAgY29s
bGVjdChzdHlsZVNoZWV0Q29sbGVjdGlvbi5wYWdlVXNlclNoZWV0KCkpOwotICAgIGNvbGxlY3RG
cm9tU3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxlY3Rpb24uaW5qZWN0ZWRVc2VyU3R5bGVTaGVl
dHMoKSk7Ci0gICAgY29sbGVjdEZyb21TdHlsZVNoZWV0cyhzdHlsZVNoZWV0Q29sbGVjdGlvbi5k
b2N1bWVudFVzZXJTdHlsZVNoZWV0cygpKTsKLX0KLQotQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JD
U1NPTVdyYXBwZXJzOjpnZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRzKFN0eWxlUnVsZSogcnVsZSwg
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiYgc3R5bGVTaGVldENvbGxlY3Rpb24pCitDU1NT
dHlsZVJ1bGUqIEluc3BlY3RvckNTU09NV3JhcHBlcnM6OmdldFdyYXBwZXJGb3JSdWxlSW5TaGVl
dHMoU3R5bGVSdWxlKiBydWxlLCBBdXRob3JTdHlsZVNoZWV0cyYgYXV0aG9yU3R5bGVTaGVldHMs
IEV4dGVuc2lvblN0eWxlU2hlZXRzJiBleHRlbnNpb25TdHlsZVNoZWV0cykKIHsKICAgICBpZiAo
bV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkpIHsKICAgICAgICAgY29sbGVj
dEZyb21TdHlsZVNoZWV0Q29udGVudHMobV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBDU1NE
ZWZhdWx0U3R5bGVTaGVldHM6OnNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KTsKQEAgLTExNSw3ICsx
MDgsMTAgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzOjpnZQogICAgICAg
ICBjb2xsZWN0RnJvbVN0eWxlU2hlZXRDb250ZW50cyhtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJT
ZXQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZnVsbHNjcmVlblN0eWxlU2hlZXQpOwogICAgICAg
ICBjb2xsZWN0RnJvbVN0eWxlU2hlZXRDb250ZW50cyhtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJT
ZXQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6cGx1Z0luc1N0eWxlU2hlZXQpOwogCi0gICAgICAg
IGNvbGxlY3RGcm9tRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbihzdHlsZVNoZWV0Q29sbGVj
dGlvbik7CisgICAgICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldHMoYXV0aG9yU3R5bGVTaGVldHMu
YWN0aXZlU3R5bGVTaGVldHMoKSk7CisgICAgICAgIGNvbGxlY3QoZXh0ZW5zaW9uU3R5bGVTaGVl
dHMucGFnZVVzZXJTaGVldCgpKTsKKyAgICAgICAgY29sbGVjdEZyb21TdHlsZVNoZWV0cyhleHRl
bnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpKTsKKyAgICAgICAgY29s
bGVjdEZyb21TdHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5kb2N1bWVudFVzZXJTdHls
ZVNoZWV0cygpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJN
YXAuZ2V0KHJ1bGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0luc3BlY3RvckNTU09N
V3JhcHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvSW5zcGVjdG9yQ1NT
T01XcmFwcGVycy5oCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvSW5z
cGVjdG9yQ1NTT01XcmFwcGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEF1dGhvclN0eWxlU2hlZXRzOwogY2xhc3Mg
Q1NTU3R5bGVSdWxlOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb247CitjbGFzcyBFeHRlbnNpb25TdHlsZVNoZWV0czsKIGNsYXNzIFN0eWxl
UnVsZTsKIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIApAQCAtNDEsNyArNDIsNyBAQCBjbGFz
cyBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzIHsKIHB1YmxpYzoKICAgICAvLyBXQVJOSU5HLiBUaGlz
IHdpbGwgY29uc3RydWN0IENTU09NIHdyYXBwZXJzIGZvciBhbGwgc3R5bGUgcnVsZXMgYW5kIGNh
Y2hlIHRoZW0gaW4gYSBtYXAgZm9yIHNpZ25pZmljYW50IG1lbW9yeSBjb3N0LgogICAgIC8vIEl0
IGlzIGhlcmUgdG8gc3VwcG9ydCBpbnNwZWN0b3IuIERvbid0IHVzZSBmb3IgYW55IHJlZ3VsYXIg
ZW5naW5lIGZ1bmN0aW9ucy4KLSAgICBDU1NTdHlsZVJ1bGUqIGdldFdyYXBwZXJGb3JSdWxlSW5T
aGVldHMoU3R5bGVSdWxlKiwgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiYpOworICAgIENT
U1N0eWxlUnVsZSogZ2V0V3JhcHBlckZvclJ1bGVJblNoZWV0cyhTdHlsZVJ1bGUqLCBBdXRob3JT
dHlsZVNoZWV0cyYsIEV4dGVuc2lvblN0eWxlU2hlZXRzJik7CiAgICAgdm9pZCBjb2xsZWN0RnJv
bVN0eWxlU2hlZXRJZk5lZWRlZChDU1NTdHlsZVNoZWV0Kik7CiAKIHByaXZhdGU6CkBAIC01MCw3
ICs1MSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbGxlY3RGcm9tU3R5bGVTaGVldENvbnRl
bnRzKEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgc2hlZXRXcmFwcGVyU2V0LCBTdHls
ZVNoZWV0Q29udGVudHMqKTsKICAgICB2b2lkIGNvbGxlY3RGcm9tU3R5bGVTaGVldHMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mKTsKLSAgICB2b2lkIGNvbGxlY3RGcm9tRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbihEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uJik7
CiAKICAgICBIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+PiBtX3N0eWxl
UnVsZVRvQ1NTT01XcmFwcGVyTWFwOwogICAgIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
PiBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDYgQEAKICNpbmNsdWRl
ICJDb3VudGVyLmgiCiAjaW5jbHVkZSAiQ291bnRlckNvbnRlbnQuaCIKICNpbmNsdWRlICJDdXJz
b3JMaXN0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9u
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTMwMSw4ICszMDAsNyBAQCBTdHlsZVJlc29sdmVy
OjpTdHlsZVJlc29sdmVyKERvY3VtZW50JiBkCiAKICAgICBtX3J1bGVTZXRzLnJlc2V0QXV0aG9y
U3R5bGUoKTsKIAotICAgIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24mIHN0eWxlU2hlZXRD
b2xsZWN0aW9uID0gbV9kb2N1bWVudC5zdHlsZVNoZWV0Q29sbGVjdGlvbigpOwotICAgIG1fcnVs
ZVNldHMuaW5pdFVzZXJTdHlsZShzdHlsZVNoZWV0Q29sbGVjdGlvbiwgKm1fbWVkaXVtLCAqdGhp
cyk7CisgICAgbV9ydWxlU2V0cy5pbml0VXNlclN0eWxlKG1fZG9jdW1lbnQuZXh0ZW5zaW9uU3R5
bGVTaGVldHMoKSwgKm1fbWVkaXVtLCAqdGhpcyk7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQog
ICAgIGlmIChtX2RvY3VtZW50LnN2Z0V4dGVuc2lvbnMoKSkgewpAQCAtMzExLDggKzMwOSw2IEBA
IFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGQKICAgICAgICAgICAgIG1f
ZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkuYWRkRm9udEZhY2VSdWxlKHN2Z0ZvbnRGYWNlRWxlbWVu
dC0+Zm9udEZhY2VSdWxlKCksIHN2Z0ZvbnRGYWNlRWxlbWVudC0+aXNJblVzZXJBZ2VudFNoYWRv
d1RyZWUoKSk7CiAgICAgfQogI2VuZGlmCi0KLSAgICBhcHBlbmRBdXRob3JTdHlsZVNoZWV0cygw
LCBzdHlsZVNoZWV0Q29sbGVjdGlvbi5hY3RpdmVBdXRob3JTdHlsZVNoZWV0cygpKTsKIH0KIAog
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyh1bnNpZ25lZCBmaXJz
dE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRzKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCShyZXZpc2lvbiAxOTAwNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw5ICsyMSw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3R5bGVT
aGVldExpc3QuaCIKIAorI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAi
Q1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
QEAgLTQ1LDEzICs0NSwxMyBAQCBpbmxpbmUgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0
Pj4mCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gbV9kZXRhY2hlZFN0
eWxlU2hlZXRzOwotICAgIHJldHVybiBtX2RvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigp
LnN0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+
YXV0aG9yU3R5bGVTaGVldHMoKS5zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KCk7CiB9CiAK
IHZvaWQgU3R5bGVTaGVldExpc3Q6OmRldGFjaEZyb21Eb2N1bWVudCgpCiB7Ci0gICAgbV9kZXRh
Y2hlZFN0eWxlU2hlZXRzID0gbV9kb2N1bWVudC0+c3R5bGVTaGVldENvbGxlY3Rpb24oKS5zdHls
ZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KCk7Ci0gICAgbV9kb2N1bWVudCA9IDA7CisgICAgbV9k
ZXRhY2hlZFN0eWxlU2hlZXRzID0gbV9kb2N1bWVudC0+YXV0aG9yU3R5bGVTaGVldHMoKS5zdHls
ZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KCk7CisgICAgbV9kb2N1bWVudCA9IG51bGxwdHI7CiB9
CiAKIHVuc2lnbmVkIFN0eWxlU2hlZXRMaXN0OjpsZW5ndGgoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMuY3BwCShyZXZpc2lvbiAxOTAxNTMpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcDoxOTAx
NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5
YWtvdiAoYXBAd2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLTIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgiCisKKyNpbmNsdWRlICJD
U1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJRnJh
bWVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNW
R1N0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVJ
bnZhbGlkYXRpb25BbmFseXNpcy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNs
dWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgor
I2luY2x1ZGUgIlVzZXJDb250ZW50Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlVzZXJDb250ZW50
VVJMUGF0dGVybi5oIgorI2luY2x1ZGUgIlVzZXJTdHlsZVNoZWV0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zOwordXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKKworRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6RG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3Vt
ZW50KGRvY3VtZW50KQorICAgICwgbV9wZW5kaW5nU3R5bGVzaGVldHMoMCkKKyAgICAsIG1faW5q
ZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZChmYWxzZSkKKyAgICAsIG1faGFkQWN0aXZlTG9hZGlu
Z1N0eWxlc2hlZXQoZmFsc2UpCisgICAgLCBtX3BlbmRpbmdVcGRhdGVUeXBlKE5vVXBkYXRlKQor
ICAgICwgbV91c2VzRmlyc3RMaW5lUnVsZXMoZmFsc2UpCisgICAgLCBtX3VzZXNGaXJzdExldHRl
clJ1bGVzKGZhbHNlKQorICAgICwgbV91c2VzUmVtVW5pdHMoZmFsc2UpCisgICAgLCBtX3VzZXNT
dHlsZUJhc2VkRWRpdGFiaWxpdHkoZmFsc2UpCisgICAgLCBtX3N0eWxlUmVzb2x2ZXJDaGFuZ2Vk
VGltZXIoKnRoaXMsICZEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpzdHlsZVJlc29sdmVy
Q2hhbmdlZFRpbWVyRmlyZWQpCit7Cit9CisKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbjo6Y29tYmluZUNTU0ZlYXR1cmVGbGFncygpCit7CisgICAgLy8gRGVsYXkgcmVzZXR0aW5n
IHRoZSBmbGFncyB1bnRpbCBhZnRlciBuZXh0IHN0eWxlIHJlY2FsYyBzaW5jZSB1bmFwcGx5aW5n
IHRoZSBzdHlsZSBtYXkgbm90IHdvcmsgd2l0aG91dCB0aGVzZSBzZXQgKHRoaXMgaXMgdHJ1ZSBh
dCBsZWFzdCB3aXRoIGJlZm9yZS9hZnRlcikuCisgICAgY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOworICAgIG1fdXNl
c0ZpcnN0TGluZVJ1bGVzID0gbV91c2VzRmlyc3RMaW5lUnVsZXMgfHwgc3R5bGVSZXNvbHZlci51
c2VzRmlyc3RMaW5lUnVsZXMoKTsKKyAgICBtX3VzZXNGaXJzdExldHRlclJ1bGVzID0gbV91c2Vz
Rmlyc3RMZXR0ZXJSdWxlcyB8fCBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExldHRlclJ1bGVzKCk7
Cit9CisKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVzZXRDU1NGZWF0dXJl
RmxhZ3MoKQoreworICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIgPSBtX2Rv
Y3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKKyAgICBtX3VzZXNGaXJzdExpbmVSdWxlcyA9
IHN0eWxlUmVzb2x2ZXIudXNlc0ZpcnN0TGluZVJ1bGVzKCk7CisgICAgbV91c2VzRmlyc3RMZXR0
ZXJSdWxlcyA9IHN0eWxlUmVzb2x2ZXIudXNlc0ZpcnN0TGV0dGVyUnVsZXMoKTsKK30KKworQ1NT
U3R5bGVTaGVldCogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cGFnZVVzZXJTaGVldCgp
Cit7CisgICAgaWYgKG1fcGFnZVVzZXJTaGVldCkKKyAgICAgICAgcmV0dXJuIG1fcGFnZVVzZXJT
aGVldC5nZXQoKTsKKyAgICAKKyAgICBQYWdlKiBvd25pbmdQYWdlID0gbV9kb2N1bWVudC5wYWdl
KCk7CisgICAgaWYgKCFvd25pbmdQYWdlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBT
dHJpbmcgdXNlclNoZWV0VGV4dCA9IG93bmluZ1BhZ2UtPnVzZXJTdHlsZVNoZWV0KCk7CisgICAg
aWYgKHVzZXJTaGVldFRleHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICAvLyBQYXJzZSB0aGUgc2hlZXQgYW5kIGNhY2hlIGl0LgorICAgIG1fcGFnZVVzZXJTaGVldCA9
IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShtX2RvY3VtZW50LCBtX2RvY3VtZW50LnNldHRp
bmdzKCktPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKSk7CisgICAgbV9wYWdlVXNlclNoZWV0LT5j
b250ZW50cygpLnNldElzVXNlclN0eWxlU2hlZXQodHJ1ZSk7CisgICAgbV9wYWdlVXNlclNoZWV0
LT5jb250ZW50cygpLnBhcnNlU3RyaW5nKHVzZXJTaGVldFRleHQpOworICAgIHJldHVybiBtX3Bh
Z2VVc2VyU2hlZXQuZ2V0KCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bjo6Y2xlYXJQYWdlVXNlclNoZWV0KCkKK3sKKyAgICBpZiAobV9wYWdlVXNlclNoZWV0KSB7Cisg
ICAgICAgIG1fcGFnZVVzZXJTaGVldCA9IG51bGxwdHI7CisgICAgICAgIG1fZG9jdW1lbnQuc3R5
bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CisgICAgfQorfQorCit2b2lkIERv
Y3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKQoreworICAg
IGNsZWFyUGFnZVVzZXJTaGVldCgpOworICAgIGlmIChwYWdlVXNlclNoZWV0KCkpCisgICAgICAg
IG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7
Cit9CisKK2NvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uOjppbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpIGNvbnN0Cit7CisgICAg
dXBkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKKyAgICByZXR1cm4gbV9pbmplY3RlZFVz
ZXJTdHlsZVNoZWV0czsKK30KKworY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4m
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmluamVjdGVkQXV0aG9yU3R5bGVTaGVldHMo
KSBjb25zdAoreworICAgIHVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCk7CisgICAgcmV0
dXJuIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0czsKK30KKwordm9pZCBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpIGNvbnN0Cit7
CisgICAgaWYgKG1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZCkKKyAgICAgICAgcmV0dXJu
OworICAgIG1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZCA9IHRydWU7CisgICAgbV9pbmpl
Y3RlZFVzZXJTdHlsZVNoZWV0cy5jbGVhcigpOworICAgIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNo
ZWV0cy5jbGVhcigpOworCisgICAgUGFnZSogb3duaW5nUGFnZSA9IG1fZG9jdW1lbnQucGFnZSgp
OworICAgIGlmICghb3duaW5nUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgYXV0
byogdXNlckNvbnRlbnRDb250cm9sbGVyID0gb3duaW5nUGFnZS0+dXNlckNvbnRlbnRDb250cm9s
bGVyKCk7CisgICAgaWYgKCF1c2VyQ29udGVudENvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0TWFwKiB1c2VyU3R5bGVTaGVldHMgPSB1c2VyQ29u
dGVudENvbnRyb2xsZXItPnVzZXJTdHlsZVNoZWV0cygpOworICAgIGlmICghdXNlclN0eWxlU2hl
ZXRzKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXRzIDogdXNl
clN0eWxlU2hlZXRzLT52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHNoZWV0
IDogKnN0eWxlU2hlZXRzKSB7CisgICAgICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVkRnJhbWVz
KCkgPT0gSW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCFVc2VyQ29udGVu
dFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyhtX2RvY3VtZW50LnVybCgpLCBzaGVldC0+d2hp
dGVsaXN0KCksIHNoZWV0LT5ibGFja2xpc3QoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBncm91cFNoZWV0ID0gQ1NTU3R5
bGVTaGVldDo6Y3JlYXRlSW5saW5lKGNvbnN0X2Nhc3Q8RG9jdW1lbnQmPihtX2RvY3VtZW50KSwg
c2hlZXQtPnVybCgpKTsKKyAgICAgICAgICAgIGJvb2wgaXNVc2VyU3R5bGVTaGVldCA9IHNoZWV0
LT5sZXZlbCgpID09IFVzZXJTdHlsZVVzZXJMZXZlbDsKKyAgICAgICAgICAgIGlmIChpc1VzZXJT
dHlsZVNoZWV0KQorICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuYXBw
ZW5kKGdyb3VwU2hlZXQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faW5q
ZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5hcHBlbmQoZ3JvdXBTaGVldCk7CisKKyAgICAgICAgICAg
IGdyb3VwU2hlZXQtPmNvbnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVTaGVldChpc1VzZXJTdHlsZVNo
ZWV0KTsKKyAgICAgICAgICAgIGdyb3VwU2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJpbmcoc2hl
ZXQtPnNvdXJjZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKQorewor
ICAgIGlmICghbV9pbmplY3RlZFN0eWxlU2hlZXRDYWNoZVZhbGlkKQorICAgICAgICByZXR1cm47
CisgICAgbV9pbmplY3RlZFN0eWxlU2hlZXRDYWNoZVZhbGlkID0gZmFsc2U7CisgICAgaWYgKG1f
aW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuaXNFbXB0eSgpICYmIG1faW5qZWN0ZWRBdXRob3JTdHls
ZVNoZWV0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RvY3VtZW50LnN0eWxl
UmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOworfQorCit2b2lkIERvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb246OmFkZEF1dGhvclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+
JiYgYXV0aG9yU2hlZXQpCit7CisgICAgQVNTRVJUKCFhdXRob3JTaGVldC5nZXQoKS5pc1VzZXJT
dHlsZVNoZWV0KCkpOworICAgIG1fYXV0aG9yU3R5bGVTaGVldHMuYXBwZW5kKENTU1N0eWxlU2hl
ZXQ6OmNyZWF0ZShXVEY6Om1vdmUoYXV0aG9yU2hlZXQpLCAmbV9kb2N1bWVudCkpOworICAgIG1f
ZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Cit9
CisKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkVXNlclNoZWV0KFJlZjxT
dHlsZVNoZWV0Q29udGVudHM+JiYgdXNlclNoZWV0KQoreworICAgIEFTU0VSVCh1c2VyU2hlZXQu
Z2V0KCkuaXNVc2VyU3R5bGVTaGVldCgpKTsKKyAgICBtX3VzZXJTdHlsZVNoZWV0cy5hcHBlbmQo
Q1NTU3R5bGVTaGVldDo6Y3JlYXRlKFdURjo6bW92ZSh1c2VyU2hlZXQpLCAmbV9kb2N1bWVudCkp
OworICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlh
dGVseSk7Cit9CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQordm9pZCBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphZGREaXNwbGF5Tm9uZVNlbGVjdG9yKGNvbnN0IFN0cmlu
ZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgdWludDMyX3Qgc2VsZWN0b3JJ
RCkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fY29udGVudEV4dGVuc2lvblNlbGVjdG9yU2hlZXRz
LmFkZChpZGVudGlmaWVyLCBudWxscHRyKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNo
ZWV0OjpjcmVhdGUobV9kb2N1bWVudCk7CisgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzLmFwcGVu
ZCgmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c3R5bGVTaGVldCgpKTsKKyAgICB9CisKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGREaXNwbGF5Tm9uZVNlbGVjdG9yKHNlbGVjdG9yLCBz
ZWxlY3RvcklEKTsKKyAgICBtX3N0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXIuc3RhcnRPbmVTaG90
KDApOworfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246Om1heWJlQWRkQ29u
dGVudEV4dGVuc2lvblNoZWV0KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3R5bGVTaGVldENv
bnRlbnRzJiBzaGVldCkKK3sKKyAgICBBU1NFUlQoc2hlZXQuaXNVc2VyU3R5bGVTaGVldCgpKTsK
KworICAgIGlmIChtX2NvbnRlbnRFeHRlbnNpb25TaGVldHMuY29udGFpbnMoaWRlbnRpZmllcikp
CisgICAgICAgIHJldHVybjsKKworICAgIFJlZjxDU1NTdHlsZVNoZWV0PiBjc3NTaGVldCA9IENT
U1N0eWxlU2hlZXQ6OmNyZWF0ZShzaGVldCwgJm1fZG9jdW1lbnQpOworICAgIG1fY29udGVudEV4
dGVuc2lvblNoZWV0cy5zZXQoaWRlbnRpZmllciwgJmNzc1NoZWV0LmdldCgpKTsKKyAgICBtX3Vz
ZXJTdHlsZVNoZWV0cy5hcHBlbmQoYWRvcHRSZWYoY3NzU2hlZXQubGVha1JlZigpKSk7CisgICAg
bV9zdHlsZVJlc29sdmVyQ2hhbmdlZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb246OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXJGaXJlZCgpCit7CisgICAgbV9kb2N1
bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKK30KKwor
Ly8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgdG9wLWxldmVsIHN0eWxlc2hlZXQg
aGFzIGZpbmlzaGVkIGxvYWRpbmcuCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246
OnJlbW92ZVBlbmRpbmdTaGVldChSZW1vdmVQZW5kaW5nU2hlZXROb3RpZmljYXRpb25UeXBlIG5v
dGlmaWNhdGlvbikKK3sKKyAgICAvLyBNYWtlIHN1cmUgd2Uga25ldyB0aGlzIHNoZWV0IHdhcyBw
ZW5kaW5nLCBhbmQgdGhhdCBvdXIgY291bnQgaXNuJ3Qgb3V0IG9mIHN5bmMuCisgICAgQVNTRVJU
KG1fcGVuZGluZ1N0eWxlc2hlZXRzID4gMCk7CisKKyAgICBtX3BlbmRpbmdTdHlsZXNoZWV0cy0t
OworICAgIAorI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKKyAgICBpZiAoIW93
bmVyRWxlbWVudCgpKQorICAgICAgICBwcmludGYoIlN0eWxlc2hlZXQgbG9hZGVkIGF0IHRpbWUg
JWQuICVkIHN0eWxlc2hlZXRzIHN0aWxsIHJlbWFpbi5cbiIsIGVsYXBzZWRUaW1lKCksIG1fcGVu
ZGluZ1N0eWxlc2hlZXRzKTsKKyNlbmRpZgorCisgICAgaWYgKG1fcGVuZGluZ1N0eWxlc2hlZXRz
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobm90aWZpY2F0aW9uID09IFJlbW92ZVBlbmRp
bmdTaGVldE5vdGlmeUxhdGVyKSB7CisgICAgICAgIG1fZG9jdW1lbnQuc2V0TmVlZHNOb3RpZnlS
ZW1vdmVBbGxQZW5kaW5nU3R5bGVzaGVldCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIG1fZG9jdW1lbnQuZGlkUmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKTsKK30KKwor
dm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphZGRTdHlsZVNoZWV0Q2FuZGlkYXRl
Tm9kZShOb2RlJiBub2RlLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICBpZiAoIW5vZGUu
aW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gVW50aWwgdGhlIDxi
b2R5PiBleGlzdHMsIHdlIGhhdmUgbm8gY2hvaWNlIGJ1dCB0byBjb21wYXJlIGRvY3VtZW50IHBv
c2l0aW9ucywKKyAgICAvLyBzaW5jZSBzdHlsZXMgb3V0c2lkZSBvZiB0aGUgYm9keSBhbmQgaGVh
ZCBjb250aW51ZSB0byBiZSBzaHVudGVkIGludG8gdGhlIGhlYWQKKyAgICAvLyAoYW5kIHRodXMg
Y2FuIHNoaWZ0IHRvIGVuZCB1cCBiZWZvcmUgZHluYW1pY2FsbHkgYWRkZWQgRE9NIGNvbnRlbnQg
dGhhdCBpcyBhbHNvCisgICAgLy8gb3V0c2lkZSB0aGUgYm9keSkuCisgICAgaWYgKChjcmVhdGVk
QnlQYXJzZXIgJiYgbV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgpKSB8fCBtX3N0eWxlU2hlZXRD
YW5kaWRhdGVOb2Rlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRl
Tm9kZXMuYWRkKCZub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERldGVy
bWluZSBhbiBhcHByb3ByaWF0ZSBpbnNlcnRpb24gcG9pbnQuCisgICAgU3R5bGVTaGVldENhbmRp
ZGF0ZUxpc3RIYXNoU2V0OjppdGVyYXRvciBiZWdpbiA9IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5v
ZGVzLmJlZ2luKCk7CisgICAgU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0OjppdGVyYXRv
ciBlbmQgPSBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5lbmQoKTsKKyAgICBTdHlsZVNoZWV0
Q2FuZGlkYXRlTGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0gZW5kOworICAgIE5vZGUqIGZvbGxv
d2luZ05vZGUgPSAwOworICAgIGRvIHsKKyAgICAgICAgLS1pdDsKKyAgICAgICAgTm9kZSogbiA9
ICppdDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9zaXRpb24gPSBuLT5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbigmbm9kZSk7CisgICAgICAgIGlmIChwb3NpdGlvbiA9PSBOb2RlOjpET0NVTUVO
VF9QT1NJVElPTl9GT0xMT1dJTkcpIHsKKyAgICAgICAgICAgIG1fc3R5bGVTaGVldENhbmRpZGF0
ZU5vZGVzLmluc2VydEJlZm9yZShmb2xsb3dpbmdOb2RlLCAmbm9kZSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9sbG93aW5nTm9kZSA9IG47CisgICAgfSB3aGls
ZSAoaXQgIT0gYmVnaW4pOworICAgIAorICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmlu
c2VydEJlZm9yZShmb2xsb3dpbmdOb2RlLCAmbm9kZSk7Cit9CisKK3ZvaWQgRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbjo6cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9k
ZSkKK3sKKyAgICBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5yZW1vdmUoJm5vZGUpOworfQor
Cit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmNvbGxlY3RBY3RpdmVTdHlsZVNo
ZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQoreworICAgIGlmIChtX2Rv
Y3VtZW50LnNldHRpbmdzKCkgJiYgIW1fZG9jdW1lbnQuc2V0dGluZ3MoKS0+YXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBub2Rl
IDogbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMpIHsKKyAgICAgICAgU3R5bGVTaGVldCogc2hl
ZXQgPSBudWxscHRyOworICAgICAgICBpZiAoaXM8UHJvY2Vzc2luZ0luc3RydWN0aW9uPigqbm9k
ZSkpIHsKKyAgICAgICAgICAgIC8vIFByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gKFhNTCBkb2N1bWVu
dHMgb25seSkuCisgICAgICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGxpbmtpbmcgdG8gZW1i
ZWRkZWQgQ1NTIHN0eWxlc2hlZXRzLCBzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00OTI4MT4gZm9yIGRpc2N1c3Npb24uCisgICAgICAgICAgICBQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24mIHBpID0gZG93bmNhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uPigqbm9kZSk7
CisgICAgICAgICAgICBzaGVldCA9IHBpLnNoZWV0KCk7CisjaWYgRU5BQkxFKFhTTFQpCisgICAg
ICAgICAgICAvLyBEb24ndCBhcHBseSBYU0wgdHJhbnNmb3JtcyB0byBhbHJlYWR5IHRyYW5zZm9y
bWVkIGRvY3VtZW50cyAtLSA8cmRhcjovL3Byb2JsZW0vNDEzMjgwNj4KKyAgICAgICAgICAgIGlm
IChwaS5pc1hTTCgpICYmICFtX2RvY3VtZW50LnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBEb24ndCBhcHBseSBYU0wgdHJhbnNmb3JtcyB1bnRpbCBsb2Fk
aW5nIGlzIGZpbmlzaGVkLgorICAgICAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5wYXJzaW5n
KCkpCisgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQuYXBwbHlYU0xUcmFuc2Zvcm0oJnBp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgfSBlbHNlIGlmIChpczxIVE1MTGlua0VsZW1lbnQ+KCpub2RlKSB8fCBpczxIVE1MU3R5bGVF
bGVtZW50Pigqbm9kZSkgfHwgaXM8U1ZHU3R5bGVFbGVtZW50Pigqbm9kZSkpIHsKKyAgICAgICAg
ICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CisgICAgICAg
ICAgICBBdG9taWNTdHJpbmcgdGl0bGUgPSBlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUodGl0bGVB
dHRyKTsKKyAgICAgICAgICAgIGJvb2wgZW5hYmxlZFZpYVNjcmlwdCA9IGZhbHNlOworICAgICAg
ICAgICAgaWYgKGlzPEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyA8TElOSz4gZWxlbWVudAorICAgICAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCYgbGlu
a0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpOworICAgICAgICAg
ICAgICAgIGlmIChsaW5rRWxlbWVudC5pc0Rpc2FibGVkKCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGVuYWJsZWRWaWFTY3JpcHQgPSBsaW5rRWxlbWVu
dC5pc0VuYWJsZWRWaWFTY3JpcHQoKTsKKyAgICAgICAgICAgICAgICBpZiAobGlua0VsZW1lbnQu
c3R5bGVTaGVldElzTG9hZGluZygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGl0IGlzIGxv
YWRpbmcgYnV0IHdlIHNob3VsZCBzdGlsbCBkZWNpZGUgd2hpY2ggc3R5bGUgc2hlZXQgc2V0IHRv
IHVzZQorICAgICAgICAgICAgICAgICAgICBpZiAoIWVuYWJsZWRWaWFTY3JpcHQgJiYgIXRpdGxl
LmlzRW1wdHkoKSAmJiBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaW5rRWxlbWVudC5mYXN0R2V0QXR0cmlidXRl
KHJlbEF0dHIpLmNvbnRhaW5zKCJhbHRlcm5hdGUiKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUgPSB0aXRsZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3NlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUgPSB0aXRsZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKCFsaW5rRWxlbWVudC5zaGVldCgpKQorICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IG51
bGxBdG9tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHBy
ZWZlcnJlZCBzdHlsZXNldC4gVGhpcyBpcyB0aGUKKyAgICAgICAgICAgIC8vIHNldCBvZiBzaGVl
dHMgdGhhdCB3aWxsIGJlIGVuYWJsZWQuCisgICAgICAgICAgICBpZiAoaXM8U1ZHU3R5bGVFbGVt
ZW50PihlbGVtZW50KSkKKyAgICAgICAgICAgICAgICBzaGVldCA9IGRvd25jYXN0PFNWR1N0eWxl
RWxlbWVudD4oZWxlbWVudCkuc2hlZXQoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxM
aW5rRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgICAgICAgICAgc2hlZXQgPSBkb3duY2FzdDxI
VE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgc2hlZXQgPSBkb3duY2FzdDxIVE1MU3R5bGVFbGVtZW50PihlbGVtZW50KS5z
aGVldCgpOworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgc2hlZXQgYmVsb25n
cyB0byBhIHN0eWxlc2V0CisgICAgICAgICAgICAvLyAodGh1cyBtYWtpbmcgaXQgUFJFRkVSUkVE
IG9yIEFMVEVSTkFURSByYXRoZXIgdGhhbgorICAgICAgICAgICAgLy8gUEVSU0lTVEVOVCkuCisg
ICAgICAgICAgICBhdXRvJiByZWwgPSBlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUocmVsQXR0cik7
CisgICAgICAgICAgICBpZiAoIWVuYWJsZWRWaWFTY3JpcHQgJiYgIXRpdGxlLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIC8vIFllcywgd2UgaGF2ZSBhIHRpdGxlLgorICAgICAgICAgICAg
ICAgIGlmIChtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBObyBwcmVmZXJyZWQgc2V0IGhhcyBiZWVuIGVzdGFibGlzaGVkLiBJ
ZgorICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgTk9UIGFuIGFsdGVybmF0ZSBzaGVldCwg
dGhlbiBlc3RhYmxpc2gKKyAgICAgICAgICAgICAgICAgICAgLy8gdXMgYXMgdGhlIHByZWZlcnJl
ZCBzZXQuIE90aGVyd2lzZSwganVzdCBpZ25vcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhp
cyBzaGVldC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KGVs
ZW1lbnQpIHx8ICFyZWwuY29udGFpbnMoImFsdGVybmF0ZSIpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSA9IG1fc2VsZWN0ZWRTdHlsZXNoZWV0
U2V0TmFtZSA9IHRpdGxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
dGl0bGUgIT0gbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgc2hlZXQgPSBudWxscHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVs
LmNvbnRhaW5zKCJhbHRlcm5hdGUiKSAmJiB0aXRsZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgc2hlZXQgPSBudWxscHRyOworICAgICAgICB9CisgICAgICAgIGlmIChzaGVldCkKKyAgICAg
ICAgICAgIHNoZWV0cy5hcHBlbmQoc2hlZXQpOworICAgIH0KK30KKwordm9pZCBEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uOjphbmFseXplU3R5bGVTaGVldENoYW5nZShVcGRhdGVGbGFnIHVw
ZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBuZXdTdHlsZXNo
ZWV0cywgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUmIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlLCBi
b29sJiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYykKK3sKKyAgICBzdHlsZVJlc29sdmVyVXBkYXRl
VHlwZSA9IFJlY29uc3RydWN0OworICAgIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gdHJ1ZTsK
KyAgICAKKyAgICAvLyBTdHlsZXNoZWV0cyBvZiA8c3R5bGU+IGVsZW1lbnRzIHRoYXQgQGltcG9y
dCBzdHlsZXNoZWV0cyBhcmUgYWN0aXZlIGJ1dCBsb2FkaW5nLiBXZSBuZWVkIHRvIHRyaWdnZXIg
YSBmdWxsIHJlY2FsYyB3aGVuIHN1Y2ggbG9hZHMgYXJlIGRvbmUuCisgICAgYm9vbCBoYXNBY3Rp
dmVMb2FkaW5nU3R5bGVzaGVldCA9IGZhbHNlOworICAgIHVuc2lnbmVkIG5ld1N0eWxlc2hlZXRD
b3VudCA9IG5ld1N0eWxlc2hlZXRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbmV3U3R5bGVzaGVldENvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKG5ld1N0eWxlc2hlZXRz
W2ldLT5pc0xvYWRpbmcoKSkKKyAgICAgICAgICAgIGhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0
ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgJiYg
IWhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0KSB7CisgICAgICAgIG1faGFkQWN0aXZlTG9hZGlu
Z1N0eWxlc2hlZXQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2hhZEFj
dGl2ZUxvYWRpbmdTdHlsZXNoZWV0ID0gaGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQ7CisKKyAg
ICBpZiAodXBkYXRlRmxhZyAhPSBPcHRpbWl6ZWRVcGRhdGUpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIW1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gKm1fZG9jdW1lbnQuc3R5bGVS
ZXNvbHZlcklmRXhpc3RzKCk7CisKKyAgICAvLyBGaW5kIG91dCB3aGljaCBzdHlsZXNoZWV0cyBh
cmUgbmV3LgorICAgIHVuc2lnbmVkIG9sZFN0eWxlc2hlZXRDb3VudCA9IG1fYWN0aXZlQXV0aG9y
U3R5bGVTaGVldHMuc2l6ZSgpOworICAgIGlmIChuZXdTdHlsZXNoZWV0Q291bnQgPCBvbGRTdHls
ZXNoZWV0Q291bnQpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8U3R5bGVTaGVldENvbnRl
bnRzKj4gYWRkZWRTaGVldHM7CisgICAgdW5zaWduZWQgbmV3SW5kZXggPSAwOworICAgIGZvciAo
dW5zaWduZWQgb2xkSW5kZXggPSAwOyBvbGRJbmRleCA8IG9sZFN0eWxlc2hlZXRDb3VudDsgKytv
bGRJbmRleCkgeworICAgICAgICBpZiAobmV3SW5kZXggPj0gbmV3U3R5bGVzaGVldENvdW50KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3aGlsZSAobV9hY3RpdmVBdXRob3JTdHlsZVNo
ZWV0c1tvbGRJbmRleF0gIT0gbmV3U3R5bGVzaGVldHNbbmV3SW5kZXhdKSB7CisgICAgICAgICAg
ICBhZGRlZFNoZWV0cy5hcHBlbmQoJm5ld1N0eWxlc2hlZXRzW25ld0luZGV4XS0+Y29udGVudHMo
KSk7CisgICAgICAgICAgICArK25ld0luZGV4OworICAgICAgICAgICAgaWYgKG5ld0luZGV4ID09
IG5ld1N0eWxlc2hlZXRDb3VudCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgKytuZXdJbmRleDsKKyAgICB9CisgICAgYm9vbCBoYXNJbnNlcnRpb25zID0gIWFk
ZGVkU2hlZXRzLmlzRW1wdHkoKTsKKyAgICB3aGlsZSAobmV3SW5kZXggPCBuZXdTdHlsZXNoZWV0
Q291bnQpIHsKKyAgICAgICAgYWRkZWRTaGVldHMuYXBwZW5kKCZuZXdTdHlsZXNoZWV0c1tuZXdJ
bmRleF0tPmNvbnRlbnRzKCkpOworICAgICAgICArK25ld0luZGV4OworICAgIH0KKyAgICAvLyBJ
ZiBhbGwgbmV3IHNoZWV0cyB3ZXJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3Qgd2UgY2Fu
IGp1c3QgYWRkIHRoZW0gdG8gZXhpc3RpbmcgU3R5bGVSZXNvbHZlci4KKyAgICAvLyBJZiB0aGVy
ZSB3ZXJlIGluc2VydGlvbnMgd2UgbmVlZCB0byByZS1hZGQgYWxsIHRoZSBzdHlsZXNoZWV0cyBz
byBydWxlcyBhcmUgb3JkZXJlZCBjb3JyZWN0bHkuCisgICAgc3R5bGVSZXNvbHZlclVwZGF0ZVR5
cGUgPSBoYXNJbnNlcnRpb25zID8gUmVzZXQgOiBBZGRpdGl2ZTsKKworICAgIC8vIElmIHdlIGFy
ZSBhbHJlYWR5IHBhcnNpbmcgdGhlIGJvZHkgYW5kIHNvIG1heSBoYXZlIHNpZ25pZmljYW50IGFt
b3VudCBvZiBlbGVtZW50cywgcHV0IHNvbWUgZWZmb3J0IGludG8gdHJ5aW5nIHRvIGF2b2lkIHN0
eWxlIHJlY2FsY3MuCisgICAgaWYgKCFtX2RvY3VtZW50LmJvZHlPckZyYW1lc2V0KCkgfHwgbV9k
b2N1bWVudC5oYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzIGludmFsaWRhdGlvbkFuYWx5c2lzKGFkZGVk
U2hlZXRzLCBzdHlsZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFsdWF0b3IoKSk7CisgICAgaWYgKGlu
dmFsaWRhdGlvbkFuYWx5c2lzLmRpcnRpZXNBbGxTdHlsZSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgaW52YWxpZGF0aW9uQW5hbHlzaXMuaW52YWxpZGF0ZVN0eWxlKG1fZG9jdW1lbnQpOworICAg
IHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGZpbHRl
ckVuYWJsZWROb25lbXB0eUNTU1N0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4+JiByZXN1bHQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+JiBzaGVldHMpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNoZWV0cy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoIWlzPENTU1N0eWxlU2hlZXQ+KCpzaGVldHNbaV0pKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIENTU1N0eWxlU2hlZXQmIHNoZWV0ID0gZG93bmNhc3Q8Q1NTU3R5bGVT
aGVldD4oKnNoZWV0c1tpXSk7CisgICAgICAgIGlmIChzaGVldC5kaXNhYmxlZCgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmICghc2hlZXQubGVuZ3RoKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgmc2hlZXQpOworICAgIH0KK30KKwor
Ym9vbCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0
cyhVcGRhdGVGbGFnIHVwZGF0ZUZsYWcpCit7CisgICAgaWYgKG1fZG9jdW1lbnQuaW5TdHlsZVJl
Y2FsYygpKSB7CisgICAgICAgIC8vIFNWRyA8dXNlPiBlbGVtZW50IG1heSBtYW5hZ2UgdG8gaW52
YWxpZGF0ZSBzdHlsZSBzZWxlY3RvciBpbiB0aGUgbWlkZGxlIG9mIGEgc3R5bGUgcmVjYWxjLgor
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQzNDQK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGZpeGVkIGluIFNWRyBhbmQgdGhlIGNh
bGwgc2l0ZSByZXBsYWNlZCBieSBBU1NFUlQoIW1faW5TdHlsZVJlY2FsYykuCisgICAgICAgIG1f
cGVuZGluZ1VwZGF0ZVR5cGUgPSBGdWxsVXBkYXRlOworICAgICAgICBtX2RvY3VtZW50LnNjaGVk
dWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgfQor
ICAgIGlmICghbV9kb2N1bWVudC5oYXNMaXZpbmdSZW5kZXJUcmVlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+IGFjdGl2ZVN0eWxlU2hl
ZXRzOworICAgIGNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhhY3RpdmVTdHlsZVNoZWV0cyk7CisK
KyAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBhY3RpdmVDU1NTdHlsZVNoZWV0czsK
KyAgICBhY3RpdmVDU1NTdHlsZVNoZWV0cy5hcHBlbmRWZWN0b3IoaW5qZWN0ZWRBdXRob3JTdHls
ZVNoZWV0cygpKTsKKyAgICBhY3RpdmVDU1NTdHlsZVNoZWV0cy5hcHBlbmRWZWN0b3IoZG9jdW1l
bnRBdXRob3JTdHlsZVNoZWV0cygpKTsKKyAgICBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHls
ZVNoZWV0cyhhY3RpdmVDU1NTdHlsZVNoZWV0cywgYWN0aXZlU3R5bGVTaGVldHMpOworCisgICAg
U3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGU7CisgICAgYm9v
bCByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYzsKKyAgICBhbmFseXplU3R5bGVTaGVldENoYW5nZSh1
cGRhdGVGbGFnLCBhY3RpdmVDU1NTdHlsZVNoZWV0cywgc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUs
IHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKTsKKworICAgIGlmIChzdHlsZVJlc29sdmVyVXBkYXRl
VHlwZSA9PSBSZWNvbnN0cnVjdCkKKyAgICAgICAgbV9kb2N1bWVudC5jbGVhclN0eWxlUmVzb2x2
ZXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9
IG1fZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOworICAgICAgICBpZiAoc3R5bGVSZXNv
bHZlclVwZGF0ZVR5cGUgPT0gUmVzZXQpIHsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIucnVs
ZVNldHMoKS5yZXNldEF1dGhvclN0eWxlKCk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLmFw
cGVuZEF1dGhvclN0eWxlU2hlZXRzKDAsIGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9PSBB
ZGRpdGl2ZSk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLmFwcGVuZEF1dGhvclN0eWxlU2hl
ZXRzKG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpLCBhY3RpdmVDU1NTdHlsZVNoZWV0
cyk7CisgICAgICAgIH0KKyAgICAgICAgcmVzZXRDU1NGZWF0dXJlRmxhZ3MoKTsKKyAgICB9CisK
KyAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAgPSBudWxs
cHRyOworICAgIG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMuc3dhcChhY3RpdmVDU1NTdHlsZVNo
ZWV0cyk7CisgICAgbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0LnN3YXAoYWN0aXZlU3R5
bGVTaGVldHMpOworCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphY3RpdmVTdHlsZVNo
ZWV0c1VwZGF0ZWQobV9kb2N1bWVudCk7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNoZWV0IDog
bV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0cykgeworICAgICAgICBpZiAoc2hlZXQtPmNvbnRlbnRz
KCkudXNlc1JlbVVuaXRzKCkpCisgICAgICAgICAgICBtX3VzZXNSZW1Vbml0cyA9IHRydWU7Cisg
ICAgICAgIGlmIChzaGVldC0+Y29udGVudHMoKS51c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KCkp
CisgICAgICAgICAgICBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkgPSB0cnVlOworICAgIH0K
KyAgICBtX3BlbmRpbmdVcGRhdGVUeXBlID0gTm9VcGRhdGU7CisKKyAgICByZXR1cm4gcmVxdWly
ZXNGdWxsU3R5bGVSZWNhbGM7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4+IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFjdGl2ZVN0eWxlU2hlZXRzRm9ySW5z
cGVjdG9yKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiByZXN1
bHQ7CisKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGluamVjdGVkQXV0aG9yU3R5bGVTaGVldHMo
KSk7CisgICAgcmVzdWx0LmFwcGVuZFZlY3Rvcihkb2N1bWVudEF1dGhvclN0eWxlU2hlZXRzKCkp
OworCisgICAgZm9yIChhdXRvJiBzdHlsZVNoZWV0IDogbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hl
ZXRMaXN0KSB7CisgICAgICAgIGlmICghaXM8Q1NTU3R5bGVTaGVldD4oKnN0eWxlU2hlZXQpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ1NTU3R5bGVTaGVldCYgc2hlZXQgPSBk
b3duY2FzdDxDU1NTdHlsZVNoZWV0Pigqc3R5bGVTaGVldCk7CisgICAgICAgIGlmIChzaGVldC5k
aXNhYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZCgmc2hlZXQpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBD
U1NTdHlsZVNoZWV0KiBzaGVldCkgY29uc3QKK3sKKyAgICBpZiAoIW1fd2Vha0NvcHlPZkFjdGl2
ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cCkgeworICAgICAgICBtX3dlYWtDb3B5T2ZBY3Rp
dmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAgPSBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hTZXQ8
Y29uc3QgQ1NTU3R5bGVTaGVldCo+PigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1f
d2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+YWRkKG1fYWN0aXZl
QXV0aG9yU3R5bGVTaGVldHNbaV0uZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gbV93ZWFrQ29w
eU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwLT5jb250YWlucyhzaGVldCk7Cit9
CisKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6ZGV0YWNoRnJvbURvY3VtZW50
KCkKK3sKKyAgICBpZiAobV9wYWdlVXNlclNoZWV0KQorICAgICAgICBtX3BhZ2VVc2VyU2hlZXQt
PmRldGFjaEZyb21Eb2N1bWVudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lu
amVjdGVkVXNlclN0eWxlU2hlZXRzLnNpemUoKTsgKytpKQorICAgICAgICBtX2luamVjdGVkVXNl
clN0eWxlU2hlZXRzW2ldLT5kZXRhY2hGcm9tRG9jdW1lbnQoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLnNpemUoKTsgKytpKQorICAg
ICAgICBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHNbaV0tPmRldGFjaEZyb21Eb2N1bWVudCgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VzZXJTdHlsZVNoZWV0cy5zaXplKCk7
ICsraSkKKyAgICAgICAgbV91c2VyU3R5bGVTaGVldHNbaV0tPmRldGFjaEZyb21Eb2N1bWVudCgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2F1dGhvclN0eWxlU2hlZXRzLnNpemUo
KTsgKytpKQorICAgICAgICBtX2F1dGhvclN0eWxlU2hlZXRzW2ldLT5kZXRhY2hGcm9tRG9jdW1l
bnQoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMu
Y3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVl
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2
IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDksIDIwMTEtMjAx
MiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQpAQCAt
MjYsMTAgKzI2LDExIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0
cy5oIgogCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFN0
eWxlRWxlbWVudC5oIgpAQCAtNTMsMTkzICs1NCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCi1Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQp
Ci0gICAgLCBtX3BlbmRpbmdTdHlsZXNoZWV0cygwKQotICAgICwgbV9pbmplY3RlZFN0eWxlU2hl
ZXRDYWNoZVZhbGlkKGZhbHNlKQotICAgICwgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldChm
YWxzZSkKLSAgICAsIG1fcGVuZGluZ1VwZGF0ZVR5cGUoTm9VcGRhdGUpCi0gICAgLCBtX3VzZXNG
aXJzdExpbmVSdWxlcyhmYWxzZSkKLSAgICAsIG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXMoZmFsc2Up
Ci0gICAgLCBtX3VzZXNSZW1Vbml0cyhmYWxzZSkKLSAgICAsIG1fdXNlc1N0eWxlQmFzZWRFZGl0
YWJpbGl0eShmYWxzZSkKLSAgICAsIG1fc3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lcigqdGhpcywg
JkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXJG
aXJlZCkKK0F1dGhvclN0eWxlU2hlZXRzOjpBdXRob3JTdHlsZVNoZWV0cyhUcmVlU2NvcGUmIHRy
ZWVTY29wZSkKKyAgICA6IG1fZG9jdW1lbnQodHJlZVNjb3BlLmRvY3VtZW50U2NvcGUoKSkKIHsK
IH0KIAotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb21iaW5lQ1NTRmVhdHVy
ZUZsYWdzKCkKLXsKLSAgICAvLyBEZWxheSByZXNldHRpbmcgdGhlIGZsYWdzIHVudGlsIGFmdGVy
IG5leHQgc3R5bGUgcmVjYWxjIHNpbmNlIHVuYXBwbHlpbmcgdGhlIHN0eWxlIG1heSBub3Qgd29y
ayB3aXRob3V0IHRoZXNlIHNldCAodGhpcyBpcyB0cnVlIGF0IGxlYXN0IHdpdGggYmVmb3JlL2Fm
dGVyKS4KLSAgICBjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gbV9kb2N1bWVu
dC5lbnN1cmVTdHlsZVJlc29sdmVyKCk7Ci0gICAgbV91c2VzRmlyc3RMaW5lUnVsZXMgPSBtX3Vz
ZXNGaXJzdExpbmVSdWxlcyB8fCBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExpbmVSdWxlcygpOwot
ICAgIG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXMgPSBtX3VzZXNGaXJzdExldHRlclJ1bGVzIHx8IHN0
eWxlUmVzb2x2ZXIudXNlc0ZpcnN0TGV0dGVyUnVsZXMoKTsKLX0KLQotdm9pZCBEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uOjpyZXNldENTU0ZlYXR1cmVGbGFncygpCi17Ci0gICAgY29uc3Qg
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNv
bHZlcigpOwotICAgIG1fdXNlc0ZpcnN0TGluZVJ1bGVzID0gc3R5bGVSZXNvbHZlci51c2VzRmly
c3RMaW5lUnVsZXMoKTsKLSAgICBtX3VzZXNGaXJzdExldHRlclJ1bGVzID0gc3R5bGVSZXNvbHZl
ci51c2VzRmlyc3RMZXR0ZXJSdWxlcygpOwotfQotCi1DU1NTdHlsZVNoZWV0KiBEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uOjpwYWdlVXNlclNoZWV0KCkKLXsKLSAgICBpZiAobV9wYWdlVXNl
clNoZWV0KQotICAgICAgICByZXR1cm4gbV9wYWdlVXNlclNoZWV0LmdldCgpOwotICAgIAotICAg
IFBhZ2UqIG93bmluZ1BhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKLSAgICBpZiAoIW93bmluZ1Bh
Z2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIFN0cmluZyB1c2VyU2hlZXRUZXh0ID0g
b3duaW5nUGFnZS0+dXNlclN0eWxlU2hlZXQoKTsKLSAgICBpZiAodXNlclNoZWV0VGV4dC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIC8vIFBhcnNlIHRoZSBzaGVldCBh
bmQgY2FjaGUgaXQuCi0gICAgbV9wYWdlVXNlclNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRl
SW5saW5lKG1fZG9jdW1lbnQsIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS0+dXNlclN0eWxlU2hlZXRM
b2NhdGlvbigpKTsKLSAgICBtX3BhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCkuc2V0SXNVc2VyU3R5
bGVTaGVldCh0cnVlKTsKLSAgICBtX3BhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJp
bmcodXNlclNoZWV0VGV4dCk7Ci0gICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKLX0K
LQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjbGVhclBhZ2VVc2VyU2hlZXQo
KQotewotICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQpIHsKLSAgICAgICAgbV9wYWdlVXNlclNoZWV0
ID0gbnVsbHB0cjsKLSAgICAgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZl
clJlY2FsY1N0eWxlKTsKLSAgICB9Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbjo6dXBkYXRlUGFnZVVzZXJTaGVldCgpCi17Ci0gICAgY2xlYXJQYWdlVXNlclNoZWV0KCk7
Ci0gICAgaWYgKHBhZ2VVc2VyU2hlZXQoKSkKLSAgICAgICAgbV9kb2N1bWVudC5zdHlsZVJlc29s
dmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKLX0KLQotY29uc3QgVmVjdG9yPFJl
ZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmluamVj
dGVkVXNlclN0eWxlU2hlZXRzKCkgY29uc3QKLXsKLSAgICB1cGRhdGVJbmplY3RlZFN0eWxlU2hl
ZXRDYWNoZSgpOwotICAgIHJldHVybiBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzOwotfQotCi1j
b25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6aW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0Ci17Ci0gICAgdXBkYXRl
SW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKLSAgICByZXR1cm4gbV9pbmplY3RlZEF1dGhvclN0
eWxlU2hlZXRzOwotfQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVwZGF0
ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCkgY29uc3QKLXsKLSAgICBpZiAobV9pbmplY3RlZFN0
eWxlU2hlZXRDYWNoZVZhbGlkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pbmplY3RlZFN0eWxl
U2hlZXRDYWNoZVZhbGlkID0gdHJ1ZTsKLSAgICBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmNs
ZWFyKCk7Ci0gICAgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLmNsZWFyKCk7Ci0KLSAgICBQ
YWdlKiBvd25pbmdQYWdlID0gbV9kb2N1bWVudC5wYWdlKCk7Ci0gICAgaWYgKCFvd25pbmdQYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBhdXRvKiB1c2VyQ29udGVudENvbnRyb2xs
ZXIgPSBvd25pbmdQYWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKLSAgICBpZiAoIXVzZXJD
b250ZW50Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVXNlclN0eWxl
U2hlZXRNYXAqIHVzZXJTdHlsZVNoZWV0cyA9IHVzZXJDb250ZW50Q29udHJvbGxlci0+dXNlclN0
eWxlU2hlZXRzKCk7Ci0gICAgaWYgKCF1c2VyU3R5bGVTaGVldHMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZvciAoYXV0byYgc3R5bGVTaGVldHMgOiB1c2VyU3R5bGVTaGVldHMtPnZhbHVlcygp
KSB7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc2hlZXQgOiAqc3R5bGVTaGVldHMpIHsKLSAg
ICAgICAgICAgIGlmIChzaGVldC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1l
T25seSAmJiBtX2RvY3VtZW50Lm93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICBpZiAoIVVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc1Bh
dHRlcm5zKG1fZG9jdW1lbnQudXJsKCksIHNoZWV0LT53aGl0ZWxpc3QoKSwgc2hlZXQtPmJsYWNr
bGlzdCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgUmVmUHRy
PENTU1N0eWxlU2hlZXQ+IGdyb3VwU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUo
Y29uc3RfY2FzdDxEb2N1bWVudCY+KG1fZG9jdW1lbnQpLCBzaGVldC0+dXJsKCkpOwotICAgICAg
ICAgICAgYm9vbCBpc1VzZXJTdHlsZVNoZWV0ID0gc2hlZXQtPmxldmVsKCkgPT0gVXNlclN0eWxl
VXNlckxldmVsOwotICAgICAgICAgICAgaWYgKGlzVXNlclN0eWxlU2hlZXQpCi0gICAgICAgICAg
ICAgICAgbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoZ3JvdXBTaGVldCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRz
LmFwcGVuZChncm91cFNoZWV0KTsKLQotICAgICAgICAgICAgZ3JvdXBTaGVldC0+Y29udGVudHMo
KS5zZXRJc1VzZXJTdHlsZVNoZWV0KGlzVXNlclN0eWxlU2hlZXQpOwotICAgICAgICAgICAgZ3Jv
dXBTaGVldC0+Y29udGVudHMoKS5wYXJzZVN0cmluZyhzaGVldC0+c291cmNlKCkpOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmludmFs
aWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpCi17Ci0gICAgaWYgKCFtX2luamVjdGVkU3R5
bGVTaGVldENhY2hlVmFsaWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2luamVjdGVkU3R5bGVT
aGVldENhY2hlVmFsaWQgPSBmYWxzZTsKLSAgICBpZiAobV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0
cy5pc0VtcHR5KCkgJiYgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJS
ZWNhbGNTdHlsZSk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRk
QXV0aG9yU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiBhdXRob3JTaGVldCkKLXsKLSAg
ICBBU1NFUlQoIWF1dGhvclNoZWV0LmdldCgpLmlzVXNlclN0eWxlU2hlZXQoKSk7Ci0gICAgbV9h
dXRob3JTdHlsZVNoZWV0cy5hcHBlbmQoQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKFdURjo6bW92ZShh
dXRob3JTaGVldCksICZtX2RvY3VtZW50KSk7Ci0gICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVy
Q2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKLX0KLQotdm9pZCBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uOjphZGRVc2VyU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiB1
c2VyU2hlZXQpCi17Ci0gICAgQVNTRVJUKHVzZXJTaGVldC5nZXQoKS5pc1VzZXJTdHlsZVNoZWV0
KCkpOwotICAgIG1fdXNlclN0eWxlU2hlZXRzLmFwcGVuZChDU1NTdHlsZVNoZWV0OjpjcmVhdGUo
V1RGOjptb3ZlKHVzZXJTaGVldCksICZtX2RvY3VtZW50KSk7Ci0gICAgbV9kb2N1bWVudC5zdHls
ZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKLX0KLQotI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246
OmFkZERpc3BsYXlOb25lU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIHNlbGVjdG9yLCB1aW50MzJfdCBzZWxlY3RvcklEKQotewotICAgIGF1dG8gcmVzdWx0
ID0gbV9jb250ZW50RXh0ZW5zaW9uU2VsZWN0b3JTaGVldHMuYWRkKGlkZW50aWZpZXIsIG51bGxw
dHIpOwotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQ6OmNyZWF0ZShtX2RvY3VtZW50
KTsKLSAgICAgICAgbV91c2VyU3R5bGVTaGVldHMuYXBwZW5kKCZyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5zdHlsZVNoZWV0KCkpOwotICAgIH0KLQotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUt
PmFkZERpc3BsYXlOb25lU2VsZWN0b3Ioc2VsZWN0b3IsIHNlbGVjdG9ySUQpOwotICAgIG1fc3R5
bGVSZXNvbHZlckNoYW5nZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6bWF5YmVBZGRDb250ZW50RXh0ZW5zaW9uU2hlZXQoY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0KQotewotICAg
IEFTU0VSVChzaGVldC5pc1VzZXJTdHlsZVNoZWV0KCkpOwotCi0gICAgaWYgKG1fY29udGVudEV4
dGVuc2lvblNoZWV0cy5jb250YWlucyhpZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmPENTU1N0eWxlU2hlZXQ+IGNzc1NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHNo
ZWV0LCAmbV9kb2N1bWVudCk7Ci0gICAgbV9jb250ZW50RXh0ZW5zaW9uU2hlZXRzLnNldChpZGVu
dGlmaWVyLCAmY3NzU2hlZXQuZ2V0KCkpOwotICAgIG1fdXNlclN0eWxlU2hlZXRzLmFwcGVuZChh
ZG9wdFJlZihjc3NTaGVldC5sZWFrUmVmKCkpKTsKLSAgICBtX3N0eWxlUmVzb2x2ZXJDaGFuZ2Vk
VGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6c3R5bGVSZXNvbHZl
ckNoYW5nZWRUaW1lckZpcmVkKCkKLXsKLSAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFu
Z2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwotfQotCiAvLyBUaGlzIG1ldGhvZCBpcyBjYWxs
ZWQgd2hlbmV2ZXIgYSB0b3AtbGV2ZWwgc3R5bGVzaGVldCBoYXMgZmluaXNoZWQgbG9hZGluZy4K
LXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVtb3ZlUGVuZGluZ1NoZWV0KFJl
bW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUgbm90aWZpY2F0aW9uKQordm9pZCBBdXRo
b3JTdHlsZVNoZWV0czo6cmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92ZVBlbmRpbmdTaGVldE5vdGlm
aWNhdGlvblR5cGUgbm90aWZpY2F0aW9uKQogewogICAgIC8vIE1ha2Ugc3VyZSB3ZSBrbmV3IHRo
aXMgc2hlZXQgd2FzIHBlbmRpbmcsIGFuZCB0aGF0IG91ciBjb3VudCBpc24ndCBvdXQgb2Ygc3lu
Yy4KLSAgICBBU1NFUlQobV9wZW5kaW5nU3R5bGVzaGVldHMgPiAwKTsKKyAgICBBU1NFUlQobV9w
ZW5kaW5nU3R5bGVTaGVldENvdW50ID4gMCk7CiAKLSAgICBtX3BlbmRpbmdTdHlsZXNoZWV0cy0t
OworICAgIG1fcGVuZGluZ1N0eWxlU2hlZXRDb3VudC0tOwogICAgIAogI2lmZGVmIElOU1RSVU1F
TlRfTEFZT1VUX1NDSEVEVUxJTkcKICAgICBpZiAoIW93bmVyRWxlbWVudCgpKQogICAgICAgICBw
cmludGYoIlN0eWxlc2hlZXQgbG9hZGVkIGF0IHRpbWUgJWQuICVkIHN0eWxlc2hlZXRzIHN0aWxs
IHJlbWFpbi5cbiIsIGVsYXBzZWRUaW1lKCksIG1fcGVuZGluZ1N0eWxlc2hlZXRzKTsKICNlbmRp
ZgogCi0gICAgaWYgKG1fcGVuZGluZ1N0eWxlc2hlZXRzKQorICAgIGlmIChtX3BlbmRpbmdTdHls
ZVNoZWV0Q291bnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChub3RpZmljYXRpb24gPT0g
UmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0ZXIpIHsKQEAgLTI1MCw3ICs4Myw3IEBAIHZvaWQg
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVtb3YKICAgICBtX2RvY3VtZW50LmRpZFJl
bW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbjo6YWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSwgYm9vbCBj
cmVhdGVkQnlQYXJzZXIpCit2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjphZGRTdHlsZVNoZWV0Q2Fu
ZGlkYXRlTm9kZShOb2RlJiBub2RlLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKICAgICBpZiAo
IW5vZGUuaW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0yODMsMTIgKzExNiwxMiBA
QCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFkZFN0CiAgICAgbV9zdHlsZVNo
ZWV0Q2FuZGlkYXRlTm9kZXMuaW5zZXJ0QmVmb3JlKGZvbGxvd2luZ05vZGUsICZub2RlKTsKIH0K
IAotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpyZW1vdmVTdHlsZVNoZWV0Q2Fu
ZGlkYXRlTm9kZShOb2RlJiBub2RlKQordm9pZCBBdXRob3JTdHlsZVNoZWV0czo6cmVtb3ZlU3R5
bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSkKIHsKICAgICBtX3N0eWxlU2hlZXRDYW5k
aWRhdGVOb2Rlcy5yZW1vdmUoJm5vZGUpOwogfQogCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb246OmNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hl
ZXQ+PiYgc2hlZXRzKQordm9pZCBBdXRob3JTdHlsZVNoZWV0czo6Y29sbGVjdEFjdGl2ZVN0eWxl
U2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+JiBzaGVldHMpCiB7CiAgICAgaWYgKG1f
ZG9jdW1lbnQuc2V0dGluZ3MoKSAmJiAhbV9kb2N1bWVudC5zZXR0aW5ncygpLT5hdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNjYsNyArMTk5LDcgQEAg
dm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZQogICAgIH0KIH0KIAotdm9p
ZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphbmFseXplU3R5bGVTaGVldENoYW5nZShV
cGRhdGVGbGFnIHVwZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+
JiBuZXdTdHlsZXNoZWV0cywgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUmIHN0eWxlUmVzb2x2ZXJV
cGRhdGVUeXBlLCBib29sJiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYykKK3ZvaWQgQXV0aG9yU3R5
bGVTaGVldHM6OmFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKFVwZGF0ZUZsYWcgdXBkYXRlRmxhZywg
Y29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIG5ld1N0eWxlc2hlZXRzLCBTdHls
ZVJlc29sdmVyVXBkYXRlVHlwZSYgc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUsIGJvb2wmIHJlcXVp
cmVzRnVsbFN0eWxlUmVjYWxjKQogewogICAgIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID0gUmVj
b25zdHJ1Y3Q7CiAgICAgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMgPSB0cnVlOwpAQCAtMzkxLDcg
KzIyNCw3IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YW5hbHkKICAgICBT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gKm1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklm
RXhpc3RzKCk7CiAKICAgICAvLyBGaW5kIG91dCB3aGljaCBzdHlsZXNoZWV0cyBhcmUgbmV3Lgot
ICAgIHVuc2lnbmVkIG9sZFN0eWxlc2hlZXRDb3VudCA9IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVl
dHMuc2l6ZSgpOworICAgIHVuc2lnbmVkIG9sZFN0eWxlc2hlZXRDb3VudCA9IG1fYWN0aXZlU3R5
bGVTaGVldHMuc2l6ZSgpOwogICAgIGlmIChuZXdTdHlsZXNoZWV0Q291bnQgPCBvbGRTdHlsZXNo
ZWV0Q291bnQpCiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRz
Kj4gYWRkZWRTaGVldHM7CkBAIC0zOTksNyArMjMyLDcgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjphbmFseQogICAgIGZvciAodW5zaWduZWQgb2xkSW5kZXggPSAwOyBvbGRJ
bmRleCA8IG9sZFN0eWxlc2hlZXRDb3VudDsgKytvbGRJbmRleCkgewogICAgICAgICBpZiAobmV3
SW5kZXggPj0gbmV3U3R5bGVzaGVldENvdW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB3aGlsZSAobV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0c1tvbGRJbmRleF0gIT0gbmV3U3R5bGVz
aGVldHNbbmV3SW5kZXhdKSB7CisgICAgICAgIHdoaWxlIChtX2FjdGl2ZVN0eWxlU2hlZXRzW29s
ZEluZGV4XSAhPSBuZXdTdHlsZXNoZWV0c1tuZXdJbmRleF0pIHsKICAgICAgICAgICAgIGFkZGVk
U2hlZXRzLmFwcGVuZCgmbmV3U3R5bGVzaGVldHNbbmV3SW5kZXhdLT5jb250ZW50cygpKTsKICAg
ICAgICAgICAgICsrbmV3SW5kZXg7CiAgICAgICAgICAgICBpZiAobmV3SW5kZXggPT0gbmV3U3R5
bGVzaGVldENvdW50KQpAQCAtNDQwLDcgKzI3Myw3IEBAIHN0YXRpYyB2b2lkIGZpbHRlckVuYWJs
ZWROb25lbXB0eUNTU1N0eWwKICAgICB9CiB9CiAKLWJvb2wgRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoVXBkYXRlRmxhZyB1cGRhdGVGbGFnKQor
Ym9vbCBBdXRob3JTdHlsZVNoZWV0czo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoVXBkYXRlRmxh
ZyB1cGRhdGVGbGFnKQogewogICAgIGlmIChtX2RvY3VtZW50LmluU3R5bGVSZWNhbGMoKSkgewog
ICAgICAgICAvLyBTVkcgPHVzZT4gZWxlbWVudCBtYXkgbWFuYWdlIHRvIGludmFsaWRhdGUgc3R5
bGUgc2VsZWN0b3IgaW4gdGhlIG1pZGRsZSBvZiBhIHN0eWxlIHJlY2FsYy4KQEAgLTQ1OCw4ICsy
OTEsOCBAQCBib29sIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVwZGF0CiAgICAgY29s
bGVjdEFjdGl2ZVN0eWxlU2hlZXRzKGFjdGl2ZVN0eWxlU2hlZXRzKTsKIAogICAgIFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4+IGFjdGl2ZUNTU1N0eWxlU2hlZXRzOwotICAgIGFjdGl2ZUNT
U1N0eWxlU2hlZXRzLmFwcGVuZFZlY3RvcihpbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzKCkpOwot
ICAgIGFjdGl2ZUNTU1N0eWxlU2hlZXRzLmFwcGVuZFZlY3Rvcihkb2N1bWVudEF1dGhvclN0eWxl
U2hlZXRzKCkpOworICAgIGFjdGl2ZUNTU1N0eWxlU2hlZXRzLmFwcGVuZFZlY3RvcihtX2RvY3Vt
ZW50LmV4dGVuc2lvblN0eWxlU2hlZXRzKCkuaW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cygpKTsK
KyAgICBhY3RpdmVDU1NTdHlsZVNoZWV0cy5hcHBlbmRWZWN0b3IobV9kb2N1bWVudC5leHRlbnNp
b25TdHlsZVNoZWV0cygpLmF1dGhvclN0eWxlU2hlZXRzRm9yVGVzdGluZygpKTsKICAgICBmaWx0
ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsZVNoZWV0cyhhY3RpdmVDU1NTdHlsZVNoZWV0cywgYWN0
aXZlU3R5bGVTaGVldHMpOwogCiAgICAgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgc3R5bGVSZXNv
bHZlclVwZGF0ZVR5cGU7CkBAIC00NzUsMTggKzMwOCwxNyBAQCBib29sIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb246OnVwZGF0CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLmFwcGVuZEF1
dGhvclN0eWxlU2hlZXRzKDAsIGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIEFTU0VSVChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9PSBBZGRpdGl2
ZSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKG1f
YWN0aXZlQXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpLCBhY3RpdmVDU1NTdHlsZVNoZWV0cyk7Cisg
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKG1fYWN0aXZl
U3R5bGVTaGVldHMuc2l6ZSgpLCBhY3RpdmVDU1NTdHlsZVNoZWV0cyk7CiAgICAgICAgIH0KLSAg
ICAgICAgcmVzZXRDU1NGZWF0dXJlRmxhZ3MoKTsKICAgICB9CiAKICAgICBtX3dlYWtDb3B5T2ZB
Y3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAgPSBudWxscHRyOwotICAgIG1fYWN0aXZl
QXV0aG9yU3R5bGVTaGVldHMuc3dhcChhY3RpdmVDU1NTdHlsZVNoZWV0cyk7CisgICAgbV9hY3Rp
dmVTdHlsZVNoZWV0cy5zd2FwKGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKICAgICBtX3N0eWxlU2hl
ZXRzRm9yU3R5bGVTaGVldExpc3Quc3dhcChhY3RpdmVTdHlsZVNoZWV0cyk7CiAKICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFjdGl2ZVN0eWxlU2hlZXRzVXBkYXRlZChtX2RvY3VtZW50
KTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgc2hlZXQgOiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hl
ZXRzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBzaGVldCA6IG1fYWN0aXZlU3R5bGVTaGVldHMp
IHsKICAgICAgICAgaWYgKHNoZWV0LT5jb250ZW50cygpLnVzZXNSZW1Vbml0cygpKQogICAgICAg
ICAgICAgbV91c2VzUmVtVW5pdHMgPSB0cnVlOwogICAgICAgICBpZiAoc2hlZXQtPmNvbnRlbnRz
KCkudXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpKQpAQCAtNDk3LDEyICszMjksMTIgQEAgYm9v
bCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdAogICAgIHJldHVybiByZXF1aXJl
c0Z1bGxTdHlsZVJlY2FsYzsKIH0KIAotY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0
Pj4gRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNw
ZWN0b3IoKSBjb25zdAorY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gQXV0aG9y
U3R5bGVTaGVldHM6OmFjdGl2ZVN0eWxlU2hlZXRzRm9ySW5zcGVjdG9yKCkgY29uc3QKIHsKICAg
ICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiByZXN1bHQ7CiAKLSAgICByZXN1bHQuYXBw
ZW5kVmVjdG9yKGluamVjdGVkQXV0aG9yU3R5bGVTaGVldHMoKSk7Ci0gICAgcmVzdWx0LmFwcGVu
ZFZlY3Rvcihkb2N1bWVudEF1dGhvclN0eWxlU2hlZXRzKCkpOworICAgIHJlc3VsdC5hcHBlbmRW
ZWN0b3IobV9kb2N1bWVudC5leHRlbnNpb25TdHlsZVNoZWV0cygpLmluamVjdGVkQXV0aG9yU3R5
bGVTaGVldHMoKSk7CisgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2RvY3VtZW50LmV4dGVuc2lv
blN0eWxlU2hlZXRzKCkuYXV0aG9yU3R5bGVTaGVldHNGb3JUZXN0aW5nKCkpOwogCiAgICAgZm9y
IChhdXRvJiBzdHlsZVNoZWV0IDogbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KSB7CiAg
ICAgICAgIGlmICghaXM8Q1NTU3R5bGVTaGVldD4oKnN0eWxlU2hlZXQpKQpAQCAtNTE4LDI4ICsz
NTAsMTQgQEAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gRG9jdQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWN0
aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkgY29uc3QK
K2Jvb2wgQXV0aG9yU3R5bGVTaGVldHM6OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMoY29uc3Qg
Q1NTU3R5bGVTaGVldCogc2hlZXQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3dlYWtDb3B5T2ZBY3Rp
dmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXApIHsKICAgICAgICAgbV93ZWFrQ29weU9mQWN0
aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2V0
PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4oKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBt
X3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAtPmFkZChtX2FjdGl2
ZUF1dGhvclN0eWxlU2hlZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fYWN0aXZlU3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX3dl
YWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAtPmFkZChtX2FjdGl2ZVN0
eWxlU2hlZXRzW2ldLmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fd2Vha0NvcHlPZkFjdGl2
ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+Y29udGFpbnMoc2hlZXQpOwogfQogCi12b2lk
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmRldGFjaEZyb21Eb2N1bWVudCgpCi17Ci0g
ICAgaWYgKG1fcGFnZVVzZXJTaGVldCkKLSAgICAgICAgbV9wYWdlVXNlclNoZWV0LT5kZXRhY2hG
cm9tRG9jdW1lbnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbmplY3RlZFVz
ZXJTdHlsZVNoZWV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9pbmplY3RlZFVzZXJTdHlsZVNo
ZWV0c1tpXS0+ZGV0YWNoRnJvbURvY3VtZW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9p
bmplY3RlZEF1dGhvclN0eWxlU2hlZXRzW2ldLT5kZXRhY2hGcm9tRG9jdW1lbnQoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91c2VyU3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIG1fdXNlclN0eWxlU2hlZXRzW2ldLT5kZXRhY2hGcm9tRG9jdW1lbnQoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hdXRob3JTdHlsZVNoZWV0cy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV9hdXRob3JTdHlsZVNoZWV0c1tpXS0+ZGV0YWNoRnJvbURvY3VtZW50KCk7Ci19
Ci0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5oCShyZXZpc2lv
biAxOTAwNzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uLmg6MTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNiBBbGV4
ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBN
b2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vKQorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb25f
aAorI2RlZmluZSBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uX2gKKworI2luY2x1ZGUgIlRp
bWVyLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
KyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oIgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNzIERvY3VtZW50Owor
Y2xhc3MgTm9kZTsKK2NsYXNzIFN0eWxlU2hlZXQ7CitjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7
CitjbGFzcyBTdHlsZVNoZWV0TGlzdDsKKworY2xhc3MgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbihEb2N1bWVudCYpOworCisgICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3Qo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3Q7IH0KKworICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBhY3RpdmVBdXRob3JTdHlsZVNo
ZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHM7IH0KKworICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IGFjdGl2ZVN0eWxlU2hlZXRzRm9y
SW5zcGVjdG9yKCkgY29uc3Q7CisKKyAgICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0KCk7
CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGRvY3VtZW50VXNlclN0
eWxlU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU3R5bGVTaGVldHM7IH0KKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgZG9jdW1lbnRBdXRob3JTdHlsZVNoZWV0
cygpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aG9yU3R5bGVTaGVldHM7IH0KKyAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSBjb25z
dDsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgaW5qZWN0ZWRBdXRo
b3JTdHlsZVNoZWV0cygpIGNvbnN0OworCisgICAgdm9pZCBhZGRTdHlsZVNoZWV0Q2FuZGlkYXRl
Tm9kZShOb2RlJiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworICAgIHZvaWQgcmVtb3ZlU3R5bGVT
aGVldENhbmRpZGF0ZU5vZGUoTm9kZSYpOworCisgICAgdm9pZCBjbGVhclBhZ2VVc2VyU2hlZXQo
KTsKKyAgICB2b2lkIHVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKKyAgICB2b2lkIGludmFsaWRhdGVJ
bmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpOworICAgIHZvaWQgdXBkYXRlSW5qZWN0ZWRTdHlsZVNo
ZWV0Q2FjaGUoKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQXV0aG9yU2hl
ZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiBhdXRob3JTaGVldCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhZGRVc2VyU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiB1c2VyU2hl
ZXQpOworCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICB2b2lkIGFkZERpc3Bs
YXlOb25lU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCB1aW50MzJfdCBzZWxlY3RvcklEKTsKKyAgICB2b2lkIG1heWJlQWRkQ29udGVudEV4
dGVuc2lvblNoZWV0KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3R5bGVTaGVldENvbnRlbnRz
Jik7CisjZW5kaWYKKworICAgIGVudW0gVXBkYXRlRmxhZyB7IE5vVXBkYXRlID0gMCwgT3B0aW1p
emVkVXBkYXRlLCBGdWxsVXBkYXRlIH07CisKKyAgICBVcGRhdGVGbGFnIHBlbmRpbmdVcGRhdGVU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nVXBkYXRlVHlwZTsgfQorICAgIHZvaWQgc2V0
UGVuZGluZ1VwZGF0ZVR5cGUoVXBkYXRlRmxhZyB1cGRhdGVUeXBlKQorICAgIHsKKyAgICAgICAg
aWYgKHVwZGF0ZVR5cGUgPiBtX3BlbmRpbmdVcGRhdGVUeXBlKQorICAgICAgICAgICAgbV9wZW5k
aW5nVXBkYXRlVHlwZSA9IHVwZGF0ZVR5cGU7CisgICAgfQorCisgICAgdm9pZCBmbHVzaFBlbmRp
bmdVcGRhdGVzKCkKKyAgICB7CisgICAgICAgIGlmIChtX3BlbmRpbmdVcGRhdGVUeXBlICE9IE5v
VXBkYXRlKQorICAgICAgICAgICAgdXBkYXRlQWN0aXZlU3R5bGVTaGVldHMobV9wZW5kaW5nVXBk
YXRlVHlwZSk7CisgICAgfQorCisgICAgYm9vbCB1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRh
dGVGbGFnKTsKKworICAgIFN0cmluZyBwcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWU7IH0KKyAgICBTdHJpbmcgc2Vs
ZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWRTdHlsZXNo
ZWV0U2V0TmFtZTsgfQorICAgIHZvaWQgc2V0UHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUoY29u
c3QgU3RyaW5nJiBuYW1lKSB7IG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUgPSBuYW1lOyB9
CisgICAgdm9pZCBzZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lKGNvbnN0IFN0cmluZyYgbmFt
ZSkgeyBtX3NlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUgPSBuYW1lOyB9CisKKyAgICB2b2lkIGFk
ZFBlbmRpbmdTaGVldCgpIHsgbV9wZW5kaW5nU3R5bGVzaGVldHMrKzsgfQorICAgIGVudW0gUmVt
b3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9uVHlwZSB7CisgICAgICAgIFJlbW92ZVBlbmRpbmdT
aGVldE5vdGlmeUltbWVkaWF0ZWx5LAorICAgICAgICBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlM
YXRlcgorICAgIH07CisgICAgdm9pZCByZW1vdmVQZW5kaW5nU2hlZXQoUmVtb3ZlUGVuZGluZ1No
ZWV0Tm90aWZpY2F0aW9uVHlwZSA9IFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5
KTsKKworICAgIGJvb2wgaGFzUGVuZGluZ1NoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGlu
Z1N0eWxlc2hlZXRzID4gMDsgfQorCisgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25z
dCB7IHJldHVybiBtX3VzZXNGaXJzdExpbmVSdWxlczsgfQorICAgIGJvb2wgdXNlc0ZpcnN0TGV0
dGVyUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3VzZXNGaXJzdExldHRlclJ1bGVzOyB9CisgICAg
Ym9vbCB1c2VzUmVtVW5pdHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXNSZW1Vbml0czsgfQorICAg
IHZvaWQgc2V0VXNlc1JlbVVuaXQoYm9vbCBiKSB7IG1fdXNlc1JlbVVuaXRzID0gYjsgfQorICAg
IGJvb2wgdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpIHsgcmV0dXJuIG1fdXNlc1N0eWxlQmFz
ZWRFZGl0YWJpbGl0eTsgfQorICAgIHZvaWQgc2V0VXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eShi
b29sIGIpIHsgbV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5ID0gYjsgfQorCisgICAgdm9pZCBj
b21iaW5lQ1NTRmVhdHVyZUZsYWdzKCk7CisgICAgdm9pZCByZXNldENTU0ZlYXR1cmVGbGFncygp
OworCisgICAgYm9vbCBhY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5zKGNvbnN0IENTU1N0eWxlU2hl
ZXQqKSBjb25zdDsKKworICAgIHZvaWQgZGV0YWNoRnJvbURvY3VtZW50KCk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVNo
ZWV0Pj4mKTsKKyAgICBlbnVtIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHsKKyAgICAgICAgUmVj
b25zdHJ1Y3QsCisgICAgICAgIFJlc2V0LAorICAgICAgICBBZGRpdGl2ZQorICAgIH07CisgICAg
dm9pZCBhbmFseXplU3R5bGVTaGVldENoYW5nZShVcGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRhdGVU
eXBlJiwgYm9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpOworCisgICAgdm9pZCBzdHlsZVJl
c29sdmVyQ2hhbmdlZFRpbWVyRmlyZWQoKTsKKworICAgIERvY3VtZW50JiBtX2RvY3VtZW50Owor
CisgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4gbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hl
ZXRMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG1fYWN0aXZlQXV0aG9y
U3R5bGVTaGVldHM7CisKKyAgICAvLyBUaGlzIGlzIGEgbWlycm9yIG9mIG1fYWN0aXZlQXV0aG9y
U3R5bGVTaGVldHMgdGhhdCBnZXRzIHBvcHVsYXRlZCBvbiBkZW1hbmQgZm9yIGFjdGl2ZVN0eWxl
U2hlZXRzQ29udGFpbnMoKS4KKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PGNv
bnN0IENTU1N0eWxlU2hlZXQqPj4gbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JG
YXN0TG9va3VwOworCisgICAgLy8gVHJhY2sgdGhlIG51bWJlciBvZiBjdXJyZW50bHkgbG9hZGlu
ZyB0b3AtbGV2ZWwgc3R5bGVzaGVldHMgbmVlZGVkIGZvciByZW5kZXJpbmcuCisgICAgLy8gU2hl
ZXRzIGxvYWRlZCB1c2luZyB0aGUgQGltcG9ydCBkaXJlY3RpdmUgYXJlIG5vdCBpbmNsdWRlZCBp
biB0aGlzIGNvdW50LgorICAgIC8vIFdlIHVzZSB0aGlzIGNvdW50IG9mIHBlbmRpbmcgc2hlZXRz
IHRvIGRldGVjdCB3aGVuIHdlIGNhbiBiZWdpbiBhdHRhY2hpbmcKKyAgICAvLyBlbGVtZW50cyBh
bmQgd2hlbiBpdCBpcyBzYWZlIHRvIGV4ZWN1dGUgc2NyaXB0cy4KKyAgICBpbnQgbV9wZW5kaW5n
U3R5bGVzaGVldHM7CisKKyAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9wYWdlVXNlclNoZWV0
OworCisgICAgbXV0YWJsZSBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2luamVjdGVk
VXNlclN0eWxlU2hlZXRzOworICAgIG11dGFibGUgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0
Pj4gbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzOworICAgIG11dGFibGUgYm9vbCBtX2luamVj
dGVkU3R5bGVTaGVldENhY2hlVmFsaWQ7CisKKyAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+PiBtX3VzZXJTdHlsZVNoZWV0czsKKyAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
PiBtX2F1dGhvclN0eWxlU2hlZXRzOworCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
KyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2NvbnRlbnRFeHRl
bnNpb25TaGVldHM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxDb250ZW50RXh0ZW5zaW9u
czo6Q29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQ+PiBtX2NvbnRlbnRFeHRlbnNpb25TZWxlY3Rv
clNoZWV0czsKKyNlbmRpZgorCisgICAgYm9vbCBtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0
OworICAgIFVwZGF0ZUZsYWcgbV9wZW5kaW5nVXBkYXRlVHlwZTsKKworICAgIHR5cGVkZWYgTGlz
dEhhc2hTZXQ8Tm9kZSo+IFN0eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDsKKyAgICBTdHls
ZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXM7CisK
KyAgICBTdHJpbmcgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZTsKKyAgICBTdHJpbmcgbV9z
ZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lOworCisgICAgYm9vbCBtX3VzZXNGaXJzdExpbmVSdWxl
czsKKyAgICBib29sIG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXM7CisgICAgYm9vbCBtX3VzZXNSZW1V
bml0czsKKyAgICBib29sIG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eTsKKworICAgIFRpbWVy
IG1fc3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lcjsKK307CisKK30KKworI2VuZGlmCisKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5oCSh3b3JraW5nIGNvcHkpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMuaAkod29ya2luZyBjb3B5KQpAQCAt
Myw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3
ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwLCAyMDEyLTIwMTMsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KQEAgLTI1LDggKzI1LDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBEb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uX2gKLSNkZWZpbmUgRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbl9oCisjaWZuZGVmIEF1dGhvclN0eWxlU2hlZXRzX2gKKyNkZWZpbmUgQXV0aG9yU3R5
bGVTaGVldHNfaAogCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxtZW1vcnk+CkBAIC0z
NywxMCArMzcsNiBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CkBAIC00OSw0MCArNDUsMjEgQEAgY2xhc3Mg
Tm9kZTsKIGNsYXNzIFN0eWxlU2hlZXQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiBjbGFz
cyBTdHlsZVNoZWV0TGlzdDsKK2NsYXNzIFRyZWVTY29wZTsKIAotY2xhc3MgRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbiB7CitjbGFzcyBBdXRob3JTdHlsZVNoZWV0cyB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRG9jdW1lbnRTdHlsZVNo
ZWV0Q29sbGVjdGlvbihEb2N1bWVudCYpOworICAgIGV4cGxpY2l0IEF1dGhvclN0eWxlU2hlZXRz
KFRyZWVTY29wZSYpOwogCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mIHN0
eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRz
Rm9yU3R5bGVTaGVldExpc3Q7IH0KLQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4+JiBhY3RpdmVBdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZl
QXV0aG9yU3R5bGVTaGVldHM7IH0KKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+PiYgYWN0aXZlU3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVN0eWxlU2hl
ZXRzOyB9CiAKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc3R5bGVTaGVl
dHNGb3JTdHlsZVNoZWV0TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldHNGb3JTdHls
ZVNoZWV0TGlzdDsgfQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IGFj
dGl2ZVN0eWxlU2hlZXRzRm9ySW5zcGVjdG9yKCkgY29uc3Q7CiAKLSAgICBDU1NTdHlsZVNoZWV0
KiBwYWdlVXNlclNoZWV0KCk7Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0
Pj4mIGRvY3VtZW50VXNlclN0eWxlU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU3R5bGVT
aGVldHM7IH0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgZG9jdW1l
bnRBdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aG9yU3R5bGVTaGVldHM7
IH0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgaW5qZWN0ZWRVc2Vy
U3R5bGVTaGVldHMoKSBjb25zdDsKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+PiYgaW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0OwotCiAgICAgdm9pZCBhZGRT
dHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogICAg
IHZvaWQgcmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYpOwogCi0gICAgdm9pZCBj
bGVhclBhZ2VVc2VyU2hlZXQoKTsKLSAgICB2b2lkIHVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKLSAg
ICB2b2lkIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpOwotICAgIHZvaWQgdXBk
YXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYWRkQXV0aG9yU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiBhdXRob3JTaGVl
dCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyU2hlZXQoUmVmPFN0eWxlU2hlZXRD
b250ZW50cz4mJiB1c2VyU2hlZXQpOwotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
LSAgICB2b2lkIGFkZERpc3BsYXlOb25lU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCB1aW50MzJfdCBzZWxlY3RvcklEKTsKLSAgICB2b2lk
IG1heWJlQWRkQ29udGVudEV4dGVuc2lvblNoZWV0KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwg
U3R5bGVTaGVldENvbnRlbnRzJik7Ci0jZW5kaWYKLQogICAgIGVudW0gVXBkYXRlRmxhZyB7IE5v
VXBkYXRlID0gMCwgT3B0aW1pemVkVXBkYXRlLCBGdWxsVXBkYXRlIH07CiAKICAgICBVcGRhdGVG
bGFnIHBlbmRpbmdVcGRhdGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nVXBkYXRlVHlw
ZTsgfQpAQCAtMTA1LDE0ICs4MiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQcmVmZXJyZWRT
dHlsZXNoZWV0U2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9wcmVmZXJyZWRTdHlsZXNo
ZWV0U2V0TmFtZSA9IG5hbWU7IH0KICAgICB2b2lkIHNldFNlbGVjdGVkU3R5bGVzaGVldFNldE5h
bWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZSA9IG5h
bWU7IH0KIAotICAgIHZvaWQgYWRkUGVuZGluZ1NoZWV0KCkgeyBtX3BlbmRpbmdTdHlsZXNoZWV0
cysrOyB9CisgICAgdm9pZCBhZGRQZW5kaW5nU2hlZXQoKSB7IG1fcGVuZGluZ1N0eWxlU2hlZXRD
b3VudCsrOyB9CiAgICAgZW51bSBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZmljYXRpb25UeXBlIHsK
ICAgICAgICAgUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5SW1tZWRpYXRlbHksCiAgICAgICAgIFJl
bW92ZVBlbmRpbmdTaGVldE5vdGlmeUxhdGVyCiAgICAgfTsKICAgICB2b2lkIHJlbW92ZVBlbmRp
bmdTaGVldChSZW1vdmVQZW5kaW5nU2hlZXROb3RpZmljYXRpb25UeXBlID0gUmVtb3ZlUGVuZGlu
Z1NoZWV0Tm90aWZ5SW1tZWRpYXRlbHkpOwogCi0gICAgYm9vbCBoYXNQZW5kaW5nU2hlZXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9wZW5kaW5nU3R5bGVzaGVldHMgPiAwOyB9CisgICAgYm9vbCBoYXNQ
ZW5kaW5nU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nU3R5bGVTaGVldENvdW50ID4g
MDsgfQogCiAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZXNGaXJzdExpbmVSdWxlczsgfQogICAgIGJvb2wgdXNlc0ZpcnN0TGV0dGVyUnVsZXMoKSBjb25z
dCB7IHJldHVybiBtX3VzZXNGaXJzdExldHRlclJ1bGVzOyB9CkBAIC0xMjEsMTMgKzk4LDggQEAg
cHVibGljOgogICAgIGJvb2wgdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpIHsgcmV0dXJuIG1f
dXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eTsgfQogICAgIHZvaWQgc2V0VXNlc1N0eWxlQmFzZWRF
ZGl0YWJpbGl0eShib29sIGIpIHsgbV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5ID0gYjsgfQog
Ci0gICAgdm9pZCBjb21iaW5lQ1NTRmVhdHVyZUZsYWdzKCk7Ci0gICAgdm9pZCByZXNldENTU0Zl
YXR1cmVGbGFncygpOwotCiAgICAgYm9vbCBhY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5zKGNvbnN0
IENTU1N0eWxlU2hlZXQqKSBjb25zdDsKIAotICAgIHZvaWQgZGV0YWNoRnJvbURvY3VtZW50KCk7
Ci0KIHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9yPFJl
ZlB0cjxTdHlsZVNoZWV0Pj4mKTsKICAgICBlbnVtIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHsK
QEAgLTEzNywxMiArMTA5LDEwIEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2b2lkIGFuYWx5emVT
dHlsZVNoZWV0Q2hhbmdlKFVwZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4+JiBuZXdTdHlsZXNoZWV0cywgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUmLCBib29sJiBy
ZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyk7CiAKLSAgICB2b2lkIHN0eWxlUmVzb2x2ZXJDaGFuZ2Vk
VGltZXJGaXJlZCgpOwotCiAgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAKICAgICBWZWN0b3I8
UmVmUHRyPFN0eWxlU2hlZXQ+PiBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3Q7Ci0gICAg
VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0czsK
KyAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2FjdGl2ZVN0eWxlU2hlZXRzOwog
CiAgICAgLy8gVGhpcyBpcyBhIG1pcnJvciBvZiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzIHRo
YXQgZ2V0cyBwb3B1bGF0ZWQgb24gZGVtYW5kIGZvciBhY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5z
KCkuCiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxjb25zdCBDU1NTdHlsZVNo
ZWV0Kj4+IG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cDsKQEAg
LTE1MSwyNCArMTIxLDEwIEBAIHByaXZhdGU6CiAgICAgLy8gU2hlZXRzIGxvYWRlZCB1c2luZyB0
aGUgQGltcG9ydCBkaXJlY3RpdmUgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGlzIGNvdW50LgogICAg
IC8vIFdlIHVzZSB0aGlzIGNvdW50IG9mIHBlbmRpbmcgc2hlZXRzIHRvIGRldGVjdCB3aGVuIHdl
IGNhbiBiZWdpbiBhdHRhY2hpbmcKICAgICAvLyBlbGVtZW50cyBhbmQgd2hlbiBpdCBpcyBzYWZl
IHRvIGV4ZWN1dGUgc2NyaXB0cy4KLSAgICBpbnQgbV9wZW5kaW5nU3R5bGVzaGVldHM7Ci0KLSAg
ICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9wYWdlVXNlclNoZWV0OwotCi0gICAgbXV0YWJsZSBW
ZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzOwot
ICAgIG11dGFibGUgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9pbmplY3RlZEF1dGhv
clN0eWxlU2hlZXRzOwotICAgIG11dGFibGUgYm9vbCBtX2luamVjdGVkU3R5bGVTaGVldENhY2hl
VmFsaWQ7CisgICAgaW50IG1fcGVuZGluZ1N0eWxlU2hlZXRDb3VudCB7IDAgfTsKIAotICAgIFZl
Y3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG1fdXNlclN0eWxlU2hlZXRzOwotICAgIFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG1fYXV0aG9yU3R5bGVTaGVldHM7Ci0KLSNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8Q1NTU3R5
bGVTaGVldD4+IG1fY29udGVudEV4dGVuc2lvblNoZWV0czsKLSAgICBIYXNoTWFwPFN0cmluZywg
UmVmUHRyPENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldD4+IG1f
Y29udGVudEV4dGVuc2lvblNlbGVjdG9yU2hlZXRzOwotI2VuZGlmCi0KLSAgICBib29sIG1faGFk
QWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQ7Ci0gICAgVXBkYXRlRmxhZyBtX3BlbmRpbmdVcGRhdGVU
eXBlOworICAgIGJvb2wgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCB7IGZhbHNlIH07Cisg
ICAgVXBkYXRlRmxhZyBtX3BlbmRpbmdVcGRhdGVUeXBlIHsgTm9VcGRhdGUgfTsKIAogICAgIHR5
cGVkZWYgTGlzdEhhc2hTZXQ8Tm9kZSo+IFN0eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDsK
ICAgICBTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQgbV9zdHlsZVNoZWV0Q2FuZGlkYXRl
Tm9kZXM7CkBAIC0xNzYsMTIgKzEzMiwxMCBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3ByZWZl
cnJlZFN0eWxlc2hlZXRTZXROYW1lOwogICAgIFN0cmluZyBtX3NlbGVjdGVkU3R5bGVzaGVldFNl
dE5hbWU7CiAKLSAgICBib29sIG1fdXNlc0ZpcnN0TGluZVJ1bGVzOwotICAgIGJvb2wgbV91c2Vz
Rmlyc3RMZXR0ZXJSdWxlczsKLSAgICBib29sIG1fdXNlc1JlbVVuaXRzOwotICAgIGJvb2wgbV91
c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5OwotCi0gICAgVGltZXIgbV9zdHlsZVJlc29sdmVyQ2hh
bmdlZFRpbWVyOworICAgIGJvb2wgbV91c2VzRmlyc3RMaW5lUnVsZXMgeyBmYWxzZSB9OworICAg
IGJvb2wgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3VzZXNS
ZW1Vbml0cyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkg
eyBmYWxzZSB9OwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCShy
ZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuY3BwIgogI2luY2x1ZGUgIkFuaW1hdGlvbkV2ZW50LmNwcCIKKyNpbmNsdWRlICJBdXRob3JT
dHlsZVNoZWV0cy5jcHAiCiAjaW5jbHVkZSAiQXR0ci5jcHAiCiAjaW5jbHVkZSAiQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQuY3BwIgogI2luY2x1ZGUgIkJlZm9yZVVubG9hZEV2ZW50LmNwcCIKQEAg
LTY5LDcgKzcwLDYgQEAKICNpbmNsdWRlICJEb2N1bWVudE9yZGVyZWRNYXAuY3BwIgogI2luY2x1
ZGUgIkRvY3VtZW50UGFyc2VyLmNwcCIKICNpbmNsdWRlICJEb2N1bWVudFNoYXJlZE9iamVjdFBv
b2wuY3BwIgotI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwIgogI2lu
Y2x1ZGUgIkRvY3VtZW50VHlwZS5jcHAiCiAjaW5jbHVkZSAiRWxlbWVudC5jcHAiCiAjaW5jbHVk
ZSAiRWxlbWVudERhdGEuY3BwIgpAQCAtODUsNiArODUsNyBAQAogI2luY2x1ZGUgIkV2ZW50VGFy
Z2V0LmNwcCIKICNpbmNsdWRlICJFeGNlcHRpb25CYXNlLmNwcCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlUGxhY2Vob2xkZXIuY3BwIgorI2luY2x1ZGUgIkV4dGVuc2lvblN0eWxlU2hlZXRzLmNw
cCIKICNpbmNsdWRlICJGb2N1c0V2ZW50LmNwcCIKICNpbmNsdWRlICJHZW5lcmljRXZlbnRRdWV1
ZS5jcHAiCiAjaW5jbHVkZSAiSWRUYXJnZXRPYnNlcnZlci5jcHAiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBWE9i
amVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkF0dHIuaCIKKyNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNEQVRB
U2VjdGlvbi5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0
eWxlRGVjbGFyYXRpb24uaCIKQEAgLTU3LDYgKzU4LDcgQEAKICNpbmNsdWRlICJFbnRpdHlSZWZl
cmVuY2UuaCIKICNpbmNsdWRlICJFdmVudEZhY3RvcnkuaCIKICNpbmNsdWRlICJFdmVudEhhbmRs
ZXIuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkZvY3Vz
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZvbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGb3JtQ29u
dHJvbGxlci5oIgpAQCAtNDM5LDcgKzQ0MSw4IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSog
ZnJhbWUsIGNvbnN0IFUKICAgICAsIG1fZG9tVHJlZVZlcnNpb24oKytzX2dsb2JhbFRyZWVWZXJz
aW9uKQogICAgICwgbV9saXN0ZW5lclR5cGVzKDApCiAgICAgLCBtX211dGF0aW9uT2JzZXJ2ZXJU
eXBlcygwKQotICAgICwgbV9zdHlsZVNoZWV0Q29sbGVjdGlvbigqdGhpcykKKyAgICAsIG1fYXV0
aG9yU3R5bGVTaGVldHMoc3RkOjptYWtlX3VuaXF1ZTxBdXRob3JTdHlsZVNoZWV0cz4oKnRoaXMp
KQorICAgICwgbV9leHRlbnNpb25TdHlsZVNoZWV0cyhzdGQ6Om1ha2VfdW5pcXVlPEV4dGVuc2lv
blN0eWxlU2hlZXRzPigqdGhpcykpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RhdGUoc3RkOjptYWtl
X3VuaXF1ZTxWaXNpdGVkTGlua1N0YXRlPigqdGhpcykpCiAgICAgLCBtX3Zpc3VhbGx5T3JkZXJl
ZChmYWxzZSkKICAgICAsIG1fcmVhZHlTdGF0ZShDb21wbGV0ZSkKQEAgLTYyNCw3ICs2MjcsNyBA
QCBEb2N1bWVudDo6fkRvY3VtZW50KCkKIAogICAgIGlmIChtX2VsZW1lbnRTaGVldCkKICAgICAg
ICAgbV9lbGVtZW50U2hlZXQtPmRldGFjaEZyb21Eb2N1bWVudCgpOwotICAgIG1fc3R5bGVTaGVl
dENvbGxlY3Rpb24uZGV0YWNoRnJvbURvY3VtZW50KCk7CisgICAgZXh0ZW5zaW9uU3R5bGVTaGVl
dHMoKS5kZXRhY2hGcm9tRG9jdW1lbnQoKTsKIAogICAgIGNsZWFyU3R5bGVSZXNvbHZlcigpOyAv
LyBXZSBuZWVkIHRvIGRlc3Ryb3kgQ1NTRm9udFNlbGVjdG9yIGJlZm9yZSBkZXN0cm95aW5nIG1f
Y2FjaGVkUmVzb3VyY2VMb2FkZXIuCiAKQEAgLTc5MSw4ICs3OTQsOCBAQCB2b2lkIERvY3VtZW50
OjpzZXRDb21wYXRpYmlsaXR5TW9kZShEb2N1CiAKICAgICBpZiAoaW5RdWlya3NNb2RlKCkgIT0g
d2FzSW5RdWlya3NNb2RlKSB7CiAgICAgICAgIC8vIEFsbCB1c2VyIHN0eWxlc2hlZXRzIGhhdmUg
dG8gcmVwYXJzZSB1c2luZyB0aGUgZGlmZmVyZW50IG1vZGUuCi0gICAgICAgIG1fc3R5bGVTaGVl
dENvbGxlY3Rpb24uY2xlYXJQYWdlVXNlclNoZWV0KCk7Ci0gICAgICAgIG1fc3R5bGVTaGVldENv
bGxlY3Rpb24uaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCk7CisgICAgICAgIGV4
dGVuc2lvblN0eWxlU2hlZXRzKCkuY2xlYXJQYWdlVXNlclNoZWV0KCk7CisgICAgICAgIGV4dGVu
c2lvblN0eWxlU2hlZXRzKCkuaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCk7CiAg
ICAgfQogfQogCkBAIC0xODIzLDcgKzE4MjYsNyBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHls
ZShTdHlsZTo6Q2hhbmdlCiAgICAgLy8gcmUtYXR0YWNoaW5nIG91ciBjb250YWluaW5nIGlmcmFt
ZSwgd2hpY2ggd2hlbiBhc2tlZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6aXNVUkxBbGxvd2VkCiAg
ICAgLy8gaGl0cyBhIG51bGwtZGVyZWZlcmVuY2UgZHVlIHRvIHNlY3VyaXR5IGNvZGUgYWx3YXlz
IGFzc3VtaW5nIHRoZSBkb2N1bWVudCBoYXMgYSBTZWN1cml0eU9yaWdpbi4KIAotICAgIG1fc3R5
bGVTaGVldENvbGxlY3Rpb24uZmx1c2hQZW5kaW5nVXBkYXRlcygpOworICAgIGF1dGhvclN0eWxl
U2hlZXRzKCkuZmx1c2hQZW5kaW5nVXBkYXRlcygpOwogCiAgICAgZnJhbWVWaWV3LndpbGxSZWNh
bGNTdHlsZSgpOwogCkBAIC0xODMxLDcgKzE4MzQsNyBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNT
dHlsZShTdHlsZTo6Q2hhbmdlCiAKICAgICAvLyBGSVhNRTogV2UgbmV2ZXIgcmVzZXQgdGhpcyBm
bGFncy4KICAgICBpZiAobV9lbGVtZW50U2hlZXQgJiYgbV9lbGVtZW50U2hlZXQtPmNvbnRlbnRz
KCkudXNlc1JlbVVuaXRzKCkpCi0gICAgICAgIG1fc3R5bGVTaGVldENvbGxlY3Rpb24uc2V0VXNl
c1JlbVVuaXQodHJ1ZSk7CisgICAgICAgIGF1dGhvclN0eWxlU2hlZXRzKCkuc2V0VXNlc1JlbVVu
aXQodHJ1ZSk7CiAgICAgLy8gV2UgZG9uJ3QgY2FsbCBzZXRVc2VzU3R5bGVCYXNlZEVkaXRhYmls
aXR5IGhlcmUgYmVjYXVzZSB0aGUgd2hvbGUgcG9pbnQgb2YgdGhlIGZsYWcgaXMgdG8gYXZvaWQg
c3R5bGUgcmVjYWxjLgogICAgIC8vIGkuZS4gdXBkYXRpbmcgdGhlIGZsYWcgaGVyZSB3b3VsZCBi
ZSB0b28gbGF0ZS4KIApAQCAtMTg1OCwxMCArMTg2MSw2IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2Fs
Y1N0eWxlKFN0eWxlOjpDaGFuZ2UKICAgICAgICAgdW5zY2hlZHVsZVN0eWxlUmVjYWxjKCk7CiAK
ICAgICAgICAgbV9pblN0eWxlUmVjYWxjID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gUHNldWRvIGVs
ZW1lbnQgcmVtb3ZhbCBhbmQgc2ltaWxhciBtYXkgb25seSB3b3JrIHdpdGggdGhlc2UgZmxhZ3Mg
c3RpbGwgc2V0LiBSZXNldCB0aGVtIGFmdGVyIHRoZSBzdHlsZSByZWNhbGMuCi0gICAgICAgIGlm
IChtX3N0eWxlUmVzb2x2ZXIpCi0gICAgICAgICAgICBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLnJl
c2V0Q1NTRmVhdHVyZUZsYWdzKCk7CiAgICAgfQogCiAgICAgLy8gSWYgd2Ugd2FudGVkIHRvIGNh
bGwgaW1wbGljaXRDbG9zZSgpIGR1cmluZyByZWNhbGNTdHlsZSwgZG8gc28gbm93IHRoYXQgd2Un
cmUgZmluaXNoZWQuCkBAIC0yMTMwLDcgKzIxMjksNyBAQCB2b2lkIERvY3VtZW50OjpjcmVhdGVT
dHlsZVJlc29sdmVyKCkKICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gdGhpcy0+c2V0dGlu
Z3MoKSkKICAgICAgICAgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0gc2V0dGluZ3MtPmF1dGhv
ckFuZFVzZXJTdHlsZXNFbmFibGVkKCk7CiAgICAgbV9zdHlsZVJlc29sdmVyID0gc3RkOjptYWtl
X3VuaXF1ZTxTdHlsZVJlc29sdmVyPigqdGhpcywgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsK
LSAgICBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLmNvbWJpbmVDU1NGZWF0dXJlRmxhZ3MoKTsKKyAg
ICBtX3N0eWxlUmVzb2x2ZXItPmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKDAsIGF1dGhvclN0eWxl
U2hlZXRzKCkuYWN0aXZlU3R5bGVTaGVldHMoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmZvbnRz
TmVlZFVwZGF0ZShGb250U2VsZWN0b3ImKQpAQCAtMzA5MCw5ICszMDg5LDkgQEAgYm9vbCBEb2N1
bWVudDo6dXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eQogICAgIEFTU0VSVCghbV9yZW5kZXJWaWV3
IHx8ICFtX3JlbmRlclZpZXctPmZyYW1lVmlldygpLmlzUGFpbnRpbmcoKSk7CiAgICAgQVNTRVJU
KCFtX2luU3R5bGVSZWNhbGMpOwogCi0gICAgYXV0byYgY29sbGVjdGlvbiA9IGRvY3VtZW50KCku
c3R5bGVTaGVldENvbGxlY3Rpb24oKTsKLSAgICBjb2xsZWN0aW9uLmZsdXNoUGVuZGluZ1VwZGF0
ZXMoKTsKLSAgICByZXR1cm4gY29sbGVjdGlvbi51c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KCk7
CisgICAgYXV0byYgYXV0aG9yU2hlZXRzID0gY29uc3RfY2FzdDxBdXRob3JTdHlsZVNoZWV0cyY+
KGF1dGhvclN0eWxlU2hlZXRzKCkpOworICAgIGF1dGhvclNoZWV0cy5mbHVzaFBlbmRpbmdVcGRh
dGVzKCk7CisgICAgcmV0dXJuIGF1dGhvclNoZWV0cy51c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5
KCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1aXYoY29uc3QgU3RyaW5nJiBl
cXVpdiwgY29uc3QgU3RyaW5nJiBjb250ZW50KQpAQCAtMzEzMiw4ICszMTMxLDggQEAgdm9pZCBE
b2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zdCBTdAogICAgICAgICAvLyBGb3IgbW9yZSBp
bmZvLCBzZWUgdGhlIHRlc3QgYXQ6CiAgICAgICAgIC8vIGh0dHA6Ly93d3cuaGl4aWUuY2gvdGVz
dHMvZXZpbC9jc3MvaW1wb3J0L21haW4vcHJlZmVycmVkLmh0bWwKICAgICAgICAgLy8gLWR3aAot
ICAgICAgICBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLnNldFNlbGVjdGVkU3R5bGVzaGVldFNldE5h
bWUoY29udGVudCk7Ci0gICAgICAgIG1fc3R5bGVTaGVldENvbGxlY3Rpb24uc2V0UHJlZmVycmVk
U3R5bGVzaGVldFNldE5hbWUoY29udGVudCk7CisgICAgICAgIGF1dGhvclN0eWxlU2hlZXRzKCku
c2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZShjb250ZW50KTsKKyAgICAgICAgYXV0aG9yU3R5
bGVTaGVldHMoKS5zZXRQcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZShjb250ZW50KTsKICAgICAg
ICAgc3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAgICAgICAgIGJyZWFr
OwogCkBAIC0zNDg4LDE3ICszNDg3LDE3IEBAIFN0eWxlU2hlZXRMaXN0JiBEb2N1bWVudDo6c3R5
bGVTaGVldHMoKQogCiBTdHJpbmcgRG9jdW1lbnQ6OnByZWZlcnJlZFN0eWxlc2hlZXRTZXQoKSBj
b25zdAogewotICAgIHJldHVybiBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLnByZWZlcnJlZFN0eWxl
c2hlZXRTZXROYW1lKCk7CisgICAgcmV0dXJuIGF1dGhvclN0eWxlU2hlZXRzKCkucHJlZmVycmVk
U3R5bGVzaGVldFNldE5hbWUoKTsKIH0KIAogU3RyaW5nIERvY3VtZW50OjpzZWxlY3RlZFN0eWxl
c2hlZXRTZXQoKSBjb25zdAogewotICAgIHJldHVybiBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLnNl
bGVjdGVkU3R5bGVzaGVldFNldE5hbWUoKTsKKyAgICByZXR1cm4gYXV0aG9yU3R5bGVTaGVldHMo
KS5zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldFNl
bGVjdGVkU3R5bGVzaGVldFNldChjb25zdCBTdHJpbmcmIGFTdHJpbmcpCiB7Ci0gICAgbV9zdHls
ZVNoZWV0Q29sbGVjdGlvbi5zZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lKGFTdHJpbmcpOwor
ICAgIGF1dGhvclN0eWxlU2hlZXRzKCkuc2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZShhU3Ry
aW5nKTsKICAgICBzdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKIH0KIApA
QCAtMzUxNyw3ICszNTE2LDcgQEAgdm9pZCBEb2N1bWVudDo6c2NoZWR1bGVPcHRpbWl6ZWRTdHls
ZVNoZQogewogICAgIGlmIChtX29wdGltaXplZFN0eWxlU2hlZXRVcGRhdGVUaW1lci5pc0FjdGl2
ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi5zZXRQZW5k
aW5nVXBkYXRlVHlwZShEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpPcHRpbWl6ZWRVcGRh
dGUpOworICAgIGF1dGhvclN0eWxlU2hlZXRzKCkuc2V0UGVuZGluZ1VwZGF0ZVR5cGUoQXV0aG9y
U3R5bGVTaGVldHM6Ok9wdGltaXplZFVwZGF0ZSk7CiAgICAgbV9vcHRpbWl6ZWRTdHlsZVNoZWV0
VXBkYXRlVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCkBAIC0zNjA0LDEwICszNjAzLDEwIEBA
IHZvaWQgRG9jdW1lbnQ6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFN0eWwKICAgICAgICAgcHJpbnRm
KCJCZWdpbm5pbmcgdXBkYXRlIG9mIHN0eWxlIHNlbGVjdG9yIGF0IHRpbWUgJWxsZC5cbiIsIGVs
YXBzZWRUaW1lKCkuY291bnQoKSk7CiAjZW5kaWYKIAotICAgIERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb246OlVwZGF0ZUZsYWcgc3R5bGVTaGVldFVwZGF0ZSA9ICh1cGRhdGVGbGFnID09IFJl
Y2FsY1N0eWxlSWZOZWVkZWQgfHwgdXBkYXRlRmxhZyA9PSBEZWZlclJlY2FsY1N0eWxlSWZOZWVk
ZWQpCi0gICAgICAgID8gRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6T3B0aW1pemVkVXBk
YXRlCi0gICAgICAgIDogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6RnVsbFVwZGF0ZTsK
LSAgICBib29sIHN0eWxlc2hlZXRDaGFuZ2VSZXF1aXJlc1N0eWxlUmVjYWxjID0gbV9zdHlsZVNo
ZWV0Q29sbGVjdGlvbi51cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhzdHlsZVNoZWV0VXBkYXRlKTsK
KyAgICBhdXRvIHN0eWxlU2hlZXRVcGRhdGUgPSAodXBkYXRlRmxhZyA9PSBSZWNhbGNTdHlsZUlm
TmVlZGVkIHx8IHVwZGF0ZUZsYWcgPT0gRGVmZXJSZWNhbGNTdHlsZUlmTmVlZGVkKQorICAgICAg
ICA/IEF1dGhvclN0eWxlU2hlZXRzOjpPcHRpbWl6ZWRVcGRhdGUKKyAgICAgICAgOiBBdXRob3JT
dHlsZVNoZWV0czo6RnVsbFVwZGF0ZTsKKyAgICBib29sIHN0eWxlc2hlZXRDaGFuZ2VSZXF1aXJl
c1N0eWxlUmVjYWxjID0gYXV0aG9yU3R5bGVTaGVldHMoKS51cGRhdGVBY3RpdmVTdHlsZVNoZWV0
cyhzdHlsZVNoZWV0VXBkYXRlKTsKIAogICAgIGlmICh1cGRhdGVGbGFnID09IERlZmVyUmVjYWxj
U3R5bGUpIHsKICAgICAgICAgc2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygpOwpAQCAtNjUwMiw3
ICs2NTAxLDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjbwogCiBi
b29sIERvY3VtZW50OjpoYXZlU3R5bGVzaGVldHNMb2FkZWQoKSBjb25zdAogewotICAgIHJldHVy
biAhbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi5oYXNQZW5kaW5nU2hlZXRzKCkgfHwgbV9pZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHM7CisgICAgcmV0dXJuICFhdXRob3JTdHlsZVNoZWV0cygpLmhhc1Bl
bmRpbmdTaGVldHMoKSB8fCBtX2lnbm9yZVBlbmRpbmdTdHlsZXNoZWV0czsKIH0KIAogTG9jYWxl
JiBEb2N1bWVudDo6Z2V0Q2FjaGVkTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMTAsIDIwMTItMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdodCAo
QykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAt
MzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9k
ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RXZlbnRRdWV1ZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudFRpbWluZy5oIgogI2lu
Y2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCkBAIC03
MCw2ICs2OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQVhPYmplY3RDYWNoZTsK
IGNsYXNzIEF0dHI7CitjbGFzcyBBdXRob3JTdHlsZVNoZWV0czsKIGNsYXNzIENEQVRBU2VjdGlv
bjsKIGNsYXNzIENTU0ZvbnRTZWxlY3RvcjsKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CkBA
IC05Nyw2ICs5Nyw3IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFbnRpdHlSZWZlcmVuY2U7CiBj
bGFzcyBFdmVudDsKIGNsYXNzIEV2ZW50TGlzdGVuZXI7CitjbGFzcyBFeHRlbnNpb25TdHlsZVNo
ZWV0czsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0UXVhZDsKIGNsYXNzIEZvcm1Db250
cm9sbGVyOwpAQCAtNTAzLDcgKzUwNCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBpcyBhIERP
TSBmdW5jdGlvbi4KICAgICBTdHlsZVNoZWV0TGlzdCYgc3R5bGVTaGVldHMoKTsKIAotICAgIERv
Y3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24mIHN0eWxlU2hlZXRDb2xsZWN0aW9uKCkgeyByZXR1
cm4gbV9zdHlsZVNoZWV0Q29sbGVjdGlvbjsgfQorICAgIEF1dGhvclN0eWxlU2hlZXRzJiBhdXRo
b3JTdHlsZVNoZWV0cygpIHsgcmV0dXJuICptX2F1dGhvclN0eWxlU2hlZXRzOyB9CisgICAgY29u
c3QgQXV0aG9yU3R5bGVTaGVldHMmIGF1dGhvclN0eWxlU2hlZXRzKCkgY29uc3QgeyByZXR1cm4g
Km1fYXV0aG9yU3R5bGVTaGVldHM7IH0KKyAgICBFeHRlbnNpb25TdHlsZVNoZWV0cyYgZXh0ZW5z
aW9uU3R5bGVTaGVldHMoKSB7IHJldHVybiAqbV9leHRlbnNpb25TdHlsZVNoZWV0czsgfQorICAg
IGNvbnN0IEV4dGVuc2lvblN0eWxlU2hlZXRzJiBleHRlbnNpb25TdHlsZVNoZWV0cygpIGNvbnN0
IHsgcmV0dXJuICptX2V4dGVuc2lvblN0eWxlU2hlZXRzOyB9CiAKICAgICBib29sIGdvdG9BbmNo
b3JOZWVkZWRBZnRlclN0eWxlc2hlZXRzTG9hZCgpIHsgcmV0dXJuIG1fZ290b0FuY2hvck5lZWRl
ZEFmdGVyU3R5bGVzaGVldHNMb2FkOyB9CiAgICAgdm9pZCBzZXRHb3RvQW5jaG9yTmVlZGVkQWZ0
ZXJTdHlsZXNoZWV0c0xvYWQoYm9vbCBiKSB7IG1fZ290b0FuY2hvck5lZWRlZEFmdGVyU3R5bGVz
aGVldHNMb2FkID0gYjsgfQpAQCAtMTQ1OSw3ICsxNDYzLDggQEAgcHJpdmF0ZToKIAogICAgIE11
dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG1fbXV0YXRpb25PYnNlcnZlclR5cGVzOwogCi0gICAgRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxBdXRob3JTdHlsZVNoZWV0cz4gbV9hdXRob3JTdHlsZVNoZWV0czsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uU3R5bGVTaGVldHM+IG1fZXh0ZW5zaW9uU3R5bGVT
aGVldHM7CiAgICAgUmVmUHRyPFN0eWxlU2hlZXRMaXN0PiBtX3N0eWxlU2hlZXRMaXN0OwogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEZvcm1Db250cm9sbGVyPiBtX2Zvcm1Db250cm9sbGVyOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU0NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0g
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0g
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiAg
ICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMSwg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLTIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uLmgiCi0KLSNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVk
ZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAi
SFRNTExpbmtFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgotI2luY2x1
ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKLSNp
bmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1N0eWxlRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oIgot
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMu
aCIKLSNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgotI2luY2x1ZGUgIlVzZXJDb250ZW50Q29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIlVzZXJDb250ZW50VVJMUGF0dGVybi5oIgotI2luY2x1ZGUg
IlVzZXJTdHlsZVNoZWV0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNw
YWNlIENvbnRlbnRFeHRlbnNpb25zOwotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbihE
b2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQotICAgICwgbV9w
ZW5kaW5nU3R5bGVzaGVldHMoMCkKLSAgICAsIG1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxp
ZChmYWxzZSkKLSAgICAsIG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQoZmFsc2UpCi0gICAg
LCBtX3BlbmRpbmdVcGRhdGVUeXBlKE5vVXBkYXRlKQotICAgICwgbV91c2VzRmlyc3RMaW5lUnVs
ZXMoZmFsc2UpCi0gICAgLCBtX3VzZXNGaXJzdExldHRlclJ1bGVzKGZhbHNlKQotICAgICwgbV91
c2VzUmVtVW5pdHMoZmFsc2UpCi0gICAgLCBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoZmFs
c2UpCi0gICAgLCBtX3N0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXIoKnRoaXMsICZEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uOjpzdHlsZVJlc29sdmVyQ2hhbmdlZFRpbWVyRmlyZWQpCi17Ci19
Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y29tYmluZUNTU0ZlYXR1cmVG
bGFncygpCi17Ci0gICAgLy8gRGVsYXkgcmVzZXR0aW5nIHRoZSBmbGFncyB1bnRpbCBhZnRlciBu
ZXh0IHN0eWxlIHJlY2FsYyBzaW5jZSB1bmFwcGx5aW5nIHRoZSBzdHlsZSBtYXkgbm90IHdvcmsg
d2l0aG91dCB0aGVzZSBzZXQgKHRoaXMgaXMgdHJ1ZSBhdCBsZWFzdCB3aXRoIGJlZm9yZS9hZnRl
cikuCi0gICAgY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQu
ZW5zdXJlU3R5bGVSZXNvbHZlcigpOwotICAgIG1fdXNlc0ZpcnN0TGluZVJ1bGVzID0gbV91c2Vz
Rmlyc3RMaW5lUnVsZXMgfHwgc3R5bGVSZXNvbHZlci51c2VzRmlyc3RMaW5lUnVsZXMoKTsKLSAg
ICBtX3VzZXNGaXJzdExldHRlclJ1bGVzID0gbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyB8fCBzdHls
ZVJlc29sdmVyLnVzZXNGaXJzdExldHRlclJ1bGVzKCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbjo6cmVzZXRDU1NGZWF0dXJlRmxhZ3MoKQotewotICAgIGNvbnN0IFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2
ZXIoKTsKLSAgICBtX3VzZXNGaXJzdExpbmVSdWxlcyA9IHN0eWxlUmVzb2x2ZXIudXNlc0ZpcnN0
TGluZVJ1bGVzKCk7Ci0gICAgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyA9IHN0eWxlUmVzb2x2ZXIu
dXNlc0ZpcnN0TGV0dGVyUnVsZXMoKTsKLX0KLQotQ1NTU3R5bGVTaGVldCogRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbjo6cGFnZVVzZXJTaGVldCgpCi17Ci0gICAgaWYgKG1fcGFnZVVzZXJT
aGVldCkKLSAgICAgICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKLSAgICAKLSAgICBQ
YWdlKiBvd25pbmdQYWdlID0gbV9kb2N1bWVudC5wYWdlKCk7Ci0gICAgaWYgKCFvd25pbmdQYWdl
KQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBTdHJpbmcgdXNlclNoZWV0VGV4dCA9IG93
bmluZ1BhZ2UtPnVzZXJTdHlsZVNoZWV0KCk7Ci0gICAgaWYgKHVzZXJTaGVldFRleHQuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICAvLyBQYXJzZSB0aGUgc2hlZXQgYW5k
IGNhY2hlIGl0LgotICAgIG1fcGFnZVVzZXJTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlu
bGluZShtX2RvY3VtZW50LCBtX2RvY3VtZW50LnNldHRpbmdzKCktPnVzZXJTdHlsZVNoZWV0TG9j
YXRpb24oKSk7Ci0gICAgbV9wYWdlVXNlclNoZWV0LT5jb250ZW50cygpLnNldElzVXNlclN0eWxl
U2hlZXQodHJ1ZSk7Ci0gICAgbV9wYWdlVXNlclNoZWV0LT5jb250ZW50cygpLnBhcnNlU3RyaW5n
KHVzZXJTaGVldFRleHQpOwotICAgIHJldHVybiBtX3BhZ2VVc2VyU2hlZXQuZ2V0KCk7Ci19Ci0K
LXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y2xlYXJQYWdlVXNlclNoZWV0KCkK
LXsKLSAgICBpZiAobV9wYWdlVXNlclNoZWV0KSB7Ci0gICAgICAgIG1fcGFnZVVzZXJTaGVldCA9
IG51bGxwdHI7Ci0gICAgICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJS
ZWNhbGNTdHlsZSk7Ci0gICAgfQotfQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b246OnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKQotewotICAgIGNsZWFyUGFnZVVzZXJTaGVldCgpOwot
ICAgIGlmIChwYWdlVXNlclNoZWV0KCkpCi0gICAgICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZl
ckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci19Ci0KLWNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4+JiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjppbmplY3Rl
ZFVzZXJTdHlsZVNoZWV0cygpIGNvbnN0Ci17Ci0gICAgdXBkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0
Q2FjaGUoKTsKLSAgICByZXR1cm4gbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0czsKLX0KLQotY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIERvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb246OmluamVjdGVkQXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdAotewotICAgIHVwZGF0ZUlu
amVjdGVkU3R5bGVTaGVldENhY2hlKCk7Ci0gICAgcmV0dXJuIG1faW5qZWN0ZWRBdXRob3JTdHls
ZVNoZWV0czsKLX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVJ
bmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW5qZWN0ZWRTdHls
ZVNoZWV0Q2FjaGVWYWxpZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faW5qZWN0ZWRTdHlsZVNo
ZWV0Q2FjaGVWYWxpZCA9IHRydWU7Ci0gICAgbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5jbGVh
cigpOwotICAgIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5jbGVhcigpOwotCi0gICAgUGFn
ZSogb3duaW5nUGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpOwotICAgIGlmICghb3duaW5nUGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgYXV0byogdXNlckNvbnRlbnRDb250cm9sbGVy
ID0gb3duaW5nUGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7Ci0gICAgaWYgKCF1c2VyQ29u
dGVudENvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFVzZXJTdHlsZVNo
ZWV0TWFwKiB1c2VyU3R5bGVTaGVldHMgPSB1c2VyQ29udGVudENvbnRyb2xsZXItPnVzZXJTdHls
ZVNoZWV0cygpOwotICAgIGlmICghdXNlclN0eWxlU2hlZXRzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXRzIDogdXNlclN0eWxlU2hlZXRzLT52YWx1ZXMoKSkg
ewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHNoZWV0IDogKnN0eWxlU2hlZXRzKSB7Ci0gICAg
ICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVkRnJhbWVzKCkgPT0gSW5qZWN0SW5Ub3BGcmFtZU9u
bHkgJiYgbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgaWYgKCFVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0
ZXJucyhtX2RvY3VtZW50LnVybCgpLCBzaGVldC0+d2hpdGVsaXN0KCksIHNoZWV0LT5ibGFja2xp
c3QoKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxD
U1NTdHlsZVNoZWV0PiBncm91cFNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKGNv
bnN0X2Nhc3Q8RG9jdW1lbnQmPihtX2RvY3VtZW50KSwgc2hlZXQtPnVybCgpKTsKLSAgICAgICAg
ICAgIGJvb2wgaXNVc2VyU3R5bGVTaGVldCA9IHNoZWV0LT5sZXZlbCgpID09IFVzZXJTdHlsZVVz
ZXJMZXZlbDsKLSAgICAgICAgICAgIGlmIChpc1VzZXJTdHlsZVNoZWV0KQotICAgICAgICAgICAg
ICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuYXBwZW5kKGdyb3VwU2hlZXQpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5h
cHBlbmQoZ3JvdXBTaGVldCk7Ci0KLSAgICAgICAgICAgIGdyb3VwU2hlZXQtPmNvbnRlbnRzKCku
c2V0SXNVc2VyU3R5bGVTaGVldChpc1VzZXJTdHlsZVNoZWV0KTsKLSAgICAgICAgICAgIGdyb3Vw
U2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJpbmcoc2hlZXQtPnNvdXJjZSgpKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjppbnZhbGlk
YXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKQotewotICAgIGlmICghbV9pbmplY3RlZFN0eWxl
U2hlZXRDYWNoZVZhbGlkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pbmplY3RlZFN0eWxlU2hl
ZXRDYWNoZVZhbGlkID0gZmFsc2U7Ci0gICAgaWYgKG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMu
aXNFbXB0eSgpICYmIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVj
YWxjU3R5bGUpOwotfQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFkZEF1
dGhvclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgYXV0aG9yU2hlZXQpCi17Ci0gICAg
QVNTRVJUKCFhdXRob3JTaGVldC5nZXQoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOwotICAgIG1fYXV0
aG9yU3R5bGVTaGVldHMuYXBwZW5kKENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShXVEY6Om1vdmUoYXV0
aG9yU2hlZXQpLCAmbV9kb2N1bWVudCkpOwotICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNo
YW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNo
ZWV0Q29sbGVjdGlvbjo6YWRkVXNlclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgdXNl
clNoZWV0KQotewotICAgIEFTU0VSVCh1c2VyU2hlZXQuZ2V0KCkuaXNVc2VyU3R5bGVTaGVldCgp
KTsKLSAgICBtX3VzZXJTdHlsZVNoZWV0cy5hcHBlbmQoQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKFdU
Rjo6bW92ZSh1c2VyU2hlZXQpLCAmbV9kb2N1bWVudCkpOwotICAgIG1fZG9jdW1lbnQuc3R5bGVS
ZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci19Ci0KLSNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjph
ZGREaXNwbGF5Tm9uZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBzZWxlY3RvciwgdWludDMyX3Qgc2VsZWN0b3JJRCkKLXsKLSAgICBhdXRvIHJlc3VsdCA9
IG1fY29udGVudEV4dGVuc2lvblNlbGVjdG9yU2hlZXRzLmFkZChpZGVudGlmaWVyLCBudWxscHRy
KTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0OjpjcmVhdGUobV9kb2N1bWVudCk7
Ci0gICAgICAgIG1fdXNlclN0eWxlU2hlZXRzLmFwcGVuZCgmcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+c3R5bGVTaGVldCgpKTsKLSAgICB9Ci0KLSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5h
ZGREaXNwbGF5Tm9uZVNlbGVjdG9yKHNlbGVjdG9yLCBzZWxlY3RvcklEKTsKLSAgICBtX3N0eWxl
UmVzb2x2ZXJDaGFuZ2VkVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246Om1heWJlQWRkQ29udGVudEV4dGVuc2lvblNoZWV0KGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllciwgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKLXsKLSAgICBB
U1NFUlQoc2hlZXQuaXNVc2VyU3R5bGVTaGVldCgpKTsKLQotICAgIGlmIChtX2NvbnRlbnRFeHRl
bnNpb25TaGVldHMuY29udGFpbnMoaWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlZjxDU1NTdHlsZVNoZWV0PiBjc3NTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShzaGVl
dCwgJm1fZG9jdW1lbnQpOwotICAgIG1fY29udGVudEV4dGVuc2lvblNoZWV0cy5zZXQoaWRlbnRp
ZmllciwgJmNzc1NoZWV0LmdldCgpKTsKLSAgICBtX3VzZXJTdHlsZVNoZWV0cy5hcHBlbmQoYWRv
cHRSZWYoY3NzU2hlZXQubGVha1JlZigpKSk7Ci0gICAgbV9zdHlsZVJlc29sdmVyQ2hhbmdlZFRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnN0eWxlUmVzb2x2ZXJD
aGFuZ2VkVGltZXJGaXJlZCgpCi17Ci0gICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdl
ZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKLX0KLQotLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVk
IHdoZW5ldmVyIGEgdG9wLWxldmVsIHN0eWxlc2hlZXQgaGFzIGZpbmlzaGVkIGxvYWRpbmcuCi12
b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnJlbW92ZVBlbmRpbmdTaGVldChSZW1v
dmVQZW5kaW5nU2hlZXROb3RpZmljYXRpb25UeXBlIG5vdGlmaWNhdGlvbikKLXsKLSAgICAvLyBN
YWtlIHN1cmUgd2Uga25ldyB0aGlzIHNoZWV0IHdhcyBwZW5kaW5nLCBhbmQgdGhhdCBvdXIgY291
bnQgaXNuJ3Qgb3V0IG9mIHN5bmMuCi0gICAgQVNTRVJUKG1fcGVuZGluZ1N0eWxlc2hlZXRzID4g
MCk7Ci0KLSAgICBtX3BlbmRpbmdTdHlsZXNoZWV0cy0tOwotICAgIAotI2lmZGVmIElOU1RSVU1F
TlRfTEFZT1VUX1NDSEVEVUxJTkcKLSAgICBpZiAoIW93bmVyRWxlbWVudCgpKQotICAgICAgICBw
cmludGYoIlN0eWxlc2hlZXQgbG9hZGVkIGF0IHRpbWUgJWQuICVkIHN0eWxlc2hlZXRzIHN0aWxs
IHJlbWFpbi5cbiIsIGVsYXBzZWRUaW1lKCksIG1fcGVuZGluZ1N0eWxlc2hlZXRzKTsKLSNlbmRp
ZgotCi0gICAgaWYgKG1fcGVuZGluZ1N0eWxlc2hlZXRzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobm90aWZpY2F0aW9uID09IFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUxhdGVyKSB7Ci0g
ICAgICAgIG1fZG9jdW1lbnQuc2V0TmVlZHNOb3RpZnlSZW1vdmVBbGxQZW5kaW5nU3R5bGVzaGVl
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fZG9jdW1lbnQuZGlkUmVt
b3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKTsKLX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uOjphZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiBub2RlLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKLXsKLSAgICBpZiAoIW5vZGUuaW5Eb2N1bWVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgLy8gVW50aWwgdGhlIDxib2R5PiBleGlzdHMsIHdlIGhhdmUgbm8g
Y2hvaWNlIGJ1dCB0byBjb21wYXJlIGRvY3VtZW50IHBvc2l0aW9ucywKLSAgICAvLyBzaW5jZSBz
dHlsZXMgb3V0c2lkZSBvZiB0aGUgYm9keSBhbmQgaGVhZCBjb250aW51ZSB0byBiZSBzaHVudGVk
IGludG8gdGhlIGhlYWQKLSAgICAvLyAoYW5kIHRodXMgY2FuIHNoaWZ0IHRvIGVuZCB1cCBiZWZv
cmUgZHluYW1pY2FsbHkgYWRkZWQgRE9NIGNvbnRlbnQgdGhhdCBpcyBhbHNvCi0gICAgLy8gb3V0
c2lkZSB0aGUgYm9keSkuCi0gICAgaWYgKChjcmVhdGVkQnlQYXJzZXIgJiYgbV9kb2N1bWVudC5i
b2R5T3JGcmFtZXNldCgpKSB8fCBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuYWRkKCZub2RlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIERldGVybWluZSBhbiBhcHByb3ByaWF0ZSBpbnNl
cnRpb24gcG9pbnQuCi0gICAgU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0OjppdGVyYXRv
ciBiZWdpbiA9IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmJlZ2luKCk7Ci0gICAgU3R5bGVT
aGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0OjppdGVyYXRvciBlbmQgPSBtX3N0eWxlU2hlZXRDYW5k
aWRhdGVOb2Rlcy5lbmQoKTsKLSAgICBTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQ6Oml0
ZXJhdG9yIGl0ID0gZW5kOwotICAgIE5vZGUqIGZvbGxvd2luZ05vZGUgPSAwOwotICAgIGRvIHsK
LSAgICAgICAgLS1pdDsKLSAgICAgICAgTm9kZSogbiA9ICppdDsKLSAgICAgICAgdW5zaWduZWQg
c2hvcnQgcG9zaXRpb24gPSBuLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbigmbm9kZSk7Ci0gICAg
ICAgIGlmIChwb3NpdGlvbiA9PSBOb2RlOjpET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcpIHsK
LSAgICAgICAgICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmluc2VydEJlZm9yZShmb2xs
b3dpbmdOb2RlLCAmbm9kZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgZm9sbG93aW5nTm9kZSA9IG47Ci0gICAgfSB3aGlsZSAoaXQgIT0gYmVnaW4pOwotICAgIAot
ICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmluc2VydEJlZm9yZShmb2xsb3dpbmdOb2Rl
LCAmbm9kZSk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVtb3Zl
U3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSkKLXsKLSAgICBtX3N0eWxlU2hlZXRD
YW5kaWRhdGVOb2Rlcy5yZW1vdmUoJm5vZGUpOwotfQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb246OmNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxl
U2hlZXQ+PiYgc2hlZXRzKQotewotICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkgJiYgIW1f
ZG9jdW1lbnQuc2V0dGluZ3MoKS0+YXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiBub2RlIDogbV9zdHlsZVNoZWV0Q2FuZGlkYXRl
Tm9kZXMpIHsKLSAgICAgICAgU3R5bGVTaGVldCogc2hlZXQgPSBudWxscHRyOwotICAgICAgICBp
ZiAoaXM8UHJvY2Vzc2luZ0luc3RydWN0aW9uPigqbm9kZSkpIHsKLSAgICAgICAgICAgIC8vIFBy
b2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gKFhNTCBkb2N1bWVudHMgb25seSkuCi0gICAgICAgICAgICAv
LyBXZSBkb24ndCBzdXBwb3J0IGxpbmtpbmcgdG8gZW1iZWRkZWQgQ1NTIHN0eWxlc2hlZXRzLCBz
ZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTI4MT4gZm9yIGRp
c2N1c3Npb24uCi0gICAgICAgICAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIHBpID0gZG93bmNh
c3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uPigqbm9kZSk7Ci0gICAgICAgICAgICBzaGVldCA9IHBp
LnNoZWV0KCk7Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgICAgICAgICAvLyBEb24ndCBhcHBseSBY
U0wgdHJhbnNmb3JtcyB0byBhbHJlYWR5IHRyYW5zZm9ybWVkIGRvY3VtZW50cyAtLSA8cmRhcjov
L3Byb2JsZW0vNDEzMjgwNj4KLSAgICAgICAgICAgIGlmIChwaS5pc1hTTCgpICYmICFtX2RvY3Vt
ZW50LnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBEb24n
dCBhcHBseSBYU0wgdHJhbnNmb3JtcyB1bnRpbCBsb2FkaW5nIGlzIGZpbmlzaGVkLgotICAgICAg
ICAgICAgICAgIGlmICghbV9kb2N1bWVudC5wYXJzaW5nKCkpCi0gICAgICAgICAgICAgICAgICAg
IG1fZG9jdW1lbnQuYXBwbHlYU0xUcmFuc2Zvcm0oJnBpKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MTGlu
a0VsZW1lbnQ+KCpub2RlKSB8fCBpczxIVE1MU3R5bGVFbGVtZW50Pigqbm9kZSkgfHwgaXM8U1ZH
U3R5bGVFbGVtZW50Pigqbm9kZSkpIHsKLSAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBk
b3duY2FzdDxFbGVtZW50Pigqbm9kZSk7Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgdGl0bGUg
PSBlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKLSAgICAgICAgICAgIGJvb2wg
ZW5hYmxlZFZpYVNjcmlwdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGlzPEhUTUxMaW5rRWxl
bWVudD4oZWxlbWVudCkpIHsKLSAgICAgICAgICAgICAgICAvLyA8TElOSz4gZWxlbWVudAotICAg
ICAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCYgbGlua0VsZW1lbnQgPSBkb3duY2FzdDxIVE1M
TGlua0VsZW1lbnQ+KGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChsaW5rRWxlbWVudC5p
c0Rpc2FibGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIGVuYWJsZWRWaWFTY3JpcHQgPSBsaW5rRWxlbWVudC5pc0VuYWJsZWRWaWFTY3JpcHQoKTsK
LSAgICAgICAgICAgICAgICBpZiAobGlua0VsZW1lbnQuc3R5bGVTaGVldElzTG9hZGluZygpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGl0IGlzIGxvYWRpbmcgYnV0IHdlIHNob3VsZCBzdGls
bCBkZWNpZGUgd2hpY2ggc3R5bGUgc2hlZXQgc2V0IHRvIHVzZQotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWVuYWJsZWRWaWFTY3JpcHQgJiYgIXRpdGxlLmlzRW1wdHkoKSAmJiBtX3ByZWZlcnJl
ZFN0eWxlc2hlZXRTZXROYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFsaW5rRWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHJlbEF0dHIpLmNvbnRhaW5zKCJhbHRl
cm5hdGUiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVz
aGVldFNldE5hbWUgPSB0aXRsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NlbGVj
dGVkU3R5bGVzaGVldFNldE5hbWUgPSB0aXRsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFsaW5rRWxlbWVudC5zaGVldCgp
KQotICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IG51bGxBdG9tOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHByZWZlcnJlZCBzdHlsZXNldC4gVGhpcyBp
cyB0aGUKLSAgICAgICAgICAgIC8vIHNldCBvZiBzaGVldHMgdGhhdCB3aWxsIGJlIGVuYWJsZWQu
Ci0gICAgICAgICAgICBpZiAoaXM8U1ZHU3R5bGVFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAg
ICAgICAgICBzaGVldCA9IGRvd25jYXN0PFNWR1N0eWxlRWxlbWVudD4oZWxlbWVudCkuc2hlZXQo
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCkpCi0g
ICAgICAgICAgICAgICAgc2hlZXQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQp
LnNoZWV0KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2hlZXQgPSBkb3du
Y2FzdDxIVE1MU3R5bGVFbGVtZW50PihlbGVtZW50KS5zaGVldCgpOwotICAgICAgICAgICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIHRoaXMgc2hlZXQgYmVsb25ncyB0byBhIHN0eWxlc2V0Ci0gICAgICAg
ICAgICAvLyAodGh1cyBtYWtpbmcgaXQgUFJFRkVSUkVEIG9yIEFMVEVSTkFURSByYXRoZXIgdGhh
bgotICAgICAgICAgICAgLy8gUEVSU0lTVEVOVCkuCi0gICAgICAgICAgICBhdXRvJiByZWwgPSBl
bGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUocmVsQXR0cik7Ci0gICAgICAgICAgICBpZiAoIWVuYWJs
ZWRWaWFTY3JpcHQgJiYgIXRpdGxlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIC8vIFll
cywgd2UgaGF2ZSBhIHRpdGxlLgotICAgICAgICAgICAgICAgIGlmIChtX3ByZWZlcnJlZFN0eWxl
c2hlZXRTZXROYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBObyBwcmVm
ZXJyZWQgc2V0IGhhcyBiZWVuIGVzdGFibGlzaGVkLiBJZgotICAgICAgICAgICAgICAgICAgICAv
LyB3ZSBhcmUgTk9UIGFuIGFsdGVybmF0ZSBzaGVldCwgdGhlbiBlc3RhYmxpc2gKLSAgICAgICAg
ICAgICAgICAgICAgLy8gdXMgYXMgdGhlIHByZWZlcnJlZCBzZXQuIE90aGVyd2lzZSwganVzdCBp
Z25vcmUKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBzaGVldC4KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpIHx8ICFyZWwuY29udGFpbnMo
ImFsdGVybmF0ZSIpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNo
ZWV0U2V0TmFtZSA9IG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZSA9IHRpdGxlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGl0bGUgIT0gbV9wcmVmZXJyZWRTdHls
ZXNoZWV0U2V0TmFtZSkKLSAgICAgICAgICAgICAgICAgICAgc2hlZXQgPSBudWxscHRyOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVsLmNvbnRhaW5zKCJhbHRlcm5hdGUiKSAm
JiB0aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc2hlZXQgPSBudWxscHRyOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChzaGVldCkKLSAgICAgICAgICAgIHNoZWV0cy5hcHBlbmQoc2hl
ZXQpOwotICAgIH0KLX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphbmFs
eXplU3R5bGVTaGVldENoYW5nZShVcGRhdGVGbGFnIHVwZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBuZXdTdHlsZXNoZWV0cywgU3R5bGVSZXNvbHZlclVwZGF0
ZVR5cGUmIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlLCBib29sJiByZXF1aXJlc0Z1bGxTdHlsZVJl
Y2FsYykKLXsKLSAgICBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9IFJlY29uc3RydWN0OwotICAg
IHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gdHJ1ZTsKLSAgICAKLSAgICAvLyBTdHlsZXNoZWV0
cyBvZiA8c3R5bGU+IGVsZW1lbnRzIHRoYXQgQGltcG9ydCBzdHlsZXNoZWV0cyBhcmUgYWN0aXZl
IGJ1dCBsb2FkaW5nLiBXZSBuZWVkIHRvIHRyaWdnZXIgYSBmdWxsIHJlY2FsYyB3aGVuIHN1Y2gg
bG9hZHMgYXJlIGRvbmUuCi0gICAgYm9vbCBoYXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IGZh
bHNlOwotICAgIHVuc2lnbmVkIG5ld1N0eWxlc2hlZXRDb3VudCA9IG5ld1N0eWxlc2hlZXRzLnNp
emUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmV3U3R5bGVzaGVldENvdW50OyAr
K2kpIHsKLSAgICAgICAgaWYgKG5ld1N0eWxlc2hlZXRzW2ldLT5pc0xvYWRpbmcoKSkKLSAgICAg
ICAgICAgIGhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYg
KG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgJiYgIWhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNo
ZWV0KSB7Ci0gICAgICAgIG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBmYWxzZTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ID0g
aGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQ7Ci0KLSAgICBpZiAodXBkYXRlRmxhZyAhPSBPcHRp
bWl6ZWRVcGRhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fZG9jdW1lbnQuc3R5bGVS
ZXNvbHZlcklmRXhpc3RzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyID0gKm1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7Ci0KLSAg
ICAvLyBGaW5kIG91dCB3aGljaCBzdHlsZXNoZWV0cyBhcmUgbmV3LgotICAgIHVuc2lnbmVkIG9s
ZFN0eWxlc2hlZXRDb3VudCA9IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpOwotICAg
IGlmIChuZXdTdHlsZXNoZWV0Q291bnQgPCBvbGRTdHlsZXNoZWV0Q291bnQpCi0gICAgICAgIHJl
dHVybjsKLSAgICBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRzKj4gYWRkZWRTaGVldHM7Ci0gICAg
dW5zaWduZWQgbmV3SW5kZXggPSAwOwotICAgIGZvciAodW5zaWduZWQgb2xkSW5kZXggPSAwOyBv
bGRJbmRleCA8IG9sZFN0eWxlc2hlZXRDb3VudDsgKytvbGRJbmRleCkgewotICAgICAgICBpZiAo
bmV3SW5kZXggPj0gbmV3U3R5bGVzaGVldENvdW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB3aGlsZSAobV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0c1tvbGRJbmRleF0gIT0gbmV3U3R5
bGVzaGVldHNbbmV3SW5kZXhdKSB7Ci0gICAgICAgICAgICBhZGRlZFNoZWV0cy5hcHBlbmQoJm5l
d1N0eWxlc2hlZXRzW25ld0luZGV4XS0+Y29udGVudHMoKSk7Ci0gICAgICAgICAgICArK25ld0lu
ZGV4OwotICAgICAgICAgICAgaWYgKG5ld0luZGV4ID09IG5ld1N0eWxlc2hlZXRDb3VudCkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgKytuZXdJbmRleDsKLSAg
ICB9Ci0gICAgYm9vbCBoYXNJbnNlcnRpb25zID0gIWFkZGVkU2hlZXRzLmlzRW1wdHkoKTsKLSAg
ICB3aGlsZSAobmV3SW5kZXggPCBuZXdTdHlsZXNoZWV0Q291bnQpIHsKLSAgICAgICAgYWRkZWRT
aGVldHMuYXBwZW5kKCZuZXdTdHlsZXNoZWV0c1tuZXdJbmRleF0tPmNvbnRlbnRzKCkpOwotICAg
ICAgICArK25ld0luZGV4OwotICAgIH0KLSAgICAvLyBJZiBhbGwgbmV3IHNoZWV0cyB3ZXJlIGFk
ZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3Qgd2UgY2FuIGp1c3QgYWRkIHRoZW0gdG8gZXhpc3Rp
bmcgU3R5bGVSZXNvbHZlci4KLSAgICAvLyBJZiB0aGVyZSB3ZXJlIGluc2VydGlvbnMgd2UgbmVl
ZCB0byByZS1hZGQgYWxsIHRoZSBzdHlsZXNoZWV0cyBzbyBydWxlcyBhcmUgb3JkZXJlZCBjb3Jy
ZWN0bHkuCi0gICAgc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPSBoYXNJbnNlcnRpb25zID8gUmVz
ZXQgOiBBZGRpdGl2ZTsKLQotICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IHBhcnNpbmcgdGhlIGJv
ZHkgYW5kIHNvIG1heSBoYXZlIHNpZ25pZmljYW50IGFtb3VudCBvZiBlbGVtZW50cywgcHV0IHNv
bWUgZWZmb3J0IGludG8gdHJ5aW5nIHRvIGF2b2lkIHN0eWxlIHJlY2FsY3MuCi0gICAgaWYgKCFt
X2RvY3VtZW50LmJvZHlPckZyYW1lc2V0KCkgfHwgbV9kb2N1bWVudC5oYXNOb2Rlc1dpdGhQbGFj
ZWhvbGRlclN0eWxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHlsZUludmFsaWRhdGlvbkFu
YWx5c2lzIGludmFsaWRhdGlvbkFuYWx5c2lzKGFkZGVkU2hlZXRzLCBzdHlsZVJlc29sdmVyLm1l
ZGlhUXVlcnlFdmFsdWF0b3IoKSk7Ci0gICAgaWYgKGludmFsaWRhdGlvbkFuYWx5c2lzLmRpcnRp
ZXNBbGxTdHlsZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaW52YWxpZGF0aW9uQW5hbHlzaXMu
aW52YWxpZGF0ZVN0eWxlKG1fZG9jdW1lbnQpOwotICAgIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxj
ID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbHRlckVuYWJsZWROb25lbXB0eUNTU1N0eWxl
U2hlZXRzKFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiByZXN1bHQsIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8U3R5bGVTaGVldD4+JiBzaGVldHMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNoZWV0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWlzPENTU1N0eWxlU2hl
ZXQ+KCpzaGVldHNbaV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIENTU1N0eWxl
U2hlZXQmIHNoZWV0ID0gZG93bmNhc3Q8Q1NTU3R5bGVTaGVldD4oKnNoZWV0c1tpXSk7Ci0gICAg
ICAgIGlmIChzaGVldC5kaXNhYmxlZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmICghc2hlZXQubGVuZ3RoKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVz
dWx0LmFwcGVuZCgmc2hlZXQpOwotICAgIH0KLX0KLQotYm9vbCBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRhdGVGbGFnIHVwZGF0ZUZsYWcp
Ci17Ci0gICAgaWYgKG1fZG9jdW1lbnQuaW5TdHlsZVJlY2FsYygpKSB7Ci0gICAgICAgIC8vIFNW
RyA8dXNlPiBlbGVtZW50IG1heSBtYW5hZ2UgdG8gaW52YWxpZGF0ZSBzdHlsZSBzZWxlY3RvciBp
biB0aGUgbWlkZGxlIG9mIGEgc3R5bGUgcmVjYWxjLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQzNDQKLSAgICAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIGZpeGVkIGluIFNWRyBhbmQgdGhlIGNhbGwgc2l0ZSByZXBsYWNlZCBieSBBU1NF
UlQoIW1faW5TdHlsZVJlY2FsYykuCi0gICAgICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSBGdWxs
VXBkYXRlOwotICAgICAgICBtX2RvY3VtZW50LnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgfQotICAgIGlmICghbV9kb2N1bWVudC5oYXNM
aXZpbmdSZW5kZXJUcmVlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxS
ZWZQdHI8U3R5bGVTaGVldD4+IGFjdGl2ZVN0eWxlU2hlZXRzOwotICAgIGNvbGxlY3RBY3RpdmVT
dHlsZVNoZWV0cyhhY3RpdmVTdHlsZVNoZWV0cyk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiBhY3RpdmVDU1NTdHlsZVNoZWV0czsKLSAgICBhY3RpdmVDU1NTdHlsZVNoZWV0
cy5hcHBlbmRWZWN0b3IoaW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cygpKTsKLSAgICBhY3RpdmVD
U1NTdHlsZVNoZWV0cy5hcHBlbmRWZWN0b3IoZG9jdW1lbnRBdXRob3JTdHlsZVNoZWV0cygpKTsK
LSAgICBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsZVNoZWV0cyhhY3RpdmVDU1NTdHlsZVNo
ZWV0cywgYWN0aXZlU3R5bGVTaGVldHMpOwotCi0gICAgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUg
c3R5bGVSZXNvbHZlclVwZGF0ZVR5cGU7Ci0gICAgYm9vbCByZXF1aXJlc0Z1bGxTdHlsZVJlY2Fs
YzsKLSAgICBhbmFseXplU3R5bGVTaGVldENoYW5nZSh1cGRhdGVGbGFnLCBhY3RpdmVDU1NTdHls
ZVNoZWV0cywgc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUsIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxj
KTsKLQotICAgIGlmIChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9PSBSZWNvbnN0cnVjdCkKLSAg
ICAgICAgbV9kb2N1bWVudC5jbGVhclN0eWxlUmVzb2x2ZXIoKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQuZW5zdXJlU3R5bGVS
ZXNvbHZlcigpOwotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPT0gUmVzZXQp
IHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIucnVsZVNldHMoKS5yZXNldEF1dGhvclN0eWxl
KCk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKDAs
IGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFT
U0VSVChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9PSBBZGRpdGl2ZSk7Ci0gICAgICAgICAgICBz
dHlsZVJlc29sdmVyLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKG1fYWN0aXZlQXV0aG9yU3R5bGVT
aGVldHMuc2l6ZSgpLCBhY3RpdmVDU1NTdHlsZVNoZWV0cyk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmVzZXRDU1NGZWF0dXJlRmxhZ3MoKTsKLSAgICB9Ci0KLSAgICBtX3dlYWtDb3B5T2ZBY3RpdmVT
dHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAgPSBudWxscHRyOwotICAgIG1fYWN0aXZlQXV0aG9y
U3R5bGVTaGVldHMuc3dhcChhY3RpdmVDU1NTdHlsZVNoZWV0cyk7Ci0gICAgbV9zdHlsZVNoZWV0
c0ZvclN0eWxlU2hlZXRMaXN0LnN3YXAoYWN0aXZlU3R5bGVTaGVldHMpOwotCi0gICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphY3RpdmVTdHlsZVNoZWV0c1VwZGF0ZWQobV9kb2N1bWVudCk7
Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNoZWV0IDogbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0
cykgewotICAgICAgICBpZiAoc2hlZXQtPmNvbnRlbnRzKCkudXNlc1JlbVVuaXRzKCkpCi0gICAg
ICAgICAgICBtX3VzZXNSZW1Vbml0cyA9IHRydWU7Ci0gICAgICAgIGlmIChzaGVldC0+Y29udGVu
dHMoKS51c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KCkpCi0gICAgICAgICAgICBtX3VzZXNTdHls
ZUJhc2VkRWRpdGFiaWxpdHkgPSB0cnVlOwotICAgIH0KLSAgICBtX3BlbmRpbmdVcGRhdGVUeXBl
ID0gTm9VcGRhdGU7Ci0KLSAgICByZXR1cm4gcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGM7Ci19Ci0K
LWNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb246OmFjdGl2ZVN0eWxlU2hlZXRzRm9ySW5zcGVjdG9yKCkgY29uc3QKLXsKLSAgICBW
ZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiByZXN1bHQ7Ci0KLSAgICByZXN1bHQuYXBwZW5k
VmVjdG9yKGluamVjdGVkQXV0aG9yU3R5bGVTaGVldHMoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZFZl
Y3Rvcihkb2N1bWVudEF1dGhvclN0eWxlU2hlZXRzKCkpOwotCi0gICAgZm9yIChhdXRvJiBzdHls
ZVNoZWV0IDogbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KSB7Ci0gICAgICAgIGlmICgh
aXM8Q1NTU3R5bGVTaGVldD4oKnN0eWxlU2hlZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgQ1NTU3R5bGVTaGVldCYgc2hlZXQgPSBkb3duY2FzdDxDU1NTdHlsZVNoZWV0Pigq
c3R5bGVTaGVldCk7Ci0gICAgICAgIGlmIChzaGVldC5kaXNhYmxlZCgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZCgmc2hlZXQpOwotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6
YWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExv
b2t1cCkgewotICAgICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RM
b29rdXAgPSBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hTZXQ8Y29uc3QgQ1NTU3R5bGVTaGVldCo+Pigp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hY3RpdmVBdXRob3JTdHlsZVNo
ZWV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hl
ZXRMaXN0Rm9yRmFzdExvb2t1cC0+YWRkKG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHNbaV0uZ2V0
KCkpOwotICAgIH0KLSAgICByZXR1cm4gbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RG
b3JGYXN0TG9va3VwLT5jb250YWlucyhzaGVldCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNo
ZWV0Q29sbGVjdGlvbjo6ZGV0YWNoRnJvbURvY3VtZW50KCkKLXsKLSAgICBpZiAobV9wYWdlVXNl
clNoZWV0KQotICAgICAgICBtX3BhZ2VVc2VyU2hlZXQtPmRldGFjaEZyb21Eb2N1bWVudCgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLnNp
emUoKTsgKytpKQotICAgICAgICBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzW2ldLT5kZXRhY2hG
cm9tRG9jdW1lbnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbmplY3RlZEF1
dGhvclN0eWxlU2hlZXRzLnNpemUoKTsgKytpKQotICAgICAgICBtX2luamVjdGVkQXV0aG9yU3R5
bGVTaGVldHNbaV0tPmRldGFjaEZyb21Eb2N1bWVudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3VzZXJTdHlsZVNoZWV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV91c2VyU3R5
bGVTaGVldHNbaV0tPmRldGFjaEZyb21Eb2N1bWVudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2F1dGhvclN0eWxlU2hlZXRzLnNpemUoKTsgKytpKQotICAgICAgICBtX2F1dGhv
clN0eWxlU2hlZXRzW2ldLT5kZXRhY2hGcm9tRG9jdW1lbnQoKTsKLX0KLQotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oCShy
ZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLykKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uX2gKLSNkZWZpbmUgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbl9oCi0KLSNp
bmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCi0jaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaCIKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBE
b2N1bWVudDsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBTdHlsZVNoZWV0OwotY2xhc3MgU3R5bGVTaGVl
dENvbnRlbnRzOwotY2xhc3MgU3R5bGVTaGVldExpc3Q7Ci0KLWNsYXNzIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb24gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIGV4cGxpY2l0IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24oRG9jdW1lbnQmKTsKLQot
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0c0ZvclN0eWxl
U2hlZXRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0
OyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgYWN0aXZlQXV0
aG9yU3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRz
OyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBhY3RpdmVTdHls
ZVNoZWV0c0Zvckluc3BlY3RvcigpIGNvbnN0OwotCi0gICAgQ1NTU3R5bGVTaGVldCogcGFnZVVz
ZXJTaGVldCgpOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBkb2N1
bWVudFVzZXJTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRzOyB9
Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGRvY3VtZW50QXV0aG9y
U3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX2F1dGhvclN0eWxlU2hlZXRzOyB9Ci0gICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGluamVjdGVkVXNlclN0eWxlU2hl
ZXRzKCkgY29uc3Q7Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGlu
amVjdGVkQXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdDsKLQotICAgIHZvaWQgYWRkU3R5bGVTaGVl
dENhbmRpZGF0ZU5vZGUoTm9kZSYsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKLSAgICB2b2lkIHJl
bW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmKTsKLQotICAgIHZvaWQgY2xlYXJQYWdl
VXNlclNoZWV0KCk7Ci0gICAgdm9pZCB1cGRhdGVQYWdlVXNlclNoZWV0KCk7Ci0gICAgdm9pZCBp
bnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKLSAgICB2b2lkIHVwZGF0ZUluamVj
dGVkU3R5bGVTaGVldENhY2hlKCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFk
ZEF1dGhvclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgYXV0aG9yU2hlZXQpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+
JiYgdXNlclNoZWV0KTsKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdm9p
ZCBhZGREaXNwbGF5Tm9uZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgdWludDMyX3Qgc2VsZWN0b3JJRCk7Ci0gICAgdm9pZCBtYXliZUFk
ZENvbnRlbnRFeHRlbnNpb25TaGVldChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFN0eWxlU2hl
ZXRDb250ZW50cyYpOwotI2VuZGlmCi0KLSAgICBlbnVtIFVwZGF0ZUZsYWcgeyBOb1VwZGF0ZSA9
IDAsIE9wdGltaXplZFVwZGF0ZSwgRnVsbFVwZGF0ZSB9OwotCi0gICAgVXBkYXRlRmxhZyBwZW5k
aW5nVXBkYXRlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ1VwZGF0ZVR5cGU7IH0KLSAg
ICB2b2lkIHNldFBlbmRpbmdVcGRhdGVUeXBlKFVwZGF0ZUZsYWcgdXBkYXRlVHlwZSkKLSAgICB7
Ci0gICAgICAgIGlmICh1cGRhdGVUeXBlID4gbV9wZW5kaW5nVXBkYXRlVHlwZSkKLSAgICAgICAg
ICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSB1cGRhdGVUeXBlOwotICAgIH0KLQotICAgIHZvaWQg
Zmx1c2hQZW5kaW5nVXBkYXRlcygpCi0gICAgewotICAgICAgICBpZiAobV9wZW5kaW5nVXBkYXRl
VHlwZSAhPSBOb1VwZGF0ZSkKLSAgICAgICAgICAgIHVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKG1f
cGVuZGluZ1VwZGF0ZVR5cGUpOwotICAgIH0KLQotICAgIGJvb2wgdXBkYXRlQWN0aXZlU3R5bGVT
aGVldHMoVXBkYXRlRmxhZyk7Ci0KLSAgICBTdHJpbmcgcHJlZmVycmVkU3R5bGVzaGVldFNldE5h
bWUoKSBjb25zdCB7IHJldHVybiBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lOyB9Ci0gICAg
U3RyaW5nIHNlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVj
dGVkU3R5bGVzaGVldFNldE5hbWU7IH0KLSAgICB2b2lkIHNldFByZWZlcnJlZFN0eWxlc2hlZXRT
ZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1l
ID0gbmFtZTsgfQotICAgIHZvaWQgc2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZShjb25zdCBT
dHJpbmcmIG5hbWUpIHsgbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lID0gbmFtZTsgfQotCi0g
ICAgdm9pZCBhZGRQZW5kaW5nU2hlZXQoKSB7IG1fcGVuZGluZ1N0eWxlc2hlZXRzKys7IH0KLSAg
ICBlbnVtIFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUgewotICAgICAgICBSZW1v
dmVQZW5kaW5nU2hlZXROb3RpZnlJbW1lZGlhdGVseSwKLSAgICAgICAgUmVtb3ZlUGVuZGluZ1No
ZWV0Tm90aWZ5TGF0ZXIKLSAgICB9OwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92
ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUgPSBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlJ
bW1lZGlhdGVseSk7Ci0KLSAgICBib29sIGhhc1BlbmRpbmdTaGVldHMoKSBjb25zdCB7IHJldHVy
biBtX3BlbmRpbmdTdHlsZXNoZWV0cyA+IDA7IH0KLQotICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1
bGVzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRmlyc3RMaW5lUnVsZXM7IH0KLSAgICBib29sIHVz
ZXNGaXJzdExldHRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRmlyc3RMZXR0ZXJSdWxl
czsgfQotICAgIGJvb2wgdXNlc1JlbVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzUmVtVW5p
dHM7IH0KLSAgICB2b2lkIHNldFVzZXNSZW1Vbml0KGJvb2wgYikgeyBtX3VzZXNSZW1Vbml0cyA9
IGI7IH0KLSAgICBib29sIHVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKSB7IHJldHVybiBtX3Vz
ZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHk7IH0KLSAgICB2b2lkIHNldFVzZXNTdHlsZUJhc2VkRWRp
dGFiaWxpdHkoYm9vbCBiKSB7IG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSA9IGI7IH0KLQot
ICAgIHZvaWQgY29tYmluZUNTU0ZlYXR1cmVGbGFncygpOwotICAgIHZvaWQgcmVzZXRDU1NGZWF0
dXJlRmxhZ3MoKTsKLQotICAgIGJvb2wgYWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBD
U1NTdHlsZVNoZWV0KikgY29uc3Q7Ci0KLSAgICB2b2lkIGRldGFjaEZyb21Eb2N1bWVudCgpOwot
Ci1wcml2YXRlOgotICAgIHZvaWQgY29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQ
dHI8U3R5bGVTaGVldD4+Jik7Ci0gICAgZW51bSBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSB7Ci0g
ICAgICAgIFJlY29uc3RydWN0LAotICAgICAgICBSZXNldCwKLSAgICAgICAgQWRkaXRpdmUKLSAg
ICB9OwotICAgIHZvaWQgYW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UoVXBkYXRlRmxhZywgY29uc3Qg
VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIG5ld1N0eWxlc2hlZXRzLCBTdHlsZVJlc29s
dmVyVXBkYXRlVHlwZSYsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKTsKLQotICAgIHZv
aWQgc3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lckZpcmVkKCk7Ci0KLSAgICBEb2N1bWVudCYgbV9k
b2N1bWVudDsKLQotICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+IG1fc3R5bGVTaGVldHNG
b3JTdHlsZVNoZWV0TGlzdDsKLSAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2Fj
dGl2ZUF1dGhvclN0eWxlU2hlZXRzOwotCi0gICAgLy8gVGhpcyBpcyBhIG1pcnJvciBvZiBtX2Fj
dGl2ZUF1dGhvclN0eWxlU2hlZXRzIHRoYXQgZ2V0cyBwb3B1bGF0ZWQgb24gZGVtYW5kIGZvciBh
Y3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5zKCkuCi0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
SGFzaFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+IG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hl
ZXRMaXN0Rm9yRmFzdExvb2t1cDsKLQotICAgIC8vIFRyYWNrIHRoZSBudW1iZXIgb2YgY3VycmVu
dGx5IGxvYWRpbmcgdG9wLWxldmVsIHN0eWxlc2hlZXRzIG5lZWRlZCBmb3IgcmVuZGVyaW5nLgot
ICAgIC8vIFNoZWV0cyBsb2FkZWQgdXNpbmcgdGhlIEBpbXBvcnQgZGlyZWN0aXZlIGFyZSBub3Qg
aW5jbHVkZWQgaW4gdGhpcyBjb3VudC4KLSAgICAvLyBXZSB1c2UgdGhpcyBjb3VudCBvZiBwZW5k
aW5nIHNoZWV0cyB0byBkZXRlY3Qgd2hlbiB3ZSBjYW4gYmVnaW4gYXR0YWNoaW5nCi0gICAgLy8g
ZWxlbWVudHMgYW5kIHdoZW4gaXQgaXMgc2FmZSB0byBleGVjdXRlIHNjcmlwdHMuCi0gICAgaW50
IG1fcGVuZGluZ1N0eWxlc2hlZXRzOwotCi0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fcGFn
ZVVzZXJTaGVldDsKLQotICAgIG11dGFibGUgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4g
bV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0czsKLSAgICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8Q1NT
U3R5bGVTaGVldD4+IG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0czsKLSAgICBtdXRhYmxlIGJv
b2wgbV9pbmplY3RlZFN0eWxlU2hlZXRDYWNoZVZhbGlkOwotCi0gICAgVmVjdG9yPFJlZlB0cjxD
U1NTdHlsZVNoZWV0Pj4gbV91c2VyU3R5bGVTaGVldHM7Ci0gICAgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4gbV9hdXRob3JTdHlsZVNoZWV0czsKLQotI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCi0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9j
b250ZW50RXh0ZW5zaW9uU2hlZXRzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8Q29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0Pj4gbV9jb250ZW50RXh0ZW5z
aW9uU2VsZWN0b3JTaGVldHM7Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9oYWRBY3RpdmVMb2FkaW5n
U3R5bGVzaGVldDsKLSAgICBVcGRhdGVGbGFnIG1fcGVuZGluZ1VwZGF0ZVR5cGU7Ci0KLSAgICB0
eXBlZGVmIExpc3RIYXNoU2V0PE5vZGUqPiBTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQ7
Ci0gICAgU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0IG1fc3R5bGVTaGVldENhbmRpZGF0
ZU5vZGVzOwotCi0gICAgU3RyaW5nIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWU7Ci0gICAg
U3RyaW5nIG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZTsKLQotICAgIGJvb2wgbV91c2VzRmly
c3RMaW5lUnVsZXM7Ci0gICAgYm9vbCBtX3VzZXNGaXJzdExldHRlclJ1bGVzOwotICAgIGJvb2wg
bV91c2VzUmVtVW5pdHM7Ci0gICAgYm9vbCBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHk7Ci0K
LSAgICBUaW1lciBtX3N0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXI7Ci19OwotCi19Ci0KLSNlbmRp
ZgotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAJ
KHJldmlzaW9uIDE5MDA3NCkJKGZyb20gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb24uY3BwOjE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNp
b25TdHlsZVNoZWV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAg
ICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqICAgICAgICAg
ICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAtMjAxMS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb24uaCIKKworI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGlu
a0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBh
Z2VHcm91cC5oIgorI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgorI2luY2x1ZGUg
IlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCisjaW5jbHVk
ZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgorI2lu
Y2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCisjaW5jbHVkZSAiVXNlckNvbnRlbnRDb250cm9sbGVy
LmgiCisjaW5jbHVkZSAiVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmgiCisjaW5jbHVkZSAiVXNlclN0
eWxlU2hlZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgQ29u
dGVudEV4dGVuc2lvbnM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKERvY3VtZW50
JiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX3BlbmRpbmdT
dHlsZXNoZWV0cygwKQorICAgICwgbV9pbmplY3RlZFN0eWxlU2hlZXRDYWNoZVZhbGlkKGZhbHNl
KQorICAgICwgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldChmYWxzZSkKKyAgICAsIG1fcGVu
ZGluZ1VwZGF0ZVR5cGUoTm9VcGRhdGUpCisgICAgLCBtX3VzZXNGaXJzdExpbmVSdWxlcyhmYWxz
ZSkKKyAgICAsIG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXMoZmFsc2UpCisgICAgLCBtX3VzZXNSZW1V
bml0cyhmYWxzZSkKKyAgICAsIG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eShmYWxzZSkKKyAg
ICAsIG1fc3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lcigqdGhpcywgJkRvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb246OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXJGaXJlZCkKK3sKK30KKwordm9p
ZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb21iaW5lQ1NTRmVhdHVyZUZsYWdzKCkK
K3sKKyAgICAvLyBEZWxheSByZXNldHRpbmcgdGhlIGZsYWdzIHVudGlsIGFmdGVyIG5leHQgc3R5
bGUgcmVjYWxjIHNpbmNlIHVuYXBwbHlpbmcgdGhlIHN0eWxlIG1heSBub3Qgd29yayB3aXRob3V0
IHRoZXNlIHNldCAodGhpcyBpcyB0cnVlIGF0IGxlYXN0IHdpdGggYmVmb3JlL2FmdGVyKS4KKyAg
ICBjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gbV9kb2N1bWVudC5lbnN1cmVT
dHlsZVJlc29sdmVyKCk7CisgICAgbV91c2VzRmlyc3RMaW5lUnVsZXMgPSBtX3VzZXNGaXJzdExp
bmVSdWxlcyB8fCBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExpbmVSdWxlcygpOworICAgIG1fdXNl
c0ZpcnN0TGV0dGVyUnVsZXMgPSBtX3VzZXNGaXJzdExldHRlclJ1bGVzIHx8IHN0eWxlUmVzb2x2
ZXIudXNlc0ZpcnN0TGV0dGVyUnVsZXMoKTsKK30KKwordm9pZCBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uOjpyZXNldENTU0ZlYXR1cmVGbGFncygpCit7CisgICAgY29uc3QgU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwor
ICAgIG1fdXNlc0ZpcnN0TGluZVJ1bGVzID0gc3R5bGVSZXNvbHZlci51c2VzRmlyc3RMaW5lUnVs
ZXMoKTsKKyAgICBtX3VzZXNGaXJzdExldHRlclJ1bGVzID0gc3R5bGVSZXNvbHZlci51c2VzRmly
c3RMZXR0ZXJSdWxlcygpOworfQorCitDU1NTdHlsZVNoZWV0KiBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uOjpwYWdlVXNlclNoZWV0KCkKK3sKKyAgICBpZiAobV9wYWdlVXNlclNoZWV0KQor
ICAgICAgICByZXR1cm4gbV9wYWdlVXNlclNoZWV0LmdldCgpOworICAgIAorICAgIFBhZ2UqIG93
bmluZ1BhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKKyAgICBpZiAoIW93bmluZ1BhZ2UpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIFN0cmluZyB1c2VyU2hlZXRUZXh0ID0gb3duaW5nUGFn
ZS0+dXNlclN0eWxlU2hlZXQoKTsKKyAgICBpZiAodXNlclNoZWV0VGV4dC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIC8vIFBhcnNlIHRoZSBzaGVldCBhbmQgY2FjaGUg
aXQuCisgICAgbV9wYWdlVXNlclNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKG1f
ZG9jdW1lbnQsIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigp
KTsKKyAgICBtX3BhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCkuc2V0SXNVc2VyU3R5bGVTaGVldCh0
cnVlKTsKKyAgICBtX3BhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCkucGFyc2VTdHJpbmcodXNlclNo
ZWV0VGV4dCk7CisgICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKK30KKwordm9pZCBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjbGVhclBhZ2VVc2VyU2hlZXQoKQoreworICAg
IGlmIChtX3BhZ2VVc2VyU2hlZXQpIHsKKyAgICAgICAgbV9wYWdlVXNlclNoZWV0ID0gbnVsbHB0
cjsKKyAgICAgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0
eWxlKTsKKyAgICB9Cit9CisKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBk
YXRlUGFnZVVzZXJTaGVldCgpCit7CisgICAgY2xlYXJQYWdlVXNlclNoZWV0KCk7CisgICAgaWYg
KHBhZ2VVc2VyU2hlZXQoKSkKKyAgICAgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdl
ZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKK30KKworY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4mIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmluamVjdGVkVXNlclN0
eWxlU2hlZXRzKCkgY29uc3QKK3sKKyAgICB1cGRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgp
OworICAgIHJldHVybiBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzOworfQorCitjb25zdCBWZWN0
b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6
aW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0Cit7CisgICAgdXBkYXRlSW5qZWN0ZWRT
dHlsZVNoZWV0Q2FjaGUoKTsKKyAgICByZXR1cm4gbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRz
OworfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVwZGF0ZUluamVjdGVk
U3R5bGVTaGVldENhY2hlKCkgY29uc3QKK3sKKyAgICBpZiAobV9pbmplY3RlZFN0eWxlU2hlZXRD
YWNoZVZhbGlkKQorICAgICAgICByZXR1cm47CisgICAgbV9pbmplY3RlZFN0eWxlU2hlZXRDYWNo
ZVZhbGlkID0gdHJ1ZTsKKyAgICBtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmNsZWFyKCk7Cisg
ICAgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLmNsZWFyKCk7CisKKyAgICBQYWdlKiBvd25p
bmdQYWdlID0gbV9kb2N1bWVudC5wYWdlKCk7CisgICAgaWYgKCFvd25pbmdQYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjb25zdCBhdXRvKiB1c2VyQ29udGVudENvbnRyb2xsZXIgPSBvd25p
bmdQYWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKKyAgICBpZiAoIXVzZXJDb250ZW50Q29u
dHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVXNlclN0eWxlU2hlZXRNYXAq
IHVzZXJTdHlsZVNoZWV0cyA9IHVzZXJDb250ZW50Q29udHJvbGxlci0+dXNlclN0eWxlU2hlZXRz
KCk7CisgICAgaWYgKCF1c2VyU3R5bGVTaGVldHMpCisgICAgICAgIHJldHVybjsKKworICAgIGZv
ciAoYXV0byYgc3R5bGVTaGVldHMgOiB1c2VyU3R5bGVTaGVldHMtPnZhbHVlcygpKSB7CisgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgc2hlZXQgOiAqc3R5bGVTaGVldHMpIHsKKyAgICAgICAgICAg
IGlmIChzaGVldC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25seSAmJiBt
X2RvY3VtZW50Lm93bmVyRWxlbWVudCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBpZiAoIVVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc1BhdHRlcm5zKG1f
ZG9jdW1lbnQudXJsKCksIHNoZWV0LT53aGl0ZWxpc3QoKSwgc2hlZXQtPmJsYWNrbGlzdCgpKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxl
U2hlZXQ+IGdyb3VwU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUoY29uc3RfY2Fz
dDxEb2N1bWVudCY+KG1fZG9jdW1lbnQpLCBzaGVldC0+dXJsKCkpOworICAgICAgICAgICAgYm9v
bCBpc1VzZXJTdHlsZVNoZWV0ID0gc2hlZXQtPmxldmVsKCkgPT0gVXNlclN0eWxlVXNlckxldmVs
OworICAgICAgICAgICAgaWYgKGlzVXNlclN0eWxlU2hlZXQpCisgICAgICAgICAgICAgICAgbV9p
bmplY3RlZFVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoZ3JvdXBTaGVldCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLmFwcGVuZChn
cm91cFNoZWV0KTsKKworICAgICAgICAgICAgZ3JvdXBTaGVldC0+Y29udGVudHMoKS5zZXRJc1Vz
ZXJTdHlsZVNoZWV0KGlzVXNlclN0eWxlU2hlZXQpOworICAgICAgICAgICAgZ3JvdXBTaGVldC0+
Y29udGVudHMoKS5wYXJzZVN0cmluZyhzaGVldC0+c291cmNlKCkpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmludmFsaWRhdGVJbmpl
Y3RlZFN0eWxlU2hlZXRDYWNoZSgpCit7CisgICAgaWYgKCFtX2luamVjdGVkU3R5bGVTaGVldENh
Y2hlVmFsaWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2luamVjdGVkU3R5bGVTaGVldENhY2hl
VmFsaWQgPSBmYWxzZTsKKyAgICBpZiAobV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0cy5pc0VtcHR5
KCkgJiYgbV9pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHls
ZSk7Cit9CisKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkQXV0aG9yU2hl
ZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiBhdXRob3JTaGVldCkKK3sKKyAgICBBU1NFUlQo
IWF1dGhvclNoZWV0LmdldCgpLmlzVXNlclN0eWxlU2hlZXQoKSk7CisgICAgbV9hdXRob3JTdHls
ZVNoZWV0cy5hcHBlbmQoQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKFdURjo6bW92ZShhdXRob3JTaGVl
dCksICZtX2RvY3VtZW50KSk7CisgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChS
ZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKK30KKwordm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uOjphZGRVc2VyU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiB1c2VyU2hlZXQp
Cit7CisgICAgQVNTRVJUKHVzZXJTaGVldC5nZXQoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOworICAg
IG1fdXNlclN0eWxlU2hlZXRzLmFwcGVuZChDU1NTdHlsZVNoZWV0OjpjcmVhdGUoV1RGOjptb3Zl
KHVzZXJTaGVldCksICZtX2RvY3VtZW50KSk7CisgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVy
Q2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKK30KKworI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFkZERpc3Bs
YXlOb25lU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCB1aW50MzJfdCBzZWxlY3RvcklEKQoreworICAgIGF1dG8gcmVzdWx0ID0gbV9jb250
ZW50RXh0ZW5zaW9uU2VsZWN0b3JTaGVldHMuYWRkKGlkZW50aWZpZXIsIG51bGxwdHIpOworICAg
IGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKKyAgICAg
ICAgbV91c2VyU3R5bGVTaGVldHMuYXBwZW5kKCZyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zdHls
ZVNoZWV0KCkpOworICAgIH0KKworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFkZERpc3Bs
YXlOb25lU2VsZWN0b3Ioc2VsZWN0b3IsIHNlbGVjdG9ySUQpOworICAgIG1fc3R5bGVSZXNvbHZl
ckNoYW5nZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRTdHlsZVNo
ZWV0Q29sbGVjdGlvbjo6bWF5YmVBZGRDb250ZW50RXh0ZW5zaW9uU2hlZXQoY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyLCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0KQoreworICAgIEFTU0VSVChz
aGVldC5pc1VzZXJTdHlsZVNoZWV0KCkpOworCisgICAgaWYgKG1fY29udGVudEV4dGVuc2lvblNo
ZWV0cy5jb250YWlucyhpZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmPENT
U1N0eWxlU2hlZXQ+IGNzc1NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHNoZWV0LCAmbV9k
b2N1bWVudCk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9uU2hlZXRzLnNldChpZGVudGlmaWVyLCAm
Y3NzU2hlZXQuZ2V0KCkpOworICAgIG1fdXNlclN0eWxlU2hlZXRzLmFwcGVuZChhZG9wdFJlZihj
c3NTaGVldC5sZWFrUmVmKCkpKTsKKyAgICBtX3N0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXIuc3Rh
cnRPbmVTaG90KDApOworfQorI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisK
K3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6c3R5bGVSZXNvbHZlckNoYW5nZWRU
aW1lckZpcmVkKCkKK3sKKyAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2Fs
Y1N0eWxlSW1tZWRpYXRlbHkpOworfQorCisvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2
ZXIgYSB0b3AtbGV2ZWwgc3R5bGVzaGVldCBoYXMgZmluaXNoZWQgbG9hZGluZy4KK3ZvaWQgRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92ZVBlbmRp
bmdTaGVldE5vdGlmaWNhdGlvblR5cGUgbm90aWZpY2F0aW9uKQoreworICAgIC8vIE1ha2Ugc3Vy
ZSB3ZSBrbmV3IHRoaXMgc2hlZXQgd2FzIHBlbmRpbmcsIGFuZCB0aGF0IG91ciBjb3VudCBpc24n
dCBvdXQgb2Ygc3luYy4KKyAgICBBU1NFUlQobV9wZW5kaW5nU3R5bGVzaGVldHMgPiAwKTsKKwor
ICAgIG1fcGVuZGluZ1N0eWxlc2hlZXRzLS07CisgICAgCisjaWZkZWYgSU5TVFJVTUVOVF9MQVlP
VVRfU0NIRURVTElORworICAgIGlmICghb3duZXJFbGVtZW50KCkpCisgICAgICAgIHByaW50Zigi
U3R5bGVzaGVldCBsb2FkZWQgYXQgdGltZSAlZC4gJWQgc3R5bGVzaGVldHMgc3RpbGwgcmVtYWlu
LlxuIiwgZWxhcHNlZFRpbWUoKSwgbV9wZW5kaW5nU3R5bGVzaGVldHMpOworI2VuZGlmCisKKyAg
ICBpZiAobV9wZW5kaW5nU3R5bGVzaGVldHMpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChu
b3RpZmljYXRpb24gPT0gUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0ZXIpIHsKKyAgICAgICAg
bV9kb2N1bWVudC5zZXROZWVkc05vdGlmeVJlbW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9kb2N1bWVudC5kaWRSZW1vdmVBbGxQ
ZW5kaW5nU3R5bGVzaGVldCgpOworfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b246OmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmIG5vZGUsIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKQoreworICAgIGlmICghbm9kZS5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBVbnRpbCB0aGUgPGJvZHk+IGV4aXN0cywgd2UgaGF2ZSBubyBjaG9pY2Ug
YnV0IHRvIGNvbXBhcmUgZG9jdW1lbnQgcG9zaXRpb25zLAorICAgIC8vIHNpbmNlIHN0eWxlcyBv
dXRzaWRlIG9mIHRoZSBib2R5IGFuZCBoZWFkIGNvbnRpbnVlIHRvIGJlIHNodW50ZWQgaW50byB0
aGUgaGVhZAorICAgIC8vIChhbmQgdGh1cyBjYW4gc2hpZnQgdG8gZW5kIHVwIGJlZm9yZSBkeW5h
bWljYWxseSBhZGRlZCBET00gY29udGVudCB0aGF0IGlzIGFsc28KKyAgICAvLyBvdXRzaWRlIHRo
ZSBib2R5KS4KKyAgICBpZiAoKGNyZWF0ZWRCeVBhcnNlciAmJiBtX2RvY3VtZW50LmJvZHlPckZy
YW1lc2V0KCkpIHx8IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmlzRW1wdHkoKSkgeworICAg
ICAgICBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5hZGQoJm5vZGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gRGV0ZXJtaW5lIGFuIGFwcHJvcHJpYXRlIGluc2VydGlvbiBw
b2ludC4KKyAgICBTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGJlZ2lu
ID0gbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuYmVnaW4oKTsKKyAgICBTdHlsZVNoZWV0Q2Fu
ZGlkYXRlTGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5v
ZGVzLmVuZCgpOworICAgIFN0eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDo6aXRlcmF0b3Ig
aXQgPSBlbmQ7CisgICAgTm9kZSogZm9sbG93aW5nTm9kZSA9IDA7CisgICAgZG8geworICAgICAg
ICAtLWl0OworICAgICAgICBOb2RlKiBuID0gKml0OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBw
b3NpdGlvbiA9IG4tPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCZub2RlKTsKKyAgICAgICAgaWYg
KHBvc2l0aW9uID09IE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORykgeworICAgICAg
ICAgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaW5zZXJ0QmVmb3JlKGZvbGxvd2luZ05v
ZGUsICZub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb2xs
b3dpbmdOb2RlID0gbjsKKyAgICB9IHdoaWxlIChpdCAhPSBiZWdpbik7CisgICAgCisgICAgbV9z
dHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaW5zZXJ0QmVmb3JlKGZvbGxvd2luZ05vZGUsICZub2Rl
KTsKK30KKwordm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpyZW1vdmVTdHlsZVNo
ZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiBub2RlKQoreworICAgIG1fc3R5bGVTaGVldENhbmRpZGF0
ZU5vZGVzLnJlbW92ZSgmbm9kZSk7Cit9CisKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+
JiBzaGVldHMpCit7CisgICAgaWYgKG1fZG9jdW1lbnQuc2V0dGluZ3MoKSAmJiAhbV9kb2N1bWVu
dC5zZXR0aW5ncygpLT5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcykg
eworICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IG51bGxwdHI7CisgICAgICAgIGlmIChpczxQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KCpub2RlKSkgeworICAgICAgICAgICAgLy8gUHJvY2Vzc2lu
ZyBpbnN0cnVjdGlvbiAoWE1MIGRvY3VtZW50cyBvbmx5KS4KKyAgICAgICAgICAgIC8vIFdlIGRv
bid0IHN1cHBvcnQgbGlua2luZyB0byBlbWJlZGRlZCBDU1Mgc3R5bGVzaGVldHMsIHNlZSA8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MjgxPiBmb3IgZGlzY3Vzc2lv
bi4KKyAgICAgICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYgcGkgPSBkb3duY2FzdDxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24+KCpub2RlKTsKKyAgICAgICAgICAgIHNoZWV0ID0gcGkuc2hlZXQo
KTsKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFu
c2Zvcm1zIHRvIGFscmVhZHkgdHJhbnNmb3JtZWQgZG9jdW1lbnRzIC0tIDxyZGFyOi8vcHJvYmxl
bS80MTMyODA2PgorICAgICAgICAgICAgaWYgKHBpLmlzWFNMKCkgJiYgIW1fZG9jdW1lbnQudHJh
bnNmb3JtU291cmNlRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIC8vIERvbid0IGFwcGx5
IFhTTCB0cmFuc2Zvcm1zIHVudGlsIGxvYWRpbmcgaXMgZmluaXNoZWQuCisgICAgICAgICAgICAg
ICAgaWYgKCFtX2RvY3VtZW50LnBhcnNpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5hcHBseVhTTFRyYW5zZm9ybSgmcGkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9IGVsc2UgaWYgKGlzPEhUTUxMaW5rRWxlbWVu
dD4oKm5vZGUpIHx8IGlzPEhUTUxTdHlsZUVsZW1lbnQ+KCpub2RlKSB8fCBpczxTVkdTdHlsZUVs
ZW1lbnQ+KCpub2RlKSkgeworICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0aXRsZSA9IGVsZW1l
bnQuZmFzdEdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOworICAgICAgICAgICAgYm9vbCBlbmFibGVk
VmlhU2NyaXB0ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoaXM8SFRNTExpbmtFbGVtZW50Pihl
bGVtZW50KSkgeworICAgICAgICAgICAgICAgIC8vIDxMSU5LPiBlbGVtZW50CisgICAgICAgICAg
ICAgICAgSFRNTExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRvd25jYXN0PEhUTUxMaW5rRWxl
bWVudD4oZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKGxpbmtFbGVtZW50LmlzRGlzYWJs
ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZW5h
YmxlZFZpYVNjcmlwdCA9IGxpbmtFbGVtZW50LmlzRW5hYmxlZFZpYVNjcmlwdCgpOworICAgICAg
ICAgICAgICAgIGlmIChsaW5rRWxlbWVudC5zdHlsZVNoZWV0SXNMb2FkaW5nKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gaXQgaXMgbG9hZGluZyBidXQgd2Ugc2hvdWxkIHN0aWxsIGRlY2lk
ZSB3aGljaCBzdHlsZSBzaGVldCBzZXQgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIGlmICgh
ZW5hYmxlZFZpYVNjcmlwdCAmJiAhdGl0bGUuaXNFbXB0eSgpICYmIG1fcHJlZmVycmVkU3R5bGVz
aGVldFNldE5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxp
bmtFbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUocmVsQXR0cikuY29udGFpbnMoImFsdGVybmF0ZSIp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0
TmFtZSA9IHRpdGxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2VsZWN0ZWRTdHls
ZXNoZWV0U2V0TmFtZSA9IHRpdGxlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWxpbmtFbGVtZW50LnNoZWV0KCkpCisgICAg
ICAgICAgICAgICAgICAgIHRpdGxlID0gbnVsbEF0b207CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcHJlZmVycmVkIHN0eWxlc2V0LiBUaGlzIGlzIHRoZQor
ICAgICAgICAgICAgLy8gc2V0IG9mIHNoZWV0cyB0aGF0IHdpbGwgYmUgZW5hYmxlZC4KKyAgICAg
ICAgICAgIGlmIChpczxTVkdTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAgICAgICAg
IHNoZWV0ID0gZG93bmNhc3Q8U1ZHU3R5bGVFbGVtZW50PihlbGVtZW50KS5zaGVldCgpOworICAg
ICAgICAgICAgZWxzZSBpZiAoaXM8SFRNTExpbmtFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAg
ICAgICAgICBzaGVldCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCkuc2hlZXQo
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzaGVldCA9IGRvd25jYXN0PEhU
TUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CisgICAgICAgICAgICAvLyBDaGVjayB0
byBzZWUgaWYgdGhpcyBzaGVldCBiZWxvbmdzIHRvIGEgc3R5bGVzZXQKKyAgICAgICAgICAgIC8v
ICh0aHVzIG1ha2luZyBpdCBQUkVGRVJSRUQgb3IgQUxURVJOQVRFIHJhdGhlciB0aGFuCisgICAg
ICAgICAgICAvLyBQRVJTSVNURU5UKS4KKyAgICAgICAgICAgIGF1dG8mIHJlbCA9IGVsZW1lbnQu
ZmFzdEdldEF0dHJpYnV0ZShyZWxBdHRyKTsKKyAgICAgICAgICAgIGlmICghZW5hYmxlZFZpYVNj
cmlwdCAmJiAhdGl0bGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgLy8gWWVzLCB3ZSBo
YXZlIGEgdGl0bGUuCisgICAgICAgICAgICAgICAgaWYgKG1fcHJlZmVycmVkU3R5bGVzaGVldFNl
dE5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vIHByZWZlcnJlZCBz
ZXQgaGFzIGJlZW4gZXN0YWJsaXNoZWQuIElmCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGFy
ZSBOT1QgYW4gYWx0ZXJuYXRlIHNoZWV0LCB0aGVuIGVzdGFibGlzaAorICAgICAgICAgICAgICAg
ICAgICAvLyB1cyBhcyB0aGUgcHJlZmVycmVkIHNldC4gT3RoZXJ3aXNlLCBqdXN0IGlnbm9yZQor
ICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHNoZWV0LgorICAgICAgICAgICAgICAgICAgICBp
ZiAoaXM8SFRNTFN0eWxlRWxlbWVudD4oZWxlbWVudCkgfHwgIXJlbC5jb250YWlucygiYWx0ZXJu
YXRlIikpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXRO
YW1lID0gbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lID0gdGl0bGU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICh0aXRsZSAhPSBtX3ByZWZlcnJlZFN0eWxlc2hlZXRT
ZXROYW1lKQorICAgICAgICAgICAgICAgICAgICBzaGVldCA9IG51bGxwdHI7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChyZWwuY29udGFpbnMoImFsdGVybmF0ZSIpICYmIHRpdGxl
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzaGVldCA9IG51bGxwdHI7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHNoZWV0KQorICAgICAgICAgICAgc2hlZXRzLmFwcGVuZChzaGVldCk7Cisg
ICAgfQorfQorCit2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFuYWx5emVTdHls
ZVNoZWV0Q2hhbmdlKFVwZGF0ZUZsYWcgdXBkYXRlRmxhZywgY29uc3QgVmVjdG9yPFJlZlB0cjxD
U1NTdHlsZVNoZWV0Pj4mIG5ld1N0eWxlc2hlZXRzLCBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSYg
c3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKQor
eworICAgIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID0gUmVjb25zdHJ1Y3Q7CisgICAgcmVxdWly
ZXNGdWxsU3R5bGVSZWNhbGMgPSB0cnVlOworICAgIAorICAgIC8vIFN0eWxlc2hlZXRzIG9mIDxz
dHlsZT4gZWxlbWVudHMgdGhhdCBAaW1wb3J0IHN0eWxlc2hlZXRzIGFyZSBhY3RpdmUgYnV0IGxv
YWRpbmcuIFdlIG5lZWQgdG8gdHJpZ2dlciBhIGZ1bGwgcmVjYWxjIHdoZW4gc3VjaCBsb2FkcyBh
cmUgZG9uZS4KKyAgICBib29sIGhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ID0gZmFsc2U7Cisg
ICAgdW5zaWduZWQgbmV3U3R5bGVzaGVldENvdW50ID0gbmV3U3R5bGVzaGVldHMuc2l6ZSgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdTdHlsZXNoZWV0Q291bnQ7ICsraSkgewor
ICAgICAgICBpZiAobmV3U3R5bGVzaGVldHNbaV0tPmlzTG9hZGluZygpKQorICAgICAgICAgICAg
aGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSB0cnVlOworICAgIH0KKyAgICBpZiAobV9oYWRB
Y3RpdmVMb2FkaW5nU3R5bGVzaGVldCAmJiAhaGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQpIHsK
KyAgICAgICAgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IGZhbHNlOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBoYXNBY3Rp
dmVMb2FkaW5nU3R5bGVzaGVldDsKKworICAgIGlmICh1cGRhdGVGbGFnICE9IE9wdGltaXplZFVw
ZGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9kb2N1bWVudC5zdHlsZVJlc29sdmVy
SWZFeGlzdHMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIgPSAqbV9kb2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlzdHMoKTsKKworICAgIC8vIEZp
bmQgb3V0IHdoaWNoIHN0eWxlc2hlZXRzIGFyZSBuZXcuCisgICAgdW5zaWduZWQgb2xkU3R5bGVz
aGVldENvdW50ID0gbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0cy5zaXplKCk7CisgICAgaWYgKG5l
d1N0eWxlc2hlZXRDb3VudCA8IG9sZFN0eWxlc2hlZXRDb3VudCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiBhZGRlZFNoZWV0czsKKyAgICB1bnNpZ25l
ZCBuZXdJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBvbGRJbmRleCA9IDA7IG9sZEluZGV4
IDwgb2xkU3R5bGVzaGVldENvdW50OyArK29sZEluZGV4KSB7CisgICAgICAgIGlmIChuZXdJbmRl
eCA+PSBuZXdTdHlsZXNoZWV0Q291bnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdo
aWxlIChtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzW29sZEluZGV4XSAhPSBuZXdTdHlsZXNoZWV0
c1tuZXdJbmRleF0pIHsKKyAgICAgICAgICAgIGFkZGVkU2hlZXRzLmFwcGVuZCgmbmV3U3R5bGVz
aGVldHNbbmV3SW5kZXhdLT5jb250ZW50cygpKTsKKyAgICAgICAgICAgICsrbmV3SW5kZXg7Cisg
ICAgICAgICAgICBpZiAobmV3SW5kZXggPT0gbmV3U3R5bGVzaGVldENvdW50KQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICArK25ld0luZGV4OworICAgIH0KKyAg
ICBib29sIGhhc0luc2VydGlvbnMgPSAhYWRkZWRTaGVldHMuaXNFbXB0eSgpOworICAgIHdoaWxl
IChuZXdJbmRleCA8IG5ld1N0eWxlc2hlZXRDb3VudCkgeworICAgICAgICBhZGRlZFNoZWV0cy5h
cHBlbmQoJm5ld1N0eWxlc2hlZXRzW25ld0luZGV4XS0+Y29udGVudHMoKSk7CisgICAgICAgICsr
bmV3SW5kZXg7CisgICAgfQorICAgIC8vIElmIGFsbCBuZXcgc2hlZXRzIHdlcmUgYWRkZWQgYXQg
dGhlIGVuZCBvZiB0aGUgbGlzdCB3ZSBjYW4ganVzdCBhZGQgdGhlbSB0byBleGlzdGluZyBTdHls
ZVJlc29sdmVyLgorICAgIC8vIElmIHRoZXJlIHdlcmUgaW5zZXJ0aW9ucyB3ZSBuZWVkIHRvIHJl
LWFkZCBhbGwgdGhlIHN0eWxlc2hlZXRzIHNvIHJ1bGVzIGFyZSBvcmRlcmVkIGNvcnJlY3RseS4K
KyAgICBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9IGhhc0luc2VydGlvbnMgPyBSZXNldCA6IEFk
ZGl0aXZlOworCisgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgcGFyc2luZyB0aGUgYm9keSBhbmQg
c28gbWF5IGhhdmUgc2lnbmlmaWNhbnQgYW1vdW50IG9mIGVsZW1lbnRzLCBwdXQgc29tZSBlZmZv
cnQgaW50byB0cnlpbmcgdG8gYXZvaWQgc3R5bGUgcmVjYWxjcy4KKyAgICBpZiAoIW1fZG9jdW1l
bnQuYm9keU9yRnJhbWVzZXQoKSB8fCBtX2RvY3VtZW50Lmhhc05vZGVzV2l0aFBsYWNlaG9sZGVy
U3R5bGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMg
aW52YWxpZGF0aW9uQW5hbHlzaXMoYWRkZWRTaGVldHMsIHN0eWxlUmVzb2x2ZXIubWVkaWFRdWVy
eUV2YWx1YXRvcigpKTsKKyAgICBpZiAoaW52YWxpZGF0aW9uQW5hbHlzaXMuZGlydGllc0FsbFN0
eWxlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnZhbGlkYXRpb25BbmFseXNpcy5pbnZhbGlk
YXRlU3R5bGUobV9kb2N1bWVudCk7CisgICAgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMgPSBmYWxz
ZTsKK30KKworc3RhdGljIHZvaWQgZmlsdGVyRW5hYmxlZE5vbmVtcHR5Q1NTU3R5bGVTaGVldHMo
VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHJlc3VsdCwgY29uc3QgVmVjdG9yPFJlZlB0
cjxTdHlsZVNoZWV0Pj4mIHNoZWV0cykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2hlZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaXM8Q1NTU3R5bGVTaGVldD4oKnNo
ZWV0c1tpXSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQ1NTU3R5bGVTaGVldCYg
c2hlZXQgPSBkb3duY2FzdDxDU1NTdHlsZVNoZWV0Pigqc2hlZXRzW2ldKTsKKyAgICAgICAgaWYg
KHNoZWV0LmRpc2FibGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFz
aGVldC5sZW5ndGgoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXN1bHQuYXBw
ZW5kKCZzaGVldCk7CisgICAgfQorfQorCitib29sIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b246OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKFVwZGF0ZUZsYWcgdXBkYXRlRmxhZykKK3sKKyAg
ICBpZiAobV9kb2N1bWVudC5pblN0eWxlUmVjYWxjKCkpIHsKKyAgICAgICAgLy8gU1ZHIDx1c2U+
IGVsZW1lbnQgbWF5IG1hbmFnZSB0byBpbnZhbGlkYXRlIHN0eWxlIHNlbGVjdG9yIGluIHRoZSBt
aWRkbGUgb2YgYSBzdHlsZSByZWNhbGMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NDM0NAorICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgZml4ZWQgaW4gU1ZHIGFuZCB0aGUgY2FsbCBzaXRlIHJlcGxhY2VkIGJ5IEFTU0VSVCghbV9p
blN0eWxlUmVjYWxjKS4KKyAgICAgICAgbV9wZW5kaW5nVXBkYXRlVHlwZSA9IEZ1bGxVcGRhdGU7
CisgICAgICAgIG1fZG9jdW1lbnQuc2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICB9CisgICAgaWYgKCFtX2RvY3VtZW50Lmhhc0xpdmluZ1Jl
bmRlclRyZWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPFJlZlB0cjxT
dHlsZVNoZWV0Pj4gYWN0aXZlU3R5bGVTaGVldHM7CisgICAgY29sbGVjdEFjdGl2ZVN0eWxlU2hl
ZXRzKGFjdGl2ZVN0eWxlU2hlZXRzKTsKKworICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4+IGFjdGl2ZUNTU1N0eWxlU2hlZXRzOworICAgIGFjdGl2ZUNTU1N0eWxlU2hlZXRzLmFwcGVu
ZFZlY3RvcihpbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzKCkpOworICAgIGFjdGl2ZUNTU1N0eWxl
U2hlZXRzLmFwcGVuZFZlY3Rvcihkb2N1bWVudEF1dGhvclN0eWxlU2hlZXRzKCkpOworICAgIGZp
bHRlckVuYWJsZWROb25lbXB0eUNTU1N0eWxlU2hlZXRzKGFjdGl2ZUNTU1N0eWxlU2hlZXRzLCBh
Y3RpdmVTdHlsZVNoZWV0cyk7CisKKyAgICBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSBzdHlsZVJl
c29sdmVyVXBkYXRlVHlwZTsKKyAgICBib29sIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjOworICAg
IGFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKHVwZGF0ZUZsYWcsIGFjdGl2ZUNTU1N0eWxlU2hlZXRz
LCBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSwgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpOworCisg
ICAgaWYgKHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID09IFJlY29uc3RydWN0KQorICAgICAgICBt
X2RvY3VtZW50LmNsZWFyU3R5bGVSZXNvbHZlcigpOworICAgIGVsc2UgeworICAgICAgICBTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gbV9kb2N1bWVudC5lbnN1cmVTdHlsZVJlc29sdmVy
KCk7CisgICAgICAgIGlmIChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9PSBSZXNldCkgeworICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci5ydWxlU2V0cygpLnJlc2V0QXV0aG9yU3R5bGUoKTsKKyAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoMCwgYWN0aXZl
Q1NTU3R5bGVTaGVldHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHN0
eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID09IEFkZGl0aXZlKTsKKyAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXIuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMobV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0cy5z
aXplKCksIGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKKyAgICAgICAgfQorICAgICAgICByZXNldENT
U0ZlYXR1cmVGbGFncygpOworICAgIH0KKworICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hl
ZXRMaXN0Rm9yRmFzdExvb2t1cCA9IG51bGxwdHI7CisgICAgbV9hY3RpdmVBdXRob3JTdHlsZVNo
ZWV0cy5zd2FwKGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKKyAgICBtX3N0eWxlU2hlZXRzRm9yU3R5
bGVTaGVldExpc3Quc3dhcChhY3RpdmVTdHlsZVNoZWV0cyk7CisKKyAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmFjdGl2ZVN0eWxlU2hlZXRzVXBkYXRlZChtX2RvY3VtZW50KTsKKworICAg
IGZvciAoY29uc3QgYXV0byYgc2hlZXQgOiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzKSB7Cisg
ICAgICAgIGlmIChzaGVldC0+Y29udGVudHMoKS51c2VzUmVtVW5pdHMoKSkKKyAgICAgICAgICAg
IG1fdXNlc1JlbVVuaXRzID0gdHJ1ZTsKKyAgICAgICAgaWYgKHNoZWV0LT5jb250ZW50cygpLnVz
ZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKSkKKyAgICAgICAgICAgIG1fdXNlc1N0eWxlQmFzZWRF
ZGl0YWJpbGl0eSA9IHRydWU7CisgICAgfQorICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSBOb1Vw
ZGF0ZTsKKworICAgIHJldHVybiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYzsKK30KKworY29uc3Qg
VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bjo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKSBjb25zdAoreworICAgIFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4+IHJlc3VsdDsKKworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3Io
aW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0cygpKTsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGRv
Y3VtZW50QXV0aG9yU3R5bGVTaGVldHMoKSk7CisKKyAgICBmb3IgKGF1dG8mIHN0eWxlU2hlZXQg
OiBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QpIHsKKyAgICAgICAgaWYgKCFpczxDU1NT
dHlsZVNoZWV0Pigqc3R5bGVTaGVldCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBDU1NTdHlsZVNoZWV0JiBzaGVldCA9IGRvd25jYXN0PENTU1N0eWxlU2hlZXQ+KCpzdHlsZVNo
ZWV0KTsKKyAgICAgICAgaWYgKHNoZWV0LmRpc2FibGVkKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKCZzaGVldCk7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworYm9vbCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphY3RpdmVT
dHlsZVNoZWV0c0NvbnRhaW5zKGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0KSBjb25zdAorewor
ICAgIGlmICghbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwKSB7
CisgICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cCA9
IHN0ZDo6bWFrZV91bmlxdWU8SGFzaFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+KCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RG
b3JGYXN0TG9va3VwLT5hZGQobV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0c1tpXS5nZXQoKSk7Cisg
ICAgfQorICAgIHJldHVybiBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RM
b29rdXAtPmNvbnRhaW5zKHNoZWV0KTsKK30KKwordm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uOjpkZXRhY2hGcm9tRG9jdW1lbnQoKQoreworICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQp
CisgICAgICAgIG1fcGFnZVVzZXJTaGVldC0+ZGV0YWNoRnJvbURvY3VtZW50KCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHNbaV0tPmRldGFjaEZyb21Eb2N1
bWVudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2luamVjdGVkQXV0aG9yU3R5
bGVTaGVldHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0
c1tpXS0+ZGV0YWNoRnJvbURvY3VtZW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdXNlclN0eWxlU2hlZXRzLnNpemUoKTsgKytpKQorICAgICAgICBtX3VzZXJTdHlsZVNoZWV0
c1tpXS0+ZGV0YWNoRnJvbURvY3VtZW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXV0aG9yU3R5bGVT
aGVldHNbaV0tPmRldGFjaEZyb21Eb2N1bWVudCgpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAo
YXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSwgMjAxMS0yMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
KQogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC0yNiw3ICsyNiw3IEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b24uaCIKKyNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgogCiAjaW5jbHVkZSAiQ1NT
U3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKQEAgLTUzLDM2ICs1MywxMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnM7CiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
OjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKK0V4dGVu
c2lvblN0eWxlU2hlZXRzOjpFeHRlbnNpb25TdHlsZVNoZWV0cyhEb2N1bWVudCYgZG9jdW1lbnQp
CiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQotICAgICwgbV9wZW5kaW5nU3R5bGVzaGVldHMo
MCkKLSAgICAsIG1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZChmYWxzZSkKLSAgICAsIG1f
aGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQoZmFsc2UpCi0gICAgLCBtX3BlbmRpbmdVcGRhdGVU
eXBlKE5vVXBkYXRlKQotICAgICwgbV91c2VzRmlyc3RMaW5lUnVsZXMoZmFsc2UpCi0gICAgLCBt
X3VzZXNGaXJzdExldHRlclJ1bGVzKGZhbHNlKQotICAgICwgbV91c2VzUmVtVW5pdHMoZmFsc2Up
Ci0gICAgLCBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoZmFsc2UpCi0gICAgLCBtX3N0eWxl
UmVzb2x2ZXJDaGFuZ2VkVGltZXIoKnRoaXMsICZEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
OjpzdHlsZVJlc29sdmVyQ2hhbmdlZFRpbWVyRmlyZWQpCisgICAgLCBtX3N0eWxlUmVzb2x2ZXJD
aGFuZ2VkVGltZXIoKnRoaXMsICZFeHRlbnNpb25TdHlsZVNoZWV0czo6c3R5bGVSZXNvbHZlckNo
YW5nZWRUaW1lckZpcmVkKQogewogfQogCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b246OmNvbWJpbmVDU1NGZWF0dXJlRmxhZ3MoKQotewotICAgIC8vIERlbGF5IHJlc2V0dGluZyB0
aGUgZmxhZ3MgdW50aWwgYWZ0ZXIgbmV4dCBzdHlsZSByZWNhbGMgc2luY2UgdW5hcHBseWluZyB0
aGUgc3R5bGUgbWF5IG5vdCB3b3JrIHdpdGhvdXQgdGhlc2Ugc2V0ICh0aGlzIGlzIHRydWUgYXQg
bGVhc3Qgd2l0aCBiZWZvcmUvYWZ0ZXIpLgotICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKLSAgICBtX3VzZXNG
aXJzdExpbmVSdWxlcyA9IG1fdXNlc0ZpcnN0TGluZVJ1bGVzIHx8IHN0eWxlUmVzb2x2ZXIudXNl
c0ZpcnN0TGluZVJ1bGVzKCk7Ci0gICAgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyA9IG1fdXNlc0Zp
cnN0TGV0dGVyUnVsZXMgfHwgc3R5bGVSZXNvbHZlci51c2VzRmlyc3RMZXR0ZXJSdWxlcygpOwot
fQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnJlc2V0Q1NTRmVhdHVyZUZs
YWdzKCkKLXsKLSAgICBjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gbV9kb2N1
bWVudC5lbnN1cmVTdHlsZVJlc29sdmVyKCk7Ci0gICAgbV91c2VzRmlyc3RMaW5lUnVsZXMgPSBz
dHlsZVJlc29sdmVyLnVzZXNGaXJzdExpbmVSdWxlcygpOwotICAgIG1fdXNlc0ZpcnN0TGV0dGVy
UnVsZXMgPSBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExldHRlclJ1bGVzKCk7Ci19Ci0KLUNTU1N0
eWxlU2hlZXQqIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnBhZ2VVc2VyU2hlZXQoKQor
Q1NTU3R5bGVTaGVldCogRXh0ZW5zaW9uU3R5bGVTaGVldHM6OnBhZ2VVc2VyU2hlZXQoKQogewog
ICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQpCiAgICAgICAgIHJldHVybiBtX3BhZ2VVc2VyU2hlZXQu
Z2V0KCk7CkBAIC0xMDIsNyArNzksNyBAQCBDU1NTdHlsZVNoZWV0KiBEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0CiAgICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKIH0KIAotdm9pZCBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjbGVhclBhZ2VVc2VyU2hlZXQoKQordm9pZCBF
eHRlbnNpb25TdHlsZVNoZWV0czo6Y2xlYXJQYWdlVXNlclNoZWV0KCkKIHsKICAgICBpZiAobV9w
YWdlVXNlclNoZWV0KSB7CiAgICAgICAgIG1fcGFnZVVzZXJTaGVldCA9IG51bGxwdHI7CkBAIC0x
MTAsMjYgKzg3LDI2IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y2xlYXIK
ICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlUGFn
ZVVzZXJTaGVldCgpCit2b2lkIEV4dGVuc2lvblN0eWxlU2hlZXRzOjp1cGRhdGVQYWdlVXNlclNo
ZWV0KCkKIHsKICAgICBjbGVhclBhZ2VVc2VyU2hlZXQoKTsKICAgICBpZiAocGFnZVVzZXJTaGVl
dCgpKQogICAgICAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxl
SW1tZWRpYXRlbHkpOwogfQogCi1jb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYg
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6aW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSBj
b25zdAorY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIEV4dGVuc2lvblN0eWxl
U2hlZXRzOjppbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpIGNvbnN0CiB7CiAgICAgdXBkYXRlSW5q
ZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKICAgICByZXR1cm4gbV9pbmplY3RlZFVzZXJTdHlsZVNo
ZWV0czsKIH0KIAotY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246OmluamVjdGVkQXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdAor
Y29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIEV4dGVuc2lvblN0eWxlU2hlZXRz
OjppbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzKCkgY29uc3QKIHsKICAgICB1cGRhdGVJbmplY3Rl
ZFN0eWxlU2hlZXRDYWNoZSgpOwogICAgIHJldHVybiBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVl
dHM7CiB9CiAKLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlSW5qZWN0
ZWRTdHlsZVNoZWV0Q2FjaGUoKSBjb25zdAordm9pZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6dXBk
YXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKSBjb25zdAogewogICAgIGlmIChtX2luamVjdGVk
U3R5bGVTaGVldENhY2hlVmFsaWQpCiAgICAgICAgIHJldHVybjsKQEAgLTE3MCw3ICsxNDcsNyBA
QCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVwZGF0CiAgICAgfQogfQogCi12
b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmludmFsaWRhdGVJbmplY3RlZFN0eWxl
U2hlZXRDYWNoZSgpCit2b2lkIEV4dGVuc2lvblN0eWxlU2hlZXRzOjppbnZhbGlkYXRlSW5qZWN0
ZWRTdHlsZVNoZWV0Q2FjaGUoKQogewogICAgIGlmICghbV9pbmplY3RlZFN0eWxlU2hlZXRDYWNo
ZVZhbGlkKQogICAgICAgICByZXR1cm47CkBAIC0xODAsMjIgKzE1NywyMiBAQCB2b2lkIERvY3Vt
ZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmludmFsCiAgICAgbV9kb2N1bWVudC5zdHlsZVJlc29s
dmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKIH0KIAotdm9pZCBEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjphZGRBdXRob3JTaGVldChSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmIGF1
dGhvclNoZWV0KQordm9pZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6YWRkVXNlclN0eWxlU2hlZXQo
UmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiB1c2VyU2hlZXQpCiB7Ci0gICAgQVNTRVJUKCFhdXRo
b3JTaGVldC5nZXQoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOwotICAgIG1fYXV0aG9yU3R5bGVTaGVl
dHMuYXBwZW5kKENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShXVEY6Om1vdmUoYXV0aG9yU2hlZXQpLCAm
bV9kb2N1bWVudCkpOworICAgIEFTU0VSVCh1c2VyU2hlZXQuZ2V0KCkuaXNVc2VyU3R5bGVTaGVl
dCgpKTsKKyAgICBtX3VzZXJTdHlsZVNoZWV0cy5hcHBlbmQoQ1NTU3R5bGVTaGVldDo6Y3JlYXRl
KFdURjo6bW92ZSh1c2VyU2hlZXQpLCAmbV9kb2N1bWVudCkpOwogICAgIG1fZG9jdW1lbnQuc3R5
bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CiB9CiAKLXZvaWQgRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkVXNlclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29u
dGVudHM+JiYgdXNlclNoZWV0KQordm9pZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6YWRkQXV0aG9y
U3R5bGVTaGVldEZvclRlc3RpbmcoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiBhdXRob3JTaGVl
dCkKIHsKLSAgICBBU1NFUlQodXNlclNoZWV0LmdldCgpLmlzVXNlclN0eWxlU2hlZXQoKSk7Ci0g
ICAgbV91c2VyU3R5bGVTaGVldHMuYXBwZW5kKENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShXVEY6Om1v
dmUodXNlclNoZWV0KSwgJm1fZG9jdW1lbnQpKTsKKyAgICBBU1NFUlQoIWF1dGhvclNoZWV0Lmdl
dCgpLmlzVXNlclN0eWxlU2hlZXQoKSk7CisgICAgbV9hdXRob3JTdHlsZVNoZWV0c0ZvclRlc3Rp
bmcuYXBwZW5kKENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShXVEY6Om1vdmUoYXV0aG9yU2hlZXQpLCAm
bV9kb2N1bWVudCkpOwogICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxj
U3R5bGVJbW1lZGlhdGVseSk7CiB9CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQot
dm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphZGREaXNwbGF5Tm9uZVNlbGVjdG9y
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgdWludDMy
X3Qgc2VsZWN0b3JJRCkKK3ZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OmFkZERpc3BsYXlOb25l
U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCB1aW50MzJfdCBzZWxlY3RvcklEKQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9jb250ZW50RXh0
ZW5zaW9uU2VsZWN0b3JTaGVldHMuYWRkKGlkZW50aWZpZXIsIG51bGxwdHIpOwogICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkgewpAQCAtMjA3LDcgKzE4NCw3IEBAIHZvaWQgRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbjo6YWRkRGkKICAgICBtX3N0eWxlUmVzb2x2ZXJDaGFuZ2VkVGltZXIu
c3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246
Om1heWJlQWRkQ29udGVudEV4dGVuc2lvblNoZWV0KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwg
U3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKK3ZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6Om1h
eWJlQWRkQ29udGVudEV4dGVuc2lvblNoZWV0KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgU3R5
bGVTaGVldENvbnRlbnRzJiBzaGVldCkKIHsKICAgICBBU1NFUlQoc2hlZXQuaXNVc2VyU3R5bGVT
aGVldCgpKTsKIApAQCAtMjIxLDMyNSArMTk4LDIzIEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbjo6bWF5YmUKIH0KICNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQogCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnN0eWxlUmVzb2x2ZXJDaGFu
Z2VkVGltZXJGaXJlZCgpCit2b2lkIEV4dGVuc2lvblN0eWxlU2hlZXRzOjpzdHlsZVJlc29sdmVy
Q2hhbmdlZFRpbWVyRmlyZWQoKQogewogICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlckNoYW5n
ZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIGlzIGNhbGxl
ZCB3aGVuZXZlciBhIHRvcC1sZXZlbCBzdHlsZXNoZWV0IGhhcyBmaW5pc2hlZCBsb2FkaW5nLgot
dm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpyZW1vdmVQZW5kaW5nU2hlZXQoUmVt
b3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9uVHlwZSBub3RpZmljYXRpb24pCi17Ci0gICAgLy8g
TWFrZSBzdXJlIHdlIGtuZXcgdGhpcyBzaGVldCB3YXMgcGVuZGluZywgYW5kIHRoYXQgb3VyIGNv
dW50IGlzbid0IG91dCBvZiBzeW5jLgotICAgIEFTU0VSVChtX3BlbmRpbmdTdHlsZXNoZWV0cyA+
IDApOwotCi0gICAgbV9wZW5kaW5nU3R5bGVzaGVldHMtLTsKLSAgICAKLSNpZmRlZiBJTlNUUlVN
RU5UX0xBWU9VVF9TQ0hFRFVMSU5HCi0gICAgaWYgKCFvd25lckVsZW1lbnQoKSkKLSAgICAgICAg
cHJpbnRmKCJTdHlsZXNoZWV0IGxvYWRlZCBhdCB0aW1lICVkLiAlZCBzdHlsZXNoZWV0cyBzdGls
bCByZW1haW4uXG4iLCBlbGFwc2VkVGltZSgpLCBtX3BlbmRpbmdTdHlsZXNoZWV0cyk7Ci0jZW5k
aWYKLQotICAgIGlmIChtX3BlbmRpbmdTdHlsZXNoZWV0cykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG5vdGlmaWNhdGlvbiA9PSBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlMYXRlcikgewot
ICAgICAgICBtX2RvY3VtZW50LnNldE5lZWRzTm90aWZ5UmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hl
ZXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtX2RvY3VtZW50LmRpZFJl
bW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbjo6YWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSwgYm9vbCBj
cmVhdGVkQnlQYXJzZXIpCi17Ci0gICAgaWYgKCFub2RlLmluRG9jdW1lbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIC8vIFVudGlsIHRoZSA8Ym9keT4gZXhpc3RzLCB3ZSBoYXZlIG5v
IGNob2ljZSBidXQgdG8gY29tcGFyZSBkb2N1bWVudCBwb3NpdGlvbnMsCi0gICAgLy8gc2luY2Ug
c3R5bGVzIG91dHNpZGUgb2YgdGhlIGJvZHkgYW5kIGhlYWQgY29udGludWUgdG8gYmUgc2h1bnRl
ZCBpbnRvIHRoZSBoZWFkCi0gICAgLy8gKGFuZCB0aHVzIGNhbiBzaGlmdCB0byBlbmQgdXAgYmVm
b3JlIGR5bmFtaWNhbGx5IGFkZGVkIERPTSBjb250ZW50IHRoYXQgaXMgYWxzbwotICAgIC8vIG91
dHNpZGUgdGhlIGJvZHkpLgotICAgIGlmICgoY3JlYXRlZEJ5UGFyc2VyICYmIG1fZG9jdW1lbnQu
Ym9keU9yRnJhbWVzZXQoKSkgfHwgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmFkZCgmbm9kZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgYW4gYXBwcm9wcmlhdGUgaW5z
ZXJ0aW9uIHBvaW50LgotICAgIFN0eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDo6aXRlcmF0
b3IgYmVnaW4gPSBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5iZWdpbigpOwotICAgIFN0eWxl
U2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDo6aXRlcmF0b3IgZW5kID0gbV9zdHlsZVNoZWV0Q2Fu
ZGlkYXRlTm9kZXMuZW5kKCk7Ci0gICAgU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0Ojpp
dGVyYXRvciBpdCA9IGVuZDsKLSAgICBOb2RlKiBmb2xsb3dpbmdOb2RlID0gMDsKLSAgICBkbyB7
Ci0gICAgICAgIC0taXQ7Ci0gICAgICAgIE5vZGUqIG4gPSAqaXQ7Ci0gICAgICAgIHVuc2lnbmVk
IHNob3J0IHBvc2l0aW9uID0gbi0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24oJm5vZGUpOwotICAg
ICAgICBpZiAocG9zaXRpb24gPT0gTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSB7
Ci0gICAgICAgICAgICBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5pbnNlcnRCZWZvcmUoZm9s
bG93aW5nTm9kZSwgJm5vZGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIGZvbGxvd2luZ05vZGUgPSBuOwotICAgIH0gd2hpbGUgKGl0ICE9IGJlZ2luKTsKLSAgICAK
LSAgICBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5pbnNlcnRCZWZvcmUoZm9sbG93aW5nTm9k
ZSwgJm5vZGUpOwotfQotCi12b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnJlbW92
ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmIG5vZGUpCi17Ci0gICAgbV9zdHlsZVNoZWV0
Q2FuZGlkYXRlTm9kZXMucmVtb3ZlKCZub2RlKTsKLX0KLQotdm9pZCBEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHls
ZVNoZWV0Pj4mIHNoZWV0cykKLXsKLSAgICBpZiAobV9kb2N1bWVudC5zZXR0aW5ncygpICYmICFt
X2RvY3VtZW50LnNldHRpbmdzKCktPmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0byYgbm9kZSA6IG1fc3R5bGVTaGVldENhbmRpZGF0
ZU5vZGVzKSB7Ci0gICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gbnVsbHB0cjsKLSAgICAgICAg
aWYgKGlzPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKm5vZGUpKSB7Ci0gICAgICAgICAgICAvLyBQ
cm9jZXNzaW5nIGluc3RydWN0aW9uIChYTUwgZG9jdW1lbnRzIG9ubHkpLgotICAgICAgICAgICAg
Ly8gV2UgZG9uJ3Qgc3VwcG9ydCBsaW5raW5nIHRvIGVtYmVkZGVkIENTUyBzdHlsZXNoZWV0cywg
c2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkyODE+IGZvciBk
aXNjdXNzaW9uLgotICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uJiBwaSA9IGRvd25j
YXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKm5vZGUpOwotICAgICAgICAgICAgc2hlZXQgPSBw
aS5zaGVldCgpOwotI2lmIEVOQUJMRShYU0xUKQotICAgICAgICAgICAgLy8gRG9uJ3QgYXBwbHkg
WFNMIHRyYW5zZm9ybXMgdG8gYWxyZWFkeSB0cmFuc2Zvcm1lZCBkb2N1bWVudHMgLS0gPHJkYXI6
Ly9wcm9ibGVtLzQxMzI4MDY+Ci0gICAgICAgICAgICBpZiAocGkuaXNYU0woKSAmJiAhbV9kb2N1
bWVudC50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRG9u
J3QgYXBwbHkgWFNMIHRyYW5zZm9ybXMgdW50aWwgbG9hZGluZyBpcyBmaW5pc2hlZC4KLSAgICAg
ICAgICAgICAgICBpZiAoIW1fZG9jdW1lbnQucGFyc2luZygpKQotICAgICAgICAgICAgICAgICAg
ICBtX2RvY3VtZW50LmFwcGx5WFNMVHJhbnNmb3JtKCZwaSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIH0gZWxzZSBpZiAoaXM8SFRNTExp
bmtFbGVtZW50Pigqbm9kZSkgfHwgaXM8SFRNTFN0eWxlRWxlbWVudD4oKm5vZGUpIHx8IGlzPFNW
R1N0eWxlRWxlbWVudD4oKm5vZGUpKSB7Ci0gICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0g
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwotICAgICAgICAgICAgQXRvbWljU3RyaW5nIHRpdGxl
ID0gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHRpdGxlQXR0cik7Ci0gICAgICAgICAgICBib29s
IGVuYWJsZWRWaWFTY3JpcHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChpczxIVE1MTGlua0Vs
ZW1lbnQ+KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gPExJTks+IGVsZW1lbnQKLSAg
ICAgICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQmIGxpbmtFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TExpbmtFbGVtZW50PihlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBpZiAobGlua0VsZW1lbnQu
aXNEaXNhYmxlZCgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICBlbmFibGVkVmlhU2NyaXB0ID0gbGlua0VsZW1lbnQuaXNFbmFibGVkVmlhU2NyaXB0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmtFbGVtZW50LnN0eWxlU2hlZXRJc0xvYWRpbmcoKSkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBpdCBpcyBsb2FkaW5nIGJ1dCB3ZSBzaG91bGQgc3Rp
bGwgZGVjaWRlIHdoaWNoIHN0eWxlIHNoZWV0IHNldCB0byB1c2UKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFlbmFibGVkVmlhU2NyaXB0ICYmICF0aXRsZS5pc0VtcHR5KCkgJiYgbV9wcmVmZXJy
ZWRTdHlsZXNoZWV0U2V0TmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbGlua0VsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShyZWxBdHRyKS5jb250YWlucygiYWx0
ZXJuYXRlIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ByZWZlcnJlZFN0eWxl
c2hlZXRTZXROYW1lID0gdGl0bGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWxl
Y3RlZFN0eWxlc2hlZXRTZXROYW1lID0gdGl0bGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghbGlua0VsZW1lbnQuc2hlZXQo
KSkKLSAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBudWxsQXRvbTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBwcmVmZXJyZWQgc3R5bGVzZXQuIFRoaXMg
aXMgdGhlCi0gICAgICAgICAgICAvLyBzZXQgb2Ygc2hlZXRzIHRoYXQgd2lsbCBiZSBlbmFibGVk
LgotICAgICAgICAgICAgaWYgKGlzPFNWR1N0eWxlRWxlbWVudD4oZWxlbWVudCkpCi0gICAgICAg
ICAgICAgICAgc2hlZXQgPSBkb3duY2FzdDxTVkdTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0
KCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpczxIVE1MTGlua0VsZW1lbnQ+KGVsZW1lbnQpKQot
ICAgICAgICAgICAgICAgIHNoZWV0ID0gZG93bmNhc3Q8SFRNTExpbmtFbGVtZW50PihlbGVtZW50
KS5zaGVldCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNoZWV0ID0gZG93
bmNhc3Q8SFRNTFN0eWxlRWxlbWVudD4oZWxlbWVudCkuc2hlZXQoKTsKLSAgICAgICAgICAgIC8v
IENoZWNrIHRvIHNlZSBpZiB0aGlzIHNoZWV0IGJlbG9uZ3MgdG8gYSBzdHlsZXNldAotICAgICAg
ICAgICAgLy8gKHRodXMgbWFraW5nIGl0IFBSRUZFUlJFRCBvciBBTFRFUk5BVEUgcmF0aGVyIHRo
YW4KLSAgICAgICAgICAgIC8vIFBFUlNJU1RFTlQpLgotICAgICAgICAgICAgYXV0byYgcmVsID0g
ZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHJlbEF0dHIpOwotICAgICAgICAgICAgaWYgKCFlbmFi
bGVkVmlhU2NyaXB0ICYmICF0aXRsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBZ
ZXMsIHdlIGhhdmUgYSB0aXRsZS4KLSAgICAgICAgICAgICAgICBpZiAobV9wcmVmZXJyZWRTdHls
ZXNoZWV0U2V0TmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTm8gcHJl
ZmVycmVkIHNldCBoYXMgYmVlbiBlc3RhYmxpc2hlZC4gSWYKLSAgICAgICAgICAgICAgICAgICAg
Ly8gd2UgYXJlIE5PVCBhbiBhbHRlcm5hdGUgc2hlZXQsIHRoZW4gZXN0YWJsaXNoCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHVzIGFzIHRoZSBwcmVmZXJyZWQgc2V0LiBPdGhlcndpc2UsIGp1c3Qg
aWdub3JlCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hlZXQuCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChpczxIVE1MU3R5bGVFbGVtZW50PihlbGVtZW50KSB8fCAhcmVsLmNvbnRhaW5z
KCJhbHRlcm5hdGUiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVz
aGVldFNldE5hbWUgPSBtX3NlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUgPSB0aXRsZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRpdGxlICE9IG1fcHJlZmVycmVkU3R5
bGVzaGVldFNldE5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlbC5jb250YWlucygiYWx0ZXJuYXRlIikg
JiYgdGl0bGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHNoZWV0ID0gbnVsbHB0cjsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoc2hlZXQpCi0gICAgICAgICAgICBzaGVldHMuYXBwZW5kKHNo
ZWV0KTsKLSAgICB9Ci19Ci0KLXZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YW5h
bHl6ZVN0eWxlU2hlZXRDaGFuZ2UoVXBkYXRlRmxhZyB1cGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRh
dGVUeXBlJiBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSwgYm9vbCYgcmVxdWlyZXNGdWxsU3R5bGVS
ZWNhbGMpCi17Ci0gICAgc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPSBSZWNvbnN0cnVjdDsKLSAg
ICByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyA9IHRydWU7Ci0gICAgCi0gICAgLy8gU3R5bGVzaGVl
dHMgb2YgPHN0eWxlPiBlbGVtZW50cyB0aGF0IEBpbXBvcnQgc3R5bGVzaGVldHMgYXJlIGFjdGl2
ZSBidXQgbG9hZGluZy4gV2UgbmVlZCB0byB0cmlnZ2VyIGEgZnVsbCByZWNhbGMgd2hlbiBzdWNo
IGxvYWRzIGFyZSBkb25lLgotICAgIGJvb2wgaGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBm
YWxzZTsKLSAgICB1bnNpZ25lZCBuZXdTdHlsZXNoZWV0Q291bnQgPSBuZXdTdHlsZXNoZWV0cy5z
aXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld1N0eWxlc2hlZXRDb3VudDsg
KytpKSB7Ci0gICAgICAgIGlmIChuZXdTdHlsZXNoZWV0c1tpXS0+aXNMb2FkaW5nKCkpCi0gICAg
ICAgICAgICBoYXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IHRydWU7Ci0gICAgfQotICAgIGlm
IChtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ICYmICFoYXNBY3RpdmVMb2FkaW5nU3R5bGVz
aGVldCkgewotICAgICAgICBtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ID0gZmFsc2U7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9
IGhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0OwotCi0gICAgaWYgKHVwZGF0ZUZsYWcgIT0gT3B0
aW1pemVkVXBkYXRlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2RvY3VtZW50LnN0eWxl
UmVzb2x2ZXJJZkV4aXN0cygpKQotICAgICAgICByZXR1cm47Ci0gICAgU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciA9ICptX2RvY3VtZW50LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpOwotCi0g
ICAgLy8gRmluZCBvdXQgd2hpY2ggc3R5bGVzaGVldHMgYXJlIG5ldy4KLSAgICB1bnNpZ25lZCBv
bGRTdHlsZXNoZWV0Q291bnQgPSBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzLnNpemUoKTsKLSAg
ICBpZiAobmV3U3R5bGVzaGVldENvdW50IDwgb2xkU3R5bGVzaGVldENvdW50KQotICAgICAgICBy
ZXR1cm47Ci0gICAgVmVjdG9yPFN0eWxlU2hlZXRDb250ZW50cyo+IGFkZGVkU2hlZXRzOwotICAg
IHVuc2lnbmVkIG5ld0luZGV4ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIG9sZEluZGV4ID0gMDsg
b2xkSW5kZXggPCBvbGRTdHlsZXNoZWV0Q291bnQ7ICsrb2xkSW5kZXgpIHsKLSAgICAgICAgaWYg
KG5ld0luZGV4ID49IG5ld1N0eWxlc2hlZXRDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgd2hpbGUgKG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHNbb2xkSW5kZXhdICE9IG5ld1N0
eWxlc2hlZXRzW25ld0luZGV4XSkgewotICAgICAgICAgICAgYWRkZWRTaGVldHMuYXBwZW5kKCZu
ZXdTdHlsZXNoZWV0c1tuZXdJbmRleF0tPmNvbnRlbnRzKCkpOwotICAgICAgICAgICAgKytuZXdJ
bmRleDsKLSAgICAgICAgICAgIGlmIChuZXdJbmRleCA9PSBuZXdTdHlsZXNoZWV0Q291bnQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICsrbmV3SW5kZXg7Ci0g
ICAgfQotICAgIGJvb2wgaGFzSW5zZXJ0aW9ucyA9ICFhZGRlZFNoZWV0cy5pc0VtcHR5KCk7Ci0g
ICAgd2hpbGUgKG5ld0luZGV4IDwgbmV3U3R5bGVzaGVldENvdW50KSB7Ci0gICAgICAgIGFkZGVk
U2hlZXRzLmFwcGVuZCgmbmV3U3R5bGVzaGVldHNbbmV3SW5kZXhdLT5jb250ZW50cygpKTsKLSAg
ICAgICAgKytuZXdJbmRleDsKLSAgICB9Ci0gICAgLy8gSWYgYWxsIG5ldyBzaGVldHMgd2VyZSBh
ZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IHdlIGNhbiBqdXN0IGFkZCB0aGVtIHRvIGV4aXN0
aW5nIFN0eWxlUmVzb2x2ZXIuCi0gICAgLy8gSWYgdGhlcmUgd2VyZSBpbnNlcnRpb25zIHdlIG5l
ZWQgdG8gcmUtYWRkIGFsbCB0aGUgc3R5bGVzaGVldHMgc28gcnVsZXMgYXJlIG9yZGVyZWQgY29y
cmVjdGx5LgotICAgIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID0gaGFzSW5zZXJ0aW9ucyA/IFJl
c2V0IDogQWRkaXRpdmU7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBwYXJzaW5nIHRoZSBi
b2R5IGFuZCBzbyBtYXkgaGF2ZSBzaWduaWZpY2FudCBhbW91bnQgb2YgZWxlbWVudHMsIHB1dCBz
b21lIGVmZm9ydCBpbnRvIHRyeWluZyB0byBhdm9pZCBzdHlsZSByZWNhbGNzLgotICAgIGlmICgh
bV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgpIHx8IG1fZG9jdW1lbnQuaGFzTm9kZXNXaXRoUGxh
Y2Vob2xkZXJTdHlsZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgU3R5bGVJbnZhbGlkYXRpb25B
bmFseXNpcyBpbnZhbGlkYXRpb25BbmFseXNpcyhhZGRlZFNoZWV0cywgc3R5bGVSZXNvbHZlci5t
ZWRpYVF1ZXJ5RXZhbHVhdG9yKCkpOwotICAgIGlmIChpbnZhbGlkYXRpb25BbmFseXNpcy5kaXJ0
aWVzQWxsU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludmFsaWRhdGlvbkFuYWx5c2lz
LmludmFsaWRhdGVTdHlsZShtX2RvY3VtZW50KTsKLSAgICByZXF1aXJlc0Z1bGxTdHlsZVJlY2Fs
YyA9IGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHls
ZVNoZWV0cyhWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgcmVzdWx0LCBjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQotewotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaGVldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxDU1NTdHlsZVNo
ZWV0Pigqc2hlZXRzW2ldKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBDU1NTdHls
ZVNoZWV0JiBzaGVldCA9IGRvd25jYXN0PENTU1N0eWxlU2hlZXQ+KCpzaGVldHNbaV0pOwotICAg
ICAgICBpZiAoc2hlZXQuZGlzYWJsZWQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoIXNoZWV0Lmxlbmd0aCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQoJnNoZWV0KTsKLSAgICB9Ci19Ci0KLWJvb2wgRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbjo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoVXBkYXRlRmxhZyB1cGRhdGVGbGFn
KQotewotICAgIGlmIChtX2RvY3VtZW50LmluU3R5bGVSZWNhbGMoKSkgewotICAgICAgICAvLyBT
VkcgPHVzZT4gZWxlbWVudCBtYXkgbWFuYWdlIHRvIGludmFsaWRhdGUgc3R5bGUgc2VsZWN0b3Ig
aW4gdGhlIG1pZGRsZSBvZiBhIHN0eWxlIHJlY2FsYy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MzQ0Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBmaXhlZCBpbiBTVkcgYW5kIHRoZSBjYWxsIHNpdGUgcmVwbGFjZWQgYnkgQVNT
RVJUKCFtX2luU3R5bGVSZWNhbGMpLgotICAgICAgICBtX3BlbmRpbmdVcGRhdGVUeXBlID0gRnVs
bFVwZGF0ZTsKLSAgICAgICAgbV9kb2N1bWVudC5zY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIH0KLSAgICBpZiAoIW1fZG9jdW1lbnQuaGFz
TGl2aW5nUmVuZGVyVHJlZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8
UmVmUHRyPFN0eWxlU2hlZXQ+PiBhY3RpdmVTdHlsZVNoZWV0czsKLSAgICBjb2xsZWN0QWN0aXZl
U3R5bGVTaGVldHMoYWN0aXZlU3R5bGVTaGVldHMpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4gYWN0aXZlQ1NTU3R5bGVTaGVldHM7Ci0gICAgYWN0aXZlQ1NTU3R5bGVTaGVl
dHMuYXBwZW5kVmVjdG9yKGluamVjdGVkQXV0aG9yU3R5bGVTaGVldHMoKSk7Ci0gICAgYWN0aXZl
Q1NTU3R5bGVTaGVldHMuYXBwZW5kVmVjdG9yKGRvY3VtZW50QXV0aG9yU3R5bGVTaGVldHMoKSk7
Ci0gICAgZmlsdGVyRW5hYmxlZE5vbmVtcHR5Q1NTU3R5bGVTaGVldHMoYWN0aXZlQ1NTU3R5bGVT
aGVldHMsIGFjdGl2ZVN0eWxlU2hlZXRzKTsKLQotICAgIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBl
IHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlOwotICAgIGJvb2wgcmVxdWlyZXNGdWxsU3R5bGVSZWNh
bGM7Ci0gICAgYW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UodXBkYXRlRmxhZywgYWN0aXZlQ1NTU3R5
bGVTaGVldHMsIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlLCByZXF1aXJlc0Z1bGxTdHlsZVJlY2Fs
Yyk7Ci0KLSAgICBpZiAoc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPT0gUmVjb25zdHJ1Y3QpCi0g
ICAgICAgIG1fZG9jdW1lbnQuY2xlYXJTdHlsZVJlc29sdmVyKCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0eWxl
UmVzb2x2ZXIoKTsKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID09IFJlc2V0
KSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnJ1bGVTZXRzKCkucmVzZXRBdXRob3JTdHls
ZSgpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cygw
LCBhY3RpdmVDU1NTdHlsZVNoZWV0cyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBB
U1NFUlQoc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPT0gQWRkaXRpdmUpOwotICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhtX2FjdGl2ZUF1dGhvclN0eWxl
U2hlZXRzLnNpemUoKSwgYWN0aXZlQ1NTU3R5bGVTaGVldHMpOwotICAgICAgICB9Ci0gICAgICAg
IHJlc2V0Q1NTRmVhdHVyZUZsYWdzKCk7Ci0gICAgfQotCi0gICAgbV93ZWFrQ29weU9mQWN0aXZl
U3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwID0gbnVsbHB0cjsKLSAgICBtX2FjdGl2ZUF1dGhv
clN0eWxlU2hlZXRzLnN3YXAoYWN0aXZlQ1NTU3R5bGVTaGVldHMpOwotICAgIG1fc3R5bGVTaGVl
dHNGb3JTdHlsZVNoZWV0TGlzdC5zd2FwKGFjdGl2ZVN0eWxlU2hlZXRzKTsKLQotICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6YWN0aXZlU3R5bGVTaGVldHNVcGRhdGVkKG1fZG9jdW1lbnQp
OwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBzaGVldCA6IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVl
dHMpIHsKLSAgICAgICAgaWYgKHNoZWV0LT5jb250ZW50cygpLnVzZXNSZW1Vbml0cygpKQotICAg
ICAgICAgICAgbV91c2VzUmVtVW5pdHMgPSB0cnVlOwotICAgICAgICBpZiAoc2hlZXQtPmNvbnRl
bnRzKCkudXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpKQotICAgICAgICAgICAgbV91c2VzU3R5
bGVCYXNlZEVkaXRhYmlsaXR5ID0gdHJ1ZTsKLSAgICB9Ci0gICAgbV9wZW5kaW5nVXBkYXRlVHlw
ZSA9IE5vVXBkYXRlOwotCi0gICAgcmV0dXJuIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjOwotfQot
Ci1jb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uOjphY3RpdmVTdHlsZVNoZWV0c0Zvckluc3BlY3RvcigpIGNvbnN0Ci17Ci0gICAg
VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gcmVzdWx0OwotCi0gICAgcmVzdWx0LmFwcGVu
ZFZlY3RvcihpbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzKCkpOwotICAgIHJlc3VsdC5hcHBlbmRW
ZWN0b3IoZG9jdW1lbnRBdXRob3JTdHlsZVNoZWV0cygpKTsKLQotICAgIGZvciAoYXV0byYgc3R5
bGVTaGVldCA6IG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdCkgewotICAgICAgICBpZiAo
IWlzPENTU1N0eWxlU2hlZXQ+KCpzdHlsZVNoZWV0KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIENTU1N0eWxlU2hlZXQmIHNoZWV0ID0gZG93bmNhc3Q8Q1NTU3R5bGVTaGVldD4o
KnN0eWxlU2hlZXQpOwotICAgICAgICBpZiAoc2hlZXQuZGlzYWJsZWQoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoJnNoZWV0KTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246
OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RM
b29rdXApIHsKLSAgICAgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0
TG9va3VwID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4o
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYWN0aXZlQXV0aG9yU3R5bGVT
aGVldHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNo
ZWV0TGlzdEZvckZhc3RMb29rdXAtPmFkZChtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzW2ldLmdl
dCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0
Rm9yRmFzdExvb2t1cC0+Y29udGFpbnMoc2hlZXQpOwotfQotCi12b2lkIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb246OmRldGFjaEZyb21Eb2N1bWVudCgpCit2b2lkIEV4dGVuc2lvblN0eWxl
U2hlZXRzOjpkZXRhY2hGcm9tRG9jdW1lbnQoKQogewogICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQp
CiAgICAgICAgIG1fcGFnZVVzZXJTaGVldC0+ZGV0YWNoRnJvbURvY3VtZW50KCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHNbaV0tPmRldGFjaEZyb21Eb2N1
bWVudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2luamVjdGVkQXV0aG9yU3R5
bGVTaGVldHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0
c1tpXS0+ZGV0YWNoRnJvbURvY3VtZW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdXNlclN0eWxlU2hlZXRzLnNpemUoKTsgKytpKQotICAgICAgICBtX3VzZXJTdHlsZVNoZWV0
c1tpXS0+ZGV0YWNoRnJvbURvY3VtZW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXV0aG9yU3R5bGVT
aGVldHNbaV0tPmRldGFjaEZyb21Eb2N1bWVudCgpOworICAgIGZvciAoYXV0byYgc2hlZXQgOiBt
X2luamVjdGVkVXNlclN0eWxlU2hlZXRzKQorICAgICAgICBzaGVldC0+ZGV0YWNoRnJvbURvY3Vt
ZW50KCk7CisgICAgZm9yIChhdXRvJiBzaGVldCA6ICBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVl
dHMpCisgICAgICAgIHNoZWV0LT5kZXRhY2hGcm9tRG9jdW1lbnQoKTsKKyAgICBmb3IgKGF1dG8m
IHNoZWV0IDogbV91c2VyU3R5bGVTaGVldHMpCisgICAgICAgIHNoZWV0LT5kZXRhY2hGcm9tRG9j
dW1lbnQoKTsKKyAgICBmb3IgKGF1dG8mIHNoZWV0IDogbV9hdXRob3JTdHlsZVNoZWV0c0ZvclRl
c3RpbmcpCisgICAgICAgIHNoZWV0LT5kZXRhY2hGcm9tRG9jdW1lbnQoKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRzLmgJKHJldmlzaW9uIDE5
MDA3NCkJKGZyb20gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b24uaDoxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXh0ZW5zaW9uU3R5bGVTaGVldHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERp
cmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA2IEFsZXhl
eSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbl9o
CisjZGVmaW5lIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb25faAorCisjaW5jbHVkZSAiVGlt
ZXIuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQor
I2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmgiCisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRG9jdW1lbnQ7Citj
bGFzcyBOb2RlOworY2xhc3MgU3R5bGVTaGVldDsKK2NsYXNzIFN0eWxlU2hlZXRDb250ZW50czsK
K2NsYXNzIFN0eWxlU2hlZXRMaXN0OworCitjbGFzcyBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKERvY3VtZW50Jik7CisKKyAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdDsgfQorCisgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGFjdGl2ZUF1dGhvclN0eWxlU2hl
ZXRzKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0czsgfQorCisgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gYWN0aXZlU3R5bGVTaGVldHNGb3JJ
bnNwZWN0b3IoKSBjb25zdDsKKworICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQoKTsK
KyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgZG9jdW1lbnRVc2VyU3R5
bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTdHlsZVNoZWV0czsgfQorICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBkb2N1bWVudEF1dGhvclN0eWxlU2hlZXRz
KCkgY29uc3QgeyByZXR1cm4gbV9hdXRob3JTdHlsZVNoZWV0czsgfQorICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBpbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpIGNvbnN0
OworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBpbmplY3RlZEF1dGhv
clN0eWxlU2hlZXRzKCkgY29uc3Q7CisKKyAgICB2b2lkIGFkZFN0eWxlU2hlZXRDYW5kaWRhdGVO
b2RlKE5vZGUmLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CisgICAgdm9pZCByZW1vdmVTdHlsZVNo
ZWV0Q2FuZGlkYXRlTm9kZShOb2RlJik7CisKKyAgICB2b2lkIGNsZWFyUGFnZVVzZXJTaGVldCgp
OworICAgIHZvaWQgdXBkYXRlUGFnZVVzZXJTaGVldCgpOworICAgIHZvaWQgaW52YWxpZGF0ZUlu
amVjdGVkU3R5bGVTaGVldENhY2hlKCk7CisgICAgdm9pZCB1cGRhdGVJbmplY3RlZFN0eWxlU2hl
ZXRDYWNoZSgpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRBdXRob3JTaGVl
dChSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmIGF1dGhvclNoZWV0KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFkZFVzZXJTaGVldChSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmIHVzZXJTaGVl
dCk7CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIHZvaWQgYWRkRGlzcGxh
eU5vbmVTZWxlY3Rvcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIHVpbnQzMl90IHNlbGVjdG9ySUQpOworICAgIHZvaWQgbWF5YmVBZGRDb250ZW50RXh0
ZW5zaW9uU2hlZXQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBTdHlsZVNoZWV0Q29udGVudHMm
KTsKKyNlbmRpZgorCisgICAgZW51bSBVcGRhdGVGbGFnIHsgTm9VcGRhdGUgPSAwLCBPcHRpbWl6
ZWRVcGRhdGUsIEZ1bGxVcGRhdGUgfTsKKworICAgIFVwZGF0ZUZsYWcgcGVuZGluZ1VwZGF0ZVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdVcGRhdGVUeXBlOyB9CisgICAgdm9pZCBzZXRQ
ZW5kaW5nVXBkYXRlVHlwZShVcGRhdGVGbGFnIHVwZGF0ZVR5cGUpCisgICAgeworICAgICAgICBp
ZiAodXBkYXRlVHlwZSA+IG1fcGVuZGluZ1VwZGF0ZVR5cGUpCisgICAgICAgICAgICBtX3BlbmRp
bmdVcGRhdGVUeXBlID0gdXBkYXRlVHlwZTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoUGVuZGlu
Z1VwZGF0ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKG1fcGVuZGluZ1VwZGF0ZVR5cGUgIT0gTm9V
cGRhdGUpCisgICAgICAgICAgICB1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhtX3BlbmRpbmdVcGRh
dGVUeXBlKTsKKyAgICB9CisKKyAgICBib29sIHVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKFVwZGF0
ZUZsYWcpOworCisgICAgU3RyaW5nIHByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZTsgfQorICAgIFN0cmluZyBzZWxl
Y3RlZFN0eWxlc2hlZXRTZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZFN0eWxlc2hl
ZXRTZXROYW1lOyB9CisgICAgdm9pZCBzZXRQcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZShjb25z
dCBTdHJpbmcmIG5hbWUpIHsgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSA9IG5hbWU7IH0K
KyAgICB2b2lkIHNldFNlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1l
KSB7IG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZSA9IG5hbWU7IH0KKworICAgIHZvaWQgYWRk
UGVuZGluZ1NoZWV0KCkgeyBtX3BlbmRpbmdTdHlsZXNoZWV0cysrOyB9CisgICAgZW51bSBSZW1v
dmVQZW5kaW5nU2hlZXROb3RpZmljYXRpb25UeXBlIHsKKyAgICAgICAgUmVtb3ZlUGVuZGluZ1No
ZWV0Tm90aWZ5SW1tZWRpYXRlbHksCisgICAgICAgIFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUxh
dGVyCisgICAgfTsKKyAgICB2b2lkIHJlbW92ZVBlbmRpbmdTaGVldChSZW1vdmVQZW5kaW5nU2hl
ZXROb3RpZmljYXRpb25UeXBlID0gUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5SW1tZWRpYXRlbHkp
OworCisgICAgYm9vbCBoYXNQZW5kaW5nU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5n
U3R5bGVzaGVldHMgPiAwOyB9CisKKyAgICBib29sIHVzZXNGaXJzdExpbmVSdWxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlc0ZpcnN0TGluZVJ1bGVzOyB9CisgICAgYm9vbCB1c2VzRmlyc3RMZXR0
ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXM7IH0KKyAgICBi
b29sIHVzZXNSZW1Vbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1JlbVVuaXRzOyB9CisgICAg
dm9pZCBzZXRVc2VzUmVtVW5pdChib29sIGIpIHsgbV91c2VzUmVtVW5pdHMgPSBiOyB9CisgICAg
Ym9vbCB1c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KCkgeyByZXR1cm4gbV91c2VzU3R5bGVCYXNl
ZEVkaXRhYmlsaXR5OyB9CisgICAgdm9pZCBzZXRVc2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KGJv
b2wgYikgeyBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkgPSBiOyB9CisKKyAgICB2b2lkIGNv
bWJpbmVDU1NGZWF0dXJlRmxhZ3MoKTsKKyAgICB2b2lkIHJlc2V0Q1NTRmVhdHVyZUZsYWdzKCk7
CisKKyAgICBib29sIGFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMoY29uc3QgQ1NTU3R5bGVTaGVl
dCopIGNvbnN0OworCisgICAgdm9pZCBkZXRhY2hGcm9tRG9jdW1lbnQoKTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIGNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hl
ZXQ+PiYpOworICAgIGVudW0gU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgeworICAgICAgICBSZWNv
bnN0cnVjdCwKKyAgICAgICAgUmVzZXQsCisgICAgICAgIEFkZGl0aXZlCisgICAgfTsKKyAgICB2
b2lkIGFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKFVwZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4+JiBuZXdTdHlsZXNoZWV0cywgU3R5bGVSZXNvbHZlclVwZGF0ZVR5
cGUmLCBib29sJiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyk7CisKKyAgICB2b2lkIHN0eWxlUmVz
b2x2ZXJDaGFuZ2VkVGltZXJGaXJlZCgpOworCisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CisK
KyAgICBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVl
dExpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9hY3RpdmVBdXRob3JT
dHlsZVNoZWV0czsKKworICAgIC8vIFRoaXMgaXMgYSBtaXJyb3Igb2YgbV9hY3RpdmVBdXRob3JT
dHlsZVNoZWV0cyB0aGF0IGdldHMgcG9wdWxhdGVkIG9uIGRlbWFuZCBmb3IgYWN0aXZlU3R5bGVT
aGVldHNDb250YWlucygpLgorICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8Y29u
c3QgQ1NTU3R5bGVTaGVldCo+PiBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZh
c3RMb29rdXA7CisKKyAgICAvLyBUcmFjayB0aGUgbnVtYmVyIG9mIGN1cnJlbnRseSBsb2FkaW5n
IHRvcC1sZXZlbCBzdHlsZXNoZWV0cyBuZWVkZWQgZm9yIHJlbmRlcmluZy4KKyAgICAvLyBTaGVl
dHMgbG9hZGVkIHVzaW5nIHRoZSBAaW1wb3J0IGRpcmVjdGl2ZSBhcmUgbm90IGluY2x1ZGVkIGlu
IHRoaXMgY291bnQuCisgICAgLy8gV2UgdXNlIHRoaXMgY291bnQgb2YgcGVuZGluZyBzaGVldHMg
dG8gZGV0ZWN0IHdoZW4gd2UgY2FuIGJlZ2luIGF0dGFjaGluZworICAgIC8vIGVsZW1lbnRzIGFu
ZCB3aGVuIGl0IGlzIHNhZmUgdG8gZXhlY3V0ZSBzY3JpcHRzLgorICAgIGludCBtX3BlbmRpbmdT
dHlsZXNoZWV0czsKKworICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3BhZ2VVc2VyU2hlZXQ7
CisKKyAgICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG1faW5qZWN0ZWRV
c2VyU3R5bGVTaGVldHM7CisgICAgbXV0YWJsZSBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
PiBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHM7CisgICAgbXV0YWJsZSBib29sIG1faW5qZWN0
ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZDsKKworICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4+IG1fdXNlclN0eWxlU2hlZXRzOworICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+
IG1fYXV0aG9yU3R5bGVTaGVldHM7CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQor
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG1fY29udGVudEV4dGVu
c2lvblNoZWV0czsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPENvbnRlbnRFeHRlbnNpb25z
OjpDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldD4+IG1fY29udGVudEV4dGVuc2lvblNlbGVjdG9y
U2hlZXRzOworI2VuZGlmCisKKyAgICBib29sIG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQ7
CisgICAgVXBkYXRlRmxhZyBtX3BlbmRpbmdVcGRhdGVUeXBlOworCisgICAgdHlwZWRlZiBMaXN0
SGFzaFNldDxOb2RlKj4gU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0OworICAgIFN0eWxl
U2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldCBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2RlczsKKwor
ICAgIFN0cmluZyBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lOworICAgIFN0cmluZyBtX3Nl
bGVjdGVkU3R5bGVzaGVldFNldE5hbWU7CisKKyAgICBib29sIG1fdXNlc0ZpcnN0TGluZVJ1bGVz
OworICAgIGJvb2wgbV91c2VzRmlyc3RMZXR0ZXJSdWxlczsKKyAgICBib29sIG1fdXNlc1JlbVVu
aXRzOworICAgIGJvb2wgbV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5OworCisgICAgVGltZXIg
bV9zdHlsZVJlc29sdmVyQ2hhbmdlZFRpbWVyOworfTsKKworfQorCisjZW5kaWYKKwpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRzLmgJKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25TdHlsZVNoZWV0cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAsIDIwMTItMjAxMywgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLykKICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMjUsOCArMjUsOCBAQAogICoKICAqLwogCi0jaWZu
ZGVmIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb25faAotI2RlZmluZSBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uX2gKKyNpZm5kZWYgRXh0ZW5zaW9uU3R5bGVTaGVldHNfaAorI2RlZmlu
ZSBFeHRlbnNpb25TdHlsZVNoZWV0c19oCiAKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUg
PG1lbW9yeT4KQEAgLTUwLDEzNyArNTAsNTIgQEAgY2xhc3MgU3R5bGVTaGVldDsKIGNsYXNzIFN0
eWxlU2hlZXRDb250ZW50czsKIGNsYXNzIFN0eWxlU2hlZXRMaXN0OwogCi1jbGFzcyBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uIHsKK2NsYXNzIEV4dGVuc2lvblN0eWxlU2hlZXRzIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uKERvY3VtZW50Jik7Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlU2hlZXQ+PiYgc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdDsgfQotCi0gICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGFjdGl2ZUF1dGhvclN0eWxlU2hlZXRzKCkgY29u
c3QgeyByZXR1cm4gbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0czsgfQotCi0gICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gYWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3Io
KSBjb25zdDsKKyAgICBleHBsaWNpdCBFeHRlbnNpb25TdHlsZVNoZWV0cyhEb2N1bWVudCYpOwog
CiAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCgpOwogICAgIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBkb2N1bWVudFVzZXJTdHlsZVNoZWV0cygpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlclN0eWxlU2hlZXRzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4mIGRvY3VtZW50QXV0aG9yU3R5bGVTaGVldHMoKSBjb25zdCB7IHJldHVybiBt
X2F1dGhvclN0eWxlU2hlZXRzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0Pj4mIGluamVjdGVkVXNlclN0eWxlU2hlZXRzKCkgY29uc3Q7CiAgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGluamVjdGVkQXV0aG9yU3R5bGVTaGVldHMoKSBjb25z
dDsKLQotICAgIHZvaWQgYWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYsIGJvb2wgY3Jl
YXRlZEJ5UGFyc2VyKTsKLSAgICB2b2lkIHJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5v
ZGUmKTsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgYXV0aG9yU3R5
bGVTaGVldHNGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hdXRob3JTdHlsZVNoZWV0c0Zv
clRlc3Rpbmc7IH0KIAogICAgIHZvaWQgY2xlYXJQYWdlVXNlclNoZWV0KCk7CiAgICAgdm9pZCB1
cGRhdGVQYWdlVXNlclNoZWV0KCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNo
ZWV0Q2FjaGUoKTsKICAgICB2b2lkIHVwZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCkgY29u
c3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEF1dGhvclNoZWV0KFJlZjxTdHlsZVNo
ZWV0Q29udGVudHM+JiYgYXV0aG9yU2hlZXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRk
VXNlclNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgdXNlclNoZWV0KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+
JiYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRBdXRob3JTdHlsZVNoZWV0Rm9yVGVz
dGluZyhSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiAgICAgdm9pZCBhZGREaXNwbGF5Tm9uZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgdWludDMyX3Qgc2VsZWN0b3JJRCk7
CiAgICAgdm9pZCBtYXliZUFkZENvbnRlbnRFeHRlbnNpb25TaGVldChjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXIsIFN0eWxlU2hlZXRDb250ZW50cyYpOwogI2VuZGlmCiAKLSAgICBlbnVtIFVwZGF0
ZUZsYWcgeyBOb1VwZGF0ZSA9IDAsIE9wdGltaXplZFVwZGF0ZSwgRnVsbFVwZGF0ZSB9OwotCi0g
ICAgVXBkYXRlRmxhZyBwZW5kaW5nVXBkYXRlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGlu
Z1VwZGF0ZVR5cGU7IH0KLSAgICB2b2lkIHNldFBlbmRpbmdVcGRhdGVUeXBlKFVwZGF0ZUZsYWcg
dXBkYXRlVHlwZSkKLSAgICB7Ci0gICAgICAgIGlmICh1cGRhdGVUeXBlID4gbV9wZW5kaW5nVXBk
YXRlVHlwZSkKLSAgICAgICAgICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSB1cGRhdGVUeXBlOwot
ICAgIH0KLQotICAgIHZvaWQgZmx1c2hQZW5kaW5nVXBkYXRlcygpCi0gICAgewotICAgICAgICBp
ZiAobV9wZW5kaW5nVXBkYXRlVHlwZSAhPSBOb1VwZGF0ZSkKLSAgICAgICAgICAgIHVwZGF0ZUFj
dGl2ZVN0eWxlU2hlZXRzKG1fcGVuZGluZ1VwZGF0ZVR5cGUpOwotICAgIH0KLQotICAgIGJvb2wg
dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoVXBkYXRlRmxhZyk7Ci0KLSAgICBTdHJpbmcgcHJlZmVy
cmVkU3R5bGVzaGVldFNldE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3ByZWZlcnJlZFN0eWxlc2hl
ZXRTZXROYW1lOyB9Ci0gICAgU3RyaW5nIHNlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGVkU3R5bGVzaGVldFNldE5hbWU7IH0KLSAgICB2b2lkIHNldFBy
ZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX3ByZWZlcnJl
ZFN0eWxlc2hlZXRTZXROYW1lID0gbmFtZTsgfQotICAgIHZvaWQgc2V0U2VsZWN0ZWRTdHlsZXNo
ZWV0U2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXRO
YW1lID0gbmFtZTsgfQotCi0gICAgdm9pZCBhZGRQZW5kaW5nU2hlZXQoKSB7IG1fcGVuZGluZ1N0
eWxlc2hlZXRzKys7IH0KLSAgICBlbnVtIFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5
cGUgewotICAgICAgICBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlJbW1lZGlhdGVseSwKLSAgICAg
ICAgUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0ZXIKLSAgICB9OwotICAgIHZvaWQgcmVtb3Zl
UGVuZGluZ1NoZWV0KFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUgPSBSZW1vdmVQ
ZW5kaW5nU2hlZXROb3RpZnlJbW1lZGlhdGVseSk7Ci0KLSAgICBib29sIGhhc1BlbmRpbmdTaGVl
dHMoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdTdHlsZXNoZWV0cyA+IDA7IH0KLQotICAgIGJv
b2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRmlyc3RMaW5lUnVs
ZXM7IH0KLSAgICBib29sIHVzZXNGaXJzdExldHRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV91
c2VzRmlyc3RMZXR0ZXJSdWxlczsgfQotICAgIGJvb2wgdXNlc1JlbVVuaXRzKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VzUmVtVW5pdHM7IH0KLSAgICB2b2lkIHNldFVzZXNSZW1Vbml0KGJvb2wgYikg
eyBtX3VzZXNSZW1Vbml0cyA9IGI7IH0KLSAgICBib29sIHVzZXNTdHlsZUJhc2VkRWRpdGFiaWxp
dHkoKSB7IHJldHVybiBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHk7IH0KLSAgICB2b2lkIHNl
dFVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoYm9vbCBiKSB7IG1fdXNlc1N0eWxlQmFzZWRFZGl0
YWJpbGl0eSA9IGI7IH0KLQotICAgIHZvaWQgY29tYmluZUNTU0ZlYXR1cmVGbGFncygpOwotICAg
IHZvaWQgcmVzZXRDU1NGZWF0dXJlRmxhZ3MoKTsKLQotICAgIGJvb2wgYWN0aXZlU3R5bGVTaGVl
dHNDb250YWlucyhjb25zdCBDU1NTdHlsZVNoZWV0KikgY29uc3Q7Ci0KICAgICB2b2lkIGRldGFj
aEZyb21Eb2N1bWVudCgpOwogCiBwcml2YXRlOgotICAgIHZvaWQgY29sbGVjdEFjdGl2ZVN0eWxl
U2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+Jik7Ci0gICAgZW51bSBTdHlsZVJlc29s
dmVyVXBkYXRlVHlwZSB7Ci0gICAgICAgIFJlY29uc3RydWN0LAotICAgICAgICBSZXNldCwKLSAg
ICAgICAgQWRkaXRpdmUKLSAgICB9OwotICAgIHZvaWQgYW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2Uo
VXBkYXRlRmxhZywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIG5ld1N0eWxl
c2hlZXRzLCBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSYsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxl
UmVjYWxjKTsKLQogICAgIHZvaWQgc3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lckZpcmVkKCk7CiAK
ICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIAotICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVl
dD4+IG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdDsKLSAgICBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+PiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzOwotCi0gICAgLy8gVGhpcyBp
cyBhIG1pcnJvciBvZiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hlZXRzIHRoYXQgZ2V0cyBwb3B1bGF0
ZWQgb24gZGVtYW5kIGZvciBhY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5zKCkuCi0gICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+IG1fd2Vha0Nv
cHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cDsKLQotICAgIC8vIFRyYWNrIHRo
ZSBudW1iZXIgb2YgY3VycmVudGx5IGxvYWRpbmcgdG9wLWxldmVsIHN0eWxlc2hlZXRzIG5lZWRl
ZCBmb3IgcmVuZGVyaW5nLgotICAgIC8vIFNoZWV0cyBsb2FkZWQgdXNpbmcgdGhlIEBpbXBvcnQg
ZGlyZWN0aXZlIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBjb3VudC4KLSAgICAvLyBXZSB1c2Ug
dGhpcyBjb3VudCBvZiBwZW5kaW5nIHNoZWV0cyB0byBkZXRlY3Qgd2hlbiB3ZSBjYW4gYmVnaW4g
YXR0YWNoaW5nCi0gICAgLy8gZWxlbWVudHMgYW5kIHdoZW4gaXQgaXMgc2FmZSB0byBleGVjdXRl
IHNjcmlwdHMuCi0gICAgaW50IG1fcGVuZGluZ1N0eWxlc2hlZXRzOwotCiAgICAgUmVmUHRyPENT
U1N0eWxlU2hlZXQ+IG1fcGFnZVVzZXJTaGVldDsKIAogICAgIG11dGFibGUgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNoZWV0Pj4gbV9pbmplY3RlZFVzZXJTdHlsZVNoZWV0czsKICAgICBtdXRhYmxl
IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG1faW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0
czsKLSAgICBtdXRhYmxlIGJvb2wgbV9pbmplY3RlZFN0eWxlU2hlZXRDYWNoZVZhbGlkOworICAg
IG11dGFibGUgYm9vbCBtX2luamVjdGVkU3R5bGVTaGVldENhY2hlVmFsaWQgeyBmYWxzZSB9Owog
CiAgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV91c2VyU3R5bGVTaGVldHM7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9hdXRob3JTdHlsZVNoZWV0czsKKyAg
ICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2F1dGhvclN0eWxlU2hlZXRzRm9yVGVz
dGluZzsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9jb250ZW50RXh0ZW5zaW9uU2hlZXRzOwogICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNp
b25TdHlsZVNoZWV0Pj4gbV9jb250ZW50RXh0ZW5zaW9uU2VsZWN0b3JTaGVldHM7CiAjZW5kaWYK
IAotICAgIGJvb2wgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldDsKLSAgICBVcGRhdGVGbGFn
IG1fcGVuZGluZ1VwZGF0ZVR5cGU7Ci0KLSAgICB0eXBlZGVmIExpc3RIYXNoU2V0PE5vZGUqPiBT
dHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQ7Ci0gICAgU3R5bGVTaGVldENhbmRpZGF0ZUxp
c3RIYXNoU2V0IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzOwotCi0gICAgU3RyaW5nIG1fcHJl
ZmVycmVkU3R5bGVzaGVldFNldE5hbWU7Ci0gICAgU3RyaW5nIG1fc2VsZWN0ZWRTdHlsZXNoZWV0
U2V0TmFtZTsKLQotICAgIGJvb2wgbV91c2VzRmlyc3RMaW5lUnVsZXM7Ci0gICAgYm9vbCBtX3Vz
ZXNGaXJzdExldHRlclJ1bGVzOwotICAgIGJvb2wgbV91c2VzUmVtVW5pdHM7Ci0gICAgYm9vbCBt
X3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHk7Ci0KICAgICBUaW1lciBtX3N0eWxlUmVzb2x2ZXJD
aGFuZ2VkVGltZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVT
aGVldE93bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5
bGVTaGVldE93bmVyLmNwcAkocmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0lubGluZVN0eWxlU2hlZXRPd25lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbmxpbmVTdHlsZVNoZWV0T3duZXIu
aCIKIAorI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ29udGVudFNl
Y3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIk1lZGlhTGlz
dC5oIgpAQCAtNDcsNyArNDgsNyBAQCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6On5JbmxpbmVTdHls
ZVNoZWV0CiAKIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjppbnNlcnRlZEludG9Eb2N1bWVu
dChEb2N1bWVudCYgZG9jdW1lbnQsIEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgZG9jdW1lbnQu
c3R5bGVTaGVldENvbGxlY3Rpb24oKS5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50
LCBtX2lzUGFyc2luZ0NoaWxkcmVuKTsKKyAgICBkb2N1bWVudC5hdXRob3JTdHlsZVNoZWV0cygp
LmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKGVsZW1lbnQsIG1faXNQYXJzaW5nQ2hpbGRyZW4p
OwogCiAgICAgaWYgKG1faXNQYXJzaW5nQ2hpbGRyZW4pCiAgICAgICAgIHJldHVybjsKQEAgLTU2
LDcgKzU3LDcgQEAgdm9pZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6Omluc2VydGVkSW50bwogCiB2
b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1bWVudCYg
ZG9jdW1lbnQsIEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgZG9jdW1lbnQuc3R5bGVTaGVldENv
bGxlY3Rpb24oKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50KTsKKyAgICBk
b2N1bWVudC5hdXRob3JTdHlsZVNoZWV0cygpLnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2Rl
KGVsZW1lbnQpOwogCiAgICAgaWYgKG1fc2hlZXQpCiAgICAgICAgIGNsZWFyU2hlZXQoKTsKQEAg
LTczLDcgKzc0LDcgQEAgdm9pZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNsZWFyRG9jdW1lbgog
CiAgICAgaWYgKCFlbGVtZW50LmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGRv
Y3VtZW50LnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5v
ZGUoZWxlbWVudCk7CisgICAgZG9jdW1lbnQuYXV0aG9yU3R5bGVTaGVldHMoKS5yZW1vdmVTdHls
ZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50KTsKIH0KIAogdm9pZCBJbmxpbmVTdHlsZVNoZWV0
T3duZXI6OmNoaWxkcmVuQ2hhbmdlZChFbGVtZW50JiBlbGVtZW50KQpAQCAtMTE3LDcgKzExOCw3
IEBAIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpjcmVhdGVTaGVldCgKICAgICBEb2N1bWVu
dCYgZG9jdW1lbnQgPSBlbGVtZW50LmRvY3VtZW50KCk7CiAgICAgaWYgKG1fc2hlZXQpIHsKICAg
ICAgICAgaWYgKG1fc2hlZXQtPmlzTG9hZGluZygpKQotICAgICAgICAgICAgZG9jdW1lbnQuc3R5
bGVTaGVldENvbGxlY3Rpb24oKS5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKKyAgICAgICAgICAgIGRv
Y3VtZW50LmF1dGhvclN0eWxlU2hlZXRzKCkucmVtb3ZlUGVuZGluZ1NoZWV0KCk7CiAgICAgICAg
IGNsZWFyU2hlZXQoKTsKICAgICB9CiAKQEAgLTEzNyw3ICsxMzgsNyBAQCB2b2lkIElubGluZVN0
eWxlU2hlZXRPd25lcjo6Y3JlYXRlU2hlZXQoCiAgICAgaWYgKCFzY3JlZW5FdmFsLmV2YWwobWVk
aWFRdWVyaWVzLmdldCgpKSAmJiAhcHJpbnRFdmFsLmV2YWwobWVkaWFRdWVyaWVzLmdldCgpKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgZG9jdW1lbnQuc3R5bGVTaGVldENvbGxlY3Rpb24oKS5h
ZGRQZW5kaW5nU2hlZXQoKTsKKyAgICBkb2N1bWVudC5hdXRob3JTdHlsZVNoZWV0cygpLmFkZFBl
bmRpbmdTaGVldCgpOwogCiAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKIApAQCAtMTY0LDEzICsxNjUs
MTMgQEAgYm9vbCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OnNoZWV0TG9hZGVkKAogICAgIGlmIChp
c0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZG9jdW1lbnQuc3R5bGVT
aGVldENvbGxlY3Rpb24oKS5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKKyAgICBkb2N1bWVudC5hdXRo
b3JTdHlsZVNoZWV0cygpLnJlbW92ZVBlbmRpbmdTaGVldCgpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0
KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBkb2N1bWVudC5zdHlsZVNoZWV0Q29sbGVjdGlv
bigpLmFkZFBlbmRpbmdTaGVldCgpOworICAgIGRvY3VtZW50LmF1dGhvclN0eWxlU2hlZXRzKCku
YWRkUGVuZGluZ1NoZWV0KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
NiArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5oIgogCisjaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJD
U1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCkBAIC02Niw3ICs2Nyw3IEBAIFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjo6flByb2Nlc3NpbmdJbnN0cnUKICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVt
b3ZlQ2xpZW50KHRoaXMpOwogCiAgICAgaWYgKGluRG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1l
bnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2Rl
KCp0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0cygpLnJlbW92ZVN0
eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzKTsKIH0KIAogU3RyaW5nIFByb2Nlc3NpbmdJbnN0
cnVjdGlvbjo6bm9kZU5hbWUoKSBjb25zdApAQCAtMTQyLDcgKzE0Myw3IEBAIHZvaWQgUHJvY2Vz
c2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2gKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1fbG9hZGluZyA9IHRydWU7Ci0gICAgICAgICAgICBk
b2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuYWRkUGVuZGluZ1NoZWV0KCk7CisgICAg
ICAgICAgICBkb2N1bWVudCgpLmF1dGhvclN0eWxlU2hlZXRzKCkuYWRkUGVuZGluZ1NoZWV0KCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KFJlc291cmNlUmVxdWVzdChkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGhyZWYpKSk7CiAjaWYgRU5B
QkxFKFhTTFQpCkBAIC0xNjMsNyArMTY0LDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OmNoZWNrU3R5bGVTaAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhl
IHJlcXVlc3QgbWF5IGhhdmUgYmVlbiBkZW5pZWQgaWYgKGZvciBleGFtcGxlKSB0aGUgc3R5bGVz
aGVldCBpcyBsb2NhbCBhbmQgdGhlIGRvY3VtZW50IGlzIHJlbW90ZS4KICAgICAgICAgICAgICAg
ICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2hl
ZXRDb2xsZWN0aW9uKCkucmVtb3ZlUGVuZGluZ1NoZWV0KCk7CisgICAgICAgICAgICAgICAgZG9j
dW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0cygpLnJlbW92ZVBlbmRpbmdTaGVldCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTgxLDcgKzE4Miw3IEBAIGJvb2wgUHJvY2Vz
c2luZ0luc3RydWN0aW9uOjppc0xvYWRpbmcoKSAKIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9u
OjpzaGVldExvYWRlZCgpCiB7CiAgICAgaWYgKCFpc0xvYWRpbmcoKSkgewotICAgICAgICBkb2N1
bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkucmVtb3ZlUGVuZGluZ1NoZWV0KCk7CisgICAg
ICAgIGRvY3VtZW50KCkuYXV0aG9yU3R5bGVTaGVldHMoKS5yZW1vdmVQZW5kaW5nU2hlZXQoKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTI2NSw3
ICsyNjYsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFByb2NlCiAgICAg
Q2hhcmFjdGVyRGF0YTo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KTsKICAgICBpZiAoIWlu
c2VydGlvblBvaW50LmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7
Ci0gICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLmFkZFN0eWxlU2hlZXRDYW5k
aWRhdGVOb2RlKCp0aGlzLCBtX2NyZWF0ZWRCeVBhcnNlcik7CisgICAgZG9jdW1lbnQoKS5hdXRo
b3JTdHlsZVNoZWV0cygpLmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzLCBtX2NyZWF0
ZWRCeVBhcnNlcik7CiAgICAgY2hlY2tTdHlsZVNoZWV0KCk7CiAgICAgcmV0dXJuIEluc2VydGlv
bkRvbmU7CiB9CkBAIC0yNzYsNyArMjc3LDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OnJlbW92ZWRGcm9tKAogICAgIGlmICghaW5zZXJ0aW9uUG9pbnQuaW5Eb2N1bWVudCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigp
LnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLmF1
dGhvclN0eWxlU2hlZXRzKCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRoaXMpOwog
CiAgICAgaWYgKG1fc2hlZXQpIHsKICAgICAgICAgQVNTRVJUKG1fc2hlZXQtPm93bmVyTm9kZSgp
ID09IHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAko
cmV2aXNpb24gMTkwMDc0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAKIAogI2luY2x1ZGUgIkF0dHJp
YnV0ZS5oIgogI2luY2x1ZGUgIkF0dHJpYnV0ZURPTVRva2VuTGlzdC5oIgorI2luY2x1ZGUgIkF1
dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
aCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKICNpbmNsdWRl
ICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
QEAgLTk1LDcgKzk1LDcgQEAgSFRNTExpbmtFbGVtZW50Ojp+SFRNTExpbmtFbGVtZW50KCkKICAg
ICAgICAgbV9jYWNoZWRTaGVldC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogCiAgICAgaWYgKGluRG9j
dW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnJlbW92
ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hdXRo
b3JTdHlsZVNoZWV0cygpLnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzKTsKIAog
ICAgIGxpbmtMb2FkRXZlbnRTZW5kZXIoKS5jYW5jZWxFdmVudCgqdGhpcyk7CiB9CkBAIC0yNzks
NyArMjc5LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MTAogICAg
IGlmIChtX2lzSW5TaGFkb3dUcmVlKQogICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIAot
ICAgIGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS5hZGRTdHlsZVNoZWV0Q2FuZGlk
YXRlTm9kZSgqdGhpcywgbV9jcmVhdGVkQnlQYXJzZXIpOworICAgIGRvY3VtZW50KCkuYXV0aG9y
U3R5bGVTaGVldHMoKS5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhpcywgbV9jcmVhdGVk
QnlQYXJzZXIpOwogCiAgICAgcHJvY2VzcygpOwogICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwpA
QCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpyZW1vdmVkRnJvbShDb250
YWkKICAgICAgICAgQVNTRVJUKCFtX3NoZWV0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkucmVtb3ZlU3R5bGVTaGVldENhbmRp
ZGF0ZU5vZGUoKnRoaXMpOworICAgIGRvY3VtZW50KCkuYXV0aG9yU3R5bGVTaGVldHMoKS5yZW1v
dmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhpcyk7CiAKICAgICBpZiAobV9zaGVldCkKICAg
ICAgICAgY2xlYXJTaGVldCgpOwpAQCAtNTA3LDcgKzUwNyw3IEBAIHZvaWQgSFRNTExpbmtFbGVt
ZW50OjphZGRQZW5kaW5nU2hlZXQoUGUKIAogICAgIGlmIChtX3BlbmRpbmdTaGVldFR5cGUgPT0g
SW5hY3RpdmVTaGVldCkKICAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50KCkuc3R5bGVTaGVl
dENvbGxlY3Rpb24oKS5hZGRQZW5kaW5nU2hlZXQoKTsKKyAgICBkb2N1bWVudCgpLmF1dGhvclN0
eWxlU2hlZXRzKCkuYWRkUGVuZGluZ1NoZWV0KCk7CiB9CiAKIHZvaWQgSFRNTExpbmtFbGVtZW50
OjpyZW1vdmVQZW5kaW5nU2hlZXQoUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9uVHlwZSBu
b3RpZmljYXRpb24pCkBAIC01MjAsMTQgKzUyMCwxNCBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6
cmVtb3ZlUGVuZGluZ1NoZWV0CiAKICAgICBpZiAodHlwZSA9PSBJbmFjdGl2ZVNoZWV0KSB7CiAg
ICAgICAgIC8vIERvY3VtZW50IGp1c3QgbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgc2hlZXQgZm9y
IGV4cG9zdXJlIHRocm91Z2ggZG9jdW1lbnQuc3R5bGVTaGVldHMKLSAgICAgICAgZG9jdW1lbnQo
KS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246Ok9wdGltaXplZFVwZGF0ZSk7CisgICAgICAgIGRvY3VtZW50
KCkuYXV0aG9yU3R5bGVTaGVldHMoKS51cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhBdXRob3JTdHls
ZVNoZWV0czo6T3B0aW1pemVkVXBkYXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS5yZW1vdmVQZW5kaW5nU2hlZXQoCisg
ICAgZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0cygpLnJlbW92ZVBlbmRpbmdTaGVldCgKICAg
ICAgICAgbm90aWZpY2F0aW9uID09IFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5
Ci0gICAgICAgID8gRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6UmVtb3ZlUGVuZGluZ1No
ZWV0Tm90aWZ5SW1tZWRpYXRlbHkKLSAgICAgICAgOiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uOjpSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlMYXRlcik7CisgICAgICAgID8gQXV0aG9yU3R5
bGVTaGVldHM6OlJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5CisgICAgICAgIDog
QXV0aG9yU3R5bGVTaGVldHM6OlJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUxhdGVyKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUXVv
dGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxRdW90
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxRdW90ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5j
bHVkZSAiSFRNTFF1b3RlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkocmV2aXNpb24gMTkwMDc0KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckNTU0FnZW50LmgiCiAKKyNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUg
IkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUu
aCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCkBAIC02NjUsNyArNjY2LDcgQEAgdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6Y29sbGVjdEFsbFN0eWxlUwogCiB2b2lkIEluc3BlY3RvckNT
U0FnZW50Ojpjb2xsZWN0QWxsRG9jdW1lbnRTdHlsZVNoZWV0cyhEb2N1bWVudCYgZG9jdW1lbnQs
IFZlY3RvcjxDU1NTdHlsZVNoZWV0Kj4mIHJlc3VsdCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+PiBjc3NTdHlsZVNoZWV0cyA9IGRvY3VtZW50LnN0eWxlU2hlZXRDb2xsZWN0
aW9uKCkuYWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKTsKKyAgICBhdXRvIGNzc1N0eWxl
U2hlZXRzID0gZG9jdW1lbnQuYXV0aG9yU3R5bGVTaGVldHMoKS5hY3RpdmVTdHlsZVNoZWV0c0Zv
ckluc3BlY3RvcigpOwogICAgIGZvciAoYXV0byYgY3NzU3R5bGVTaGVldCA6IGNzc1N0eWxlU2hl
ZXRzKQogICAgICAgICBjb2xsZWN0U3R5bGVTaGVldHMoY3NzU3R5bGVTaGVldC5nZXQoKSwgcmVz
dWx0KTsKIH0KQEAgLTEwMTUsNyArMTAxNiw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1J1bGUKIAogICAgIC8vIFN0eWxlUnVsZXMgcmV0dXJuZWQgYnkgU3R5bGVSZXNv
bHZlcjo6c3R5bGVSdWxlc0ZvckVsZW1lbnQgbGFjayBwYXJlbnQgcG9pbnRlcnMgc2luY2UgdGhh
dCBpbmZvbWF0aW9uIGlzIG5vdCBjaGVhcGx5IGF2YWlsYWJsZS4KICAgICAvLyBTaW5jZSB0aGUg
aW5zcGVjdG9yIHdhbnRzIHRvIHdhbGsgdGhlIHBhcmVudCBjaGFpbiwgd2UgY29uc3RydWN0IHRo
ZSBmdWxsIHdyYXBwZXJzIGhlcmUuCi0gICAgQ1NTU3R5bGVSdWxlKiBjc3NvbVdyYXBwZXIgPSBz
dHlsZVJlc29sdmVyLmluc3BlY3RvckNTU09NV3JhcHBlcnMoKS5nZXRXcmFwcGVyRm9yUnVsZUlu
U2hlZXRzKHN0eWxlUnVsZSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xs
ZWN0aW9uKCkpOworICAgIENTU1N0eWxlUnVsZSogY3Nzb21XcmFwcGVyID0gc3R5bGVSZXNvbHZl
ci5pbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkuZ2V0V3JhcHBlckZvclJ1bGVJblNoZWV0cyhzdHls
ZVJ1bGUsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0cygpLCBzdHls
ZVJlc29sdmVyLmRvY3VtZW50KCkuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKSk7CiAgICAgaWYgKCFj
c3NvbVdyYXBwZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEluc3BlY3RvclN0eWxl
U2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBiaW5kU3R5bGVTaGVldChjc3NvbVdyYXBwZXIt
PnBhcmVudFN0eWxlU2hlZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dExvYWRlci5jcHAJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9E
b2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNs
dWRlICJEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50V3JpdGVyLmgiCiAjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgogI2luY2x1
ZGUgIkZvcm1TdGF0ZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKQEAgLTg0NSwxMyArODQ2LDEzIEBAIHZvaWQgRG9jdW1lbnRMb2Fk
ZXI6OmNvbW1pdERhdGEoY29uc3QgY2gKICAgICB9CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRF
TlNJT05TKQotICAgIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24mIHN0eWxlU2hlZXRDb2xs
ZWN0aW9uID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTaGVldENvbGxlY3Rpb24oKTsKKyAg
ICBhdXRvJiBleHRlbnNpb25TdHlsZVNoZWV0cyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmV4dGVu
c2lvblN0eWxlU2hlZXRzKCk7CiAKICAgICBmb3IgKGF1dG8mIHBlbmRpbmdTdHlsZVNoZWV0IDog
bV9wZW5kaW5nTmFtZWRDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldHMpCi0gICAgICAgIHN0eWxl
U2hlZXRDb2xsZWN0aW9uLm1heWJlQWRkQ29udGVudEV4dGVuc2lvblNoZWV0KHBlbmRpbmdTdHls
ZVNoZWV0LmtleSwgKnBlbmRpbmdTdHlsZVNoZWV0LnZhbHVlKTsKKyAgICAgICAgZXh0ZW5zaW9u
U3R5bGVTaGVldHMubWF5YmVBZGRDb250ZW50RXh0ZW5zaW9uU2hlZXQocGVuZGluZ1N0eWxlU2hl
ZXQua2V5LCAqcGVuZGluZ1N0eWxlU2hlZXQudmFsdWUpOwogICAgIGZvciAoYXV0byYgcGVuZGlu
Z1NlbGVjdG9yRW50cnkgOiBtX3BlbmRpbmdDb250ZW50RXh0ZW5zaW9uRGlzcGxheU5vbmVTZWxl
Y3RvcnMpIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwZW5kaW5nU2VsZWN0b3IgOiBwZW5k
aW5nU2VsZWN0b3JFbnRyeS52YWx1ZSkKLSAgICAgICAgICAgIHN0eWxlU2hlZXRDb2xsZWN0aW9u
LmFkZERpc3BsYXlOb25lU2VsZWN0b3IocGVuZGluZ1NlbGVjdG9yRW50cnkua2V5LCBwZW5kaW5n
U2VsZWN0b3IuZmlyc3QsIHBlbmRpbmdTZWxlY3Rvci5zZWNvbmQpOworICAgICAgICAgICAgZXh0
ZW5zaW9uU3R5bGVTaGVldHMuYWRkRGlzcGxheU5vbmVTZWxlY3RvcihwZW5kaW5nU2VsZWN0b3JF
bnRyeS5rZXksIHBlbmRpbmdTZWxlY3Rvci5maXJzdCwgcGVuZGluZ1NlbGVjdG9yLnNlY29uZCk7
CiAgICAgfQogCiAgICAgbV9wZW5kaW5nTmFtZWRDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldHMu
Y2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMTkwMDc0KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBA
QAogI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
UHJvdmlkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKLSNpbmNs
dWRlICJEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRHJhZ0NvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIK
QEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgorI2lu
Y2x1ZGUgIkV4dGVuc2lvblN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgog
I2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkBA
IC0xMDEzLDcgKzEwMTMsNyBAQCB2b2lkIFBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFu
Z2VkCiAKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBpZiAoZnJhbWUtPmRv
Y3VtZW50KCkpCi0gICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTaGVldENvbGxl
Y3Rpb24oKS51cGRhdGVQYWdlVXNlclNoZWV0KCk7CisgICAgICAgICAgICBmcmFtZS0+ZG9jdW1l
bnQoKS0+ZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS51cGRhdGVQYWdlVXNlclNoZWV0KCk7CiAgICAg
fQogfQogCkBAIC0xNjMxLDcgKzE2MzEsNyBAQCB2b2lkIFBhZ2U6OnNldFVzZXJDb250ZW50Q29u
dHJvbGxlcihVc2VyCiAKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBpZiAo
RG9jdW1lbnQgKmRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGRv
Y3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hl
ZXRDYWNoZSgpOworICAgICAgICAgICAgZG9jdW1lbnQtPmV4dGVuc2lvblN0eWxlU2hlZXRzKCku
aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCk7CiAgICAgICAgICAgICBkb2N1bWVu
dC0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAgICAgICAgIH0KICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCShyZXZpc2lvbiAxOTAwNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDYgQEAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJET01XcmFw
cGVyV29ybGQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCIKICNpbmNs
dWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkSW5mby5oIgpAQCAtMjQzLDcgKzI0NCw3IEBAIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVy
OjppbnZhbGlkYXRlSW4KIHsKICAgICBmb3IgKGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKSB7CiAgICAg
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBmcmFtZS0+ZG9j
dW1lbnQoKS0+c3R5bGVTaGVldENvbGxlY3Rpb24oKS5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNo
ZWV0Q2FjaGUoKTsKKyAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5leHRlbnNpb25TdHls
ZVNoZWV0cygpLmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpOwogICAgICAgICAg
ICAgZnJhbWUtPmRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5
bGUpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODI0LDcgKzI4MjQsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KGJvb2wgCiAgICAgaWYgKGlzUmVwbGFj
ZWQoKSAmJiBsaW5lUG9zaXRpb25Nb2RlID09IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkKICAg
ICAgICAgcmV0dXJuIFJlbmRlckJveDo6bGluZUhlaWdodChmaXJzdExpbmUsIGRpcmVjdGlvbiwg
bGluZVBvc2l0aW9uTW9kZSk7CiAKLSAgICBpZiAoZmlyc3RMaW5lICYmIGRvY3VtZW50KCkuc3R5
bGVTaGVldENvbGxlY3Rpb24oKS51c2VzRmlyc3RMaW5lUnVsZXMoKSkgeworICAgIGlmIChmaXJz
dExpbmUgJiYgdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CiAgICAgICAgIFJlbmRlclN0
eWxlJiBzID0gZmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7CiAgICAgICAg
IGlmICgmcyAhPSAmc3R5bGUoKSkKICAgICAgICAgICAgIHJldHVybiBzLmNvbXB1dGVkTGluZUhl
aWdodCgpOwpAQCAtMzE2MSw3ICszMTYxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Z2V0Rmlyc3RM
ZXR0ZXIoUmVuZGVyTwogICAgIGZpcnN0TGV0dGVyID0gbnVsbHB0cjsKICAgICBmaXJzdExldHRl
ckNvbnRhaW5lciA9IG51bGxwdHI7CiAKLSAgICBpZiAoIWRvY3VtZW50KCkuc3R5bGVTaGVldENv
bGxlY3Rpb24oKS51c2VzRmlyc3RMZXR0ZXJSdWxlcygpKQorICAgIGlmICghdmlldygpLnVzZXNG
aXJzdExldHRlclJ1bGVzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIERvbid0IHJlY3Vy
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gZmlyc3RMaW5lCiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVs
ZW1lbnQ6OnVuY2FjaGVkRmlyc3RMaW5lU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAog
ewotICAgIGlmICghZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnVzZXNGaXJzdExp
bmVSdWxlcygpKQorICAgIGlmICghdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBmaXJzdExpbmVTdHlsZUZvckNhY2hlZFVu
Y2FjaGVkVHlwZShVbmNhY2hlZCwgKnRoaXMsIHN0eWxlKTsKQEAgLTI0MCw3ICsyNDAsNyBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZW50Ojp1CiAKIFJlbmRlclN0eWxlKiBS
ZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS51c2VzRmlyc3RMaW5lUnVsZXMoKSk7
CisgICAgQVNTRVJUKHZpZXcoKS51c2VzRmlyc3RMaW5lUnVsZXMoKSk7CiAKICAgICBSZW5kZXJT
dHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogICAgIGlmIChSZWZQdHI8UmVuZGVyU3R5bGU+
IGZpcnN0TGluZVN0eWxlID0gZmlyc3RMaW5lU3R5bGVGb3JDYWNoZWRVbmNhY2hlZFR5cGUoQ2Fj
aGVkLCAqdGhpcywgJnN0eWxlKSkKQEAgLTI0OSw2ICsyNDksMTEgQEAgUmVuZGVyU3R5bGUqIFJl
bmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TAogICAgIHJldHVybiAmc3R5bGU7CiB9CiAKK1JlbmRl
clN0eWxlJiBSZW5kZXJFbGVtZW50OjpmaXJzdExpbmVTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHZpZXcoKS51c2VzRmlyc3RMaW5lUnVsZXMoKSA/ICpjYWNoZWRGaXJzdExpbmVTdHlsZSgp
IDogc3R5bGUoKTsKK30KKwogU3R5bGVEaWZmZXJlbmNlIFJlbmRlckVsZW1lbnQ6OmFkanVzdFN0
eWxlRGlmZmVyZW5jZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgdW5zaWduZWQgY29udGV4dFNlbnNp
dGl2ZVByb3BlcnRpZXMpIGNvbnN0CiB7CiAgICAgLy8gSWYgdHJhbnNmb3JtIGNoYW5nZWQsIGFu
ZCB3ZSBhcmUgbm90IGNvbXBvc2l0ZWQsIG5lZWQgdG8gZG8gYSBsYXlvdXQuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHJldmlzaW9uIDE5MDA3NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0NiwxMSArMzQ2LDYgQEAgaW5saW5lIHZvaWQgUmVuZGVyRWxlbWVudDo6c2V0QW5pbWF0
YWJsZQogICAgIHNldFN0eWxlKFdURjo6bW92ZShhbmltYXRlZFN0eWxlKSwgbWluaW1hbFN0eWxl
RGlmZmVyZW5jZSk7CiB9CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVuZGVyRWxlbWVudDo6Zmly
c3RMaW5lU3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLnN0eWxlU2hlZXRD
b2xsZWN0aW9uKCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkgPyAqY2FjaGVkRmlyc3RMaW5lU3R5bGUo
KSA6IHN0eWxlKCk7Ci19Ci0KIGlubGluZSB2b2lkIFJlbmRlckVsZW1lbnQ6OnNldEFuY2VzdG9y
TGluZUJveERpcnR5KGJvb2wgZikKIHsKICAgICBtX2FuY2VzdG9yTGluZUJveERpcnR5ID0gZjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lv
biAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRh
dGVBbHdheXNDcmVhdGVMaW4KICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAh
PSBzdHlsZSgpLmxpbmVIZWlnaHQoKSkpCiAgICAgICAgIHx8IChmbG93VGhyZWFkICYmIGZsb3dU
aHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpOyAvLyBGSVhNRTogRW5hYmxlIHRoZSBv
cHRpbWl6YXRpb24gb25jZSB3ZSBtYWtlIG92ZXJmbG93IGNvbXB1dGF0aW9uIGZvciBjdWxsZWQg
aW5saW5lcyBpbiByZWdpb25zLgogCi0gICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMgJiYg
Y2hlY2tGb250cyAmJiBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkudXNlc0ZpcnN0
TGluZVJ1bGVzKCkpIHsKKyAgICBpZiAoIWFsd2F5c0NyZWF0ZUxpbmVCb3hlcyAmJiBjaGVja0Zv
bnRzICYmIHZpZXcoKS51c2VzRmlyc3RMaW5lUnVsZXMoKSkgewogICAgICAgICAvLyBIYXZlIHRv
IGNoZWNrIHRoZSBmaXJzdCBsaW5lIHN0eWxlIGFzIHdlbGwuCiAgICAgICAgIHBhcmVudFN0eWxl
ID0gJnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBSZW5kZXJTdHlsZSYgY2hp
bGRTdHlsZSA9IGZpcnN0TGluZVN0eWxlKCk7CkBAIC0xNDU3LDcgKzE0NTcsNyBAQCBJbmxpbmVG
bG93Qm94KiBSZW5kZXJJbmxpbmU6OmNyZWF0ZUFuZEFwCiAKIExheW91dFVuaXQgUmVuZGVySW5s
aW5lOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSAvKmRpcmVj
dGlvbiovLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9kZSovKSBjb25zdAogewot
ICAgIGlmIChmaXJzdExpbmUgJiYgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnVz
ZXNGaXJzdExpbmVSdWxlcygpKSB7CisgICAgaWYgKGZpcnN0TGluZSAmJiB2aWV3KCkudXNlc0Zp
cnN0TGluZVJ1bGVzKCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0
eWxlID0gdGhpcy0+Zmlyc3RMaW5lU3R5bGUoKTsKICAgICAgICAgaWYgKCZmaXJzdExpbmVTdHls
ZSAhPSAmc3R5bGUoKSkKICAgICAgICAgICAgIHJldHVybiBmaXJzdExpbmVTdHlsZS5jb21wdXRl
ZExpbmVIZWlnaHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5l
QnJlYWsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aW5lQnJlYWsuY3BwCShyZXZpc2lvbiAxOTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJyZWFrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBS
ZW5kZXJMaW5lQnJlYWs6On5SZW5kZXJMaW5lQnJlYWsoKQogCiBMYXlvdXRVbml0IFJlbmRlckxp
bmVCcmVhazo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgLypk
aXJlY3Rpb24qLywgTGluZVBvc2l0aW9uTW9kZSAvKmxpbmVQb3NpdGlvbk1vZGUqLykgY29uc3QK
IHsKLSAgICBpZiAoZmlyc3RMaW5lICYmIGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24o
KS51c2VzRmlyc3RMaW5lUnVsZXMoKSkgeworICAgIGlmIChmaXJzdExpbmUgJiYgdmlldygpLnVz
ZXNGaXJzdExpbmVSdWxlcygpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBmaXJzdExp
bmVTdHlsZSA9IHRoaXMtPmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGlmICgmZmlyc3RMaW5l
U3R5bGUgIT0gJnN0eWxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMaW5lU3R5bGUuY29t
cHV0ZWRMaW5lSGVpZ2h0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmgJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2ICsxODcsMTEgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIFJlbmRlckxheWVyQ29tcG9zaXRvciYgY29tcG9zaXRvcigpOwogICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgdXNlc0NvbXBvc2l0aW5nKCkgY29uc3Q7CiAKKyAgICBib29sIHVz
ZXNGaXJzdExpbmVSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0ZpcnN0TGluZVJ1bGVzOyB9
CisgICAgYm9vbCB1c2VzRmlyc3RMZXR0ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0Zp
cnN0TGV0dGVyUnVsZXM7IH0KKyAgICB2b2lkIHNldFVzZXNGaXJzdExpbmVSdWxlcyhib29sIHZh
bHVlKSB7IG1fdXNlc0ZpcnN0TGluZVJ1bGVzID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldFVzZXNG
aXJzdExldHRlclJ1bGVzKGJvb2wgdmFsdWUpIHsgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyA9IHZh
bHVlOyB9CisKICAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IHVuc2NhbGVkRG9jdW1lbnRSZWN0
KCkgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCB1bmV4dGVuZGVkQmFja2dyb3VuZFJlY3QoKSBjb25z
dDsKICAgICBMYXlvdXRSZWN0IGJhY2tncm91bmRSZWN0KCkgY29uc3Q7CkBAIC0zNjksNiArMzc0
LDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9zZWxlY3Rpb25XYXNDYXJldDsKICAgICBib29s
IG1faGFzU29mdHdhcmVGaWx0ZXJzOworICAgIGJvb2wgbV91c2VzRmlyc3RMaW5lUnVsZXMgeyBm
YWxzZSB9OworICAgIGJvb2wgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyB7IGZhbHNlIH07CiAKICAg
ICBIYXNoU2V0PFJlbmRlckVsZW1lbnQqPiBtX3JlbmRlcmVyc1dpdGhQYXVzZWRJbWFnZUFuaW1h
dGlvbjsKICAgICBWZWN0b3I8UmVmUHRyPFJlbmRlcldpZGdldD4+IG1fcHJvdGVjdGVkUmVuZGVy
V2lkZ2V0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5j
cHAJKHJldmlzaW9uIDE5MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTk5LDcgKzk5OSw3IEBAIExheW91dFVuaXQg
Um9vdElubGluZUJveDo6dmVydGljYWxQb3NpdGkKIAogICAgIC8vIFRoaXMgbWV0aG9kIGRldGVy
bWluZXMgdGhlIHZlcnRpY2FsIHBvc2l0aW9uIGZvciBpbmxpbmUgZWxlbWVudHMuCiAgICAgYm9v
bCBmaXJzdExpbmUgPSBpc0ZpcnN0TGluZSgpOwotICAgIGlmIChmaXJzdExpbmUgJiYgIXJlbmRl
cmVyLT5kb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkudXNlc0ZpcnN0TGluZVJ1bGVz
KCkpCisgICAgaWYgKGZpcnN0TGluZSAmJiAhYmxvY2tGbG93KCkudmlldygpLnVzZXNGaXJzdExp
bmVSdWxlcygpKQogICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKIAogICAgIC8vIENoZWNrIHRo
ZSBjYWNoZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3Bw
CShyZXZpc2lvbiAxOTAwODQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVU
cmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVhP
YmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkVsZW1lbnRSYXJlRGF0YS5oIgpA
QCAtNjg1LDcgKzY4Niw3IEBAIHN0YXRpYyBDaGFuZ2UgcmVzb2x2ZUxvY2FsKEVsZW1lbnQmIGN1
cnIKIAogICAgIC8vIElmICJyZW0iIHVuaXRzIGFyZSB1c2VkIGFueXdoZXJlIGluIHRoZSBkb2N1
bWVudCwgYW5kIGlmIHRoZSBkb2N1bWVudCBlbGVtZW50J3MgZm9udCBzaXplIGNoYW5nZXMsIHRo
ZW4gZm9yY2UgZm9udCB1cGRhdGluZwogICAgIC8vIGFsbCB0aGUgd2F5IGRvd24gdGhlIHRyZWUu
IFRoaXMgaXMgc2ltcGxlciB0aGFuIGhhdmluZyB0byBtYWludGFpbiBhIGNhY2hlIG9mIG9iamVj
dHMgKGFuZCBzdWNoIGZvbnQgc2l6ZSBjaGFuZ2VzIHNob3VsZCBiZSByYXJlIGFueXdheSkuCi0g
ICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkudXNlc1JlbVVuaXRzKCkgJiYg
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkgPT0gJmN1cnJlbnQgJiYgbG9jYWxDaGFuZ2UgIT0g
Tm9DaGFuZ2UgJiYgY3VycmVudFN0eWxlICYmIG5ld1N0eWxlICYmIGN1cnJlbnRTdHlsZS0+Zm9u
dFNpemUoKSAhPSBuZXdTdHlsZS0+Zm9udFNpemUoKSkgeworICAgIGlmIChkb2N1bWVudC5hdXRo
b3JTdHlsZVNoZWV0cygpLnVzZXNSZW1Vbml0cygpICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dCgpID09ICZjdXJyZW50ICYmIGxvY2FsQ2hhbmdlICE9IE5vQ2hhbmdlICYmIGN1cnJlbnRTdHls
ZSAmJiBuZXdTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmZvbnRTaXplKCkgIT0gbmV3U3R5bGUtPmZv
bnRTaXplKCkpIHsKICAgICAgICAgLy8gQ2FjaGVkIFJlbmRlclN0eWxlcyBtYXkgZGVwZW5kIG9u
IHRoZSByZSB1bml0cy4KICAgICAgICAgaWYgKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIg
PSBkb2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlzdHMoKSkKICAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7CkBAIC05MTQsNiArOTE1
LDggQEAgdm9pZCByZXNvbHZlVHJlZShFbGVtZW50JiBjdXJyZW50LCBSZW5kZQogCiB2b2lkIHJl
c29sdmVUcmVlKERvY3VtZW50JiBkb2N1bWVudCwgQ2hhbmdlIGNoYW5nZSkKIHsKKyAgICBhdXRv
JiByZW5kZXJWaWV3ID0gKmRvY3VtZW50LnJlbmRlclZpZXcoKTsKKwogICAgIGlmIChjaGFuZ2Ug
PT0gRm9yY2UpIHsKICAgICAgICAgYXV0byBkb2N1bWVudFN0eWxlID0gcmVzb2x2ZUZvckRvY3Vt
ZW50KGRvY3VtZW50KTsKIApAQCAtOTI0LDkgKzkyNyw5IEBAIHZvaWQgcmVzb2x2ZVRyZWUoRG9j
dW1lbnQmIGRvY3VtZW50LCBDaGEKICAgICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLmdldCgp
LmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBTdHlsZTo6Q2hhbmdlIGRvY3VtZW50Q2hhbmdlID0gZGV0ZXJtaW5lQ2hh
bmdlKGRvY3VtZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJlbmRlclZpZXcoKS0+c3R5bGUoKSk7
CisgICAgICAgIFN0eWxlOjpDaGFuZ2UgZG9jdW1lbnRDaGFuZ2UgPSBkZXRlcm1pbmVDaGFuZ2Uo
ZG9jdW1lbnRTdHlsZS5nZXQoKSwgcmVuZGVyVmlldy5zdHlsZSgpKTsKICAgICAgICAgaWYgKGRv
Y3VtZW50Q2hhbmdlICE9IE5vQ2hhbmdlKQotICAgICAgICAgICAgZG9jdW1lbnQucmVuZGVyVmll
dygpLT5zZXRTdHlsZShXVEY6Om1vdmUoZG9jdW1lbnRTdHlsZSkpOworICAgICAgICAgICAgcmVu
ZGVyVmlldy5zZXRTdHlsZShXVEY6Om1vdmUoZG9jdW1lbnRTdHlsZSkpOwogICAgIH0KIAogICAg
IEVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOwpA
QCAtOTM0LDggKzkzNywxOCBAQCB2b2lkIHJlc29sdmVUcmVlKERvY3VtZW50JiBkb2N1bWVudCwg
Q2hhCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoY2hhbmdlIDwgSW5oZXJpdCAmJiAhZG9jdW1l
bnRFbGVtZW50LT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSAmJiAhZG9jdW1lbnRFbGVtZW50LT5u
ZWVkc1N0eWxlUmVjYWxjKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJUcmVlUG9zaXRp
b24gcmVuZGVyVHJlZVBvc2l0aW9uKCpkb2N1bWVudC5yZW5kZXJWaWV3KCkpOworCisgICAgYXV0
byYgc3R5bGVSZXNvbHZlZCA9IGRvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKKworICAg
IC8vIFBzZXVkbyBlbGVtZW50IHJlbW92YWwgYW5kIHNpbWlsYXIgbWF5IG9ubHkgd29yayB3aXRo
IHRoZXNlIGZsYWdzIHN0aWxsIHNldC4gUmVzZXQgdGhlbSBhZnRlciB0aGUgc3R5bGUgcmVjYWxj
LgorICAgIHJlbmRlclZpZXcuc2V0VXNlc0ZpcnN0TGluZVJ1bGVzKHJlbmRlclZpZXcudXNlc0Zp
cnN0TGluZVJ1bGVzKCkgfHwgc3R5bGVSZXNvbHZlZC51c2VzRmlyc3RMaW5lUnVsZXMoKSk7Cisg
ICAgcmVuZGVyVmlldy5zZXRVc2VzRmlyc3RMZXR0ZXJSdWxlcyhyZW5kZXJWaWV3LnVzZXNGaXJz
dExldHRlclJ1bGVzKCkgfHwgc3R5bGVSZXNvbHZlZC51c2VzRmlyc3RMZXR0ZXJSdWxlcygpKTsK
KworICAgIFJlbmRlclRyZWVQb3NpdGlvbiByZW5kZXJUcmVlUG9zaXRpb24ocmVuZGVyVmlldyk7
CiAgICAgcmVzb2x2ZVRyZWUoKmRvY3VtZW50RWxlbWVudCwgKmRvY3VtZW50LnJlbmRlclN0eWxl
KCksIHJlbmRlclRyZWVQb3NpdGlvbiwgY2hhbmdlKTsKKworICAgIHJlbmRlclZpZXcuc2V0VXNl
c0ZpcnN0TGluZVJ1bGVzKHN0eWxlUmVzb2x2ZWQudXNlc0ZpcnN0TGluZVJ1bGVzKCkpOworICAg
IHJlbmRlclZpZXcuc2V0VXNlc0ZpcnN0TGV0dGVyUnVsZXMoc3R5bGVSZXNvbHZlZC51c2VzRmly
c3RMZXR0ZXJSdWxlcygpKTsKIH0KIAogdm9pZCBkZXRhY2hSZW5kZXJUcmVlKEVsZW1lbnQmIGVs
ZW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiAx
OTAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
RXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4
dGVuc2lvblN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZvbnRD
YWNoZS5oIgogI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCkBAIC0xOTQwLDcgKzE5NDEsNyBA
QCB2b2lkIEludGVybmFsczo6aW5zZXJ0QXV0aG9yQ1NTKGNvbnN0IFN0CiAgICAgYXV0byBwYXJz
ZWRTaGVldCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKCpkb2N1bWVudCk7CiAgICAgcGFy
c2VkU2hlZXQuZ2V0KCkuc2V0SXNVc2VyU3R5bGVTaGVldChmYWxzZSk7CiAgICAgcGFyc2VkU2hl
ZXQuZ2V0KCkucGFyc2VTdHJpbmcoY3NzKTsKLSAgICBkb2N1bWVudC0+c3R5bGVTaGVldENvbGxl
Y3Rpb24oKS5hZGRBdXRob3JTaGVldChXVEY6Om1vdmUocGFyc2VkU2hlZXQpKTsKKyAgICBkb2N1
bWVudC0+ZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5hZGRBdXRob3JTdHlsZVNoZWV0Rm9yVGVzdGlu
ZyhXVEY6Om1vdmUocGFyc2VkU2hlZXQpKTsKIH0KIAogdm9pZCBJbnRlcm5hbHM6Omluc2VydFVz
ZXJDU1MoY29uc3QgU3RyaW5nJiBjc3MsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApAQCAtMTk1
NCw3ICsxOTU1LDcgQEAgdm9pZCBJbnRlcm5hbHM6Omluc2VydFVzZXJDU1MoY29uc3QgU3RyaQog
ICAgIGF1dG8gcGFyc2VkU2hlZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZSgqZG9jdW1l
bnQpOwogICAgIHBhcnNlZFNoZWV0LmdldCgpLnNldElzVXNlclN0eWxlU2hlZXQodHJ1ZSk7CiAg
ICAgcGFyc2VkU2hlZXQuZ2V0KCkucGFyc2VTdHJpbmcoY3NzKTsKLSAgICBkb2N1bWVudC0+c3R5
bGVTaGVldENvbGxlY3Rpb24oKS5hZGRVc2VyU2hlZXQoV1RGOjptb3ZlKHBhcnNlZFNoZWV0KSk7
CisgICAgZG9jdW1lbnQtPmV4dGVuc2lvblN0eWxlU2hlZXRzKCkuYWRkVXNlclN0eWxlU2hlZXQo
V1RGOjptb3ZlKHBhcnNlZFNoZWV0KSk7CiB9CiAKIFN0cmluZyBJbnRlcm5hbHM6OmNvdW50ZXJW
YWx1ZShFbGVtZW50KiBlbGVtZW50KQo=
</data>
<flag name="review"
          id="286988"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>