<?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>48834</bug_id>
          
          <creation_ts>2010-11-02 07:03:11 -0700</creation_ts>
          <short_desc>Web Inspector: Enable InspectorCSSAgent (not used by frontend for CSS editing yet)</short_desc>
          <delta_ts>2010-11-10 09:13:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>49312</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>303341</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-11-02 07:03:11 -0700</bug_when>
    <thetext>The next step to enabling the source-based CSS editing is to enable InspectorCSSAgent in the &quot;idle&quot; mode: an InspectorCSSAgent instance gets created by InspectorController and is used by InspectorBackendDispatcher, but its functions are not yet used for CSS editing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303364</commentid>
    <comment_count>1</comment_count>
      <attachid>72669</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-11-02 08:17:56 -0700</bug_when>
    <thetext>Created attachment 72669
[PATCH] Suggested solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303367</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-02 08:28:02 -0700</bug_when>
    <thetext>Attachment 72669 did not build on qt:
Build output: http://queues.webkit.org/results/4941017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303403</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-02 09:22:11 -0700</bug_when>
    <thetext>Attachment 72669 did not build on mac:
Build output: http://queues.webkit.org/results/4994009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303412</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-02 09:38:29 -0700</bug_when>
    <thetext>Attachment 72669 did not build on chromium:
Build output: http://queues.webkit.org/results/4928018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303969</commentid>
    <comment_count>5</comment_count>
      <attachid>72810</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-11-03 04:16:19 -0700</bug_when>
    <thetext>Created attachment 72810
[PATCH] Compilability fixed, added property value checking with CSSMutableStyleDeclaration::parseDeclaration()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306863</commentid>
    <comment_count>6</comment_count>
      <attachid>73388</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-11-09 10:26:35 -0800</bug_when>
    <thetext>Created attachment 73388
[WIP] A patch with WebInspector frontend reimplemented to use InspectorCSSAgent

Features:
- Display/modification of CSS properties not parsed by CSSParser (property unrecognized or has invalid structure)
- Multiple same-named properties support (the last property in the style declaration takes precedence)
- Exact calculation of unused CSS size in audits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307173</commentid>
    <comment_count>7</comment_count>
      <attachid>73388</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-09 22:51:47 -0800</bug_when>
    <thetext>Comment on attachment 73388
[WIP] A patch with WebInspector frontend reimplemented to use InspectorCSSAgent

I think CSSAgent == CSSStyleModel. I&apos;d just move CSSStyleDeclaration to CSSStyleModel.js. Rationale: we have agents on backend and sdks/ models on front-end. Like InspectorResourceAgent.cpp + ResourceModel,js. I&apos;d also suggest that we first land clear move refactoring and apply incremental changes later. Otherwise it is easy to get lost in the changes within declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307264</commentid>
    <comment_count>8</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-11-10 02:20:25 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 73388 [details])
&gt; I think CSSAgent == CSSStyleModel. I&apos;d just move CSSStyleDeclaration to CSSStyleModel.js. Rationale: we have agents on backend and sdks/ models on front-end. Like InspectorResourceAgent.cpp + ResourceModel,js. I&apos;d also suggest that we first land clear move refactoring and apply incremental changes later. Otherwise it is easy to get lost in the changes within declaration.

Good, I will file a bug for the move and send out a patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307334</commentid>
    <comment_count>9</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-11-10 06:56:10 -0800</bug_when>
    <thetext>Bug 49312 filed for the CSS-related code motion from DOMAgent.js into CSSStyleModel.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307374</commentid>
    <comment_count>10</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-11-10 09:13:17 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
        M       LayoutTests/ChangeLog
        M       LayoutTests/inspector/styles-source-offsets-expected.txt
        M       LayoutTests/inspector/styles-source-offsets.html
        M       WebCore/ChangeLog
        M       WebCore/inspector/CodeGeneratorInspector.pm
        M       WebCore/inspector/Inspector.idl
        M       WebCore/inspector/InspectorCSSAgent.cpp
        M       WebCore/inspector/InspectorCSSAgent.h
        M       WebCore/inspector/InspectorController.cpp
        M       WebCore/inspector/InspectorController.h
        M       WebCore/inspector/InspectorDOMAgent.cpp
        M       WebCore/inspector/InspectorDOMAgent.h
        M       WebCore/inspector/InspectorStyleSheet.cpp
        M       WebCore/inspector/InspectorStyleSheet.h
Committed r71745</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72669</attachid>
            <date>2010-11-02 08:17:56 -0700</date>
            <delta_ts>2010-11-03 04:16:19 -0700</delta_ts>
            <desc>[PATCH] Suggested solution</desc>
            <filename>enable_css_agent.patch</filename>
            <type>text/plain</type>
            <size>66547</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IGQ2NmExYjJlMDUxOTk4MTU1MzMwMWVhZmFjYmIyY2ExZmI2ZmUxMDMKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBUaHUgU2VwIDE2
IDIwOjA0OjA0IDIwMTAgKzA0MDAKCiAgICBXSVAKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDk4NzFmNy4uMmU4YWJmYSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEwLTExLTAyICBBbGV4YW5kZXIgUGF2bG92ICA8YXBh
dmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRW5hYmxlIEluc3BlY3RvckNTU0FnZW50IChub3Qg
dXNlZCBieSBmcm9udGVuZCBmb3IgQ1NTIGVkaXRpbmcgeWV0KQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MzQKKworICAgICAgICAqIGluc3BlY3Rv
ci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzOiBBZGRlZC4KKyAgICAgICAgKGh0bWwpOgor
ICAgICAgICAoYm9keSk6CisgICAgICAgICgvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2Jv
ZHkubWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVjdG9yICovKToKKyAgICAgICAgKGJvZHkubWFp
bjIpOgorICAgICAgICAoYm9keTo6YWZ0ZXIpOgorICAgICAgICAoaDEpOgorICAgICAgICAqIGlu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGlu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWw6CisKIDIwMTAtMTEtMDEgIEFuZHJleSBLb3N5YWtv
diAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxk
bWFuLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMt
bmV3LUFQSS5jc3MgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1uZXct
QVBJLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjdiOGUzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMtbmV3
LUFQSS5jc3MKQEAgLTAsMCArMSwyNiBAQAoraHRtbCB7CisgICAgZm9udC13ZWlnaHQ6IDQwMDsK
K30KKworYm9keSB7CisgICAgZm9udC1zaXplOiAxMnB4OworICAgIGZvbzogYmFyICEKKworICAg
IGltcG9ydGFudCAvKiAhaW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNv
cmUgKi87CisgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CisgICAgY29sb3J6OiAiIWltcG9y
dGFudCI7CisgICAgaW1wb3J0YW50OiFpbXBvcnRhbnQ7CisgICAgY29sb3I6ICJiYWRjb2xvciIg
ISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0cmFuZ2UgdmFsdWUgKi87Cit9CisK
Ky8qIGNvbW1lbnQgYmVmb3JlIHNlbGVjdG9yICovYm9keS5tYWluMS8qIGNvbW1lbnQgYWZ0ZXIg
c2VsZWN0b3IgKi97LyogY29tbWVudCAqL2NvbG9yOiAjRjAwQkFBO3pvbzptb28gLyogbm90IGFu
ICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovfS8qIGNvbW1lbnQgKi8KKworYm9k
eS5tYWluMntiYWNrZ3JvdW5kOiBncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8g
IWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqL30KKworYm9keTo6
YWZ0ZXIgIHsKKyAgICBjb250ZW50OiAiQWZ0ZXIgYm9keSI7Cit9CisKK2gxIHsKKyAgICBoZWln
aHQgOiAxMDAlIDsgYm9yZGVyOiAxcHggc29saWQ7IGJvcmRlci13aWR0aDogMnB4OyBiYWNrZ3Jv
dW5kLWNvbG9yIDogIzMzRkYzMzsgZ29vZ2xlczogYWJyYTsgZm9vOiAuYmFyOyAtbW96LWdvb2c6
IDEqKio7IGJvcmRlci13aWR0aDogMHB4OworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3N0eWxlcy1uZXctQVBJLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzdlNmMzMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNDEgQEAKK1Rlc3RzIHRo
YXQgSW5zcGVjdG9yQ1NTQWdlbnQgQVBJIG1ldGhvZHMgd29yayBhcyBleHBlY3RlZC4KKworSDEK
KworCis9PT0gQ29tcHV0ZWQgc3R5bGUgcHJvcGVydHkgY291bnQgZm9yIGJvZHkgPT09CitPSwor
Cis9PT0gTWF0Y2hlZCBydWxlcyBmb3IgYm9keSA9PT0KKworcnVsZQorYm9keTogW3VzZXItYWdl
bnRdCitbJ2Rpc3BsYXknOidibG9jayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1sn
bWFyZ2luLXRvcCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snbWFyZ2lu
LXJpZ2h0JzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydtYXJnaW4tYm90
dG9tJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydtYXJnaW4tbGVmdCc6
JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKKworcnVsZQorYm9keTogW10KK1sn
Zm9udC1zaXplJzonMTJweCddIEBbNS0yMV0gYWN0aXZlCitbJ2Zvbyc6J2JhciAhCisKKyAgICBp
bXBvcnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3QgcmVjb2duaXplZCBieSBXZWJDb3Jl
ICovJyBpcy1pbXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsyNi0xMDRdIGFjdGl2ZQorWydoZWlnaHQn
OicxMDAlICFpbXBvcnRhbnQnIGlzLWltcG9ydGFudF0gQFsxMDktMTMzXSBhY3RpdmUKK1snY29s
b3J6JzonIiFpbXBvcnRhbnQiJyBub24tcGFyc2VkXSBAWzEzOC0xNTldIGFjdGl2ZQorWydpbXBv
cnRhbnQnOichaW1wb3J0YW50JyBub24tcGFyc2VkXSBAWzE2NC0xODVdIGFjdGl2ZQorWydjb2xv
cic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0cmFuZ2Ug
dmFsdWUgKi8nIGlzLWltcG9ydGFudF0gQFsxOTAtMjU5XSBhY3RpdmUKKworcnVsZQorYm9keS5t
YWluMTogW10KK1snY29sb3InOicjRjAwQkFBJ10gQFsxMy0yOF0gYWN0aXZlCitbJ3pvbyc6J21v
byAvKiBub3QgYW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVydHkgKi8nIG5vbi1wYXJz
ZWRdIEBbMjgtODFdIGFjdGl2ZQorCitydWxlCitib2R5Lm1haW4yOiBbXQorWydiYWNrZ3JvdW5k
JzonZ3JlZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQgLyogbm8g
c2VtaWNvbG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi8nIGlzLWltcG9ydGFudF0gQFswLTk1XSBhY3Rp
dmUKK1snYmFja2dyb3VuZC1pbWFnZSc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCcgaXMt
aW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtcmVw
ZWF0LXknOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5
bGUKK1snYmFja2dyb3VuZC1hdHRhY2htZW50JzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtcG9zaXRpb24teCc6J2luaXRp
YWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3Jv
dW5kLXBvc2l0aW9uLXknOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1vcmlnaW4nOidpbml0aWFsJyBpcy1pbXBvcnRhbnRd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlh
bCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91
bmQtY29sb3InOidncmVlbicgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0
eWxlCisKK3J1bGUKK2JvZHkubWFpbnBhZ2U6IFtdCitbJ3RleHQtZGVjb3JhdGlvbic6J25vbmUn
XSBAWzUtMjddIGFjdGl2ZQorWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1wYXJzZWRd
IEBbMTA3LTEzMV0gYWN0aXZlCisKKz09PSBQc2V1ZG8gcnVsZXMgZm9yIGJvZHkgPT09CitQc2V1
ZG9JZD00CisKK3J1bGUKK2JvZHk6OmFmdGVyOiBbXQorWydjb250ZW50JzonIkFmdGVyIGJvZHki
J10gQFs1LTI3XSBhY3RpdmUKKworPT09IEluaGVyaXRlZCBzdHlsZXMgZm9yIGJvZHkgPT09CitM
ZXZlbD0xCisKK3J1bGUKK2h0bWw6IFt1c2VyLWFnZW50XQorWydkaXNwbGF5JzonYmxvY2snXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCisKK3J1bGUKK2h0bWw6IFtdCitbJ2ZvbnQtd2Vp
Z2h0JzonNDAwJ10gQFs1LTIyXSBhY3RpdmUKKworPT09IElubGluZSBzdHlsZSBmb3IgYm9keSA9
PT0KKworc3R5bGUKK3JhdyBzdHlsZQorWydmb250LXdlaWdodCc6J25vcm1hbCddIEBbMC0yMF0g
YWN0aXZlCitbJ3dpZHRoJzonODUlJ10gQFsyMS0zMV0gYWN0aXZlCisKKz09PSBBdHRyaWJ1dGUg
c3R5bGVzIGZvciB0YWJsZSA9PT0KK0F0dHJpYnV0ZTogd2lkdGgKKworc3R5bGUKK3JhdyBzdHls
ZQorWyd3aWR0aCc6JzUwJSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKKworPT09IEFs
bCBzdHlsZXNoZWV0cyA9PT0KKworU3R5bGVTaGVldDogJ2h0bWwgeworICAgIGZvbnQtd2VpZ2h0
OiA0MDA7Cit9CisKK2JvZHkgeworICAgIGZvbnQtc2l6ZTogMTJweDsKKyAgICBmb286IGJhciAh
CisKKyAgICBpbXBvcnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3QgcmVjb2duaXplZCBi
eSBXZWJDb3JlICovOworICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OworICAgIGNvbG9yejog
IiFpbXBvcnRhbnQiOworICAgIGltcG9ydGFudDohaW1wb3J0YW50OworICAgIGNvbG9yOiAiYmFk
Y29sb3IiICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICov
OworfQorCisvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHkubWFpbjEvKiBjb21tZW50
IGFmdGVyIHNlbGVjdG9yICovey8qIGNvbW1lbnQgKi9jb2xvcjogI0YwMEJBQTt6b286bW9vIC8q
IG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqL30vKiBjb21tZW50ICov
CisKK2JvZHkubWFpbjJ7YmFja2dyb3VuZDogZ3JlZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21t
ZW50ICovICFpbXBvcnRhbnQgLyogbm8gc2VtaWNvbG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi99CisK
K2JvZHk6OmFmdGVyICB7CisgICAgY29udGVudDogIkFmdGVyIGJvZHkiOworfQorCitoMSB7Cisg
ICAgaGVpZ2h0IDogMTAwJSA7IGJvcmRlcjogMXB4IHNvbGlkOyBib3JkZXItd2lkdGg6IDJweDsg
YmFja2dyb3VuZC1jb2xvciA6ICMzM0ZGMzM7IGdvb2dsZXM6IGFicmE7IGZvbzogLmJhcjsgLW1v
ei1nb29nOiAxKioqOyBib3JkZXItd2lkdGg6IDBweDsKK30KKycKKworcnVsZQoraHRtbDogW10K
K1snZm9udC13ZWlnaHQnOic0MDAnXSBAWzUtMjJdIGFjdGl2ZQorCitydWxlCitib2R5OiBbXQor
Wydmb250LXNpemUnOicxMnB4J10gQFs1LTIxXSBhY3RpdmUKK1snZm9vJzonYmFyICEKKworICAg
IGltcG9ydGFudCAvKiAhaW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNv
cmUgKi8nIGlzLWltcG9ydGFudCBub24tcGFyc2VkXSBAWzI2LTEwNF0gYWN0aXZlCitbJ2hlaWdo
dCc6JzEwMCUgIWltcG9ydGFudCcgaXMtaW1wb3J0YW50XSBAWzEwOS0xMzNdIGFjdGl2ZQorWydj
b2xvcnonOiciIWltcG9ydGFudCInIG5vbi1wYXJzZWRdIEBbMTM4LTE1OV0gYWN0aXZlCitbJ2lt
cG9ydGFudCc6JyFpbXBvcnRhbnQnIG5vbi1wYXJzZWRdIEBbMTY0LTE4NV0gYWN0aXZlCitbJ2Nv
bG9yJzonImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdpdGggc3RyYW5n
ZSB2YWx1ZSAqLycgaXMtaW1wb3J0YW50XSBAWzE5MC0yNTldIGFjdGl2ZQorCitydWxlCitib2R5
Lm1haW4xOiBbXQorWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XSBhY3RpdmUKK1snem9vJzon
bW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqLycgbm9uLXBh
cnNlZF0gQFsyOC04MV0gYWN0aXZlCisKK3J1bGUKK2JvZHkubWFpbjI6IFtdCitbJ2JhY2tncm91
bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBu
byBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVdIGFj
dGl2ZQorWydiYWNrZ3JvdW5kLWltYWdlJzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtcmVwZWF0LXgnOidpbml0aWFsJyBp
cy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1y
ZXBlYXQteSc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBz
dHlsZQorWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1wb3NpdGlvbi14JzonaW5p
dGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tn
cm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwnIGlzLWltcG9ydGFu
dF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLWNsaXAnOidpbml0
aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dy
b3VuZC1jb2xvcic6J2dyZWVuJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0g
c3R5bGUKKworcnVsZQorYm9keTo6YWZ0ZXI6IFtdCitbJ2NvbnRlbnQnOiciQWZ0ZXIgYm9keSIn
XSBAWzUtMjddIGFjdGl2ZQorCitydWxlCitoMTogW10KK1snaGVpZ2h0JzonMTAwJSddIEBbNS0y
MF0gYWN0aXZlCitbJ2JvcmRlcic6JzFweCBzb2xpZCddIEBbMjEtMzldIGFjdGl2ZQorWydib3Jk
ZXItd2lkdGgnOicycHgnXSBAWzQwLTU4XSBpbmFjdGl2ZQorWydiYWNrZ3JvdW5kLWNvbG9yJzon
IzMzRkYzMyddIEBbNTktODZdIGFjdGl2ZQorWydnb29nbGVzJzonYWJyYScgbm9uLXBhcnNlZF0g
QFs4Ny0xMDFdIGFjdGl2ZQorWydmb28nOicuYmFyJyBub24tcGFyc2VkXSBAWzEwMi0xMTJdIGFj
dGl2ZQorWyctbW96LWdvb2cnOicxKioqJyBub24tcGFyc2VkXSBAWzExMy0xMjldIGFjdGl2ZQor
Wydib3JkZXItd2lkdGgnOicwcHgnXSBAWzEzMC0xNDhdIGFjdGl2ZQorWydib3JkZXItdG9wLXN0
eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JvcmRlci1yaWdo
dC1zdHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydib3JkZXIt
Ym90dG9tLXN0eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2Jv
cmRlci1sZWZ0LXN0eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitb
J2JvcmRlci1jb2xvcic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitb
J2JvcmRlci10b3Atd2lkdGgnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitb
J2JvcmRlci1yaWdodC13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUK
K1snYm9yZGVyLWJvdHRvbS13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5
bGUKK1snYm9yZGVyLWxlZnQtd2lkdGgnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0
eWxlCisKK1N0eWxlU2hlZXQ6ICcKKworLyogQW4gaW5saW5lIHN0eWxlc2hlZXQgKi8KK2JvZHku
bWFpbnBhZ2UgeworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLyogYXQgbGVhc3Qgb25lIHZh
bGlkIHByb3BlcnR5IGlzIG5lY2Vzc2FyeSBmb3IgV2ViQ29yZSB0byBtYXRjaCBhIHJ1bGUgKi8K
KyAgICBiYWRwcm9wZXJ0eTogMWJhZHZhbHVlMTsKK30KKworJworCitydWxlCitib2R5Lm1haW5w
YWdlOiBbXQorWyd0ZXh0LWRlY29yYXRpb24nOidub25lJ10gQFs1LTI3XSBhY3RpdmUKK1snYmFk
cHJvcGVydHknOicxYmFkdmFsdWUxJyBub24tcGFyc2VkXSBAWzEwNy0xMzFdIGFjdGl2ZQorCis9
PT0gTGFzdCBzdHlsZXNoZWV0IHBhdGNoZWQgPT09CisKK1N0eWxlU2hlZXQ6ICdib2R5Lm1haW5w
YWdlIHsgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdoOyAgICBiYWRwcm9wZXJ0eTog
MmJhZHZhbHVlMjt9Ym9keSB7ICAgIHRleHQtYWxpZ246IGp1c3RpZnk7fScKKworcnVsZQorYm9k
eS5tYWlucGFnZTogW10KK1sndGV4dC1kZWNvcmF0aW9uJzonc3RyaWtldGhyb3VnaCddIEBbNC0z
NV0gYWN0aXZlCitbJ2JhZHByb3BlcnR5JzonMmJhZHZhbHVlMicgbm9uLXBhcnNlZF0gQFszOS02
M10gYWN0aXZlCisKK3J1bGUKK2JvZHk6IFtdCitbJ3RleHQtYWxpZ24nOidqdXN0aWZ5J10gQFs0
LTI0XSBhY3RpdmUKKworPT09IEFmdGVyIHNlbGVjdG9yIHNldCA9PT0KKworU3R5bGVTaGVldDog
J2h0bWwgKiwgYm9keVtmb289ImJhciJdIHsgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJv
dWdoOyAgICBiYWRwcm9wZXJ0eTogMmJhZHZhbHVlMjt9Ym9keSB7ICAgIHRleHQtYWxpZ246IGp1
c3RpZnk7fScKKworcnVsZQoraHRtbCAqLCBib2R5W2Zvbz0iYmFyIl06IFtdCitbJ3RleHQtZGVj
b3JhdGlvbic6J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdIGFjdGl2ZQorWydiYWRwcm9wZXJ0eSc6
JzJiYWR2YWx1ZTInIG5vbi1wYXJzZWRdIEBbMzktNjNdIGFjdGl2ZQorCitydWxlCitib2R5OiBb
XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0gYWN0aXZlCisKKz09PSBBZnRlciBz
dHlsZSB0ZXh0IHNldCA9PT0KKworU3R5bGVTaGVldDogJ2h0bWwgKiwgYm9keVtmb289ImJhciJd
IHsgICAgICAgIGNvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZDogYmxhY2s7fWJvZHkgeyAgICB0ZXh0
LWFsaWduOiBqdXN0aWZ5O30nCisKK3J1bGUKK2h0bWwgKiwgYm9keVtmb289ImJhciJdOiBbXQor
Wydjb2xvcic6J3doaXRlJ10gQFs4LTIxXSBhY3RpdmUKK1snYmFja2dyb3VuZCc6J2JsYWNrJ10g
QFsyMi00MF0gYWN0aXZlCitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRp
YWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtYXR0YWNobWVu
dCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQt
cG9zaXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2Jh
Y2tncm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0
eWxlCitbJ2JhY2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0gc3R5bGUKK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1jb2xvcic6J2JsYWNrJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXSBzdHlsZQorCitydWxlCitib2R5OiBbXQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSdd
IEBbNC0yNF0gYWN0aXZlCisKKz09PSBNYXRjaGVkIHJ1bGVzIGFmdGVyIHJ1bGUgYWRkZWQgPT09
CisKK3J1bGUKK2JvZHk6IFt1c2VyLWFnZW50XQorWydkaXNwbGF5JzonYmxvY2snXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ21hcmdpbi10b3AnOic4cHgnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdIHN0eWxlCitbJ21hcmdpbi1yaWdodCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0gc3R5bGUKK1snbWFyZ2luLWJvdHRvbSc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0gc3R5bGUKK1snbWFyZ2luLWxlZnQnOic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0
eWxlCisKK3J1bGUKK2JvZHk6IFtdCitbJ2ZvbnQtc2l6ZSc6JzEycHgnXSBAWzUtMjFdIGFjdGl2
ZQorWydmb28nOidiYXIgIQorCisgICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkg
bm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAqLycgaXMtaW1wb3J0YW50IG5vbi1wYXJzZWRdIEBb
MjYtMTA0XSBhY3RpdmUKK1snaGVpZ2h0JzonMTAwJSAhaW1wb3J0YW50JyBpcy1pbXBvcnRhbnRd
IEBbMTA5LTEzM10gYWN0aXZlCitbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9uLXBhcnNlZF0g
QFsxMzgtMTU5XSBhY3RpdmUKK1snaW1wb3J0YW50JzonIWltcG9ydGFudCcgbm9uLXBhcnNlZF0g
QFsxNjQtMTg1XSBhY3RpdmUKK1snY29sb3InOiciYmFkY29sb3IiICEgaW1wb3J0YW50IC8qIGdv
b2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovJyBpcy1pbXBvcnRhbnRdIEBbMTkwLTI1
OV0gYWN0aXZlCisKK3J1bGUKK2h0bWwgKiwgYm9keVtmb289ImJhciJdOiBbXQorWydjb2xvcic6
J3doaXRlJ10gQFs4LTIxXSBhY3RpdmUKK1snYmFja2dyb3VuZCc6J2JsYWNrJ10gQFsyMi00MF0g
YWN0aXZlCitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRpYWwnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtYXR0YWNobWVudCc6J2luaXRp
YWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtcG9zaXRpb24t
eCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQt
cG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2Jh
Y2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUK
K1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5
bGUKK1snYmFja2dyb3VuZC1jb2xvcic6J2JsYWNrJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBz
dHlsZQorCitydWxlCitib2R5OiBbXQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0g
YWN0aXZlCisKK3J1bGUKK2JvZHk6IFtpbnNwZWN0b3JdCitbJ2ZvbnQnOidzZXJpZiddIEBbMC0x
MV0gYWN0aXZlCisKK3J1bGUKK2JvZHkubWFpbjE6IFtdCitbJ2NvbG9yJzonI0YwMEJBQSddIEBb
MTMtMjhdIGFjdGl2ZQorWyd6b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25p
emVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXSBhY3RpdmUKKworcnVsZQorYm9k
eS5tYWluMjogW10KK1snYmFja2dyb3VuZCc6J2dyZWVuIC8qIHZhbHVlICFpbXBvcnRhbnQgY29t
bWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVyeSAhaW1wb3J0YW50ICovJyBp
cy1pbXBvcnRhbnRdIEBbMC05NV0gYWN0aXZlCitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFs
JyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3Vu
ZC1yZXBlYXQteCc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XSBzdHlsZQorWydiYWNrZ3JvdW5kLXJlcGVhdC15JzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtYXR0YWNobWVudCc6J2lu
aXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNr
Z3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1wb3NpdGlvbi15JzonaW5pdGlhbCcgaXMtaW1w
b3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtb3JpZ2lu
JzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitb
J2JhY2tncm91bmQtY2xpcCc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLWNvbG9yJzonZ3JlZW4nIGlzLWltcG9ydGFudF0g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorCis9PT0gQWZ0ZXIgdHdvIHByb3BlcnRpZXMg
ZGlzYWJsZWQsIG9uZSBwcm9wZXJ0eSBhZGRlZCwgb25lIHByb3BlcnR5IHJlbW92ZWQgPT09CisK
K3N0eWxlCityYXcgc3R5bGUKK1t0ZXh0PSdoZWlnaHQgOiAxMDAlIDsnXSBkaXNhYmxlZAorWydi
b3JkZXInOicxcHggc29saWQnXSBAWzYtMjRdIGFjdGl2ZQorWydib3JkZXItd2lkdGgnOicycHgn
XSBAWzI1LTQzXSBhY3RpdmUKK1snZ29vZ2xlcyc6J2FicmEnIG5vbi1wYXJzZWRdIEBbNDUtNTld
IGFjdGl2ZQorWydmb28nOicuYmFyJyBub24tcGFyc2VkXSBAWzYwLTcwXSBhY3RpdmUKK1snLW1v
ei1nb29nJzonMSoqKicgbm9uLXBhcnNlZF0gQFs3MS04N10gYWN0aXZlCitbJ2ZvbnQtc2l6ZSc6
JzEycHgnXSBAWzg4LTEwNF0gYWN0aXZlCitbdGV4dD0nYm9yZGVyLXdpZHRoOiAwcHg7J10gZGlz
YWJsZWQKK1t0ZXh0PSdmb250LXNpemU6IDE0cHg7J10gZGlzYWJsZWQKK1snYm9yZGVyLXRvcC1z
dHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydib3JkZXItcmln
aHQtc3R5bGUnOidzb2xpZCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYm9yZGVy
LWJvdHRvbS1zdHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydi
b3JkZXItbGVmdC1zdHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQor
Wydib3JkZXItY29sb3InOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQor
Wydib3JkZXItdG9wLXdpZHRoJzonMnB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQor
Wydib3JkZXItcmlnaHQtd2lkdGgnOicycHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxl
CitbJ2JvcmRlci1ib3R0b20td2lkdGgnOicycHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0
eWxlCitbJ2JvcmRlci1sZWZ0LXdpZHRoJzonMnB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBz
dHlsZQorCis9PT0gQWZ0ZXIgcHJvcGVydHkgZW5hYmxlZCA9PT0KKworc3R5bGUKK3JhdyBzdHls
ZQorW3RleHQ9J2hlaWdodCA6IDEwMCUgOyddIGRpc2FibGVkCitbJ2JvcmRlcic6JzFweCBzb2xp
ZCddIEBbNi0yNF0gYWN0aXZlCitbJ2JvcmRlci13aWR0aCc6JzJweCddIEBbMjUtNDNdIGFjdGl2
ZQorWydnb29nbGVzJzonYWJyYScgbm9uLXBhcnNlZF0gQFs0NS01OV0gYWN0aXZlCitbJ2Zvbyc6
Jy5iYXInIG5vbi1wYXJzZWRdIEBbNjAtNzBdIGFjdGl2ZQorWyctbW96LWdvb2cnOicxKioqJyBu
b24tcGFyc2VkXSBAWzcxLTg3XSBhY3RpdmUKK1snZm9udC1zaXplJzonMTJweCddIEBbODgtMTA0
XSBpbmFjdGl2ZQorW3RleHQ9J2JvcmRlci13aWR0aDogMHB4OyddIGRpc2FibGVkCitbJ2ZvbnQt
c2l6ZSc6JzE0cHgnXSBAWzEwNS0xMjFdIGFjdGl2ZQorWydib3JkZXItdG9wLXN0eWxlJzonc29s
aWQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JvcmRlci1yaWdodC1zdHlsZSc6
J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydib3JkZXItYm90dG9tLXN0
eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JvcmRlci1sZWZ0
LXN0eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JvcmRlci1j
b2xvcic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JvcmRlci10
b3Atd2lkdGgnOicycHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JvcmRlci1y
aWdodC13aWR0aCc6JzJweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYm9yZGVy
LWJvdHRvbS13aWR0aCc6JzJweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYm9y
ZGVyLWxlZnQtd2lkdGgnOicycHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1uZXctQVBJLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOTJiYjQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sCkBAIC0wLDAgKzEsMjk5IEBACis8aHRtbD4K
KzxoZWFkPgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy9zdHlsZXMt
bmV3LUFQSS5jc3MiIC0tPgorCis8c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
aW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImVsZW1lbnRzLXRlc3Rz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGRvaXQoKQoreworICAgIGZ1bmN0
aW9uIGNhbGxiYWNrKHJlc3VsdCkKKyAgICB7CisgICAgICAgIGR1bXBBcnJheShyZXN1bHQpOwor
ICAgICAgICBub3RpZnlEb25lKCk7CisgICAgfQorICAgIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3Io
ImZyb250ZW5kX3J1blRlc3QiLCBjYWxsYmFjayk7Cit9CisKKworLy8gRnJvbnRlbmQgZnVuY3Rp
b25zLgorCitmdW5jdGlvbiBmcm9udGVuZF9ydW5UZXN0KHRlc3RDb250cm9sbGVyKQoreworICAg
IHRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBmcm9udGVuZF9leHBhbmRET01T
dWJ0cmVlKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudCk7CisgICAgdGVzdENvbnRyb2xs
ZXIucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhmdW5jdGlvbigpIHsKKworICAgICAgICBmdW5j
dGlvbiB0YWJsZVN0eWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBzdHlsZXMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAg
ICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBdHRyaWJ1dGUgc3R5bGVzIGZv
ciB0YWJsZSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gc3R5bGVzLnN0eWxl
QXR0cmlidXRlcykgeworICAgICAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVz
aCgiQXR0cmlidXRlOiAiICsgYXR0cik7CisgICAgICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1
bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBzdHlsZXMuc3R5bGVBdHRyaWJ1dGVzW2F0dHJdKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnJvbnRlbmRfdGVzdFN0eWxlU2hlZXRzKHRl
c3RDb250cm9sbGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHN0eWxlc0NhbGxi
YWNrKHRlc3RDb250cm9sbGVyLCBzdHlsZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RD
b250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5y
ZXN1bHRzLnB1c2goIj09PSBDb21wdXRlZCBzdHlsZSBwcm9wZXJ0eSBjb3VudCBmb3IgYm9keSA9
PT0iKTsKKyAgICAgICAgICAgIHZhciBwcm9wQ291bnQgPSBzdHlsZXMuY29tcHV0ZWRTdHlsZS5j
c3NQcm9wZXJ0aWVzLmxlbmd0aDsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMu
cHVzaChwcm9wQ291bnQgPiAyMDAgPyAiT0siIDogIkZBSUwgKCIgKyBwcm9wQ291bnQgKyAiKSIp
OworCisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAg
ICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gTWF0Y2hlZCBydWxlcyBmb3Ig
Ym9keSA9PT0iKTsKKyAgICAgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlc0FycmF5KHRlc3RDb250
cm9sbGVyLCBzdHlsZXMubWF0Y2hlZENTU1J1bGVzKTsKKworICAgICAgICAgICAgdGVzdENvbnRy
b2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3Vs
dHMucHVzaCgiPT09IFBzZXVkbyBydWxlcyBmb3IgYm9keSA9PT0iKTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLnBzZXVkb0VsZW1lbnRzLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJQc2V1ZG9JZD0iICsg
c3R5bGVzLnBzZXVkb0VsZW1lbnRzW2ldLnBzZXVkb0lkKTsKKyAgICAgICAgICAgICAgICBmcm9u
dGVuZF9kdW1wUnVsZXNBcnJheSh0ZXN0Q29udHJvbGxlciwgc3R5bGVzLnBzZXVkb0VsZW1lbnRz
W2ldLnJ1bGVzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIu
cmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVz
aCgiPT09IEluaGVyaXRlZCBzdHlsZXMgZm9yIGJvZHkgPT09Iik7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHN0eWxlcy5pbmhlcml0ZWQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIkxldmVsPSIgKyAoaSArIDEpKTsK
KyAgICAgICAgICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRyb2xsZXIs
IHN0eWxlcy5pbmhlcml0ZWRbaV0uaW5saW5lU3R5bGUpOworICAgICAgICAgICAgICAgIGZyb250
ZW5kX2R1bXBSdWxlc0FycmF5KHRlc3RDb250cm9sbGVyLCBzdHlsZXMuaW5oZXJpdGVkW2ldLm1h
dGNoZWRDU1NSdWxlcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRlc3RDb250cm9s
bGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRz
LnB1c2goIj09PSBJbmxpbmUgc3R5bGUgZm9yIGJvZHkgPT09Iik7CisgICAgICAgICAgICBmcm9u
dGVuZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRyb2xsZXIsIHN0eWxlcy5pbmxpbmVTdHlsZSk7
CisKKyAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVzRm9yTm9kZTIoZnJvbnRl
bmRfbm9kZUZvcklkKCJ0aGV0YWJsZSIpLmlkLCB0YWJsZVN0eWxlc0NhbGxiYWNrLmJpbmQobnVs
bCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZ2V0U3R5bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHku
aWQsIHN0eWxlc0NhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICB9KTsK
K30KKworZnVuY3Rpb24gZnJvbnRlbmRfdGVzdFN0eWxlU2hlZXRzKHRlc3RDb250cm9sbGVyKQor
ewordmFyIG5ld1N0eWxlU2hlZXRUZXh0ID0KKyJib2R5Lm1haW5wYWdlIHtcCisgICAgdGV4dC1k
ZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdoO1wKKyAgICBiYWRwcm9wZXJ0eTogMmJhZHZhbHVlMjtc
Cit9XAorXAorYm9keSB7XAorICAgIHRleHQtYWxpZ246IGp1c3RpZnk7XAorfVwKKyI7CisKKyAg
ICBmdW5jdGlvbiBwYXRjaFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCisg
ICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0
ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBMYXN0IHN0eWxlc2hlZXQgcGF0Y2hlZCA9
PT0iKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdHlsZVNoZWV0VGV4dDIoc3R5bGVT
aGVldC5zdHlsZVNoZWV0SWQsIG5ld1N0eWxlU2hlZXRUZXh0LAorICAgICAgICAgICAgZnJvbnRl
bmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIsIHN0eWxl
U2hlZXQuc3R5bGVTaGVldElkLCBmcm9udGVuZF9jaGFuZ2VTZWxlY3Rvci5iaW5kKG51bGwsIHRl
c3RDb250cm9sbGVyKSkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0eWxlU2hlZXRJZHNMb2Fk
ZWQodGVzdENvbnRyb2xsZXIsIGlkcykKKyAgICB7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJl
c3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09
IEFsbCBzdHlsZXNoZWV0cyA9PT0iKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMu
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBmcm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQo
dGVzdENvbnRyb2xsZXIsIGlkc1tpXSwgKGkgPCBpZHMubGVuZ3RoIC0gMSkgPyBudWxsIDogcGF0
Y2hTdHlsZVNoZWV0LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICB9CisgICAgSW5z
cGVjdG9yQmFja2VuZC5nZXRBbGxTdHlsZXMyKHN0eWxlU2hlZXRJZHNMb2FkZWQuYmluZChudWxs
LCB0ZXN0Q29udHJvbGxlcikpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9jaGFuZ2VTZWxlY3Rv
cih0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldCkKK3sKKyAgICBmdW5jdGlvbiBkaWRTZXRTZWxl
Y3Rvcih0ZXN0Q29udHJvbGxlciwgcnVsZSkKKyAgICB7CisgICAgICAgIHRlc3RDb250cm9sbGVy
LnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgi
PT09IEFmdGVyIHNlbGVjdG9yIHNldCA9PT0iKTsKKyAgICAgICAgZnJvbnRlbmRfbG9hZEFuZER1
bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBmcm9udGVuZF9wYXJlbnRTdHlsZVNoZWV0SWQo
cnVsZS5ydWxlSWQpLCBmcm9udGVuZF9zZXRTdHlsZVRleHQuYmluZChudWxsLCB0ZXN0Q29udHJv
bGxlcikpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UnVsZVNlbGVjdG9yMihz
dHlsZVNoZWV0LnJ1bGVzWzBdLnJ1bGVJZCwgImh0bWwgKiwgYm9keVtmb289XCJiYXJcIl0iLCBk
aWRTZXRTZWxlY3Rvci5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9CisKK2Z1bmN0aW9u
IGZyb250ZW5kX3BhcmVudFN0eWxlU2hlZXRJZChydWxlT3JTdHlsZUlkKQoreworICAgIHJldHVy
biBydWxlT3JTdHlsZUlkLnN1YnN0cmluZygwLCBydWxlT3JTdHlsZUlkLmluZGV4T2YoJzonKSk7
Cit9CisKKworZnVuY3Rpb24gZnJvbnRlbmRfc2V0U3R5bGVUZXh0KHRlc3RDb250cm9sbGVyLCBz
dHlsZVNoZWV0KQoreworICAgIGZ1bmN0aW9uIGRpZFNldFN0eWxlVGV4dCh0ZXN0Q29udHJvbGxl
ciwgc3R5bGUpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIp
OworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBZnRlciBzdHlsZSB0
ZXh0IHNldCA9PT0iKTsKKyAgICAgICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRl
c3RDb250cm9sbGVyLCBmcm9udGVuZF9wYXJlbnRTdHlsZVNoZWV0SWQoc3R5bGUuc3R5bGVJZCks
IGZyb250ZW5kX2FkZFJ1bGUuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworICAgIH0KKwor
ICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UHJvcGVydHlUZXh0MihzdHlsZVNoZWV0LnJ1bGVzWzBd
LnN0eWxlLnN0eWxlSWQsIDAsICIiLCB0cnVlKTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFBy
b3BlcnR5VGV4dDIoc3R5bGVTaGVldC5ydWxlc1swXS5zdHlsZS5zdHlsZUlkLCAwLCAiIiwgdHJ1
ZSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRQcm9wZXJ0eVRleHQyKHN0eWxlU2hlZXQucnVs
ZXNbMF0uc3R5bGUuc3R5bGVJZCwgMCwgImNvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZDogYmxhY2s7
IiwgZmFsc2UsIGRpZFNldFN0eWxlVGV4dC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9
CisKK2Z1bmN0aW9uIGZyb250ZW5kX2FkZFJ1bGUodGVzdENvbnRyb2xsZXIpCit7CisgICAgZnVu
Y3Rpb24gZGlkR2V0U3R5bGVzKHRlc3RDb250cm9sbGVyLCBzdHlsZXMpCisgICAgeworICAgICAg
ICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxl
ci5yZXN1bHRzLnB1c2goIj09PSBNYXRjaGVkIHJ1bGVzIGFmdGVyIHJ1bGUgYWRkZWQgPT09Iik7
CisgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlc0FycmF5KHRlc3RDb250cm9sbGVyLCBzdHlsZXMu
bWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgZnJvbnRlbmRfZGlzYWJsZVByb3BlcnR5KHRlc3RD
b250cm9sbGVyKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkaWRTZXRTdHlsZVRleHQodGVzdENv
bnRyb2xsZXIsIHN0eWxlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRTdHls
ZXNGb3JOb2RlMihXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgZGlkR2V0
U3R5bGVzLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBydWxlQWRkZWQodGVzdENvbnRyb2xsZXIsIHJ1bGUpCisgICAgeworICAgICAgICBJbnNwZWN0
b3JCYWNrZW5kLnNldFByb3BlcnR5VGV4dDIocnVsZS5zdHlsZS5zdHlsZUlkLCAwLCAiZm9udDog
c2VyaWYiLCBmYWxzZSwgZGlkU2V0U3R5bGVUZXh0LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIp
KTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmFkZFJ1bGUyKFdlYkluc3BlY3Rvci5k
b21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCAiYm9keSIsIHJ1bGVBZGRlZC5iaW5kKG51bGwsIHRl
c3RDb250cm9sbGVyKSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2Rpc2FibGVQcm9wZXJ0eSh0
ZXN0Q29udHJvbGxlcikKK3sKKyAgICBmdW5jdGlvbiBkaWREaXNhYmxlUHJvcGVydHkodGVzdENv
bnRyb2xsZXIsIHN0eWxlKQorICAgIHsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5w
dXNoKCIiKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gQWZ0ZXIg
dHdvIHByb3BlcnRpZXMgZGlzYWJsZWQsIG9uZSBwcm9wZXJ0eSBhZGRlZCwgb25lIHByb3BlcnR5
IHJlbW92ZWQgPT09Iik7CisgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlT3JTdHlsZSh0ZXN0Q29u
dHJvbGxlciwgc3R5bGUpOworICAgICAgICBmcm9udGVuZF9lbmFibGVQcm9wZXJ0eSh0ZXN0Q29u
dHJvbGxlciwgc3R5bGUuc3R5bGVJZCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc3R5bGVzQ2Fs
bGJhY2sodGVzdENvbnRyb2xsZXIsIHN0eWxlcykKKyAgICB7CisgICAgICAgIC8vIGhlaWdodCA6
IDEwMCUgOworICAgICAgICAvLyBib3JkZXI6IDFweCBzb2xpZDsKKyAgICAgICAgLy8gYm9yZGVy
LXdpZHRoOiAycHg7CisgICAgICAgIC8vIGJhY2tncm91bmQtY29sb3IgOiAjMzNGRjMzOworICAg
ICAgICAvLyBnb29nbGVzOiBhYnJhOworICAgICAgICAvLyBmb286IC5iYXI7CisgICAgICAgIC8v
IC1tb3otZ29vZzogMSoqKjsKKyAgICAgICAgLy8gYm9yZGVyLXdpZHRoOiAwcHg7CisKKyAgICAg
ICAgdmFyIHN0eWxlID0gc3R5bGVzLm1hdGNoZWRDU1NSdWxlc1sxXS5zdHlsZTsKKyAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC50b2dnbGVQcm9wZXJ0eTIoc3R5bGUuc3R5bGVJZCwgMCwgdHJ1ZSk7
IC8vIGhlaWdodDogMTAwJQorICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnRvZ2dsZVByb3BlcnR5
MihzdHlsZS5zdHlsZUlkLCA3LCB0cnVlKTsgLy8gYm9yZGVyLXdpZHRoOiAwcHgKKyAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5zZXRQcm9wZXJ0eVRleHQyKHN0eWxlLnN0eWxlSWQsIDcsICJmb250
LXNpemU6IDEycHg7IiwgZmFsc2UpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFByb3Bl
cnR5VGV4dDIoc3R5bGUuc3R5bGVJZCwgOSwgImZvbnQtc2l6ZTogMTRweDsiLCBmYWxzZSk7Cisg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQudG9nZ2xlUHJvcGVydHkyKHN0eWxlLnN0eWxlSWQsIDks
IHRydWUpOyAvLyBmb250LXNpemU6IDE0cHgKKyAgICAgICAgLy8gaGVpZ2h0IDogMTAwJSA7IFtk
XQorICAgICAgICAvLyBib3JkZXI6IDFweCBzb2xpZDsKKyAgICAgICAgLy8gYm9yZGVyLXdpZHRo
OiAycHg7CisgICAgICAgIC8vIGJhY2tncm91bmQtY29sb3IgOiAjMzNGRjMzOworICAgICAgICAv
LyBnb29nbGVzOiBhYnJhOworICAgICAgICAvLyBmb286IC5iYXI7CisgICAgICAgIC8vIC1tb3ot
Z29vZzogMSoqKjsKKyAgICAgICAgLy8gZm9udC1zaXplOiAxMnB4OworICAgICAgICAvLyBib3Jk
ZXItd2lkdGg6IDBweDsgW2RdCisgICAgICAgIC8vIGZvbnQtc2l6ZTogMTRweDsgW2RdCisKKyAg
ICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRQcm9wZXJ0eVRleHQyKHN0eWxlLnN0eWxlSWQsIDMs
ICIiLCB0cnVlLCBkaWREaXNhYmxlUHJvcGVydHkuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikp
OworICAgIH0KKworICAgIHZhciB0b2dnbGVFbGVtZW50ID0gZnJvbnRlbmRfbm9kZUZvcklkKCJ0
b2dnbGUiKTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlc0Zvck5vZGUyKHRvZ2dsZUVs
ZW1lbnQuaWQsIHN0eWxlc0NhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30K
KworZnVuY3Rpb24gZnJvbnRlbmRfZW5hYmxlUHJvcGVydHkodGVzdENvbnRyb2xsZXIsIHN0eWxl
SWQpCit7CisgICAgZnVuY3Rpb24gZGlkRW5hYmxlUHJvcGVydHkodGVzdENvbnRyb2xsZXIsIHN0
eWxlKQorICAgIHsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAg
ICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gQWZ0ZXIgcHJvcGVydHkgZW5h
YmxlZCA9PT0iKTsKKyAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9s
bGVyLCBzdHlsZSk7CisgICAgICAgIHRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUodGVzdENvbnRy
b2xsZXIucmVzdWx0cyk7CisgICAgfQorCisgICAgSW5zcGVjdG9yQmFja2VuZC50b2dnbGVQcm9w
ZXJ0eTIoc3R5bGVJZCwgNiwgZmFsc2UpOworICAgIEluc3BlY3RvckJhY2tlbmQudG9nZ2xlUHJv
cGVydHkyKHN0eWxlSWQsIDgsIGZhbHNlLCBkaWRFbmFibGVQcm9wZXJ0eS5iaW5kKG51bGwsIHRl
c3RDb250cm9sbGVyKSk7Cit9CisKKy8vIERhdGEgZHVtcGluZworCitmdW5jdGlvbiBmcm9udGVu
ZF9kdW1wUnVsZXNBcnJheSh0ZXN0Q29udHJvbGxlciwgcnVsZXMpCit7CisgICAgaWYgKCFydWxl
cykKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3Ro
OyArK2kpCisgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlT3JTdHlsZSh0ZXN0Q29udHJvbGxlciwg
cnVsZXNbaV0pOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9kdW1wUnVsZU9yU3R5bGUodGVzdENv
bnRyb2xsZXIsIHJ1bGVPclN0eWxlKQoreworICAgIGlmICghcnVsZU9yU3R5bGUpCisgICAgICAg
IHJldHVybjsKKyAgICB2YXIgaXNSdWxlID0gISEocnVsZU9yU3R5bGUuc3R5bGUpOworICAgIHZh
ciBzdHlsZSA9IGlzUnVsZSA/IHJ1bGVPclN0eWxlLnN0eWxlIDogcnVsZU9yU3R5bGU7CisgICAg
dGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goaXNSdWxlID8gInJ1bGUiIDogInN0eWxlIik7CisgICAgdGVzdENvbnRyb2xsZXIu
cmVzdWx0cy5wdXNoKChpc1J1bGUgPyAocnVsZU9yU3R5bGUuc2VsZWN0b3JUZXh0ICsgIjogWyIg
KyBydWxlT3JTdHlsZS5vcmlnaW4gKyAiXSIpIDogInJhdyBzdHlsZSIpKTsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHN0eWxlLmNzc1Byb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
dmFyIHByb3BlcnR5ID0gc3R5bGUuY3NzUHJvcGVydGllc1tpXTsKKyAgICAgICAgaWYgKHByb3Bl
cnR5LnN0YXR1cyAhPT0gImRpc2FibGVkIikKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJl
c3VsdHMucHVzaCgiWyciICsgcHJvcGVydHkubmFtZSArICInOiciICsgcHJvcGVydHkudmFsdWUg
KyAiJyIgKyAocHJvcGVydHkucHJpb3JpdHkgPT09ICJpbXBvcnRhbnQiID8gIiBpcy1pbXBvcnRh
bnQiIDogIiIpICsgKHByb3BlcnR5LnBhcnNlZE9rID8gIiIgOiAiIG5vbi1wYXJzZWQiKSArIl0g
QFsiICsgcHJvcGVydHkuc3RhcnRPZmZzZXQgKyAiLSIgKyBwcm9wZXJ0eS5lbmRPZmZzZXQgKyAi
XSAiICsgcHJvcGVydHkuc3RhdHVzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdENv
bnRyb2xsZXIucmVzdWx0cy5wdXNoKCJbdGV4dD0nIiArIHByb3BlcnR5LnRleHQgKyAiJ10gIiAr
IHByb3BlcnR5LnN0YXR1cyk7CisgICAgfQorfQorCisKK2Z1bmN0aW9uIGZyb250ZW5kX2xvYWRB
bmREdW1wU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldElkLCBjb250aW51YXRp
b24pCit7CisgICAgZnVuY3Rpb24gc3R5bGVTaGVldExvYWRlZCh0ZXN0Q29udHJvbGxlciwgc3R5
bGVTaGVldCkKKyAgICB7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7
CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiU3R5bGVTaGVldDogJyIgKyBz
dHlsZVNoZWV0LnRleHQgKyAiJyIpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxl
U2hlZXQucnVsZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9y
U3R5bGUodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQucnVsZXNbaV0pOworICAgICAgICBpZiAo
Y29udGludWF0aW9uKQorICAgICAgICAgICAgY29udGludWF0aW9uKHN0eWxlU2hlZXQpOworICAg
IH0KKworICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVTaGVldDIoc3R5bGVTaGVldElkLCBz
dHlsZVNoZWV0TG9hZGVkLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworLyoKK0Nv
dmVyZWQgQVBJIG1ldGhvZHM6CisgLSBnZXRTdHlsZXNGb3JOb2RlMgorIC0gZ2V0QWxsU3R5bGVz
MgorIC0gZ2V0U3R5bGVTaGVldDIKKyAtIHNldFN0eWxlU2hlZXRUZXh0MgorIC0gc2V0U3R5bGVE
YXRhMgorIC0gc2V0UnVsZVNlbGVjdG9yMgorIC0gYWRkUnVsZTIKKyovCisKKzwvc2NyaXB0Pgor
Cis8c3R5bGU+CisKKy8qIEFuIGlubGluZSBzdHlsZXNoZWV0ICovCitib2R5Lm1haW5wYWdlIHsK
KyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC8qIGF0IGxlYXN0IG9uZSB2YWxpZCBwcm9wZXJ0
eSBpcyBuZWNlc3NhcnkgZm9yIFdlYkNvcmUgdG8gbWF0Y2ggYSBydWxlICovCisgICAgYmFkcHJv
cGVydHk6IDFiYWR2YWx1ZTE7Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGNsYXNz
PSJtYWluMSBtYWluMiBtYWlucGFnZSIgb25sb2FkPSJvbmxvYWQoKSIgc3R5bGU9ImZvbnQtd2Vp
Z2h0OiBub3JtYWw7IHdpZHRoOiA4NSUiPgorPHA+CitUZXN0cyB0aGF0IEluc3BlY3RvckNTU0Fn
ZW50IEFQSSBtZXRob2RzIHdvcmsgYXMgZXhwZWN0ZWQuCis8L3A+Cis8dGFibGUgd2lkdGg9NTAl
IGlkPSJ0aGV0YWJsZSI+Cis8L3RhYmxlPgorPGgxIGlkPSJ0b2dnbGUiPkgxPC9oMT4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291
cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1z
b3VyY2Utb2Zmc2V0cy1leHBlY3RlZC50eHQKaW5kZXggZTRkMzNkOC4uYmVlYzcyOCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1l
eHBlY3RlZC50eHQKQEAgLTEsNiArMSw2IEBACiBUZXN0cyB0aGF0IHByb3BlciBkYXRhIGFuZCBz
dGFydC9lbmQgb2Zmc2V0IHBvc2l0aW9ucyBhcmUgcmVwb3J0ZWQgZm9yIENTUyBzdHlsZSBkZWNs
YXJhdGlvbnMgYW5kIHByb3BlcnRpZXMuCiAKLWJvZHk6IFs2LTI2Nl0KK2JvZHk6IFswLTRdIFs2
LTI2Nl0KIFsnZm9udC1zaXplJzonMTJweCddIEBbNS0yMV0KIFsnZm9vJzonYmFyICEKIApAQCAt
OSwxNSArOSwxNSBAQCBib2R5OiBbNi0yNjZdCiBbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9u
LXBhcnNlZF0gQFsxMzgtMTU5XQogWydpbXBvcnRhbnQnOicnIG5vbi1wYXJzZWRdIEBbMTY0LTE3
NF0KIFsnY29sb3InOiciYmFkY29sb3IiICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0
aCBzdHJhbmdlIHZhbHVlICovJyAhaW1wb3J0YW50XSBAWzE5MC0yNTldCi1ib2R5Lm1haW4xOiBb
MzM3LTQxOF0KK2JvZHkubWFpbjE6IFsyOTgtMzM2XSBbMzM3LTQxOF0KIFsnY29sb3InOicjRjAw
QkFBJ10gQFsxMy0yOF0KIFsnem9vJzonbW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2du
aXplZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsyOC04MV0KLWJvZHkubWFpbjI6IFs0NDUt
NTQwXQorYm9keS5tYWluMjogWzQzNC00NDRdIFs0NDUtNTQwXQogWydiYWNrZ3JvdW5kJzonZ3Jl
ZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQgLyogbm8gc2VtaWNv
bG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi8nICFpbXBvcnRhbnRdIEBbMC05NV0KLWJvZHkubWFpbnBh
Z2U6IFsxNy0xNDldCitib2R5Lm1haW5wYWdlOiBbMi0xNV0gWzE3LTE0OV0KIFsndGV4dC1kZWNv
cmF0aW9uJzonbm9uZSddIEBbNS0yN10KIFsnYmFkcHJvcGVydHknOicxYmFkdmFsdWUxJyBub24t
cGFyc2VkXSBAWzEwNy0xMzFdCi1lbGVtZW50LnN0eWxlOiBbMC0zMV0KK2VsZW1lbnQuc3R5bGU6
IFswLTBdIFswLTMxXQogWydmb250LXdlaWdodCc6J25vcm1hbCddIEBbMC0yMF0KIFsnd2lkdGgn
Oic4MCUnXSBAWzIxLTMxXQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5
bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNv
dXJjZS1vZmZzZXRzLmh0bWwKaW5kZXggMTVhMzcyNy4uOTc5ZDAyYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCisrKyBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbApAQCAtNDMsNyArNDMs
NyBAQCBmdW5jdGlvbiBmcm9udGVuZF9ydW5UZXN0KHRlc3RDb250cm9sbGVyKQogZnVuY3Rpb24g
ZnJvbnRlbmRfc3R5bGVEYXRhUmVjZWl2ZWQodGVzdENvbnRyb2xsZXIsIHJ1bGVPclN0eWxlLCBz
aG91bGRCYWlsLCBkYXRhKQogewogICAgIHZhciBpc1J1bGUgPSAhIShydWxlT3JTdHlsZS5zdHls
ZSk7Ci0gICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKChpc1J1bGUgPyBydWxlT3JTdHls
ZS5zZWxlY3RvclRleHQgOiAiZWxlbWVudC5zdHlsZSIpICsgIjogWyIgKyBkYXRhLmJvZHlSYW5n
ZS5zdGFydCArICItIiArIGRhdGEuYm9keVJhbmdlLmVuZCArICJdIik7CisgICAgdGVzdENvbnRy
b2xsZXIucmVzdWx0cy5wdXNoKChpc1J1bGUgPyBydWxlT3JTdHlsZS5zZWxlY3RvclRleHQgOiAi
ZWxlbWVudC5zdHlsZSIpICsgIjogWyIgKyBkYXRhLnNlbGVjdG9yUmFuZ2Uuc3RhcnQgKyAiLSIg
KyBkYXRhLnNlbGVjdG9yUmFuZ2UuZW5kICsgIl0gWyIgKyBkYXRhLmJvZHlSYW5nZS5zdGFydCAr
ICItIiArIGRhdGEuYm9keVJhbmdlLmVuZCArICJdIik7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBkYXRhLnByb3BlcnR5RGF0YS5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgcHJvcGVydHlE
YXR1bSA9IGRhdGEucHJvcGVydHlEYXRhW2ldOwogICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goIlsnIiArIHByb3BlcnR5RGF0dW0ubmFtZSArICInOiciICsgcHJvcGVydHlEYXR1
bS52YWx1ZSArICInIiArIChwcm9wZXJ0eURhdHVtLmltcG9ydGFudCA/ICIgIWltcG9ydGFudCIg
OiAiIikgKyAocHJvcGVydHlEYXR1bS5wYXJzZWQgPyAiIiA6ICIgbm9uLXBhcnNlZCIpICsiXSBA
WyIgKyBwcm9wZXJ0eURhdHVtLnN0YXJ0ICsgIi0iICsgcHJvcGVydHlEYXR1bS5lbmQgKyAiXSIp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBhZDZjZjAwLi4zYTZjNmM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEwLTExLTAyICBBbGV4YW5kZXIg
UGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRW5hYmxlIEluc3BlY3RvckNT
U0FnZW50IChub3QgdXNlZCBieSBmcm9udGVuZCBmb3IgQ1NTIGVkaXRpbmcgeWV0KQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MzQKKworICAgICAg
ICBEcml2ZS1ieSBmaXg6IHVzZSBhIHNpbmdsZSBBUEkgbWV0aG9kIHRvIHJldHJpZXZlIGFsbCBu
b2RlLXJlbGF0ZWQgc3R5bGVzIGluc3RlYWQgb2YgYSBidW5jaCBvZiBzZXBhcmF0ZSBjYWxscy4K
KworICAgICAgICBUZXN0OiBpbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbAorCisgICAgICAg
ICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpJbnNwZWN0b3JDU1NB
Z2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0RE9NQWdlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZXNGb3JOb2RlMik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlMik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cXVlcnlTZWxlY3RvckFsbCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OmNzc0FnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGU6OnN0eWxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZTo6ZGlzYWJsZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
Ojpwb3B1bGF0ZUFsbFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5
bGU6OnBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6dGV4
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlUHJvcGVydHk6OnNldFJhd1RleHRGcm9tU3R5bGVEZWNs
YXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVByb3BlcnR5OjpoYXNS
YXdUZXh0KToKKwogMjAxMC0xMS0wMiAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBiL1dlYkNvcmUv
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KaW5kZXggM2E4YTZjYi4uZjVmMjQ1
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
bQorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCkBAIC0z
OCw2ICszOCwxMSBAQCAkdHlwZVRyYW5zZm9ybXsiRE9NIn0gPSB7CiAgICAgImhlYWRlciIgPT4g
Ikluc3BlY3RvckRPTUFnZW50LmgiLAogICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSIsCiB9OworJHR5cGVUcmFuc2Zvcm17IkNTUyJ9ID0g
eworICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQ1NTQWdlbnQiLAorICAgICJoZWFkZXIiID0+
ICJJbnNwZWN0b3JDU1NBZ2VudC5oIiwKKyAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmNzc0FnZW50KCkiLAorfTsKICR0eXBlVHJhbnNmb3JteyJBcHBsaWNh
dGlvbkNhY2hlIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQuaCIsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCAxZjRjNzhjLi41NWQzYTQzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvci5pZGwKQEAgLTIwNyw3ICsyMDcsMTkgQEAgbW9kdWxlIGNvcmUgewog
ICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgdG9nZ2xlU3R5bGVFbmFibGVkKGluIGxvbmcgc3R5
bGVJZCwgaW4gU3RyaW5nIHByb3BlcnR5TmFtZSwgaW4gYm9vbGVhbiBkaXNhYmxlZCwgb3V0IFZh
bHVlIHN0eWxlKTsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIHNldFJ1bGVTZWxlY3Rvcihp
biBsb25nIHJ1bGVJZCwgaW4gU3RyaW5nIHNlbGVjdG9yLCBpbiBsb25nIHNlbGVjdGVkTm9kZUlk
LCBvdXQgVmFsdWUgcnVsZSwgb3V0IGJvb2xlYW4gc2VsZWN0b3JBZmZlY3RzTm9kZSk7CiAgICAg
ICAgIFtoYW5kbGVyPURPTV0gdm9pZCBhZGRSdWxlKGluIFN0cmluZyBzZWxlY3RvciwgaW4gbG9u
ZyBzZWxlY3RlZE5vZGVJZCwgb3V0IFZhbHVlIHJ1bGUsIG91dCBib29sZWFuIHNlbGVjdG9yQWZm
ZWN0c05vZGUpOwotICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJv
cGVydGllcyhvdXQgQXJyYXkgY3NzUHJvcGVydGllcyk7CisKKyAgICAgICAgW2hhbmRsZXI9Q1NT
XSB2b2lkIGdldFN0eWxlc0Zvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgVmFsdWUgc3R5bGVz
KTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldENvbXB1dGVkU3R5bGVGb3JOb2RlMihp
biBsb25nIG5vZGVJZCwgb3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2
b2lkIGdldElubGluZVN0eWxlRm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91dCBWYWx1ZSBzdHls
ZSk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRBbGxTdHlsZXMyKG91dCBBcnJheSBz
dHlsZVNoZWV0SWRzKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldFN0eWxlU2hlZXQy
KGluIFN0cmluZyBzdHlsZVNoZWV0SWQsIG91dCBWYWx1ZSBzdHlsZVNoZWV0KTsKKyAgICAgICAg
W2hhbmRsZXI9Q1NTXSB2b2lkIHNldFN0eWxlU2hlZXRUZXh0MihpbiBTdHJpbmcgc3R5bGVTaGVl
dElkLCBpbiBTdHJpbmcgdGV4dCk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBzZXRQcm9w
ZXJ0eVRleHQyKGluIFN0cmluZyBzdHlsZUlkLCBpbiBsb25nIHByb3BlcnR5SW5kZXgsIGluIFN0
cmluZyB0ZXh0LCBpbiBib29sZWFuIG92ZXJ3cml0ZSwgb3V0IFZhbHVlIHN0eWxlKTsKKyAgICAg
ICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHRvZ2dsZVByb3BlcnR5MihpbiBTdHJpbmcgc3R5bGVJZCwg
aW4gbG9uZyBwcm9wZXJ0eUluZGV4LCBpbiBib29sZWFuIGRpc2FibGUsIG91dCBWYWx1ZSBzdHls
ZSk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGluIFN0cmlu
ZyBydWxlSWQsIGluIFN0cmluZyBzZWxlY3Rvciwgb3V0IFZhbHVlIHJ1bGUpOworICAgICAgICBb
aGFuZGxlcj1DU1NdIHZvaWQgYWRkUnVsZTIoaW4gbG9uZyBjb250ZXh0Tm9kZUlkLCBpbiBTdHJp
bmcgc2VsZWN0b3IsIG91dCBWYWx1ZSBydWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lk
IGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMob3V0IEFycmF5IGNzc1Byb3BlcnRpZXMpOworICAg
ICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgcXVlcnlTZWxlY3RvckFsbChpbiBsb25nIGRvY3VtZW50
SWQsIGluIFN0cmluZyBzZWxlY3Rvciwgb3V0IEFycmF5IHJlc3VsdCk7CiAKICAgICAgICAgW2hh
bmRsZXI9Q29udHJvbGxlcl0gdm9pZCBnZXRDb29raWVzKG91dCBBcnJheSBjb29raWVzLCBvdXQg
U3RyaW5nIGNvb2tpZXNTdHJpbmcpOwogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lk
IGRlbGV0ZUNvb2tpZShpbiBTdHJpbmcgY29va2llTmFtZSwgaW4gU3RyaW5nIGRvbWFpbik7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggZDFmNzQxMi4uNWNiNzFj
NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtODYsNyArODYs
MTIgQEAKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmROYW1lMiA6IHNob3J0
aGFuZFZhbHVlMgogLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwKIC8vICAgIGNzc1RleHQg
ICAgICAgICAgICA6IDxzdHJpbmc+LCAvLyBPcHRpb25hbCAtIGRlY2xhcmF0aW9uIHRleHQKLS8v
ICAgIHByb3BlcnRpZXMgICAgICAgICA6IHsgd2lkdGgsIGhlaWdodCB9CisvLyAgICBwcm9wZXJ0
aWVzICAgICAgICAgOiB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAorLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0T2Zmc2V0LCAvLyBPcHRpb25hbCAtIGZvciBzb3VyY2UtYmFzZWQgc3R5bGVzIG9u
bHkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQsIC8vIE9wdGlvbmFsIC0g
Zm9yIHNvdXJjZS1iYXNlZCBzdHlsZXMgb25seQorLy8gICAgICAgICAgICAgICAgICAgICAgICAg
fQogLy8gfQogLy8KIC8vIGNzc1J1bGUgPSB7CkBAIC05NSw3ICsxMDAsOCBAQAogLy8gICAgc291
cmNlVVJMICAgIDogPHN0cmluZz4sCiAvLyAgICBzb3VyY2VMaW5lICAgOiA8c3RyaW5nPiwKIC8v
ICAgIG9yaWdpbiAgICAgICA6IDxzdHJpbmc+LCAvLyAiIiB8fCAidXNlci1hZ2VudCIgfHwgInVz
ZXIiIHx8ICJpbnNwZWN0b3IiCi0vLyAgICBzdHlsZSAgICAgICAgOiAjY3NzU3R5bGUKKy8vICAg
IHN0eWxlICAgICAgICA6ICNjc3NTdHlsZSwKKy8vICAgIHNlbGVjdG9yUmFuZ2U6IHsgc3RhcnQ6
IDxudW1iZXI+LCBlbmQ6IDxudW1iZXI+IH0gLy8gT3B0aW9uYWwgLSBmb3Igc291cmNlLWJhc2Vk
IHJ1bGVzIG9ubHkKIC8vIH0KIC8vCiAvLyBjc3NTdHlsZVNoZWV0ID0gewpAQCAtMTM3LDE0ICsx
NDMsMTIgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUo
U3R5bGVCYXNlKiBzdHlsZUJhc2UpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1N0eWxlUnVs
ZSo+KHJ1bGUpOwogfQogCi1JbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5z
cGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCi0g
ICAgOiBtX2RvbUFnZW50KGRvbUFnZW50KQotICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKK0lu
c3BlY3RvckNTU0FnZW50OjpJbnNwZWN0b3JDU1NBZ2VudCgpCisgICAgOiBtX2RvbUFnZW50KDAp
CiAgICAgLCBtX2xhc3RTdHlsZVNoZWV0SWQoMSkKICAgICAsIG1fbGFzdFJ1bGVJZCgxKQogICAg
ICwgbV9sYXN0U3R5bGVJZCgxKQogewotICAgIG1fZG9tQWdlbnQtPnNldERPTUxpc3RlbmVyKHRo
aXMpOwogfQogCiBJbnNwZWN0b3JDU1NBZ2VudDo6fkluc3BlY3RvckNTU0FnZW50KCkKQEAgLTE1
Miw0NyArMTU2LDc2IEBAIEluc3BlY3RvckNTU0FnZW50Ojp+SW5zcGVjdG9yQ1NTQWdlbnQoKQog
ICAgIHJlc2V0KCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldERPTUFnZW50KElu
c3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCkKK3sKKyAgICBpZiAobV9kb21BZ2VudCkKKyAgICAg
ICAgbV9kb21BZ2VudC0+c2V0RE9NTGlzdGVuZXIoMCk7CisgICAgbV9kb21BZ2VudCA9IGRvbUFn
ZW50OworICAgIGlmIChtX2RvbUFnZW50KQorICAgICAgICBtX2RvbUFnZW50LT5zZXRET01MaXN0
ZW5lcih0aGlzKTsKK30KKwogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQogewotICAg
IG1fZG9tQWdlbnQtPnNldERPTUxpc3RlbmVyKDApOworICAgIG1faWRUb0luc3BlY3RvclN0eWxl
U2hlZXQuY2xlYXIoKTsKKyAgICBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQu
Y2xlYXIoKTsKKyAgICBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuY2xlYXIoKTsKKyAgICBt
X2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRSdWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHls
ZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQog
ewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQobm9kZUlkKTsKICAgICBpZiAo
IWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisKKyAgICBJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxl
U2hlZXQoZWxlbWVudCk7CisgICAgaWYgKHN0eWxlU2hlZXQpCisgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5
bGUoZWxlbWVudC0+c3R5bGUoKSkpOworCisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbj4gY29tcHV0ZWRTdHlsZUluZm8gPSBjb21wdXRlZFN0eWxlKGVsZW1lbnQsIHRydWUp
OyAvLyBTdXBwb3J0IHRoZSB2aWV3aW5nIG9mIDp2aXNpdGVkIGluZm9ybWF0aW9uIGluIGNvbXB1
dGVkIHN0eWxlLgorICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gY29tcHV0ZWRJbnNwZWN0b3JT
dHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQoKSwgY29tcHV0ZWRT
dHlsZUluZm8uZ2V0KCksIDApOworICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJjb21wdXRl
ZFN0eWxlIiwgY29tcHV0ZWRJbnNwZWN0b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JTdHlsZSgpKTsK
KwogICAgIENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yID0gZWxlbWVudC0+b3duZXJEb2N1bWVu
dCgpLT5zdHlsZVNlbGVjdG9yKCk7CiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVs
ZXMgPSBzZWxlY3Rvci0+c3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgZmFsc2UsIHRydWUp
OwotICAgICpyZXN1bHQgPSBidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLmdldCgp
KTsKLX0KKyAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCBidWls
ZEFycmF5Rm9yUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLmdldCgpKSk7CiAKLXZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmdldE1hdGNoZWRQc2V1ZG9SdWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpCi17Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IGVs
ZW1lbnRGb3JJZChub2RlSWQpOwotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwor
ICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzdHlsZUF0dHJpYnV0ZXMiLCBidWlsZE9iamVj
dEZvckF0dHJpYnV0ZVN0eWxlcyhlbGVtZW50KSk7CiAKLSAgICBDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHNldWRvRWxlbWVudHMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CiAgICAgZm9yIChQc2V1ZG9JZCBwc2V1ZG9JZCA9IEZJUlNUX1BVQkxJQ19QU0VV
RE9JRDsgcHNldWRvSWQgPCBBRlRFUl9MQVNUX0lOVEVSTkFMX1BTRVVET0lEOyBwc2V1ZG9JZCA9
IHN0YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG9JZCArIDEpKSB7CiAgICAgICAgIFJlZlB0cjxD
U1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnBzZXVkb1N0eWxlUnVsZXNGb3JF
bGVtZW50KGVsZW1lbnQsIHBzZXVkb0lkLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIGlmIChtYXRj
aGVkUnVsZXMgJiYgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKSkgewogICAgICAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcHNldWRvU3R5bGVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+c2V0TnVtYmVyKCJwc2V1ZG9JZCIsIHN0YXRp
Y19jYXN0PGludD4ocHNldWRvSWQpKTsKICAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+c2V0QXJy
YXkoInJ1bGVzIiwgYnVpbGRBcnJheUZvclJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5nZXQoKSkpOwot
ICAgICAgICAgICAgKCpyZXN1bHQpLT5wdXNoT2JqZWN0KHBzZXVkb1N0eWxlcy5yZWxlYXNlKCkp
OworICAgICAgICAgICAgcHNldWRvRWxlbWVudHMtPnB1c2hPYmplY3QocHNldWRvU3R5bGVzLnJl
bGVhc2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci19CisgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJh
eSgicHNldWRvRWxlbWVudHMiLCBwc2V1ZG9FbGVtZW50cy5yZWxlYXNlKCkpOwogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50OjpnZXRBdHRyaWJ1dGVTdHlsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQotewotICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBlbGVtZW50Rm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVy
bjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluaGVyaXRlZFN0eWxlcyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKKyAgICBFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpOworICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7CisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmVudFN0eWxlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVu
dC0+c3R5bGUoKS0+bGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZSogc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChwYXJlbnRF
bGVtZW50KTsKKyAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0KQorICAgICAgICAgICAgICAgIHBh
cmVudFN0eWxlLT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgc3R5bGVTaGVldC0+YnVpbGRPYmpl
Y3RGb3JTdHlsZShzdHlsZVNoZWV0LT5zdHlsZUZvcklkKEluc3BlY3RvckNTU0lkOjpjcmVhdGVG
cm9tUGFydHMoc3R5bGVTaGVldC0+aWQoKSwgIjAiKSkpKTsKKyAgICAgICAgfQogCi0gICAgKnJl
c3VsdCA9IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKGVsZW1lbnQpOworICAgICAgICBD
U1NTdHlsZVNlbGVjdG9yKiBwYXJlbnRTZWxlY3RvciA9IHBhcmVudEVsZW1lbnQtPm93bmVyRG9j
dW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IHBh
cmVudE1hdGNoZWRSdWxlcyA9IHBhcmVudFNlbGVjdG9yLT5zdHlsZVJ1bGVzRm9yRWxlbWVudChw
YXJlbnRFbGVtZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHBhcmVudFN0eWxlLT5zZXRBcnJh
eSgibWF0Y2hlZENTU1J1bGVzIiwgYnVpbGRBcnJheUZvclJ1bGVMaXN0KHBhcmVudE1hdGNoZWRS
dWxlcy5nZXQoKSkpOworICAgICAgICBpbmhlcml0ZWRTdHlsZXMtPnB1c2hPYmplY3QocGFyZW50
U3R5bGUucmVsZWFzZSgpKTsKKyAgICAgICAgcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKTsKKyAgICB9CisgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiaW5o
ZXJpdGVkIiwgaW5oZXJpdGVkU3R5bGVzLnJlbGVhc2UoKSk7CisKKyAgICAqcmVzdWx0ID0gcmVz
dWx0T2JqZWN0LnJlbGVhc2UoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0SW5s
aW5lU3R5bGVGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5
bGUpCkBAIC0yMTQsNDIgKzI0NywxMSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21w
dXRlZFN0eWxlRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYQogICAgIGlm
ICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRE9NV2luZG93KiBkZWZhdWx0Vmll
dyA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKTsKLSAgICBpZiAoIWRl
ZmF1bHRWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJh
dGlvbj4gY29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3LT5nZXRDb21wdXRlZFN0eWxlKGVsZW1l
bnQsICIiKTsKLSAgICBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4gcHJvcGVydGllczsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5
bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgpLCBjb21wdXRlZFN0eWxlLmdldCgpLCAwKTsKKyAg
ICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlSW5mbyA9
IGNvbXB1dGVkU3R5bGUoZWxlbWVudCwgdHJ1ZSk7CisgICAgUmVmUHRyPEluc3BlY3RvclN0eWxl
PiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQo
KSwgY29tcHV0ZWRTdHlsZUluZm8uZ2V0KCksIDApOwogICAgICpzdHlsZSA9IGluc3BlY3RvclN0
eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBzdHlsZSkKLXsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5v
ZGVJZCk7Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgICpzdHlsZSA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGluaGVyaXRlZFN0eWxlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAg
ICBFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAg
IHdoaWxlIChwYXJlbnRFbGVtZW50KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmVudFN0eWxlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgaWYgKHBh
cmVudEVsZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVudC0+c3R5bGUoKS0+bGVuZ3RoKCkp
IHsKLSAgICAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogc3R5bGVT
aGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChlbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChz
dHlsZVNoZWV0KQotICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRPYmplY3QoImlubGlu
ZVN0eWxlIiwgc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZVNoZWV0LT5zdHls
ZUZvcklkKEluc3BlY3RvckNTU0lkOjpjcmVhdGVGcm9tUGFydHMoc3R5bGVTaGVldC0+aWQoKSwg
IjAiKSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIENTU1N0eWxlU2VsZWN0b3IqIHBhcmVudFNl
bGVjdG9yID0gcGFyZW50RWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7
Ci0gICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcGFyZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50
U2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50KHBhcmVudEVsZW1lbnQsIGZhbHNlLCB0cnVl
KTsKLSAgICAgICAgcGFyZW50U3R5bGUtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCBidWls
ZEFycmF5Rm9yUnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVzLmdldCgpKSk7Ci0gICAgICAgIGlu
aGVyaXRlZFN0eWxlcy0+cHVzaE9iamVjdChwYXJlbnRTdHlsZS5yZWxlYXNlKCkpOwotICAgICAg
ICBwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAgIH0K
LSAgICAqc3R5bGUgPSBpbmhlcml0ZWRTdHlsZXMucmVsZWFzZSgpOwotfQotCiB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZXMyKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxl
cykKIHsKICAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID4mIGRvY3VtZW50
cyA9IG1fZG9tQWdlbnQtPmRvY3VtZW50cygpOwpAQCAtMzM1LDggKzMzNywxMCBAQCB2b2lkIElu
c3BlY3RvckNTU0FnZW50OjphZGRSdWxlMihjb25zdCBsb25nIGNvbnRleHROb2RlSWQsIGNvbnN0
IFN0cmluZyYgc2VsZWN0bwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5
bGVTaGVldCA9IHZpYUluc3BlY3RvclN0eWxlU2hlZXQobm9kZS0+ZG9jdW1lbnQoKSwgdHJ1ZSk7
CiAgICAgQ1NTU3R5bGVSdWxlKiBuZXdSdWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YWRkUnVs
ZShzZWxlY3Rvcik7Ci0gICAgaWYgKG5ld1J1bGUpCi0gICAgICAgICpyZXN1bHQgPSBpbnNwZWN0
b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUobmV3UnVsZSk7CisgICAgaWYgKCFuZXdS
dWxlKQorICAgICAgICByZXR1cm47CisKKyAgICAqcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVl
dC0+YnVpbGRPYmplY3RGb3JSdWxlKG5ld1J1bGUpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNz
c1Byb3BlcnRpZXMpCkBAIC0zNDgsNiArMzUyLDI2IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY3NzUHJv
CiAgICAgKmNzc1Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLnJlbGVhc2UoKTsKIH0KIAordm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6cXVlcnlTZWxlY3RvckFsbChjb25zdCBsb25nIG5vZGVJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KQorewor
ICAgIE5vZGUqIG5vZGUgPSBtX2RvbUFnZW50LT5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICBpZiAo
IW5vZGUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW5vZGUtPmlzRG9jdW1lbnROb2RlKCkp
CisgICAgICAgIG5vZGUgPSBub2RlLT5vd25lckRvY3VtZW50KCk7CisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm47CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPE5v
ZGVMaXN0PiBub2RlcyA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obm9kZSktPnF1ZXJ5U2VsZWN0
b3JBbGwoc2VsZWN0b3IsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
Tm9kZSogYWZmZWN0ZWROb2RlID0gbm9kZXMtPml0ZW0oaSk7CisgICAgICAgIGxvbmcgaWQgPSBt
X2RvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGFmZmVjdGVkTm9kZSk7CisgICAgICAg
ICgqcmVzdWx0KS0+cHVzaE51bWJlcihpZCk7CisgICAgfQorfQorCiAvLyBzdGF0aWMKIEVsZW1l
bnQqIEluc3BlY3RvckNTU0FnZW50OjppbmxpbmVTdHlsZUVsZW1lbnQoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpCiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCAz
NDFkMDlhLi43MWNhNTgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAg
LTQ5LDI2ICs0OSwyMCBAQCBjbGFzcyBOb2RlOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAot
Y2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JDU1NB
Z2VudD4sIHB1YmxpYyBJbnNwZWN0b3JET01BZ2VudDo6RE9NTGlzdGVuZXIgeworY2xhc3MgSW5z
cGVjdG9yQ1NTQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yRE9NQWdlbnQ6OkRPTUxpc3RlbmVyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JDU1NBZ2VudD4gY3JlYXRl
KEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5k
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JDU1NBZ2VudChk
b21BZ2VudCwgZnJvbnRlbmQpKTsKLSAgICB9Ci0KICAgICBzdGF0aWMgQ1NTU3R5bGVTaGVldCog
cGFyZW50U3R5bGVTaGVldChTdHlsZUJhc2UqKTsKICAgICBzdGF0aWMgQ1NTU3R5bGVSdWxlKiBh
c0NTU1N0eWxlUnVsZShTdHlsZUJhc2UqKTsKIAotICAgIEluc3BlY3RvckNTU0FnZW50KEluc3Bl
Y3RvckRPTUFnZW50KiBkb21BZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKKyAg
ICBJbnNwZWN0b3JDU1NBZ2VudCgpOwogICAgIH5JbnNwZWN0b3JDU1NBZ2VudCgpOwogCisgICAg
dm9pZCBzZXRET01BZ2VudChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQpOworCiAgICAgdm9p
ZCByZXNldCgpOwotICAgIHZvaWQgZ2V0TWF0Y2hlZFJ1bGVzRm9yTm9kZTIobG9uZyBub2RlSWQs
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJ1bGVzKTsKLSAgICB2b2lkIGdldE1hdGNoZWRQc2V1
ZG9SdWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBydWxl
cyk7Ci0gICAgdm9pZCBnZXRBdHRyaWJ1dGVTdHlsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVzKTsKKyAgICB2b2lkIGdldFN0eWxlc0Zvck5vZGUy
KGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwogICAgIHZvaWQg
Z2V0SW5saW5lU3R5bGVGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVl
Piogc3R5bGUpOwogICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlk
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSk7Ci0gICAgdm9pZCBnZXRJbmhlcml0ZWRT
dHlsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0
KTsKICAgICB2b2lkIGdldEFsbFN0eWxlczIoUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5bGVz
KTsKICAgICB2b2lkIGdldFN0eWxlU2hlZXQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwogICAgIHZvaWQgc2V0U3R5bGVTaGVldFRl
eHQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpOwpAQCAt
NzcsNiArNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFN0
cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpOwogICAgIHZvaWQgYWRkUnVsZTIoY29uc3QgbG9uZyBjb250ZXh0Tm9kZUlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
OwogICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+KiByZXN1bHQpOworICAgIHZvaWQgcXVlcnlTZWxlY3RvckFsbChjb25zdCBsb25nIG5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0
KTsKIAogcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVj
dG9yU3R5bGVTaGVldD4gPiBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKQEAgLTEwMSw4ICs5Niw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURvY3VtZW50KERvY3VtZW50
Kik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9kZSopOwogCi0gICAgUmVm
UHRyPEluc3BlY3RvckRPTUFnZW50PiBtX2RvbUFnZW50OwotICAgIEluc3BlY3RvckZyb250ZW5k
KiBtX2Zyb250ZW5kOworICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2RvbUFnZW50OwogCiAgICAg
SWRUb0luc3BlY3RvclN0eWxlU2hlZXQgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICBD
U1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0IG1fY3NzU3R5bGVTaGVldFRvSW5zcGVj
dG9yU3R5bGVTaGVldDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
aW5kZXggNWE0YWJjMC4uNGNkMTQ3NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhv
c3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDU1NBZ2VudC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckNTU1N0b3JlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKQEAgLTE0MSw2ICsxNDIsNyBAQCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3Rv
ckNsaWVudCogY2xpZW50KQogICAgIDogbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCiAgICAgLCBtX2Ns
aWVudChjbGllbnQpCiAgICAgLCBtX29wZW5pbmdGcm9udGVuZChmYWxzZSkKKyAgICAsIG1fY3Nz
QWdlbnQobmV3IEluc3BlY3RvckNTU0FnZW50KCkpCiAgICAgLCBtX2Nzc1N0b3JlKG5ldyBJbnNw
ZWN0b3JDU1NTdG9yZSh0aGlzKSkKICAgICAsIG1fbWFpblJlc291cmNlSWRlbnRpZmllcigwKQog
ICAgICwgbV9sb2FkRXZlbnRUaW1lKC0xLjApCkBAIC00ODMsNiArNDg1LDggQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQogICAgIG1fZG9tQWdlbnQgPSBJbnNw
ZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1fY3NzU3RvcmUuZ2V0KCksIG1fZnJvbnRlbmQuZ2V0KCkp
OwogICAgIG1fcmVzb3VyY2VBZ2VudCA9IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmNyZWF0ZSht
X2luc3BlY3RlZFBhZ2UsIG1fZnJvbnRlbmQuZ2V0KCkpOwogCisgICAgbV9jc3NBZ2VudC0+c2V0
RE9NQWdlbnQobV9kb21BZ2VudC5nZXQoKSk7CisKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAg
bV9zdG9yYWdlQWdlbnQgPSBJbnNwZWN0b3JTdG9yYWdlQWdlbnQ6OmNyZWF0ZShtX2Zyb250ZW5k
LmdldCgpKTsKICNlbmRpZgpAQCAtNTkwLDYgKzU5NCw5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKQogewogICAgIG1fcmVzb3VyY2VB
Z2VudC5jbGVhcigpOwogCisgICAgLy8gVGhpcyBzaG91bGQgYmUgaW52b2tlZCBwcmlvciB0byBt
X2RvbUFnZW50IGRlc3RydWN0aW9uLgorICAgIG1fY3NzQWdlbnQtPnNldERPTUFnZW50KDApOwor
CiAgICAgLy8gbV9kb21BZ2VudCBpcyBSZWZQdHIuIFJlbW92ZSBET00gbGlzdGVuZXJzIGZpcnN0
IHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZQogICAgIC8vIG5vIHJlZmVyZW5jZXMgdG8gdGhlIERP
TSBhZ2VudCBmcm9tIHRoZSBET00gdHJlZS4KICAgICBpZiAobV9kb21BZ2VudCkKQEAgLTc0NCw2
ICs3NTEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgaWYgKG1fZnJvbnRlbmQpIHsKICAgICAgICAgICAg
IG1fZnJvbnRlbmQtPnJlc2V0KCk7CiAgICAgICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOwor
ICAgICAgICAgICAgbV9jc3NBZ2VudC0+cmVzZXQoKTsKICAgICAgICAgfQogI2lmIEVOQUJMRShX
T1JLRVJTKQogICAgICAgICBtX3dvcmtlcnMuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaAppbmRleCBhYjcyOGExLi5lNzc3ZGU1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC01OCw2ICs1OCw3IEBAIGNsYXNzIEluc3BlY3Rv
ckFycmF5OwogY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yQ1NTQWdl
bnQ7CiBjbGFzcyBJbnNwZWN0b3JDU1NTdG9yZTsKIGNsYXNzIEluc3BlY3RvckRPTUFnZW50Owog
Y2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOwpAQCAtMjkwLDYgKzI5MSw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCog
bmV3U3RhdGUpOwogCiAgICAgdm9pZCBzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChib29sIGVuYWJs
ZWQsIGJvb2wqIG5ld1N0YXRlKTsKKyAgICBJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQoKSB7
IHJldHVybiBtX2Nzc0FnZW50LmdldCgpOyB9CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFn
ZW50KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQogICAgIHZvaWQgcmVsZWFzZUZyb250
ZW5kTGlmZXRpbWVBZ2VudHMoKTsKIApAQCAtMzMyLDYgKzMzNCw3IEBAIHByaXZhdGU6CiAgICAg
T3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50
OwogICAgIGJvb2wgbV9vcGVuaW5nRnJvbnRlbmQ7CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250
ZW5kPiBtX2Zyb250ZW5kOworICAgIE93blB0cjxJbnNwZWN0b3JDU1NBZ2VudD4gbV9jc3NBZ2Vu
dDsKICAgICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7CiAgICAgUmVmUHRy
PEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gbV9zdG9yYWdlQWdlbnQ7CiAgICAgT3duUHRyPEluc3Bl
Y3RvckNTU1N0b3JlPiBtX2Nzc1N0b3JlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCmluZGV4IGNmYjU1ZmMuLjc3YTU2OTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKQEAgLTE1MzIsMTUgKzE1MzIsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjphZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQs
IFJlZgogICAgICpydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKG5vZGUtPm93bmVyRG9j
dW1lbnQoKSwgbmV3UnVsZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN1cHBv
cnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY3NzUHJvcGVydGllcykK
LXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyAr
K2kpCi0gICAgICAgIHByb3BlcnRpZXMtPnB1c2hTdHJpbmcocHJvcGVydHlOYW1lU3RyaW5nc1tp
XSk7Ci0KLSAgICAqY3NzUHJvcGVydGllcyA9IHByb3BlcnRpZXMucmVsZWFzZSgpOwotfQotCiBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGJvb2wgYmluZCkKIHsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggNmM1ZmQ0Yi4uODRjYTAy
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xMzcsNyArMTM3LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRvZ2dsZVN0eWxlRW5hYmxlZChs
b25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBib29sIGRpc2FibGVkLCBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZU9iamVjdCk7CiAgICAgICAgIHZvaWQgc2V0UnVs
ZVNlbGVjdG9yKGxvbmcgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVj
dGVkTm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBydWxlT2JqZWN0LCBib29sKiBzZWxl
Y3RvckFmZmVjdHNOb2RlKTsKICAgICAgICAgdm9pZCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJ1bGVP
YmplY3QsIGJvb2wqIHNlbGVjdG9yQWZmZWN0c05vZGUpOwotICAgICAgICB2b2lkIGdldFN1cHBv
cnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY3NzUHJvcGVydGllcyk7
CiAKICAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgSW5zcGVjdG9yQ29udHJvbGxl
ci4KICAgICAgICAgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCBkYzJhNDdhLi5lMzM0M2U0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JDU1NBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291
cmNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKQEAgLTEyMCw2ICsxMjEs
OSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2Jq
ZWN0Rm9yU3R5bGUoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCisv
LyBUaGlzIG1ldGhvZCBkb2VzIHRoZSBmb2xsb3dpbmcgcHJlcHJvY2Vzc2luZyBvZiB8cHJvcGVy
dHlUZXh0fCB3aXRoIHxvdmVyd3JpdGV8ID09IGZhbHNlIGFuZCB8aW5kZXh8IHBhc3QgdGhlIGxh
c3QgYWN0aXZlIHByb3BlcnR5OgorLy8gLSBJZiB0aGUgbGFzdCBwcm9wZXJ0eSAoaWYgcHJlc2Vu
dCkgaGFzIG5vIHN1YnNlcXVlbnQgd2hpdGVzcGFjZSBpbiB0aGUgc3R5bGUgZGVjbGFyYXRpb24s
IGEgc3BhY2UgaXMgcHJlcGVuZGVkIHRvIHxwcm9wZXJ0eVRleHR8LgorLy8gLSBJZiB0aGUgbGFz
dCBwcm9wZXJ0eSAoaWYgcHJlc2VudCkgaGFzIG5vIGNsb3NpbmcgIjsiLCB0aGUgIjsiIGlzIHBy
ZXBlbmRlZCB0byB0aGUgY3VycmVudCB8cHJvcGVydHlUZXh0fCB2YWx1ZS4KIGJvb2wgSW5zcGVj
dG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiBw
cm9wZXJ0eVRleHQsIGJvb2wgb3ZlcndyaXRlKQogewogICAgIEFTU0VSVChtX3BhcmVudFN0eWxl
U2hlZXQpOwpAQCAtMTQ2LDExICsxNTAsMTcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6c2V0UHJv
cGVydHlUZXh0KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5VGV4dCwKICAg
ICAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcm9wZXJ0eS5yYXdUZXh0ID0gcHJvcGVydHlU
ZXh0OwotICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVRleHQubGVuZ3RoKCkpIHsKLSAgICAgICAg
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBlbmFibGVQcm9wZXJ0eShpbmRleCwgYWxsUHJvcGVydGll
cyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgICAgICAgICB1bnNpZ25l
ZCB0ZXh0TGVuZ3RoID0gcHJvcGVydHlUZXh0Lmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKCF0
ZXh0TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgLy8gRGVsZXRlIGRpc2FibGVkIHByb3BlcnR5
LgorICAgICAgICAgICAgICAgIG1fZGlzYWJsZWRQcm9wZXJ0aWVzLnJlbW92ZShkaXNhYmxlZElu
ZGV4QnlPcmRpbmFsKGluZGV4LCBmYWxzZSwgYWxsUHJvcGVydGllcykpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBQYXRjaCBk
aXNhYmxlZCBwcm9wZXJ0eSB0ZXh0IGFuZCByYW5nZS4KKyAgICAgICAgICAgIHByb3BlcnR5LnJh
d1RleHQgPSBwcm9wZXJ0eVRleHQ7CisgICAgICAgICAgICBpZiAocHJvcGVydHkuc291cmNlRGF0
YS5yYW5nZS5lbmQpCisgICAgICAgICAgICAgICAgcHJvcGVydHkuc291cmNlRGF0YS5yYW5nZS5l
bmQgPSBwcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLnN0YXJ0ICsgdGV4dExlbmd0aDsKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEluc2VydCBhdCBpbmRleC4KQEAgLTE3Miwx
MCArMTgyLDI4IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCh1bnNpZ25l
ZCBpbmRleCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVRleHQsCiAgICAgICAgICAgICAgICAgaW5z
ZXJ0TGFzdCA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChp
bnNlcnRMYXN0KQotICAgICAgICAgICAgcHJvcGVydHlTdGFydCA9IHNvdXJjZURhdGEtPnN0eWxl
U291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kOwogCi0gICAgICAgIHRleHQuaW5zZXJ0KHBy
b3BlcnR5VGV4dCwgcHJvcGVydHlTdGFydCk7CisgICAgICAgIFN0cmluZyB0ZXh0VG9TZXQgPSBw
cm9wZXJ0eVRleHQ7CisgICAgICAgIGlmIChpbnNlcnRMYXN0KSB7CisgICAgICAgICAgICBwcm9w
ZXJ0eVN0YXJ0ID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5l
bmQgLSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0Owor
ICAgICAgICAgICAgaWYgKHByb3BlcnR5U3RhcnQgPiAwICYmIHByb3BlcnR5VGV4dC5sZW5ndGgo
KSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGV4dC5jaGFy
YWN0ZXJzKCk7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjdXJQb3MgPSBwcm9wZXJ0eVN0
YXJ0IC0gMTsgLy8gVGhlIGxhc3QgcG9zaXRpb24gb2Ygc3R5bGUgZGVjbGFyYXRpb24sIHNpbmNl
IHByb3BlcnR5U3RhcnQgcG9pbnRzIHBhc3Qgb25lLgorICAgICAgICAgICAgICAgIHdoaWxlIChj
dXJQb3MgJiYgaXNIVE1MU3BhY2UoY2hhcmFjdGVyc1tjdXJQb3NdKSkKKyAgICAgICAgICAgICAg
ICAgICAgLS1jdXJQb3M7CisgICAgICAgICAgICAgICAgaWYgKGN1clBvcyAmJiBjaGFyYWN0ZXJz
W2N1clBvc10gIT0gJzsnKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFByZXBlbmQgYSAiOyIg
dG8gdGhlIHByb3BlcnR5IHRleHQgaWYgYXBwZW5kaW5nIHRvIGEgc3R5bGUgZGVjbGFyYXRpb24g
d2hlcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGxhc3QgcHJvcGVydHkgaGFzIG5vIHRy
YWlsaW5nICI7Ii4KKyAgICAgICAgICAgICAgICAgICAgdGV4dFRvU2V0Lmluc2VydCgiOyAiLCAw
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW3By
b3BlcnR5U3RhcnQgLSAxXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZCBhICIg
IiBpZiB0aGUgbGFzdCBkZWNsYXJhdGlvbiBjaGFyYWN0ZXIgaXMgbm90IGFuIEhUTUwgc3BhY2Uu
CisgICAgICAgICAgICAgICAgICAgIHRleHRUb1NldC5pbnNlcnQoIiAiLCAwKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0ZXh0Lmluc2Vy
dCh0ZXh0VG9TZXQsIHByb3BlcnR5U3RhcnQpOwogICAgICAgICBtX3BhcmVudFN0eWxlU2hlZXQt
PnNldFN0eWxlVGV4dChtX3N0eWxlLCB0ZXh0KTsKICAgICB9CiAKQEAgLTIyOCw3ICsyNTYsNyBA
QCB1bnNpZ25lZCBJbnNwZWN0b3JTdHlsZTo6ZGlzYWJsZWRJbmRleEJ5T3JkaW5hbCh1bnNpZ25l
ZCBvcmRpbmFsLCBib29sIGNhblVzZVN1YgogICAgIHJldHVybiBVSU5UX01BWDsKIH0KIAotYm9v
bCBJbnNwZWN0b3JTdHlsZTo6c3R5bGVUZXh0KFN0cmluZyogcmVzdWx0KQorYm9vbCBJbnNwZWN0
b3JTdHlsZTo6c3R5bGVUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAogewogICAgIC8vIFByZWNv
bmRpdGlvbjogbV9wYXJlbnRTdHlsZVNoZWV0LT5lbnN1cmVQYXJzZWREYXRhUmVhZHkoKSBoYXMg
YmVlbiBjYWxsZWQgc3VjY2Vzc2Z1bGx5LgogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IG1fcGFyZW50U3R5bGVTaGVldC0+cnVsZVNvdXJjZURhdGFGb3IobV9zdHls
ZSk7CkBAIC0yNDksMTcgKzI3NywxNyBAQCBib29sIEluc3BlY3RvclN0eWxlOjpkaXNhYmxlUHJv
cGVydHkodW5zaWduZWQgaW5kZXhUb0Rpc2FibGUsIFZlY3RvcjxJbnNwZWN0b3JTdAogewogICAg
IC8vIFByZWNvbmRpdGlvbjogfGluZGV4VG9FbmFibGV8IHBvaW50cyB0byBhbiBlbmFibGVkIHBy
b3BlcnR5LgogICAgIGNvbnN0IEluc3BlY3RvclN0eWxlUHJvcGVydHkmIHByb3BlcnR5ID0gYWxs
UHJvcGVydGllcy5hdChpbmRleFRvRGlzYWJsZSk7Ci0gICAgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0
eSBkaXNhYmxlZFByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBkaXNhYmxlZFByb3BlcnR5LmRpc2Fi
bGVkID0gdHJ1ZTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eVN0YXJ0ID0gcHJvcGVydHkuc291cmNl
RGF0YS5yYW5nZS5zdGFydDsKLSAgICAvLyBUaGlzIG1heSBoYXZlIHRvIGJlIG5lZ2F0ZWQgYmVs
b3cuCi0gICAgbG9uZyBwcm9wZXJ0eUxlbmd0aCA9IHByb3BlcnR5LnNvdXJjZURhdGEucmFuZ2Uu
ZW5kIC0gcHJvcGVydHlTdGFydDsKLSAgICBkaXNhYmxlZFByb3BlcnR5LnNvdXJjZURhdGEucmFu
Z2UuZW5kID0gcHJvcGVydHlTdGFydDsKKyAgICBJbnNwZWN0b3JTdHlsZVByb3BlcnR5IGRpc2Fi
bGVkUHJvcGVydHkocHJvcGVydHkpOwogICAgIFN0cmluZyBvbGRTdHlsZVRleHQ7CiAgICAgYm9v
bCBzdWNjZXNzID0gc3R5bGVUZXh0KCZvbGRTdHlsZVRleHQpOwogICAgIGlmICghc3VjY2VzcykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRpc2FibGVkUHJvcGVydHkucmF3VGV4dCA9IG9s
ZFN0eWxlVGV4dC5zdWJzdHJpbmcocHJvcGVydHlTdGFydCwgcHJvcGVydHlMZW5ndGgpOworICAg
IGRpc2FibGVkUHJvcGVydHkuc2V0UmF3VGV4dEZyb21TdHlsZURlY2xhcmF0aW9uKG9sZFN0eWxl
VGV4dCk7CisgICAgZGlzYWJsZWRQcm9wZXJ0eS5kaXNhYmxlZCA9IHRydWU7CisgICAgZGlzYWJs
ZWRQcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLmVuZCA9IHByb3BlcnR5U3RhcnQ7CisgICAgLy8g
VGhpcyBtYXkgaGF2ZSB0byBiZSBuZWdhdGVkIGJlbG93LgorICAgIGxvbmcgcHJvcGVydHlMZW5n
dGggPSBwcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLmVuZCAtIHByb3BlcnR5U3RhcnQ7CiAgICAg
c3VjY2VzcyA9IHJlcGxhY2VQcm9wZXJ0eUluU3R5bGVUZXh0KHByb3BlcnR5LCAiIik7CiAgICAg
aWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMDMsMTMgKzMzMSwxOCBA
QCBib29sIEluc3BlY3RvclN0eWxlOjpwb3B1bGF0ZUFsbFByb3BlcnRpZXMoVmVjdG9yPEluc3Bl
Y3RvclN0eWxlUHJvcGVydHk+KiByZXN1bAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IChtX3BhcmVudFN0eWxlU2hlZXQgJiYgbV9wYXJlbnRTdHlsZVNoZWV0LT5l
bnN1cmVQYXJzZWREYXRhUmVhZHkoKSkgPyBtX3BhcmVudFN0eWxlU2hlZXQtPnJ1bGVTb3VyY2VE
YXRhRm9yKG1fc3R5bGUpIDogMDsKICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiog
c291cmNlUHJvcGVydHlEYXRhID0gc291cmNlRGF0YSA/ICYoc291cmNlRGF0YS0+c3R5bGVTb3Vy
Y2VEYXRhLT5wcm9wZXJ0eURhdGEpIDogMDsKICAgICBpZiAoc291cmNlUHJvcGVydHlEYXRhKSB7
CisgICAgICAgIFN0cmluZyBzdHlsZURlY2xhcmF0aW9uOworICAgICAgICBib29sIGlzU3R5bGVU
ZXh0S25vd24gPSBzdHlsZVRleHQoJnN0eWxlRGVjbGFyYXRpb24pOworICAgICAgICBBU1NFUlQo
aXNTdHlsZVRleHRLbm93bik7CiAgICAgICAgIGZvciAoVmVjdG9yPENTU1Byb3BlcnR5U291cmNl
RGF0YT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc291cmNlUHJvcGVydHlEYXRhLT5iZWdpbigpOyBp
dCAhPSBzb3VyY2VQcm9wZXJ0eURhdGEtPmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICB3aGls
ZSAoZGlzYWJsZWRJbmRleCA8IGRpc2FibGVkTGVuZ3RoICYmIGRpc2FibGVkUHJvcGVydHkuc291
cmNlRGF0YS5yYW5nZS5zdGFydCA8PSBpdC0+cmFuZ2Uuc3RhcnQpIHsKICAgICAgICAgICAgICAg
ICByZXN1bHQtPmFwcGVuZChkaXNhYmxlZFByb3BlcnR5KTsKICAgICAgICAgICAgICAgICBpZiAo
KytkaXNhYmxlZEluZGV4IDwgZGlzYWJsZWRMZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgIGRp
c2FibGVkUHJvcGVydHkgPSBtX2Rpc2FibGVkUHJvcGVydGllcy5hdChkaXNhYmxlZEluZGV4KTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKEluc3BlY3RvclN0eWxl
UHJvcGVydHkoKml0LCB0cnVlLCBmYWxzZSkpOworICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVQ
cm9wZXJ0eSBwKCppdCwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgcC5zZXRSYXdUZXh0RnJv
bVN0eWxlRGVjbGFyYXRpb24oc3R5bGVEZWNsYXJhdGlvbik7CisgICAgICAgICAgICByZXN1bHQt
PmFwcGVuZChwKTsKICAgICAgICAgICAgIHNvdXJjZVByb3BlcnR5TmFtZXMuYWRkKGl0LT5uYW1l
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTM0OSwxMCArMzgyLDEyIEBAIHZvaWQgSW5zcGVjdG9y
U3R5bGU6OnBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhJbnNwZWN0b3JPYmplY3Qq
IHJlc3VsdCkKICAgICAgICAgcHJvcGVydGllc09iamVjdC0+cHVzaE9iamVjdChwcm9wZXJ0eSk7
CiAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsIGl0LT5kaXNhYmxlZCA/ICJk
aXNhYmxlZCIgOiAiYWN0aXZlIik7CiAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJwYXJz
ZWRPayIsIHByb3BlcnR5RW50cnkucGFyc2VkT2spOworICAgICAgICBpZiAoaXQtPmhhc1Jhd1Rl
eHQoKSkKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInRleHQiLCBpdC0+cmF3VGV4
dCk7CisgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoIm5hbWUiLCBuYW1lKTsKKyAgICAgICAg
cHJvcGVydHktPnNldFN0cmluZygidmFsdWUiLCBwcm9wZXJ0eUVudHJ5LnZhbHVlKTsKKyAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBwcm9wZXJ0eUVudHJ5LmltcG9ydGFu
dCA/ICJpbXBvcnRhbnQiIDogIiIpOwogICAgICAgICBpZiAoIWl0LT5kaXNhYmxlZCkgewotICAg
ICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwotICAgICAgICAgICAg
cHJvcGVydHktPnNldFN0cmluZygidmFsdWUiLCBwcm9wZXJ0eUVudHJ5LnZhbHVlKTsKLSAgICAg
ICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInByaW9yaXR5IiwgcHJvcGVydHlFbnRyeS5pbXBv
cnRhbnQgPyAiaW1wb3J0YW50IiA6ICIiKTsKICAgICAgICAgICAgIGlmIChpdC0+aGFzU291cmNl
KSB7CiAgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oImltcGxpY2l0IiwgZmFs
c2UpOwogICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0Iiwg
cHJvcGVydHlFbnRyeS5yYW5nZS5zdGFydCk7CkBAIC0zNjgsOCArNDAzLDcgQEAgdm9pZCBJbnNw
ZWN0b3JTdHlsZTo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKEluc3BlY3Rvck9i
amVjdCogcmVzdWx0KQogICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJpbXBs
aWNpdCIsIG1fc3R5bGUtPmlzUHJvcGVydHlJbXBsaWNpdChuYW1lKSk7CiAgICAgICAgICAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygic3RhdHVzIiwgInN0eWxlIik7CiAgICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidGV4dCIs
IGl0LT5yYXdUZXh0KTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBh
cnNlZE9rKSB7CiAgICAgICAgICAgICAvLyBCb3RoIGZvciBzdHlsZS1vcmlnaW5hdGVkIGFuZCBw
YXJzZWQgc291cmNlIHByb3BlcnRpZXMuCkBAIC01OTIsNyArNjI2LDkgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShD
U1NTdHlsZVJ1bGUKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4
dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgpKTsKLSAgICByZXN1bHQtPnNldFN0cmluZygic291cmNl
VVJMIiwgIXN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkgPyBzdHlsZVNoZWV0LT5ocmVmKCkg
OiBtX2RvY3VtZW50VVJMKTsKKyAgICAvLyAic291cmNlVVJMIiBpcyBwcmVzZW50IG9ubHkgZm9y
IHJlZ3VsYXIgcnVsZXMsIG90aGVyd2lzZSAib3JpZ2luIiBzaG91bGQgYmUgdXNlZCBpbiB0aGUg
ZnJvbnRlbmQuCisgICAgaWYgKCFtX29yaWdpbi5sZW5ndGgoKSkKKyAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoInNvdXJjZVVSTCIsICFzdHlsZVNoZWV0LT5ocmVmKCkuaXNFbXB0eSgpID8gc3R5
bGVTaGVldC0+aHJlZigpIDogbV9kb2N1bWVudFVSTCk7CiAgICAgcmVzdWx0LT5zZXROdW1iZXIo
InNvdXJjZUxpbmUiLCBydWxlLT5zb3VyY2VMaW5lKCkpOwogICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJvcmlnaW4iLCBtX29yaWdpbik7CiAKQEAgLTYwMCw2ICs2MzYsMTYgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShD
U1NTdHlsZVJ1bGUKICAgICBpZiAoY2FuQmluZCgpKQogICAgICAgICByZXN1bHQtPnNldFN0cmlu
ZygicnVsZUlkIiwgcnVsZUlkKHJ1bGUpLmFzU3RyaW5nKCkpOwogCisgICAgUmVmUHRyPENTU1J1
bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhOworICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHko
KSkKKyAgICAgICAgc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHJ1bGUtPnN0eWxlKCkp
OworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHNlbGVjdG9yUmFuZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBzZWxl
Y3RvclJhbmdlLT5zZXROdW1iZXIoInN0YXJ0Iiwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFu
Z2Uuc3RhcnQpOworICAgICAgICBzZWxlY3RvclJhbmdlLT5zZXROdW1iZXIoImVuZCIsIHNvdXJj
ZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0
KCJzZWxlY3RvclJhbmdlIiwgc2VsZWN0b3JSYW5nZS5yZWxlYXNlKCkpOworICAgIH0KKwogICAg
IHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCkBAIC02OTEsNiArNzM3LDUxIEBAIEluc3Bl
Y3RvckNTU0lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUpIGNvCiAgICAgcmV0dXJuIEluc3BlY3RvckNTU0lkKCk7CiB9CiAKK3Zv
aWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhDU1NSdWxl
U291cmNlRGF0YSogcnVsZURhdGEsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldFRleHQpCit7Cisg
ICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4mIHByb3BlcnR5RGF0YSA9IHJ1bGVEYXRh
LT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YTsKKyAgICB1bnNpZ25lZCBzaXplID0gcHJv
cGVydHlEYXRhLnNpemUoKTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybjsKKworICAg
IHVuc2lnbmVkIHN0eWxlU3RhcnQgPSBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJv
ZHlSYW5nZS5zdGFydDsKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0eWxlU2hlZXRU
ZXh0LmNoYXJhY3RlcnMoKTsKKyAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEqIG5leHREYXRhID0g
Jihwcm9wZXJ0eURhdGEuYXQoMCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKiBjdXJyZW50RGF0YSA9IG5l
eHREYXRhOworICAgICAgICBuZXh0RGF0YSA9IGkgPCBzaXplIC0gMSA/ICYocHJvcGVydHlEYXRh
LmF0KGkgKyAxKSkgOiAwOworCisgICAgICAgIGlmIChjdXJyZW50RGF0YS0+cGFyc2VkT2spCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5yYW5nZS5lbmQg
PiAwICYmIGNoYXJhY3RlcnNbc3R5bGVTdGFydCArIGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgLSAx
XSA9PSAnOycpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB1bnNpZ25lZCBwcm9w
ZXJ0eUVuZEluU3R5bGVTaGVldDsKKyAgICAgICAgaWYgKCFuZXh0RGF0YSkKKyAgICAgICAgICAg
IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5
bGVCb2R5UmFuZ2UuZW5kIC0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvcGVydHlF
bmRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0ICsgbmV4dERhdGEtPnJhbmdlLnN0YXJ0IC0gMTsK
KworICAgICAgICB3aGlsZSAoaXNIVE1MU3BhY2UoY2hhcmFjdGVyc1twcm9wZXJ0eUVuZEluU3R5
bGVTaGVldF0pKQorICAgICAgICAgICAgLS1wcm9wZXJ0eUVuZEluU3R5bGVTaGVldDsKKworICAg
ICAgICAvLyBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCBwb2ludHMgYXQgdGhlIGxhc3QgcHJvcGVy
dHkgdGV4dCBjaGFyYWN0ZXIuCisgICAgICAgIHVuc2lnbmVkIG5ld1Byb3BlcnR5RW5kID0gcHJv
cGVydHlFbmRJblN0eWxlU2hlZXQgLSBzdHlsZVN0YXJ0ICsgMTsgLy8gRXhjbHVzaXZlIG9mIHRo
ZSBsYXN0IHByb3BlcnR5IHRleHQgY2hhcmFjdGVyLgorICAgICAgICBpZiAoY3VycmVudERhdGEt
PnJhbmdlLmVuZCAhPSBuZXdQcm9wZXJ0eUVuZCkgeworICAgICAgICAgICAgY3VycmVudERhdGEt
PnJhbmdlLmVuZCA9IG5ld1Byb3BlcnR5RW5kOworICAgICAgICAgICAgdW5zaWduZWQgdmFsdWVT
dGFydEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2Uuc3RhcnQg
KyBjdXJyZW50RGF0YS0+bmFtZS5sZW5ndGgoKTsKKyAgICAgICAgICAgIHdoaWxlICh2YWx1ZVN0
YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgJiYgY2hhcmFjdGVyc1t2
YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0XSAhPSAnOicpCisgICAgICAgICAgICAgICAgKyt2YWx1ZVN0
YXJ0SW5TdHlsZVNoZWV0OworICAgICAgICAgICAgaWYgKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQg
PCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCkKKyAgICAgICAgICAgICAgICArK3ZhbHVlU3RhcnRJ
blN0eWxlU2hlZXQ7IC8vIFNoaWZ0IHBhc3QgdGhlICc6Jy4KKyAgICAgICAgICAgIHdoaWxlICh2
YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgJiYgaXNIVE1M
U3BhY2UoY2hhcmFjdGVyc1t2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0XSkpCisgICAgICAgICAgICAg
ICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0OworICAgICAgICAgICAgLy8gTmVlZCB0byBleGNs
dWRlIHRoZSB0cmFpbGluZyAnOycgZnJvbSB0aGUgcHJvcGVydHkgdmFsdWUuCisgICAgICAgICAg
ICBjdXJyZW50RGF0YS0+dmFsdWUgPSBzdHlsZVNoZWV0VGV4dC5zdWJzdHJpbmcodmFsdWVTdGFy
dEluU3R5bGVTaGVldCwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgLSB2YWx1ZVN0YXJ0SW5TdHls
ZVNoZWV0ICsgKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0eWxlU2hlZXRdID09ICc7JyA/IDAg
OiAxKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIERvY3VtZW50KiBJbnNwZWN0b3JTdHlsZVNo
ZWV0Ojpvd25lckRvY3VtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wYWdlU3R5bGVTaGVl
dC0+ZG9jdW1lbnQoKTsKQEAgLTc2Myw4ICs4NTQsMTAgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjplbnN1cmVTb3VyY2VEYXRhKE5vZGUqIG93bmVyTm9kZSkKICAgICAgICAgaWYgKCFydWxl
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFN0eWxlUnVsZVJhbmdlTWFwOjppdGVy
YXRvciBpdCA9IHJ1bGVSYW5nZU1hcC5maW5kKHJ1bGUpOwotICAgICAgICBpZiAoaXQgIT0gcnVs
ZVJhbmdlTWFwLmVuZCgpKQorICAgICAgICBpZiAoaXQgIT0gcnVsZVJhbmdlTWFwLmVuZCgpKSB7
CisgICAgICAgICAgICBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKGl0LT5zZWNvbmQuZ2V0KCks
IG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpKTsKICAgICAgICAgICAgIHJhbmdlc1ZlY3Rvci0+
YXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9wYXJzZWRTdHls
ZVNoZWV0LT5zZXRTb3VyY2VEYXRhKHJhbmdlc1ZlY3Rvci5yZWxlYXNlKCkpOwpAQCAtOTI2LDYg
KzEwMTksMTIgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNldFN0
eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwKICAgICByZXR1cm4gIWVjOwogfQog
Citib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6dGV4dChTdHJpbmcqIHJl
c3VsdCkgY29uc3QKK3sKKyAgICAqcmVzdWx0ID0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoInN0
eWxlIik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIERvY3VtZW50KiBJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGU6Om93bmVyRG9jdW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiBt
X2VsZW1lbnQtPmRvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmgKaW5kZXggMDZjNDA5My4uZTY3MTgzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuaApAQCAtODcsNiArODcsMTcgQEAgc3RydWN0IEluc3BlY3RvclN0eWxlUHJvcGVy
dHkgewogICAgIHsKICAgICB9CiAKKyAgICB2b2lkIHNldFJhd1RleHRGcm9tU3R5bGVEZWNsYXJh
dGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFyYXRpb24pCisgICAgeworICAgICAgICB1bnNp
Z25lZCBzdGFydCA9IHNvdXJjZURhdGEucmFuZ2Uuc3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIGVu
ZCA9IHNvdXJjZURhdGEucmFuZ2UuZW5kOworICAgICAgICBBU1NFUlQoc3RhcnQgPCBlbmQpOwor
ICAgICAgICBBU1NFUlQoZW5kIDw9IHN0eWxlRGVjbGFyYXRpb24ubGVuZ3RoKCkpOworICAgICAg
ICByYXdUZXh0ID0gc3R5bGVEZWNsYXJhdGlvbi5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0
KTsKKyAgICB9CisKKyAgICBib29sIGhhc1Jhd1RleHQoKSBjb25zdCB7IHJldHVybiAhcmF3VGV4
dC5pc0VtcHR5KCk7IH0KKwogICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSBzb3VyY2VEYXRhOwog
ICAgIGJvb2wgaGFzU291cmNlOwogICAgIGJvb2wgZGlzYWJsZWQ7CkBAIC0xMTcsNyArMTI4LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgdW5zaWduZWQgZGlzYWJsZWRJbmRleEJ5
T3JkaW5hbCh1bnNpZ25lZCBvcmRpbmFsLCBib29sIGNhblVzZVN1YnNlcXVlbnQsIFZlY3RvcjxJ
bnNwZWN0b3JTdHlsZVByb3BlcnR5PiYgYWxsUHJvcGVydGllcyk7CiAKLSAgICBib29sIHN0eWxl
VGV4dChTdHJpbmcqIHJlc3VsdCk7CisgICAgYm9vbCBzdHlsZVRleHQoU3RyaW5nKiByZXN1bHQp
IGNvbnN0OwogICAgIGJvb2wgZGlzYWJsZVByb3BlcnR5KHVuc2lnbmVkIGluZGV4VG9EaXNhYmxl
LCBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4mIGFsbFByb3BlcnRpZXMpOwogICAgIGJv
b2wgZW5hYmxlUHJvcGVydHkodW5zaWduZWQgaW5kZXhUb0VuYWJsZSwgVmVjdG9yPEluc3BlY3Rv
clN0eWxlUHJvcGVydHk+JiBhbGxQcm9wZXJ0aWVzKTsKICAgICBib29sIHBvcHVsYXRlQWxsUHJv
cGVydGllcyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4qIHJlc3VsdCkgY29uc3Q7CkBA
IC0xNjIsNiArMTczLDggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGJvb2wgY2FuQmluZCgp
IGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luICE9ICJ1c2VyQWdlbnQiICYmIG1fb3JpZ2luICE9ICJ1
c2VyIjsgfQogICAgIEluc3BlY3RvckNTU0lkIHJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpIGNvbnN0OworICAgIHZvaWQgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhD
U1NSdWxlU291cmNlRGF0YSogcnVsZURhdGEsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldFRleHQp
OworICAgIHZpcnR1YWwgYm9vbCB0ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0
dWFsIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OwpAQCAtMTc0LDcgKzE4Nyw2IEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIGJvb2wgc2V0U3R5bGVUZXh0KENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25z
dCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKLSAgICBib29sIHRleHQoU3RyaW5nKiByZXN1bHQpIGNv
bnN0OwogICAgIGJvb2wgZW5zdXJlVGV4dCgpIGNvbnN0OwogICAgIGJvb2wgZW5zdXJlU291cmNl
RGF0YShOb2RlKiBvd25lck5vZGUpOwogICAgIGJvb2wgc3R5bGVTaGVldFRleHRXaXRoQ2hhbmdl
ZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIG5ld1N0eWxlVGV4dCwg
U3RyaW5nKiByZXN1bHQpOwpAQCAtMjEwLDYgKzIyMiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlk
KSBjb25zdCB7IEFTU0VSVF9VTlVTRUQoaWQsIGlkLm9yZGluYWwoKSA9PSAiMCIpOyByZXR1cm4g
aW5saW5lU3R5bGUoKTsgfQogCiBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHRleHQoU3Ry
aW5nKiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJj
ZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IHsgQVNTRVJUX1VOVVNF
RChzdHlsZSwgc3R5bGUgPT0gaW5saW5lU3R5bGUoKSk7IHJldHVybiBtX3J1bGVTb3VyY2VEYXRh
OyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5kZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFy
YXRpb24qKSBjb25zdCB7IHJldHVybiAwOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72810</attachid>
            <date>2010-11-03 04:16:19 -0700</date>
            <delta_ts>2010-11-09 22:47:58 -0800</delta_ts>
            <desc>[PATCH] Compilability fixed, added property value checking with CSSMutableStyleDeclaration::parseDeclaration()</desc>
            <filename>enable_css_agent.patch</filename>
            <type>text/plain</type>
            <size>67569</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDBjZjllYTViMzcxNzczNjExZDNjNjA2Yzk2NGRiY2EyNjAzZDhhNjIKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBUaHUgU2VwIDE2
IDIwOjA0OjA0IDIwMTAgKzA0MDAKCiAgICBXSVAKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDk4NzFmNy4uMmU4YWJmYSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEwLTExLTAyICBBbGV4YW5kZXIgUGF2bG92ICA8YXBh
dmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRW5hYmxlIEluc3BlY3RvckNTU0FnZW50IChub3Qg
dXNlZCBieSBmcm9udGVuZCBmb3IgQ1NTIGVkaXRpbmcgeWV0KQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MzQKKworICAgICAgICAqIGluc3BlY3Rv
ci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzOiBBZGRlZC4KKyAgICAgICAgKGh0bWwpOgor
ICAgICAgICAoYm9keSk6CisgICAgICAgICgvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2Jv
ZHkubWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVjdG9yICovKToKKyAgICAgICAgKGJvZHkubWFp
bjIpOgorICAgICAgICAoYm9keTo6YWZ0ZXIpOgorICAgICAgICAoaDEpOgorICAgICAgICAqIGlu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGlu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWw6CisKIDIwMTAtMTEtMDEgIEFuZHJleSBLb3N5YWtv
diAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxk
bWFuLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMt
bmV3LUFQSS5jc3MgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1uZXct
QVBJLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjdiOGUzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMtbmV3
LUFQSS5jc3MKQEAgLTAsMCArMSwyNiBAQAoraHRtbCB7CisgICAgZm9udC13ZWlnaHQ6IDQwMDsK
K30KKworYm9keSB7CisgICAgZm9udC1zaXplOiAxMnB4OworICAgIGZvbzogYmFyICEKKworICAg
IGltcG9ydGFudCAvKiAhaW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNv
cmUgKi87CisgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CisgICAgY29sb3J6OiAiIWltcG9y
dGFudCI7CisgICAgaW1wb3J0YW50OiFpbXBvcnRhbnQ7CisgICAgY29sb3I6ICJiYWRjb2xvciIg
ISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0cmFuZ2UgdmFsdWUgKi87Cit9CisK
Ky8qIGNvbW1lbnQgYmVmb3JlIHNlbGVjdG9yICovYm9keS5tYWluMS8qIGNvbW1lbnQgYWZ0ZXIg
c2VsZWN0b3IgKi97LyogY29tbWVudCAqL2NvbG9yOiAjRjAwQkFBO3pvbzptb28gLyogbm90IGFu
ICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovfS8qIGNvbW1lbnQgKi8KKworYm9k
eS5tYWluMntiYWNrZ3JvdW5kOiBncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8g
IWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqL30KKworYm9keTo6
YWZ0ZXIgIHsKKyAgICBjb250ZW50OiAiQWZ0ZXIgYm9keSI7Cit9CisKK2gxIHsKKyAgICBoZWln
aHQgOiAxMDAlIDsgYm9yZGVyOiAxcHggc29saWQ7IGJvcmRlci13aWR0aDogMnB4OyBiYWNrZ3Jv
dW5kLWNvbG9yIDogIzMzRkYzMzsgZ29vZ2xlczogYWJyYTsgZm9vOiAuYmFyOyAtbW96LWdvb2c6
IDEqKio7IGJvcmRlci13aWR0aDogMHB4OworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3N0eWxlcy1uZXctQVBJLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzZkODdlMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNDEgQEAKK1Rlc3RzIHRo
YXQgSW5zcGVjdG9yQ1NTQWdlbnQgQVBJIG1ldGhvZHMgd29yayBhcyBleHBlY3RlZC4KKworSDEK
KworCis9PT0gQ29tcHV0ZWQgc3R5bGUgcHJvcGVydHkgY291bnQgZm9yIGJvZHkgPT09CitPSwor
Cis9PT0gTWF0Y2hlZCBydWxlcyBmb3IgYm9keSA9PT0KKworcnVsZQorYm9keTogW3VzZXItYWdl
bnRdCitbJ2Rpc3BsYXknOidibG9jayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1sn
bWFyZ2luLXRvcCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snbWFyZ2lu
LXJpZ2h0JzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydtYXJnaW4tYm90
dG9tJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydtYXJnaW4tbGVmdCc6
JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKKworcnVsZQorYm9keTogW10KK1sn
Zm9udC1zaXplJzonMTJweCddIEBbNS0yMV0gYWN0aXZlCitbJ2Zvbyc6J2JhciAhCisKKyAgICBp
bXBvcnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3QgcmVjb2duaXplZCBieSBXZWJDb3Jl
ICovJyBpcy1pbXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsyNi0xMDRdIGFjdGl2ZQorWydoZWlnaHQn
OicxMDAlICFpbXBvcnRhbnQnIGlzLWltcG9ydGFudF0gQFsxMDktMTMzXSBhY3RpdmUKK1snY29s
b3J6JzonIiFpbXBvcnRhbnQiJyBub24tcGFyc2VkXSBAWzEzOC0xNTldIGFjdGl2ZQorWydpbXBv
cnRhbnQnOichaW1wb3J0YW50JyBub24tcGFyc2VkXSBAWzE2NC0xODVdIGFjdGl2ZQorWydjb2xv
cic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0cmFuZ2Ug
dmFsdWUgKi8nIGlzLWltcG9ydGFudF0gQFsxOTAtMjU5XSBhY3RpdmUKKworcnVsZQorYm9keS5t
YWluMTogW10KK1snY29sb3InOicjRjAwQkFBJ10gQFsxMy0yOF0gYWN0aXZlCitbJ3pvbyc6J21v
byAvKiBub3QgYW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVydHkgKi8nIG5vbi1wYXJz
ZWRdIEBbMjgtODFdIGFjdGl2ZQorCitydWxlCitib2R5Lm1haW4yOiBbXQorWydiYWNrZ3JvdW5k
JzonZ3JlZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQgLyogbm8g
c2VtaWNvbG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi8nIGlzLWltcG9ydGFudF0gQFswLTk1XSBhY3Rp
dmUKK1snYmFja2dyb3VuZC1pbWFnZSc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCcgaXMt
aW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtcmVw
ZWF0LXknOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5
bGUKK1snYmFja2dyb3VuZC1hdHRhY2htZW50JzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtcG9zaXRpb24teCc6J2luaXRp
YWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3Jv
dW5kLXBvc2l0aW9uLXknOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1vcmlnaW4nOidpbml0aWFsJyBpcy1pbXBvcnRhbnRd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlh
bCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91
bmQtY29sb3InOidncmVlbicgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0
eWxlCisKK3J1bGUKK2JvZHkubWFpbnBhZ2U6IFtdCitbJ3RleHQtZGVjb3JhdGlvbic6J25vbmUn
XSBAWzUtMjddIGFjdGl2ZQorWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1wYXJzZWRd
IEBbMTA3LTEzMV0gYWN0aXZlCisKKz09PSBQc2V1ZG8gcnVsZXMgZm9yIGJvZHkgPT09CitQc2V1
ZG9JZD00CisKK3J1bGUKK2JvZHk6OmFmdGVyOiBbXQorWydjb250ZW50JzonIkFmdGVyIGJvZHki
J10gQFs1LTI3XSBhY3RpdmUKKworPT09IEluaGVyaXRlZCBzdHlsZXMgZm9yIGJvZHkgPT09CitM
ZXZlbD0xCisKK3J1bGUKK2h0bWw6IFt1c2VyLWFnZW50XQorWydkaXNwbGF5JzonYmxvY2snXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCisKK3J1bGUKK2h0bWw6IFtdCitbJ2ZvbnQtd2Vp
Z2h0JzonNDAwJ10gQFs1LTIyXSBhY3RpdmUKKworPT09IElubGluZSBzdHlsZSBmb3IgYm9keSA9
PT0KKworc3R5bGUKK3JhdyBzdHlsZQorWydmb250LXdlaWdodCc6J25vcm1hbCddIEBbMC0yMF0g
YWN0aXZlCitbJ3dpZHRoJzonODUlJ10gQFsyMS0zMV0gYWN0aXZlCisKKz09PSBBdHRyaWJ1dGUg
c3R5bGVzIGZvciB0YWJsZSA9PT0KK0F0dHJpYnV0ZTogd2lkdGgKKworc3R5bGUKK3JhdyBzdHls
ZQorWyd3aWR0aCc6JzUwJSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKKworPT09IEFs
bCBzdHlsZXNoZWV0cyA9PT0KKworU3R5bGVTaGVldDogJ2h0bWwgeworICAgIGZvbnQtd2VpZ2h0
OiA0MDA7Cit9CisKK2JvZHkgeworICAgIGZvbnQtc2l6ZTogMTJweDsKKyAgICBmb286IGJhciAh
CisKKyAgICBpbXBvcnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3QgcmVjb2duaXplZCBi
eSBXZWJDb3JlICovOworICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OworICAgIGNvbG9yejog
IiFpbXBvcnRhbnQiOworICAgIGltcG9ydGFudDohaW1wb3J0YW50OworICAgIGNvbG9yOiAiYmFk
Y29sb3IiICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICov
OworfQorCisvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHkubWFpbjEvKiBjb21tZW50
IGFmdGVyIHNlbGVjdG9yICovey8qIGNvbW1lbnQgKi9jb2xvcjogI0YwMEJBQTt6b286bW9vIC8q
IG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqL30vKiBjb21tZW50ICov
CisKK2JvZHkubWFpbjJ7YmFja2dyb3VuZDogZ3JlZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21t
ZW50ICovICFpbXBvcnRhbnQgLyogbm8gc2VtaWNvbG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi99CisK
K2JvZHk6OmFmdGVyICB7CisgICAgY29udGVudDogIkFmdGVyIGJvZHkiOworfQorCitoMSB7Cisg
ICAgaGVpZ2h0IDogMTAwJSA7IGJvcmRlcjogMXB4IHNvbGlkOyBib3JkZXItd2lkdGg6IDJweDsg
YmFja2dyb3VuZC1jb2xvciA6ICMzM0ZGMzM7IGdvb2dsZXM6IGFicmE7IGZvbzogLmJhcjsgLW1v
ei1nb29nOiAxKioqOyBib3JkZXItd2lkdGg6IDBweDsKK30KKycKKworcnVsZQoraHRtbDogW10K
K1snZm9udC13ZWlnaHQnOic0MDAnXSBAWzUtMjJdIGFjdGl2ZQorCitydWxlCitib2R5OiBbXQor
Wydmb250LXNpemUnOicxMnB4J10gQFs1LTIxXSBhY3RpdmUKK1snZm9vJzonYmFyICEKKworICAg
IGltcG9ydGFudCAvKiAhaW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNv
cmUgKi8nIGlzLWltcG9ydGFudCBub24tcGFyc2VkXSBAWzI2LTEwNF0gYWN0aXZlCitbJ2hlaWdo
dCc6JzEwMCUgIWltcG9ydGFudCcgaXMtaW1wb3J0YW50XSBAWzEwOS0xMzNdIGFjdGl2ZQorWydj
b2xvcnonOiciIWltcG9ydGFudCInIG5vbi1wYXJzZWRdIEBbMTM4LTE1OV0gYWN0aXZlCitbJ2lt
cG9ydGFudCc6JyFpbXBvcnRhbnQnIG5vbi1wYXJzZWRdIEBbMTY0LTE4NV0gYWN0aXZlCitbJ2Nv
bG9yJzonImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdpdGggc3RyYW5n
ZSB2YWx1ZSAqLycgaXMtaW1wb3J0YW50XSBAWzE5MC0yNTldIGFjdGl2ZQorCitydWxlCitib2R5
Lm1haW4xOiBbXQorWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XSBhY3RpdmUKK1snem9vJzon
bW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqLycgbm9uLXBh
cnNlZF0gQFsyOC04MV0gYWN0aXZlCisKK3J1bGUKK2JvZHkubWFpbjI6IFtdCitbJ2JhY2tncm91
bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBu
byBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVdIGFj
dGl2ZQorWydiYWNrZ3JvdW5kLWltYWdlJzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtcmVwZWF0LXgnOidpbml0aWFsJyBp
cy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1y
ZXBlYXQteSc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBz
dHlsZQorWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1wb3NpdGlvbi14JzonaW5p
dGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tn
cm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwnIGlzLWltcG9ydGFu
dF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLWNsaXAnOidpbml0
aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dy
b3VuZC1jb2xvcic6J2dyZWVuJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0g
c3R5bGUKKworcnVsZQorYm9keTo6YWZ0ZXI6IFtdCitbJ2NvbnRlbnQnOiciQWZ0ZXIgYm9keSIn
XSBAWzUtMjddIGFjdGl2ZQorCitydWxlCitoMTogW10KK1snaGVpZ2h0JzonMTAwJSddIEBbNS0y
MF0gYWN0aXZlCitbJ2JvcmRlcic6JzFweCBzb2xpZCddIEBbMjEtMzldIGFjdGl2ZQorWydib3Jk
ZXItd2lkdGgnOicycHgnXSBAWzQwLTU4XSBpbmFjdGl2ZQorWydiYWNrZ3JvdW5kLWNvbG9yJzon
IzMzRkYzMyddIEBbNTktODZdIGFjdGl2ZQorWydnb29nbGVzJzonYWJyYScgbm9uLXBhcnNlZF0g
QFs4Ny0xMDFdIGFjdGl2ZQorWydmb28nOicuYmFyJyBub24tcGFyc2VkXSBAWzEwMi0xMTJdIGFj
dGl2ZQorWyctbW96LWdvb2cnOicxKioqJyBub24tcGFyc2VkXSBAWzExMy0xMjldIGFjdGl2ZQor
Wydib3JkZXItd2lkdGgnOicwcHgnXSBAWzEzMC0xNDhdIGFjdGl2ZQorWydib3JkZXItdG9wLXN0
eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JvcmRlci1yaWdo
dC1zdHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydib3JkZXIt
Ym90dG9tLXN0eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2Jv
cmRlci1sZWZ0LXN0eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitb
J2JvcmRlci1jb2xvcic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitb
J2JvcmRlci10b3Atd2lkdGgnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitb
J2JvcmRlci1yaWdodC13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUK
K1snYm9yZGVyLWJvdHRvbS13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5
bGUKK1snYm9yZGVyLWxlZnQtd2lkdGgnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0
eWxlCisKK1N0eWxlU2hlZXQ6ICcKKworLyogQW4gaW5saW5lIHN0eWxlc2hlZXQgKi8KK2JvZHku
bWFpbnBhZ2UgeworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLyogYXQgbGVhc3Qgb25lIHZh
bGlkIHByb3BlcnR5IGlzIG5lY2Vzc2FyeSBmb3IgV2ViQ29yZSB0byBtYXRjaCBhIHJ1bGUgKi8K
KyAgICBiYWRwcm9wZXJ0eTogMWJhZHZhbHVlMTsKK30KKworJworCitydWxlCitib2R5Lm1haW5w
YWdlOiBbXQorWyd0ZXh0LWRlY29yYXRpb24nOidub25lJ10gQFs1LTI3XSBhY3RpdmUKK1snYmFk
cHJvcGVydHknOicxYmFkdmFsdWUxJyBub24tcGFyc2VkXSBAWzEwNy0xMzFdIGFjdGl2ZQorCis9
PT0gTGFzdCBzdHlsZXNoZWV0IHBhdGNoZWQgPT09CisKK1N0eWxlU2hlZXQ6ICdib2R5Lm1haW5w
YWdlIHsgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdoOyAgICBiYWRwcm9wZXJ0eTog
MmJhZHZhbHVlMjt9Ym9keSB7ICAgIHRleHQtYWxpZ246IGp1c3RpZnk7fScKKworcnVsZQorYm9k
eS5tYWlucGFnZTogW10KK1sndGV4dC1kZWNvcmF0aW9uJzonc3RyaWtldGhyb3VnaCddIEBbNC0z
NV0gYWN0aXZlCitbJ2JhZHByb3BlcnR5JzonMmJhZHZhbHVlMicgbm9uLXBhcnNlZF0gQFszOS02
M10gYWN0aXZlCisKK3J1bGUKK2JvZHk6IFtdCitbJ3RleHQtYWxpZ24nOidqdXN0aWZ5J10gQFs0
LTI0XSBhY3RpdmUKKworPT09IEFmdGVyIHNlbGVjdG9yIHNldCA9PT0KKworU3R5bGVTaGVldDog
J2h0bWwgKiwgYm9keVtmb289ImJhciJdIHsgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJv
dWdoOyAgICBiYWRwcm9wZXJ0eTogMmJhZHZhbHVlMjt9Ym9keSB7ICAgIHRleHQtYWxpZ246IGp1
c3RpZnk7fScKKworcnVsZQoraHRtbCAqLCBib2R5W2Zvbz0iYmFyIl06IFtdCitbJ3RleHQtZGVj
b3JhdGlvbic6J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdIGFjdGl2ZQorWydiYWRwcm9wZXJ0eSc6
JzJiYWR2YWx1ZTInIG5vbi1wYXJzZWRdIEBbMzktNjNdIGFjdGl2ZQorCitydWxlCitib2R5OiBb
XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0gYWN0aXZlCisKKz09PSBBZnRlciBz
dHlsZSB0ZXh0IHNldCA9PT0KKworU3R5bGVTaGVldDogJ2h0bWwgKiwgYm9keVtmb289ImJhciJd
IHsgICAgICAgIGNvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZDogYmxhY2s7fWJvZHkgeyAgICB0ZXh0
LWFsaWduOiBqdXN0aWZ5O30nCisKK3J1bGUKK2h0bWwgKiwgYm9keVtmb289ImJhciJdOiBbXQor
Wydjb2xvcic6J3doaXRlJ10gQFs4LTIxXSBhY3RpdmUKK1snYmFja2dyb3VuZCc6J2JsYWNrJ10g
QFsyMi00MF0gYWN0aXZlCitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRp
YWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtYXR0YWNobWVu
dCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQt
cG9zaXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2Jh
Y2tncm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0
eWxlCitbJ2JhY2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0gc3R5bGUKK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1jb2xvcic6J2JsYWNrJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXSBzdHlsZQorCitydWxlCitib2R5OiBbXQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSdd
IEBbNC0yNF0gYWN0aXZlCisKKz09PSBNYXRjaGVkIHJ1bGVzIGFmdGVyIHJ1bGUgYWRkZWQgPT09
CisKK3J1bGUKK2JvZHk6IFt1c2VyLWFnZW50XQorWydkaXNwbGF5JzonYmxvY2snXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ21hcmdpbi10b3AnOic4cHgnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdIHN0eWxlCitbJ21hcmdpbi1yaWdodCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0gc3R5bGUKK1snbWFyZ2luLWJvdHRvbSc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0gc3R5bGUKK1snbWFyZ2luLWxlZnQnOic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0
eWxlCisKK3J1bGUKK2JvZHk6IFtdCitbJ2ZvbnQtc2l6ZSc6JzEycHgnXSBAWzUtMjFdIGFjdGl2
ZQorWydmb28nOidiYXIgIQorCisgICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkg
bm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAqLycgaXMtaW1wb3J0YW50IG5vbi1wYXJzZWRdIEBb
MjYtMTA0XSBhY3RpdmUKK1snaGVpZ2h0JzonMTAwJSAhaW1wb3J0YW50JyBpcy1pbXBvcnRhbnRd
IEBbMTA5LTEzM10gYWN0aXZlCitbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9uLXBhcnNlZF0g
QFsxMzgtMTU5XSBhY3RpdmUKK1snaW1wb3J0YW50JzonIWltcG9ydGFudCcgbm9uLXBhcnNlZF0g
QFsxNjQtMTg1XSBhY3RpdmUKK1snY29sb3InOiciYmFkY29sb3IiICEgaW1wb3J0YW50IC8qIGdv
b2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovJyBpcy1pbXBvcnRhbnRdIEBbMTkwLTI1
OV0gYWN0aXZlCisKK3J1bGUKK2h0bWwgKiwgYm9keVtmb289ImJhciJdOiBbXQorWydjb2xvcic6
J3doaXRlJ10gQFs4LTIxXSBhY3RpdmUKK1snYmFja2dyb3VuZCc6J2JsYWNrJ10gQFsyMi00MF0g
YWN0aXZlCitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRpYWwnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtYXR0YWNobWVudCc6J2luaXRp
YWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtcG9zaXRpb24t
eCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQt
cG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2Jh
Y2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUK
K1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5
bGUKK1snYmFja2dyb3VuZC1jb2xvcic6J2JsYWNrJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBz
dHlsZQorCitydWxlCitib2R5OiBbXQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0g
YWN0aXZlCisKK3J1bGUKK2JvZHk6IFtpbnNwZWN0b3JdCitbJ2ZvbnQtZmFtaWx5Jzonc2VyaWYn
XSBAWzAtMThdIGFjdGl2ZQorCitydWxlCitib2R5Lm1haW4xOiBbXQorWydjb2xvcic6JyNGMDBC
QUEnXSBAWzEzLTI4XSBhY3RpdmUKK1snem9vJzonbW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50IHVu
cmVjb2duaXplZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsyOC04MV0gYWN0aXZlCisKK3J1
bGUKK2JvZHkubWFpbjI6IFtdCitbJ2JhY2tncm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0
YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFu
dCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVdIGFjdGl2ZQorWydiYWNrZ3JvdW5kLWltYWdlJzon
aW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2Jh
Y2tncm91bmQtcmVwZWF0LXgnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRpYWwnIGlzLWltcG9y
dGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5kLWF0dGFjaG1l
bnQnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUK
K1snYmFja2dyb3VuZC1wb3NpdGlvbi14JzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdIHN0eWxlCitbJ2JhY2tncm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwn
IGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydiYWNrZ3JvdW5k
LW9yaWdpbic6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBz
dHlsZQorWydiYWNrZ3JvdW5kLWNsaXAnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYmFja2dyb3VuZC1jb2xvcic6J2dyZWVuJyBpcy1pbXBv
cnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKKworPT09IEFmdGVyIHR3byBwcm9w
ZXJ0aWVzIGRpc2FibGVkLCBvbmUgcHJvcGVydHkgYWRkZWQsIG9uZSBwcm9wZXJ0eSByZW1vdmVk
ID09PQorCitzdHlsZQorcmF3IHN0eWxlCitbdGV4dD0naGVpZ2h0IDogMTAwJSA7J10gZGlzYWJs
ZWQKK1snYm9yZGVyJzonMXB4IHNvbGlkJ10gQFs2LTI0XSBhY3RpdmUKK1snYm9yZGVyLXdpZHRo
JzonMnB4J10gQFsyNS00M10gYWN0aXZlCitbJ2dvb2dsZXMnOidhYnJhJyBub24tcGFyc2VkXSBA
WzQ1LTU5XSBhY3RpdmUKK1snZm9vJzonLmJhcicgbm9uLXBhcnNlZF0gQFs2MC03MF0gYWN0aXZl
CitbJy1tb3otZ29vZyc6JzEqKionIG5vbi1wYXJzZWRdIEBbNzEtODddIGFjdGl2ZQorWydmb250
LXNpemUnOicxMnB4J10gQFs4OC0xMDRdIGFjdGl2ZQorW3RleHQ9J2JvcmRlci13aWR0aDogMHB4
OyddIGRpc2FibGVkCitbdGV4dD0nZm9udC1zaXplOiAxNHB4OyddIGRpc2FibGVkCitbJ2JvcmRl
ci10b3Atc3R5bGUnOidzb2xpZCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYm9y
ZGVyLXJpZ2h0LXN0eWxlJzonc29saWQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitb
J2JvcmRlci1ib3R0b20tc3R5bGUnOidzb2xpZCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5
bGUKK1snYm9yZGVyLWxlZnQtc3R5bGUnOidzb2xpZCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0g
c3R5bGUKK1snYm9yZGVyLWNvbG9yJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0g
c3R5bGUKK1snYm9yZGVyLXRvcC13aWR0aCc6JzJweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0g
c3R5bGUKK1snYm9yZGVyLXJpZ2h0LXdpZHRoJzonMnB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XSBzdHlsZQorWydib3JkZXItYm90dG9tLXdpZHRoJzonMnB4J10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXSBzdHlsZQorWydib3JkZXItbGVmdC13aWR0aCc6JzJweCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0gc3R5bGUKKworPT09IEFmdGVyIHByb3BlcnR5IGVuYWJsZWQgPT09CisKK3N0eWxlCity
YXcgc3R5bGUKK1t0ZXh0PSdoZWlnaHQgOiAxMDAlIDsnXSBkaXNhYmxlZAorWydib3JkZXInOicx
cHggc29saWQnXSBAWzYtMjRdIGFjdGl2ZQorWydib3JkZXItd2lkdGgnOicycHgnXSBAWzI1LTQz
XSBhY3RpdmUKK1snZ29vZ2xlcyc6J2FicmEnIG5vbi1wYXJzZWRdIEBbNDUtNTldIGFjdGl2ZQor
Wydmb28nOicuYmFyJyBub24tcGFyc2VkXSBAWzYwLTcwXSBhY3RpdmUKK1snLW1vei1nb29nJzon
MSoqKicgbm9uLXBhcnNlZF0gQFs3MS04N10gYWN0aXZlCitbJ2ZvbnQtc2l6ZSc6JzEycHgnXSBA
Wzg4LTEwNF0gaW5hY3RpdmUKK1t0ZXh0PSdib3JkZXItd2lkdGg6IDBweDsnXSBkaXNhYmxlZAor
Wydmb250LXNpemUnOicxNHB4J10gQFsxMDUtMTIxXSBhY3RpdmUKK1snYm9yZGVyLXRvcC1zdHls
ZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydib3JkZXItcmlnaHQt
c3R5bGUnOidzb2xpZCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKK1snYm9yZGVyLWJv
dHRvbS1zdHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydib3Jk
ZXItbGVmdC1zdHlsZSc6J3NvbGlkJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydi
b3JkZXItY29sb3InOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydi
b3JkZXItdG9wLXdpZHRoJzonMnB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorWydi
b3JkZXItcmlnaHQtd2lkdGgnOicycHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCitb
J2JvcmRlci1ib3R0b20td2lkdGgnOicycHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxl
CitbJ2JvcmRlci1sZWZ0LXdpZHRoJzonMnB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHls
ZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRt
bCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNGMwZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbApAQCAtMCwwICsxLDI5OSBAQAor
PGh0bWw+Cis8aGVhZD4KKworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMv
c3R5bGVzLW5ldy1BUEkuY3NzIiAtLT4KKworPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJlbGVtZW50
cy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkKK3sKKyAg
ICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQpCisgICAgeworICAgICAgICBkdW1wQXJyYXkocmVz
dWx0KTsKKyAgICAgICAgbm90aWZ5RG9uZSgpOworICAgIH0KKyAgICBldmFsdWF0ZUluV2ViSW5z
cGVjdG9yKCJmcm9udGVuZF9ydW5UZXN0IiwgY2FsbGJhY2spOworfQorCisKKy8vIEZyb250ZW5k
IGZ1bmN0aW9ucy4KKworZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxlcikK
K3sKKyAgICB0ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgZnJvbnRlbmRfZXhw
YW5kRE9NU3VidHJlZShXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQpOworICAgIHRlc3RD
b250cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CisKKyAgICAg
ICAgZnVuY3Rpb24gdGFibGVTdHlsZXNDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgc3R5bGVzKQor
ICAgICAgICB7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOwor
ICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gQXR0cmlidXRlIHN0
eWxlcyBmb3IgdGFibGUgPT09Iik7CisgICAgICAgICAgICBmb3IgKHZhciBhdHRyIGluIHN0eWxl
cy5zdHlsZUF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goIkF0dHJpYnV0ZTogIiArIGF0dHIpOworICAgICAgICAgICAgICAgIGZyb250ZW5k
X2R1bXBSdWxlT3JTdHlsZSh0ZXN0Q29udHJvbGxlciwgc3R5bGVzLnN0eWxlQXR0cmlidXRlc1th
dHRyXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZyb250ZW5kX3Rlc3RTdHlsZVNo
ZWV0cyh0ZXN0Q29udHJvbGxlcik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzdHls
ZXNDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgc3R5bGVzKQorICAgICAgICB7CisgICAgICAgICAg
ICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRy
b2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gQ29tcHV0ZWQgc3R5bGUgcHJvcGVydHkgY291bnQgZm9y
IGJvZHkgPT09Iik7CisgICAgICAgICAgICB2YXIgcHJvcENvdW50ID0gc3R5bGVzLmNvbXB1dGVk
U3R5bGUuY3NzUHJvcGVydGllcy5sZW5ndGg7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5y
ZXN1bHRzLnB1c2gocHJvcENvdW50ID4gMjAwID8gIk9LIiA6ICJGQUlMICgiICsgcHJvcENvdW50
ICsgIikiKTsKKworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsK
KyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IE1hdGNoZWQgcnVs
ZXMgZm9yIGJvZHkgPT09Iik7CisgICAgICAgICAgICBmcm9udGVuZF9kdW1wUnVsZXNBcnJheSh0
ZXN0Q29udHJvbGxlciwgc3R5bGVzLm1hdGNoZWRDU1NSdWxlcyk7CisKKyAgICAgICAgICAgIHRl
c3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxl
ci5yZXN1bHRzLnB1c2goIj09PSBQc2V1ZG8gcnVsZXMgZm9yIGJvZHkgPT09Iik7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5wc2V1ZG9FbGVtZW50cy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiUHNldWRv
SWQ9IiArIHN0eWxlcy5wc2V1ZG9FbGVtZW50c1tpXS5wc2V1ZG9JZCk7CisgICAgICAgICAgICAg
ICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIHN0eWxlcy5wc2V1ZG9F
bGVtZW50c1tpXS5ydWxlcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRlc3RDb250
cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goIj09PSBJbmhlcml0ZWQgc3R5bGVzIGZvciBib2R5ID09PSIpOworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMuaW5oZXJpdGVkLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJMZXZlbD0iICsgKGkg
KyAxKSk7CisgICAgICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250
cm9sbGVyLCBzdHlsZXMuaW5oZXJpdGVkW2ldLmlubGluZVN0eWxlKTsKKyAgICAgICAgICAgICAg
ICBmcm9udGVuZF9kdW1wUnVsZXNBcnJheSh0ZXN0Q29udHJvbGxlciwgc3R5bGVzLmluaGVyaXRl
ZFtpXS5tYXRjaGVkQ1NTUnVsZXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0ZXN0
Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIu
cmVzdWx0cy5wdXNoKCI9PT0gSW5saW5lIHN0eWxlIGZvciBib2R5ID09PSIpOworICAgICAgICAg
ICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBzdHlsZXMuaW5saW5l
U3R5bGUpOworCisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlc0Zvck5vZGUy
KGZyb250ZW5kX25vZGVGb3JJZCgidGhldGFibGUiKS5pZCwgdGFibGVTdHlsZXNDYWxsYmFjay5i
aW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIH0KKworICAgICAgICBJbnNwZWN0
b3JCYWNrZW5kLmdldFN0eWxlc0Zvck5vZGUyKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVu
dC5ib2R5LmlkLCBzdHlsZXNDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cisg
ICAgfSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX3Rlc3RTdHlsZVNoZWV0cyh0ZXN0Q29udHJv
bGxlcikKK3sKK3ZhciBuZXdTdHlsZVNoZWV0VGV4dCA9CisiYm9keS5tYWlucGFnZSB7XAorICAg
IHRleHQtZGVjb3JhdGlvbjogc3RyaWtldGhyb3VnaDtcCisgICAgYmFkcHJvcGVydHk6IDJiYWR2
YWx1ZTI7XAorfVwKK1wKK2JvZHkge1wKKyAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5O1wKK31cCisi
OworCisgICAgZnVuY3Rpb24gcGF0Y2hTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBzdHlsZVNo
ZWV0KQorICAgIHsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAg
ICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gTGFzdCBzdHlsZXNoZWV0IHBh
dGNoZWQgPT09Iik7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0U3R5bGVTaGVldFRleHQy
KHN0eWxlU2hlZXQuc3R5bGVTaGVldElkLCBuZXdTdHlsZVNoZWV0VGV4dCwKKyAgICAgICAgICAg
IGZyb250ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVldC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVy
LCBzdHlsZVNoZWV0LnN0eWxlU2hlZXRJZCwgZnJvbnRlbmRfY2hhbmdlU2VsZWN0b3IuYmluZChu
dWxsLCB0ZXN0Q29udHJvbGxlcikpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdHlsZVNoZWV0
SWRzTG9hZGVkKHRlc3RDb250cm9sbGVyLCBpZHMpCisgICAgeworICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1
c2goIj09PSBBbGwgc3R5bGVzaGVldHMgPT09Iik7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgaWRzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHls
ZVNoZWV0KHRlc3RDb250cm9sbGVyLCBpZHNbaV0sIChpIDwgaWRzLmxlbmd0aCAtIDEpID8gbnVs
bCA6IHBhdGNoU3R5bGVTaGVldC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgfQor
ICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0QWxsU3R5bGVzMihzdHlsZVNoZWV0SWRzTG9hZGVkLmJp
bmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfY2hhbmdl
U2VsZWN0b3IodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCit7CisgICAgZnVuY3Rpb24gZGlk
U2V0U2VsZWN0b3IodGVzdENvbnRyb2xsZXIsIHJ1bGUpCisgICAgeworICAgICAgICB0ZXN0Q29u
dHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRz
LnB1c2goIj09PSBBZnRlciBzZWxlY3RvciBzZXQgPT09Iik7CisgICAgICAgIGZyb250ZW5kX2xv
YWRBbmREdW1wU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxlciwgZnJvbnRlbmRfcGFyZW50U3R5bGVT
aGVldElkKHJ1bGUucnVsZUlkKSwgZnJvbnRlbmRfc2V0U3R5bGVUZXh0LmJpbmQobnVsbCwgdGVz
dENvbnRyb2xsZXIpKTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFJ1bGVTZWxl
Y3RvcjIoc3R5bGVTaGVldC5ydWxlc1swXS5ydWxlSWQsICJodG1sICosIGJvZHlbZm9vPVwiYmFy
XCJdIiwgZGlkU2V0U2VsZWN0b3IuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworfQorCitm
dW5jdGlvbiBmcm9udGVuZF9wYXJlbnRTdHlsZVNoZWV0SWQocnVsZU9yU3R5bGVJZCkKK3sKKyAg
ICByZXR1cm4gcnVsZU9yU3R5bGVJZC5zdWJzdHJpbmcoMCwgcnVsZU9yU3R5bGVJZC5pbmRleE9m
KCc6JykpOworfQorCisKK2Z1bmN0aW9uIGZyb250ZW5kX3NldFN0eWxlVGV4dCh0ZXN0Q29udHJv
bGxlciwgc3R5bGVTaGVldCkKK3sKKyAgICBmdW5jdGlvbiBkaWRTZXRTdHlsZVRleHQodGVzdENv
bnRyb2xsZXIsIHN0eWxlKQorICAgIHsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5w
dXNoKCIiKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gQWZ0ZXIg
c3R5bGUgdGV4dCBzZXQgPT09Iik7CisgICAgICAgIGZyb250ZW5kX2xvYWRBbmREdW1wU3R5bGVT
aGVldCh0ZXN0Q29udHJvbGxlciwgZnJvbnRlbmRfcGFyZW50U3R5bGVTaGVldElkKHN0eWxlLnN0
eWxlSWQpLCBmcm9udGVuZF9hZGRSdWxlLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAg
ICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFByb3BlcnR5VGV4dDIoc3R5bGVTaGVldC5y
dWxlc1swXS5zdHlsZS5zdHlsZUlkLCAwLCAiIiwgdHJ1ZSk7CisgICAgSW5zcGVjdG9yQmFja2Vu
ZC5zZXRQcm9wZXJ0eVRleHQyKHN0eWxlU2hlZXQucnVsZXNbMF0uc3R5bGUuc3R5bGVJZCwgMCwg
IiIsIHRydWUpOworICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UHJvcGVydHlUZXh0MihzdHlsZVNo
ZWV0LnJ1bGVzWzBdLnN0eWxlLnN0eWxlSWQsIDAsICJjb2xvcjogd2hpdGU7IGJhY2tncm91bmQ6
IGJsYWNrOyIsIGZhbHNlLCBkaWRTZXRTdHlsZVRleHQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxl
cikpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9hZGRSdWxlKHRlc3RDb250cm9sbGVyKQorewor
ICAgIGZ1bmN0aW9uIGRpZEdldFN0eWxlcyh0ZXN0Q29udHJvbGxlciwgc3R5bGVzKQorICAgIHsK
KyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgdGVzdENv
bnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gTWF0Y2hlZCBydWxlcyBhZnRlciBydWxlIGFkZGVk
ID09PSIpOworICAgICAgICBmcm9udGVuZF9kdW1wUnVsZXNBcnJheSh0ZXN0Q29udHJvbGxlciwg
c3R5bGVzLm1hdGNoZWRDU1NSdWxlcyk7CisgICAgICAgIGZyb250ZW5kX2Rpc2FibGVQcm9wZXJ0
eSh0ZXN0Q29udHJvbGxlcik7CisgICAgfQorCisgICAgZnVuY3Rpb24gZGlkU2V0U3R5bGVUZXh0
KHRlc3RDb250cm9sbGVyLCBzdHlsZSkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQu
Z2V0U3R5bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQs
IGRpZEdldFN0eWxlcy5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcnVsZUFkZGVkKHRlc3RDb250cm9sbGVyLCBydWxlKQorICAgIHsKKyAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5zZXRQcm9wZXJ0eVRleHQyKHJ1bGUuc3R5bGUuc3R5bGVJZCwgMCwg
ImZvbnQtZmFtaWx5OiBzZXJpZiIsIGZhbHNlLCBkaWRTZXRTdHlsZVRleHQuYmluZChudWxsLCB0
ZXN0Q29udHJvbGxlcikpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tlbmQuYWRkUnVsZTIo
V2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsICJib2R5IiwgcnVsZUFkZGVk
LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfZGlz
YWJsZVByb3BlcnR5KHRlc3RDb250cm9sbGVyKQoreworICAgIGZ1bmN0aW9uIGRpZERpc2FibGVQ
cm9wZXJ0eSh0ZXN0Q29udHJvbGxlciwgc3R5bGUpCisgICAgeworICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1
c2goIj09PSBBZnRlciB0d28gcHJvcGVydGllcyBkaXNhYmxlZCwgb25lIHByb3BlcnR5IGFkZGVk
LCBvbmUgcHJvcGVydHkgcmVtb3ZlZCA9PT0iKTsKKyAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVP
clN0eWxlKHRlc3RDb250cm9sbGVyLCBzdHlsZSk7CisgICAgICAgIGZyb250ZW5kX2VuYWJsZVBy
b3BlcnR5KHRlc3RDb250cm9sbGVyLCBzdHlsZS5zdHlsZUlkKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBzdHlsZXNDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgc3R5bGVzKQorICAgIHsKKyAgICAg
ICAgLy8gaGVpZ2h0IDogMTAwJSA7CisgICAgICAgIC8vIGJvcmRlcjogMXB4IHNvbGlkOworICAg
ICAgICAvLyBib3JkZXItd2lkdGg6IDJweDsKKyAgICAgICAgLy8gYmFja2dyb3VuZC1jb2xvciA6
ICMzM0ZGMzM7CisgICAgICAgIC8vIGdvb2dsZXM6IGFicmE7CisgICAgICAgIC8vIGZvbzogLmJh
cjsKKyAgICAgICAgLy8gLW1vei1nb29nOiAxKioqOworICAgICAgICAvLyBib3JkZXItd2lkdGg6
IDBweDsKKworICAgICAgICB2YXIgc3R5bGUgPSBzdHlsZXMubWF0Y2hlZENTU1J1bGVzWzFdLnN0
eWxlOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnRvZ2dsZVByb3BlcnR5MihzdHlsZS5zdHls
ZUlkLCAwLCB0cnVlKTsgLy8gaGVpZ2h0OiAxMDAlCisgICAgICAgIEluc3BlY3RvckJhY2tlbmQu
dG9nZ2xlUHJvcGVydHkyKHN0eWxlLnN0eWxlSWQsIDcsIHRydWUpOyAvLyBib3JkZXItd2lkdGg6
IDBweAorICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFByb3BlcnR5VGV4dDIoc3R5bGUuc3R5
bGVJZCwgNywgImZvbnQtc2l6ZTogMTJweDsiLCBmYWxzZSk7CisgICAgICAgIEluc3BlY3RvckJh
Y2tlbmQuc2V0UHJvcGVydHlUZXh0MihzdHlsZS5zdHlsZUlkLCA5LCAiZm9udC1zaXplOiAxNHB4
OyIsIGZhbHNlKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC50b2dnbGVQcm9wZXJ0eTIoc3R5
bGUuc3R5bGVJZCwgOSwgdHJ1ZSk7IC8vIGZvbnQtc2l6ZTogMTRweAorICAgICAgICAvLyBoZWln
aHQgOiAxMDAlIDsgW2RdCisgICAgICAgIC8vIGJvcmRlcjogMXB4IHNvbGlkOworICAgICAgICAv
LyBib3JkZXItd2lkdGg6IDJweDsKKyAgICAgICAgLy8gYmFja2dyb3VuZC1jb2xvciA6ICMzM0ZG
MzM7CisgICAgICAgIC8vIGdvb2dsZXM6IGFicmE7CisgICAgICAgIC8vIGZvbzogLmJhcjsKKyAg
ICAgICAgLy8gLW1vei1nb29nOiAxKioqOworICAgICAgICAvLyBmb250LXNpemU6IDEycHg7Cisg
ICAgICAgIC8vIGJvcmRlci13aWR0aDogMHB4OyBbZF0KKyAgICAgICAgLy8gZm9udC1zaXplOiAx
NHB4OyBbZF0KKworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFByb3BlcnR5VGV4dDIoc3R5
bGUuc3R5bGVJZCwgMywgIiIsIHRydWUsIGRpZERpc2FibGVQcm9wZXJ0eS5iaW5kKG51bGwsIHRl
c3RDb250cm9sbGVyKSk7CisgICAgfQorCisgICAgdmFyIHRvZ2dsZUVsZW1lbnQgPSBmcm9udGVu
ZF9ub2RlRm9ySWQoInRvZ2dsZSIpOworICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVzRm9y
Tm9kZTIodG9nZ2xlRWxlbWVudC5pZCwgc3R5bGVzQ2FsbGJhY2suYmluZChudWxsLCB0ZXN0Q29u
dHJvbGxlcikpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9lbmFibGVQcm9wZXJ0eSh0ZXN0Q29u
dHJvbGxlciwgc3R5bGVJZCkKK3sKKyAgICBmdW5jdGlvbiBkaWRFbmFibGVQcm9wZXJ0eSh0ZXN0
Q29udHJvbGxlciwgc3R5bGUpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRz
LnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBZnRl
ciBwcm9wZXJ0eSBlbmFibGVkID09PSIpOworICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9yU3R5
bGUodGVzdENvbnRyb2xsZXIsIHN0eWxlKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSh0ZXN0Q29udHJvbGxlci5yZXN1bHRzKTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNr
ZW5kLnRvZ2dsZVByb3BlcnR5MihzdHlsZUlkLCA2LCBmYWxzZSk7CisgICAgSW5zcGVjdG9yQmFj
a2VuZC50b2dnbGVQcm9wZXJ0eTIoc3R5bGVJZCwgOCwgZmFsc2UsIGRpZEVuYWJsZVByb3BlcnR5
LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworLy8gRGF0YSBkdW1waW5nCisKK2Z1
bmN0aW9uIGZyb250ZW5kX2R1bXBSdWxlc0FycmF5KHRlc3RDb250cm9sbGVyLCBydWxlcykKK3sK
KyAgICBpZiAoIXJ1bGVzKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBydWxlcy5sZW5ndGg7ICsraSkKKyAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRl
c3RDb250cm9sbGVyLCBydWxlc1tpXSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2R1bXBSdWxl
T3JTdHlsZSh0ZXN0Q29udHJvbGxlciwgcnVsZU9yU3R5bGUpCit7CisgICAgaWYgKCFydWxlT3JT
dHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBpc1J1bGUgPSAhIShydWxlT3JTdHlsZS5z
dHlsZSk7CisgICAgdmFyIHN0eWxlID0gaXNSdWxlID8gcnVsZU9yU3R5bGUuc3R5bGUgOiBydWxl
T3JTdHlsZTsKKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgIHRlc3RD
b250cm9sbGVyLnJlc3VsdHMucHVzaChpc1J1bGUgPyAicnVsZSIgOiAic3R5bGUiKTsKKyAgICB0
ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goKGlzUnVsZSA/IChydWxlT3JTdHlsZS5zZWxlY3Rv
clRleHQgKyAiOiBbIiArIHJ1bGVPclN0eWxlLm9yaWdpbiArICJdIikgOiAicmF3IHN0eWxlIikp
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGUuY3NzUHJvcGVydGllcy5sZW5ndGg7ICsr
aSkgeworICAgICAgICB2YXIgcHJvcGVydHkgPSBzdHlsZS5jc3NQcm9wZXJ0aWVzW2ldOworICAg
ICAgICBpZiAocHJvcGVydHkuc3RhdHVzICE9PSAiZGlzYWJsZWQiKQorICAgICAgICAgICAgdGVz
dENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJbJyIgKyBwcm9wZXJ0eS5uYW1lICsgIic6JyIgKyBw
cm9wZXJ0eS52YWx1ZSArICInIiArIChwcm9wZXJ0eS5wcmlvcml0eSA9PT0gImltcG9ydGFudCIg
PyAiIGlzLWltcG9ydGFudCIgOiAiIikgKyAocHJvcGVydHkucGFyc2VkT2sgPyAiIiA6ICIgbm9u
LXBhcnNlZCIpICsiXSBAWyIgKyBwcm9wZXJ0eS5zdGFydE9mZnNldCArICItIiArIHByb3BlcnR5
LmVuZE9mZnNldCArICJdICIgKyBwcm9wZXJ0eS5zdGF0dXMpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlt0ZXh0PSciICsgcHJvcGVydHku
dGV4dCArICInXSAiICsgcHJvcGVydHkuc3RhdHVzKTsKKyAgICB9Cit9CisKKworZnVuY3Rpb24g
ZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0
SWQsIGNvbnRpbnVhdGlvbikKK3sKKyAgICBmdW5jdGlvbiBzdHlsZVNoZWV0TG9hZGVkKHRlc3RD
b250cm9sbGVyLCBzdHlsZVNoZWV0KQorICAgIHsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVz
dWx0cy5wdXNoKCIiKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJTdHls
ZVNoZWV0OiAnIiArIHN0eWxlU2hlZXQudGV4dCArICInIik7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgc3R5bGVTaGVldC5ydWxlcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGZyb250
ZW5kX2R1bXBSdWxlT3JTdHlsZSh0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldC5ydWxlc1tpXSk7
CisgICAgICAgIGlmIChjb250aW51YXRpb24pCisgICAgICAgICAgICBjb250aW51YXRpb24oc3R5
bGVTaGVldCk7CisgICAgfQorCisgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRTdHlsZVNoZWV0Mihz
dHlsZVNoZWV0SWQsIHN0eWxlU2hlZXRMb2FkZWQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikp
OworfQorCisvKgorQ292ZXJlZCBBUEkgbWV0aG9kczoKKyAtIGdldFN0eWxlc0Zvck5vZGUyCisg
LSBnZXRBbGxTdHlsZXMyCisgLSBnZXRTdHlsZVNoZWV0MgorIC0gc2V0U3R5bGVTaGVldFRleHQy
CisgLSBzZXRTdHlsZURhdGEyCisgLSBzZXRSdWxlU2VsZWN0b3IyCisgLSBhZGRSdWxlMgorKi8K
KworPC9zY3JpcHQ+CisKKzxzdHlsZT4KKworLyogQW4gaW5saW5lIHN0eWxlc2hlZXQgKi8KK2Jv
ZHkubWFpbnBhZ2UgeworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLyogYXQgbGVhc3Qgb25l
IHZhbGlkIHByb3BlcnR5IGlzIG5lY2Vzc2FyeSBmb3IgV2ViQ29yZSB0byBtYXRjaCBhIHJ1bGUg
Ki8KKyAgICBiYWRwcm9wZXJ0eTogMWJhZHZhbHVlMTsKK30KKworPC9zdHlsZT4KKzwvaGVhZD4K
KworPGJvZHkgY2xhc3M9Im1haW4xIG1haW4yIG1haW5wYWdlIiBvbmxvYWQ9Im9ubG9hZCgpIiBz
dHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsgd2lkdGg6IDg1JSI+Cis8cD4KK1Rlc3RzIHRoYXQg
SW5zcGVjdG9yQ1NTQWdlbnQgQVBJIG1ldGhvZHMgd29yayBhcyBleHBlY3RlZC4KKzwvcD4KKzx0
YWJsZSB3aWR0aD01MCUgaWQ9InRoZXRhYmxlIj4KKzwvdGFibGU+Cis8aDEgaWQ9InRvZ2dsZSI+
SDE8L2gxPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dAppbmRleCBlNGQzM2Q4Li5i
ZWVjNzI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1v
ZmZzZXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNv
dXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDYgQEAKIFRlc3RzIHRoYXQgcHJv
cGVyIGRhdGEgYW5kIHN0YXJ0L2VuZCBvZmZzZXQgcG9zaXRpb25zIGFyZSByZXBvcnRlZCBmb3Ig
Q1NTIHN0eWxlIGRlY2xhcmF0aW9ucyBhbmQgcHJvcGVydGllcy4KIAotYm9keTogWzYtMjY2XQor
Ym9keTogWzAtNF0gWzYtMjY2XQogWydmb250LXNpemUnOicxMnB4J10gQFs1LTIxXQogWydmb28n
OidiYXIgIQogCkBAIC05LDE1ICs5LDE1IEBAIGJvZHk6IFs2LTI2Nl0KIFsnY29sb3J6JzonIiFp
bXBvcnRhbnQiJyBub24tcGFyc2VkXSBAWzEzOC0xNTldCiBbJ2ltcG9ydGFudCc6Jycgbm9uLXBh
cnNlZF0gQFsxNjQtMTc0XQogWydjb2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29v
ZCBwcm9wZXJ0eSB3aXRoIHN0cmFuZ2UgdmFsdWUgKi8nICFpbXBvcnRhbnRdIEBbMTkwLTI1OV0K
LWJvZHkubWFpbjE6IFszMzctNDE4XQorYm9keS5tYWluMTogWzI5OC0zMzZdIFszMzctNDE4XQog
Wydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XQogWyd6b28nOidtb28gLyogbm90IGFuICFpbXBv
cnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXQotYm9k
eS5tYWluMjogWzQ0NS01NDBdCitib2R5Lm1haW4yOiBbNDM0LTQ0NF0gWzQ0NS01NDBdCiBbJ2Jh
Y2tncm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFu
dCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgIWltcG9ydGFudF0gQFswLTk1
XQotYm9keS5tYWlucGFnZTogWzE3LTE0OV0KK2JvZHkubWFpbnBhZ2U6IFsyLTE1XSBbMTctMTQ5
XQogWyd0ZXh0LWRlY29yYXRpb24nOidub25lJ10gQFs1LTI3XQogWydiYWRwcm9wZXJ0eSc6JzFi
YWR2YWx1ZTEnIG5vbi1wYXJzZWRdIEBbMTA3LTEzMV0KLWVsZW1lbnQuc3R5bGU6IFswLTMxXQor
ZWxlbWVudC5zdHlsZTogWzAtMF0gWzAtMzFdCiBbJ2ZvbnQtd2VpZ2h0Jzonbm9ybWFsJ10gQFsw
LTIwXQogWyd3aWR0aCc6JzgwJSddIEBbMjEtMzFdCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbCBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbAppbmRleCAxNWEzNzI3Li45NzlkMDJiIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1s
CkBAIC00Myw3ICs0Myw3IEBAIGZ1bmN0aW9uIGZyb250ZW5kX3J1blRlc3QodGVzdENvbnRyb2xs
ZXIpCiBmdW5jdGlvbiBmcm9udGVuZF9zdHlsZURhdGFSZWNlaXZlZCh0ZXN0Q29udHJvbGxlciwg
cnVsZU9yU3R5bGUsIHNob3VsZEJhaWwsIGRhdGEpCiB7CiAgICAgdmFyIGlzUnVsZSA9ICEhKHJ1
bGVPclN0eWxlLnN0eWxlKTsKLSAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goKGlzUnVs
ZSA/IHJ1bGVPclN0eWxlLnNlbGVjdG9yVGV4dCA6ICJlbGVtZW50LnN0eWxlIikgKyAiOiBbIiAr
IGRhdGEuYm9keVJhbmdlLnN0YXJ0ICsgIi0iICsgZGF0YS5ib2R5UmFuZ2UuZW5kICsgIl0iKTsK
KyAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goKGlzUnVsZSA/IHJ1bGVPclN0eWxlLnNl
bGVjdG9yVGV4dCA6ICJlbGVtZW50LnN0eWxlIikgKyAiOiBbIiArIGRhdGEuc2VsZWN0b3JSYW5n
ZS5zdGFydCArICItIiArIGRhdGEuc2VsZWN0b3JSYW5nZS5lbmQgKyAiXSBbIiArIGRhdGEuYm9k
eVJhbmdlLnN0YXJ0ICsgIi0iICsgZGF0YS5ib2R5UmFuZ2UuZW5kICsgIl0iKTsKICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGRhdGEucHJvcGVydHlEYXRhLmxlbmd0aDsgKytpKSB7CiAgICAgICAg
IHZhciBwcm9wZXJ0eURhdHVtID0gZGF0YS5wcm9wZXJ0eURhdGFbaV07CiAgICAgICAgIHRlc3RD
b250cm9sbGVyLnJlc3VsdHMucHVzaCgiWyciICsgcHJvcGVydHlEYXR1bS5uYW1lICsgIic6JyIg
KyBwcm9wZXJ0eURhdHVtLnZhbHVlICsgIiciICsgKHByb3BlcnR5RGF0dW0uaW1wb3J0YW50ID8g
IiAhaW1wb3J0YW50IiA6ICIiKSArIChwcm9wZXJ0eURhdHVtLnBhcnNlZCA/ICIiIDogIiBub24t
cGFyc2VkIikgKyJdIEBbIiArIHByb3BlcnR5RGF0dW0uc3RhcnQgKyAiLSIgKyBwcm9wZXJ0eURh
dHVtLmVuZCArICJdIik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGFkNmNmMDAuLjNhNmM2YzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTAtMTEt
MDIgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBFbmFi
bGUgSW5zcGVjdG9yQ1NTQWdlbnQgKG5vdCB1c2VkIGJ5IGZyb250ZW5kIGZvciBDU1MgZWRpdGlu
ZyB5ZXQpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
ODgzNAorCisgICAgICAgIERyaXZlLWJ5IGZpeDogdXNlIGEgc2luZ2xlIEFQSSBtZXRob2QgdG8g
cmV0cmlldmUgYWxsIG5vZGUtcmVsYXRlZCBzdHlsZXMgaW5zdGVhZCBvZiBhIGJ1bmNoIG9mIHNl
cGFyYXRlIGNhbGxzLgorCisgICAgICAgIFRlc3Q6IGluc3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5o
dG1sCisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
Okluc3BlY3RvckNTU0FnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50
OjpzZXRET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cmVz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlc0Zvck5v
ZGUyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0
eWxlRm9yTm9kZTIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1
bGUyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpxdWVyeVNlbGVjdG9y
QWxsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y3NzQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlOjpkaXNhYmxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGU6OnBvcHVsYXRlQWxsUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZTo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaXhVbnBhcnNlZFByb3Bl
cnR5UmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3Vy
ZVNvdXJjZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlOjp0ZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eTo6c2V0UmF3VGV4
dEZyb21TdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
UHJvcGVydHk6Omhhc1Jhd1RleHQpOgorCiAyMDEwLTExLTAyICBQYXZlbCBQb2Rpdmlsb3YgIDxw
b2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRt
YW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQppbmRleCAz
YThhNmNiLi5mNWYyNDUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnBtCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucG0KQEAgLTM4LDYgKzM4LDExIEBAICR0eXBlVHJhbnNmb3JteyJET00ifSA9IHsKICAg
ICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRE9NQWdlbnQuaCIsCiAgICAgImRvbWFpbkFjY2Vzc29y
IiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpIiwKIH07CiskdHlwZVRyYW5z
Zm9ybXsiQ1NTIn0gPSB7CisgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JDU1NBZ2VudCIsCisg
ICAgImhlYWRlciIgPT4gIkluc3BlY3RvckNTU0FnZW50LmgiLAorICAgICJkb21haW5BY2Nlc3Nv
ciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+Y3NzQWdlbnQoKSIsCit9OwogJHR5cGVUcmFu
c2Zvcm17IkFwcGxpY2F0aW9uQ2FjaGUifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCIsCiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oIiwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4IDFmNGM3OGMu
LjU1ZDNhNDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMjA3LDcgKzIwNywxOSBAQCBt
b2R1bGUgY29yZSB7CiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCB0b2dnbGVTdHlsZUVuYWJs
ZWQoaW4gbG9uZyBzdHlsZUlkLCBpbiBTdHJpbmcgcHJvcGVydHlOYW1lLCBpbiBib29sZWFuIGRp
c2FibGVkLCBvdXQgVmFsdWUgc3R5bGUpOwogICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgc2V0
UnVsZVNlbGVjdG9yKGluIGxvbmcgcnVsZUlkLCBpbiBTdHJpbmcgc2VsZWN0b3IsIGluIGxvbmcg
c2VsZWN0ZWROb2RlSWQsIG91dCBWYWx1ZSBydWxlLCBvdXQgYm9vbGVhbiBzZWxlY3RvckFmZmVj
dHNOb2RlKTsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGFkZFJ1bGUoaW4gU3RyaW5nIHNl
bGVjdG9yLCBpbiBsb25nIHNlbGVjdGVkTm9kZUlkLCBvdXQgVmFsdWUgcnVsZSwgb3V0IGJvb2xl
YW4gc2VsZWN0b3JBZmZlY3RzTm9kZSk7Ci0gICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBnZXRT
dXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKG91dCBBcnJheSBjc3NQcm9wZXJ0aWVzKTsKKworICAgICAg
ICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0U3R5bGVzRm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91
dCBWYWx1ZSBzdHlsZXMpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0Q29tcHV0ZWRT
dHlsZUZvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgVmFsdWUgc3R5bGUpOworICAgICAgICBb
aGFuZGxlcj1DU1NdIHZvaWQgZ2V0SW5saW5lU3R5bGVGb3JOb2RlMihpbiBsb25nIG5vZGVJZCwg
b3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldEFsbFN0eWxl
czIob3V0IEFycmF5IHN0eWxlU2hlZXRJZHMpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQg
Z2V0U3R5bGVTaGVldDIoaW4gU3RyaW5nIHN0eWxlU2hlZXRJZCwgb3V0IFZhbHVlIHN0eWxlU2hl
ZXQpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgc2V0U3R5bGVTaGVldFRleHQyKGluIFN0
cmluZyBzdHlsZVNoZWV0SWQsIGluIFN0cmluZyB0ZXh0KTsKKyAgICAgICAgW2hhbmRsZXI9Q1NT
XSB2b2lkIHNldFByb3BlcnR5VGV4dDIoaW4gU3RyaW5nIHN0eWxlSWQsIGluIGxvbmcgcHJvcGVy
dHlJbmRleCwgaW4gU3RyaW5nIHRleHQsIGluIGJvb2xlYW4gb3ZlcndyaXRlLCBvdXQgVmFsdWUg
c3R5bGUpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgdG9nZ2xlUHJvcGVydHkyKGluIFN0
cmluZyBzdHlsZUlkLCBpbiBsb25nIHByb3BlcnR5SW5kZXgsIGluIGJvb2xlYW4gZGlzYWJsZSwg
b3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFJ1bGVTZWxl
Y3RvcjIoaW4gU3RyaW5nIHJ1bGVJZCwgaW4gU3RyaW5nIHNlbGVjdG9yLCBvdXQgVmFsdWUgcnVs
ZSk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBhZGRSdWxlMihpbiBsb25nIGNvbnRleHRO
b2RlSWQsIGluIFN0cmluZyBzZWxlY3Rvciwgb3V0IFZhbHVlIHJ1bGUpOworICAgICAgICBbaGFu
ZGxlcj1DU1NdIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhvdXQgQXJyYXkgY3NzUHJv
cGVydGllcyk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBxdWVyeVNlbGVjdG9yQWxsKGlu
IGxvbmcgZG9jdW1lbnRJZCwgaW4gU3RyaW5nIHNlbGVjdG9yLCBvdXQgQXJyYXkgcmVzdWx0KTsK
IAogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGdldENvb2tpZXMob3V0IEFycmF5
IGNvb2tpZXMsIG91dCBTdHJpbmcgY29va2llc1N0cmluZyk7CiAgICAgICAgIFtoYW5kbGVyPUNv
bnRyb2xsZXJdIHZvaWQgZGVsZXRlQ29va2llKGluIFN0cmluZyBjb29raWVOYW1lLCBpbiBTdHJp
bmcgZG9tYWluKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCBk
MWY3NDEyLi41Y2I3MWM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CkBAIC04Niw3ICs4NiwxMiBAQAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFu
ZE5hbWUyIDogc2hvcnRoYW5kVmFsdWUyCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LAog
Ly8gICAgY3NzVGV4dCAgICAgICAgICAgIDogPHN0cmluZz4sIC8vIE9wdGlvbmFsIC0gZGVjbGFy
YXRpb24gdGV4dAotLy8gICAgcHJvcGVydGllcyAgICAgICAgIDogeyB3aWR0aCwgaGVpZ2h0IH0K
Ky8vICAgIHByb3BlcnRpZXMgICAgICAgICA6IHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQsIC8vIE9wdGlvbmFsIC0gZm9yIHNvdXJjZS1i
YXNlZCBzdHlsZXMgb25seQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldCwg
Ly8gT3B0aW9uYWwgLSBmb3Igc291cmNlLWJhc2VkIHN0eWxlcyBvbmx5CisvLyAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAvLyB9CiAvLwogLy8gY3NzUnVsZSA9IHsKQEAgLTk1LDcgKzEwMCw4
IEBACiAvLyAgICBzb3VyY2VVUkwgICAgOiA8c3RyaW5nPiwKIC8vICAgIHNvdXJjZUxpbmUgICA6
IDxzdHJpbmc+LAogLy8gICAgb3JpZ2luICAgICAgIDogPHN0cmluZz4sIC8vICIiIHx8ICJ1c2Vy
LWFnZW50IiB8fCAidXNlciIgfHwgImluc3BlY3RvciIKLS8vICAgIHN0eWxlICAgICAgICA6ICNj
c3NTdHlsZQorLy8gICAgc3R5bGUgICAgICAgIDogI2Nzc1N0eWxlLAorLy8gICAgc2VsZWN0b3JS
YW5nZTogeyBzdGFydDogPG51bWJlcj4sIGVuZDogPG51bWJlcj4gfSAvLyBPcHRpb25hbCAtIGZv
ciBzb3VyY2UtYmFzZWQgcnVsZXMgb25seQogLy8gfQogLy8KIC8vIGNzc1N0eWxlU2hlZXQgPSB7
CkBAIC0xMzcsMTQgKzE0MywxMiBAQCBDU1NTdHlsZVJ1bGUqIEluc3BlY3RvckNTU0FnZW50Ojph
c0NTU1N0eWxlUnVsZShTdHlsZUJhc2UqIHN0eWxlQmFzZSkKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSk7CiB9CiAKLUluc3BlY3RvckNTU0FnZW50OjpJbnNwZWN0
b3JDU1NBZ2VudChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQsIEluc3BlY3RvckZyb250ZW5k
KiBmcm9udGVuZCkKLSAgICA6IG1fZG9tQWdlbnQoZG9tQWdlbnQpCi0gICAgLCBtX2Zyb250ZW5k
KGZyb250ZW5kKQorSW5zcGVjdG9yQ1NTQWdlbnQ6Okluc3BlY3RvckNTU0FnZW50KCkKKyAgICA6
IG1fZG9tQWdlbnQoMCkKICAgICAsIG1fbGFzdFN0eWxlU2hlZXRJZCgxKQogICAgICwgbV9sYXN0
UnVsZUlkKDEpCiAgICAgLCBtX2xhc3RTdHlsZUlkKDEpCiB7Ci0gICAgbV9kb21BZ2VudC0+c2V0
RE9NTGlzdGVuZXIodGhpcyk7CiB9CiAKIEluc3BlY3RvckNTU0FnZW50Ojp+SW5zcGVjdG9yQ1NT
QWdlbnQoKQpAQCAtMTUyLDQ3ICsxNTYsNzYgQEAgSW5zcGVjdG9yQ1NTQWdlbnQ6On5JbnNwZWN0
b3JDU1NBZ2VudCgpCiAgICAgcmVzZXQoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
c2V0RE9NQWdlbnQoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KQoreworICAgIGlmIChtX2Rv
bUFnZW50KQorICAgICAgICBtX2RvbUFnZW50LT5zZXRET01MaXN0ZW5lcigwKTsKKyAgICBtX2Rv
bUFnZW50ID0gZG9tQWdlbnQ7CisgICAgaWYgKG1fZG9tQWdlbnQpCisgICAgICAgIG1fZG9tQWdl
bnQtPnNldERPTUxpc3RlbmVyKHRoaXMpOworfQorCiB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpy
ZXNldCgpCiB7Ci0gICAgbV9kb21BZ2VudC0+c2V0RE9NTGlzdGVuZXIoMCk7CisgICAgbV9pZFRv
SW5zcGVjdG9yU3R5bGVTaGVldC5jbGVhcigpOworICAgIG1fY3NzU3R5bGVTaGVldFRvSW5zcGVj
dG9yU3R5bGVTaGVldC5jbGVhcigpOworICAgIG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5j
bGVhcigpOworICAgIG1fZG9jdW1lbnRUb0luc3BlY3RvclN0eWxlU2hlZXQuY2xlYXIoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFJ1bGVzRm9yTm9kZTIobG9uZyBu
b2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OmdldFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChub2Rl
SWQpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KworICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogc3R5bGVTaGVldCA9IGFz
SW5zcGVjdG9yU3R5bGVTaGVldChlbGVtZW50KTsKKyAgICBpZiAoc3R5bGVTaGVldCkKKyAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgc3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JTdHlsZShlbGVtZW50LT5zdHlsZSgpKSk7CisKKyAgICBSZWZQdHI8Q1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlSW5mbyA9IGNvbXB1dGVkU3R5bGUo
ZWxlbWVudCwgdHJ1ZSk7IC8vIFN1cHBvcnQgdGhlIHZpZXdpbmcgb2YgOnZpc2l0ZWQgaW5mb3Jt
YXRpb24gaW4gY29tcHV0ZWQgc3R5bGUuCisgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBjb21w
dXRlZEluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJ
ZCgpLCBjb21wdXRlZFN0eWxlSW5mby5nZXQoKSwgMCk7CisgICAgcmVzdWx0T2JqZWN0LT5zZXRP
YmplY3QoImNvbXB1dGVkU3R5bGUiLCBjb21wdXRlZEluc3BlY3RvclN0eWxlLT5idWlsZE9iamVj
dEZvclN0eWxlKCkpOworCiAgICAgQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IgPSBlbGVtZW50
LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKICAgICBSZWZQdHI8Q1NTUnVsZUxp
c3Q+IG1hdGNoZWRSdWxlcyA9IHNlbGVjdG9yLT5zdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50
LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgKnJlc3VsdCA9IGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChtYXRj
aGVkUnVsZXMuZ2V0KCkpOwotfQorICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoIm1hdGNoZWRD
U1NSdWxlcyIsIGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChtYXRjaGVkUnVsZXMuZ2V0KCkpKTsKIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIobG9u
ZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCkKLXsKLSAgICBFbGVtZW50
KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAg
ICAgICByZXR1cm47CisgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInN0eWxlQXR0cmlidXRl
cyIsIGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKGVsZW1lbnQpKTsKIAotICAgIENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNl
bGVjdG9yKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwc2V1ZG9FbGVtZW50cyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gRklS
U1RfUFVCTElDX1BTRVVET0lEOyBwc2V1ZG9JZCA8IEFGVEVSX0xBU1RfSU5URVJOQUxfUFNFVURP
SUQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHBzZXVkb0lkICsgMSkpIHsKICAg
ICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rvci0+cHNldWRv
U3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcHNldWRvSWQsIGZhbHNlLCB0cnVlKTsKICAg
ICAgICAgaWYgKG1hdGNoZWRSdWxlcyAmJiBtYXRjaGVkUnVsZXMtPmxlbmd0aCgpKSB7CiAgICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwc2V1ZG9TdHlsZXMgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgcHNldWRvU3R5bGVzLT5zZXROdW1iZXIoInBz
ZXVkb0lkIiwgc3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9JZCkpOwogICAgICAgICAgICAgcHNldWRv
U3R5bGVzLT5zZXRBcnJheSgicnVsZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0Y2hlZFJ1
bGVzLmdldCgpKSk7Ci0gICAgICAgICAgICAoKnJlc3VsdCktPnB1c2hPYmplY3QocHNldWRvU3R5
bGVzLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBwc2V1ZG9FbGVtZW50cy0+cHVzaE9iamVjdChw
c2V1ZG9TdHlsZXMucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0KLX0KKyAgICByZXN1bHRP
YmplY3QtPnNldEFycmF5KCJwc2V1ZG9FbGVtZW50cyIsIHBzZXVkb0VsZW1lbnRzLnJlbGVhc2Uo
KSk7CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUy
KGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCi17Ci0gICAgRWxl
bWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChub2RlSWQpOwotICAgIGlmICghZWxlbWVudCkK
LSAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5oZXJpdGVkU3R5
bGVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIEVsZW1lbnQqIHBhcmVudEVsZW1l
bnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgd2hpbGUgKHBhcmVudEVsZW1lbnQp
IHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyZW50U3R5bGUgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAocGFyZW50RWxlbWVudC0+c3R5bGUoKSAm
JiBwYXJlbnRFbGVtZW50LT5zdHlsZSgpLT5sZW5ndGgoKSkgeworICAgICAgICAgICAgSW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBzdHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHls
ZVNoZWV0KHBhcmVudEVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHN0eWxlU2hlZXQpCisgICAg
ICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldE9iamVjdCgiaW5saW5lU3R5bGUiLCBzdHlsZVNo
ZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoSW5zcGVjdG9y
Q1NTSWQ6OmNyZWF0ZUZyb21QYXJ0cyhzdHlsZVNoZWV0LT5pZCgpLCAiMCIpKSkpOworICAgICAg
ICB9CiAKLSAgICAqcmVzdWx0ID0gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoZWxlbWVu
dCk7CisgICAgICAgIENTU1N0eWxlU2VsZWN0b3IqIHBhcmVudFNlbGVjdG9yID0gcGFyZW50RWxl
bWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CisgICAgICAgIFJlZlB0cjxD
U1NSdWxlTGlzdD4gcGFyZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50U2VsZWN0b3ItPnN0eWxlUnVs
ZXNGb3JFbGVtZW50KHBhcmVudEVsZW1lbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcGFyZW50
U3R5bGUtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxpc3Qo
cGFyZW50TWF0Y2hlZFJ1bGVzLmdldCgpKSk7CisgICAgICAgIGluaGVyaXRlZFN0eWxlcy0+cHVz
aE9iamVjdChwYXJlbnRTdHlsZS5yZWxlYXNlKCkpOworICAgICAgICBwYXJlbnRFbGVtZW50ID0g
cGFyZW50RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIH0KKyAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJpbmhlcml0ZWQiLCBpbmhlcml0ZWRTdHlsZXMucmVsZWFzZSgpKTsKKworICAg
ICpyZXN1bHQgPSByZXN1bHRPYmplY3QucmVsZWFzZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpnZXRJbmxpbmVTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiBzdHlsZSkKQEAgLTIxNCw0MiArMjQ3LDExIEBAIHZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3Bl
Y3RvclZhCiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBET01XaW5k
b3cqIGRlZmF1bHRWaWV3ID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5kZWZhdWx0Vmlldygp
OwotICAgIGlmICghZGVmYXVsdFZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxD
U1NTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXctPmdldENvbXB1
dGVkU3R5bGUoZWxlbWVudCwgIiIpOwotICAgIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5
PiBwcm9wZXJ0aWVzOwotICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUg
PSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKCksIGNvbXB1dGVkU3R5bGUu
Z2V0KCksIDApOworICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1
dGVkU3R5bGVJbmZvID0gY29tcHV0ZWRTdHlsZShlbGVtZW50LCB0cnVlKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJ
bnNwZWN0b3JDU1NJZCgpLCBjb21wdXRlZFN0eWxlSW5mby5nZXQoKSwgMCk7CiAgICAgKnN0eWxl
ID0gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlKQotewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBl
bGVtZW50Rm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgKnN0eWxl
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5oZXJpdGVkU3R5bGVzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwotICAgIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRF
bGVtZW50KCk7Ci0gICAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHsKLSAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyZW50U3R5bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgICAgICBpZiAocGFyZW50RWxlbWVudC0+c3R5bGUoKSAmJiBwYXJlbnRFbGVtZW50LT5zdHls
ZSgpLT5sZW5ndGgoKSkgewotICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlKiBzdHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KGVsZW1lbnQpOwotICAg
ICAgICAgICAgaWYgKHN0eWxlU2hlZXQpCi0gICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNl
dE9iamVjdCgiaW5saW5lU3R5bGUiLCBzdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKHN0
eWxlU2hlZXQtPnN0eWxlRm9ySWQoSW5zcGVjdG9yQ1NTSWQ6OmNyZWF0ZUZyb21QYXJ0cyhzdHls
ZVNoZWV0LT5pZCgpLCAiMCIpKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ1NTU3R5bGVTZWxl
Y3RvciogcGFyZW50U2VsZWN0b3IgPSBwYXJlbnRFbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0
eWxlU2VsZWN0b3IoKTsKLSAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBwYXJlbnRNYXRjaGVk
UnVsZXMgPSBwYXJlbnRTZWxlY3Rvci0+c3R5bGVSdWxlc0ZvckVsZW1lbnQocGFyZW50RWxlbWVu
dCwgZmFsc2UsIHRydWUpOwotICAgICAgICBwYXJlbnRTdHlsZS0+c2V0QXJyYXkoIm1hdGNoZWRD
U1NSdWxlcyIsIGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChwYXJlbnRNYXRjaGVkUnVsZXMuZ2V0KCkp
KTsKLSAgICAgICAgaW5oZXJpdGVkU3R5bGVzLT5wdXNoT2JqZWN0KHBhcmVudFN0eWxlLnJlbGVh
c2UoKSk7Ci0gICAgICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCk7Ci0gICAgfQotICAgICpzdHlsZSA9IGluaGVyaXRlZFN0eWxlcy5yZWxlYXNlKCk7Ci19
Ci0KIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlczIoUmVmUHRyPEluc3BlY3Rv
ckFycmF5Piogc3R5bGVzKQogewogICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVu
dD4gPiYgZG9jdW1lbnRzID0gbV9kb21BZ2VudC0+ZG9jdW1lbnRzKCk7CkBAIC0zMzUsOCArMzM3
LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1bGUyKGNvbnN0IGxvbmcgY29udGV4
dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvCiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0
KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gdmlhSW5zcGVjdG9yU3R5bGVTaGVldChub2RlLT5kb2N1
bWVudCgpLCB0cnVlKTsKICAgICBDU1NTdHlsZVJ1bGUqIG5ld1J1bGUgPSBpbnNwZWN0b3JTdHls
ZVNoZWV0LT5hZGRSdWxlKHNlbGVjdG9yKTsKLSAgICBpZiAobmV3UnVsZSkKLSAgICAgICAgKnJl
c3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShuZXdSdWxlKTsK
KyAgICBpZiAoIW5ld1J1bGUpCisgICAgICAgIHJldHVybjsKKworICAgICpyZXN1bHQgPSBpbnNw
ZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUobmV3UnVsZSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiogY3NzUHJvcGVydGllcykKQEAgLTM0OCw2ICszNTIsMjYgQEAgdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBjc3NQcm8KICAgICAqY3NzUHJvcGVydGllcyA9IHByb3BlcnRpZXMucmVsZWFzZSgp
OwogfQogCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpxdWVyeVNlbGVjdG9yQWxsKGNvbnN0IGxv
bmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiByZXN1bHQpCit7CisgICAgTm9kZSogbm9kZSA9IG1fZG9tQWdlbnQtPm5vZGVGb3JJZChub2Rl
SWQpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbm9kZS0+aXNE
b2N1bWVudE5vZGUoKSkKKyAgICAgICAgbm9kZSA9IG5vZGUtPm93bmVyRG9jdW1lbnQoKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBSZWZQdHI8Tm9kZUxpc3Q+IG5vZGVzID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihub2Rl
KS0+cXVlcnlTZWxlY3RvckFsbChzZWxlY3RvciwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAg
cmV0dXJuOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy0+bGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICBOb2RlKiBhZmZlY3RlZE5vZGUgPSBub2Rlcy0+aXRlbShpKTsKKyAgICAg
ICAgbG9uZyBpZCA9IG1fZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoYWZmZWN0ZWRO
b2RlKTsKKyAgICAgICAgKCpyZXN1bHQpLT5wdXNoTnVtYmVyKGlkKTsKKyAgICB9Cit9CisKIC8v
IHN0YXRpYwogRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmlubGluZVN0eWxlRWxlbWVudChD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5oCmluZGV4IDM0MWQwOWEuLjcxY2E1ODAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuaApAQCAtNDksMjYgKzQ5LDIwIEBAIGNsYXNzIE5vZGU7CiAKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogCi1jbGFzcyBJbnNwZWN0b3JDU1NBZ2VudCA6IHB1YmxpYyBSZWZDb3VudGVk
PEluc3BlY3RvckNTU0FnZW50PiwgcHVibGljIEluc3BlY3RvckRPTUFnZW50OjpET01MaXN0ZW5l
ciB7CitjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JET01BZ2VudDo6
RE9NTGlzdGVuZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckNT
U0FnZW50PiBjcmVhdGUoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50LCBJbnNwZWN0b3JGcm9u
dGVuZCogZnJvbnRlbmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3Bl
Y3RvckNTU0FnZW50KGRvbUFnZW50LCBmcm9udGVuZCkpOwotICAgIH0KLQogICAgIHN0YXRpYyBD
U1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KFN0eWxlQmFzZSopOwogICAgIHN0YXRpYyBD
U1NTdHlsZVJ1bGUqIGFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFzZSopOwogCi0gICAgSW5zcGVjdG9y
Q1NTQWdlbnQoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCog
ZnJvbnRlbmQpOworICAgIEluc3BlY3RvckNTU0FnZW50KCk7CiAgICAgfkluc3BlY3RvckNTU0Fn
ZW50KCk7CiAKKyAgICB2b2lkIHNldERPTUFnZW50KEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2Vu
dCk7CisKICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCBnZXRNYXRjaGVkUnVsZXNGb3JOb2Rl
Mihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcnVsZXMpOwotICAgIHZvaWQg
Z2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIHJ1bGVzKTsKLSAgICB2b2lkIGdldEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyKGxv
bmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZXMpOworICAgIHZvaWQgZ2V0
U3R5bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3Vs
dCk7CiAgICAgdm9pZCBnZXRJbmxpbmVTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSk7CiAgICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9k
ZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlKTsKLSAgICB2b2lk
IGdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiByZXN1bHQpOwogICAgIHZvaWQgZ2V0QWxsU3R5bGVzMihSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBzdHlsZXMpOwogICAgIHZvaWQgZ2V0U3R5bGVTaGVldDIoY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBz
ZXRTdHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCk7CkBAIC03Nyw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJ1bGVTZWxl
Y3RvcjIoY29uc3QgU3RyaW5nJiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBhZGRSdWxlMihjb25zdCBsb25n
IGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCk7CisgICAgdm9pZCBxdWVyeVNlbGVjdG9yQWxsKGNv
bnN0IGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiByZXN1bHQpOwogCiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0OwpA
QCAtMTAxLDggKzk2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlRG9j
dW1lbnQoRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2Rl
Kik7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7Ci0gICAgSW5z
cGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CisgICAgSW5zcGVjdG9yRE9NQWdlbnQqIG1fZG9t
QWdlbnQ7CiAKICAgICBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldCBtX2lkVG9JbnNwZWN0b3JTdHls
ZVNoZWV0OwogICAgIENTU1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQgbV9jc3NTdHls
ZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAppbmRleCA1YTRhYmMwLi40Y2QxNDc3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIklu
amVjdGVkU2NyaXB0SG9zdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNT
U0FnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTU3RvcmUuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgpAQCAtMTQxLDYg
KzE0Miw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSog
cGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2luc3BlY3RlZFBhZ2UocGFn
ZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNl
KQorICAgICwgbV9jc3NBZ2VudChuZXcgSW5zcGVjdG9yQ1NTQWdlbnQoKSkKICAgICAsIG1fY3Nz
U3RvcmUobmV3IEluc3BlY3RvckNTU1N0b3JlKHRoaXMpKQogICAgICwgbV9tYWluUmVzb3VyY2VJ
ZGVudGlmaWVyKDApCiAgICAgLCBtX2xvYWRFdmVudFRpbWUoLTEuMCkKQEAgLTQ4Myw2ICs0ODUs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCgpCiAgICAgbV9k
b21BZ2VudCA9IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9jc3NTdG9yZS5nZXQoKSwgbV9m
cm9udGVuZC5nZXQoKSk7CiAgICAgbV9yZXNvdXJjZUFnZW50ID0gSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZSwgbV9mcm9udGVuZC5nZXQoKSk7CiAKKyAgICBt
X2Nzc0FnZW50LT5zZXRET01BZ2VudChtX2RvbUFnZW50LmdldCgpKTsKKwogI2lmIEVOQUJMRShE
QVRBQkFTRSkKICAgICBtX3N0b3JhZ2VBZ2VudCA9IEluc3BlY3RvclN0b3JhZ2VBZ2VudDo6Y3Jl
YXRlKG1fZnJvbnRlbmQuZ2V0KCkpOwogI2VuZGlmCkBAIC01OTAsNiArNTk0LDkgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpCiB7CiAg
ICAgbV9yZXNvdXJjZUFnZW50LmNsZWFyKCk7CiAKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBpbnZv
a2VkIHByaW9yIHRvIG1fZG9tQWdlbnQgZGVzdHJ1Y3Rpb24uCisgICAgbV9jc3NBZ2VudC0+c2V0
RE9NQWdlbnQoMCk7CisKICAgICAvLyBtX2RvbUFnZW50IGlzIFJlZlB0ci4gUmVtb3ZlIERPTSBs
aXN0ZW5lcnMgZmlyc3QgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlCiAgICAgLy8gbm8gcmVmZXJl
bmNlcyB0byB0aGUgRE9NIGFnZW50IGZyb20gdGhlIERPTSB0cmVlLgogICAgIGlmIChtX2RvbUFn
ZW50KQpAQCAtNzQ0LDYgKzc1MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29t
bWl0TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgICAgICBpZiAobV9mcm9udGVuZCkg
ewogICAgICAgICAgICAgbV9mcm9udGVuZC0+cmVzZXQoKTsKICAgICAgICAgICAgIG1fZG9tQWdl
bnQtPnJlc2V0KCk7CisgICAgICAgICAgICBtX2Nzc0FnZW50LT5yZXNldCgpOwogICAgICAgICB9
CiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgICAgIG1fd29ya2Vycy5jbGVhcigpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGFiNzI4YTEuLmU3NzdkZTUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTU4LDYgKzU4LDcgQEAg
Y2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogY2xhc3MgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBJ
bnNwZWN0b3JDU1NBZ2VudDsKIGNsYXNzIEluc3BlY3RvckNTU1N0b3JlOwogY2xhc3MgSW5zcGVj
dG9yRE9NQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U7CkBAIC0yOTAs
NiArMjkxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBl
bmFibGVkLCBib29sKiBuZXdTdGF0ZSk7CiAKICAgICB2b2lkIHNldE1vbml0b3JpbmdYSFJFbmFi
bGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOworICAgIEluc3BlY3RvckNTU0FnZW50
KiBjc3NBZ2VudCgpIHsgcmV0dXJuIG1fY3NzQWdlbnQuZ2V0KCk7IH0KICAgICBJbnNwZWN0b3JE
T01BZ2VudCogZG9tQWdlbnQoKSB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CiAgICAgdm9p
ZCByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwogCkBAIC0zMzIsNiArMzM0LDcgQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ7CiAgICAgYm9vbCBtX29wZW5pbmdGcm9udGVuZDsKICAgICBPd25QdHI8
SW5zcGVjdG9yRnJvbnRlbmQ+IG1fZnJvbnRlbmQ7CisgICAgT3duUHRyPEluc3BlY3RvckNTU0Fn
ZW50PiBtX2Nzc0FnZW50OwogICAgIFJlZlB0cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2Vu
dDsKICAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBtX3N0b3JhZ2VBZ2VudDsKICAg
ICBPd25QdHI8SW5zcGVjdG9yQ1NTU3RvcmU+IG1fY3NzU3RvcmU7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggY2ZiNTVmYy4uNzdhNTY5MyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTUzMiwxNSArMTUzMiw2IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBz
ZWxlY3RlZE5vZGVJZCwgUmVmCiAgICAgKnJ1bGVPYmplY3QgPSBidWlsZE9iamVjdEZvclJ1bGUo
bm9kZS0+b3duZXJEb2N1bWVudCgpLCBuZXdSdWxlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBj
c3NQcm9wZXJ0aWVzKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNT
U1Byb3BlcnRpZXM7ICsraSkKLSAgICAgICAgcHJvcGVydGllcy0+cHVzaFN0cmluZyhwcm9wZXJ0
eU5hbWVTdHJpbmdzW2ldKTsKLQotICAgICpjc3NQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5yZWxl
YXNlKCk7Ci19Ci0KIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgYm9vbCBi
aW5kKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA2
YzVmZDRiLi44NGNhMDI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAg
LTEzNyw3ICsxMzcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdG9nZ2xl
U3R5bGVFbmFibGVkKGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJv
b2wgZGlzYWJsZWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlT2JqZWN0KTsKICAgICAg
ICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IobG9uZyBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJ1bGVPYmpl
Y3QsIGJvb2wqIHNlbGVjdG9yQWZmZWN0c05vZGUpOwogICAgICAgICB2b2lkIGFkZFJ1bGUoY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiogcnVsZU9iamVjdCwgYm9vbCogc2VsZWN0b3JBZmZlY3RzTm9kZSk7Ci0gICAgICAg
IHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBj
c3NQcm9wZXJ0aWVzKTsKIAogICAgICAgICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBJbnNw
ZWN0b3JDb250cm9sbGVyLgogICAgICAgICB2b2lkIHNldERvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IGRj
MmE0N2EuLmVmMjA2NzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFBh
cnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgpA
QCAtMTIwLDYgKzEyMSwxMiBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9y
U3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOwogfQogCisvLyBUaGlzIG1ldGhvZCBkb2VzIHRoZSBmb2xsb3dpbmcgcHJlcHJvY2Vz
c2luZyBvZiB8cHJvcGVydHlUZXh0fCB3aXRoIHxvdmVyd3JpdGV8ID09IGZhbHNlIGFuZCB8aW5k
ZXh8IHBhc3QgdGhlIGxhc3QgYWN0aXZlIHByb3BlcnR5OgorLy8gLSBJZiB0aGUgbGFzdCBwcm9w
ZXJ0eSAoaWYgcHJlc2VudCkgaGFzIG5vIHN1YnNlcXVlbnQgd2hpdGVzcGFjZSBpbiB0aGUgc3R5
bGUgZGVjbGFyYXRpb24sIGEgc3BhY2UgaXMgcHJlcGVuZGVkIHRvIHxwcm9wZXJ0eVRleHR8Lgor
Ly8gLSBJZiB0aGUgbGFzdCBwcm9wZXJ0eSAoaWYgcHJlc2VudCkgaGFzIG5vIGNsb3NpbmcgIjsi
LCB0aGUgIjsiIGlzIHByZXBlbmRlZCB0byB0aGUgY3VycmVudCB8cHJvcGVydHlUZXh0fCB2YWx1
ZS4KKy8vCisvLyBUaGUgcHJvcGVydHlUZXh0IChpZiBub3QgZW1wdHkpIGlzIGNoZWNrZWQgdG8g
YmUgYSB2YWxpZCBzdHlsZSBkZWNsYXJhdGlvbiAoY29udGFpbmluZyBhdCBsZWFzdCBvbmUgcHJv
cGVydHkpLiBJZiBub3QsCisvLyB0aGUgbWV0aG9kIHJldHVybnMgZmFsc2UgKGRlbm90aW5nIGFu
IGVycm9yKS4KIGJvb2wgSW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCh1bnNpZ25lZCBp
bmRleCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVRleHQsIGJvb2wgb3ZlcndyaXRlKQogewogICAg
IEFTU0VSVChtX3BhcmVudFN0eWxlU2hlZXQpOwpAQCAtMTMyLDYgKzEzOSwxNiBAQCBib29sIElu
c3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQodW5zaWduZWQgaW5kZXgsIGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlUZXh0LAogICAgIHVuc2lnbmVkIHByb3BlcnR5U3RhcnQgPSAwOyAvLyBOZWVk
IHRvIGluaXRpYWxpemUgdG8gbWFrZSB0aGUgY29tcGlsZXIgaGFwcHkuCiAgICAgbG9uZyBwcm9w
ZXJ0eUxlbmd0aERlbHRhOwogCisgICAgaWYgKHByb3BlcnR5VGV4dC5zdHJpcFdoaXRlU3BhY2Uo
KS5sZW5ndGgoKSkgeworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IHRlbXBNdXRhYmxlU3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7
CisgICAgICAgIHRlbXBNdXRhYmxlU3R5bGUtPnBhcnNlRGVjbGFyYXRpb24ocHJvcGVydHlUZXh0
KTsKKyAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogdGVtcFN0eWxlID0gc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVEZWNsYXJhdGlvbio+KHRlbXBNdXRhYmxlU3R5bGUuZ2V0KCkpOworCisgICAgICAg
IC8vIEJhaWwgb3V0IGVhcmx5IGlmIHRoZSBwcm9wZXJ0eSB0ZXh0IGRpZCBub3QgcGFyc2UuCisg
ICAgICAgIGlmICghdGVtcFN0eWxlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKICAgICBpZiAob3ZlcndyaXRlKSB7CiAgICAgICAgIEFTU0VSVChpbmRleCA8
IGFsbFByb3BlcnRpZXMuc2l6ZSgpKTsKICAgICAgICAgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSYg
cHJvcGVydHkgPSBhbGxQcm9wZXJ0aWVzLmF0KGluZGV4KTsKQEAgLTE0NiwxMSArMTYzLDE3IEBA
IGJvb2wgSW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRleCwgY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eVRleHQsCiAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cHJvcGVydHkucmF3VGV4dCA9IHByb3BlcnR5VGV4dDsKLSAgICAgICAgICAgIGlmICghcHJvcGVy
dHlUZXh0Lmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5hYmxl
UHJvcGVydHkoaW5kZXgsIGFsbFByb3BlcnRpZXMpOwotICAgICAgICAgICAgICAgIHJldHVybiBz
dWNjZXNzOworICAgICAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IHByb3BlcnR5VGV4dC5s
ZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICghdGV4dExlbmd0aCkgeworICAgICAgICAgICAgICAg
IC8vIERlbGV0ZSBkaXNhYmxlZCBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICBtX2Rpc2FibGVk
UHJvcGVydGllcy5yZW1vdmUoZGlzYWJsZWRJbmRleEJ5T3JkaW5hbChpbmRleCwgZmFsc2UsIGFs
bFByb3BlcnRpZXMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gUGF0Y2ggZGlzYWJsZWQgcHJvcGVydHkgdGV4dCBhbmQgcmFu
Z2UuCisgICAgICAgICAgICBwcm9wZXJ0eS5yYXdUZXh0ID0gcHJvcGVydHlUZXh0OworICAgICAg
ICAgICAgaWYgKHByb3BlcnR5LnNvdXJjZURhdGEucmFuZ2UuZW5kKQorICAgICAgICAgICAgICAg
IHByb3BlcnR5LnNvdXJjZURhdGEucmFuZ2UuZW5kID0gcHJvcGVydHkuc291cmNlRGF0YS5yYW5n
ZS5zdGFydCArIHRleHRMZW5ndGg7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAv
LyBJbnNlcnQgYXQgaW5kZXguCkBAIC0xNzIsMTAgKzE5NSwyOCBAQCBib29sIEluc3BlY3RvclN0
eWxlOjpzZXRQcm9wZXJ0eVRleHQodW5zaWduZWQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlUZXh0LAogICAgICAgICAgICAgICAgIGluc2VydExhc3QgPSBmYWxzZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICBpZiAoaW5zZXJ0TGFzdCkKLSAgICAgICAgICAgIHByb3Bl
cnR5U3RhcnQgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVu
ZDsKIAotICAgICAgICB0ZXh0Lmluc2VydChwcm9wZXJ0eVRleHQsIHByb3BlcnR5U3RhcnQpOwor
ICAgICAgICBTdHJpbmcgdGV4dFRvU2V0ID0gcHJvcGVydHlUZXh0OworICAgICAgICBpZiAoaW5z
ZXJ0TGFzdCkgeworICAgICAgICAgICAgcHJvcGVydHlTdGFydCA9IHNvdXJjZURhdGEtPnN0eWxl
U291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kIC0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VE
YXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydDsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eVN0YXJ0
ID4gMCAmJiBwcm9wZXJ0eVRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBV
Q2hhciogY2hhcmFjdGVycyA9IHRleHQuY2hhcmFjdGVycygpOworCisgICAgICAgICAgICAgICAg
dW5zaWduZWQgY3VyUG9zID0gcHJvcGVydHlTdGFydCAtIDE7IC8vIFRoZSBsYXN0IHBvc2l0aW9u
IG9mIHN0eWxlIGRlY2xhcmF0aW9uLCBzaW5jZSBwcm9wZXJ0eVN0YXJ0IHBvaW50cyBwYXN0IG9u
ZS4KKyAgICAgICAgICAgICAgICB3aGlsZSAoY3VyUG9zICYmIGlzSFRNTFNwYWNlKGNoYXJhY3Rl
cnNbY3VyUG9zXSkpCisgICAgICAgICAgICAgICAgICAgIC0tY3VyUG9zOworICAgICAgICAgICAg
ICAgIGlmIChjdXJQb3MgJiYgY2hhcmFjdGVyc1tjdXJQb3NdICE9ICc7JykgeworICAgICAgICAg
ICAgICAgICAgICAvLyBQcmVwZW5kIGEgIjsiIHRvIHRoZSBwcm9wZXJ0eSB0ZXh0IGlmIGFwcGVu
ZGluZyB0byBhIHN0eWxlIGRlY2xhcmF0aW9uIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBsYXN0IHByb3BlcnR5IGhhcyBubyB0cmFpbGluZyAiOyIuCisgICAgICAgICAgICAgICAg
ICAgIHRleHRUb1NldC5pbnNlcnQoIjsgIiwgMCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghaXNIVE1MU3BhY2UoY2hhcmFjdGVyc1twcm9wZXJ0eVN0YXJ0IC0gMV0pKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFByZXBlbmQgYSAiICIgaWYgdGhlIGxhc3QgZGVjbGFyYXRpb24gY2hh
cmFjdGVyIGlzIG5vdCBhbiBIVE1MIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICB0ZXh0VG9T
ZXQuaW5zZXJ0KCIgIiwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgdGV4dC5pbnNlcnQodGV4dFRvU2V0LCBwcm9wZXJ0eVN0YXJ0KTsK
ICAgICAgICAgbV9wYXJlbnRTdHlsZVNoZWV0LT5zZXRTdHlsZVRleHQobV9zdHlsZSwgdGV4dCk7
CiAgICAgfQogCkBAIC0yMjgsNyArMjY5LDcgQEAgdW5zaWduZWQgSW5zcGVjdG9yU3R5bGU6OmRp
c2FibGVkSW5kZXhCeU9yZGluYWwodW5zaWduZWQgb3JkaW5hbCwgYm9vbCBjYW5Vc2VTdWIKICAg
ICByZXR1cm4gVUlOVF9NQVg7CiB9CiAKLWJvb2wgSW5zcGVjdG9yU3R5bGU6OnN0eWxlVGV4dChT
dHJpbmcqIHJlc3VsdCkKK2Jvb2wgSW5zcGVjdG9yU3R5bGU6OnN0eWxlVGV4dChTdHJpbmcqIHJl
c3VsdCkgY29uc3QKIHsKICAgICAvLyBQcmVjb25kaXRpb246IG1fcGFyZW50U3R5bGVTaGVldC0+
ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkgaGFzIGJlZW4gY2FsbGVkIHN1Y2Nlc3NmdWxseS4KICAg
ICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBtX3BhcmVudFN0eWxlU2hl
ZXQtPnJ1bGVTb3VyY2VEYXRhRm9yKG1fc3R5bGUpOwpAQCAtMjQ5LDE3ICsyOTAsMTcgQEAgYm9v
bCBJbnNwZWN0b3JTdHlsZTo6ZGlzYWJsZVByb3BlcnR5KHVuc2lnbmVkIGluZGV4VG9EaXNhYmxl
LCBWZWN0b3I8SW5zcGVjdG9yU3QKIHsKICAgICAvLyBQcmVjb25kaXRpb246IHxpbmRleFRvRW5h
YmxlfCBwb2ludHMgdG8gYW4gZW5hYmxlZCBwcm9wZXJ0eS4KICAgICBjb25zdCBJbnNwZWN0b3JT
dHlsZVByb3BlcnR5JiBwcm9wZXJ0eSA9IGFsbFByb3BlcnRpZXMuYXQoaW5kZXhUb0Rpc2FibGUp
OwotICAgIEluc3BlY3RvclN0eWxlUHJvcGVydHkgZGlzYWJsZWRQcm9wZXJ0eShwcm9wZXJ0eSk7
Ci0gICAgZGlzYWJsZWRQcm9wZXJ0eS5kaXNhYmxlZCA9IHRydWU7CiAgICAgdW5zaWduZWQgcHJv
cGVydHlTdGFydCA9IHByb3BlcnR5LnNvdXJjZURhdGEucmFuZ2Uuc3RhcnQ7Ci0gICAgLy8gVGhp
cyBtYXkgaGF2ZSB0byBiZSBuZWdhdGVkIGJlbG93LgotICAgIGxvbmcgcHJvcGVydHlMZW5ndGgg
PSBwcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLmVuZCAtIHByb3BlcnR5U3RhcnQ7Ci0gICAgZGlz
YWJsZWRQcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdlLmVuZCA9IHByb3BlcnR5U3RhcnQ7CisgICAg
SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSBkaXNhYmxlZFByb3BlcnR5KHByb3BlcnR5KTsKICAgICBT
dHJpbmcgb2xkU3R5bGVUZXh0OwogICAgIGJvb2wgc3VjY2VzcyA9IHN0eWxlVGV4dCgmb2xkU3R5
bGVUZXh0KTsKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBk
aXNhYmxlZFByb3BlcnR5LnJhd1RleHQgPSBvbGRTdHlsZVRleHQuc3Vic3RyaW5nKHByb3BlcnR5
U3RhcnQsIHByb3BlcnR5TGVuZ3RoKTsKKyAgICBkaXNhYmxlZFByb3BlcnR5LnNldFJhd1RleHRG
cm9tU3R5bGVEZWNsYXJhdGlvbihvbGRTdHlsZVRleHQpOworICAgIGRpc2FibGVkUHJvcGVydHku
ZGlzYWJsZWQgPSB0cnVlOworICAgIGRpc2FibGVkUHJvcGVydHkuc291cmNlRGF0YS5yYW5nZS5l
bmQgPSBwcm9wZXJ0eVN0YXJ0OworICAgIC8vIFRoaXMgbWF5IGhhdmUgdG8gYmUgbmVnYXRlZCBi
ZWxvdy4KKyAgICBsb25nIHByb3BlcnR5TGVuZ3RoID0gcHJvcGVydHkuc291cmNlRGF0YS5yYW5n
ZS5lbmQgLSBwcm9wZXJ0eVN0YXJ0OwogICAgIHN1Y2Nlc3MgPSByZXBsYWNlUHJvcGVydHlJblN0
eWxlVGV4dChwcm9wZXJ0eSwgIiIpOwogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMzAzLDEzICszNDQsMTggQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6cG9wdWxh
dGVBbGxQcm9wZXJ0aWVzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWwKICAg
ICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSAobV9wYXJlbnRTdHlsZVNo
ZWV0ICYmIG1fcGFyZW50U3R5bGVTaGVldC0+ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpID8gbV9w
YXJlbnRTdHlsZVNoZWV0LT5ydWxlU291cmNlRGF0YUZvcihtX3N0eWxlKSA6IDA7CiAgICAgVmVj
dG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4qIHNvdXJjZVByb3BlcnR5RGF0YSA9IHNvdXJjZURh
dGEgPyAmKHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhKSA6IDA7CiAg
ICAgaWYgKHNvdXJjZVByb3BlcnR5RGF0YSkgeworICAgICAgICBTdHJpbmcgc3R5bGVEZWNsYXJh
dGlvbjsKKyAgICAgICAgYm9vbCBpc1N0eWxlVGV4dEtub3duID0gc3R5bGVUZXh0KCZzdHlsZURl
Y2xhcmF0aW9uKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpc1N0eWxlVGV4dEtub3duLCBpc1N0
eWxlVGV4dEtub3duKTsKICAgICAgICAgZm9yIChWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRh
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzb3VyY2VQcm9wZXJ0eURhdGEtPmJlZ2luKCk7IGl0ICE9
IHNvdXJjZVByb3BlcnR5RGF0YS0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIHdoaWxlIChk
aXNhYmxlZEluZGV4IDwgZGlzYWJsZWRMZW5ndGggJiYgZGlzYWJsZWRQcm9wZXJ0eS5zb3VyY2VE
YXRhLnJhbmdlLnN0YXJ0IDw9IGl0LT5yYW5nZS5zdGFydCkgewogICAgICAgICAgICAgICAgIHJl
c3VsdC0+YXBwZW5kKGRpc2FibGVkUHJvcGVydHkpOwogICAgICAgICAgICAgICAgIGlmICgrK2Rp
c2FibGVkSW5kZXggPCBkaXNhYmxlZExlbmd0aCkKICAgICAgICAgICAgICAgICAgICAgZGlzYWJs
ZWRQcm9wZXJ0eSA9IG1fZGlzYWJsZWRQcm9wZXJ0aWVzLmF0KGRpc2FibGVkSW5kZXgpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoSW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eSgqaXQsIHRydWUsIGZhbHNlKSk7CisgICAgICAgICAgICBJbnNwZWN0b3JTdHlsZVByb3Bl
cnR5IHAoKml0LCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBwLnNldFJhd1RleHRGcm9tU3R5
bGVEZWNsYXJhdGlvbihzdHlsZURlY2xhcmF0aW9uKTsKKyAgICAgICAgICAgIHJlc3VsdC0+YXBw
ZW5kKHApOwogICAgICAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQoaXQtPm5hbWUpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMzQ5LDEwICszOTUsMTIgQEAgdm9pZCBJbnNwZWN0b3JTdHls
ZTo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKEluc3BlY3Rvck9iamVjdCogcmVz
dWx0KQogICAgICAgICBwcm9wZXJ0aWVzT2JqZWN0LT5wdXNoT2JqZWN0KHByb3BlcnR5KTsKICAg
ICAgICAgcHJvcGVydHktPnNldFN0cmluZygic3RhdHVzIiwgaXQtPmRpc2FibGVkID8gImRpc2Fi
bGVkIiA6ICJhY3RpdmUiKTsKICAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oInBhcnNlZE9r
IiwgcHJvcGVydHlFbnRyeS5wYXJzZWRPayk7CisgICAgICAgIGlmIChpdC0+aGFzUmF3VGV4dCgp
KQorICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidGV4dCIsIGl0LT5yYXdUZXh0KTsK
KyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygibmFtZSIsIG5hbWUpOworICAgICAgICBwcm9w
ZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3BlcnR5RW50cnkudmFsdWUpOworICAgICAgICBw
cm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHByb3BlcnR5RW50cnkuaW1wb3J0YW50ID8g
ImltcG9ydGFudCIgOiAiIik7CiAgICAgICAgIGlmICghaXQtPmRpc2FibGVkKSB7Ci0gICAgICAg
ICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7Ci0gICAgICAgICAgICBwcm9w
ZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3BlcnR5RW50cnkudmFsdWUpOwotICAgICAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBwcm9wZXJ0eUVudHJ5LmltcG9ydGFu
dCA/ICJpbXBvcnRhbnQiIDogIiIpOwogICAgICAgICAgICAgaWYgKGl0LT5oYXNTb3VyY2UpIHsK
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxzZSk7
CiAgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigic3RhcnRPZmZzZXQiLCBwcm9w
ZXJ0eUVudHJ5LnJhbmdlLnN0YXJ0KTsKQEAgLTM2OCw4ICs0MTYsNyBAQCB2b2lkIEluc3BlY3Rv
clN0eWxlOjpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoSW5zcGVjdG9yT2JqZWN0
KiByZXN1bHQpCiAgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oImltcGxpY2l0
IiwgbV9zdHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KG5hbWUpKTsKICAgICAgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCAic3R5bGUiKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ0ZXh0IiwgaXQt
PnJhd1RleHQpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKHByb3BlcnR5RW50cnkucGFyc2Vk
T2spIHsKICAgICAgICAgICAgIC8vIEJvdGggZm9yIHN0eWxlLW9yaWdpbmF0ZWQgYW5kIHBhcnNl
ZCBzb3VyY2UgcHJvcGVydGllcy4KQEAgLTU5Miw3ICs2MzksOSBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0
eWxlUnVsZQogCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3JUZXh0Iiwg
cnVsZS0+c2VsZWN0b3JUZXh0KCkpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2VVUkwi
LCAhc3R5bGVTaGVldC0+aHJlZigpLmlzRW1wdHkoKSA/IHN0eWxlU2hlZXQtPmhyZWYoKSA6IG1f
ZG9jdW1lbnRVUkwpOworICAgIC8vICJzb3VyY2VVUkwiIGlzIHByZXNlbnQgb25seSBmb3IgcmVn
dWxhciBydWxlcywgb3RoZXJ3aXNlICJvcmlnaW4iIHNob3VsZCBiZSB1c2VkIGluIHRoZSBmcm9u
dGVuZC4KKyAgICBpZiAoIW1fb3JpZ2luLmxlbmd0aCgpKQorICAgICAgICByZXN1bHQtPnNldFN0
cmluZygic291cmNlVVJMIiwgIXN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkgPyBzdHlsZVNo
ZWV0LT5ocmVmKCkgOiBtX2RvY3VtZW50VVJMKTsKICAgICByZXN1bHQtPnNldE51bWJlcigic291
cmNlTGluZSIsIHJ1bGUtPnNvdXJjZUxpbmUoKSk7CiAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm9y
aWdpbiIsIG1fb3JpZ2luKTsKIApAQCAtNjAwLDYgKzY0OSwxNiBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0
eWxlUnVsZQogICAgIGlmIChjYW5CaW5kKCkpCiAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJy
dWxlSWQiLCBydWxlSWQocnVsZSkuYXNTdHJpbmcoKSk7CiAKKyAgICBSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IHNvdXJjZURhdGE7CisgICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQor
ICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IocnVsZS0+c3R5bGUoKSk7Cisg
ICAgaWYgKHNvdXJjZURhdGEpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2Vs
ZWN0b3JSYW5nZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHNlbGVjdG9y
UmFuZ2UtPnNldE51bWJlcigic3RhcnQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5z
dGFydCk7CisgICAgICAgIHNlbGVjdG9yUmFuZ2UtPnNldE51bWJlcigiZW5kIiwgc291cmNlRGF0
YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kKTsKKyAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNl
bGVjdG9yUmFuZ2UiLCBzZWxlY3RvclJhbmdlLnJlbGVhc2UoKSk7CisgICAgfQorCiAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTY5MSw2ICs3NTAsNTEgQEAgSW5zcGVjdG9y
Q1NTSWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZU9yU3R5bGVJZChDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSkgY28KICAgICByZXR1cm4gSW5zcGVjdG9yQ1NTSWQoKTsKIH0KIAordm9pZCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKENTU1J1bGVTb3Vy
Y2VEYXRhKiBydWxlRGF0YSwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0VGV4dCkKK3sKKyAgICBW
ZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYgcHJvcGVydHlEYXRhID0gcnVsZURhdGEtPnN0
eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhOworICAgIHVuc2lnbmVkIHNpemUgPSBwcm9wZXJ0
eURhdGEuc2l6ZSgpOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgc3R5bGVTdGFydCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJh
bmdlLnN0YXJ0OworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3R5bGVTaGVldFRleHQu
Y2hhcmFjdGVycygpOworICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogbmV4dERhdGEgPSAmKHBy
b3BlcnR5RGF0YS5hdCgwKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEqIGN1cnJlbnREYXRhID0gbmV4dERh
dGE7CisgICAgICAgIG5leHREYXRhID0gaSA8IHNpemUgLSAxID8gJihwcm9wZXJ0eURhdGEuYXQo
aSArIDEpKSA6IDA7CisKKyAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5wYXJzZWRPaykKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdlLmVuZCA+IDAg
JiYgY2hhcmFjdGVyc1tzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLmVuZCAtIDFdID09
ICc7JykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5
RW5kSW5TdHlsZVNoZWV0OworICAgICAgICBpZiAoIW5leHREYXRhKQorICAgICAgICAgICAgcHJv
cGVydHlFbmRJblN0eWxlU2hlZXQgPSBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJv
ZHlSYW5nZS5lbmQgLSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm9wZXJ0eUVuZElu
U3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBuZXh0RGF0YS0+cmFuZ2Uuc3RhcnQgLSAxOworCisg
ICAgICAgIHdoaWxlIChpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHlsZVNo
ZWV0XSkpCisgICAgICAgICAgICAtLXByb3BlcnR5RW5kSW5TdHlsZVNoZWV0OworCisgICAgICAg
IC8vIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IHBvaW50cyBhdCB0aGUgbGFzdCBwcm9wZXJ0eSB0
ZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgdW5zaWduZWQgbmV3UHJvcGVydHlFbmQgPSBwcm9wZXJ0
eUVuZEluU3R5bGVTaGVldCAtIHN0eWxlU3RhcnQgKyAxOyAvLyBFeGNsdXNpdmUgb2YgdGhlIGxh
c3QgcHJvcGVydHkgdGV4dCBjaGFyYWN0ZXIuCisgICAgICAgIGlmIChjdXJyZW50RGF0YS0+cmFu
Z2UuZW5kICE9IG5ld1Byb3BlcnR5RW5kKSB7CisgICAgICAgICAgICBjdXJyZW50RGF0YS0+cmFu
Z2UuZW5kID0gbmV3UHJvcGVydHlFbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZVN0YXJ0
SW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIGN1cnJlbnREYXRhLT5yYW5nZS5zdGFydCArIGN1
cnJlbnREYXRhLT5uYW1lLmxlbmd0aCgpOworICAgICAgICAgICAgd2hpbGUgKHZhbHVlU3RhcnRJ
blN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAmJiBjaGFyYWN0ZXJzW3ZhbHVl
U3RhcnRJblN0eWxlU2hlZXRdICE9ICc6JykKKyAgICAgICAgICAgICAgICArK3ZhbHVlU3RhcnRJ
blN0eWxlU2hlZXQ7CisgICAgICAgICAgICBpZiAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHBy
b3BlcnR5RW5kSW5TdHlsZVNoZWV0KQorICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5
bGVTaGVldDsgLy8gU2hpZnQgcGFzdCB0aGUgJzonLgorICAgICAgICAgICAgd2hpbGUgKHZhbHVl
U3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAmJiBpc0hUTUxTcGFj
ZShjaGFyYWN0ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdKSkKKyAgICAgICAgICAgICAgICAr
K3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7CisgICAgICAgICAgICAvLyBOZWVkIHRvIGV4Y2x1ZGUg
dGhlIHRyYWlsaW5nICc7JyBmcm9tIHRoZSBwcm9wZXJ0eSB2YWx1ZS4KKyAgICAgICAgICAgIGN1
cnJlbnREYXRhLT52YWx1ZSA9IHN0eWxlU2hlZXRUZXh0LnN1YnN0cmluZyh2YWx1ZVN0YXJ0SW5T
dHlsZVNoZWV0LCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAtIHZhbHVlU3RhcnRJblN0eWxlU2hl
ZXQgKyAoY2hhcmFjdGVyc1twcm9wZXJ0eUVuZEluU3R5bGVTaGVldF0gPT0gJzsnID8gMCA6IDEp
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogRG9jdW1lbnQqIEluc3BlY3RvclN0eWxlU2hlZXQ6
Om93bmVyRG9jdW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiBtX3BhZ2VTdHlsZVNoZWV0LT5k
b2N1bWVudCgpOwpAQCAtNzYzLDggKzg2NywxMCBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6
OmVuc3VyZVNvdXJjZURhdGEoTm9kZSogb3duZXJOb2RlKQogICAgICAgICBpZiAoIXJ1bGUpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgU3R5bGVSdWxlUmFuZ2VNYXA6Oml0ZXJhdG9y
IGl0ID0gcnVsZVJhbmdlTWFwLmZpbmQocnVsZSk7Ci0gICAgICAgIGlmIChpdCAhPSBydWxlUmFu
Z2VNYXAuZW5kKCkpCisgICAgICAgIGlmIChpdCAhPSBydWxlUmFuZ2VNYXAuZW5kKCkpIHsKKyAg
ICAgICAgICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoaXQtPnNlY29uZC5nZXQoKSwgbV9w
YXJzZWRTdHlsZVNoZWV0LT50ZXh0KCkpOwogICAgICAgICAgICAgcmFuZ2VzVmVjdG9yLT5hcHBl
bmQoaXQtPnNlY29uZCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBtX3BhcnNlZFN0eWxlU2hl
ZXQtPnNldFNvdXJjZURhdGEocmFuZ2VzVmVjdG9yLnJlbGVhc2UoKSk7CkBAIC05MjYsNiArMTAz
MiwxMiBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6c2V0U3R5bGVU
ZXh0KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLAogICAgIHJldHVybiAhZWM7CiB9CiAKK2Jv
b2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjp0ZXh0KFN0cmluZyogcmVzdWx0
KSBjb25zdAoreworICAgICpyZXN1bHQgPSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZSgic3R5bGUi
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogRG9jdW1lbnQqIEluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZTo6b3duZXJEb2N1bWVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZWxl
bWVudC0+ZG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApp
bmRleCAwNmM0MDkzLi5lNjcxODM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oCkBAIC04Nyw2ICs4NywxNyBAQCBzdHJ1Y3QgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSB7
CiAgICAgewogICAgIH0KIAorICAgIHZvaWQgc2V0UmF3VGV4dEZyb21TdHlsZURlY2xhcmF0aW9u
KGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IHN0YXJ0ID0gc291cmNlRGF0YS5yYW5nZS5zdGFydDsKKyAgICAgICAgdW5zaWduZWQgZW5kID0g
c291cmNlRGF0YS5yYW5nZS5lbmQ7CisgICAgICAgIEFTU0VSVChzdGFydCA8IGVuZCk7CisgICAg
ICAgIEFTU0VSVChlbmQgPD0gc3R5bGVEZWNsYXJhdGlvbi5sZW5ndGgoKSk7CisgICAgICAgIHJh
d1RleHQgPSBzdHlsZURlY2xhcmF0aW9uLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwor
ICAgIH0KKworICAgIGJvb2wgaGFzUmF3VGV4dCgpIGNvbnN0IHsgcmV0dXJuICFyYXdUZXh0Lmlz
RW1wdHkoKTsgfQorCiAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhIHNvdXJjZURhdGE7CiAgICAg
Ym9vbCBoYXNTb3VyY2U7CiAgICAgYm9vbCBkaXNhYmxlZDsKQEAgLTExNyw3ICsxMjgsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBkaXNhYmxlZEluZGV4QnlPcmRp
bmFsKHVuc2lnbmVkIG9yZGluYWwsIGJvb2wgY2FuVXNlU3Vic2VxdWVudCwgVmVjdG9yPEluc3Bl
Y3RvclN0eWxlUHJvcGVydHk+JiBhbGxQcm9wZXJ0aWVzKTsKIAotICAgIGJvb2wgc3R5bGVUZXh0
KFN0cmluZyogcmVzdWx0KTsKKyAgICBib29sIHN0eWxlVGV4dChTdHJpbmcqIHJlc3VsdCkgY29u
c3Q7CiAgICAgYm9vbCBkaXNhYmxlUHJvcGVydHkodW5zaWduZWQgaW5kZXhUb0Rpc2FibGUsIFZl
Y3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiYgYWxsUHJvcGVydGllcyk7CiAgICAgYm9vbCBl
bmFibGVQcm9wZXJ0eSh1bnNpZ25lZCBpbmRleFRvRW5hYmxlLCBWZWN0b3I8SW5zcGVjdG9yU3R5
bGVQcm9wZXJ0eT4mIGFsbFByb3BlcnRpZXMpOwogICAgIGJvb2wgcG9wdWxhdGVBbGxQcm9wZXJ0
aWVzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWx0KSBjb25zdDsKQEAgLTE2
Miw2ICsxNzMsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBjYW5CaW5kKCkgY29u
c3QgeyByZXR1cm4gbV9vcmlnaW4gIT0gInVzZXJBZ2VudCIgJiYgbV9vcmlnaW4gIT0gInVzZXIi
OyB9CiAgICAgSW5zcGVjdG9yQ1NTSWQgcnVsZU9yU3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSkgY29uc3Q7CisgICAgdm9pZCBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKENTU1J1
bGVTb3VyY2VEYXRhKiBydWxlRGF0YSwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0VGV4dCk7Cisg
ICAgdmlydHVhbCBib29sIHRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwg
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFJlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgcnVsZUluZGV4QnlTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKikgY29uc3Q7CkBAIC0xNzQsNyArMTg3LDYgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgYm9vbCBzZXRTdHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0
cmluZyYpOwogCiBwcml2YXRlOgotICAgIGJvb2wgdGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7
CiAgICAgYm9vbCBlbnN1cmVUZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBlbnN1cmVTb3VyY2VEYXRh
KE5vZGUqIG93bmVyTm9kZSk7CiAgICAgYm9vbCBzdHlsZVNoZWV0VGV4dFdpdGhDaGFuZ2VkU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgbmV3U3R5bGVUZXh0LCBTdHJp
bmcqIHJlc3VsdCk7CkBAIC0yMTAsNiArMjIyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNv
bnN0IHsgQVNTRVJUX1VOVVNFRChpZCwgaWQub3JkaW5hbCgpID09ICIwIik7IHJldHVybiBpbmxp
bmVTdHlsZSgpOyB9CiAKIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgdGV4dChTdHJpbmcq
IHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0
YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyBBU1NFUlRfVU5VU0VEKHN0
eWxlLCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7IH0K
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlv
biopIGNvbnN0IHsgcmV0dXJuIDA7IH0K
</data>
<flag name="review"
          id="63135"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73388</attachid>
            <date>2010-11-09 10:26:35 -0800</date>
            <delta_ts>2010-11-09 22:51:47 -0800</delta_ts>
            <desc>[WIP] A patch with WebInspector frontend reimplemented to use InspectorCSSAgent</desc>
            <filename>fecssagent.diff</filename>
            <type>text/plain</type>
            <size>39540</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IGQ2NzlhN2NjNjllOWI4MWZiMjNjYjUwZWI2MWJkZTVhMWVlYjJhZmUKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBUaHUgU2VwIDE2
IDIwOjA0OjA0IDIwMTAgKzA0MDAKCiAgICBXSVAgLSBGcm9udGVuZAoKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy1wYW5lbC1zdHlsZXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzLXBhbmVsLXN0eWxlcy1leHBlY3RlZC50eHQK
aW5kZXggNGRjZWE4NC4uMzJjNmZjZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2VsZW1lbnRzLXBhbmVsLXN0eWxlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2VsZW1lbnRzLXBhbmVsLXN0eWxlcy1leHBlY3RlZC50eHQKQEAgLTI4LDEyICsyOCwx
MiBAQCBkaXNwbGF5OiBub25lOwogW2V4cGFuZGVkXSAuZm9vIHsgKGVsZW1lbnRzLXBhbmVsLXN0
eWxlcy5jc3M6MzMpCiAKIFtleHBhbmRlZF0gLmZvbywgLmZvbzo6YmVmb3JlIHsgKGVsZW1lbnRz
LXBhbmVsLXN0eWxlcy5jc3M6MTUpCitjb250ZW50OiAiW2JlZm9yZSBGb29dIjsKIGNvbG9yOiBi
bHVlOwotY29udGVudDogJ1tiZWZvcmUgRm9vXSc7CiAKIFtleHBhbmRlZF0gLmZvbyB7IChlbGVt
ZW50cy1wYW5lbC1zdHlsZXMuY3NzOjEwKQogLy0tIG92ZXJsb2FkZWQgLS0vIGNvbG9yOiBibGFj
azsKLW1hcmdpbjogMTBweCAwcHggMnB4OworbWFyZ2luOiAxMHB4IDAgMnB4OwogICAgIG1hcmdp
bi10b3A6IDEwcHg7CiAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7CiAgICAgbWFyZ2luLWJvdHRvbTog
MnB4OwpAQCAtNTksMTggKzU5LDE4IEBAIGZvbnQtc2l6ZTogMTRweDsKIGNvbG9yOiByZWQ7CiAK
IFtleHBhbmRlZF0gLmZvbywgLmZvbzo6YmVmb3JlIHsgKGVsZW1lbnRzLXBhbmVsLXN0eWxlcy5j
c3M6MTUpCitjb250ZW50OiAiW2JlZm9yZSBGb29dIjsKIC8tLSBvdmVybG9hZGVkIC0tLyBjb2xv
cjogYmx1ZTsKLWNvbnRlbnQ6ICdbYmVmb3JlIEZvb10nOwogCiAKID09PT09PT09IFBzZXVkbyA6
OmFmdGVyIGVsZW1lbnQgPT09PT09PT0KIFtleHBhbmRlZF0gLmZvbzo6YWZ0ZXIgeyAoZWxlbWVu
dHMtcGFuZWwtc3R5bGVzLmNzczoyOCkKLWNvbnRlbnQ6ICdbYWZ0ZXIgRm9vIDJdJzsKIGZvbnQt
ZmFtaWx5OiBjb3VyaWVyOworY29udGVudDogIlthZnRlciBGb28gMl0iOwogCiBbZXhwYW5kZWRd
IC5mb286OmFmdGVyIHsgKGVsZW1lbnRzLXBhbmVsLXN0eWxlcy5jc3M6MjQpCisvLS0gb3Zlcmxv
YWRlZCAtLS8gY29udGVudDogIlthZnRlciBGb29dIjsKIGNvbG9yOiBncmVlbjsKLS8tLSBvdmVy
bG9hZGVkIC0tLyBjb250ZW50OiAnW2FmdGVyIEZvb10nOwogCiAKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQXVkaXRSdWxlcy5qcwppbmRleCA1MTVjZThlLi5mMmM5YzUzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5qcwpAQCAtMzA5LDggKzMwOSwxMCBA
QCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NSdWxlLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgICAgICAgICAgdmFyIHVudXNlZFJ1bGVzID0gW107CiAgICAgICAgICAgICAgICAg
ICAgIGZvciAodmFyIGN1clJ1bGUgPSAwOyBjdXJSdWxlIDwgc3R5bGVTaGVldC5ydWxlcy5sZW5n
dGg7ICsrY3VyUnVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdHls
ZVNoZWV0LnJ1bGVzW2N1clJ1bGVdOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IHJlcGxhY2UgdGhpcyBieSBhbiBleGFjdCBjb21wdXRhdGlvbiBvbmNlIHNvdXJjZSByYW5nZXMg
YXJlIGF2YWlsYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRMZW5ndGggPSBy
dWxlLnN0eWxlLmNzc1RleHQgPyBydWxlLnN0eWxlLmNzc1RleHQubGVuZ3RoICsgcnVsZS5zZWxl
Y3RvclRleHQubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4YWN0IGNv
bXB1dGF0aW9uIHdoZW5ldmVyIHNvdXJjZSByYW5nZXMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciB0ZXh0TGVuZ3RoID0gKHJ1bGUuc2VsZWN0b3JSYW5nZSAmJiBy
dWxlLnN0eWxlLnByb3BlcnRpZXMuZW5kT2Zmc2V0KSA/IHJ1bGUuc3R5bGUucHJvcGVydGllcy5l
bmRPZmZzZXQgLSBydWxlLnNlbGVjdG9yUmFuZ2Uuc3RhcnQgKyAxIDogMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghdGV4dExlbmd0aCAmJiBydWxlLnN0eWxlLmNzc1RleHQpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dExlbmd0aCA9IHJ1bGUuc3R5bGUuY3NzVGV4dC5s
ZW5ndGggKyBydWxlLnNlbGVjdG9yVGV4dC5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZXNoZWV0U2l6ZSArPSB0ZXh0TGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCF0ZXN0ZWRTZWxlY3RvcnNbcnVsZS5zZWxlY3RvclRleHRdIHx8IGZvdW5kU2VsZWN0b3Jz
W3J1bGUuc2VsZWN0b3JUZXh0XSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTMyNyw3ICszMjksNyBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NS
dWxlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICAgICAgdmFyIHBjdFVudXNlZCA9IE1h
dGgucm91bmQoMTAwICogdW51c2VkU3R5bGVzaGVldFNpemUgLyBzdHlsZXNoZWV0U2l6ZSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghc3VtbWFyeSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHN1bW1hcnkgPSByZXN1bHQuYWRkQ2hpbGQoIiIsIHRydWUpOwotICAgICAgICAgICAgICAgICAg
ICB2YXIgZW50cnkgPSBzdW1tYXJ5LmFkZENoaWxkKFN0cmluZy5zcHJpbnRmKCIlczogJWQlJSAo
ZXN0aW1hdGVkKSBpcyBub3QgdXNlZCBieSB0aGUgY3VycmVudCBwYWdlLiIsIHVybCwgcGN0VW51
c2VkKSk7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN1bW1hcnkuYWRkQ2hpbGQo
U3RyaW5nLnNwcmludGYoIiVzOiAlcyAoJWQlJSkgaXMgbm90IHVzZWQgYnkgdGhlIGN1cnJlbnQg
cGFnZS4iLCB1cmwsIE51bWJlci5ieXRlc1RvU3RyaW5nKHVudXNlZFN0eWxlc2hlZXRTaXplKSwg
cGN0VW51c2VkKSk7CiAKICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB1
bnVzZWRSdWxlcy5sZW5ndGg7ICsraikKICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmFk
ZFNuaXBwZXQodW51c2VkUnVsZXNbal0pOwpAQCAtMzM5LDcgKzM0MSw3IEBAIFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLlVudXNlZENzc1J1bGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7CiAKICAgICAgICAgICAgICAgICB2YXIgdG90YWxV
bnVzZWRQZXJjZW50ID0gTWF0aC5yb3VuZCgxMDAgKiB0b3RhbFVudXNlZFN0eWxlc2hlZXRTaXpl
IC8gdG90YWxTdHlsZXNoZWV0U2l6ZSk7Ci0gICAgICAgICAgICAgICAgc3VtbWFyeS52YWx1ZSA9
IFN0cmluZy5zcHJpbnRmKCIlZCUlIG9mIENTUyAoZXN0aW1hdGVkKSBpcyBub3QgdXNlZCBieSB0
aGUgY3VycmVudCBwYWdlLiIsIHRvdGFsVW51c2VkUGVyY2VudCk7CisgICAgICAgICAgICAgICAg
c3VtbWFyeS52YWx1ZSA9IFN0cmluZy5zcHJpbnRmKCIlcyAoJWQlJSkgb2YgQ1NTIGlzIG5vdCB1
c2VkIGJ5IHRoZSBjdXJyZW50IHBhZ2UuIiwgTnVtYmVyLmJ5dGVzVG9TdHJpbmcodG90YWxVbnVz
ZWRTdHlsZXNoZWV0U2l6ZSksIHRvdGFsVW51c2VkUGVyY2VudCk7CiAKICAgICAgICAgICAgICAg
ICBjYWxsYmFjayhyZXN1bHQpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NTU0FnZW50LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0NTU0FnZW50LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YjIz
NzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTQWdl
bnQuanMKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBK
b3NlcGggUGVjb3Jhcm8KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCitXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKHBh
eWxvYWQpCit7CisgICAgdGhpcy5pZCA9IHBheWxvYWQuc3R5bGVJZDsKKyAgICB0aGlzLnByb3Bl
cnRpZXMgPSBwYXlsb2FkLnByb3BlcnRpZXM7CisgICAgdGhpcy5fc2hvcnRoYW5kVmFsdWVzID0g
cGF5bG9hZC5zaG9ydGhhbmRWYWx1ZXM7CisgICAgdGhpcy5fbGl2ZVByb3BlcnR5TWFwID0ge307
IC8vIExJVkUgcHJvcGVydGllcyAoc291cmNlLWJhc2VkIG9yIHN0eWxlLWJhc2VkKSA6IHsgbmFt
ZSAtPiBDU1NQcm9wZXJ0eSB9CisgICAgdGhpcy5fYWxsUHJvcGVydGllcyA9IFtdOyAvLyBBTEwg
cHJvcGVydGllczogWyBDU1NQcm9wZXJ0eSBdCisgICAgdGhpcy5fbG9uZ2hhbmRQcm9wZXJ0aWVz
ID0ge307IC8vIHNob3J0aGFuZE5hbWUgLT4gWyBDU1NQcm9wZXJ0eSBdCisgICAgdGhpcy5fX2Rp
c2FibGVkUHJvcGVydGllcyA9IHt9OyAvLyBESVNBQkxFRCBwcm9wZXJ0aWVzOiB7IGluZGV4IC0+
IENTU1Byb3BlcnR5IH0KKyAgICB2YXIgcGF5bG9hZFByb3BlcnR5Q291bnQgPSBwYXlsb2FkLmNz
c1Byb3BlcnRpZXMubGVuZ3RoOworCisgICAgdmFyIHByb3BlcnR5SW5kZXggPSAwOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcGF5bG9hZFByb3BlcnR5Q291bnQ7ICsraSkgeworICAgICAgICB2
YXIgcHJvcGVydHkgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnBhcnNlUGF5bG9hZCh0
aGlzLCBpLCBwYXlsb2FkLmNzc1Byb3BlcnRpZXNbaV0pOworICAgICAgICB0aGlzLl9hbGxQcm9w
ZXJ0aWVzLnB1c2gocHJvcGVydHkpOworICAgICAgICBpZiAocHJvcGVydHkuZGlzYWJsZWQpCisg
ICAgICAgICAgICB0aGlzLl9fZGlzYWJsZWRQcm9wZXJ0aWVzW2ldID0gcHJvcGVydHk7CisgICAg
ICAgIGlmICghcHJvcGVydHkuYWN0aXZlICYmICFwcm9wZXJ0eS5zdHlsZUJhc2VkKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIHZhciBuYW1lID0gcHJvcGVydHkubmFtZTsKKyAgICAg
ICAgdGhpc1twcm9wZXJ0eUluZGV4XSA9IG5hbWU7CisgICAgICAgIHRoaXMuX2xpdmVQcm9wZXJ0
eU1hcFtuYW1lXSA9IHByb3BlcnR5OworCisgICAgICAgIC8vIEluZGV4IGxvbmdoYW5kIHByb3Bl
cnRpZXMuCisgICAgICAgIGlmIChwcm9wZXJ0eS5zaG9ydGhhbmQpIHsgLy8gb25seSBmb3IgcGFy
c2VkCisgICAgICAgICAgICB2YXIgbG9uZ2hhbmRzID0gdGhpcy5fbG9uZ2hhbmRQcm9wZXJ0aWVz
W3Byb3BlcnR5LnNob3J0aGFuZF07CisgICAgICAgICAgICBpZiAoIWxvbmdoYW5kcykgeworICAg
ICAgICAgICAgICAgIGxvbmdoYW5kcyA9IFtdOworICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdo
YW5kUHJvcGVydGllc1twcm9wZXJ0eS5zaG9ydGhhbmRdID0gbG9uZ2hhbmRzOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbG9uZ2hhbmRzLnB1c2gocHJvcGVydHkpOworICAgICAgICB9Cisg
ICAgICAgICsrcHJvcGVydHlJbmRleDsKKyAgICB9CisgICAgdGhpcy5sZW5ndGggPSBwcm9wZXJ0
eUluZGV4OworfQorCitXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxv
YWQgPSBmdW5jdGlvbihwYXlsb2FkKQoreworICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNT
U1N0eWxlRGVjbGFyYXRpb24ocGF5bG9hZCk7Cit9CisKK1dlYkluc3BlY3Rvci5DU1NTdHlsZURl
Y2xhcmF0aW9uLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgYWxsUHJvcGVydGllcygpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fYWxsUHJvcGVydGllczsKKyAgICB9LAorCisgICAgZ2V0TGl2
ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xp
dmVQcm9wZXJ0eU1hcFtuYW1lXTsKKyAgICB9LAorCisgICAgZ2V0UHJvcGVydHlWYWx1ZTogZnVu
Y3Rpb24obmFtZSkKKyAgICB7CisgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuX2xpdmVQcm9w
ZXJ0eU1hcFtuYW1lXTsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHkudmFsdWUg
OiAiIjsKKyAgICB9LAorCisgICAgZ2V0UHJvcGVydHlQcmlvcml0eTogZnVuY3Rpb24obmFtZSkK
KyAgICB7CisgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuX2xpdmVQcm9wZXJ0eU1hcFtuYW1l
XTsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHkucHJpb3JpdHkgOiAiIjsKKyAg
ICB9LAorCisgICAgZ2V0UHJvcGVydHlTaG9ydGhhbmQ6IGZ1bmN0aW9uKG5hbWUpCisgICAgewor
ICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLl9saXZlUHJvcGVydHlNYXBbbmFtZV07CisgICAg
ICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LnNob3J0aGFuZCA6ICIiOworICAgIH0sCisK
KyAgICBpc1Byb3BlcnR5SW1wbGljaXQ6IGZ1bmN0aW9uKG5hbWUpCisgICAgeworICAgICAgICB2
YXIgcHJvcGVydHkgPSB0aGlzLl9saXZlUHJvcGVydHlNYXBbbmFtZV07CisgICAgICAgIHJldHVy
biBwcm9wZXJ0eSA/IHByb3BlcnR5LmltcGxpY2l0IDogIiI7CisgICAgfSwKKworICAgIHN0eWxl
VGV4dFdpdGhTaG9ydGhhbmRzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgY3NzVGV4
dCA9ICIiOworICAgICAgICB2YXIgZm91bmRQcm9wZXJ0aWVzID0ge307CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGluZGl2
aWR1YWxQcm9wZXJ0eSA9IHRoaXNbaV07CisgICAgICAgICAgICB2YXIgc2hvcnRoYW5kUHJvcGVy
dHkgPSB0aGlzLmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAg
ICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gKHNob3J0aGFuZFByb3BlcnR5IHx8IGluZGl2aWR1
YWxQcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gZm91bmRQcm9w
ZXJ0aWVzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoc2hv
cnRoYW5kUHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFNo
b3J0aGFuZFZhbHVlKHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICB2YXIgcHJp
b3JpdHkgPSB0aGlzLmdldFNob3J0aGFuZFByaW9yaXR5KHNob3J0aGFuZFByb3BlcnR5KTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRQ
cm9wZXJ0eVZhbHVlKGluZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgdmFyIHBy
aW9yaXR5ID0gdGhpcy5nZXRQcm9wZXJ0eVByaW9yaXR5KGluZGl2aWR1YWxQcm9wZXJ0eSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvdW5kUHJvcGVydGllc1twcm9wZXJ0eU5hbWVd
ID0gdHJ1ZTsKKworICAgICAgICAgICAgY3NzVGV4dCArPSBwcm9wZXJ0eU5hbWUgKyAiOiAiICsg
dmFsdWU7CisgICAgICAgICAgICBpZiAocHJpb3JpdHkpCisgICAgICAgICAgICAgICAgY3NzVGV4
dCArPSAiICEiICsgcHJpb3JpdHk7CisgICAgICAgICAgICBjc3NUZXh0ICs9ICI7ICI7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gY3NzVGV4dDsKKyAgICB9LAorCisgICAgZ2V0TG9uZ2hh
bmRQcm9wZXJ0aWVzOiBmdW5jdGlvbihuYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2xvbmdoYW5kUHJvcGVydGllc1tuYW1lXSB8fCBbXTsKKyAgICB9LAorCisgICAgZ2V0U2hvcnRo
YW5kVmFsdWU6IGZ1bmN0aW9uKHNob3J0aGFuZFByb3BlcnR5KQorICAgIHsKKyAgICAgICAgdmFy
IHByb3BlcnR5ID0gdGhpcy5nZXRMaXZlUHJvcGVydHkoc2hvcnRoYW5kUHJvcGVydHkpOworICAg
ICAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS52YWx1ZSA6IHRoaXMuX3Nob3J0aGFuZFZh
bHVlc1tzaG9ydGhhbmRQcm9wZXJ0eV07CisgICAgfSwKKworICAgIGdldFNob3J0aGFuZFByaW9y
aXR5OiBmdW5jdGlvbihzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICB7CisgICAgICAgIHZhciBwcmlv
cml0eSA9IHRoaXMuZ2V0UHJvcGVydHlQcmlvcml0eShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAg
ICAgIGlmIChwcmlvcml0eSkKKyAgICAgICAgICAgIHJldHVybiBwcmlvcml0eTsKKworICAgICAg
ICB2YXIgbG9uZ2hhbmRzID0gdGhpcy5fbG9uZ2hhbmRQcm9wZXJ0aWVzW3Nob3J0aGFuZFByb3Bl
cnR5XTsKKyAgICAgICAgcmV0dXJuIGxvbmdoYW5kcyA/IHRoaXMuZ2V0UHJvcGVydHlQcmlvcml0
eShsb25naGFuZHNbMF0pIDogbnVsbDsKKyAgICB9LAorCisgICAgcHJvcGVydHlBdDogZnVuY3Rp
b24oaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gKGluZGV4IDwgdGhpcy5hbGxQcm9wZXJ0
aWVzLmxlbmd0aCkgPyB0aGlzLmFsbFByb3BlcnRpZXNbaW5kZXhdIDogbnVsbDsKKyAgICB9LAor
CisgICAgcGFzdExhc3RTb3VyY2VQcm9wZXJ0eUluZGV4OiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBmb3IgKHZhciBpID0gdGhpcy5hbGxQcm9wZXJ0aWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsg
LS1pKSB7CisgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmFsbFByb3BlcnRpZXNbaV07
CisgICAgICAgICAgICBpZiAocHJvcGVydHkuYWN0aXZlIHx8IHByb3BlcnR5LmRpc2FibGVkKQor
ICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
MDsKKyAgICB9LAorCisgICAgbmV3QmxhbmtQcm9wZXJ0eTogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkodGhpcywgdGhpcy5wYXN0
TGFzdFNvdXJjZVByb3BlcnR5SW5kZXgoKSwgIiIsICIiLCAiIiwgImFjdGl2ZSIsIHRydWUsIGZh
bHNlLCBmYWxzZSwgIiIpOworICAgIH0sCisKKyAgICBpbnNlcnRQcm9wZXJ0eUF0OiBmdW5jdGlv
bihpbmRleCwgbmFtZSwgdmFsdWUsIHVzZXJDYWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0
aW9uIGNhbGxiYWNrKHVzZXJDYWxsYmFjaywgcGF5bG9hZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCF1c2VyQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBpZiAoIXBheWxvYWQpCisgICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKG51bGwpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQocGF5bG9hZCkpOworICAgICAgICB9
CisKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRQcm9wZXJ0eVRleHQyKHRoaXMuaWQsIGlu
ZGV4LCBuYW1lICsgIjogIiArIHZhbHVlICsgIjsiLCBmYWxzZSwgY2FsbGJhY2suYmluZChudWxs
LCB1c2VyQ2FsbGJhY2spKTsKKyAgICB9LAorCisgICAgYXBwZW5kUHJvcGVydHk6IGZ1bmN0aW9u
KG5hbWUsIHZhbHVlLCB1c2VyQ2FsbGJhY2spCisgICAgeworICAgICAgICB0aGlzLmluc2VydFBy
b3BlcnR5QXQodGhpcy5hbGxQcm9wZXJ0aWVzLmxlbmd0aCwgbmFtZSwgdmFsdWUsIHVzZXJDYWxs
YmFjayk7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQ1NTUnVsZSA9IGZ1bmN0aW9uKHBheWxv
YWQpCit7CisgICAgdGhpcy5pZCA9IHBheWxvYWQucnVsZUlkOworICAgIHRoaXMuc2VsZWN0b3JU
ZXh0ID0gcGF5bG9hZC5zZWxlY3RvclRleHQ7CisgICAgdGhpcy5zb3VyY2VMaW5lID0gcGF5bG9h
ZC5zb3VyY2VMaW5lOworICAgIHRoaXMuc291cmNlVVJMID0gcGF5bG9hZC5zb3VyY2VVUkw7Cisg
ICAgdGhpcy5vcmlnaW4gPSBwYXlsb2FkLm9yaWdpbjsKKyAgICB0aGlzLnN0eWxlID0gV2ViSW5z
cGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKHBheWxvYWQuc3R5bGUpOwor
ICAgIHRoaXMuc3R5bGUucGFyZW50UnVsZSA9IHRoaXM7Cit9CisKK1dlYkluc3BlY3Rvci5DU1NS
dWxlLnBhcnNlUGF5bG9hZCA9IGZ1bmN0aW9uKHBheWxvYWQpCit7CisgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuQ1NTUnVsZShwYXlsb2FkKTsKK30KKworV2ViSW5zcGVjdG9yLkNTU1J1bGUu
cHJvdG90eXBlID0geworICAgIGdldCBpc1VzZXJBZ2VudCgpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5vcmlnaW4gPT09ICJ1c2VyLWFnZW50IjsKKyAgICB9LAorCisgICAgZ2V0IGlzVXNl
cigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW4gPT09ICJ1c2VyIjsKKyAgICB9
LAorCisgICAgZ2V0IGlzVmlhSW5zcGVjdG9yKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Lm9yaWdpbiA9PT0gImluc3BlY3RvciI7CisgICAgfSwKKworICAgIGdldCBpc1JlZ3VsYXIoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luID09PSAiIjsKKyAgICB9Cit9CisKK1dl
Ykluc3BlY3Rvci5DU1NQcm9wZXJ0eSA9IGZ1bmN0aW9uKG93bmVyU3R5bGUsIGluZGV4LCBuYW1l
LCB2YWx1ZSwgcHJpb3JpdHksIHN0YXR1cywgcGFyc2VkT2ssIGltcGxpY2l0LCBzaG9ydGhhbmQs
IHRleHQpCit7CisgICAgdGhpcy5vd25lclN0eWxlID0gb3duZXJTdHlsZTsKKyAgICB0aGlzLmlu
ZGV4ID0gaW5kZXg7CisgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB0aGlzLnZhbHVlID0gdmFs
dWU7CisgICAgdGhpcy5wcmlvcml0eSA9IHByaW9yaXR5OworICAgIHRoaXMuc3RhdHVzID0gc3Rh
dHVzOworICAgIHRoaXMucGFyc2VkT2sgPSBwYXJzZWRPazsKKyAgICB0aGlzLmltcGxpY2l0ID0g
aW1wbGljaXQ7CisgICAgdGhpcy5zaG9ydGhhbmQgPSBzaG9ydGhhbmQ7CisgICAgdGhpcy50ZXh0
ID0gdGV4dDsKK30KKworV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnBhcnNlUGF5bG9hZCA9IGZ1
bmN0aW9uKG93bmVyU3R5bGUsIGluZGV4LCBwYXlsb2FkKQoreworICAgIHZhciByZXN1bHQgPSBu
ZXcgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5KAorICAgICAgICBvd25lclN0eWxlLCBpbmRleCwg
cGF5bG9hZC5uYW1lLCBwYXlsb2FkLnZhbHVlLCBwYXlsb2FkLnByaW9yaXR5LCBwYXlsb2FkLnN0
YXR1cywgcGF5bG9hZC5wYXJzZWRPaywgcGF5bG9hZC5pbXBsaWNpdCwgcGF5bG9hZC5zaG9ydGhh
bmROYW1lLCBwYXlsb2FkLnRleHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYkluc3Bl
Y3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHByb3BlcnR5VGV4dCgpCisg
ICAgeworICAgICAgICBpZiAodGhpcy50ZXh0ICE9PSB1bmRlZmluZWQpCisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy50ZXh0OworCisgICAgICAgIGlmICh0aGlzLm5hbWUgPT09ICIiKQorICAgICAg
ICAgICAgcmV0dXJuICIiOworICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgIjogIiArIHRoaXMu
dmFsdWUgKyAodGhpcy5wcmlvcml0eSA/ICIgISIgKyB0aGlzLnByaW9yaXR5IDogIiIpICsgIjsi
OworICAgIH0sCisKKyAgICBnZXQgaXNMaXZlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
LmFjdGl2ZSB8fCB0aGlzLnN0eWxlQmFzZWQ7CisgICAgfSwKKworICAgIGdldCBhY3RpdmUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSAiYWN0aXZlIjsKKyAgICB9LAor
CisgICAgZ2V0IHN0eWxlQmFzZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVz
ID09PSAic3R5bGUiOworICAgIH0sCisKKyAgICBnZXQgaW5hY3RpdmUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSAiaW5hY3RpdmUiOworICAgIH0sCisKKyAgICBnZXQg
ZGlzYWJsZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSAiZGlzYWJs
ZWQiOworICAgIH0sCisKKyAgICAvLyBSZXBsYWNlcyAicHJvcGVydHlOYW1lOiBwcm9wZXJ0eVZh
bHVlIFshaW1wb3J0YW50XTsiIGluIHRoZSBzdHlsZXNoZWV0IGJ5IGFuIGFyYml0cmFyeSBwcm9w
ZXJ0eVRleHQuCisgICAgc2V0VGV4dDogZnVuY3Rpb24ocHJvcGVydHlUZXh0LCB1c2VyQ2FsbGJh
Y2spCisgICAgeworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayh1c2VyQ2FsbGJhY2ssIHN0eWxl
UGF5bG9hZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF1c2VyQ2FsbGJhY2spCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCFzdHlsZVBheWxvYWQpCisgICAg
ICAgICAgICAgICAgdXNlckNhbGxiYWNrKG51bGwpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgdmFyIHN0eWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24u
cGFyc2VQYXlsb2FkKHN0eWxlUGF5bG9hZCk7CisgICAgICAgICAgICAgICAgdXNlckNhbGxiYWNr
KHN0eWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGhpcy5v
d25lclN0eWxlKQorICAgICAgICAgICAgdGhyb3cgIk5vIG93bmVyU3R5bGUgZm9yIHByb3BlcnR5
IjsKKworICAgICAgICB0aGlzLnRleHQgPSBwcm9wZXJ0eVRleHQ7CisKKyAgICAgICAgLy8gQW4g
aW5kZXggcGFzdCBhbGwgdGhlIHByb3BlcnRpZXMgYWRkcyBhIG5ldyBwcm9wZXJ0eSB0byB0aGUg
c3R5bGUuCisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UHJvcGVydHlUZXh0Mih0aGlzLm93
bmVyU3R5bGUuaWQsIHRoaXMuaW5kZXgsIHByb3BlcnR5VGV4dCwgdGhpcy5pbmRleCA8IHRoaXMu
b3duZXJTdHlsZS5wYXN0TGFzdFNvdXJjZVByb3BlcnR5SW5kZXgoKSwgY2FsbGJhY2suYmluZCh0
aGlzLCB1c2VyQ2FsbGJhY2spKTsKKyAgICB9LAorCisgICAgc2V0VmFsdWU6IGZ1bmN0aW9uKG5l
d1ZhbHVlLCB1c2VyQ2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIgdGV4dCA9IHRoaXMubmFt
ZSArICI6ICIgKyBuZXdWYWx1ZSArICh0aGlzLnByaW9yaXR5ID8gIiAhIiArIHRoaXMucHJpb3Jp
dHkgOiAiIikgKyAiOyIKKyAgICAgICAgdGhpcy5zZXRUZXh0KHRleHQsIHVzZXJDYWxsYmFjayk7
CisgICAgfSwKKworICAgIHNldERpc2FibGVkOiBmdW5jdGlvbihkaXNhYmxlZCwgdXNlckNhbGxi
YWNrKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLm93bmVyU3R5bGUgJiYgdXNlckNhbGxiYWNr
KQorICAgICAgICAgICAgdXNlckNhbGxiYWNrKG51bGwpOworICAgICAgICBpZiAoZGlzYWJsZWQg
PT09IHRoaXMuZGlzYWJsZWQgJiYgdXNlckNhbGxiYWNrKQorICAgICAgICAgICAgdXNlckNhbGxi
YWNrKHRoaXMub3duZXJTdHlsZSk7CisKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sodXNlckNh
bGxiYWNrLCBzdHlsZVBheWxvYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghdXNlckNh
bGxiYWNrKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghc3R5bGVQ
YXlsb2FkKQorICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhudWxsKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9hZChzdHlsZVBheWxvYWQpOworICAgICAgICAgICAgICAg
IHVzZXJDYWxsYmFjayhzdHlsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBJbnNwZWN0b3JCYWNrZW5kLnRvZ2dsZVByb3BlcnR5Mih0aGlzLm93bmVyU3R5bGUuaWQsIHRo
aXMuaW5kZXgsIGRpc2FibGVkLCBjYWxsYmFjay5iaW5kKHRoaXMsIHVzZXJDYWxsYmFjaykpOwor
ICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQgPSBmdW5jdGlvbihwYXlsb2Fk
KQoreworICAgIHRoaXMuaWQgPSBwYXlsb2FkLnN0eWxlU2hlZXRJZDsKKyAgICB0aGlzLnNvdXJj
ZVVSTCA9IHBheWxvYWQuc291cmNlVVJMOworICAgIHRoaXMudGl0bGUgPSBwYXlsb2FkLnN0eWxl
U2hlZXQudGl0bGU7CisgICAgdGhpcy5kaXNhYmxlZCA9IHBheWxvYWQuc3R5bGVTaGVldC5kaXNh
YmxlZDsKKyAgICB0aGlzLmNzc1J1bGVzID0gW107CisgICAgdGhpcy5zdHlsZXMgPSB7fTsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHBheWxvYWQucnVsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgdmFyIHJ1bGUgPSBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wYXJzZVBheWxvYWQocGF5bG9hZC5y
dWxlc1tpXSk7CisgICAgICAgIHRoaXMuY3NzUnVsZXMucHVzaChydWxlKTsKKyAgICAgICAgaWYg
KHJ1bGUuc3R5bGUpCisgICAgICAgICAgICB0aGlzLnN0eWxlc1tydWxlLnN0eWxlLmlkXSA9IHJ1
bGUuc3R5bGU7CisgICAgfQorICAgIGlmICgidGV4dCIgaW4gcGF5bG9hZCkKKyAgICAgICAgdGhp
cy5fdGV4dCA9IHBheWxvYWQudGV4dDsKK30KKworV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQu
Y3JlYXRlRm9ySWQgPSBmdW5jdGlvbihzdHlsZVNoZWV0SWQsIHVzZXJDYWxsYmFjaykKK3sKKyAg
ICBmdW5jdGlvbiBjYWxsYmFjayh1c2VyQ2FsbGJhY2ssIHN0eWxlU2hlZXRQYXlsb2FkKQorICAg
IHsKKyAgICAgICAgaWYgKCFzdHlsZVNoZWV0UGF5bG9hZCkKKyAgICAgICAgICAgIHVzZXJDYWxs
YmFjayhudWxsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXNlckNhbGxiYWNrKG5ldyBX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldChzdHlsZVNoZWV0UGF5bG9hZCkpOworICAgIH0KKyAg
ICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlU2hlZXQyKHN0eWxlU2hlZXRJZCwgY2FsbGJhY2su
YmluZCh0aGlzLCB1c2VyQ2FsbGJhY2spKTsKK30KKworV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hl
ZXQucHJvdG90eXBlID0geworICAgIGdldCB0ZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl90ZXh0OworICAgIH0sCisKKyAgICBzZXRUZXh0OiBmdW5jdGlvbihuZXdUZXh0LCB1c2Vy
Q2FsbGJhY2spCisgICAgeworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayh1c2VyQ2FsbGJhY2ss
IHN0eWxlU2hlZXRQYXlsb2FkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXN0eWxlU2hl
ZXRQYXlsb2FkKQorICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhudWxsKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2sobmV3IFdlYkluc3BlY3Rvci5D
U1NTdHlsZVNoZWV0KHN0eWxlU2hlZXRQYXlsb2FkKSk7CisgICAgICAgIH0KKworICAgICAgICBJ
bnNwZWN0b3JCYWNrZW5kLnNldFN0eWxlU2hlZXRUZXh0Mih0aGlzLmlkLCBuZXdUZXh0LCBjYWxs
YmFjay5iaW5kKHRoaXMsIHVzZXJDYWxsYmFjaykpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKaW5kZXggNTQyYTNiMy4uMjViODIxYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKQEAgLTgz
LDcgKzgzLDcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhyZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5nZXRTdHlsZXMobm9kZUlkLCBmYWxzZSwgY2FsbGJhY2suYmluZChu
dWxsLCB1c2VyQ2FsbGJhY2spKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRTdHlsZXNG
b3JOb2RlMihub2RlSWQsIGNhbGxiYWNrLmJpbmQobnVsbCwgdXNlckNhbGxiYWNrKSk7CiAgICAg
fSwKIAogICAgIGdldENvbXB1dGVkU3R5bGVBc3luYzogZnVuY3Rpb24obm9kZUlkLCB1c2VyQ2Fs
bGJhY2spCkBAIC05Niw3ICs5Niw3IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2soV2ViSW5zcGVjdG9yLkNTU1N0
eWxlRGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKHN0eWxlUGF5bG9hZCkpOwogICAgICAgICB9CiAK
LSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRDb21wdXRlZFN0eWxlKG5vZGVJZCwgY2FsbGJh
Y2suYmluZChudWxsLCB1c2VyQ2FsbGJhY2spKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5n
ZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIobm9kZUlkLCBjYWxsYmFjay5iaW5kKG51bGwsIHVzZXJD
YWxsYmFjaykpOwogICAgIH0sCiAKICAgICBnZXRJbmxpbmVTdHlsZUFzeW5jOiBmdW5jdGlvbihu
b2RlSWQsIHVzZXJDYWxsYmFjaykKQEAgLTEwOSw0MSArMTA5LDQ1IEBAIFdlYkluc3BlY3Rvci5D
U1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2so
V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKHN0eWxlUGF5bG9h
ZCkpOwogICAgICAgICB9CiAKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRJbmxpbmVTdHls
ZShub2RlSWQsIGNhbGxiYWNrLmJpbmQobnVsbCwgdXNlckNhbGxiYWNrKSk7CisgICAgICAgIElu
c3BlY3RvckJhY2tlbmQuZ2V0SW5saW5lU3R5bGVGb3JOb2RlMihub2RlSWQsIGNhbGxiYWNrLmJp
bmQobnVsbCwgdXNlckNhbGxiYWNrKSk7CiAgICAgfSwKIAotICAgIHNldFJ1bGVTZWxlY3Rvcjog
ZnVuY3Rpb24ocnVsZUlkLCBuZXdDb250ZW50LCBub2RlSWQsIHN1Y2Nlc3NDYWxsYmFjaywgZmFp
bHVyZUNhbGxiYWNrKQorICAgIHNldFJ1bGVTZWxlY3RvcjogZnVuY3Rpb24ocnVsZUlkLCBub2Rl
SWQsIG5ld1NlbGVjdG9yLCBzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykKICAgICB7
Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKG5ld1J1bGVQYXlsb2FkLCBkb2VzQWZmZWN0U2Vs
ZWN0ZWROb2RlKQorICAgICAgICBmdW5jdGlvbiBjaGVja0FmZmVjdHNDYWxsYmFjayhub2RlSWQs
IHN1Y2Nlc3NDYWxsYmFjaywgcnVsZVBheWxvYWQsIHNlbGVjdGVkTm9kZUlkcykKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFuZXdSdWxlUGF5bG9hZCkKKyAgICAgICAgICAgIHZhciBkb2Vz
QWZmZWN0U2VsZWN0ZWROb2RlID0gKHNlbGVjdGVkTm9kZUlkcy5pbmRleE9mKG5vZGVJZCkgPj0g
MCk7CisgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soV2ViSW5zcGVjdG9yLkNTU1J1bGUucGFy
c2VQYXlsb2FkKHJ1bGVQYXlsb2FkKSwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSk7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhub2RlSWQsIHN1Y2Nlc3NDYWxsYmFjaywg
ZmFpbHVyZUNhbGxiYWNrLCBuZXdTZWxlY3RvciwgcnVsZVBheWxvYWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghcnVsZVBheWxvYWQpCiAgICAgICAgICAgICAgICAgZmFpbHVyZUNhbGxi
YWNrKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNr
KFdlYkluc3BlY3Rvci5DU1NSdWxlLnBhcnNlUGF5bG9hZChuZXdSdWxlUGF5bG9hZCksIGRvZXNB
ZmZlY3RTZWxlY3RlZE5vZGUpOworICAgICAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucXVl
cnlTZWxlY3RvckFsbChub2RlSWQsIG5ld1NlbGVjdG9yLCBjaGVja0FmZmVjdHNDYWxsYmFjay5i
aW5kKG51bGwsIG5vZGVJZCwgc3VjY2Vzc0NhbGxiYWNrLCBydWxlUGF5bG9hZCkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRSdWxlU2VsZWN0b3IocnVsZUlkLCBu
ZXdDb250ZW50LCBub2RlSWQsIGNhbGxiYWNrKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5z
ZXRSdWxlU2VsZWN0b3IyKHJ1bGVJZCwgbmV3U2VsZWN0b3IsIGNhbGxiYWNrLmJpbmQobnVsbCwg
bm9kZUlkLCBzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykpOwogICAgIH0sCiAKLSAg
ICBhZGRSdWxlOiBmdW5jdGlvbihub2RlSWQsIG5ld0NvbnRlbnQsIHN1Y2Nlc3NDYWxsYmFjaywg
ZmFpbHVyZUNhbGxiYWNrKQorICAgIGFkZFJ1bGU6IGZ1bmN0aW9uKG5vZGVJZCwgc2VsZWN0b3Is
IHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgZnVuY3Rp
b24gY2FsbGJhY2socnVsZSwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSkKKyAgICAgICAgZnVuY3Rp
b24gY2hlY2tBZmZlY3RzQ2FsbGJhY2sobm9kZUlkLCBzdWNjZXNzQ2FsbGJhY2ssIHJ1bGVQYXls
b2FkLCBzZWxlY3RlZE5vZGVJZHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBkb2VzQWZm
ZWN0U2VsZWN0ZWROb2RlID0gKHNlbGVjdGVkTm9kZUlkcy5pbmRleE9mKG5vZGVJZCkgPj0gMCk7
CisgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soV2ViSW5zcGVjdG9yLkNTU1J1bGUucGFyc2VQ
YXlsb2FkKHJ1bGVQYXlsb2FkKSwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxs
YmFjaywgc2VsZWN0b3IsIHJ1bGVQYXlsb2FkKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IXJ1bGUpIHsKKyAgICAgICAgICAgIGlmICghcnVsZVBheWxvYWQpIHsKICAgICAgICAgICAgICAg
ICAvLyBJbnZhbGlkIHN5bnRheCBmb3IgYSBzZWxlY3RvcgogICAgICAgICAgICAgICAgIGZhaWx1
cmVDYWxsYmFjaygpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIg
c3R5bGVSdWxlID0gV2ViSW5zcGVjdG9yLkNTU1J1bGUucGFyc2VQYXlsb2FkKHJ1bGUpOwotICAg
ICAgICAgICAgICAgIHN0eWxlUnVsZS5ydWxlID0gcnVsZTsKLSAgICAgICAgICAgICAgICBzdWNj
ZXNzQ2FsbGJhY2soc3R5bGVSdWxlLCBkb2VzQWZmZWN0U2VsZWN0ZWROb2RlKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEluc3BlY3RvckJhY2tl
bmQucXVlcnlTZWxlY3RvckFsbChub2RlSWQsIHNlbGVjdG9yLCBjaGVja0FmZmVjdHNDYWxsYmFj
ay5iaW5kKG51bGwsIG5vZGVJZCwgc3VjY2Vzc0NhbGxiYWNrLCBydWxlUGF5bG9hZCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5hZGRSdWxlKG5ld0NvbnRlbnQsIG5v
ZGVJZCwgY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBzZXRDU1NUZXh0OiBmdW5jdGlvbihzdHls
ZUlkLCBjc3NUZXh0KQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdHlsZVRl
eHQoc3R5bGVJZCwgY3NzVGV4dCk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuYWRkUnVsZTIo
bm9kZUlkLCBzZWxlY3RvciwgY2FsbGJhY2suYmluZChudWxsLCBzdWNjZXNzQ2FsbGJhY2ssIGZh
aWx1cmVDYWxsYmFjaywgc2VsZWN0b3IpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRE9NQWdlbnQuanMKaW5kZXggNDcwZTc3NS4uMzdiZjU0OSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpAQCAtNTI0LDI5NiArNTI0LDYgQEAgV2ViSW5zcGVj
dG9yLkV2ZW50TGlzdGVuZXJzLmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZUFzeW5jID0gZnVuY3Rp
b24obm9kZSwgY2FsbGIKICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldEV2ZW50TGlzdGVuZXJzRm9y
Tm9kZShub2RlLmlkLCBjYWxsYmFjayk7CiB9CiAKLVdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uID0gZnVuY3Rpb24ocGF5bG9hZCkKLXsKLSAgICB0aGlzLmlkID0gcGF5bG9hZC5zdHls
ZUlkOwotICAgIHRoaXMucHJvcGVydGllcyA9IHBheWxvYWQucHJvcGVydGllczsKLSAgICB0aGlz
Ll9zaG9ydGhhbmRWYWx1ZXMgPSBwYXlsb2FkLnNob3J0aGFuZFZhbHVlczsKLSAgICB0aGlzLl9s
aXZlUHJvcGVydHlNYXAgPSB7fTsgLy8gTElWRSBwcm9wZXJ0aWVzIChzb3VyY2UtYmFzZWQgb3Ig
c3R5bGUtYmFzZWQpIDogeyBuYW1lIC0+IENTU1Byb3BlcnR5IH0KLSAgICB0aGlzLl9hbGxQcm9w
ZXJ0aWVzID0gW107IC8vIEFMTCBwcm9wZXJ0aWVzOiBbIENTU1Byb3BlcnR5IF0KLSAgICB0aGlz
Ll9sb25naGFuZFByb3BlcnRpZXMgPSB7fTsgLy8gc2hvcnRoYW5kTmFtZSAtPiBbIENTU1Byb3Bl
cnR5IF0KLSAgICB0aGlzLl9fZGlzYWJsZWRQcm9wZXJ0aWVzID0ge307IC8vIERJU0FCTEVEIHBy
b3BlcnRpZXM6IHsgaW5kZXggLT4gQ1NTUHJvcGVydHkgfQotICAgIHZhciBwYXlsb2FkUHJvcGVy
dHlDb3VudCA9IHBheWxvYWQuY3NzUHJvcGVydGllcy5sZW5ndGg7Ci0KLSAgICB2YXIgcHJvcGVy
dHlJbmRleCA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXlsb2FkUHJvcGVydHlDb3Vu
dDsgKytpKSB7Ci0gICAgICAgIHZhciBwcm9wZXJ0eSA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJv
cGVydHkucGFyc2VQYXlsb2FkKHRoaXMsIGksIHBheWxvYWQuY3NzUHJvcGVydGllc1tpXSk7Ci0g
ICAgICAgIHRoaXMuX2FsbFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7Ci0gICAgICAgIGlmIChw
cm9wZXJ0eS5kaXNhYmxlZCkKLSAgICAgICAgICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnRpZXNb
aV0gPSBwcm9wZXJ0eTsKLSAgICAgICAgaWYgKCFwcm9wZXJ0eS5hY3RpdmUgJiYgIXByb3BlcnR5
LnN0eWxlQmFzZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdmFyIG5hbWUgPSBw
cm9wZXJ0eS5uYW1lOwotICAgICAgICB0aGlzW3Byb3BlcnR5SW5kZXhdID0gbmFtZTsKLSAgICAg
ICAgdGhpcy5fbGl2ZVByb3BlcnR5TWFwW25hbWVdID0gcHJvcGVydHk7Ci0KLSAgICAgICAgLy8g
SW5kZXggbG9uZ2hhbmQgcHJvcGVydGllcy4KLSAgICAgICAgaWYgKHByb3BlcnR5LnNob3J0aGFu
ZCkgeyAvLyBvbmx5IGZvciBwYXJzZWQKLSAgICAgICAgICAgIHZhciBsb25naGFuZHMgPSB0aGlz
Ll9sb25naGFuZFByb3BlcnRpZXNbcHJvcGVydHkuc2hvcnRoYW5kXTsKLSAgICAgICAgICAgIGlm
ICghbG9uZ2hhbmRzKSB7Ci0gICAgICAgICAgICAgICAgbG9uZ2hhbmRzID0gW107Ci0gICAgICAg
ICAgICAgICAgdGhpcy5fbG9uZ2hhbmRQcm9wZXJ0aWVzW3Byb3BlcnR5LnNob3J0aGFuZF0gPSBs
b25naGFuZHM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb25naGFuZHMucHVzaChwcm9w
ZXJ0eSk7Ci0gICAgICAgIH0KLSAgICAgICAgKytwcm9wZXJ0eUluZGV4OwotICAgIH0KLSAgICB0
aGlzLmxlbmd0aCA9IHByb3BlcnR5SW5kZXg7Ci19Ci0KLVdlYkluc3BlY3Rvci5DU1NTdHlsZURl
Y2xhcmF0aW9uLnBhcnNlUGF5bG9hZCA9IGZ1bmN0aW9uKHBheWxvYWQpCi17Ci0gICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbihwYXlsb2FkKTsKLX0KLQotV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlID0gewotICAgIGdldCBhbGxQ
cm9wZXJ0aWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9hbGxQcm9wZXJ0aWVzOwot
ICAgIH0sCi0KLSAgICBnZXRMaXZlUHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fbGl2ZVByb3BlcnR5TWFwW25hbWVdOwotICAgIH0sCi0KLSAgICBn
ZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbihuYW1lKQotICAgIHsKLSAgICAgICAgdmFyIHByb3Bl
cnR5ID0gdGhpcy5fbGl2ZVByb3BlcnR5TWFwW25hbWVdOwotICAgICAgICByZXR1cm4gcHJvcGVy
dHkgPyBwcm9wZXJ0eS52YWx1ZSA6ICIiOwotICAgIH0sCi0KLSAgICBnZXRQcm9wZXJ0eVByaW9y
aXR5OiBmdW5jdGlvbihuYW1lKQotICAgIHsKLSAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5f
bGl2ZVByb3BlcnR5TWFwW25hbWVdOwotICAgICAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0
eS5wcmlvcml0eSA6ICIiOwotICAgIH0sCi0KLSAgICBnZXRQcm9wZXJ0eVNob3J0aGFuZDogZnVu
Y3Rpb24obmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuX2xpdmVQcm9w
ZXJ0eU1hcFtuYW1lXTsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHkuc2hvcnRo
YW5kIDogIiI7Ci0gICAgfSwKLQotICAgIGlzUHJvcGVydHlJbXBsaWNpdDogZnVuY3Rpb24obmFt
ZSkKLSAgICB7Ci0gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuX2xpdmVQcm9wZXJ0eU1hcFtu
YW1lXTsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHkuaW1wbGljaXQgOiAiIjsK
LSAgICB9LAotCi0gICAgc3R5bGVUZXh0V2l0aFNob3J0aGFuZHM6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHZhciBjc3NUZXh0ID0gIiI7Ci0gICAgICAgIHZhciBmb3VuZFByb3BlcnRpZXMg
PSB7fTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICB2YXIgaW5kaXZpZHVhbFByb3BlcnR5ID0gdGhpc1tpXTsKLSAgICAgICAgICAg
IHZhciBzaG9ydGhhbmRQcm9wZXJ0eSA9IHRoaXMuZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZp
ZHVhbFByb3BlcnR5KTsKLSAgICAgICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSAoc2hvcnRoYW5k
UHJvcGVydHkgfHwgaW5kaXZpZHVhbFByb3BlcnR5KTsKLQotICAgICAgICAgICAgaWYgKHByb3Bl
cnR5TmFtZSBpbiBmb3VuZFByb3BlcnRpZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgIGlmIChzaG9ydGhhbmRQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgIHZh
ciB2YWx1ZSA9IHRoaXMuZ2V0U2hvcnRoYW5kVmFsdWUoc2hvcnRoYW5kUHJvcGVydHkpOwotICAg
ICAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IHRoaXMuZ2V0U2hvcnRoYW5kUHJpb3JpdHkoc2hv
cnRoYW5kUHJvcGVydHkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2
YXIgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoaW5kaXZpZHVhbFByb3BlcnR5KTsKLSAg
ICAgICAgICAgICAgICB2YXIgcHJpb3JpdHkgPSB0aGlzLmdldFByb3BlcnR5UHJpb3JpdHkoaW5k
aXZpZHVhbFByb3BlcnR5KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm91bmRQcm9w
ZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlOwotCi0gICAgICAgICAgICBjc3NUZXh0ICs9IHBy
b3BlcnR5TmFtZSArICI6ICIgKyB2YWx1ZTsKLSAgICAgICAgICAgIGlmIChwcmlvcml0eSkKLSAg
ICAgICAgICAgICAgICBjc3NUZXh0ICs9ICIgISIgKyBwcmlvcml0eTsKLSAgICAgICAgICAgIGNz
c1RleHQgKz0gIjsgIjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjc3NUZXh0OwotICAg
IH0sCi0KLSAgICBnZXRMb25naGFuZFByb3BlcnRpZXM6IGZ1bmN0aW9uKG5hbWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ2hhbmRQcm9wZXJ0aWVzW25hbWVdIHx8IFtdOwotICAg
IH0sCi0KLSAgICBnZXRTaG9ydGhhbmRWYWx1ZTogZnVuY3Rpb24oc2hvcnRoYW5kUHJvcGVydHkp
Ci0gICAgewotICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmdldExpdmVQcm9wZXJ0eShzaG9y
dGhhbmRQcm9wZXJ0eSk7Ci0gICAgICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LnZhbHVl
IDogdGhpcy5fc2hvcnRoYW5kVmFsdWVzW3Nob3J0aGFuZFByb3BlcnR5XTsKLSAgICB9LAotCi0g
ICAgZ2V0U2hvcnRoYW5kUHJpb3JpdHk6IGZ1bmN0aW9uKHNob3J0aGFuZFByb3BlcnR5KQotICAg
IHsKLSAgICAgICAgdmFyIHByaW9yaXR5ID0gdGhpcy5nZXRQcm9wZXJ0eVByaW9yaXR5KHNob3J0
aGFuZFByb3BlcnR5KTsKLSAgICAgICAgaWYgKHByaW9yaXR5KQotICAgICAgICAgICAgcmV0dXJu
IHByaW9yaXR5OwotCi0gICAgICAgIHZhciBsb25naGFuZHMgPSB0aGlzLl9sb25naGFuZFByb3Bl
cnRpZXNbc2hvcnRoYW5kUHJvcGVydHldOwotICAgICAgICByZXR1cm4gbG9uZ2hhbmRzID8gdGhp
cy5nZXRQcm9wZXJ0eVByaW9yaXR5KGxvbmdoYW5kc1swXSkgOiBudWxsOwotICAgIH0sCi0KLSAg
ICBhcHBlbmRQcm9wZXJ0eTogZnVuY3Rpb24ocHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlLCB1
c2VyQ2FsbGJhY2spCi0gICAgewotICAgICAgICBmdW5jdGlvbiBzZXRQcm9wZXJ0eUNhbGxiYWNr
KHVzZXJDYWxsYmFjaywgc3VjY2Vzcywgc3R5bGVQYXlsb2FkKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKG51bGwpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQoc3R5bGVQYXlsb2FkKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBGSVhNRShhcGF2bG92KTogdGhpcyBzaG91bGQgYmUgbWlncmF0
ZWQgdG8gdGhlIG5ldyBJbnNwZWN0b3JDU1NBZ2VudCBBUEkgb25jZSBpdCBpcyBlbmFibGVkLgot
ICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmFwcGx5U3R5bGVUZXh0KHRoaXMuaWQsIHByb3BlcnR5
TmFtZSArICI6ICIgKyBwcm9wZXJ0eVZhbHVlICsgIjsiLCBwcm9wZXJ0eU5hbWUsIHNldFByb3Bl
cnR5Q2FsbGJhY2suYmluZCh0aGlzLCB1c2VyQ2FsbGJhY2spKTsKLSAgICB9LAotCi0gICAgcHJv
cGVydHlBdDogZnVuY3Rpb24oaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gKGluZGV4IDwg
dGhpcy5hbGxQcm9wZXJ0aWVzLmxlbmd0aCkgPyB0aGlzLmFsbFByb3BlcnRpZXNbaW5kZXhdIDog
bnVsbDsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5DU1NSdWxlID0gZnVuY3Rpb24ocGF5bG9h
ZCkKLXsKLSAgICB0aGlzLmlkID0gcGF5bG9hZC5ydWxlSWQ7Ci0gICAgdGhpcy5zZWxlY3RvclRl
eHQgPSBwYXlsb2FkLnNlbGVjdG9yVGV4dDsKLSAgICB0aGlzLnNvdXJjZUxpbmUgPSBwYXlsb2Fk
LnNvdXJjZUxpbmU7Ci0gICAgdGhpcy5zb3VyY2VVUkwgPSBwYXlsb2FkLnNvdXJjZVVSTDsKLSAg
ICB0aGlzLm9yaWdpbiA9IHBheWxvYWQub3JpZ2luOwotICAgIHRoaXMuc3R5bGUgPSBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQocGF5bG9hZC5zdHlsZSk7Ci0g
ICAgdGhpcy5zdHlsZS5wYXJlbnRSdWxlID0gdGhpczsKLX0KLQotV2ViSW5zcGVjdG9yLkNTU1J1
bGUucGFyc2VQYXlsb2FkID0gZnVuY3Rpb24ocGF5bG9hZCkKLXsKLSAgICByZXR1cm4gbmV3IFdl
Ykluc3BlY3Rvci5DU1NSdWxlKHBheWxvYWQpOwotfQotCi1XZWJJbnNwZWN0b3IuQ1NTUnVsZS5w
cm90b3R5cGUgPSB7Ci0gICAgZ2V0IGlzVXNlckFnZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLm9yaWdpbiA9PT0gInVzZXItYWdlbnQiOwotICAgIH0sCi0KLSAgICBnZXQgaXNVc2Vy
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbiA9PT0gInVzZXIiOwotICAgIH0s
Ci0KLSAgICBnZXQgaXNWaWFJbnNwZWN0b3IoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
b3JpZ2luID09PSAiaW5zcGVjdG9yIjsKLSAgICB9LAotCi0gICAgZ2V0IGlzUmVndWxhcigpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW4gPT09ICIiOwotICAgIH0KLX0KLQotV2Vi
SW5zcGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIG5hbWUs
IHZhbHVlLCBwcmlvcml0eSwgc3RhdHVzLCBwYXJzZWRPaywgaW1wbGljaXQsIHNob3J0aGFuZCwg
dGV4dCkKLXsKLSAgICB0aGlzLm93bmVyU3R5bGUgPSBvd25lclN0eWxlOwotICAgIHRoaXMuaW5k
ZXggPSBpbmRleDsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMudmFsdWUgPSB2YWx1
ZTsKLSAgICB0aGlzLnByaW9yaXR5ID0gcHJpb3JpdHk7Ci0gICAgdGhpcy5zdGF0dXMgPSBzdGF0
dXM7Ci0gICAgdGhpcy5wYXJzZWRPayA9IHBhcnNlZE9rOwotICAgIHRoaXMuaW1wbGljaXQgPSBp
bXBsaWNpdDsKLSAgICB0aGlzLnNob3J0aGFuZCA9IHNob3J0aGFuZDsKLSAgICB0aGlzLnRleHQg
PSB0ZXh0OwotfQotCi1XZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucGFyc2VQYXlsb2FkID0gZnVu
Y3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIHBheWxvYWQpCi17Ci0gICAgdmFyIHJlc3VsdCA9IG5l
dyBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkoCi0gICAgICAgIG93bmVyU3R5bGUsIGluZGV4LCBw
YXlsb2FkLm5hbWUsIHBheWxvYWQudmFsdWUsIHBheWxvYWQucHJpb3JpdHksIHBheWxvYWQuc3Rh
dHVzLCBwYXlsb2FkLnBhcnNlZE9rLCBwYXlsb2FkLmltcGxpY2l0LCBwYXlsb2FkLnNob3J0aGFu
ZE5hbWUsIHBheWxvYWQudGV4dCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotV2ViSW5zcGVj
dG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZSA9IHsKLSAgICBnZXQgcHJvcGVydHlUZXh0KCkKLSAg
ICB7Ci0gICAgICAgIGlmICh0aGlzLnRleHQgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLnRleHQ7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMubmFtZSArICI6ICIgKyB0aGlz
LnZhbHVlICsgKHRoaXMucHJpb3JpdHkgPyAiICEiICsgdGhpcy5wcmlvcml0eSA6ICIiKSArICI7
IjsKLSAgICB9LAotCi0gICAgZ2V0IGlzTGl2ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5hY3RpdmUgfHwgdGhpcy5zdHlsZUJhc2VkOwotICAgIH0sCi0KLSAgICBnZXQgYWN0aXZlKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gImFjdGl2ZSI7Ci0gICAgfSwK
LQotICAgIGdldCBzdHlsZUJhc2VkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnN0YXR1
cyA9PT0gInN0eWxlIjsKLSAgICB9LAotCi0gICAgZ2V0IGluYWN0aXZlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gImluYWN0aXZlIjsKLSAgICB9LAotCi0gICAgZ2V0
IGRpc2FibGVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gImRpc2Fi
bGVkIjsKLSAgICB9LAotCi0gICAgLy8gUmVwbGFjZXMgInByb3BlcnR5TmFtZTogcHJvcGVydHlW
YWx1ZSBbIWltcG9ydGFudF07IiBpbiB0aGUgc3R5bGVzaGVldCBieSBhbiBhcmJpdHJhcnkgcHJv
cGVydHlUZXh0LgotICAgIHNldFRleHQ6IGZ1bmN0aW9uKHByb3BlcnR5VGV4dCwgdXNlckNhbGxi
YWNrKQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sodXNlckNhbGxiYWNrLCBzdWNj
ZXNzLCBzdHlsZVBheWxvYWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghdXNlckNhbGxi
YWNrKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmICghc3VjY2VzcykK
LSAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2sobnVsbCk7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJh
dGlvbi5wYXJzZVBheWxvYWQoc3R5bGVQYXlsb2FkKTsKLSAgICAgICAgICAgICAgICB1c2VyQ2Fs
bGJhY2soc3R5bGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0
aGlzLm93bmVyU3R5bGUpCi0gICAgICAgICAgICB0aHJvdyAiTm8gb3duZXJTdHlsZSBmb3IgcHJv
cGVydHkiOwotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmFwcGx5U3R5bGVUZXh0KHRoaXMub3du
ZXJTdHlsZS5pZCwgcHJvcGVydHlUZXh0LCB0aGlzLm5hbWUsIGNhbGxiYWNrLmJpbmQodGhpcywg
dXNlckNhbGxiYWNrKSk7Ci0gICAgfSwKLQotICAgIHNldFZhbHVlOiBmdW5jdGlvbihuZXdWYWx1
ZSwgdXNlckNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFyIHRleHQgPSB0aGlzLm5hbWUgKyAi
OiAiICsgbmV3VmFsdWUgKyAodGhpcy5wcmlvcml0eSA/ICIgISIgKyB0aGlzLnByaW9yaXR5IDog
IiIpICsgIjsiCi0gICAgICAgIHRoaXMuc2V0VGV4dCh0ZXh0LCB1c2VyQ2FsbGJhY2spOwotICAg
IH0sCi0KLSAgICBzZXREaXNhYmxlZDogZnVuY3Rpb24oZGlzYWJsZWQsIHVzZXJDYWxsYmFjaykK
LSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5vd25lclN0eWxlICYmIHVzZXJDYWxsYmFjaykKLSAg
ICAgICAgICAgIHVzZXJDYWxsYmFjayhudWxsKTsKLSAgICAgICAgaWYgKGRpc2FibGVkID09PSB0
aGlzLmRpc2FibGVkICYmIHVzZXJDYWxsYmFjaykKLSAgICAgICAgICAgIHVzZXJDYWxsYmFjayh0
aGlzLm93bmVyU3R5bGUpOwotCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHVzZXJDYWxsYmFj
aywgc3R5bGVQYXlsb2FkKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXVzZXJDYWxsYmFj
aykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoIXN0eWxlUGF5bG9h
ZCkKLSAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2sobnVsbCk7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvbi5wYXJzZVBheWxvYWQoc3R5bGVQYXlsb2FkKTsKLSAgICAgICAgICAgICAgICB1c2Vy
Q2FsbGJhY2soc3R5bGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQudG9nZ2xlU3R5bGVFbmFibGVkKHRoaXMub3duZXJTdHlsZS5pZCwgdGhpcy5u
YW1lLCBkaXNhYmxlZCwgY2FsbGJhY2suYmluZCh0aGlzLCB1c2VyQ2FsbGJhY2spKTsKLSAgICB9
Ci19Ci0KIFdlYkluc3BlY3Rvci5hdHRyaWJ1dGVzVXBkYXRlZCA9IGZ1bmN0aW9uKCkKIHsKICAg
ICB0aGlzLmRvbUFnZW50Ll9hdHRyaWJ1dGVzVXBkYXRlZC5hcHBseSh0aGlzLmRvbUFnZW50LCBh
cmd1bWVudHMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxl
c1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGVi
YXJQYW5lLmpzCmluZGV4IDZkMWI1NDEuLjgwZjFmMWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKQEAgLTcxOSwxMSArNzE5LDYgQEAg
V2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogCiAgICAg
b25wb3B1bGF0ZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24gc29ydGVyKGEs
IGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShi
Lm5hbWUpOwotICAgICAgICB9Ci0KICAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5zdHlsZVJ1bGUu
c3R5bGU7CiAKICAgICAgICAgdmFyIGhhbmRsZWRQcm9wZXJ0aWVzID0ge307CkBAIC03MzQsOCAr
NzI5LDYgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0g
ewogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFByb3BlcnRpZXMubGVuZ3RoOyArK2kp
CiAgICAgICAgICAgICB0aGlzLnVuaXF1ZVByb3BlcnRpZXMucHVzaChhbGxQcm9wZXJ0aWVzW2ld
KTsKIAotICAgICAgICB0aGlzLnVuaXF1ZVByb3BlcnRpZXMuc29ydChzb3J0ZXIpOwotCiAgICAg
ICAgIC8vIENvbGxlY3QgYWxsIHNob3J0aGFuZCBuYW1lcy4KICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLnVuaXF1ZVByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
IHZhciBwcm9wZXJ0eSA9IHRoaXMudW5pcXVlUHJvcGVydGllc1tpXTsKQEAgLTc0NSw2ICs3Mzgs
NyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICAgICAgc2hvcnRoYW5kTmFtZXNbcHJvcGVydHkuc2hvcnRoYW5kXSA9IHRydWU7
CiAgICAgICAgIH0KIAorICAgICAgICAvLyBDb2xsZWN0IGFsbCBzaG9ydGhhbmQgbmFtZXMuCiAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bmlxdWVQcm9wZXJ0aWVzLmxlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnVuaXF1ZVByb3BlcnRpZXNb
aV07CiAgICAgICAgICAgICB2YXIgZGlzYWJsZWQgPSBwcm9wZXJ0eS5kaXNhYmxlZDsKQEAgLTc4
MywxMCArNzc3LDEwIEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfSwKIAotICAgIGFkZE5ld0JsYW5r
UHJvcGVydHk6IGZ1bmN0aW9uKCkKKyAgICBhZGROZXdCbGFua1Byb3BlcnR5OiBmdW5jdGlvbihv
cHRpb25hbEluZGV4KQogICAgIHsKICAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5zdHlsZVJ1bGUu
c3R5bGU7Ci0gICAgICAgIHZhciBwcm9wZXJ0eSA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVy
dHkoc3R5bGUsIHN0eWxlLmFsbFByb3BlcnRpZXMubGVuZ3RoLCAiIiwgIiIsICIiLCAic3R5bGUi
LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHVuZGVmaW5lZCk7CisgICAgICAgIHZhciBwcm9wZXJ0eSA9
IHN0eWxlLm5ld0JsYW5rUHJvcGVydHkoKTsKICAgICAgICAgdmFyIGl0ZW0gPSBuZXcgV2ViSW5z
cGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudCh0aGlzLnN0eWxlUnVsZSwgc3R5bGUsIHBy
b3BlcnR5LCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJl
ZU91dGxpbmUuYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgICAgIGl0ZW0ubGlzdEl0ZW1FbGVtZW50
LnRleHRDb250ZW50ID0gIiI7CkBAIC04ODUsNyArODc5LDggQEAgV2ViSW5zcGVjdG9yLlN0eWxl
UHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICAgICAgbW92ZVRvTmV4dElm
TmVlZGVkLmNhbGwoc2VsZik7CiAgICAgICAgIH0KIAotICAgICAgICBXZWJJbnNwZWN0b3IuY3Nz
TW9kZWwuc2V0UnVsZVNlbGVjdG9yKHRoaXMucnVsZS5pZCwgbmV3Q29udGVudCwgdGhpcy5wYW5l
Lm5vZGUuaWQsIHN1Y2Nlc3NDYWxsYmFjaywgbW92ZVRvTmV4dElmTmVlZGVkLmJpbmQodGhpcykp
OworICAgICAgICB2YXIgZm9jdXNlZE5vZGUgPSBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRz
LmZvY3VzZWRET01Ob2RlOworICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuc2V0UnVsZVNl
bGVjdG9yKHRoaXMucnVsZS5pZCwgZm9jdXNlZE5vZGUgPyBmb2N1c2VkTm9kZS5pZCA6IDAsIG5l
d0NvbnRlbnQsIHN1Y2Nlc3NDYWxsYmFjaywgbW92ZVRvTmV4dElmTmVlZGVkLmJpbmQodGhpcykp
OwogICAgIH0sCiAKICAgICBlZGl0aW5nU2VsZWN0b3JDYW5jZWxsZWQ6IGZ1bmN0aW9uKCkKQEAg
LTEzMDEsNiArMTI5NiwxMSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50
LnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiOyIpKTsKIAorICAgICAgICBpZiAoIXRoaXMucGFy
c2VkT2spCisgICAgICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJu
b3QtcGFyc2VkLW9rIik7CisgICAgICAgIGlmICh0aGlzLnByb3BlcnR5LmluYWN0aXZlKQorICAg
ICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaW5hY3RpdmUiKTsK
KwogICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnByb3BlcnR5LnByb3BlcnR5VGV4dDsKICAg
ICB9LAogCkBAIC0xNDc3LDYgKzE0NzcsMjEgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlU
cmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS5jb21t
b25BbmNlc3RvckNvbnRhaW5lciAhPT0gdGhpcy5saXN0SXRlbUVsZW1lbnQgJiYgIXNlbGVjdGlv
blJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmlzRGVzY2VuZGFudCh0aGlzLmxpc3RJdGVt
RWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgdmFyIHRleHQgPSBldmVu
dC50YXJnZXQudGV4dENvbnRlbnQudHJpbSgpOworICAgICAgICB2YXIgb3BlblF1b3RlOworICAg
ICAgICAvLyBFeGNsdWRlIHRoZSBsYXN0IGNoYXJhY3RlciBmcm9tIHRoZSBjaGVjayBzaW5jZSBp
dCBpcyBhbGxvd2VkIHRvIGJlICI7Ii4KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0
Lmxlbmd0aCAtIDE7ICsraSkgeworICAgICAgICAgICAgdmFyIGNoID0gdGV4dC5jaGFyQXQoaSk7
CisgICAgICAgICAgICBpZiAoY2ggPT09ICI7IiAmJiAhb3BlblF1b3RlKQorICAgICAgICAgICAg
ICAgIHJldHVybjsgLy8gRG8gbm90IGhhbmRsZSBuYW1lL3ZhbHVlIHNoaWZ0cyBpZiB0aGUgcHJv
cGVydHkgaXMgY29tcG91bmQuCisgICAgICAgICAgICBpZiAoY2ggPT09ICInIiB8fCBjaCA9PT0g
IlwiIikgeworICAgICAgICAgICAgICAgIGlmICghb3BlblF1b3RlKQorICAgICAgICAgICAgICAg
ICAgICBvcGVuUXVvdGUgPSBjaDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gb3Bl
blF1b3RlKQorICAgICAgICAgICAgICAgICAgICBvcGVuUXVvdGUgPSBudWxsOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKICAgICAgICAgY29uc3Qgc3R5bGVWYWx1ZURlbGltZXRlcnMgPSAi
IFx0XG5cIic6OywvKCkiOwogICAgICAgICB2YXIgd29yZFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uu
c3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIHN0
eWxlVmFsdWVEZWxpbWV0ZXJzLCB0aGlzLmxpc3RJdGVtRWxlbWVudCk7CiAgICAgICAgIHZhciB3
b3JkU3RyaW5nID0gd29yZFJhbmdlLnRvU3RyaW5nKCk7CkBAIC0xNTU0LDE2ICsxNTY5LDExIEBA
IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogCiAg
ICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAKLSAgICAgICAgaWYgKCF0aGlzLm9yaWdp
bmFsQ1NTVGV4dCkgeworICAgICAgICBpZiAoISgib3JpZ2luYWxQcm9wZXJ0eVRleHQiIGluIHRo
aXMpKSB7CiAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgcnVsZSdzIG9yaWdpbmFsIENTUyB0
ZXh0LCBzbyBpdCBjYW4gYmUgcmVzdG9yZWQKICAgICAgICAgICAgIC8vIGlmIHRoZSBlZGl0aW5n
IGlzIGNhbmNlbGVkIGFuZCBiZWZvcmUgZWFjaCBhcHBseS4KLSAgICAgICAgICAgIHRoaXMub3Jp
Z2luYWxDU1NUZXh0ID0gdGhpcy5zdHlsZS5zdHlsZVRleHRXaXRoU2hvcnRoYW5kcygpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgQ1NTIHRl
eHQgYmVmb3JlIGFwcGx5aW5nIHVzZXIgY2hhbmdlcy4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVu
dAotICAgICAgICAgICAgLy8gbmV3IHByb3BlcnRpZXMgZnJvbSBzdGlja2luZyBhcm91bmQgaWYg
dGhlIHVzZXIgYWRkcyBvbmUsIHRoZW4gcmVtb3ZlcyBpdC4KLSAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5jc3NNb2RlbC5zZXRDU1NUZXh0KHRoaXMuc3R5bGUuaWQsIHRoaXMub3JpZ2luYWxDU1NU
ZXh0KTsKKyAgICAgICAgICAgIHRoaXMub3JpZ2luYWxQcm9wZXJ0eVRleHQgPSB0aGlzLnByb3Bl
cnR5LnByb3BlcnR5VGV4dDsKICAgICAgICAgfQotCiAgICAgICAgIHRoaXMuYXBwbHlTdHlsZVRl
eHQodGhpcy5saXN0SXRlbUVsZW1lbnQudGV4dENvbnRlbnQpOwogICAgIH0sCiAKQEAgLTE1NzQs
MjMgKzE1ODQsMTkgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLmV4cGFuZCgpOwogICAgICAgICB0aGlzLmxpc3RJ
dGVtRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgY29udGV4dC5rZXlEb3du
TGlzdGVuZXIsIGZhbHNlKTsKICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQucmVtb3ZlRXZl
bnRMaXN0ZW5lcigia2V5cHJlc3MiLCBjb250ZXh0LmtleVByZXNzTGlzdGVuZXIsIGZhbHNlKTsK
LSAgICAgICAgZGVsZXRlIHRoaXMub3JpZ2luYWxDU1NUZXh0OworICAgICAgICBkZWxldGUgdGhp
cy5vcmlnaW5hbFByb3BlcnR5VGV4dDsKICAgICB9LAogCiAgICAgZWRpdGluZ0NhbmNlbGxlZDog
ZnVuY3Rpb24oZWxlbWVudCwgY29udGV4dCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9uZXdQ
cm9wZXJ0eSkKLSAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUucmVtb3ZlQ2hpbGQodGhpcyk7
Ci0gICAgICAgIGVsc2UgaWYgKHRoaXMub3JpZ2luYWxDU1NUZXh0KSB7Ci0gICAgICAgICAgICBX
ZWJJbnNwZWN0b3IuY3NzTW9kZWwuc2V0Q1NTVGV4dCh0aGlzLnN0eWxlLmlkLCB0aGlzLm9yaWdp
bmFsQ1NTVGV4dCk7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24g
JiYgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUpCi0gICAgICAgICAgICAgICAgdGhpcy50
cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJzdHlsZSBl
ZGl0ZWQiKTsKLQotICAgICAgICAgICAgdGhpcy51cGRhdGVBbGwoKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7Ci0KKyAgICAgICAgaWYgKCJvcmlnaW5h
bFByb3BlcnR5VGV4dCIgaW4gdGhpcykKKyAgICAgICAgICAgIHRoaXMuYXBwbHlTdHlsZVRleHQo
dGhpcy5vcmlnaW5hbFByb3BlcnR5VGV4dCwgdHJ1ZSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX25ld1Byb3BlcnR5KQorICAgICAgICAgICAgICAgIHRoaXMudHJlZU91
dGxpbmUucmVtb3ZlQ2hpbGQodGhpcyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgdGhpcy51cGRhdGVUaXRsZSgpOworICAgICAgICB9CiAgICAgICAgIHRoaXMuZWRpdGluZ0Vu
ZGVkKGNvbnRleHQpOwogICAgIH0sCiAKQEAgLTE2ODMsMTMgKzE2ODksOSBAQCBXZWJJbnNwZWN0
b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghc3R5bGVUZXh0TGVu
Z3RoKSB7Ci0gICAgICAgICAgICAgICAgLy8gRG8gcmVtb3ZlIG91cnNlbHZlcyBmcm9tIFVJIHdo
ZW4gdGhlIHByb3BlcnR5IHJlbW92YWwgaXMgY29uZmlybWVkLgotICAgICAgICAgICAgICAgIHRo
aXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLnN0eWxlID0gbmV3U3R5bGU7Ci0gICAgICAgICAgICAgICAgdGhpcy5f
c3R5bGVSdWxlLnN0eWxlID0gdGhpcy5zdHlsZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuc3R5bGUgPSBuZXdTdHlsZTsKKyAgICAgICAgICAgIHRoaXMucHJvcGVydHkgPSBuZXdT
dHlsZS5wcm9wZXJ0eUF0KHRoaXMucHJvcGVydHkuaW5kZXgpOworICAgICAgICAgICAgdGhpcy5f
c3R5bGVSdWxlLnN0eWxlID0gdGhpcy5zdHlsZTsKIAogICAgICAgICAgICAgaWYgKHNlY3Rpb24g
JiYgc2VjdGlvbi5wYW5lKQogICAgICAgICAgICAgICAgIHNlY3Rpb24ucGFuZS5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoInN0eWxlIGVkaXRlZCIpOwpAQCAtMTY5OCw2ICsxNzAwLDEwIEBAIFdl
Ykluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgICAgIHRoaXMudXBkYXRlQWxsKHRydWUpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8g
QXBwZW5kIGEgIjsiIGlmIHRoZSBuZXcgdGV4dCBkb2VzIG5vdCBlbmQgaW4gIjsiLgorICAgICAg
ICAvLyBGSVhNRTogdGhpcyBkb2VzIG5vdCBoYW5kbGUgdHJhaWxpbmcgY29tbWVudHMuCisgICAg
ICAgIGlmIChzdHlsZVRleHQubGVuZ3RoICYmICEvO1xzKiQvLnRlc3Qoc3R5bGVUZXh0KSkKKyAg
ICAgICAgICAgIHN0eWxlVGV4dCArPSAiOyI7CiAgICAgICAgIHRoaXMucHJvcGVydHkuc2V0VGV4
dChzdHlsZVRleHQsIGNhbGxiYWNrLmJpbmQodGhpcykpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKaW5kZXggYjI2Yjc0OC4uZDRlNDA5NCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKQEAgLTQyMTksNiArNDIx
OSw3IEBAIGEud29ya2VyLWl0ZW0gewogICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICB0ZXh0LWRl
Y29yYXRpb246IG5vbmU7CiB9CisKIC5zdHlsZXMtc2VjdGlvbiB7CiAgICAgcGFkZGluZzogMnB4
IDJweCA0cHggNHB4OwogICAgIG1pbi1oZWlnaHQ6IDE4cHg7CkBAIC00MjM2LDYgKzQyMzcsMTYg
QEAgYS53b3JrZXItaXRlbSB7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MCwgMjQwLCAy
NDApOwogfQogCisuc3R5bGVzLXNlY3Rpb24gLnByb3BlcnRpZXMgLm5vdC1wYXJzZWQtb2sgewor
ICAgIG9wYWNpdHk6IDAuNzsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjM3LCAyNTUsIDEw
MCk7Cit9CisKKy5zdHlsZXMtc2VjdGlvbiAucHJvcGVydGllcyAuaW5hY3RpdmUgeworICAgIG9w
YWNpdHk6IDAuNzsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjEyLCAyMTIsIDIxMik7Cit9
CisKIC5zdHlsZXMtc2VjdGlvbiAuaGVhZGVyIHsKICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwog
ICAgIC13ZWJraXQtYmFja2dyb3VuZC1vcmlnaW46IHBhZGRpbmc7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggYzY4MTUzMS4uM2ExNWQwOCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtMTM0LDYgKzEzNCw3
IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUHJv
ZmlsZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9IkhlYXBTbmFwc2hvdFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRPTUFnZW50LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJDU1NBZ2VudC5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSW5qZWN0ZWRTY3JpcHQuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkluamVjdGVk
U2NyaXB0QWNjZXNzLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJUaW1lbGluZUFnZW50LmpzIj48L3NjcmlwdD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>