<?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>96917</bug_id>
          
          <creation_ts>2012-09-17 06:59:10 -0700</creation_ts>
          <short_desc>Web Inspector: [WebGL] -&gt; [Canvas] Rename WebGLAgent to CanvasAgent</short_desc>
          <delta_ts>2012-09-19 06:07:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>97083</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Andrey Adaikin">aandrey</reporter>
          <assigned_to name="Andrey Adaikin">aandrey</assigned_to>
          <cc>abarth</cc>
    
    <cc>abecsi</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rakuco</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>721888</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-09-17 06:59:10 -0700</bug_when>
    <thetext>Rename WebGLAgent* and WebGLInstrumentation* files to Canvas* as we will support both 2D and 3D/WebGL canvas instrumentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721950</commentid>
    <comment_count>1</comment_count>
      <attachid>164397</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-09-17 08:20:55 -0700</bug_when>
    <thetext>Created attachment 164397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721954</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-17 08:24:04 -0700</bug_when>
    <thetext>Attachment 164397 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/insp...&quot; exit_code: 1
Source/WebCore/inspector/InjectedScriptCanvasModule.h:59:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScriptCanvasModule.cpp:97:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721958</commentid>
    <comment_count>3</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-09-17 08:30:16 -0700</bug_when>
    <thetext>Review in Rietveld: https://codereview.appspot.com/6495141/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723366</commentid>
    <comment_count>4</comment_count>
      <attachid>164397</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 01:08:03 -0700</bug_when>
    <thetext>Comment on attachment 164397
Patch

Clearing flags on attachment: 164397

Committed r128976: &lt;http://trac.webkit.org/changeset/128976&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723367</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 01:08:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723383</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 01:27:56 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 97083</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723433</commentid>
    <comment_count>7</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-09-19 03:32:36 -0700</bug_when>
    <thetext>Compilation breaks on the InspectorAllInOne.o file, although InspectorAllInOne.cpp was updated in the patch. Probably a clean rebuild is needed on the bot, rather than an incremental build?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723467</commentid>
    <comment_count>8</comment_count>
      <attachid>164718</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-09-19 05:05:38 -0700</bug_when>
    <thetext>Created attachment 164718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723471</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 05:09:57 -0700</bug_when>
    <thetext>Attachment 164718 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/insp...&quot; exit_code: 1
Source/WebCore/inspector/InjectedScriptCanvasModule.h:59:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InjectedScriptCanvasModule.cpp:97:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723488</commentid>
    <comment_count>10</comment_count>
      <attachid>164718</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 06:06:56 -0700</bug_when>
    <thetext>Comment on attachment 164718
Patch

Clearing flags on attachment: 164718

Committed r128992: &lt;http://trac.webkit.org/changeset/128992&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723489</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 06:07:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164397</attachid>
            <date>2012-09-17 08:20:55 -0700</date>
            <delta_ts>2012-09-19 05:05:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96917-20120917192022.patch</filename>
            <type>text/plain</type>
            <size>260896</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4NzYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY3ZjViYWUyMzVhODlk
YjFlODljYzQzYWUwYzM3ODczMjk1ZjE1Yi4uYzVhNTk3YzAzY2QxNjFjOTg3MTViMWQyMzMxMjM0
OGVhYjlhM2VlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0wOS0xNyAgQW5k
cmV5IEFkYWlraW4gIDxhYW5kcmV5QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBbV2ViR0xdIC0+IFtDYW52YXNdIFJlbmFtZSBXZWJHTEFnZW50IHRvIENhbnZhc0FnZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjkxNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBX
ZWJHTEFnZW50KiBhbmQgV2ViR0xJbnN0cnVtZW50YXRpb24qIGZpbGVzIHRvIENhbnZhcyogYXMg
d2Ugd2lsbCBzdXBwb3J0IGJvdGggMkQgYW5kIDNEL1dlYkdMIGNhbnZhcyBpbnN0cnVtZW50YXRp
b24uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLnByaToKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdl
dC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgICogaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmNwcC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6OkluamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlOjptb2R1bGVGb3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdENhbnZhc01vZHVsZTo6c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlOjp3cmFwV2ViR0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlOjpjYXB0dXJlRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6OmRyb3BUcmFjZUxvZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZTo6dHJhY2VMb2cpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6OnJlcGxheVRyYWNlTG9nKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
LmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3Vy
Y2UuanM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRXZWJHTE1vZHVsZVNvdXJjZS5qcy4KKyAgICAgICAgKC4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5jcHAu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENhbnZhc0FnZW50U3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6Okluc3BlY3RvckNhbnZhc0FnZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojp+SW5zcGVjdG9yQ2FudmFz
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldEZyb250
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjbGVhckZyb250
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpyZXN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRyb3BUcmFjZUxvZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FwdHVyZUZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpnZXRUcmFjZUxvZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVwbGF5VHJhY2VMb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OndyYXBXZWJHTFJlbmRlcmluZ0NvbnRleHRGb3JJbnN0
cnVtZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6Omlu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlRm9yVHJhY2VMb2dJZCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhc0FnZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChJbnNwZWN0b3JDYW52YXNBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
YW52YXNBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0Fn
ZW50OjplbmFibGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzSW5zdHJ1
bWVudGF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3cmFwV2ViR0xSZW5kZXJpbmdDb250
ZXh0Rm9ySW5zdHJ1bWVudGF0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNw
ZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50
cy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnN0cnVtZW50aW5n
QWdlbnRzOjpJbnN0cnVtZW50aW5nQWdlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1l
bnRpbmdBZ2VudHM6Omluc3BlY3RvckNhbnZhc0FnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3RydW1lbnRpbmdBZ2VudHM6OnNldEluc3BlY3RvckNhbnZhc0FnZW50KToKKyAgICAgICAgKElu
c3RydW1lbnRpbmdBZ2VudHMpOgorICAgICAgICAqIGluc3BlY3Rvci9jb21waWxlLWZyb250LWVu
ZC5weToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3Lmpz
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJHTFBy
b2ZpbGVWaWV3LmpzLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVWaWV3KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVmlldy5wcm90b3R5cGUuZGlzcG9z
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVZpZXcucHJvdG90eXBlLmdl
dCBzdGF0dXNCYXJJdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVZp
ZXcucHJvdG90eXBlLmdldCBwcm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQ
cm9maWxlVmlldy5wcm90b3R5cGUud2FzU2hvd24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNh
bnZhc1Byb2ZpbGVWaWV3LnByb3RvdHlwZS53aWxsSGlkZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ2FudmFzUHJvZmlsZVZpZXcucHJvdG90eXBlLl9zaG93VHJhY2VMb2cpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVWaWV3LnByb3RvdHlwZS5fb25UcmFjZUxvZ0l0ZW1D
bGljay5kaWRSZXBsYXlUcmFjZUxvZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFzUHJv
ZmlsZVZpZXcucHJvdG90eXBlLl9vblRyYWNlTG9nSXRlbUNsaWNrKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFz
UHJvZmlsZVR5cGUucHJvdG90eXBlLmdldCBidXR0b25Ub29sdGlwKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZC5kaWRTdGFy
dENhcHR1cmluZ0ZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlw
ZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFz
UHJvZmlsZVR5cGUucHJvdG90eXBlLmdldCB0cmVlSXRlbVRpdGxlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUuZ2V0IGRlc2NyaXB0aW9uKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUucmVzZXQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlLnByb3RvdHlwZS5jcmVhdGVU
ZW1wb3JhcnlQcm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlw
ZS5wcm90b3R5cGUuY3JlYXRlUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFz
UHJvZmlsZUhlYWRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZUhlYWRl
ci5wcm90b3R5cGUudHJhY2VMb2dJZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFzUHJv
ZmlsZUhlYWRlci5wcm90b3R5cGUuY3JlYXRlU2lkZWJhclRyZWVFbGVtZW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5jcmVhdGVWaWV3KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHBlcmltZW50c1NldHRp
bmdzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmM6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9jYW52YXNQcm9maWxlci5jc3M6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3dlYkdMUHJvZmlsZXIuY3NzLgorICAg
ICAgICAoLmNhbnZhcy1wcm9maWxlLXZpZXcpOgorICAgICAgICAoLmNhbnZhcy10cmFjZS1sb2cp
OgorICAgICAgICAoLmNhbnZhcy10cmFjZS1sb2cgZGl2KToKKyAgICAgICAgKCNjYW52YXMtcmVw
bGF5LWltYWdlLWNvbnRhaW5lcik6CisgICAgICAgICgjY2FudmFzLXJlcGxheS1pbWFnZSk6CisK
IDIwMTItMDktMTcgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbm93IHdoZW4gd2UgY2FuIGRldGVjdCBpbnN0cnVt
ZW50ZWQgY2xhc3NlcyB3ZSBjYW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTI4MTIzYzI5ZGM0
ZmJlOGUyMWMwNDJiOTY1ZWY4ZDA0YmFlYWNlMi4uOGVkNWFmOWMxZmRkMTcyOTg1ODk4MTMyOTc5
MTZkMzFlNzczZGJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE1MzgsMTUgKzE1MzgsMTYg
QEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3Rvcnku
Y3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAogICAgIGluc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdEJhc2UuY3BwCisgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlLmNwcAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCiAgICAgaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRNb2R1bGUuY3BwCi0gICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuY3Bw
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhc2VB
Z2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
QWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5jcHAKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcApAQCAtMTU3NCw3ICsxNTc1LDYgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5j
cHAKLSAgICBpbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5jcHAKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2Vu
dHMuY3BwCiAgICAgaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuY3BwCkBAIC0y
Nzc1LDE1ICsyNzc1LDEzIEBAIEFERF9DVVNUT01fQ09NTUFORCgKIExJU1QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5qZWN0ZWRTY3JpcHRT
b3VyY2UuaCkKIAogCi0jIEdlbmVyYXRlIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2Uu
aAotSUYgKEVOQUJMRV9XRUJHTCkKLSAgICBBRERfQ1VTVE9NX0NPTU1BTkQoCi0gICAgICAgIE9V
VFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZVNvdXJjZS5oCi0gICAgICAgIE1BSU5fREVQRU5ERU5DWSBpbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcwotICAgICAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRB
QkxFfSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IveHhkLnBsIEluamVjdGVkU2NyaXB0V2ViR0xN
b2R1bGVTb3VyY2VfanMgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2Vi
R0xNb2R1bGVTb3VyY2UuanMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaAotICAgICAgICBWRVJCQVRJTSkKLSAgICBMSVNUKEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luamVj
dGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaCkKLUVORElGICgpCisjIEdlbmVyYXRlIEluamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmgKK0FERF9DVVNUT01fQ09NTUFORCgKKyAgICBP
VVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlU291cmNlLmgKKyAgICBNQUlOX0RFUEVOREVOQ1kgaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0Q2FudmFzTW9kdWxlU291cmNlLmpzCisgICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0g
JHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVs
ZVNvdXJjZV9qcyAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNN
b2R1bGVTb3VyY2UuanMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luamVjdGVkU2Ny
aXB0Q2FudmFzTW9kdWxlU291cmNlLmgKKyAgICBWRVJCQVRJTSkKK0xJU1QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5qZWN0ZWRTY3JpcHRD
YW52YXNNb2R1bGVTb3VyY2UuaCkKIAogCiBNQUtFX0hBU0hfVE9PTFMoJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vQ29sb3JEYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZDFm
MDk3MmNkMTc5ODkyZmM1NGI4OWU1NmFlYzFlZWUzYmUzM2NkNS4uZjc3NTU1MjM5MWZmODQxNGNi
ZTQ1ZmY4MGM4MGE4ZGNhZjlhZDZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC0xMDQ0LDEwICsxMDQ0LDEwIEBAIGFsbCA6IEluamVjdGVkU2NyaXB0U291cmNlLmgKIEluamVj
dGVkU2NyaXB0U291cmNlLmggOiBJbmplY3RlZFNjcmlwdFNvdXJjZS5qcwogCXBlcmwgJChXZWJD
b3JlKS9pbnNwZWN0b3IveHhkLnBsIEluamVjdGVkU2NyaXB0U291cmNlX2pzICQoV2ViQ29yZSkv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzIEluamVjdGVkU2NyaXB0U291cmNlLmgK
IAotYWxsIDogSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5oCithbGwgOiBJbmplY3Rl
ZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oCiAKLUluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVT
b3VyY2UuaCA6IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMKLQlwZXJsICQoV2Vi
Q29yZSkvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlX2pz
ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMg
SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5oCitJbmplY3RlZFNjcmlwdENhbnZhc01v
ZHVsZVNvdXJjZS5oIDogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMKKwlwZXJs
ICQoV2ViQ29yZSkvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNv
dXJjZV9qcyAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNv
dXJjZS5qcyBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oCiAKIC1pbmNsdWRlICQo
SlNfRE9NX0hFQURFUlM6Lmg9LmRlcCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVy
aXZlZFNvdXJjZXMucHJpIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCmluZGV4
IDcxNzkzMGMxNGFiOTIyZjlmODU5YjBlZmQ2MmFiZDQ1ZDBmZDk4MmEuLjkzYjBhZWM5YjIyMWY2
NzhkNWZiYzE0MWVkZTI3MThhMzU2OGVhMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkK
QEAgLTYxLDcgKzYxLDcgQEAgSU5TUEVDVE9SX09WRVJMQVlfUEFHRSA9ICQkUFdEL2luc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5UGFnZS5odG1sCiAKIElOSkVDVEVEX1NDUklQVF9TT1VSQ0UgPSAk
JFBXRC9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKIAotSU5KRUNURURfU0NSSVBU
X1dFQkdMX01PRFVMRV9TT1VSQ0UgPSAkJFBXRC9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJH
TE1vZHVsZVNvdXJjZS5qcworSU5KRUNURURfU0NSSVBUX0NBTlZBU19NT0RVTEVfU09VUkNFID0g
JCRQV0QvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzCiAKIFhQ
QVRIQklTT04gPSAkJFBXRC94bWwvWFBhdGhHcmFtbWFyLnkKIApAQCAtNzg3LDE5ICs3ODcsMTkg
QEAgaW5zcGVjdG9yT3ZlcmxheVBhZ2UuY29tbWFuZHMgPSBwZXJsICQkUFdEL2luc3BlY3Rvci94
eGQucGwgSW5zcGVjdG9yT3ZlcmxheVBhZ2UKIGluc3BlY3Rvck92ZXJsYXlQYWdlLmFkZF9vdXRw
dXRfdG9fc291cmNlcyA9IGZhbHNlCiBHRU5FUkFUT1JTICs9IGluc3BlY3Rvck92ZXJsYXlQYWdl
CiAKLSMgR0VORVJBVE9SIDItYTogaW5zcGVjdG9yIGluamVjdGVkIHNjcmlwdCBzb3VyY2UgY29t
cGlsZXIKKyMgR0VORVJBVE9SIDI6IGluc3BlY3RvciBpbmplY3RlZCBzY3JpcHQgc291cmNlIGNv
bXBpbGVyCiBpbmplY3RlZFNjcmlwdFNvdXJjZS5vdXRwdXQgPSBJbmplY3RlZFNjcmlwdFNvdXJj
ZS5oCiBpbmplY3RlZFNjcmlwdFNvdXJjZS5pbnB1dCA9IElOSkVDVEVEX1NDUklQVF9TT1VSQ0UK
IGluamVjdGVkU2NyaXB0U291cmNlLmNvbW1hbmRzID0gcGVybCAkJFBXRC9pbnNwZWN0b3IveHhk
LnBsIEluamVjdGVkU2NyaXB0U291cmNlX2pzICR7UU1BS0VfRklMRV9JTn0gJHtRTUFLRV9GSUxF
X09VVH0KIGluamVjdGVkU2NyaXB0U291cmNlLmFkZF9vdXRwdXRfdG9fc291cmNlcyA9IGZhbHNl
CiBHRU5FUkFUT1JTICs9IGluamVjdGVkU2NyaXB0U291cmNlCiAKLSMgR0VORVJBVE9SIDItYjog
aW5zcGVjdG9yIHdlYmdsIGluamVjdGVkIHNjcmlwdCBzb3VyY2UgY29tcGlsZXIKLUluamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGVTb3VyY2Uub3V0cHV0ID0gSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVs
ZVNvdXJjZS5oCi1JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmlucHV0ID0gSU5KRUNU
RURfU0NSSVBUX1dFQkdMX01PRFVMRV9TT1VSQ0UKLUluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVT
b3VyY2UuY29tbWFuZHMgPSBwZXJsICQkUFdEL2luc3BlY3Rvci94eGQucGwgSW5qZWN0ZWRTY3Jp
cHRXZWJHTE1vZHVsZVNvdXJjZV9qcyAke1FNQUtFX0ZJTEVfSU59ICR7UU1BS0VfRklMRV9PVVR9
Ci1JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmFkZF9vdXRwdXRfdG9fc291cmNlcyA9
IGZhbHNlCi1HRU5FUkFUT1JTICs9IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UKKyMg
R0VORVJBVE9SIDM6IGluc3BlY3RvciBjYW52YXMgaW5qZWN0ZWQgc2NyaXB0IHNvdXJjZSBjb21w
aWxlcgorSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2Uub3V0cHV0ID0gSW5qZWN0ZWRT
Y3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuaAorSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3Vy
Y2UuaW5wdXQgPSBJTkpFQ1RFRF9TQ1JJUFRfQ0FOVkFTX01PRFVMRV9TT1VSQ0UKK0luamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmNvbW1hbmRzID0gcGVybCAkJFBXRC9pbnNwZWN0b3Iv
eHhkLnBsIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlX2pzICR7UU1BS0VfRklMRV9J
Tn0gJHtRTUFLRV9GSUxFX09VVH0KK0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmFk
ZF9vdXRwdXRfdG9fc291cmNlcyA9IGZhbHNlCitHRU5FUkFUT1JTICs9IEluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlU291cmNlCiAKICMgR0VORVJBVE9SIDQ6IENTUyBncmFtbWFyCiBjc3NiaXNv
bi5vdXRwdXQgPSAke1FNQUtFX0ZJTEVfQkFTRX0uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4
IDBlYjU0M2Q4MGM2MjcxYjQxZGMyZGJkNzRlYzIxNTk5YWZiMmU0MDEuLjBkN2JlODA5OTBiN2M3
NTJmZTE1OGViZjk2YzkwYThkYWY3MzIwZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC03MjEs
MTAgKzcyMSwxMCBAQCBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qczogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZQogRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oOiBEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcAogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9J
bnNwZWN0b3JPdmVybGF5UGFnZS5oOiAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVy
bGF5UGFnZS5odG1sCiAJJChBTV9WX0dFTikkKFBFUkwpICQoV2ViQ29yZSkvaW5zcGVjdG9yL3h4
ZC5wbCBJbnNwZWN0b3JPdmVybGF5UGFnZV9odG1sICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3Bl
Y3Rvck92ZXJsYXlQYWdlLmh0bWwgJChHRU5TT1VSQ0VTX1dFQkNPUkUpL0luc3BlY3Rvck92ZXJs
YXlQYWdlLmgKK0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1
bGVTb3VyY2UuaDogJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1
bGVTb3VyY2UuanMKKwkkKEFNX1ZfR0VOKSQoUEVSTCkgJChXZWJDb3JlKS9pbnNwZWN0b3IveHhk
LnBsIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlX2pzICQoV2ViQ29yZSkvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzICQoR0VOU09VUkNFU19XRUJD
T1JFKS9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oCiBEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0luamVjdGVkU2NyaXB0U291cmNlLmg6ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0U291cmNlLmpzCiAJJChBTV9WX0dFTikkKFBFUkwpICQoV2ViQ29yZSkvaW5zcGVj
dG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlwdFNvdXJjZV9qcyAkKFdlYkNvcmUpL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdFNvdXJjZS5qcyAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvSW5qZWN0ZWRTY3Jp
cHRTb3VyY2UuaAotRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbmplY3RlZFNjcmlwdFdlYkdMTW9k
dWxlU291cmNlLmg6ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1
bGVTb3VyY2UuanMKLQkkKEFNX1ZfR0VOKSQoUEVSTCkgJChXZWJDb3JlKS9pbnNwZWN0b3IveHhk
LnBsIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2VfanMgJChXZWJDb3JlKS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcyAkKEdFTlNPVVJDRVNfV0VCQ09S
RSkvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5oCiAKIGlmIEVOQUJMRV9XRUJfQVVE
SU8KICMgSW5zdGFsbGluZyBIUlRGIGRhdGFiYXNlIHdhdiBmaWxlcwpAQCAtOTk1LDggKzk5NSw4
IEBAIEVYVFJBX0RJU1QgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRp
dHlOYW1lcy5pbiBcCiAJU291cmNlL1dlYkNvcmUvaWN1L0xJQ0VOU0UgXAogCVNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IFwKKwlTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMgXAogCVNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyBcCi0JU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMgXAogCVNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBcCiAJU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvci0xLjAuanNvbiBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXlQYWdlLmh0bWwgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggMWYyNGI3MzU1YjYzNzJjOGYyMDM3YmI1ZjAyYzJkNmUzNDVlNTA1ZC4uZTUyMTNiMWEy
MjIxOGQxNjFjZGM1MjcyNDM3ZGRiOGQ0N2YxNWVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCkBAIC0xOSw4ICsxOSw4IEBAIHdlYmNvcmVfYnVpbHRfc291cmNlcyArPSBcCiAJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9IVE1MRW50aXR5VGFibGUuY3BwIFwKIAlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0hUTUxOYW1lcy5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSFRNTE5h
bWVzLmggXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1
bGVTb3VyY2UuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbmplY3RlZFNjcmlwdFNvdXJj
ZS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVT
b3VyY2UuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZC5jcHAg
XApAQCAtMzYzMywyMCArMzYzMywyMyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0QmFzZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0SG9zdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdEhvc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
TWFuYWdlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1h
bmFnZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TW9kdWxl
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TW9kdWxlLmgg
XAotCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUu
aCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmggXAogCVNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggXAogCVNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYXNlQWdlbnQuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFzZUFnZW50LmggXAorCVNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ2FudmFzSW5zdHJ1bWVudGF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2xpZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcCBcCkBAIC0zNzEwLDkgKzM3MTMsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggXAog
CVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggXAotCVNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JXZWJHTEFnZW50LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvcldlYkdMQWdlbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvcldlYkdMSW5zdHJ1bWVudGF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JXb3JrZXJBZ2VudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yV29ya2VyUmVzb3VyY2UuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBlNjVhYWJjY2YzYTdlODhkMDMx
NTEzY2IwODI1NGI5Y2Q1ZjI4YmEzLi4wNTQ4ZWU1NGY0YTA4ZmUyNzJlZTQzNDI4YWJmOWVlYTE0
ZDkyODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTczMiwxNCArNzMyLDE1IEBAIFNPVVJDRVMgKz0gXAog
ICAgIGluc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBc
CisgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcCBcCiAgICAgaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNj
cmlwdE1hbmFnZXIuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3Bw
IFwKLSAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5jcHAgXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFzZUFnZW50
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBcCisgICAgaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNs
aWVudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXApAQCAtNzY2LDcgKzc2Nyw2IEBA
IFNPVVJDRVMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuY3Bw
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgXAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIFwKLSAgICBpbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xB
Z2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgXAogICAg
IGluc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcCBcCiAgICAgaW5zcGVjdG9yL01lbW9y
eUluc3RydW1lbnRhdGlvbkltcGwuY3BwIFwKQEAgLTE4NTYsMTMgKzE4NTYsMTUgQEAgSEVBREVS
UyArPSBcCiAgICAgaW5zcGVjdG9yL0lkZW50aWZpZXJzRmFjdG9yeS5oIFwKICAgICBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHQuaCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5o
IFwKKyAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaCBcCiAgICAgaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmggXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5oIFwKLSAg
ICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oIFwKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFzZUFnZW50LmggXAorICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzSW5zdHJ1bWVudGF0aW9uLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xl
QWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVJbnN0cnVtZW50YXRpb24u
aCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBcCkBAIC0xODkxLDggKzE4
OTMsNiBAQCBIRUFERVJTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5o
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yLmggXAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggXAotICAgIGluc3BlY3Rvci9JbnNwZWN0b3JX
ZWJHTEFnZW50LmggXAotICAgIGluc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlv
bi5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaCBcCiAgICAgaW5zcGVj
dG9yL0luc3RydW1lbnRpbmdBZ2VudHMuaCBcCiAgICAgaW5zcGVjdG9yL01lbW9yeUluc3RydW1l
bnRhdGlvbkltcGwuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4
IDRiMWU0ZGYxOTcxMTVjMTJlZDc2MjNjZjU3MTI5NDAzMzkwNTBmZTIuLjE3MTIyMzMxNDEwYzZi
NTdmZjM0YTUxMjI4ZTIxMDkyOTgyYjQxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwCkBAIC00NjEsNTAgKzQ2MSw1MCBAQAogICAgICAgXQogICAgIH0sCiAgICAgewot
ICAgICAgJ3RhcmdldF9uYW1lJzogJ2luamVjdGVkX3NjcmlwdF9zb3VyY2UnLAorICAgICAgJ3Rh
cmdldF9uYW1lJzogJ2luamVjdGVkX2NhbnZhc19zY3JpcHRfc291cmNlJywKICAgICAgICd0eXBl
JzogJ25vbmUnLAogICAgICAgJ2FjdGlvbnMnOiBbCiAgICAgICAgIHsKLSAgICAgICAgICAnYWN0
aW9uX25hbWUnOiAnZ2VuZXJhdGVJbmplY3RlZFNjcmlwdFNvdXJjZScsCisgICAgICAgICAgJ2Fj
dGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UnLAog
ICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0U291cmNlLmpzJywKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRDYW52YXNNb2R1bGVTb3VyY2UuanMnLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ291dHB1
dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0lu
amVjdGVkU2NyaXB0U291cmNlLmgnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFU
RV9ESVIpL3dlYmtpdC9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oJywKICAgICAg
ICAgICBdLAogICAgICAgICAgICdtc3ZzX2N5Z3dpbl9zaGVsbCc6IDAsCiAgICAgICAgICAgJ2Fj
dGlvbic6IFsKICAgICAgICAgICAgICc8KHBlcmxfZXhlKScsCiAgICAgICAgICAgICAnLi4vaW5z
cGVjdG9yL3h4ZC5wbCcsCi0gICAgICAgICAgICAnSW5qZWN0ZWRTY3JpcHRTb3VyY2VfanMnLAor
ICAgICAgICAgICAgJ0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlX2pzJywKICAgICAg
ICAgICAgICc8QChfaW5wdXRzKScsCiAgICAgICAgICAgICAnPEAoX291dHB1dHMpJwogICAgICAg
ICAgIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnR2VuZXJhdGluZyBJbmplY3RlZFNjcmlwdFNv
dXJjZS5oIGZyb20gSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMnLAorICAgICAgICAgICdtZXNzYWdl
JzogJ0dlbmVyYXRpbmcgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuaCBmcm9tIElu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzJywKICAgICAgICAgfSwKICAgICAgIF0K
ICAgICB9LAogICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdpbmplY3RlZF93ZWJnbF9zY3Jp
cHRfc291cmNlJywKKyAgICAgICd0YXJnZXRfbmFtZSc6ICdpbmplY3RlZF9zY3JpcHRfc291cmNl
JywKICAgICAgICd0eXBlJzogJ25vbmUnLAogICAgICAgJ2FjdGlvbnMnOiBbCiAgICAgICAgIHsK
LSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVJbmplY3RlZFNjcmlwdFdlYkdMTW9k
dWxlU291cmNlJywKKyAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVJbmplY3RlZFNj
cmlwdFNvdXJjZScsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICcuLi9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcycsCisgICAgICAgICAgICAn
Li4vaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzJywKICAgICAgICAgICBdLAogICAg
ICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9E
SVIpL3dlYmtpdC9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmgnLAorICAgICAgICAg
ICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbmplY3RlZFNjcmlwdFNvdXJj
ZS5oJywKICAgICAgICAgICBdLAogICAgICAgICAgICdtc3ZzX2N5Z3dpbl9zaGVsbCc6IDAsCiAg
ICAgICAgICAgJ2FjdGlvbic6IFsKICAgICAgICAgICAgICc8KHBlcmxfZXhlKScsCiAgICAgICAg
ICAgICAnLi4vaW5zcGVjdG9yL3h4ZC5wbCcsCi0gICAgICAgICAgICAnSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZV9qcycsCisgICAgICAgICAgICAnSW5qZWN0ZWRTY3JpcHRTb3VyY2Vf
anMnLAogICAgICAgICAgICAgJzxAKF9pbnB1dHMpJywKICAgICAgICAgICAgICc8QChfb3V0cHV0
cyknCiAgICAgICAgICAgXSwKLSAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIEluamVj
dGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaCBmcm9tIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1
bGVTb3VyY2UuanMnLAorICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5qZWN0ZWRT
Y3JpcHRTb3VyY2UuaCBmcm9tIEluamVjdGVkU2NyaXB0U291cmNlLmpzJywKICAgICAgICAgfSwK
ICAgICAgIF0KICAgICB9LApAQCAtMTIwMCw4ICsxMjAwLDggQEAKICAgICAgICAgJ3dlYmNvcmVf
YmluZGluZ3Nfc291cmNlcycsCiAgICAgICAgICdpbnNwZWN0b3Jfb3ZlcmxheV9wYWdlJywKICAg
ICAgICAgJ2luc3BlY3Rvcl9wcm90b2NvbF9zb3VyY2VzJywKKyAgICAgICAgJ2luamVjdGVkX2Nh
bnZhc19zY3JpcHRfc291cmNlJywKICAgICAgICAgJ2luamVjdGVkX3NjcmlwdF9zb3VyY2UnLAot
ICAgICAgICAnaW5qZWN0ZWRfd2ViZ2xfc2NyaXB0X3NvdXJjZScsCiAgICAgICAgICdkZWJ1Z2dl
cl9zY3JpcHRfc291cmNlJywKICAgICAgICAgJy4uLy4uL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmd5cC9KYXZhU2NyaXB0Q29yZS5neXA6eWFycicsCiAgICAgICAgICcuLi8uLi9XVEYv
V1RGLmd5cC9XVEYuZ3lwOnd0ZicsCkBAIC0xMzI3LDggKzEzMjcsOCBAQAogICAgICAgJ3R5cGUn
OiAnbm9uZScsCiAgICAgICAnZGVwZW5kZW5jaWVzJzogWwogICAgICAgICAnZGVidWdnZXJfc2Ny
aXB0X3NvdXJjZScsCisgICAgICAgICdpbmplY3RlZF9jYW52YXNfc2NyaXB0X3NvdXJjZScsCiAg
ICAgICAgICdpbmplY3RlZF9zY3JpcHRfc291cmNlJywKLSAgICAgICAgJ2luamVjdGVkX3dlYmds
X3NjcmlwdF9zb3VyY2UnLAogICAgICAgICAnaW5zcGVjdG9yX292ZXJsYXlfcGFnZScsCiAgICAg
ICAgICdpbnNwZWN0b3JfcHJvdG9jb2xfc291cmNlcycsCiAgICAgICAgICd3ZWJjb3JlX2JpbmRp
bmdzX3NvdXJjZXMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDQwODUzMTE5ZDQ2MmNjYWU4ZjMwYjIy
YTRlZjk2ZDVjMjFhNTJjOWYuLmEyNGUyOTAzYjE3NTM5ZDlhMGQwNGY2MzQwNTYyOWVkYmFjYzUz
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI4NTQsMjAgKzI4NTQsMjMgQEAKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0QmFzZS5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEJhc2UuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlLmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3Bw
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgnLAogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdE1vZHVsZS5oJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRXZWJHTE1vZHVsZS5jcHAnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdFdlYkdMTW9kdWxlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JBZ2Vu
dC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JCYXNlQWdlbnQu
Y3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCcsCisgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb24uaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvckNsaWVudC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb25z
b2xlQWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFn
ZW50LmgnLApAQCAtMjkyNCw5ICsyOTI3LDYgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291
cmNlLmgnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEFnZW50LmNwcCcs
Ci0gICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvcldlYkdMQWdlbnQuaCcsCi0gICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvcldlYkdMSW5zdHJ1bWVudGF0aW9uLmgnLAogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5jcHAnLApAQCAtNjQ5Myw3ICs2NDkzLDcgQEAKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRFZGl0b3IuY3NzJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRQcm9tcHQuY3NzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL3RpbWVsaW5lUGFuZWwuY3NzJywKLSAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL3dlYkdMUHJvZmlsZXIuY3NzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL2NhbnZhc1Byb2ZpbGVyLmNzcycsCiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJp
bnNwZWN0b3JfZWxlbWVudHNfanNfZmlsZXMnOiBbCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9DU1NOYW1lZEZsb3dDb2xsZWN0aW9uc1ZpZXcuanMnLApAQCAtNjU3MSw3ICs2NTcx
LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZUxhdW5jaGVyVmlldy5q
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Ub3BEb3duUHJvZmlsZURhdGFH
cmlkVHJlZS5qcycsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJHTFByb2Zp
bGVWaWV3LmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2Zp
bGVWaWV3LmpzJywKICAgICAgICAgXSwKIAogICAgICAgICAnd2ViaW5zcGVjdG9yX2F1ZGl0c19q
c19maWxlcyc6IFsKQEAgLTcyNjcsOCArNzI2Nyw4IEBACiAgICAgICAgICAgICAnPChQUk9EVUNU
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9IVE1MRW50aXR5VGFibGUuY3BwJywKICAgICAg
ICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0hUTUxOYW1lcy5j
cHAnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SGVhZGVyRGV0ZWN0aW9uLmgnLAorICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuaCcsCiAgICAg
ICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbmplY3RlZFNj
cmlwdFNvdXJjZS5oJywKLSAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJDb3JlL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaCcsCiAgICAgICAgICAg
ICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5jcHAnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCcsCiAgICAgICAgICAgICAn
PChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCAwNjI3NGI5NGJmYzkwMzU1MzNhODYxNGRlMTcyNmNjNzE1MDVjYzIxLi45YTZlYmFi
ZmY5MzAzYjk4NTg4NTM0ZDFlYTRhYjNmM2ZhMjAyZmFiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNTkwLDExICs1OTAsMTEgQEAKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iJChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xJbmplY3RlZFNjcmlw
dFNvdXJjZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
alwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xJbmplY3RlZFNjcmlwdENhbnZhc01vZHVs
ZVNvdXJjZS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9
IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJj
ZXNcSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpA
QCAtNzQ1NzksNyArNzQ1NzksNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCIKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAi
CiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMy
IgpAQCAtNzQ1OTksMTEgKzc0NTk5LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0
ZWRTY3JpcHRIb3N0LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRT
Y3JpcHRDYW52YXNNb2R1bGUuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0TWFuYWdlci5jcHAiCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCIKIAkJCQk+
CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCkBAIC03
NDYyMywxMSArNzQ2MjMsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlw
dE1hbmFnZXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlw
dEhvc3QuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIgogCQkJCT4KIAkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKQEAgLTc0NjQ3LDExICs3
NDY0NywxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0TW9kdWxlLmgi
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgi
CiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3Bl
Y3RvclxJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgogCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgpAQCAtNzQ2NzEsNyArNzQ2NzEs
NyBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuaCIK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1vZHVsZS5oIgog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkBAIC03NDc4Myw2ICs3NDc4MywzNCBAQAogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
KwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXElu
c3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQ2xpZW50LmNwcCIK
IAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCkBAIC03NTQ5OSwzNCArNzU1MjcsNiBAQAog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcSW5zcGVjdG9yV2ViR0xBZ2VudC5jcHAiCi0JCQkJPgotCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJ
CQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgot
CQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJ
CQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JXZWJHTEFnZW50LmgiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJ
bnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yV29ya2VyQWdlbnQu
Y3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KQEAgLTc1OTYyLDYgKzc1OTYyLDE0
IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNhbnZhc1Byb2ZpbGVyLmNzcyIKKwkJCQkJPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcQ2FudmFzUHJvZmlsZVZpZXcuanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENoZWNrYm94LmpzIgog
CQkJCQk+CiAJCQkJPC9GaWxlPgpAQCAtNzY4NjIsMTQgKzc2ODcwLDYgQEAKIAkJCQkJPgogCQkJ
CTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcd2ViR0xQcm9maWxlci5jc3MiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUK
LQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFdlYkdMUHJvZmlsZVZp
ZXcuanMiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFdvcmtlcnNTaWRlYmFyUGFuZS5qcyIKIAkJCQkJPgog
CQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBhNWQ2ZDc0NzVmNzg2ZDg4YTEzZTgxYzJmZjlkZjVjYTgxMWVkNzAw
Li41MDlkNTMyOGUwOTA1ZGI1NDZkNDVhNTA4MTE5NWU2ZDljMDU4NDM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NTM3LDE1
ICs0NTM3LDE1IEBACiAJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFn
ZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
QTA5NzhFRTBBQkFBNkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFBNEMzQTc2MEIyQjE2
NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUE0QzNBNzQwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxl
bWVudC5jcHAgKi87IH07CiAJCUFBNEMzQTc3MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBNEMz
QTc1MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuaCAqLzsgfTsKLQkJQUE3MzE4M0Ux
NTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE3MzE4M0MxNTkyNTVCOTAw
QTkzRTZFIC8qIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuY3BwICovOyB9OwotCQlBQTczMTgz
RjE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE3MzE4M0QxNTkyNTVCOTAw
QTkzRTZFIC8qIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuaCAqLzsgfTsKKwkJQUE3MzE4M0Ux
NTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBNzMxODNDMTU5MjU1Qjkw
MEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAgKi87IH07CisJCUFBNzMx
ODNGMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE3MzE4M0QxNTkyNTVC
OTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmggKi87IH07CiAJCUFBQjYw
NTRFMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFCNjA1NEExNTg3NEM1ODAwN0I1
MDMxIC8qIEluamVjdGVkU2NyaXB0QmFzZS5jcHAgKi87IH07CiAJCUFBQjYwNTRGMTU4NzRDNTgw
MDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBQjYwNTRCMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3Rl
ZFNjcmlwdEJhc2UuaCAqLzsgfTsKIAkJQUFCNjA1NTAxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVj
dGVkU2NyaXB0TW9kdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFBQjYwNTRDMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdE1vZHVs
ZS5jcHAgKi87IH07CiAJCUFBQjYwNTUxMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlw
dE1vZHVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QUFCNjA1NEQxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmggKi87IH07
Ci0JCUFBRDc2NkVCMTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEFnZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBRDc2NkU4MTU3
RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEFnZW50LmNwcCAqLzsgfTsKLQkJQUFENzY2
RUMxNTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvcldlYkdMQWdlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBRDc2NkU5MTU3RTUwMkYwMEU4NTQy
MyAvKiBJbnNwZWN0b3JXZWJHTEFnZW50LmggKi87IH07Ci0JCUFBRDc2NkVEMTU3RTUwMkYwMEU4
NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFENzY2RUExNTdFNTAyRjAwRTg1NDIzIC8q
IEluc3BlY3RvcldlYkdMSW5zdHJ1bWVudGF0aW9uLmggKi87IH07CisJCUFBRDc2NkVCMTU3RTUw
MkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQUQ3NjZFODE1N0U1MDJGMDBFODU0MjMgLyog
SW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwICovOyB9OworCQlBQUQ3NjZFQzE1N0U1MDJGMDBFODU0
MjMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFBRDc2NkU5MTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JD
YW52YXNBZ2VudC5oICovOyB9OworCQlBQUQ3NjZFRDE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVj
dG9yQ2FudmFzSW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBQUQ3NjZFQTE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yQ2Fu
dmFzSW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJCUFBRjVCN0I3MTUyNEI2QzUwMDA0Q0I0OSAv
KiBXZWJTb2NrZXRGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBQUY1QjdCMTE1MjRCNEJEMDAwNENCNDkgLyogV2ViU29ja2V0RnJhbWUuY3Bw
ICovOyB9OwogCQlBQjIzQTMyNzA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QUIyM0EzMjUwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNwcCAq
LzsgfTsKIAkJQUIyM0EzMjgwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjIz
QTMyNjA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCAqLzsgfTsK
QEAgLTExNjcwLDE3ICsxMTY3MCwxNyBAQAogCQlBQTA5NzhFRTBBQkFBNkUxMDA4NzQ0ODAgLyog
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTRD
M0E3NDBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBQTRDM0E3NTBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUVsZW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUE3MzE4M0MxNTkyNTVCOTAwQTkzRTZFIC8qIEluamVj
dGVkU2NyaXB0V2ViR0xNb2R1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUFBNzMxODNEMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdFdlYkdM
TW9kdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUE5MDMwRkUxNTdF
MTZBMDAwMjc2MjQ3IC8qIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJbmplY3RlZFNjcmlwdFdlYkdMTW9k
dWxlU291cmNlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQTkxMjc1MDE1N0Uz
NUE1MDA0NTRFNTQgLyogSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBNzMxODNDMTU5MjU1QjkwMEE5M0U2
RSAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBNzMxODNEMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3Rl
ZFNjcmlwdENhbnZhc01vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBQTkwMzBGRTE1N0UxNkEwMDAyNzYyNDcgLyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVT
b3VyY2UuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJbmplY3Rl
ZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQUE5MTI3NTAxNTdFMzVBNTAwNDU0RTU0IC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxl
U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBQjYw
NTRBMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUFCNjA1NEIxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVj
dGVkU2NyaXB0QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3Rl
ZFNjcmlwdEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUFCNjA1NEMxNTg3
NEM1ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUFCNjA1NEQxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVjdGVk
U2NyaXB0TW9kdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVk
U2NyaXB0TW9kdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFBRDc2NkU4MTU3
RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvcldlYkdMQWdlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBQUQ3NjZFOTE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9y
V2ViR0xBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JX
ZWJHTEFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFBRDc2NkVBMTU3RTUw
MkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBQUQ3NjZFODE1N0U1MDJGMDBFODU0MjMgLyog
SW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBQUQ3NjZFOTE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUFENzY2RUExNTdFNTAyRjAwRTg1NDIzIC8q
IEluc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnNwZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQUFGNUI3QjExNTI0QjRCRDAwMDRDQjQ5IC8qIFdlYlNvY2tldEZy
YW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlNvY2tldEZy
YW1lLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRGcmFtZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCMjNBMzI1MDlCQkE3RDAwMDY3Q0M1MyAvKiBC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBQjIzQTMyNjA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDYxMSw3ICsxNDYx
MSw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTdBNTYzRTU0
MTJERTMyQjAwMEY0NTM2RCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oICovLAotCQkJCUFBOTEy
NzUwMTU3RTM1QTUwMDQ1NEU1NCAvKiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmgg
Ki8sCisJCQkJQUE5MTI3NTAxNTdFMzVBNTAwNDU0RTU0IC8qIEluamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlU291cmNlLmggKi8sCiAJCQkJNEY3MDdBOTcxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAqLywKIAkJCQk0RjcwN0E5ODExRUY2Nzk0MDBBQ0RB
NjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAqLywKIAkJCQk0RjRGNUZGQTExQ0JE
MkQyMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovLApAQCAtMTQ2NTksOSArMTQ2
NTksOSBAQAogCQkJCUFBQjYwNTRDMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdE1v
ZHVsZS5jcHAgKi8sCiAJCQkJQUFCNjA1NEQxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVjdGVkU2Ny
aXB0TW9kdWxlLmggKi8sCiAJCQkJN0E1NjNGOTUxMkRGNUM5MTAwRjQ1MzZEIC8qIEluamVjdGVk
U2NyaXB0U291cmNlLmpzICovLAotCQkJCUFBNzMxODNDMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmpl
Y3RlZFNjcmlwdFdlYkdMTW9kdWxlLmNwcCAqLywKLQkJCQlBQTczMTgzRDE1OTI1NUI5MDBBOTNF
NkUgLyogSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oICovLAotCQkJCUFBOTAzMEZFMTU3RTE2
QTAwMDI3NjI0NyAvKiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzICovLAorCQkJ
CUFBNzMxODNDMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5j
cHAgKi8sCisJCQkJQUE3MzE4M0QxNTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0Q2Fu
dmFzTW9kdWxlLmggKi8sCisJCQkJQUE5MDMwRkUxNTdFMTZBMDAwMjc2MjQ3IC8qIEluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzICovLAogCQkJCTFDNDM1Q0Q0MTRFODU0NUIwMDRF
MTBFQSAvKiBJbnNwZWN0b3ItMC4xLmpzb24gKi8sCiAJCQkJMUM0MzVDRDUxNEU4NTQ1QjAwNEUx
MEVBIC8qIEluc3BlY3Rvci0xLjAuanNvbiAqLywKIAkJCQkxQzQzNUNEMzE0RTg1NDRGMDA0RTEw
RUEgLyogSW5zcGVjdG9yLmpzb24gKi8sCkBAIC0xNDczNiw5ICsxNDczNiw5IEBACiAJCQkJNzU0
MTMzQTcxMDJFMDBFODAwMDc1RDAwIC8qIEluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCAqLywKIAkJ
CQk0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCAqLywKIAkJ
CQk0RjMyODlCNDExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmggKi8sCi0JCQkJ
QUFENzY2RTgxNTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvcldlYkdMQWdlbnQuY3BwICovLAot
CQkJCUFBRDc2NkU5MTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEFnZW50LmggKi8s
Ci0JCQkJQUFENzY2RUExNTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvcldlYkdMSW5zdHJ1bWVu
dGF0aW9uLmggKi8sCisJCQkJQUFENzY2RTgxNTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvckNh
bnZhc0FnZW50LmNwcCAqLywKKwkJCQlBQUQ3NjZFOTE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVj
dG9yQ2FudmFzQWdlbnQuaCAqLywKKwkJCQlBQUQ3NjZFQTE1N0U1MDJGMDBFODU0MjMgLyogSW5z
cGVjdG9yQ2FudmFzSW5zdHJ1bWVudGF0aW9uLmggKi8sCiAJCQkJRjM4MTBDMTkxMzY1QTQ5NjAw
RUQ2RTMzIC8qIEluc3BlY3RvcldvcmtlckFnZW50LmNwcCAqLywKIAkJCQlGMzgxMEMxQTEzNjVB
NDk2MDBFRDZFMzMgLyogSW5zcGVjdG9yV29ya2VyQWdlbnQuaCAqLywKIAkJCQlGMzc1Q0MwNjEx
NTBEMzAwMDA4RERCODEgLyogSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCAqLywKQEAgLTIzNzUw
LDcgKzIzNzUwLDcgQEAKIAkJCQk3QTBFNzZGQTEwQkYwOEVEMDBBMDI3NkUgLyogSW5qZWN0ZWRT
Y3JpcHRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzE2Mzk2QzEzMjk0ODFBMDBBNjQ5Q0Ig
LyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQUI2MDU1MTE1
ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaCBpbiBIZWFkZXJzICovLAot
CQkJCUFBNzMxODNGMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBQTczMTgzRjE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGNUU1MEExNTVB
MDUwMDBBNDIzNCAvKiBJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGNUUzMEEx
NTVBMDUwMDBBNDIzNCAvKiBJbmxpbmVGbG93Qm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U3
ODkxNjExMjBENjA4MDA2MEVDRTUgLyogSW5saW5lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtMjM4MDMsOCArMjM4MDMsOCBAQAogCQkJCTc1NDEzM0E4MTAyRTAwRTgwMDA3NUQwMCAvKiBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzhEQTIwRjE1MjBF
QkEzMDA2MTQxQzEgLyogSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTRGMzI4OUI2MTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUFBRDc2NkVDMTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEFnZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBQUQ3NjZFRDE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVj
dG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUFBRDc2NkVDMTU3
RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQUFENzY2RUQxNTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvckNhbnZhc0luc3RydW1lbnRh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM4MTBDMUMxMzY1QTQ5NjAwRUQ2RTMzIC8qIElu
c3BlY3RvcldvcmtlckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzc1Q0MwNzExNTBEMzAw
MDA4RERCODEgLyogSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUYzQUJGRTBDMTMwRTlEQTAwMEU3RjdEMSAvKiBJbnN0cnVtZW50aW5nQWdlbnRzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI2OTU2LDcgKzI2OTU2LDcgQEAKIAkJCQk3QTBFNzZGOTEwQkYwOEVEMDBB
MDI3NkUgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYzMTYz
OTZCMTMyOTQ4MUEwMEE2NDlDQiAvKiBJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQUFCNjA1NTAxNTg3NEM1ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0TW9k
dWxlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUFBNzMxODNFMTU5MjU1QjkwMEE5M0U2RSAvKiBJ
bmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUFBNzMxODNF
MTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOENGRjVFNjBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lQm94LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4Q0ZGNUU0MEExNTVBMDUwMDBBNDIzNCAvKiBJbmxpbmVGbG93
Qm94LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU5MDk3RDkzMDIwMDk0QzlFNCAvKiBJ
bmxpbmVUZXh0Qm94LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjcwMDQsNyArMjcwMDQsNyBAQAog
CQkJCTc1NDEzM0FBMTAyRTAwRjQwMDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTU3M0QxMzQ3MTRDRTM5RkYwMDU3QUJDQSAvKiBJbnNwZWN0
b3JUeXBlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjMyODlCNTExQTQyQUFCMDA1
QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUFBRDc2NkVC
MTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEFnZW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUFBRDc2NkVCMTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzgxMEMxQjEzNjVBNDk2MDBFRDZFMzMgLyogSW5zcGVj
dG9yV29ya2VyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjM1MEI3MzUxM0YxMzc3RDAw
ODgwQzQzIC8qIEluc3RydW1lbnRpbmdBZ2VudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3
NTM1NjAwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1l
bnRDdXN0b20uY3BwCmluZGV4IDgwMjEyYTllZTkxOWYwMWExZDc5N2YzYjA4NDQzYjJmYzRlZWE3
ODUuLjU1NmJkZjc1ZmI0YThjOGJmZWU5ZGZhYjAwZmRlOWM2ZGUwOWZkNTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0
b20uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIK
ICNpbmNsdWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgogI2lmIEVOQUJMRShXRUJH
TCkKLSNpbmNsdWRlICJJbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSAiV2Vi
R0xDb250ZXh0QXR0cmlidXRlcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCmluZGV4
IGFiNmM3NWFiOTViNWM0NjFjZTI0NzQ0MDBmMTYxYzU3MzYwYzg5ODAuLjBiMTU3Mjc5Y2NkMWFh
Yjk1MjI3MGY1Zjg5NTJkNzc0MGVlYjNmOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHAKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2lmIEVOQUJMRShXRUJHTCkKLSNpbmNsdWRlICJJ
bnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNhbnZh
c0luc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIlY4V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgi
CiAjZW5kaWYKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBkZDljYjExYTE2
NmQzYjdhODI1ODZmZDQwMjJhOWYzN2QyZTc1N2I3Li42ZjRkMWY3MDEwZmI3MTRhYTRhZDMyN2I5
NDA1ZDcyMTgyYTNkNjUzIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNDYsNyArNDYsNiBAQCBET01BSU5fREVGSU5FX05B
TUVfTUFQID0gewogICAgICJJbmRleGVkREIiOiAiSU5ERVhFRF9EQVRBQkFTRSIsCiAgICAgIlBy
b2ZpbGVyIjogIkpBVkFTQ1JJUFRfREVCVUdHRVIiLAogICAgICJXb3JrZXIiOiAiV09SS0VSUyIs
Ci0gICAgIldlYkdMIjogIldFQkdMIiwKIH0KIAogCkBAIC01OCw3ICs1Nyw3IEBAIFRZUEVfTkFN
RV9GSVhfTUFQID0gewogCiAKIFRZUEVTX1dJVEhfUlVOVElNRV9DQVNUX1NFVCA9IGZyb3plbnNl
dChbIlJ1bnRpbWUuUmVtb3RlT2JqZWN0IiwgIlJ1bnRpbWUuUHJvcGVydHlEZXNjcmlwdG9yIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlYnVnZ2VyLkZ1bmN0
aW9uRGV0YWlscyIsICJEZWJ1Z2dlci5DYWxsRnJhbWUiLCAiV2ViR0wuVHJhY2VMb2ciLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVidWdnZXIuRnVuY3Rpb25E
ZXRhaWxzIiwgIkRlYnVnZ2VyLkNhbGxGcmFtZSIsICJDYW52YXMuVHJhY2VMb2ciLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkIGJlIGEgdGVt
cG9yYXJ5IGhhY2suIFRpbWVsaW5lRXZlbnQgc2hvdWxkIGJlIGNyZWF0ZWQgdmlhIGdlbmVyYXRl
ZCBDKysgQVBJLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGlt
ZWxpbmUuVGltZWxpbmVFdmVudCJdKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYjI3OGQ5
NzZlYzNmNzU1MWYzN2JlM2M5NGY5M2NlNzI1NTE2MjhjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcApAQCAt
MCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5oIgorCisjaW5jbHVkZSAi
SW5qZWN0ZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNv
dXJjZS5oIgorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgorI2luY2x1ZGUgIlNj
cmlwdEZ1bmN0aW9uQ2FsbC5oIgorI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlOjpJbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZSgpCisgICAgOiBJbmplY3RlZFNjcmlwdE1vZHVsZSgiSW5qZWN0ZWRTY3Jp
cHRDYW52YXNNb2R1bGUiKQoreworfQorCitJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBJbmpl
Y3RlZFNjcmlwdENhbnZhc01vZHVsZTo6bW9kdWxlRm9yU3RhdGUoSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKK3sK
KyAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSByZXN1bHQ7CisgICAgcmVzdWx0LmVuc3Vy
ZUluamVjdGVkKGluamVjdGVkU2NyaXB0TWFuYWdlciwgc2NyaXB0U3RhdGUpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1N0cmluZyBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZTo6c291cmNl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlX2pzKSwgc2l6ZW9mKEluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlU291cmNlX2pzKSk7Cit9CisKKyNpZiBFTkFCTEUoV0VCR0wpCitT
Y3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6OndyYXBXZWJHTENvbnRleHQo
Y29uc3QgU2NyaXB0T2JqZWN0JiBnbENvbnRleHQpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxs
IGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJ3cmFwV2ViR0xDb250ZXh0Iik7Cisg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZ2xDb250ZXh0KTsKKyAgICBib29sIGhhZEV4Y2Vw
dGlvbiA9IGZhbHNlOworICAgIFNjcmlwdFZhbHVlIHJlc3VsdFZhbHVlID0gY2FsbEZ1bmN0aW9u
V2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBoYWRFeGNlcHRpb24pOworICAgIGlmIChoYWRFeGNl
cHRpb24gfHwgcmVzdWx0VmFsdWUuaGFzTm9WYWx1ZSgpIHx8ICFyZXN1bHRWYWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU2Ny
aXB0T2JqZWN0KCk7CisgICAgfQorICAgIHJldHVybiBTY3JpcHRPYmplY3QoZ2xDb250ZXh0LnNj
cmlwdFN0YXRlKCksIHJlc3VsdFZhbHVlKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisK
K3ZvaWQgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6OmNhcHR1cmVGcmFtZShFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIFN0cmluZyogdHJhY2VMb2dJZCkKK3sKKyAgICBTY3JpcHRGdW5jdGlv
bkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImNhcHR1cmVGcmFtZSIpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0VmFsdWU7CisgICAgbWFrZUNhbGwoZnVu
Y3Rpb24sICZyZXN1bHRWYWx1ZSk7CisgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1
ZS0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpUeXBlU3RyaW5nIHx8ICFyZXN1bHRWYWx1ZS0+
YXNTdHJpbmcodHJhY2VMb2dJZCkpCisgICAgICAgICplcnJvclN0cmluZyA9ICJJbnRlcm5hbCBl
cnJvcjogY2FwdHVyZUZyYW1lIjsKK30KKwordm9pZCBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVs
ZTo6ZHJvcFRyYWNlTG9nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0
cmFjZUxvZ0lkKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNj
cmlwdE9iamVjdCgpLCAiZHJvcFRyYWNlTG9nIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQodHJhY2VMb2dJZCk7CisgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBjYWxs
RnVuY3Rpb25XaXRoRXZhbEVuYWJsZWQoZnVuY3Rpb24sIGhhZEV4Y2VwdGlvbik7CisgICAgQVNT
RVJUKCFoYWRFeGNlcHRpb24pOworICAgIGlmIChoYWRFeGNlcHRpb24pCisgICAgICAgICplcnJv
clN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogZHJvcFRyYWNlTG9nIjsKK30KKwordm9pZCBJbmpl
Y3RlZFNjcmlwdENhbnZhc01vZHVsZTo6dHJhY2VMb2coRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q2FudmFzOjpU
cmFjZUxvZz4qIHRyYWNlTG9nKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihp
bmplY3RlZFNjcmlwdE9iamVjdCgpLCAidHJhY2VMb2ciKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudCh0cmFjZUxvZ0lkKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdFZh
bHVlOworICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0VmFsdWUpOworICAgIGlmICghcmVz
dWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZU9i
amVjdCkgeworICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykp
CisgICAgICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHRyYWNlTG9nIjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAqdHJhY2VMb2cgPSBUeXBlQnVpbGRlcjo6Q2Fu
dmFzOjpUcmFjZUxvZzo6cnVudGltZUNhc3QocmVzdWx0VmFsdWUpOworfQorCit2b2lkIEluamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlOjpyZXBsYXlUcmFjZUxvZyhFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgdHJhY2VMb2dJZCwgaW50IHN0ZXBObywgU3RyaW5nKiByZXN1
bHQpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2Jq
ZWN0KCksICJyZXBsYXlUcmFjZUxvZyIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHRy
YWNlTG9nSWQpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0ZXBObyk7CisgICAgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRWYWx1ZTsKKyAgICBtYWtlQ2FsbChmdW5jdGlvbiwg
JnJlc3VsdFZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50eXBl
KCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVTdHJpbmcgfHwgIXJlc3VsdFZhbHVlLT5hc1N0cmlu
ZyhyZXN1bHQpKQorICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHJlcGxh
eVRyYWNlTG9nIjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdENhbnZhc01vZHVsZS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRlMjIzNjYwOWNjYzc3NGQ2NmQ2
Y2JhOWRmNjBhMjlmNjUxZDkyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlX2gKKyNkZWZpbmUgSW5qZWN0ZWRTY3JpcHRD
YW52YXNNb2R1bGVfaAorCisjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaCIKKyNpbmNs
dWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKK2NsYXNz
IFNjcmlwdE9iamVjdDsKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKK2NsYXNzIEluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlIDogcHVibGljIEluamVjdGVkU2NyaXB0TW9kdWxlIHsKK3B1Ymxp
YzoKKyAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSgpOworICAgIAorICAgIHZpcnR1YWwg
U3RyaW5nIHNvdXJjZSgpIGNvbnN0OworCisgICAgc3RhdGljIEluamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlIG1vZHVsZUZvclN0YXRlKEluamVjdGVkU2NyaXB0TWFuYWdlciosIFNjcmlwdFN0YXRl
Kik7CisKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgU2NyaXB0T2JqZWN0IHdyYXBXZWJHTENvbnRl
eHQoY29uc3QgU2NyaXB0T2JqZWN0JiBnbENvbnRleHQpOworI2VuZGlmCisKKyAgICB2b2lkIGNh
cHR1cmVGcmFtZShFcnJvclN0cmluZyosIFN0cmluZyopOworICAgIHZvaWQgZHJvcFRyYWNlTG9n
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCB0cmFjZUxvZyhFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q2FudmFzOjpUcmFjZUxv
Zz4qKTsKKyAgICB2b2lkIHJlcGxheVRyYWNlTG9nKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiwgaW50LCBTdHJpbmcqKTsKK307CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZV9oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlU291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2Fu
dmFzTW9kdWxlU291cmNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3ODBhZjNjNDE1MjVjOThlNzZiZGI4MDM1
NzBlZWMzYjhjYjc3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMKQEAgLTAsMCArMSwyMTEzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
LyoqCisgKiBAcGFyYW0ge0luamVjdGVkU2NyaXB0SG9zdH0gSW5qZWN0ZWRTY3JpcHRIb3N0Cisg
KiBAcGFyYW0ge1dpbmRvd30gaW5zcGVjdGVkV2luZG93CisgKiBAcGFyYW0ge251bWJlcn0gaW5q
ZWN0ZWRTY3JpcHRJZAorICovCisoZnVuY3Rpb24gKEluamVjdGVkU2NyaXB0SG9zdCwgaW5zcGVj
dGVkV2luZG93LCBpbmplY3RlZFNjcmlwdElkKSB7CisKK3ZhciBUeXBlVXRpbHMgPSB7CisgICAg
LyoqCisgICAgICogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS90eXBlZGFycmF5L3Nw
ZWNzL2xhdGVzdC8jNworICAgICAqIEB0eXBlIHtBcnJheS48RnVuY3Rpb24+fQorICAgICAqLwor
ICAgIF90eXBlZEFycmF5Q2xhc3NlczogKGZ1bmN0aW9uKHR5cGVOYW1lcykgeworICAgICAgICB2
YXIgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZU5hbWVzLmxl
bmd0aDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgaWYgKGluc3BlY3RlZFdpbmRvd1t0eXBl
TmFtZXNbaV1dKQorICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGluc3BlY3RlZFdpbmRvd1t0
eXBlTmFtZXNbaV1dKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0p
KFsiSW50OEFycmF5IiwgIlVpbnQ4QXJyYXkiLCAiVWludDhDbGFtcGVkQXJyYXkiLCAiSW50MTZB
cnJheSIsICJVaW50MTZBcnJheSIsICJJbnQzMkFycmF5IiwgIlVpbnQzMkFycmF5IiwgIkZsb2F0
MzJBcnJheSIsICJGbG9hdDY0QXJyYXkiXSksCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0geyp9
IGFycmF5CisgICAgICogQHJldHVybiB7RnVuY3Rpb259CisgICAgICovCisgICAgdHlwZWRBcnJh
eUNsYXNzOiBmdW5jdGlvbihhcnJheSkKKyAgICB7CisgICAgICAgIHZhciBjbGFzc2VzID0gVHlw
ZVV0aWxzLl90eXBlZEFycmF5Q2xhc3NlczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBj
bGFzc2VzLmxlbmd0aDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgaWYgKGFycmF5IGluc3Rh
bmNlb2YgY2xhc3Nlc1tpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3Nlc1tpXTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHBhcmFtIHsqfSBvYmoKKyAgICAgKiBAcmV0dXJuIHsqfQorICAgICAqIEZJWE1FOiBzdXBwcmVz
cyBjaGVja1R5cGVzIGR1ZSB0byBvdXRkYXRlZCBidWlsdGluIGV4dGVybnMgZm9yIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCBhbmQgSW1hZ2VEYXRhCisgICAgICogQHN1cHByZXNzIHtjaGVja1R5
cGVzfQorICAgICAqLworICAgIGNsb25lOiBmdW5jdGlvbihvYmopCisgICAgeworICAgICAgICBp
ZiAoIW9iaikKKyAgICAgICAgICAgIHJldHVybiBvYmo7CisKKyAgICAgICAgdmFyIHR5cGUgPSB0
eXBlb2Ygb2JqOworICAgICAgICBpZiAodHlwZSAhPT0gIm9iamVjdCIgJiYgdHlwZSAhPT0gImZ1
bmN0aW9uIikKKyAgICAgICAgICAgIHJldHVybiBvYmo7CisKKyAgICAgICAgLy8gSGFuZGxlIEFy
cmF5IGFuZCBBcnJheUJ1ZmZlciBpbnN0YW5jZXMuCisgICAgICAgIGlmICh0eXBlb2Ygb2JqLnNs
aWNlID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChvYmogaW5z
dGFuY2VvZiBBcnJheSB8fCBvYmogaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7CisgICAgICAgICAg
ICByZXR1cm4gb2JqLnNsaWNlKDApOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHR5cGVkQXJy
YXlDbGFzcyA9IFR5cGVVdGlscy50eXBlZEFycmF5Q2xhc3Mob2JqKTsKKyAgICAgICAgaWYgKHR5
cGVkQXJyYXlDbGFzcykKKyAgICAgICAgICAgIHJldHVybiBuZXcgdHlwZWRBcnJheUNsYXNzKG9i
aik7CisKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm4gb2JqLmNsb25lTm9kZSh0cnVlKTsKKworICAgICAgICBpZiAob2JqIGlu
c3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBv
YmouY2xvbmVOb2RlKHRydWUpOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBSZXNvdXJjZS53
cmFwcGVkT2JqZWN0KHJlc3VsdC5nZXRDb250ZXh0KCIyZCIpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQuZHJhd0ltYWdlKG9iaiwgMCwgMCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpIHsK
KyAgICAgICAgICAgIHZhciByZXN1bHQgPSBvYmouY2xvbmVOb2RlKHRydWUpOworICAgICAgICAg
ICAgLy8gRklYTUU6IENvcHkgSFRNTFZpZGVvRWxlbWVudCdzIGN1cnJlbnQgaW1hZ2UgaW50byBh
IDJkIGNhbnZhcy4KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7CisgICAgICAgICAgICB2YXIgY29u
dGV4dCA9IFR5cGVVdGlscy5fZHVtbXlDYW52YXMyZENvbnRleHQoKTsKKyAgICAgICAgICAgIHZh
ciByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUltYWdlRGF0YShvYmopOworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDAsIG4gPSBvYmouZGF0YS5sZW5ndGg7IGkgPCBuOyArK2kpCisgICAgICAgICAg
ICAgIHJlc3VsdC5kYXRhW2ldID0gb2JqLmRhdGFbaV07CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisKKyAgICAgICAgY29uc29sZS5lcnJvcigiQVNTRVJUX05PVF9SRUFD
SEVEOiBmYWlsZWQgdG8gY2xvbmUgb2JqZWN0OiAiLCBvYmopOworICAgICAgICByZXR1cm4gb2Jq
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkR9CisgICAgICovCisgICAgX2R1bW15Q2FudmFzMmRDb250ZXh0OiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB2YXIgY29udGV4dCA9IFR5cGVVdGlscy5fZHVtbXlDYW52YXMyZENvbnRl
eHRJbnN0YW5jZTsKKyAgICAgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgICAgICB2YXIgY2Fu
dmFzID0gaW5zcGVjdGVkV2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwor
ICAgICAgICAgICAgY29udGV4dCA9IC8qKiBAdHlwZSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
fSAqLyBSZXNvdXJjZS53cmFwcGVkT2JqZWN0KGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpKTsKKyAg
ICAgICAgICAgIFR5cGVVdGlscy5fZHVtbXlDYW52YXMyZENvbnRleHRJbnN0YW5jZSA9IGNvbnRl
eHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbnRleHQ7CisgICAgfQorfQorCisvKioK
KyAqIEBpbnRlcmZhY2UKKyAqLworZnVuY3Rpb24gU3RhY2tUcmFjZSgpCit7Cit9CisKK1N0YWNr
VHJhY2UucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRl
eAorICAgICAqIEByZXR1cm4ge3tzb3VyY2VVUkw6IHN0cmluZywgbGluZU51bWJlcjogbnVtYmVy
LCBjb2x1bW5OdW1iZXI6IG51bWJlcn19CisgICAgICovCisgICAgY2FsbEZyYW1lOiBmdW5jdGlv
bihpbmRleCkKKyAgICB7CisgICAgfQorfQorCisvKioKKyAqIEBwYXJhbSB7bnVtYmVyPX0gc3Rh
Y2tUcmFjZUxpbWl0CisgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gdG9wTW9zdEZ1bmN0aW9uVG9JZ25v
cmUKKyAqIEByZXR1cm4ge1N0YWNrVHJhY2V9CisgKi8KK1N0YWNrVHJhY2UuY3JlYXRlID0gZnVu
Y3Rpb24oc3RhY2tUcmFjZUxpbWl0LCB0b3BNb3N0RnVuY3Rpb25Ub0lnbm9yZSkKK3sKKyAgICBp
ZiAodHlwZW9mIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID09PSAiZnVuY3Rpb24iKQorICAgICAg
ICByZXR1cm4gbmV3IFN0YWNrVHJhY2VWOChzdGFja1RyYWNlTGltaXQsIHRvcE1vc3RGdW5jdGlv
blRvSWdub3JlIHx8IGFyZ3VtZW50cy5jYWxsZWUpOworICAgIC8vIEZJWE1FOiBTdXBwb3J0IEpT
QywgYW5kIG1heWJlIG90aGVyIGJyb3dzZXJzLgorICAgIHJldHVybiBudWxsOworfQorCisvKioK
KyAqIEBjb25zdHJ1Y3RvcgorICogQGltcGxlbWVudHMge1N0YWNrVHJhY2V9CisgKiBAcGFyYW0g
e251bWJlcj19IHN0YWNrVHJhY2VMaW1pdAorICogQHBhcmFtIHtGdW5jdGlvbj19IHRvcE1vc3RG
dW5jdGlvblRvSWdub3JlCisgKiBAc2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC93aWtp
L0phdmFTY3JpcHRTdGFja1RyYWNlQXBpCisgKi8KK2Z1bmN0aW9uIFN0YWNrVHJhY2VWOChzdGFj
a1RyYWNlTGltaXQsIHRvcE1vc3RGdW5jdGlvblRvSWdub3JlKQoreworICAgIFN0YWNrVHJhY2Uu
Y2FsbCh0aGlzKTsKKyAgICB2YXIgb2xkU3RhY2tUcmFjZUxpbWl0ID0gRXJyb3Iuc3RhY2tUcmFj
ZUxpbWl0OworICAgIGlmICh0eXBlb2Ygc3RhY2tUcmFjZUxpbWl0ID09PSAibnVtYmVyIikKKyAg
ICAgICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gc3RhY2tUcmFjZUxpbWl0OworCisgICAgdGhp
cy5fZXJyb3IgPSAvKiogQHR5cGUge3tzdGFjazogQXJyYXl9fSAqLyB7fTsKKyAgICBFcnJvci5j
YXB0dXJlU3RhY2tUcmFjZSh0aGlzLl9lcnJvciwgdG9wTW9zdEZ1bmN0aW9uVG9JZ25vcmUgfHwg
YXJndW1lbnRzLmNhbGxlZSk7CisKKyAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBvbGRTdGFj
a1RyYWNlTGltaXQ7Cit9CisKK1N0YWNrVHJhY2VWOC5wcm90b3R5cGUgPSB7CisgICAgLyoqCisg
ICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4CisgICAgICogQHJl
dHVybiB7e3NvdXJjZVVSTDogc3RyaW5nLCBsaW5lTnVtYmVyOiBudW1iZXIsIGNvbHVtbk51bWJl
cjogbnVtYmVyfX0KKyAgICAgKi8KKyAgICBjYWxsRnJhbWU6IGZ1bmN0aW9uKGluZGV4KQorICAg
IHsKKyAgICAgICAgaWYgKCF0aGlzLl9zdGFja1RyYWNlKQorICAgICAgICAgICAgdGhpcy5fcHJl
cGFyZVN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWNrVHJhY2VbaW5kZXhd
OworICAgIH0sCisKKyAgICBfcHJlcGFyZVN0YWNrVHJhY2U6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHZhciBvbGRQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNl
OworICAgICAgICAvKioKKyAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGVycm9yCisgICAgICAg
ICAqIEBwYXJhbSB7QXJyYXkuPENhbGxTaXRlPn0gc3RydWN0dXJlZFN0YWNrVHJhY2UKKyAgICAg
ICAgICogQHJldHVybiB7QXJyYXkuPHtzb3VyY2VVUkw6IHN0cmluZywgbGluZU51bWJlcjogbnVt
YmVyLCBjb2x1bW5OdW1iZXI6IG51bWJlcn0+fQorICAgICAgICAgKi8KKyAgICAgICAgRXJyb3Iu
cHJlcGFyZVN0YWNrVHJhY2UgPSBmdW5jdGlvbihlcnJvciwgc3RydWN0dXJlZFN0YWNrVHJhY2Up
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVkU3RhY2tUcmFjZS5tYXAo
ZnVuY3Rpb24oY2FsbFNpdGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgICAgICBzb3VyY2VVUkw6IGNhbGxTaXRlLmdldEZpbGVOYW1lKCksCisgICAgICAgICAg
ICAgICAgICAgIGxpbmVOdW1iZXI6IGNhbGxTaXRlLmdldExpbmVOdW1iZXIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBjYWxsU2l0ZS5nZXRDb2x1bW5OdW1iZXIoKQorICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9zdGFja1RyYWNlID0gdGhpcy5fZXJyb3Iuc3RhY2s7CisgICAgICAgIEVycm9yLnByZXBhcmVT
dGFja1RyYWNlID0gb2xkUHJlcGFyZVN0YWNrVHJhY2U7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9l
cnJvcjsgLy8gTm8gbG9uZ2VyIG5lZWRlZCwgZnJlZSBtZW1vcnkuCisgICAgfQorfQorCitTdGFj
a1RyYWNlVjgucHJvdG90eXBlLl9fcHJvdG9fXyA9IFN0YWNrVHJhY2UucHJvdG90eXBlOworCisv
KioKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBDYWNoZSgpCit7CisgICAgdGhpcy5y
ZXNldCgpOworfQorCitDYWNoZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVy
biB7bnVtYmVyfQorICAgICAqLworICAgIHNpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9zaXplOworICAgIH0sCisKKyAgICByZXNldDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdGhpcy5faXRlbXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOworICAgICAgICB0
aGlzLl9zaXplID0gMDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9
IGtleQorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgaGFzOiBmdW5jdGlv
bihrZXkpCisgICAgeworICAgICAgICByZXR1cm4ga2V5IGluIHRoaXMuX2l0ZW1zOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0ga2V5CisgICAgICogQHJldHVybiB7
T2JqZWN0fQorICAgICAqLworICAgIGdldDogZnVuY3Rpb24oa2V5KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2l0ZW1zW2tleV07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbQorICAgICAqLworICAg
IHB1dDogZnVuY3Rpb24oa2V5LCBpdGVtKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLmhhcyhr
ZXkpKQorICAgICAgICAgICAgKyt0aGlzLl9zaXplOworICAgICAgICB0aGlzLl9pdGVtc1trZXld
ID0gaXRlbTsKKyAgICB9Cit9CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge1Jl
c291cmNlfE9iamVjdH0gdGhpc09iamVjdAorICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFt
ZQorICogQHBhcmFtIHtBcnJheXxBcmd1bWVudHN9IGFyZ3MKKyAqIEBwYXJhbSB7UmVzb3VyY2V8
Kj19IHJlc3VsdAorICogQHBhcmFtIHtTdGFja1RyYWNlPX0gc3RhY2tUcmFjZQorICovCitmdW5j
dGlvbiBDYWxsKHRoaXNPYmplY3QsIGZ1bmN0aW9uTmFtZSwgYXJncywgcmVzdWx0LCBzdGFja1Ry
YWNlKQoreworICAgIHRoaXMuX3RoaXNPYmplY3QgPSB0aGlzT2JqZWN0OworICAgIHRoaXMuX2Z1
bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZTsKKyAgICB0aGlzLl9hcmdzID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlLmNhbGwoYXJncywgMCk7CisgICAgdGhpcy5fcmVzdWx0ID0gcmVzdWx0OworICAg
IHRoaXMuX3N0YWNrVHJhY2UgPSBzdGFja1RyYWNlIHx8IG51bGw7Cit9CisKK0NhbGwucHJvdG90
eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge1Jlc291cmNlfQorICAgICAqLworICAg
IHJlc291cmNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gUmVzb3VyY2UuZm9y
T2JqZWN0KHRoaXMuX3RoaXNPYmplY3QpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0
dXJuIHtzdHJpbmd9CisgICAgICovCisgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25OYW1lOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcmV0dXJuIHtBcnJheX0KKyAgICAgKi8KKyAgICBhcmdzOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYXJnczsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHJldHVybiB7Kn0KKyAgICAgKi8KKyAgICByZXN1bHQ6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBy
ZXR1cm4ge1N0YWNrVHJhY2V9CisgICAgICovCisgICAgc3RhY2tUcmFjZTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWNrVHJhY2U7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7U3RhY2tUcmFjZX0gc3RhY2tUcmFjZQorICAgICAqLworICAgIHNl
dFN0YWNrVHJhY2U6IGZ1bmN0aW9uKHN0YWNrVHJhY2UpCisgICAgeworICAgICAgICB0aGlzLl9z
dGFja1RyYWNlID0gc3RhY2tUcmFjZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFt
IHsqfSByZXN1bHQKKyAgICAgKi8KKyAgICBzZXRSZXN1bHQ6IGZ1bmN0aW9uKHJlc3VsdCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDsKKyAgICB9LAorCisgICAgZnJlZXpl
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZnJlZXplZCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fZnJlZXplZCA9IHRydWU7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBuID0gdGhpcy5fYXJncy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBmcmVlemUgdGhlIFJlc291cmNlcyBhbHNvIQorICAgICAgICAgICAgaWYg
KCFSZXNvdXJjZS5mb3JPYmplY3QodGhpcy5fYXJnc1tpXSkpCisgICAgICAgICAgICAgICAgdGhp
cy5fYXJnc1tpXSA9IFR5cGVVdGlscy5jbG9uZSh0aGlzLl9hcmdzW2ldKTsKKyAgICAgICAgfQor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqIEBy
ZXR1cm4ge1JlcGxheWFibGVDYWxsfQorICAgICAqLworICAgIHRvUmVwbGF5YWJsZTogZnVuY3Rp
b24oY2FjaGUpCisgICAgeworICAgICAgICB0aGlzLmZyZWV6ZSgpOworICAgICAgICB2YXIgdGhp
c09iamVjdCA9IC8qKiBAdHlwZSB7UmVwbGF5YWJsZVJlc291cmNlfSAqLyBSZXNvdXJjZS50b1Jl
cGxheWFibGUodGhpcy5fdGhpc09iamVjdCwgY2FjaGUpOworICAgICAgICB2YXIgcmVzdWx0ID0g
UmVzb3VyY2UudG9SZXBsYXlhYmxlKHRoaXMuX3Jlc3VsdCwgY2FjaGUpOworICAgICAgICB2YXIg
YXJncyA9IHRoaXMuX2FyZ3MubWFwKGZ1bmN0aW9uKG9iaikgeworICAgICAgICAgICAgcmV0dXJu
IFJlc291cmNlLnRvUmVwbGF5YWJsZShvYmosIGNhY2hlKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBuZXcgUmVwbGF5YWJsZUNhbGwodGhpc09iamVjdCwgdGhpcy5fZnVuY3Rpb25OYW1l
LCBhcmdzLCByZXN1bHQsIHRoaXMuX3N0YWNrVHJhY2UpOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge1JlcGxheWFibGVDYWxsfSByZXBsYXlhYmxlQ2FsbAorICAgICAqIEBwYXJh
bSB7Q2FjaGV9IGNhY2hlCisgICAgICogQHJldHVybiB7Q2FsbH0KKyAgICAgKi8KKyAgICByZXBs
YXk6IGZ1bmN0aW9uKHJlcGxheWFibGVDYWxsLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciBy
ZXBsYXlPYmplY3QgPSBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KHJlcGxheWFibGVDYWxsLnJl
c291cmNlKCksIGNhY2hlKTsKKyAgICAgICAgdmFyIHJlcGxheUZ1bmN0aW9uID0gcmVwbGF5T2Jq
ZWN0W3JlcGxheWFibGVDYWxsLmZ1bmN0aW9uTmFtZSgpXTsKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQodHlwZW9mIHJlcGxheUZ1bmN0aW9uID09PSAiZnVuY3Rpb24iLCAiRXhwZWN0ZWQgYSBmdW5j
dGlvbiB0byByZXBsYXkiKTsKKyAgICAgICAgdmFyIHJlcGxheUFyZ3MgPSByZXBsYXlhYmxlQ2Fs
bC5hcmdzKCkubWFwKGZ1bmN0aW9uKG9iaikgeworICAgICAgICAgICAgcmV0dXJuIFJlcGxheWFi
bGVSZXNvdXJjZS5yZXBsYXkob2JqLCBjYWNoZSk7CisgICAgICAgIH0pOworICAgICAgICB2YXIg
cmVwbGF5UmVzdWx0ID0gcmVwbGF5RnVuY3Rpb24uYXBwbHkocmVwbGF5T2JqZWN0LCByZXBsYXlB
cmdzKTsKKyAgICAgICAgaWYgKHJlcGxheWFibGVDYWxsLnJlc3VsdCgpIGluc3RhbmNlb2YgUmVw
bGF5YWJsZVJlc291cmNlKSB7CisgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSByZXBsYXlhYmxl
Q2FsbC5yZXN1bHQoKS5yZXBsYXkoY2FjaGUpOworICAgICAgICAgICAgaWYgKCFyZXNvdXJjZS53
cmFwcGVkT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0V3JhcHBlZE9iamVj
dChyZXBsYXlSZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fdGhpc09iamVjdCA9
IHJlcGxheU9iamVjdDsKKyAgICAgICAgdGhpcy5fZnVuY3Rpb25OYW1lID0gcmVwbGF5YWJsZUNh
bGwuZnVuY3Rpb25OYW1lKCk7CisgICAgICAgIHRoaXMuX2FyZ3MgPSByZXBsYXlBcmdzOworICAg
ICAgICB0aGlzLl9yZXN1bHQgPSByZXBsYXlSZXN1bHQ7CisgICAgICAgIHRoaXMuX3N0YWNrVHJh
Y2UgPSByZXBsYXlhYmxlQ2FsbC5zdGFja1RyYWNlKCk7CisgICAgICAgIHRoaXMuX2ZyZWV6ZWQg
PSB0cnVlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CisKKy8qKgorICogQGNvbnN0
cnVjdG9yCisgKiBAcGFyYW0ge1JlcGxheWFibGVSZXNvdXJjZX0gdGhpc09iamVjdAorICogQHBh
cmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZQorICogQHBhcmFtIHtBcnJheS48UmVwbGF5YWJsZVJl
c291cmNlfCo+fSBhcmdzCisgKiBAcGFyYW0ge1JlcGxheWFibGVSZXNvdXJjZXwqfSByZXN1bHQK
KyAqIEBwYXJhbSB7U3RhY2tUcmFjZX0gc3RhY2tUcmFjZQorICovCitmdW5jdGlvbiBSZXBsYXlh
YmxlQ2FsbCh0aGlzT2JqZWN0LCBmdW5jdGlvbk5hbWUsIGFyZ3MsIHJlc3VsdCwgc3RhY2tUcmFj
ZSkKK3sKKyAgICB0aGlzLl90aGlzT2JqZWN0ID0gdGhpc09iamVjdDsKKyAgICB0aGlzLl9mdW5j
dGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CisgICAgdGhpcy5fYXJncyA9IGFyZ3M7CisgICAgdGhp
cy5fcmVzdWx0ID0gcmVzdWx0OworICAgIHRoaXMuX3N0YWNrVHJhY2UgPSBzdGFja1RyYWNlOwor
fQorCitSZXBsYXlhYmxlQ2FsbC5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVy
biB7UmVwbGF5YWJsZVJlc291cmNlfQorICAgICAqLworICAgIHJlc291cmNlOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGhpc09iamVjdDsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICogQHJldHVybiB7c3RyaW5nfQorICAgICAqLworICAgIGZ1bmN0aW9uTmFtZTog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uTmFtZTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7QXJyYXkuPFJlcGxheWFibGVSZXNvdXJj
ZXwqPn0KKyAgICAgKi8KKyAgICBhcmdzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fYXJnczsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7UmVwbGF5
YWJsZVJlc291cmNlfCp9CisgICAgICovCisgICAgcmVzdWx0OiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fcmVzdWx0OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cmV0dXJuIHtTdGFja1RyYWNlfQorICAgICAqLworICAgIHN0YWNrVHJhY2U6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zdGFja1RyYWNlOworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqIEByZXR1cm4ge0NhbGx9Cisg
ICAgICovCisgICAgcmVwbGF5OiBmdW5jdGlvbihjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciBj
YWxsID0gT2JqZWN0LmNyZWF0ZShDYWxsLnByb3RvdHlwZSk7CisgICAgICAgIHJldHVybiBjYWxs
LnJlcGxheSh0aGlzLCBjYWNoZSk7CisgICAgfQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3Rvcgor
ICogQHBhcmFtIHtPYmplY3R9IHdyYXBwZWRPYmplY3QKKyAqLworZnVuY3Rpb24gUmVzb3VyY2Uo
d3JhcHBlZE9iamVjdCkKK3sKKyAgICB0aGlzLl9pZCA9ICsrUmVzb3VyY2UuX3VuaXF1ZUlkOwor
ICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IG51bGw7CisgICAgdGhpcy5fY2FsbHMgPSBbXTsK
KyAgICB0aGlzLnNldFdyYXBwZWRPYmplY3Qod3JhcHBlZE9iamVjdCk7Cit9CisKKy8qKgorICog
QHR5cGUge251bWJlcn0KKyAqLworUmVzb3VyY2UuX3VuaXF1ZUlkID0gMDsKKworLyoqCisgKiBA
cGFyYW0geyp9IG9iagorICogQHJldHVybiB7UmVzb3VyY2V9CisgKi8KK1Jlc291cmNlLmZvck9i
amVjdCA9IGZ1bmN0aW9uKG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFJlc291cmNlKQorICAgICAgICByZXR1cm4gb2Jq
OworICAgIGlmICh0eXBlb2Ygb2JqID09PSAib2JqZWN0IikKKyAgICAgICAgcmV0dXJuIG9ialsi
X19yZXNvdXJjZU9iamVjdCJdOworICAgIHJldHVybiBudWxsOworfQorCisvKioKKyAqIEBwYXJh
bSB7UmVzb3VyY2V8Kn0gb2JqCisgKiBAcmV0dXJuIHsqfQorICovCitSZXNvdXJjZS53cmFwcGVk
T2JqZWN0ID0gZnVuY3Rpb24ob2JqKQoreworICAgIHZhciByZXNvdXJjZSA9IFJlc291cmNlLmZv
ck9iamVjdChvYmopOworICAgIHJldHVybiByZXNvdXJjZSA/IHJlc291cmNlLndyYXBwZWRPYmpl
Y3QoKSA6IG9iajsKK30KKworLyoqCisgKiBAcGFyYW0ge1Jlc291cmNlfCp9IG9iagorICogQHBh
cmFtIHtDYWNoZX0gY2FjaGUKKyAqIEByZXR1cm4ge1JlcGxheWFibGVSZXNvdXJjZXwqfQorICov
CitSZXNvdXJjZS50b1JlcGxheWFibGUgPSBmdW5jdGlvbihvYmosIGNhY2hlKQoreworICAgIHZh
ciByZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChvYmopOworICAgIHJldHVybiByZXNvdXJj
ZSA/IHJlc291cmNlLnRvUmVwbGF5YWJsZShjYWNoZSkgOiBvYmo7Cit9CisKK1Jlc291cmNlLnBy
b3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICovCisg
ICAgaWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9pZDsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAgICAqLworICAgIHdyYXBw
ZWRPYmplY3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl93cmFwcGVk
T2JqZWN0OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUK
KyAgICAgKi8KKyAgICBzZXRXcmFwcGVkT2JqZWN0OiBmdW5jdGlvbih2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHZhbHVlLCAid3JhcHBlZE9iamVjdCBzaG91bGQgbm90IGJl
IE5VTEwiKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoISh2YWx1ZSBpbnN0YW5jZW9mIFJlc291
cmNlKSwgIkJpbmRpbmcgYSBSZXNvdXJjZSBvYmplY3QgdG8gYW5vdGhlciBSZXNvdXJjZSBvYmpl
Y3Q/Iik7CisgICAgICAgIHRoaXMuX3dyYXBwZWRPYmplY3QgPSB2YWx1ZTsKKyAgICAgICAgdGhp
cy5fYmluZE9iamVjdFRvUmVzb3VyY2UodmFsdWUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovCisgICAgcHJveHlPYmplY3Q6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5fcHJveHlPYmplY3QpCisgICAgICAgICAgICB0aGlz
Ll9wcm94eU9iamVjdCA9IHRoaXMuX3dyYXBPYmplY3QoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3Byb3h5T2JqZWN0OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtSZXNvdXJj
ZVRyYWNraW5nTWFuYWdlcn0KKyAgICAgKi8KKyAgICBtYW5hZ2VyOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VNYW5hZ2VyOworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge1Jlc291cmNlVHJhY2tpbmdNYW5hZ2VyfSB2YWx1ZQorICAgICAq
LworICAgIHNldE1hbmFnZXI6IGZ1bmN0aW9uKHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy5f
cmVzb3VyY2VNYW5hZ2VyID0gdmFsdWU7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1
cm4ge0FycmF5LjxDYWxsPn0KKyAgICAgKi8KKyAgICBjYWxsczogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVSZXNvdXJjZX0K
KyAgICAgKi8KKyAgICB0b1JlcGxheWFibGU6IGZ1bmN0aW9uKGNhY2hlKQorICAgIHsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IGNhY2hlLmdldCh0aGlzLl9pZCk7CisgICAgICAgIGlmIChyZXN1bHQp
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB2YXIgZGF0YSA9IHsKKyAgICAg
ICAgICAgIGlkOiB0aGlzLl9pZAorICAgICAgICB9OworICAgICAgICByZXN1bHQgPSBuZXcgUmVw
bGF5YWJsZVJlc291cmNlKHRoaXMsIGRhdGEpOworICAgICAgICBjYWNoZS5wdXQodGhpcy5faWQs
IHJlc3VsdCk7IC8vIFB1dCBpbnRvIHRoZSBjYWNoZSBlYXJseSB0byBhdm9pZCBsb29wcy4KKyAg
ICAgICAgZGF0YS5jYWxscyA9IHRoaXMuX2NhbGxzLm1hcChmdW5jdGlvbihjYWxsKSB7CisgICAg
ICAgICAgICByZXR1cm4gY2FsbC50b1JlcGxheWFibGUoY2FjaGUpOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy5fcG9wdWxhdGVSZXBsYXlhYmxlRGF0YShkYXRhLCBjYWNoZSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKi8KKyAgICBfcG9wdWxh
dGVSZXBsYXlhYmxlRGF0YTogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAgICAgICAv
LyBEbyBub3RoaW5nLiBTaG91bGQgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgorICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7
Q2FjaGV9IGNhY2hlCisgICAgICogQHJldHVybiB7UmVzb3VyY2V9CisgICAgICovCisgICAgcmVw
bGF5OiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJjZSA9
IGNhY2hlLmdldChkYXRhLmlkKTsKKyAgICAgICAgaWYgKHJlc291cmNlKQorICAgICAgICAgICAg
cmV0dXJuIHJlc291cmNlOworICAgICAgICB0aGlzLl9pZCA9IGRhdGEuaWQ7CisgICAgICAgIHRo
aXMuX3Jlc291cmNlTWFuYWdlciA9IG51bGw7CisgICAgICAgIHRoaXMuX2NhbGxzID0gW107Cisg
ICAgICAgIHRoaXMuX3dyYXBwZWRPYmplY3QgPSBudWxsOworICAgICAgICBjYWNoZS5wdXQoZGF0
YS5pZCwgdGhpcyk7IC8vIFB1dCBpbnRvIHRoZSBjYWNoZSBlYXJseSB0byBhdm9pZCBsb29wcy4K
KyAgICAgICAgdGhpcy5fZG9SZXBsYXlDYWxscyhkYXRhLCBjYWNoZSk7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRoaXMuX3dyYXBwZWRPYmplY3QsICJSZXNvdXJjZSBzaG91bGQgYmUgcmVjb25z
dHJ1Y3RlZCEiKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAg
ICAgKi8KKyAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgewor
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGRhdGEuY2FsbHMubGVuZ3RoOyBpIDwgbjsgKytp
KQorICAgICAgICAgICAgdGhpcy5fY2FsbHMucHVzaChkYXRhLmNhbGxzW2ldLnJlcGxheShjYWNo
ZSkpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKKyAgICAg
Ki8KKyAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAgIGNhbGwuZnJl
ZXplKCk7CisgICAgICAgIHRoaXMuX2NhbGxzLnB1c2goY2FsbCk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7IU9iamVjdH0gb2JqZWN0CisgICAgICovCisgICAgX2JpbmRPYmpl
Y3RUb1Jlc291cmNlOiBmdW5jdGlvbihvYmplY3QpCisgICAgeworICAgICAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkob2JqZWN0LCAiX19yZXNvdXJjZU9iamVjdCIsIHsKKyAgICAgICAgICAgIHZh
bHVlOiB0aGlzLAorICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAorICAgICAgICAgICAgZW51
bWVyYWJsZTogZmFsc2UsCisgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICAgICAg
fSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8K
KyAgICBfd3JhcE9iamVjdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHdyYXBwZWRP
YmplY3QgPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKKyAgICAgICAgaWYgKCF3cmFwcGVkT2JqZWN0
KQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciBwcm94eSA9IE9iamVjdC5j
cmVhdGUod3JhcHBlZE9iamVjdC5fX3Byb3RvX18pOyAvLyBJbiBvcmRlciB0byBlbXVsYXRlICJp
bnN0YW5jZW9mIi4KKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBjdXN0
b21XcmFwRnVuY3Rpb25zID0gdGhpcy5fY3VzdG9tV3JhcEZ1bmN0aW9ucygpOworICAgICAgICBm
dW5jdGlvbiBwcm9jZXNzUHJvcGVydHkocHJvcGVydHkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICh0eXBlb2Ygd3JhcHBlZE9iamVjdFtwcm9wZXJ0eV0gPT09ICJmdW5jdGlvbiIpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgY3VzdG9tV3JhcEZ1bmN0aW9uID0gY3VzdG9tV3JhcEZ1bmN0aW9u
c1twcm9wZXJ0eV07CisgICAgICAgICAgICAgICAgaWYgKGN1c3RvbVdyYXBGdW5jdGlvbikKKyAg
ICAgICAgICAgICAgICAgICAgcHJveHlbcHJvcGVydHldID0gc2VsZi5fd3JhcEN1c3RvbUZ1bmN0
aW9uKHNlbGYsIHdyYXBwZWRPYmplY3QsIHdyYXBwZWRPYmplY3RbcHJvcGVydHldLCBwcm9wZXJ0
eSwgY3VzdG9tV3JhcEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHByb3h5W3Byb3BlcnR5XSA9IHNlbGYuX3dyYXBGdW5jdGlvbihzZWxmLCB3cmFw
cGVkT2JqZWN0LCB3cmFwcGVkT2JqZWN0W3Byb3BlcnR5XSwgcHJvcGVydHkpOworICAgICAgICAg
ICAgfSBlbHNlIGlmICgvXltBLVowLTlfXSskLy50ZXN0KHByb3BlcnR5KSAmJiB0eXBlb2Ygd3Jh
cHBlZE9iamVjdFtwcm9wZXJ0eV0gPT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgLy8g
RmFzdCBhY2Nlc3MgdG8gZW51bXMgYW5kIGNvbnN0YW50cy4KKyAgICAgICAgICAgICAgICBwcm94
eVtwcm9wZXJ0eV0gPSB3cmFwcGVkT2JqZWN0W3Byb3BlcnR5XTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBwcm9wZXJ0
eSwgeworICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRPYmplY3RbcHJv
cGVydHldOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBzZXQ6
IGZ1bmN0aW9uKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogTG9nIHRoZSBzZXR0ZXIgY2FsbHMuCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLmVycm9yKCJGSVhNRTogU2V0dGluZyBhbiBhdHRyaWJ1dGUgJXMgd2Fz
IG5vdCBsb2dnZWQuIiwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBl
ZE9iamVjdFtwcm9wZXJ0eV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZQorICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIGlzRW1wdHkgPSB0cnVlOworICAg
ICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB3cmFwcGVkT2JqZWN0KSB7CisgICAgICAgICAgICBp
c0VtcHR5ID0gZmFsc2U7CisgICAgICAgICAgICBwcm9jZXNzUHJvcGVydHkocHJvcGVydHkpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChpc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuIHdyYXBw
ZWRPYmplY3Q7IC8vIE5vdGhpbmcgdG8gcHJveHkuCisKKyAgICAgICAgdGhpcy5fYmluZE9iamVj
dFRvUmVzb3VyY2UocHJveHkpOworICAgICAgICByZXR1cm4gcHJveHk7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEBwYXJhbSB7UmVzb3VyY2V9IHJlc291cmNlCisgICAgICogQHBhcmFtIHtP
YmplY3R9IG9yaWdpbmFsT2JqZWN0CisgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3JpZ2luYWxG
dW5jdGlvbgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUKKyAgICAgKiBAcGFy
YW0ge0Z1bmN0aW9ufSBjdXN0b21XcmFwRnVuY3Rpb24KKyAgICAgKiBAcmV0dXJuIHtGdW5jdGlv
bn0KKyAgICAgKi8KKyAgICBfd3JhcEN1c3RvbUZ1bmN0aW9uOiBmdW5jdGlvbihyZXNvdXJjZSwg
b3JpZ2luYWxPYmplY3QsIG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSwgY3VzdG9tV3Jh
cEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgdmFyIG1hbmFnZXIgPSByZXNvdXJjZS5tYW5hZ2VyKCk7CisgICAgICAgICAg
ICB2YXIgaXNDYXB0dXJpbmcgPSBtYW5hZ2VyICYmIG1hbmFnZXIuY2FwdHVyaW5nKCk7CisgICAg
ICAgICAgICBpZiAoaXNDYXB0dXJpbmcpCisgICAgICAgICAgICAgICAgbWFuYWdlci5jYXB0dXJl
QXJndW1lbnRzKHJlc291cmNlLCBhcmd1bWVudHMpOworICAgICAgICAgICAgdmFyIHdyYXBGdW5j
dGlvbiA9IG5ldyBSZXNvdXJjZS5XcmFwRnVuY3Rpb24ob3JpZ2luYWxPYmplY3QsIG9yaWdpbmFs
RnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIGN1c3RvbVdy
YXBGdW5jdGlvbi5hcHBseSh3cmFwRnVuY3Rpb24sIGFyZ3VtZW50cyk7CisgICAgICAgICAgICBp
ZiAoaXNDYXB0dXJpbmcpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FsbCA9IHdyYXBGdW5jdGlv
bi5jYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbC5zZXRTdGFja1RyYWNlKFN0YWNrVHJhY2Uu
Y3JlYXRlKDEsIGFyZ3VtZW50cy5jYWxsZWUpKTsKKyAgICAgICAgICAgICAgICBtYW5hZ2VyLnJl
cG9ydENhbGwoY2FsbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gd3JhcEZ1
bmN0aW9uLnJlc3VsdCgpOworICAgICAgICB9OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge1Jlc291cmNlfSByZXNvdXJjZQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcmlnaW5h
bE9iamVjdAorICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9yaWdpbmFsRnVuY3Rpb24KKyAgICAg
KiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lCisgICAgICogQHJldHVybiB7RnVuY3Rpb259
CisgICAgICovCisgICAgX3dyYXBGdW5jdGlvbjogZnVuY3Rpb24ocmVzb3VyY2UsIG9yaWdpbmFs
T2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbWFuYWdlciA9IHJl
c291cmNlLm1hbmFnZXIoKTsKKyAgICAgICAgICAgIGlmICghbWFuYWdlciB8fCAhbWFuYWdlci5j
YXB0dXJpbmcoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxGdW5jdGlvbi5hcHBs
eShvcmlnaW5hbE9iamVjdCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIG1hbmFnZXIuY2FwdHVy
ZUFyZ3VtZW50cyhyZXNvdXJjZSwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIHZhciByZXN1bHQg
PSBvcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KG9yaWdpbmFsT2JqZWN0LCBhcmd1bWVudHMpOworICAg
ICAgICAgICAgdmFyIHN0YWNrVHJhY2UgPSBTdGFja1RyYWNlLmNyZWF0ZSgxLCBhcmd1bWVudHMu
Y2FsbGVlKTsKKyAgICAgICAgICAgIHZhciBjYWxsID0gbmV3IENhbGwocmVzb3VyY2UsIGZ1bmN0
aW9uTmFtZSwgYXJndW1lbnRzLCByZXN1bHQsIHN0YWNrVHJhY2UpOworICAgICAgICAgICAgbWFu
YWdlci5yZXBvcnRDYWxsKGNhbGwpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7T2JqZWN0LjxzdHJpbmcs
IEZ1bmN0aW9uPn0KKyAgICAgKi8KKyAgICBfY3VzdG9tV3JhcEZ1bmN0aW9uczogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHt9OyAvLyBNYXkgYmUgb3ZlcnJpZGRlbiBieSBzdWJj
bGFzc2VzLgorICAgIH0KK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7T2Jq
ZWN0fSBvcmlnaW5hbE9iamVjdAorICogQHBhcmFtIHtGdW5jdGlvbn0gb3JpZ2luYWxGdW5jdGlv
bgorICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZQorICogQHBhcmFtIHtBcnJheXxBcmd1
bWVudHN9IGFyZ3MKKyAqLworUmVzb3VyY2UuV3JhcEZ1bmN0aW9uID0gZnVuY3Rpb24ob3JpZ2lu
YWxPYmplY3QsIG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSwgYXJncykKK3sKKyAgICB0
aGlzLl9vcmlnaW5hbE9iamVjdCA9IG9yaWdpbmFsT2JqZWN0OworICAgIHRoaXMuX29yaWdpbmFs
RnVuY3Rpb24gPSBvcmlnaW5hbEZ1bmN0aW9uOworICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IGZ1
bmN0aW9uTmFtZTsKKyAgICB0aGlzLl9hcmdzID0gYXJnczsKKyAgICB0aGlzLl9yZXNvdXJjZSA9
IFJlc291cmNlLmZvck9iamVjdChvcmlnaW5hbE9iamVjdCk7CisgICAgY29uc29sZS5hc3NlcnQo
dGhpcy5fcmVzb3VyY2UsICJFeHBlY3RlZCBhIHdyYXBwZWQgY2FsbCBvbiBhIFJlc291cmNlIG9i
amVjdC4iKTsKK30KKworUmVzb3VyY2UuV3JhcEZ1bmN0aW9uLnByb3RvdHlwZSA9IHsKKyAgICAv
KioKKyAgICAgKiBAcmV0dXJuIHsqfQorICAgICAqLworICAgIHJlc3VsdDogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leGVjdXRlZCkgeworICAgICAgICAgICAgdGhpcy5f
ZXhlY3V0ZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5fcmVzdWx0ID0gdGhpcy5fb3JpZ2lu
YWxGdW5jdGlvbi5hcHBseSh0aGlzLl9vcmlnaW5hbE9iamVjdCwgdGhpcy5fYXJncyk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHJldHVybiB7Q2FsbH0KKyAgICAgKi8KKyAgICBjYWxsOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICBpZiAoIXRoaXMuX2NhbGwpCisgICAgICAgICAgICB0aGlzLl9jYWxsID0gbmV3
IENhbGwodGhpcy5fcmVzb3VyY2UsIHRoaXMuX2Z1bmN0aW9uTmFtZSwgdGhpcy5fYXJncywgdGhp
cy5yZXN1bHQoKSk7CisgICAgICAgIHJldHVybiB0aGlzLl9jYWxsOworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0geyp9IHJlc3VsdAorICAgICAqLworICAgIG92ZXJyaWRlUmVzdWx0
OiBmdW5jdGlvbihyZXN1bHQpCisgICAgeworICAgICAgICB2YXIgY2FsbCA9IHRoaXMuY2FsbCgp
OworICAgICAgICBjYWxsLnNldFJlc3VsdChyZXN1bHQpOworICAgICAgICB0aGlzLl9yZXN1bHQg
PSByZXN1bHQ7CisgICAgfQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtS
ZXNvdXJjZX0gb3JpZ2luYWxSZXNvdXJjZQorICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAqLwor
ZnVuY3Rpb24gUmVwbGF5YWJsZVJlc291cmNlKG9yaWdpbmFsUmVzb3VyY2UsIGRhdGEpCit7Cisg
ICAgdGhpcy5fcHJvdG8gPSBvcmlnaW5hbFJlc291cmNlLl9fcHJvdG9fXzsKKyAgICB0aGlzLl9k
YXRhID0gZGF0YTsKK30KKworUmVwbGF5YWJsZVJlc291cmNlLnByb3RvdHlwZSA9IHsKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqIEByZXR1cm4ge1Jlc291cmNl
fQorICAgICAqLworICAgIHJlcGxheTogZnVuY3Rpb24oY2FjaGUpCisgICAgeworICAgICAgICB2
YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLl9wcm90byk7CisgICAgICAgIHJlc3VsdCA9
IHJlc3VsdC5yZXBsYXkodGhpcy5fZGF0YSwgY2FjaGUpCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHJlc3VsdC5fX3Byb3RvX18gPT09IHRoaXMuX3Byb3RvLCAiV3JvbmcgdHlwZSBvZiBhIHJlcGxh
eSByZXN1bHQiKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9CisKKy8qKgorICog
QHBhcmFtIHtSZXBsYXlhYmxlUmVzb3VyY2V8Kn0gb2JqCisgKiBAcGFyYW0ge0NhY2hlfSBjYWNo
ZQorICogQHJldHVybiB7Kn0KKyAqLworUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheSA9IGZ1bmN0
aW9uKG9iaiwgY2FjaGUpCit7CisgICAgcmV0dXJuIChvYmogaW5zdGFuY2VvZiBSZXBsYXlhYmxl
UmVzb3VyY2UpID8gb2JqLnJlcGxheShjYWNoZSkud3JhcHBlZE9iamVjdCgpIDogb2JqOworfQor
CisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMge1Jlc291cmNlfQorICovCitmdW5j
dGlvbiBXZWJHTEJvdW5kUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKK3sKKyAgICBSZXNvdXJjZS5j
YWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOworICAgIHRoaXMuX3N0YXRlID0ge307Cit9CisKK1dl
YkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQG92ZXJyaWRl
CisgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNo
ZQorICAgICAqLworICAgIF9wb3B1bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlvbihkYXRhLCBj
YWNoZSkKKyAgICB7CisgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlOworICAgICAgICBk
YXRhLnN0YXRlID0ge307CisgICAgICAgIE9iamVjdC5rZXlzKHN0YXRlKS5mb3JFYWNoKGZ1bmN0
aW9uKHBhcmFtZXRlcikgeworICAgICAgICAgICAgZGF0YS5zdGF0ZVtwYXJhbWV0ZXJdID0gUmVz
b3VyY2UudG9SZXBsYXlhYmxlKHN0YXRlW3BhcmFtZXRlcl0sIGNhY2hlKTsKKyAgICAgICAgfSk7
CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7T2Jq
ZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKi8KKyAgICBfZG9S
ZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAgICAgICB2YXIgc3Rh
dGUgPSB7fTsKKyAgICAgICAgT2JqZWN0LmtleXMoZGF0YS5zdGF0ZSkuZm9yRWFjaChmdW5jdGlv
bihwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgIHN0YXRlW3BhcmFtZXRlcl0gPSBSZXBsYXlhYmxl
UmVzb3VyY2UucmVwbGF5KGRhdGEuc3RhdGVbcGFyYW1ldGVyXSwgY2FjaGUpOworICAgICAgICB9
KTsKKyAgICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTsKKworICAgICAgICB2YXIgZ2wgPSB0aGlz
Ll9yZXBsYXlDb250ZXh0UmVzb3VyY2UoZGF0YSwgY2FjaGUpLndyYXBwZWRPYmplY3QoKTsKKwor
ICAgICAgICB2YXIgYmluZGluZ3NEYXRhID0geworICAgICAgICAgICAgVEVYVFVSRV8yRDogWyJi
aW5kVGV4dHVyZSIsICJURVhUVVJFX0JJTkRJTkdfMkQiXSwKKyAgICAgICAgICAgIFRFWFRVUkVf
Q1VCRV9NQVA6IFsiYmluZFRleHR1cmUiLCAiVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQIl0sCisg
ICAgICAgICAgICBBUlJBWV9CVUZGRVI6IFsiYmluZEJ1ZmZlciIsICJBUlJBWV9CVUZGRVJfQklO
RElORyJdLAorICAgICAgICAgICAgRUxFTUVOVF9BUlJBWV9CVUZGRVI6IFsiYmluZEJ1ZmZlciIs
ICJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HIl0sCisgICAgICAgICAgICBGUkFNRUJVRkZF
UjogWyJiaW5kRnJhbWVidWZmZXIiLCAiRlJBTUVCVUZGRVJfQklORElORyJdLAorICAgICAgICAg
ICAgUkVOREVSQlVGRkVSOiBbImJpbmRSZW5kZXJidWZmZXIiLCAiUkVOREVSQlVGRkVSX0JJTkRJ
TkciXQorICAgICAgICB9OworICAgICAgICB2YXIgb3JpZ2luYWxCaW5kaW5ncyA9IHt9OworICAg
ICAgICBPYmplY3Qua2V5cyhiaW5kaW5nc0RhdGEpLmZvckVhY2goZnVuY3Rpb24oYmluZGluZ1Rh
cmdldCkgeworICAgICAgICAgICAgdmFyIGJpbmRpbmdQYXJhbWV0ZXIgPSBiaW5kaW5nc0RhdGFb
YmluZGluZ1RhcmdldF1bMV07CisgICAgICAgICAgICBvcmlnaW5hbEJpbmRpbmdzW2JpbmRpbmdU
YXJnZXRdID0gZ2wuZ2V0UGFyYW1ldGVyKGdsW2JpbmRpbmdQYXJhbWV0ZXJdKTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgUmVzb3VyY2UucHJvdG90eXBlLl9kb1JlcGxheUNhbGxzLmNhbGwodGhp
cywgZGF0YSwgY2FjaGUpOworCisgICAgICAgIE9iamVjdC5rZXlzKGJpbmRpbmdzRGF0YSkuZm9y
RWFjaChmdW5jdGlvbihiaW5kaW5nVGFyZ2V0KSB7CisgICAgICAgICAgICB2YXIgYmluZE1ldGhv
ZE5hbWUgPSBiaW5kaW5nc0RhdGFbYmluZGluZ1RhcmdldF1bMF07CisgICAgICAgICAgICBnbFti
aW5kTWV0aG9kTmFtZV0uY2FsbChnbCwgZ2xbYmluZGluZ1RhcmdldF0sIG9yaWdpbmFsQmluZGlu
Z3NbYmluZGluZ1RhcmdldF0pOworICAgICAgICB9KTsKKyAgICB9LAorCisgICAgX3JlcGxheUNv
bnRleHRSZXNvdXJjZTogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAgICAgICB2YXIg
Y2FsbHMgPSBkYXRhLmNhbGxzOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGNhbGxzLmxl
bmd0aDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgdmFyIHJlc291cmNlID0gUmVwbGF5YWJs
ZVJlc291cmNlLnJlcGxheShjYWxsc1tpXS5yZXNvdXJjZSgpLCBjYWNoZSk7CisgICAgICAgICAg
ICB2YXIgY29udGV4dFJlc291cmNlID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuZm9y
T2JqZWN0KHJlc291cmNlKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0UmVzb3VyY2UpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRSZXNvdXJjZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHRh
cmdldAorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiaW5kTWV0aG9kTmFtZQorICAgICAqLworICAg
IHB1c2hCaW5kaW5nOiBmdW5jdGlvbih0YXJnZXQsIGJpbmRNZXRob2ROYW1lKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMuX3N0YXRlLkJJTkRJTkcgIT09IHRhcmdldCkgeworICAgICAgICAgICAg
dGhpcy5fc3RhdGUuQklORElORyA9IHRhcmdldDsKKyAgICAgICAgICAgIHRoaXMucHVzaENhbGwo
bmV3IENhbGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMpLCBi
aW5kTWV0aG9kTmFtZSwgW3RhcmdldCwgdGhpc10pKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
V2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBSZXNvdXJjZS5wcm90b3R5
cGU7CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyB7V2ViR0xCb3VuZFJlc291
cmNlfQorICovCitmdW5jdGlvbiBXZWJHTFRleHR1cmVSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQor
eworICAgIFdlYkdMQm91bmRSZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOworfQor
CitXZWJHTFRleHR1cmVSZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQG92
ZXJyaWRlCisgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAgICAgKiBAcGFyYW0ge0NhY2hl
fSBjYWNoZQorICAgICAqLworICAgIF9kb1JlcGxheUNhbGxzOiBmdW5jdGlvbihkYXRhLCBjYWNo
ZSkKKyAgICB7CisgICAgICAgIHZhciBnbCA9IHRoaXMuX3JlcGxheUNvbnRleHRSZXNvdXJjZShk
YXRhLCBjYWNoZSkud3JhcHBlZE9iamVjdCgpOworCisgICAgICAgIHZhciBzdGF0ZSA9IHt9Owor
ICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVy
cy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgeworICAgICAgICAgICAgc3RhdGVbcGFyYW1l
dGVyXSA9IGdsLmdldFBhcmFtZXRlcihnbFtwYXJhbWV0ZXJdKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5fZG9SZXBsYXlDYWxscy5jYWxsKHRo
aXMsIGRhdGEsIGNhY2hlKTsKKworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJj
ZS5QaXhlbFN0b3JlUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgeworICAg
ICAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2xbcGFyYW1ldGVyXSwgc3RhdGVbcGFyYW1ldGVyXSk7
CisgICAgICAgIH0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAg
KiBAcGFyYW0ge0NhbGx9IGNhbGwKKyAgICAgKi8KKyAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2Fs
bCkKKyAgICB7CisgICAgICAgIHZhciBnbCA9IGNhbGwucmVzb3VyY2UoKS53cmFwcGVkT2JqZWN0
KCk7CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlBpeGVsU3RvcmVQYXJh
bWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICB2YXIgdmFs
dWUgPSBnbC5nZXRQYXJhbWV0ZXIoZ2xbcGFyYW1ldGVyXSk7CisgICAgICAgICAgICBpZiAodGhp
cy5fc3RhdGVbcGFyYW1ldGVyXSAhPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9z
dGF0ZVtwYXJhbWV0ZXJdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdmFyIHBpeGVsU3RvcmVD
YWxsID0gbmV3IENhbGwoZ2wsICJwaXhlbFN0b3JlaSIsIFtnbFtwYXJhbWV0ZXJdLCB2YWx1ZV0p
OworICAgICAgICAgICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwu
Y2FsbCh0aGlzLCBwaXhlbFN0b3JlQ2FsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIHRo
aXMpOworCisgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNhbGxzIHRoYXQgbm8g
bG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgorICAgICAgICAvLyBGSVhN
RTogb3B0aW1pemUgbWVtb3J5IHVzYWdlOiBtYXliZSBpdCdzIG1vcmUgZWZmaWNpZW50IHRvIHN0
b3JlIG9uZSB0ZXhJbWFnZTJEIGNhbGwgaW5zdGVhZCBvZiBtYW55IHRleFN1YkltYWdlMkQuCisg
ICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwuY2FsbCh0aGlzLCBj
YWxsKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisgICAg
ICovCisgICAgcHVzaENhbGxfdGV4UGFyYW1ldGVyZjogZnVuY3Rpb24oY2FsbCkKKyAgICB7Cisg
ICAgICAgIHZhciBhcmdzID0gY2FsbC5hcmdzKCk7CisgICAgICAgIHZhciBwbmFtZSA9IGFyZ3Nb
MV07CisgICAgICAgIHZhciBwYXJhbSA9IGFyZ3NbMl07CisgICAgICAgIGlmICh0aGlzLl9zdGF0
ZVtwbmFtZV0gIT09IHBhcmFtKSB7CisgICAgICAgICAgICB0aGlzLl9zdGF0ZVtwbmFtZV0gPSBw
YXJhbTsKKyAgICAgICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwu
Y2FsbCh0aGlzLCBjYWxsKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBj
b3B5VGV4SW1hZ2UyRCBhbmQgY29weVRleFN1YkltYWdlMkQgZGVmaW5lIGEgdGV4dHVyZSBpbWFn
ZSB3aXRoIHBpeGVscyBmcm9tIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLgorICAgICAqIEBwYXJh
bSB7Q2FsbH0gY2FsbAorICAgICAqLworICAgIHB1c2hDYWxsX2NvcHlUZXhJbWFnZTJEOiBmdW5j
dGlvbihjYWxsKQorICAgIHsKKyAgICAgICAgdmFyIGdsUmVzb3VyY2UgPSBjYWxsLnJlc291cmNl
KCk7CisgICAgICAgIHZhciBnbCA9IGdsUmVzb3VyY2Uud3JhcHBlZE9iamVjdCgpOworICAgICAg
ICB2YXIgZnJhbWVidWZmZXJSZXNvdXJjZSA9IGdsUmVzb3VyY2UuY3VycmVudEJpbmRpbmcoZ2wu
RlJBTUVCVUZGRVIpOworICAgICAgICBpZiAoZnJhbWVidWZmZXJSZXNvdXJjZSkKKyAgICAgICAg
ICAgIHRoaXMucHVzaENhbGwobmV3IENhbGwoZ2xSZXNvdXJjZSwgImJpbmRGcmFtZWJ1ZmZlciIs
IFtnbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXJSZXNvdXJjZV0pKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY29uc29sZS5lcnJvcigiQVNTRVJUX05PVF9SRUFDSEVEOiBObyBGUkFNRUJV
RkZFUiBib3VuZCB3aGlsZSBjYWxsaW5nIGdsLiIgKyBjYWxsLmZ1bmN0aW9uTmFtZSgpKTsKKyAg
ICAgICAgdGhpcy5wdXNoQ2FsbChjYWxsKTsKKyAgICB9Cit9CisKK1dlYkdMVGV4dHVyZVJlc291
cmNlLnByb3RvdHlwZS5wdXNoQ2FsbF90ZXhQYXJhbWV0ZXJpID0gV2ViR0xUZXh0dXJlUmVzb3Vy
Y2UucHJvdG90eXBlLnB1c2hDYWxsX3RleFBhcmFtZXRlcmY7CitXZWJHTFRleHR1cmVSZXNvdXJj
ZS5wcm90b3R5cGUucHVzaENhbGxfY29weVRleFN1YkltYWdlMkQgPSBXZWJHTFRleHR1cmVSZXNv
dXJjZS5wcm90b3R5cGUucHVzaENhbGxfY29weVRleEltYWdlMkQ7CisKK1dlYkdMVGV4dHVyZVJl
c291cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBl
OworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMge1Jlc291cmNlfQorICovCitm
dW5jdGlvbiBXZWJHTFByb2dyYW1SZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQoreworICAgIFJlc291
cmNlLmNhbGwodGhpcywgd3JhcHBlZE9iamVjdCk7Cit9CisKK1dlYkdMUHJvZ3JhbVJlc291cmNl
LnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0g
e09iamVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICovCisgICAg
X3BvcHVsYXRlUmVwbGF5YWJsZURhdGE6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQorICAgIHsKKyAg
ICAgICAgdmFyIGdsUmVzb3VyY2UgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5mb3JP
YmplY3QodGhpcyk7CisgICAgICAgIHZhciBnbCA9IGdsUmVzb3VyY2Uud3JhcHBlZE9iamVjdCgp
OworICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMud3JhcHBlZE9iamVjdCgpOworCisgICAgICAg
IHZhciBvcmlnaW5hbEVycm9ycyA9IGdsUmVzb3VyY2UuZ2V0QWxsRXJyb3JzKCk7CisKKyAgICAg
ICAgdmFyIHVuaWZvcm1zID0gW107CisgICAgICAgIHZhciB1bmlmb3Jtc0NvdW50ID0gZ2wuZ2V0
UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfVU5JRk9STVMpOworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1zQ291bnQ7ICsraSkgeworICAgICAgICAgICAgdmFy
IGFjdGl2ZUluZm8gPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpOworICAgICAgICAg
ICAgaWYgKCFhY3RpdmVJbmZvKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgdmFyIHVuaWZvcm1Mb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBh
Y3RpdmVJbmZvLm5hbWUpOworICAgICAgICAgICAgaWYgKCF1bmlmb3JtTG9jYXRpb24pCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBnbC5nZXRVbmlm
b3JtKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbik7CisgICAgICAgICAgICB1bmlmb3Jtcy5wdXNo
KHsKKyAgICAgICAgICAgICAgICBuYW1lOiBhY3RpdmVJbmZvLm5hbWUsCisgICAgICAgICAgICAg
ICAgdHlwZTogYWN0aXZlSW5mby50eXBlLAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YS51bmlmb3JtcyA9IHVuaWZv
cm1zOworCisgICAgICAgIGdsUmVzb3VyY2UucmVzdG9yZUVycm9ycyhvcmlnaW5hbEVycm9ycyk7
CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7T2Jq
ZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKi8KKyAgICBfZG9S
ZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAgICAgICBSZXNvdXJj
ZS5wcm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBjYWNoZSk7CisgICAg
ICAgIHZhciBnbCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9iamVjdCh0aGlz
KS53cmFwcGVkT2JqZWN0KCk7CisgICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy53cmFwcGVkT2Jq
ZWN0KCk7CisKKyAgICAgICAgdmFyIG9yaWdpbmFsUHJvZ3JhbSA9IGdsLmdldFBhcmFtZXRlcihn
bC5DVVJSRU5UX1BST0dSQU0pOworICAgICAgICB2YXIgY3VycmVudFByb2dyYW0gPSBvcmlnaW5h
bFByb2dyYW07CisgICAgICAgIAorICAgICAgICBkYXRhLnVuaWZvcm1zLmZvckVhY2goZnVuY3Rp
b24odW5pZm9ybSkgeworICAgICAgICAgICAgdmFyIHVuaWZvcm1Mb2NhdGlvbiA9IGdsLmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3JtLm5hbWUpOworICAgICAgICAgICAgaWYgKCF1
bmlmb3JtTG9jYXRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYg
KGN1cnJlbnRQcm9ncmFtICE9PSBwcm9ncmFtKSB7CisgICAgICAgICAgICAgICAgY3VycmVudFBy
b2dyYW0gPSBwcm9ncmFtOworICAgICAgICAgICAgICAgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbWV0aG9kTmFtZSA9IHRoaXMuX3VuaWZv
cm1NZXRob2ROYW1lQnlUeXBlKGdsLCB1bmlmb3JtLnR5cGUpOworICAgICAgICAgICAgaWYgKG1l
dGhvZE5hbWUuaW5kZXhPZigiTWF0cml4IikgPT09IC0xKQorICAgICAgICAgICAgICAgIGdsW21l
dGhvZE5hbWVdLmNhbGwoZ2wsIHVuaWZvcm1Mb2NhdGlvbiwgdW5pZm9ybS52YWx1ZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ2xbbWV0aG9kTmFtZV0uY2FsbChnbCwgdW5p
Zm9ybUxvY2F0aW9uLCBmYWxzZSwgdW5pZm9ybS52YWx1ZSk7CisgICAgICAgIH0uYmluZCh0aGlz
KSk7CisKKyAgICAgICAgaWYgKGN1cnJlbnRQcm9ncmFtICE9PSBvcmlnaW5hbFByb2dyYW0pCisg
ICAgICAgICAgICBnbC51c2VQcm9ncmFtKG9yaWdpbmFsUHJvZ3JhbSk7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbAorICAgICAqIEBw
YXJhbSB7bnVtYmVyfSB0eXBlCisgICAgICogQHJldHVybiB7c3RyaW5nfQorICAgICAqLworICAg
IF91bmlmb3JtTWV0aG9kTmFtZUJ5VHlwZTogZnVuY3Rpb24oZ2wsIHR5cGUpCisgICAgeworICAg
ICAgICB2YXIgdW5pZm9ybU1ldGhvZE5hbWVzID0gV2ViR0xQcm9ncmFtUmVzb3VyY2UuX3VuaWZv
cm1NZXRob2ROYW1lczsKKyAgICAgICAgaWYgKCF1bmlmb3JtTWV0aG9kTmFtZXMpIHsKKyAgICAg
ICAgICAgIHVuaWZvcm1NZXRob2ROYW1lcyA9IHt9OworICAgICAgICAgICAgdW5pZm9ybU1ldGhv
ZE5hbWVzW2dsLkZMT0FUXSA9ICJ1bmlmb3JtMWYiOworICAgICAgICAgICAgdW5pZm9ybU1ldGhv
ZE5hbWVzW2dsLkZMT0FUX1ZFQzJdID0gInVuaWZvcm0yZnYiOworICAgICAgICAgICAgdW5pZm9y
bU1ldGhvZE5hbWVzW2dsLkZMT0FUX1ZFQzNdID0gInVuaWZvcm0zZnYiOworICAgICAgICAgICAg
dW5pZm9ybU1ldGhvZE5hbWVzW2dsLkZMT0FUX1ZFQzRdID0gInVuaWZvcm00ZnYiOworICAgICAg
ICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLklOVF0gPSAidW5pZm9ybTFpIjsKKyAgICAgICAg
ICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5CT09MXSA9ICJ1bmlmb3JtMWkiOworICAgICAgICAg
ICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLlNBTVBMRVJfMkRdID0gInVuaWZvcm0xaSI7CisgICAg
ICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuU0FNUExFUl9DVUJFXSA9ICJ1bmlmb3JtMWki
OworICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLklOVF9WRUMyXSA9ICJ1bmlmb3Jt
Mml2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5CT09MX1ZFQzJdID0gInVu
aWZvcm0yaXYiOworICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLklOVF9WRUMzXSA9
ICJ1bmlmb3JtM2l2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5CT09MX1ZF
QzNdID0gInVuaWZvcm0zaXYiOworICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLklO
VF9WRUM0XSA9ICJ1bmlmb3JtNGl2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tn
bC5CT09MX1ZFQzRdID0gInVuaWZvcm00aXYiOworICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5h
bWVzW2dsLkZMT0FUX01BVDJdID0gInVuaWZvcm1NYXRyaXgyZnYiOworICAgICAgICAgICAgdW5p
Zm9ybU1ldGhvZE5hbWVzW2dsLkZMT0FUX01BVDNdID0gInVuaWZvcm1NYXRyaXgzZnYiOworICAg
ICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLkZMT0FUX01BVDRdID0gInVuaWZvcm1NYXRy
aXg0ZnYiOworICAgICAgICAgICAgV2ViR0xQcm9ncmFtUmVzb3VyY2UuX3VuaWZvcm1NZXRob2RO
YW1lcyA9IHVuaWZvcm1NZXRob2ROYW1lczsKKyAgICAgICAgfQorICAgICAgICBjb25zb2xlLmFz
c2VydCh1bmlmb3JtTWV0aG9kTmFtZXNbdHlwZV0sICJVbmtub3duIHVuaWZvcm0gdHlwZSAiICsg
dHlwZSk7CisgICAgICAgIHJldHVybiB1bmlmb3JtTWV0aG9kTmFtZXNbdHlwZV07CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAor
ICAgICAqLworICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxsKQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IHJlbW92ZSBhbnkgb2xkZXIgY2FsbHMgdGhhdCBubyBsb25nZXIgY29udHJpYnV0ZSB0
byB0aGUgcmVzb3VyY2Ugc3RhdGUuCisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGlwbGUg
YXR0YWNoU2hhZGVyICYmIGRldGFjaFNoYWRlci4KKyAgICAgICAgUmVzb3VyY2UucHJvdG90eXBl
LnB1c2hDYWxsLmNhbGwodGhpcywgY2FsbCk7CisgICAgfQorfQorCitXZWJHTFByb2dyYW1SZXNv
dXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gUmVzb3VyY2UucHJvdG90eXBlOworCisvKioKKyAq
IEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMge1Jlc291cmNlfQorICovCitmdW5jdGlvbiBXZWJH
TFNoYWRlclJlc291cmNlKHdyYXBwZWRPYmplY3QpCit7CisgICAgUmVzb3VyY2UuY2FsbCh0aGlz
LCB3cmFwcGVkT2JqZWN0KTsKK30KKworV2ViR0xTaGFkZXJSZXNvdXJjZS5wcm90b3R5cGUgPSB7
CisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisg
ICAgICovCisgICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICAvLyBG
SVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRv
IHRoZSByZXNvdXJjZSBzdGF0ZS4KKyAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBtdWx0aXBsZSBz
aGFkZXJTb3VyY2UgY2FsbHMuCisgICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbC5j
YWxsKHRoaXMsIGNhbGwpOworICAgIH0KK30KKworV2ViR0xTaGFkZXJSZXNvdXJjZS5wcm90b3R5
cGUuX19wcm90b19fID0gUmVzb3VyY2UucHJvdG90eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3Rv
cgorICogQGV4dGVuZHMge1dlYkdMQm91bmRSZXNvdXJjZX0KKyAqLworZnVuY3Rpb24gV2ViR0xC
dWZmZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQoreworICAgIFdlYkdMQm91bmRSZXNvdXJjZS5j
YWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOworfQorCitXZWJHTEJ1ZmZlclJlc291cmNlLnByb3Rv
dHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge0NhbGx9
IGNhbGwKKyAgICAgKi8KKyAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAg
ICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNhbGxzIHRoYXQgbm8gbG9uZ2VyIGNvbnRy
aWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgorICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUg
bWVtb3J5IGZvciBidWZmZXJTdWJEYXRhLgorICAgICAgICBXZWJHTEJvdW5kUmVzb3VyY2UucHJv
dG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgY2FsbCk7CisgICAgfQorfQorCitXZWJHTEJ1ZmZl
clJlc291cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90
eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMge1dlYkdMQm91bmRSZXNv
dXJjZX0KKyAqLworZnVuY3Rpb24gV2ViR0xGcmFtZWJ1ZmZlclJlc291cmNlKHdyYXBwZWRPYmpl
Y3QpCit7CisgICAgV2ViR0xCb3VuZFJlc291cmNlLmNhbGwodGhpcywgd3JhcHBlZE9iamVjdCk7
Cit9CisKK1dlYkdMRnJhbWVidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisg
ICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisgICAgICovCisgICAg
cHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICAvLyBGSVhNRTogcmVtb3Zl
IGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRvIHRoZSByZXNvdXJj
ZSBzdGF0ZS4KKyAgICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbC5j
YWxsKHRoaXMsIGNhbGwpOworICAgIH0KK30KKworV2ViR0xGcmFtZWJ1ZmZlclJlc291cmNlLnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlOworCisvKioK
KyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMge1dlYkdMQm91bmRSZXNvdXJjZX0KKyAqLwor
ZnVuY3Rpb24gV2ViR0xSZW5kZXJidWZmZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQoreworICAg
IFdlYkdMQm91bmRSZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOworfQorCitXZWJH
TFJlbmRlcmJ1ZmZlclJlc291cmNlLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAb3Zl
cnJpZGUKKyAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKKyAgICAgKi8KKyAgICBwdXNoQ2FsbDog
ZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVy
IGNhbGxzIHRoYXQgbm8gbG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgor
ICAgICAgICBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywg
Y2FsbCk7CisgICAgfQorfQorCitXZWJHTFJlbmRlcmJ1ZmZlclJlc291cmNlLnByb3RvdHlwZS5f
X3Byb3RvX18gPSBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlOworCisvKioKKyAqIEBjb25z
dHJ1Y3RvcgorICogQGV4dGVuZHMge1Jlc291cmNlfQorICogQHBhcmFtIHtXZWJHTFJlbmRlcmlu
Z0NvbnRleHR9IGdsQ29udGV4dAorICogQHBhcmFtIHtGdW5jdGlvbn0gcmVwbGF5Q29udGV4dENh
bGxiYWNrCisgKi8KK2Z1bmN0aW9uIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlKGdsQ29u
dGV4dCwgcmVwbGF5Q29udGV4dENhbGxiYWNrKQoreworICAgIFJlc291cmNlLmNhbGwodGhpcywg
Z2xDb250ZXh0KTsKKyAgICB0aGlzLl9yZXBsYXlDb250ZXh0Q2FsbGJhY2sgPSByZXBsYXlDb250
ZXh0Q2FsbGJhY2s7CisgICAgLyoqIEB0eXBlIHtPYmplY3QuPG51bWJlciwgYm9vbGVhbj59ICov
CisgICAgdGhpcy5fY3VzdG9tRXJyb3JzID0gbnVsbDsKK30KKworLyoqCisgKiBAY29uc3QKKyAq
IEB0eXBlIHtBcnJheS48c3RyaW5nPn0KKyAqLworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3Vy
Y2UuR0xDYXBhYmlsaXRpZXMgPSBbCisgICAgIkJMRU5EIiwKKyAgICAiQ1VMTF9GQUNFIiwKKyAg
ICAiREVQVEhfVEVTVCIsCisgICAgIkRJVEhFUiIsCisgICAgIlBPTFlHT05fT0ZGU0VUX0ZJTEwi
LAorICAgICJTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UiLAorICAgICJTQU1QTEVfQ09WRVJBR0Ui
LAorICAgICJTQ0lTU09SX1RFU1QiLAorICAgICJTVEVOQ0lMX1RFU1QiCitdOworCisvKioKKyAq
IEBjb25zdAorICogQHR5cGUge0FycmF5LjxzdHJpbmc+fQorICovCitXZWJHTFJlbmRlcmluZ0Nv
bnRleHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVycyA9IFsKKyAgICAiUEFDS19BTElHTk1F
TlQiLAorICAgICJVTlBBQ0tfQUxJR05NRU5UIiwKKyAgICAiVU5QQUNLX0NPTE9SU1BBQ0VfQ09O
VkVSU0lPTl9XRUJHTCIsCisgICAgIlVOUEFDS19GTElQX1lfV0VCR0wiLAorICAgICJVTlBBQ0tf
UFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiCitdOworCisvKioKKyAqIEBjb25zdAorICogQHR5cGUg
e0FycmF5LjxzdHJpbmc+fQorICovCitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5TdGF0
ZVBhcmFtZXRlcnMgPSBbCisgICAgIkFDVElWRV9URVhUVVJFIiwKKyAgICAiQVJSQVlfQlVGRkVS
X0JJTkRJTkciLAorICAgICJCTEVORF9DT0xPUiIsCisgICAgIkJMRU5EX0RTVF9BTFBIQSIsCisg
ICAgIkJMRU5EX0RTVF9SR0IiLAorICAgICJCTEVORF9FUVVBVElPTl9BTFBIQSIsCisgICAgIkJM
RU5EX0VRVUFUSU9OX1JHQiIsCisgICAgIkJMRU5EX1NSQ19BTFBIQSIsCisgICAgIkJMRU5EX1NS
Q19SR0IiLAorICAgICJDT0xPUl9DTEVBUl9WQUxVRSIsCisgICAgIkNPTE9SX1dSSVRFTUFTSyIs
CisgICAgIkNVTExfRkFDRV9NT0RFIiwKKyAgICAiQ1VSUkVOVF9QUk9HUkFNIiwKKyAgICAiREVQ
VEhfQ0xFQVJfVkFMVUUiLAorICAgICJERVBUSF9GVU5DIiwKKyAgICAiREVQVEhfUkFOR0UiLAor
ICAgICJERVBUSF9XUklURU1BU0siLAorICAgICJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5H
IiwKKyAgICAiRlJBTUVCVUZGRVJfQklORElORyIsCisgICAgIkZST05UX0ZBQ0UiLAorICAgICJH
RU5FUkFURV9NSVBNQVBfSElOVCIsCisgICAgIkxJTkVfV0lEVEgiLAorICAgICJQQUNLX0FMSUdO
TUVOVCIsCisgICAgIlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiIsCisgICAgIlBPTFlHT05fT0ZGU0VU
X1VOSVRTIiwKKyAgICAiUkVOREVSQlVGRkVSX0JJTkRJTkciLAorICAgICJTQU1QTEVfQ09WRVJB
R0VfSU5WRVJUIiwKKyAgICAiU0FNUExFX0NPVkVSQUdFX1ZBTFVFIiwKKyAgICAiU0NJU1NPUl9C
T1giLAorICAgICJTVEVOQ0lMX0JBQ0tfRkFJTCIsCisgICAgIlNURU5DSUxfQkFDS19GVU5DIiwK
KyAgICAiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCIsCisgICAgIlNURU5DSUxfQkFDS19Q
QVNTX0RFUFRIX1BBU1MiLAorICAgICJTVEVOQ0lMX0JBQ0tfUkVGIiwKKyAgICAiU1RFTkNJTF9C
QUNLX1ZBTFVFX01BU0siLAorICAgICJTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLIiwKKyAgICAiU1RF
TkNJTF9DTEVBUl9WQUxVRSIsCisgICAgIlNURU5DSUxfRkFJTCIsCisgICAgIlNURU5DSUxfRlVO
QyIsCisgICAgIlNURU5DSUxfUEFTU19ERVBUSF9GQUlMIiwKKyAgICAiU1RFTkNJTF9QQVNTX0RF
UFRIX1BBU1MiLAorICAgICJTVEVOQ0lMX1JFRiIsCisgICAgIlNURU5DSUxfVkFMVUVfTUFTSyIs
CisgICAgIlNURU5DSUxfV1JJVEVNQVNLIiwKKyAgICAiVU5QQUNLX0FMSUdOTUVOVCIsCisgICAg
IlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiLAorICAgICJVTlBBQ0tfRkxJUF9Z
X1dFQkdMIiwKKyAgICAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIiwKKyAgICAiVklF
V1BPUlQiCitdOworCisvKioKKyAqIEBwYXJhbSB7Kn0gb2JqCisgKiBAcmV0dXJuIHtXZWJHTFJl
bmRlcmluZ0NvbnRleHRSZXNvdXJjZX0KKyAqLworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3Vy
Y2UuZm9yT2JqZWN0ID0gZnVuY3Rpb24ob2JqKQoreworICAgIHZhciByZXNvdXJjZSA9IFJlc291
cmNlLmZvck9iamVjdChvYmopOworICAgIGlmICghcmVzb3VyY2UgfHwgcmVzb3VyY2UgaW5zdGFu
Y2VvZiBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIHJlc291
cmNlOworICAgIHZhciBjYWxsID0gcmVzb3VyY2UuY2FsbHMoKTsKKyAgICBpZiAoIWNhbGwgfHwg
IWNhbGwubGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICByZXNvdXJjZSA9IGNhbGxb
MF0ucmVzb3VyY2UoKTsKKyAgICByZXR1cm4gKHJlc291cmNlIGluc3RhbmNlb2YgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0UmVzb3VyY2UpID8gcmVzb3VyY2UgOiBudWxsOworfQorCitXZWJHTFJlbmRl
cmluZ0NvbnRleHRSZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVy
biB7QXJyYXkuPG51bWJlcj59CisgICAgICovCisgICAgZ2V0QWxsRXJyb3JzOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB2YXIgZXJyb3JzID0gW107CisgICAgICAgIHZhciBnbCA9IHRoaXMu
d3JhcHBlZE9iamVjdCgpOworICAgICAgICBpZiAoZ2wpIHsKKyAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gZ2wuZ2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZXJyb3IgPT09IGdsLk5PX0VSUk9SKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRXJyb3IoZXJyb3IpOworICAgICAg
ICAgICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5fY3VzdG9tRXJyb3JzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBr
ZXkgaW4gdGhpcy5fY3VzdG9tRXJyb3JzKSB7CisgICAgICAgICAgICAgICAgdmFyIGVycm9yID0g
TnVtYmVyKGtleSk7CisgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyb3IpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9yczsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZXJyb3JzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFy
YW0ge0FycmF5LjxudW1iZXI+fSBlcnJvcnMKKyAgICAgKi8KKyAgICByZXN0b3JlRXJyb3JzOiBm
dW5jdGlvbihlcnJvcnMpCisgICAgeworICAgICAgICB2YXIgZ2wgPSB0aGlzLndyYXBwZWRPYmpl
Y3QoKTsKKyAgICAgICAgaWYgKGdsKSB7CisgICAgICAgICAgICB2YXIgd2FzRXJyb3IgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHdoaWxlIChnbC5nZXRFcnJvcigpICE9PSBnbC5OT19FUlJPUikKKyAg
ICAgICAgICAgICAgICB3YXNFcnJvciA9IHRydWU7CisgICAgICAgICAgICBjb25zb2xlLmFzc2Vy
dCghd2FzRXJyb3IsICJFcnJvcihzKSB3aGlsZSBjYXB0dXJpbmcgY3VycmVudCBXZWJHTCBzdGF0
ZS4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVycm9ycy5sZW5ndGgpCisgICAgICAgICAg
ICBkZWxldGUgdGhpcy5fY3VzdG9tRXJyb3JzOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHRoaXMuX2N1c3RvbUVycm9ycyA9IHt9OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4g
PSBlcnJvcnMubGVuZ3RoOyBpIDwgbjsgKytpKQorICAgICAgICAgICAgICAgIHRoaXMuX2N1c3Rv
bUVycm9yc1tlcnJvcnNbaV1dID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge251bWJlcn0gZXJyb3IKKyAgICAgKi8KKyAgICBjbGVhckVycm9yOiBm
dW5jdGlvbihlcnJvcikKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9jdXN0b21FcnJvcnMpCisg
ICAgICAgICAgICBkZWxldGUgdGhpcy5fY3VzdG9tRXJyb3JzW2Vycm9yXTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHJldHVybiB7bnVtYmVyfQorICAgICAqLworICAgIG5leHRFcnJvcjog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2N1c3RvbUVycm9ycykgeworICAg
ICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuX2N1c3RvbUVycm9ycykgeworICAgICAgICAg
ICAgICAgIHZhciBlcnJvciA9IE51bWJlcihrZXkpOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9jdXN0b21FcnJvcnNbZXJyb3JdOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWxldGUgdGhpcy5fY3VzdG9tRXJy
b3JzOworICAgICAgICB2YXIgZ2wgPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKKyAgICAgICAgcmV0
dXJuIGdsID8gZ2wuTk9fRVJST1IgOiAwOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3Zl
cnJpZGUKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9
IGNhY2hlCisgICAgICovCisgICAgX3BvcHVsYXRlUmVwbGF5YWJsZURhdGE6IGZ1bmN0aW9uKGRh
dGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAgdmFyIGdsID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7
CisgICAgICAgIGRhdGEucmVwbGF5Q29udGV4dENhbGxiYWNrID0gdGhpcy5fcmVwbGF5Q29udGV4
dENhbGxiYWNrOworCisgICAgICAgIHZhciBvcmlnaW5hbEVycm9ycyA9IHRoaXMuZ2V0QWxsRXJy
b3JzKCk7CisKKyAgICAgICAgLy8gVGFrZSBhIGZ1bGwgR0wgc3RhdGUgc25hcHNob3QuCisgICAg
ICAgIHZhciBnbFN0YXRlID0ge307CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291
cmNlLkdMQ2FwYWJpbGl0aWVzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAg
ICAgICBnbFN0YXRlW3BhcmFtZXRlcl0gPSBnbC5pc0VuYWJsZWQoZ2xbcGFyYW1ldGVyXSk7Cisg
ICAgICAgIH0pOworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5TdGF0ZVBh
cmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgIGdsU3Rh
dGVbcGFyYW1ldGVyXSA9IFJlc291cmNlLnRvUmVwbGF5YWJsZShnbC5nZXRQYXJhbWV0ZXIoZ2xb
cGFyYW1ldGVyXSksIGNhY2hlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gVkVSVEVYX0FU
VFJJQl9BUlJBWVMKKyAgICAgICAgdmFyIG1heFZlcnRleEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0
ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICAgICAgdmFyIHZlcnRleEF0dHJpYlBhcmFt
ZXRlcnMgPSBbIlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkciLCAiVkVSVEVYX0FU
VFJJQl9BUlJBWV9FTkFCTEVEIiwgIlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSIsICJWRVJURVhf
QVRUUklCX0FSUkFZX1NUUklERSIsICJWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUiLCAiVkVSVEVY
X0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEIiwgIkNVUlJFTlRfVkVSVEVYX0FUVFJJQiJdOworICAg
ICAgICB2YXIgdmVydGV4QXR0cmliU3RhdGVzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbWF4VmVydGV4QXR0cmliczsgKytpKSB7CisgICAgICAgICAgICB2YXIgc3RhdGUgPSB7
fTsKKyAgICAgICAgICAgIHZlcnRleEF0dHJpYlBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihh
dHRyaWJQYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZVthdHRyaWJQYXJhbWV0ZXJd
ID0gUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFZlcnRleEF0dHJpYihpLCBnbFthdHRyaWJQ
YXJhbWV0ZXJdKSwgY2FjaGUpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzdGF0ZS5W
RVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgPSBnbC5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaSwg
Z2wuVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSKTsKKyAgICAgICAgICAgIHZlcnRleEF0dHJp
YlN0YXRlcy5wdXNoKHN0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBnbFN0YXRlLnZlcnRleEF0
dHJpYlN0YXRlcyA9IHZlcnRleEF0dHJpYlN0YXRlczsKKworICAgICAgICAvLyBURVhUVVJFUwor
ICAgICAgICB2YXIgY3VycmVudFRleHR1cmVCaW5kaW5nID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLkFD
VElWRV9URVhUVVJFKTsKKyAgICAgICAgdmFyIG1heFRleHR1cmVJbWFnZVVuaXRzID0gZ2wuZ2V0
UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICAgICAgdmFyIHRleHR1
cmVCaW5kaW5ncyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVJ
bWFnZVVuaXRzOyArK2kpIHsKKyAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVS
RTAgKyBpKTsKKyAgICAgICAgICAgIHZhciBzdGF0ZSA9IHsKKyAgICAgICAgICAgICAgICBURVhU
VVJFXzJEOiBSZXNvdXJjZS50b1JlcGxheWFibGUoZ2wuZ2V0UGFyYW1ldGVyKGdsLlRFWFRVUkVf
QklORElOR18yRCksIGNhY2hlKSwKKyAgICAgICAgICAgICAgICBURVhUVVJFX0NVQkVfTUFQOiBS
ZXNvdXJjZS50b1JlcGxheWFibGUoZ2wuZ2V0UGFyYW1ldGVyKGdsLlRFWFRVUkVfQklORElOR19D
VUJFX01BUCksIGNhY2hlKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRleHR1cmVCaW5k
aW5ncy5wdXNoKHN0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBnbFN0YXRlLnRleHR1cmVCaW5k
aW5ncyA9IHRleHR1cmVCaW5kaW5nczsKKyAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShjdXJyZW50
VGV4dHVyZUJpbmRpbmcpOworCisgICAgICAgIGRhdGEuZ2xTdGF0ZSA9IGdsU3RhdGU7CisKKyAg
ICAgICAgdGhpcy5yZXN0b3JlRXJyb3JzKG9yaWdpbmFsRXJyb3JzKTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAgICAg
KiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqLworICAgIF9kb1JlcGxheUNhbGxzOiBmdW5j
dGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3JlcGxheUNvbnRleHRDYWxs
YmFjayA9IGRhdGEucmVwbGF5Q29udGV4dENhbGxiYWNrOworICAgICAgICB0aGlzLl9jdXN0b21F
cnJvcnMgPSBudWxsOworCisgICAgICAgIHZhciBnbCA9IFJlc291cmNlLndyYXBwZWRPYmplY3Qo
dGhpcy5fcmVwbGF5Q29udGV4dENhbGxiYWNrKCkpOworICAgICAgICB0aGlzLnNldFdyYXBwZWRP
YmplY3QoZ2wpOworCisgICAgICAgIHZhciBnbFN0YXRlID0gZGF0YS5nbFN0YXRlOworICAgICAg
ICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIFJlcGxheWFibGVSZXNvdXJjZS5y
ZXBsYXkoZ2xTdGF0ZS5GUkFNRUJVRkZFUl9CSU5ESU5HLCBjYWNoZSkpOworICAgICAgICBnbC5i
aW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgUmVwbGF5YWJsZVJlc291cmNlLnJlcGxh
eShnbFN0YXRlLlJFTkRFUkJVRkZFUl9CSU5ESU5HLCBjYWNoZSkpOworCisgICAgICAgIC8vIEVu
YWJsZSBvciBkaXNhYmxlIHNlcnZlci1zaWRlIEdMIGNhcGFiaWxpdGllcy4KKyAgICAgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuR0xDYXBhYmlsaXRpZXMuZm9yRWFjaChmdW5jdGlv
bihwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBhcmFtZXRlciBpbiBn
bFN0YXRlKTsKKyAgICAgICAgICAgIGlmIChnbFN0YXRlW3BhcmFtZXRlcl0pCisgICAgICAgICAg
ICAgICAgZ2wuZW5hYmxlKGdsW3BhcmFtZXRlcl0pOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGdsLmRpc2FibGUoZ2xbcGFyYW1ldGVyXSk7CisgICAgICAgIH0pOworCisgICAg
ICAgIGdsLmJsZW5kQ29sb3IoZ2xTdGF0ZS5CTEVORF9DT0xPUlswXSwgZ2xTdGF0ZS5CTEVORF9D
T0xPUlsxXSwgZ2xTdGF0ZS5CTEVORF9DT0xPUlsyXSwgZ2xTdGF0ZS5CTEVORF9DT0xPUlszXSk7
CisgICAgICAgIGdsLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShnbFN0YXRlLkJMRU5EX0VRVUFUSU9O
X1JHQiwgZ2xTdGF0ZS5CTEVORF9FUVVBVElPTl9BTFBIQSk7CisgICAgICAgIGdsLmJsZW5kRnVu
Y1NlcGFyYXRlKGdsU3RhdGUuQkxFTkRfU1JDX1JHQiwgZ2xTdGF0ZS5CTEVORF9EU1RfUkdCLCBn
bFN0YXRlLkJMRU5EX1NSQ19BTFBIQSwgZ2xTdGF0ZS5CTEVORF9EU1RfQUxQSEEpOworICAgICAg
ICBnbC5jbGVhckNvbG9yKGdsU3RhdGUuQ09MT1JfQ0xFQVJfVkFMVUVbMF0sIGdsU3RhdGUuQ09M
T1JfQ0xFQVJfVkFMVUVbMV0sIGdsU3RhdGUuQ09MT1JfQ0xFQVJfVkFMVUVbMl0sIGdsU3RhdGUu
Q09MT1JfQ0xFQVJfVkFMVUVbM10pOworICAgICAgICBnbC5jbGVhckRlcHRoKGdsU3RhdGUuREVQ
VEhfQ0xFQVJfVkFMVUUpOworICAgICAgICBnbC5jbGVhclN0ZW5jaWwoZ2xTdGF0ZS5TVEVOQ0lM
X0NMRUFSX1ZBTFVFKTsKKyAgICAgICAgZ2wuY29sb3JNYXNrKGdsU3RhdGUuQ09MT1JfV1JJVEVN
QVNLWzBdLCBnbFN0YXRlLkNPTE9SX1dSSVRFTUFTS1sxXSwgZ2xTdGF0ZS5DT0xPUl9XUklURU1B
U0tbMl0sIGdsU3RhdGUuQ09MT1JfV1JJVEVNQVNLWzNdKTsKKyAgICAgICAgZ2wuY3VsbEZhY2Uo
Z2xTdGF0ZS5DVUxMX0ZBQ0VfTU9ERSk7CisgICAgICAgIGdsLmRlcHRoRnVuYyhnbFN0YXRlLkRF
UFRIX0ZVTkMpOworICAgICAgICBnbC5kZXB0aE1hc2soZ2xTdGF0ZS5ERVBUSF9XUklURU1BU0sp
OworICAgICAgICBnbC5kZXB0aFJhbmdlKGdsU3RhdGUuREVQVEhfUkFOR0VbMF0sIGdsU3RhdGUu
REVQVEhfUkFOR0VbMV0pOworICAgICAgICBnbC5mcm9udEZhY2UoZ2xTdGF0ZS5GUk9OVF9GQUNF
KTsKKyAgICAgICAgZ2wuaGludChnbC5HRU5FUkFURV9NSVBNQVBfSElOVCwgZ2xTdGF0ZS5HRU5F
UkFURV9NSVBNQVBfSElOVCk7CisgICAgICAgIGdsLmxpbmVXaWR0aChnbFN0YXRlLkxJTkVfV0lE
VEgpOworCisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlBpeGVsU3RvcmVQ
YXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICBnbC5w
aXhlbFN0b3JlaShnbFtwYXJhbWV0ZXJdLCBnbFN0YXRlW3BhcmFtZXRlcl0pOworICAgICAgICB9
KTsKKworICAgICAgICBnbC5wb2x5Z29uT2Zmc2V0KGdsU3RhdGUuUE9MWUdPTl9PRkZTRVRfRkFD
VE9SLCBnbFN0YXRlLlBPTFlHT05fT0ZGU0VUX1VOSVRTKTsKKyAgICAgICAgZ2wuc2FtcGxlQ292
ZXJhZ2UoZ2xTdGF0ZS5TQU1QTEVfQ09WRVJBR0VfVkFMVUUsIGdsU3RhdGUuU0FNUExFX0NPVkVS
QUdFX0lOVkVSVCk7CisgICAgICAgIGdsLnN0ZW5jaWxGdW5jU2VwYXJhdGUoZ2wuRlJPTlQsIGds
U3RhdGUuU1RFTkNJTF9GVU5DLCBnbFN0YXRlLlNURU5DSUxfUkVGLCBnbFN0YXRlLlNURU5DSUxf
VkFMVUVfTUFTSyk7CisgICAgICAgIGdsLnN0ZW5jaWxGdW5jU2VwYXJhdGUoZ2wuQkFDSywgZ2xT
dGF0ZS5TVEVOQ0lMX0JBQ0tfRlVOQywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfUkVGLCBnbFN0YXRl
LlNURU5DSUxfQkFDS19WQUxVRV9NQVNLKTsKKyAgICAgICAgZ2wuc3RlbmNpbE9wU2VwYXJhdGUo
Z2wuRlJPTlQsIGdsU3RhdGUuU1RFTkNJTF9GQUlMLCBnbFN0YXRlLlNURU5DSUxfUEFTU19ERVBU
SF9GQUlMLCBnbFN0YXRlLlNURU5DSUxfUEFTU19ERVBUSF9QQVNTKTsKKyAgICAgICAgZ2wuc3Rl
bmNpbE9wU2VwYXJhdGUoZ2wuQkFDSywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfRkFJTCwgZ2xTdGF0
ZS5TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMLCBnbFN0YXRlLlNURU5DSUxfQkFDS19QQVNT
X0RFUFRIX1BBU1MpOworICAgICAgICBnbC5zdGVuY2lsTWFza1NlcGFyYXRlKGdsLkZST05ULCBn
bFN0YXRlLlNURU5DSUxfV1JJVEVNQVNLKTsKKyAgICAgICAgZ2wuc3RlbmNpbE1hc2tTZXBhcmF0
ZShnbC5CQUNLLCBnbFN0YXRlLlNURU5DSUxfQkFDS19XUklURU1BU0spOworCisgICAgICAgIGds
LnNjaXNzb3IoZ2xTdGF0ZS5TQ0lTU09SX0JPWFswXSwgZ2xTdGF0ZS5TQ0lTU09SX0JPWFsxXSwg
Z2xTdGF0ZS5TQ0lTU09SX0JPWFsyXSwgZ2xTdGF0ZS5TQ0lTU09SX0JPWFszXSk7CisgICAgICAg
IGdsLnZpZXdwb3J0KGdsU3RhdGUuVklFV1BPUlRbMF0sIGdsU3RhdGUuVklFV1BPUlRbMV0sIGds
U3RhdGUuVklFV1BPUlRbMl0sIGdsU3RhdGUuVklFV1BPUlRbM10pOworCisgICAgICAgIGdsLnVz
ZVByb2dyYW0oUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShnbFN0YXRlLkNVUlJFTlRfUFJPR1JB
TSwgY2FjaGUpKTsKKworICAgICAgICAvLyBWRVJURVhfQVRUUklCX0FSUkFZUworICAgICAgICB2
YXIgbWF4VmVydGV4QXR0cmlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJ
QlMpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFZlcnRleEF0dHJpYnM7ICsraSkg
eworICAgICAgICAgICAgdmFyIHN0YXRlID0gZ2xTdGF0ZS52ZXJ0ZXhBdHRyaWJTdGF0ZXNbaV0g
fHwge307CisgICAgICAgICAgICBpZiAoc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVE
KQorICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShp
KTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAg
ICAgICAgICAgZ2wudmVydGV4QXR0cmliNGZ2KGksIHN0YXRlLkNVUlJFTlRfVkVSVEVYX0FUVFJJ
Qik7CisgICAgICAgICAgICB2YXIgYnVmZmVyID0gUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShz
dGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HLCBjYWNoZSk7CisgICAgICAg
ICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJB
WV9CVUZGRVIsIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRl
cihpLCBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX1NJWkUsIHN0YXRlLlZFUlRFWF9BVFRSSUJf
QVJSQVlfVFlQRSwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVELCBzdGF0ZS5W
RVJURVhfQVRUUklCX0FSUkFZX1NUUklERSwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lO
VEVSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnbC5iaW5kQnVmZmVyKGds
LkFSUkFZX0JVRkZFUiwgUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShnbFN0YXRlLkFSUkFZX0JV
RkZFUl9CSU5ESU5HLCBjYWNoZSkpOworICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRf
QVJSQVlfQlVGRkVSLCBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KGdsU3RhdGUuRUxFTUVOVF9B
UlJBWV9CVUZGRVJfQklORElORywgY2FjaGUpKTsKKworICAgICAgICAvLyBURVhUVVJFUworICAg
ICAgICB2YXIgbWF4VGV4dHVyZUltYWdlVW5pdHMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFMpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1
cmVJbWFnZVVuaXRzOyArK2kpIHsKKyAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVY
VFVSRTAgKyBpKTsKKyAgICAgICAgICAgIHZhciBzdGF0ZSA9IGdsU3RhdGUudGV4dHVyZUJpbmRp
bmdzW2ldIHx8IHt9OworICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwg
UmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShzdGF0ZS5URVhUVVJFXzJELCBjYWNoZSkpOworICAg
ICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV9DVUJFX01BUCwgUmVwbGF5YWJsZVJl
c291cmNlLnJlcGxheShzdGF0ZS5URVhUVVJFX0NVQkVfTUFQLCBjYWNoZSkpOworICAgICAgICB9
CisgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xTdGF0ZS5BQ1RJVkVfVEVYVFVSRSk7CisKKyAg
ICAgICAgcmV0dXJuIFJlc291cmNlLnByb3RvdHlwZS5fZG9SZXBsYXlDYWxscy5jYWxsKHRoaXMs
IGRhdGEsIGNhY2hlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtPYmplY3R8
bnVtYmVyfSB0YXJnZXQKKyAgICAgKiBAcmV0dXJuIHtSZXNvdXJjZX0KKyAgICAgKi8KKyAgICBj
dXJyZW50QmluZGluZzogZnVuY3Rpb24odGFyZ2V0KQorICAgIHsKKyAgICAgICAgdmFyIHJlc291
cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KHRhcmdldCk7CisgICAgICAgIGlmIChyZXNvdXJjZSkK
KyAgICAgICAgICAgIHJldHVybiByZXNvdXJjZTsKKyAgICAgICAgdmFyIGdsID0gdGhpcy53cmFw
cGVkT2JqZWN0KCk7CisgICAgICAgIHZhciBiaW5kaW5nUGFyYW1ldGVyOworICAgICAgICB2YXIg
YmluZE1ldGhvZE5hbWU7CisgICAgICAgIHZhciBiaW5kTWV0aG9kVGFyZ2V0ID0gdGFyZ2V0Owor
ICAgICAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgICAgICBjYXNlIGdsLkFSUkFZX0JVRkZFUjoK
KyAgICAgICAgICAgIGJpbmRpbmdQYXJhbWV0ZXIgPSBnbC5BUlJBWV9CVUZGRVJfQklORElORzsK
KyAgICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRCdWZmZXIiOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAg
ICBiaW5kaW5nUGFyYW1ldGVyID0gZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzsKKyAg
ICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRCdWZmZXIiOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV8yRDoKKyAgICAgICAgICAgIGJpbmRpbmdQYXJh
bWV0ZXIgPSBnbC5URVhUVVJFX0JJTkRJTkdfMkQ7CisgICAgICAgICAgICBiaW5kTWV0aG9kTmFt
ZSA9ICJiaW5kVGV4dHVyZSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBnbC5U
RVhUVVJFX0NVQkVfTUFQOgorICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWDoKKyAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAg
ICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICBjYXNlIGds
LlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aOgorICAgICAgICAgICAgYmluZGluZ1BhcmFtZXRlciA9IGdsLlRFWFRVUkVfQklORElO
R19DVUJFX01BUDsKKyAgICAgICAgICAgIGJpbmRNZXRob2RUYXJnZXQgPSBnbC5URVhUVVJFX0NV
QkVfTUFQOworICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZFRleHR1cmUiOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZ2wuRlJBTUVCVUZGRVI6CisgICAgICAgICAg
ICBiaW5kaW5nUGFyYW1ldGVyID0gZ2wuRlJBTUVCVUZGRVJfQklORElORzsKKyAgICAgICAgICAg
IGJpbmRNZXRob2ROYW1lID0gImJpbmRGcmFtZWJ1ZmZlciI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBnbC5SRU5ERVJCVUZGRVI6CisgICAgICAgICAgICBiaW5kaW5nUGFyYW1l
dGVyID0gZ2wuUkVOREVSQlVGRkVSX0JJTkRJTkc7CisgICAgICAgICAgICBiaW5kTWV0aG9kTmFt
ZSA9ICJiaW5kUmVuZGVyYnVmZmVyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgY29uc29sZS5lcnJvcigiQVNTRVJUX05PVF9SRUFDSEVEOiB1bmtu
b3duIGJpbmRpbmcgdGFyZ2V0ICIgKyB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICAgIH0KKyAgICAgICAgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3QoZ2wuZ2V0
UGFyYW1ldGVyKGJpbmRpbmdQYXJhbWV0ZXIpKTsKKyAgICAgICAgaWYgKHJlc291cmNlKQorICAg
ICAgICAgICAgcmVzb3VyY2UucHVzaEJpbmRpbmcoYmluZE1ldGhvZFRhcmdldCwgYmluZE1ldGhv
ZE5hbWUpOworICAgICAgICByZXR1cm4gcmVzb3VyY2U7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBvdmVycmlkZQorICAgICAqIEByZXR1cm4ge09iamVjdC48c3RyaW5nLCBGdW5jdGlvbj59
CisgICAgICovCisgICAgX2N1c3RvbVdyYXBGdW5jdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHZhciB3cmFwRnVuY3Rpb25zID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2Uu
X3dyYXBGdW5jdGlvbnM7CisgICAgICAgIGlmICghd3JhcEZ1bmN0aW9ucykgeworICAgICAgICAg
ICAgd3JhcEZ1bmN0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisKKyAgICAgICAgICAgIC8q
KgorICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUKKyAgICAgICAgICAg
ICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc291cmNlQ29uc3RydWN0b3IKKyAgICAgICAgICAgICAq
LworICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlUmVzb3VyY2VXcmFwRnVuY3Rpb24obWV0aG9k
TmFtZSwgcmVzb3VyY2VDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAvKiogQHRoaXMgUmVzb3VyY2UuV3JhcEZ1bmN0aW9uICovCisgICAgICAgICAgICAgICAgd3Jh
cEZ1bmN0aW9uc1ttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVkT2JqZWN0ID0gdGhpcy5yZXN1bHQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVkT2JqZWN0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBuZXcgcmVz
b3VyY2VDb25zdHJ1Y3Rvcih3cmFwcGVkT2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IG1hbmFnZXIgPSB0aGlzLl9yZXNvdXJjZS5tYW5hZ2VyKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtYW5hZ2VyKQorICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlci5yZWdpc3RlclJl
c291cmNlKHJlc291cmNlKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZVJlc3Vs
dChyZXNvdXJjZS5wcm94eU9iamVjdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Uu
cHVzaENhbGwodGhpcy5jYWxsKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKCJjcmVhdGVCdWZmZXIiLCBX
ZWJHTEJ1ZmZlclJlc291cmNlKTsKKyAgICAgICAgICAgIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0
aW9uKCJjcmVhdGVTaGFkZXIiLCBXZWJHTFNoYWRlclJlc291cmNlKTsKKyAgICAgICAgICAgIGNy
ZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKCJjcmVhdGVQcm9ncmFtIiwgV2ViR0xQcm9ncmFtUmVz
b3VyY2UpOworICAgICAgICAgICAgY3JlYXRlUmVzb3VyY2VXcmFwRnVuY3Rpb24oImNyZWF0ZVRl
eHR1cmUiLCBXZWJHTFRleHR1cmVSZXNvdXJjZSk7CisgICAgICAgICAgICBjcmVhdGVSZXNvdXJj
ZVdyYXBGdW5jdGlvbigiY3JlYXRlRnJhbWVidWZmZXIiLCBXZWJHTEZyYW1lYnVmZmVyUmVzb3Vy
Y2UpOworICAgICAgICAgICAgY3JlYXRlUmVzb3VyY2VXcmFwRnVuY3Rpb24oImNyZWF0ZVJlbmRl
cmJ1ZmZlciIsIFdlYkdMUmVuZGVyYnVmZmVyUmVzb3VyY2UpOworICAgICAgICAgICAgY3JlYXRl
UmVzb3VyY2VXcmFwRnVuY3Rpb24oImdldFVuaWZvcm1Mb2NhdGlvbiIsIFJlc291cmNlKTsKKwor
ICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFt
ZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBmdW5jdGlvbiBjdXN0b21XcmFwRnVuY3Rp
b24obWV0aG9kTmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgY3VzdG9t
UHVzaENhbGwgPSAicHVzaENhbGxfIiArIG1ldGhvZE5hbWU7CisgICAgICAgICAgICAgICAgLyoq
CisgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfSB0YXJnZXQKKyAgICAg
ICAgICAgICAgICAgKiBAdGhpcyBSZXNvdXJjZS5XcmFwRnVuY3Rpb24KKyAgICAgICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgICAgICB3cmFwRnVuY3Rpb25zW21ldGhvZE5hbWVdID0gZnVuY3Rp
b24odGFyZ2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJl
c291cmNlID0gdGhpcy5fcmVzb3VyY2UuY3VycmVudEJpbmRpbmcodGFyZ2V0KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc291cmNlW2N1c3RvbVB1c2hDYWxsXSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlW2N1c3RvbVB1c2hDYWxsXS5jYWxsKHJlc291
cmNlLCB0aGlzLmNhbGwoKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc291cmNlLnB1c2hDYWxsKHRoaXMuY2FsbCgpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oImF0
dGFjaFNoYWRlciIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJiaW5kQXR0cmli
TG9jYXRpb24iKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29tcGlsZVNoYWRl
ciIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJkZXRhY2hTaGFkZXIiKTsKKyAg
ICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigibGlua1Byb2dyYW0iKTsKKyAgICAgICAgICAg
IGN1c3RvbVdyYXBGdW5jdGlvbigic2hhZGVyU291cmNlIik7CisgICAgICAgICAgICBjdXN0b21X
cmFwRnVuY3Rpb24oImJ1ZmZlckRhdGEiKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlv
bigiYnVmZmVyU3ViRGF0YSIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJjb21w
cmVzc2VkVGV4SW1hZ2UyRCIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRCIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJj
b3B5VGV4SW1hZ2UyRCIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJjb3B5VGV4
U3ViSW1hZ2UyRCIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJnZW5lcmF0ZU1p
cG1hcCIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJ0ZXhJbWFnZTJEIik7Cisg
ICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oInRleFN1YkltYWdlMkQiKTsKKyAgICAgICAg
ICAgIGN1c3RvbVdyYXBGdW5jdGlvbigidGV4UGFyYW1ldGVyZiIpOworICAgICAgICAgICAgY3Vz
dG9tV3JhcEZ1bmN0aW9uKCJ0ZXhQYXJhbWV0ZXJpIik7CisgICAgICAgICAgICBjdXN0b21XcmFw
RnVuY3Rpb24oImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIik7CisgICAgICAgICAgICBjdXN0b21X
cmFwRnVuY3Rpb24oImZyYW1lYnVmZmVyVGV4dHVyZTJEIik7CisgICAgICAgICAgICBjdXN0b21X
cmFwRnVuY3Rpb24oInJlbmRlcmJ1ZmZlclN0b3JhZ2UiKTsKKworICAgICAgICAgICAgLyoqIEB0
aGlzIFJlc291cmNlLldyYXBGdW5jdGlvbiAqLworICAgICAgICAgICAgd3JhcEZ1bmN0aW9uc1si
Z2V0RXJyb3IiXSA9IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2
YXIgZ2wgPSB0aGlzLl9vcmlnaW5hbE9iamVjdDsKKyAgICAgICAgICAgICAgICB2YXIgZXJyb3Ig
PSB0aGlzLnJlc3VsdCgpOworICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPT0gZ2wuTk9fRVJS
T1IpCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlLmNsZWFyRXJyb3IoZXJyb3Ip
OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRo
aXMuX3Jlc291cmNlLm5leHRFcnJvcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Ig
IT09IGdsLk5PX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZVJl
c3VsdChlcnJvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5fd3JhcEZ1bmN0aW9ucyA9IHdyYXBG
dW5jdGlvbnM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHdyYXBGdW5jdGlvbnM7CisgICAg
fQorfQorCitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19f
ID0gUmVzb3VyY2UucHJvdG90eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5j
dGlvbiBUcmFjZUxvZygpCit7CisgICAgdGhpcy5fcmVwbGF5YWJsZUNhbGxzID0gW107CisgICAg
dGhpcy5fcmVwbGF5YWJsZXNDYWNoZSA9IG5ldyBDYWNoZSgpOworfQorCitUcmFjZUxvZy5wcm90
b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVybiB7bnVtYmVyfQorICAgICAqLworICAg
IHNpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXBsYXlhYmxl
Q2FsbHMubGVuZ3RoOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtBcnJheS48
UmVwbGF5YWJsZUNhbGw+fQorICAgICAqLworICAgIHJlcGxheWFibGVDYWxsczogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3JlcGxheWFibGVDYWxsczsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVzb3VyY2UKKyAgICAgKi8KKyAg
ICBjYXB0dXJlUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQorICAgIHsKKyAgICAgICAgcmVz
b3VyY2UudG9SZXBsYXlhYmxlKHRoaXMuX3JlcGxheWFibGVzQ2FjaGUpOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKKyAgICAgKi8KKyAgICBhZGRDYWxsOiBm
dW5jdGlvbihjYWxsKQorICAgIHsKKyAgICAgICAgdmFyIHJlcyA9IFJlc291cmNlLmZvck9iamVj
dChjYWxsLnJlc3VsdCgpKTsKKyAgICAgICAgaWYgKHJlcykKKyAgICAgICAgICAgIHRoaXMuY2Fw
dHVyZVJlc291cmNlKHJlcyk7CisgICAgICAgIHZhciBzaXplID0gdGhpcy5fcmVwbGF5YWJsZXND
YWNoZS5zaXplKCk7CisgICAgICAgIHRoaXMuX3JlcGxheWFibGVDYWxscy5wdXNoKGNhbGwudG9S
ZXBsYXlhYmxlKHRoaXMuX3JlcGxheWFibGVzQ2FjaGUpKTsKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQodGhpcy5fcmVwbGF5YWJsZXNDYWNoZS5zaXplKCkgPT09IHNpemUsICJJbnRlcm5hbCBlcnJv
cjogV2Ugc2hvdWxkIGhhdmUgY2FwdHVyZWQgYWxsIHRoZSByZXNvdXJjZXMgYWxyZWFkeSBieSB0
aGlzIHRpbWUuIik7CisgICAgfQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFt
IHtUcmFjZUxvZ30gdHJhY2VMb2cKKyAqLworZnVuY3Rpb24gVHJhY2VMb2dQbGF5ZXIodHJhY2VM
b2cpCit7CisgICAgdGhpcy5fdHJhY2VMb2cgPSB0cmFjZUxvZzsKKyAgICB0aGlzLl9uZXh0UmVw
bGF5U3RlcCA9IDA7CisgICAgdGhpcy5fcmVwbGF5V29ybGRDYWNoZSA9IG5ldyBDYWNoZSgpOwor
fQorCitUcmFjZUxvZ1BsYXllci5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVy
biB7VHJhY2VMb2d9CisgICAgICovCisgICAgdHJhY2VMb2c6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl90cmFjZUxvZzsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHJldHVybiB7bnVtYmVyfQorICAgICAqLworICAgIG5leHRSZXBsYXlTdGVwOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbmV4dFJlcGxheVN0ZXA7CisgICAgfSwKKwor
ICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICAvLyBGSVhNRTogUHJldmVudCBt
ZW1vcnkgbGVha3M6IGRldGFjaCBhbmQgZGVsZXRlIGFsbCBvbGQgcmVzb3VyY2VzIE9SIHJldXNl
IHRoZW0gT1IgY3JlYXRlIGEgbmV3IHJlcGxheSBjYW52YXMgZXZlcnkgdGltZS4KKyAgICAgICAg
dGhpcy5fbmV4dFJlcGxheVN0ZXAgPSAwOworICAgICAgICB0aGlzLl9yZXBsYXlXb3JsZENhY2hl
LnJlc2V0KCk7CisgICAgfSwKKworICAgIHN0ZXA6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHRoaXMuc3RlcFRvKHRoaXMuX25leHRSZXBsYXlTdGVwKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBOdW0KKyAgICAgKi8KKyAgICBzdGVwVG86IGZ1bmN0
aW9uKHN0ZXBOdW0pCisgICAgeworICAgICAgICBzdGVwTnVtID0gTWF0aC5taW4oc3RlcE51bSwg
dGhpcy5fdHJhY2VMb2cuc2l6ZSgpIC0gMSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHN0ZXBO
dW0gPj0gMCk7CisgICAgICAgIGlmICh0aGlzLl9uZXh0UmVwbGF5U3RlcCA+IHN0ZXBOdW0pCisg
ICAgICAgICAgICB0aGlzLnJlc2V0KCk7CisgICAgICAgIC8vIEZJWE1FOiBSZXBsYXkgYWxsIHRo
ZSBjYWNoZWQgcmVzb3VyY2VzIGZpcnN0IHRvIHdhcm0tdXAuCisgICAgICAgIHZhciByZXBsYXlh
YmxlQ2FsbHMgPSB0aGlzLl90cmFjZUxvZy5yZXBsYXlhYmxlQ2FsbHMoKTsKKyAgICAgICAgd2hp
bGUgKHRoaXMuX25leHRSZXBsYXlTdGVwIDw9IHN0ZXBOdW0pCisgICAgICAgICAgICByZXBsYXlh
YmxlQ2FsbHNbdGhpcy5fbmV4dFJlcGxheVN0ZXArK10ucmVwbGF5KHRoaXMuX3JlcGxheVdvcmxk
Q2FjaGUpOworICAgIH0sCisKKyAgICByZXBsYXk6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHRoaXMuc3RlcFRvKHRoaXMuX3RyYWNlTG9nLnNpemUoKSAtIDEpOworICAgIH0KK30KKworLyoq
CisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gUmVzb3VyY2VUcmFja2luZ01hbmFnZXIo
KQoreworICAgIHRoaXMuX2NhcHR1cmluZyA9IGZhbHNlOworICAgIHRoaXMuX3N0b3BDYXB0dXJp
bmdPbkZyYW1lRW5kID0gZmFsc2U7CisgICAgdGhpcy5fbGFzdFRyYWNlTG9nID0gbnVsbDsKK30K
KworUmVzb3VyY2VUcmFja2luZ01hbmFnZXIucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAq
IEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgY2FwdHVyaW5nOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyaW5nOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcmV0dXJuIHtUcmFjZUxvZ30KKyAgICAgKi8KKyAgICBsYXN0VHJhY2VMb2c6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9sYXN0VHJhY2VMb2c7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7UmVzb3VyY2V9IHJlc291cmNlCisgICAgICov
CisgICAgcmVnaXN0ZXJSZXNvdXJjZTogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgeworICAgICAg
ICByZXNvdXJjZS5zZXRNYW5hZ2VyKHRoaXMpOworICAgIH0sCisKKyAgICBzdGFydENhcHR1cmlu
ZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYXB0dXJpbmcpCisgICAg
ICAgICAgICB0aGlzLl9sYXN0VHJhY2VMb2cgPSBuZXcgVHJhY2VMb2coKTsKKyAgICAgICAgdGhp
cy5fY2FwdHVyaW5nID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVF
bmQgPSBmYWxzZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtUcmFjZUxvZz19
IHRyYWNlTG9nCisgICAgICovCisgICAgc3RvcENhcHR1cmluZzogZnVuY3Rpb24odHJhY2VMb2cp
CisgICAgeworICAgICAgICBpZiAodHJhY2VMb2cgJiYgdGhpcy5fbGFzdFRyYWNlTG9nICE9PSB0
cmFjZUxvZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fY2FwdHVyaW5nID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7Cisg
ICAgfSwKKworICAgIGNhcHR1cmVGcmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5fbGFzdFRyYWNlTG9nID0gbmV3IFRyYWNlTG9nKCk7CisgICAgICAgIHRoaXMuX2NhcHR1cmlu
ZyA9IHRydWU7CisgICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gdHJ1ZTsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVzb3VyY2UKKyAg
ICAgKiBAcGFyYW0ge0FycmF5fEFyZ3VtZW50c30gYXJncworICAgICAqLworICAgIGNhcHR1cmVB
cmd1bWVudHM6IGZ1bmN0aW9uKHJlc291cmNlLCBhcmdzKQorICAgIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9jYXB0dXJpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2xhc3RU
cmFjZUxvZy5jYXB0dXJlUmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICBmb3IgKHZhciBpID0g
MCwgbiA9IGFyZ3MubGVuZ3RoOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICB2YXIgcmVzID0g
UmVzb3VyY2UuZm9yT2JqZWN0KGFyZ3NbaV0pOworICAgICAgICAgICAgaWYgKHJlcykKKyAgICAg
ICAgICAgICAgICB0aGlzLl9sYXN0VHJhY2VMb2cuY2FwdHVyZVJlc291cmNlKHJlcyk7CisgICAg
ICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisgICAg
ICovCisgICAgcmVwb3J0Q2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAgIGlmICgh
dGhpcy5fY2FwdHVyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9sYXN0
VHJhY2VMb2cuYWRkQ2FsbChjYWxsKTsKKyAgICAgICAgaWYgKHRoaXMuX3N0b3BDYXB0dXJpbmdP
bkZyYW1lRW5kICYmIHRoaXMuX2xhc3RUcmFjZUxvZy5zaXplKCkgPT09IDEpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7CisgICAgICAgICAgICB0
aGlzLl9zZXRaZXJvVGltZW91dHModGhpcy5zdG9wQ2FwdHVyaW5nLmJpbmQodGhpcywgdGhpcy5f
bGFzdFRyYWNlTG9nKSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKKyAgICAgKi8KKyAgICBfc2V0WmVyb1RpbWVvdXRzOiBm
dW5jdGlvbihjYWxsYmFjaykKKyAgICB7CisgICAgICAgIC8vIFdlIG5lZWQgYSBmYXN0ZXN0IGFz
eW5jIGNhbGxiYWNrLCB3aGF0ZXZlciBmaXJlcyBmaXJzdC4KKyAgICAgICAgLy8gVXN1YWxseSBh
IHBvc3RNZXNzYWdlIHNob3VsZCBiZSBmYXN0ZXIgdGhhbiBhIHNldFRpbWVvdXQoMCkuCisgICAg
ICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CisgICAgICAgIGNoYW5uZWwu
cG9ydDEub25tZXNzYWdlID0gY2FsbGJhY2s7CisgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1l
c3NhZ2UoIiIpOworICAgICAgICBpbnNwZWN0ZWRXaW5kb3cuc2V0VGltZW91dChjYWxsYmFjaywg
MCk7CisgICAgfQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgSW5qZWN0ZWRT
Y3JpcHQgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5fbWFuYWdlciA9IG5ldyBSZXNvdXJjZVRy
YWNraW5nTWFuYWdlcigpOworICAgIHRoaXMuX2xhc3RUcmFjZUxvZ0lkID0gMDsKKyAgICB0aGlz
Ll90cmFjZUxvZ3MgPSB7fTsKKyAgICB0aGlzLl90cmFjZUxvZ1BsYXllciA9IG51bGw7CisgICAg
dGhpcy5fcmVwbGF5Q29udGV4dCA9IG51bGw7Cit9CisKK0luamVjdGVkU2NyaXB0LnByb3RvdHlw
ZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2xD
b250ZXh0CisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAgICAqLworICAgIHdyYXBXZWJHTENv
bnRleHQ6IGZ1bmN0aW9uKGdsQ29udGV4dCkKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJjZSA9
IFJlc291cmNlLmZvck9iamVjdChnbENvbnRleHQpIHx8IG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRSZXNvdXJjZShnbENvbnRleHQsIHRoaXMuX2NvbnN0cnVjdFdlYkdMUmVwbGF5Q29udGV4dC5i
aW5kKHRoaXMsIGdsQ29udGV4dCkpOworICAgICAgICB0aGlzLl9tYW5hZ2VyLnJlZ2lzdGVyUmVz
b3VyY2UocmVzb3VyY2UpOworICAgICAgICB2YXIgcHJveHkgPSByZXNvdXJjZS5wcm94eU9iamVj
dCgpOworICAgICAgICByZXR1cm4gcHJveHk7CisgICAgfSwKKworICAgIGNhcHR1cmVGcmFtZTog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGlkID0gdGhpcy5fbWFrZVRyYWNlTG9nSWQo
KTsKKyAgICAgICAgdGhpcy5fbWFuYWdlci5jYXB0dXJlRnJhbWUoKTsKKyAgICAgICAgdGhpcy5f
dHJhY2VMb2dzW2lkXSA9IHRoaXMuX21hbmFnZXIubGFzdFRyYWNlTG9nKCk7CisgICAgICAgIHJl
dHVybiBpZDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkCisg
ICAgICovCisgICAgZHJvcFRyYWNlTG9nOiBmdW5jdGlvbihpZCkKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLl90cmFjZUxvZ1BsYXllciAmJiB0aGlzLl90cmFjZUxvZ1BsYXllci50cmFjZUxvZygp
ID09PSB0aGlzLl90cmFjZUxvZ3NbaWRdKQorICAgICAgICAgICAgdGhpcy5fdHJhY2VMb2dQbGF5
ZXIgPSBudWxsOworICAgICAgICBkZWxldGUgdGhpcy5fdHJhY2VMb2dzW2lkXTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkCisgICAgICogQHJldHVybiB7T2Jq
ZWN0fHN0cmluZ30KKyAgICAgKi8KKyAgICB0cmFjZUxvZzogZnVuY3Rpb24oaWQpCisgICAgewor
ICAgICAgICB2YXIgdHJhY2VMb2cgPSB0aGlzLl90cmFjZUxvZ3NbaWRdOworICAgICAgICBpZiAo
IXRyYWNlTG9nKQorICAgICAgICAgICAgcmV0dXJuICJFcnJvcjogVHJhY2UgbG9nIHdpdGggdGhp
cyBJRCBub3QgZm91bmQuIjsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHsKKyAgICAgICAgICAgIGlk
OiBpZCwKKyAgICAgICAgICAgIGNhbGxzOiBbXQorICAgICAgICB9OworICAgICAgICB2YXIgY2Fs
bHMgPSB0cmFjZUxvZy5yZXBsYXlhYmxlQ2FsbHMoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAs
IG4gPSBjYWxscy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjYWxsID0g
Y2FsbHNbaV07CisgICAgICAgICAgICB2YXIgYXJncyA9IGNhbGwuYXJncygpLm1hcChmdW5jdGlv
bihhcmd1bWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudCArICIiOworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB2YXIgc3RhY2tUcmFjZSA9IGNhbGwuc3RhY2tUcmFj
ZSgpOworICAgICAgICAgICAgdmFyIGNhbGxGcmFtZSA9IHN0YWNrVHJhY2UgPyBzdGFja1RyYWNl
LmNhbGxGcmFtZSgwKSB8fCB7fSA6IHt9OworICAgICAgICAgICAgdmFyIHRyYWNlTG9nSXRlbSA9
IHsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGNhbGwuZnVuY3Rpb25OYW1lKCksCisg
ICAgICAgICAgICAgICAgYXJndW1lbnRzOiBhcmdzLAorICAgICAgICAgICAgICAgIHNvdXJjZVVS
TDogY2FsbEZyYW1lLnNvdXJjZVVSTCwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBjYWxs
RnJhbWUubGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGNhbGxGcmFt
ZS5jb2x1bW5OdW1iZXIKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoY2FsbC5yZXN1
bHQoKSkKKyAgICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0ucmVzdWx0ID0gY2FsbC5yZXN1bHQo
KSArICIiOworICAgICAgICAgICAgcmVzdWx0LmNhbGxzLnB1c2godHJhY2VMb2dJdGVtKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge3N0cmluZ30gaWQKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcE5vCisgICAg
ICogQHJldHVybiB7c3RyaW5nfQorICAgICAqLworICAgIHJlcGxheVRyYWNlTG9nOiBmdW5jdGlv
bihpZCwgc3RlcE5vKQorICAgIHsKKyAgICAgICAgdmFyIHRyYWNlTG9nID0gdGhpcy5fdHJhY2VM
b2dzW2lkXTsKKyAgICAgICAgaWYgKCF0cmFjZUxvZykKKyAgICAgICAgICAgIHJldHVybiAiIjsK
KyAgICAgICAgaWYgKCF0aGlzLl90cmFjZUxvZ1BsYXllciB8fCB0aGlzLl90cmFjZUxvZ1BsYXll
ci50cmFjZUxvZygpICE9PSB0cmFjZUxvZykKKyAgICAgICAgICAgIHRoaXMuX3RyYWNlTG9nUGxh
eWVyID0gbmV3IFRyYWNlTG9nUGxheWVyKHRyYWNlTG9nKTsKKyAgICAgICAgdGhpcy5fdHJhY2VM
b2dQbGF5ZXIuc3RlcFRvKHN0ZXBObyk7CisgICAgICAgIGlmICghdGhpcy5fcmVwbGF5Q29udGV4
dCkgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcigiQVNTRVJUX05PVF9SRUFDSEVEOiByZXBs
YXlUcmFjZUxvZyBmYWlsZWQgdG8gY3JlYXRlIGEgcmVwbGF5IGNhbnZhcz8hIik7CisgICAgICAg
ICAgICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmV0dXJuIGN1cnJlbnQgc2Ny
ZWVuc2hvdC4KKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgcmVwbGF5aW5nIHNldmVyYWwgY2Fu
dmFzZXMgc2ltdWx0YW5lb3VzbHkuCisgICAgICAgIHJldHVybiB0aGlzLl9yZXBsYXlDb250ZXh0
LmNhbnZhcy50b0RhdGFVUkwoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7
c3RyaW5nfQorICAgICAqLworICAgIF9tYWtlVHJhY2VMb2dJZDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICJ7XCJpbmplY3RlZFNjcmlwdElkXCI6IiArIGluamVjdGVkU2NyaXB0
SWQgKyAiLFwidHJhY2VMb2dJZFwiOiIgKyAoKyt0aGlzLl9sYXN0VHJhY2VMb2dJZCkgKyAifSI7
CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0
fSBvcmlnaW5hbEdsQ29udGV4dAorICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyaW5nQ29udGV4
dH0KKyAgICAgKi8KKyAgICBfY29uc3RydWN0V2ViR0xSZXBsYXlDb250ZXh0OiBmdW5jdGlvbihv
cmlnaW5hbEdsQ29udGV4dCkKKyAgICB7CisgICAgICAgIHZhciByZXBsYXlDb250ZXh0ID0gb3Jp
Z2luYWxHbENvbnRleHRbIl9fcmVwbGF5Q29udGV4dCJdOworICAgICAgICBpZiAoIXJlcGxheUNv
bnRleHQpIHsKKyAgICAgICAgICAgIHZhciBjYW52YXMgPSBvcmlnaW5hbEdsQ29udGV4dC5jYW52
YXMuY2xvbmVOb2RlKHRydWUpOworICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBvcmlnaW5h
bEdsQ29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgICAgICAgICAgdmFyIGNvbnRl
eHRJZHMgPSBbImV4cGVyaW1lbnRhbC13ZWJnbCIsICJ3ZWJraXQtM2QiLCAiM2QiXTsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBjb250ZXh0SWQ7IGNvbnRleHRJZCA9IGNvbnRleHRJZHNb
aV07ICsraSkgeworICAgICAgICAgICAgICAgIHJlcGxheUNvbnRleHQgPSBjYW52YXMuZ2V0Q29u
dGV4dChjb250ZXh0SWQsIGF0dHJpYnV0ZXMpOworICAgICAgICAgICAgICAgIGlmIChyZXBsYXlD
b250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxheUNvbnRleHQgPSAvKiogQHR5cGUg
e1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gKi8gUmVzb3VyY2Uud3JhcHBlZE9iamVjdChyZXBsYXlD
b250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9yaWdpbmFs
R2xDb250ZXh0LCAiX19yZXBsYXlDb250ZXh0IiwgeworICAgICAgICAgICAgICAgIHZhbHVlOiBy
ZXBsYXlDb250ZXh0LAorICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSwKKyAgICAgICAg
ICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5fcmVwbGF5Q29udGV4dCA9
IHJlcGxheUNvbnRleHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
UmVzZXQgdGhlIHJlcGxheSBHTCBzdGF0ZSBhbmQgY2xlYXIgdGhlIGNhbnZhcy4KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVwbGF5Q29udGV4dDsKKyAgICB9Cit9CisKK3ZhciBpbmplY3Rl
ZFNjcmlwdCA9IG5ldyBJbmplY3RlZFNjcmlwdCgpOworcmV0dXJuIGluamVjdGVkU2NyaXB0Owor
Cit9KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTNiZTkyMTQ0
ZmJkN2U3Y2Y0YTBiZGI0MGI5OWE0ZGYwNGE0ZDAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdFdlYkdMTW9kdWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKFdFQkdMKQot
Ci0jaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oIgotCi0jaW5jbHVkZSAiSW5q
ZWN0ZWRTY3JpcHQuaCIKLSNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKLSNpbmNs
dWRlICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmgiCi0jaW5jbHVkZSAiU2NyaXB0
RnVuY3Rpb25DYWxsLmgiCi0jaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZTo6SW5qZWN0ZWRTY3JpcHRXZWJH
TE1vZHVsZSgpCi0gICAgOiBJbmplY3RlZFNjcmlwdE1vZHVsZSgiSW5qZWN0ZWRTY3JpcHRXZWJH
TE1vZHVsZSIpCi17Ci19Ci0KLUluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUgSW5qZWN0ZWRTY3Jp
cHRXZWJHTE1vZHVsZTo6bW9kdWxlRm9yU3RhdGUoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKLXsKLSAgICBJbmpl
Y3RlZFNjcmlwdFdlYkdMTW9kdWxlIHJlc3VsdDsKLSAgICByZXN1bHQuZW5zdXJlSW5qZWN0ZWQo
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBzY3JpcHRTdGF0ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotU3RyaW5nIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGU6OnNvdXJjZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihJbmplY3Rl
ZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlX2pzKSwgc2l6ZW9mKEluamVjdGVkU2NyaXB0V2ViR0xN
b2R1bGVTb3VyY2VfanMpKTsKLX0KLQotU2NyaXB0T2JqZWN0IEluamVjdGVkU2NyaXB0V2ViR0xN
b2R1bGU6OndyYXBXZWJHTENvbnRleHQoY29uc3QgU2NyaXB0T2JqZWN0JiBnbENvbnRleHQpCi17
Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCks
ICJ3cmFwV2ViR0xDb250ZXh0Iik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZ2xDb250
ZXh0KTsKLSAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOwotICAgIFNjcmlwdFZhbHVlIHJl
c3VsdFZhbHVlID0gY2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBoYWRFeGNl
cHRpb24pOwotICAgIGlmIChoYWRFeGNlcHRpb24gfHwgcmVzdWx0VmFsdWUuaGFzTm9WYWx1ZSgp
IHx8ICFyZXN1bHRWYWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiBT
Y3JpcHRPYmplY3QoZ2xDb250ZXh0LnNjcmlwdFN0YXRlKCksIHJlc3VsdFZhbHVlKTsKLX0KLQot
dm9pZCBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlOjpjYXB0dXJlRnJhbWUoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBTdHJpbmcqIHRyYWNlTG9nSWQpCi17Ci0gICAgU2NyaXB0RnVuY3Rpb25D
YWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJjYXB0dXJlRnJhbWUiKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdFZhbHVlOwotICAgIG1ha2VDYWxsKGZ1bmN0
aW9uLCAmcmVzdWx0VmFsdWUpOwotICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUt
PnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZVN0cmluZyB8fCAhcmVzdWx0VmFsdWUtPmFz
U3RyaW5nKHRyYWNlTG9nSWQpKQotICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJy
b3I6IGNhcHR1cmVGcmFtZSI7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZTo6
ZHJvcFRyYWNlTG9nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFj
ZUxvZ0lkKQotewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlw
dE9iamVjdCgpLCAiZHJvcFRyYWNlTG9nIik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
dHJhY2VMb2dJZCk7Ci0gICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBjYWxsRnVu
Y3Rpb25XaXRoRXZhbEVuYWJsZWQoZnVuY3Rpb24sIGhhZEV4Y2VwdGlvbik7Ci0gICAgQVNTRVJU
KCFoYWRFeGNlcHRpb24pOwotICAgIGlmIChoYWRFeGNlcHRpb24pCi0gICAgICAgICplcnJvclN0
cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogZHJvcFRyYWNlTG9nIjsKLX0KLQotdm9pZCBJbmplY3Rl
ZFNjcmlwdFdlYkdMTW9kdWxlOjp0cmFjZUxvZyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdHJhY2VMb2dJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpXZWJHTDo6VHJhY2VM
b2c+KiB0cmFjZUxvZykKLXsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0
ZWRTY3JpcHRPYmplY3QoKSwgInRyYWNlTG9nIik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQodHJhY2VMb2dJZCk7Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRWYWx1ZTsK
LSAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdFZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdFZh
bHVlIHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3Qp
IHsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpKQotICAg
ICAgICAgICAgKmVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiB0cmFjZUxvZyI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgKnRyYWNlTG9nID0gVHlwZUJ1aWxkZXI6OldlYkdMOjpU
cmFjZUxvZzo6cnVudGltZUNhc3QocmVzdWx0VmFsdWUpOwotfQotCi12b2lkIEluamVjdGVkU2Ny
aXB0V2ViR0xNb2R1bGU6OnJlcGxheVRyYWNlTG9nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkLCBpbnQgc3RlcE5vLCBTdHJpbmcqIHJlc3VsdCkKLXsK
LSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwg
InJlcGxheVRyYWNlTG9nIik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodHJhY2VMb2dJ
ZCk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3RlcE5vKTsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IHJlc3VsdFZhbHVlOwotICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0
VmFsdWUpOwotICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBJ
bnNwZWN0b3JWYWx1ZTo6VHlwZVN0cmluZyB8fCAhcmVzdWx0VmFsdWUtPmFzU3RyaW5nKHJlc3Vs
dCkpCi0gICAgICAgICplcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogcmVwbGF5VHJhY2VM
b2ciOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKSAmJiBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2ZmODU3ZmQ4OTlmYzM5MGUwY2U3OWMzMTVhMGUwZDQwY2JlMTBhNy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZV9oCi0jZGVmaW5lIEluamVj
dGVkU2NyaXB0V2ViR0xNb2R1bGVfaAotCi0jaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNb2R1bGUu
aCIKLSNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdl
cjsKLWNsYXNzIFNjcmlwdE9iamVjdDsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJM
RShXRUJHTCkKLQotY2xhc3MgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZSA6IHB1YmxpYyBJbmpl
Y3RlZFNjcmlwdE1vZHVsZSB7Ci1wdWJsaWM6Ci0gICAgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVs
ZSgpOwotICAgIAotICAgIHZpcnR1YWwgU3RyaW5nIHNvdXJjZSgpIGNvbnN0OwotCi0gICAgc3Rh
dGljIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUgbW9kdWxlRm9yU3RhdGUoSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKiwgU2NyaXB0U3RhdGUqKTsKLQotICAgIFNjcmlwdE9iamVjdCB3cmFwV2ViR0xD
b250ZXh0KGNvbnN0IFNjcmlwdE9iamVjdCYgZ2xDb250ZXh0KTsKLSAgICB2b2lkIGNhcHR1cmVG
cmFtZShFcnJvclN0cmluZyosIFN0cmluZyopOwotICAgIHZvaWQgZHJvcFRyYWNlTG9nKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB0cmFjZUxvZyhFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYsIFJlZlB0cjxUeXBlQnVpbGRlcjo6V2ViR0w6OlRyYWNlTG9nPiopOwot
ICAgIHZvaWQgcmVwbGF5VHJhY2VMb2coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBpbnQs
IFN0cmluZyopOwotfTsKLQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdFdlYkdMTW9kdWxlU291cmNlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
NzgwYWYzYzQxNTI1Yzk4ZTc2YmRiODAzNTcwZWVjM2I4Y2I3N2IyLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjEx
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLyoqCi0gKiBAcGFyYW0ge0luamVjdGVkU2NyaXB0SG9zdH0gSW5qZWN0ZWRTY3Jp
cHRIb3N0Ci0gKiBAcGFyYW0ge1dpbmRvd30gaW5zcGVjdGVkV2luZG93Ci0gKiBAcGFyYW0ge251
bWJlcn0gaW5qZWN0ZWRTY3JpcHRJZAotICovCi0oZnVuY3Rpb24gKEluamVjdGVkU2NyaXB0SG9z
dCwgaW5zcGVjdGVkV2luZG93LCBpbmplY3RlZFNjcmlwdElkKSB7Ci0KLXZhciBUeXBlVXRpbHMg
PSB7Ci0gICAgLyoqCi0gICAgICogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS90eXBl
ZGFycmF5L3NwZWNzL2xhdGVzdC8jNwotICAgICAqIEB0eXBlIHtBcnJheS48RnVuY3Rpb24+fQot
ICAgICAqLwotICAgIF90eXBlZEFycmF5Q2xhc3NlczogKGZ1bmN0aW9uKHR5cGVOYW1lcykgewot
ICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHlw
ZU5hbWVzLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgaWYgKGluc3BlY3RlZFdp
bmRvd1t0eXBlTmFtZXNbaV1dKQotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGluc3BlY3Rl
ZFdpbmRvd1t0eXBlTmFtZXNbaV1dKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0pKFsiSW50OEFycmF5IiwgIlVpbnQ4QXJyYXkiLCAiVWludDhDbGFtcGVkQXJyYXki
LCAiSW50MTZBcnJheSIsICJVaW50MTZBcnJheSIsICJJbnQzMkFycmF5IiwgIlVpbnQzMkFycmF5
IiwgIkZsb2F0MzJBcnJheSIsICJGbG9hdDY0QXJyYXkiXSksCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0geyp9IGFycmF5Ci0gICAgICogQHJldHVybiB7RnVuY3Rpb259Ci0gICAgICovCi0gICAg
dHlwZWRBcnJheUNsYXNzOiBmdW5jdGlvbihhcnJheSkKLSAgICB7Ci0gICAgICAgIHZhciBjbGFz
c2VzID0gVHlwZVV0aWxzLl90eXBlZEFycmF5Q2xhc3NlczsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDAsIG4gPSBjbGFzc2VzLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgaWYgKGFy
cmF5IGluc3RhbmNlb2YgY2xhc3Nlc1tpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3Nl
c1tpXTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHsqfSBvYmoKLSAgICAgKiBAcmV0dXJuIHsqfQotICAgICAqIEZJWE1F
OiBzdXBwcmVzcyBjaGVja1R5cGVzIGR1ZSB0byBvdXRkYXRlZCBidWlsdGluIGV4dGVybnMgZm9y
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBhbmQgSW1hZ2VEYXRhCi0gICAgICogQHN1cHByZXNz
IHtjaGVja1R5cGVzfQotICAgICAqLwotICAgIGNsb25lOiBmdW5jdGlvbihvYmopCi0gICAgewot
ICAgICAgICBpZiAoIW9iaikKLSAgICAgICAgICAgIHJldHVybiBvYmo7Ci0KLSAgICAgICAgdmFy
IHR5cGUgPSB0eXBlb2Ygb2JqOwotICAgICAgICBpZiAodHlwZSAhPT0gIm9iamVjdCIgJiYgdHlw
ZSAhPT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAgIHJldHVybiBvYmo7Ci0KLSAgICAgICAgLy8g
SGFuZGxlIEFycmF5IGFuZCBBcnJheUJ1ZmZlciBpbnN0YW5jZXMuCi0gICAgICAgIGlmICh0eXBl
b2Ygb2JqLnNsaWNlID09PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2Vy
dChvYmogaW5zdGFuY2VvZiBBcnJheSB8fCBvYmogaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7Ci0g
ICAgICAgICAgICByZXR1cm4gb2JqLnNsaWNlKDApOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFy
IHR5cGVkQXJyYXlDbGFzcyA9IFR5cGVVdGlscy50eXBlZEFycmF5Q2xhc3Mob2JqKTsKLSAgICAg
ICAgaWYgKHR5cGVkQXJyYXlDbGFzcykKLSAgICAgICAgICAgIHJldHVybiBuZXcgdHlwZWRBcnJh
eUNsYXNzKG9iaik7Ci0KLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1l
bnQpCi0gICAgICAgICAgICByZXR1cm4gb2JqLmNsb25lTm9kZSh0cnVlKTsKLQotICAgICAgICBp
ZiAob2JqIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSBvYmouY2xvbmVOb2RlKHRydWUpOwotICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBS
ZXNvdXJjZS53cmFwcGVkT2JqZWN0KHJlc3VsdC5nZXRDb250ZXh0KCIyZCIpKTsKLSAgICAgICAg
ICAgIGNvbnRleHQuZHJhd0ltYWdlKG9iaiwgMCwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEhUTUxWaWRlb0Vs
ZW1lbnQpIHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBvYmouY2xvbmVOb2RlKHRydWUpOwot
ICAgICAgICAgICAgLy8gRklYTUU6IENvcHkgSFRNTFZpZGVvRWxlbWVudCdzIGN1cnJlbnQgaW1h
Z2UgaW50byBhIDJkIGNhbnZhcy4KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7Ci0gICAgICAgICAg
ICB2YXIgY29udGV4dCA9IFR5cGVVdGlscy5fZHVtbXlDYW52YXMyZENvbnRleHQoKTsKLSAgICAg
ICAgICAgIHZhciByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUltYWdlRGF0YShvYmopOwotICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBvYmouZGF0YS5sZW5ndGg7IGkgPCBuOyArK2kpCi0g
ICAgICAgICAgICAgIHJlc3VsdC5kYXRhW2ldID0gb2JqLmRhdGFbaV07Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc29sZS5lcnJvcigiQVNTRVJU
X05PVF9SRUFDSEVEOiBmYWlsZWQgdG8gY2xvbmUgb2JqZWN0OiAiLCBvYmopOwotICAgICAgICBy
ZXR1cm4gb2JqOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkR9Ci0gICAgICovCi0gICAgX2R1bW15Q2FudmFzMmRDb250ZXh0OiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB2YXIgY29udGV4dCA9IFR5cGVVdGlscy5fZHVtbXlDYW52
YXMyZENvbnRleHRJbnN0YW5jZTsKLSAgICAgICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgICAg
ICB2YXIgY2FudmFzID0gaW5zcGVjdGVkV2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNh
bnZhcyIpOwotICAgICAgICAgICAgY29udGV4dCA9IC8qKiBAdHlwZSB7Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEfSAqLyBSZXNvdXJjZS53cmFwcGVkT2JqZWN0KGNhbnZhcy5nZXRDb250ZXh0KCIy
ZCIpKTsKLSAgICAgICAgICAgIFR5cGVVdGlscy5fZHVtbXlDYW52YXMyZENvbnRleHRJbnN0YW5j
ZSA9IGNvbnRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNvbnRleHQ7Ci0gICAgfQot
fQotCi0vKioKLSAqIEBpbnRlcmZhY2UKLSAqLwotZnVuY3Rpb24gU3RhY2tUcmFjZSgpCi17Ci19
Ci0KLVN0YWNrVHJhY2UucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBpbmRleAotICAgICAqIEByZXR1cm4ge3tzb3VyY2VVUkw6IHN0cmluZywgbGluZU51bWJl
cjogbnVtYmVyLCBjb2x1bW5OdW1iZXI6IG51bWJlcn19Ci0gICAgICovCi0gICAgY2FsbEZyYW1l
OiBmdW5jdGlvbihpbmRleCkKLSAgICB7Ci0gICAgfQotfQotCi0vKioKLSAqIEBwYXJhbSB7bnVt
YmVyPX0gc3RhY2tUcmFjZUxpbWl0Ci0gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gdG9wTW9zdEZ1bmN0
aW9uVG9JZ25vcmUKLSAqIEByZXR1cm4ge1N0YWNrVHJhY2V9Ci0gKi8KLVN0YWNrVHJhY2UuY3Jl
YXRlID0gZnVuY3Rpb24oc3RhY2tUcmFjZUxpbWl0LCB0b3BNb3N0RnVuY3Rpb25Ub0lnbm9yZSkK
LXsKLSAgICBpZiAodHlwZW9mIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID09PSAiZnVuY3Rpb24i
KQotICAgICAgICByZXR1cm4gbmV3IFN0YWNrVHJhY2VWOChzdGFja1RyYWNlTGltaXQsIHRvcE1v
c3RGdW5jdGlvblRvSWdub3JlIHx8IGFyZ3VtZW50cy5jYWxsZWUpOwotICAgIC8vIEZJWE1FOiBT
dXBwb3J0IEpTQywgYW5kIG1heWJlIG90aGVyIGJyb3dzZXJzLgotICAgIHJldHVybiBudWxsOwot
fQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge1N0YWNrVHJhY2V9Ci0g
KiBAcGFyYW0ge251bWJlcj19IHN0YWNrVHJhY2VMaW1pdAotICogQHBhcmFtIHtGdW5jdGlvbj19
IHRvcE1vc3RGdW5jdGlvblRvSWdub3JlCi0gKiBAc2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC92OC93aWtpL0phdmFTY3JpcHRTdGFja1RyYWNlQXBpCi0gKi8KLWZ1bmN0aW9uIFN0YWNrVHJh
Y2VWOChzdGFja1RyYWNlTGltaXQsIHRvcE1vc3RGdW5jdGlvblRvSWdub3JlKQotewotICAgIFN0
YWNrVHJhY2UuY2FsbCh0aGlzKTsKLSAgICB2YXIgb2xkU3RhY2tUcmFjZUxpbWl0ID0gRXJyb3Iu
c3RhY2tUcmFjZUxpbWl0OwotICAgIGlmICh0eXBlb2Ygc3RhY2tUcmFjZUxpbWl0ID09PSAibnVt
YmVyIikKLSAgICAgICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gc3RhY2tUcmFjZUxpbWl0Owot
Ci0gICAgdGhpcy5fZXJyb3IgPSAvKiogQHR5cGUge3tzdGFjazogQXJyYXl9fSAqLyB7fTsKLSAg
ICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLl9lcnJvciwgdG9wTW9zdEZ1bmN0aW9uVG9J
Z25vcmUgfHwgYXJndW1lbnRzLmNhbGxlZSk7Ci0KLSAgICBFcnJvci5zdGFja1RyYWNlTGltaXQg
PSBvbGRTdGFja1RyYWNlTGltaXQ7Ci19Ci0KLVN0YWNrVHJhY2VWOC5wcm90b3R5cGUgPSB7Ci0g
ICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4Ci0g
ICAgICogQHJldHVybiB7e3NvdXJjZVVSTDogc3RyaW5nLCBsaW5lTnVtYmVyOiBudW1iZXIsIGNv
bHVtbk51bWJlcjogbnVtYmVyfX0KLSAgICAgKi8KLSAgICBjYWxsRnJhbWU6IGZ1bmN0aW9uKGlu
ZGV4KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zdGFja1RyYWNlKQotICAgICAgICAgICAg
dGhpcy5fcHJlcGFyZVN0YWNrVHJhY2UoKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWNrVHJh
Y2VbaW5kZXhdOwotICAgIH0sCi0KLSAgICBfcHJlcGFyZVN0YWNrVHJhY2U6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHZhciBvbGRQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVT
dGFja1RyYWNlOwotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGVycm9y
Ci0gICAgICAgICAqIEBwYXJhbSB7QXJyYXkuPENhbGxTaXRlPn0gc3RydWN0dXJlZFN0YWNrVHJh
Y2UKLSAgICAgICAgICogQHJldHVybiB7QXJyYXkuPHtzb3VyY2VVUkw6IHN0cmluZywgbGluZU51
bWJlcjogbnVtYmVyLCBjb2x1bW5OdW1iZXI6IG51bWJlcn0+fQotICAgICAgICAgKi8KLSAgICAg
ICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBmdW5jdGlvbihlcnJvciwgc3RydWN0dXJlZFN0
YWNrVHJhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVkU3RhY2tU
cmFjZS5tYXAoZnVuY3Rpb24oY2FsbFNpdGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkw6IGNhbGxTaXRlLmdldEZpbGVOYW1lKCksCi0g
ICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGNhbGxTaXRlLmdldExpbmVOdW1iZXIoKSwK
LSAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBjYWxsU2l0ZS5nZXRDb2x1bW5OdW1i
ZXIoKQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLl9zdGFja1RyYWNlID0gdGhpcy5fZXJyb3Iuc3RhY2s7Ci0gICAgICAgIEVycm9y
LnByZXBhcmVTdGFja1RyYWNlID0gb2xkUHJlcGFyZVN0YWNrVHJhY2U7Ci0gICAgICAgIGRlbGV0
ZSB0aGlzLl9lcnJvcjsgLy8gTm8gbG9uZ2VyIG5lZWRlZCwgZnJlZSBtZW1vcnkuCi0gICAgfQot
fQotCi1TdGFja1RyYWNlVjgucHJvdG90eXBlLl9fcHJvdG9fXyA9IFN0YWNrVHJhY2UucHJvdG90
eXBlOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBDYWNoZSgpCi17Ci0g
ICAgdGhpcy5yZXNldCgpOwotfQotCi1DYWNoZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIHNpemU6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9zaXplOwotICAgIH0sCi0KLSAgICByZXNldDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5faXRlbXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwot
ICAgICAgICB0aGlzLl9zaXplID0gMDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtudW1iZXJ9IGtleQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaGFz
OiBmdW5jdGlvbihrZXkpCi0gICAgewotICAgICAgICByZXR1cm4ga2V5IGluIHRoaXMuX2l0ZW1z
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0ga2V5Ci0gICAgICog
QHJldHVybiB7T2JqZWN0fQotICAgICAqLwotICAgIGdldDogZnVuY3Rpb24oa2V5KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zW2tleV07Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBrZXkKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbQotICAg
ICAqLwotICAgIHB1dDogZnVuY3Rpb24oa2V5LCBpdGVtKQotICAgIHsKLSAgICAgICAgaWYgKCF0
aGlzLmhhcyhrZXkpKQotICAgICAgICAgICAgKyt0aGlzLl9zaXplOwotICAgICAgICB0aGlzLl9p
dGVtc1trZXldID0gaXRlbTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
cGFyYW0ge1Jlc291cmNlfE9iamVjdH0gdGhpc09iamVjdAotICogQHBhcmFtIHtzdHJpbmd9IGZ1
bmN0aW9uTmFtZQotICogQHBhcmFtIHtBcnJheXxBcmd1bWVudHN9IGFyZ3MKLSAqIEBwYXJhbSB7
UmVzb3VyY2V8Kj19IHJlc3VsdAotICogQHBhcmFtIHtTdGFja1RyYWNlPX0gc3RhY2tUcmFjZQot
ICovCi1mdW5jdGlvbiBDYWxsKHRoaXNPYmplY3QsIGZ1bmN0aW9uTmFtZSwgYXJncywgcmVzdWx0
LCBzdGFja1RyYWNlKQotewotICAgIHRoaXMuX3RoaXNPYmplY3QgPSB0aGlzT2JqZWN0OwotICAg
IHRoaXMuX2Z1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZTsKLSAgICB0aGlzLl9hcmdzID0gQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMCk7Ci0gICAgdGhpcy5fcmVzdWx0ID0gcmVz
dWx0OwotICAgIHRoaXMuX3N0YWNrVHJhY2UgPSBzdGFja1RyYWNlIHx8IG51bGw7Ci19Ci0KLUNh
bGwucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1Jlc291cmNlfQotICAg
ICAqLwotICAgIHJlc291cmNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gUmVz
b3VyY2UuZm9yT2JqZWN0KHRoaXMuX3RoaXNPYmplY3QpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25OYW1lOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheX0KLSAgICAgKi8KLSAgICBhcmdzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fYXJnczsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHJldHVybiB7Kn0KLSAgICAgKi8KLSAgICByZXN1bHQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEByZXR1cm4ge1N0YWNrVHJhY2V9Ci0gICAgICovCi0gICAgc3RhY2tUcmFjZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWNrVHJhY2U7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7U3RhY2tUcmFjZX0gc3RhY2tUcmFjZQotICAgICAq
LwotICAgIHNldFN0YWNrVHJhY2U6IGZ1bmN0aW9uKHN0YWNrVHJhY2UpCi0gICAgewotICAgICAg
ICB0aGlzLl9zdGFja1RyYWNlID0gc3RhY2tUcmFjZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHsqfSByZXN1bHQKLSAgICAgKi8KLSAgICBzZXRSZXN1bHQ6IGZ1bmN0aW9uKHJl
c3VsdCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDsKLSAgICB9LAotCi0g
ICAgZnJlZXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZnJlZXplZCkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fZnJlZXplZCA9IHRydWU7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwLCBuID0gdGhpcy5fYXJncy5sZW5ndGg7IGkgPCBuOyArK2kpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBmcmVlemUgdGhlIFJlc291cmNlcyBhbHNvIQotICAgICAg
ICAgICAgaWYgKCFSZXNvdXJjZS5mb3JPYmplY3QodGhpcy5fYXJnc1tpXSkpCi0gICAgICAgICAg
ICAgICAgdGhpcy5fYXJnc1tpXSA9IFR5cGVVdGlscy5jbG9uZSh0aGlzLl9hcmdzW2ldKTsKLSAg
ICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQot
ICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVDYWxsfQotICAgICAqLwotICAgIHRvUmVwbGF5YWJs
ZTogZnVuY3Rpb24oY2FjaGUpCi0gICAgewotICAgICAgICB0aGlzLmZyZWV6ZSgpOwotICAgICAg
ICB2YXIgdGhpc09iamVjdCA9IC8qKiBAdHlwZSB7UmVwbGF5YWJsZVJlc291cmNlfSAqLyBSZXNv
dXJjZS50b1JlcGxheWFibGUodGhpcy5fdGhpc09iamVjdCwgY2FjaGUpOwotICAgICAgICB2YXIg
cmVzdWx0ID0gUmVzb3VyY2UudG9SZXBsYXlhYmxlKHRoaXMuX3Jlc3VsdCwgY2FjaGUpOwotICAg
ICAgICB2YXIgYXJncyA9IHRoaXMuX2FyZ3MubWFwKGZ1bmN0aW9uKG9iaikgewotICAgICAgICAg
ICAgcmV0dXJuIFJlc291cmNlLnRvUmVwbGF5YWJsZShvYmosIGNhY2hlKTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIHJldHVybiBuZXcgUmVwbGF5YWJsZUNhbGwodGhpc09iamVjdCwgdGhpcy5fZnVu
Y3Rpb25OYW1lLCBhcmdzLCByZXN1bHQsIHRoaXMuX3N0YWNrVHJhY2UpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge1JlcGxheWFibGVDYWxsfSByZXBsYXlhYmxlQ2FsbAotICAg
ICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCi0gICAgICogQHJldHVybiB7Q2FsbH0KLSAgICAgKi8K
LSAgICByZXBsYXk6IGZ1bmN0aW9uKHJlcGxheWFibGVDYWxsLCBjYWNoZSkKLSAgICB7Ci0gICAg
ICAgIHZhciByZXBsYXlPYmplY3QgPSBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KHJlcGxheWFi
bGVDYWxsLnJlc291cmNlKCksIGNhY2hlKTsKLSAgICAgICAgdmFyIHJlcGxheUZ1bmN0aW9uID0g
cmVwbGF5T2JqZWN0W3JlcGxheWFibGVDYWxsLmZ1bmN0aW9uTmFtZSgpXTsKLSAgICAgICAgY29u
c29sZS5hc3NlcnQodHlwZW9mIHJlcGxheUZ1bmN0aW9uID09PSAiZnVuY3Rpb24iLCAiRXhwZWN0
ZWQgYSBmdW5jdGlvbiB0byByZXBsYXkiKTsKLSAgICAgICAgdmFyIHJlcGxheUFyZ3MgPSByZXBs
YXlhYmxlQ2FsbC5hcmdzKCkubWFwKGZ1bmN0aW9uKG9iaikgewotICAgICAgICAgICAgcmV0dXJu
IFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkob2JqLCBjYWNoZSk7Ci0gICAgICAgIH0pOwotICAg
ICAgICB2YXIgcmVwbGF5UmVzdWx0ID0gcmVwbGF5RnVuY3Rpb24uYXBwbHkocmVwbGF5T2JqZWN0
LCByZXBsYXlBcmdzKTsKLSAgICAgICAgaWYgKHJlcGxheWFibGVDYWxsLnJlc3VsdCgpIGluc3Rh
bmNlb2YgUmVwbGF5YWJsZVJlc291cmNlKSB7Ci0gICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBy
ZXBsYXlhYmxlQ2FsbC5yZXN1bHQoKS5yZXBsYXkoY2FjaGUpOwotICAgICAgICAgICAgaWYgKCFy
ZXNvdXJjZS53cmFwcGVkT2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0V3Jh
cHBlZE9iamVjdChyZXBsYXlSZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fdGhp
c09iamVjdCA9IHJlcGxheU9iamVjdDsKLSAgICAgICAgdGhpcy5fZnVuY3Rpb25OYW1lID0gcmVw
bGF5YWJsZUNhbGwuZnVuY3Rpb25OYW1lKCk7Ci0gICAgICAgIHRoaXMuX2FyZ3MgPSByZXBsYXlB
cmdzOwotICAgICAgICB0aGlzLl9yZXN1bHQgPSByZXBsYXlSZXN1bHQ7Ci0gICAgICAgIHRoaXMu
X3N0YWNrVHJhY2UgPSByZXBsYXlhYmxlQ2FsbC5zdGFja1RyYWNlKCk7Ci0gICAgICAgIHRoaXMu
X2ZyZWV6ZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1JlcGxheWFibGVSZXNvdXJjZX0gdGhpc09iamVj
dAotICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZQotICogQHBhcmFtIHtBcnJheS48UmVw
bGF5YWJsZVJlc291cmNlfCo+fSBhcmdzCi0gKiBAcGFyYW0ge1JlcGxheWFibGVSZXNvdXJjZXwq
fSByZXN1bHQKLSAqIEBwYXJhbSB7U3RhY2tUcmFjZX0gc3RhY2tUcmFjZQotICovCi1mdW5jdGlv
biBSZXBsYXlhYmxlQ2FsbCh0aGlzT2JqZWN0LCBmdW5jdGlvbk5hbWUsIGFyZ3MsIHJlc3VsdCwg
c3RhY2tUcmFjZSkKLXsKLSAgICB0aGlzLl90aGlzT2JqZWN0ID0gdGhpc09iamVjdDsKLSAgICB0
aGlzLl9mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7Ci0gICAgdGhpcy5fYXJncyA9IGFyZ3M7
Ci0gICAgdGhpcy5fcmVzdWx0ID0gcmVzdWx0OwotICAgIHRoaXMuX3N0YWNrVHJhY2UgPSBzdGFj
a1RyYWNlOwotfQotCi1SZXBsYXlhYmxlQ2FsbC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7UmVwbGF5YWJsZVJlc291cmNlfQotICAgICAqLwotICAgIHJlc291cmNlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdGhpc09iamVjdDsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGZ1bmN0
aW9uTmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9u
TmFtZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPFJlcGxheWFi
bGVSZXNvdXJjZXwqPn0KLSAgICAgKi8KLSAgICBhcmdzOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fYXJnczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7UmVwbGF5YWJsZVJlc291cmNlfCp9Ci0gICAgICovCi0gICAgcmVzdWx0OiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJuIHtTdGFja1RyYWNlfQotICAgICAqLwotICAgIHN0YWNrVHJhY2U6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGFja1RyYWNlOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQotICAgICAqIEByZXR1cm4g
e0NhbGx9Ci0gICAgICovCi0gICAgcmVwbGF5OiBmdW5jdGlvbihjYWNoZSkKLSAgICB7Ci0gICAg
ICAgIHZhciBjYWxsID0gT2JqZWN0LmNyZWF0ZShDYWxsLnByb3RvdHlwZSk7Ci0gICAgICAgIHJl
dHVybiBjYWxsLnJlcGxheSh0aGlzLCBjYWNoZSk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICogQHBhcmFtIHtPYmplY3R9IHdyYXBwZWRPYmplY3QKLSAqLwotZnVuY3Rpb24g
UmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKLXsKLSAgICB0aGlzLl9pZCA9ICsrUmVzb3VyY2UuX3Vu
aXF1ZUlkOwotICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IG51bGw7Ci0gICAgdGhpcy5fY2Fs
bHMgPSBbXTsKLSAgICB0aGlzLnNldFdyYXBwZWRPYmplY3Qod3JhcHBlZE9iamVjdCk7Ci19Ci0K
LS8qKgotICogQHR5cGUge251bWJlcn0KLSAqLwotUmVzb3VyY2UuX3VuaXF1ZUlkID0gMDsKLQot
LyoqCi0gKiBAcGFyYW0geyp9IG9iagotICogQHJldHVybiB7UmVzb3VyY2V9Ci0gKi8KLVJlc291
cmNlLmZvck9iamVjdCA9IGZ1bmN0aW9uKG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgaWYgKG9iaiBpbnN0YW5jZW9mIFJlc291cmNlKQotICAgICAgICBy
ZXR1cm4gb2JqOwotICAgIGlmICh0eXBlb2Ygb2JqID09PSAib2JqZWN0IikKLSAgICAgICAgcmV0
dXJuIG9ialsiX19yZXNvdXJjZU9iamVjdCJdOwotICAgIHJldHVybiBudWxsOwotfQotCi0vKioK
LSAqIEBwYXJhbSB7UmVzb3VyY2V8Kn0gb2JqCi0gKiBAcmV0dXJuIHsqfQotICovCi1SZXNvdXJj
ZS53cmFwcGVkT2JqZWN0ID0gZnVuY3Rpb24ob2JqKQotewotICAgIHZhciByZXNvdXJjZSA9IFJl
c291cmNlLmZvck9iamVjdChvYmopOwotICAgIHJldHVybiByZXNvdXJjZSA/IHJlc291cmNlLndy
YXBwZWRPYmplY3QoKSA6IG9iajsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge1Jlc291cmNlfCp9IG9i
agotICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAqIEByZXR1cm4ge1JlcGxheWFibGVSZXNvdXJj
ZXwqfQotICovCi1SZXNvdXJjZS50b1JlcGxheWFibGUgPSBmdW5jdGlvbihvYmosIGNhY2hlKQot
ewotICAgIHZhciByZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChvYmopOwotICAgIHJldHVy
biByZXNvdXJjZSA/IHJlc291cmNlLnRvUmVwbGF5YWJsZShjYWNoZSkgOiBvYmo7Ci19Ci0KLVJl
c291cmNlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0g
ICAgICovCi0gICAgaWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9p
ZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7T2JqZWN0fQotICAgICAqLwot
ICAgIHdyYXBwZWRPYmplY3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll93cmFwcGVkT2JqZWN0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVj
dH0gdmFsdWUKLSAgICAgKi8KLSAgICBzZXRXcmFwcGVkT2JqZWN0OiBmdW5jdGlvbih2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHZhbHVlLCAid3JhcHBlZE9iamVjdCBzaG91
bGQgbm90IGJlIE5VTEwiKTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoISh2YWx1ZSBpbnN0YW5j
ZW9mIFJlc291cmNlKSwgIkJpbmRpbmcgYSBSZXNvdXJjZSBvYmplY3QgdG8gYW5vdGhlciBSZXNv
dXJjZSBvYmplY3Q/Iik7Ci0gICAgICAgIHRoaXMuX3dyYXBwZWRPYmplY3QgPSB2YWx1ZTsKLSAg
ICAgICAgdGhpcy5fYmluZE9iamVjdFRvUmVzb3VyY2UodmFsdWUpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAgcHJveHlPYmplY3Q6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fcHJveHlPYmplY3QpCi0gICAgICAg
ICAgICB0aGlzLl9wcm94eU9iamVjdCA9IHRoaXMuX3dyYXBPYmplY3QoKTsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX3Byb3h5T2JqZWN0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHtSZXNvdXJjZVRyYWNraW5nTWFuYWdlcn0KLSAgICAgKi8KLSAgICBtYW5hZ2VyOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VNYW5hZ2VyOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1Jlc291cmNlVHJhY2tpbmdNYW5hZ2VyfSB2YWx1
ZQotICAgICAqLwotICAgIHNldE1hbmFnZXI6IGZ1bmN0aW9uKHZhbHVlKQotICAgIHsKLSAgICAg
ICAgdGhpcy5fcmVzb3VyY2VNYW5hZ2VyID0gdmFsdWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge0FycmF5LjxDYWxsPn0KLSAgICAgKi8KLSAgICBjYWxsczogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQotICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVS
ZXNvdXJjZX0KLSAgICAgKi8KLSAgICB0b1JlcGxheWFibGU6IGZ1bmN0aW9uKGNhY2hlKQotICAg
IHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IGNhY2hlLmdldCh0aGlzLl9pZCk7Ci0gICAgICAgIGlm
IChyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB2YXIgZGF0YSA9
IHsKLSAgICAgICAgICAgIGlkOiB0aGlzLl9pZAotICAgICAgICB9OwotICAgICAgICByZXN1bHQg
PSBuZXcgUmVwbGF5YWJsZVJlc291cmNlKHRoaXMsIGRhdGEpOwotICAgICAgICBjYWNoZS5wdXQo
dGhpcy5faWQsIHJlc3VsdCk7IC8vIFB1dCBpbnRvIHRoZSBjYWNoZSBlYXJseSB0byBhdm9pZCBs
b29wcy4KLSAgICAgICAgZGF0YS5jYWxscyA9IHRoaXMuX2NhbGxzLm1hcChmdW5jdGlvbihjYWxs
KSB7Ci0gICAgICAgICAgICByZXR1cm4gY2FsbC50b1JlcGxheWFibGUoY2FjaGUpOwotICAgICAg
ICB9KTsKLSAgICAgICAgdGhpcy5fcG9wdWxhdGVSZXBsYXlhYmxlRGF0YShkYXRhLCBjYWNoZSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7T2JqZWN0fSBkYXRhCi0gICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAgICAgKi8KLSAg
ICBfcG9wdWxhdGVSZXBsYXlhYmxlRGF0YTogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCi0gICAgewot
ICAgICAgICAvLyBEbyBub3RoaW5nLiBTaG91bGQgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2Vz
LgotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAq
IEBwYXJhbSB7Q2FjaGV9IGNhY2hlCi0gICAgICogQHJldHVybiB7UmVzb3VyY2V9Ci0gICAgICov
Ci0gICAgcmVwbGF5OiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKLSAgICB7Ci0gICAgICAgIHZhciBy
ZXNvdXJjZSA9IGNhY2hlLmdldChkYXRhLmlkKTsKLSAgICAgICAgaWYgKHJlc291cmNlKQotICAg
ICAgICAgICAgcmV0dXJuIHJlc291cmNlOwotICAgICAgICB0aGlzLl9pZCA9IGRhdGEuaWQ7Ci0g
ICAgICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IG51bGw7Ci0gICAgICAgIHRoaXMuX2NhbGxz
ID0gW107Ci0gICAgICAgIHRoaXMuX3dyYXBwZWRPYmplY3QgPSBudWxsOwotICAgICAgICBjYWNo
ZS5wdXQoZGF0YS5pZCwgdGhpcyk7IC8vIFB1dCBpbnRvIHRoZSBjYWNoZSBlYXJseSB0byBhdm9p
ZCBsb29wcy4KLSAgICAgICAgdGhpcy5fZG9SZXBsYXlDYWxscyhkYXRhLCBjYWNoZSk7Ci0gICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3dyYXBwZWRPYmplY3QsICJSZXNvdXJjZSBzaG91bGQg
YmUgcmVjb25zdHJ1Y3RlZCEiKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCi0gICAgICogQHBhcmFtIHtDYWNoZX0g
Y2FjaGUKLSAgICAgKi8KLSAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUp
Ci0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGRhdGEuY2FsbHMubGVuZ3RoOyBp
IDwgbjsgKytpKQotICAgICAgICAgICAgdGhpcy5fY2FsbHMucHVzaChkYXRhLmNhbGxzW2ldLnJl
cGxheShjYWNoZSkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0NhbGx9IGNh
bGwKLSAgICAgKi8KLSAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKLSAgICB7Ci0gICAgICAg
IGNhbGwuZnJlZXplKCk7Ci0gICAgICAgIHRoaXMuX2NhbGxzLnB1c2goY2FsbCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IU9iamVjdH0gb2JqZWN0Ci0gICAgICovCi0gICAg
X2JpbmRPYmplY3RUb1Jlc291cmNlOiBmdW5jdGlvbihvYmplY3QpCi0gICAgewotICAgICAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAiX19yZXNvdXJjZU9iamVjdCIsIHsKLSAgICAg
ICAgICAgIHZhbHVlOiB0aGlzLAotICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAotICAgICAg
ICAgICAgZW51bWVyYWJsZTogZmFsc2UsCi0gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
LSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge09iamVjdH0K
LSAgICAgKi8KLSAgICBfd3JhcE9iamVjdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFy
IHdyYXBwZWRPYmplY3QgPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKLSAgICAgICAgaWYgKCF3cmFw
cGVkT2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHZhciBwcm94eSA9
IE9iamVjdC5jcmVhdGUod3JhcHBlZE9iamVjdC5fX3Byb3RvX18pOyAvLyBJbiBvcmRlciB0byBl
bXVsYXRlICJpbnN0YW5jZW9mIi4KLQotICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAg
IHZhciBjdXN0b21XcmFwRnVuY3Rpb25zID0gdGhpcy5fY3VzdG9tV3JhcEZ1bmN0aW9ucygpOwot
ICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUHJvcGVydHkocHJvcGVydHkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICh0eXBlb2Ygd3JhcHBlZE9iamVjdFtwcm9wZXJ0eV0gPT09ICJmdW5jdGlv
biIpIHsKLSAgICAgICAgICAgICAgICB2YXIgY3VzdG9tV3JhcEZ1bmN0aW9uID0gY3VzdG9tV3Jh
cEZ1bmN0aW9uc1twcm9wZXJ0eV07Ci0gICAgICAgICAgICAgICAgaWYgKGN1c3RvbVdyYXBGdW5j
dGlvbikKLSAgICAgICAgICAgICAgICAgICAgcHJveHlbcHJvcGVydHldID0gc2VsZi5fd3JhcEN1
c3RvbUZ1bmN0aW9uKHNlbGYsIHdyYXBwZWRPYmplY3QsIHdyYXBwZWRPYmplY3RbcHJvcGVydHld
LCBwcm9wZXJ0eSwgY3VzdG9tV3JhcEZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHByb3h5W3Byb3BlcnR5XSA9IHNlbGYuX3dyYXBGdW5jdGlvbihz
ZWxmLCB3cmFwcGVkT2JqZWN0LCB3cmFwcGVkT2JqZWN0W3Byb3BlcnR5XSwgcHJvcGVydHkpOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICgvXltBLVowLTlfXSskLy50ZXN0KHByb3BlcnR5KSAmJiB0
eXBlb2Ygd3JhcHBlZE9iamVjdFtwcm9wZXJ0eV0gPT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRmFzdCBhY2Nlc3MgdG8gZW51bXMgYW5kIGNvbnN0YW50cy4KLSAgICAgICAgICAg
ICAgICBwcm94eVtwcm9wZXJ0eV0gPSB3cmFwcGVkT2JqZWN0W3Byb3BlcnR5XTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5
LCBwcm9wZXJ0eSwgewotICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRP
YmplY3RbcHJvcGVydHldOwotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAg
ICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogTG9nIHRoZSBzZXR0ZXIgY2FsbHMuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGSVhNRTogU2V0dGluZyBhbiBhdHRyaWJ1
dGUgJXMgd2FzIG5vdCBsb2dnZWQuIiwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgd3JhcHBlZE9iamVjdFtwcm9wZXJ0eV0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZQotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGlzRW1wdHkgPSB0
cnVlOwotICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB3cmFwcGVkT2JqZWN0KSB7Ci0gICAg
ICAgICAgICBpc0VtcHR5ID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9jZXNzUHJvcGVydHkocHJv
cGVydHkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0VtcHR5KQotICAgICAgICAgICAgcmV0
dXJuIHdyYXBwZWRPYmplY3Q7IC8vIE5vdGhpbmcgdG8gcHJveHkuCi0KLSAgICAgICAgdGhpcy5f
YmluZE9iamVjdFRvUmVzb3VyY2UocHJveHkpOwotICAgICAgICByZXR1cm4gcHJveHk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7UmVzb3VyY2V9IHJlc291cmNlCi0gICAgICog
QHBhcmFtIHtPYmplY3R9IG9yaWdpbmFsT2JqZWN0Ci0gICAgICogQHBhcmFtIHtGdW5jdGlvbn0g
b3JpZ2luYWxGdW5jdGlvbgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUKLSAg
ICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21XcmFwRnVuY3Rpb24KLSAgICAgKiBAcmV0dXJu
IHtGdW5jdGlvbn0KLSAgICAgKi8KLSAgICBfd3JhcEN1c3RvbUZ1bmN0aW9uOiBmdW5jdGlvbihy
ZXNvdXJjZSwgb3JpZ2luYWxPYmplY3QsIG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSwg
Y3VzdG9tV3JhcEZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgdmFyIG1hbmFnZXIgPSByZXNvdXJjZS5tYW5hZ2VyKCk7Ci0g
ICAgICAgICAgICB2YXIgaXNDYXB0dXJpbmcgPSBtYW5hZ2VyICYmIG1hbmFnZXIuY2FwdHVyaW5n
KCk7Ci0gICAgICAgICAgICBpZiAoaXNDYXB0dXJpbmcpCi0gICAgICAgICAgICAgICAgbWFuYWdl
ci5jYXB0dXJlQXJndW1lbnRzKHJlc291cmNlLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgdmFy
IHdyYXBGdW5jdGlvbiA9IG5ldyBSZXNvdXJjZS5XcmFwRnVuY3Rpb24ob3JpZ2luYWxPYmplY3Qs
IG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzKTsKLSAgICAgICAgICAg
IGN1c3RvbVdyYXBGdW5jdGlvbi5hcHBseSh3cmFwRnVuY3Rpb24sIGFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICBpZiAoaXNDYXB0dXJpbmcpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2FsbCA9IHdy
YXBGdW5jdGlvbi5jYWxsKCk7Ci0gICAgICAgICAgICAgICAgY2FsbC5zZXRTdGFja1RyYWNlKFN0
YWNrVHJhY2UuY3JlYXRlKDEsIGFyZ3VtZW50cy5jYWxsZWUpKTsKLSAgICAgICAgICAgICAgICBt
YW5hZ2VyLnJlcG9ydENhbGwoY2FsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gd3JhcEZ1bmN0aW9uLnJlc3VsdCgpOwotICAgICAgICB9OwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1Jlc291cmNlfSByZXNvdXJjZQotICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBvcmlnaW5hbE9iamVjdAotICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9yaWdpbmFsRnVuY3Rp
b24KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lCi0gICAgICogQHJldHVybiB7
RnVuY3Rpb259Ci0gICAgICovCi0gICAgX3dyYXBGdW5jdGlvbjogZnVuY3Rpb24ocmVzb3VyY2Us
IG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWFu
YWdlciA9IHJlc291cmNlLm1hbmFnZXIoKTsKLSAgICAgICAgICAgIGlmICghbWFuYWdlciB8fCAh
bWFuYWdlci5jYXB0dXJpbmcoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxGdW5j
dGlvbi5hcHBseShvcmlnaW5hbE9iamVjdCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIG1hbmFn
ZXIuY2FwdHVyZUFyZ3VtZW50cyhyZXNvdXJjZSwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIHZh
ciByZXN1bHQgPSBvcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KG9yaWdpbmFsT2JqZWN0LCBhcmd1bWVu
dHMpOwotICAgICAgICAgICAgdmFyIHN0YWNrVHJhY2UgPSBTdGFja1RyYWNlLmNyZWF0ZSgxLCBh
cmd1bWVudHMuY2FsbGVlKTsKLSAgICAgICAgICAgIHZhciBjYWxsID0gbmV3IENhbGwocmVzb3Vy
Y2UsIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzLCByZXN1bHQsIHN0YWNrVHJhY2UpOwotICAgICAg
ICAgICAgbWFuYWdlci5yZXBvcnRDYWxsKGNhbGwpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgfTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7T2JqZWN0
LjxzdHJpbmcsIEZ1bmN0aW9uPn0KLSAgICAgKi8KLSAgICBfY3VzdG9tV3JhcEZ1bmN0aW9uczog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHt9OyAvLyBNYXkgYmUgb3ZlcnJpZGRl
biBieSBzdWJjbGFzc2VzLgotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBw
YXJhbSB7T2JqZWN0fSBvcmlnaW5hbE9iamVjdAotICogQHBhcmFtIHtGdW5jdGlvbn0gb3JpZ2lu
YWxGdW5jdGlvbgotICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZQotICogQHBhcmFtIHtB
cnJheXxBcmd1bWVudHN9IGFyZ3MKLSAqLwotUmVzb3VyY2UuV3JhcEZ1bmN0aW9uID0gZnVuY3Rp
b24ob3JpZ2luYWxPYmplY3QsIG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSwgYXJncykK
LXsKLSAgICB0aGlzLl9vcmlnaW5hbE9iamVjdCA9IG9yaWdpbmFsT2JqZWN0OwotICAgIHRoaXMu
X29yaWdpbmFsRnVuY3Rpb24gPSBvcmlnaW5hbEZ1bmN0aW9uOwotICAgIHRoaXMuX2Z1bmN0aW9u
TmFtZSA9IGZ1bmN0aW9uTmFtZTsKLSAgICB0aGlzLl9hcmdzID0gYXJnczsKLSAgICB0aGlzLl9y
ZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChvcmlnaW5hbE9iamVjdCk7Ci0gICAgY29uc29s
ZS5hc3NlcnQodGhpcy5fcmVzb3VyY2UsICJFeHBlY3RlZCBhIHdyYXBwZWQgY2FsbCBvbiBhIFJl
c291cmNlIG9iamVjdC4iKTsKLX0KLQotUmVzb3VyY2UuV3JhcEZ1bmN0aW9uLnByb3RvdHlwZSA9
IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHsqfQotICAgICAqLwotICAgIHJlc3VsdDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9leGVjdXRlZCkgewotICAgICAgICAg
ICAgdGhpcy5fZXhlY3V0ZWQgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5fcmVzdWx0ID0gdGhp
cy5fb3JpZ2luYWxGdW5jdGlvbi5hcHBseSh0aGlzLl9vcmlnaW5hbE9iamVjdCwgdGhpcy5fYXJn
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7Q2FsbH0KLSAgICAgKi8KLSAgICBjYWxsOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2NhbGwpCi0gICAgICAgICAgICB0aGlzLl9j
YWxsID0gbmV3IENhbGwodGhpcy5fcmVzb3VyY2UsIHRoaXMuX2Z1bmN0aW9uTmFtZSwgdGhpcy5f
YXJncywgdGhpcy5yZXN1bHQoKSk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jYWxsOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyp9IHJlc3VsdAotICAgICAqLwotICAgIG92ZXJy
aWRlUmVzdWx0OiBmdW5jdGlvbihyZXN1bHQpCi0gICAgewotICAgICAgICB2YXIgY2FsbCA9IHRo
aXMuY2FsbCgpOwotICAgICAgICBjYWxsLnNldFJlc3VsdChyZXN1bHQpOwotICAgICAgICB0aGlz
Ll9yZXN1bHQgPSByZXN1bHQ7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICog
QHBhcmFtIHtSZXNvdXJjZX0gb3JpZ2luYWxSZXNvdXJjZQotICogQHBhcmFtIHtPYmplY3R9IGRh
dGEKLSAqLwotZnVuY3Rpb24gUmVwbGF5YWJsZVJlc291cmNlKG9yaWdpbmFsUmVzb3VyY2UsIGRh
dGEpCi17Ci0gICAgdGhpcy5fcHJvdG8gPSBvcmlnaW5hbFJlc291cmNlLl9fcHJvdG9fXzsKLSAg
ICB0aGlzLl9kYXRhID0gZGF0YTsKLX0KLQotUmVwbGF5YWJsZVJlc291cmNlLnByb3RvdHlwZSA9
IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQotICAgICAqIEByZXR1cm4g
e1Jlc291cmNlfQotICAgICAqLwotICAgIHJlcGxheTogZnVuY3Rpb24oY2FjaGUpCi0gICAgewot
ICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLl9wcm90byk7Ci0gICAgICAg
IHJlc3VsdCA9IHJlc3VsdC5yZXBsYXkodGhpcy5fZGF0YSwgY2FjaGUpCi0gICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHJlc3VsdC5fX3Byb3RvX18gPT09IHRoaXMuX3Byb3RvLCAiV3JvbmcgdHlwZSBv
ZiBhIHJlcGxheSByZXN1bHQiKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19Ci0K
LS8qKgotICogQHBhcmFtIHtSZXBsYXlhYmxlUmVzb3VyY2V8Kn0gb2JqCi0gKiBAcGFyYW0ge0Nh
Y2hlfSBjYWNoZQotICogQHJldHVybiB7Kn0KLSAqLwotUmVwbGF5YWJsZVJlc291cmNlLnJlcGxh
eSA9IGZ1bmN0aW9uKG9iaiwgY2FjaGUpCi17Ci0gICAgcmV0dXJuIChvYmogaW5zdGFuY2VvZiBS
ZXBsYXlhYmxlUmVzb3VyY2UpID8gb2JqLnJlcGxheShjYWNoZSkud3JhcHBlZE9iamVjdCgpIDog
b2JqOwotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1Jlc291cmNlfQot
ICovCi1mdW5jdGlvbiBXZWJHTEJvdW5kUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKLXsKLSAgICBS
ZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOwotICAgIHRoaXMuX3N0YXRlID0ge307
Ci19Ci0KLVdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICog
QG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKLSAgICAgKiBAcGFyYW0ge0Nh
Y2hlfSBjYWNoZQotICAgICAqLwotICAgIF9wb3B1bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlv
bihkYXRhLCBjYWNoZSkKLSAgICB7Ci0gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlOwot
ICAgICAgICBkYXRhLnN0YXRlID0ge307Ci0gICAgICAgIE9iamVjdC5rZXlzKHN0YXRlKS5mb3JF
YWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgewotICAgICAgICAgICAgZGF0YS5zdGF0ZVtwYXJhbWV0
ZXJdID0gUmVzb3VyY2UudG9SZXBsYXlhYmxlKHN0YXRlW3BhcmFtZXRlcl0sIGNhY2hlKTsKLSAg
ICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBkYXRhCi0gICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAgICAgKi8K
LSAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCi0gICAgewotICAgICAg
ICB2YXIgc3RhdGUgPSB7fTsKLSAgICAgICAgT2JqZWN0LmtleXMoZGF0YS5zdGF0ZSkuZm9yRWFj
aChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKLSAgICAgICAgICAgIHN0YXRlW3BhcmFtZXRlcl0gPSBS
ZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KGRhdGEuc3RhdGVbcGFyYW1ldGVyXSwgY2FjaGUpOwot
ICAgICAgICB9KTsKLSAgICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTsKLQotICAgICAgICB2YXIg
Z2wgPSB0aGlzLl9yZXBsYXlDb250ZXh0UmVzb3VyY2UoZGF0YSwgY2FjaGUpLndyYXBwZWRPYmpl
Y3QoKTsKLQotICAgICAgICB2YXIgYmluZGluZ3NEYXRhID0gewotICAgICAgICAgICAgVEVYVFVS
RV8yRDogWyJiaW5kVGV4dHVyZSIsICJURVhUVVJFX0JJTkRJTkdfMkQiXSwKLSAgICAgICAgICAg
IFRFWFRVUkVfQ1VCRV9NQVA6IFsiYmluZFRleHR1cmUiLCAiVEVYVFVSRV9CSU5ESU5HX0NVQkVf
TUFQIl0sCi0gICAgICAgICAgICBBUlJBWV9CVUZGRVI6IFsiYmluZEJ1ZmZlciIsICJBUlJBWV9C
VUZGRVJfQklORElORyJdLAotICAgICAgICAgICAgRUxFTUVOVF9BUlJBWV9CVUZGRVI6IFsiYmlu
ZEJ1ZmZlciIsICJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HIl0sCi0gICAgICAgICAgICBG
UkFNRUJVRkZFUjogWyJiaW5kRnJhbWVidWZmZXIiLCAiRlJBTUVCVUZGRVJfQklORElORyJdLAot
ICAgICAgICAgICAgUkVOREVSQlVGRkVSOiBbImJpbmRSZW5kZXJidWZmZXIiLCAiUkVOREVSQlVG
RkVSX0JJTkRJTkciXQotICAgICAgICB9OwotICAgICAgICB2YXIgb3JpZ2luYWxCaW5kaW5ncyA9
IHt9OwotICAgICAgICBPYmplY3Qua2V5cyhiaW5kaW5nc0RhdGEpLmZvckVhY2goZnVuY3Rpb24o
YmluZGluZ1RhcmdldCkgewotICAgICAgICAgICAgdmFyIGJpbmRpbmdQYXJhbWV0ZXIgPSBiaW5k
aW5nc0RhdGFbYmluZGluZ1RhcmdldF1bMV07Ci0gICAgICAgICAgICBvcmlnaW5hbEJpbmRpbmdz
W2JpbmRpbmdUYXJnZXRdID0gZ2wuZ2V0UGFyYW1ldGVyKGdsW2JpbmRpbmdQYXJhbWV0ZXJdKTsK
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgUmVzb3VyY2UucHJvdG90eXBlLl9kb1JlcGxheUNhbGxz
LmNhbGwodGhpcywgZGF0YSwgY2FjaGUpOwotCi0gICAgICAgIE9iamVjdC5rZXlzKGJpbmRpbmdz
RGF0YSkuZm9yRWFjaChmdW5jdGlvbihiaW5kaW5nVGFyZ2V0KSB7Ci0gICAgICAgICAgICB2YXIg
YmluZE1ldGhvZE5hbWUgPSBiaW5kaW5nc0RhdGFbYmluZGluZ1RhcmdldF1bMF07Ci0gICAgICAg
ICAgICBnbFtiaW5kTWV0aG9kTmFtZV0uY2FsbChnbCwgZ2xbYmluZGluZ1RhcmdldF0sIG9yaWdp
bmFsQmluZGluZ3NbYmluZGluZ1RhcmdldF0pOwotICAgICAgICB9KTsKLSAgICB9LAotCi0gICAg
X3JlcGxheUNvbnRleHRSZXNvdXJjZTogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCi0gICAgewotICAg
ICAgICB2YXIgY2FsbHMgPSBkYXRhLmNhbGxzOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9
IGNhbGxzLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgdmFyIHJlc291cmNlID0g
UmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShjYWxsc1tpXS5yZXNvdXJjZSgpLCBjYWNoZSk7Ci0g
ICAgICAgICAgICB2YXIgY29udGV4dFJlc291cmNlID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVz
b3VyY2UuZm9yT2JqZWN0KHJlc291cmNlKTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0UmVzb3Vy
Y2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRSZXNvdXJjZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtu
dW1iZXJ9IHRhcmdldAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiaW5kTWV0aG9kTmFtZQotICAg
ICAqLwotICAgIHB1c2hCaW5kaW5nOiBmdW5jdGlvbih0YXJnZXQsIGJpbmRNZXRob2ROYW1lKQot
ICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3N0YXRlLkJJTkRJTkcgIT09IHRhcmdldCkgewotICAg
ICAgICAgICAgdGhpcy5fc3RhdGUuQklORElORyA9IHRhcmdldDsKLSAgICAgICAgICAgIHRoaXMu
cHVzaENhbGwobmV3IENhbGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuZm9yT2JqZWN0
KHRoaXMpLCBiaW5kTWV0aG9kTmFtZSwgW3RhcmdldCwgdGhpc10pKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBSZXNvdXJj
ZS5wcm90b3R5cGU7Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViR0xC
b3VuZFJlc291cmNlfQotICovCi1mdW5jdGlvbiBXZWJHTFRleHR1cmVSZXNvdXJjZSh3cmFwcGVk
T2JqZWN0KQotewotICAgIFdlYkdMQm91bmRSZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmpl
Y3QpOwotfQotCi1XZWJHTFRleHR1cmVSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0g
ICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKLSAgICAgKiBAcGFy
YW0ge0NhY2hlfSBjYWNoZQotICAgICAqLwotICAgIF9kb1JlcGxheUNhbGxzOiBmdW5jdGlvbihk
YXRhLCBjYWNoZSkKLSAgICB7Ci0gICAgICAgIHZhciBnbCA9IHRoaXMuX3JlcGxheUNvbnRleHRS
ZXNvdXJjZShkYXRhLCBjYWNoZSkud3JhcHBlZE9iamVjdCgpOwotCi0gICAgICAgIHZhciBzdGF0
ZSA9IHt9OwotICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5QaXhlbFN0b3Jl
UGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgewotICAgICAgICAgICAgc3Rh
dGVbcGFyYW1ldGVyXSA9IGdsLmdldFBhcmFtZXRlcihnbFtwYXJhbWV0ZXJdKTsKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5fZG9SZXBsYXlDYWxs
cy5jYWxsKHRoaXMsIGRhdGEsIGNhY2hlKTsKLQotICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRl
cikgewotICAgICAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2xbcGFyYW1ldGVyXSwgc3RhdGVbcGFy
YW1ldGVyXSk7Ci0gICAgICAgIH0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJp
ZGUKLSAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKLSAgICAgKi8KLSAgICBwdXNoQ2FsbDogZnVu
Y3Rpb24oY2FsbCkKLSAgICB7Ci0gICAgICAgIHZhciBnbCA9IGNhbGwucmVzb3VyY2UoKS53cmFw
cGVkT2JqZWN0KCk7Ci0gICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlBpeGVs
U3RvcmVQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7Ci0gICAgICAgICAg
ICB2YXIgdmFsdWUgPSBnbC5nZXRQYXJhbWV0ZXIoZ2xbcGFyYW1ldGVyXSk7Ci0gICAgICAgICAg
ICBpZiAodGhpcy5fc3RhdGVbcGFyYW1ldGVyXSAhPT0gdmFsdWUpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLl9zdGF0ZVtwYXJhbWV0ZXJdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgdmFyIHBp
eGVsU3RvcmVDYWxsID0gbmV3IENhbGwoZ2wsICJwaXhlbFN0b3JlaSIsIFtnbFtwYXJhbWV0ZXJd
LCB2YWx1ZV0pOwotICAgICAgICAgICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUu
cHVzaENhbGwuY2FsbCh0aGlzLCBwaXhlbFN0b3JlQ2FsbCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0sIHRoaXMpOwotCi0gICAgICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNhbGxz
IHRoYXQgbm8gbG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgotICAgICAg
ICAvLyBGSVhNRTogb3B0aW1pemUgbWVtb3J5IHVzYWdlOiBtYXliZSBpdCdzIG1vcmUgZWZmaWNp
ZW50IHRvIHN0b3JlIG9uZSB0ZXhJbWFnZTJEIGNhbGwgaW5zdGVhZCBvZiBtYW55IHRleFN1Yklt
YWdlMkQuCi0gICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwuY2Fs
bCh0aGlzLCBjYWxsKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYWxsfSBj
YWxsCi0gICAgICovCi0gICAgcHVzaENhbGxfdGV4UGFyYW1ldGVyZjogZnVuY3Rpb24oY2FsbCkK
LSAgICB7Ci0gICAgICAgIHZhciBhcmdzID0gY2FsbC5hcmdzKCk7Ci0gICAgICAgIHZhciBwbmFt
ZSA9IGFyZ3NbMV07Ci0gICAgICAgIHZhciBwYXJhbSA9IGFyZ3NbMl07Ci0gICAgICAgIGlmICh0
aGlzLl9zdGF0ZVtwbmFtZV0gIT09IHBhcmFtKSB7Ci0gICAgICAgICAgICB0aGlzLl9zdGF0ZVtw
bmFtZV0gPSBwYXJhbTsKLSAgICAgICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUu
cHVzaENhbGwuY2FsbCh0aGlzLCBjYWxsKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBjb3B5VGV4SW1hZ2UyRCBhbmQgY29weVRleFN1YkltYWdlMkQgZGVmaW5lIGEgdGV4
dHVyZSBpbWFnZSB3aXRoIHBpeGVscyBmcm9tIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLgotICAg
ICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAotICAgICAqLwotICAgIHB1c2hDYWxsX2NvcHlUZXhJbWFn
ZTJEOiBmdW5jdGlvbihjYWxsKQotICAgIHsKLSAgICAgICAgdmFyIGdsUmVzb3VyY2UgPSBjYWxs
LnJlc291cmNlKCk7Ci0gICAgICAgIHZhciBnbCA9IGdsUmVzb3VyY2Uud3JhcHBlZE9iamVjdCgp
OwotICAgICAgICB2YXIgZnJhbWVidWZmZXJSZXNvdXJjZSA9IGdsUmVzb3VyY2UuY3VycmVudEJp
bmRpbmcoZ2wuRlJBTUVCVUZGRVIpOwotICAgICAgICBpZiAoZnJhbWVidWZmZXJSZXNvdXJjZSkK
LSAgICAgICAgICAgIHRoaXMucHVzaENhbGwobmV3IENhbGwoZ2xSZXNvdXJjZSwgImJpbmRGcmFt
ZWJ1ZmZlciIsIFtnbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXJSZXNvdXJjZV0pKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY29uc29sZS5lcnJvcigiQVNTRVJUX05PVF9SRUFDSEVEOiBO
byBGUkFNRUJVRkZFUiBib3VuZCB3aGlsZSBjYWxsaW5nIGdsLiIgKyBjYWxsLmZ1bmN0aW9uTmFt
ZSgpKTsKLSAgICAgICAgdGhpcy5wdXNoQ2FsbChjYWxsKTsKLSAgICB9Ci19Ci0KLVdlYkdMVGV4
dHVyZVJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbF90ZXhQYXJhbWV0ZXJpID0gV2ViR0xUZXh0
dXJlUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsX3RleFBhcmFtZXRlcmY7Ci1XZWJHTFRleHR1
cmVSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGxfY29weVRleFN1YkltYWdlMkQgPSBXZWJHTFRl
eHR1cmVSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGxfY29weVRleEltYWdlMkQ7Ci0KLVdlYkdM
VGV4dHVyZVJlc291cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJHTEJvdW5kUmVzb3VyY2Uu
cHJvdG90eXBlOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1Jlc291cmNl
fQotICovCi1mdW5jdGlvbiBXZWJHTFByb2dyYW1SZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQotewot
ICAgIFJlc291cmNlLmNhbGwodGhpcywgd3JhcHBlZE9iamVjdCk7Ci19Ci0KLVdlYkdMUHJvZ3Jh
bVJlc291cmNlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAg
KiBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCi0gICAg
ICovCi0gICAgX3BvcHVsYXRlUmVwbGF5YWJsZURhdGE6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQot
ICAgIHsKLSAgICAgICAgdmFyIGdsUmVzb3VyY2UgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNv
dXJjZS5mb3JPYmplY3QodGhpcyk7Ci0gICAgICAgIHZhciBnbCA9IGdsUmVzb3VyY2Uud3JhcHBl
ZE9iamVjdCgpOwotICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMud3JhcHBlZE9iamVjdCgpOwot
Ci0gICAgICAgIHZhciBvcmlnaW5hbEVycm9ycyA9IGdsUmVzb3VyY2UuZ2V0QWxsRXJyb3JzKCk7
Ci0KLSAgICAgICAgdmFyIHVuaWZvcm1zID0gW107Ci0gICAgICAgIHZhciB1bmlmb3Jtc0NvdW50
ID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfVU5JRk9STVMpOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1zQ291bnQ7ICsraSkgewotICAgICAg
ICAgICAgdmFyIGFjdGl2ZUluZm8gPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpOwot
ICAgICAgICAgICAgaWYgKCFhY3RpdmVJbmZvKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgdmFyIHVuaWZvcm1Mb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLCBhY3RpdmVJbmZvLm5hbWUpOwotICAgICAgICAgICAgaWYgKCF1bmlmb3JtTG9jYXRp
b24pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSBn
bC5nZXRVbmlmb3JtKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbik7Ci0gICAgICAgICAgICB1bmlm
b3Jtcy5wdXNoKHsKLSAgICAgICAgICAgICAgICBuYW1lOiBhY3RpdmVJbmZvLm5hbWUsCi0gICAg
ICAgICAgICAgICAgdHlwZTogYWN0aXZlSW5mby50eXBlLAotICAgICAgICAgICAgICAgIHZhbHVl
OiB2YWx1ZQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YS51bmlmb3Jt
cyA9IHVuaWZvcm1zOwotCi0gICAgICAgIGdsUmVzb3VyY2UucmVzdG9yZUVycm9ycyhvcmlnaW5h
bEVycm9ycyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBkYXRhCi0gICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAgICAgKi8K
LSAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCi0gICAgewotICAgICAg
ICBSZXNvdXJjZS5wcm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBjYWNo
ZSk7Ci0gICAgICAgIHZhciBnbCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9i
amVjdCh0aGlzKS53cmFwcGVkT2JqZWN0KCk7Ci0gICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy53
cmFwcGVkT2JqZWN0KCk7Ci0KLSAgICAgICAgdmFyIG9yaWdpbmFsUHJvZ3JhbSA9IGdsLmdldFBh
cmFtZXRlcihnbC5DVVJSRU5UX1BST0dSQU0pOwotICAgICAgICB2YXIgY3VycmVudFByb2dyYW0g
PSBvcmlnaW5hbFByb2dyYW07Ci0gICAgICAgIAotICAgICAgICBkYXRhLnVuaWZvcm1zLmZvckVh
Y2goZnVuY3Rpb24odW5pZm9ybSkgewotICAgICAgICAgICAgdmFyIHVuaWZvcm1Mb2NhdGlvbiA9
IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3JtLm5hbWUpOwotICAgICAgICAg
ICAgaWYgKCF1bmlmb3JtTG9jYXRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgaWYgKGN1cnJlbnRQcm9ncmFtICE9PSBwcm9ncmFtKSB7Ci0gICAgICAgICAgICAgICAg
Y3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwotICAgICAgICAgICAgICAgIGdsLnVzZVByb2dyYW0o
cHJvZ3JhbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgbWV0aG9kTmFtZSA9IHRo
aXMuX3VuaWZvcm1NZXRob2ROYW1lQnlUeXBlKGdsLCB1bmlmb3JtLnR5cGUpOwotICAgICAgICAg
ICAgaWYgKG1ldGhvZE5hbWUuaW5kZXhPZigiTWF0cml4IikgPT09IC0xKQotICAgICAgICAgICAg
ICAgIGdsW21ldGhvZE5hbWVdLmNhbGwoZ2wsIHVuaWZvcm1Mb2NhdGlvbiwgdW5pZm9ybS52YWx1
ZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ2xbbWV0aG9kTmFtZV0uY2Fs
bChnbCwgdW5pZm9ybUxvY2F0aW9uLCBmYWxzZSwgdW5pZm9ybS52YWx1ZSk7Ci0gICAgICAgIH0u
YmluZCh0aGlzKSk7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRQcm9ncmFtICE9PSBvcmlnaW5hbFBy
b2dyYW0pCi0gICAgICAgICAgICBnbC51c2VQcm9ncmFtKG9yaWdpbmFsUHJvZ3JhbSk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbAot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAg
ICAqLwotICAgIF91bmlmb3JtTWV0aG9kTmFtZUJ5VHlwZTogZnVuY3Rpb24oZ2wsIHR5cGUpCi0g
ICAgewotICAgICAgICB2YXIgdW5pZm9ybU1ldGhvZE5hbWVzID0gV2ViR0xQcm9ncmFtUmVzb3Vy
Y2UuX3VuaWZvcm1NZXRob2ROYW1lczsKLSAgICAgICAgaWYgKCF1bmlmb3JtTWV0aG9kTmFtZXMp
IHsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lcyA9IHt9OwotICAgICAgICAgICAgdW5p
Zm9ybU1ldGhvZE5hbWVzW2dsLkZMT0FUXSA9ICJ1bmlmb3JtMWYiOwotICAgICAgICAgICAgdW5p
Zm9ybU1ldGhvZE5hbWVzW2dsLkZMT0FUX1ZFQzJdID0gInVuaWZvcm0yZnYiOwotICAgICAgICAg
ICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLkZMT0FUX1ZFQzNdID0gInVuaWZvcm0zZnYiOwotICAg
ICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLkZMT0FUX1ZFQzRdID0gInVuaWZvcm00ZnYi
OwotICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLklOVF0gPSAidW5pZm9ybTFpIjsK
LSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5CT09MXSA9ICJ1bmlmb3JtMWkiOwot
ICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLlNBTVBMRVJfMkRdID0gInVuaWZvcm0x
aSI7Ci0gICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuU0FNUExFUl9DVUJFXSA9ICJ1
bmlmb3JtMWkiOwotICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLklOVF9WRUMyXSA9
ICJ1bmlmb3JtMml2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5CT09MX1ZF
QzJdID0gInVuaWZvcm0yaXYiOwotICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLklO
VF9WRUMzXSA9ICJ1bmlmb3JtM2l2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tn
bC5CT09MX1ZFQzNdID0gInVuaWZvcm0zaXYiOwotICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5h
bWVzW2dsLklOVF9WRUM0XSA9ICJ1bmlmb3JtNGl2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRo
b2ROYW1lc1tnbC5CT09MX1ZFQzRdID0gInVuaWZvcm00aXYiOwotICAgICAgICAgICAgdW5pZm9y
bU1ldGhvZE5hbWVzW2dsLkZMT0FUX01BVDJdID0gInVuaWZvcm1NYXRyaXgyZnYiOwotICAgICAg
ICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLkZMT0FUX01BVDNdID0gInVuaWZvcm1NYXRyaXgz
ZnYiOwotICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLkZMT0FUX01BVDRdID0gInVu
aWZvcm1NYXRyaXg0ZnYiOwotICAgICAgICAgICAgV2ViR0xQcm9ncmFtUmVzb3VyY2UuX3VuaWZv
cm1NZXRob2ROYW1lcyA9IHVuaWZvcm1NZXRob2ROYW1lczsKLSAgICAgICAgfQotICAgICAgICBj
b25zb2xlLmFzc2VydCh1bmlmb3JtTWV0aG9kTmFtZXNbdHlwZV0sICJVbmtub3duIHVuaWZvcm0g
dHlwZSAiICsgdHlwZSk7Ci0gICAgICAgIHJldHVybiB1bmlmb3JtTWV0aG9kTmFtZXNbdHlwZV07
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7Q2Fs
bH0gY2FsbAotICAgICAqLwotICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxsKQotICAgIHsKLSAg
ICAgICAgLy8gRklYTUU6IHJlbW92ZSBhbnkgb2xkZXIgY2FsbHMgdGhhdCBubyBsb25nZXIgY29u
dHJpYnV0ZSB0byB0aGUgcmVzb3VyY2Ugc3RhdGUuCi0gICAgICAgIC8vIEZJWE1FOiBoYW5kbGUg
bXVsdGlwbGUgYXR0YWNoU2hhZGVyICYmIGRldGFjaFNoYWRlci4KLSAgICAgICAgUmVzb3VyY2Uu
cHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgY2FsbCk7Ci0gICAgfQotfQotCi1XZWJHTFBy
b2dyYW1SZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gUmVzb3VyY2UucHJvdG90eXBlOwot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1Jlc291cmNlfQotICovCi1mdW5j
dGlvbiBXZWJHTFNoYWRlclJlc291cmNlKHdyYXBwZWRPYmplY3QpCi17Ci0gICAgUmVzb3VyY2Uu
Y2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsKLX0KLQotV2ViR0xTaGFkZXJSZXNvdXJjZS5wcm90
b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtDYWxs
fSBjYWxsCi0gICAgICovCi0gICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAg
ICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250
cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KLSAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBt
dWx0aXBsZSBzaGFkZXJTb3VyY2UgY2FsbHMuCi0gICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5w
dXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOwotICAgIH0KLX0KLQotV2ViR0xTaGFkZXJSZXNvdXJj
ZS5wcm90b3R5cGUuX19wcm90b19fID0gUmVzb3VyY2UucHJvdG90eXBlOwotCi0vKioKLSAqIEBj
b25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkdMQm91bmRSZXNvdXJjZX0KLSAqLwotZnVuY3Rp
b24gV2ViR0xCdWZmZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQotewotICAgIFdlYkdMQm91bmRS
ZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOwotfQotCi1XZWJHTEJ1ZmZlclJlc291
cmNlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFy
YW0ge0NhbGx9IGNhbGwKLSAgICAgKi8KLSAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKLSAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNhbGxzIHRoYXQgbm8gbG9u
Z2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgotICAgICAgICAvLyBGSVhNRTog
T3B0aW1pemUgbWVtb3J5IGZvciBidWZmZXJTdWJEYXRhLgotICAgICAgICBXZWJHTEJvdW5kUmVz
b3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgY2FsbCk7Ci0gICAgfQotfQotCi1X
ZWJHTEJ1ZmZlclJlc291cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJHTEJvdW5kUmVzb3Vy
Y2UucHJvdG90eXBlOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkdM
Qm91bmRSZXNvdXJjZX0KLSAqLwotZnVuY3Rpb24gV2ViR0xGcmFtZWJ1ZmZlclJlc291cmNlKHdy
YXBwZWRPYmplY3QpCi17Ci0gICAgV2ViR0xCb3VuZFJlc291cmNlLmNhbGwodGhpcywgd3JhcHBl
ZE9iamVjdCk7Ci19Ci0KLVdlYkdMRnJhbWVidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0g
ICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCi0gICAg
ICovCi0gICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAgICAgICAvLyBGSVhN
RTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRvIHRo
ZSByZXNvdXJjZSBzdGF0ZS4KLSAgICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5w
dXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOwotICAgIH0KLX0KLQotV2ViR0xGcmFtZWJ1ZmZlclJl
c291cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBl
OwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkdMQm91bmRSZXNvdXJj
ZX0KLSAqLwotZnVuY3Rpb24gV2ViR0xSZW5kZXJidWZmZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0
KQotewotICAgIFdlYkdMQm91bmRSZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOwot
fQotCi1XZWJHTFJlbmRlcmJ1ZmZlclJlc291cmNlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAg
ICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKLSAgICAgKi8KLSAgICBw
dXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiByZW1vdmUg
YW55IG9sZGVyIGNhbGxzIHRoYXQgbm8gbG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNl
IHN0YXRlLgotICAgICAgICBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNh
bGwodGhpcywgY2FsbCk7Ci0gICAgfQotfQotCi1XZWJHTFJlbmRlcmJ1ZmZlclJlc291cmNlLnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlOwotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1Jlc291cmNlfQotICogQHBhcmFtIHtXZWJH
TFJlbmRlcmluZ0NvbnRleHR9IGdsQ29udGV4dAotICogQHBhcmFtIHtGdW5jdGlvbn0gcmVwbGF5
Q29udGV4dENhbGxiYWNrCi0gKi8KLWZ1bmN0aW9uIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291
cmNlKGdsQ29udGV4dCwgcmVwbGF5Q29udGV4dENhbGxiYWNrKQotewotICAgIFJlc291cmNlLmNh
bGwodGhpcywgZ2xDb250ZXh0KTsKLSAgICB0aGlzLl9yZXBsYXlDb250ZXh0Q2FsbGJhY2sgPSBy
ZXBsYXlDb250ZXh0Q2FsbGJhY2s7Ci0gICAgLyoqIEB0eXBlIHtPYmplY3QuPG51bWJlciwgYm9v
bGVhbj59ICovCi0gICAgdGhpcy5fY3VzdG9tRXJyb3JzID0gbnVsbDsKLX0KLQotLyoqCi0gKiBA
Y29uc3QKLSAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn0KLSAqLwotV2ViR0xSZW5kZXJpbmdDb250
ZXh0UmVzb3VyY2UuR0xDYXBhYmlsaXRpZXMgPSBbCi0gICAgIkJMRU5EIiwKLSAgICAiQ1VMTF9G
QUNFIiwKLSAgICAiREVQVEhfVEVTVCIsCi0gICAgIkRJVEhFUiIsCi0gICAgIlBPTFlHT05fT0ZG
U0VUX0ZJTEwiLAotICAgICJTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UiLAotICAgICJTQU1QTEVf
Q09WRVJBR0UiLAotICAgICJTQ0lTU09SX1RFU1QiLAotICAgICJTVEVOQ0lMX1RFU1QiCi1dOwot
Ci0vKioKLSAqIEBjb25zdAotICogQHR5cGUge0FycmF5LjxzdHJpbmc+fQotICovCi1XZWJHTFJl
bmRlcmluZ0NvbnRleHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVycyA9IFsKLSAgICAiUEFD
S19BTElHTk1FTlQiLAotICAgICJVTlBBQ0tfQUxJR05NRU5UIiwKLSAgICAiVU5QQUNLX0NPTE9S
U1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIsCi0gICAgIlVOUEFDS19GTElQX1lfV0VCR0wiLAotICAg
ICJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiCi1dOwotCi0vKioKLSAqIEBjb25zdAot
ICogQHR5cGUge0FycmF5LjxzdHJpbmc+fQotICovCi1XZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNv
dXJjZS5TdGF0ZVBhcmFtZXRlcnMgPSBbCi0gICAgIkFDVElWRV9URVhUVVJFIiwKLSAgICAiQVJS
QVlfQlVGRkVSX0JJTkRJTkciLAotICAgICJCTEVORF9DT0xPUiIsCi0gICAgIkJMRU5EX0RTVF9B
TFBIQSIsCi0gICAgIkJMRU5EX0RTVF9SR0IiLAotICAgICJCTEVORF9FUVVBVElPTl9BTFBIQSIs
Ci0gICAgIkJMRU5EX0VRVUFUSU9OX1JHQiIsCi0gICAgIkJMRU5EX1NSQ19BTFBIQSIsCi0gICAg
IkJMRU5EX1NSQ19SR0IiLAotICAgICJDT0xPUl9DTEVBUl9WQUxVRSIsCi0gICAgIkNPTE9SX1dS
SVRFTUFTSyIsCi0gICAgIkNVTExfRkFDRV9NT0RFIiwKLSAgICAiQ1VSUkVOVF9QUk9HUkFNIiwK
LSAgICAiREVQVEhfQ0xFQVJfVkFMVUUiLAotICAgICJERVBUSF9GVU5DIiwKLSAgICAiREVQVEhf
UkFOR0UiLAotICAgICJERVBUSF9XUklURU1BU0siLAotICAgICJFTEVNRU5UX0FSUkFZX0JVRkZF
Ul9CSU5ESU5HIiwKLSAgICAiRlJBTUVCVUZGRVJfQklORElORyIsCi0gICAgIkZST05UX0ZBQ0Ui
LAotICAgICJHRU5FUkFURV9NSVBNQVBfSElOVCIsCi0gICAgIkxJTkVfV0lEVEgiLAotICAgICJQ
QUNLX0FMSUdOTUVOVCIsCi0gICAgIlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiIsCi0gICAgIlBPTFlH
T05fT0ZGU0VUX1VOSVRTIiwKLSAgICAiUkVOREVSQlVGRkVSX0JJTkRJTkciLAotICAgICJTQU1Q
TEVfQ09WRVJBR0VfSU5WRVJUIiwKLSAgICAiU0FNUExFX0NPVkVSQUdFX1ZBTFVFIiwKLSAgICAi
U0NJU1NPUl9CT1giLAotICAgICJTVEVOQ0lMX0JBQ0tfRkFJTCIsCi0gICAgIlNURU5DSUxfQkFD
S19GVU5DIiwKLSAgICAiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCIsCi0gICAgIlNURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1MiLAotICAgICJTVEVOQ0lMX0JBQ0tfUkVGIiwKLSAgICAi
U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0siLAotICAgICJTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLIiwK
LSAgICAiU1RFTkNJTF9DTEVBUl9WQUxVRSIsCi0gICAgIlNURU5DSUxfRkFJTCIsCi0gICAgIlNU
RU5DSUxfRlVOQyIsCi0gICAgIlNURU5DSUxfUEFTU19ERVBUSF9GQUlMIiwKLSAgICAiU1RFTkNJ
TF9QQVNTX0RFUFRIX1BBU1MiLAotICAgICJTVEVOQ0lMX1JFRiIsCi0gICAgIlNURU5DSUxfVkFM
VUVfTUFTSyIsCi0gICAgIlNURU5DSUxfV1JJVEVNQVNLIiwKLSAgICAiVU5QQUNLX0FMSUdOTUVO
VCIsCi0gICAgIlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiLAotICAgICJVTlBB
Q0tfRkxJUF9ZX1dFQkdMIiwKLSAgICAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIiwK
LSAgICAiVklFV1BPUlQiCi1dOwotCi0vKioKLSAqIEBwYXJhbSB7Kn0gb2JqCi0gKiBAcmV0dXJu
IHtXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZX0KLSAqLwotV2ViR0xSZW5kZXJpbmdDb250
ZXh0UmVzb3VyY2UuZm9yT2JqZWN0ID0gZnVuY3Rpb24ob2JqKQotewotICAgIHZhciByZXNvdXJj
ZSA9IFJlc291cmNlLmZvck9iamVjdChvYmopOwotICAgIGlmICghcmVzb3VyY2UgfHwgcmVzb3Vy
Y2UgaW5zdGFuY2VvZiBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZSkKLSAgICAgICAgcmV0
dXJuIHJlc291cmNlOwotICAgIHZhciBjYWxsID0gcmVzb3VyY2UuY2FsbHMoKTsKLSAgICBpZiAo
IWNhbGwgfHwgIWNhbGwubGVuZ3RoKQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICByZXNvdXJj
ZSA9IGNhbGxbMF0ucmVzb3VyY2UoKTsKLSAgICByZXR1cm4gKHJlc291cmNlIGluc3RhbmNlb2Yg
V2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UpID8gcmVzb3VyY2UgOiBudWxsOwotfQotCi1X
ZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59Ci0gICAgICovCi0gICAgZ2V0QWxsRXJyb3JzOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZXJyb3JzID0gW107Ci0gICAgICAgIHZhciBn
bCA9IHRoaXMud3JhcHBlZE9iamVjdCgpOwotICAgICAgICBpZiAoZ2wpIHsKLSAgICAgICAgICAg
IHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gZ2wuZ2V0RXJyb3Io
KTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPT09IGdsLk5PX0VSUk9SKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRXJyb3IoZXJyb3Ip
OwotICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBpZiAodGhpcy5fY3VzdG9tRXJyb3JzKSB7Ci0gICAgICAgICAgICBm
b3IgKHZhciBrZXkgaW4gdGhpcy5fY3VzdG9tRXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGVycm9yID0gTnVtYmVyKGtleSk7Ci0gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyb3Ip
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9yczsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gZXJyb3JzOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBlcnJvcnMKLSAgICAgKi8KLSAgICByZXN0b3Jl
RXJyb3JzOiBmdW5jdGlvbihlcnJvcnMpCi0gICAgewotICAgICAgICB2YXIgZ2wgPSB0aGlzLndy
YXBwZWRPYmplY3QoKTsKLSAgICAgICAgaWYgKGdsKSB7Ci0gICAgICAgICAgICB2YXIgd2FzRXJy
b3IgPSBmYWxzZTsKLSAgICAgICAgICAgIHdoaWxlIChnbC5nZXRFcnJvcigpICE9PSBnbC5OT19F
UlJPUikKLSAgICAgICAgICAgICAgICB3YXNFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICBjb25z
b2xlLmFzc2VydCghd2FzRXJyb3IsICJFcnJvcihzKSB3aGlsZSBjYXB0dXJpbmcgY3VycmVudCBX
ZWJHTCBzdGF0ZS4iKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWVycm9ycy5sZW5ndGgpCi0g
ICAgICAgICAgICBkZWxldGUgdGhpcy5fY3VzdG9tRXJyb3JzOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIHRoaXMuX2N1c3RvbUVycm9ycyA9IHt9OwotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDAsIG4gPSBlcnJvcnMubGVuZ3RoOyBpIDwgbjsgKytpKQotICAgICAgICAgICAgICAgIHRo
aXMuX2N1c3RvbUVycm9yc1tlcnJvcnNbaV1dID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZXJyb3IKLSAgICAgKi8KLSAgICBjbGVh
ckVycm9yOiBmdW5jdGlvbihlcnJvcikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jdXN0b21F
cnJvcnMpCi0gICAgICAgICAgICBkZWxldGUgdGhpcy5fY3VzdG9tRXJyb3JzW2Vycm9yXTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIG5l
eHRFcnJvcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2N1c3RvbUVycm9y
cykgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuX2N1c3RvbUVycm9ycykgewot
ICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IE51bWJlcihrZXkpOwotICAgICAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9jdXN0b21FcnJvcnNbZXJyb3JdOwotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkZWxldGUgdGhpcy5f
Y3VzdG9tRXJyb3JzOwotICAgICAgICB2YXIgZ2wgPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKLSAg
ICAgICAgcmV0dXJuIGdsID8gZ2wuTk9fRVJST1IgOiAwOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAqIEBwYXJh
bSB7Q2FjaGV9IGNhY2hlCi0gICAgICovCi0gICAgX3BvcHVsYXRlUmVwbGF5YWJsZURhdGE6IGZ1
bmN0aW9uKGRhdGEsIGNhY2hlKQotICAgIHsKLSAgICAgICAgdmFyIGdsID0gdGhpcy53cmFwcGVk
T2JqZWN0KCk7Ci0gICAgICAgIGRhdGEucmVwbGF5Q29udGV4dENhbGxiYWNrID0gdGhpcy5fcmVw
bGF5Q29udGV4dENhbGxiYWNrOwotCi0gICAgICAgIHZhciBvcmlnaW5hbEVycm9ycyA9IHRoaXMu
Z2V0QWxsRXJyb3JzKCk7Ci0KLSAgICAgICAgLy8gVGFrZSBhIGZ1bGwgR0wgc3RhdGUgc25hcHNo
b3QuCi0gICAgICAgIHZhciBnbFN0YXRlID0ge307Ci0gICAgICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dFJlc291cmNlLkdMQ2FwYWJpbGl0aWVzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7
Ci0gICAgICAgICAgICBnbFN0YXRlW3BhcmFtZXRlcl0gPSBnbC5pc0VuYWJsZWQoZ2xbcGFyYW1l
dGVyXSk7Ci0gICAgICAgIH0pOwotICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJj
ZS5TdGF0ZVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKLSAgICAgICAg
ICAgIGdsU3RhdGVbcGFyYW1ldGVyXSA9IFJlc291cmNlLnRvUmVwbGF5YWJsZShnbC5nZXRQYXJh
bWV0ZXIoZ2xbcGFyYW1ldGVyXSksIGNhY2hlKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8g
VkVSVEVYX0FUVFJJQl9BUlJBWVMKLSAgICAgICAgdmFyIG1heFZlcnRleEF0dHJpYnMgPSBnbC5n
ZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTsKLSAgICAgICAgdmFyIHZlcnRleEF0
dHJpYlBhcmFtZXRlcnMgPSBbIlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkciLCAi
VkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEIiwgIlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSIs
ICJWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSIsICJWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUi
LCAiVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEIiwgIkNVUlJFTlRfVkVSVEVYX0FUVFJJ
QiJdOwotICAgICAgICB2YXIgdmVydGV4QXR0cmliU3RhdGVzID0gW107Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbWF4VmVydGV4QXR0cmliczsgKytpKSB7Ci0gICAgICAgICAgICB2YXIg
c3RhdGUgPSB7fTsKLSAgICAgICAgICAgIHZlcnRleEF0dHJpYlBhcmFtZXRlcnMuZm9yRWFjaChm
dW5jdGlvbihhdHRyaWJQYXJhbWV0ZXIpIHsKLSAgICAgICAgICAgICAgICBzdGF0ZVthdHRyaWJQ
YXJhbWV0ZXJdID0gUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFZlcnRleEF0dHJpYihpLCBn
bFthdHRyaWJQYXJhbWV0ZXJdKSwgY2FjaGUpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgPSBnbC5nZXRWZXJ0ZXhBdHRyaWJP
ZmZzZXQoaSwgZ2wuVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSKTsKLSAgICAgICAgICAgIHZl
cnRleEF0dHJpYlN0YXRlcy5wdXNoKHN0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBnbFN0YXRl
LnZlcnRleEF0dHJpYlN0YXRlcyA9IHZlcnRleEF0dHJpYlN0YXRlczsKLQotICAgICAgICAvLyBU
RVhUVVJFUwotICAgICAgICB2YXIgY3VycmVudFRleHR1cmVCaW5kaW5nID0gZ2wuZ2V0UGFyYW1l
dGVyKGdsLkFDVElWRV9URVhUVVJFKTsKLSAgICAgICAgdmFyIG1heFRleHR1cmVJbWFnZVVuaXRz
ID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICAgICAg
dmFyIHRleHR1cmVCaW5kaW5ncyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1h
eFRleHR1cmVJbWFnZVVuaXRzOyArK2kpIHsKLSAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUo
Z2wuVEVYVFVSRTAgKyBpKTsKLSAgICAgICAgICAgIHZhciBzdGF0ZSA9IHsKLSAgICAgICAgICAg
ICAgICBURVhUVVJFXzJEOiBSZXNvdXJjZS50b1JlcGxheWFibGUoZ2wuZ2V0UGFyYW1ldGVyKGds
LlRFWFRVUkVfQklORElOR18yRCksIGNhY2hlKSwKLSAgICAgICAgICAgICAgICBURVhUVVJFX0NV
QkVfTUFQOiBSZXNvdXJjZS50b1JlcGxheWFibGUoZ2wuZ2V0UGFyYW1ldGVyKGdsLlRFWFRVUkVf
QklORElOR19DVUJFX01BUCksIGNhY2hlKQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHRl
eHR1cmVCaW5kaW5ncy5wdXNoKHN0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBnbFN0YXRlLnRl
eHR1cmVCaW5kaW5ncyA9IHRleHR1cmVCaW5kaW5nczsKLSAgICAgICAgZ2wuYWN0aXZlVGV4dHVy
ZShjdXJyZW50VGV4dHVyZUJpbmRpbmcpOwotCi0gICAgICAgIGRhdGEuZ2xTdGF0ZSA9IGdsU3Rh
dGU7Ci0KLSAgICAgICAgdGhpcy5yZXN0b3JlRXJyb3JzKG9yaWdpbmFsRXJyb3JzKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtPYmplY3R9IGRh
dGEKLSAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQotICAgICAqLwotICAgIF9kb1JlcGxheUNh
bGxzOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlcGxheUNv
bnRleHRDYWxsYmFjayA9IGRhdGEucmVwbGF5Q29udGV4dENhbGxiYWNrOwotICAgICAgICB0aGlz
Ll9jdXN0b21FcnJvcnMgPSBudWxsOwotCi0gICAgICAgIHZhciBnbCA9IFJlc291cmNlLndyYXBw
ZWRPYmplY3QodGhpcy5fcmVwbGF5Q29udGV4dENhbGxiYWNrKCkpOwotICAgICAgICB0aGlzLnNl
dFdyYXBwZWRPYmplY3QoZ2wpOwotCi0gICAgICAgIHZhciBnbFN0YXRlID0gZGF0YS5nbFN0YXRl
OwotICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIFJlcGxheWFibGVS
ZXNvdXJjZS5yZXBsYXkoZ2xTdGF0ZS5GUkFNRUJVRkZFUl9CSU5ESU5HLCBjYWNoZSkpOwotICAg
ICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgUmVwbGF5YWJsZVJlc291
cmNlLnJlcGxheShnbFN0YXRlLlJFTkRFUkJVRkZFUl9CSU5ESU5HLCBjYWNoZSkpOwotCi0gICAg
ICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHNlcnZlci1zaWRlIEdMIGNhcGFiaWxpdGllcy4KLSAg
ICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuR0xDYXBhYmlsaXRpZXMuZm9yRWFj
aChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBhcmFt
ZXRlciBpbiBnbFN0YXRlKTsKLSAgICAgICAgICAgIGlmIChnbFN0YXRlW3BhcmFtZXRlcl0pCi0g
ICAgICAgICAgICAgICAgZ2wuZW5hYmxlKGdsW3BhcmFtZXRlcl0pOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGdsLmRpc2FibGUoZ2xbcGFyYW1ldGVyXSk7Ci0gICAgICAgIH0p
OwotCi0gICAgICAgIGdsLmJsZW5kQ29sb3IoZ2xTdGF0ZS5CTEVORF9DT0xPUlswXSwgZ2xTdGF0
ZS5CTEVORF9DT0xPUlsxXSwgZ2xTdGF0ZS5CTEVORF9DT0xPUlsyXSwgZ2xTdGF0ZS5CTEVORF9D
T0xPUlszXSk7Ci0gICAgICAgIGdsLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShnbFN0YXRlLkJMRU5E
X0VRVUFUSU9OX1JHQiwgZ2xTdGF0ZS5CTEVORF9FUVVBVElPTl9BTFBIQSk7Ci0gICAgICAgIGds
LmJsZW5kRnVuY1NlcGFyYXRlKGdsU3RhdGUuQkxFTkRfU1JDX1JHQiwgZ2xTdGF0ZS5CTEVORF9E
U1RfUkdCLCBnbFN0YXRlLkJMRU5EX1NSQ19BTFBIQSwgZ2xTdGF0ZS5CTEVORF9EU1RfQUxQSEEp
OwotICAgICAgICBnbC5jbGVhckNvbG9yKGdsU3RhdGUuQ09MT1JfQ0xFQVJfVkFMVUVbMF0sIGds
U3RhdGUuQ09MT1JfQ0xFQVJfVkFMVUVbMV0sIGdsU3RhdGUuQ09MT1JfQ0xFQVJfVkFMVUVbMl0s
IGdsU3RhdGUuQ09MT1JfQ0xFQVJfVkFMVUVbM10pOwotICAgICAgICBnbC5jbGVhckRlcHRoKGds
U3RhdGUuREVQVEhfQ0xFQVJfVkFMVUUpOwotICAgICAgICBnbC5jbGVhclN0ZW5jaWwoZ2xTdGF0
ZS5TVEVOQ0lMX0NMRUFSX1ZBTFVFKTsKLSAgICAgICAgZ2wuY29sb3JNYXNrKGdsU3RhdGUuQ09M
T1JfV1JJVEVNQVNLWzBdLCBnbFN0YXRlLkNPTE9SX1dSSVRFTUFTS1sxXSwgZ2xTdGF0ZS5DT0xP
Ul9XUklURU1BU0tbMl0sIGdsU3RhdGUuQ09MT1JfV1JJVEVNQVNLWzNdKTsKLSAgICAgICAgZ2wu
Y3VsbEZhY2UoZ2xTdGF0ZS5DVUxMX0ZBQ0VfTU9ERSk7Ci0gICAgICAgIGdsLmRlcHRoRnVuYyhn
bFN0YXRlLkRFUFRIX0ZVTkMpOwotICAgICAgICBnbC5kZXB0aE1hc2soZ2xTdGF0ZS5ERVBUSF9X
UklURU1BU0spOwotICAgICAgICBnbC5kZXB0aFJhbmdlKGdsU3RhdGUuREVQVEhfUkFOR0VbMF0s
IGdsU3RhdGUuREVQVEhfUkFOR0VbMV0pOwotICAgICAgICBnbC5mcm9udEZhY2UoZ2xTdGF0ZS5G
Uk9OVF9GQUNFKTsKLSAgICAgICAgZ2wuaGludChnbC5HRU5FUkFURV9NSVBNQVBfSElOVCwgZ2xT
dGF0ZS5HRU5FUkFURV9NSVBNQVBfSElOVCk7Ci0gICAgICAgIGdsLmxpbmVXaWR0aChnbFN0YXRl
LkxJTkVfV0lEVEgpOwotCi0gICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlBp
eGVsU3RvcmVQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7Ci0gICAgICAg
ICAgICBnbC5waXhlbFN0b3JlaShnbFtwYXJhbWV0ZXJdLCBnbFN0YXRlW3BhcmFtZXRlcl0pOwot
ICAgICAgICB9KTsKLQotICAgICAgICBnbC5wb2x5Z29uT2Zmc2V0KGdsU3RhdGUuUE9MWUdPTl9P
RkZTRVRfRkFDVE9SLCBnbFN0YXRlLlBPTFlHT05fT0ZGU0VUX1VOSVRTKTsKLSAgICAgICAgZ2wu
c2FtcGxlQ292ZXJhZ2UoZ2xTdGF0ZS5TQU1QTEVfQ09WRVJBR0VfVkFMVUUsIGdsU3RhdGUuU0FN
UExFX0NPVkVSQUdFX0lOVkVSVCk7Ci0gICAgICAgIGdsLnN0ZW5jaWxGdW5jU2VwYXJhdGUoZ2wu
RlJPTlQsIGdsU3RhdGUuU1RFTkNJTF9GVU5DLCBnbFN0YXRlLlNURU5DSUxfUkVGLCBnbFN0YXRl
LlNURU5DSUxfVkFMVUVfTUFTSyk7Ci0gICAgICAgIGdsLnN0ZW5jaWxGdW5jU2VwYXJhdGUoZ2wu
QkFDSywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfRlVOQywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfUkVG
LCBnbFN0YXRlLlNURU5DSUxfQkFDS19WQUxVRV9NQVNLKTsKLSAgICAgICAgZ2wuc3RlbmNpbE9w
U2VwYXJhdGUoZ2wuRlJPTlQsIGdsU3RhdGUuU1RFTkNJTF9GQUlMLCBnbFN0YXRlLlNURU5DSUxf
UEFTU19ERVBUSF9GQUlMLCBnbFN0YXRlLlNURU5DSUxfUEFTU19ERVBUSF9QQVNTKTsKLSAgICAg
ICAgZ2wuc3RlbmNpbE9wU2VwYXJhdGUoZ2wuQkFDSywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfRkFJ
TCwgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMLCBnbFN0YXRlLlNURU5DSUxf
QkFDS19QQVNTX0RFUFRIX1BBU1MpOwotICAgICAgICBnbC5zdGVuY2lsTWFza1NlcGFyYXRlKGds
LkZST05ULCBnbFN0YXRlLlNURU5DSUxfV1JJVEVNQVNLKTsKLSAgICAgICAgZ2wuc3RlbmNpbE1h
c2tTZXBhcmF0ZShnbC5CQUNLLCBnbFN0YXRlLlNURU5DSUxfQkFDS19XUklURU1BU0spOwotCi0g
ICAgICAgIGdsLnNjaXNzb3IoZ2xTdGF0ZS5TQ0lTU09SX0JPWFswXSwgZ2xTdGF0ZS5TQ0lTU09S
X0JPWFsxXSwgZ2xTdGF0ZS5TQ0lTU09SX0JPWFsyXSwgZ2xTdGF0ZS5TQ0lTU09SX0JPWFszXSk7
Ci0gICAgICAgIGdsLnZpZXdwb3J0KGdsU3RhdGUuVklFV1BPUlRbMF0sIGdsU3RhdGUuVklFV1BP
UlRbMV0sIGdsU3RhdGUuVklFV1BPUlRbMl0sIGdsU3RhdGUuVklFV1BPUlRbM10pOwotCi0gICAg
ICAgIGdsLnVzZVByb2dyYW0oUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShnbFN0YXRlLkNVUlJF
TlRfUFJPR1JBTSwgY2FjaGUpKTsKLQotICAgICAgICAvLyBWRVJURVhfQVRUUklCX0FSUkFZUwot
ICAgICAgICB2YXIgbWF4VmVydGV4QXR0cmlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVS
VEVYX0FUVFJJQlMpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFZlcnRleEF0dHJp
YnM7ICsraSkgewotICAgICAgICAgICAgdmFyIHN0YXRlID0gZ2xTdGF0ZS52ZXJ0ZXhBdHRyaWJT
dGF0ZXNbaV0gfHwge307Ci0gICAgICAgICAgICBpZiAoc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJB
WV9FTkFCTEVEKQotICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheShpKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIp
Ci0gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliNGZ2KGksIHN0YXRlLkNVUlJFTlRfVkVS
VEVYX0FUVFJJQik7Ci0gICAgICAgICAgICB2YXIgYnVmZmVyID0gUmVwbGF5YWJsZVJlc291cmNl
LnJlcGxheShzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HLCBjYWNoZSk7
Ci0gICAgICAgICAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgZ2wuYmluZEJ1ZmZl
cihnbC5BUlJBWV9CVUZGRVIsIGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0
cmliUG9pbnRlcihpLCBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX1NJWkUsIHN0YXRlLlZFUlRF
WF9BVFRSSUJfQVJSQVlfVFlQRSwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVE
LCBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSwgc3RhdGUuVkVSVEVYX0FUVFJJQl9B
UlJBWV9QT0lOVEVSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBnbC5iaW5k
QnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShnbFN0YXRl
LkFSUkFZX0JVRkZFUl9CSU5ESU5HLCBjYWNoZSkpOwotICAgICAgICBnbC5iaW5kQnVmZmVyKGds
LkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KGdsU3RhdGUu
RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORywgY2FjaGUpKTsKLQotICAgICAgICAvLyBURVhU
VVJFUwotICAgICAgICB2YXIgbWF4VGV4dHVyZUltYWdlVW5pdHMgPSBnbC5nZXRQYXJhbWV0ZXIo
Z2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG1heFRleHR1cmVJbWFnZVVuaXRzOyArK2kpIHsKLSAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1
cmUoZ2wuVEVYVFVSRTAgKyBpKTsKLSAgICAgICAgICAgIHZhciBzdGF0ZSA9IGdsU3RhdGUudGV4
dHVyZUJpbmRpbmdzW2ldIHx8IHt9OwotICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVY
VFVSRV8yRCwgUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShzdGF0ZS5URVhUVVJFXzJELCBjYWNo
ZSkpOwotICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV9DVUJFX01BUCwgUmVw
bGF5YWJsZVJlc291cmNlLnJlcGxheShzdGF0ZS5URVhUVVJFX0NVQkVfTUFQLCBjYWNoZSkpOwot
ICAgICAgICB9Ci0gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xTdGF0ZS5BQ1RJVkVfVEVYVFVS
RSk7Ci0KLSAgICAgICAgcmV0dXJuIFJlc291cmNlLnByb3RvdHlwZS5fZG9SZXBsYXlDYWxscy5j
YWxsKHRoaXMsIGRhdGEsIGNhY2hlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtPYmplY3R8bnVtYmVyfSB0YXJnZXQKLSAgICAgKiBAcmV0dXJuIHtSZXNvdXJjZX0KLSAgICAg
Ki8KLSAgICBjdXJyZW50QmluZGluZzogZnVuY3Rpb24odGFyZ2V0KQotICAgIHsKLSAgICAgICAg
dmFyIHJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KHRhcmdldCk7Ci0gICAgICAgIGlmIChy
ZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybiByZXNvdXJjZTsKLSAgICAgICAgdmFyIGdsID0g
dGhpcy53cmFwcGVkT2JqZWN0KCk7Ci0gICAgICAgIHZhciBiaW5kaW5nUGFyYW1ldGVyOwotICAg
ICAgICB2YXIgYmluZE1ldGhvZE5hbWU7Ci0gICAgICAgIHZhciBiaW5kTWV0aG9kVGFyZ2V0ID0g
dGFyZ2V0OwotICAgICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgICAgICBjYXNlIGdsLkFSUkFZ
X0JVRkZFUjoKLSAgICAgICAgICAgIGJpbmRpbmdQYXJhbWV0ZXIgPSBnbC5BUlJBWV9CVUZGRVJf
QklORElORzsKLSAgICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRCdWZmZXIiOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0g
ICAgICAgICAgICBiaW5kaW5nUGFyYW1ldGVyID0gZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklO
RElORzsKLSAgICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRCdWZmZXIiOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZ2wuVEVYVFVSRV8yRDoKLSAgICAgICAgICAgIGJp
bmRpbmdQYXJhbWV0ZXIgPSBnbC5URVhUVVJFX0JJTkRJTkdfMkQ7Ci0gICAgICAgICAgICBiaW5k
TWV0aG9kTmFtZSA9ICJiaW5kVGV4dHVyZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWDoKLSAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1g6Ci0gICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAg
ICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgY2FzZSBnbC5U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgYmluZGluZ1BhcmFtZXRlciA9IGdsLlRFWFRV
UkVfQklORElOR19DVUJFX01BUDsKLSAgICAgICAgICAgIGJpbmRNZXRob2RUYXJnZXQgPSBnbC5U
RVhUVVJFX0NVQkVfTUFQOwotICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZFRleHR1
cmUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZ2wuRlJBTUVCVUZGRVI6Ci0g
ICAgICAgICAgICBiaW5kaW5nUGFyYW1ldGVyID0gZ2wuRlJBTUVCVUZGRVJfQklORElORzsKLSAg
ICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRGcmFtZWJ1ZmZlciI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBnbC5SRU5ERVJCVUZGRVI6Ci0gICAgICAgICAgICBiaW5k
aW5nUGFyYW1ldGVyID0gZ2wuUkVOREVSQlVGRkVSX0JJTkRJTkc7Ci0gICAgICAgICAgICBiaW5k
TWV0aG9kTmFtZSA9ICJiaW5kUmVuZGVyYnVmZmVyIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY29uc29sZS5lcnJvcigiQVNTRVJUX05PVF9SRUFD
SEVEOiB1bmtub3duIGJpbmRpbmcgdGFyZ2V0ICIgKyB0YXJnZXQpOwotICAgICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmpl
Y3QoZ2wuZ2V0UGFyYW1ldGVyKGJpbmRpbmdQYXJhbWV0ZXIpKTsKLSAgICAgICAgaWYgKHJlc291
cmNlKQotICAgICAgICAgICAgcmVzb3VyY2UucHVzaEJpbmRpbmcoYmluZE1ldGhvZFRhcmdldCwg
YmluZE1ldGhvZE5hbWUpOwotICAgICAgICByZXR1cm4gcmVzb3VyY2U7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEByZXR1cm4ge09iamVjdC48c3RyaW5nLCBG
dW5jdGlvbj59Ci0gICAgICovCi0gICAgX2N1c3RvbVdyYXBGdW5jdGlvbnM6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHZhciB3cmFwRnVuY3Rpb25zID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0
UmVzb3VyY2UuX3dyYXBGdW5jdGlvbnM7Ci0gICAgICAgIGlmICghd3JhcEZ1bmN0aW9ucykgewot
ICAgICAgICAgICAgd3JhcEZ1bmN0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7Ci0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUKLSAg
ICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc291cmNlQ29uc3RydWN0b3IKLSAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlUmVzb3VyY2VXcmFwRnVuY3Rp
b24obWV0aG9kTmFtZSwgcmVzb3VyY2VDb25zdHJ1Y3RvcikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAvKiogQHRoaXMgUmVzb3VyY2UuV3JhcEZ1bmN0aW9uICovCi0gICAgICAgICAg
ICAgICAgd3JhcEZ1bmN0aW9uc1ttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVkT2JqZWN0ID0gdGhpcy5yZXN1
bHQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVkT2JqZWN0KQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb3VyY2Ug
PSBuZXcgcmVzb3VyY2VDb25zdHJ1Y3Rvcih3cmFwcGVkT2JqZWN0KTsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIG1hbmFnZXIgPSB0aGlzLl9yZXNvdXJjZS5tYW5hZ2VyKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtYW5hZ2VyKQotICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlci5y
ZWdpc3RlclJlc291cmNlKHJlc291cmNlKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVy
cmlkZVJlc3VsdChyZXNvdXJjZS5wcm94eU9iamVjdCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
cmVzb3VyY2UucHVzaENhbGwodGhpcy5jYWxsKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKCJjcmVhdGVC
dWZmZXIiLCBXZWJHTEJ1ZmZlclJlc291cmNlKTsKLSAgICAgICAgICAgIGNyZWF0ZVJlc291cmNl
V3JhcEZ1bmN0aW9uKCJjcmVhdGVTaGFkZXIiLCBXZWJHTFNoYWRlclJlc291cmNlKTsKLSAgICAg
ICAgICAgIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKCJjcmVhdGVQcm9ncmFtIiwgV2ViR0xQ
cm9ncmFtUmVzb3VyY2UpOwotICAgICAgICAgICAgY3JlYXRlUmVzb3VyY2VXcmFwRnVuY3Rpb24o
ImNyZWF0ZVRleHR1cmUiLCBXZWJHTFRleHR1cmVSZXNvdXJjZSk7Ci0gICAgICAgICAgICBjcmVh
dGVSZXNvdXJjZVdyYXBGdW5jdGlvbigiY3JlYXRlRnJhbWVidWZmZXIiLCBXZWJHTEZyYW1lYnVm
ZmVyUmVzb3VyY2UpOwotICAgICAgICAgICAgY3JlYXRlUmVzb3VyY2VXcmFwRnVuY3Rpb24oImNy
ZWF0ZVJlbmRlcmJ1ZmZlciIsIFdlYkdMUmVuZGVyYnVmZmVyUmVzb3VyY2UpOwotICAgICAgICAg
ICAgY3JlYXRlUmVzb3VyY2VXcmFwRnVuY3Rpb24oImdldFVuaWZvcm1Mb2NhdGlvbiIsIFJlc291
cmNlKTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30g
bWV0aG9kTmFtZQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmdW5jdGlvbiBjdXN0b21X
cmFwRnVuY3Rpb24obWV0aG9kTmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2
YXIgY3VzdG9tUHVzaENhbGwgPSAicHVzaENhbGxfIiArIG1ldGhvZE5hbWU7Ci0gICAgICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfSB0YXJn
ZXQKLSAgICAgICAgICAgICAgICAgKiBAdGhpcyBSZXNvdXJjZS5XcmFwRnVuY3Rpb24KLSAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICB3cmFwRnVuY3Rpb25zW21ldGhvZE5hbWVd
ID0gZnVuY3Rpb24odGFyZ2V0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHJlc291cmNlID0gdGhpcy5fcmVzb3VyY2UuY3VycmVudEJpbmRpbmcodGFyZ2V0KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc291cmNlW2N1c3RvbVB1c2hD
YWxsXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlW2N1c3RvbVB1c2hDYWxsXS5j
YWxsKHJlc291cmNlLCB0aGlzLmNhbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnB1c2hDYWxsKHRoaXMuY2FsbCgpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXN0b21XcmFwRnVu
Y3Rpb24oImF0dGFjaFNoYWRlciIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJi
aW5kQXR0cmliTG9jYXRpb24iKTsKLSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29t
cGlsZVNoYWRlciIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJkZXRhY2hTaGFk
ZXIiKTsKLSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigibGlua1Byb2dyYW0iKTsKLSAg
ICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigic2hhZGVyU291cmNlIik7Ci0gICAgICAgICAg
ICBjdXN0b21XcmFwRnVuY3Rpb24oImJ1ZmZlckRhdGEiKTsKLSAgICAgICAgICAgIGN1c3RvbVdy
YXBGdW5jdGlvbigiYnVmZmVyU3ViRGF0YSIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0
aW9uKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0
aW9uKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1
bmN0aW9uKCJjb3B5VGV4SW1hZ2UyRCIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9u
KCJjb3B5VGV4U3ViSW1hZ2UyRCIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJn
ZW5lcmF0ZU1pcG1hcCIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJ0ZXhJbWFn
ZTJEIik7Ci0gICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oInRleFN1YkltYWdlMkQiKTsK
LSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigidGV4UGFyYW1ldGVyZiIpOwotICAgICAg
ICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJ0ZXhQYXJhbWV0ZXJpIik7Ci0gICAgICAgICAgICBj
dXN0b21XcmFwRnVuY3Rpb24oImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIik7Ci0gICAgICAgICAg
ICBjdXN0b21XcmFwRnVuY3Rpb24oImZyYW1lYnVmZmVyVGV4dHVyZTJEIik7Ci0gICAgICAgICAg
ICBjdXN0b21XcmFwRnVuY3Rpb24oInJlbmRlcmJ1ZmZlclN0b3JhZ2UiKTsKLQotICAgICAgICAg
ICAgLyoqIEB0aGlzIFJlc291cmNlLldyYXBGdW5jdGlvbiAqLwotICAgICAgICAgICAgd3JhcEZ1
bmN0aW9uc1siZ2V0RXJyb3IiXSA9IGZ1bmN0aW9uKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICB2YXIgZ2wgPSB0aGlzLl9vcmlnaW5hbE9iamVjdDsKLSAgICAgICAgICAgICAgICB2
YXIgZXJyb3IgPSB0aGlzLnJlc3VsdCgpOwotICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPT0g
Z2wuTk9fRVJST1IpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlLmNsZWFyRXJy
b3IoZXJyb3IpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBl
cnJvciA9IHRoaXMuX3Jlc291cmNlLm5leHRFcnJvcigpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoZXJyb3IgIT09IGdsLk5PX0VSUk9SKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5v
dmVycmlkZVJlc3VsdChlcnJvcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5fd3JhcEZ1bmN0aW9u
cyA9IHdyYXBGdW5jdGlvbnM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHdyYXBGdW5jdGlv
bnM7Ci0gICAgfQotfQotCi1XZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5wcm90b3R5cGUu
X19wcm90b19fID0gUmVzb3VyY2UucHJvdG90eXBlOwotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICovCi1mdW5jdGlvbiBUcmFjZUxvZygpCi17Ci0gICAgdGhpcy5fcmVwbGF5YWJsZUNhbGxzID0g
W107Ci0gICAgdGhpcy5fcmVwbGF5YWJsZXNDYWNoZSA9IG5ldyBDYWNoZSgpOwotfQotCi1UcmFj
ZUxvZy5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAg
ICAqLwotICAgIHNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9y
ZXBsYXlhYmxlQ2FsbHMubGVuZ3RoOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHtBcnJheS48UmVwbGF5YWJsZUNhbGw+fQotICAgICAqLwotICAgIHJlcGxheWFibGVDYWxsczog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlcGxheWFibGVDYWxsczsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVzb3VyY2UKLSAg
ICAgKi8KLSAgICBjYXB0dXJlUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQotICAgIHsKLSAg
ICAgICAgcmVzb3VyY2UudG9SZXBsYXlhYmxlKHRoaXMuX3JlcGxheWFibGVzQ2FjaGUpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKLSAgICAgKi8KLSAgICBh
ZGRDYWxsOiBmdW5jdGlvbihjYWxsKQotICAgIHsKLSAgICAgICAgdmFyIHJlcyA9IFJlc291cmNl
LmZvck9iamVjdChjYWxsLnJlc3VsdCgpKTsKLSAgICAgICAgaWYgKHJlcykKLSAgICAgICAgICAg
IHRoaXMuY2FwdHVyZVJlc291cmNlKHJlcyk7Ci0gICAgICAgIHZhciBzaXplID0gdGhpcy5fcmVw
bGF5YWJsZXNDYWNoZS5zaXplKCk7Ci0gICAgICAgIHRoaXMuX3JlcGxheWFibGVDYWxscy5wdXNo
KGNhbGwudG9SZXBsYXlhYmxlKHRoaXMuX3JlcGxheWFibGVzQ2FjaGUpKTsKLSAgICAgICAgY29u
c29sZS5hc3NlcnQodGhpcy5fcmVwbGF5YWJsZXNDYWNoZS5zaXplKCkgPT09IHNpemUsICJJbnRl
cm5hbCBlcnJvcjogV2Ugc2hvdWxkIGhhdmUgY2FwdHVyZWQgYWxsIHRoZSByZXNvdXJjZXMgYWxy
ZWFkeSBieSB0aGlzIHRpbWUuIik7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICogQHBhcmFtIHtUcmFjZUxvZ30gdHJhY2VMb2cKLSAqLwotZnVuY3Rpb24gVHJhY2VMb2dQbGF5
ZXIodHJhY2VMb2cpCi17Ci0gICAgdGhpcy5fdHJhY2VMb2cgPSB0cmFjZUxvZzsKLSAgICB0aGlz
Ll9uZXh0UmVwbGF5U3RlcCA9IDA7Ci0gICAgdGhpcy5fcmVwbGF5V29ybGRDYWNoZSA9IG5ldyBD
YWNoZSgpOwotfQotCi1UcmFjZUxvZ1BsYXllci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7VHJhY2VMb2d9Ci0gICAgICovCi0gICAgdHJhY2VMb2c6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90cmFjZUxvZzsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIG5leHRSZXBsYXlTdGVwOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbmV4dFJlcGxheVN0ZXA7Ci0g
ICAgfSwKLQotICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBGSVhNRTog
UHJldmVudCBtZW1vcnkgbGVha3M6IGRldGFjaCBhbmQgZGVsZXRlIGFsbCBvbGQgcmVzb3VyY2Vz
IE9SIHJldXNlIHRoZW0gT1IgY3JlYXRlIGEgbmV3IHJlcGxheSBjYW52YXMgZXZlcnkgdGltZS4K
LSAgICAgICAgdGhpcy5fbmV4dFJlcGxheVN0ZXAgPSAwOwotICAgICAgICB0aGlzLl9yZXBsYXlX
b3JsZENhY2hlLnJlc2V0KCk7Ci0gICAgfSwKLQotICAgIHN0ZXA6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuc3RlcFRvKHRoaXMuX25leHRSZXBsYXlTdGVwKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBOdW0KLSAgICAgKi8KLSAgICBzdGVw
VG86IGZ1bmN0aW9uKHN0ZXBOdW0pCi0gICAgewotICAgICAgICBzdGVwTnVtID0gTWF0aC5taW4o
c3RlcE51bSwgdGhpcy5fdHJhY2VMb2cuc2l6ZSgpIC0gMSk7Ci0gICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHN0ZXBOdW0gPj0gMCk7Ci0gICAgICAgIGlmICh0aGlzLl9uZXh0UmVwbGF5U3RlcCA+IHN0
ZXBOdW0pCi0gICAgICAgICAgICB0aGlzLnJlc2V0KCk7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXBs
YXkgYWxsIHRoZSBjYWNoZWQgcmVzb3VyY2VzIGZpcnN0IHRvIHdhcm0tdXAuCi0gICAgICAgIHZh
ciByZXBsYXlhYmxlQ2FsbHMgPSB0aGlzLl90cmFjZUxvZy5yZXBsYXlhYmxlQ2FsbHMoKTsKLSAg
ICAgICAgd2hpbGUgKHRoaXMuX25leHRSZXBsYXlTdGVwIDw9IHN0ZXBOdW0pCi0gICAgICAgICAg
ICByZXBsYXlhYmxlQ2FsbHNbdGhpcy5fbmV4dFJlcGxheVN0ZXArK10ucmVwbGF5KHRoaXMuX3Jl
cGxheVdvcmxkQ2FjaGUpOwotICAgIH0sCi0KLSAgICByZXBsYXk6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuc3RlcFRvKHRoaXMuX3RyYWNlTG9nLnNpemUoKSAtIDEpOwotICAgIH0K
LX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gUmVzb3VyY2VUcmFja2lu
Z01hbmFnZXIoKQotewotICAgIHRoaXMuX2NhcHR1cmluZyA9IGZhbHNlOwotICAgIHRoaXMuX3N0
b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7Ci0gICAgdGhpcy5fbGFzdFRyYWNlTG9nID0g
bnVsbDsKLX0KLQotUmVzb3VyY2VUcmFja2luZ01hbmFnZXIucHJvdG90eXBlID0gewotICAgIC8q
KgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgY2FwdHVyaW5nOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyaW5nOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtUcmFjZUxvZ30KLSAgICAgKi8KLSAgICBsYXN0VHJh
Y2VMb2c6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9sYXN0VHJhY2VM
b2c7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7UmVzb3VyY2V9IHJlc291cmNl
Ci0gICAgICovCi0gICAgcmVnaXN0ZXJSZXNvdXJjZTogZnVuY3Rpb24ocmVzb3VyY2UpCi0gICAg
ewotICAgICAgICByZXNvdXJjZS5zZXRNYW5hZ2VyKHRoaXMpOwotICAgIH0sCi0KLSAgICBzdGFy
dENhcHR1cmluZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9jYXB0dXJp
bmcpCi0gICAgICAgICAgICB0aGlzLl9sYXN0VHJhY2VMb2cgPSBuZXcgVHJhY2VMb2coKTsKLSAg
ICAgICAgdGhpcy5fY2FwdHVyaW5nID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fc3RvcENhcHR1cmlu
Z09uRnJhbWVFbmQgPSBmYWxzZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtU
cmFjZUxvZz19IHRyYWNlTG9nCi0gICAgICovCi0gICAgc3RvcENhcHR1cmluZzogZnVuY3Rpb24o
dHJhY2VMb2cpCi0gICAgewotICAgICAgICBpZiAodHJhY2VMb2cgJiYgdGhpcy5fbGFzdFRyYWNl
TG9nICE9PSB0cmFjZUxvZykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fY2Fw
dHVyaW5nID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0g
ZmFsc2U7Ci0gICAgfSwKLQotICAgIGNhcHR1cmVGcmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fbGFzdFRyYWNlTG9nID0gbmV3IFRyYWNlTG9nKCk7Ci0gICAgICAgIHRoaXMu
X2NhcHR1cmluZyA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5k
ID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVz
b3VyY2UKLSAgICAgKiBAcGFyYW0ge0FycmF5fEFyZ3VtZW50c30gYXJncwotICAgICAqLwotICAg
IGNhcHR1cmVBcmd1bWVudHM6IGZ1bmN0aW9uKHJlc291cmNlLCBhcmdzKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLl9jYXB0dXJpbmcpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRo
aXMuX2xhc3RUcmFjZUxvZy5jYXB0dXJlUmVzb3VyY2UocmVzb3VyY2UpOwotICAgICAgICBmb3Ig
KHZhciBpID0gMCwgbiA9IGFyZ3MubGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgICB2
YXIgcmVzID0gUmVzb3VyY2UuZm9yT2JqZWN0KGFyZ3NbaV0pOwotICAgICAgICAgICAgaWYgKHJl
cykKLSAgICAgICAgICAgICAgICB0aGlzLl9sYXN0VHJhY2VMb2cuY2FwdHVyZVJlc291cmNlKHJl
cyk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYWxsfSBj
YWxsCi0gICAgICovCi0gICAgcmVwb3J0Q2FsbDogZnVuY3Rpb24oY2FsbCkKLSAgICB7Ci0gICAg
ICAgIGlmICghdGhpcy5fY2FwdHVyaW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
aGlzLl9sYXN0VHJhY2VMb2cuYWRkQ2FsbChjYWxsKTsKLSAgICAgICAgaWYgKHRoaXMuX3N0b3BD
YXB0dXJpbmdPbkZyYW1lRW5kICYmIHRoaXMuX2xhc3RUcmFjZUxvZy5zaXplKCkgPT09IDEpIHsK
LSAgICAgICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7Ci0gICAg
ICAgICAgICB0aGlzLl9zZXRaZXJvVGltZW91dHModGhpcy5zdG9wQ2FwdHVyaW5nLmJpbmQodGhp
cywgdGhpcy5fbGFzdFRyYWNlTG9nKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBfc2V0WmVyb1Rp
bWVvdXRzOiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIC8vIFdlIG5lZWQgYSBm
YXN0ZXN0IGFzeW5jIGNhbGxiYWNrLCB3aGF0ZXZlciBmaXJlcyBmaXJzdC4KLSAgICAgICAgLy8g
VXN1YWxseSBhIHBvc3RNZXNzYWdlIHNob3VsZCBiZSBmYXN0ZXIgdGhhbiBhIHNldFRpbWVvdXQo
MCkuCi0gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7Ci0gICAgICAg
IGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gY2FsbGJhY2s7Ci0gICAgICAgIGNoYW5uZWwucG9y
dDIucG9zdE1lc3NhZ2UoIiIpOwotICAgICAgICBpbnNwZWN0ZWRXaW5kb3cuc2V0VGltZW91dChj
YWxsYmFjaywgMCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi12YXIg
SW5qZWN0ZWRTY3JpcHQgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fbWFuYWdlciA9IG5ldyBS
ZXNvdXJjZVRyYWNraW5nTWFuYWdlcigpOwotICAgIHRoaXMuX2xhc3RUcmFjZUxvZ0lkID0gMDsK
LSAgICB0aGlzLl90cmFjZUxvZ3MgPSB7fTsKLSAgICB0aGlzLl90cmFjZUxvZ1BsYXllciA9IG51
bGw7Ci0gICAgdGhpcy5fcmVwbGF5Q29udGV4dCA9IG51bGw7Ci19Ci0KLUluamVjdGVkU2NyaXB0
LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2xDb250ZXh0Ci0gICAgICogQHJldHVybiB7T2JqZWN0fQotICAgICAqLwotICAgIHdy
YXBXZWJHTENvbnRleHQ6IGZ1bmN0aW9uKGdsQ29udGV4dCkKLSAgICB7Ci0gICAgICAgIHZhciBy
ZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChnbENvbnRleHQpIHx8IG5ldyBXZWJHTFJlbmRl
cmluZ0NvbnRleHRSZXNvdXJjZShnbENvbnRleHQsIHRoaXMuX2NvbnN0cnVjdFdlYkdMUmVwbGF5
Q29udGV4dC5iaW5kKHRoaXMsIGdsQ29udGV4dCkpOwotICAgICAgICB0aGlzLl9tYW5hZ2VyLnJl
Z2lzdGVyUmVzb3VyY2UocmVzb3VyY2UpOwotICAgICAgICB2YXIgcHJveHkgPSByZXNvdXJjZS5w
cm94eU9iamVjdCgpOwotICAgICAgICByZXR1cm4gcHJveHk7Ci0gICAgfSwKLQotICAgIGNhcHR1
cmVGcmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGlkID0gdGhpcy5fbWFrZVRy
YWNlTG9nSWQoKTsKLSAgICAgICAgdGhpcy5fbWFuYWdlci5jYXB0dXJlRnJhbWUoKTsKLSAgICAg
ICAgdGhpcy5fdHJhY2VMb2dzW2lkXSA9IHRoaXMuX21hbmFnZXIubGFzdFRyYWNlTG9nKCk7Ci0g
ICAgICAgIHJldHVybiBpZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJp
bmd9IGlkCi0gICAgICovCi0gICAgZHJvcFRyYWNlTG9nOiBmdW5jdGlvbihpZCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl90cmFjZUxvZ1BsYXllciAmJiB0aGlzLl90cmFjZUxvZ1BsYXllci50
cmFjZUxvZygpID09PSB0aGlzLl90cmFjZUxvZ3NbaWRdKQotICAgICAgICAgICAgdGhpcy5fdHJh
Y2VMb2dQbGF5ZXIgPSBudWxsOwotICAgICAgICBkZWxldGUgdGhpcy5fdHJhY2VMb2dzW2lkXTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkCi0gICAgICogQHJl
dHVybiB7T2JqZWN0fHN0cmluZ30KLSAgICAgKi8KLSAgICB0cmFjZUxvZzogZnVuY3Rpb24oaWQp
Ci0gICAgewotICAgICAgICB2YXIgdHJhY2VMb2cgPSB0aGlzLl90cmFjZUxvZ3NbaWRdOwotICAg
ICAgICBpZiAoIXRyYWNlTG9nKQotICAgICAgICAgICAgcmV0dXJuICJFcnJvcjogVHJhY2UgbG9n
IHdpdGggdGhpcyBJRCBub3QgZm91bmQuIjsKLSAgICAgICAgdmFyIHJlc3VsdCA9IHsKLSAgICAg
ICAgICAgIGlkOiBpZCwKLSAgICAgICAgICAgIGNhbGxzOiBbXQotICAgICAgICB9OwotICAgICAg
ICB2YXIgY2FsbHMgPSB0cmFjZUxvZy5yZXBsYXlhYmxlQ2FsbHMoKTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDAsIG4gPSBjYWxscy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgIHZh
ciBjYWxsID0gY2FsbHNbaV07Ci0gICAgICAgICAgICB2YXIgYXJncyA9IGNhbGwuYXJncygpLm1h
cChmdW5jdGlvbihhcmd1bWVudCkgewotICAgICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudCAr
ICIiOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB2YXIgc3RhY2tUcmFjZSA9IGNhbGwu
c3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgdmFyIGNhbGxGcmFtZSA9IHN0YWNrVHJhY2UgPyBz
dGFja1RyYWNlLmNhbGxGcmFtZSgwKSB8fCB7fSA6IHt9OwotICAgICAgICAgICAgdmFyIHRyYWNl
TG9nSXRlbSA9IHsKLSAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGNhbGwuZnVuY3Rpb25O
YW1lKCksCi0gICAgICAgICAgICAgICAgYXJndW1lbnRzOiBhcmdzLAotICAgICAgICAgICAgICAg
IHNvdXJjZVVSTDogY2FsbEZyYW1lLnNvdXJjZVVSTCwKLSAgICAgICAgICAgICAgICBsaW5lTnVt
YmVyOiBjYWxsRnJhbWUubGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6
IGNhbGxGcmFtZS5jb2x1bW5OdW1iZXIKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBpZiAo
Y2FsbC5yZXN1bHQoKSkKLSAgICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0ucmVzdWx0ID0gY2Fs
bC5yZXN1bHQoKSArICIiOwotICAgICAgICAgICAgcmVzdWx0LmNhbGxzLnB1c2godHJhY2VMb2dJ
dGVtKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gc3Rl
cE5vCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIHJlcGxheVRyYWNlTG9n
OiBmdW5jdGlvbihpZCwgc3RlcE5vKQotICAgIHsKLSAgICAgICAgdmFyIHRyYWNlTG9nID0gdGhp
cy5fdHJhY2VMb2dzW2lkXTsKLSAgICAgICAgaWYgKCF0cmFjZUxvZykKLSAgICAgICAgICAgIHJl
dHVybiAiIjsKLSAgICAgICAgaWYgKCF0aGlzLl90cmFjZUxvZ1BsYXllciB8fCB0aGlzLl90cmFj
ZUxvZ1BsYXllci50cmFjZUxvZygpICE9PSB0cmFjZUxvZykKLSAgICAgICAgICAgIHRoaXMuX3Ry
YWNlTG9nUGxheWVyID0gbmV3IFRyYWNlTG9nUGxheWVyKHRyYWNlTG9nKTsKLSAgICAgICAgdGhp
cy5fdHJhY2VMb2dQbGF5ZXIuc3RlcFRvKHN0ZXBObyk7Ci0gICAgICAgIGlmICghdGhpcy5fcmVw
bGF5Q29udGV4dCkgewotICAgICAgICAgICAgY29uc29sZS5lcnJvcigiQVNTRVJUX05PVF9SRUFD
SEVEOiByZXBsYXlUcmFjZUxvZyBmYWlsZWQgdG8gY3JlYXRlIGEgcmVwbGF5IGNhbnZhcz8hIik7
Ci0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUmV0dXJuIGN1
cnJlbnQgc2NyZWVuc2hvdC4KLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgcmVwbGF5aW5nIHNl
dmVyYWwgY2FudmFzZXMgc2ltdWx0YW5lb3VzbHkuCi0gICAgICAgIHJldHVybiB0aGlzLl9yZXBs
YXlDb250ZXh0LmNhbnZhcy50b0RhdGFVUkwoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIF9tYWtlVHJhY2VMb2dJZDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuICJ7XCJpbmplY3RlZFNjcmlwdElkXCI6IiArIGluamVj
dGVkU2NyaXB0SWQgKyAiLFwidHJhY2VMb2dJZFwiOiIgKyAoKyt0aGlzLl9sYXN0VHJhY2VMb2dJ
ZCkgKyAifSI7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViR0xSZW5kZXJp
bmdDb250ZXh0fSBvcmlnaW5hbEdsQ29udGV4dAotICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVy
aW5nQ29udGV4dH0KLSAgICAgKi8KLSAgICBfY29uc3RydWN0V2ViR0xSZXBsYXlDb250ZXh0OiBm
dW5jdGlvbihvcmlnaW5hbEdsQ29udGV4dCkKLSAgICB7Ci0gICAgICAgIHZhciByZXBsYXlDb250
ZXh0ID0gb3JpZ2luYWxHbENvbnRleHRbIl9fcmVwbGF5Q29udGV4dCJdOwotICAgICAgICBpZiAo
IXJlcGxheUNvbnRleHQpIHsKLSAgICAgICAgICAgIHZhciBjYW52YXMgPSBvcmlnaW5hbEdsQ29u
dGV4dC5jYW52YXMuY2xvbmVOb2RlKHRydWUpOwotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMg
PSBvcmlnaW5hbEdsQ29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpOwotICAgICAgICAgICAg
dmFyIGNvbnRleHRJZHMgPSBbImV4cGVyaW1lbnRhbC13ZWJnbCIsICJ3ZWJraXQtM2QiLCAiM2Qi
XTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBjb250ZXh0SWQ7IGNvbnRleHRJZCA9IGNv
bnRleHRJZHNbaV07ICsraSkgewotICAgICAgICAgICAgICAgIHJlcGxheUNvbnRleHQgPSBjYW52
YXMuZ2V0Q29udGV4dChjb250ZXh0SWQsIGF0dHJpYnV0ZXMpOwotICAgICAgICAgICAgICAgIGlm
IChyZXBsYXlDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxheUNvbnRleHQgPSAv
KiogQHR5cGUge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gKi8gUmVzb3VyY2Uud3JhcHBlZE9iamVj
dChyZXBsYXlDb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KG9yaWdpbmFsR2xDb250ZXh0LCAiX19yZXBsYXlDb250ZXh0IiwgewotICAgICAgICAgICAgICAg
IHZhbHVlOiByZXBsYXlDb250ZXh0LAotICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSwK
LSAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKLSAgICAgICAgICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdGhpcy5fcmVwbGF5
Q29udGV4dCA9IHJlcGxheUNvbnRleHQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogUmVzZXQgdGhlIHJlcGxheSBHTCBzdGF0ZSBhbmQgY2xlYXIgdGhlIGNhbnZhcy4K
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVwbGF5Q29udGV4dDsKLSAgICB9Ci19Ci0KLXZh
ciBpbmplY3RlZFNjcmlwdCA9IG5ldyBJbmplY3RlZFNjcmlwdCgpOwotcmV0dXJuIGluamVjdGVk
U2NyaXB0OwotCi19KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCmluZGV4
IGYxMTM3Yzc4ZDA2NjkwMzgyOGYxZWY4NWExMTEyMTExYjFjNzZmZTYuLjRmZTU4YmRmNmI2YWJh
MDY3NDY5NTk4MDY0Yjc1MzU5MTAxMWFlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yLmpzb24KQEAgLTMwNjgsNyArMzA2OCw3IEBACiAgICAgICAgIF0KICAgICB9LAogICAg
IHsKLSAgICAgICAgImRvbWFpbiI6ICJXZWJHTCIsCisgICAgICAgICJkb21haW4iOiAiQ2FudmFz
IiwKICAgICAgICAgImhpZGRlbiI6IHRydWUsCiAgICAgICAgICJ0eXBlcyI6IFsKICAgICAgICAg
ICAgIHsKQEAgLTMxMDAsMTEgKzMxMDAsMTEgQEAKICAgICAgICAgImNvbW1hbmRzIjogWwogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIsCi0gICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZXMgV2ViR0wgaW5zcGVjdGlvbi4iCisgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZXMgQ2FudmFzIGluc3BlY3Rpb24uIgogICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAibmFtZSI6ICJkaXNh
YmxlIiwKLSAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGlzYWJsZXMgV2ViR0wgaW5z
cGVjdGlvbi4iCisgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRpc2FibGVzIENhbnZh
cyBpbnNwZWN0aW9uLiIKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIm5hbWUiOiAiZHJvcFRyYWNlTG9nIiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCmluZGV4IGRiM2Y4MmNiZTlhYmY4MjdhOTdhYWU4YzA4
NGE4ZmQ2YjEyMDkyYjguLjE4Y2Y5ZDBmYzJkOGQzYThiZmM3MmZkMDlmMzg4MzljNjgyNDBiYjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcApA
QCAtMzIsMTIgKzMyLDE0IEBACiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0b3J5LmNwcCIKICNp
bmNsdWRlICJJbmplY3RlZFNjcmlwdC5jcHAiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRCYXNl
LmNwcCIKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAiCiAjaW5jbHVk
ZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFn
ZXIuY3BwIgogI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIgogI2luY2x1ZGUgIkluc3BlY3RvckJhc2VBZ2Vu
dC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIgorI2luY2x1ZGUgIkluc3Bl
Y3RvckNhbnZhc0FnZW50LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuY3BwIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAiCkBAIC02Niw3ICs2OCw2IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yU3R5bGVU
ZXh0RWRpdG9yLmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCIKICNp
bmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuY3BwIgotI2luY2x1ZGUgIkluc3BlY3RvcldlYkdMQWdl
bnQuY3BwIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlckFnZW50LmNwcCIKICNpbmNsdWRlICJJ
bnN0cnVtZW50aW5nQWdlbnRzLmNwcCIKICNpbmNsdWRlICJNZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXNBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
QWdlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmZjI5Mzg0NWQ0ZTQzMWQ3OTA2MThlMzZmMDk2ODc1YjZi
OTE4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzQWdlbnQuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvckNhbnZhc0FnZW50
LmgiCisKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0Q2FudmFzTW9kdWxlLmgiCisjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5o
IgorI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgQ2FudmFzQWdlbnRTdGF0ZSB7CitzdGF0aWMg
Y29uc3QgY2hhciBjYW52YXNBZ2VudEVuYWJsZWRbXSA9ICJjYW52YXNBZ2VudEVuYWJsZWQiOwor
fTsKKworSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Okluc3BlY3RvckNhbnZhc0FnZW50KEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBzdGF0ZSwg
UGFnZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIp
CisgICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+KCJDYW52YXMi
LCBpbnN0cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSkKKyAgICAsIG1faW5zcGVjdGVkUGFnZShwYWdl
KQorICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQor
ICAgICwgbV9mcm9udGVuZCgwKQorICAgICwgbV9lbmFibGVkKGZhbHNlKQoreworICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQ2FudmFzQWdlbnQodGhpcyk7Cit9CisKK0lu
c3BlY3RvckNhbnZhc0FnZW50Ojp+SW5zcGVjdG9yQ2FudmFzQWdlbnQoKQoreworICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQ2FudmFzQWdlbnQoMCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldEZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kKiBmcm9u
dGVuZCkKK3sKKyAgICBBU1NFUlQoZnJvbnRlbmQpOworICAgIG1fZnJvbnRlbmQgPSBmcm9udGVu
ZC0+Y2FudmFzKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNsZWFyRnJvbnRl
bmQoKQoreworICAgIG1fZnJvbnRlbmQgPSAwOworICAgIGRpc2FibGUoMCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlc3RvcmUoKQoreworICAgIG1fZW5hYmxlZCA9IG1fc3Rh
dGUtPmdldEJvb2xlYW4oQ2FudmFzQWdlbnRTdGF0ZTo6Y2FudmFzQWdlbnRFbmFibGVkKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nKikKK3sKKyAg
ICBpZiAobV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9lbmFibGVkID0gdHJ1ZTsK
KyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKENhbnZhc0FnZW50U3RhdGU6OmNhbnZhc0FnZW50RW5h
YmxlZCwgbV9lbmFibGVkKTsKK30KKwordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJs
ZShFcnJvclN0cmluZyopCit7CisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2VuYWJsZWQgPSBmYWxzZTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKENhbnZhc0Fn
ZW50U3RhdGU6OmNhbnZhc0FnZW50RW5hYmxlZCwgbV9lbmFibGVkKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6ZHJvcFRyYWNlTG9nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkKQoreworICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlIG1vZHVsZSA9IGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlRm9yVHJhY2VMb2dJZChlcnJv
clN0cmluZywgdHJhY2VMb2dJZCk7CisgICAgaWYgKCFtb2R1bGUuaGFzTm9WYWx1ZSgpKQorICAg
ICAgICBtb2R1bGUuZHJvcFRyYWNlTG9nKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FwdHVyZUZyYW1lKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgU3RyaW5nKiB0cmFjZUxvZ0lkKQoreworICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSA9IG1haW5Xb3JsZFNjcmlwdFN0YXRlKG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkp
OworICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVsZSA9IEluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlOjptb2R1bGVGb3JTdGF0ZShtX2luamVjdGVkU2NyaXB0TWFuYWdlciwgc2Ny
aXB0U3RhdGUpOworICAgIGlmIChtb2R1bGUuaGFzTm9WYWx1ZSgpKSB7CisgICAgICAgICplcnJv
clN0cmluZyA9ICJJbnNwZWN0ZWQgZnJhbWUgaGFzIGdvbmUiOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1vZHVsZS5jYXB0dXJlRnJhbWUoZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQpOwor
fQorCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpnZXRUcmFjZUxvZyhFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHJhY2VMb2dJZCwgUmVmUHRyPFR5cGVCdWlsZGVy
OjpDYW52YXM6OlRyYWNlTG9nPiYgdHJhY2VMb2cpCit7CisgICAgSW5qZWN0ZWRTY3JpcHRDYW52
YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVGb3JUcmFjZUxvZ0lk
KGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKKyAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVlKCkp
CisgICAgICAgIG1vZHVsZS50cmFjZUxvZyhlcnJvclN0cmluZywgdHJhY2VMb2dJZCwgJnRyYWNl
TG9nKTsKK30KKwordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVwbGF5VHJhY2VMb2coRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIGludCBzdGVw
Tm8sIFN0cmluZyogcmVzdWx0KQoreworICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1v
ZHVsZSA9IGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlRm9yVHJhY2VMb2dJZChlcnJvclN0cmlu
ZywgdHJhY2VMb2dJZCk7CisgICAgaWYgKCFtb2R1bGUuaGFzTm9WYWx1ZSgpKQorICAgICAgICBt
b2R1bGUucmVwbGF5VHJhY2VMb2coZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQsIHN0ZXBObywgcmVz
dWx0KTsKK30KKworI2lmIEVOQUJMRShXRUJHTCkKK1NjcmlwdE9iamVjdCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6d3JhcFdlYkdMUmVuZGVyaW5nQ29udGV4dEZvckluc3RydW1lbnRhdGlvbihjb25z
dCBTY3JpcHRPYmplY3QmIGdsQ29udGV4dCkKK3sKKyAgICBpZiAoZ2xDb250ZXh0Lmhhc05vVmFs
dWUoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNj
cmlwdE9iamVjdCgpOworICAgIH0KKyAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1
bGUgPSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZTo6bW9kdWxlRm9yU3RhdGUobV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXIsIGdsQ29udGV4dC5zY3JpcHRTdGF0ZSgpKTsKKyAgICBpZiAobW9kdWxl
Lmhhc05vVmFsdWUoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIFNjcmlwdE9iamVjdCgpOworICAgIH0KKyAgICByZXR1cm4gbW9kdWxlLndyYXBXZWJH
TENvbnRleHQoZ2xDb250ZXh0KTsKK30KKyNlbmRpZgorCitJbmplY3RlZFNjcmlwdENhbnZhc01v
ZHVsZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6aW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVGb3JU
cmFjZUxvZ0lkKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxv
Z0lkKQoreworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNj
cmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQodHJhY2VMb2dJZCk7CisgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgeworICAgICAgICAqZXJyb3JTdHJpbmcg
PSAiSW5zcGVjdGVkIGZyYW1lIGhhcyBnb25lIjsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2Ny
aXB0Q2FudmFzTW9kdWxlKCk7CisgICAgfQorICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxl
IG1vZHVsZSA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlOjptb2R1bGVGb3JTdGF0ZShtX2lu
amVjdGVkU2NyaXB0TWFuYWdlciwgaW5qZWN0ZWRTY3JpcHQuc2NyaXB0U3RhdGUoKSk7CisgICAg
aWYgKG1vZHVsZS5oYXNOb1ZhbHVlKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICplcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogbm8gQ2FudmFzIG1vZHVs
ZSI7CisgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSgpOworICAgIH0K
KyAgICByZXR1cm4gbW9kdWxlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDYwYzY0MTAwMjE5MDA2NzA4MGZkYmYy
MDRmOWFmZWQ5NWQ5YmM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3Bl
Y3RvckNhbnZhc0FnZW50X2gKKyNkZWZpbmUgSW5zcGVjdG9yQ2FudmFzQWdlbnRfaAorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvckJhc2VBZ2VudC5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVHlwZUJ1aWxk
ZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbmplY3RlZFNjcmlwdENh
bnZhc01vZHVsZTsKK2NsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKK2NsYXNzIEluc3BlY3Rv
clN0YXRlOworY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKK2NsYXNzIFBhZ2U7CitjbGFzcyBT
Y3JpcHRPYmplY3Q7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNw
ZWN0b3JDYW52YXNBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ+LCBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbnZhc0NvbW1h
bmRIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JDYW52
YXNBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IEluc3BlY3RvclN0YXRlKiBzdGF0ZSwgUGFnZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEluc3BlY3RvckNhbnZhc0FnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHN0YXRlLCBwYWdl
LCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsKKyAgICB9CisgICAgfkluc3BlY3RvckNhbnZhc0Fn
ZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcm9udGVuZCgpOworICAgIHZpcnR1YWwgdm9pZCBy
ZXN0b3JlKCk7CisKKyAgICBib29sIGVuYWJsZWQoKSB7IHJldHVybiBtX2VuYWJsZWQ7IH0KKwor
I2lmIEVOQUJMRShXRUJHTCkKKyAgICBTY3JpcHRPYmplY3Qgd3JhcFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEZvckluc3RydW1lbnRhdGlvbihjb25zdCBTY3JpcHRPYmplY3QmKTsKKyNlbmRpZgorCisg
ICAgLy8gQ2FsbGVkIGZyb20gdGhlIGZyb250LWVuZC4KKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxl
KEVycm9yU3RyaW5nKik7CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJvcFRyYWNlTG9nKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCB2b2lkIGNhcHR1cmVGcmFtZShFcnJvclN0cmluZyosIFN0cmluZyop
OworICAgIHZpcnR1YWwgdm9pZCBnZXRUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q2FudmFzOjpUcmFjZUxvZz4mKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVwbGF5VHJhY2VMb2coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBpbnQsIFN0
cmluZyopOworCisgICAgLy8gQ2FsbGVkIGZyb20gdGhlIGluamVjdGVkIHNjcmlwdC4KKworICAg
IC8vIENhbGxlZCBmcm9tIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgorCitwcml2YXRlOgorICAg
IEluc3BlY3RvckNhbnZhc0FnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0
ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKworICAgIEluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlIGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlRm9yVHJhY2VMb2dJZChFcnJv
clN0cmluZyosIGNvbnN0IFN0cmluZyYpOworCisgICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdlOwor
ICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CisgICAg
SW5zcGVjdG9yRnJvbnRlbmQ6OkNhbnZhcyogbV9mcm9udGVuZDsKKyAgICBib29sIG1fZW5hYmxl
ZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JDYW52YXNBZ2VudF9oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0luc3RydW1l
bnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0luc3Ry
dW1lbnRhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5MDRiODc4OTQyYzNjMjNlOTA1MDI3Y2MwZjUxYjc2
MjE1NDI5NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ2FudmFzSW5zdHJ1bWVudGF0aW9uLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5z
cGVjdG9yQ2FudmFzSW5zdHJ1bWVudGF0aW9uX2gKKyNkZWZpbmUgSW5zcGVjdG9yQ2FudmFzSW5z
dHJ1bWVudGF0aW9uX2gKKworI2luY2x1ZGUgIkluc3BlY3RvckNhbnZhc0FnZW50LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW5zdHJ1bWVudGlu
Z0FnZW50cy5oIgorI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyNpZiBFTkFCTEUoV0VCR0wpCitTY3JpcHRPYmplY3QgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3cmFwV2ViR0xSZW5kZXJpbmdDb250ZXh0Rm9ySW5zdHJ1bWVudGF0aW9uKERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgU2NyaXB0T2JqZWN0JiBnbENvbnRleHQpCit7CisjaWYgRU5B
QkxFKElOU1BFQ1RPUikKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpIHsKKyAg
ICAgICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGNhbnZhc0FnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy0+aW5zcGVjdG9yQ2FudmFzQWdlbnQoKTsKKyAgICAgICAgaWYgKGNhbnZhc0FnZW50ICYm
IGNhbnZhc0FnZW50LT5lbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gY2FudmFzQWdlbnQt
PndyYXBXZWJHTFJlbmRlcmluZ0NvbnRleHRGb3JJbnN0cnVtZW50YXRpb24oZ2xDb250ZXh0KTsK
KyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7Cit9CisjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhZGVm
aW5lZChJbnNwZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb25faCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBjODVmNGQ0Y2E4NTFk
MzlkM2MyMDBiMjYyMjY1NTkwODcxYjNmZDgxLi45YmQ0MzMxMWY5MmI2ZTkwNzZiZDQyMDFmNWEx
ZmQ4NTBkYWViZGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYXNlQWdlbnQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JDU1NBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNhbnZhc0FnZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9N
QWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmgiCkBAIC02Miw3
ICs2Myw2IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvclN0YXRlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgot
I2luY2x1ZGUgIkluc3BlY3RvcldlYkdMQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJQ
YWdlQ29uc29sZUFnZW50LmgiCkBAIC0xNDcsOSArMTQ3LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxl
cjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3Bl
Y3RvckMKICAgICBtX2FnZW50cy5hcHBlbmQoSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZSht
X2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCkpKTsKICNlbmRpZgogCi0j
aWYgRU5BQkxFKFdFQkdMKQotICAgIG1fYWdlbnRzLmFwcGVuZChJbnNwZWN0b3JXZWJHTEFnZW50
OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBwYWdl
LCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSkpOwotI2VuZGlmCisgICAgbV9hZ2VudHMu
YXBwZW5kKEluc3BlY3RvckNhbnZhc0FnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmdldCgpLCBtX3N0YXRlLmdldCgpLCBwYWdlLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQo
KSkpOwogCiAgICAgQVNTRVJUX0FSRyhpbnNwZWN0b3JDbGllbnQsIGluc3BlY3RvckNsaWVudCk7
CiAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbml0
KG1faW5zcGVjdG9yQWdlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JXZWJHTEFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JXZWJHTEFnZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZmZmJjZmE0
MDlhM2FmMjJmODEyNThhYjBjYTgwNzFhMWQ4NTM1Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
V2ViR0xBZ2VudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJMRShXRUJHTCkKLQotI2lu
Y2x1ZGUgIkluc3BlY3RvcldlYkdMQWdlbnQuaCIKLQotI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0
LmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiSW5qZWN0
ZWRTY3JpcHRXZWJHTE1vZHVsZS5oIiAKLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgot
I2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCi0jaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50
cy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKLSNpbmNs
dWRlICJTY3JpcHRTdGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBX
ZWJHTEFnZW50U3RhdGUgewotc3RhdGljIGNvbnN0IGNoYXIgd2ViR0xBZ2VudEVuYWJsZWRbXSA9
ICJ3ZWJHTEFnZW50RW5hYmxlZCI7Ci19OwotCi1JbnNwZWN0b3JXZWJHTEFnZW50OjpJbnNwZWN0
b3JXZWJHTEFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvclN0YXRlKiBzdGF0ZSwgUGFnZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBp
bmplY3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9y
V2ViR0xBZ2VudD4oIldlYkdMIiwgaW5zdHJ1bWVudGluZ0FnZW50cywgc3RhdGUpCi0gICAgLCBt
X2luc3BlY3RlZFBhZ2UocGFnZSkKLSAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVj
dGVkU2NyaXB0TWFuYWdlcikKLSAgICAsIG1fZnJvbnRlbmQoMCkKLSAgICAsIG1fZW5hYmxlZChm
YWxzZSkKLXsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvcldlYkdMQWdl
bnQodGhpcyk7Ci19Ci0KLUluc3BlY3RvcldlYkdMQWdlbnQ6On5JbnNwZWN0b3JXZWJHTEFnZW50
KCkKLXsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvcldlYkdMQWdlbnQo
MCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yV2ViR0xBZ2VudDo6c2V0RnJvbnRlbmQoSW5zcGVjdG9y
RnJvbnRlbmQqIGZyb250ZW5kKQotewotICAgIEFTU0VSVChmcm9udGVuZCk7Ci0gICAgbV9mcm9u
dGVuZCA9IGZyb250ZW5kLT53ZWJnbCgpOwotfQotCi12b2lkIEluc3BlY3RvcldlYkdMQWdlbnQ6
OmNsZWFyRnJvbnRlbmQoKQotewotICAgIG1fZnJvbnRlbmQgPSAwOwotICAgIGRpc2FibGUoMCk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yV2ViR0xBZ2VudDo6cmVzdG9yZSgpCi17Ci0gICAgbV9lbmFi
bGVkID0gbV9zdGF0ZS0+Z2V0Qm9vbGVhbihXZWJHTEFnZW50U3RhdGU6OndlYkdMQWdlbnRFbmFi
bGVkKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JXZWJHTEFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcq
KQotewotICAgIGlmIChtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2VuYWJsZWQg
PSB0cnVlOwotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oV2ViR0xBZ2VudFN0YXRlOjp3ZWJHTEFn
ZW50RW5hYmxlZCwgbV9lbmFibGVkKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JXZWJHTEFnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nKikKLXsKLSAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fZW5hYmxlZCA9IGZhbHNlOwotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oV2Vi
R0xBZ2VudFN0YXRlOjp3ZWJHTEFnZW50RW5hYmxlZCwgbV9lbmFibGVkKTsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JXZWJHTEFnZW50Ojpkcm9wVHJhY2VMb2coRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQpCi17Ci0gICAgSW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlRm9yVHJhY2VMb2dJZChlcnJv
clN0cmluZywgdHJhY2VMb2dJZCk7Ci0gICAgaWYgKCFtb2R1bGUuaGFzTm9WYWx1ZSgpKQotICAg
ICAgICBtb2R1bGUuZHJvcFRyYWNlTG9nKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JXZWJHTEFnZW50OjpjYXB0dXJlRnJhbWUoRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBTdHJpbmcqIHRyYWNlTG9nSWQpCi17Ci0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlID0gbWFpbldvcmxkU2NyaXB0U3RhdGUobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSk7
Ci0gICAgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZSBtb2R1bGUgPSBJbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlOjptb2R1bGVGb3JTdGF0ZShtX2luamVjdGVkU2NyaXB0TWFuYWdlciwgc2NyaXB0
U3RhdGUpOwotICAgIGlmIChtb2R1bGUuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgICplcnJvclN0
cmluZyA9ICJJbnNwZWN0ZWQgZnJhbWUgaGFzIGdvbmUiOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIG1vZHVsZS5jYXB0dXJlRnJhbWUoZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQpOwotfQot
Ci12b2lkIEluc3BlY3RvcldlYkdMQWdlbnQ6OmdldFRyYWNlTG9nKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6Oldl
YkdMOjpUcmFjZUxvZz4mIHRyYWNlTG9nKQotewotICAgIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1
bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZUZvclRyYWNlTG9nSWQoZXJyb3JT
dHJpbmcsIHRyYWNlTG9nSWQpOwotICAgIGlmICghbW9kdWxlLmhhc05vVmFsdWUoKSkKLSAgICAg
ICAgbW9kdWxlLnRyYWNlTG9nKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkLCAmdHJhY2VMb2cpOwot
fQotCi12b2lkIEluc3BlY3RvcldlYkdMQWdlbnQ6OnJlcGxheVRyYWNlTG9nKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkLCBpbnQgc3RlcE5vLCBTdHJp
bmcqIHJlc3VsdCkKLXsKLSAgICBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlIG1vZHVsZSA9IGlu
amVjdGVkU2NyaXB0V2ViR0xNb2R1bGVGb3JUcmFjZUxvZ0lkKGVycm9yU3RyaW5nLCB0cmFjZUxv
Z0lkKTsKLSAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIG1vZHVsZS5yZXBs
YXlUcmFjZUxvZyhlcnJvclN0cmluZywgdHJhY2VMb2dJZCwgc3RlcE5vLCByZXN1bHQpOwotfQot
Ci1TY3JpcHRPYmplY3QgSW5zcGVjdG9yV2ViR0xBZ2VudDo6d3JhcFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEZvckluc3RydW1lbnRhdGlvbihjb25zdCBTY3JpcHRPYmplY3QmIGdsQ29udGV4dCkKLXsK
LSAgICBpZiAoZ2xDb250ZXh0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOwotICAgIH0KLSAgICBJbmpl
Y3RlZFNjcmlwdFdlYkdMTW9kdWxlIG1vZHVsZSA9IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGU6
Om1vZHVsZUZvclN0YXRlKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBnbENvbnRleHQuc2NyaXB0
U3RhdGUoKSk7Ci0gICAgaWYgKG1vZHVsZS5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTY3JpcHRPYmplY3QoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIG1vZHVsZS53cmFwV2ViR0xDb250ZXh0KGdsQ29udGV4dCk7Ci19Ci0KLUluamVj
dGVkU2NyaXB0V2ViR0xNb2R1bGUgSW5zcGVjdG9yV2ViR0xBZ2VudDo6aW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZUZvclRyYWNlTG9nSWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHRyYWNlTG9nSWQpCi17Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQg
PSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZCh0cmFj
ZUxvZ0lkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAg
ICplcnJvclN0cmluZyA9ICJJbnNwZWN0ZWQgZnJhbWUgaGFzIGdvbmUiOwotICAgICAgICByZXR1
cm4gSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZSgpOwotICAgIH0KLSAgICBJbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlIG1vZHVsZSA9IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGU6Om1vZHVsZUZv
clN0YXRlKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBpbmplY3RlZFNjcmlwdC5zY3JpcHRTdGF0
ZSgpKTsKLSAgICBpZiAobW9kdWxlLmhhc05vVmFsdWUoKSkgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgKmVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiBubyBX
ZWJHTCBtb2R1bGUiOwotICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZSgp
OwotICAgIH0KLSAgICByZXR1cm4gbW9kdWxlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoV0VCR0wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldlYkdMQWdlbnQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzFiN2FmY2YzMzhjYTcxZWFlYTI4NDFhYjk5MzQ2ZGFhOWZjZThh
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5oCisrKyAvZGV2L251bGwKQEAg
LTEsOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgSW5zcGVjdG9yV2ViR0xBZ2VudF9oCi0jZGVmaW5lIEluc3Bl
Y3RvcldlYkdMQWdlbnRfaAotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKFdFQkdM
KQotCi0jaW5jbHVkZSAiSW5zcGVjdG9yQmFzZUFnZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JUeXBlQnVpbGRlci5oIgotI2luY2x1ZGUg
IlNjcmlwdFN0YXRlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLWNsYXNzIElu
amVjdGVkU2NyaXB0V2ViR0xNb2R1bGU7Ci1jbGFzcyBJbnNwZWN0b3JTdGF0ZTsKLWNsYXNzIElu
c3RydW1lbnRpbmdBZ2VudHM7Ci1jbGFzcyBQYWdlOwotY2xhc3MgU2NyaXB0T2JqZWN0OwotCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotY2xhc3MgSW5zcGVjdG9yV2ViR0xBZ2VudCA6
IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yV2ViR0xBZ2VudD4sIHB1YmxpYyBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6V2ViR0xDb21tYW5kSGFuZGxlciB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yV2ViR0xBZ2VudD4gY3JlYXRlKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBzdGF0
ZSwgUGFnZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvcldlYkdMQWdl
bnQoaW5zdHJ1bWVudGluZ0FnZW50cywgc3RhdGUsIHBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdl
cikpOwotICAgIH0KLSAgICB+SW5zcGVjdG9yV2ViR0xBZ2VudCgpOwotCi0gICAgdmlydHVhbCB2
b2lkIHNldEZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kKik7Ci0gICAgdmlydHVhbCB2b2lkIGNs
ZWFyRnJvbnRlbmQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwotCi0gICAgYm9vbCBl
bmFibGVkKCkgeyByZXR1cm4gbV9lbmFibGVkOyB9Ci0KLSAgICBTY3JpcHRPYmplY3Qgd3JhcFdl
YkdMUmVuZGVyaW5nQ29udGV4dEZvckluc3RydW1lbnRhdGlvbihjb25zdCBTY3JpcHRPYmplY3Qm
KTsKLQotICAgIC8vIENhbGxlZCBmcm9tIHRoZSBmcm9udC1lbmQuCi0gICAgdmlydHVhbCB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3Ry
aW5nKik7Ci0gICAgdmlydHVhbCB2b2lkIGRyb3BUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJlRnJhbWUoRXJyb3JTdHJpbmcqLCBT
dHJpbmcqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0VHJhY2VMb2coRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OldlYkdMOjpUcmFjZUxvZz4mKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVwbGF5VHJhY2VMb2coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBp
bnQsIFN0cmluZyopOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gdGhlIGluamVjdGVkIHNjcmlwdC4K
LQotICAgIC8vIENhbGxlZCBmcm9tIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgotCi1wcml2YXRl
OgotICAgIEluc3BlY3RvcldlYkdMQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3Rv
clN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOwotCi0gICAgSW5qZWN0ZWRT
Y3JpcHRXZWJHTE1vZHVsZSBpbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlRm9yVHJhY2VMb2dJZChF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYpOwotCi0gICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdl
OwotICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci0g
ICAgSW5zcGVjdG9yRnJvbnRlbmQ6OldlYkdMKiBtX2Zyb250ZW5kOwotICAgIGJvb2wgbV9lbmFi
bGVkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikgJiYgRU5BQkxFKFdFQkdMKQotCi0jZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
V2ViR0xBZ2VudF9oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvcldlYkdMSW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMzU2NzUyMjRiNjdjODIzNTZjZTY0OGYxZDY0ODMwYjliYjQzNWY5Yi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDU3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEluc3BlY3RvcldlYkdMSW5zdHJ1bWVudGF0aW9uX2gKLSNkZWZpbmUg
SW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb25faAotCi0jaW5jbHVkZSAiSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yV2ViR0xBZ2VudC5oIgotI2luY2x1
ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKLSNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgRU5BQkxFKFdFQkdMKQotU2NyaXB0T2JqZWN0IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d3JhcFdlYkdMUmVuZGVyaW5nQ29udGV4dEZvckluc3Ry
dW1lbnRhdGlvbihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFNjcmlwdE9iamVjdCYgZ2xDb250
ZXh0KQotewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQo
ZG9jdW1lbnQpKSB7Ci0gICAgICAgIEluc3BlY3RvcldlYkdMQWdlbnQqIHdlYkdMQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JXZWJHTEFnZW50KCk7Ci0gICAgICAgIGlmICh3
ZWJHTEFnZW50ICYmIHdlYkdMQWdlbnQtPmVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiB3
ZWJHTEFnZW50LT53cmFwV2ViR0xSZW5kZXJpbmdDb250ZXh0Rm9ySW5zdHJ1bWVudGF0aW9uKGds
Q29udGV4dCk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOwotfQot
I2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb25faCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5oCmluZGV4IDEzMzRkYzdk
NmRiN2VkYjM5MDg2Yjk2ZTNjNzg2NGNhMTc4ZjM0MWQuLjIzMDZlN2ExZThhMDU3MGEzMDMyNTVk
NjIyNmEzN2U0NDI2YTFhZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnN0cnVtZW50aW5nQWdlbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Ry
dW1lbnRpbmdBZ2VudHMuaApAQCAtMzgsMjEgKzM4LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JDYW52
YXNBZ2VudDsKIGNsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudDsKIGNsYXNzIEluc3BlY3RvckRP
TUFnZW50OworY2xhc3MgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDsKIGNsYXNzIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ7CiBjbGFzcyBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50Owor
Y2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDsK
IGNsYXNzIEluc3BlY3RvclJlc291cmNlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yV29ya2Vy
QWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JXZWJHTEFnZW50OwogY2xhc3MgUGFnZTsKIGNsYXNzIFBh
Z2VSdW50aW1lQWdlbnQ7CiBjbGFzcyBXb3JrZXJDb250ZXh0OwpAQCAtODcsOSArODcsNyBAQCBw
dWJsaWM6CiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgICAgICwgbV9pbnNwZWN0b3JXb3JrZXJB
Z2VudCgwKQogI2VuZGlmCi0jaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICAsIG1faW5zcGVjdG9y
V2ViR0xBZ2VudCgwKQotI2VuZGlmCisgICAgICAgICwgbV9pbnNwZWN0b3JDYW52YXNBZ2VudCgw
KQogICAgIHsgfQogICAgIH5JbnN0cnVtZW50aW5nQWdlbnRzKCkgeyB9CiAKQEAgLTE1MiwxMCAr
MTUwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5zcGVjdG9yV29ya2VyQWdlbnQoSW5zcGVj
dG9yV29ya2VyQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yV29ya2VyQWdlbnQgPSBhZ2VudDsg
fQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgSW5zcGVjdG9yV2ViR0xBZ2VudCog
aW5zcGVjdG9yV2ViR0xBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yV2ViR0xBZ2Vu
dDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yV2ViR0xBZ2VudChJbnNwZWN0b3JXZWJHTEFnZW50
KiBhZ2VudCkgeyBtX2luc3BlY3RvcldlYkdMQWdlbnQgPSBhZ2VudDsgfQotI2VuZGlmCisgICAg
SW5zcGVjdG9yQ2FudmFzQWdlbnQqIGluc3BlY3RvckNhbnZhc0FnZW50KCkgY29uc3QgeyByZXR1
cm4gbV9pbnNwZWN0b3JDYW52YXNBZ2VudDsgfQorICAgIHZvaWQgc2V0SW5zcGVjdG9yQ2FudmFz
QWdlbnQoSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yQ2FudmFzQWdl
bnQgPSBhZ2VudDsgfQogCiBwcml2YXRlOgogICAgIEluc3BlY3RvckFnZW50KiBtX2luc3BlY3Rv
ckFnZW50OwpAQCAtMTgzLDkgKzE3OSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFdPUktFUlMp
CiAgICAgSW5zcGVjdG9yV29ya2VyQWdlbnQqIG1faW5zcGVjdG9yV29ya2VyQWdlbnQ7CiAjZW5k
aWYKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgSW5zcGVjdG9yV2ViR0xBZ2VudCogbV9pbnNwZWN0
b3JXZWJHTEFnZW50OwotI2VuZGlmCisgICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQqIG1faW5zcGVj
dG9yQ2FudmFzQWdlbnQ7CiB9OwogCiBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50YXRp
b25Gb3JQYWdlKFBhZ2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9j
b21waWxlLWZyb250LWVuZC5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZy
b250LWVuZC5weQppbmRleCBlZjIzNWJmZjc1ZjA2YmE3YTI1OTY1YTA3NmNhZjNhNWJjNDQxM2Fj
Li5kYTg3NjNmNWMzNTE1MWYxYTg0MmUyNmJlNTA2MTgwNmE5MjNlZmU0IDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CkBAIC0zMzEsNyArMzMxLDcg
QEAgbW9kdWxlcyA9IFsKICAgICAgICAgICAgICJQcm9maWxlc1BhbmVsLmpzIiwKICAgICAgICAg
ICAgICJQcm9maWxlTGF1bmNoZXJWaWV3LmpzIiwKICAgICAgICAgICAgICJUb3BEb3duUHJvZmls
ZURhdGFHcmlkVHJlZS5qcyIsCi0gICAgICAgICAgICAiV2ViR0xQcm9maWxlVmlldy5qcyIsCisg
ICAgICAgICAgICAiQ2FudmFzUHJvZmlsZVZpZXcuanMiLAogICAgICAgICBdCiAgICAgfSwKICAg
ICB7CkBAIC00MDYsMTUgKzQwNiwxNSBAQCBpZiBub3QgcHJvY2Vzc19yZWN1cnNpdmVseToKICAg
ICBvcy5zeXN0ZW0oY29tbWFuZCkKICAgICBvcy5zeXN0ZW0oInJtICIgKyBpbnNwZWN0b3JfcGF0
aCArICIvIiArICJJbmplY3RlZFNjcmlwdFNvdXJjZVRtcC5qcyIpCiAKLSAgICBwcmludCAiQ29t
cGlsaW5nIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMuLi4iCi0gICAgb3Muc3lz
dGVtKCJlY2hvIFwidmFyIGluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVWYWx1ZSA9IFwiID4gIiAr
IGluc3BlY3Rvcl9wYXRoICsgIi8iICsgIkluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2VU
bXAuanMiKQotICAgIG9zLnN5c3RlbSgiY2F0ICAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAi
SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcyIgKyAiID4+ICIgKyBpbnNwZWN0b3Jf
cGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlVG1wLmpzIikKKyAg
ICBwcmludCAiQ29tcGlsaW5nIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzLi4u
IgorICAgIG9zLnN5c3RlbSgiZWNobyBcInZhciBpbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVZh
bHVlID0gXCIgPiAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRDYW52
YXNNb2R1bGVTb3VyY2VUbXAuanMiKQorICAgIG9zLnN5c3RlbSgiY2F0ICAiICsgaW5zcGVjdG9y
X3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMiICsgIiA+
PiAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVT
b3VyY2VUbXAuanMiKQogICAgIGNvbW1hbmQgPSBjb21waWxlcl9jb21tYW5kCiAgICAgY29tbWFu
ZCArPSAiICAgIC0tZXh0ZXJucyAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRT
Y3JpcHRFeHRlcm5zLmpzIiArICIgXFxcbiIKICAgICBjb21tYW5kICs9ICIgICAgLS1tb2R1bGUg
IiArIGpzbW9kdWxlX25hbWVfcHJlZml4ICsgImluamVjdGVkX3NjcmlwdCIgKyAiOiIgKyAiMSIg
KyAiIFxcXG4iCi0gICAgY29tbWFuZCArPSAiICAgICAgICAtLWpzICIgKyBpbnNwZWN0b3JfcGF0
aCArICIvIiArICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlVG1wLmpzIiArICIgXFxc
biIKKyAgICBjb21tYW5kICs9ICIgICAgICAgIC0tanMgIiArIGluc3BlY3Rvcl9wYXRoICsgIi8i
ICsgIkluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlVG1wLmpzIiArICIgXFxcbiIKICAg
ICBjb21tYW5kICs9ICJcbiIKICAgICBvcy5zeXN0ZW0oY29tbWFuZCkKLSAgICBvcy5zeXN0ZW0o
InJtICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
U291cmNlVG1wLmpzIikKKyAgICBvcy5zeXN0ZW0oInJtICIgKyBpbnNwZWN0b3JfcGF0aCArICIv
IiArICJJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZVRtcC5qcyIpCiAKIHNodXRpbC5y
bXRyZWUobW9kdWxlc19kaXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9DYW52YXNQcm9maWxlVmlldy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjFhZDhhMzczOTIz
ZDg4NTBhN2Q3NDFiZDc1ZTEzNDgxN2UzMWU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYW52YXNQcm9maWxlVmlldy5qcwpAQCAtMCwwICsx
LDI3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZp
ZXd9CisgKi8KK1dlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVmlldyA9IGZ1bmN0aW9uKHByb2Zp
bGUpCit7CisgICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKKyAgICB0aGlzLnJlZ2lz
dGVyUmVxdWlyZWRDU1MoImNhbnZhc1Byb2ZpbGVyLmNzcyIpOworICAgIHRoaXMuX3Byb2ZpbGUg
PSBwcm9maWxlOworICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjYW52YXMtcHJvZmls
ZS12aWV3Iik7CisKKyAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQuY2xhc3NOYW1lID0gImNh
bnZhcy10cmFjZS1sb2ciOworICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJjbGljayIsIHRoaXMuX29uVHJhY2VMb2dJdGVtQ2xpY2suYmluZCh0aGlzKSwgZmFsc2Up
OworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl90cmFjZUxvZ0VsZW1lbnQpOwor
CisgICAgdmFyIHJlcGxheUltYWdlQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7CisgICAgcmVwbGF5SW1hZ2VDb250YWluZXIuaWQgPSAiY2FudmFzLXJlcGxheS1pbWFn
ZS1jb250YWluZXIiOworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChyZXBsYXlJbWFnZUNv
bnRhaW5lcik7CisKKyAgICB0aGlzLl9yZXBsYXlJbWFnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpbWFnZSIpOworICAgIHRoaXMuX3JlcGxheUltYWdlRWxlbWVudC5pZCA9ICJj
YW52YXMtcmVwbGF5LWltYWdlIjsKKyAgICByZXBsYXlJbWFnZUNvbnRhaW5lci5hcHBlbmRDaGls
ZCh0aGlzLl9yZXBsYXlJbWFnZUVsZW1lbnQpOworCisgICAgdGhpcy5fZGVidWdJbmZvRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHJlcGxheUltYWdlQ29udGFp
bmVyLmFwcGVuZENoaWxkKHRoaXMuX2RlYnVnSW5mb0VsZW1lbnQpOworCisgICAgdGhpcy5fbGlu
a2lmaWVyID0gbmV3IFdlYkluc3BlY3Rvci5MaW5raWZpZXIoKTsKKworICAgIHRoaXMuX3Nob3dU
cmFjZUxvZygpOworfQorCitXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVZpZXcucHJvdG90eXBl
ID0geworICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xpbmtp
Zmllci5yZXNldCgpOworICAgICAgICBDYW52YXNBZ2VudC5kcm9wVHJhY2VMb2codGhpcy5fcHJv
ZmlsZS50cmFjZUxvZ0lkKCkpOworICAgIH0sCisKKyAgICBnZXQgc3RhdHVzQmFySXRlbXMoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFtdOworICAgIH0sCisKKyAgICBnZXQgcHJvZmlsZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcHJvZmlsZTsKKyAgICB9LAorCisgICAgd2FzU2hv
d246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBzY3JvbGxQb3NpdGlvbiA9IHRoaXMu
X3RyYWNlTG9nRWxlbWVudFNjcm9sbFBvc2l0aW9uOworICAgICAgICBkZWxldGUgdGhpcy5fdHJh
Y2VMb2dFbGVtZW50U2Nyb2xsUG9zaXRpb247CisgICAgICAgIGlmIChzY3JvbGxQb3NpdGlvbikg
eworICAgICAgICAgICAgdGhpcy5fdHJhY2VMb2dFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFBv
c2l0aW9uLnRvcDsKKyAgICAgICAgICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudC5zY3JvbGxMZWZ0
ID0gc2Nyb2xsUG9zaXRpb24ubGVmdDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICB3aWxsSGlk
ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fdHJhY2VMb2dFbGVtZW50U2Nyb2xs
UG9zaXRpb24gPSB7CisgICAgICAgICAgICB0b3A6IHRoaXMuX3RyYWNlTG9nRWxlbWVudC5zY3Jv
bGxUb3AsCisgICAgICAgICAgICBsZWZ0OiB0aGlzLl90cmFjZUxvZ0VsZW1lbnQuc2Nyb2xsTGVm
dAorICAgICAgICB9OworICAgIH0sCisKKyAgICBfc2hvd1RyYWNlTG9nOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBmdW5jdGlvbiBkaWRSZWNlaXZlVHJhY2VMb2coZXJyb3IsIHRyYWNlTG9n
KQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQudGV4dENvbnRl
bnQgPSAiIjsKKyAgICAgICAgICAgIGlmICghdHJhY2VMb2cpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgdmFyIGNhbGxzID0gdHJhY2VMb2cuY2FsbHM7CisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbiA9IGNhbGxzLmxlbmd0aDsgaSA8IG47ICsraSkgeworICAgICAg
ICAgICAgICAgIHZhciBjYWxsID0gY2FsbHNbaV07CisgICAgICAgICAgICAgICAgdmFyIHRyYWNl
TG9nSXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgICAg
IHRyYWNlTG9nSXRlbS50cmFjZUxvZ0lkID0gdHJhY2VMb2cuaWQ7CisgICAgICAgICAgICAgICAg
dHJhY2VMb2dJdGVtLnN0ZXBObyA9IGk7CisgICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIoIiArIChpKzEpICsgIikgIikpOwor
CisgICAgICAgICAgICAgICAgaWYgKGNhbGwuc291cmNlVVJMKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FKDYyNzI1KTogc3RhY2sgdHJhY2UgbGluZS9jb2x1bW4gbnVtYmVycyBhcmUg
b25lLWJhc2VkLgorICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IE1hdGgubWF4
KDAsIGNhbGwubGluZU51bWJlciAtIDEpIHx8IDA7CisgICAgICAgICAgICAgICAgICAgIHZhciBj
b2x1bW5OdW1iZXIgPSBNYXRoLm1heCgwLCBjYWxsLmNvbHVtbk51bWJlciAtIDEpIHx8IDA7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBsaW5rRWxlbWVudCA9IHRoaXMuX2xpbmtpZmllci5saW5r
aWZ5TG9jYXRpb24oY2FsbC5zb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmtFbGVtZW50LnRleHRDb250ZW50ID0gY2FsbC5mdW5jdGlv
bk5hbWU7CisgICAgICAgICAgICAgICAgICAgIHRyYWNlTG9nSXRlbS5hcHBlbmRDaGlsZChsaW5r
RWxlbWVudCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRy
YWNlTG9nSXRlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjYWxsLmZ1bmN0
aW9uTmFtZSkpOworCisgICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCIoIiArIGNhbGwuYXJndW1lbnRzLmpvaW4oIiwgIikgKyAi
KSIpKTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGwucmVzdWx0ICE9PSAidW5kZWZp
bmVkIikKKyAgICAgICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCIgPT4gIiArIGNhbGwucmVzdWx0KSk7CisgICAgICAgICAgICAg
ICAgdGhpcy5fdHJhY2VMb2dFbGVtZW50LmFwcGVuZENoaWxkKHRyYWNlTG9nSXRlbSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQ2FudmFzQWdlbnQuZ2V0VHJhY2VMb2codGhp
cy5fcHJvZmlsZS50cmFjZUxvZ0lkKCksIGRpZFJlY2VpdmVUcmFjZUxvZy5iaW5kKHRoaXMpKTsK
KyAgICB9LAorCisgICAgX29uVHJhY2VMb2dJdGVtQ2xpY2s6IGZ1bmN0aW9uKGUpCisgICAgewor
ICAgICAgICB2YXIgaXRlbSA9IGUudGFyZ2V0OworICAgICAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0u
dHJhY2VMb2dJZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIHRpbWUgPSBEYXRl
Lm5vdygpOworICAgICAgICBmdW5jdGlvbiBkaWRSZXBsYXlUcmFjZUxvZyhlcnJvciwgZGF0YVVS
TCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5fZGVidWdJbmZvRWxlbWVudC50ZXh0Q29u
dGVudCA9ICJSZXBsYXkgdGltZTogIiArIChEYXRlLm5vdygpIC0gdGltZSkgKyAibXMiOworICAg
ICAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRyYWNlTG9nSXRlbSkKKyAgICAgICAgICAgICAgICB0
aGlzLl9hY3RpdmVUcmFjZUxvZ0l0ZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiI7CisgICAg
ICAgICAgICB0aGlzLl9hY3RpdmVUcmFjZUxvZ0l0ZW0gPSBpdGVtOworICAgICAgICAgICAgdGhp
cy5fYWN0aXZlVHJhY2VMb2dJdGVtLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICJ5ZWxsb3ciOwor
ICAgICAgICAgICAgdGhpcy5fcmVwbGF5SW1hZ2VFbGVtZW50LnNyYyA9IGRhdGFVUkw7CisgICAg
ICAgIH0KKyAgICAgICAgQ2FudmFzQWdlbnQucmVwbGF5VHJhY2VMb2coaXRlbS50cmFjZUxvZ0lk
LCBpdGVtLnN0ZXBObywgZGlkUmVwbGF5VHJhY2VMb2cuYmluZCh0aGlzKSk7CisgICAgfQorfQor
CitXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVZpZXcucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdl
Ykluc3BlY3Rvci5WaWV3LnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBl
eHRlbmRzIHtXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGV9CisgKi8KK1dlYkluc3BlY3Rvci5DYW52
YXNQcm9maWxlVHlwZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5
cGUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUuVHlwZUlkLCBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkNhcHR1cmUgQ2FudmFzIEZyYW1lIikpOworICAgIHRoaXMuX25l
eHRQcm9maWxlVWlkID0gMTsKKyAgICAvLyBGSVhNRTogZW5hYmxlL2Rpc2FibGUgYnkgYSBVSSBh
Y3Rpb24/CisgICAgQ2FudmFzQWdlbnQuZW5hYmxlKCk7Cit9CisKK1dlYkluc3BlY3Rvci5DYW52
YXNQcm9maWxlVHlwZS5UeXBlSWQgPSAiQ0FOVkFTX1BST0ZJTEUiOworCitXZWJJbnNwZWN0b3Iu
Q2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBlID0geworICAgIGdldCBidXR0b25Ub29sdGlwKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhcHR1cmUgQ2Fu
dmFzIEZyYW1lLiIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCisgICAg
ICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBidXR0b25DbGlja2VkOiBmdW5jdGlv
bihwcm9maWxlc1BhbmVsKQorICAgIHsKKyAgICAgICAgdmFyIHByb2ZpbGVIZWFkZXIgPSBuZXcg
V2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVIZWFkZXIodGhpcywgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJUcmFjZSBMb2cgJWQiLCB0aGlzLl9uZXh0UHJvZmlsZVVpZCksIHRoaXMuX25leHRQcm9m
aWxlVWlkKTsKKyAgICAgICAgKyt0aGlzLl9uZXh0UHJvZmlsZVVpZDsKKyAgICAgICAgcHJvZmls
ZUhlYWRlci5pc1RlbXBvcmFyeSA9IHRydWU7CisgICAgICAgIHByb2ZpbGVzUGFuZWwuYWRkUHJv
ZmlsZUhlYWRlcihwcm9maWxlSGVhZGVyKTsKKyAgICAgICAgZnVuY3Rpb24gZGlkU3RhcnRDYXB0
dXJpbmdGcmFtZShlcnJvciwgdHJhY2VMb2dJZCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJv
ZmlsZUhlYWRlci5fdHJhY2VMb2dJZCA9IHRyYWNlTG9nSWQ7CisgICAgICAgICAgICBwcm9maWxl
SGVhZGVyLmlzVGVtcG9yYXJ5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgQ2FudmFzQWdl
bnQuY2FwdHVyZUZyYW1lKGRpZFN0YXJ0Q2FwdHVyaW5nRnJhbWUuYmluZCh0aGlzKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9LAorCisgICAgZ2V0IHRyZWVJdGVtVGl0bGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ0FOVkFTIFBST0ZJTEUi
KTsKKyAgICB9LAorCisgICAgZ2V0IGRlc2NyaXB0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhbnZhcyBjYWxscyBpbnN0cnVtZW50YXRpb24iKTsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICovCisgICAgcmVzZXQ6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX25leHRQcm9maWxlVWlkID0gMTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtzdHJpbmc9
fSB0aXRsZQorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQorICAg
ICAqLworICAgIGNyZWF0ZVRlbXBvcmFyeVByb2ZpbGU6IGZ1bmN0aW9uKHRpdGxlKQorICAgIHsK
KyAgICAgICAgdGl0bGUgPSB0aXRsZSB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhcHR1cmlu
Z1x1MjAyNiIpOworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxl
SGVhZGVyKHRoaXMsIHRpdGxlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRl
CisgICAgICogQHBhcmFtIHtQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKKyAg
ICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KKyAgICAgKi8KKyAgICBj
cmVhdGVQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZUhlYWRlcih0aGlzLCBwcm9maWxlLnRpdGxlLCAt
MSk7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5cGU7CisKKy8qKgor
ICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9
CisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZX0gdHlwZQorICogQHBh
cmFtIHtzdHJpbmd9IHRpdGxlCisgKiBAcGFyYW0ge251bWJlcj19IHVpZAorICovCitXZWJJbnNw
ZWN0b3IuQ2FudmFzUHJvZmlsZUhlYWRlciA9IGZ1bmN0aW9uKHR5cGUsIHRpdGxlLCB1aWQpCit7
CisgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIuY2FsbCh0aGlzLCB0eXBlLCB0aXRsZSwg
dWlkKTsKKworICAgIC8qKgorICAgICAqIEB0eXBlIHtzdHJpbmc/fQorICAgICAqLworICAgIHRo
aXMuX3RyYWNlTG9nSWQgPSBudWxsOworfQorCitXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZUhl
YWRlci5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVybiB7c3RyaW5nP30KKyAg
ICAgKi8KKyAgICB0cmFjZUxvZ0lkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3RyYWNlTG9nSWQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAq
LworICAgIGNyZWF0ZVNpZGViYXJUcmVlRWxlbWVudDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuUHJvZmlsZVNpZGViYXJUcmVlRWxlbWVudCh0aGlz
LCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRyYWNlIExvZyAlZCIpLCAicHJvZmlsZS1zaWRlYmFy
LXRyZWUtaXRlbSIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCisgICAg
ICovCisgICAgY3JlYXRlVmlldzogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVWaWV3KHRoaXMpOworICAg
IH0KK30KKworV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVIZWFkZXIucHJvdG90eXBlLl9fcHJv
dG9fXyA9IFdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyLnByb3RvdHlwZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwppbmRleCA2
YThiNGQ4OWY1M2Q2OTNhMDVhZTNhNGU2ZjA3MTJkMDkzNWExODg0Li5kMGQyMGFhNjlhY2VkZGU2
ZDU1OWYwNzFkOGU2ZmEyNDE1MmIwNWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCkBAIC0yNDgsOCArMjQ4LDggQEAgV2Vi
SW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwgPSBmdW5jdGlvbigpCiAgICAgICAgIHRoaXMuX3JlZ2lz
dGVyUHJvZmlsZVR5cGUobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZSgp
KTsKICAgICBpZiAoV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRzU2V0dGluZ3MubmF0aXZlTWVtb3J5
U25hcHNob3RzLmlzRW5hYmxlZCgpKQogICAgICAgICB0aGlzLl9yZWdpc3RlclByb2ZpbGVUeXBl
KG5ldyBXZWJJbnNwZWN0b3IuTmF0aXZlTWVtb3J5UHJvZmlsZVR5cGUoKSk7Ci0gICAgaWYgKFdl
Ykluc3BlY3Rvci5leHBlcmltZW50c1NldHRpbmdzLndlYkdMSW5zcGVjdGlvbi5pc0VuYWJsZWQo
KSkKLSAgICAgICAgdGhpcy5fcmVnaXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5zcGVjdG9yLldl
YkdMUHJvZmlsZVR5cGUoKSk7CisgICAgaWYgKFdlYkluc3BlY3Rvci5leHBlcmltZW50c1NldHRp
bmdzLmNhbnZhc0luc3BlY3Rpb24uaXNFbmFibGVkKCkpCisgICAgICAgIHRoaXMuX3JlZ2lzdGVy
UHJvZmlsZVR5cGUobmV3IFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZSgpKTsKIAogICAg
IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJQcm9maWxlckRpc3BhdGNoZXIobmV3IFdlYkluc3Bl
Y3Rvci5Qcm9maWxlckRpc3BhdGNoZXIodGhpcykpOwogCkBAIC0xMzE5LDQgKzEzMTksNCBAQCBp
bXBvcnRTY3JpcHQoIkhlYXBTbmFwc2hvdFdvcmtlckRpc3BhdGNoZXIuanMiKTsKIGltcG9ydFNj
cmlwdCgiTmF0aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzIik7CiBpbXBvcnRTY3JpcHQoIlByb2Zp
bGVMYXVuY2hlclZpZXcuanMiKTsKIGltcG9ydFNjcmlwdCgiVG9wRG93blByb2ZpbGVEYXRhR3Jp
ZFRyZWUuanMiKTsKLWltcG9ydFNjcmlwdCgiV2ViR0xQcm9maWxlVmlldy5qcyIpOworaW1wb3J0
U2NyaXB0KCJDYW52YXNQcm9maWxlVmlldy5qcyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKaW5kZXggZTM1Mzg0YjA0ZTJjMDNlNDUyZmQxMTA0
YjNlNDAyNGQyMDBjYzA3ZS4uYTEzOGNiNjU4NTE1NTU0OTFhMjY1NWRmNDA4NzhlNTIzOTU3OTU2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5n
cy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpz
CkBAIC0xOTEsNyArMTkxLDcgQEAgV2ViSW5zcGVjdG9yLkV4cGVyaW1lbnRzU2V0dGluZ3MgPSBm
dW5jdGlvbigpCiAgICAgdGhpcy5uYXRpdmVNZW1vcnlTbmFwc2hvdHMgPSB0aGlzLl9jcmVhdGVF
eHBlcmltZW50KCJuYXRpdmVNZW1vcnlTbmFwc2hvdHMiLCAiTmF0aXZlIG1lbW9yeSBwcm9maWxp
bmciKTsKICAgICB0aGlzLmxpdmVOYXRpdmVNZW1vcnlDaGFydCA9IHRoaXMuX2NyZWF0ZUV4cGVy
aW1lbnQoImxpdmVOYXRpdmVNZW1vcnlDaGFydCIsICJMaXZlIG5hdGl2ZSBtZW1vcnkgY2hhcnQi
KTsKICAgICB0aGlzLmZpbGVTeXN0ZW1JbnNwZWN0aW9uID0gdGhpcy5fY3JlYXRlRXhwZXJpbWVu
dCgiZmlsZVN5c3RlbUluc3BlY3Rpb24iLCAiRmlsZVN5c3RlbSBpbnNwZWN0aW9uIik7Ci0gICAg
dGhpcy53ZWJHTEluc3BlY3Rpb24gPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJ3ZWJHTEluc3Bl
Y3Rpb24gIiwgIldlYkdMIGluc3BlY3Rpb24iKTsKKyAgICB0aGlzLmNhbnZhc0luc3BlY3Rpb24g
PSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJjYW52YXNJbnNwZWN0aW9uICIsICJDYW52YXMgaW5z
cGVjdGlvbiIpOwogICAgIHRoaXMubWFpblRocmVhZE1vbml0b3JpbmcgPSB0aGlzLl9jcmVhdGVF
eHBlcmltZW50KCJtYWluVGhyZWFkTW9uaXRvcmluZyIsICJTaG93IENQVSBhY3Rpdml0eSBpbiBU
aW1lbGluZSIpOwogICAgIHRoaXMuZ2VvbG9jYXRpb25PdmVycmlkZSA9IHRoaXMuX2NyZWF0ZUV4
cGVyaW1lbnQoImdlb2xvY2F0aW9uT3ZlcnJpZGUiLCAiT3ZlcnJpZGUgRGV2aWNlIEdlb2xvY2F0
aW9uIik7CiAgICAgdGhpcy5kZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRlID0gdGhpcy5fY3JlYXRl
RXhwZXJpbWVudCgiZGV2aWNlT3JpZW50YXRpb25PdmVycmlkZSIsICJPdmVycmlkZSBEZXZpY2Ug
T3JpZW50YXRpb24iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvV2ViR0xQcm9maWxlVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvV2ViR0xQcm9maWxlVmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjAyODUzNmM4ODIxMTQzMGViYTg5NzlhZGM2Y2EzNThmYzYwMDIwYi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1dlYkdMUHJvZmlsZVZpZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9
Ci0gKi8KLVdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVWaWV3ID0gZnVuY3Rpb24ocHJvZmlsZSkK
LXsKLSAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotICAgIHRoaXMucmVnaXN0ZXJS
ZXF1aXJlZENTUygid2ViR0xQcm9maWxlci5jc3MiKTsKLSAgICB0aGlzLl9wcm9maWxlID0gcHJv
ZmlsZTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygid2ViZ2wtcHJvZmlsZS12aWV3
Iik7Ci0KLSAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQuY2xhc3NOYW1lID0gIndlYmdsLXRy
YWNlLWxvZyI7Ci0gICAgdGhpcy5fdHJhY2VMb2dFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNs
aWNrIiwgdGhpcy5fb25UcmFjZUxvZ0l0ZW1DbGljay5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAg
dGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3RyYWNlTG9nRWxlbWVudCk7Ci0KLSAgICB2
YXIgcmVwbGF5SW1hZ2VDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
LSAgICByZXBsYXlJbWFnZUNvbnRhaW5lci5pZCA9ICJ3ZWJnbC1yZXBsYXktaW1hZ2UtY29udGFp
bmVyIjsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocmVwbGF5SW1hZ2VDb250YWluZXIp
OwotCi0gICAgdGhpcy5fcmVwbGF5SW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiaW1hZ2UiKTsKLSAgICB0aGlzLl9yZXBsYXlJbWFnZUVsZW1lbnQuaWQgPSAid2ViZ2wtcmVw
bGF5LWltYWdlIjsKLSAgICByZXBsYXlJbWFnZUNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9y
ZXBsYXlJbWFnZUVsZW1lbnQpOwotCi0gICAgdGhpcy5fZGVidWdJbmZvRWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHJlcGxheUltYWdlQ29udGFpbmVyLmFwcGVu
ZENoaWxkKHRoaXMuX2RlYnVnSW5mb0VsZW1lbnQpOwotCi0gICAgdGhpcy5fbGlua2lmaWVyID0g
bmV3IFdlYkluc3BlY3Rvci5MaW5raWZpZXIoKTsKLQotICAgIHRoaXMuX3Nob3dUcmFjZUxvZygp
OwotfQotCi1XZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxlVmlldy5wcm90b3R5cGUgPSB7Ci0gICAg
ZGlzcG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbGlua2lmaWVyLnJlc2V0
KCk7Ci0gICAgICAgIFdlYkdMQWdlbnQuZHJvcFRyYWNlTG9nKHRoaXMuX3Byb2ZpbGUudHJhY2VM
b2dJZCgpKTsKLSAgICB9LAotCi0gICAgZ2V0IHN0YXR1c0Jhckl0ZW1zKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBbXTsKLSAgICB9LAotCi0gICAgZ2V0IHByb2ZpbGUoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX3Byb2ZpbGU7Ci0gICAgfSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB2YXIgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLl90cmFjZUxvZ0Vs
ZW1lbnRTY3JvbGxQb3NpdGlvbjsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3RyYWNlTG9nRWxlbWVu
dFNjcm9sbFBvc2l0aW9uOwotICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24pIHsKLSAgICAgICAg
ICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxQb3NpdGlvbi50b3A7
Ci0gICAgICAgICAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbFBv
c2l0aW9uLmxlZnQ7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgd2lsbEhpZGU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudFNjcm9sbFBvc2l0aW9uID0g
ewotICAgICAgICAgICAgdG9wOiB0aGlzLl90cmFjZUxvZ0VsZW1lbnQuc2Nyb2xsVG9wLAotICAg
ICAgICAgICAgbGVmdDogdGhpcy5fdHJhY2VMb2dFbGVtZW50LnNjcm9sbExlZnQKLSAgICAgICAg
fTsKLSAgICB9LAotCi0gICAgX3Nob3dUcmFjZUxvZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgZnVuY3Rpb24gZGlkUmVjZWl2ZVRyYWNlTG9nKGVycm9yLCB0cmFjZUxvZykKLSAgICAgICAg
ewotICAgICAgICAgICAgdGhpcy5fdHJhY2VMb2dFbGVtZW50LnRleHRDb250ZW50ID0gIiI7Ci0g
ICAgICAgICAgICBpZiAoIXRyYWNlTG9nKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIHZhciBjYWxscyA9IHRyYWNlTG9nLmNhbGxzOwotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDAsIG4gPSBjYWxscy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2
YXIgY2FsbCA9IGNhbGxzW2ldOwotICAgICAgICAgICAgICAgIHZhciB0cmFjZUxvZ0l0ZW0gPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICB0cmFjZUxvZ0l0
ZW0udHJhY2VMb2dJZCA9IHRyYWNlTG9nLmlkOwotICAgICAgICAgICAgICAgIHRyYWNlTG9nSXRl
bS5zdGVwTm8gPSBpOwotICAgICAgICAgICAgICAgIHRyYWNlTG9nSXRlbS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiKCIgKyAoaSsxKSArICIpICIpKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChjYWxsLnNvdXJjZVVSTCkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RSg2MjcyNSk6IHN0YWNrIHRyYWNlIGxpbmUvY29sdW1uIG51bWJlcnMgYXJlIG9uZS1iYXNlZC4K
LSAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBNYXRoLm1heCgwLCBjYWxsLmxp
bmVOdW1iZXIgLSAxKSB8fCAwOwotICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVy
ID0gTWF0aC5tYXgoMCwgY2FsbC5jb2x1bW5OdW1iZXIgLSAxKSB8fCAwOwotICAgICAgICAgICAg
ICAgICAgICB2YXIgbGlua0VsZW1lbnQgPSB0aGlzLl9saW5raWZpZXIubGlua2lmeUxvY2F0aW9u
KGNhbGwuc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAg
ICAgICAgICBsaW5rRWxlbWVudC50ZXh0Q29udGVudCA9IGNhbGwuZnVuY3Rpb25OYW1lOwotICAg
ICAgICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0uYXBwZW5kQ2hpbGQobGlua0VsZW1lbnQpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0u
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2FsbC5mdW5jdGlvbk5hbWUpKTsK
LQotICAgICAgICAgICAgICAgIHRyYWNlTG9nSXRlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgiKCIgKyBjYWxsLmFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsLnJlc3VsdCAhPT0gInVuZGVmaW5lZCIpCi0gICAg
ICAgICAgICAgICAgICAgIHRyYWNlTG9nSXRlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgiID0+ICIgKyBjYWxsLnJlc3VsdCkpOwotICAgICAgICAgICAgICAgIHRoaXMuX3Ry
YWNlTG9nRWxlbWVudC5hcHBlbmRDaGlsZCh0cmFjZUxvZ0l0ZW0pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIFdlYkdMQWdlbnQuZ2V0VHJhY2VMb2codGhpcy5fcHJvZmlsZS50
cmFjZUxvZ0lkKCksIGRpZFJlY2VpdmVUcmFjZUxvZy5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0g
ICAgX29uVHJhY2VMb2dJdGVtQ2xpY2s6IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICB2YXIg
aXRlbSA9IGUudGFyZ2V0OwotICAgICAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0udHJhY2VMb2dJZCkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpOwotICAg
ICAgICBmdW5jdGlvbiBkaWRSZXBsYXlUcmFjZUxvZyhlcnJvciwgZGF0YVVSTCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdGhpcy5fZGVidWdJbmZvRWxlbWVudC50ZXh0Q29udGVudCA9ICJSZXBs
YXkgdGltZTogIiArIChEYXRlLm5vdygpIC0gdGltZSkgKyAibXMiOwotICAgICAgICAgICAgaWYg
KHRoaXMuX2FjdGl2ZVRyYWNlTG9nSXRlbSkKLSAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVU
cmFjZUxvZ0l0ZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiI7Ci0gICAgICAgICAgICB0aGlz
Ll9hY3RpdmVUcmFjZUxvZ0l0ZW0gPSBpdGVtOwotICAgICAgICAgICAgdGhpcy5fYWN0aXZlVHJh
Y2VMb2dJdGVtLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICJ5ZWxsb3ciOwotICAgICAgICAgICAg
dGhpcy5fcmVwbGF5SW1hZ2VFbGVtZW50LnNyYyA9IGRhdGFVUkw7Ci0gICAgICAgIH0KLSAgICAg
ICAgV2ViR0xBZ2VudC5yZXBsYXlUcmFjZUxvZyhpdGVtLnRyYWNlTG9nSWQsIGl0ZW0uc3RlcE5v
LCBkaWRSZXBsYXlUcmFjZUxvZy5iaW5kKHRoaXMpKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rv
ci5XZWJHTFByb2ZpbGVWaWV3LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVmll
dy5wcm90b3R5cGU7Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5z
cGVjdG9yLlByb2ZpbGVUeXBlfQotICovCi1XZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxlVHlwZSA9
IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUuY2FsbCh0aGlzLCBX
ZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxlVHlwZS5UeXBlSWQsIFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiQ2FwdHVyZSBXZWJHTCBGcmFtZSIpKTsKLSAgICB0aGlzLl9uZXh0UHJvZmlsZVVpZCA9IDE7
Ci0gICAgLy8gRklYTUU6IGVuYWJsZS9kaXNhYmxlIGJ5IGEgVUkgYWN0aW9uPwotICAgIFdlYkdM
QWdlbnQuZW5hYmxlKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVUeXBlLlR5cGVJ
ZCA9ICJXRUJHTF9QUk9GSUxFIjsKLQotV2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZVR5cGUucHJv
dG90eXBlID0gewotICAgIGdldCBidXR0b25Ub29sdGlwKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhcHR1cmUgV2ViR0wgZnJhbWUuIik7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQot
ICAgICAqLwotICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCi0gICAg
ewotICAgICAgICB2YXIgcHJvZmlsZUhlYWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuV2ViR0xQcm9m
aWxlSGVhZGVyKHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVHJhY2UgTG9nICVkIiwgdGhp
cy5fbmV4dFByb2ZpbGVVaWQpLCB0aGlzLl9uZXh0UHJvZmlsZVVpZCk7Ci0gICAgICAgICsrdGhp
cy5fbmV4dFByb2ZpbGVVaWQ7Ci0gICAgICAgIHByb2ZpbGVIZWFkZXIuaXNUZW1wb3JhcnkgPSB0
cnVlOwotICAgICAgICBwcm9maWxlc1BhbmVsLmFkZFByb2ZpbGVIZWFkZXIocHJvZmlsZUhlYWRl
cik7Ci0gICAgICAgIGZ1bmN0aW9uIGRpZFN0YXJ0Q2FwdHVyaW5nRnJhbWUoZXJyb3IsIHRyYWNl
TG9nSWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByb2ZpbGVIZWFkZXIuX3RyYWNlTG9nSWQg
PSB0cmFjZUxvZ0lkOwotICAgICAgICAgICAgcHJvZmlsZUhlYWRlci5pc1RlbXBvcmFyeSA9IGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIFdlYkdMQWdlbnQuY2FwdHVyZUZyYW1lKGRpZFN0YXJ0
Q2FwdHVyaW5nRnJhbWUuYmluZCh0aGlzKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
LAotCi0gICAgZ2V0IHRyZWVJdGVtVGl0bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiV0VCR0wgUFJPRklMRSIpOwotICAgIH0sCi0KLSAgICBnZXQgZGVz
Y3JpcHRpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
V2ViR0wgY2FsbHMgaW5zdHJ1bWVudGF0aW9uIik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBvdmVycmlkZQotICAgICAqLwotICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB0aGlzLl9uZXh0UHJvZmlsZVVpZCA9IDE7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBv
dmVycmlkZQotICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gdGl0bGUKLSAgICAgKiBAcmV0dXJuIHtX
ZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KLSAgICAgKi8KLSAgICBjcmVhdGVUZW1wb3JhcnlQ
cm9maWxlOiBmdW5jdGlvbih0aXRsZSkKLSAgICB7Ci0gICAgICAgIHRpdGxlID0gdGl0bGUgfHwg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDYXB0dXJpbmdcdTIwMjYiKTsKLSAgICAgICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxlSGVhZGVyKHRoaXMsIHRpdGxlKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtQcm9maWxlckFn
ZW50LlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
UHJvZmlsZUhlYWRlcn0KLSAgICAgKi8KLSAgICBjcmVhdGVQcm9maWxlOiBmdW5jdGlvbihwcm9m
aWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxl
SGVhZGVyKHRoaXMsIHByb2ZpbGUudGl0bGUsIC0xKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rv
ci5XZWJHTFByb2ZpbGVUeXBlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUHJv
ZmlsZVR5cGUucHJvdG90eXBlOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMg
e1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuV2Vi
R0xQcm9maWxlVHlwZX0gdHlwZQotICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlCi0gKiBAcGFyYW0g
e251bWJlcj19IHVpZAotICovCi1XZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxlSGVhZGVyID0gZnVu
Y3Rpb24odHlwZSwgdGl0bGUsIHVpZCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRl
ci5jYWxsKHRoaXMsIHR5cGUsIHRpdGxlLCB1aWQpOwotCi0gICAgLyoqCi0gICAgICogQHR5cGUg
e3N0cmluZz99Ci0gICAgICovCi0gICAgdGhpcy5fdHJhY2VMb2dJZCA9IG51bGw7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5XZWJHTFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge3N0cmluZz99Ci0gICAgICovCi0gICAgdHJhY2VMb2dJZDogZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90cmFjZUxvZ0lkOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICBjcmVhdGVTaWRlYmFyVHJlZUVsZW1lbnQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlByb2Zp
bGVTaWRlYmFyVHJlZUVsZW1lbnQodGhpcywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUcmFjZSBM
b2cgJWQiKSwgInByb2ZpbGUtc2lkZWJhci10cmVlLWl0ZW0iKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJvZmlsZXNQ
YW5lbH0gcHJvZmlsZXNQYW5lbAotICAgICAqLwotICAgIGNyZWF0ZVZpZXc6IGZ1bmN0aW9uKHBy
b2ZpbGVzUGFuZWwpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5XZWJH
TFByb2ZpbGVWaWV3KHRoaXMpOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLldlYkdMUHJvZmls
ZUhlYWRlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIu
cHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9XZWJLaXQucXJjIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQu
cXJjCmluZGV4IDJlMWUyYTI4NGZiN2Q3OGE4MjE1Y2EzZmNkYTA3ZjQzNWRmZWFlMDEuLjc3NWI3
ZTY2NDIwMDgwNDUxYTg1OWVjY2FkNTlhZjhkODAyZjk2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTE0LDYgKzE0LDcgQEAKICAgICA8
ZmlsZT5CcmVha3BvaW50TWFuYWdlci5qczwvZmlsZT4KICAgICA8ZmlsZT5CcmVha3BvaW50c1Np
ZGViYXJQYW5lLmpzPC9maWxlPgogICAgIDxmaWxlPkNhbGxTdGFja1NpZGViYXJQYW5lLmpzPC9m
aWxlPgorICAgIDxmaWxlPkNhbnZhc1Byb2ZpbGVWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkNo
ZWNrYm94LmpzPC9maWxlPgogICAgIDxmaWxlPkNvZGVNaXJyb3JUZXh0RWRpdG9yLmpzPC9maWxl
PgogICAgIDxmaWxlPkNvbG9yLmpzPC9maWxlPgpAQCAtMjA5LDEzICsyMTAsMTMgQEAKICAgICA8
ZmlsZT51dGlsaXRpZXMuanM8L2ZpbGU+CiAgICAgPGZpbGU+Vmlldy5qczwvZmlsZT4KICAgICA8
ZmlsZT5XYXRjaEV4cHJlc3Npb25zU2lkZWJhclBhbmUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+V2Vi
R0xQcm9maWxlVmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5Xb3JrZXJNYW5hZ2VyLmpzPC9maWxl
PgogICAgIDxmaWxlPldvcmtlcnNTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5Xb3Jr
c3BhY2UuanM8L2ZpbGU+CiAgICAgPGZpbGU+VWdsaWZ5SlMvcGFyc2UtanMuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+YXVkaXRzUGFuZWwuY3NzPC9maWxlPgogICAgIDxmaWxlPmJyZWFkY3J1bWJMaXN0
LmNzczwvZmlsZT4KKyAgICA8ZmlsZT5jYW52YXNQcm9maWxlci5jc3M8L2ZpbGU+CiAgICAgPGZp
bGU+Y3NzTmFtZWRGbG93cy5jc3M8L2ZpbGU+CiAgICAgPGZpbGU+ZGF0YUdyaWQuY3NzPC9maWxl
PgogICAgIDxmaWxlPmNtZGV2dG9vbHMuY3NzPC9maWxlPgpAQCAtMjQ0LDcgKzI0NSw2IEBACiAg
ICAgPGZpbGU+dGV4dEVkaXRvci5jc3M8L2ZpbGU+CiAgICAgPGZpbGU+dGV4dFByb21wdC5jc3M8
L2ZpbGU+CiAgICAgPGZpbGU+dGltZWxpbmVQYW5lbC5jc3M8L2ZpbGU+Ci0gICAgPGZpbGU+d2Vi
R0xQcm9maWxlci5jc3M8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2FwcGxpY2F0aW9uQ2FjaGUu
cG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9iYWNrLnBuZzwvZmlsZT4KICAgICA8ZmlsZT5J
bWFnZXMvYnJlYWtwb2ludEJvcmRlci5wbmc8L2ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NhbnZhc1Byb2ZpbGVyLmNzcyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY2FudmFzUHJvZmlsZXIuY3NzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNi
NGI0YTUzMGQwZWM2OTRjYjFiODUxYjBjMWYwNjAyNDA4YmJhOWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NhbnZhc1Byb2ZpbGVyLmNzcwpA
QCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLmNhbnZhcy1wcm9maWxlLXZpZXcgeworICAgIG92ZXJmbG93OiBoaWRk
ZW47CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBsZWZ0OiAwOwor
ICAgIHJpZ2h0OiAwOworICAgIGJvdHRvbTogMDsKK30KKworLmNhbnZhcy10cmFjZS1sb2cgewor
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDEwcHg7CisgICAgbGVmdDogMDsKKyAg
ICBib3R0b206IDEwcHg7CisgICAgZm9udC1zaXplOiAxM3B4OworICAgIG92ZXJmbG93OiBhdXRv
OworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgcGFkZGluZzogMCAyMHB4OworfQorCisu
Y2FudmFzLXRyYWNlLWxvZyBkaXYgeworICAgIHBhZGRpbmctYm90dG9tOiA0cHg7Cit9CisKKyNj
YW52YXMtcmVwbGF5LWltYWdlLWNvbnRhaW5lciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgIHJpZ2h0OiAwOworICAgIHRvcDogMDsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJhY2tn
cm91bmQtY29sb3I6IHdoaXRlOworfQorCisjY2FudmFzLXJlcGxheS1pbWFnZSB7CisgICAgd2lk
dGg6IDQwMHB4OworICAgIGhlaWdodDogNDAwcHg7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3dlYkdMUHJvZmls
ZXIuY3NzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC93ZWJHTFByb2ZpbGVy
LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmExNjgxYTYzYzQzOGNhZWFkYjIz
MWUyNTM2NzNmNjBjOGQ2YjE4ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3dlYkdMUHJvZmls
ZXIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS53ZWJnbC1wcm9maWxlLXZpZXcg
ewotICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRv
cDogMDsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGJvdHRvbTogMDsKLX0KLQot
LndlYmdsLXRyYWNlLWxvZyB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMTBw
eDsKLSAgICBsZWZ0OiAwOwotICAgIGJvdHRvbTogMTBweDsKLSAgICBmb250LXNpemU6IDEzcHg7
Ci0gICAgb3ZlcmZsb3c6IGF1dG87Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICBwYWRk
aW5nOiAwIDIwcHg7Ci19Ci0KLS53ZWJnbC10cmFjZS1sb2cgZGl2IHsKLSAgICBwYWRkaW5nLWJv
dHRvbTogNHB4OwotfQotCi0jd2ViZ2wtcmVwbGF5LWltYWdlLWNvbnRhaW5lciB7Ci0gICAgcG9z
aXRpb246IGFic29sdXRlOwotICAgIHJpZ2h0OiAwOwotICAgIHRvcDogMDsKLSAgICBwYWRkaW5n
OiAxMHB4OwotICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwotfQotCi0jd2ViZ2wtcmVwbGF5
LWltYWdlIHsKLSAgICB3aWR0aDogNDAwcHg7Ci0gICAgaGVpZ2h0OiA0MDBweDsKLSAgICBkaXNw
bGF5OiBibG9jazsKLX0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0N2Y0MTM1MmE5MzQ0MWEyMjE0MDhkODA3YWNhMTkzZjM3
MDA5NTM0Li44ZTQxYmNhYWIyN2IyYTYyODQ5YjJmNmRmMTY0NjJmZDA5ZDMwZjc2IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTItMDktMTcgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogW1dlYkdMXSAtPiBbQ2FudmFzXSBS
ZW5hbWUgV2ViR0xBZ2VudCB0byBDYW52YXNBZ2VudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY5MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9wcm9maWxlci93ZWJnbC93ZWJnbC1w
cm9maWxlci1nZXQtZXJyb3IuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvZmlsZXIvd2Vi
Z2wvd2ViZ2wtcHJvZmlsZXItdGVzdC5qczoKKyAgICAgICAgKGluaXRpYWxpemVfQ2FudmFzV2Vi
R0xQcm9maWxlclRlc3QuSW5zcGVjdG9yVGVzdC5lbmFibGVDYW52YXNBZ2VudCk6CisgICAgICAg
IChpbml0aWFsaXplX0NhbnZhc1dlYkdMUHJvZmlsZXJUZXN0KToKKwogMjAxMi0wOS0xNyAgQWxs
YW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KIAogICAgICAgICBb
VG91Y2hBZGp1c3RtZW50XSBBZGp1c3RlZCBwb2ludCBvdXRzaWRlIGJvdW5kcyBmb3Igbm9uLXJl
Y3RpbGluZWFyIHRhcmdldHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9m
aWxlci93ZWJnbC93ZWJnbC1wcm9maWxlci1nZXQtZXJyb3IuaHRtbCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9wcm9maWxlci93ZWJnbC93ZWJnbC1wcm9maWxlci1nZXQtZXJyb3IuaHRtbAppbmRl
eCA5YjY1ODU2NGJkYjM1OTEwMWUyZGVmMThmMzMyMjk1ZmQ3YTkyYzkwLi41ZGQyNTk3N2RiOWRm
MjAyMGQ3YWE5YTM4YTQ2ZDYxZTgxZTcyNzlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcHJvZmlsZXIvd2ViZ2wvd2ViZ2wtcHJvZmlsZXItZ2V0LWVycm9yLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL3dlYmdsL3dlYmdsLXByb2ZpbGVyLWdldC1l
cnJvci5odG1sCkBAIC0xMTcsNyArMTE3LDcgQEAgZnVuY3Rpb24gY3JlYXRlQW5kUnVuV2ViR0xQ
cm9ncmFtKCkKIAogZnVuY3Rpb24gdGVzdCgpCiB7Ci0gICAgSW5zcGVjdG9yVGVzdC5lbmFibGVX
ZWJHTEFnZW50KHN0ZXAxKTsKKyAgICBJbnNwZWN0b3JUZXN0LmVuYWJsZUNhbnZhc0FnZW50KHN0
ZXAxKTsKICAgICBmdW5jdGlvbiBzdGVwMSgpCiAgICAgewogICAgICAgICBJbnNwZWN0b3JUZXN0
LmV2YWx1YXRlSW5Db25zb2xlKCJjcmVhdGVBbmRSdW5XZWJHTFByb2dyYW0oKSIsIHN0ZXAyKTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci93ZWJnbC93ZWJnbC1w
cm9maWxlci10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL3dlYmdsL3dl
YmdsLXByb2ZpbGVyLXRlc3QuanMKaW5kZXggOTdiZjU2MGYxOTA3NGQ4MjY3NTNiNWIzNGRiMzVh
MDJhOThmMjBmMy4uNTBmM2Y1ZWJiODQyYTQ5NTg0ODRhNWQ1Yjk3ZmJmMGVhNTcxYjdkYiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL3dlYmdsL3dlYmdsLXByb2Zp
bGVyLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL3dlYmdsL3dl
YmdsLXByb2ZpbGVyLXRlc3QuanMKQEAgLTEsMjAgKzEsMjAgQEAKLXZhciBpbml0aWFsaXplX1dl
YkdMUHJvZmlsZXJUZXN0ID0gZnVuY3Rpb24oKSB7Cit2YXIgaW5pdGlhbGl6ZV9DYW52YXNXZWJH
TFByb2ZpbGVyVGVzdCA9IGZ1bmN0aW9uKCkgewogCi1JbnNwZWN0b3JUZXN0LmVuYWJsZVdlYkdM
QWdlbnQgPSBmdW5jdGlvbihjYWxsYmFjaykKK0luc3BlY3RvclRlc3QuZW5hYmxlQ2FudmFzQWdl
bnQgPSBmdW5jdGlvbihjYWxsYmFjaykKIHsKLSAgICBmdW5jdGlvbiB3ZWJHTEFnZW50RW5hYmxl
ZChlcnJvcikKKyAgICBmdW5jdGlvbiBjYW52YXNBZ2VudEVuYWJsZWQoZXJyb3IpCiAgICAgewog
ICAgICAgICBpZiAoIWVycm9yKQogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zYWZlV3JhcChj
YWxsYmFjaykoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFk
ZFJlc3VsdCgiRkFJTEVEIHRvIGVuYWJsZSBXZWJHTEFnZW50OiAiICsgZXJyb3IpOworICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIkZBSUxFRCB0byBlbmFibGUgQ2FudmFzQWdl
bnQ6ICIgKyBlcnJvcik7CiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgp
OwogICAgICAgICB9CiAgICAgfQogICAgIHRyeSB7Ci0gICAgICAgIFdlYkdMQWdlbnQuZW5hYmxl
KHdlYkdMQWdlbnRFbmFibGVkKTsKKyAgICAgICAgQ2FudmFzQWdlbnQuZW5hYmxlKGNhbnZhc0Fn
ZW50RW5hYmxlZCk7CiAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICBJbnNwZWN0b3JUZXN0LmFk
ZFJlc3VsdCgiRXhjZXB0aW9uIHdoaWxlIGVuYWJsaW5nIFdlYkdMQWdlbnQiLCBlKTsKKyAgICAg
ICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIkV4Y2VwdGlvbiB3aGlsZSBlbmFibGluZyBDYW52
YXNBZ2VudCIsIGUpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOwogICAg
IH0KIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164718</attachid>
            <date>2012-09-19 05:05:38 -0700</date>
            <delta_ts>2012-09-19 06:06:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96917-20120919160502.patch</filename>
            <type>text/plain</type>
            <size>260286</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4OTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2ZhN2FkM2JjZmM1NzAw
MmQ0MzJmNTAwNmZjZDFhYjIwMTk4OGViZS4uOGJjMjUxOGEwZDE3Y2Q3ODUzY2M1MTNhNzgzNTIx
NjQxMDZhNzIxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0wOS0xNyAgQW5k
cmV5IEFkYWlraW4gIDxhYW5kcmV5QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBbV2ViR0xdIC0+IFtDYW52YXNdIFJlbmFtZSBXZWJHTEFnZW50IHRvIENhbnZhc0FnZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjkxNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBX
ZWJHTEFnZW50KiBhbmQgV2ViR0xJbnN0cnVtZW50YXRpb24qIGZpbGVzIHRvIENhbnZhcyogYXMg
d2Ugd2lsbCBzdXBwb3J0IGJvdGggMkQgYW5kIDNEL1dlYkdMIGNhbnZhcyBpbnN0cnVtZW50YXRp
b24uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLnByaToKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdl
dC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgICogaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmNwcC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6OkluamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlOjptb2R1bGVGb3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdENhbnZhc01vZHVsZTo6c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlOjp3cmFwV2ViR0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlOjpjYXB0dXJlRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6OmRyb3BUcmFjZUxvZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZTo6dHJhY2VMb2cpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6OnJlcGxheVRyYWNlTG9nKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
LmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3Vy
Y2UuanM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRXZWJHTE1vZHVsZVNvdXJjZS5qcy4KKyAgICAgICAgKC4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5jcHAu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENhbnZhc0FnZW50U3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6Okluc3BlY3RvckNhbnZhc0FnZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojp+SW5zcGVjdG9yQ2FudmFz
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldEZyb250
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjbGVhckZyb250
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpyZXN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRyb3BUcmFjZUxvZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FwdHVyZUZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpnZXRUcmFjZUxvZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVwbGF5VHJhY2VMb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OndyYXBXZWJHTFJlbmRlcmluZ0NvbnRleHRGb3JJbnN0
cnVtZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6Omlu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlRm9yVHJhY2VMb2dJZCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhc0FnZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChJbnNwZWN0b3JDYW52YXNBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
YW52YXNBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0Fn
ZW50OjplbmFibGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzSW5zdHJ1
bWVudGF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3cmFwV2ViR0xSZW5kZXJpbmdDb250
ZXh0Rm9ySW5zdHJ1bWVudGF0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNw
ZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50
cy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnN0cnVtZW50aW5n
QWdlbnRzOjpJbnN0cnVtZW50aW5nQWdlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1l
bnRpbmdBZ2VudHM6Omluc3BlY3RvckNhbnZhc0FnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3RydW1lbnRpbmdBZ2VudHM6OnNldEluc3BlY3RvckNhbnZhc0FnZW50KToKKyAgICAgICAgKElu
c3RydW1lbnRpbmdBZ2VudHMpOgorICAgICAgICAqIGluc3BlY3Rvci9jb21waWxlLWZyb250LWVu
ZC5weToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3Lmpz
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJHTFBy
b2ZpbGVWaWV3LmpzLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVWaWV3KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVmlldy5wcm90b3R5cGUuZGlzcG9z
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVZpZXcucHJvdG90eXBlLmdl
dCBzdGF0dXNCYXJJdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVZp
ZXcucHJvdG90eXBlLmdldCBwcm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQ
cm9maWxlVmlldy5wcm90b3R5cGUud2FzU2hvd24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNh
bnZhc1Byb2ZpbGVWaWV3LnByb3RvdHlwZS53aWxsSGlkZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ2FudmFzUHJvZmlsZVZpZXcucHJvdG90eXBlLl9zaG93VHJhY2VMb2cpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVWaWV3LnByb3RvdHlwZS5fb25UcmFjZUxvZ0l0ZW1D
bGljay5kaWRSZXBsYXlUcmFjZUxvZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFzUHJv
ZmlsZVZpZXcucHJvdG90eXBlLl9vblRyYWNlTG9nSXRlbUNsaWNrKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFz
UHJvZmlsZVR5cGUucHJvdG90eXBlLmdldCBidXR0b25Ub29sdGlwKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZC5kaWRTdGFy
dENhcHR1cmluZ0ZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlw
ZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFz
UHJvZmlsZVR5cGUucHJvdG90eXBlLmdldCB0cmVlSXRlbVRpdGxlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUuZ2V0IGRlc2NyaXB0aW9uKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUucmVzZXQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlLnByb3RvdHlwZS5jcmVhdGVU
ZW1wb3JhcnlQcm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlw
ZS5wcm90b3R5cGUuY3JlYXRlUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFz
UHJvZmlsZUhlYWRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZUhlYWRl
ci5wcm90b3R5cGUudHJhY2VMb2dJZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FudmFzUHJv
ZmlsZUhlYWRlci5wcm90b3R5cGUuY3JlYXRlU2lkZWJhclRyZWVFbGVtZW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5jcmVhdGVWaWV3KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHBlcmltZW50c1NldHRp
bmdzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmM6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9jYW52YXNQcm9maWxlci5jc3M6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3dlYkdMUHJvZmlsZXIuY3NzLgorICAg
ICAgICAoLmNhbnZhcy1wcm9maWxlLXZpZXcpOgorICAgICAgICAoLmNhbnZhcy10cmFjZS1sb2cp
OgorICAgICAgICAoLmNhbnZhcy10cmFjZS1sb2cgZGl2KToKKyAgICAgICAgKCNjYW52YXMtcmVw
bGF5LWltYWdlLWNvbnRhaW5lcik6CisgICAgICAgICgjY2FudmFzLXJlcGxheS1pbWFnZSk6CisK
IDIwMTItMDktMTkgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjg5NzYuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGY3NGJhMmQyOGY3YjQ4NTI2NzYwODYwYThjOTdlMDEyYTA1NGE0MjcuLjRiMDI1
MDYyOTE1YWU4MGVlOTMwNTM1Y2Q5YzAzYzJhZGU2MTAwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0xNTM4LDE1ICsxNTM4LDE2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNwZWN0
b3IvSWRlbnRpZmllcnNGYWN0b3J5LmNwcAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5j
cHAKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAorICAgIGluc3BlY3Rvci9J
bmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCiAgICAg
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TW9kdWxlLmNwcAotICAgIGluc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdFdlYkdMTW9kdWxlLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JCYXNlQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisgICAgaW5z
cGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JD
bGllbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE1NzQsNyArMTU3NSw2IEBAIFNF
VChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9y
LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCi0gICAgaW5zcGVjdG9yL0luc3BlY3RvcldlYkdMQWdl
bnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcAogICAgIGluc3Bl
Y3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcAogICAgIGluc3BlY3Rvci9NZW1vcnlJbnN0cnVt
ZW50YXRpb25JbXBsLmNwcApAQCAtMjc3NiwxNSArMjc3NiwxMyBAQCBBRERfQ1VTVE9NX0NPTU1B
TkQoCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9L0luamVjdGVkU2NyaXB0U291cmNlLmgpCiAKIAotIyBHZW5lcmF0ZSBJbmplY3RlZFNj
cmlwdFdlYkdMTW9kdWxlU291cmNlLmgKLUlGIChFTkFCTEVfV0VCR0wpCi0gICAgQUREX0NVU1RP
TV9DT01NQU5EKAotICAgICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
L0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaAotICAgICAgICBNQUlOX0RFUEVOREVO
Q1kgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMKLSAgICAgICAg
Q09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL3h4ZC5w
bCBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlX2pzICR7V0VCQ09SRV9ESVJ9L2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzICR7REVSSVZFRF9TT1VSQ0VT
X1dFQkNPUkVfRElSfS9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmgKLSAgICAgICAg
VkVSQkFUSU0pCi0gICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTICR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfS9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmgpCi1FTkRJ
RiAoKQorIyBHZW5lcmF0ZSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oCitBRERf
Q1VTVE9NX0NPTU1BTkQoCisgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oCisgICAgTUFJTl9ERVBFTkRFTkNZ
IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcworICAgIENPTU1B
TkQgJHtQRVJMX0VYRUNVVEFCTEV9ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci94eGQucGwgSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2VfanMgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzICR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfS9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oCisgICAgVkVSQkFU
SU0pCitMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9L0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmgpCiAKIAogTUFLRV9IQVNI
X1RPT0xTKCR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL0NvbG9yRGF0YSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IGQxZjA5NzJjZDE3OTg5MmZjNTRiODllNTZhZWMxZWVlM2JlMzNj
ZDUuLmY3NzU1NTIzOTFmZjg0MTRjYmU0NWZmODBjODBhOGRjYWY5YWQ2ZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTA0NCwxMCArMTA0NCwxMCBAQCBhbGwgOiBJbmplY3Rl
ZFNjcmlwdFNvdXJjZS5oCiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oIDogSW5qZWN0ZWRTY3JpcHRT
b3VyY2UuanMKIAlwZXJsICQoV2ViQ29yZSkvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlw
dFNvdXJjZV9qcyAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyBJ
bmplY3RlZFNjcmlwdFNvdXJjZS5oCiAKLWFsbCA6IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVT
b3VyY2UuaAorYWxsIDogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuaAogCi1Jbmpl
Y3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmggOiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
U291cmNlLmpzCi0JcGVybCAkKFdlYkNvcmUpL2luc3BlY3Rvci94eGQucGwgSW5qZWN0ZWRTY3Jp
cHRXZWJHTE1vZHVsZVNvdXJjZV9qcyAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlU291cmNlLmpzIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaAor
SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuaCA6IEluamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlU291cmNlLmpzCisJcGVybCAkKFdlYkNvcmUpL2luc3BlY3Rvci94eGQucGwgSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2VfanMgJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVT
b3VyY2UuaAogCiAtaW5jbHVkZSAkKEpTX0RPTV9IRUFERVJTOi5oPS5kZXApCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLnByaQppbmRleCA3MTc5MzBjMTRhYjkyMmY5Zjg1OWIwZWZkNjJhYmQ0NWQw
ZmQ5ODJhLi45M2IwYWVjOWIyMjFmNjc4ZDVmYmMxNDFlZGUyNzE4YTM1NjhlYTFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKKysrIGIvU291cmNlL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMucHJpCkBAIC02MSw3ICs2MSw3IEBAIElOU1BFQ1RPUl9PVkVSTEFZ
X1BBR0UgPSAkJFBXRC9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheVBhZ2UuaHRtbAogCiBJTkpF
Q1RFRF9TQ1JJUFRfU09VUkNFID0gJCRQV0QvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNl
LmpzCiAKLUlOSkVDVEVEX1NDUklQVF9XRUJHTF9NT0RVTEVfU09VUkNFID0gJCRQV0QvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMKK0lOSkVDVEVEX1NDUklQVF9D
QU5WQVNfTU9EVUxFX1NPVVJDRSA9ICQkUFdEL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZh
c01vZHVsZVNvdXJjZS5qcwogCiBYUEFUSEJJU09OID0gJCRQV0QveG1sL1hQYXRoR3JhbW1hci55
CiAKQEAgLTc4NywxOSArNzg3LDE5IEBAIGluc3BlY3Rvck92ZXJsYXlQYWdlLmNvbW1hbmRzID0g
cGVybCAkJFBXRC9pbnNwZWN0b3IveHhkLnBsIEluc3BlY3Rvck92ZXJsYXlQYWdlCiBpbnNwZWN0
b3JPdmVybGF5UGFnZS5hZGRfb3V0cHV0X3RvX3NvdXJjZXMgPSBmYWxzZQogR0VORVJBVE9SUyAr
PSBpbnNwZWN0b3JPdmVybGF5UGFnZQogCi0jIEdFTkVSQVRPUiAyLWE6IGluc3BlY3RvciBpbmpl
Y3RlZCBzY3JpcHQgc291cmNlIGNvbXBpbGVyCisjIEdFTkVSQVRPUiAyOiBpbnNwZWN0b3IgaW5q
ZWN0ZWQgc2NyaXB0IHNvdXJjZSBjb21waWxlcgogaW5qZWN0ZWRTY3JpcHRTb3VyY2Uub3V0cHV0
ID0gSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaAogaW5qZWN0ZWRTY3JpcHRTb3VyY2UuaW5wdXQgPSBJ
TkpFQ1RFRF9TQ1JJUFRfU09VUkNFCiBpbmplY3RlZFNjcmlwdFNvdXJjZS5jb21tYW5kcyA9IHBl
cmwgJCRQV0QvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlwdFNvdXJjZV9qcyAke1FNQUtF
X0ZJTEVfSU59ICR7UU1BS0VfRklMRV9PVVR9CiBpbmplY3RlZFNjcmlwdFNvdXJjZS5hZGRfb3V0
cHV0X3RvX3NvdXJjZXMgPSBmYWxzZQogR0VORVJBVE9SUyArPSBpbmplY3RlZFNjcmlwdFNvdXJj
ZQogCi0jIEdFTkVSQVRPUiAyLWI6IGluc3BlY3RvciB3ZWJnbCBpbmplY3RlZCBzY3JpcHQgc291
cmNlIGNvbXBpbGVyCi1JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLm91dHB1dCA9IElu
amVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaAotSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVs
ZVNvdXJjZS5pbnB1dCA9IElOSkVDVEVEX1NDUklQVF9XRUJHTF9NT0RVTEVfU09VUkNFCi1Jbmpl
Y3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmNvbW1hbmRzID0gcGVybCAkJFBXRC9pbnNwZWN0
b3IveHhkLnBsIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2VfanMgJHtRTUFLRV9GSUxF
X0lOfSAke1FNQUtFX0ZJTEVfT1VUfQotSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5h
ZGRfb3V0cHV0X3RvX3NvdXJjZXMgPSBmYWxzZQotR0VORVJBVE9SUyArPSBJbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlU291cmNlCisjIEdFTkVSQVRPUiAzOiBpbnNwZWN0b3IgY2FudmFzIGluamVj
dGVkIHNjcmlwdCBzb3VyY2UgY29tcGlsZXIKK0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291
cmNlLm91dHB1dCA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmgKK0luamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmlucHV0ID0gSU5KRUNURURfU0NSSVBUX0NBTlZBU19N
T0RVTEVfU09VUkNFCitJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5jb21tYW5kcyA9
IHBlcmwgJCRQV0QvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNv
dXJjZV9qcyAke1FNQUtFX0ZJTEVfSU59ICR7UU1BS0VfRklMRV9PVVR9CitJbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZVNvdXJjZS5hZGRfb3V0cHV0X3RvX3NvdXJjZXMgPSBmYWxzZQorR0VORVJB
VE9SUyArPSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZQogCiAjIEdFTkVSQVRPUiA0
OiBDU1MgZ3JhbW1hcgogY3NzYmlzb24ub3V0cHV0ID0gJHtRTUFLRV9GSUxFX0JBU0V9LmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQppbmRleCBlMWM2NDYyZjI3NGYwOTAwNGRhZGUwMmE1MTI3YzcyNGJm
ZDI0M2Q0Li5jZmQzZjhmMTBlZTY5ODEwM2MzZjBmOTQxMmU5NTAwMzU0OTc0NzBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtNTAwLDEwICs1MDAsMTAgQEAgRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanM6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5z
cGUKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaDog
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKIERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yT3ZlcmxheVBhZ2UuaDogJChXZWJDb3JlKS9p
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheVBhZ2UuaHRtbAogCSQoQU1fVl9HRU4pJChQRVJMKSAk
KFdlYkNvcmUpL2luc3BlY3Rvci94eGQucGwgSW5zcGVjdG9yT3ZlcmxheVBhZ2VfaHRtbCAkKFdl
YkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5UGFnZS5odG1sICQoR0VOU09VUkNFU19X
RUJDT1JFKS9JbnNwZWN0b3JPdmVybGF5UGFnZS5oCitEZXJpdmVkU291cmNlcy9XZWJDb3JlL0lu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmg6ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzCisJJChBTV9WX0dFTikkKFBFUkwpICQo
V2ViQ29yZSkvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJj
ZV9qcyAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJj
ZS5qcyAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3Vy
Y2UuaAogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbmplY3RlZFNjcmlwdFNvdXJjZS5oOiAkKFdl
YkNvcmUpL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwogCSQoQU1fVl9HRU4pJChQ
RVJMKSAkKFdlYkNvcmUpL2luc3BlY3Rvci94eGQucGwgSW5qZWN0ZWRTY3JpcHRTb3VyY2VfanMg
JChXZWJDb3JlKS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMgJChHRU5TT1VSQ0VT
X1dFQkNPUkUpL0luamVjdGVkU2NyaXB0U291cmNlLmgKLURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5oOiAkKFdlYkNvcmUpL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzCi0JJChBTV9WX0dFTikkKFBFUkwpICQo
V2ViQ29yZSkvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNl
X2pzICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2Uu
anMgJChHRU5TT1VSQ0VTX1dFQkNPUkUpL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2Uu
aAogCiBpZiBFTkFCTEVfV0VCX0FVRElPCiAjIEluc3RhbGxpbmcgSFJURiBkYXRhYmFzZSB3YXYg
ZmlsZXMKQEAgLTc3NCw4ICs3NzQsOCBAQCBFWFRSQV9ESVNUICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MRW50aXR5TmFtZXMuaW4gXAogCVNvdXJjZS9XZWJDb3JlL2ljdS9M
SUNFTlNFIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weSBcCisJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlU291cmNlLmpzIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRT
b3VyY2UuanMgXAotCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdM
TW9kdWxlU291cmNlLmpzIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpz
b24gXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3ItMS4wLmpzb24gXAogCVNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5UGFnZS5odG1sIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGNhNmRhYmNmNTE0NDI2MWI0MDk3NmQ1YTA5YWNh
NzJhZTNjODg0NTYuLjhjYThiMjY4ZTMyNmJiZmY4N2Q3MTQ1NmY3NzQxM2E4ODY0MDc3MjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTksOCArMTksOCBAQCB3ZWJjb3JlX2J1
aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSFRNTEVudGl0eVRhYmxl
LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9IVE1MTmFtZXMuY3BwIFwKIAlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0hUTUxOYW1lcy5oIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0lu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Jbmpl
Y3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SW5zcGVjdG9yRnJvbnRlbmQuY3BwIFwKQEAgLTM2MzMsMjAgKzM2MzMsMjMgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBc
CiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaCBcCisJU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmggXAogCVNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmggXAogCVNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdE1vZHVsZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRXZWJHTE1vZHVsZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdFdlYkdMTW9kdWxlLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JBZ2VudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2Vu
dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFz
ZUFnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhc2VBZ2Vu
dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3Bw
IFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBcCisJ
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXApAQCAtMzcxMCw5ICszNzEzLDYg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
IFwKLQlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEFnZW50LmggXAotCVNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaCBcCiAJU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291cmNlLmggXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5k
ZXggMmNjYTIxZTk0Mjc2Y2YxYWE3YjU4M2VhZjA1ZTY2OGZjMjlkOTdjZi4uNzQ2NWQ0NDA1MjZk
OGE1N2ZlNzhiMGJiNzA1OGJkN2MzMTAzMGNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC03MzIsMTQgKzcz
MiwxNSBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSWRlbnRpZmllcnNGYWN0b3J5LmNw
cCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0QmFzZS5jcHAgXAorICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZh
c01vZHVsZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBcCiAgICAgaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TW9kdWxlLmNwcCBcCi0gICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2Vi
R0xNb2R1bGUuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwIFwKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvckJhc2VBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29uc29sZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
IFwKQEAgLTc2Niw3ICs3NjcsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVUZXh0RWRpdG9yLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5l
QWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBcCi0gICAgaW5z
cGVjdG9yL0luc3BlY3RvcldlYkdMQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
V29ya2VyQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5jcHAg
XAogICAgIGluc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcCBcCkBAIC0xODU3
LDEzICsxODU3LDE1IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JZGVudGlmaWVyc0Zh
Y3RvcnkuaCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmggXAogICAgIGluc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEJhc2UuaCBcCisgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2Fu
dmFzTW9kdWxlLmggXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaCBcCiAgICAg
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5oIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNb2R1bGUuaCBcCi0gICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1
bGUuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmggXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rv
ckJhc2VBZ2VudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBcCisg
ICAgaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oIFwKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JD
b25zb2xlSW5zdHJ1bWVudGF0aW9uLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmggXApAQCAtMTg5Miw4ICsxODk0LDYgQEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlVGV4
dEVkaXRvci5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKLSAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5oIFwKLSAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvcldvcmtl
ckFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmggXAogICAgIGlu
c3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAppbmRleCA0YjFlNGRmMTk3MTE1YzEyZWQ3NjIzY2Y1NzEyOTQwMzM5
MDUwZmUyLi4xNzEyMjMzMTQxMGM2YjU3ZmYzNGE1MTIyOGUyMTA5Mjk4MmI0MTRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtNDYxLDUwICs0NjEsNTAgQEAKICAg
ICAgIF0KICAgICB9LAogICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdpbmplY3RlZF9zY3Jp
cHRfc291cmNlJywKKyAgICAgICd0YXJnZXRfbmFtZSc6ICdpbmplY3RlZF9jYW52YXNfc2NyaXB0
X3NvdXJjZScsCiAgICAgICAndHlwZSc6ICdub25lJywKICAgICAgICdhY3Rpb25zJzogWwogICAg
ICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5qZWN0ZWRTY3JpcHRT
b3VyY2UnLAorICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlU291cmNlJywKICAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAg
Jy4uL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcycsCisgICAgICAgICAgICAnLi4v
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzJywKICAgICAgICAg
ICBdLAogICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIpL3dlYmtpdC9JbmplY3RlZFNjcmlwdFNvdXJjZS5oJywKKyAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5qZWN0ZWRTY3JpcHRDYW52YXNN
b2R1bGVTb3VyY2UuaCcsCiAgICAgICAgICAgXSwKICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hl
bGwnOiAwLAogICAgICAgICAgICdhY3Rpb24nOiBbCiAgICAgICAgICAgICAnPChwZXJsX2V4ZSkn
LAogICAgICAgICAgICAgJy4uL2luc3BlY3Rvci94eGQucGwnLAotICAgICAgICAgICAgJ0luamVj
dGVkU2NyaXB0U291cmNlX2pzJywKKyAgICAgICAgICAgICdJbmplY3RlZFNjcmlwdENhbnZhc01v
ZHVsZVNvdXJjZV9qcycsCiAgICAgICAgICAgICAnPEAoX2lucHV0cyknLAogICAgICAgICAgICAg
JzxAKF9vdXRwdXRzKScKICAgICAgICAgICBdLAotICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVy
YXRpbmcgSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCBmcm9tIEluamVjdGVkU2NyaXB0U291cmNlLmpz
JywKKyAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIEluamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlU291cmNlLmggZnJvbSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcycs
CiAgICAgICAgIH0sCiAgICAgICBdCiAgICAgfSwKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUn
OiAnaW5qZWN0ZWRfd2ViZ2xfc2NyaXB0X3NvdXJjZScsCisgICAgICAndGFyZ2V0X25hbWUnOiAn
aW5qZWN0ZWRfc2NyaXB0X3NvdXJjZScsCiAgICAgICAndHlwZSc6ICdub25lJywKICAgICAgICdh
Y3Rpb25zJzogWwogICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRl
SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZScsCisgICAgICAgICAgJ2FjdGlvbl9uYW1l
JzogJ2dlbmVyYXRlSW5qZWN0ZWRTY3JpcHRTb3VyY2UnLAogICAgICAgICAgICdpbnB1dHMnOiBb
Ci0gICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2UuanMnLAorICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cycsCiAgICAgICAgICAgXSwKICAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8
KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVs
ZVNvdXJjZS5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJr
aXQvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCcsCiAgICAgICAgICAgXSwKICAgICAgICAgICAnbXN2
c19jeWd3aW5fc2hlbGwnOiAwLAogICAgICAgICAgICdhY3Rpb24nOiBbCiAgICAgICAgICAgICAn
PChwZXJsX2V4ZSknLAogICAgICAgICAgICAgJy4uL2luc3BlY3Rvci94eGQucGwnLAotICAgICAg
ICAgICAgJ0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2VfanMnLAorICAgICAgICAgICAg
J0luamVjdGVkU2NyaXB0U291cmNlX2pzJywKICAgICAgICAgICAgICc8QChfaW5wdXRzKScsCiAg
ICAgICAgICAgICAnPEAoX291dHB1dHMpJwogICAgICAgICAgIF0sCi0gICAgICAgICAgJ21lc3Nh
Z2UnOiAnR2VuZXJhdGluZyBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmggZnJvbSBJ
bmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzJywKKyAgICAgICAgICAnbWVzc2FnZSc6
ICdHZW5lcmF0aW5nIEluamVjdGVkU2NyaXB0U291cmNlLmggZnJvbSBJbmplY3RlZFNjcmlwdFNv
dXJjZS5qcycsCiAgICAgICAgIH0sCiAgICAgICBdCiAgICAgfSwKQEAgLTEyMDAsOCArMTIwMCw4
IEBACiAgICAgICAgICd3ZWJjb3JlX2JpbmRpbmdzX3NvdXJjZXMnLAogICAgICAgICAnaW5zcGVj
dG9yX292ZXJsYXlfcGFnZScsCiAgICAgICAgICdpbnNwZWN0b3JfcHJvdG9jb2xfc291cmNlcycs
CisgICAgICAgICdpbmplY3RlZF9jYW52YXNfc2NyaXB0X3NvdXJjZScsCiAgICAgICAgICdpbmpl
Y3RlZF9zY3JpcHRfc291cmNlJywKLSAgICAgICAgJ2luamVjdGVkX3dlYmdsX3NjcmlwdF9zb3Vy
Y2UnLAogICAgICAgICAnZGVidWdnZXJfc2NyaXB0X3NvdXJjZScsCiAgICAgICAgICcuLi8uLi9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXAvSmF2YVNjcmlwdENvcmUuZ3lwOnlhcnIn
LAogICAgICAgICAnLi4vLi4vV1RGL1dURi5neXAvV1RGLmd5cDp3dGYnLApAQCAtMTMyNyw4ICsx
MzI3LDggQEAKICAgICAgICd0eXBlJzogJ25vbmUnLAogICAgICAgJ2RlcGVuZGVuY2llcyc6IFsK
ICAgICAgICAgJ2RlYnVnZ2VyX3NjcmlwdF9zb3VyY2UnLAorICAgICAgICAnaW5qZWN0ZWRfY2Fu
dmFzX3NjcmlwdF9zb3VyY2UnLAogICAgICAgICAnaW5qZWN0ZWRfc2NyaXB0X3NvdXJjZScsCi0g
ICAgICAgICdpbmplY3RlZF93ZWJnbF9zY3JpcHRfc291cmNlJywKICAgICAgICAgJ2luc3BlY3Rv
cl9vdmVybGF5X3BhZ2UnLAogICAgICAgICAnaW5zcGVjdG9yX3Byb3RvY29sX3NvdXJjZXMnLAog
ICAgICAgICAnd2ViY29yZV9iaW5kaW5nc19zb3VyY2VzJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBk
NmZmNzc1NzU2ZDU3NzNjZjU2MzJkZDIzMGUxM2YxYTgxMDFhMjM2Li40ZDQzYzQxNjViZjRmMTgx
MDgwYWNjZWJiNzI3MmQ2ZGFhYWEzNGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yODU1LDIwICsy
ODU1LDIzIEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0SG9zdC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5o
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaCcsCi0gICAgICAgICAg
ICAnaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuY3BwJywKLSAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zcGVjdG9yQmFzZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAn
LAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oJywKKyAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzSW5zdHJ1bWVudGF0aW9uLmgnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oJywKQEAgLTI5MjUsOSArMjkyOCw2IEBACiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCcsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yV2ViR0xBZ2VudC5jcHAnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JX
ZWJHTEFnZW50LmgnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEluc3Ry
dW1lbnRhdGlvbi5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdl
bnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMuY3BwJywKQEAgLTY0
OTUsNyArNjQ5NSw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0RWRp
dG9yLmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0UHJvbXB0LmNz
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC90aW1lbGluZVBhbmVsLmNzcycs
Ci0gICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC93ZWJHTFByb2ZpbGVyLmNzcycsCisg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9jYW52YXNQcm9maWxlci5jc3MnLAogICAg
ICAgICBdLAogICAgICAgICAnd2ViaW5zcGVjdG9yX2VsZW1lbnRzX2pzX2ZpbGVzJzogWwogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTTmFtZWRGbG93Q29sbGVjdGlvbnNWaWV3
LmpzJywKQEAgLTY1NzQsNyArNjU3NCw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9Qcm9maWxlc1BhbmVsLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L1Byb2ZpbGVMYXVuY2hlclZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvVG9wRG93blByb2ZpbGVEYXRhR3JpZFRyZWUuanMnLAotICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvV2ViR0xQcm9maWxlVmlldy5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9DYW52YXNQcm9maWxlVmlldy5qcycsCiAgICAgICAgIF0sCiAKICAgICAgICAg
J3dlYmluc3BlY3Rvcl9hdWRpdHNfanNfZmlsZXMnOiBbCkBAIC03MjczLDggKzcyNzMsOCBAQAog
ICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSFRNTEVu
dGl0eVRhYmxlLmNwcCcsCiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9IVE1MTmFtZXMuY3BwJywKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0hlYWRlckRldGVjdGlvbi5oJywKKyAgICAgICAgICAgICc8
KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0luamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlU291cmNlLmgnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCcsCi0gICAgICAgICAgICAnPChQUk9E
VUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
U291cmNlLmgnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwJywKICAgICAgICAgICAgICc8KFBS
T0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmgnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMTg5NmExMTlkYzJmZjk4ODExYjIzNTg1MWRl
MzJmMGQwNGMzNWE2Yy4uNzY4ZGUwZGM0ODMyNTdkMzJjMmFhMjk1MWUwMjY0ZTM2NzE2OGE2MCAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTU5
MCwxMSArNTkwLDExIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZl
ZFNvdXJjZXNcSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoQ29u
ZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9ialwkKFBy
b2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNl
LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqXCQoUHJv
amVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEluamVjdGVkU2NyaXB0U291cmNlLmgiCiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKQEAgLTc0NTg3LDcgKzc0NTg3LDcgQEAKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluamVjdGVk
U2NyaXB0SG9zdC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRT
Y3JpcHRDYW52YXNNb2R1bGUuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJ
CQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKQEAgLTc0NjA3LDExICs3NDYwNywxMSBAQAogCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0SG9zdC5oIgorCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmgiCiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNj
cmlwdE1hbmFnZXIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluamVjdGVk
U2NyaXB0SG9zdC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1l
PSJSZWxlYXNlfFdpbjMyIgpAQCAtNzQ2MzEsMTEgKzc0NjMxLDExIEBACiAJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxp
bnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxp
bnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1vZHVsZS5j
cHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IlJlbGVhc2V8
V2luMzIiCkBAIC03NDY1NSwxMSArNzQ2NTUsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJ
bmplY3RlZFNjcmlwdE1vZHVsZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXElu
amVjdGVkU2NyaXB0TWFuYWdlci5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5jcHAi
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3Bw
IgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iUmVsZWFzZXxXaW4z
MiIKQEAgLTc0Njc5LDcgKzc0Njc5LDcgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbmplY3Rl
ZFNjcmlwdFdlYkdMTW9kdWxlLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5q
ZWN0ZWRTY3JpcHRNb2R1bGUuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpAQCAtNzQ3
OTEsNiArNzQ3OTEsMzQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCIKKwkJCQk+CisJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
ckNhbnZhc0FnZW50LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb24uaCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XEluc3BlY3RvckNsaWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpAQCAt
NzU1MDcsMzQgKzc1NTM1LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvcldlYkdMQWdlbnQuY3BwIgotCQkJCT4K
LQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVj
dG9yV2ViR0xBZ2VudC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XEluc3BlY3RvcldvcmtlckFnZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9u
CkBAIC03NTk3MCw2ICs3NTk3MCwxNCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjYW52YXNQcm9maWxl
ci5jc3MiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENhbnZhc1Byb2ZpbGVWaWV3LmpzIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxDaGVja2JveC5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTc2ODc0LDE0ICs3
Njg4Miw2IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHdlYkdMUHJvZmlsZXIuY3NzIgotCQkJCQk+Ci0J
CQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxXZWJHTFByb2ZpbGVWaWV3LmpzIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxG
aWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxXb3JrZXJzU2lk
ZWJhclBhbmUuanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjBkYjhmNDQ0MTRjZWFlYTRj
ZjU4ZGUzMTE0Y2I3YzFkYjc3ODUyYi4uN2EyNWVhYTg4MTRhZDQ4NTczMzFhNmM1M2E3NjYzNjZj
ZDNjMjJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNDUzOSwxNSArNDUzOSwxNSBAQAogCQlBQTIxRUNDRDBBQkYwRkM2MDAy
QjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUEwOTc4RUUwQUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNv
ckltYWdlVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBQTRDM0E3NjBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBNEMzQTc0MEIyQjE2
NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwICovOyB9OwogCQlBQTRDM0E3NzBCMkIxNjc5
MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBQTRDM0E3NTBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50
LmggKi87IH07Ci0JCUFBNzMxODNFMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFBNzMxODNDMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
LmNwcCAqLzsgfTsKLQkJQUE3MzE4M0YxNTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFBNzMxODNEMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
LmggKi87IH07CisJCUFBNzMxODNFMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdENh
bnZhc01vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQTczMTgzQzE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1
bGUuY3BwICovOyB9OworCQlBQTczMTgzRjE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3Jp
cHRDYW52YXNNb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFBNzMxODNEMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01v
ZHVsZS5oICovOyB9OwogCQlBQUI2MDU0RTE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3Jp
cHRCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFBQjYwNTRBMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwICovOyB9
OwogCQlBQUI2MDU0RjE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQUI2MDU0QjE1ODc0
QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmggKi87IH07CiAJCUFBQjYwNTUwMTU4
NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQUI2MDU0QzE1ODc0QzU4MDA3QjUwMzEg
LyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwICovOyB9OwogCQlBQUI2MDU1MTE1ODc0QzU4MDA3
QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBQjYwNTREMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3Rl
ZFNjcmlwdE1vZHVsZS5oICovOyB9OwotCQlBQUQ3NjZFQjE1N0U1MDJGMDBFODU0MjMgLyogSW5z
cGVjdG9yV2ViR0xBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBQUQ3NjZFODE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yV2ViR0xBZ2Vu
dC5jcHAgKi87IH07Ci0JCUFBRDc2NkVDMTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJH
TEFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
QUQ3NjZFOTE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yV2ViR0xBZ2VudC5oICovOyB9Owot
CQlBQUQ3NjZFRDE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBRDc2
NkVBMTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oICov
OyB9OworCQlBQUQ3NjZFQjE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFENzY2
RTgxNTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLzsgfTsKKwkJ
QUFENzY2RUMxNTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQUQ3NjZFOTE1N0U1MDJG
MDBFODU0MjMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAqLzsgfTsKKwkJQUFENzY2RUQxNTdF
NTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFENzY2RUExNTdFNTAyRjAw
RTg1NDIzIC8qIEluc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oICovOyB9OwogCQlBQUY1
QjdCNzE1MjRCNkM1MDAwNENCNDkgLyogV2ViU29ja2V0RnJhbWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFGNUI3QjExNTI0QjRCRDAwMDRDQjQ5
IC8qIFdlYlNvY2tldEZyYW1lLmNwcCAqLzsgfTsKIAkJQUIyM0EzMjcwOUJCQTdEMDAwNjdDQzUz
IC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMjNBMzI1MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudC5jcHAgKi87IH07CiAJCUFCMjNBMzI4MDlCQkE3RDAwMDY3Q0M1MyAv
KiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUIyM0EzMjYwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50LmggKi87IH07CkBAIC0xMTY3NCwxNyArMTE2NzQsMTcgQEAKIAkJQUEwOTc4
RUUwQUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0N1cnNvckltYWdlVmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQUE0QzNBNzQwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVFbGVtZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUE0QzNBNzUwQjJCMTY3OTAwMjMz
NEEyIC8qIFN0eWxlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3R5bGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFBNzMxODNDMTU5
MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQTczMTgzRDE1OTI1NUI5MDBBOTNFNkUg
LyogSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUFBOTAzMEZFMTU3RTE2QTAwMDI3NjI0NyAvKiBJbmplY3RlZFNjcmlwdFdlYkdM
TW9kdWxlU291cmNlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQUE5MTI3NTAxNTdFMzVBNTAwNDU0RTU0IC8qIEluamVjdGVkU2NyaXB0V2ViR0xN
b2R1bGVTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRT
Y3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
QTczMTgzQzE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRDYW52
YXNNb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBQTczMTgzRDE1OTI1
NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUE5MDMwRkUxNTdFMTZBMDAwMjc2MjQ3IC8qIEluamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZh
c2NyaXB0OyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBOTEyNzUwMTU3RTM1QTUwMDQ1NEU1NCAvKiBJbmpl
Y3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBQUI2MDU0QTE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3Jp
cHRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVk
U2NyaXB0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBQjYwNTRCMTU4
NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFBQjYwNTRDMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdE1vZHVs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZFNjcmlw
dE1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBQjYwNTREMTU4NzRD
NTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbmplY3RlZFNjcmlwdE1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBQUQ3NjZFODE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yV2ViR0xBZ2Vu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JXZWJH
TEFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUFENzY2RTkxNTdFNTAy
RjAwRTg1NDIzIC8qIEluc3BlY3RvcldlYkdMQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yV2ViR0xBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlBQUQ3NjZFQTE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yV2ViR0xJbnN0cnVt
ZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yV2Vi
R0xJbnN0cnVtZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUFENzY2
RTgxNTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNhbnZhc0FnZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUFENzY2RTkxNTdFNTAyRjAwRTg1NDIzIC8qIElu
c3BlY3RvckNhbnZhc0FnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
c3BlY3RvckNhbnZhc0FnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBRDc2
NkVBMTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzSW5zdHJ1bWVu
dGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBRjVCN0IxMTUyNEI0QkQw
MDA0Q0I0OSAvKiBXZWJTb2NrZXRGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJTb2NrZXRGcmFtZS5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0RnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQjIzQTMy
NTA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUIyM0EzMjYwOUJCQTdEMDAwNjdDQzUz
IC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTQ2MTUsNyArMTQ2MTUsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKIAkJCQk3QTU2M0U1NDEyREUzMkIwMDBGNDUzNkQgLyogSW5qZWN0ZWRTY3JpcHRT
b3VyY2UuaCAqLywKLQkJCQlBQTkxMjc1MDE1N0UzNUE1MDA0NTRFNTQgLyogSW5qZWN0ZWRTY3Jp
cHRXZWJHTE1vZHVsZVNvdXJjZS5oICovLAorCQkJCUFBOTEyNzUwMTU3RTM1QTUwMDQ1NEU1NCAv
KiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oICovLAogCQkJCTRGNzA3QTk3MTFF
RjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgKi8sCiAJCQkJ
NEY3MDdBOTgxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgg
Ki8sCiAJCQkJNEY0RjVGRkExMUNCRDJEMjAwQTE4NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmNw
cCAqLywKQEAgLTE0NjYzLDkgKzE0NjYzLDkgQEAKIAkJCQlBQUI2MDU0QzE1ODc0QzU4MDA3QjUw
MzEgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwICovLAogCQkJCUFBQjYwNTREMTU4NzRDNTgw
MDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5oICovLAogCQkJCTdBNTYzRjk1MTJERjVD
OTEwMEY0NTM2RCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5qcyAqLywKLQkJCQlBQTczMTgzQzE1
OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5jcHAgKi8sCi0JCQkJ
QUE3MzE4M0QxNTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuaCAq
LywKLQkJCQlBQTkwMzBGRTE1N0UxNkEwMDAyNzYyNDcgLyogSW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZVNvdXJjZS5qcyAqLywKKwkJCQlBQTczMTgzQzE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGUuY3BwICovLAorCQkJCUFBNzMxODNEMTU5MjU1QjkwMEE5M0U2
RSAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5oICovLAorCQkJCUFBOTAzMEZFMTU3RTE2
QTAwMDI3NjI0NyAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcyAqLywKIAkJ
CQkxQzQzNUNENDE0RTg1NDVCMDA0RTEwRUEgLyogSW5zcGVjdG9yLTAuMS5qc29uICovLAogCQkJ
CTFDNDM1Q0Q1MTRFODU0NUIwMDRFMTBFQSAvKiBJbnNwZWN0b3ItMS4wLmpzb24gKi8sCiAJCQkJ
MUM0MzVDRDMxNEU4NTQ0RjAwNEUxMEVBIC8qIEluc3BlY3Rvci5qc29uICovLApAQCAtMTQ3NDAs
OSArMTQ3NDAsOSBAQAogCQkJCTc1NDEzM0E3MTAyRTAwRTgwMDA3NUQwMCAvKiBJbnNwZWN0b3JU
aW1lbGluZUFnZW50LmggKi8sCiAJCQkJNEYzMjg5QjMxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3Bl
Y3RvclZhbHVlcy5jcHAgKi8sCiAJCQkJNEYzMjg5QjQxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3Bl
Y3RvclZhbHVlcy5oICovLAotCQkJCUFBRDc2NkU4MTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0
b3JXZWJHTEFnZW50LmNwcCAqLywKLQkJCQlBQUQ3NjZFOTE1N0U1MDJGMDBFODU0MjMgLyogSW5z
cGVjdG9yV2ViR0xBZ2VudC5oICovLAotCQkJCUFBRDc2NkVBMTU3RTUwMkYwMEU4NTQyMyAvKiBJ
bnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oICovLAorCQkJCUFBRDc2NkU4MTU3RTUwMkYw
MEU4NTQyMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgKi8sCisJCQkJQUFENzY2RTkxNTdF
NTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggKi8sCisJCQkJQUFENzY2RUEx
NTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oICovLAog
CQkJCUYzODEwQzE5MTM2NUE0OTYwMEVENkUzMyAvKiBJbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAg
Ki8sCiAJCQkJRjM4MTBDMUExMzY1QTQ5NjAwRUQ2RTMzIC8qIEluc3BlY3RvcldvcmtlckFnZW50
LmggKi8sCiAJCQkJRjM3NUNDMDYxMTUwRDMwMDAwOEREQjgxIC8qIEluc3BlY3RvcldvcmtlclJl
c291cmNlLmggKi8sCkBAIC0yMzc1Nyw3ICsyMzc1Nyw3IEBACiAJCQkJN0EwRTc2RkExMEJGMDhF
RDAwQTAyNzZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjMx
NjM5NkMxMzI5NDgxQTAwQTY0OUNCIC8qIEluamVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUFCNjA1NTExNTg3NEM1ODAwN0I1MDMxIC8qIEluamVjdGVkU2NyaXB0TW9k
dWxlLmggaW4gSGVhZGVycyAqLywKLQkJCQlBQTczMTgzRjE1OTI1NUI5MDBBOTNFNkUgLyogSW5q
ZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUE3MzE4M0YxNTky
NTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOENGRjVFNTBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lQm94LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOENGRjVFMzBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lRmxvd0JveC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNFNzg5MTYxMTIwRDYwODAwNjBFQ0U1IC8qIElubGluZUl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTIzODEwLDggKzIzODEwLDggQEAKIAkJCQk3NTQxMzNB
ODEwMkUwMEU4MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTc4REEyMEYxNTIwRUJBMzAwNjE0MUMxIC8qIEluc3BlY3RvclR5cGVCdWlsZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjMyODlCNjExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVj
dG9yVmFsdWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlBQUQ3NjZFQzE1N0U1MDJGMDBFODU0MjMg
LyogSW5zcGVjdG9yV2ViR0xBZ2VudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQUFENzY2RUQxNTdF
NTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvcldlYkdMSW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBQUQ3NjZFQzE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yQ2FudmFzQWdl
bnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUFBRDc2NkVEMTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNw
ZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODEwQzFD
MTM2NUE0OTYwMEVENkUzMyAvKiBJbnNwZWN0b3JXb3JrZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRjM3NUNDMDcxMTUwRDMwMDAwOEREQjgxIC8qIEluc3BlY3RvcldvcmtlclJlc291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGM0FCRkUwQzEzMEU5REEwMDBFN0Y3RDEgLyogSW5zdHJ1
bWVudGluZ0FnZW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjk2NCw3ICsyNjk2NCw3IEBACiAJ
CQkJN0EwRTc2RjkxMEJGMDhFRDAwQTAyNzZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGMzE2Mzk2QjEzMjk0ODFBMDBBNjQ5Q0IgLyogSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFBQjYwNTUwMTU4NzRDNTgwMDdCNTAz
MSAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBQTczMTgz
RTE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBQTczMTgzRTE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRD
YW52YXNNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkY1RTYwQTE1NUEwNTAwMEE0
MjM0IC8qIElubGluZUJveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOENGRjVFNDBBMTU1QTA1
MDAwQTQyMzQgLyogSW5saW5lRmxvd0JveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDg1
OTA5N0Q5MzAyMDA5NEM5RTQgLyogSW5saW5lVGV4dEJveC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI3MDEyLDcgKzI3MDEyLDcgQEAKIAkJCQk3NTQxMzNBQTEwMkUwMEY0MDAwNzVEMDAgLyogSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1NzNEMTM0NzE0Q0Uz
OUZGMDA1N0FCQ0EgLyogSW5zcGVjdG9yVHlwZUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNEYzMjg5QjUxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBQUQ3NjZFQjE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yV2ViR0xB
Z2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBQUQ3NjZFQjE1N0U1MDJGMDBFODU0MjMgLyog
SW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjM4MTBDMUIxMzY1
QTQ5NjAwRUQ2RTMzIC8qIEluc3BlY3RvcldvcmtlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUYzNTBCNzM1MTNGMTM3N0QwMDg4MEM0MyAvKiBJbnN0cnVtZW50aW5nQWdlbnRzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyNzUzNTYwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludENH
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAppbmRleCA4MDIxMmE5ZWU5MTlmMDFh
MWQ3OTdmM2IwODQ0M2IyZmM0ZWVhNzg1Li41NTZiZGY3NWZiNGE4YzhiZmVlOWRmYWIwMGZkZTlj
NmRlMDlmZDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxD
YW52YXNFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUg
IkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCIKICNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiSW5zcGVjdG9yV2ViR0xJbnN0cnVt
ZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb24uaCIK
ICNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNjcmlwdE9i
amVjdC5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAppbmRleCBhYjZjNzVhYjk1YjVjNDYxY2UyNDc0NDAwZjE2MWM1NzM2
MGM4OTgwLi4wYjE1NzI3OWNjZDFhYWI5NTIyNzBmNWY4OTUyZDc3NDBlZWIzZjkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiVjhD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpZiBFTkFC
TEUoV0VCR0wpCi0jaW5jbHVkZSAiSW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJWOFdl
YkdMUmVuZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKaW5kZXggZGQ5Y2IxMWExNjZkM2I3YTgyNTg2ZmQ0MDIyYTlmMzdkMmU3NTdiNy4uNmY0
ZDFmNzAxMGZiNzE0YWE0YWQzMjdiOTQwNWQ3MjE4MmEzZDY1MyAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTQ2LDcgKzQ2
LDYgQEAgRE9NQUlOX0RFRklORV9OQU1FX01BUCA9IHsKICAgICAiSW5kZXhlZERCIjogIklOREVY
RURfREFUQUJBU0UiLAogICAgICJQcm9maWxlciI6ICJKQVZBU0NSSVBUX0RFQlVHR0VSIiwKICAg
ICAiV29ya2VyIjogIldPUktFUlMiLAotICAgICJXZWJHTCI6ICJXRUJHTCIsCiB9CiAKIApAQCAt
NTgsNyArNTcsNyBAQCBUWVBFX05BTUVfRklYX01BUCA9IHsKIAogCiBUWVBFU19XSVRIX1JVTlRJ
TUVfQ0FTVF9TRVQgPSBmcm96ZW5zZXQoWyJSdW50aW1lLlJlbW90ZU9iamVjdCIsICJSdW50aW1l
LlByb3BlcnR5RGVzY3JpcHRvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLCAiRGVidWdnZXIuQ2FsbEZyYW1lIiwg
IldlYkdMLlRyYWNlTG9nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIkRlYnVnZ2VyLkZ1bmN0aW9uRGV0YWlscyIsICJEZWJ1Z2dlci5DYWxsRnJhbWUiLCAiQ2Fu
dmFzLlRyYWNlTG9nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IyBUaGlzIHNob3VsZCBiZSBhIHRlbXBvcmFyeSBoYWNrLiBUaW1lbGluZUV2ZW50IHNob3VsZCBi
ZSBjcmVhdGVkIHZpYSBnZW5lcmF0ZWQgQysrIEFQSS4KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiXSkKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGIyNzhkOTc2ZWMzZjc1NTFmMzdiZTNjOTRmOTNjZTcyNTUxNjI4Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZS5jcHAKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRDYW52YXNN
b2R1bGUuaCIKKworI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuaCIKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1h
bmFnZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIKKyNpbmNsdWRlICJTY3Jp
cHRPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbmplY3RlZFNjcmlwdENhbnZh
c01vZHVsZTo6SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUoKQorICAgIDogSW5qZWN0ZWRTY3Jp
cHRNb2R1bGUoIkluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIikKK3sKK30KKworSW5qZWN0ZWRT
Y3JpcHRDYW52YXNNb2R1bGUgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6Om1vZHVsZUZvclN0
YXRlKEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUpCit7CisgICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgcmVz
dWx0OworICAgIHJlc3VsdC5lbnN1cmVJbmplY3RlZChpbmplY3RlZFNjcmlwdE1hbmFnZXIsIHNj
cmlwdFN0YXRlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJpbmcgSW5qZWN0ZWRTY3Jp
cHRDYW52YXNNb2R1bGU6OnNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJj
ZV9qcyksIHNpemVvZihJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZV9qcykpOworfQor
CisjaWYgRU5BQkxFKFdFQkdMKQorU2NyaXB0T2JqZWN0IEluamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlOjp3cmFwV2ViR0xDb250ZXh0KGNvbnN0IFNjcmlwdE9iamVjdCYgZ2xDb250ZXh0KQorewor
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAi
d3JhcFdlYkdMQ29udGV4dCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGdsQ29udGV4
dCk7CisgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBTY3JpcHRWYWx1ZSByZXN1
bHRWYWx1ZSA9IGNhbGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChmdW5jdGlvbiwgaGFkRXhjZXB0
aW9uKTsKKyAgICBpZiAoaGFkRXhjZXB0aW9uIHx8IHJlc3VsdFZhbHVlLmhhc05vVmFsdWUoKSB8
fCAhcmVzdWx0VmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOworICAgIH0KKyAgICByZXR1cm4gU2Ny
aXB0T2JqZWN0KGdsQ29udGV4dC5zY3JpcHRTdGF0ZSgpLCByZXN1bHRWYWx1ZSk7Cit9CisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdMKQorCit2b2lkIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlOjpj
YXB0dXJlRnJhbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTdHJpbmcqIHRyYWNlTG9nSWQp
Cit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0
KCksICJjYXB0dXJlRnJhbWUiKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdFZh
bHVlOworICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0VmFsdWUpOworICAgIGlmICghcmVz
dWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZVN0
cmluZyB8fCAhcmVzdWx0VmFsdWUtPmFzU3RyaW5nKHRyYWNlTG9nSWQpKQorICAgICAgICAqZXJy
b3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGNhcHR1cmVGcmFtZSI7Cit9CisKK3ZvaWQgSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6OmRyb3BUcmFjZUxvZyhFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgdHJhY2VMb2dJZCkKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImRyb3BUcmFjZUxvZyIpOworICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHRyYWNlTG9nSWQpOworICAgIGJvb2wgaGFkRXhjZXB0
aW9uID0gZmFsc2U7CisgICAgY2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBo
YWRFeGNlcHRpb24pOworICAgIEFTU0VSVCghaGFkRXhjZXB0aW9uKTsKKyAgICBpZiAoaGFkRXhj
ZXB0aW9uKQorICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGRyb3BUcmFj
ZUxvZyI7Cit9CisKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6OnRyYWNlTG9nKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkLCBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkNhbnZhczo6VHJhY2VMb2c+KiB0cmFjZUxvZykKK3sKKyAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgInRyYWNlTG9nIik7
CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodHJhY2VMb2dJZCk7CisgICAgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiByZXN1bHRWYWx1ZTsKKyAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3Vs
dFZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0g
SW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3QpIHsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+
YXNTdHJpbmcoZXJyb3JTdHJpbmcpKQorICAgICAgICAgICAgKmVycm9yU3RyaW5nID0gIkludGVy
bmFsIGVycm9yOiB0cmFjZUxvZyI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgKnRyYWNl
TG9nID0gVHlwZUJ1aWxkZXI6OkNhbnZhczo6VHJhY2VMb2c6OnJ1bnRpbWVDYXN0KHJlc3VsdFZh
bHVlKTsKK30KKwordm9pZCBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZTo6cmVwbGF5VHJhY2VM
b2coRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIGlu
dCBzdGVwTm8sIFN0cmluZyogcmVzdWx0KQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAicmVwbGF5VHJhY2VMb2ciKTsKKyAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudCh0cmFjZUxvZ0lkKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChzdGVwTm8pOworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0VmFsdWU7Cisg
ICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHRWYWx1ZSk7CisgICAgaWYgKCFyZXN1bHRWYWx1
ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpUeXBlU3RyaW5nIHx8
ICFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcocmVzdWx0KSkKKyAgICAgICAgKmVycm9yU3RyaW5nID0g
IkludGVybmFsIGVycm9yOiByZXBsYXlUcmFjZUxvZyI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRkZTIyMzY2MDljY2M3NzRkNjZkNmNiYTlkZjYwYTI5ZjY1MWQ5MmQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUu
aApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZV9oCisj
ZGVmaW5lIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlX2gKKworI2luY2x1ZGUgIkluamVjdGVk
U2NyaXB0TW9kdWxlLmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI7CitjbGFzcyBTY3JpcHRPYmplY3Q7CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCitjbGFzcyBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSA6IHB1YmxpYyBJbmplY3Rl
ZFNjcmlwdE1vZHVsZSB7CitwdWJsaWM6CisgICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUo
KTsKKyAgICAKKyAgICB2aXJ0dWFsIFN0cmluZyBzb3VyY2UoKSBjb25zdDsKKworICAgIHN0YXRp
YyBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGVGb3JTdGF0ZShJbmplY3RlZFNjcmlw
dE1hbmFnZXIqLCBTY3JpcHRTdGF0ZSopOworCisjaWYgRU5BQkxFKFdFQkdMKQorICAgIFNjcmlw
dE9iamVjdCB3cmFwV2ViR0xDb250ZXh0KGNvbnN0IFNjcmlwdE9iamVjdCYgZ2xDb250ZXh0KTsK
KyNlbmRpZgorCisgICAgdm9pZCBjYXB0dXJlRnJhbWUoRXJyb3JTdHJpbmcqLCBTdHJpbmcqKTsK
KyAgICB2b2lkIGRyb3BUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYpOworICAg
IHZvaWQgdHJhY2VMb2coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkNhbnZhczo6VHJhY2VMb2c+Kik7CisgICAgdm9pZCByZXBsYXlUcmFjZUxvZyhFcnJv
clN0cmluZyosIGNvbnN0IFN0cmluZyYsIGludCwgU3RyaW5nKik7Cit9OworCisjZW5kaWYKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5qZWN0ZWRTY3Jp
cHRDYW52YXNNb2R1bGVfaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Nzgw
YWYzYzQxNTI1Yzk4ZTc2YmRiODAzNTcwZWVjM2I4Y2I3N2IyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNl
LmpzCkBAIC0wLDAgKzEsMjExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQHBhcmFtIHtJbmplY3RlZFNjcmlwdEhvc3R9
IEluamVjdGVkU2NyaXB0SG9zdAorICogQHBhcmFtIHtXaW5kb3d9IGluc3BlY3RlZFdpbmRvdwor
ICogQHBhcmFtIHtudW1iZXJ9IGluamVjdGVkU2NyaXB0SWQKKyAqLworKGZ1bmN0aW9uIChJbmpl
Y3RlZFNjcmlwdEhvc3QsIGluc3BlY3RlZFdpbmRvdywgaW5qZWN0ZWRTY3JpcHRJZCkgeworCit2
YXIgVHlwZVV0aWxzID0geworICAgIC8qKgorICAgICAqIGh0dHA6Ly93d3cua2hyb25vcy5vcmcv
cmVnaXN0cnkvdHlwZWRhcnJheS9zcGVjcy9sYXRlc3QvIzcKKyAgICAgKiBAdHlwZSB7QXJyYXku
PEZ1bmN0aW9uPn0KKyAgICAgKi8KKyAgICBfdHlwZWRBcnJheUNsYXNzZXM6IChmdW5jdGlvbih0
eXBlTmFtZXMpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbiA9IHR5cGVOYW1lcy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIGlm
IChpbnNwZWN0ZWRXaW5kb3dbdHlwZU5hbWVzW2ldXSkKKyAgICAgICAgICAgICAgICByZXN1bHQu
cHVzaChpbnNwZWN0ZWRXaW5kb3dbdHlwZU5hbWVzW2ldXSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9KShbIkludDhBcnJheSIsICJVaW50OEFycmF5IiwgIlVpbnQ4
Q2xhbXBlZEFycmF5IiwgIkludDE2QXJyYXkiLCAiVWludDE2QXJyYXkiLCAiSW50MzJBcnJheSIs
ICJVaW50MzJBcnJheSIsICJGbG9hdDMyQXJyYXkiLCAiRmxvYXQ2NEFycmF5Il0pLAorCisgICAg
LyoqCisgICAgICogQHBhcmFtIHsqfSBhcnJheQorICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufQor
ICAgICAqLworICAgIHR5cGVkQXJyYXlDbGFzczogZnVuY3Rpb24oYXJyYXkpCisgICAgeworICAg
ICAgICB2YXIgY2xhc3NlcyA9IFR5cGVVdGlscy5fdHlwZWRBcnJheUNsYXNzZXM7CisgICAgICAg
IGZvciAodmFyIGkgPSAwLCBuID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChhcnJheSBpbnN0YW5jZW9mIGNsYXNzZXNbaV0pCisgICAgICAgICAgICAgICAg
cmV0dXJuIGNsYXNzZXNbaV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7Kn0gb2JqCisgICAgICogQHJldHVybiB7Kn0K
KyAgICAgKiBGSVhNRTogc3VwcHJlc3MgY2hlY2tUeXBlcyBkdWUgdG8gb3V0ZGF0ZWQgYnVpbHRp
biBleHRlcm5zIGZvciBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgYW5kIEltYWdlRGF0YQorICAg
ICAqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30KKyAgICAgKi8KKyAgICBjbG9uZTogZnVuY3Rpb24o
b2JqKQorICAgIHsKKyAgICAgICAgaWYgKCFvYmopCisgICAgICAgICAgICByZXR1cm4gb2JqOwor
CisgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajsKKyAgICAgICAgaWYgKHR5cGUgIT09ICJv
YmplY3QiICYmIHR5cGUgIT09ICJmdW5jdGlvbiIpCisgICAgICAgICAgICByZXR1cm4gb2JqOwor
CisgICAgICAgIC8vIEhhbmRsZSBBcnJheSBhbmQgQXJyYXlCdWZmZXIgaW5zdGFuY2VzLgorICAg
ICAgICBpZiAodHlwZW9mIG9iai5zbGljZSA9PT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAg
Y29uc29sZS5hc3NlcnQob2JqIGluc3RhbmNlb2YgQXJyYXkgfHwgb2JqIGluc3RhbmNlb2YgQXJy
YXlCdWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIG9iai5zbGljZSgwKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciB0eXBlZEFycmF5Q2xhc3MgPSBUeXBlVXRpbHMudHlwZWRBcnJheUNsYXNz
KG9iaik7CisgICAgICAgIGlmICh0eXBlZEFycmF5Q2xhc3MpCisgICAgICAgICAgICByZXR1cm4g
bmV3IHR5cGVkQXJyYXlDbGFzcyhvYmopOworCisgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBI
VE1MSW1hZ2VFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIG9iai5jbG9uZU5vZGUodHJ1ZSk7
CisKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KSB7CisgICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gb2JqLmNsb25lTm9kZSh0cnVlKTsKKyAgICAgICAgICAgIHZh
ciBjb250ZXh0ID0gUmVzb3VyY2Uud3JhcHBlZE9iamVjdChyZXN1bHQuZ2V0Q29udGV4dCgiMmQi
KSk7CisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShvYmosIDAsIDApOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvYmogaW5zdGFuY2Vv
ZiBIVE1MVmlkZW9FbGVtZW50KSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2JqLmNsb25l
Tm9kZSh0cnVlKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDb3B5IEhUTUxWaWRlb0VsZW1lbnQn
cyBjdXJyZW50IGltYWdlIGludG8gYSAyZCBjYW52YXMuCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltYWdlRGF0YSkg
eworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBUeXBlVXRpbHMuX2R1bW15Q2FudmFzMmRDb250
ZXh0KCk7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVJbWFnZURhdGEo
b2JqKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gb2JqLmRhdGEubGVuZ3RoOyBp
IDwgbjsgKytpKQorICAgICAgICAgICAgICByZXN1bHQuZGF0YVtpXSA9IG9iai5kYXRhW2ldOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnNvbGUu
ZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogZmFpbGVkIHRvIGNsb25lIG9iamVjdDogIiwgb2Jq
KTsKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVy
biB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfQorICAgICAqLworICAgIF9kdW1teUNhbnZhczJk
Q29udGV4dDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBUeXBlVXRp
bHMuX2R1bW15Q2FudmFzMmRDb250ZXh0SW5zdGFuY2U7CisgICAgICAgIGlmICghY29udGV4dCkg
eworICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGluc3BlY3RlZFdpbmRvdy5kb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJjYW52YXMiKTsKKyAgICAgICAgICAgIGNvbnRleHQgPSAvKiogQHR5cGUge0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gKi8gUmVzb3VyY2Uud3JhcHBlZE9iamVjdChjYW52YXMu
Z2V0Q29udGV4dCgiMmQiKSk7CisgICAgICAgICAgICBUeXBlVXRpbHMuX2R1bW15Q2FudmFzMmRD
b250ZXh0SW5zdGFuY2UgPSBjb250ZXh0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb250
ZXh0OworICAgIH0KK30KKworLyoqCisgKiBAaW50ZXJmYWNlCisgKi8KK2Z1bmN0aW9uIFN0YWNr
VHJhY2UoKQoreworfQorCitTdGFja1RyYWNlLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge251bWJlcn0gaW5kZXgKKyAgICAgKiBAcmV0dXJuIHt7c291cmNlVVJMOiBzdHJp
bmcsIGxpbmVOdW1iZXI6IG51bWJlciwgY29sdW1uTnVtYmVyOiBudW1iZXJ9fQorICAgICAqLwor
ICAgIGNhbGxGcmFtZTogZnVuY3Rpb24oaW5kZXgpCisgICAgeworICAgIH0KK30KKworLyoqCisg
KiBAcGFyYW0ge251bWJlcj19IHN0YWNrVHJhY2VMaW1pdAorICogQHBhcmFtIHtGdW5jdGlvbj19
IHRvcE1vc3RGdW5jdGlvblRvSWdub3JlCisgKiBAcmV0dXJuIHtTdGFja1RyYWNlfQorICovCitT
dGFja1RyYWNlLmNyZWF0ZSA9IGZ1bmN0aW9uKHN0YWNrVHJhY2VMaW1pdCwgdG9wTW9zdEZ1bmN0
aW9uVG9JZ25vcmUpCit7CisgICAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9
PT0gImZ1bmN0aW9uIikKKyAgICAgICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlVjgoc3RhY2tUcmFj
ZUxpbWl0LCB0b3BNb3N0RnVuY3Rpb25Ub0lnbm9yZSB8fCBhcmd1bWVudHMuY2FsbGVlKTsKKyAg
ICAvLyBGSVhNRTogU3VwcG9ydCBKU0MsIGFuZCBtYXliZSBvdGhlciBicm93c2Vycy4KKyAgICBy
ZXR1cm4gbnVsbDsKK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBpbXBsZW1lbnRzIHtT
dGFja1RyYWNlfQorICogQHBhcmFtIHtudW1iZXI9fSBzdGFja1RyYWNlTGltaXQKKyAqIEBwYXJh
bSB7RnVuY3Rpb249fSB0b3BNb3N0RnVuY3Rpb25Ub0lnbm9yZQorICogQHNlZSBodHRwOi8vY29k
ZS5nb29nbGUuY29tL3Avdjgvd2lraS9KYXZhU2NyaXB0U3RhY2tUcmFjZUFwaQorICovCitmdW5j
dGlvbiBTdGFja1RyYWNlVjgoc3RhY2tUcmFjZUxpbWl0LCB0b3BNb3N0RnVuY3Rpb25Ub0lnbm9y
ZSkKK3sKKyAgICBTdGFja1RyYWNlLmNhbGwodGhpcyk7CisgICAgdmFyIG9sZFN0YWNrVHJhY2VM
aW1pdCA9IEVycm9yLnN0YWNrVHJhY2VMaW1pdDsKKyAgICBpZiAodHlwZW9mIHN0YWNrVHJhY2VM
aW1pdCA9PT0gIm51bWJlciIpCisgICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IHN0YWNr
VHJhY2VMaW1pdDsKKworICAgIHRoaXMuX2Vycm9yID0gLyoqIEB0eXBlIHt7c3RhY2s6IEFycmF5
fX0gKi8ge307CisgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcy5fZXJyb3IsIHRvcE1v
c3RGdW5jdGlvblRvSWdub3JlIHx8IGFyZ3VtZW50cy5jYWxsZWUpOworCisgICAgRXJyb3Iuc3Rh
Y2tUcmFjZUxpbWl0ID0gb2xkU3RhY2tUcmFjZUxpbWl0OworfQorCitTdGFja1RyYWNlVjgucHJv
dG90eXBlID0geworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBpbmRleAorICAgICAqIEByZXR1cm4ge3tzb3VyY2VVUkw6IHN0cmluZywgbGluZU51bWJl
cjogbnVtYmVyLCBjb2x1bW5OdW1iZXI6IG51bWJlcn19CisgICAgICovCisgICAgY2FsbEZyYW1l
OiBmdW5jdGlvbihpbmRleCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc3RhY2tUcmFjZSkK
KyAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiB0
aGlzLl9zdGFja1RyYWNlW2luZGV4XTsKKyAgICB9LAorCisgICAgX3ByZXBhcmVTdGFja1RyYWNl
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgb2xkUHJlcGFyZVN0YWNrVHJhY2UgPSBF
cnJvci5wcmVwYXJlU3RhY2tUcmFjZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBwYXJhbSB7
T2JqZWN0fSBlcnJvcgorICAgICAgICAgKiBAcGFyYW0ge0FycmF5LjxDYWxsU2l0ZT59IHN0cnVj
dHVyZWRTdGFja1RyYWNlCisgICAgICAgICAqIEByZXR1cm4ge0FycmF5Ljx7c291cmNlVVJMOiBz
dHJpbmcsIGxpbmVOdW1iZXI6IG51bWJlciwgY29sdW1uTnVtYmVyOiBudW1iZXJ9Pn0KKyAgICAg
ICAgICovCisgICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24oZXJyb3Is
IHN0cnVjdHVyZWRTdGFja1RyYWNlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlZFN0YWNrVHJhY2UubWFwKGZ1bmN0aW9uKGNhbGxTaXRlKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMOiBjYWxsU2l0ZS5nZXRG
aWxlTmFtZSgpLAorICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBjYWxsU2l0ZS5nZXRM
aW5lTnVtYmVyKCksCisgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogY2FsbFNpdGUu
Z2V0Q29sdW1uTnVtYmVyKCkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fc3RhY2tUcmFjZSA9IHRoaXMuX2Vycm9yLnN0YWNrOwor
ICAgICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IG9sZFByZXBhcmVTdGFja1RyYWNlOwor
ICAgICAgICBkZWxldGUgdGhpcy5fZXJyb3I7IC8vIE5vIGxvbmdlciBuZWVkZWQsIGZyZWUgbWVt
b3J5LgorICAgIH0KK30KKworU3RhY2tUcmFjZVY4LnByb3RvdHlwZS5fX3Byb3RvX18gPSBTdGFj
a1RyYWNlLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24g
Q2FjaGUoKQoreworICAgIHRoaXMucmVzZXQoKTsKK30KKworQ2FjaGUucHJvdG90eXBlID0gewor
ICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAgICAgKi8KKyAgICBzaXplOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZTsKKyAgICB9LAorCisgICAg
cmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2l0ZW1zID0gT2JqZWN0LmNy
ZWF0ZShudWxsKTsKKyAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXkKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAg
ICAqLworICAgIGhhczogZnVuY3Rpb24oa2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleSBp
biB0aGlzLl9pdGVtczsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9
IGtleQorICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8KKyAgICBnZXQ6IGZ1bmN0aW9u
KGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9pdGVtc1trZXldOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0ga2V5CisgICAgICogQHBhcmFtIHtPYmpl
Y3R9IGl0ZW0KKyAgICAgKi8KKyAgICBwdXQ6IGZ1bmN0aW9uKGtleSwgaXRlbSkKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5oYXMoa2V5KSkKKyAgICAgICAgICAgICsrdGhpcy5fc2l6ZTsKKyAg
ICAgICAgdGhpcy5faXRlbXNba2V5XSA9IGl0ZW07CisgICAgfQorfQorCisvKioKKyAqIEBjb25z
dHJ1Y3RvcgorICogQHBhcmFtIHtSZXNvdXJjZXxPYmplY3R9IHRoaXNPYmplY3QKKyAqIEBwYXJh
bSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUKKyAqIEBwYXJhbSB7QXJyYXl8QXJndW1lbnRzfSBhcmdz
CisgKiBAcGFyYW0ge1Jlc291cmNlfCo9fSByZXN1bHQKKyAqIEBwYXJhbSB7U3RhY2tUcmFjZT19
IHN0YWNrVHJhY2UKKyAqLworZnVuY3Rpb24gQ2FsbCh0aGlzT2JqZWN0LCBmdW5jdGlvbk5hbWUs
IGFyZ3MsIHJlc3VsdCwgc3RhY2tUcmFjZSkKK3sKKyAgICB0aGlzLl90aGlzT2JqZWN0ID0gdGhp
c09iamVjdDsKKyAgICB0aGlzLl9mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CisgICAgdGhp
cy5fYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MsIDApOworICAgIHRoaXMu
X3Jlc3VsdCA9IHJlc3VsdDsKKyAgICB0aGlzLl9zdGFja1RyYWNlID0gc3RhY2tUcmFjZSB8fCBu
dWxsOworfQorCitDYWxsLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtS
ZXNvdXJjZX0KKyAgICAgKi8KKyAgICByZXNvdXJjZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFJlc291cmNlLmZvck9iamVjdCh0aGlzLl90aGlzT2JqZWN0KTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHJldHVybiB7c3RyaW5nfQorICAgICAqLworICAgIGZ1bmN0aW9u
TmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uTmFt
ZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7QXJyYXl9CisgICAgICovCisg
ICAgYXJnczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2FyZ3M7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4geyp9CisgICAgICovCisgICAgcmVzdWx0
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVzdWx0OworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtTdGFja1RyYWNlfQorICAgICAqLworICAgIHN0
YWNrVHJhY2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zdGFja1Ry
YWNlOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1N0YWNrVHJhY2V9IHN0YWNr
VHJhY2UKKyAgICAgKi8KKyAgICBzZXRTdGFja1RyYWNlOiBmdW5jdGlvbihzdGFja1RyYWNlKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fc3RhY2tUcmFjZSA9IHN0YWNrVHJhY2U7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAqIEBwYXJhbSB7Kn0gcmVzdWx0CisgICAgICovCisgICAgc2V0UmVzdWx0
OiBmdW5jdGlvbihyZXN1bHQpCisgICAgeworICAgICAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7
CisgICAgfSwKKworICAgIGZyZWV6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMuX2ZyZWV6ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2ZyZWV6ZWQg
PSB0cnVlOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRoaXMuX2FyZ3MubGVuZ3RoOyBp
IDwgbjsgKytpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogZnJlZXplIHRoZSBSZXNvdXJjZXMg
YWxzbyEKKyAgICAgICAgICAgIGlmICghUmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMuX2FyZ3NbaV0p
KQorICAgICAgICAgICAgICAgIHRoaXMuX2FyZ3NbaV0gPSBUeXBlVXRpbHMuY2xvbmUodGhpcy5f
YXJnc1tpXSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtD
YWNoZX0gY2FjaGUKKyAgICAgKiBAcmV0dXJuIHtSZXBsYXlhYmxlQ2FsbH0KKyAgICAgKi8KKyAg
ICB0b1JlcGxheWFibGU6IGZ1bmN0aW9uKGNhY2hlKQorICAgIHsKKyAgICAgICAgdGhpcy5mcmVl
emUoKTsKKyAgICAgICAgdmFyIHRoaXNPYmplY3QgPSAvKiogQHR5cGUge1JlcGxheWFibGVSZXNv
dXJjZX0gKi8gUmVzb3VyY2UudG9SZXBsYXlhYmxlKHRoaXMuX3RoaXNPYmplY3QsIGNhY2hlKTsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IFJlc291cmNlLnRvUmVwbGF5YWJsZSh0aGlzLl9yZXN1bHQs
IGNhY2hlKTsKKyAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9hcmdzLm1hcChmdW5jdGlvbihvYmop
IHsKKyAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZS50b1JlcGxheWFibGUob2JqLCBjYWNoZSk7
CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gbmV3IFJlcGxheWFibGVDYWxsKHRoaXNPYmpl
Y3QsIHRoaXMuX2Z1bmN0aW9uTmFtZSwgYXJncywgcmVzdWx0LCB0aGlzLl9zdGFja1RyYWNlKTsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXBsYXlhYmxlQ2FsbH0gcmVwbGF5
YWJsZUNhbGwKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqIEByZXR1cm4ge0Nh
bGx9CisgICAgICovCisgICAgcmVwbGF5OiBmdW5jdGlvbihyZXBsYXlhYmxlQ2FsbCwgY2FjaGUp
CisgICAgeworICAgICAgICB2YXIgcmVwbGF5T2JqZWN0ID0gUmVwbGF5YWJsZVJlc291cmNlLnJl
cGxheShyZXBsYXlhYmxlQ2FsbC5yZXNvdXJjZSgpLCBjYWNoZSk7CisgICAgICAgIHZhciByZXBs
YXlGdW5jdGlvbiA9IHJlcGxheU9iamVjdFtyZXBsYXlhYmxlQ2FsbC5mdW5jdGlvbk5hbWUoKV07
CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHR5cGVvZiByZXBsYXlGdW5jdGlvbiA9PT0gImZ1bmN0
aW9uIiwgIkV4cGVjdGVkIGEgZnVuY3Rpb24gdG8gcmVwbGF5Iik7CisgICAgICAgIHZhciByZXBs
YXlBcmdzID0gcmVwbGF5YWJsZUNhbGwuYXJncygpLm1hcChmdW5jdGlvbihvYmopIHsKKyAgICAg
ICAgICAgIHJldHVybiBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KG9iaiwgY2FjaGUpOworICAg
ICAgICB9KTsKKyAgICAgICAgdmFyIHJlcGxheVJlc3VsdCA9IHJlcGxheUZ1bmN0aW9uLmFwcGx5
KHJlcGxheU9iamVjdCwgcmVwbGF5QXJncyk7CisgICAgICAgIGlmIChyZXBsYXlhYmxlQ2FsbC5y
ZXN1bHQoKSBpbnN0YW5jZW9mIFJlcGxheWFibGVSZXNvdXJjZSkgeworICAgICAgICAgICAgdmFy
IHJlc291cmNlID0gcmVwbGF5YWJsZUNhbGwucmVzdWx0KCkucmVwbGF5KGNhY2hlKTsKKyAgICAg
ICAgICAgIGlmICghcmVzb3VyY2Uud3JhcHBlZE9iamVjdCgpKQorICAgICAgICAgICAgICAgIHJl
c291cmNlLnNldFdyYXBwZWRPYmplY3QocmVwbGF5UmVzdWx0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMuX3RoaXNPYmplY3QgPSByZXBsYXlPYmplY3Q7CisgICAgICAgIHRoaXMuX2Z1bmN0
aW9uTmFtZSA9IHJlcGxheWFibGVDYWxsLmZ1bmN0aW9uTmFtZSgpOworICAgICAgICB0aGlzLl9h
cmdzID0gcmVwbGF5QXJnczsKKyAgICAgICAgdGhpcy5fcmVzdWx0ID0gcmVwbGF5UmVzdWx0Owor
ICAgICAgICB0aGlzLl9zdGFja1RyYWNlID0gcmVwbGF5YWJsZUNhbGwuc3RhY2tUcmFjZSgpOwor
ICAgICAgICB0aGlzLl9mcmVlemVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtSZXBsYXlhYmxlUmVzb3Vy
Y2V9IHRoaXNPYmplY3QKKyAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUKKyAqIEBwYXJh
bSB7QXJyYXkuPFJlcGxheWFibGVSZXNvdXJjZXwqPn0gYXJncworICogQHBhcmFtIHtSZXBsYXlh
YmxlUmVzb3VyY2V8Kn0gcmVzdWx0CisgKiBAcGFyYW0ge1N0YWNrVHJhY2V9IHN0YWNrVHJhY2UK
KyAqLworZnVuY3Rpb24gUmVwbGF5YWJsZUNhbGwodGhpc09iamVjdCwgZnVuY3Rpb25OYW1lLCBh
cmdzLCByZXN1bHQsIHN0YWNrVHJhY2UpCit7CisgICAgdGhpcy5fdGhpc09iamVjdCA9IHRoaXNP
YmplY3Q7CisgICAgdGhpcy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lOworICAgIHRoaXMu
X2FyZ3MgPSBhcmdzOworICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDsKKyAgICB0aGlzLl9zdGFj
a1RyYWNlID0gc3RhY2tUcmFjZTsKK30KKworUmVwbGF5YWJsZUNhbGwucHJvdG90eXBlID0gewor
ICAgIC8qKgorICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVSZXNvdXJjZX0KKyAgICAgKi8KKyAg
ICByZXNvdXJjZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RoaXNP
YmplY3Q7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAg
Ki8KKyAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9mdW5jdGlvbk5hbWU7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge0Fy
cmF5LjxSZXBsYXlhYmxlUmVzb3VyY2V8Kj59CisgICAgICovCisgICAgYXJnczogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2FyZ3M7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVSZXNvdXJjZXwqfQorICAgICAqLworICAgIHJlc3Vs
dDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7U3RhY2tUcmFjZX0KKyAgICAgKi8KKyAgICBz
dGFja1RyYWNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc3RhY2tU
cmFjZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAg
ICAgKiBAcmV0dXJuIHtDYWxsfQorICAgICAqLworICAgIHJlcGxheTogZnVuY3Rpb24oY2FjaGUp
CisgICAgeworICAgICAgICB2YXIgY2FsbCA9IE9iamVjdC5jcmVhdGUoQ2FsbC5wcm90b3R5cGUp
OworICAgICAgICByZXR1cm4gY2FsbC5yZXBsYXkodGhpcywgY2FjaGUpOworICAgIH0KK30KKwor
LyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVkT2JqZWN0Cisg
Ki8KK2Z1bmN0aW9uIFJlc291cmNlKHdyYXBwZWRPYmplY3QpCit7CisgICAgdGhpcy5faWQgPSAr
K1Jlc291cmNlLl91bmlxdWVJZDsKKyAgICB0aGlzLl9yZXNvdXJjZU1hbmFnZXIgPSBudWxsOwor
ICAgIHRoaXMuX2NhbGxzID0gW107CisgICAgdGhpcy5zZXRXcmFwcGVkT2JqZWN0KHdyYXBwZWRP
YmplY3QpOworfQorCisvKioKKyAqIEB0eXBlIHtudW1iZXJ9CisgKi8KK1Jlc291cmNlLl91bmlx
dWVJZCA9IDA7CisKKy8qKgorICogQHBhcmFtIHsqfSBvYmoKKyAqIEByZXR1cm4ge1Jlc291cmNl
fQorICovCitSZXNvdXJjZS5mb3JPYmplY3QgPSBmdW5jdGlvbihvYmopCit7CisgICAgaWYgKCFv
YmopCisgICAgICAgIHJldHVybiBudWxsOworICAgIGlmIChvYmogaW5zdGFuY2VvZiBSZXNvdXJj
ZSkKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICBpZiAodHlwZW9mIG9iaiA9PT0gIm9iamVjdCIp
CisgICAgICAgIHJldHVybiBvYmpbIl9fcmVzb3VyY2VPYmplY3QiXTsKKyAgICByZXR1cm4gbnVs
bDsKK30KKworLyoqCisgKiBAcGFyYW0ge1Jlc291cmNlfCp9IG9iagorICogQHJldHVybiB7Kn0K
KyAqLworUmVzb3VyY2Uud3JhcHBlZE9iamVjdCA9IGZ1bmN0aW9uKG9iaikKK3sKKyAgICB2YXIg
cmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qob2JqKTsKKyAgICByZXR1cm4gcmVzb3VyY2Ug
PyByZXNvdXJjZS53cmFwcGVkT2JqZWN0KCkgOiBvYmo7Cit9CisKKy8qKgorICogQHBhcmFtIHtS
ZXNvdXJjZXwqfSBvYmoKKyAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCisgKiBAcmV0dXJuIHtSZXBs
YXlhYmxlUmVzb3VyY2V8Kn0KKyAqLworUmVzb3VyY2UudG9SZXBsYXlhYmxlID0gZnVuY3Rpb24o
b2JqLCBjYWNoZSkKK3sKKyAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qob2Jq
KTsKKyAgICByZXR1cm4gcmVzb3VyY2UgPyByZXNvdXJjZS50b1JlcGxheWFibGUoY2FjaGUpIDog
b2JqOworfQorCitSZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVy
biB7bnVtYmVyfQorICAgICAqLworICAgIGlkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5faWQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge09iamVj
dH0KKyAgICAgKi8KKyAgICB3cmFwcGVkT2JqZWN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fd3JhcHBlZE9iamVjdDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHBhcmFtIHtPYmplY3R9IHZhbHVlCisgICAgICovCisgICAgc2V0V3JhcHBlZE9iamVjdDogZnVu
Y3Rpb24odmFsdWUpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh2YWx1ZSwgIndyYXBw
ZWRPYmplY3Qgc2hvdWxkIG5vdCBiZSBOVUxMIik7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCEo
dmFsdWUgaW5zdGFuY2VvZiBSZXNvdXJjZSksICJCaW5kaW5nIGEgUmVzb3VyY2Ugb2JqZWN0IHRv
IGFub3RoZXIgUmVzb3VyY2Ugb2JqZWN0PyIpOworICAgICAgICB0aGlzLl93cmFwcGVkT2JqZWN0
ID0gdmFsdWU7CisgICAgICAgIHRoaXMuX2JpbmRPYmplY3RUb1Jlc291cmNlKHZhbHVlKTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAgICAqLworICAgIHBy
b3h5T2JqZWN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3Byb3h5T2Jq
ZWN0KQorICAgICAgICAgICAgdGhpcy5fcHJveHlPYmplY3QgPSB0aGlzLl93cmFwT2JqZWN0KCk7
CisgICAgICAgIHJldHVybiB0aGlzLl9wcm94eU9iamVjdDsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHJldHVybiB7UmVzb3VyY2VUcmFja2luZ01hbmFnZXJ9CisgICAgICovCisgICAgbWFu
YWdlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlTWFu
YWdlcjsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZVRyYWNraW5n
TWFuYWdlcn0gdmFsdWUKKyAgICAgKi8KKyAgICBzZXRNYW5hZ2VyOiBmdW5jdGlvbih2YWx1ZSkK
KyAgICB7CisgICAgICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IHZhbHVlOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtBcnJheS48Q2FsbD59CisgICAgICovCisgICAgY2Fs
bHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jYWxsczsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKiBAcmV0dXJu
IHtSZXBsYXlhYmxlUmVzb3VyY2V9CisgICAgICovCisgICAgdG9SZXBsYXlhYmxlOiBmdW5jdGlv
bihjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciByZXN1bHQgPSBjYWNoZS5nZXQodGhpcy5faWQp
OworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgdmFyIGRhdGEgPSB7CisgICAgICAgICAgICBpZDogdGhpcy5faWQKKyAgICAgICAgfTsKKyAg
ICAgICAgcmVzdWx0ID0gbmV3IFJlcGxheWFibGVSZXNvdXJjZSh0aGlzLCBkYXRhKTsKKyAgICAg
ICAgY2FjaGUucHV0KHRoaXMuX2lkLCByZXN1bHQpOyAvLyBQdXQgaW50byB0aGUgY2FjaGUgZWFy
bHkgdG8gYXZvaWQgbG9vcHMuCisgICAgICAgIGRhdGEuY2FsbHMgPSB0aGlzLl9jYWxscy5tYXAo
ZnVuY3Rpb24oY2FsbCkgeworICAgICAgICAgICAgcmV0dXJuIGNhbGwudG9SZXBsYXlhYmxlKGNh
Y2hlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3BvcHVsYXRlUmVwbGF5YWJsZURhdGEo
ZGF0YSwgY2FjaGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hl
CisgICAgICovCisgICAgX3BvcHVsYXRlUmVwbGF5YWJsZURhdGE6IGZ1bmN0aW9uKGRhdGEsIGNh
Y2hlKQorICAgIHsKKyAgICAgICAgLy8gRG8gbm90aGluZy4gU2hvdWxkIGJlIG92ZXJyaWRkZW4g
Ynkgc3ViY2xhc3Nlcy4KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtPYmplY3R9
IGRhdGEKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqIEByZXR1cm4ge1Jlc291
cmNlfQorICAgICAqLworICAgIHJlcGxheTogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgewor
ICAgICAgICB2YXIgcmVzb3VyY2UgPSBjYWNoZS5nZXQoZGF0YS5pZCk7CisgICAgICAgIGlmIChy
ZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybiByZXNvdXJjZTsKKyAgICAgICAgdGhpcy5faWQg
PSBkYXRhLmlkOworICAgICAgICB0aGlzLl9yZXNvdXJjZU1hbmFnZXIgPSBudWxsOworICAgICAg
ICB0aGlzLl9jYWxscyA9IFtdOworICAgICAgICB0aGlzLl93cmFwcGVkT2JqZWN0ID0gbnVsbDsK
KyAgICAgICAgY2FjaGUucHV0KGRhdGEuaWQsIHRoaXMpOyAvLyBQdXQgaW50byB0aGUgY2FjaGUg
ZWFybHkgdG8gYXZvaWQgbG9vcHMuCisgICAgICAgIHRoaXMuX2RvUmVwbGF5Q2FsbHMoZGF0YSwg
Y2FjaGUpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl93cmFwcGVkT2JqZWN0LCAiUmVz
b3VyY2Ugc2hvdWxkIGJlIHJlY29uc3RydWN0ZWQhIik7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICAgICAqIEBw
YXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICovCisgICAgX2RvUmVwbGF5Q2FsbHM6IGZ1bmN0aW9u
KGRhdGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBkYXRhLmNh
bGxzLmxlbmd0aDsgaSA8IG47ICsraSkKKyAgICAgICAgICAgIHRoaXMuX2NhbGxzLnB1c2goZGF0
YS5jYWxsc1tpXS5yZXBsYXkoY2FjaGUpKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtDYWxsfSBjYWxsCisgICAgICovCisgICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCisg
ICAgeworICAgICAgICBjYWxsLmZyZWV6ZSgpOworICAgICAgICB0aGlzLl9jYWxscy5wdXNoKGNh
bGwpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0geyFPYmplY3R9IG9iamVjdAor
ICAgICAqLworICAgIF9iaW5kT2JqZWN0VG9SZXNvdXJjZTogZnVuY3Rpb24ob2JqZWN0KQorICAg
IHsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgIl9fcmVzb3VyY2VPYmpl
Y3QiLCB7CisgICAgICAgICAgICB2YWx1ZTogdGhpcywKKyAgICAgICAgICAgIHdyaXRhYmxlOiBm
YWxzZSwKKyAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgICAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgICAgIH0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0
dXJuIHtPYmplY3R9CisgICAgICovCisgICAgX3dyYXBPYmplY3Q6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHZhciB3cmFwcGVkT2JqZWN0ID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7CisgICAg
ICAgIGlmICghd3JhcHBlZE9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICB2YXIgcHJveHkgPSBPYmplY3QuY3JlYXRlKHdyYXBwZWRPYmplY3QuX19wcm90b19fKTsgLy8g
SW4gb3JkZXIgdG8gZW11bGF0ZSAiaW5zdGFuY2VvZiIuCisKKyAgICAgICAgdmFyIHNlbGYgPSB0
aGlzOworICAgICAgICB2YXIgY3VzdG9tV3JhcEZ1bmN0aW9ucyA9IHRoaXMuX2N1c3RvbVdyYXBG
dW5jdGlvbnMoKTsKKyAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnR5KHByb3BlcnR5KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZW9mIHdyYXBwZWRPYmplY3RbcHJvcGVydHld
ID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgdmFyIGN1c3RvbVdyYXBGdW5jdGlv
biA9IGN1c3RvbVdyYXBGdW5jdGlvbnNbcHJvcGVydHldOworICAgICAgICAgICAgICAgIGlmIChj
dXN0b21XcmFwRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIHByb3h5W3Byb3BlcnR5XSA9
IHNlbGYuX3dyYXBDdXN0b21GdW5jdGlvbihzZWxmLCB3cmFwcGVkT2JqZWN0LCB3cmFwcGVkT2Jq
ZWN0W3Byb3BlcnR5XSwgcHJvcGVydHksIGN1c3RvbVdyYXBGdW5jdGlvbik7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcm94eVtwcm9wZXJ0eV0gPSBzZWxmLl93
cmFwRnVuY3Rpb24oc2VsZiwgd3JhcHBlZE9iamVjdCwgd3JhcHBlZE9iamVjdFtwcm9wZXJ0eV0s
IHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoL15bQS1aMC05X10rJC8udGVzdChw
cm9wZXJ0eSkgJiYgdHlwZW9mIHdyYXBwZWRPYmplY3RbcHJvcGVydHldID09PSAibnVtYmVyIikg
eworICAgICAgICAgICAgICAgIC8vIEZhc3QgYWNjZXNzIHRvIGVudW1zIGFuZCBjb25zdGFudHMu
CisgICAgICAgICAgICAgICAgcHJveHlbcHJvcGVydHldID0gd3JhcHBlZE9iamVjdFtwcm9wZXJ0
eV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShwcm94eSwgcHJvcGVydHksIHsKKyAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5j
dGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB3cmFwcGVkT2JqZWN0W3Byb3BlcnR5XTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IExvZyB0aGUgc2V0dGVyIGNh
bGxzLgorICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRklYTUU6IFNldHRp
bmcgYW4gYXR0cmlidXRlICVzIHdhcyBub3QgbG9nZ2VkLiIsIHByb3BlcnR5KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZWRPYmplY3RbcHJvcGVydHldID0gdmFsdWU7CisgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZh
ciBpc0VtcHR5ID0gdHJ1ZTsKKyAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gd3JhcHBlZE9i
amVjdCkgeworICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOworICAgICAgICAgICAgcHJvY2Vz
c1Byb3BlcnR5KHByb3BlcnR5KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNFbXB0eSkKKyAg
ICAgICAgICAgIHJldHVybiB3cmFwcGVkT2JqZWN0OyAvLyBOb3RoaW5nIHRvIHByb3h5LgorCisg
ICAgICAgIHRoaXMuX2JpbmRPYmplY3RUb1Jlc291cmNlKHByb3h5KTsKKyAgICAgICAgcmV0dXJu
IHByb3h5OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1Jlc291cmNlfSByZXNv
dXJjZQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcmlnaW5hbE9iamVjdAorICAgICAqIEBwYXJh
bSB7RnVuY3Rpb259IG9yaWdpbmFsRnVuY3Rpb24KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVu
Y3Rpb25OYW1lCisgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9tV3JhcEZ1bmN0aW9uCisg
ICAgICogQHJldHVybiB7RnVuY3Rpb259CisgICAgICovCisgICAgX3dyYXBDdXN0b21GdW5jdGlv
bjogZnVuY3Rpb24ocmVzb3VyY2UsIG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBm
dW5jdGlvbk5hbWUsIGN1c3RvbVdyYXBGdW5jdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBm
dW5jdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtYW5hZ2VyID0gcmVzb3VyY2Uu
bWFuYWdlcigpOworICAgICAgICAgICAgdmFyIGlzQ2FwdHVyaW5nID0gbWFuYWdlciAmJiBtYW5h
Z2VyLmNhcHR1cmluZygpOworICAgICAgICAgICAgaWYgKGlzQ2FwdHVyaW5nKQorICAgICAgICAg
ICAgICAgIG1hbmFnZXIuY2FwdHVyZUFyZ3VtZW50cyhyZXNvdXJjZSwgYXJndW1lbnRzKTsKKyAg
ICAgICAgICAgIHZhciB3cmFwRnVuY3Rpb24gPSBuZXcgUmVzb3VyY2UuV3JhcEZ1bmN0aW9uKG9y
aWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cyk7
CisgICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24uYXBwbHkod3JhcEZ1bmN0aW9uLCBhcmd1
bWVudHMpOworICAgICAgICAgICAgaWYgKGlzQ2FwdHVyaW5nKSB7CisgICAgICAgICAgICAgICAg
dmFyIGNhbGwgPSB3cmFwRnVuY3Rpb24uY2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGwuc2V0
U3RhY2tUcmFjZShTdGFja1RyYWNlLmNyZWF0ZSgxLCBhcmd1bWVudHMuY2FsbGVlKSk7CisgICAg
ICAgICAgICAgICAgbWFuYWdlci5yZXBvcnRDYWxsKGNhbGwpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHdyYXBGdW5jdGlvbi5yZXN1bHQoKTsKKyAgICAgICAgfTsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVzb3VyY2UKKyAgICAgKiBA
cGFyYW0ge09iamVjdH0gb3JpZ2luYWxPYmplY3QKKyAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBv
cmlnaW5hbEZ1bmN0aW9uCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZQorICAg
ICAqIEByZXR1cm4ge0Z1bmN0aW9ufQorICAgICAqLworICAgIF93cmFwRnVuY3Rpb246IGZ1bmN0
aW9uKHJlc291cmNlLCBvcmlnaW5hbE9iamVjdCwgb3JpZ2luYWxGdW5jdGlvbiwgZnVuY3Rpb25O
YW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdmFyIG1hbmFnZXIgPSByZXNvdXJjZS5tYW5hZ2VyKCk7CisgICAgICAgICAgICBpZiAo
IW1hbmFnZXIgfHwgIW1hbmFnZXIuY2FwdHVyaW5nKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkob3JpZ2luYWxPYmplY3QsIGFyZ3VtZW50cyk7CisgICAg
ICAgICAgICBtYW5hZ2VyLmNhcHR1cmVBcmd1bWVudHMocmVzb3VyY2UsIGFyZ3VtZW50cyk7Cisg
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWxGdW5jdGlvbi5hcHBseShvcmlnaW5hbE9i
amVjdCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIHZhciBzdGFja1RyYWNlID0gU3RhY2tUcmFj
ZS5jcmVhdGUoMSwgYXJndW1lbnRzLmNhbGxlZSk7CisgICAgICAgICAgICB2YXIgY2FsbCA9IG5l
dyBDYWxsKHJlc291cmNlLCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cywgcmVzdWx0LCBzdGFja1Ry
YWNlKTsKKyAgICAgICAgICAgIG1hbmFnZXIucmVwb3J0Q2FsbChjYWxsKTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBy
ZXR1cm4ge09iamVjdC48c3RyaW5nLCBGdW5jdGlvbj59CisgICAgICovCisgICAgX2N1c3RvbVdy
YXBGdW5jdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB7fTsgLy8gTWF5
IGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KKyAgICB9Cit9CisKKy8qKgorICogQGNvbnN0
cnVjdG9yCisgKiBAcGFyYW0ge09iamVjdH0gb3JpZ2luYWxPYmplY3QKKyAqIEBwYXJhbSB7RnVu
Y3Rpb259IG9yaWdpbmFsRnVuY3Rpb24KKyAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUK
KyAqIEBwYXJhbSB7QXJyYXl8QXJndW1lbnRzfSBhcmdzCisgKi8KK1Jlc291cmNlLldyYXBGdW5j
dGlvbiA9IGZ1bmN0aW9uKG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlv
bk5hbWUsIGFyZ3MpCit7CisgICAgdGhpcy5fb3JpZ2luYWxPYmplY3QgPSBvcmlnaW5hbE9iamVj
dDsKKyAgICB0aGlzLl9vcmlnaW5hbEZ1bmN0aW9uID0gb3JpZ2luYWxGdW5jdGlvbjsKKyAgICB0
aGlzLl9mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CisgICAgdGhpcy5fYXJncyA9IGFyZ3M7
CisgICAgdGhpcy5fcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qob3JpZ2luYWxPYmplY3Qp
OworICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3Jlc291cmNlLCAiRXhwZWN0ZWQgYSB3cmFwcGVk
IGNhbGwgb24gYSBSZXNvdXJjZSBvYmplY3QuIik7Cit9CisKK1Jlc291cmNlLldyYXBGdW5jdGlv
bi5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVybiB7Kn0KKyAgICAgKi8KKyAg
ICByZXN1bHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fZXhlY3V0ZWQp
IHsKKyAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMu
X3Jlc3VsdCA9IHRoaXMuX29yaWdpbmFsRnVuY3Rpb24uYXBwbHkodGhpcy5fb3JpZ2luYWxPYmpl
Y3QsIHRoaXMuX2FyZ3MpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7
CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge0NhbGx9CisgICAgICovCisgICAg
Y2FsbDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYWxsKQorICAgICAg
ICAgICAgdGhpcy5fY2FsbCA9IG5ldyBDYWxsKHRoaXMuX3Jlc291cmNlLCB0aGlzLl9mdW5jdGlv
bk5hbWUsIHRoaXMuX2FyZ3MsIHRoaXMucmVzdWx0KCkpOworICAgICAgICByZXR1cm4gdGhpcy5f
Y2FsbDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHsqfSByZXN1bHQKKyAgICAg
Ki8KKyAgICBvdmVycmlkZVJlc3VsdDogZnVuY3Rpb24ocmVzdWx0KQorICAgIHsKKyAgICAgICAg
dmFyIGNhbGwgPSB0aGlzLmNhbGwoKTsKKyAgICAgICAgY2FsbC5zZXRSZXN1bHQocmVzdWx0KTsK
KyAgICAgICAgdGhpcy5fcmVzdWx0ID0gcmVzdWx0OworICAgIH0KK30KKworLyoqCisgKiBAY29u
c3RydWN0b3IKKyAqIEBwYXJhbSB7UmVzb3VyY2V9IG9yaWdpbmFsUmVzb3VyY2UKKyAqIEBwYXJh
bSB7T2JqZWN0fSBkYXRhCisgKi8KK2Z1bmN0aW9uIFJlcGxheWFibGVSZXNvdXJjZShvcmlnaW5h
bFJlc291cmNlLCBkYXRhKQoreworICAgIHRoaXMuX3Byb3RvID0gb3JpZ2luYWxSZXNvdXJjZS5f
X3Byb3RvX187CisgICAgdGhpcy5fZGF0YSA9IGRhdGE7Cit9CisKK1JlcGxheWFibGVSZXNvdXJj
ZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAg
ICAgKiBAcmV0dXJuIHtSZXNvdXJjZX0KKyAgICAgKi8KKyAgICByZXBsYXk6IGZ1bmN0aW9uKGNh
Y2hlKQorICAgIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUodGhpcy5fcHJv
dG8pOworICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGF5KHRoaXMuX2RhdGEsIGNhY2hlKQor
ICAgICAgICBjb25zb2xlLmFzc2VydChyZXN1bHQuX19wcm90b19fID09PSB0aGlzLl9wcm90bywg
Ildyb25nIHR5cGUgb2YgYSByZXBsYXkgcmVzdWx0Iik7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorfQorCisvKioKKyAqIEBwYXJhbSB7UmVwbGF5YWJsZVJlc291cmNlfCp9IG9iagor
ICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAqIEByZXR1cm4geyp9CisgKi8KK1JlcGxheWFibGVS
ZXNvdXJjZS5yZXBsYXkgPSBmdW5jdGlvbihvYmosIGNhY2hlKQoreworICAgIHJldHVybiAob2Jq
IGluc3RhbmNlb2YgUmVwbGF5YWJsZVJlc291cmNlKSA/IG9iai5yZXBsYXkoY2FjaGUpLndyYXBw
ZWRPYmplY3QoKSA6IG9iajsKK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRz
IHtSZXNvdXJjZX0KKyAqLworZnVuY3Rpb24gV2ViR0xCb3VuZFJlc291cmNlKHdyYXBwZWRPYmpl
Y3QpCit7CisgICAgUmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsKKyAgICB0aGlz
Ll9zdGF0ZSA9IHt9OworfQorCitXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlID0geworICAg
IC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgICAg
ICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKi8KKyAgICBfcG9wdWxhdGVSZXBsYXlhYmxl
RGF0YTogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAgICAgICB2YXIgc3RhdGUgPSB0
aGlzLl9zdGF0ZTsKKyAgICAgICAgZGF0YS5zdGF0ZSA9IHt9OworICAgICAgICBPYmplY3Qua2V5
cyhzdGF0ZSkuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgIGRhdGEu
c3RhdGVbcGFyYW1ldGVyXSA9IFJlc291cmNlLnRvUmVwbGF5YWJsZShzdGF0ZVtwYXJhbWV0ZXJd
LCBjYWNoZSk7CisgICAgICAgIH0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJp
ZGUKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNh
Y2hlCisgICAgICovCisgICAgX2RvUmVwbGF5Q2FsbHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQor
ICAgIHsKKyAgICAgICAgdmFyIHN0YXRlID0ge307CisgICAgICAgIE9iamVjdC5rZXlzKGRhdGEu
c3RhdGUpLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICBzdGF0ZVtw
YXJhbWV0ZXJdID0gUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShkYXRhLnN0YXRlW3BhcmFtZXRl
cl0sIGNhY2hlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7CisK
KyAgICAgICAgdmFyIGdsID0gdGhpcy5fcmVwbGF5Q29udGV4dFJlc291cmNlKGRhdGEsIGNhY2hl
KS53cmFwcGVkT2JqZWN0KCk7CisKKyAgICAgICAgdmFyIGJpbmRpbmdzRGF0YSA9IHsKKyAgICAg
ICAgICAgIFRFWFRVUkVfMkQ6IFsiYmluZFRleHR1cmUiLCAiVEVYVFVSRV9CSU5ESU5HXzJEIl0s
CisgICAgICAgICAgICBURVhUVVJFX0NVQkVfTUFQOiBbImJpbmRUZXh0dXJlIiwgIlRFWFRVUkVf
QklORElOR19DVUJFX01BUCJdLAorICAgICAgICAgICAgQVJSQVlfQlVGRkVSOiBbImJpbmRCdWZm
ZXIiLCAiQVJSQVlfQlVGRkVSX0JJTkRJTkciXSwKKyAgICAgICAgICAgIEVMRU1FTlRfQVJSQVlf
QlVGRkVSOiBbImJpbmRCdWZmZXIiLCAiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyJdLAor
ICAgICAgICAgICAgRlJBTUVCVUZGRVI6IFsiYmluZEZyYW1lYnVmZmVyIiwgIkZSQU1FQlVGRkVS
X0JJTkRJTkciXSwKKyAgICAgICAgICAgIFJFTkRFUkJVRkZFUjogWyJiaW5kUmVuZGVyYnVmZmVy
IiwgIlJFTkRFUkJVRkZFUl9CSU5ESU5HIl0KKyAgICAgICAgfTsKKyAgICAgICAgdmFyIG9yaWdp
bmFsQmluZGluZ3MgPSB7fTsKKyAgICAgICAgT2JqZWN0LmtleXMoYmluZGluZ3NEYXRhKS5mb3JF
YWNoKGZ1bmN0aW9uKGJpbmRpbmdUYXJnZXQpIHsKKyAgICAgICAgICAgIHZhciBiaW5kaW5nUGFy
YW1ldGVyID0gYmluZGluZ3NEYXRhW2JpbmRpbmdUYXJnZXRdWzFdOworICAgICAgICAgICAgb3Jp
Z2luYWxCaW5kaW5nc1tiaW5kaW5nVGFyZ2V0XSA9IGdsLmdldFBhcmFtZXRlcihnbFtiaW5kaW5n
UGFyYW1ldGVyXSk7CisgICAgICAgIH0pOworCisgICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5f
ZG9SZXBsYXlDYWxscy5jYWxsKHRoaXMsIGRhdGEsIGNhY2hlKTsKKworICAgICAgICBPYmplY3Qu
a2V5cyhiaW5kaW5nc0RhdGEpLmZvckVhY2goZnVuY3Rpb24oYmluZGluZ1RhcmdldCkgeworICAg
ICAgICAgICAgdmFyIGJpbmRNZXRob2ROYW1lID0gYmluZGluZ3NEYXRhW2JpbmRpbmdUYXJnZXRd
WzBdOworICAgICAgICAgICAgZ2xbYmluZE1ldGhvZE5hbWVdLmNhbGwoZ2wsIGdsW2JpbmRpbmdU
YXJnZXRdLCBvcmlnaW5hbEJpbmRpbmdzW2JpbmRpbmdUYXJnZXRdKTsKKyAgICAgICAgfSk7Cisg
ICAgfSwKKworICAgIF9yZXBsYXlDb250ZXh0UmVzb3VyY2U6IGZ1bmN0aW9uKGRhdGEsIGNhY2hl
KQorICAgIHsKKyAgICAgICAgdmFyIGNhbGxzID0gZGF0YS5jYWxsczsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDAsIG4gPSBjYWxscy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIHZh
ciByZXNvdXJjZSA9IFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoY2FsbHNbaV0ucmVzb3VyY2Uo
KSwgY2FjaGUpOworICAgICAgICAgICAgdmFyIGNvbnRleHRSZXNvdXJjZSA9IFdlYkdMUmVuZGVy
aW5nQ29udGV4dFJlc291cmNlLmZvck9iamVjdChyZXNvdXJjZSk7CisgICAgICAgICAgICBpZiAo
Y29udGV4dFJlc291cmNlKQorICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0UmVzb3VyY2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXQKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmluZE1l
dGhvZE5hbWUKKyAgICAgKi8KKyAgICBwdXNoQmluZGluZzogZnVuY3Rpb24odGFyZ2V0LCBiaW5k
TWV0aG9kTmFtZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5CSU5ESU5HICE9PSB0
YXJnZXQpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0YXRlLkJJTkRJTkcgPSB0YXJnZXQ7CisgICAg
ICAgICAgICB0aGlzLnB1c2hDYWxsKG5ldyBDYWxsKFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291
cmNlLmZvck9iamVjdCh0aGlzKSwgYmluZE1ldGhvZE5hbWUsIFt0YXJnZXQsIHRoaXNdKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK1dlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90
b19fID0gUmVzb3VyY2UucHJvdG90eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4
dGVuZHMge1dlYkdMQm91bmRSZXNvdXJjZX0KKyAqLworZnVuY3Rpb24gV2ViR0xUZXh0dXJlUmVz
b3VyY2Uod3JhcHBlZE9iamVjdCkKK3sKKyAgICBXZWJHTEJvdW5kUmVzb3VyY2UuY2FsbCh0aGlz
LCB3cmFwcGVkT2JqZWN0KTsKK30KKworV2ViR0xUZXh0dXJlUmVzb3VyY2UucHJvdG90eXBlID0g
eworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRh
CisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKi8KKyAgICBfZG9SZXBsYXlDYWxs
czogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAgICAgICB2YXIgZ2wgPSB0aGlzLl9y
ZXBsYXlDb250ZXh0UmVzb3VyY2UoZGF0YSwgY2FjaGUpLndyYXBwZWRPYmplY3QoKTsKKworICAg
ICAgICB2YXIgc3RhdGUgPSB7fTsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3Vy
Y2UuUGl4ZWxTdG9yZVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKKyAg
ICAgICAgICAgIHN0YXRlW3BhcmFtZXRlcl0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2xbcGFyYW1ldGVy
XSk7CisgICAgICAgIH0pOworCisgICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUu
X2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBjYWNoZSk7CisKKyAgICAgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuUGl4ZWxTdG9yZVBhcmFtZXRlcnMuZm9yRWFjaChmdW5j
dGlvbihwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsW3BhcmFtZXRl
cl0sIHN0YXRlW3BhcmFtZXRlcl0pOworICAgICAgICB9KTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisgICAgICovCisgICAg
cHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICB2YXIgZ2wgPSBjYWxsLnJl
c291cmNlKCkud3JhcHBlZE9iamVjdCgpOworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRS
ZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikg
eworICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2wuZ2V0UGFyYW1ldGVyKGdsW3BhcmFtZXRlcl0p
OworICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlW3BhcmFtZXRlcl0gIT09IHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVbcGFyYW1ldGVyXSA9IHZhbHVlOworICAgICAgICAg
ICAgICAgIHZhciBwaXhlbFN0b3JlQ2FsbCA9IG5ldyBDYWxsKGdsLCAicGl4ZWxTdG9yZWkiLCBb
Z2xbcGFyYW1ldGVyXSwgdmFsdWVdKTsKKyAgICAgICAgICAgICAgICBXZWJHTEJvdW5kUmVzb3Vy
Y2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgcGl4ZWxTdG9yZUNhbGwpOworICAgICAg
ICAgICAgfQorICAgICAgICB9LCB0aGlzKTsKKworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGFu
eSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRvIHRoZSByZXNvdXJjZSBz
dGF0ZS4KKyAgICAgICAgLy8gRklYTUU6IG9wdGltaXplIG1lbW9yeSB1c2FnZTogbWF5YmUgaXQn
cyBtb3JlIGVmZmljaWVudCB0byBzdG9yZSBvbmUgdGV4SW1hZ2UyRCBjYWxsIGluc3RlYWQgb2Yg
bWFueSB0ZXhTdWJJbWFnZTJELgorICAgICAgICBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBl
LnB1c2hDYWxsLmNhbGwodGhpcywgY2FsbCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBw
YXJhbSB7Q2FsbH0gY2FsbAorICAgICAqLworICAgIHB1c2hDYWxsX3RleFBhcmFtZXRlcmY6IGZ1
bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICB2YXIgYXJncyA9IGNhbGwuYXJncygpOworICAg
ICAgICB2YXIgcG5hbWUgPSBhcmdzWzFdOworICAgICAgICB2YXIgcGFyYW0gPSBhcmdzWzJdOwor
ICAgICAgICBpZiAodGhpcy5fc3RhdGVbcG5hbWVdICE9PSBwYXJhbSkgeworICAgICAgICAgICAg
dGhpcy5fc3RhdGVbcG5hbWVdID0gcGFyYW07CisgICAgICAgICAgICBXZWJHTEJvdW5kUmVzb3Vy
Y2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgY2FsbCk7CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgLyoqCisgICAgICogY29weVRleEltYWdlMkQgYW5kIGNvcHlUZXhTdWJJbWFnZTJE
IGRlZmluZSBhIHRleHR1cmUgaW1hZ2Ugd2l0aCBwaXhlbHMgZnJvbSB0aGUgY3VycmVudCBmcmFt
ZWJ1ZmZlci4KKyAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKKyAgICAgKi8KKyAgICBwdXNoQ2Fs
bF9jb3B5VGV4SW1hZ2UyRDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAgIHZhciBnbFJl
c291cmNlID0gY2FsbC5yZXNvdXJjZSgpOworICAgICAgICB2YXIgZ2wgPSBnbFJlc291cmNlLndy
YXBwZWRPYmplY3QoKTsKKyAgICAgICAgdmFyIGZyYW1lYnVmZmVyUmVzb3VyY2UgPSBnbFJlc291
cmNlLmN1cnJlbnRCaW5kaW5nKGdsLkZSQU1FQlVGRkVSKTsKKyAgICAgICAgaWYgKGZyYW1lYnVm
ZmVyUmVzb3VyY2UpCisgICAgICAgICAgICB0aGlzLnB1c2hDYWxsKG5ldyBDYWxsKGdsUmVzb3Vy
Y2UsICJiaW5kRnJhbWVidWZmZXIiLCBbZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyUmVzb3Vy
Y2VdKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9O
T1RfUkVBQ0hFRDogTm8gRlJBTUVCVUZGRVIgYm91bmQgd2hpbGUgY2FsbGluZyBnbC4iICsgY2Fs
bC5mdW5jdGlvbk5hbWUoKSk7CisgICAgICAgIHRoaXMucHVzaENhbGwoY2FsbCk7CisgICAgfQor
fQorCitXZWJHTFRleHR1cmVSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGxfdGV4UGFyYW1ldGVy
aSA9IFdlYkdMVGV4dHVyZVJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbF90ZXhQYXJhbWV0ZXJm
OworV2ViR0xUZXh0dXJlUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsX2NvcHlUZXhTdWJJbWFn
ZTJEID0gV2ViR0xUZXh0dXJlUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsX2NvcHlUZXhJbWFn
ZTJEOworCitXZWJHTFRleHR1cmVSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViR0xC
b3VuZFJlc291cmNlLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRl
bmRzIHtSZXNvdXJjZX0KKyAqLworZnVuY3Rpb24gV2ViR0xQcm9ncmFtUmVzb3VyY2Uod3JhcHBl
ZE9iamVjdCkKK3sKKyAgICBSZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOworfQor
CitXZWJHTFByb2dyYW1SZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQG92
ZXJyaWRlCisgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAgICAgKiBAcGFyYW0ge0NhY2hl
fSBjYWNoZQorICAgICAqLworICAgIF9wb3B1bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlvbihk
YXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciBnbFJlc291cmNlID0gV2ViR0xSZW5kZXJp
bmdDb250ZXh0UmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMpOworICAgICAgICB2YXIgZ2wgPSBnbFJl
c291cmNlLndyYXBwZWRPYmplY3QoKTsKKyAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLndyYXBw
ZWRPYmplY3QoKTsKKworICAgICAgICB2YXIgb3JpZ2luYWxFcnJvcnMgPSBnbFJlc291cmNlLmdl
dEFsbEVycm9ycygpOworCisgICAgICAgIHZhciB1bmlmb3JtcyA9IFtdOworICAgICAgICB2YXIg
dW5pZm9ybXNDb3VudCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZF
X1VOSUZPUk1TKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3Jtc0NvdW50OyAr
K2kpIHsKKyAgICAgICAgICAgIHZhciBhY3RpdmVJbmZvID0gZ2wuZ2V0QWN0aXZlVW5pZm9ybShw
cm9ncmFtLCBpKTsKKyAgICAgICAgICAgIGlmICghYWN0aXZlSW5mbykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIHZhciB1bmlmb3JtTG9jYXRpb24gPSBnbC5nZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbSwgYWN0aXZlSW5mby5uYW1lKTsKKyAgICAgICAgICAgIGlmICgh
dW5pZm9ybUxvY2F0aW9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
dmFyIHZhbHVlID0gZ2wuZ2V0VW5pZm9ybShwcm9ncmFtLCB1bmlmb3JtTG9jYXRpb24pOworICAg
ICAgICAgICAgdW5pZm9ybXMucHVzaCh7CisgICAgICAgICAgICAgICAgbmFtZTogYWN0aXZlSW5m
by5uYW1lLAorICAgICAgICAgICAgICAgIHR5cGU6IGFjdGl2ZUluZm8udHlwZSwKKyAgICAgICAg
ICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAg
IGRhdGEudW5pZm9ybXMgPSB1bmlmb3JtczsKKworICAgICAgICBnbFJlc291cmNlLnJlc3RvcmVF
cnJvcnMob3JpZ2luYWxFcnJvcnMpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJp
ZGUKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNh
Y2hlCisgICAgICovCisgICAgX2RvUmVwbGF5Q2FsbHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQor
ICAgIHsKKyAgICAgICAgUmVzb3VyY2UucHJvdG90eXBlLl9kb1JlcGxheUNhbGxzLmNhbGwodGhp
cywgZGF0YSwgY2FjaGUpOworICAgICAgICB2YXIgZ2wgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRS
ZXNvdXJjZS5mb3JPYmplY3QodGhpcykud3JhcHBlZE9iamVjdCgpOworICAgICAgICB2YXIgcHJv
Z3JhbSA9IHRoaXMud3JhcHBlZE9iamVjdCgpOworCisgICAgICAgIHZhciBvcmlnaW5hbFByb2dy
YW0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuQ1VSUkVOVF9QUk9HUkFNKTsKKyAgICAgICAgdmFyIGN1
cnJlbnRQcm9ncmFtID0gb3JpZ2luYWxQcm9ncmFtOworICAgICAgICAKKyAgICAgICAgZGF0YS51
bmlmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uKHVuaWZvcm0pIHsKKyAgICAgICAgICAgIHZhciB1bmlm
b3JtTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybS5uYW1l
KTsKKyAgICAgICAgICAgIGlmICghdW5pZm9ybUxvY2F0aW9uKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGlmIChjdXJyZW50UHJvZ3JhbSAhPT0gcHJvZ3JhbSkgeworICAg
ICAgICAgICAgICAgIGN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKKyAgICAgICAgICAgICAgICBn
bC51c2VQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1l
dGhvZE5hbWUgPSB0aGlzLl91bmlmb3JtTWV0aG9kTmFtZUJ5VHlwZShnbCwgdW5pZm9ybS50eXBl
KTsKKyAgICAgICAgICAgIGlmIChtZXRob2ROYW1lLmluZGV4T2YoIk1hdHJpeCIpID09PSAtMSkK
KyAgICAgICAgICAgICAgICBnbFttZXRob2ROYW1lXS5jYWxsKGdsLCB1bmlmb3JtTG9jYXRpb24s
IHVuaWZvcm0udmFsdWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdsW21l
dGhvZE5hbWVdLmNhbGwoZ2wsIHVuaWZvcm1Mb2NhdGlvbiwgZmFsc2UsIHVuaWZvcm0udmFsdWUp
OworICAgICAgICB9LmJpbmQodGhpcykpOworCisgICAgICAgIGlmIChjdXJyZW50UHJvZ3JhbSAh
PT0gb3JpZ2luYWxQcm9ncmFtKQorICAgICAgICAgICAgZ2wudXNlUHJvZ3JhbShvcmlnaW5hbFBy
b2dyYW0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5n
Q29udGV4dH0gZ2wKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gdHlwZQorICAgICAqIEByZXR1cm4g
e3N0cmluZ30KKyAgICAgKi8KKyAgICBfdW5pZm9ybU1ldGhvZE5hbWVCeVR5cGU6IGZ1bmN0aW9u
KGdsLCB0eXBlKQorICAgIHsKKyAgICAgICAgdmFyIHVuaWZvcm1NZXRob2ROYW1lcyA9IFdlYkdM
UHJvZ3JhbVJlc291cmNlLl91bmlmb3JtTWV0aG9kTmFtZXM7CisgICAgICAgIGlmICghdW5pZm9y
bU1ldGhvZE5hbWVzKSB7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXMgPSB7fTsKKyAg
ICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF0gPSAidW5pZm9ybTFmIjsKKyAg
ICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9WRUMyXSA9ICJ1bmlmb3JtMmZ2
IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9WRUMzXSA9ICJ1bmlm
b3JtM2Z2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9WRUM0XSA9
ICJ1bmlmb3JtNGZ2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5JTlRdID0g
InVuaWZvcm0xaSI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF0gPSAi
dW5pZm9ybTFpIjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5TQU1QTEVSXzJE
XSA9ICJ1bmlmb3JtMWkiOworICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLlNBTVBM
RVJfQ1VCRV0gPSAidW5pZm9ybTFpIjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tn
bC5JTlRfVkVDMl0gPSAidW5pZm9ybTJpdiI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFt
ZXNbZ2wuQk9PTF9WRUMyXSA9ICJ1bmlmb3JtMml2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRo
b2ROYW1lc1tnbC5JTlRfVkVDM10gPSAidW5pZm9ybTNpdiI7CisgICAgICAgICAgICB1bmlmb3Jt
TWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUMzXSA9ICJ1bmlmb3JtM2l2IjsKKyAgICAgICAgICAgIHVu
aWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDNF0gPSAidW5pZm9ybTRpdiI7CisgICAgICAgICAg
ICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUM0XSA9ICJ1bmlmb3JtNGl2IjsKKyAgICAg
ICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9NQVQyXSA9ICJ1bmlmb3JtTWF0cml4
MmZ2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9NQVQzXSA9ICJ1
bmlmb3JtTWF0cml4M2Z2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9B
VF9NQVQ0XSA9ICJ1bmlmb3JtTWF0cml4NGZ2IjsKKyAgICAgICAgICAgIFdlYkdMUHJvZ3JhbVJl
c291cmNlLl91bmlmb3JtTWV0aG9kTmFtZXMgPSB1bmlmb3JtTWV0aG9kTmFtZXM7CisgICAgICAg
IH0KKyAgICAgICAgY29uc29sZS5hc3NlcnQodW5pZm9ybU1ldGhvZE5hbWVzW3R5cGVdLCAiVW5r
bm93biB1bmlmb3JtIHR5cGUgIiArIHR5cGUpOworICAgICAgICByZXR1cm4gdW5pZm9ybU1ldGhv
ZE5hbWVzW3R5cGVdOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAg
KiBAcGFyYW0ge0NhbGx9IGNhbGwKKyAgICAgKi8KKyAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2Fs
bCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNhbGxzIHRoYXQg
bm8gbG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgorICAgICAgICAvLyBG
SVhNRTogaGFuZGxlIG11bHRpcGxlIGF0dGFjaFNoYWRlciAmJiBkZXRhY2hTaGFkZXIuCisgICAg
ICAgIFJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOworICAgIH0K
K30KKworV2ViR0xQcm9ncmFtUmVzb3VyY2UucHJvdG90eXBlLl9fcHJvdG9fXyA9IFJlc291cmNl
LnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtSZXNvdXJj
ZX0KKyAqLworZnVuY3Rpb24gV2ViR0xTaGFkZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQorewor
ICAgIFJlc291cmNlLmNhbGwodGhpcywgd3JhcHBlZE9iamVjdCk7Cit9CisKK1dlYkdMU2hhZGVy
UmVzb3VyY2UucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAq
IEBwYXJhbSB7Q2FsbH0gY2FsbAorICAgICAqLworICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxs
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSBhbnkgb2xkZXIgY2FsbHMgdGhhdCBu
byBsb25nZXIgY29udHJpYnV0ZSB0byB0aGUgcmVzb3VyY2Ugc3RhdGUuCisgICAgICAgIC8vIEZJ
WE1FOiBoYW5kbGUgbXVsdGlwbGUgc2hhZGVyU291cmNlIGNhbGxzLgorICAgICAgICBSZXNvdXJj
ZS5wcm90b3R5cGUucHVzaENhbGwuY2FsbCh0aGlzLCBjYWxsKTsKKyAgICB9Cit9CisKK1dlYkdM
U2hhZGVyUmVzb3VyY2UucHJvdG90eXBlLl9fcHJvdG9fXyA9IFJlc291cmNlLnByb3RvdHlwZTsK
KworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtXZWJHTEJvdW5kUmVzb3VyY2V9
CisgKi8KK2Z1bmN0aW9uIFdlYkdMQnVmZmVyUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKK3sKKyAg
ICBXZWJHTEJvdW5kUmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsKK30KKworV2Vi
R0xCdWZmZXJSZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQG92ZXJyaWRl
CisgICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisgICAgICovCisgICAgcHVzaENhbGw6IGZ1bmN0
aW9uKGNhbGwpCisgICAgeworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxs
cyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KKyAgICAg
ICAgLy8gRklYTUU6IE9wdGltaXplIG1lbW9yeSBmb3IgYnVmZmVyU3ViRGF0YS4KKyAgICAgICAg
V2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOwor
ICAgIH0KK30KKworV2ViR0xCdWZmZXJSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gV2Vi
R0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBl
eHRlbmRzIHtXZWJHTEJvdW5kUmVzb3VyY2V9CisgKi8KK2Z1bmN0aW9uIFdlYkdMRnJhbWVidWZm
ZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQoreworICAgIFdlYkdMQm91bmRSZXNvdXJjZS5jYWxs
KHRoaXMsIHdyYXBwZWRPYmplY3QpOworfQorCitXZWJHTEZyYW1lYnVmZmVyUmVzb3VyY2UucHJv
dG90eXBlID0geworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7Q2Fs
bH0gY2FsbAorICAgICAqLworICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxsKQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IHJlbW92ZSBhbnkgb2xkZXIgY2FsbHMgdGhhdCBubyBsb25nZXIgY29u
dHJpYnV0ZSB0byB0aGUgcmVzb3VyY2Ugc3RhdGUuCisgICAgICAgIFdlYkdMQm91bmRSZXNvdXJj
ZS5wcm90b3R5cGUucHVzaENhbGwuY2FsbCh0aGlzLCBjYWxsKTsKKyAgICB9Cit9CisKK1dlYkdM
RnJhbWVidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViR0xCb3VuZFJlc291
cmNlLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtXZWJH
TEJvdW5kUmVzb3VyY2V9CisgKi8KK2Z1bmN0aW9uIFdlYkdMUmVuZGVyYnVmZmVyUmVzb3VyY2Uo
d3JhcHBlZE9iamVjdCkKK3sKKyAgICBXZWJHTEJvdW5kUmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFw
cGVkT2JqZWN0KTsKK30KKworV2ViR0xSZW5kZXJidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUgPSB7
CisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisg
ICAgICovCisgICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICAvLyBG
SVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRv
IHRoZSByZXNvdXJjZSBzdGF0ZS4KKyAgICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlw
ZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOworICAgIH0KK30KKworV2ViR0xSZW5kZXJidWZm
ZXJSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3Rv
dHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtSZXNvdXJjZX0KKyAq
IEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbENvbnRleHQKKyAqIEBwYXJhbSB7RnVu
Y3Rpb259IHJlcGxheUNvbnRleHRDYWxsYmFjaworICovCitmdW5jdGlvbiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRSZXNvdXJjZShnbENvbnRleHQsIHJlcGxheUNvbnRleHRDYWxsYmFjaykKK3sKKyAg
ICBSZXNvdXJjZS5jYWxsKHRoaXMsIGdsQ29udGV4dCk7CisgICAgdGhpcy5fcmVwbGF5Q29udGV4
dENhbGxiYWNrID0gcmVwbGF5Q29udGV4dENhbGxiYWNrOworICAgIC8qKiBAdHlwZSB7T2JqZWN0
LjxudW1iZXIsIGJvb2xlYW4+fSAqLworICAgIHRoaXMuX2N1c3RvbUVycm9ycyA9IG51bGw7Cit9
CisKKy8qKgorICogQGNvbnN0CisgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59CisgKi8KK1dlYkdM
UmVuZGVyaW5nQ29udGV4dFJlc291cmNlLkdMQ2FwYWJpbGl0aWVzID0gWworICAgICJCTEVORCIs
CisgICAgIkNVTExfRkFDRSIsCisgICAgIkRFUFRIX1RFU1QiLAorICAgICJESVRIRVIiLAorICAg
ICJQT0xZR09OX09GRlNFVF9GSUxMIiwKKyAgICAiU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFIiwK
KyAgICAiU0FNUExFX0NPVkVSQUdFIiwKKyAgICAiU0NJU1NPUl9URVNUIiwKKyAgICAiU1RFTkNJ
TF9URVNUIgorXTsKKworLyoqCisgKiBAY29uc3QKKyAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn0K
KyAqLworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuUGl4ZWxTdG9yZVBhcmFtZXRlcnMg
PSBbCisgICAgIlBBQ0tfQUxJR05NRU5UIiwKKyAgICAiVU5QQUNLX0FMSUdOTUVOVCIsCisgICAg
IlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiLAorICAgICJVTlBBQ0tfRkxJUF9Z
X1dFQkdMIiwKKyAgICAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIgorXTsKKworLyoq
CisgKiBAY29uc3QKKyAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn0KKyAqLworV2ViR0xSZW5kZXJp
bmdDb250ZXh0UmVzb3VyY2UuU3RhdGVQYXJhbWV0ZXJzID0gWworICAgICJBQ1RJVkVfVEVYVFVS
RSIsCisgICAgIkFSUkFZX0JVRkZFUl9CSU5ESU5HIiwKKyAgICAiQkxFTkRfQ09MT1IiLAorICAg
ICJCTEVORF9EU1RfQUxQSEEiLAorICAgICJCTEVORF9EU1RfUkdCIiwKKyAgICAiQkxFTkRfRVFV
QVRJT05fQUxQSEEiLAorICAgICJCTEVORF9FUVVBVElPTl9SR0IiLAorICAgICJCTEVORF9TUkNf
QUxQSEEiLAorICAgICJCTEVORF9TUkNfUkdCIiwKKyAgICAiQ09MT1JfQ0xFQVJfVkFMVUUiLAor
ICAgICJDT0xPUl9XUklURU1BU0siLAorICAgICJDVUxMX0ZBQ0VfTU9ERSIsCisgICAgIkNVUlJF
TlRfUFJPR1JBTSIsCisgICAgIkRFUFRIX0NMRUFSX1ZBTFVFIiwKKyAgICAiREVQVEhfRlVOQyIs
CisgICAgIkRFUFRIX1JBTkdFIiwKKyAgICAiREVQVEhfV1JJVEVNQVNLIiwKKyAgICAiRUxFTUVO
VF9BUlJBWV9CVUZGRVJfQklORElORyIsCisgICAgIkZSQU1FQlVGRkVSX0JJTkRJTkciLAorICAg
ICJGUk9OVF9GQUNFIiwKKyAgICAiR0VORVJBVEVfTUlQTUFQX0hJTlQiLAorICAgICJMSU5FX1dJ
RFRIIiwKKyAgICAiUEFDS19BTElHTk1FTlQiLAorICAgICJQT0xZR09OX09GRlNFVF9GQUNUT1Ii
LAorICAgICJQT0xZR09OX09GRlNFVF9VTklUUyIsCisgICAgIlJFTkRFUkJVRkZFUl9CSU5ESU5H
IiwKKyAgICAiU0FNUExFX0NPVkVSQUdFX0lOVkVSVCIsCisgICAgIlNBTVBMRV9DT1ZFUkFHRV9W
QUxVRSIsCisgICAgIlNDSVNTT1JfQk9YIiwKKyAgICAiU1RFTkNJTF9CQUNLX0ZBSUwiLAorICAg
ICJTVEVOQ0lMX0JBQ0tfRlVOQyIsCisgICAgIlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwi
LAorICAgICJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTIiwKKyAgICAiU1RFTkNJTF9CQUNL
X1JFRiIsCisgICAgIlNURU5DSUxfQkFDS19WQUxVRV9NQVNLIiwKKyAgICAiU1RFTkNJTF9CQUNL
X1dSSVRFTUFTSyIsCisgICAgIlNURU5DSUxfQ0xFQVJfVkFMVUUiLAorICAgICJTVEVOQ0lMX0ZB
SUwiLAorICAgICJTVEVOQ0lMX0ZVTkMiLAorICAgICJTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCIs
CisgICAgIlNURU5DSUxfUEFTU19ERVBUSF9QQVNTIiwKKyAgICAiU1RFTkNJTF9SRUYiLAorICAg
ICJTVEVOQ0lMX1ZBTFVFX01BU0siLAorICAgICJTVEVOQ0lMX1dSSVRFTUFTSyIsCisgICAgIlVO
UEFDS19BTElHTk1FTlQiLAorICAgICJVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdM
IiwKKyAgICAiVU5QQUNLX0ZMSVBfWV9XRUJHTCIsCisgICAgIlVOUEFDS19QUkVNVUxUSVBMWV9B
TFBIQV9XRUJHTCIsCisgICAgIlZJRVdQT1JUIgorXTsKKworLyoqCisgKiBAcGFyYW0geyp9IG9i
agorICogQHJldHVybiB7V2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2V9CisgKi8KK1dlYkdM
UmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9iamVjdCA9IGZ1bmN0aW9uKG9iaikKK3sKKyAg
ICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qob2JqKTsKKyAgICBpZiAoIXJlc291
cmNlIHx8IHJlc291cmNlIGluc3RhbmNlb2YgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2Up
CisgICAgICAgIHJldHVybiByZXNvdXJjZTsKKyAgICB2YXIgY2FsbCA9IHJlc291cmNlLmNhbGxz
KCk7CisgICAgaWYgKCFjYWxsIHx8ICFjYWxsLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgcmVzb3VyY2UgPSBjYWxsWzBdLnJlc291cmNlKCk7CisgICAgcmV0dXJuIChyZXNvdXJj
ZSBpbnN0YW5jZW9mIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlKSA/IHJlc291cmNlIDog
bnVsbDsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UucHJvdG90eXBlID0gewor
ICAgIC8qKgorICAgICAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fQorICAgICAqLworICAgIGdl
dEFsbEVycm9yczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGVycm9ycyA9IFtdOwor
ICAgICAgICB2YXIgZ2wgPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKKyAgICAgICAgaWYgKGdsKSB7
CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBlcnJvciA9
IGdsLmdldEVycm9yKCk7CisgICAgICAgICAgICAgICAgaWYgKGVycm9yID09PSBnbC5OT19FUlJP
UikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgdGhpcy5jbGVh
ckVycm9yKGVycm9yKTsKKyAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnJvcik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2N1c3RvbUVycm9ycykgewor
ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuX2N1c3RvbUVycm9ycykgeworICAgICAg
ICAgICAgICAgIHZhciBlcnJvciA9IE51bWJlcihrZXkpOworICAgICAgICAgICAgICAgIGVycm9y
cy5wdXNoKGVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9j
dXN0b21FcnJvcnM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVycm9yczsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gZXJyb3JzCisgICAgICov
CisgICAgcmVzdG9yZUVycm9yczogZnVuY3Rpb24oZXJyb3JzKQorICAgIHsKKyAgICAgICAgdmFy
IGdsID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7CisgICAgICAgIGlmIChnbCkgeworICAgICAgICAg
ICAgdmFyIHdhc0Vycm9yID0gZmFsc2U7CisgICAgICAgICAgICB3aGlsZSAoZ2wuZ2V0RXJyb3Io
KSAhPT0gZ2wuTk9fRVJST1IpCisgICAgICAgICAgICAgICAgd2FzRXJyb3IgPSB0cnVlOworICAg
ICAgICAgICAgY29uc29sZS5hc3NlcnQoIXdhc0Vycm9yLCAiRXJyb3Iocykgd2hpbGUgY2FwdHVy
aW5nIGN1cnJlbnQgV2ViR0wgc3RhdGUuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFlcnJv
cnMubGVuZ3RoKQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9yczsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9jdXN0b21FcnJvcnMgPSB7fTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBuID0gZXJyb3JzLmxlbmd0aDsgaSA8IG47ICsraSkKKyAgICAg
ICAgICAgICAgICB0aGlzLl9jdXN0b21FcnJvcnNbZXJyb3JzW2ldXSA9IHRydWU7CisgICAgICAg
IH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGVycm9yCisgICAg
ICovCisgICAgY2xlYXJFcnJvcjogZnVuY3Rpb24oZXJyb3IpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5fY3VzdG9tRXJyb3JzKQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9y
c1tlcnJvcl07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAg
ICAgKi8KKyAgICBuZXh0RXJyb3I6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
Ll9jdXN0b21FcnJvcnMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl9jdXN0
b21FcnJvcnMpIHsKKyAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBOdW1iZXIoa2V5KTsKKyAg
ICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY3VzdG9tRXJyb3JzW2Vycm9yXTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9yczsKKyAgICAgICAgdmFyIGdsID0gdGhpcy53cmFwcGVk
T2JqZWN0KCk7CisgICAgICAgIHJldHVybiBnbCA/IGdsLk5PX0VSUk9SIDogMDsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEK
KyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqLworICAgIF9wb3B1bGF0ZVJlcGxh
eWFibGVEYXRhOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciBnbCA9
IHRoaXMud3JhcHBlZE9iamVjdCgpOworICAgICAgICBkYXRhLnJlcGxheUNvbnRleHRDYWxsYmFj
ayA9IHRoaXMuX3JlcGxheUNvbnRleHRDYWxsYmFjazsKKworICAgICAgICB2YXIgb3JpZ2luYWxF
cnJvcnMgPSB0aGlzLmdldEFsbEVycm9ycygpOworCisgICAgICAgIC8vIFRha2UgYSBmdWxsIEdM
IHN0YXRlIHNuYXBzaG90LgorICAgICAgICB2YXIgZ2xTdGF0ZSA9IHt9OworICAgICAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5HTENhcGFiaWxpdGllcy5mb3JFYWNoKGZ1bmN0aW9u
KHBhcmFtZXRlcikgeworICAgICAgICAgICAgZ2xTdGF0ZVtwYXJhbWV0ZXJdID0gZ2wuaXNFbmFi
bGVkKGdsW3BhcmFtZXRlcl0pOworICAgICAgICB9KTsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0UmVzb3VyY2UuU3RhdGVQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVy
KSB7CisgICAgICAgICAgICBnbFN0YXRlW3BhcmFtZXRlcl0gPSBSZXNvdXJjZS50b1JlcGxheWFi
bGUoZ2wuZ2V0UGFyYW1ldGVyKGdsW3BhcmFtZXRlcl0pLCBjYWNoZSk7CisgICAgICAgIH0pOwor
CisgICAgICAgIC8vIFZFUlRFWF9BVFRSSUJfQVJSQVlTCisgICAgICAgIHZhciBtYXhWZXJ0ZXhB
dHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgICAg
IHZhciB2ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzID0gWyJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZF
Ul9CSU5ESU5HIiwgIlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCIsICJWRVJURVhfQVRUUklC
X0FSUkFZX1NJWkUiLCAiVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUiLCAiVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9UWVBFIiwgIlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCIsICJDVVJSRU5U
X1ZFUlRFWF9BVFRSSUIiXTsKKyAgICAgICAgdmFyIHZlcnRleEF0dHJpYlN0YXRlcyA9IFtdOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFZlcnRleEF0dHJpYnM7ICsraSkgeworICAg
ICAgICAgICAgdmFyIHN0YXRlID0ge307CisgICAgICAgICAgICB2ZXJ0ZXhBdHRyaWJQYXJhbWV0
ZXJzLmZvckVhY2goZnVuY3Rpb24oYXR0cmliUGFyYW1ldGVyKSB7CisgICAgICAgICAgICAgICAg
c3RhdGVbYXR0cmliUGFyYW1ldGVyXSA9IFJlc291cmNlLnRvUmVwbGF5YWJsZShnbC5nZXRWZXJ0
ZXhBdHRyaWIoaSwgZ2xbYXR0cmliUGFyYW1ldGVyXSksIGNhY2hlKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSID0gZ2wuZ2V0
VmVydGV4QXR0cmliT2Zmc2V0KGksIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUik7Cisg
ICAgICAgICAgICB2ZXJ0ZXhBdHRyaWJTdGF0ZXMucHVzaChzdGF0ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZ2xTdGF0ZS52ZXJ0ZXhBdHRyaWJTdGF0ZXMgPSB2ZXJ0ZXhBdHRyaWJTdGF0ZXM7CisK
KyAgICAgICAgLy8gVEVYVFVSRVMKKyAgICAgICAgdmFyIGN1cnJlbnRUZXh0dXJlQmluZGluZyA9
IGdsLmdldFBhcmFtZXRlcihnbC5BQ1RJVkVfVEVYVFVSRSk7CisgICAgICAgIHZhciBtYXhUZXh0
dXJlSW1hZ2VVbml0cyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklU
Uyk7CisgICAgICAgIHZhciB0ZXh0dXJlQmluZGluZ3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBtYXhUZXh0dXJlSW1hZ2VVbml0czsgKytpKSB7CisgICAgICAgICAgICBnbC5h
Y3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgaSk7CisgICAgICAgICAgICB2YXIgc3RhdGUgPSB7
CisgICAgICAgICAgICAgICAgVEVYVFVSRV8yRDogUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdl
dFBhcmFtZXRlcihnbC5URVhUVVJFX0JJTkRJTkdfMkQpLCBjYWNoZSksCisgICAgICAgICAgICAg
ICAgVEVYVFVSRV9DVUJFX01BUDogUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRl
cihnbC5URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVApLCBjYWNoZSkKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB0ZXh0dXJlQmluZGluZ3MucHVzaChzdGF0ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgZ2xTdGF0ZS50ZXh0dXJlQmluZGluZ3MgPSB0ZXh0dXJlQmluZGluZ3M7CisgICAgICAgIGds
LmFjdGl2ZVRleHR1cmUoY3VycmVudFRleHR1cmVCaW5kaW5nKTsKKworICAgICAgICBkYXRhLmds
U3RhdGUgPSBnbFN0YXRlOworCisgICAgICAgIHRoaXMucmVzdG9yZUVycm9ycyhvcmlnaW5hbEVy
cm9ycyk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJh
bSB7T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKi8KKyAg
ICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAgICAgICB0
aGlzLl9yZXBsYXlDb250ZXh0Q2FsbGJhY2sgPSBkYXRhLnJlcGxheUNvbnRleHRDYWxsYmFjazsK
KyAgICAgICAgdGhpcy5fY3VzdG9tRXJyb3JzID0gbnVsbDsKKworICAgICAgICB2YXIgZ2wgPSBS
ZXNvdXJjZS53cmFwcGVkT2JqZWN0KHRoaXMuX3JlcGxheUNvbnRleHRDYWxsYmFjaygpKTsKKyAg
ICAgICAgdGhpcy5zZXRXcmFwcGVkT2JqZWN0KGdsKTsKKworICAgICAgICB2YXIgZ2xTdGF0ZSA9
IGRhdGEuZ2xTdGF0ZTsKKyAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVS
LCBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KGdsU3RhdGUuRlJBTUVCVUZGRVJfQklORElORywg
Y2FjaGUpKTsKKyAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIFJl
cGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZ2xTdGF0ZS5SRU5ERVJCVUZGRVJfQklORElORywgY2Fj
aGUpKTsKKworICAgICAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBzZXJ2ZXItc2lkZSBHTCBjYXBh
YmlsaXRpZXMuCisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLkdMQ2FwYWJp
bGl0aWVzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICBjb25zb2xl
LmFzc2VydChwYXJhbWV0ZXIgaW4gZ2xTdGF0ZSk7CisgICAgICAgICAgICBpZiAoZ2xTdGF0ZVtw
YXJhbWV0ZXJdKQorICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbFtwYXJhbWV0ZXJdKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnbC5kaXNhYmxlKGdsW3BhcmFtZXRlcl0p
OworICAgICAgICB9KTsKKworICAgICAgICBnbC5ibGVuZENvbG9yKGdsU3RhdGUuQkxFTkRfQ09M
T1JbMF0sIGdsU3RhdGUuQkxFTkRfQ09MT1JbMV0sIGdsU3RhdGUuQkxFTkRfQ09MT1JbMl0sIGds
U3RhdGUuQkxFTkRfQ09MT1JbM10pOworICAgICAgICBnbC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUo
Z2xTdGF0ZS5CTEVORF9FUVVBVElPTl9SR0IsIGdsU3RhdGUuQkxFTkRfRVFVQVRJT05fQUxQSEEp
OworICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbFN0YXRlLkJMRU5EX1NSQ19SR0IsIGds
U3RhdGUuQkxFTkRfRFNUX1JHQiwgZ2xTdGF0ZS5CTEVORF9TUkNfQUxQSEEsIGdsU3RhdGUuQkxF
TkRfRFNUX0FMUEhBKTsKKyAgICAgICAgZ2wuY2xlYXJDb2xvcihnbFN0YXRlLkNPTE9SX0NMRUFS
X1ZBTFVFWzBdLCBnbFN0YXRlLkNPTE9SX0NMRUFSX1ZBTFVFWzFdLCBnbFN0YXRlLkNPTE9SX0NM
RUFSX1ZBTFVFWzJdLCBnbFN0YXRlLkNPTE9SX0NMRUFSX1ZBTFVFWzNdKTsKKyAgICAgICAgZ2wu
Y2xlYXJEZXB0aChnbFN0YXRlLkRFUFRIX0NMRUFSX1ZBTFVFKTsKKyAgICAgICAgZ2wuY2xlYXJT
dGVuY2lsKGdsU3RhdGUuU1RFTkNJTF9DTEVBUl9WQUxVRSk7CisgICAgICAgIGdsLmNvbG9yTWFz
ayhnbFN0YXRlLkNPTE9SX1dSSVRFTUFTS1swXSwgZ2xTdGF0ZS5DT0xPUl9XUklURU1BU0tbMV0s
IGdsU3RhdGUuQ09MT1JfV1JJVEVNQVNLWzJdLCBnbFN0YXRlLkNPTE9SX1dSSVRFTUFTS1szXSk7
CisgICAgICAgIGdsLmN1bGxGYWNlKGdsU3RhdGUuQ1VMTF9GQUNFX01PREUpOworICAgICAgICBn
bC5kZXB0aEZ1bmMoZ2xTdGF0ZS5ERVBUSF9GVU5DKTsKKyAgICAgICAgZ2wuZGVwdGhNYXNrKGds
U3RhdGUuREVQVEhfV1JJVEVNQVNLKTsKKyAgICAgICAgZ2wuZGVwdGhSYW5nZShnbFN0YXRlLkRF
UFRIX1JBTkdFWzBdLCBnbFN0YXRlLkRFUFRIX1JBTkdFWzFdKTsKKyAgICAgICAgZ2wuZnJvbnRG
YWNlKGdsU3RhdGUuRlJPTlRfRkFDRSk7CisgICAgICAgIGdsLmhpbnQoZ2wuR0VORVJBVEVfTUlQ
TUFQX0hJTlQsIGdsU3RhdGUuR0VORVJBVEVfTUlQTUFQX0hJTlQpOworICAgICAgICBnbC5saW5l
V2lkdGgoZ2xTdGF0ZS5MSU5FX1dJRFRIKTsKKworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRl
cikgeworICAgICAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2xbcGFyYW1ldGVyXSwgZ2xTdGF0ZVtw
YXJhbWV0ZXJdKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZ2wucG9seWdvbk9mZnNldChnbFN0
YXRlLlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiwgZ2xTdGF0ZS5QT0xZR09OX09GRlNFVF9VTklUUyk7
CisgICAgICAgIGdsLnNhbXBsZUNvdmVyYWdlKGdsU3RhdGUuU0FNUExFX0NPVkVSQUdFX1ZBTFVF
LCBnbFN0YXRlLlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQpOworICAgICAgICBnbC5zdGVuY2lsRnVu
Y1NlcGFyYXRlKGdsLkZST05ULCBnbFN0YXRlLlNURU5DSUxfRlVOQywgZ2xTdGF0ZS5TVEVOQ0lM
X1JFRiwgZ2xTdGF0ZS5TVEVOQ0lMX1ZBTFVFX01BU0spOworICAgICAgICBnbC5zdGVuY2lsRnVu
Y1NlcGFyYXRlKGdsLkJBQ0ssIGdsU3RhdGUuU1RFTkNJTF9CQUNLX0ZVTkMsIGdsU3RhdGUuU1RF
TkNJTF9CQUNLX1JFRiwgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyk7CisgICAgICAg
IGdsLnN0ZW5jaWxPcFNlcGFyYXRlKGdsLkZST05ULCBnbFN0YXRlLlNURU5DSUxfRkFJTCwgZ2xT
dGF0ZS5TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCwgZ2xTdGF0ZS5TVEVOQ0lMX1BBU1NfREVQVEhf
UEFTUyk7CisgICAgICAgIGdsLnN0ZW5jaWxPcFNlcGFyYXRlKGdsLkJBQ0ssIGdsU3RhdGUuU1RF
TkNJTF9CQUNLX0ZBSUwsIGdsU3RhdGUuU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCwgZ2xT
dGF0ZS5TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTKTsKKyAgICAgICAgZ2wuc3RlbmNpbE1h
c2tTZXBhcmF0ZShnbC5GUk9OVCwgZ2xTdGF0ZS5TVEVOQ0lMX1dSSVRFTUFTSyk7CisgICAgICAg
IGdsLnN0ZW5jaWxNYXNrU2VwYXJhdGUoZ2wuQkFDSywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLKTsKKworICAgICAgICBnbC5zY2lzc29yKGdsU3RhdGUuU0NJU1NPUl9CT1hbMF0sIGds
U3RhdGUuU0NJU1NPUl9CT1hbMV0sIGdsU3RhdGUuU0NJU1NPUl9CT1hbMl0sIGdsU3RhdGUuU0NJ
U1NPUl9CT1hbM10pOworICAgICAgICBnbC52aWV3cG9ydChnbFN0YXRlLlZJRVdQT1JUWzBdLCBn
bFN0YXRlLlZJRVdQT1JUWzFdLCBnbFN0YXRlLlZJRVdQT1JUWzJdLCBnbFN0YXRlLlZJRVdQT1JU
WzNdKTsKKworICAgICAgICBnbC51c2VQcm9ncmFtKFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXko
Z2xTdGF0ZS5DVVJSRU5UX1BST0dSQU0sIGNhY2hlKSk7CisKKyAgICAgICAgLy8gVkVSVEVYX0FU
VFJJQl9BUlJBWVMKKyAgICAgICAgdmFyIG1heFZlcnRleEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0
ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBt
YXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBzdGF0ZSA9IGdsU3RhdGUu
dmVydGV4QXR0cmliU3RhdGVzW2ldIHx8IHt9OworICAgICAgICAgICAgaWYgKHN0YXRlLlZFUlRF
WF9BVFRSSUJfQVJSQVlfRU5BQkxFRCkKKyAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnbC5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoaSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuQ1VSUkVOVF9W
RVJURVhfQVRUUklCKQorICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYjRmdihpLCBzdGF0
ZS5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpOworICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFJlcGxh
eWFibGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklO
RElORywgY2FjaGUpOworICAgICAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgICAg
IGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpOworICAgICAgICAgICAgICAg
IGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoaSwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpF
LCBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX1RZUEUsIHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRCwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUsIHN0YXRlLlZF
UlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIFJlcGxheWFibGVSZXNvdXJjZS5y
ZXBsYXkoZ2xTdGF0ZS5BUlJBWV9CVUZGRVJfQklORElORywgY2FjaGUpKTsKKyAgICAgICAgZ2wu
YmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgUmVwbGF5YWJsZVJlc291cmNlLnJl
cGxheShnbFN0YXRlLkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcsIGNhY2hlKSk7CisKKyAg
ICAgICAgLy8gVEVYVFVSRVMKKyAgICAgICAgdmFyIG1heFRleHR1cmVJbWFnZVVuaXRzID0gZ2wu
Z2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlSW1hZ2VVbml0czsgKytpKSB7CisgICAgICAgICAgICBn
bC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgaSk7CisgICAgICAgICAgICB2YXIgc3RhdGUg
PSBnbFN0YXRlLnRleHR1cmVCaW5kaW5nc1tpXSB8fCB7fTsKKyAgICAgICAgICAgIGdsLmJpbmRU
ZXh0dXJlKGdsLlRFWFRVUkVfMkQsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUuVEVY
VFVSRV8yRCwgY2FjaGUpKTsKKyAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVf
Q1VCRV9NQVAsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUuVEVYVFVSRV9DVUJFX01B
UCwgY2FjaGUpKTsKKyAgICAgICAgfQorICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsU3RhdGUu
QUNUSVZFX1RFWFRVUkUpOworCisgICAgICAgIHJldHVybiBSZXNvdXJjZS5wcm90b3R5cGUuX2Rv
UmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBjYWNoZSk7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJlcn0gdGFyZ2V0CisgICAgICogQHJldHVybiB7UmVz
b3VyY2V9CisgICAgICovCisgICAgY3VycmVudEJpbmRpbmc6IGZ1bmN0aW9uKHRhcmdldCkKKyAg
ICB7CisgICAgICAgIHZhciByZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdCh0YXJnZXQpOwor
ICAgICAgICBpZiAocmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2U7CisgICAg
ICAgIHZhciBnbCA9IHRoaXMud3JhcHBlZE9iamVjdCgpOworICAgICAgICB2YXIgYmluZGluZ1Bh
cmFtZXRlcjsKKyAgICAgICAgdmFyIGJpbmRNZXRob2ROYW1lOworICAgICAgICB2YXIgYmluZE1l
dGhvZFRhcmdldCA9IHRhcmdldDsKKyAgICAgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICAgICAg
Y2FzZSBnbC5BUlJBWV9CVUZGRVI6CisgICAgICAgICAgICBiaW5kaW5nUGFyYW1ldGVyID0gZ2wu
QVJSQVlfQlVGRkVSX0JJTkRJTkc7CisgICAgICAgICAgICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5k
QnVmZmVyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGdsLkVMRU1FTlRfQVJS
QVlfQlVGRkVSOgorICAgICAgICAgICAgYmluZGluZ1BhcmFtZXRlciA9IGdsLkVMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc7CisgICAgICAgICAgICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5kQnVm
ZmVyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGdsLlRFWFRVUkVfMkQ6Cisg
ICAgICAgICAgICBiaW5kaW5nUGFyYW1ldGVyID0gZ2wuVEVYVFVSRV9CSU5ESU5HXzJEOworICAg
ICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZFRleHR1cmUiOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAgY2FzZSBnbC5U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YOgorICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWToKKyAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAg
ICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICBjYXNlIGds
LlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgIGJpbmRpbmdQYXJhbWV0
ZXIgPSBnbC5URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA7CisgICAgICAgICAgICBiaW5kTWV0aG9k
VGFyZ2V0ID0gZ2wuVEVYVFVSRV9DVUJFX01BUDsKKyAgICAgICAgICAgIGJpbmRNZXRob2ROYW1l
ID0gImJpbmRUZXh0dXJlIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGdsLkZS
QU1FQlVGRkVSOgorICAgICAgICAgICAgYmluZGluZ1BhcmFtZXRlciA9IGdsLkZSQU1FQlVGRkVS
X0JJTkRJTkc7CisgICAgICAgICAgICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5kRnJhbWVidWZmZXIi
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZ2wuUkVOREVSQlVGRkVSOgorICAg
ICAgICAgICAgYmluZGluZ1BhcmFtZXRlciA9IGdsLlJFTkRFUkJVRkZFUl9CSU5ESU5HOworICAg
ICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZFJlbmRlcmJ1ZmZlciI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkFT
U0VSVF9OT1RfUkVBQ0hFRDogdW5rbm93biBiaW5kaW5nIHRhcmdldCAiICsgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJlc291cmNlID0gUmVz
b3VyY2UuZm9yT2JqZWN0KGdsLmdldFBhcmFtZXRlcihiaW5kaW5nUGFyYW1ldGVyKSk7CisgICAg
ICAgIGlmIChyZXNvdXJjZSkKKyAgICAgICAgICAgIHJlc291cmNlLnB1c2hCaW5kaW5nKGJpbmRN
ZXRob2RUYXJnZXQsIGJpbmRNZXRob2ROYW1lKTsKKyAgICAgICAgcmV0dXJuIHJlc291cmNlOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcmV0dXJuIHtPYmpl
Y3QuPHN0cmluZywgRnVuY3Rpb24+fQorICAgICAqLworICAgIF9jdXN0b21XcmFwRnVuY3Rpb25z
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgd3JhcEZ1bmN0aW9ucyA9IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dFJlc291cmNlLl93cmFwRnVuY3Rpb25zOworICAgICAgICBpZiAoIXdyYXBG
dW5jdGlvbnMpIHsKKyAgICAgICAgICAgIHdyYXBGdW5jdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51
bGwpOworCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBt
ZXRob2ROYW1lCisgICAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvdXJjZUNvbnN0
cnVjdG9yCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVJlc291
cmNlV3JhcEZ1bmN0aW9uKG1ldGhvZE5hbWUsIHJlc291cmNlQ29uc3RydWN0b3IpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgLyoqIEB0aGlzIFJlc291cmNlLldyYXBGdW5jdGlvbiAq
LworICAgICAgICAgICAgICAgIHdyYXBGdW5jdGlvbnNbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlZE9iamVj
dCA9IHRoaXMucmVzdWx0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghd3JhcHBlZE9iamVj
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHJlc291cmNlID0gbmV3IHJlc291cmNlQ29uc3RydWN0b3Iod3JhcHBlZE9iamVjdCk7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpcy5fcmVzb3VyY2UubWFuYWdlcigp
OworICAgICAgICAgICAgICAgICAgICBpZiAobWFuYWdlcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1hbmFnZXIucmVnaXN0ZXJSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMub3ZlcnJpZGVSZXN1bHQocmVzb3VyY2UucHJveHlPYmplY3QoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJlc291cmNlLnB1c2hDYWxsKHRoaXMuY2FsbCgpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjcmVhdGVSZXNvdXJjZVdyYXBGdW5j
dGlvbigiY3JlYXRlQnVmZmVyIiwgV2ViR0xCdWZmZXJSZXNvdXJjZSk7CisgICAgICAgICAgICBj
cmVhdGVSZXNvdXJjZVdyYXBGdW5jdGlvbigiY3JlYXRlU2hhZGVyIiwgV2ViR0xTaGFkZXJSZXNv
dXJjZSk7CisgICAgICAgICAgICBjcmVhdGVSZXNvdXJjZVdyYXBGdW5jdGlvbigiY3JlYXRlUHJv
Z3JhbSIsIFdlYkdMUHJvZ3JhbVJlc291cmNlKTsKKyAgICAgICAgICAgIGNyZWF0ZVJlc291cmNl
V3JhcEZ1bmN0aW9uKCJjcmVhdGVUZXh0dXJlIiwgV2ViR0xUZXh0dXJlUmVzb3VyY2UpOworICAg
ICAgICAgICAgY3JlYXRlUmVzb3VyY2VXcmFwRnVuY3Rpb24oImNyZWF0ZUZyYW1lYnVmZmVyIiwg
V2ViR0xGcmFtZWJ1ZmZlclJlc291cmNlKTsKKyAgICAgICAgICAgIGNyZWF0ZVJlc291cmNlV3Jh
cEZ1bmN0aW9uKCJjcmVhdGVSZW5kZXJidWZmZXIiLCBXZWJHTFJlbmRlcmJ1ZmZlclJlc291cmNl
KTsKKyAgICAgICAgICAgIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKCJnZXRVbmlmb3JtTG9j
YXRpb24iLCBSZXNvdXJjZSk7CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQHBh
cmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZnVu
Y3Rpb24gY3VzdG9tV3JhcEZ1bmN0aW9uKG1ldGhvZE5hbWUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgdmFyIGN1c3RvbVB1c2hDYWxsID0gInB1c2hDYWxsXyIgKyBtZXRob2ROYW1l
OworICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0
fG51bWJlcn0gdGFyZ2V0CisgICAgICAgICAgICAgICAgICogQHRoaXMgUmVzb3VyY2UuV3JhcEZ1
bmN0aW9uCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgd3JhcEZ1bmN0aW9u
c1ttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKHRhcmdldCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlLmN1cnJlbnRCaW5k
aW5nKHRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcmVzb3VyY2UpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJj
ZVtjdXN0b21QdXNoQ2FsbF0pCisgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVtjdXN0
b21QdXNoQ2FsbF0uY2FsbChyZXNvdXJjZSwgdGhpcy5jYWxsKCkpOworICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5wdXNoQ2FsbCh0aGlz
LmNhbGwoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y3VzdG9tV3JhcEZ1bmN0aW9uKCJhdHRhY2hTaGFkZXIiKTsKKyAgICAgICAgICAgIGN1c3RvbVdy
YXBGdW5jdGlvbigiYmluZEF0dHJpYkxvY2F0aW9uIik7CisgICAgICAgICAgICBjdXN0b21XcmFw
RnVuY3Rpb24oImNvbXBpbGVTaGFkZXIiKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlv
bigiZGV0YWNoU2hhZGVyIik7CisgICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oImxpbmtQ
cm9ncmFtIik7CisgICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oInNoYWRlclNvdXJjZSIp
OworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJidWZmZXJEYXRhIik7CisgICAgICAg
ICAgICBjdXN0b21XcmFwRnVuY3Rpb24oImJ1ZmZlclN1YkRhdGEiKTsKKyAgICAgICAgICAgIGN1
c3RvbVdyYXBGdW5jdGlvbigiY29tcHJlc3NlZFRleEltYWdlMkQiKTsKKyAgICAgICAgICAgIGN1
c3RvbVdyYXBGdW5jdGlvbigiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiKTsKKyAgICAgICAgICAg
IGN1c3RvbVdyYXBGdW5jdGlvbigiY29weVRleEltYWdlMkQiKTsKKyAgICAgICAgICAgIGN1c3Rv
bVdyYXBGdW5jdGlvbigiY29weVRleFN1YkltYWdlMkQiKTsKKyAgICAgICAgICAgIGN1c3RvbVdy
YXBGdW5jdGlvbigiZ2VuZXJhdGVNaXBtYXAiKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5j
dGlvbigidGV4SW1hZ2UyRCIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJ0ZXhT
dWJJbWFnZTJEIik7CisgICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oInRleFBhcmFtZXRl
cmYiKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigidGV4UGFyYW1ldGVyaSIpOwor
ICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIp
OworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJmcmFtZWJ1ZmZlclRleHR1cmUyRCIp
OworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJyZW5kZXJidWZmZXJTdG9yYWdlIik7
CisKKyAgICAgICAgICAgIC8qKiBAdGhpcyBSZXNvdXJjZS5XcmFwRnVuY3Rpb24gKi8KKyAgICAg
ICAgICAgIHdyYXBGdW5jdGlvbnNbImdldEVycm9yIl0gPSBmdW5jdGlvbigpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdmFyIGdsID0gdGhpcy5fb3JpZ2luYWxPYmplY3Q7CisgICAg
ICAgICAgICAgICAgdmFyIGVycm9yID0gdGhpcy5yZXN1bHQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZXJyb3IgIT09IGdsLk5PX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNv
dXJjZS5jbGVhckVycm9yKGVycm9yKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZXJyb3IgPSB0aGlzLl9yZXNvdXJjZS5uZXh0RXJyb3IoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGVycm9yICE9PSBnbC5OT19FUlJPUikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMub3ZlcnJpZGVSZXN1bHQoZXJyb3IpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2Uu
X3dyYXBGdW5jdGlvbnMgPSB3cmFwRnVuY3Rpb25zOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB3cmFwRnVuY3Rpb25zOworICAgIH0KK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3Vy
Y2UucHJvdG90eXBlLl9fcHJvdG9fXyA9IFJlc291cmNlLnByb3RvdHlwZTsKKworLyoqCisgKiBA
Y29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gVHJhY2VMb2coKQoreworICAgIHRoaXMuX3JlcGxh
eWFibGVDYWxscyA9IFtdOworICAgIHRoaXMuX3JlcGxheWFibGVzQ2FjaGUgPSBuZXcgQ2FjaGUo
KTsKK30KKworVHJhY2VMb2cucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4g
e251bWJlcn0KKyAgICAgKi8KKyAgICBzaXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fcmVwbGF5YWJsZUNhbGxzLmxlbmd0aDsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHJldHVybiB7QXJyYXkuPFJlcGxheWFibGVDYWxsPn0KKyAgICAgKi8KKyAgICByZXBs
YXlhYmxlQ2FsbHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXBs
YXlhYmxlQ2FsbHM7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7UmVzb3VyY2V9
IHJlc291cmNlCisgICAgICovCisgICAgY2FwdHVyZVJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJj
ZSkKKyAgICB7CisgICAgICAgIHJlc291cmNlLnRvUmVwbGF5YWJsZSh0aGlzLl9yZXBsYXlhYmxl
c0NhY2hlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisg
ICAgICovCisgICAgYWRkQ2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAgIHZhciBy
ZXMgPSBSZXNvdXJjZS5mb3JPYmplY3QoY2FsbC5yZXN1bHQoKSk7CisgICAgICAgIGlmIChyZXMp
CisgICAgICAgICAgICB0aGlzLmNhcHR1cmVSZXNvdXJjZShyZXMpOworICAgICAgICB2YXIgc2l6
ZSA9IHRoaXMuX3JlcGxheWFibGVzQ2FjaGUuc2l6ZSgpOworICAgICAgICB0aGlzLl9yZXBsYXlh
YmxlQ2FsbHMucHVzaChjYWxsLnRvUmVwbGF5YWJsZSh0aGlzLl9yZXBsYXlhYmxlc0NhY2hlKSk7
CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3JlcGxheWFibGVzQ2FjaGUuc2l6ZSgpID09
PSBzaXplLCAiSW50ZXJuYWwgZXJyb3I6IFdlIHNob3VsZCBoYXZlIGNhcHR1cmVkIGFsbCB0aGUg
cmVzb3VyY2VzIGFscmVhZHkgYnkgdGhpcyB0aW1lLiIpOworICAgIH0KK30KKworLyoqCisgKiBA
Y29uc3RydWN0b3IKKyAqIEBwYXJhbSB7VHJhY2VMb2d9IHRyYWNlTG9nCisgKi8KK2Z1bmN0aW9u
IFRyYWNlTG9nUGxheWVyKHRyYWNlTG9nKQoreworICAgIHRoaXMuX3RyYWNlTG9nID0gdHJhY2VM
b2c7CisgICAgdGhpcy5fbmV4dFJlcGxheVN0ZXAgPSAwOworICAgIHRoaXMuX3JlcGxheVdvcmxk
Q2FjaGUgPSBuZXcgQ2FjaGUoKTsKK30KKworVHJhY2VMb2dQbGF5ZXIucHJvdG90eXBlID0gewor
ICAgIC8qKgorICAgICAqIEByZXR1cm4ge1RyYWNlTG9nfQorICAgICAqLworICAgIHRyYWNlTG9n
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2VMb2c7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAgICAgKi8KKyAgICBuZXh0
UmVwbGF5U3RlcDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25leHRS
ZXBsYXlTdGVwOworICAgIH0sCisKKyAgICByZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgLy8gRklYTUU6IFByZXZlbnQgbWVtb3J5IGxlYWtzOiBkZXRhY2ggYW5kIGRlbGV0ZSBhbGwg
b2xkIHJlc291cmNlcyBPUiByZXVzZSB0aGVtIE9SIGNyZWF0ZSBhIG5ldyByZXBsYXkgY2FudmFz
IGV2ZXJ5IHRpbWUuCisgICAgICAgIHRoaXMuX25leHRSZXBsYXlTdGVwID0gMDsKKyAgICAgICAg
dGhpcy5fcmVwbGF5V29ybGRDYWNoZS5yZXNldCgpOworICAgIH0sCisKKyAgICBzdGVwOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB0aGlzLnN0ZXBUbyh0aGlzLl9uZXh0UmVwbGF5U3RlcCk7
CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwTnVtCisgICAg
ICovCisgICAgc3RlcFRvOiBmdW5jdGlvbihzdGVwTnVtKQorICAgIHsKKyAgICAgICAgc3RlcE51
bSA9IE1hdGgubWluKHN0ZXBOdW0sIHRoaXMuX3RyYWNlTG9nLnNpemUoKSAtIDEpOworICAgICAg
ICBjb25zb2xlLmFzc2VydChzdGVwTnVtID49IDApOworICAgICAgICBpZiAodGhpcy5fbmV4dFJl
cGxheVN0ZXAgPiBzdGVwTnVtKQorICAgICAgICAgICAgdGhpcy5yZXNldCgpOworICAgICAgICAv
LyBGSVhNRTogUmVwbGF5IGFsbCB0aGUgY2FjaGVkIHJlc291cmNlcyBmaXJzdCB0byB3YXJtLXVw
LgorICAgICAgICB2YXIgcmVwbGF5YWJsZUNhbGxzID0gdGhpcy5fdHJhY2VMb2cucmVwbGF5YWJs
ZUNhbGxzKCk7CisgICAgICAgIHdoaWxlICh0aGlzLl9uZXh0UmVwbGF5U3RlcCA8PSBzdGVwTnVt
KQorICAgICAgICAgICAgcmVwbGF5YWJsZUNhbGxzW3RoaXMuX25leHRSZXBsYXlTdGVwKytdLnJl
cGxheSh0aGlzLl9yZXBsYXlXb3JsZENhY2hlKTsKKyAgICB9LAorCisgICAgcmVwbGF5OiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB0aGlzLnN0ZXBUbyh0aGlzLl90cmFjZUxvZy5zaXplKCkg
LSAxKTsKKyAgICB9Cit9CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIFJl
c291cmNlVHJhY2tpbmdNYW5hZ2VyKCkKK3sKKyAgICB0aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsK
KyAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOworICAgIHRoaXMuX2xh
c3RUcmFjZUxvZyA9IG51bGw7Cit9CisKK1Jlc291cmNlVHJhY2tpbmdNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIGNh
cHR1cmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmlu
ZzsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7VHJhY2VMb2d9CisgICAgICov
CisgICAgbGFzdFRyYWNlTG9nOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fbGFzdFRyYWNlTG9nOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1Jlc291
cmNlfSByZXNvdXJjZQorICAgICAqLworICAgIHJlZ2lzdGVyUmVzb3VyY2U6IGZ1bmN0aW9uKHJl
c291cmNlKQorICAgIHsKKyAgICAgICAgcmVzb3VyY2Uuc2V0TWFuYWdlcih0aGlzKTsKKyAgICB9
LAorCisgICAgc3RhcnRDYXB0dXJpbmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICgh
dGhpcy5fY2FwdHVyaW5nKQorICAgICAgICAgICAgdGhpcy5fbGFzdFRyYWNlTG9nID0gbmV3IFRy
YWNlTG9nKCk7CisgICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IHRydWU7CisgICAgICAgIHRoaXMu
X3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7VHJhY2VMb2c9fSB0cmFjZUxvZworICAgICAqLworICAgIHN0b3BDYXB0dXJp
bmc6IGZ1bmN0aW9uKHRyYWNlTG9nKQorICAgIHsKKyAgICAgICAgaWYgKHRyYWNlTG9nICYmIHRo
aXMuX2xhc3RUcmFjZUxvZyAhPT0gdHJhY2VMb2cpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHRoaXMuX2NhcHR1cmluZyA9IGZhbHNlOworICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5n
T25GcmFtZUVuZCA9IGZhbHNlOworICAgIH0sCisKKyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG5ldyBUcmFjZUxvZygpOwor
ICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSB0cnVlOworICAgICAgICB0aGlzLl9zdG9wQ2FwdHVy
aW5nT25GcmFtZUVuZCA9IHRydWU7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
UmVzb3VyY2V9IHJlc291cmNlCisgICAgICogQHBhcmFtIHtBcnJheXxBcmd1bWVudHN9IGFyZ3MK
KyAgICAgKi8KKyAgICBjYXB0dXJlQXJndW1lbnRzOiBmdW5jdGlvbihyZXNvdXJjZSwgYXJncykK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5fY2FwdHVyaW5nKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB0aGlzLl9sYXN0VHJhY2VMb2cuY2FwdHVyZVJlc291cmNlKHJlc291cmNlKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmdzLmxlbmd0aDsgaSA8IG47ICsraSkgewor
ICAgICAgICAgICAgdmFyIHJlcyA9IFJlc291cmNlLmZvck9iamVjdChhcmdzW2ldKTsKKyAgICAg
ICAgICAgIGlmIChyZXMpCisgICAgICAgICAgICAgICAgdGhpcy5fbGFzdFRyYWNlTG9nLmNhcHR1
cmVSZXNvdXJjZShyZXMpOworICAgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBw
YXJhbSB7Q2FsbH0gY2FsbAorICAgICAqLworICAgIHJlcG9ydENhbGw6IGZ1bmN0aW9uKGNhbGwp
CisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2NhcHR1cmluZykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdGhpcy5fbGFzdFRyYWNlTG9nLmFkZENhbGwoY2FsbCk7CisgICAgICAgIGlm
ICh0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCAmJiB0aGlzLl9sYXN0VHJhY2VMb2cuc2l6
ZSgpID09PSAxKSB7CisgICAgICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9
IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fc2V0WmVyb1RpbWVvdXRzKHRoaXMuc3RvcENhcHR1
cmluZy5iaW5kKHRoaXMsIHRoaXMuX2xhc3RUcmFjZUxvZykpOworICAgICAgICB9CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCisgICAgICovCisg
ICAgX3NldFplcm9UaW1lb3V0czogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAgICAv
LyBXZSBuZWVkIGEgZmFzdGVzdCBhc3luYyBjYWxsYmFjaywgd2hhdGV2ZXIgZmlyZXMgZmlyc3Qu
CisgICAgICAgIC8vIFVzdWFsbHkgYSBwb3N0TWVzc2FnZSBzaG91bGQgYmUgZmFzdGVyIHRoYW4g
YSBzZXRUaW1lb3V0KDApLgorICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5l
bCgpOworICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGNhbGxiYWNrOworICAgICAg
ICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKCIiKTsKKyAgICAgICAgaW5zcGVjdGVkV2luZG93
LnNldFRpbWVvdXQoY2FsbGJhY2ssIDApOworICAgIH0KK30KKworLyoqCisgKiBAY29uc3RydWN0
b3IKKyAqLwordmFyIEluamVjdGVkU2NyaXB0ID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX21h
bmFnZXIgPSBuZXcgUmVzb3VyY2VUcmFja2luZ01hbmFnZXIoKTsKKyAgICB0aGlzLl9sYXN0VHJh
Y2VMb2dJZCA9IDA7CisgICAgdGhpcy5fdHJhY2VMb2dzID0ge307CisgICAgdGhpcy5fdHJhY2VM
b2dQbGF5ZXIgPSBudWxsOworICAgIHRoaXMuX3JlcGxheUNvbnRleHQgPSBudWxsOworfQorCitJ
bmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJH
TFJlbmRlcmluZ0NvbnRleHR9IGdsQ29udGV4dAorICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAg
ICAgKi8KKyAgICB3cmFwV2ViR0xDb250ZXh0OiBmdW5jdGlvbihnbENvbnRleHQpCisgICAgewor
ICAgICAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3QoZ2xDb250ZXh0KSB8fCBu
ZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UoZ2xDb250ZXh0LCB0aGlzLl9jb25zdHJ1
Y3RXZWJHTFJlcGxheUNvbnRleHQuYmluZCh0aGlzLCBnbENvbnRleHQpKTsKKyAgICAgICAgdGhp
cy5fbWFuYWdlci5yZWdpc3RlclJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAgdmFyIHByb3h5
ID0gcmVzb3VyY2UucHJveHlPYmplY3QoKTsKKyAgICAgICAgcmV0dXJuIHByb3h5OworICAgIH0s
CisKKyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBpZCA9
IHRoaXMuX21ha2VUcmFjZUxvZ0lkKCk7CisgICAgICAgIHRoaXMuX21hbmFnZXIuY2FwdHVyZUZy
YW1lKCk7CisgICAgICAgIHRoaXMuX3RyYWNlTG9nc1tpZF0gPSB0aGlzLl9tYW5hZ2VyLmxhc3RU
cmFjZUxvZygpOworICAgICAgICByZXR1cm4gaWQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBpZAorICAgICAqLworICAgIGRyb3BUcmFjZUxvZzogZnVuY3Rpb24o
aWQpCisgICAgeworICAgICAgICBpZiAodGhpcy5fdHJhY2VMb2dQbGF5ZXIgJiYgdGhpcy5fdHJh
Y2VMb2dQbGF5ZXIudHJhY2VMb2coKSA9PT0gdGhpcy5fdHJhY2VMb2dzW2lkXSkKKyAgICAgICAg
ICAgIHRoaXMuX3RyYWNlTG9nUGxheWVyID0gbnVsbDsKKyAgICAgICAgZGVsZXRlIHRoaXMuX3Ry
YWNlTG9nc1tpZF07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBp
ZAorICAgICAqIEByZXR1cm4ge09iamVjdHxzdHJpbmd9CisgICAgICovCisgICAgdHJhY2VMb2c6
IGZ1bmN0aW9uKGlkKQorICAgIHsKKyAgICAgICAgdmFyIHRyYWNlTG9nID0gdGhpcy5fdHJhY2VM
b2dzW2lkXTsKKyAgICAgICAgaWYgKCF0cmFjZUxvZykKKyAgICAgICAgICAgIHJldHVybiAiRXJy
b3I6IFRyYWNlIGxvZyB3aXRoIHRoaXMgSUQgbm90IGZvdW5kLiI7CisgICAgICAgIHZhciByZXN1
bHQgPSB7CisgICAgICAgICAgICBpZDogaWQsCisgICAgICAgICAgICBjYWxsczogW10KKyAgICAg
ICAgfTsKKyAgICAgICAgdmFyIGNhbGxzID0gdHJhY2VMb2cucmVwbGF5YWJsZUNhbGxzKCk7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2FsbHMubGVuZ3RoOyBpIDwgbjsgKytpKSB7Cisg
ICAgICAgICAgICB2YXIgY2FsbCA9IGNhbGxzW2ldOworICAgICAgICAgICAgdmFyIGFyZ3MgPSBj
YWxsLmFyZ3MoKS5tYXAoZnVuY3Rpb24oYXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gYXJndW1lbnQgKyAiIjsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdmFyIHN0YWNr
VHJhY2UgPSBjYWxsLnN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHZhciBjYWxsRnJhbWUgPSBz
dGFja1RyYWNlID8gc3RhY2tUcmFjZS5jYWxsRnJhbWUoMCkgfHwge30gOiB7fTsKKyAgICAgICAg
ICAgIHZhciB0cmFjZUxvZ0l0ZW0gPSB7CisgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBj
YWxsLmZ1bmN0aW9uTmFtZSgpLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50czogYXJncywKKyAg
ICAgICAgICAgICAgICBzb3VyY2VVUkw6IGNhbGxGcmFtZS5zb3VyY2VVUkwsCisgICAgICAgICAg
ICAgICAgbGluZU51bWJlcjogY2FsbEZyYW1lLmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAg
Y29sdW1uTnVtYmVyOiBjYWxsRnJhbWUuY29sdW1uTnVtYmVyCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgaWYgKGNhbGwucmVzdWx0KCkpCisgICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVt
LnJlc3VsdCA9IGNhbGwucmVzdWx0KCkgKyAiIjsKKyAgICAgICAgICAgIHJlc3VsdC5jYWxscy5w
dXNoKHRyYWNlTG9nSXRlbSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkCisgICAgICogQHBhcmFt
IHtudW1iZXJ9IHN0ZXBObworICAgICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICBy
ZXBsYXlUcmFjZUxvZzogZnVuY3Rpb24oaWQsIHN0ZXBObykKKyAgICB7CisgICAgICAgIHZhciB0
cmFjZUxvZyA9IHRoaXMuX3RyYWNlTG9nc1tpZF07CisgICAgICAgIGlmICghdHJhY2VMb2cpCisg
ICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIGlmICghdGhpcy5fdHJhY2VMb2dQbGF5ZXIg
fHwgdGhpcy5fdHJhY2VMb2dQbGF5ZXIudHJhY2VMb2coKSAhPT0gdHJhY2VMb2cpCisgICAgICAg
ICAgICB0aGlzLl90cmFjZUxvZ1BsYXllciA9IG5ldyBUcmFjZUxvZ1BsYXllcih0cmFjZUxvZyk7
CisgICAgICAgIHRoaXMuX3RyYWNlTG9nUGxheWVyLnN0ZXBUbyhzdGVwTm8pOworICAgICAgICBp
ZiAoIXRoaXMuX3JlcGxheUNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkFT
U0VSVF9OT1RfUkVBQ0hFRDogcmVwbGF5VHJhY2VMb2cgZmFpbGVkIHRvIGNyZWF0ZSBhIHJlcGxh
eSBjYW52YXM/ISIpOworICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICB9CisgICAgICAg
IC8vIFJldHVybiBjdXJyZW50IHNjcmVlbnNob3QuCisgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0
IHJlcGxheWluZyBzZXZlcmFsIGNhbnZhc2VzIHNpbXVsdGFuZW91c2x5LgorICAgICAgICByZXR1
cm4gdGhpcy5fcmVwbGF5Q29udGV4dC5jYW52YXMudG9EYXRhVVJMKCk7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICBfbWFrZVRyYWNlTG9n
SWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiAie1wiaW5qZWN0ZWRTY3JpcHRJ
ZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsgIixcInRyYWNlTG9nSWRcIjoiICsgKCsrdGhpcy5f
bGFzdFRyYWNlTG9nSWQpICsgIn0iOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0g
e1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gb3JpZ2luYWxHbENvbnRleHQKKyAgICAgKiBAcmV0dXJu
IHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9CisgICAgICovCisgICAgX2NvbnN0cnVjdFdlYkdMUmVw
bGF5Q29udGV4dDogZnVuY3Rpb24ob3JpZ2luYWxHbENvbnRleHQpCisgICAgeworICAgICAgICB2
YXIgcmVwbGF5Q29udGV4dCA9IG9yaWdpbmFsR2xDb250ZXh0WyJfX3JlcGxheUNvbnRleHQiXTsK
KyAgICAgICAgaWYgKCFyZXBsYXlDb250ZXh0KSB7CisgICAgICAgICAgICB2YXIgY2FudmFzID0g
b3JpZ2luYWxHbENvbnRleHQuY2FudmFzLmNsb25lTm9kZSh0cnVlKTsKKyAgICAgICAgICAgIHZh
ciBhdHRyaWJ1dGVzID0gb3JpZ2luYWxHbENvbnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsK
KyAgICAgICAgICAgIHZhciBjb250ZXh0SWRzID0gWyJleHBlcmltZW50YWwtd2ViZ2wiLCAid2Vi
a2l0LTNkIiwgIjNkIl07CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgY29udGV4dElkOyBj
b250ZXh0SWQgPSBjb250ZXh0SWRzW2ldOyArK2kpIHsKKyAgICAgICAgICAgICAgICByZXBsYXlD
b250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoY29udGV4dElkLCBhdHRyaWJ1dGVzKTsKKyAgICAg
ICAgICAgICAgICBpZiAocmVwbGF5Q29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICByZXBs
YXlDb250ZXh0ID0gLyoqIEB0eXBlIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9ICovIFJlc291cmNl
LndyYXBwZWRPYmplY3QocmVwbGF5Q29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShvcmlnaW5hbEdsQ29udGV4dCwgIl9fcmVwbGF5Q29udGV4dCIsIHsKKyAg
ICAgICAgICAgICAgICB2YWx1ZTogcmVwbGF5Q29udGV4dCwKKyAgICAgICAgICAgICAgICB3cml0
YWJsZTogZmFsc2UsCisgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAgICAg
ICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IHRoaXMuX3JlcGxheUNvbnRleHQgPSByZXBsYXlDb250ZXh0OworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gRklYTUU6IFJlc2V0IHRoZSByZXBsYXkgR0wgc3RhdGUgYW5kIGNsZWFy
IHRoZSBjYW52YXMuCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlcGxheUNvbnRleHQ7Cisg
ICAgfQorfQorCit2YXIgaW5qZWN0ZWRTY3JpcHQgPSBuZXcgSW5qZWN0ZWRTY3JpcHQoKTsKK3Jl
dHVybiBpbmplY3RlZFNjcmlwdDsKKworfSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjUzYmU5MjE0NGZiZDdlN2NmNGEwYmRiNDBiOTlhNGRmMDRhNGQwMS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1IpICYmIEVOQUJMRShXRUJHTCkKLQotI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0V2ViR0xNb2R1
bGUuaCIKLQotI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJj
ZS5oIgotI2luY2x1ZGUgIlNjcmlwdEZ1bmN0aW9uQ2FsbC5oIgotI2luY2x1ZGUgIlNjcmlwdE9i
amVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUluamVjdGVkU2NyaXB0V2ViR0xNb2R1
bGU6OkluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUoKQotICAgIDogSW5qZWN0ZWRTY3JpcHRNb2R1
bGUoIkluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUiKQotewotfQotCi1JbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGU6Om1vZHVsZUZvclN0YXRlKEluamVj
dGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUpCi17Ci0gICAgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZSByZXN1bHQ7Ci0gICAg
cmVzdWx0LmVuc3VyZUluamVjdGVkKGluamVjdGVkU2NyaXB0TWFuYWdlciwgc2NyaXB0U3RhdGUp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cmluZyBJbmplY3RlZFNjcmlwdFdlYkdMTW9k
dWxlOjpzb3VyY2UoKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZV9qcyksIHNpemVv
ZihJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlX2pzKSk7Ci19Ci0KLVNjcmlwdE9iamVj
dCBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlOjp3cmFwV2ViR0xDb250ZXh0KGNvbnN0IFNjcmlw
dE9iamVjdCYgZ2xDb250ZXh0KQotewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihp
bmplY3RlZFNjcmlwdE9iamVjdCgpLCAid3JhcFdlYkdMQ29udGV4dCIpOwotICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KGdsQ29udGV4dCk7Ci0gICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxz
ZTsKLSAgICBTY3JpcHRWYWx1ZSByZXN1bHRWYWx1ZSA9IGNhbGxGdW5jdGlvbldpdGhFdmFsRW5h
YmxlZChmdW5jdGlvbiwgaGFkRXhjZXB0aW9uKTsKLSAgICBpZiAoaGFkRXhjZXB0aW9uIHx8IHJl
c3VsdFZhbHVlLmhhc05vVmFsdWUoKSB8fCAhcmVzdWx0VmFsdWUuaXNPYmplY3QoKSkgewotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCgp
OwotICAgIH0KLSAgICByZXR1cm4gU2NyaXB0T2JqZWN0KGdsQ29udGV4dC5zY3JpcHRTdGF0ZSgp
LCByZXN1bHRWYWx1ZSk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZTo6Y2Fw
dHVyZUZyYW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU3RyaW5nKiB0cmFjZUxvZ0lkKQot
ewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgp
LCAiY2FwdHVyZUZyYW1lIik7Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRWYWx1
ZTsKLSAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdFZhbHVlKTsKLSAgICBpZiAoIXJlc3Vs
dFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVTdHJp
bmcgfHwgIXJlc3VsdFZhbHVlLT5hc1N0cmluZyh0cmFjZUxvZ0lkKSkKLSAgICAgICAgKmVycm9y
U3RyaW5nID0gIkludGVybmFsIGVycm9yOiBjYXB0dXJlRnJhbWUiOwotfQotCi12b2lkIEluamVj
dGVkU2NyaXB0V2ViR0xNb2R1bGU6OmRyb3BUcmFjZUxvZyhFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgdHJhY2VMb2dJZCkKLXsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwg
ZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImRyb3BUcmFjZUxvZyIpOwotICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHRyYWNlTG9nSWQpOwotICAgIGJvb2wgaGFkRXhjZXB0aW9u
ID0gZmFsc2U7Ci0gICAgY2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBoYWRF
eGNlcHRpb24pOwotICAgIEFTU0VSVCghaGFkRXhjZXB0aW9uKTsKLSAgICBpZiAoaGFkRXhjZXB0
aW9uKQotICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGRyb3BUcmFjZUxv
ZyI7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZTo6dHJhY2VMb2coRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIFJlZlB0cjxUeXBl
QnVpbGRlcjo6V2ViR0w6OlRyYWNlTG9nPiogdHJhY2VMb2cpCi17Ci0gICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJ0cmFjZUxvZyIpOwotICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHRyYWNlTG9nSWQpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHRWYWx1
ZSk7Ci0gICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEluc3Bl
Y3RvclZhbHVlOjpUeXBlT2JqZWN0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3Ry
aW5nKGVycm9yU3RyaW5nKSkKLSAgICAgICAgICAgICplcnJvclN0cmluZyA9ICJJbnRlcm5hbCBl
cnJvcjogdHJhY2VMb2ciOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICp0cmFjZUxvZyA9
IFR5cGVCdWlsZGVyOjpXZWJHTDo6VHJhY2VMb2c6OnJ1bnRpbWVDYXN0KHJlc3VsdFZhbHVlKTsK
LX0KLQotdm9pZCBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlOjpyZXBsYXlUcmFjZUxvZyhFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHJhY2VMb2dJZCwgaW50IHN0ZXBO
bywgU3RyaW5nKiByZXN1bHQpCi17Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGlu
amVjdGVkU2NyaXB0T2JqZWN0KCksICJyZXBsYXlUcmFjZUxvZyIpOwotICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KHRyYWNlTG9nSWQpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0
ZXBObyk7Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICBtYWtl
Q2FsbChmdW5jdGlvbiwgJnJlc3VsdFZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJl
c3VsdFZhbHVlLT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVTdHJpbmcgfHwgIXJlc3Vs
dFZhbHVlLT5hc1N0cmluZyhyZXN1bHQpKQotICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJu
YWwgZXJyb3I6IHJlcGxheVRyYWNlTG9nIjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZjg1N2ZkODk5ZmMzOTBlMGNlNzljMzE1YTBl
MGQ0MGNiZTEwYTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEluamVjdGVkU2NyaXB0V2ViR0xN
b2R1bGVfaAotI2RlZmluZSBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlX2gKLQotI2luY2x1ZGUg
IkluamVjdGVkU2NyaXB0TW9kdWxlLmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci1jbGFzcyBTY3JpcHRPYmplY3Q7Ci0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoV0VCR0wpCi0KLWNsYXNzIEluamVjdGVkU2NyaXB0V2Vi
R0xNb2R1bGUgOiBwdWJsaWMgSW5qZWN0ZWRTY3JpcHRNb2R1bGUgewotcHVibGljOgotICAgIElu
amVjdGVkU2NyaXB0V2ViR0xNb2R1bGUoKTsKLSAgICAKLSAgICB2aXJ0dWFsIFN0cmluZyBzb3Vy
Y2UoKSBjb25zdDsKLQotICAgIHN0YXRpYyBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlIG1vZHVs
ZUZvclN0YXRlKEluamVjdGVkU2NyaXB0TWFuYWdlciosIFNjcmlwdFN0YXRlKik7Ci0KLSAgICBT
Y3JpcHRPYmplY3Qgd3JhcFdlYkdMQ29udGV4dChjb25zdCBTY3JpcHRPYmplY3QmIGdsQ29udGV4
dCk7Ci0gICAgdm9pZCBjYXB0dXJlRnJhbWUoRXJyb3JTdHJpbmcqLCBTdHJpbmcqKTsKLSAgICB2
b2lkIGRyb3BUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQg
dHJhY2VMb2coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBSZWZQdHI8VHlwZUJ1aWxkZXI6
OldlYkdMOjpUcmFjZUxvZz4qKTsKLSAgICB2b2lkIHJlcGxheVRyYWNlTG9nKEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiwgaW50LCBTdHJpbmcqKTsKLX07Ci0KLSNlbmRpZgotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjc4MGFmM2M0MTUyNWM5OGU3NmJkYjgwMzU3MGVlYzNiOGNi
NzdiMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDIxMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQHBhcmFtIHtJbmplY3RlZFNj
cmlwdEhvc3R9IEluamVjdGVkU2NyaXB0SG9zdAotICogQHBhcmFtIHtXaW5kb3d9IGluc3BlY3Rl
ZFdpbmRvdwotICogQHBhcmFtIHtudW1iZXJ9IGluamVjdGVkU2NyaXB0SWQKLSAqLwotKGZ1bmN0
aW9uIChJbmplY3RlZFNjcmlwdEhvc3QsIGluc3BlY3RlZFdpbmRvdywgaW5qZWN0ZWRTY3JpcHRJ
ZCkgewotCi12YXIgVHlwZVV0aWxzID0gewotICAgIC8qKgotICAgICAqIGh0dHA6Ly93d3cua2hy
b25vcy5vcmcvcmVnaXN0cnkvdHlwZWRhcnJheS9zcGVjcy9sYXRlc3QvIzcKLSAgICAgKiBAdHlw
ZSB7QXJyYXkuPEZ1bmN0aW9uPn0KLSAgICAgKi8KLSAgICBfdHlwZWRBcnJheUNsYXNzZXM6IChm
dW5jdGlvbih0eXBlTmFtZXMpIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICBm
b3IgKHZhciBpID0gMCwgbiA9IHR5cGVOYW1lcy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChpbnNwZWN0ZWRXaW5kb3dbdHlwZU5hbWVzW2ldXSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQucHVzaChpbnNwZWN0ZWRXaW5kb3dbdHlwZU5hbWVzW2ldXSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9KShbIkludDhBcnJheSIsICJVaW50OEFycmF5
IiwgIlVpbnQ4Q2xhbXBlZEFycmF5IiwgIkludDE2QXJyYXkiLCAiVWludDE2QXJyYXkiLCAiSW50
MzJBcnJheSIsICJVaW50MzJBcnJheSIsICJGbG9hdDMyQXJyYXkiLCAiRmxvYXQ2NEFycmF5Il0p
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHsqfSBhcnJheQotICAgICAqIEByZXR1cm4ge0Z1
bmN0aW9ufQotICAgICAqLwotICAgIHR5cGVkQXJyYXlDbGFzczogZnVuY3Rpb24oYXJyYXkpCi0g
ICAgewotICAgICAgICB2YXIgY2xhc3NlcyA9IFR5cGVVdGlscy5fdHlwZWRBcnJheUNsYXNzZXM7
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBuOyArK2kp
IHsKLSAgICAgICAgICAgIGlmIChhcnJheSBpbnN0YW5jZW9mIGNsYXNzZXNbaV0pCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNsYXNzZXNbaV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Kn0gb2JqCi0gICAgICogQHJl
dHVybiB7Kn0KLSAgICAgKiBGSVhNRTogc3VwcHJlc3MgY2hlY2tUeXBlcyBkdWUgdG8gb3V0ZGF0
ZWQgYnVpbHRpbiBleHRlcm5zIGZvciBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgYW5kIEltYWdl
RGF0YQotICAgICAqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30KLSAgICAgKi8KLSAgICBjbG9uZTog
ZnVuY3Rpb24ob2JqKQotICAgIHsKLSAgICAgICAgaWYgKCFvYmopCi0gICAgICAgICAgICByZXR1
cm4gb2JqOwotCi0gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajsKLSAgICAgICAgaWYgKHR5
cGUgIT09ICJvYmplY3QiICYmIHR5cGUgIT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICByZXR1
cm4gb2JqOwotCi0gICAgICAgIC8vIEhhbmRsZSBBcnJheSBhbmQgQXJyYXlCdWZmZXIgaW5zdGFu
Y2VzLgotICAgICAgICBpZiAodHlwZW9mIG9iai5zbGljZSA9PT0gImZ1bmN0aW9uIikgewotICAg
ICAgICAgICAgY29uc29sZS5hc3NlcnQob2JqIGluc3RhbmNlb2YgQXJyYXkgfHwgb2JqIGluc3Rh
bmNlb2YgQXJyYXlCdWZmZXIpOwotICAgICAgICAgICAgcmV0dXJuIG9iai5zbGljZSgwKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciB0eXBlZEFycmF5Q2xhc3MgPSBUeXBlVXRpbHMudHlwZWRB
cnJheUNsYXNzKG9iaik7Ci0gICAgICAgIGlmICh0eXBlZEFycmF5Q2xhc3MpCi0gICAgICAgICAg
ICByZXR1cm4gbmV3IHR5cGVkQXJyYXlDbGFzcyhvYmopOwotCi0gICAgICAgIGlmIChvYmogaW5z
dGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG9iai5jbG9uZU5v
ZGUodHJ1ZSk7Ci0KLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50
KSB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2JqLmNsb25lTm9kZSh0cnVlKTsKLSAgICAg
ICAgICAgIHZhciBjb250ZXh0ID0gUmVzb3VyY2Uud3JhcHBlZE9iamVjdChyZXN1bHQuZ2V0Q29u
dGV4dCgiMmQiKSk7Ci0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShvYmosIDAsIDApOwot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvYmog
aW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0g
b2JqLmNsb25lTm9kZSh0cnVlKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDb3B5IEhUTUxWaWRl
b0VsZW1lbnQncyBjdXJyZW50IGltYWdlIGludG8gYSAyZCBjYW52YXMuCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIElt
YWdlRGF0YSkgewotICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBUeXBlVXRpbHMuX2R1bW15Q2Fu
dmFzMmRDb250ZXh0KCk7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVJ
bWFnZURhdGEob2JqKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gb2JqLmRhdGEu
bGVuZ3RoOyBpIDwgbjsgKytpKQotICAgICAgICAgICAgICByZXN1bHQuZGF0YVtpXSA9IG9iai5k
YXRhW2ldOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAg
IGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogZmFpbGVkIHRvIGNsb25lIG9iamVj
dDogIiwgb2JqKTsKLSAgICAgICAgcmV0dXJuIG9iajsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfQotICAgICAqLwotICAgIF9kdW1t
eUNhbnZhczJkQ29udGV4dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRleHQg
PSBUeXBlVXRpbHMuX2R1bW15Q2FudmFzMmRDb250ZXh0SW5zdGFuY2U7Ci0gICAgICAgIGlmICgh
Y29udGV4dCkgewotICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGluc3BlY3RlZFdpbmRvdy5kb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKLSAgICAgICAgICAgIGNvbnRleHQgPSAvKiog
QHR5cGUge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gKi8gUmVzb3VyY2Uud3JhcHBlZE9iamVj
dChjYW52YXMuZ2V0Q29udGV4dCgiMmQiKSk7Ci0gICAgICAgICAgICBUeXBlVXRpbHMuX2R1bW15
Q2FudmFzMmRDb250ZXh0SW5zdGFuY2UgPSBjb250ZXh0OwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBjb250ZXh0OwotICAgIH0KLX0KLQotLyoqCi0gKiBAaW50ZXJmYWNlCi0gKi8KLWZ1bmN0
aW9uIFN0YWNrVHJhY2UoKQotewotfQotCi1TdGFja1RyYWNlLnByb3RvdHlwZSA9IHsKLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKLSAgICAgKiBAcmV0dXJuIHt7c291cmNl
VVJMOiBzdHJpbmcsIGxpbmVOdW1iZXI6IG51bWJlciwgY29sdW1uTnVtYmVyOiBudW1iZXJ9fQot
ICAgICAqLwotICAgIGNhbGxGcmFtZTogZnVuY3Rpb24oaW5kZXgpCi0gICAgewotICAgIH0KLX0K
LQotLyoqCi0gKiBAcGFyYW0ge251bWJlcj19IHN0YWNrVHJhY2VMaW1pdAotICogQHBhcmFtIHtG
dW5jdGlvbj19IHRvcE1vc3RGdW5jdGlvblRvSWdub3JlCi0gKiBAcmV0dXJuIHtTdGFja1RyYWNl
fQotICovCi1TdGFja1RyYWNlLmNyZWF0ZSA9IGZ1bmN0aW9uKHN0YWNrVHJhY2VMaW1pdCwgdG9w
TW9zdEZ1bmN0aW9uVG9JZ25vcmUpCi17Ci0gICAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3Rh
Y2tUcmFjZSA9PT0gImZ1bmN0aW9uIikKLSAgICAgICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlVjgo
c3RhY2tUcmFjZUxpbWl0LCB0b3BNb3N0RnVuY3Rpb25Ub0lnbm9yZSB8fCBhcmd1bWVudHMuY2Fs
bGVlKTsKLSAgICAvLyBGSVhNRTogU3VwcG9ydCBKU0MsIGFuZCBtYXliZSBvdGhlciBicm93c2Vy
cy4KLSAgICByZXR1cm4gbnVsbDsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBs
ZW1lbnRzIHtTdGFja1RyYWNlfQotICogQHBhcmFtIHtudW1iZXI9fSBzdGFja1RyYWNlTGltaXQK
LSAqIEBwYXJhbSB7RnVuY3Rpb249fSB0b3BNb3N0RnVuY3Rpb25Ub0lnbm9yZQotICogQHNlZSBo
dHRwOi8vY29kZS5nb29nbGUuY29tL3Avdjgvd2lraS9KYXZhU2NyaXB0U3RhY2tUcmFjZUFwaQot
ICovCi1mdW5jdGlvbiBTdGFja1RyYWNlVjgoc3RhY2tUcmFjZUxpbWl0LCB0b3BNb3N0RnVuY3Rp
b25Ub0lnbm9yZSkKLXsKLSAgICBTdGFja1RyYWNlLmNhbGwodGhpcyk7Ci0gICAgdmFyIG9sZFN0
YWNrVHJhY2VMaW1pdCA9IEVycm9yLnN0YWNrVHJhY2VMaW1pdDsKLSAgICBpZiAodHlwZW9mIHN0
YWNrVHJhY2VMaW1pdCA9PT0gIm51bWJlciIpCi0gICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1p
dCA9IHN0YWNrVHJhY2VMaW1pdDsKLQotICAgIHRoaXMuX2Vycm9yID0gLyoqIEB0eXBlIHt7c3Rh
Y2s6IEFycmF5fX0gKi8ge307Ci0gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcy5fZXJy
b3IsIHRvcE1vc3RGdW5jdGlvblRvSWdub3JlIHx8IGFyZ3VtZW50cy5jYWxsZWUpOwotCi0gICAg
RXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gb2xkU3RhY2tUcmFjZUxpbWl0OwotfQotCi1TdGFja1Ry
YWNlVjgucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBpbmRleAotICAgICAqIEByZXR1cm4ge3tzb3VyY2VVUkw6IHN0cmluZywg
bGluZU51bWJlcjogbnVtYmVyLCBjb2x1bW5OdW1iZXI6IG51bWJlcn19Ci0gICAgICovCi0gICAg
Y2FsbEZyYW1lOiBmdW5jdGlvbihpbmRleCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc3Rh
Y2tUcmFjZSkKLSAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTdGFja1RyYWNlKCk7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9zdGFja1RyYWNlW2luZGV4XTsKLSAgICB9LAotCi0gICAgX3ByZXBhcmVT
dGFja1RyYWNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgb2xkUHJlcGFyZVN0YWNr
VHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsKLSAgICAgICAgLyoqCi0gICAgICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBlcnJvcgotICAgICAgICAgKiBAcGFyYW0ge0FycmF5LjxDYWxsU2l0
ZT59IHN0cnVjdHVyZWRTdGFja1RyYWNlCi0gICAgICAgICAqIEByZXR1cm4ge0FycmF5Ljx7c291
cmNlVVJMOiBzdHJpbmcsIGxpbmVOdW1iZXI6IG51bWJlciwgY29sdW1uTnVtYmVyOiBudW1iZXJ9
Pn0KLSAgICAgICAgICovCi0gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rp
b24oZXJyb3IsIHN0cnVjdHVyZWRTdGFja1RyYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlZFN0YWNrVHJhY2UubWFwKGZ1bmN0aW9uKGNhbGxTaXRlKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMOiBjYWxs
U2l0ZS5nZXRGaWxlTmFtZSgpLAotICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBjYWxs
U2l0ZS5nZXRMaW5lTnVtYmVyKCksCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjog
Y2FsbFNpdGUuZ2V0Q29sdW1uTnVtYmVyKCkKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fc3RhY2tUcmFjZSA9IHRoaXMuX2Vycm9y
LnN0YWNrOwotICAgICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IG9sZFByZXBhcmVTdGFj
a1RyYWNlOwotICAgICAgICBkZWxldGUgdGhpcy5fZXJyb3I7IC8vIE5vIGxvbmdlciBuZWVkZWQs
IGZyZWUgbWVtb3J5LgotICAgIH0KLX0KLQotU3RhY2tUcmFjZVY4LnByb3RvdHlwZS5fX3Byb3Rv
X18gPSBTdGFja1RyYWNlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwot
ZnVuY3Rpb24gQ2FjaGUoKQotewotICAgIHRoaXMucmVzZXQoKTsKLX0KLQotQ2FjaGUucHJvdG90
eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBz
aXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZTsKLSAgICB9
LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2l0ZW1zID0g
T2JqZWN0LmNyZWF0ZShudWxsKTsKLSAgICAgICAgdGhpcy5fc2l6ZSA9IDA7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXkKLSAgICAgKiBAcmV0dXJuIHtib29s
ZWFufQotICAgICAqLwotICAgIGhhczogZnVuY3Rpb24oa2V5KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGtleSBpbiB0aGlzLl9pdGVtczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtudW1iZXJ9IGtleQotICAgICAqIEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICBnZXQ6
IGZ1bmN0aW9uKGtleSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc1trZXldOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0ga2V5Ci0gICAgICogQHBh
cmFtIHtPYmplY3R9IGl0ZW0KLSAgICAgKi8KLSAgICBwdXQ6IGZ1bmN0aW9uKGtleSwgaXRlbSkK
LSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5oYXMoa2V5KSkKLSAgICAgICAgICAgICsrdGhpcy5f
c2l6ZTsKLSAgICAgICAgdGhpcy5faXRlbXNba2V5XSA9IGl0ZW07Ci0gICAgfQotfQotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtSZXNvdXJjZXxPYmplY3R9IHRoaXNPYmplY3QK
LSAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUKLSAqIEBwYXJhbSB7QXJyYXl8QXJndW1l
bnRzfSBhcmdzCi0gKiBAcGFyYW0ge1Jlc291cmNlfCo9fSByZXN1bHQKLSAqIEBwYXJhbSB7U3Rh
Y2tUcmFjZT19IHN0YWNrVHJhY2UKLSAqLwotZnVuY3Rpb24gQ2FsbCh0aGlzT2JqZWN0LCBmdW5j
dGlvbk5hbWUsIGFyZ3MsIHJlc3VsdCwgc3RhY2tUcmFjZSkKLXsKLSAgICB0aGlzLl90aGlzT2Jq
ZWN0ID0gdGhpc09iamVjdDsKLSAgICB0aGlzLl9mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7
Ci0gICAgdGhpcy5fYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MsIDApOwot
ICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDsKLSAgICB0aGlzLl9zdGFja1RyYWNlID0gc3RhY2tU
cmFjZSB8fCBudWxsOwotfQotCi1DYWxsLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBA
cmV0dXJuIHtSZXNvdXJjZX0KLSAgICAgKi8KLSAgICByZXNvdXJjZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFJlc291cmNlLmZvck9iamVjdCh0aGlzLl90aGlzT2JqZWN0KTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAg
IGZ1bmN0aW9uTmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Z1
bmN0aW9uTmFtZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXl9Ci0g
ICAgICovCi0gICAgYXJnczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X2FyZ3M7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4geyp9Ci0gICAgICovCi0g
ICAgcmVzdWx0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcmVzdWx0
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtTdGFja1RyYWNlfQotICAgICAq
LwotICAgIHN0YWNrVHJhY2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9zdGFja1RyYWNlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1N0YWNrVHJh
Y2V9IHN0YWNrVHJhY2UKLSAgICAgKi8KLSAgICBzZXRTdGFja1RyYWNlOiBmdW5jdGlvbihzdGFj
a1RyYWNlKQotICAgIHsKLSAgICAgICAgdGhpcy5fc3RhY2tUcmFjZSA9IHN0YWNrVHJhY2U7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Kn0gcmVzdWx0Ci0gICAgICovCi0gICAg
c2V0UmVzdWx0OiBmdW5jdGlvbihyZXN1bHQpCi0gICAgewotICAgICAgICB0aGlzLl9yZXN1bHQg
PSByZXN1bHQ7Ci0gICAgfSwKLQotICAgIGZyZWV6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuX2ZyZWV6ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMu
X2ZyZWV6ZWQgPSB0cnVlOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRoaXMuX2FyZ3Mu
bGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogZnJlZXplIHRoZSBS
ZXNvdXJjZXMgYWxzbyEKLSAgICAgICAgICAgIGlmICghUmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMu
X2FyZ3NbaV0pKQotICAgICAgICAgICAgICAgIHRoaXMuX2FyZ3NbaV0gPSBUeXBlVXRpbHMuY2xv
bmUodGhpcy5fYXJnc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAgICAgKiBAcmV0dXJuIHtSZXBsYXlhYmxlQ2FsbH0KLSAg
ICAgKi8KLSAgICB0b1JlcGxheWFibGU6IGZ1bmN0aW9uKGNhY2hlKQotICAgIHsKLSAgICAgICAg
dGhpcy5mcmVlemUoKTsKLSAgICAgICAgdmFyIHRoaXNPYmplY3QgPSAvKiogQHR5cGUge1JlcGxh
eWFibGVSZXNvdXJjZX0gKi8gUmVzb3VyY2UudG9SZXBsYXlhYmxlKHRoaXMuX3RoaXNPYmplY3Qs
IGNhY2hlKTsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFJlc291cmNlLnRvUmVwbGF5YWJsZSh0aGlz
Ll9yZXN1bHQsIGNhY2hlKTsKLSAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9hcmdzLm1hcChmdW5j
dGlvbihvYmopIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZS50b1JlcGxheWFibGUob2Jq
LCBjYWNoZSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gbmV3IFJlcGxheWFibGVDYWxs
KHRoaXNPYmplY3QsIHRoaXMuX2Z1bmN0aW9uTmFtZSwgYXJncywgcmVzdWx0LCB0aGlzLl9zdGFj
a1RyYWNlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtSZXBsYXlhYmxlQ2Fs
bH0gcmVwbGF5YWJsZUNhbGwKLSAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQotICAgICAqIEBy
ZXR1cm4ge0NhbGx9Ci0gICAgICovCi0gICAgcmVwbGF5OiBmdW5jdGlvbihyZXBsYXlhYmxlQ2Fs
bCwgY2FjaGUpCi0gICAgewotICAgICAgICB2YXIgcmVwbGF5T2JqZWN0ID0gUmVwbGF5YWJsZVJl
c291cmNlLnJlcGxheShyZXBsYXlhYmxlQ2FsbC5yZXNvdXJjZSgpLCBjYWNoZSk7Ci0gICAgICAg
IHZhciByZXBsYXlGdW5jdGlvbiA9IHJlcGxheU9iamVjdFtyZXBsYXlhYmxlQ2FsbC5mdW5jdGlv
bk5hbWUoKV07Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHR5cGVvZiByZXBsYXlGdW5jdGlvbiA9
PT0gImZ1bmN0aW9uIiwgIkV4cGVjdGVkIGEgZnVuY3Rpb24gdG8gcmVwbGF5Iik7Ci0gICAgICAg
IHZhciByZXBsYXlBcmdzID0gcmVwbGF5YWJsZUNhbGwuYXJncygpLm1hcChmdW5jdGlvbihvYmop
IHsKLSAgICAgICAgICAgIHJldHVybiBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KG9iaiwgY2Fj
aGUpOwotICAgICAgICB9KTsKLSAgICAgICAgdmFyIHJlcGxheVJlc3VsdCA9IHJlcGxheUZ1bmN0
aW9uLmFwcGx5KHJlcGxheU9iamVjdCwgcmVwbGF5QXJncyk7Ci0gICAgICAgIGlmIChyZXBsYXlh
YmxlQ2FsbC5yZXN1bHQoKSBpbnN0YW5jZW9mIFJlcGxheWFibGVSZXNvdXJjZSkgewotICAgICAg
ICAgICAgdmFyIHJlc291cmNlID0gcmVwbGF5YWJsZUNhbGwucmVzdWx0KCkucmVwbGF5KGNhY2hl
KTsKLSAgICAgICAgICAgIGlmICghcmVzb3VyY2Uud3JhcHBlZE9iamVjdCgpKQotICAgICAgICAg
ICAgICAgIHJlc291cmNlLnNldFdyYXBwZWRPYmplY3QocmVwbGF5UmVzdWx0KTsKLSAgICAgICAg
fQotCi0gICAgICAgIHRoaXMuX3RoaXNPYmplY3QgPSByZXBsYXlPYmplY3Q7Ci0gICAgICAgIHRo
aXMuX2Z1bmN0aW9uTmFtZSA9IHJlcGxheWFibGVDYWxsLmZ1bmN0aW9uTmFtZSgpOwotICAgICAg
ICB0aGlzLl9hcmdzID0gcmVwbGF5QXJnczsKLSAgICAgICAgdGhpcy5fcmVzdWx0ID0gcmVwbGF5
UmVzdWx0OwotICAgICAgICB0aGlzLl9zdGFja1RyYWNlID0gcmVwbGF5YWJsZUNhbGwuc3RhY2tU
cmFjZSgpOwotICAgICAgICB0aGlzLl9mcmVlemVkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtSZXBsYXlh
YmxlUmVzb3VyY2V9IHRoaXNPYmplY3QKLSAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUK
LSAqIEBwYXJhbSB7QXJyYXkuPFJlcGxheWFibGVSZXNvdXJjZXwqPn0gYXJncwotICogQHBhcmFt
IHtSZXBsYXlhYmxlUmVzb3VyY2V8Kn0gcmVzdWx0Ci0gKiBAcGFyYW0ge1N0YWNrVHJhY2V9IHN0
YWNrVHJhY2UKLSAqLwotZnVuY3Rpb24gUmVwbGF5YWJsZUNhbGwodGhpc09iamVjdCwgZnVuY3Rp
b25OYW1lLCBhcmdzLCByZXN1bHQsIHN0YWNrVHJhY2UpCi17Ci0gICAgdGhpcy5fdGhpc09iamVj
dCA9IHRoaXNPYmplY3Q7Ci0gICAgdGhpcy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lOwot
ICAgIHRoaXMuX2FyZ3MgPSBhcmdzOwotICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDsKLSAgICB0
aGlzLl9zdGFja1RyYWNlID0gc3RhY2tUcmFjZTsKLX0KLQotUmVwbGF5YWJsZUNhbGwucHJvdG90
eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVSZXNvdXJjZX0KLSAg
ICAgKi8KLSAgICByZXNvdXJjZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX3RoaXNPYmplY3Q7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmlu
Z30KLSAgICAgKi8KLSAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9mdW5jdGlvbk5hbWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge0FycmF5LjxSZXBsYXlhYmxlUmVzb3VyY2V8Kj59Ci0gICAgICovCi0gICAgYXJnczog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2FyZ3M7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVSZXNvdXJjZXwqfQotICAgICAqLwot
ICAgIHJlc3VsdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3Vs
dDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7U3RhY2tUcmFjZX0KLSAgICAg
Ki8KLSAgICBzdGFja1RyYWNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5fc3RhY2tUcmFjZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYWNoZX0g
Y2FjaGUKLSAgICAgKiBAcmV0dXJuIHtDYWxsfQotICAgICAqLwotICAgIHJlcGxheTogZnVuY3Rp
b24oY2FjaGUpCi0gICAgewotICAgICAgICB2YXIgY2FsbCA9IE9iamVjdC5jcmVhdGUoQ2FsbC5w
cm90b3R5cGUpOwotICAgICAgICByZXR1cm4gY2FsbC5yZXBsYXkodGhpcywgY2FjaGUpOwotICAg
IH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVk
T2JqZWN0Ci0gKi8KLWZ1bmN0aW9uIFJlc291cmNlKHdyYXBwZWRPYmplY3QpCi17Ci0gICAgdGhp
cy5faWQgPSArK1Jlc291cmNlLl91bmlxdWVJZDsKLSAgICB0aGlzLl9yZXNvdXJjZU1hbmFnZXIg
PSBudWxsOwotICAgIHRoaXMuX2NhbGxzID0gW107Ci0gICAgdGhpcy5zZXRXcmFwcGVkT2JqZWN0
KHdyYXBwZWRPYmplY3QpOwotfQotCi0vKioKLSAqIEB0eXBlIHtudW1iZXJ9Ci0gKi8KLVJlc291
cmNlLl91bmlxdWVJZCA9IDA7Ci0KLS8qKgotICogQHBhcmFtIHsqfSBvYmoKLSAqIEByZXR1cm4g
e1Jlc291cmNlfQotICovCi1SZXNvdXJjZS5mb3JPYmplY3QgPSBmdW5jdGlvbihvYmopCi17Ci0g
ICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIGlmIChvYmogaW5zdGFuY2Vv
ZiBSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG9iajsKLSAgICBpZiAodHlwZW9mIG9iaiA9PT0g
Im9iamVjdCIpCi0gICAgICAgIHJldHVybiBvYmpbIl9fcmVzb3VyY2VPYmplY3QiXTsKLSAgICBy
ZXR1cm4gbnVsbDsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge1Jlc291cmNlfCp9IG9iagotICogQHJl
dHVybiB7Kn0KLSAqLwotUmVzb3VyY2Uud3JhcHBlZE9iamVjdCA9IGZ1bmN0aW9uKG9iaikKLXsK
LSAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qob2JqKTsKLSAgICByZXR1cm4g
cmVzb3VyY2UgPyByZXNvdXJjZS53cmFwcGVkT2JqZWN0KCkgOiBvYmo7Ci19Ci0KLS8qKgotICog
QHBhcmFtIHtSZXNvdXJjZXwqfSBvYmoKLSAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCi0gKiBAcmV0
dXJuIHtSZXBsYXlhYmxlUmVzb3VyY2V8Kn0KLSAqLwotUmVzb3VyY2UudG9SZXBsYXlhYmxlID0g
ZnVuY3Rpb24ob2JqLCBjYWNoZSkKLXsKLSAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JP
YmplY3Qob2JqKTsKLSAgICByZXR1cm4gcmVzb3VyY2UgPyByZXNvdXJjZS50b1JlcGxheWFibGUo
Y2FjaGUpIDogb2JqOwotfQotCi1SZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGlkOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5faWQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICB3cmFwcGVkT2JqZWN0OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fd3JhcHBlZE9iamVjdDsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlCi0gICAgICovCi0gICAgc2V0V3JhcHBlZE9i
amVjdDogZnVuY3Rpb24odmFsdWUpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh2YWx1
ZSwgIndyYXBwZWRPYmplY3Qgc2hvdWxkIG5vdCBiZSBOVUxMIik7Ci0gICAgICAgIGNvbnNvbGUu
YXNzZXJ0KCEodmFsdWUgaW5zdGFuY2VvZiBSZXNvdXJjZSksICJCaW5kaW5nIGEgUmVzb3VyY2Ug
b2JqZWN0IHRvIGFub3RoZXIgUmVzb3VyY2Ugb2JqZWN0PyIpOwotICAgICAgICB0aGlzLl93cmFw
cGVkT2JqZWN0ID0gdmFsdWU7Ci0gICAgICAgIHRoaXMuX2JpbmRPYmplY3RUb1Jlc291cmNlKHZh
bHVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7T2JqZWN0fQotICAgICAq
LwotICAgIHByb3h5T2JqZWN0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMu
X3Byb3h5T2JqZWN0KQotICAgICAgICAgICAgdGhpcy5fcHJveHlPYmplY3QgPSB0aGlzLl93cmFw
T2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wcm94eU9iamVjdDsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7UmVzb3VyY2VUcmFja2luZ01hbmFnZXJ9Ci0gICAgICov
Ci0gICAgbWFuYWdlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Jl
c291cmNlTWFuYWdlcjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtSZXNvdXJj
ZVRyYWNraW5nTWFuYWdlcn0gdmFsdWUKLSAgICAgKi8KLSAgICBzZXRNYW5hZ2VyOiBmdW5jdGlv
bih2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IHZhbHVlOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48Q2FsbD59Ci0gICAgICov
Ci0gICAgY2FsbHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jYWxs
czsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAgICAg
KiBAcmV0dXJuIHtSZXBsYXlhYmxlUmVzb3VyY2V9Ci0gICAgICovCi0gICAgdG9SZXBsYXlhYmxl
OiBmdW5jdGlvbihjYWNoZSkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBjYWNoZS5nZXQo
dGhpcy5faWQpOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgdmFyIGRhdGEgPSB7Ci0gICAgICAgICAgICBpZDogdGhpcy5faWQKLSAgICAg
ICAgfTsKLSAgICAgICAgcmVzdWx0ID0gbmV3IFJlcGxheWFibGVSZXNvdXJjZSh0aGlzLCBkYXRh
KTsKLSAgICAgICAgY2FjaGUucHV0KHRoaXMuX2lkLCByZXN1bHQpOyAvLyBQdXQgaW50byB0aGUg
Y2FjaGUgZWFybHkgdG8gYXZvaWQgbG9vcHMuCi0gICAgICAgIGRhdGEuY2FsbHMgPSB0aGlzLl9j
YWxscy5tYXAoZnVuY3Rpb24oY2FsbCkgewotICAgICAgICAgICAgcmV0dXJuIGNhbGwudG9SZXBs
YXlhYmxlKGNhY2hlKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHRoaXMuX3BvcHVsYXRlUmVwbGF5
YWJsZURhdGEoZGF0YSwgY2FjaGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAqIEBwYXJhbSB7Q2Fj
aGV9IGNhY2hlCi0gICAgICovCi0gICAgX3BvcHVsYXRlUmVwbGF5YWJsZURhdGE6IGZ1bmN0aW9u
KGRhdGEsIGNhY2hlKQotICAgIHsKLSAgICAgICAgLy8gRG8gbm90aGluZy4gU2hvdWxkIGJlIG92
ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtPYmplY3R9IGRhdGEKLSAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQotICAgICAqIEByZXR1
cm4ge1Jlc291cmNlfQotICAgICAqLwotICAgIHJlcGxheTogZnVuY3Rpb24oZGF0YSwgY2FjaGUp
Ci0gICAgewotICAgICAgICB2YXIgcmVzb3VyY2UgPSBjYWNoZS5nZXQoZGF0YS5pZCk7Ci0gICAg
ICAgIGlmIChyZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybiByZXNvdXJjZTsKLSAgICAgICAg
dGhpcy5faWQgPSBkYXRhLmlkOwotICAgICAgICB0aGlzLl9yZXNvdXJjZU1hbmFnZXIgPSBudWxs
OwotICAgICAgICB0aGlzLl9jYWxscyA9IFtdOwotICAgICAgICB0aGlzLl93cmFwcGVkT2JqZWN0
ID0gbnVsbDsKLSAgICAgICAgY2FjaGUucHV0KGRhdGEuaWQsIHRoaXMpOyAvLyBQdXQgaW50byB0
aGUgY2FjaGUgZWFybHkgdG8gYXZvaWQgbG9vcHMuCi0gICAgICAgIHRoaXMuX2RvUmVwbGF5Q2Fs
bHMoZGF0YSwgY2FjaGUpOwotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl93cmFwcGVkT2Jq
ZWN0LCAiUmVzb3VyY2Ugc2hvdWxkIGJlIHJlY29uc3RydWN0ZWQhIik7Ci0gICAgICAgIHJldHVy
biB0aGlzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQot
ICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCi0gICAgICovCi0gICAgX2RvUmVwbGF5Q2FsbHM6
IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4g
PSBkYXRhLmNhbGxzLmxlbmd0aDsgaSA8IG47ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2NhbGxz
LnB1c2goZGF0YS5jYWxsc1tpXS5yZXBsYXkoY2FjaGUpKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCi0gICAgICovCi0gICAgcHVzaENhbGw6IGZ1bmN0aW9u
KGNhbGwpCi0gICAgewotICAgICAgICBjYWxsLmZyZWV6ZSgpOwotICAgICAgICB0aGlzLl9jYWxs
cy5wdXNoKGNhbGwpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFPYmplY3R9
IG9iamVjdAotICAgICAqLwotICAgIF9iaW5kT2JqZWN0VG9SZXNvdXJjZTogZnVuY3Rpb24ob2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgIl9fcmVz
b3VyY2VPYmplY3QiLCB7Ci0gICAgICAgICAgICB2YWx1ZTogdGhpcywKLSAgICAgICAgICAgIHdy
aXRhYmxlOiBmYWxzZSwKLSAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAotICAgICAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCi0gICAgICAgIH0pOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAgX3dyYXBPYmplY3Q6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHZhciB3cmFwcGVkT2JqZWN0ID0gdGhpcy53cmFwcGVkT2JqZWN0
KCk7Ci0gICAgICAgIGlmICghd3JhcHBlZE9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBudWxs
OwotICAgICAgICB2YXIgcHJveHkgPSBPYmplY3QuY3JlYXRlKHdyYXBwZWRPYmplY3QuX19wcm90
b19fKTsgLy8gSW4gb3JkZXIgdG8gZW11bGF0ZSAiaW5zdGFuY2VvZiIuCi0KLSAgICAgICAgdmFy
IHNlbGYgPSB0aGlzOwotICAgICAgICB2YXIgY3VzdG9tV3JhcEZ1bmN0aW9ucyA9IHRoaXMuX2N1
c3RvbVdyYXBGdW5jdGlvbnMoKTsKLSAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnR5KHBy
b3BlcnR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHdyYXBwZWRPYmplY3Rb
cHJvcGVydHldID09PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGN1c3RvbVdy
YXBGdW5jdGlvbiA9IGN1c3RvbVdyYXBGdW5jdGlvbnNbcHJvcGVydHldOwotICAgICAgICAgICAg
ICAgIGlmIChjdXN0b21XcmFwRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgIHByb3h5W3By
b3BlcnR5XSA9IHNlbGYuX3dyYXBDdXN0b21GdW5jdGlvbihzZWxmLCB3cmFwcGVkT2JqZWN0LCB3
cmFwcGVkT2JqZWN0W3Byb3BlcnR5XSwgcHJvcGVydHksIGN1c3RvbVdyYXBGdW5jdGlvbik7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwcm94eVtwcm9wZXJ0eV0g
PSBzZWxmLl93cmFwRnVuY3Rpb24oc2VsZiwgd3JhcHBlZE9iamVjdCwgd3JhcHBlZE9iamVjdFtw
cm9wZXJ0eV0sIHByb3BlcnR5KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoL15bQS1aMC05X10r
JC8udGVzdChwcm9wZXJ0eSkgJiYgdHlwZW9mIHdyYXBwZWRPYmplY3RbcHJvcGVydHldID09PSAi
bnVtYmVyIikgewotICAgICAgICAgICAgICAgIC8vIEZhc3QgYWNjZXNzIHRvIGVudW1zIGFuZCBj
b25zdGFudHMuCi0gICAgICAgICAgICAgICAgcHJveHlbcHJvcGVydHldID0gd3JhcHBlZE9iamVj
dFtwcm9wZXJ0eV07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgcHJvcGVydHksIHsKLSAgICAgICAgICAgICAgICAgICAg
Z2V0OiBmdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB3cmFwcGVkT2JqZWN0W3Byb3BlcnR5XTsKLSAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IExvZyB0aGUg
c2V0dGVyIGNhbGxzLgotICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRklY
TUU6IFNldHRpbmcgYW4gYXR0cmlidXRlICVzIHdhcyBub3QgbG9nZ2VkLiIsIHByb3BlcnR5KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZWRPYmplY3RbcHJvcGVydHldID0gdmFsdWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6
IHRydWUKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciBpc0VtcHR5ID0gdHJ1ZTsKLSAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4g
d3JhcHBlZE9iamVjdCkgewotICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOwotICAgICAgICAg
ICAgcHJvY2Vzc1Byb3BlcnR5KHByb3BlcnR5KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNF
bXB0eSkKLSAgICAgICAgICAgIHJldHVybiB3cmFwcGVkT2JqZWN0OyAvLyBOb3RoaW5nIHRvIHBy
b3h5LgotCi0gICAgICAgIHRoaXMuX2JpbmRPYmplY3RUb1Jlc291cmNlKHByb3h5KTsKLSAgICAg
ICAgcmV0dXJuIHByb3h5OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1Jlc291
cmNlfSByZXNvdXJjZQotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcmlnaW5hbE9iamVjdAotICAg
ICAqIEBwYXJhbSB7RnVuY3Rpb259IG9yaWdpbmFsRnVuY3Rpb24KLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gZnVuY3Rpb25OYW1lCi0gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9tV3JhcEZ1
bmN0aW9uCi0gICAgICogQHJldHVybiB7RnVuY3Rpb259Ci0gICAgICovCi0gICAgX3dyYXBDdXN0
b21GdW5jdGlvbjogZnVuY3Rpb24ocmVzb3VyY2UsIG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1
bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGN1c3RvbVdyYXBGdW5jdGlvbikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmdW5jdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtYW5hZ2VyID0g
cmVzb3VyY2UubWFuYWdlcigpOwotICAgICAgICAgICAgdmFyIGlzQ2FwdHVyaW5nID0gbWFuYWdl
ciAmJiBtYW5hZ2VyLmNhcHR1cmluZygpOwotICAgICAgICAgICAgaWYgKGlzQ2FwdHVyaW5nKQot
ICAgICAgICAgICAgICAgIG1hbmFnZXIuY2FwdHVyZUFyZ3VtZW50cyhyZXNvdXJjZSwgYXJndW1l
bnRzKTsKLSAgICAgICAgICAgIHZhciB3cmFwRnVuY3Rpb24gPSBuZXcgUmVzb3VyY2UuV3JhcEZ1
bmN0aW9uKG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGFy
Z3VtZW50cyk7Ci0gICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24uYXBwbHkod3JhcEZ1bmN0
aW9uLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgaWYgKGlzQ2FwdHVyaW5nKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGNhbGwgPSB3cmFwRnVuY3Rpb24uY2FsbCgpOwotICAgICAgICAgICAgICAg
IGNhbGwuc2V0U3RhY2tUcmFjZShTdGFja1RyYWNlLmNyZWF0ZSgxLCBhcmd1bWVudHMuY2FsbGVl
KSk7Ci0gICAgICAgICAgICAgICAgbWFuYWdlci5yZXBvcnRDYWxsKGNhbGwpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHdyYXBGdW5jdGlvbi5yZXN1bHQoKTsKLSAgICAgICAg
fTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVzb3VyY2UK
LSAgICAgKiBAcGFyYW0ge09iamVjdH0gb3JpZ2luYWxPYmplY3QKLSAgICAgKiBAcGFyYW0ge0Z1
bmN0aW9ufSBvcmlnaW5hbEZ1bmN0aW9uCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9u
TmFtZQotICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufQotICAgICAqLwotICAgIF93cmFwRnVuY3Rp
b246IGZ1bmN0aW9uKHJlc291cmNlLCBvcmlnaW5hbE9iamVjdCwgb3JpZ2luYWxGdW5jdGlvbiwg
ZnVuY3Rpb25OYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdmFyIG1hbmFnZXIgPSByZXNvdXJjZS5tYW5hZ2VyKCk7Ci0gICAgICAg
ICAgICBpZiAoIW1hbmFnZXIgfHwgIW1hbmFnZXIuY2FwdHVyaW5nKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkob3JpZ2luYWxPYmplY3QsIGFyZ3VtZW50
cyk7Ci0gICAgICAgICAgICBtYW5hZ2VyLmNhcHR1cmVBcmd1bWVudHMocmVzb3VyY2UsIGFyZ3Vt
ZW50cyk7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWxGdW5jdGlvbi5hcHBseShv
cmlnaW5hbE9iamVjdCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIHZhciBzdGFja1RyYWNlID0g
U3RhY2tUcmFjZS5jcmVhdGUoMSwgYXJndW1lbnRzLmNhbGxlZSk7Ci0gICAgICAgICAgICB2YXIg
Y2FsbCA9IG5ldyBDYWxsKHJlc291cmNlLCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cywgcmVzdWx0
LCBzdGFja1RyYWNlKTsKLSAgICAgICAgICAgIG1hbmFnZXIucmVwb3J0Q2FsbChjYWxsKTsKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH07Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEByZXR1cm4ge09iamVjdC48c3RyaW5nLCBGdW5jdGlvbj59Ci0gICAgICovCi0gICAg
X2N1c3RvbVdyYXBGdW5jdGlvbnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB7
fTsgLy8gTWF5IGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLSAgICB9Ci19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge09iamVjdH0gb3JpZ2luYWxPYmplY3QKLSAqIEBw
YXJhbSB7RnVuY3Rpb259IG9yaWdpbmFsRnVuY3Rpb24KLSAqIEBwYXJhbSB7c3RyaW5nfSBmdW5j
dGlvbk5hbWUKLSAqIEBwYXJhbSB7QXJyYXl8QXJndW1lbnRzfSBhcmdzCi0gKi8KLVJlc291cmNl
LldyYXBGdW5jdGlvbiA9IGZ1bmN0aW9uKG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9u
LCBmdW5jdGlvbk5hbWUsIGFyZ3MpCi17Ci0gICAgdGhpcy5fb3JpZ2luYWxPYmplY3QgPSBvcmln
aW5hbE9iamVjdDsKLSAgICB0aGlzLl9vcmlnaW5hbEZ1bmN0aW9uID0gb3JpZ2luYWxGdW5jdGlv
bjsKLSAgICB0aGlzLl9mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7Ci0gICAgdGhpcy5fYXJn
cyA9IGFyZ3M7Ci0gICAgdGhpcy5fcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qob3JpZ2lu
YWxPYmplY3QpOwotICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3Jlc291cmNlLCAiRXhwZWN0ZWQg
YSB3cmFwcGVkIGNhbGwgb24gYSBSZXNvdXJjZSBvYmplY3QuIik7Ci19Ci0KLVJlc291cmNlLldy
YXBGdW5jdGlvbi5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7Kn0KLSAg
ICAgKi8KLSAgICByZXN1bHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
ZXhlY3V0ZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgIHRoaXMuX3Jlc3VsdCA9IHRoaXMuX29yaWdpbmFsRnVuY3Rpb24uYXBwbHkodGhpcy5fb3Jp
Z2luYWxPYmplY3QsIHRoaXMuX2FyZ3MpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9yZXN1bHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0NhbGx9Ci0gICAg
ICovCi0gICAgY2FsbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9jYWxs
KQotICAgICAgICAgICAgdGhpcy5fY2FsbCA9IG5ldyBDYWxsKHRoaXMuX3Jlc291cmNlLCB0aGlz
Ll9mdW5jdGlvbk5hbWUsIHRoaXMuX2FyZ3MsIHRoaXMucmVzdWx0KCkpOwotICAgICAgICByZXR1
cm4gdGhpcy5fY2FsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHsqfSByZXN1
bHQKLSAgICAgKi8KLSAgICBvdmVycmlkZVJlc3VsdDogZnVuY3Rpb24ocmVzdWx0KQotICAgIHsK
LSAgICAgICAgdmFyIGNhbGwgPSB0aGlzLmNhbGwoKTsKLSAgICAgICAgY2FsbC5zZXRSZXN1bHQo
cmVzdWx0KTsKLSAgICAgICAgdGhpcy5fcmVzdWx0ID0gcmVzdWx0OwotICAgIH0KLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7UmVzb3VyY2V9IG9yaWdpbmFsUmVzb3VyY2UK
LSAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCi0gKi8KLWZ1bmN0aW9uIFJlcGxheWFibGVSZXNvdXJj
ZShvcmlnaW5hbFJlc291cmNlLCBkYXRhKQotewotICAgIHRoaXMuX3Byb3RvID0gb3JpZ2luYWxS
ZXNvdXJjZS5fX3Byb3RvX187Ci0gICAgdGhpcy5fZGF0YSA9IGRhdGE7Ci19Ci0KLVJlcGxheWFi
bGVSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYWNoZX0g
Y2FjaGUKLSAgICAgKiBAcmV0dXJuIHtSZXNvdXJjZX0KLSAgICAgKi8KLSAgICByZXBsYXk6IGZ1
bmN0aW9uKGNhY2hlKQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUo
dGhpcy5fcHJvdG8pOwotICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGF5KHRoaXMuX2RhdGEs
IGNhY2hlKQotICAgICAgICBjb25zb2xlLmFzc2VydChyZXN1bHQuX19wcm90b19fID09PSB0aGlz
Ll9wcm90bywgIldyb25nIHR5cGUgb2YgYSByZXBsYXkgcmVzdWx0Iik7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotfQotCi0vKioKLSAqIEBwYXJhbSB7UmVwbGF5YWJsZVJlc291cmNl
fCp9IG9iagotICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAqIEByZXR1cm4geyp9Ci0gKi8KLVJl
cGxheWFibGVSZXNvdXJjZS5yZXBsYXkgPSBmdW5jdGlvbihvYmosIGNhY2hlKQotewotICAgIHJl
dHVybiAob2JqIGluc3RhbmNlb2YgUmVwbGF5YWJsZVJlc291cmNlKSA/IG9iai5yZXBsYXkoY2Fj
aGUpLndyYXBwZWRPYmplY3QoKSA6IG9iajsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBleHRlbmRzIHtSZXNvdXJjZX0KLSAqLwotZnVuY3Rpb24gV2ViR0xCb3VuZFJlc291cmNlKHdy
YXBwZWRPYmplY3QpCi17Ci0gICAgUmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsK
LSAgICB0aGlzLl9zdGF0ZSA9IHt9OwotfQotCi1XZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBl
ID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBk
YXRhCi0gICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAgICAgKi8KLSAgICBfcG9wdWxhdGVS
ZXBsYXlhYmxlRGF0YTogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCi0gICAgewotICAgICAgICB2YXIg
c3RhdGUgPSB0aGlzLl9zdGF0ZTsKLSAgICAgICAgZGF0YS5zdGF0ZSA9IHt9OwotICAgICAgICBP
YmplY3Qua2V5cyhzdGF0ZSkuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKLSAgICAgICAg
ICAgIGRhdGEuc3RhdGVbcGFyYW1ldGVyXSA9IFJlc291cmNlLnRvUmVwbGF5YWJsZShzdGF0ZVtw
YXJhbWV0ZXJdLCBjYWNoZSk7Ci0gICAgICAgIH0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAqIEBwYXJhbSB7
Q2FjaGV9IGNhY2hlCi0gICAgICovCi0gICAgX2RvUmVwbGF5Q2FsbHM6IGZ1bmN0aW9uKGRhdGEs
IGNhY2hlKQotICAgIHsKLSAgICAgICAgdmFyIHN0YXRlID0ge307Ci0gICAgICAgIE9iamVjdC5r
ZXlzKGRhdGEuc3RhdGUpLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7Ci0gICAgICAgICAg
ICBzdGF0ZVtwYXJhbWV0ZXJdID0gUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShkYXRhLnN0YXRl
W3BhcmFtZXRlcl0sIGNhY2hlKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHRoaXMuX3N0YXRlID0g
c3RhdGU7Ci0KLSAgICAgICAgdmFyIGdsID0gdGhpcy5fcmVwbGF5Q29udGV4dFJlc291cmNlKGRh
dGEsIGNhY2hlKS53cmFwcGVkT2JqZWN0KCk7Ci0KLSAgICAgICAgdmFyIGJpbmRpbmdzRGF0YSA9
IHsKLSAgICAgICAgICAgIFRFWFRVUkVfMkQ6IFsiYmluZFRleHR1cmUiLCAiVEVYVFVSRV9CSU5E
SU5HXzJEIl0sCi0gICAgICAgICAgICBURVhUVVJFX0NVQkVfTUFQOiBbImJpbmRUZXh0dXJlIiwg
IlRFWFRVUkVfQklORElOR19DVUJFX01BUCJdLAotICAgICAgICAgICAgQVJSQVlfQlVGRkVSOiBb
ImJpbmRCdWZmZXIiLCAiQVJSQVlfQlVGRkVSX0JJTkRJTkciXSwKLSAgICAgICAgICAgIEVMRU1F
TlRfQVJSQVlfQlVGRkVSOiBbImJpbmRCdWZmZXIiLCAiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklO
RElORyJdLAotICAgICAgICAgICAgRlJBTUVCVUZGRVI6IFsiYmluZEZyYW1lYnVmZmVyIiwgIkZS
QU1FQlVGRkVSX0JJTkRJTkciXSwKLSAgICAgICAgICAgIFJFTkRFUkJVRkZFUjogWyJiaW5kUmVu
ZGVyYnVmZmVyIiwgIlJFTkRFUkJVRkZFUl9CSU5ESU5HIl0KLSAgICAgICAgfTsKLSAgICAgICAg
dmFyIG9yaWdpbmFsQmluZGluZ3MgPSB7fTsKLSAgICAgICAgT2JqZWN0LmtleXMoYmluZGluZ3NE
YXRhKS5mb3JFYWNoKGZ1bmN0aW9uKGJpbmRpbmdUYXJnZXQpIHsKLSAgICAgICAgICAgIHZhciBi
aW5kaW5nUGFyYW1ldGVyID0gYmluZGluZ3NEYXRhW2JpbmRpbmdUYXJnZXRdWzFdOwotICAgICAg
ICAgICAgb3JpZ2luYWxCaW5kaW5nc1tiaW5kaW5nVGFyZ2V0XSA9IGdsLmdldFBhcmFtZXRlcihn
bFtiaW5kaW5nUGFyYW1ldGVyXSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIFJlc291cmNlLnBy
b3RvdHlwZS5fZG9SZXBsYXlDYWxscy5jYWxsKHRoaXMsIGRhdGEsIGNhY2hlKTsKLQotICAgICAg
ICBPYmplY3Qua2V5cyhiaW5kaW5nc0RhdGEpLmZvckVhY2goZnVuY3Rpb24oYmluZGluZ1Rhcmdl
dCkgewotICAgICAgICAgICAgdmFyIGJpbmRNZXRob2ROYW1lID0gYmluZGluZ3NEYXRhW2JpbmRp
bmdUYXJnZXRdWzBdOwotICAgICAgICAgICAgZ2xbYmluZE1ldGhvZE5hbWVdLmNhbGwoZ2wsIGds
W2JpbmRpbmdUYXJnZXRdLCBvcmlnaW5hbEJpbmRpbmdzW2JpbmRpbmdUYXJnZXRdKTsKLSAgICAg
ICAgfSk7Ci0gICAgfSwKLQotICAgIF9yZXBsYXlDb250ZXh0UmVzb3VyY2U6IGZ1bmN0aW9uKGRh
dGEsIGNhY2hlKQotICAgIHsKLSAgICAgICAgdmFyIGNhbGxzID0gZGF0YS5jYWxsczsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDAsIG4gPSBjYWxscy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciByZXNvdXJjZSA9IFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoY2FsbHNbaV0u
cmVzb3VyY2UoKSwgY2FjaGUpOwotICAgICAgICAgICAgdmFyIGNvbnRleHRSZXNvdXJjZSA9IFdl
YkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9iamVjdChyZXNvdXJjZSk7Ci0gICAgICAg
ICAgICBpZiAoY29udGV4dFJlc291cmNlKQotICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0
UmVzb3VyY2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXQKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gYmluZE1ldGhvZE5hbWUKLSAgICAgKi8KLSAgICBwdXNoQmluZGluZzogZnVuY3Rpb24odGFy
Z2V0LCBiaW5kTWV0aG9kTmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zdGF0ZS5CSU5E
SU5HICE9PSB0YXJnZXQpIHsKLSAgICAgICAgICAgIHRoaXMuX3N0YXRlLkJJTkRJTkcgPSB0YXJn
ZXQ7Ci0gICAgICAgICAgICB0aGlzLnB1c2hDYWxsKG5ldyBDYWxsKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dFJlc291cmNlLmZvck9iamVjdCh0aGlzKSwgYmluZE1ldGhvZE5hbWUsIFt0YXJnZXQsIHRo
aXNdKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5
cGUuX19wcm90b19fID0gUmVzb3VyY2UucHJvdG90eXBlOwotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQGV4dGVuZHMge1dlYkdMQm91bmRSZXNvdXJjZX0KLSAqLwotZnVuY3Rpb24gV2ViR0xU
ZXh0dXJlUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKLXsKLSAgICBXZWJHTEJvdW5kUmVzb3VyY2Uu
Y2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsKLX0KLQotV2ViR0xUZXh0dXJlUmVzb3VyY2UucHJv
dG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7T2Jq
ZWN0fSBkYXRhCi0gICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAgICAgKi8KLSAgICBfZG9S
ZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCi0gICAgewotICAgICAgICB2YXIgZ2wg
PSB0aGlzLl9yZXBsYXlDb250ZXh0UmVzb3VyY2UoZGF0YSwgY2FjaGUpLndyYXBwZWRPYmplY3Qo
KTsKLQotICAgICAgICB2YXIgc3RhdGUgPSB7fTsKLSAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0UmVzb3VyY2UuUGl4ZWxTdG9yZVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0
ZXIpIHsKLSAgICAgICAgICAgIHN0YXRlW3BhcmFtZXRlcl0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2xb
cGFyYW1ldGVyXSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5w
cm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBjYWNoZSk7Ci0KLSAgICAg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuUGl4ZWxTdG9yZVBhcmFtZXRlcnMuZm9y
RWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKLSAgICAgICAgICAgIGdsLnBpeGVsU3RvcmVpKGds
W3BhcmFtZXRlcl0sIHN0YXRlW3BhcmFtZXRlcl0pOwotICAgICAgICB9KTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCi0gICAg
ICovCi0gICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAgICAgICB2YXIgZ2wg
PSBjYWxsLnJlc291cmNlKCkud3JhcHBlZE9iamVjdCgpOwotICAgICAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uKHBh
cmFtZXRlcikgewotICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2wuZ2V0UGFyYW1ldGVyKGdsW3Bh
cmFtZXRlcl0pOwotICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlW3BhcmFtZXRlcl0gIT09IHZh
bHVlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVbcGFyYW1ldGVyXSA9IHZhbHVlOwot
ICAgICAgICAgICAgICAgIHZhciBwaXhlbFN0b3JlQ2FsbCA9IG5ldyBDYWxsKGdsLCAicGl4ZWxT
dG9yZWkiLCBbZ2xbcGFyYW1ldGVyXSwgdmFsdWVdKTsKLSAgICAgICAgICAgICAgICBXZWJHTEJv
dW5kUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgcGl4ZWxTdG9yZUNhbGwp
OwotICAgICAgICAgICAgfQotICAgICAgICB9LCB0aGlzKTsKLQotICAgICAgICAvLyBGSVhNRTog
cmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRvIHRoZSBy
ZXNvdXJjZSBzdGF0ZS4KLSAgICAgICAgLy8gRklYTUU6IG9wdGltaXplIG1lbW9yeSB1c2FnZTog
bWF5YmUgaXQncyBtb3JlIGVmZmljaWVudCB0byBzdG9yZSBvbmUgdGV4SW1hZ2UyRCBjYWxsIGlu
c3RlYWQgb2YgbWFueSB0ZXhTdWJJbWFnZTJELgotICAgICAgICBXZWJHTEJvdW5kUmVzb3VyY2Uu
cHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgY2FsbCk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAotICAgICAqLwotICAgIHB1c2hDYWxsX3RleFBhcmFt
ZXRlcmY6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAgICAgICB2YXIgYXJncyA9IGNhbGwuYXJn
cygpOwotICAgICAgICB2YXIgcG5hbWUgPSBhcmdzWzFdOwotICAgICAgICB2YXIgcGFyYW0gPSBh
cmdzWzJdOwotICAgICAgICBpZiAodGhpcy5fc3RhdGVbcG5hbWVdICE9PSBwYXJhbSkgewotICAg
ICAgICAgICAgdGhpcy5fc3RhdGVbcG5hbWVdID0gcGFyYW07Ci0gICAgICAgICAgICBXZWJHTEJv
dW5kUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgY2FsbCk7Ci0gICAgICAg
IH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogY29weVRleEltYWdlMkQgYW5kIGNvcHlUZXhT
dWJJbWFnZTJEIGRlZmluZSBhIHRleHR1cmUgaW1hZ2Ugd2l0aCBwaXhlbHMgZnJvbSB0aGUgY3Vy
cmVudCBmcmFtZWJ1ZmZlci4KLSAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKLSAgICAgKi8KLSAg
ICBwdXNoQ2FsbF9jb3B5VGV4SW1hZ2UyRDogZnVuY3Rpb24oY2FsbCkKLSAgICB7Ci0gICAgICAg
IHZhciBnbFJlc291cmNlID0gY2FsbC5yZXNvdXJjZSgpOwotICAgICAgICB2YXIgZ2wgPSBnbFJl
c291cmNlLndyYXBwZWRPYmplY3QoKTsKLSAgICAgICAgdmFyIGZyYW1lYnVmZmVyUmVzb3VyY2Ug
PSBnbFJlc291cmNlLmN1cnJlbnRCaW5kaW5nKGdsLkZSQU1FQlVGRkVSKTsKLSAgICAgICAgaWYg
KGZyYW1lYnVmZmVyUmVzb3VyY2UpCi0gICAgICAgICAgICB0aGlzLnB1c2hDYWxsKG5ldyBDYWxs
KGdsUmVzb3VyY2UsICJiaW5kRnJhbWVidWZmZXIiLCBbZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVm
ZmVyUmVzb3VyY2VdKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
IkFTU0VSVF9OT1RfUkVBQ0hFRDogTm8gRlJBTUVCVUZGRVIgYm91bmQgd2hpbGUgY2FsbGluZyBn
bC4iICsgY2FsbC5mdW5jdGlvbk5hbWUoKSk7Ci0gICAgICAgIHRoaXMucHVzaENhbGwoY2FsbCk7
Ci0gICAgfQotfQotCi1XZWJHTFRleHR1cmVSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGxfdGV4
UGFyYW1ldGVyaSA9IFdlYkdMVGV4dHVyZVJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbF90ZXhQ
YXJhbWV0ZXJmOwotV2ViR0xUZXh0dXJlUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsX2NvcHlU
ZXhTdWJJbWFnZTJEID0gV2ViR0xUZXh0dXJlUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsX2Nv
cHlUZXhJbWFnZTJEOwotCi1XZWJHTFRleHR1cmVSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBleHRlbmRzIHtSZXNvdXJjZX0KLSAqLwotZnVuY3Rpb24gV2ViR0xQcm9ncmFtUmVzb3Vy
Y2Uod3JhcHBlZE9iamVjdCkKLXsKLSAgICBSZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmpl
Y3QpOwotfQotCi1XZWJHTFByb2dyYW1SZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0g
ICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKLSAgICAgKiBAcGFy
YW0ge0NhY2hlfSBjYWNoZQotICAgICAqLwotICAgIF9wb3B1bGF0ZVJlcGxheWFibGVEYXRhOiBm
dW5jdGlvbihkYXRhLCBjYWNoZSkKLSAgICB7Ci0gICAgICAgIHZhciBnbFJlc291cmNlID0gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMpOwotICAgICAgICB2YXIg
Z2wgPSBnbFJlc291cmNlLndyYXBwZWRPYmplY3QoKTsKLSAgICAgICAgdmFyIHByb2dyYW0gPSB0
aGlzLndyYXBwZWRPYmplY3QoKTsKLQotICAgICAgICB2YXIgb3JpZ2luYWxFcnJvcnMgPSBnbFJl
c291cmNlLmdldEFsbEVycm9ycygpOwotCi0gICAgICAgIHZhciB1bmlmb3JtcyA9IFtdOwotICAg
ICAgICB2YXIgdW5pZm9ybXNDb3VudCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwg
Z2wuQUNUSVZFX1VOSUZPUk1TKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3Jt
c0NvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBhY3RpdmVJbmZvID0gZ2wuZ2V0QWN0aXZl
VW5pZm9ybShwcm9ncmFtLCBpKTsKLSAgICAgICAgICAgIGlmICghYWN0aXZlSW5mbykKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZhciB1bmlmb3JtTG9jYXRpb24gPSBn
bC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgYWN0aXZlSW5mby5uYW1lKTsKLSAgICAgICAg
ICAgIGlmICghdW5pZm9ybUxvY2F0aW9uKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgdmFyIHZhbHVlID0gZ2wuZ2V0VW5pZm9ybShwcm9ncmFtLCB1bmlmb3JtTG9jYXRp
b24pOwotICAgICAgICAgICAgdW5pZm9ybXMucHVzaCh7Ci0gICAgICAgICAgICAgICAgbmFtZTog
YWN0aXZlSW5mby5uYW1lLAotICAgICAgICAgICAgICAgIHR5cGU6IGFjdGl2ZUluZm8udHlwZSwK
LSAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9
Ci0gICAgICAgIGRhdGEudW5pZm9ybXMgPSB1bmlmb3JtczsKLQotICAgICAgICBnbFJlc291cmNl
LnJlc3RvcmVFcnJvcnMob3JpZ2luYWxFcnJvcnMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAqIEBwYXJhbSB7
Q2FjaGV9IGNhY2hlCi0gICAgICovCi0gICAgX2RvUmVwbGF5Q2FsbHM6IGZ1bmN0aW9uKGRhdGEs
IGNhY2hlKQotICAgIHsKLSAgICAgICAgUmVzb3VyY2UucHJvdG90eXBlLl9kb1JlcGxheUNhbGxz
LmNhbGwodGhpcywgZGF0YSwgY2FjaGUpOwotICAgICAgICB2YXIgZ2wgPSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRSZXNvdXJjZS5mb3JPYmplY3QodGhpcykud3JhcHBlZE9iamVjdCgpOwotICAgICAg
ICB2YXIgcHJvZ3JhbSA9IHRoaXMud3JhcHBlZE9iamVjdCgpOwotCi0gICAgICAgIHZhciBvcmln
aW5hbFByb2dyYW0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuQ1VSUkVOVF9QUk9HUkFNKTsKLSAgICAg
ICAgdmFyIGN1cnJlbnRQcm9ncmFtID0gb3JpZ2luYWxQcm9ncmFtOwotICAgICAgICAKLSAgICAg
ICAgZGF0YS51bmlmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uKHVuaWZvcm0pIHsKLSAgICAgICAgICAg
IHZhciB1bmlmb3JtTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5p
Zm9ybS5uYW1lKTsKLSAgICAgICAgICAgIGlmICghdW5pZm9ybUxvY2F0aW9uKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChjdXJyZW50UHJvZ3JhbSAhPT0gcHJvZ3Jh
bSkgewotICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKLSAgICAgICAg
ICAgICAgICBnbC51c2VQcm9ncmFtKHByb2dyYW0pOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgdmFyIG1ldGhvZE5hbWUgPSB0aGlzLl91bmlmb3JtTWV0aG9kTmFtZUJ5VHlwZShnbCwgdW5p
Zm9ybS50eXBlKTsKLSAgICAgICAgICAgIGlmIChtZXRob2ROYW1lLmluZGV4T2YoIk1hdHJpeCIp
ID09PSAtMSkKLSAgICAgICAgICAgICAgICBnbFttZXRob2ROYW1lXS5jYWxsKGdsLCB1bmlmb3Jt
TG9jYXRpb24sIHVuaWZvcm0udmFsdWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGdsW21ldGhvZE5hbWVdLmNhbGwoZ2wsIHVuaWZvcm1Mb2NhdGlvbiwgZmFsc2UsIHVuaWZv
cm0udmFsdWUpOwotICAgICAgICB9LmJpbmQodGhpcykpOwotCi0gICAgICAgIGlmIChjdXJyZW50
UHJvZ3JhbSAhPT0gb3JpZ2luYWxQcm9ncmFtKQotICAgICAgICAgICAgZ2wudXNlUHJvZ3JhbShv
cmlnaW5hbFByb2dyYW0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkdM
UmVuZGVyaW5nQ29udGV4dH0gZ2wKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdHlwZQotICAgICAq
IEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBfdW5pZm9ybU1ldGhvZE5hbWVCeVR5cGU6
IGZ1bmN0aW9uKGdsLCB0eXBlKQotICAgIHsKLSAgICAgICAgdmFyIHVuaWZvcm1NZXRob2ROYW1l
cyA9IFdlYkdMUHJvZ3JhbVJlc291cmNlLl91bmlmb3JtTWV0aG9kTmFtZXM7Ci0gICAgICAgIGlm
ICghdW5pZm9ybU1ldGhvZE5hbWVzKSB7Ci0gICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXMg
PSB7fTsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF0gPSAidW5pZm9y
bTFmIjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9WRUMyXSA9ICJ1
bmlmb3JtMmZ2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9WRUMz
XSA9ICJ1bmlmb3JtM2Z2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9B
VF9WRUM0XSA9ICJ1bmlmb3JtNGZ2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tn
bC5JTlRdID0gInVuaWZvcm0xaSI7Ci0gICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wu
Qk9PTF0gPSAidW5pZm9ybTFpIjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5T
QU1QTEVSXzJEXSA9ICJ1bmlmb3JtMWkiOwotICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVz
W2dsLlNBTVBMRVJfQ1VCRV0gPSAidW5pZm9ybTFpIjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRo
b2ROYW1lc1tnbC5JTlRfVkVDMl0gPSAidW5pZm9ybTJpdiI7Ci0gICAgICAgICAgICB1bmlmb3Jt
TWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUMyXSA9ICJ1bmlmb3JtMml2IjsKLSAgICAgICAgICAgIHVu
aWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDM10gPSAidW5pZm9ybTNpdiI7Ci0gICAgICAgICAg
ICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUMzXSA9ICJ1bmlmb3JtM2l2IjsKLSAgICAg
ICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDNF0gPSAidW5pZm9ybTRpdiI7Ci0g
ICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUM0XSA9ICJ1bmlmb3JtNGl2
IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9NQVQyXSA9ICJ1bmlm
b3JtTWF0cml4MmZ2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9N
QVQzXSA9ICJ1bmlmb3JtTWF0cml4M2Z2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1l
c1tnbC5GTE9BVF9NQVQ0XSA9ICJ1bmlmb3JtTWF0cml4NGZ2IjsKLSAgICAgICAgICAgIFdlYkdM
UHJvZ3JhbVJlc291cmNlLl91bmlmb3JtTWV0aG9kTmFtZXMgPSB1bmlmb3JtTWV0aG9kTmFtZXM7
Ci0gICAgICAgIH0KLSAgICAgICAgY29uc29sZS5hc3NlcnQodW5pZm9ybU1ldGhvZE5hbWVzW3R5
cGVdLCAiVW5rbm93biB1bmlmb3JtIHR5cGUgIiArIHR5cGUpOwotICAgICAgICByZXR1cm4gdW5p
Zm9ybU1ldGhvZE5hbWVzW3R5cGVdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJp
ZGUKLSAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKLSAgICAgKi8KLSAgICBwdXNoQ2FsbDogZnVu
Y3Rpb24oY2FsbCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNh
bGxzIHRoYXQgbm8gbG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgotICAg
ICAgICAvLyBGSVhNRTogaGFuZGxlIG11bHRpcGxlIGF0dGFjaFNoYWRlciAmJiBkZXRhY2hTaGFk
ZXIuCi0gICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwp
OwotICAgIH0KLX0KLQotV2ViR0xQcm9ncmFtUmVzb3VyY2UucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFJlc291cmNlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRz
IHtSZXNvdXJjZX0KLSAqLwotZnVuY3Rpb24gV2ViR0xTaGFkZXJSZXNvdXJjZSh3cmFwcGVkT2Jq
ZWN0KQotewotICAgIFJlc291cmNlLmNhbGwodGhpcywgd3JhcHBlZE9iamVjdCk7Ci19Ci0KLVdl
YkdMU2hhZGVyUmVzb3VyY2UucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlk
ZQotICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAotICAgICAqLwotICAgIHB1c2hDYWxsOiBmdW5j
dGlvbihjYWxsKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IHJlbW92ZSBhbnkgb2xkZXIgY2Fs
bHMgdGhhdCBubyBsb25nZXIgY29udHJpYnV0ZSB0byB0aGUgcmVzb3VyY2Ugc3RhdGUuCi0gICAg
ICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGlwbGUgc2hhZGVyU291cmNlIGNhbGxzLgotICAgICAg
ICBSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwuY2FsbCh0aGlzLCBjYWxsKTsKLSAgICB9Ci19
Ci0KLVdlYkdMU2hhZGVyUmVzb3VyY2UucHJvdG90eXBlLl9fcHJvdG9fXyA9IFJlc291cmNlLnBy
b3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJHTEJvdW5k
UmVzb3VyY2V9Ci0gKi8KLWZ1bmN0aW9uIFdlYkdMQnVmZmVyUmVzb3VyY2Uod3JhcHBlZE9iamVj
dCkKLXsKLSAgICBXZWJHTEJvdW5kUmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsK
LX0KLQotV2ViR0xCdWZmZXJSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICog
QG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCi0gICAgICovCi0gICAgcHVzaENh
bGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBv
bGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0
ZS4KLSAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIG1lbW9yeSBmb3IgYnVmZmVyU3ViRGF0YS4K
LSAgICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbC5jYWxsKHRoaXMs
IGNhbGwpOwotICAgIH0KLX0KLQotV2ViR0xCdWZmZXJSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtXZWJHTEJvdW5kUmVzb3VyY2V9Ci0gKi8KLWZ1bmN0aW9uIFdlYkdM
RnJhbWVidWZmZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQotewotICAgIFdlYkdMQm91bmRSZXNv
dXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOwotfQotCi1XZWJHTEZyYW1lYnVmZmVyUmVz
b3VyY2UucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBw
YXJhbSB7Q2FsbH0gY2FsbAotICAgICAqLwotICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxsKQot
ICAgIHsKLSAgICAgICAgLy8gRklYTUU6IHJlbW92ZSBhbnkgb2xkZXIgY2FsbHMgdGhhdCBubyBs
b25nZXIgY29udHJpYnV0ZSB0byB0aGUgcmVzb3VyY2Ugc3RhdGUuCi0gICAgICAgIFdlYkdMQm91
bmRSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwuY2FsbCh0aGlzLCBjYWxsKTsKLSAgICB9Ci19
Ci0KLVdlYkdMRnJhbWVidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViR0xC
b3VuZFJlc291cmNlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRl
bmRzIHtXZWJHTEJvdW5kUmVzb3VyY2V9Ci0gKi8KLWZ1bmN0aW9uIFdlYkdMUmVuZGVyYnVmZmVy
UmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKLXsKLSAgICBXZWJHTEJvdW5kUmVzb3VyY2UuY2FsbCh0
aGlzLCB3cmFwcGVkT2JqZWN0KTsKLX0KLQotV2ViR0xSZW5kZXJidWZmZXJSZXNvdXJjZS5wcm90
b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtDYWxs
fSBjYWxsCi0gICAgICovCi0gICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAg
ICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250
cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KLSAgICAgICAgV2ViR0xCb3VuZFJlc291cmNl
LnByb3RvdHlwZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOwotICAgIH0KLX0KLQotV2ViR0xS
ZW5kZXJidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViR0xCb3VuZFJlc291
cmNlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtSZXNv
dXJjZX0KLSAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbENvbnRleHQKLSAqIEBw
YXJhbSB7RnVuY3Rpb259IHJlcGxheUNvbnRleHRDYWxsYmFjawotICovCi1mdW5jdGlvbiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZShnbENvbnRleHQsIHJlcGxheUNvbnRleHRDYWxsYmFj
aykKLXsKLSAgICBSZXNvdXJjZS5jYWxsKHRoaXMsIGdsQ29udGV4dCk7Ci0gICAgdGhpcy5fcmVw
bGF5Q29udGV4dENhbGxiYWNrID0gcmVwbGF5Q29udGV4dENhbGxiYWNrOwotICAgIC8qKiBAdHlw
ZSB7T2JqZWN0LjxudW1iZXIsIGJvb2xlYW4+fSAqLwotICAgIHRoaXMuX2N1c3RvbUVycm9ycyA9
IG51bGw7Ci19Ci0KLS8qKgotICogQGNvbnN0Ci0gKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59Ci0g
Ki8KLVdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLkdMQ2FwYWJpbGl0aWVzID0gWwotICAg
ICJCTEVORCIsCi0gICAgIkNVTExfRkFDRSIsCi0gICAgIkRFUFRIX1RFU1QiLAotICAgICJESVRI
RVIiLAotICAgICJQT0xZR09OX09GRlNFVF9GSUxMIiwKLSAgICAiU0FNUExFX0FMUEhBX1RPX0NP
VkVSQUdFIiwKLSAgICAiU0FNUExFX0NPVkVSQUdFIiwKLSAgICAiU0NJU1NPUl9URVNUIiwKLSAg
ICAiU1RFTkNJTF9URVNUIgotXTsKLQotLyoqCi0gKiBAY29uc3QKLSAqIEB0eXBlIHtBcnJheS48
c3RyaW5nPn0KLSAqLwotV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuUGl4ZWxTdG9yZVBh
cmFtZXRlcnMgPSBbCi0gICAgIlBBQ0tfQUxJR05NRU5UIiwKLSAgICAiVU5QQUNLX0FMSUdOTUVO
VCIsCi0gICAgIlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiLAotICAgICJVTlBB
Q0tfRkxJUF9ZX1dFQkdMIiwKLSAgICAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIgot
XTsKLQotLyoqCi0gKiBAY29uc3QKLSAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn0KLSAqLwotV2Vi
R0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuU3RhdGVQYXJhbWV0ZXJzID0gWwotICAgICJBQ1RJ
VkVfVEVYVFVSRSIsCi0gICAgIkFSUkFZX0JVRkZFUl9CSU5ESU5HIiwKLSAgICAiQkxFTkRfQ09M
T1IiLAotICAgICJCTEVORF9EU1RfQUxQSEEiLAotICAgICJCTEVORF9EU1RfUkdCIiwKLSAgICAi
QkxFTkRfRVFVQVRJT05fQUxQSEEiLAotICAgICJCTEVORF9FUVVBVElPTl9SR0IiLAotICAgICJC
TEVORF9TUkNfQUxQSEEiLAotICAgICJCTEVORF9TUkNfUkdCIiwKLSAgICAiQ09MT1JfQ0xFQVJf
VkFMVUUiLAotICAgICJDT0xPUl9XUklURU1BU0siLAotICAgICJDVUxMX0ZBQ0VfTU9ERSIsCi0g
ICAgIkNVUlJFTlRfUFJPR1JBTSIsCi0gICAgIkRFUFRIX0NMRUFSX1ZBTFVFIiwKLSAgICAiREVQ
VEhfRlVOQyIsCi0gICAgIkRFUFRIX1JBTkdFIiwKLSAgICAiREVQVEhfV1JJVEVNQVNLIiwKLSAg
ICAiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyIsCi0gICAgIkZSQU1FQlVGRkVSX0JJTkRJ
TkciLAotICAgICJGUk9OVF9GQUNFIiwKLSAgICAiR0VORVJBVEVfTUlQTUFQX0hJTlQiLAotICAg
ICJMSU5FX1dJRFRIIiwKLSAgICAiUEFDS19BTElHTk1FTlQiLAotICAgICJQT0xZR09OX09GRlNF
VF9GQUNUT1IiLAotICAgICJQT0xZR09OX09GRlNFVF9VTklUUyIsCi0gICAgIlJFTkRFUkJVRkZF
Ul9CSU5ESU5HIiwKLSAgICAiU0FNUExFX0NPVkVSQUdFX0lOVkVSVCIsCi0gICAgIlNBTVBMRV9D
T1ZFUkFHRV9WQUxVRSIsCi0gICAgIlNDSVNTT1JfQk9YIiwKLSAgICAiU1RFTkNJTF9CQUNLX0ZB
SUwiLAotICAgICJTVEVOQ0lMX0JBQ0tfRlVOQyIsCi0gICAgIlNURU5DSUxfQkFDS19QQVNTX0RF
UFRIX0ZBSUwiLAotICAgICJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTIiwKLSAgICAiU1RF
TkNJTF9CQUNLX1JFRiIsCi0gICAgIlNURU5DSUxfQkFDS19WQUxVRV9NQVNLIiwKLSAgICAiU1RF
TkNJTF9CQUNLX1dSSVRFTUFTSyIsCi0gICAgIlNURU5DSUxfQ0xFQVJfVkFMVUUiLAotICAgICJT
VEVOQ0lMX0ZBSUwiLAotICAgICJTVEVOQ0lMX0ZVTkMiLAotICAgICJTVEVOQ0lMX1BBU1NfREVQ
VEhfRkFJTCIsCi0gICAgIlNURU5DSUxfUEFTU19ERVBUSF9QQVNTIiwKLSAgICAiU1RFTkNJTF9S
RUYiLAotICAgICJTVEVOQ0lMX1ZBTFVFX01BU0siLAotICAgICJTVEVOQ0lMX1dSSVRFTUFTSyIs
Ci0gICAgIlVOUEFDS19BTElHTk1FTlQiLAotICAgICJVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJT
SU9OX1dFQkdMIiwKLSAgICAiVU5QQUNLX0ZMSVBfWV9XRUJHTCIsCi0gICAgIlVOUEFDS19QUkVN
VUxUSVBMWV9BTFBIQV9XRUJHTCIsCi0gICAgIlZJRVdQT1JUIgotXTsKLQotLyoqCi0gKiBAcGFy
YW0geyp9IG9iagotICogQHJldHVybiB7V2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2V9Ci0g
Ki8KLVdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9iamVjdCA9IGZ1bmN0aW9uKG9i
aikKLXsKLSAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qob2JqKTsKLSAgICBp
ZiAoIXJlc291cmNlIHx8IHJlc291cmNlIGluc3RhbmNlb2YgV2ViR0xSZW5kZXJpbmdDb250ZXh0
UmVzb3VyY2UpCi0gICAgICAgIHJldHVybiByZXNvdXJjZTsKLSAgICB2YXIgY2FsbCA9IHJlc291
cmNlLmNhbGxzKCk7Ci0gICAgaWYgKCFjYWxsIHx8ICFjYWxsLmxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgcmVzb3VyY2UgPSBjYWxsWzBdLnJlc291cmNlKCk7Ci0gICAgcmV0dXJu
IChyZXNvdXJjZSBpbnN0YW5jZW9mIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlKSA/IHJl
c291cmNlIDogbnVsbDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UucHJvdG90
eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fQotICAgICAq
LwotICAgIGdldEFsbEVycm9yczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGVycm9y
cyA9IFtdOwotICAgICAgICB2YXIgZ2wgPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKLSAgICAgICAg
aWYgKGdsKSB7Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgIHZh
ciBlcnJvciA9IGdsLmdldEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVycm9yID09PSBn
bC5OT19FUlJPUikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
dGhpcy5jbGVhckVycm9yKGVycm9yKTsKLSAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnJv
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMuX2N1c3RvbUVy
cm9ycykgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuX2N1c3RvbUVycm9ycykg
ewotICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IE51bWJlcihrZXkpOwotICAgICAgICAgICAg
ICAgIGVycm9ycy5wdXNoKGVycm9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlbGV0
ZSB0aGlzLl9jdXN0b21FcnJvcnM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVycm9yczsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gZXJyb3Jz
Ci0gICAgICovCi0gICAgcmVzdG9yZUVycm9yczogZnVuY3Rpb24oZXJyb3JzKQotICAgIHsKLSAg
ICAgICAgdmFyIGdsID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7Ci0gICAgICAgIGlmIChnbCkgewot
ICAgICAgICAgICAgdmFyIHdhc0Vycm9yID0gZmFsc2U7Ci0gICAgICAgICAgICB3aGlsZSAoZ2wu
Z2V0RXJyb3IoKSAhPT0gZ2wuTk9fRVJST1IpCi0gICAgICAgICAgICAgICAgd2FzRXJyb3IgPSB0
cnVlOwotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIXdhc0Vycm9yLCAiRXJyb3Iocykgd2hp
bGUgY2FwdHVyaW5nIGN1cnJlbnQgV2ViR0wgc3RhdGUuIik7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCFlcnJvcnMubGVuZ3RoKQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9y
czsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9jdXN0b21FcnJvcnMgPSB7fTsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gZXJyb3JzLmxlbmd0aDsgaSA8IG47ICsr
aSkKLSAgICAgICAgICAgICAgICB0aGlzLl9jdXN0b21FcnJvcnNbZXJyb3JzW2ldXSA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGVy
cm9yCi0gICAgICovCi0gICAgY2xlYXJFcnJvcjogZnVuY3Rpb24oZXJyb3IpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5fY3VzdG9tRXJyb3JzKQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1
c3RvbUVycm9yc1tlcnJvcl07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251
bWJlcn0KLSAgICAgKi8KLSAgICBuZXh0RXJyb3I6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9jdXN0b21FcnJvcnMpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0
aGlzLl9jdXN0b21FcnJvcnMpIHsKLSAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBOdW1iZXIo
a2V5KTsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY3VzdG9tRXJyb3JzW2Vycm9yXTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9yczsKLSAgICAgICAgdmFyIGdsID0gdGhp
cy53cmFwcGVkT2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiBnbCA/IGdsLk5PX0VSUk9SIDogMDsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtPYmpl
Y3R9IGRhdGEKLSAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQotICAgICAqLwotICAgIF9wb3B1
bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKLSAgICB7Ci0gICAgICAg
IHZhciBnbCA9IHRoaXMud3JhcHBlZE9iamVjdCgpOwotICAgICAgICBkYXRhLnJlcGxheUNvbnRl
eHRDYWxsYmFjayA9IHRoaXMuX3JlcGxheUNvbnRleHRDYWxsYmFjazsKLQotICAgICAgICB2YXIg
b3JpZ2luYWxFcnJvcnMgPSB0aGlzLmdldEFsbEVycm9ycygpOwotCi0gICAgICAgIC8vIFRha2Ug
YSBmdWxsIEdMIHN0YXRlIHNuYXBzaG90LgotICAgICAgICB2YXIgZ2xTdGF0ZSA9IHt9OwotICAg
ICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5HTENhcGFiaWxpdGllcy5mb3JFYWNo
KGZ1bmN0aW9uKHBhcmFtZXRlcikgewotICAgICAgICAgICAgZ2xTdGF0ZVtwYXJhbWV0ZXJdID0g
Z2wuaXNFbmFibGVkKGdsW3BhcmFtZXRlcl0pOwotICAgICAgICB9KTsKLSAgICAgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuU3RhdGVQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24o
cGFyYW1ldGVyKSB7Ci0gICAgICAgICAgICBnbFN0YXRlW3BhcmFtZXRlcl0gPSBSZXNvdXJjZS50
b1JlcGxheWFibGUoZ2wuZ2V0UGFyYW1ldGVyKGdsW3BhcmFtZXRlcl0pLCBjYWNoZSk7Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIC8vIFZFUlRFWF9BVFRSSUJfQVJSQVlTCi0gICAgICAgIHZhciBt
YXhWZXJ0ZXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7
Ci0gICAgICAgIHZhciB2ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzID0gWyJWRVJURVhfQVRUUklCX0FS
UkFZX0JVRkZFUl9CSU5ESU5HIiwgIlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCIsICJWRVJU
RVhfQVRUUklCX0FSUkFZX1NJWkUiLCAiVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUiLCAiVkVS
VEVYX0FUVFJJQl9BUlJBWV9UWVBFIiwgIlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCIs
ICJDVVJSRU5UX1ZFUlRFWF9BVFRSSUIiXTsKLSAgICAgICAgdmFyIHZlcnRleEF0dHJpYlN0YXRl
cyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFZlcnRleEF0dHJpYnM7ICsr
aSkgewotICAgICAgICAgICAgdmFyIHN0YXRlID0ge307Ci0gICAgICAgICAgICB2ZXJ0ZXhBdHRy
aWJQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24oYXR0cmliUGFyYW1ldGVyKSB7Ci0gICAgICAg
ICAgICAgICAgc3RhdGVbYXR0cmliUGFyYW1ldGVyXSA9IFJlc291cmNlLnRvUmVwbGF5YWJsZShn
bC5nZXRWZXJ0ZXhBdHRyaWIoaSwgZ2xbYXR0cmliUGFyYW1ldGVyXSksIGNhY2hlKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVS
ID0gZ2wuZ2V0VmVydGV4QXR0cmliT2Zmc2V0KGksIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9J
TlRFUik7Ci0gICAgICAgICAgICB2ZXJ0ZXhBdHRyaWJTdGF0ZXMucHVzaChzdGF0ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZ2xTdGF0ZS52ZXJ0ZXhBdHRyaWJTdGF0ZXMgPSB2ZXJ0ZXhBdHRyaWJT
dGF0ZXM7Ci0KLSAgICAgICAgLy8gVEVYVFVSRVMKLSAgICAgICAgdmFyIGN1cnJlbnRUZXh0dXJl
QmluZGluZyA9IGdsLmdldFBhcmFtZXRlcihnbC5BQ1RJVkVfVEVYVFVSRSk7Ci0gICAgICAgIHZh
ciBtYXhUZXh0dXJlSW1hZ2VVbml0cyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyk7Ci0gICAgICAgIHZhciB0ZXh0dXJlQmluZGluZ3MgPSBbXTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlSW1hZ2VVbml0czsgKytpKSB7Ci0gICAgICAg
ICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgaSk7Ci0gICAgICAgICAgICB2YXIg
c3RhdGUgPSB7Ci0gICAgICAgICAgICAgICAgVEVYVFVSRV8yRDogUmVzb3VyY2UudG9SZXBsYXlh
YmxlKGdsLmdldFBhcmFtZXRlcihnbC5URVhUVVJFX0JJTkRJTkdfMkQpLCBjYWNoZSksCi0gICAg
ICAgICAgICAgICAgVEVYVFVSRV9DVUJFX01BUDogUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdl
dFBhcmFtZXRlcihnbC5URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVApLCBjYWNoZSkKLSAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICB0ZXh0dXJlQmluZGluZ3MucHVzaChzdGF0ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZ2xTdGF0ZS50ZXh0dXJlQmluZGluZ3MgPSB0ZXh0dXJlQmluZGluZ3M7Ci0g
ICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoY3VycmVudFRleHR1cmVCaW5kaW5nKTsKLQotICAgICAg
ICBkYXRhLmdsU3RhdGUgPSBnbFN0YXRlOwotCi0gICAgICAgIHRoaXMucmVzdG9yZUVycm9ycyhv
cmlnaW5hbEVycm9ycyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCi0gICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAg
ICAgKi8KLSAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCi0gICAgewot
ICAgICAgICB0aGlzLl9yZXBsYXlDb250ZXh0Q2FsbGJhY2sgPSBkYXRhLnJlcGxheUNvbnRleHRD
YWxsYmFjazsKLSAgICAgICAgdGhpcy5fY3VzdG9tRXJyb3JzID0gbnVsbDsKLQotICAgICAgICB2
YXIgZ2wgPSBSZXNvdXJjZS53cmFwcGVkT2JqZWN0KHRoaXMuX3JlcGxheUNvbnRleHRDYWxsYmFj
aygpKTsKLSAgICAgICAgdGhpcy5zZXRXcmFwcGVkT2JqZWN0KGdsKTsKLQotICAgICAgICB2YXIg
Z2xTdGF0ZSA9IGRhdGEuZ2xTdGF0ZTsKLSAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZS
QU1FQlVGRkVSLCBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KGdsU3RhdGUuRlJBTUVCVUZGRVJf
QklORElORywgY2FjaGUpKTsKLSAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJC
VUZGRVIsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZ2xTdGF0ZS5SRU5ERVJCVUZGRVJfQklO
RElORywgY2FjaGUpKTsKLQotICAgICAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBzZXJ2ZXItc2lk
ZSBHTCBjYXBhYmlsaXRpZXMuCi0gICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNl
LkdMQ2FwYWJpbGl0aWVzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7Ci0gICAgICAgICAg
ICBjb25zb2xlLmFzc2VydChwYXJhbWV0ZXIgaW4gZ2xTdGF0ZSk7Ci0gICAgICAgICAgICBpZiAo
Z2xTdGF0ZVtwYXJhbWV0ZXJdKQotICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbFtwYXJhbWV0
ZXJdKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnbC5kaXNhYmxlKGdsW3Bh
cmFtZXRlcl0pOwotICAgICAgICB9KTsKLQotICAgICAgICBnbC5ibGVuZENvbG9yKGdsU3RhdGUu
QkxFTkRfQ09MT1JbMF0sIGdsU3RhdGUuQkxFTkRfQ09MT1JbMV0sIGdsU3RhdGUuQkxFTkRfQ09M
T1JbMl0sIGdsU3RhdGUuQkxFTkRfQ09MT1JbM10pOwotICAgICAgICBnbC5ibGVuZEVxdWF0aW9u
U2VwYXJhdGUoZ2xTdGF0ZS5CTEVORF9FUVVBVElPTl9SR0IsIGdsU3RhdGUuQkxFTkRfRVFVQVRJ
T05fQUxQSEEpOwotICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbFN0YXRlLkJMRU5EX1NS
Q19SR0IsIGdsU3RhdGUuQkxFTkRfRFNUX1JHQiwgZ2xTdGF0ZS5CTEVORF9TUkNfQUxQSEEsIGds
U3RhdGUuQkxFTkRfRFNUX0FMUEhBKTsKLSAgICAgICAgZ2wuY2xlYXJDb2xvcihnbFN0YXRlLkNP
TE9SX0NMRUFSX1ZBTFVFWzBdLCBnbFN0YXRlLkNPTE9SX0NMRUFSX1ZBTFVFWzFdLCBnbFN0YXRl
LkNPTE9SX0NMRUFSX1ZBTFVFWzJdLCBnbFN0YXRlLkNPTE9SX0NMRUFSX1ZBTFVFWzNdKTsKLSAg
ICAgICAgZ2wuY2xlYXJEZXB0aChnbFN0YXRlLkRFUFRIX0NMRUFSX1ZBTFVFKTsKLSAgICAgICAg
Z2wuY2xlYXJTdGVuY2lsKGdsU3RhdGUuU1RFTkNJTF9DTEVBUl9WQUxVRSk7Ci0gICAgICAgIGds
LmNvbG9yTWFzayhnbFN0YXRlLkNPTE9SX1dSSVRFTUFTS1swXSwgZ2xTdGF0ZS5DT0xPUl9XUklU
RU1BU0tbMV0sIGdsU3RhdGUuQ09MT1JfV1JJVEVNQVNLWzJdLCBnbFN0YXRlLkNPTE9SX1dSSVRF
TUFTS1szXSk7Ci0gICAgICAgIGdsLmN1bGxGYWNlKGdsU3RhdGUuQ1VMTF9GQUNFX01PREUpOwot
ICAgICAgICBnbC5kZXB0aEZ1bmMoZ2xTdGF0ZS5ERVBUSF9GVU5DKTsKLSAgICAgICAgZ2wuZGVw
dGhNYXNrKGdsU3RhdGUuREVQVEhfV1JJVEVNQVNLKTsKLSAgICAgICAgZ2wuZGVwdGhSYW5nZShn
bFN0YXRlLkRFUFRIX1JBTkdFWzBdLCBnbFN0YXRlLkRFUFRIX1JBTkdFWzFdKTsKLSAgICAgICAg
Z2wuZnJvbnRGYWNlKGdsU3RhdGUuRlJPTlRfRkFDRSk7Ci0gICAgICAgIGdsLmhpbnQoZ2wuR0VO
RVJBVEVfTUlQTUFQX0hJTlQsIGdsU3RhdGUuR0VORVJBVEVfTUlQTUFQX0hJTlQpOwotICAgICAg
ICBnbC5saW5lV2lkdGgoZ2xTdGF0ZS5MSU5FX1dJRFRIKTsKLQotICAgICAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9u
KHBhcmFtZXRlcikgewotICAgICAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2xbcGFyYW1ldGVyXSwg
Z2xTdGF0ZVtwYXJhbWV0ZXJdKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZ2wucG9seWdvbk9m
ZnNldChnbFN0YXRlLlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiwgZ2xTdGF0ZS5QT0xZR09OX09GRlNF
VF9VTklUUyk7Ci0gICAgICAgIGdsLnNhbXBsZUNvdmVyYWdlKGdsU3RhdGUuU0FNUExFX0NPVkVS
QUdFX1ZBTFVFLCBnbFN0YXRlLlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQpOwotICAgICAgICBnbC5z
dGVuY2lsRnVuY1NlcGFyYXRlKGdsLkZST05ULCBnbFN0YXRlLlNURU5DSUxfRlVOQywgZ2xTdGF0
ZS5TVEVOQ0lMX1JFRiwgZ2xTdGF0ZS5TVEVOQ0lMX1ZBTFVFX01BU0spOwotICAgICAgICBnbC5z
dGVuY2lsRnVuY1NlcGFyYXRlKGdsLkJBQ0ssIGdsU3RhdGUuU1RFTkNJTF9CQUNLX0ZVTkMsIGds
U3RhdGUuU1RFTkNJTF9CQUNLX1JFRiwgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyk7
Ci0gICAgICAgIGdsLnN0ZW5jaWxPcFNlcGFyYXRlKGdsLkZST05ULCBnbFN0YXRlLlNURU5DSUxf
RkFJTCwgZ2xTdGF0ZS5TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCwgZ2xTdGF0ZS5TVEVOQ0lMX1BB
U1NfREVQVEhfUEFTUyk7Ci0gICAgICAgIGdsLnN0ZW5jaWxPcFNlcGFyYXRlKGdsLkJBQ0ssIGds
U3RhdGUuU1RFTkNJTF9CQUNLX0ZBSUwsIGdsU3RhdGUuU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhf
RkFJTCwgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTKTsKLSAgICAgICAgZ2wu
c3RlbmNpbE1hc2tTZXBhcmF0ZShnbC5GUk9OVCwgZ2xTdGF0ZS5TVEVOQ0lMX1dSSVRFTUFTSyk7
Ci0gICAgICAgIGdsLnN0ZW5jaWxNYXNrU2VwYXJhdGUoZ2wuQkFDSywgZ2xTdGF0ZS5TVEVOQ0lM
X0JBQ0tfV1JJVEVNQVNLKTsKLQotICAgICAgICBnbC5zY2lzc29yKGdsU3RhdGUuU0NJU1NPUl9C
T1hbMF0sIGdsU3RhdGUuU0NJU1NPUl9CT1hbMV0sIGdsU3RhdGUuU0NJU1NPUl9CT1hbMl0sIGds
U3RhdGUuU0NJU1NPUl9CT1hbM10pOwotICAgICAgICBnbC52aWV3cG9ydChnbFN0YXRlLlZJRVdQ
T1JUWzBdLCBnbFN0YXRlLlZJRVdQT1JUWzFdLCBnbFN0YXRlLlZJRVdQT1JUWzJdLCBnbFN0YXRl
LlZJRVdQT1JUWzNdKTsKLQotICAgICAgICBnbC51c2VQcm9ncmFtKFJlcGxheWFibGVSZXNvdXJj
ZS5yZXBsYXkoZ2xTdGF0ZS5DVVJSRU5UX1BST0dSQU0sIGNhY2hlKSk7Ci0KLSAgICAgICAgLy8g
VkVSVEVYX0FUVFJJQl9BUlJBWVMKLSAgICAgICAgdmFyIG1heFZlcnRleEF0dHJpYnMgPSBnbC5n
ZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBzdGF0ZSA9
IGdsU3RhdGUudmVydGV4QXR0cmliU3RhdGVzW2ldIHx8IHt9OwotICAgICAgICAgICAgaWYgKHN0
YXRlLlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCkKLSAgICAgICAgICAgICAgICBnbC5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUu
Q1VSUkVOVF9WRVJURVhfQVRUUklCKQotICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYjRm
dihpLCBzdGF0ZS5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpOwotICAgICAgICAgICAgdmFyIGJ1ZmZl
ciA9IFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9C
VUZGRVJfQklORElORywgY2FjaGUpOwotICAgICAgICAgICAgaWYgKGJ1ZmZlcikgewotICAgICAg
ICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpOwotICAgICAg
ICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoaSwgc3RhdGUuVkVSVEVYX0FUVFJJQl9B
UlJBWV9TSVpFLCBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX1RZUEUsIHN0YXRlLlZFUlRFWF9B
VFRSSUJfQVJSQVlfTk9STUFMSVpFRCwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUs
IHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIFJlcGxheWFibGVS
ZXNvdXJjZS5yZXBsYXkoZ2xTdGF0ZS5BUlJBWV9CVUZGRVJfQklORElORywgY2FjaGUpKTsKLSAg
ICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgUmVwbGF5YWJsZVJl
c291cmNlLnJlcGxheShnbFN0YXRlLkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcsIGNhY2hl
KSk7Ci0KLSAgICAgICAgLy8gVEVYVFVSRVMKLSAgICAgICAgdmFyIG1heFRleHR1cmVJbWFnZVVu
aXRzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlSW1hZ2VVbml0czsgKytpKSB7Ci0gICAg
ICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgaSk7Ci0gICAgICAgICAgICB2
YXIgc3RhdGUgPSBnbFN0YXRlLnRleHR1cmVCaW5kaW5nc1tpXSB8fCB7fTsKLSAgICAgICAgICAg
IGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXko
c3RhdGUuVEVYVFVSRV8yRCwgY2FjaGUpKTsKLSAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGds
LlRFWFRVUkVfQ1VCRV9NQVAsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUuVEVYVFVS
RV9DVUJFX01BUCwgY2FjaGUpKTsKLSAgICAgICAgfQotICAgICAgICBnbC5hY3RpdmVUZXh0dXJl
KGdsU3RhdGUuQUNUSVZFX1RFWFRVUkUpOwotCi0gICAgICAgIHJldHVybiBSZXNvdXJjZS5wcm90
b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBjYWNoZSk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJlcn0gdGFyZ2V0Ci0gICAgICogQHJl
dHVybiB7UmVzb3VyY2V9Ci0gICAgICovCi0gICAgY3VycmVudEJpbmRpbmc6IGZ1bmN0aW9uKHRh
cmdldCkKLSAgICB7Ci0gICAgICAgIHZhciByZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdCh0
YXJnZXQpOwotICAgICAgICBpZiAocmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm4gcmVzb3Vy
Y2U7Ci0gICAgICAgIHZhciBnbCA9IHRoaXMud3JhcHBlZE9iamVjdCgpOwotICAgICAgICB2YXIg
YmluZGluZ1BhcmFtZXRlcjsKLSAgICAgICAgdmFyIGJpbmRNZXRob2ROYW1lOwotICAgICAgICB2
YXIgYmluZE1ldGhvZFRhcmdldCA9IHRhcmdldDsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpIHsK
LSAgICAgICAgY2FzZSBnbC5BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICBiaW5kaW5nUGFyYW1l
dGVyID0gZ2wuQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAgICAgICAgICBiaW5kTWV0aG9kTmFt
ZSA9ICJiaW5kQnVmZmVyIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGdsLkVM
RU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgYmluZGluZ1BhcmFtZXRlciA9IGdsLkVM
RU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAgICAgICAgICBiaW5kTWV0aG9kTmFtZSA9
ICJiaW5kQnVmZmVyIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGdsLlRFWFRV
UkVfMkQ6Ci0gICAgICAgICAgICBiaW5kaW5nUGFyYW1ldGVyID0gZ2wuVEVYVFVSRV9CSU5ESU5H
XzJEOwotICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZFRleHR1cmUiOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAg
Y2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgIGNhc2UgZ2wuVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWToKLSAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6Ci0gICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAg
ICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgIGJpbmRp
bmdQYXJhbWV0ZXIgPSBnbC5URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA7Ci0gICAgICAgICAgICBi
aW5kTWV0aG9kVGFyZ2V0ID0gZ2wuVEVYVFVSRV9DVUJFX01BUDsKLSAgICAgICAgICAgIGJpbmRN
ZXRob2ROYW1lID0gImJpbmRUZXh0dXJlIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIGdsLkZSQU1FQlVGRkVSOgotICAgICAgICAgICAgYmluZGluZ1BhcmFtZXRlciA9IGdsLkZS
QU1FQlVGRkVSX0JJTkRJTkc7Ci0gICAgICAgICAgICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5kRnJh
bWVidWZmZXIiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZ2wuUkVOREVSQlVG
RkVSOgotICAgICAgICAgICAgYmluZGluZ1BhcmFtZXRlciA9IGdsLlJFTkRFUkJVRkZFUl9CSU5E
SU5HOwotICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZFJlbmRlcmJ1ZmZlciI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNvbnNvbGUu
ZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogdW5rbm93biBiaW5kaW5nIHRhcmdldCAiICsgdGFy
Z2V0KTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIHJlc291
cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KGdsLmdldFBhcmFtZXRlcihiaW5kaW5nUGFyYW1ldGVy
KSk7Ci0gICAgICAgIGlmIChyZXNvdXJjZSkKLSAgICAgICAgICAgIHJlc291cmNlLnB1c2hCaW5k
aW5nKGJpbmRNZXRob2RUYXJnZXQsIGJpbmRNZXRob2ROYW1lKTsKLSAgICAgICAgcmV0dXJuIHJl
c291cmNlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcmV0
dXJuIHtPYmplY3QuPHN0cmluZywgRnVuY3Rpb24+fQotICAgICAqLwotICAgIF9jdXN0b21XcmFw
RnVuY3Rpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgd3JhcEZ1bmN0aW9ucyA9
IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLl93cmFwRnVuY3Rpb25zOwotICAgICAgICBp
ZiAoIXdyYXBGdW5jdGlvbnMpIHsKLSAgICAgICAgICAgIHdyYXBGdW5jdGlvbnMgPSBPYmplY3Qu
Y3JlYXRlKG51bGwpOwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBtZXRob2ROYW1lCi0gICAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNv
dXJjZUNvbnN0cnVjdG9yCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZ1bmN0aW9uIGNy
ZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKG1ldGhvZE5hbWUsIHJlc291cmNlQ29uc3RydWN0b3Ip
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyoqIEB0aGlzIFJlc291cmNlLldyYXBG
dW5jdGlvbiAqLwotICAgICAgICAgICAgICAgIHdyYXBGdW5jdGlvbnNbbWV0aG9kTmFtZV0gPSBm
dW5jdGlvbigpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YXIgd3Jh
cHBlZE9iamVjdCA9IHRoaXMucmVzdWx0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghd3Jh
cHBlZE9iamVjdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIHJlc291cmNlID0gbmV3IHJlc291cmNlQ29uc3RydWN0b3Iod3JhcHBlZE9i
amVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpcy5fcmVzb3VyY2Uu
bWFuYWdlcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAobWFuYWdlcikKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1hbmFnZXIucmVnaXN0ZXJSZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVSZXN1bHQocmVzb3VyY2UucHJveHlPYmplY3QoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnB1c2hDYWxsKHRoaXMuY2FsbCgpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjcmVhdGVSZXNvdXJj
ZVdyYXBGdW5jdGlvbigiY3JlYXRlQnVmZmVyIiwgV2ViR0xCdWZmZXJSZXNvdXJjZSk7Ci0gICAg
ICAgICAgICBjcmVhdGVSZXNvdXJjZVdyYXBGdW5jdGlvbigiY3JlYXRlU2hhZGVyIiwgV2ViR0xT
aGFkZXJSZXNvdXJjZSk7Ci0gICAgICAgICAgICBjcmVhdGVSZXNvdXJjZVdyYXBGdW5jdGlvbigi
Y3JlYXRlUHJvZ3JhbSIsIFdlYkdMUHJvZ3JhbVJlc291cmNlKTsKLSAgICAgICAgICAgIGNyZWF0
ZVJlc291cmNlV3JhcEZ1bmN0aW9uKCJjcmVhdGVUZXh0dXJlIiwgV2ViR0xUZXh0dXJlUmVzb3Vy
Y2UpOwotICAgICAgICAgICAgY3JlYXRlUmVzb3VyY2VXcmFwRnVuY3Rpb24oImNyZWF0ZUZyYW1l
YnVmZmVyIiwgV2ViR0xGcmFtZWJ1ZmZlclJlc291cmNlKTsKLSAgICAgICAgICAgIGNyZWF0ZVJl
c291cmNlV3JhcEZ1bmN0aW9uKCJjcmVhdGVSZW5kZXJidWZmZXIiLCBXZWJHTFJlbmRlcmJ1ZmZl
clJlc291cmNlKTsKLSAgICAgICAgICAgIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKCJnZXRV
bmlmb3JtTG9jYXRpb24iLCBSZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUKLSAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgZnVuY3Rpb24gY3VzdG9tV3JhcEZ1bmN0aW9uKG1ldGhvZE5hbWUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgdmFyIGN1c3RvbVB1c2hDYWxsID0gInB1c2hDYWxsXyIgKyBt
ZXRob2ROYW1lOwotICAgICAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAqIEBwYXJh
bSB7T2JqZWN0fG51bWJlcn0gdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICogQHRoaXMgUmVzb3Vy
Y2UuV3JhcEZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgd3Jh
cEZ1bmN0aW9uc1ttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKHRhcmdldCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlLmN1
cnJlbnRCaW5kaW5nKHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcmVzb3VyY2Up
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChyZXNvdXJjZVtjdXN0b21QdXNoQ2FsbF0pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNv
dXJjZVtjdXN0b21QdXNoQ2FsbF0uY2FsbChyZXNvdXJjZSwgdGhpcy5jYWxsKCkpOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5wdXNo
Q2FsbCh0aGlzLmNhbGwoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJhdHRhY2hTaGFkZXIiKTsKLSAgICAgICAgICAg
IGN1c3RvbVdyYXBGdW5jdGlvbigiYmluZEF0dHJpYkxvY2F0aW9uIik7Ci0gICAgICAgICAgICBj
dXN0b21XcmFwRnVuY3Rpb24oImNvbXBpbGVTaGFkZXIiKTsKLSAgICAgICAgICAgIGN1c3RvbVdy
YXBGdW5jdGlvbigiZGV0YWNoU2hhZGVyIik7Ci0gICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rp
b24oImxpbmtQcm9ncmFtIik7Ci0gICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oInNoYWRl
clNvdXJjZSIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJidWZmZXJEYXRhIik7
Ci0gICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oImJ1ZmZlclN1YkRhdGEiKTsKLSAgICAg
ICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29tcHJlc3NlZFRleEltYWdlMkQiKTsKLSAgICAg
ICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiKTsKLSAg
ICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29weVRleEltYWdlMkQiKTsKLSAgICAgICAg
ICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29weVRleFN1YkltYWdlMkQiKTsKLSAgICAgICAgICAg
IGN1c3RvbVdyYXBGdW5jdGlvbigiZ2VuZXJhdGVNaXBtYXAiKTsKLSAgICAgICAgICAgIGN1c3Rv
bVdyYXBGdW5jdGlvbigidGV4SW1hZ2UyRCIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0
aW9uKCJ0ZXhTdWJJbWFnZTJEIik7Ci0gICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oInRl
eFBhcmFtZXRlcmYiKTsKLSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigidGV4UGFyYW1l
dGVyaSIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJmcmFtZWJ1ZmZlclRl
eHR1cmUyRCIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJyZW5kZXJidWZmZXJT
dG9yYWdlIik7Ci0KLSAgICAgICAgICAgIC8qKiBAdGhpcyBSZXNvdXJjZS5XcmFwRnVuY3Rpb24g
Ki8KLSAgICAgICAgICAgIHdyYXBGdW5jdGlvbnNbImdldEVycm9yIl0gPSBmdW5jdGlvbigpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGdsID0gdGhpcy5fb3JpZ2luYWxPYmpl
Y3Q7Ci0gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gdGhpcy5yZXN1bHQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZXJyb3IgIT09IGdsLk5PX0VSUk9SKQotICAgICAgICAgICAgICAgICAgICB0
aGlzLl9yZXNvdXJjZS5jbGVhckVycm9yKGVycm9yKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLl9yZXNvdXJjZS5uZXh0RXJyb3IoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9PSBnbC5OT19FUlJPUikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVSZXN1bHQoZXJyb3IpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
UmVzb3VyY2UuX3dyYXBGdW5jdGlvbnMgPSB3cmFwRnVuY3Rpb25zOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB3cmFwRnVuY3Rpb25zOwotICAgIH0KLX0KLQotV2ViR0xSZW5kZXJpbmdDb250
ZXh0UmVzb3VyY2UucHJvdG90eXBlLl9fcHJvdG9fXyA9IFJlc291cmNlLnByb3RvdHlwZTsKLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gVHJhY2VMb2coKQotewotICAgIHRo
aXMuX3JlcGxheWFibGVDYWxscyA9IFtdOwotICAgIHRoaXMuX3JlcGxheWFibGVzQ2FjaGUgPSBu
ZXcgQ2FjaGUoKTsKLX0KLQotVHJhY2VMb2cucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBzaXplOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fcmVwbGF5YWJsZUNhbGxzLmxlbmd0aDsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPFJlcGxheWFibGVDYWxsPn0KLSAgICAgKi8K
LSAgICByZXBsYXlhYmxlQ2FsbHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9yZXBsYXlhYmxlQ2FsbHM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
UmVzb3VyY2V9IHJlc291cmNlCi0gICAgICovCi0gICAgY2FwdHVyZVJlc291cmNlOiBmdW5jdGlv
bihyZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHJlc291cmNlLnRvUmVwbGF5YWJsZSh0aGlzLl9y
ZXBsYXlhYmxlc0NhY2hlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYWxs
fSBjYWxsCi0gICAgICovCi0gICAgYWRkQ2FsbDogZnVuY3Rpb24oY2FsbCkKLSAgICB7Ci0gICAg
ICAgIHZhciByZXMgPSBSZXNvdXJjZS5mb3JPYmplY3QoY2FsbC5yZXN1bHQoKSk7Ci0gICAgICAg
IGlmIChyZXMpCi0gICAgICAgICAgICB0aGlzLmNhcHR1cmVSZXNvdXJjZShyZXMpOwotICAgICAg
ICB2YXIgc2l6ZSA9IHRoaXMuX3JlcGxheWFibGVzQ2FjaGUuc2l6ZSgpOwotICAgICAgICB0aGlz
Ll9yZXBsYXlhYmxlQ2FsbHMucHVzaChjYWxsLnRvUmVwbGF5YWJsZSh0aGlzLl9yZXBsYXlhYmxl
c0NhY2hlKSk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3JlcGxheWFibGVzQ2FjaGUu
c2l6ZSgpID09PSBzaXplLCAiSW50ZXJuYWwgZXJyb3I6IFdlIHNob3VsZCBoYXZlIGNhcHR1cmVk
IGFsbCB0aGUgcmVzb3VyY2VzIGFscmVhZHkgYnkgdGhpcyB0aW1lLiIpOwotICAgIH0KLX0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7VHJhY2VMb2d9IHRyYWNlTG9nCi0gKi8K
LWZ1bmN0aW9uIFRyYWNlTG9nUGxheWVyKHRyYWNlTG9nKQotewotICAgIHRoaXMuX3RyYWNlTG9n
ID0gdHJhY2VMb2c7Ci0gICAgdGhpcy5fbmV4dFJlcGxheVN0ZXAgPSAwOwotICAgIHRoaXMuX3Jl
cGxheVdvcmxkQ2FjaGUgPSBuZXcgQ2FjaGUoKTsKLX0KLQotVHJhY2VMb2dQbGF5ZXIucHJvdG90
eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1RyYWNlTG9nfQotICAgICAqLwotICAg
IHRyYWNlTG9nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2VM
b2c7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8K
LSAgICBuZXh0UmVwbGF5U3RlcDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX25leHRSZXBsYXlTdGVwOwotICAgIH0sCi0KLSAgICByZXNldDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgLy8gRklYTUU6IFByZXZlbnQgbWVtb3J5IGxlYWtzOiBkZXRhY2ggYW5kIGRl
bGV0ZSBhbGwgb2xkIHJlc291cmNlcyBPUiByZXVzZSB0aGVtIE9SIGNyZWF0ZSBhIG5ldyByZXBs
YXkgY2FudmFzIGV2ZXJ5IHRpbWUuCi0gICAgICAgIHRoaXMuX25leHRSZXBsYXlTdGVwID0gMDsK
LSAgICAgICAgdGhpcy5fcmVwbGF5V29ybGRDYWNoZS5yZXNldCgpOwotICAgIH0sCi0KLSAgICBz
dGVwOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnN0ZXBUbyh0aGlzLl9uZXh0UmVw
bGF5U3RlcCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVw
TnVtCi0gICAgICovCi0gICAgc3RlcFRvOiBmdW5jdGlvbihzdGVwTnVtKQotICAgIHsKLSAgICAg
ICAgc3RlcE51bSA9IE1hdGgubWluKHN0ZXBOdW0sIHRoaXMuX3RyYWNlTG9nLnNpemUoKSAtIDEp
OwotICAgICAgICBjb25zb2xlLmFzc2VydChzdGVwTnVtID49IDApOwotICAgICAgICBpZiAodGhp
cy5fbmV4dFJlcGxheVN0ZXAgPiBzdGVwTnVtKQotICAgICAgICAgICAgdGhpcy5yZXNldCgpOwot
ICAgICAgICAvLyBGSVhNRTogUmVwbGF5IGFsbCB0aGUgY2FjaGVkIHJlc291cmNlcyBmaXJzdCB0
byB3YXJtLXVwLgotICAgICAgICB2YXIgcmVwbGF5YWJsZUNhbGxzID0gdGhpcy5fdHJhY2VMb2cu
cmVwbGF5YWJsZUNhbGxzKCk7Ci0gICAgICAgIHdoaWxlICh0aGlzLl9uZXh0UmVwbGF5U3RlcCA8
PSBzdGVwTnVtKQotICAgICAgICAgICAgcmVwbGF5YWJsZUNhbGxzW3RoaXMuX25leHRSZXBsYXlT
dGVwKytdLnJlcGxheSh0aGlzLl9yZXBsYXlXb3JsZENhY2hlKTsKLSAgICB9LAotCi0gICAgcmVw
bGF5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnN0ZXBUbyh0aGlzLl90cmFjZUxv
Zy5zaXplKCkgLSAxKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1
bmN0aW9uIFJlc291cmNlVHJhY2tpbmdNYW5hZ2VyKCkKLXsKLSAgICB0aGlzLl9jYXB0dXJpbmcg
PSBmYWxzZTsKLSAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOwotICAg
IHRoaXMuX2xhc3RUcmFjZUxvZyA9IG51bGw7Ci19Ci0KLVJlc291cmNlVHJhY2tpbmdNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAq
LwotICAgIGNhcHR1cmluZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X2NhcHR1cmluZzsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7VHJhY2VMb2d9
Ci0gICAgICovCi0gICAgbGFzdFRyYWNlTG9nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fbGFzdFRyYWNlTG9nOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1Jlc291cmNlfSByZXNvdXJjZQotICAgICAqLwotICAgIHJlZ2lzdGVyUmVzb3VyY2U6IGZ1
bmN0aW9uKHJlc291cmNlKQotICAgIHsKLSAgICAgICAgcmVzb3VyY2Uuc2V0TWFuYWdlcih0aGlz
KTsKLSAgICB9LAotCi0gICAgc3RhcnRDYXB0dXJpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGlmICghdGhpcy5fY2FwdHVyaW5nKQotICAgICAgICAgICAgdGhpcy5fbGFzdFRyYWNlTG9n
ID0gbmV3IFRyYWNlTG9nKCk7Ci0gICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IHRydWU7Ci0gICAg
ICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7VHJhY2VMb2c9fSB0cmFjZUxvZwotICAgICAqLwotICAgIHN0
b3BDYXB0dXJpbmc6IGZ1bmN0aW9uKHRyYWNlTG9nKQotICAgIHsKLSAgICAgICAgaWYgKHRyYWNl
TG9nICYmIHRoaXMuX2xhc3RUcmFjZUxvZyAhPT0gdHJhY2VMb2cpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IGZhbHNlOwotICAgICAgICB0aGlzLl9zdG9w
Q2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOwotICAgIH0sCi0KLSAgICBjYXB0dXJlRnJhbWU6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG5ldyBUcmFj
ZUxvZygpOwotICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSB0cnVlOwotICAgICAgICB0aGlzLl9z
dG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7UmVzb3VyY2V9IHJlc291cmNlCi0gICAgICogQHBhcmFtIHtBcnJheXxBcmd1bWVu
dHN9IGFyZ3MKLSAgICAgKi8KLSAgICBjYXB0dXJlQXJndW1lbnRzOiBmdW5jdGlvbihyZXNvdXJj
ZSwgYXJncykKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fY2FwdHVyaW5nKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9sYXN0VHJhY2VMb2cuY2FwdHVyZVJlc291cmNlKHJl
c291cmNlKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmdzLmxlbmd0aDsgaSA8IG47
ICsraSkgewotICAgICAgICAgICAgdmFyIHJlcyA9IFJlc291cmNlLmZvck9iamVjdChhcmdzW2ld
KTsKLSAgICAgICAgICAgIGlmIChyZXMpCi0gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFRyYWNl
TG9nLmNhcHR1cmVSZXNvdXJjZShyZXMpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAotICAgICAqLwotICAgIHJlcG9ydENhbGw6IGZ1bmN0
aW9uKGNhbGwpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2NhcHR1cmluZykKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fbGFzdFRyYWNlTG9nLmFkZENhbGwoY2FsbCk7Ci0g
ICAgICAgIGlmICh0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCAmJiB0aGlzLl9sYXN0VHJh
Y2VMb2cuc2l6ZSgpID09PSAxKSB7Ci0gICAgICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25G
cmFtZUVuZCA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5fc2V0WmVyb1RpbWVvdXRzKHRoaXMu
c3RvcENhcHR1cmluZy5iaW5kKHRoaXMsIHRoaXMuX2xhc3RUcmFjZUxvZykpOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0g
ICAgICovCi0gICAgX3NldFplcm9UaW1lb3V0czogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewot
ICAgICAgICAvLyBXZSBuZWVkIGEgZmFzdGVzdCBhc3luYyBjYWxsYmFjaywgd2hhdGV2ZXIgZmly
ZXMgZmlyc3QuCi0gICAgICAgIC8vIFVzdWFsbHkgYSBwb3N0TWVzc2FnZSBzaG91bGQgYmUgZmFz
dGVyIHRoYW4gYSBzZXRUaW1lb3V0KDApLgotICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNz
YWdlQ2hhbm5lbCgpOwotICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGNhbGxiYWNr
OwotICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKCIiKTsKLSAgICAgICAgaW5zcGVj
dGVkV2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDApOwotICAgIH0KLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqLwotdmFyIEluamVjdGVkU2NyaXB0ID0gZnVuY3Rpb24oKQotewotICAg
IHRoaXMuX21hbmFnZXIgPSBuZXcgUmVzb3VyY2VUcmFja2luZ01hbmFnZXIoKTsKLSAgICB0aGlz
Ll9sYXN0VHJhY2VMb2dJZCA9IDA7Ci0gICAgdGhpcy5fdHJhY2VMb2dzID0ge307Ci0gICAgdGhp
cy5fdHJhY2VMb2dQbGF5ZXIgPSBudWxsOwotICAgIHRoaXMuX3JlcGxheUNvbnRleHQgPSBudWxs
OwotfQotCi1JbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsQ29udGV4dAotICAgICAqIEByZXR1cm4ge09i
amVjdH0KLSAgICAgKi8KLSAgICB3cmFwV2ViR0xDb250ZXh0OiBmdW5jdGlvbihnbENvbnRleHQp
Ci0gICAgewotICAgICAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3QoZ2xDb250
ZXh0KSB8fCBuZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UoZ2xDb250ZXh0LCB0aGlz
Ll9jb25zdHJ1Y3RXZWJHTFJlcGxheUNvbnRleHQuYmluZCh0aGlzLCBnbENvbnRleHQpKTsKLSAg
ICAgICAgdGhpcy5fbWFuYWdlci5yZWdpc3RlclJlc291cmNlKHJlc291cmNlKTsKLSAgICAgICAg
dmFyIHByb3h5ID0gcmVzb3VyY2UucHJveHlPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHByb3h5
OwotICAgIH0sCi0KLSAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHZhciBpZCA9IHRoaXMuX21ha2VUcmFjZUxvZ0lkKCk7Ci0gICAgICAgIHRoaXMuX21hbmFnZXIu
Y2FwdHVyZUZyYW1lKCk7Ci0gICAgICAgIHRoaXMuX3RyYWNlTG9nc1tpZF0gPSB0aGlzLl9tYW5h
Z2VyLmxhc3RUcmFjZUxvZygpOwotICAgICAgICByZXR1cm4gaWQ7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAotICAgICAqLwotICAgIGRyb3BUcmFjZUxvZzog
ZnVuY3Rpb24oaWQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fdHJhY2VMb2dQbGF5ZXIgJiYg
dGhpcy5fdHJhY2VMb2dQbGF5ZXIudHJhY2VMb2coKSA9PT0gdGhpcy5fdHJhY2VMb2dzW2lkXSkK
LSAgICAgICAgICAgIHRoaXMuX3RyYWNlTG9nUGxheWVyID0gbnVsbDsKLSAgICAgICAgZGVsZXRl
IHRoaXMuX3RyYWNlTG9nc1tpZF07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBpZAotICAgICAqIEByZXR1cm4ge09iamVjdHxzdHJpbmd9Ci0gICAgICovCi0gICAg
dHJhY2VMb2c6IGZ1bmN0aW9uKGlkKQotICAgIHsKLSAgICAgICAgdmFyIHRyYWNlTG9nID0gdGhp
cy5fdHJhY2VMb2dzW2lkXTsKLSAgICAgICAgaWYgKCF0cmFjZUxvZykKLSAgICAgICAgICAgIHJl
dHVybiAiRXJyb3I6IFRyYWNlIGxvZyB3aXRoIHRoaXMgSUQgbm90IGZvdW5kLiI7Ci0gICAgICAg
IHZhciByZXN1bHQgPSB7Ci0gICAgICAgICAgICBpZDogaWQsCi0gICAgICAgICAgICBjYWxsczog
W10KLSAgICAgICAgfTsKLSAgICAgICAgdmFyIGNhbGxzID0gdHJhY2VMb2cucmVwbGF5YWJsZUNh
bGxzKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2FsbHMubGVuZ3RoOyBpIDwgbjsg
KytpKSB7Ci0gICAgICAgICAgICB2YXIgY2FsbCA9IGNhbGxzW2ldOwotICAgICAgICAgICAgdmFy
IGFyZ3MgPSBjYWxsLmFyZ3MoKS5tYXAoZnVuY3Rpb24oYXJndW1lbnQpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gYXJndW1lbnQgKyAiIjsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
dmFyIHN0YWNrVHJhY2UgPSBjYWxsLnN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIHZhciBjYWxs
RnJhbWUgPSBzdGFja1RyYWNlID8gc3RhY2tUcmFjZS5jYWxsRnJhbWUoMCkgfHwge30gOiB7fTsK
LSAgICAgICAgICAgIHZhciB0cmFjZUxvZ0l0ZW0gPSB7Ci0gICAgICAgICAgICAgICAgZnVuY3Rp
b25OYW1lOiBjYWxsLmZ1bmN0aW9uTmFtZSgpLAotICAgICAgICAgICAgICAgIGFyZ3VtZW50czog
YXJncywKLSAgICAgICAgICAgICAgICBzb3VyY2VVUkw6IGNhbGxGcmFtZS5zb3VyY2VVUkwsCi0g
ICAgICAgICAgICAgICAgbGluZU51bWJlcjogY2FsbEZyYW1lLmxpbmVOdW1iZXIsCi0gICAgICAg
ICAgICAgICAgY29sdW1uTnVtYmVyOiBjYWxsRnJhbWUuY29sdW1uTnVtYmVyCi0gICAgICAgICAg
ICB9OwotICAgICAgICAgICAgaWYgKGNhbGwucmVzdWx0KCkpCi0gICAgICAgICAgICAgICAgdHJh
Y2VMb2dJdGVtLnJlc3VsdCA9IGNhbGwucmVzdWx0KCkgKyAiIjsKLSAgICAgICAgICAgIHJlc3Vs
dC5jYWxscy5wdXNoKHRyYWNlTG9nSXRlbSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBObwotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAg
Ki8KLSAgICByZXBsYXlUcmFjZUxvZzogZnVuY3Rpb24oaWQsIHN0ZXBObykKLSAgICB7Ci0gICAg
ICAgIHZhciB0cmFjZUxvZyA9IHRoaXMuX3RyYWNlTG9nc1tpZF07Ci0gICAgICAgIGlmICghdHJh
Y2VMb2cpCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgIGlmICghdGhpcy5fdHJhY2VM
b2dQbGF5ZXIgfHwgdGhpcy5fdHJhY2VMb2dQbGF5ZXIudHJhY2VMb2coKSAhPT0gdHJhY2VMb2cp
Ci0gICAgICAgICAgICB0aGlzLl90cmFjZUxvZ1BsYXllciA9IG5ldyBUcmFjZUxvZ1BsYXllcih0
cmFjZUxvZyk7Ci0gICAgICAgIHRoaXMuX3RyYWNlTG9nUGxheWVyLnN0ZXBUbyhzdGVwTm8pOwot
ICAgICAgICBpZiAoIXRoaXMuX3JlcGxheUNvbnRleHQpIHsKLSAgICAgICAgICAgIGNvbnNvbGUu
ZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogcmVwbGF5VHJhY2VMb2cgZmFpbGVkIHRvIGNyZWF0
ZSBhIHJlcGxheSBjYW52YXM/ISIpOwotICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICB9
Ci0gICAgICAgIC8vIFJldHVybiBjdXJyZW50IHNjcmVlbnNob3QuCi0gICAgICAgIC8vIEZJWE1F
OiBTdXBwb3J0IHJlcGxheWluZyBzZXZlcmFsIGNhbnZhc2VzIHNpbXVsdGFuZW91c2x5LgotICAg
ICAgICByZXR1cm4gdGhpcy5fcmVwbGF5Q29udGV4dC5jYW52YXMudG9EYXRhVVJMKCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBfbWFr
ZVRyYWNlTG9nSWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAie1wiaW5qZWN0
ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsgIixcInRyYWNlTG9nSWRcIjoiICsg
KCsrdGhpcy5fbGFzdFRyYWNlTG9nSWQpICsgIn0iOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gb3JpZ2luYWxHbENvbnRleHQKLSAgICAg
KiBAcmV0dXJuIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9Ci0gICAgICovCi0gICAgX2NvbnN0cnVj
dFdlYkdMUmVwbGF5Q29udGV4dDogZnVuY3Rpb24ob3JpZ2luYWxHbENvbnRleHQpCi0gICAgewot
ICAgICAgICB2YXIgcmVwbGF5Q29udGV4dCA9IG9yaWdpbmFsR2xDb250ZXh0WyJfX3JlcGxheUNv
bnRleHQiXTsKLSAgICAgICAgaWYgKCFyZXBsYXlDb250ZXh0KSB7Ci0gICAgICAgICAgICB2YXIg
Y2FudmFzID0gb3JpZ2luYWxHbENvbnRleHQuY2FudmFzLmNsb25lTm9kZSh0cnVlKTsKLSAgICAg
ICAgICAgIHZhciBhdHRyaWJ1dGVzID0gb3JpZ2luYWxHbENvbnRleHQuZ2V0Q29udGV4dEF0dHJp
YnV0ZXMoKTsKLSAgICAgICAgICAgIHZhciBjb250ZXh0SWRzID0gWyJleHBlcmltZW50YWwtd2Vi
Z2wiLCAid2Via2l0LTNkIiwgIjNkIl07Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgY29u
dGV4dElkOyBjb250ZXh0SWQgPSBjb250ZXh0SWRzW2ldOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICByZXBsYXlDb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoY29udGV4dElkLCBhdHRyaWJ1dGVz
KTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGF5Q29udGV4dCkgewotICAgICAgICAgICAgICAg
ICAgICByZXBsYXlDb250ZXh0ID0gLyoqIEB0eXBlIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9ICov
IFJlc291cmNlLndyYXBwZWRPYmplY3QocmVwbGF5Q29udGV4dCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcmlnaW5hbEdsQ29udGV4dCwgIl9fcmVwbGF5Q29udGV4
dCIsIHsKLSAgICAgICAgICAgICAgICB2YWx1ZTogcmVwbGF5Q29udGV4dCwKLSAgICAgICAgICAg
ICAgICB3cml0YWJsZTogZmFsc2UsCi0gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2Us
Ci0gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCi0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIHRoaXMuX3JlcGxheUNvbnRleHQgPSByZXBsYXlDb250ZXh0OwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IFJlc2V0IHRoZSByZXBsYXkgR0wgc3RhdGUg
YW5kIGNsZWFyIHRoZSBjYW52YXMuCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlcGxheUNv
bnRleHQ7Ci0gICAgfQotfQotCi12YXIgaW5qZWN0ZWRTY3JpcHQgPSBuZXcgSW5qZWN0ZWRTY3Jp
cHQoKTsKLXJldHVybiBpbmplY3RlZFNjcmlwdDsKLQotfSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbgppbmRleCBmMTEzN2M3OGQwNjY5MDM4MjhmMWVmODVhMTExMjExMWIx
Yzc2ZmU2Li40ZmU1OGJkZjZiNmFiYTA2NzQ2OTU5ODA2NGI3NTM1OTEwMTFhZWRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC0zMDY4LDcgKzMwNjgsNyBAQAog
ICAgICAgICBdCiAgICAgfSwKICAgICB7Ci0gICAgICAgICJkb21haW4iOiAiV2ViR0wiLAorICAg
ICAgICAiZG9tYWluIjogIkNhbnZhcyIsCiAgICAgICAgICJoaWRkZW4iOiB0cnVlLAogICAgICAg
ICAidHlwZXMiOiBbCiAgICAgICAgICAgICB7CkBAIC0zMTAwLDExICszMTAwLDExIEBACiAgICAg
ICAgICJjb21tYW5kcyI6IFsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAibmFtZSI6
ICJlbmFibGUiLAotICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbmFibGVzIFdlYkdM
IGluc3BlY3Rpb24uIgorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbmFibGVzIENh
bnZhcyBpbnNwZWN0aW9uLiIKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIm5hbWUiOiAiZGlzYWJsZSIsCi0gICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkRpc2FibGVzIFdlYkdMIGluc3BlY3Rpb24uIgorICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJEaXNhYmxlcyBDYW52YXMgaW5zcGVjdGlvbi4iCiAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICJuYW1lIjogImRyb3BUcmFjZUxvZyIsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcAppbmRleCBkYjNm
ODJjYmU5YWJmODI3YTk3YWFlOGMwODRhOGZkNmIxMjA5MmI4Li5jYmE3ZTJhMDc1ZGIxZGMzNzlh
YmVlNGFkZTRmMTcxNzg3M2Q1ODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBbGxJbk9uZS5jcHAKQEAgLTY2LDcgKzY2LDYgQEAKICNpbmNsdWRlICJJbnNwZWN0
b3JTdHlsZVRleHRFZGl0b3IuY3BwIgogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQu
Y3BwIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5jcHAiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
V2ViR0xBZ2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIgogI2lu
Y2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuY3BwIgogI2luY2x1ZGUgIk1lbW9yeUluc3RydW1l
bnRhdGlvbkltcGwuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhc0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXNBZ2VudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZmMjkzODQ1ZDRlNDMxZDc5MDYxOGUzNmYw
OTY4NzViNmI5MTg5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQuaCIKKworI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaCIKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFn
ZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clN0YXRlLmgiCisjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDYW52YXNBZ2VudFN0YXRlIHsK
K3N0YXRpYyBjb25zdCBjaGFyIGNhbnZhc0FnZW50RW5hYmxlZFtdID0gImNhbnZhc0FnZW50RW5h
YmxlZCI7Cit9OworCitJbnNwZWN0b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFzQWdlbnQo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUq
IHN0YXRlLCBQYWdlKiBwYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0
TWFuYWdlcikKKyAgICA6IEluc3BlY3RvckJhc2VBZ2VudDxJbnNwZWN0b3JDYW52YXNBZ2VudD4o
IkNhbnZhcyIsIGluc3RydW1lbnRpbmdBZ2VudHMsIHN0YXRlKQorICAgICwgbV9pbnNwZWN0ZWRQ
YWdlKHBhZ2UpCisgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1h
bmFnZXIpCisgICAgLCBtX2Zyb250ZW5kKDApCisgICAgLCBtX2VuYWJsZWQoZmFsc2UpCit7Cisg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JDYW52YXNBZ2VudCh0aGlzKTsK
K30KKworSW5zcGVjdG9yQ2FudmFzQWdlbnQ6On5JbnNwZWN0b3JDYW52YXNBZ2VudCgpCit7Cisg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JDYW52YXNBZ2VudCgwKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRl
bmQqIGZyb250ZW5kKQoreworICAgIEFTU0VSVChmcm9udGVuZCk7CisgICAgbV9mcm9udGVuZCA9
IGZyb250ZW5kLT5jYW52YXMoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2xl
YXJGcm9udGVuZCgpCit7CisgICAgbV9mcm9udGVuZCA9IDA7CisgICAgZGlzYWJsZSgwKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzdG9yZSgpCit7CisgICAgbV9lbmFibGVk
ID0gbV9zdGF0ZS0+Z2V0Qm9vbGVhbihDYW52YXNBZ2VudFN0YXRlOjpjYW52YXNBZ2VudEVuYWJs
ZWQpOworfQorCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcq
KQoreworICAgIGlmIChtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2VuYWJsZWQg
PSB0cnVlOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oQ2FudmFzQWdlbnRTdGF0ZTo6Y2FudmFz
QWdlbnRFbmFibGVkLCBtX2VuYWJsZWQpOworfQorCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
OjpkaXNhYmxlKEVycm9yU3RyaW5nKikKK3sKKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fZW5hYmxlZCA9IGZhbHNlOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4o
Q2FudmFzQWdlbnRTdGF0ZTo6Y2FudmFzQWdlbnRFbmFibGVkLCBtX2VuYWJsZWQpOworfQorCit2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpkcm9wVHJhY2VMb2coRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQpCit7CisgICAgSW5qZWN0ZWRTY3JpcHRD
YW52YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVGb3JUcmFjZUxv
Z0lkKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKKyAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVl
KCkpCisgICAgICAgIG1vZHVsZS5kcm9wVHJhY2VMb2coZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQp
OworfQorCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYXB0dXJlRnJhbWUoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBTdHJpbmcqIHRyYWNlTG9nSWQpCit7CisgICAgU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlID0gbWFpbldvcmxkU2NyaXB0U3RhdGUobV9pbnNwZWN0ZWRQYWdlLT5tYWlu
RnJhbWUoKSk7CisgICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGU6Om1vZHVsZUZvclN0YXRlKG1faW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLCBzY3JpcHRTdGF0ZSk7CisgICAgaWYgKG1vZHVsZS5oYXNOb1ZhbHVlKCkpIHsKKyAgICAg
ICAgKmVycm9yU3RyaW5nID0gIkluc3BlY3RlZCBmcmFtZSBoYXMgZ29uZSI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbW9kdWxlLmNhcHR1cmVGcmFtZShlcnJvclN0cmluZywgdHJhY2VM
b2dJZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldFRyYWNlTG9nKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkLCBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNhbnZhczo6VHJhY2VMb2c+JiB0cmFjZUxvZykKK3sKKyAgICBJbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZUZvclRy
YWNlTG9nSWQoZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQpOworICAgIGlmICghbW9kdWxlLmhhc05v
VmFsdWUoKSkKKyAgICAgICAgbW9kdWxlLnRyYWNlTG9nKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lk
LCAmdHJhY2VMb2cpOworfQorCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXBsYXlUcmFj
ZUxvZyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHJhY2VMb2dJZCwg
aW50IHN0ZXBObywgU3RyaW5nKiByZXN1bHQpCit7CisgICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNN
b2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVGb3JUcmFjZUxvZ0lkKGVy
cm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKKyAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVlKCkpCisg
ICAgICAgIG1vZHVsZS5yZXBsYXlUcmFjZUxvZyhlcnJvclN0cmluZywgdHJhY2VMb2dJZCwgc3Rl
cE5vLCByZXN1bHQpOworfQorCisjaWYgRU5BQkxFKFdFQkdMKQorU2NyaXB0T2JqZWN0IEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp3cmFwV2ViR0xSZW5kZXJpbmdDb250ZXh0Rm9ySW5zdHJ1bWVudGF0
aW9uKGNvbnN0IFNjcmlwdE9iamVjdCYgZ2xDb250ZXh0KQoreworICAgIGlmIChnbENvbnRleHQu
aGFzTm9WYWx1ZSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gU2NyaXB0T2JqZWN0KCk7CisgICAgfQorICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlIG1vZHVsZSA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlOjptb2R1bGVGb3JTdGF0ZSht
X2luamVjdGVkU2NyaXB0TWFuYWdlciwgZ2xDb250ZXh0LnNjcmlwdFN0YXRlKCkpOworICAgIGlm
IChtb2R1bGUuaGFzTm9WYWx1ZSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CisgICAgfQorICAgIHJldHVybiBtb2R1bGUu
d3JhcFdlYkdMQ29udGV4dChnbENvbnRleHQpOworfQorI2VuZGlmCisKK0luamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlIEluc3BlY3RvckNhbnZhc0FnZW50OjppbmplY3RlZFNjcmlwdENhbnZhc01v
ZHVsZUZvclRyYWNlTG9nSWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHRyYWNlTG9nSWQpCit7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZCh0cmFjZUxvZ0lk
KTsKKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CisgICAgICAgICplcnJv
clN0cmluZyA9ICJJbnNwZWN0ZWQgZnJhbWUgaGFzIGdvbmUiOworICAgICAgICByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUoKTsKKyAgICB9CisgICAgSW5qZWN0ZWRTY3JpcHRDYW52
YXNNb2R1bGUgbW9kdWxlID0gSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6Om1vZHVsZUZvclN0
YXRlKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBpbmplY3RlZFNjcmlwdC5zY3JpcHRTdGF0ZSgp
KTsKKyAgICBpZiAobW9kdWxlLmhhc05vVmFsdWUoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgKmVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiBubyBDYW52
YXMgbW9kdWxlIjsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKCk7
CisgICAgfQorICAgIHJldHVybiBtb2R1bGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0NjBjNjQxMDAyMTkwMDY3
MDgwZmRiZjIwNGY5YWZlZDk1ZDliYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaApAQCAtMCwwICsxLDEwMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSW5zcGVjdG9yQ2FudmFzQWdlbnRfaAorI2RlZmluZSBJbnNwZWN0b3JDYW52YXNBZ2VudF9o
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yQmFzZUFnZW50
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JU
eXBlQnVpbGRlci5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlOworY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOworY2xhc3Mg
SW5zcGVjdG9yU3RhdGU7CitjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOworY2xhc3MgUGFnZTsK
K2NsYXNzIFNjcmlwdE9iamVjdDsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK2Ns
YXNzIEluc3BlY3RvckNhbnZhc0FnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudDxJbnNw
ZWN0b3JDYW52YXNBZ2VudD4sIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2Fu
dmFzQ29tbWFuZEhhbmRsZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3Bl
Y3RvckNhbnZhc0FnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIHN0YXRlLCBQYWdlKiBwYWdlLCBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgSW5zcGVjdG9yQ2FudmFzQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgc3Rh
dGUsIHBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOworICAgIH0KKyAgICB+SW5zcGVjdG9y
Q2FudmFzQWdlbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRGcm9udGVuZChJbnNwZWN0b3JG
cm9udGVuZCopOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyb250ZW5kKCk7CisgICAgdmlydHVh
bCB2b2lkIHJlc3RvcmUoKTsKKworICAgIGJvb2wgZW5hYmxlZCgpIHsgcmV0dXJuIG1fZW5hYmxl
ZDsgfQorCisjaWYgRU5BQkxFKFdFQkdMKQorICAgIFNjcmlwdE9iamVjdCB3cmFwV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Rm9ySW5zdHJ1bWVudGF0aW9uKGNvbnN0IFNjcmlwdE9iamVjdCYpOworI2Vu
ZGlmCisKKyAgICAvLyBDYWxsZWQgZnJvbSB0aGUgZnJvbnQtZW5kLgorICAgIHZpcnR1YWwgdm9p
ZCBlbmFibGUoRXJyb3JTdHJpbmcqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0
cmluZyopOworICAgIHZpcnR1YWwgdm9pZCBkcm9wVHJhY2VMb2coRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZUZyYW1lKEVycm9yU3RyaW5nKiwg
U3RyaW5nKik7CisgICAgdmlydHVhbCB2b2lkIGdldFRyYWNlTG9nKEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDYW52YXM6OlRyYWNlTG9nPiYpOworICAg
IHZpcnR1YWwgdm9pZCByZXBsYXlUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYs
IGludCwgU3RyaW5nKik7CisKKyAgICAvLyBDYWxsZWQgZnJvbSB0aGUgaW5qZWN0ZWQgc2NyaXB0
LgorCisgICAgLy8gQ2FsbGVkIGZyb20gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCisKK3ByaXZh
dGU6CisgICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3Bl
Y3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworCisgICAgSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGUgaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVGb3JUcmFjZUxv
Z0lkKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJik7CisKKyAgICBQYWdlKiBtX2luc3BlY3Rl
ZFBhZ2U7CisgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdl
cjsKKyAgICBJbnNwZWN0b3JGcm9udGVuZDo6Q2FudmFzKiBtX2Zyb250ZW5kOworICAgIGJvb2wg
bV9lbmFibGVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckNhbnZhc0FnZW50
X2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
SW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2Fu
dmFzSW5zdHJ1bWVudGF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTkwNGI4Nzg5NDJjM2MyM2U5MDUwMjdj
YzBmNTFiNzYyMTU0Mjk1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb24uaApAQCAtMCwwICsxLDU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJbnNwZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb25faAorI2RlZmluZSBJbnNwZWN0b3JD
YW52YXNJbnN0cnVtZW50YXRpb25faAorCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2FudmFzQWdlbnQu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnN0
cnVtZW50aW5nQWdlbnRzLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShXRUJHTCkKK1NjcmlwdE9iamVjdCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndyYXBXZWJHTFJlbmRlcmluZ0NvbnRleHRGb3JJbnN0cnVtZW50YXRp
b24oRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTY3JpcHRPYmplY3QmIGdsQ29udGV4dCkKK3sK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50
KSkgeworICAgICAgICBJbnNwZWN0b3JDYW52YXNBZ2VudCogY2FudmFzQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JDYW52YXNBZ2VudCgpOworICAgICAgICBpZiAoY2FudmFz
QWdlbnQgJiYgY2FudmFzQWdlbnQtPmVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBjYW52
YXNBZ2VudC0+d3JhcFdlYkdMUmVuZGVyaW5nQ29udGV4dEZvckluc3RydW1lbnRhdGlvbihnbENv
bnRleHQpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBTY3JpcHRPYmplY3QoKTsKK30KKyNl
bmRpZiAvLyBFTkFCTEUoV0VCR0wpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vICFkZWZpbmVkKEluc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbl9oKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGM4NWY0
ZDRjYTg1MWQzOWQzYzIwMGIyNjIyNjU1OTA4NzFiM2ZkODEuLjliZDQzMzExZjkyYjZlOTA3NmJk
NDIwMWY1YTFmZDg1MGRhZWJkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhc2VBZ2VudC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaCIK
QEAgLTYyLDcgKzYzLDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yV2ViR0xBZ2VudC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvcldvcmtlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgogI2lu
Y2x1ZGUgIlBhZ2VDb25zb2xlQWdlbnQuaCIKQEAgLTE0Nyw5ICsxNDcsNyBAQCBJbnNwZWN0b3JD
b250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVu
dCogaW5zcGVjdG9yQwogICAgIG1fYWdlbnRzLmFwcGVuZChJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQoKSkpOwogI2Vu
ZGlmCiAKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgbV9hZ2VudHMuYXBwZW5kKEluc3BlY3Rvcldl
YkdMQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0
KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7Ci0jZW5kaWYKKyAgICBt
X2FnZW50cy5hcHBlbmQoSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRp
bmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmdldCgpKSk7CiAKICAgICBBU1NFUlRfQVJHKGluc3BlY3RvckNsaWVudCwgaW5zcGVjdG9y
Q2xpZW50KTsKICAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRIb3N0
KCktPmluaXQobV9pbnNwZWN0b3JBZ2VudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvcldlYkdMQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvcldlYkdMQWdlbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
NmZmYmNmYTQwOWEzYWYyMmY4MTI1OGFiMGNhODA3MWExZDg1MzUyLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JXZWJHTEFnZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKFdFQkdM
KQotCi0jaW5jbHVkZSAiSW5zcGVjdG9yV2ViR0xBZ2VudC5oIgotCi0jaW5jbHVkZSAiSW5qZWN0
ZWRTY3JpcHQuaCIKLSNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKLSNpbmNsdWRl
ICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmgiIAotI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKLSNpbmNsdWRlICJJbnN0cnVtZW50
aW5nQWdlbnRzLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5o
IgotI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFt
ZXNwYWNlIFdlYkdMQWdlbnRTdGF0ZSB7Ci1zdGF0aWMgY29uc3QgY2hhciB3ZWJHTEFnZW50RW5h
YmxlZFtdID0gIndlYkdMQWdlbnRFbmFibGVkIjsKLX07Ci0KLUluc3BlY3RvcldlYkdMQWdlbnQ6
Okluc3BlY3RvcldlYkdMQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgSW5zcGVjdG9yU3RhdGUqIHN0YXRlLCBQYWdlKiBwYWdlLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckJhc2VBZ2VudDxJ
bnNwZWN0b3JXZWJHTEFnZW50PigiV2ViR0wiLCBpbnN0cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSkK
LSAgICAsIG1faW5zcGVjdGVkUGFnZShwYWdlKQotICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQotICAgICwgbV9mcm9udGVuZCgwKQotICAgICwgbV9l
bmFibGVkKGZhbHNlKQotewotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9y
V2ViR0xBZ2VudCh0aGlzKTsKLX0KLQotSW5zcGVjdG9yV2ViR0xBZ2VudDo6fkluc3BlY3Rvcldl
YkdMQWdlbnQoKQotewotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yV2Vi
R0xBZ2VudCgwKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JXZWJHTEFnZW50OjpzZXRGcm9udGVuZChJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCi17Ci0gICAgQVNTRVJUKGZyb250ZW5kKTsKLSAg
ICBtX2Zyb250ZW5kID0gZnJvbnRlbmQtPndlYmdsKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yV2Vi
R0xBZ2VudDo6Y2xlYXJGcm9udGVuZCgpCi17Ci0gICAgbV9mcm9udGVuZCA9IDA7Ci0gICAgZGlz
YWJsZSgwKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JXZWJHTEFnZW50OjpyZXN0b3JlKCkKLXsKLSAg
ICBtX2VuYWJsZWQgPSBtX3N0YXRlLT5nZXRCb29sZWFuKFdlYkdMQWdlbnRTdGF0ZTo6d2ViR0xB
Z2VudEVuYWJsZWQpOwotfQotCi12b2lkIEluc3BlY3RvcldlYkdMQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyopCi17Ci0gICAgaWYgKG1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
ZW5hYmxlZCA9IHRydWU7Ci0gICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihXZWJHTEFnZW50U3RhdGU6
OndlYkdMQWdlbnRFbmFibGVkLCBtX2VuYWJsZWQpOwotfQotCi12b2lkIEluc3BlY3RvcldlYkdM
QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQotewotICAgIGlmICghbV9lbmFibGVkKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9lbmFibGVkID0gZmFsc2U7Ci0gICAgbV9zdGF0ZS0+c2V0Qm9v
bGVhbihXZWJHTEFnZW50U3RhdGU6OndlYkdMQWdlbnRFbmFibGVkLCBtX2VuYWJsZWQpOwotfQot
Ci12b2lkIEluc3BlY3RvcldlYkdMQWdlbnQ6OmRyb3BUcmFjZUxvZyhFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHJhY2VMb2dJZCkKLXsKLSAgICBJbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlIG1vZHVsZSA9IGluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVGb3JUcmFjZUxv
Z0lkKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKLSAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVl
KCkpCi0gICAgICAgIG1vZHVsZS5kcm9wVHJhY2VMb2coZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQp
OwotfQotCi12b2lkIEluc3BlY3RvcldlYkdMQWdlbnQ6OmNhcHR1cmVGcmFtZShFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIFN0cmluZyogdHJhY2VMb2dJZCkKLXsKLSAgICBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUgPSBtYWluV29ybGRTY3JpcHRTdGF0ZShtX2luc3BlY3RlZFBhZ2UtPm1haW5G
cmFtZSgpKTsKLSAgICBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlIG1vZHVsZSA9IEluamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGU6Om1vZHVsZUZvclN0YXRlKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LCBzY3JpcHRTdGF0ZSk7Ci0gICAgaWYgKG1vZHVsZS5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAg
KmVycm9yU3RyaW5nID0gIkluc3BlY3RlZCBmcmFtZSBoYXMgZ29uZSI7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbW9kdWxlLmNhcHR1cmVGcmFtZShlcnJvclN0cmluZywgdHJhY2VMb2dJ
ZCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yV2ViR0xBZ2VudDo6Z2V0VHJhY2VMb2coRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIFJlZlB0cjxUeXBlQnVp
bGRlcjo6V2ViR0w6OlRyYWNlTG9nPiYgdHJhY2VMb2cpCi17Ci0gICAgSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlRm9yVHJhY2VMb2dJ
ZChlcnJvclN0cmluZywgdHJhY2VMb2dJZCk7Ci0gICAgaWYgKCFtb2R1bGUuaGFzTm9WYWx1ZSgp
KQotICAgICAgICBtb2R1bGUudHJhY2VMb2coZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQsICZ0cmFj
ZUxvZyk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yV2ViR0xBZ2VudDo6cmVwbGF5VHJhY2VMb2coRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIGludCBzdGVw
Tm8sIFN0cmluZyogcmVzdWx0KQotewotICAgIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUgbW9k
dWxlID0gaW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZUZvclRyYWNlTG9nSWQoZXJyb3JTdHJpbmcs
IHRyYWNlTG9nSWQpOwotICAgIGlmICghbW9kdWxlLmhhc05vVmFsdWUoKSkKLSAgICAgICAgbW9k
dWxlLnJlcGxheVRyYWNlTG9nKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkLCBzdGVwTm8sIHJlc3Vs
dCk7Ci19Ci0KLVNjcmlwdE9iamVjdCBJbnNwZWN0b3JXZWJHTEFnZW50Ojp3cmFwV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Rm9ySW5zdHJ1bWVudGF0aW9uKGNvbnN0IFNjcmlwdE9iamVjdCYgZ2xDb250
ZXh0KQotewotICAgIGlmIChnbENvbnRleHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7Ci0gICAgfQot
ICAgIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUgbW9kdWxlID0gSW5qZWN0ZWRTY3JpcHRXZWJH
TE1vZHVsZTo6bW9kdWxlRm9yU3RhdGUobV9pbmplY3RlZFNjcmlwdE1hbmFnZXIsIGdsQ29udGV4
dC5zY3JpcHRTdGF0ZSgpKTsKLSAgICBpZiAobW9kdWxlLmhhc05vVmFsdWUoKSkgewotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOwot
ICAgIH0KLSAgICByZXR1cm4gbW9kdWxlLndyYXBXZWJHTENvbnRleHQoZ2xDb250ZXh0KTsKLX0K
LQotSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZSBJbnNwZWN0b3JXZWJHTEFnZW50OjppbmplY3Rl
ZFNjcmlwdFdlYkdMTW9kdWxlRm9yVHJhY2VMb2dJZChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgdHJhY2VMb2dJZCkKLXsKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVj
dElkKHRyYWNlTG9nSWQpOwotICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsK
LSAgICAgICAgKmVycm9yU3RyaW5nID0gIkluc3BlY3RlZCBmcmFtZSBoYXMgZ29uZSI7Ci0gICAg
ICAgIHJldHVybiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlKCk7Ci0gICAgfQotICAgIEluamVj
dGVkU2NyaXB0V2ViR0xNb2R1bGUgbW9kdWxlID0gSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZTo6
bW9kdWxlRm9yU3RhdGUobV9pbmplY3RlZFNjcmlwdE1hbmFnZXIsIGluamVjdGVkU2NyaXB0LnNj
cmlwdFN0YXRlKCkpOwotICAgIGlmIChtb2R1bGUuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJy
b3I6IG5vIFdlYkdMIG1vZHVsZSI7Ci0gICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdFdlYkdM
TW9kdWxlKCk7Ci0gICAgfQotICAgIHJldHVybiBtb2R1bGU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJMRShXRUJHTCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWI3YWZjZjMzOGNhNzFlYWVhMjg0MWFiOTkzNDZk
YWE5ZmNlOGEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEFnZW50LmgKKysrIC9kZXYv
bnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbnNwZWN0b3JXZWJHTEFnZW50X2gKLSNkZWZp
bmUgSW5zcGVjdG9yV2ViR0xBZ2VudF9oCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFC
TEUoV0VCR0wpCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JCYXNlQWdlbnQuaCIKLSNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWlsZGVyLmgiCi0j
aW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwot
Y2xhc3MgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZTsKLWNsYXNzIEluc3BlY3RvclN0YXRlOwot
Y2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKLWNsYXNzIFBhZ2U7Ci1jbGFzcyBTY3JpcHRPYmpl
Y3Q7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi1jbGFzcyBJbnNwZWN0b3JXZWJH
TEFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudDxJbnNwZWN0b3JXZWJHTEFnZW50Piwg
cHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpXZWJHTENvbW1hbmRIYW5kbGVyIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JXZWJHTEFnZW50PiBjcmVh
dGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3Rh
dGUqIHN0YXRlLCBQYWdlKiBwYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9y
V2ViR0xBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSwgcGFnZSwgaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKSk7Ci0gICAgfQotICAgIH5JbnNwZWN0b3JXZWJHTEFnZW50KCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJGcm9udGVuZCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7Ci0KLSAg
ICBib29sIGVuYWJsZWQoKSB7IHJldHVybiBtX2VuYWJsZWQ7IH0KLQotICAgIFNjcmlwdE9iamVj
dCB3cmFwV2ViR0xSZW5kZXJpbmdDb250ZXh0Rm9ySW5zdHJ1bWVudGF0aW9uKGNvbnN0IFNjcmlw
dE9iamVjdCYpOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gdGhlIGZyb250LWVuZC4KLSAgICB2aXJ0
dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJvcFRyYWNlTG9nKEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGNhcHR1cmVGcmFtZShFcnJvclN0
cmluZyosIFN0cmluZyopOwotICAgIHZpcnR1YWwgdm9pZCBnZXRUcmFjZUxvZyhFcnJvclN0cmlu
ZyosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxUeXBlQnVpbGRlcjo6V2ViR0w6OlRyYWNlTG9nPiYp
OwotICAgIHZpcnR1YWwgdm9pZCByZXBsYXlUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYsIGludCwgU3RyaW5nKik7Ci0KLSAgICAvLyBDYWxsZWQgZnJvbSB0aGUgaW5qZWN0ZWQg
c2NyaXB0LgotCi0gICAgLy8gQ2FsbGVkIGZyb20gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCi0K
LXByaXZhdGU6Ci0gICAgSW5zcGVjdG9yV2ViR0xBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwg
SW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7Ci0KLSAgICBJ
bmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlIGluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVGb3JUcmFj
ZUxvZ0lkKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICBQYWdlKiBtX2luc3Bl
Y3RlZFBhZ2U7Ci0gICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFu
YWdlcjsKLSAgICBJbnNwZWN0b3JGcm9udGVuZDo6V2ViR0wqIG1fZnJvbnRlbmQ7Ci0gICAgYm9v
bCBtX2VuYWJsZWQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoV0VCR0wpCi0KLSNlbmRpZiAvLyAhZGVmaW5lZChJ
bnNwZWN0b3JXZWJHTEFnZW50X2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzNTY3NTIyNGI2N2M4MjM1NmNlNjQ4ZjFkNjQ4MzBiOWJiNDM1ZjliLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgSW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb25faAot
I2RlZmluZSBJbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbl9oCi0KLSNpbmNsdWRlICJJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JXZWJHTEFnZW50Lmgi
Ci0jaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgotI2luY2x1ZGUgIlNjcmlwdE9iamVj
dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi1TY3JpcHRP
YmplY3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3cmFwV2ViR0xSZW5kZXJpbmdDb250ZXh0
Rm9ySW5zdHJ1bWVudGF0aW9uKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU2NyaXB0T2JqZWN0
JiBnbENvbnRleHQpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JE
b2N1bWVudChkb2N1bWVudCkpIHsKLSAgICAgICAgSW5zcGVjdG9yV2ViR0xBZ2VudCogd2ViR0xB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvcldlYkdMQWdlbnQoKTsKLSAgICAg
ICAgaWYgKHdlYkdMQWdlbnQgJiYgd2ViR0xBZ2VudC0+ZW5hYmxlZCgpKQotICAgICAgICAgICAg
cmV0dXJuIHdlYkdMQWdlbnQtPndyYXBXZWJHTFJlbmRlcmluZ0NvbnRleHRGb3JJbnN0cnVtZW50
YXRpb24oZ2xDb250ZXh0KTsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4gU2NyaXB0T2JqZWN0
KCk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbl9oKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmgKaW5kZXgg
MTMzNGRjN2Q2ZGI3ZWRiMzkwODZiOTZlM2M3ODY0Y2ExNzhmMzQxZC4uMjMwNmU3YTFlOGEwNTcw
YTMwMzI1NWQ2MjI2YTM3ZTQ0MjZhMWFmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5oCkBAIC0zOCwyMSArMzgsMjEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudDsKLWNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKLWNsYXNzIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDsKK2NsYXNzIEluc3Bl
Y3RvckNhbnZhc0FnZW50OwogY2xhc3MgSW5zcGVjdG9yQ29uc29sZUFnZW50OwogY2xhc3MgSW5z
cGVjdG9yRE9NQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OwogY2xhc3Mg
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDsK
IGNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGaWxlU3lzdGVt
QWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JQcm9maWxl
ckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDsKIGNsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CiBjbGFzcyBJbnNwZWN0
b3JXb3JrZXJBZ2VudDsKLWNsYXNzIEluc3BlY3RvcldlYkdMQWdlbnQ7CiBjbGFzcyBQYWdlOwog
Y2xhc3MgUGFnZVJ1bnRpbWVBZ2VudDsKIGNsYXNzIFdvcmtlckNvbnRleHQ7CkBAIC04Nyw5ICs4
Nyw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAgICAgLCBtX2luc3BlY3Rv
cldvcmtlckFnZW50KDApCiAjZW5kaWYKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgICAgICwgbV9p
bnNwZWN0b3JXZWJHTEFnZW50KDApCi0jZW5kaWYKKyAgICAgICAgLCBtX2luc3BlY3RvckNhbnZh
c0FnZW50KDApCiAgICAgeyB9CiAgICAgfkluc3RydW1lbnRpbmdBZ2VudHMoKSB7IH0KIApAQCAt
MTUyLDEwICsxNTAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJbnNwZWN0b3JXb3JrZXJBZ2Vu
dChJbnNwZWN0b3JXb3JrZXJBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JXb3JrZXJBZ2VudCA9
IGFnZW50OyB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShXRUJHTCkKLSAgICBJbnNwZWN0b3JXZWJH
TEFnZW50KiBpbnNwZWN0b3JXZWJHTEFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JX
ZWJHTEFnZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JXZWJHTEFnZW50KEluc3BlY3Rvcldl
YkdMQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yV2ViR0xBZ2VudCA9IGFnZW50OyB9Ci0jZW5k
aWYKKyAgICBJbnNwZWN0b3JDYW52YXNBZ2VudCogaW5zcGVjdG9yQ2FudmFzQWdlbnQoKSBjb25z
dCB7IHJldHVybiBtX2luc3BlY3RvckNhbnZhc0FnZW50OyB9CisgICAgdm9pZCBzZXRJbnNwZWN0
b3JDYW52YXNBZ2VudChJbnNwZWN0b3JDYW52YXNBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JD
YW52YXNBZ2VudCA9IGFnZW50OyB9CiAKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQWdlbnQqIG1f
aW5zcGVjdG9yQWdlbnQ7CkBAIC0xODMsOSArMTc5LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUo
V09SS0VSUykKICAgICBJbnNwZWN0b3JXb3JrZXJBZ2VudCogbV9pbnNwZWN0b3JXb3JrZXJBZ2Vu
dDsKICNlbmRpZgotI2lmIEVOQUJMRShXRUJHTCkKLSAgICBJbnNwZWN0b3JXZWJHTEFnZW50KiBt
X2luc3BlY3RvcldlYkdMQWdlbnQ7Ci0jZW5kaWYKKyAgICBJbnNwZWN0b3JDYW52YXNBZ2VudCog
bV9pbnNwZWN0b3JDYW52YXNBZ2VudDsKIH07CiAKIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRhdGlvbkZvclBhZ2UoUGFnZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Nv
bXBpbGUtZnJvbnQtZW5kLnB5CmluZGV4IDAzZWFlZWUxYmNiYjQ3ZTRhNjA5ZjI5MzAzNmNmOGE3
MTJmZjgwZjAuLjc2ZGNhZWYzNDUxOTRhYTU5YWNhODNiZDBiNDkxZGYyM2NmY2U0Y2IgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKQEAgLTMzMiw3
ICszMzIsNyBAQCBtb2R1bGVzID0gWwogICAgICAgICAgICAgIlByb2ZpbGVzUGFuZWwuanMiLAog
ICAgICAgICAgICAgIlByb2ZpbGVMYXVuY2hlclZpZXcuanMiLAogICAgICAgICAgICAgIlRvcERv
d25Qcm9maWxlRGF0YUdyaWRUcmVlLmpzIiwKLSAgICAgICAgICAgICJXZWJHTFByb2ZpbGVWaWV3
LmpzIiwKKyAgICAgICAgICAgICJDYW52YXNQcm9maWxlVmlldy5qcyIsCiAgICAgICAgIF0KICAg
ICB9LAogICAgIHsKQEAgLTQwNywxNSArNDA3LDE1IEBAIGlmIG5vdCBwcm9jZXNzX3JlY3Vyc2l2
ZWx5OgogICAgIG9zLnN5c3RlbShjb21tYW5kKQogICAgIG9zLnN5c3RlbSgicm0gIiArIGluc3Bl
Y3Rvcl9wYXRoICsgIi8iICsgIkluamVjdGVkU2NyaXB0U291cmNlVG1wLmpzIikKIAotICAgIHBy
aW50ICJDb21waWxpbmcgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcy4uLiIKLSAg
ICBvcy5zeXN0ZW0oImVjaG8gXCJ2YXIgaW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVZhbHVlID0g
XCIgPiAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVs
ZVNvdXJjZVRtcC5qcyIpCi0gICAgb3Muc3lzdGVtKCJjYXQgICIgKyBpbnNwZWN0b3JfcGF0aCAr
ICIvIiArICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzIiArICIgPj4gIiArIGlu
c3BlY3Rvcl9wYXRoICsgIi8iICsgIkluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2VUbXAu
anMiKQorICAgIHByaW50ICJDb21waWxpbmcgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3Vy
Y2UuanMuLi4iCisgICAgb3Muc3lzdGVtKCJlY2hvIFwidmFyIGluamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlVmFsdWUgPSBcIiA+ICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZVNvdXJjZVRtcC5qcyIpCisgICAgb3Muc3lzdGVtKCJjYXQgICIgKyBp
bnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5q
cyIgKyAiID4+ICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdENhbnZh
c01vZHVsZVNvdXJjZVRtcC5qcyIpCiAgICAgY29tbWFuZCA9IGNvbXBpbGVyX2NvbW1hbmQKICAg
ICBjb21tYW5kICs9ICIgICAgLS1leHRlcm5zICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJ
bmplY3RlZFNjcmlwdEV4dGVybnMuanMiICsgIiBcXFxuIgogICAgIGNvbW1hbmQgKz0gIiAgICAt
LW1vZHVsZSAiICsganNtb2R1bGVfbmFtZV9wcmVmaXggKyAiaW5qZWN0ZWRfc2NyaXB0IiArICI6
IiArICIxIiArICIgXFxcbiIKLSAgICBjb21tYW5kICs9ICIgICAgICAgIC0tanMgIiArIGluc3Bl
Y3Rvcl9wYXRoICsgIi8iICsgIkluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2VUbXAuanMi
ICsgIiBcXFxuIgorICAgIGNvbW1hbmQgKz0gIiAgICAgICAgLS1qcyAiICsgaW5zcGVjdG9yX3Bh
dGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2VUbXAuanMiICsgIiBc
XFxuIgogICAgIGNvbW1hbmQgKz0gIlxuIgogICAgIG9zLnN5c3RlbShjb21tYW5kKQotICAgIG9z
LnN5c3RlbSgicm0gIiArIGluc3BlY3Rvcl9wYXRoICsgIi8iICsgIkluamVjdGVkU2NyaXB0V2Vi
R0xNb2R1bGVTb3VyY2VUbXAuanMiKQorICAgIG9zLnN5c3RlbSgicm0gIiArIGluc3BlY3Rvcl9w
YXRoICsgIi8iICsgIkluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlVG1wLmpzIikKIAog
c2h1dGlsLnJtdHJlZShtb2R1bGVzX2RpcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ2FudmFzUHJvZmlsZVZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2MWFk
OGEzNzM5MjNkODg1MGE3ZDc0MWJkNzVlMTM0ODE3ZTMxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3LmpzCkBA
IC0wLDAgKzEsMjc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtXZWJJbnNw
ZWN0b3IuVmlld30KKyAqLworV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVWaWV3ID0gZnVuY3Rp
b24ocHJvZmlsZSkKK3sKKyAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOworICAgIHRo
aXMucmVnaXN0ZXJSZXF1aXJlZENTUygiY2FudmFzUHJvZmlsZXIuY3NzIik7CisgICAgdGhpcy5f
cHJvZmlsZSA9IHByb2ZpbGU7CisgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNhbnZh
cy1wcm9maWxlLXZpZXciKTsKKworICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudC5jbGFzc05h
bWUgPSAiY2FudmFzLXRyYWNlLWxvZyI7CisgICAgdGhpcy5fdHJhY2VMb2dFbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fb25UcmFjZUxvZ0l0ZW1DbGljay5iaW5kKHRoaXMp
LCBmYWxzZSk7CisgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3RyYWNlTG9nRWxl
bWVudCk7CisKKyAgICB2YXIgcmVwbGF5SW1hZ2VDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICByZXBsYXlJbWFnZUNvbnRhaW5lci5pZCA9ICJjYW52YXMtcmVw
bGF5LWltYWdlLWNvbnRhaW5lciI7CisgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHJlcGxh
eUltYWdlQ29udGFpbmVyKTsKKworICAgIHRoaXMuX3JlcGxheUltYWdlRWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImltYWdlIik7CisgICAgdGhpcy5fcmVwbGF5SW1hZ2VFbGVtZW50
LmlkID0gImNhbnZhcy1yZXBsYXktaW1hZ2UiOworICAgIHJlcGxheUltYWdlQ29udGFpbmVyLmFw
cGVuZENoaWxkKHRoaXMuX3JlcGxheUltYWdlRWxlbWVudCk7CisKKyAgICB0aGlzLl9kZWJ1Z0lu
Zm9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgcmVwbGF5SW1h
Z2VDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZGVidWdJbmZvRWxlbWVudCk7CisKKyAgICB0
aGlzLl9saW5raWZpZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkxpbmtpZmllcigpOworCisgICAgdGhp
cy5fc2hvd1RyYWNlTG9nKCk7Cit9CisKK1dlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVmlldy5w
cm90b3R5cGUgPSB7CisgICAgZGlzcG9zZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5fbGlua2lmaWVyLnJlc2V0KCk7CisgICAgICAgIENhbnZhc0FnZW50LmRyb3BUcmFjZUxvZyh0
aGlzLl9wcm9maWxlLnRyYWNlTG9nSWQoKSk7CisgICAgfSwKKworICAgIGdldCBzdGF0dXNCYXJJ
dGVtcygpCisgICAgeworICAgICAgICByZXR1cm4gW107CisgICAgfSwKKworICAgIGdldCBwcm9m
aWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9wcm9maWxlOworICAgIH0sCisKKyAg
ICB3YXNTaG93bjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNjcm9sbFBvc2l0aW9u
ID0gdGhpcy5fdHJhY2VMb2dFbGVtZW50U2Nyb2xsUG9zaXRpb247CisgICAgICAgIGRlbGV0ZSB0
aGlzLl90cmFjZUxvZ0VsZW1lbnRTY3JvbGxQb3NpdGlvbjsKKyAgICAgICAgaWYgKHNjcm9sbFBv
c2l0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQuc2Nyb2xsVG9wID0g
c2Nyb2xsUG9zaXRpb24udG9wOworICAgICAgICAgICAgdGhpcy5fdHJhY2VMb2dFbGVtZW50LnNj
cm9sbExlZnQgPSBzY3JvbGxQb3NpdGlvbi5sZWZ0OworICAgICAgICB9CisgICAgfSwKKworICAg
IHdpbGxIaWRlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl90cmFjZUxvZ0VsZW1l
bnRTY3JvbGxQb3NpdGlvbiA9IHsKKyAgICAgICAgICAgIHRvcDogdGhpcy5fdHJhY2VMb2dFbGVt
ZW50LnNjcm9sbFRvcCwKKyAgICAgICAgICAgIGxlZnQ6IHRoaXMuX3RyYWNlTG9nRWxlbWVudC5z
Y3JvbGxMZWZ0CisgICAgICAgIH07CisgICAgfSwKKworICAgIF9zaG93VHJhY2VMb2c6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGRpZFJlY2VpdmVUcmFjZUxvZyhlcnJvciwg
dHJhY2VMb2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudC50
ZXh0Q29udGVudCA9ICIiOworICAgICAgICAgICAgaWYgKCF0cmFjZUxvZykKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB2YXIgY2FsbHMgPSB0cmFjZUxvZy5jYWxsczsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2FsbHMubGVuZ3RoOyBpIDwgbjsgKytpKSB7
CisgICAgICAgICAgICAgICAgdmFyIGNhbGwgPSBjYWxsc1tpXTsKKyAgICAgICAgICAgICAgICB2
YXIgdHJhY2VMb2dJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAg
ICAgICAgICAgdHJhY2VMb2dJdGVtLnRyYWNlTG9nSWQgPSB0cmFjZUxvZy5pZDsKKyAgICAgICAg
ICAgICAgICB0cmFjZUxvZ0l0ZW0uc3RlcE5vID0gaTsKKyAgICAgICAgICAgICAgICB0cmFjZUxv
Z0l0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIigiICsgKGkrMSkgKyAi
KSAiKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY2FsbC5zb3VyY2VVUkwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUUoNjI3MjUpOiBzdGFjayB0cmFjZSBsaW5lL2NvbHVtbiBudW1i
ZXJzIGFyZSBvbmUtYmFzZWQuCisgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0g
TWF0aC5tYXgoMCwgY2FsbC5saW5lTnVtYmVyIC0gMSkgfHwgMDsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGNvbHVtbk51bWJlciA9IE1hdGgubWF4KDAsIGNhbGwuY29sdW1uTnVtYmVyIC0gMSkg
fHwgMDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmtFbGVtZW50ID0gdGhpcy5fbGlua2lm
aWVyLmxpbmtpZnlMb2NhdGlvbihjYWxsLnNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVt
YmVyKTsKKyAgICAgICAgICAgICAgICAgICAgbGlua0VsZW1lbnQudGV4dENvbnRlbnQgPSBjYWxs
LmZ1bmN0aW9uTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLmFwcGVuZENo
aWxkKGxpbmtFbGVtZW50KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgdHJhY2VMb2dJdGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNh
bGwuZnVuY3Rpb25OYW1lKSk7CisKKyAgICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0uYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIigiICsgY2FsbC5hcmd1bWVudHMuam9pbigi
LCAiKSArICIpIikpOworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbC5yZXN1bHQgIT09
ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0uYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiA9PiAiICsgY2FsbC5yZXN1bHQpKTsKKyAgICAg
ICAgICAgICAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQuYXBwZW5kQ2hpbGQodHJhY2VMb2dJdGVt
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBDYW52YXNBZ2VudC5nZXRUcmFj
ZUxvZyh0aGlzLl9wcm9maWxlLnRyYWNlTG9nSWQoKSwgZGlkUmVjZWl2ZVRyYWNlTG9nLmJpbmQo
dGhpcykpOworICAgIH0sCisKKyAgICBfb25UcmFjZUxvZ0l0ZW1DbGljazogZnVuY3Rpb24oZSkK
KyAgICB7CisgICAgICAgIHZhciBpdGVtID0gZS50YXJnZXQ7CisgICAgICAgIGlmICghaXRlbSB8
fCAhaXRlbS50cmFjZUxvZ0lkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgdGlt
ZSA9IERhdGUubm93KCk7CisgICAgICAgIGZ1bmN0aW9uIGRpZFJlcGxheVRyYWNlTG9nKGVycm9y
LCBkYXRhVVJMKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLl9kZWJ1Z0luZm9FbGVtZW50
LnRleHRDb250ZW50ID0gIlJlcGxheSB0aW1lOiAiICsgKERhdGUubm93KCkgLSB0aW1lKSArICJt
cyI7CisgICAgICAgICAgICBpZiAodGhpcy5fYWN0aXZlVHJhY2VMb2dJdGVtKQorICAgICAgICAg
ICAgICAgIHRoaXMuX2FjdGl2ZVRyYWNlTG9nSXRlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAi
IjsKKyAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVRyYWNlTG9nSXRlbSA9IGl0ZW07CisgICAgICAg
ICAgICB0aGlzLl9hY3RpdmVUcmFjZUxvZ0l0ZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gInll
bGxvdyI7CisgICAgICAgICAgICB0aGlzLl9yZXBsYXlJbWFnZUVsZW1lbnQuc3JjID0gZGF0YVVS
TDsKKyAgICAgICAgfQorICAgICAgICBDYW52YXNBZ2VudC5yZXBsYXlUcmFjZUxvZyhpdGVtLnRy
YWNlTG9nSWQsIGl0ZW0uc3RlcE5vLCBkaWRSZXBsYXlUcmFjZUxvZy5iaW5kKHRoaXMpKTsKKyAg
ICB9Cit9CisKK1dlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVmlldy5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3Rv
cgorICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Qcm9maWxlVHlwZX0KKyAqLworV2ViSW5zcGVj
dG9yLkNhbnZhc1Byb2ZpbGVUeXBlID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5Q
cm9maWxlVHlwZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5UeXBl
SWQsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2FwdHVyZSBDYW52YXMgRnJhbWUiKSk7CisgICAg
dGhpcy5fbmV4dFByb2ZpbGVVaWQgPSAxOworICAgIC8vIEZJWE1FOiBlbmFibGUvZGlzYWJsZSBi
eSBhIFVJIGFjdGlvbj8KKyAgICBDYW52YXNBZ2VudC5lbmFibGUoKTsKK30KKworV2ViSW5zcGVj
dG9yLkNhbnZhc1Byb2ZpbGVUeXBlLlR5cGVJZCA9ICJDQU5WQVNfUFJPRklMRSI7CisKK1dlYklu
c3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CisgICAgZ2V0IGJ1dHRvblRv
b2x0aXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2Fw
dHVyZSBDYW52YXMgRnJhbWUuIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlk
ZQorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFu
ZWwKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIGJ1dHRvbkNsaWNrZWQ6
IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCisgICAgeworICAgICAgICB2YXIgcHJvZmlsZUhlYWRl
ciA9IG5ldyBXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZUhlYWRlcih0aGlzLCBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlRyYWNlIExvZyAlZCIsIHRoaXMuX25leHRQcm9maWxlVWlkKSwgdGhpcy5f
bmV4dFByb2ZpbGVVaWQpOworICAgICAgICArK3RoaXMuX25leHRQcm9maWxlVWlkOworICAgICAg
ICBwcm9maWxlSGVhZGVyLmlzVGVtcG9yYXJ5ID0gdHJ1ZTsKKyAgICAgICAgcHJvZmlsZXNQYW5l
bC5hZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVIZWFkZXIpOworICAgICAgICBmdW5jdGlvbiBkaWRT
dGFydENhcHR1cmluZ0ZyYW1lKGVycm9yLCB0cmFjZUxvZ0lkKQorICAgICAgICB7CisgICAgICAg
ICAgICBwcm9maWxlSGVhZGVyLl90cmFjZUxvZ0lkID0gdHJhY2VMb2dJZDsKKyAgICAgICAgICAg
IHByb2ZpbGVIZWFkZXIuaXNUZW1wb3JhcnkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBD
YW52YXNBZ2VudC5jYXB0dXJlRnJhbWUoZGlkU3RhcnRDYXB0dXJpbmdGcmFtZS5iaW5kKHRoaXMp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKKyAgICBnZXQgdHJlZUl0ZW1UaXRs
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDQU5WQVMg
UFJPRklMRSIpOworICAgIH0sCisKKyAgICBnZXQgZGVzY3JpcHRpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2FudmFzIGNhbGxzIGluc3RydW1lbnRh
dGlvbiIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKi8KKyAg
ICByZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbmV4dFByb2ZpbGVVaWQg
PSAxOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0g
e3N0cmluZz19IHRpdGxlCisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFk
ZXJ9CisgICAgICovCisgICAgY3JlYXRlVGVtcG9yYXJ5UHJvZmlsZTogZnVuY3Rpb24odGl0bGUp
CisgICAgeworICAgICAgICB0aXRsZSA9IHRpdGxlIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
Q2FwdHVyaW5nXHUyMDI2Iik7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNhbnZh
c1Byb2ZpbGVIZWFkZXIodGhpcywgdGl0bGUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
b3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge1Byb2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcn0gcHJv
ZmlsZQorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQorICAgICAq
LworICAgIGNyZWF0ZVByb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlSGVhZGVyKHRoaXMsIHByb2ZpbGUu
dGl0bGUsIC0xKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZTsK
KworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUHJvZmls
ZUhlYWRlcn0KKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlfSB0eXBl
CisgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUKKyAqIEBwYXJhbSB7bnVtYmVyPX0gdWlkCisgKi8K
K1dlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlSGVhZGVyID0gZnVuY3Rpb24odHlwZSwgdGl0bGUs
IHVpZCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlci5jYWxsKHRoaXMsIHR5cGUs
IHRpdGxlLCB1aWQpOworCisgICAgLyoqCisgICAgICogQHR5cGUge3N0cmluZz99CisgICAgICov
CisgICAgdGhpcy5fdHJhY2VMb2dJZCA9IG51bGw7Cit9CisKK1dlYkluc3BlY3Rvci5DYW52YXNQ
cm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtzdHJp
bmc/fQorICAgICAqLworICAgIHRyYWNlTG9nSWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fdHJhY2VMb2dJZDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRl
CisgICAgICovCisgICAgY3JlYXRlU2lkZWJhclRyZWVFbGVtZW50OiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJhclRyZWVFbGVt
ZW50KHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVHJhY2UgTG9nICVkIiksICJwcm9maWxl
LXNpZGViYXItdHJlZS1pdGVtIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlk
ZQorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFu
ZWwKKyAgICAgKi8KKyAgICBjcmVhdGVWaWV3OiBmdW5jdGlvbihwcm9maWxlc1BhbmVsKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVZpZXcodGhp
cyk7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZUhlYWRlci5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIucHJvdG90eXBlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVs
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpz
CmluZGV4IDZhOGI0ZDg5ZjUzZDY5M2EwNWFlM2E0ZTZmMDcxMmQwOTM1YTE4ODQuLmQwZDIwYWE2
OWFjZWRkZTZkNTU5ZjA3MWQ4ZTZmYTI0MTUyYjA1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKQEAgLTI0OCw4ICsyNDgs
OCBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICAgICAgdGhp
cy5fcmVnaXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2Zp
bGVUeXBlKCkpOwogICAgIGlmIChXZWJJbnNwZWN0b3IuZXhwZXJpbWVudHNTZXR0aW5ncy5uYXRp
dmVNZW1vcnlTbmFwc2hvdHMuaXNFbmFibGVkKCkpCiAgICAgICAgIHRoaXMuX3JlZ2lzdGVyUHJv
ZmlsZVR5cGUobmV3IFdlYkluc3BlY3Rvci5OYXRpdmVNZW1vcnlQcm9maWxlVHlwZSgpKTsKLSAg
ICBpZiAoV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRzU2V0dGluZ3Mud2ViR0xJbnNwZWN0aW9uLmlz
RW5hYmxlZCgpKQotICAgICAgICB0aGlzLl9yZWdpc3RlclByb2ZpbGVUeXBlKG5ldyBXZWJJbnNw
ZWN0b3IuV2ViR0xQcm9maWxlVHlwZSgpKTsKKyAgICBpZiAoV2ViSW5zcGVjdG9yLmV4cGVyaW1l
bnRzU2V0dGluZ3MuY2FudmFzSW5zcGVjdGlvbi5pc0VuYWJsZWQoKSkKKyAgICAgICAgdGhpcy5f
cmVnaXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlKCkp
OwogCiAgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclByb2ZpbGVyRGlzcGF0Y2hlcihuZXcg
V2ViSW5zcGVjdG9yLlByb2ZpbGVyRGlzcGF0Y2hlcih0aGlzKSk7CiAKQEAgLTEzMTksNCArMTMx
OSw0IEBAIGltcG9ydFNjcmlwdCgiSGVhcFNuYXBzaG90V29ya2VyRGlzcGF0Y2hlci5qcyIpOwog
aW1wb3J0U2NyaXB0KCJOYXRpdmVNZW1vcnlTbmFwc2hvdFZpZXcuanMiKTsKIGltcG9ydFNjcmlw
dCgiUHJvZmlsZUxhdW5jaGVyVmlldy5qcyIpOwogaW1wb3J0U2NyaXB0KCJUb3BEb3duUHJvZmls
ZURhdGFHcmlkVHJlZS5qcyIpOwotaW1wb3J0U2NyaXB0KCJXZWJHTFByb2ZpbGVWaWV3LmpzIik7
CitpbXBvcnRTY3JpcHQoIkNhbnZhc1Byb2ZpbGVWaWV3LmpzIik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwppbmRleCBlMzUzODRiMDRlMmMwM2U0
NTJmZDExMDRiM2U0MDI0ZDIwMGNjMDdlLi5hMTM4Y2I2NTg1MTU1NTQ5MWEyNjU1ZGY0MDg3OGU1
MjM5NTc5NTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NldHRpbmdzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0
dGluZ3MuanMKQEAgLTE5MSw3ICsxOTEsNyBAQCBXZWJJbnNwZWN0b3IuRXhwZXJpbWVudHNTZXR0
aW5ncyA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLm5hdGl2ZU1lbW9yeVNuYXBzaG90cyA9IHRoaXMu
X2NyZWF0ZUV4cGVyaW1lbnQoIm5hdGl2ZU1lbW9yeVNuYXBzaG90cyIsICJOYXRpdmUgbWVtb3J5
IHByb2ZpbGluZyIpOwogICAgIHRoaXMubGl2ZU5hdGl2ZU1lbW9yeUNoYXJ0ID0gdGhpcy5fY3Jl
YXRlRXhwZXJpbWVudCgibGl2ZU5hdGl2ZU1lbW9yeUNoYXJ0IiwgIkxpdmUgbmF0aXZlIG1lbW9y
eSBjaGFydCIpOwogICAgIHRoaXMuZmlsZVN5c3RlbUluc3BlY3Rpb24gPSB0aGlzLl9jcmVhdGVF
eHBlcmltZW50KCJmaWxlU3lzdGVtSW5zcGVjdGlvbiIsICJGaWxlU3lzdGVtIGluc3BlY3Rpb24i
KTsKLSAgICB0aGlzLndlYkdMSW5zcGVjdGlvbiA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoIndl
YkdMSW5zcGVjdGlvbiAiLCAiV2ViR0wgaW5zcGVjdGlvbiIpOworICAgIHRoaXMuY2FudmFzSW5z
cGVjdGlvbiA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoImNhbnZhc0luc3BlY3Rpb24gIiwgIkNh
bnZhcyBpbnNwZWN0aW9uIik7CiAgICAgdGhpcy5tYWluVGhyZWFkTW9uaXRvcmluZyA9IHRoaXMu
X2NyZWF0ZUV4cGVyaW1lbnQoIm1haW5UaHJlYWRNb25pdG9yaW5nIiwgIlNob3cgQ1BVIGFjdGl2
aXR5IGluIFRpbWVsaW5lIik7CiAgICAgdGhpcy5nZW9sb2NhdGlvbk92ZXJyaWRlID0gdGhpcy5f
Y3JlYXRlRXhwZXJpbWVudCgiZ2VvbG9jYXRpb25PdmVycmlkZSIsICJPdmVycmlkZSBEZXZpY2Ug
R2VvbG9jYXRpb24iKTsKICAgICB0aGlzLmRldmljZU9yaWVudGF0aW9uT3ZlcnJpZGUgPSB0aGlz
Ll9jcmVhdGVFeHBlcmltZW50KCJkZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRlIiwgIk92ZXJyaWRl
IERldmljZSBPcmllbnRhdGlvbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9XZWJHTFByb2ZpbGVWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9XZWJHTFByb2ZpbGVWaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2MDI4NTM2Yzg4MjExNDMwZWJhODk3OWFkYzZjYTM1OGZjNjAwMjBiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvV2ViR0xQcm9maWxlVmlldy5qcworKysgL2Rldi9udWxsCkBAIC0x
LDI3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0
b3IuVmlld30KLSAqLwotV2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZVZpZXcgPSBmdW5jdGlvbihw
cm9maWxlKQotewotICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5y
ZWdpc3RlclJlcXVpcmVkQ1NTKCJ3ZWJHTFByb2ZpbGVyLmNzcyIpOwotICAgIHRoaXMuX3Byb2Zp
bGUgPSBwcm9maWxlOwotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ3ZWJnbC1wcm9m
aWxlLXZpZXciKTsKLQotICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudC5jbGFzc05hbWUgPSAi
d2ViZ2wtdHJhY2UtbG9nIjsKLSAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCB0aGlzLl9vblRyYWNlTG9nSXRlbUNsaWNrLmJpbmQodGhpcyksIGZhbHNl
KTsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fdHJhY2VMb2dFbGVtZW50KTsK
LQotICAgIHZhciByZXBsYXlJbWFnZUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwotICAgIHJlcGxheUltYWdlQ29udGFpbmVyLmlkID0gIndlYmdsLXJlcGxheS1pbWFn
ZS1jb250YWluZXIiOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChyZXBsYXlJbWFnZUNv
bnRhaW5lcik7Ci0KLSAgICB0aGlzLl9yZXBsYXlJbWFnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpbWFnZSIpOwotICAgIHRoaXMuX3JlcGxheUltYWdlRWxlbWVudC5pZCA9ICJ3
ZWJnbC1yZXBsYXktaW1hZ2UiOwotICAgIHJlcGxheUltYWdlQ29udGFpbmVyLmFwcGVuZENoaWxk
KHRoaXMuX3JlcGxheUltYWdlRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9kZWJ1Z0luZm9FbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgcmVwbGF5SW1hZ2VDb250YWlu
ZXIuYXBwZW5kQ2hpbGQodGhpcy5fZGVidWdJbmZvRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9saW5r
aWZpZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkxpbmtpZmllcigpOwotCi0gICAgdGhpcy5fc2hvd1Ry
YWNlTG9nKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVWaWV3LnByb3RvdHlwZSA9
IHsKLSAgICBkaXNwb3NlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9saW5raWZp
ZXIucmVzZXQoKTsKLSAgICAgICAgV2ViR0xBZ2VudC5kcm9wVHJhY2VMb2codGhpcy5fcHJvZmls
ZS50cmFjZUxvZ0lkKCkpOwotICAgIH0sCi0KLSAgICBnZXQgc3RhdHVzQmFySXRlbXMoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFtdOwotICAgIH0sCi0KLSAgICBnZXQgcHJvZmlsZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fcHJvZmlsZTsKLSAgICB9LAotCi0gICAgd2FzU2hvd246
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzY3JvbGxQb3NpdGlvbiA9IHRoaXMuX3Ry
YWNlTG9nRWxlbWVudFNjcm9sbFBvc2l0aW9uOwotICAgICAgICBkZWxldGUgdGhpcy5fdHJhY2VM
b2dFbGVtZW50U2Nyb2xsUG9zaXRpb247Ci0gICAgICAgIGlmIChzY3JvbGxQb3NpdGlvbikgewot
ICAgICAgICAgICAgdGhpcy5fdHJhY2VMb2dFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFBvc2l0
aW9uLnRvcDsKLSAgICAgICAgICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudC5zY3JvbGxMZWZ0ID0g
c2Nyb2xsUG9zaXRpb24ubGVmdDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICB3aWxsSGlkZTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fdHJhY2VMb2dFbGVtZW50U2Nyb2xsUG9z
aXRpb24gPSB7Ci0gICAgICAgICAgICB0b3A6IHRoaXMuX3RyYWNlTG9nRWxlbWVudC5zY3JvbGxU
b3AsCi0gICAgICAgICAgICBsZWZ0OiB0aGlzLl90cmFjZUxvZ0VsZW1lbnQuc2Nyb2xsTGVmdAot
ICAgICAgICB9OwotICAgIH0sCi0KLSAgICBfc2hvd1RyYWNlTG9nOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBmdW5jdGlvbiBkaWRSZWNlaXZlVHJhY2VMb2coZXJyb3IsIHRyYWNlTG9nKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQudGV4dENvbnRlbnQg
PSAiIjsKLSAgICAgICAgICAgIGlmICghdHJhY2VMb2cpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgdmFyIGNhbGxzID0gdHJhY2VMb2cuY2FsbHM7Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMCwgbiA9IGNhbGxzLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgICAg
ICAgICAgIHZhciBjYWxsID0gY2FsbHNbaV07Ci0gICAgICAgICAgICAgICAgdmFyIHRyYWNlTG9n
SXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgICAgIHRy
YWNlTG9nSXRlbS50cmFjZUxvZ0lkID0gdHJhY2VMb2cuaWQ7Ci0gICAgICAgICAgICAgICAgdHJh
Y2VMb2dJdGVtLnN0ZXBObyA9IGk7Ci0gICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIoIiArIChpKzEpICsgIikgIikpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKGNhbGwuc291cmNlVVJMKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FKDYyNzI1KTogc3RhY2sgdHJhY2UgbGluZS9jb2x1bW4gbnVtYmVycyBhcmUgb25l
LWJhc2VkLgotICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IE1hdGgubWF4KDAs
IGNhbGwubGluZU51bWJlciAtIDEpIHx8IDA7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1
bW5OdW1iZXIgPSBNYXRoLm1heCgwLCBjYWxsLmNvbHVtbk51bWJlciAtIDEpIHx8IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBsaW5rRWxlbWVudCA9IHRoaXMuX2xpbmtpZmllci5saW5raWZ5
TG9jYXRpb24oY2FsbC5zb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0gICAg
ICAgICAgICAgICAgICAgIGxpbmtFbGVtZW50LnRleHRDb250ZW50ID0gY2FsbC5mdW5jdGlvbk5h
bWU7Ci0gICAgICAgICAgICAgICAgICAgIHRyYWNlTG9nSXRlbS5hcHBlbmRDaGlsZChsaW5rRWxl
bWVudCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRyYWNl
TG9nSXRlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjYWxsLmZ1bmN0aW9u
TmFtZSkpOwotCi0gICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCIoIiArIGNhbGwuYXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIp
KTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGwucmVzdWx0ICE9PSAidW5kZWZpbmVk
IikKLSAgICAgICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCIgPT4gIiArIGNhbGwucmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAg
dGhpcy5fdHJhY2VMb2dFbGVtZW50LmFwcGVuZENoaWxkKHRyYWNlTG9nSXRlbSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgV2ViR0xBZ2VudC5nZXRUcmFjZUxvZyh0aGlzLl9w
cm9maWxlLnRyYWNlTG9nSWQoKSwgZGlkUmVjZWl2ZVRyYWNlTG9nLmJpbmQodGhpcykpOwotICAg
IH0sCi0KLSAgICBfb25UcmFjZUxvZ0l0ZW1DbGljazogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAg
ICAgIHZhciBpdGVtID0gZS50YXJnZXQ7Ci0gICAgICAgIGlmICghaXRlbSB8fCAhaXRlbS50cmFj
ZUxvZ0lkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgdGltZSA9IERhdGUubm93
KCk7Ci0gICAgICAgIGZ1bmN0aW9uIGRpZFJlcGxheVRyYWNlTG9nKGVycm9yLCBkYXRhVVJMKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl9kZWJ1Z0luZm9FbGVtZW50LnRleHRDb250ZW50
ID0gIlJlcGxheSB0aW1lOiAiICsgKERhdGUubm93KCkgLSB0aW1lKSArICJtcyI7Ci0gICAgICAg
ICAgICBpZiAodGhpcy5fYWN0aXZlVHJhY2VMb2dJdGVtKQotICAgICAgICAgICAgICAgIHRoaXMu
X2FjdGl2ZVRyYWNlTG9nSXRlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiIjsKLSAgICAgICAg
ICAgIHRoaXMuX2FjdGl2ZVRyYWNlTG9nSXRlbSA9IGl0ZW07Ci0gICAgICAgICAgICB0aGlzLl9h
Y3RpdmVUcmFjZUxvZ0l0ZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gInllbGxvdyI7Ci0gICAg
ICAgICAgICB0aGlzLl9yZXBsYXlJbWFnZUVsZW1lbnQuc3JjID0gZGF0YVVSTDsKLSAgICAgICAg
fQotICAgICAgICBXZWJHTEFnZW50LnJlcGxheVRyYWNlTG9nKGl0ZW0udHJhY2VMb2dJZCwgaXRl
bS5zdGVwTm8sIGRpZFJlcGxheVRyYWNlTG9nLmJpbmQodGhpcykpOwotICAgIH0KLX0KLQotV2Vi
SW5zcGVjdG9yLldlYkdMUHJvZmlsZVZpZXcucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3Bl
Y3Rvci5WaWV3LnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGV9Ci0gKi8KLVdlYkluc3BlY3Rvci5XZWJHTFByb2Zp
bGVUeXBlID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5jYWxs
KHRoaXMsIFdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVUeXBlLlR5cGVJZCwgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJDYXB0dXJlIFdlYkdMIEZyYW1lIikpOwotICAgIHRoaXMuX25leHRQcm9maWxl
VWlkID0gMTsKLSAgICAvLyBGSVhNRTogZW5hYmxlL2Rpc2FibGUgYnkgYSBVSSBhY3Rpb24/Ci0g
ICAgV2ViR0xBZ2VudC5lbmFibGUoKTsKLX0KLQotV2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZVR5
cGUuVHlwZUlkID0gIldFQkdMX1BST0ZJTEUiOwotCi1XZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxl
VHlwZS5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IGJ1dHRvblRvb2x0aXAoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2FwdHVyZSBXZWJHTCBmcmFtZS4iKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuUHJvZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAotICAgICAqIEByZXR1cm4ge2Jv
b2xlYW59Ci0gICAgICovCi0gICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24ocHJvZmlsZXNQYW5l
bCkKLSAgICB7Ci0gICAgICAgIHZhciBwcm9maWxlSGVhZGVyID0gbmV3IFdlYkluc3BlY3Rvci5X
ZWJHTFByb2ZpbGVIZWFkZXIodGhpcywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUcmFjZSBMb2cg
JWQiLCB0aGlzLl9uZXh0UHJvZmlsZVVpZCksIHRoaXMuX25leHRQcm9maWxlVWlkKTsKLSAgICAg
ICAgKyt0aGlzLl9uZXh0UHJvZmlsZVVpZDsKLSAgICAgICAgcHJvZmlsZUhlYWRlci5pc1RlbXBv
cmFyeSA9IHRydWU7Ci0gICAgICAgIHByb2ZpbGVzUGFuZWwuYWRkUHJvZmlsZUhlYWRlcihwcm9m
aWxlSGVhZGVyKTsKLSAgICAgICAgZnVuY3Rpb24gZGlkU3RhcnRDYXB0dXJpbmdGcmFtZShlcnJv
ciwgdHJhY2VMb2dJZCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJvZmlsZUhlYWRlci5fdHJh
Y2VMb2dJZCA9IHRyYWNlTG9nSWQ7Ci0gICAgICAgICAgICBwcm9maWxlSGVhZGVyLmlzVGVtcG9y
YXJ5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgV2ViR0xBZ2VudC5jYXB0dXJlRnJhbWUo
ZGlkU3RhcnRDYXB0dXJpbmdGcmFtZS5iaW5kKHRoaXMpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0sCi0KLSAgICBnZXQgdHJlZUl0ZW1UaXRsZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJXRUJHTCBQUk9GSUxFIik7Ci0gICAgfSwKLQotICAg
IGdldCBkZXNjcmlwdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJXZWJHTCBjYWxscyBpbnN0cnVtZW50YXRpb24iKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQG92ZXJyaWRlCi0gICAgICovCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX25leHRQcm9maWxlVWlkID0gMTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtzdHJpbmc9fSB0aXRsZQotICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQotICAgICAqLwotICAgIGNyZWF0ZVRl
bXBvcmFyeVByb2ZpbGU6IGZ1bmN0aW9uKHRpdGxlKQotICAgIHsKLSAgICAgICAgdGl0bGUgPSB0
aXRsZSB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhcHR1cmluZ1x1MjAyNiIpOwotICAgICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVIZWFkZXIodGhpcywgdGl0bGUp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge1By
b2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQotICAgICAqIEByZXR1cm4ge1dlYklu
c3BlY3Rvci5Qcm9maWxlSGVhZGVyfQotICAgICAqLwotICAgIGNyZWF0ZVByb2ZpbGU6IGZ1bmN0
aW9uKHByb2ZpbGUpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5XZWJH
TFByb2ZpbGVIZWFkZXIodGhpcywgcHJvZmlsZS50aXRsZSwgLTEpOwotICAgIH0KLX0KLQotV2Vi
SW5zcGVjdG9yLldlYkdMUHJvZmlsZVR5cGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3Bl
Y3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5cGU7Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
ZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9Ci0gKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5XZWJHTFByb2ZpbGVUeXBlfSB0eXBlCi0gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUKLSAq
IEBwYXJhbSB7bnVtYmVyPX0gdWlkCi0gKi8KLVdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVIZWFk
ZXIgPSBmdW5jdGlvbih0eXBlLCB0aXRsZSwgdWlkKQotewotICAgIFdlYkluc3BlY3Rvci5Qcm9m
aWxlSGVhZGVyLmNhbGwodGhpcywgdHlwZSwgdGl0bGUsIHVpZCk7Ci0KLSAgICAvKioKLSAgICAg
KiBAdHlwZSB7c3RyaW5nP30KLSAgICAgKi8KLSAgICB0aGlzLl90cmFjZUxvZ0lkID0gbnVsbDsK
LX0KLQotV2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZUhlYWRlci5wcm90b3R5cGUgPSB7Ci0gICAg
LyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nP30KLSAgICAgKi8KLSAgICB0cmFjZUxvZ0lkOiBm
dW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWNlTG9nSWQ7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqLwotICAgIGNyZWF0ZVNpZGViYXJUcmVl
RWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuUHJvZmlsZVNpZGViYXJUcmVlRWxlbWVudCh0aGlzLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IlRyYWNlIExvZyAlZCIpLCAicHJvZmlsZS1zaWRlYmFyLXRyZWUtaXRlbSIpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Q
cm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCi0gICAgICovCi0gICAgY3JlYXRlVmlldzogZnVu
Y3Rpb24ocHJvZmlsZXNQYW5lbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVj
dG9yLldlYkdMUHJvZmlsZVZpZXcodGhpcyk7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuV2Vi
R0xQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUHJvZmls
ZUhlYWRlci5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1dlYktpdC5xcmMKaW5kZXggY2ZlYjE5NGU0YzMxNWY3YmRhYzFkNDgyZjJkN2FhNDQ4MTA4MTM1
OS4uYWM2NDk0N2EzMTliMTkzOTExNThmMmM1ZWU4NDE1MjljOTQ4MDFjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAtMTQsNiArMTQsNyBA
QAogICAgIDxmaWxlPkJyZWFrcG9pbnRNYW5hZ2VyLmpzPC9maWxlPgogICAgIDxmaWxlPkJyZWFr
cG9pbnRzU2lkZWJhclBhbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+Q2FsbFN0YWNrU2lkZWJhclBh
bmUuanM8L2ZpbGU+CisgICAgPGZpbGU+Q2FudmFzUHJvZmlsZVZpZXcuanM8L2ZpbGU+CiAgICAg
PGZpbGU+Q2hlY2tib3guanM8L2ZpbGU+CiAgICAgPGZpbGU+Q29kZU1pcnJvclRleHRFZGl0b3Iu
anM8L2ZpbGU+CiAgICAgPGZpbGU+Q29sb3IuanM8L2ZpbGU+CkBAIC0yMTAsMTMgKzIxMSwxMyBA
QAogICAgIDxmaWxlPnV0aWxpdGllcy5qczwvZmlsZT4KICAgICA8ZmlsZT5WaWV3LmpzPC9maWxl
PgogICAgIDxmaWxlPldhdGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5qczwvZmlsZT4KLSAgICA8
ZmlsZT5XZWJHTFByb2ZpbGVWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPldvcmtlck1hbmFnZXIu
anM8L2ZpbGU+CiAgICAgPGZpbGU+V29ya2Vyc1NpZGViYXJQYW5lLmpzPC9maWxlPgogICAgIDxm
aWxlPldvcmtzcGFjZS5qczwvZmlsZT4KICAgICA8ZmlsZT5VZ2xpZnlKUy9wYXJzZS1qcy5qczwv
ZmlsZT4KICAgICA8ZmlsZT5hdWRpdHNQYW5lbC5jc3M8L2ZpbGU+CiAgICAgPGZpbGU+YnJlYWRj
cnVtYkxpc3QuY3NzPC9maWxlPgorICAgIDxmaWxlPmNhbnZhc1Byb2ZpbGVyLmNzczwvZmlsZT4K
ICAgICA8ZmlsZT5jc3NOYW1lZEZsb3dzLmNzczwvZmlsZT4KICAgICA8ZmlsZT5kYXRhR3JpZC5j
c3M8L2ZpbGU+CiAgICAgPGZpbGU+Y21kZXZ0b29scy5jc3M8L2ZpbGU+CkBAIC0yNDUsNyArMjQ2
LDYgQEAKICAgICA8ZmlsZT50ZXh0RWRpdG9yLmNzczwvZmlsZT4KICAgICA8ZmlsZT50ZXh0UHJv
bXB0LmNzczwvZmlsZT4KICAgICA8ZmlsZT50aW1lbGluZVBhbmVsLmNzczwvZmlsZT4KLSAgICA8
ZmlsZT53ZWJHTFByb2ZpbGVyLmNzczwvZmlsZT4KICAgICA8ZmlsZT5JbWFnZXMvYXBwbGljYXRp
b25DYWNoZS5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2JhY2sucG5nPC9maWxlPgogICAg
IDxmaWxlPkltYWdlcy9icmVha3BvaW50Qm9yZGVyLnBuZzwvZmlsZT4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY2FudmFzUHJvZmlsZXIuY3NzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jYW52YXNQcm9maWxlci5jc3MKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uY2I0YjRhNTMwZDBlYzY5NGNiMWI4NTFiMGMxZjA2MDI0MDhiYmE5ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY2FudmFzUHJvZmls
ZXIuY3NzCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisuY2FudmFzLXByb2ZpbGUtdmlldyB7CisgICAgb3ZlcmZs
b3c6IGhpZGRlbjsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGxl
ZnQ6IDA7CisgICAgcmlnaHQ6IDA7CisgICAgYm90dG9tOiAwOworfQorCisuY2FudmFzLXRyYWNl
LWxvZyB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMTBweDsKKyAgICBsZWZ0
OiAwOworICAgIGJvdHRvbTogMTBweDsKKyAgICBmb250LXNpemU6IDEzcHg7CisgICAgb3ZlcmZs
b3c6IGF1dG87CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICBwYWRkaW5nOiAwIDIwcHg7
Cit9CisKKy5jYW52YXMtdHJhY2UtbG9nIGRpdiB7CisgICAgcGFkZGluZy1ib3R0b206IDRweDsK
K30KKworI2NhbnZhcy1yZXBsYXktaW1hZ2UtY29udGFpbmVyIHsKKyAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgdG9wOiAwOworICAgIHBhZGRpbmc6IDEwcHg7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Cit9CisKKyNjYW52YXMtcmVwbGF5LWltYWdlIHsK
KyAgICB3aWR0aDogNDAwcHg7CisgICAgaGVpZ2h0OiA0MDBweDsKKyAgICBkaXNwbGF5OiBibG9j
azsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvd2Vi
R0xQcm9maWxlci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3dlYkdM
UHJvZmlsZXIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTE2ODFhNjNjNDM4
Y2FlYWRiMjMxZTI1MzY3M2Y2MGM4ZDZiMThlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvd2Vi
R0xQcm9maWxlci5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLndlYmdsLXByb2Zp
bGUtdmlldyB7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7
Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAw
OwotfQotCi0ud2ViZ2wtdHJhY2UtbG9nIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAg
dG9wOiAxMHB4OwotICAgIGxlZnQ6IDA7Ci0gICAgYm90dG9tOiAxMHB4OwotICAgIGZvbnQtc2l6
ZTogMTNweDsKLSAgICBvdmVyZmxvdzogYXV0bzsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwot
ICAgIHBhZGRpbmc6IDAgMjBweDsKLX0KLQotLndlYmdsLXRyYWNlLWxvZyBkaXYgewotICAgIHBh
ZGRpbmctYm90dG9tOiA0cHg7Ci19Ci0KLSN3ZWJnbC1yZXBsYXktaW1hZ2UtY29udGFpbmVyIHsK
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgdG9wOiAwOwotICAg
IHBhZGRpbmc6IDEwcHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci19Ci0KLSN3ZWJn
bC1yZXBsYXktaW1hZ2UgewotICAgIHdpZHRoOiA0MDBweDsKLSAgICBoZWlnaHQ6IDQwMHB4Owot
ICAgIGRpc3BsYXk6IGJsb2NrOwotfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDExODgwM2EyMzY1ZTA2ZDQ0OWY2ZDJiM2Zl
ZDFiNGZmMDlhNzMwZDAuLmVmN2Q5NDQ2OTZjY2Q0OTU3NGZlNDIxY2NmNTFkNzdjNzM4NjA3YjMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wOS0xNyAgQW5kcmV5IEFkYWlraW4gIDxhYW5k
cmV5QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbV2ViR0xdIC0+IFtD
YW52YXNdIFJlbmFtZSBXZWJHTEFnZW50IHRvIENhbnZhc0FnZW50CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjkxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL3Byb2ZpbGVyL3dlYmds
L3dlYmdsLXByb2ZpbGVyLWdldC1lcnJvci5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9wcm9m
aWxlci93ZWJnbC93ZWJnbC1wcm9maWxlci10ZXN0LmpzOgorICAgICAgICAoaW5pdGlhbGl6ZV9D
YW52YXNXZWJHTFByb2ZpbGVyVGVzdC5JbnNwZWN0b3JUZXN0LmVuYWJsZUNhbnZhc0FnZW50KToK
KyAgICAgICAgKGluaXRpYWxpemVfQ2FudmFzV2ViR0xQcm9maWxlclRlc3QpOgorCiAyMDEyLTA5
LTE5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI4OTc2LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3Byb2ZpbGVyL3dlYmdsL3dlYmdsLXByb2ZpbGVyLWdldC1lcnJvci5odG1s
IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL3dlYmdsL3dlYmdsLXByb2ZpbGVyLWdl
dC1lcnJvci5odG1sCmluZGV4IDliNjU4NTY0YmRiMzU5MTAxZTJkZWYxOGYzMzIyOTVmZDdhOTJj
OTAuLjVkZDI1OTc3ZGI5ZGYyMDIwZDdhYTlhMzhhNDZkNjFlODFlNzI3OWYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci93ZWJnbC93ZWJnbC1wcm9maWxlci1nZXQt
ZXJyb3IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvd2ViZ2wvd2Vi
Z2wtcHJvZmlsZXItZ2V0LWVycm9yLmh0bWwKQEAgLTExNyw3ICsxMTcsNyBAQCBmdW5jdGlvbiBj
cmVhdGVBbmRSdW5XZWJHTFByb2dyYW0oKQogCiBmdW5jdGlvbiB0ZXN0KCkKIHsKLSAgICBJbnNw
ZWN0b3JUZXN0LmVuYWJsZVdlYkdMQWdlbnQoc3RlcDEpOworICAgIEluc3BlY3RvclRlc3QuZW5h
YmxlQ2FudmFzQWdlbnQoc3RlcDEpOwogICAgIGZ1bmN0aW9uIHN0ZXAxKCkKICAgICB7CiAgICAg
ICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJbkNvbnNvbGUoImNyZWF0ZUFuZFJ1bldlYkdMUHJv
Z3JhbSgpIiwgc3RlcDIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2Zp
bGVyL3dlYmdsL3dlYmdsLXByb2ZpbGVyLXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cHJvZmlsZXIvd2ViZ2wvd2ViZ2wtcHJvZmlsZXItdGVzdC5qcwppbmRleCA5N2JmNTYwZjE5MDc0
ZDgyNjc1M2I1YjM0ZGIzNWEwMmE5OGYyMGYzLi41MGYzZjVlYmI4NDJhNDk1ODQ4NGE1ZDViOTdm
YmYwZWE1NzFiN2RiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIv
d2ViZ2wvd2ViZ2wtcHJvZmlsZXItdGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cHJvZmlsZXIvd2ViZ2wvd2ViZ2wtcHJvZmlsZXItdGVzdC5qcwpAQCAtMSwyMCArMSwyMCBAQAot
dmFyIGluaXRpYWxpemVfV2ViR0xQcm9maWxlclRlc3QgPSBmdW5jdGlvbigpIHsKK3ZhciBpbml0
aWFsaXplX0NhbnZhc1dlYkdMUHJvZmlsZXJUZXN0ID0gZnVuY3Rpb24oKSB7CiAKLUluc3BlY3Rv
clRlc3QuZW5hYmxlV2ViR0xBZ2VudCA9IGZ1bmN0aW9uKGNhbGxiYWNrKQorSW5zcGVjdG9yVGVz
dC5lbmFibGVDYW52YXNBZ2VudCA9IGZ1bmN0aW9uKGNhbGxiYWNrKQogewotICAgIGZ1bmN0aW9u
IHdlYkdMQWdlbnRFbmFibGVkKGVycm9yKQorICAgIGZ1bmN0aW9uIGNhbnZhc0FnZW50RW5hYmxl
ZChlcnJvcikKICAgICB7CiAgICAgICAgIGlmICghZXJyb3IpCiAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LnNhZmVXcmFwKGNhbGxiYWNrKSgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJGQUlMRUQgdG8gZW5hYmxlIFdlYkdMQWdlbnQ6ICIg
KyBlcnJvcik7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiRkFJTEVEIHRv
IGVuYWJsZSBDYW52YXNBZ2VudDogIiArIGVycm9yKTsKICAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuY29tcGxldGVUZXN0KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgdHJ5IHsKLSAgICAgICAg
V2ViR0xBZ2VudC5lbmFibGUod2ViR0xBZ2VudEVuYWJsZWQpOworICAgICAgICBDYW52YXNBZ2Vu
dC5lbmFibGUoY2FudmFzQWdlbnRFbmFibGVkKTsKICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAg
IEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJFeGNlcHRpb24gd2hpbGUgZW5hYmxpbmcgV2ViR0xB
Z2VudCIsIGUpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiRXhjZXB0aW9uIHdo
aWxlIGVuYWJsaW5nIENhbnZhc0FnZW50IiwgZSk7CiAgICAgICAgIEluc3BlY3RvclRlc3QuY29t
cGxldGVUZXN0KCk7CiAgICAgfQogfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>