<?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>92348</bug_id>
          
          <creation_ts>2012-07-26 01:24:03 -0700</creation_ts>
          <short_desc>Web Inspector: Profiles: extract save to file / load from code</short_desc>
          <delta_ts>2012-08-03 03:28:44 -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>92390</dependson>
          <blocked>91991</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter>eustas.bug</reporter>
          <assigned_to>eustas.bug</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>caseq</cc>
    
    <cc>eustas.bug</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>679014</commentid>
    <comment_count>0</comment_count>
    <who name="">eustas.bug</who>
    <bug_when>2012-07-26 01:24:03 -0700</bug_when>
    <thetext>Motivation: extract reusable code for timeline load/save.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679029</commentid>
    <comment_count>1</comment_count>
      <attachid>154575</attachid>
    <who name="">eustas.bug</who>
    <bug_when>2012-07-26 01:36:10 -0700</bug_when>
    <thetext>Created attachment 154575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679196</commentid>
    <comment_count>2</comment_count>
      <attachid>154575</attachid>
    <who name="">eustas.bug</who>
    <bug_when>2012-07-26 05:22:21 -0700</bug_when>
    <thetext>Comment on attachment 154575
Patch

Preparing new patch, based on review notes in 91991.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679203</commentid>
    <comment_count>3</comment_count>
      <attachid>154619</attachid>
    <who name="">eustas.bug</who>
    <bug_when>2012-07-26 05:35:23 -0700</bug_when>
    <thetext>Created attachment 154619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679272</commentid>
    <comment_count>4</comment_count>
      <attachid>154619</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-07-26 06:46:28 -0700</bug_when>
    <thetext>Comment on attachment 154619
Patch

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

&gt; Source/WebCore/ChangeLog:19
&gt; +        transfer process: onTransferStarted, onChunktransfered, onTransferFinished.

typo: onChunktransfered -&gt; onChunkTransferred

&gt; Source/WebCore/inspector/front-end/FileUtils.js:34
&gt; +WebInspector.ChunkedTransferrerDelegate = function()

Maybe ChunkedTransferDelegate ?

&gt; Source/WebCore/inspector/front-end/FileUtils.js:67
&gt; +    this.onerror = null;

Can you make it private and pass onerror handler into the constructor, or better add onError method to ChunkedTransferrerDelegate?

&gt; Source/WebCore/inspector/front-end/FileUtils.js:74
&gt; +    start: function(output)

Why do we have separate ChunkedTransferrer and not merge it into ChunkedTransferrerDelegate ?

&gt; Source/WebCore/inspector/front-end/FileUtils.js:87
&gt; +    getLoadedSize: function()

We don&apos;t use get prefix for getters in WebKit.

&gt; Source/WebCore/inspector/front-end/HeapSnapshotLoader.js:-45
&gt; -    startLoading: function(callback)

Why did it change? It should only be invoked by HeapSnapshotLoaderProxy and I don&apos;t see why it is affected by this patch.

&gt; Source/WebCore/inspector/front-end/HeapSnapshotLoader.js:69
&gt; +        for (var i = startIndex; i &lt; lastIndex; ++i) {

Why did it change?

&gt; Source/WebCore/inspector/front-end/HeapSnapshotProxy.js:404
&gt; +            snapshotProxy.updateStaticData(notifyPendingConsumers.bind(this));

Could you make heap profiler loading changes in a separate patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679354</commentid>
    <comment_count>5</comment_count>
      <attachid>154619</attachid>
    <who name="">eustas.bug</who>
    <bug_when>2012-07-26 08:22:04 -0700</bug_when>
    <thetext>Comment on attachment 154619
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:19
&gt;&gt; +        transfer process: onTransferStarted, onChunktransfered, onTransferFinished.
&gt; 
&gt; typo: onChunktransfered -&gt; onChunkTransferred

fixed.

&gt;&gt; Source/WebCore/inspector/front-end/FileUtils.js:34
&gt;&gt; +WebInspector.ChunkedTransferrerDelegate = function()
&gt; 
&gt; Maybe ChunkedTransferDelegate ?

Done.

&gt;&gt; Source/WebCore/inspector/front-end/FileUtils.js:67
&gt;&gt; +    this.onerror = null;
&gt; 
&gt; Can you make it private and pass onerror handler into the constructor, or better add onError method to ChunkedTransferrerDelegate?

Done.

&gt;&gt; Source/WebCore/inspector/front-end/FileUtils.js:74
&gt;&gt; +    start: function(output)
&gt; 
&gt; Why do we have separate ChunkedTransferrer and not merge it into ChunkedTransferrerDelegate ?

Separate transferrer are more useful than merged class: transferrer may be something out of our control while delegate is always managed.
In our case ChunkedFileWriter is a transferrer, to receive notifications from it we pass it a delegate.
ChunkedFileReader is not a transferrer, but &quot;output&quot; is not an object we want to add behavior to, because it is used for different transfer types.
So we add behavior through delegate notifications.

&gt;&gt; Source/WebCore/inspector/front-end/FileUtils.js:87
&gt;&gt; +    getLoadedSize: function()
&gt; 
&gt; We don&apos;t use get prefix for getters in WebKit.

fixed

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshotLoader.js:-45
&gt;&gt; -    startLoading: function(callback)
&gt; 
&gt; Why did it change? It should only be invoked by HeapSnapshotLoaderProxy and I don&apos;t see why it is affected by this patch.

Because it was declared to implement HeapSnapshotReceiver, which is ChunkedTransferrer now.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshotLoader.js:69
&gt;&gt; +        for (var i = startIndex; i &lt; lastIndex; ++i) {
&gt; 
&gt; Why did it change?

This method will be reused in next patch. It is not moved do FileUtils, to make review easier.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshotProxy.js:404
&gt;&gt; +            snapshotProxy.updateStaticData(notifyPendingConsumers.bind(this));
&gt; 
&gt; Could you make heap profiler loading changes in a separate patch?

OK, I&apos;ll add it as a dependent issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679371</commentid>
    <comment_count>6</comment_count>
      <attachid>154659</attachid>
    <who name="">eustas.bug</who>
    <bug_when>2012-07-26 08:45:22 -0700</bug_when>
    <thetext>Created attachment 154659
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684035</commentid>
    <comment_count>7</comment_count>
      <attachid>155767</attachid>
    <who name="">eustas.bug</who>
    <bug_when>2012-08-01 02:56:49 -0700</bug_when>
    <thetext>Created attachment 155767
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684197</commentid>
    <comment_count>8</comment_count>
      <attachid>155767</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-08-01 08:10:56 -0700</bug_when>
    <thetext>Comment on attachment 155767
Patch

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

&gt; Source/WebCore/inspector/front-end/HeapSnapshotLoader.js:74
&gt; -    _findBalancedCurlyBrackets: function()
&gt; +    /**
&gt; +     * @param {!string} source
&gt; +     * @param {number=} startIndex
&gt; +     * @param {number=} lastIndex
&gt; +     * @return {!number}
&gt; +     */
&gt; +    _findBalancedCurlyBrackets: function(source, startIndex, lastIndex)
&gt;      {
&gt; +        startIndex = startIndex || 0;
&gt; +        lastIndex = lastIndex || source.length;
&gt;          var counter = 0;
&gt;          var openingBracket = &quot;{&quot;.charCodeAt(0), closingBracket = &quot;}&quot;.charCodeAt(0);
&gt; -        for (var i = 0, l = this._json.length; i &lt; l; ++i) {
&gt; -            var character = this._json.charCodeAt(i);
&gt; -            if (character === openingBracket)
&gt; +        for (var i = startIndex; i &lt; lastIndex; ++i) {
&gt; +            var charCode = source.charCodeAt(i);
&gt; +            if (charCode === openingBracket)
&gt;                  ++counter;
&gt; -            else if (character === closingBracket) {
&gt; +            else if (charCode === closingBracket) {
&gt;                  if (--counter === 0)

it is not clear why did you change this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684216</commentid>
    <comment_count>9</comment_count>
      <attachid>155767</attachid>
    <who name="">eustas.bug</who>
    <bug_when>2012-08-01 09:02:34 -0700</bug_when>
    <thetext>Comment on attachment 155767
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshotLoader.js:74
&gt;&gt;                  if (--counter === 0)
&gt; 
&gt; it is not clear why did you change this.

1) I&apos;m going to reuse this code for Timeline loading
2) character to charcode was proposed by Alexander.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685253</commentid>
    <comment_count>10</comment_count>
      <attachid>155767</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-08-02 05:36:22 -0700</bug_when>
    <thetext>Comment on attachment 155767
Patch

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

&gt;&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshotLoader.js:74
&gt;&gt;&gt;                  if (--counter === 0)
&gt;&gt; 
&gt;&gt; it is not clear why did you change this.
&gt; 
&gt; 1) I&apos;m going to reuse this code for Timeline loading
&gt; 2) character to charcode was proposed by Alexander.

Ok. I&apos;d prefer to see this change as a part of your next patch. Otherwise looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685277</commentid>
    <comment_count>11</comment_count>
      <attachid>155767</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-08-02 06:02:50 -0700</bug_when>
    <thetext>Comment on attachment 155767
Patch

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

&gt; Source/WebCore/inspector/front-end/FileUtils.js:83
&gt; +        if (this._delegate)

Can we require the delegate passed to WebInspector.ChunkedFileReader constructor to always be non-null? This way we would avoid many null-checks and could inline _onError.

&gt; Source/WebCore/inspector/front-end/HeapSnapshotView.js:790
&gt; +WebInspector.ChunkedTransferrer = function()

Should we rename it to ChunkedTransfer for consistency?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685281</commentid>
    <comment_count>12</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-08-02 06:10:08 -0700</bug_when>
    <thetext>(In reply to comment #11)
 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshotView.js:790
&gt; &gt; +WebInspector.ChunkedTransferrer = function()
&gt; 
&gt; Should we rename it to ChunkedTransfer for consistency?

How about OutputStream?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685520</commentid>
    <comment_count>13</comment_count>
      <attachid>155767</attachid>
    <who name="">eustas.bug</who>
    <bug_when>2012-08-02 09:56:27 -0700</bug_when>
    <thetext>Comment on attachment 155767
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/FileUtils.js:83
&gt;&gt; +        if (this._delegate)
&gt; 
&gt; Can we require the delegate passed to WebInspector.ChunkedFileReader constructor to always be non-null? This way we would avoid many null-checks and could inline _onError.

Done.

&gt;&gt;&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshotLoader.js:74
&gt;&gt;&gt;&gt;                  if (--counter === 0)
&gt;&gt;&gt; 
&gt;&gt;&gt; it is not clear why did you change this.
&gt;&gt; 
&gt;&gt; 1) I&apos;m going to reuse this code for Timeline loading
&gt;&gt; 2) character to charcode was proposed by Alexander.
&gt; 
&gt; Ok. I&apos;d prefer to see this change as a part of your next patch. Otherwise looks good.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685554</commentid>
    <comment_count>14</comment_count>
      <attachid>156118</attachid>
    <who name="">eustas.bug</who>
    <bug_when>2012-08-02 10:36:21 -0700</bug_when>
    <thetext>Created attachment 156118
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686516</commentid>
    <comment_count>15</comment_count>
      <attachid>156118</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-03 03:28:39 -0700</bug_when>
    <thetext>Comment on attachment 156118
Patch

Clearing flags on attachment: 156118

Committed r124591: &lt;http://trac.webkit.org/changeset/124591&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686517</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-03 03:28:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154575</attachid>
            <date>2012-07-26 01:36:10 -0700</date>
            <delta_ts>2012-07-26 05:35:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92348-20120726123558.patch</filename>
            <type>text/plain</type>
            <size>41304</size>
            <attacher>eustas.bug</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTNhNzVlZGZlN2ZlY2Fk
Y2FjOGU2YTYzOGZiYjEzMTQ5NjdkOWQzOC4uMzg3NmU3MGYzY2QzYzMzZjE0Y2VjNzg3MzA1MGY4
NzgwZjZmYjgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEyLTA3LTI2ICBFdWdl
bmUgS2x5dWNobmlrb3YgIDxldXN0YXMuYmlnQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBQcm9maWxlczogZXh0cmFjdCBzYXZlIHRvIGZpbGUgLyBsb2FkIGZyb20gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3RpdmF0aW9u
OiBleHRyYWN0IHJldXNhYmxlIGNvZGUgZm9yIHRpbWVsaW5lIGxvYWQvc2F2ZS4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgJ0ZpbGVVdGlscy5qcycuCisgICAgICAgICogV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIGluc3BlY3Rvci9jb21w
aWxlLWZyb250LWVuZC5weTogRGl0dG8uCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9G
aWxlVXRpbHMuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2Zl
cmVyRGVsZWdhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlcmVyRGVs
ZWdhdGUucHJvdG90eXBlLm9uVHJhbnNmZXJTdGFydGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5DaHVua2VkVHJhbnNmZXJlckRlbGVnYXRlLnByb3RvdHlwZS5vbkNodW5rVHJhbnNmZXJlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVyZXJEZWxlZ2F0ZS5wcm90b3R5
cGUub25UcmFuc2ZlckZpbmlzaGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaHVua2VkRmls
ZVJlYWRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVSZWFkZXIucHJvdG90
eXBlLnN0YXJ0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaHVua2VkRmlsZVJlYWRlci5wcm90
b3R5cGUuZ2V0TG9hZGVkU2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVS
ZWFkZXIucHJvdG90eXBlLmdldEZpbGVTaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaHVu
a2VkRmlsZVJlYWRlci5wcm90b3R5cGUuX29uTG9hZEVycm9yKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5DaHVua2VkRmlsZVJlYWRlci5wcm90b3R5cGUuX29uQ2h1bmtMb2FkZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNodW5rZWRGaWxlUmVhZGVyLnByb3RvdHlwZS5fbG9hZENodW5rKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5jcmVhdGVGaWxlU2VsZWN0b3JFbGVtZW50LmZpbGVTZWxl
Y3RvckVsZW1lbnQub25jaGFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmNyZWF0ZUZpbGVT
ZWxlY3RvckVsZW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90TG9hZGVyLmpzOiAKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIu
cHJvdG90eXBlLnN0YXJ0VHJhbnNmZXIpOgorICAgICAgICBBZG9wdGVkIG5ldyBBUEkuCisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyLnByb3RvdHlwZS5fZmluZEJhbGFu
Y2VkQ3VybHlCcmFja2V0cyk6CisgICAgICAgIEdlbmVyYWxpemVkLgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUuZmluaXNoVHJhbnNmZXIpOgorICAg
ICAgICBBZG9wdGVkIG5ldyBBUEkuCisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
TG9hZGVyLnByb3RvdHlwZS5idWlsZFNuYXBzaG90KTogRGl0dG8uCisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyLnByb3RvdHlwZS50cmFuc2ZlckNodW5rKTogRGl0dG8u
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXJQcm94eSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyUHJveHkucHJvdG90eXBlLnN0YXJ0VHJhbnNm
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXJQcm94
eS5wcm90b3R5cGUuaXNTdGFydGVkKTogRGl0dG8uCisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90TG9hZGVyUHJveHkucHJvdG90eXBlLmFkZENvbnN1bWVyKTogRGl0dG8uCisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyUHJveHkucHJvdG90eXBlLnRyYW5z
ZmVyQ2h1bmspOiBEaXR0by4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2Fk
ZXJQcm94eS5wcm90b3R5cGUuZmluaXNoVHJhbnNmZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXJQcm94eS5wcm90b3R5cGUuZmluaXNoVHJhbnNmZXIu
dXBkYXRlU3RhdGljRGF0YSk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdExvYWRlclByb3h5LnByb3RvdHlwZS5maW5pc2hUcmFuc2Zlci5ub3RpZnlQ
ZW5kaW5nQ29uc3VtZXJzKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNodW5r
ZWRUcmFuc2ZlcmVyKTogUmVuYW1lZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaHVua2VkVHJh
bnNmZXJlci5wcm90b3R5cGUuc3RhcnRUcmFuc2Zlcik6IERpdHRvLgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkNodW5rZWRUcmFuc2ZlcmVyLnByb3RvdHlwZS50cmFuc2ZlckNodW5rKTogRGl0dG8u
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVyZXIucHJvdG90eXBlLmZpbmlz
aFRyYW5zZmVyKTogRGl0dG8uCisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFk
ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5s
b2FkKTogQWRvcHRlZCBuZXcgQVBJLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxl
SGVhZGVyLnByb3RvdHlwZS5fc2V0dXBXb3JrZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUuX3NhdmVTdGF0dXNVcGRhdGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUudHJh
bnNmZXJDaHVuayk6IERpdHRvLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVh
ZGVyLnByb3RvdHlwZS5fc25hcHNob3RSZWNlaXZlZCk6IERpdHRvLgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5maW5pc2hIZWFwU25hcHNob3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUu
Y2FuU2F2ZVRvRmlsZSk6IERpdHRvLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxl
SGVhZGVyLnByb3RvdHlwZS5zYXZlVG9GaWxlKTogRGl0dG8uCisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLl9jcmVhdGVGaWxlV3JpdGVyKTogRGl0dG8u
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLmxvYWRG
cm9tRmlsZSk6IERpdHRvLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVy
LnByb3RvdHlwZS5fY3JlYXRlRmlsZVJlYWRlcik6IERpdHRvLgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdExvYWRGcm9tRmlsZURlbGVnYXRlKToKKyAgICAgICAgRXh0cmFjdGVk
IGZyb20gZXhpc3RpbmcgY29kZS4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RM
b2FkRnJvbUZpbGVEZWxlZ2F0ZS5wcm90b3R5cGUub25UcmFuc2ZlclN0YXJ0ZWQpOgorICAgICAg
ICBEaXR0by4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkRnJvbUZpbGVE
ZWxlZ2F0ZS5wcm90b3R5cGUub25DaHVua1RyYW5zZmVyZWQpOgorICAgICAgICBEaXR0by4KKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkRnJvbUZpbGVEZWxlZ2F0ZS5wcm90
b3R5cGUub25UcmFuc2ZlckZpbmlzaGVkKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ2h1bmtlZEZpbGVXcml0ZXIpOiBSZWZhY3RvcmVkLgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkNodW5rZWRGaWxlV3JpdGVyLnByb3RvdHlwZS5zdGFydFRyYW5zZmVyKTogRGl0dG8u
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVXcml0ZXIucHJvdG90eXBlLnRyYW5z
ZmVyQ2h1bmspOiBEaXR0by4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaHVua2VkRmlsZVdyaXRl
ci5wcm90b3R5cGUuZmluaXNoVHJhbnNmZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5DaHVua2VkRmlsZVdyaXRlci5wcm90b3R5cGUuX29uVHJhbnNmZXJTdGFydGVkKTogRGl0dG8u
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVXcml0ZXIucHJvdG90eXBlLl9vbkNo
dW5rVHJhbnNmZXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFNhdmVUb0ZpbGVEZWxlZ2F0ZSk6CisgICAgICAgIEV4dHJhY3RlZCBmcm9tIGV4aXN0aW5nIGNv
ZGUuCisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2F2ZVRvRmlsZURlbGVnYXRl
LnByb3RvdHlwZS5vblRyYW5zZmVyU3RhcnRlZCk6CisgICAgICAgIERpdHRvLgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNhdmVUb0ZpbGVEZWxlZ2F0ZS5wcm90b3R5cGUub25D
aHVua1RyYW5zZmVyZWQpOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RTYXZlVG9GaWxlRGVsZWdhdGUucHJvdG90eXBlLm9uVHJhbnNmZXJGaW5pc2hl
ZCk6CisgICAgICAgIERpdHRvLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUHJvZmls
ZXNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlw
ZS5fY3JlYXRlRmlsZVNlbGVjdG9yRWxlbWVudCk6CisgICAgICAgIFJlZmFjdG9yZWQuCisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX2FkZEhlYXBTbmFwc2hv
dENodW5rKToKKyAgICAgICAgQWRvcHRlZCBuZXcgQVBJLgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9maW5pc2hIZWFwU25hcHNob3QpOgorICAgICAgICBE
aXR0by4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmM6IEFkZGVkICdG
aWxlVXRpbHMuanMnLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0
bWw6IEFkZGVkICdGaWxlVXRpbHMuanMnLgorCiAyMDEyLTA3LTI0ICBTaGF3biBTaW5naCAgPHNo
YXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOiBtb3ZlIHJvb3QgbGF5ZXIgc3BlY2lhbCBjYXNlIGluaXRpYWxp
emF0aW9uIGludG8gaW50ZXJuYWwgY29kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjOTFjNDE1MTcw
ODlhNWRlMDUyYTBkNjNmMTUwZjBiMzMxMTYxZmUwLi4yZTdiZDAxMzA1NjkxYjZlMGI4NDc2ODgw
YTZjNTRkMjJiNWIwNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC02MjgyLDYgKzYyODIsNyBAQAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZUNvbnRlbnRWaWV3LmpzJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVTeXN0ZW1Nb2RlbC5qcycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlU3lzdGVtVmlldy5qcycsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlVXRpbHMuanMnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvRmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nLmpzJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ZvbnRWaWV3LmpzJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL0dvVG9MaW5lRGlhbG9nLmpzJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNTVjYTBhZjVlODA4MTE4NDAxMGQ1
MTA4ODFmODFmMTc3N2VhNDllYy4uZWU3MzljZDlmMGNlOTU1N2E2OTExNzQxYzVhM2E3NWVlNTQ2
MDVjZSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
QEAgLTc1MzgyLDYgKzc1MzgyLDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEZpbGVVdGlscy5qcyIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcZmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nLmNzcyIKIAkJCQkJ
PgogCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21w
aWxlLWZyb250LWVuZC5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250
LWVuZC5weQppbmRleCBkOTIzMzkzYWNmOTIwZTA0MzE5M2EwZGQ5MTA4NjdmMDIxM2ZkYTU1Li5h
OWRlYzg2YjdhZGRhM2I5M2MzMzJhYWJhMTA2YTBiNTE1YTlkNjJlIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CkBAIC04Miw2ICs4Miw3IEBAIG1v
ZHVsZXMgPSBbCiAgICAgICAgICAgICAiRGVidWdnZXJTY3JpcHRNYXBwaW5nLmpzIiwKICAgICAg
ICAgICAgICJGaWxlTWFuYWdlci5qcyIsCiAgICAgICAgICAgICAiRmlsZVN5c3RlbU1vZGVsLmpz
IiwKKyAgICAgICAgICAgICJGaWxlVXRpbHMuanMiLAogICAgICAgICAgICAgIkhBUkVudHJ5Lmpz
IiwKICAgICAgICAgICAgICJJbmRleGVkREJNb2RlbC5qcyIsCiAgICAgICAgICAgICAiTGlua2lm
aWVyLmpzIiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RmlsZVV0aWxzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlVXRp
bHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWJmYjg0ODA0NjYzYzE3ZjZlODA5NzM0NzlhY2ZkZjA1ZjZmYWI4
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RmlsZVV0aWxzLmpzCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAaW50ZXJmYWNlCisgKi8KK1dl
Ykluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJlckRlbGVnYXRlID0gZnVuY3Rpb24oKQoreworfQor
CitXZWJJbnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVyZXJEZWxlZ2F0ZS5wcm90b3R5cGUgPSB7Cisg
ICAgb25UcmFuc2ZlclN0YXJ0ZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKKyAgICB7CisgICAgfSwKKwor
ICAgIG9uQ2h1bmtUcmFuc2ZlcmVkOiBmdW5jdGlvbihzb3VyY2UpCisgICAgeworICAgIH0sCisK
KyAgICBvblRyYW5zZmVyRmluaXNoZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKKyAgICB7CisgICAgfQor
fQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHshRmlsZX0gZmlsZQorICogQHBh
cmFtIHshbnVtYmVyfSBjaHVua1NpemUKKyAqIEBwYXJhbSB7P1dlYkluc3BlY3Rvci5DaHVua2Vk
VHJhbnNmZXJlckRlbGVnYXRlPX0gZGVsZWdhdGUKKyAqLworV2ViSW5zcGVjdG9yLkNodW5rZWRG
aWxlUmVhZGVyID0gZnVuY3Rpb24oZmlsZSwgY2h1bmtTaXplLCBkZWxlZ2F0ZSkKK3sKKyAgICB0
aGlzLl9maWxlID0gZmlsZTsKKyAgICB0aGlzLl9maWxlU2l6ZSA9IGZpbGUuc2l6ZTsKKyAgICB0
aGlzLl9sb2FkZWRTaXplID0gMDsKKyAgICB0aGlzLl9jaHVua1NpemUgPSBjaHVua1NpemU7Cisg
ICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKworICAgIC8qKiBAdHlwZSB7P2Z1bmN0aW9u
KEV2ZW50KX0gKi8KKyAgICB0aGlzLm9uZXJyb3IgPSBudWxsOworfQorCitXZWJJbnNwZWN0b3Iu
Q2h1bmtlZEZpbGVSZWFkZXIucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
IVdlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJlcn0gb3V0cHV0CisgICAgICovCisgICAgc3Rh
cnQ6IGZ1bmN0aW9uKG91dHB1dCkKKyAgICB7CisgICAgICAgIHRoaXMuX291dHB1dCA9IG91dHB1
dDsKKworICAgICAgICB0aGlzLl9yZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAgICAgICB0
aGlzLl9yZWFkZXIub25sb2FkID0gdGhpcy5fb25DaHVua0xvYWRlZC5iaW5kKHRoaXMpOworICAg
ICAgICB0aGlzLl9yZWFkZXIub25lcnJvciA9IHRoaXMuX29uTG9hZEVycm9yLmJpbmQodGhpcyk7
CisgICAgICAgIHRoaXMuX291dHB1dC5zdGFydFRyYW5zZmVyKCk7CisgICAgICAgIHRoaXMuX2Rl
bGVnYXRlICYmIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNmZXJTdGFydGVkKHRoaXMpOworICAgICAg
ICB0aGlzLl9sb2FkQ2h1bmsoKTsKKyAgICB9LAorCisgICAgZ2V0TG9hZGVkU2l6ZTogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZFNpemU7CisgICAgfSwKKwor
ICAgIGdldEZpbGVTaXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
ZmlsZVNpemU7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50
CisgICAgICovCisgICAgX29uTG9hZEVycm9yOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLm9uZXJyb3IpCisgICAgICAgICAgICB0aGlzLm9uZXJyb3IoZXZlbnQpOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICAgICAqLwor
ICAgIF9vbkNodW5rTG9hZGVkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGlmIChl
dmVudC50YXJnZXQucmVhZHlTdGF0ZSAhPT0gRmlsZVJlYWRlci5ET05FKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHZhciBkYXRhID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAg
ICAgdGhpcy5fbG9hZGVkU2l6ZSArPSBkYXRhLmxlbmd0aDsKKworICAgICAgICB0aGlzLl9vdXRw
dXQudHJhbnNmZXJDaHVuayhkYXRhKTsKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUgJiYgdGhpcy5f
ZGVsZWdhdGUub25DaHVua1RyYW5zZmVyZWQodGhpcyk7CisKKyAgICAgICAgaWYgKHRoaXMuX2xv
YWRlZFNpemUgPT09IHRoaXMuX2ZpbGVTaXplKSB7CisgICAgICAgICAgICB0aGlzLl9maWxlID0g
bnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3JlYWRlciA9IG51bGw7CisgICAgICAgICAgICB0aGlz
Ll9vdXRwdXQuZmluaXNoVHJhbnNmZXIoKTsKKyAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlICYm
IHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNmZXJGaW5pc2hlZCh0aGlzKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2xvYWRDaHVuaygpOworICAgIH0sCisK
KyAgICBfbG9hZENodW5rOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgY2h1bmtTdGFy
dCA9IHRoaXMuX2xvYWRlZFNpemU7CisgICAgICAgIHZhciBjaHVua0VuZCA9IE1hdGgubWluKHRo
aXMuX2ZpbGVTaXplLCBjaHVua1N0YXJ0ICsgdGhpcy5fY2h1bmtTaXplKQorICAgICAgICB2YXIg
bmV4dFBhcnQgPSB0aGlzLl9maWxlLndlYmtpdFNsaWNlKGNodW5rU3RhcnQsIGNodW5rRW5kKTsK
KyAgICAgICAgdGhpcy5fcmVhZGVyLnJlYWRBc1RleHQobmV4dFBhcnQpOworICAgIH0KK30KKwor
LyoqCisgKiBAcGFyYW0geyFmdW5jdGlvbihGaWxlKX0gY2FsbGJhY2sKKyAqIEByZXR1cm4ge05v
ZGV9CisgKi8KK1dlYkluc3BlY3Rvci5jcmVhdGVGaWxlU2VsZWN0b3JFbGVtZW50ID0gZnVuY3Rp
b24oY2FsbGJhY2spIHsKKyAgICB2YXIgZmlsZVNlbGVjdG9yRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAgZmlsZVNlbGVjdG9yRWxlbWVudC50eXBlID0gImZp
bGUiOworICAgIGZpbGVTZWxlY3RvckVsZW1lbnQuc3R5bGUuekluZGV4ID0gLTE7CisgICAgZmls
ZVNlbGVjdG9yRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CisgICAgZmlsZVNl
bGVjdG9yRWxlbWVudC5vbmNoYW5nZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGNhbGxi
YWNrKGZpbGVTZWxlY3RvckVsZW1lbnQuZmlsZXNbMF0pOworICAgIH07CisgICAgcmV0dXJuIGZp
bGVTZWxlY3RvckVsZW1lbnQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzCmluZGV4IDA4NGVmOTYzNTk2ZDhi
YzIxYTA5NmRkYzg5N2YwNTEyNTliMTc4MjkuLjU5YWM4OTY1MTY1ZWIwYzUzYjliNGUzZmE4ZDM2
ZTAwMGQxYjQ5MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzCkBAIC0zMCw3ICszMCw3IEBACiAKIC8qKgog
ICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFJlY2VpdmVyfQorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJl
cn0KICAqLwogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlciA9IGZ1bmN0aW9uKCkKIHsK
QEAgLTM4LDEzICszOCw4IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIgPSBmdW5j
dGlvbigpCiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0g
ewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFByb3h5KX0gY2FsbGJhY2sKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwot
ICAgIHN0YXJ0TG9hZGluZzogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgc3RhcnRUcmFuc2Zlcjog
ZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwKIAogICAgIGRp
c3Bvc2U6IGZ1bmN0aW9uKCkKQEAgLTU5LDEyICs1NCwyMCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fc25hcHNob3QgPSB7fTsK
ICAgICB9LAogCi0gICAgX2ZpbmRCYWxhbmNlZEN1cmx5QnJhY2tldHM6IGZ1bmN0aW9uKCkKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0geyFzdHJpbmd9IHNvdXJjZQorICAgICAqIEBwYXJhbSB7bnVt
YmVyPX0gc3RhcnRJbmRleAorICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbGFzdEluZGV4CisgICAg
ICogQHJldHVybiB7IW51bWJlcn0KKyAgICAgKi8KKyAgICBfZmluZEJhbGFuY2VkQ3VybHlCcmFj
a2V0czogZnVuY3Rpb24oc291cmNlLCBzdGFydEluZGV4LCBsYXN0SW5kZXgpCiAgICAgeworICAg
ICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA/IHN0YXJ0SW5kZXggOiAwOworICAgICAgICBs
YXN0SW5kZXggPSBsYXN0SW5kZXggPyBsYXN0SW5kZXggOiBzb3VyY2UubGVuZ3RoOwogICAgICAg
ICB2YXIgY291bnRlciA9IDA7CiAgICAgICAgIHZhciBvcGVuaW5nQnJhY2tldCA9ICJ7Ii5jaGFy
Q29kZUF0KDApLCBjbG9zaW5nQnJhY2tldCA9ICJ9Ii5jaGFyQ29kZUF0KDApOwotICAgICAgICBm
b3IgKHZhciBpID0gMCwgbCA9IHRoaXMuX2pzb24ubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgY2hhcmFjdGVyID0gdGhpcy5fanNvbi5jaGFyQ29kZUF0KGkpOworICAgICAg
ICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IGxhc3RJbmRleDsgKytpKSB7CisgICAgICAg
ICAgICB2YXIgY2hhcmFjdGVyID0gc291cmNlLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgICAgICBp
ZiAoY2hhcmFjdGVyID09PSBvcGVuaW5nQnJhY2tldCkKICAgICAgICAgICAgICAgICArK2NvdW50
ZXI7CiAgICAgICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IGNsb3NpbmdCcmFja2V0KSB7
CkBAIC03NSwxMSArNzgsMTQgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9LAogCi0gICAgZmluaXNoTG9hZGlu
ZzogZnVuY3Rpb24oKQorICAgIGZpbmlzaFRyYW5zZmVyOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBpZiAodGhpcy5fanNvbikKKyAgICAgICAgICAgIHRoaXMuX3BhcnNlU3RyaW5nc0FycmF5
KCk7CisgICAgfSwKKworICAgIGJ1aWxkU25hcHNob3Q6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIGlmICghdGhpcy5fanNvbikKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB0
aGlzLl9wYXJzZVN0cmluZ3NBcnJheSgpOwogICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3QodGhpcy5fc25hcHNob3QpOwogICAgICAgICB0aGlzLl9yZXNl
dCgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTM1LDcgKzE0MSw3IEBAIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBjaHVuawogICAgICAqLwotICAgIHB1c2hKU09OQ2h1bms6IGZ1bmN0aW9u
KGNodW5rKQorICAgIHRyYW5zZmVyQ2h1bms6IGZ1bmN0aW9uKGNodW5rKQogICAgIHsKICAgICAg
ICAgdGhpcy5fanNvbiArPSBjaHVuazsKICAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkgewpA
QCAtMTQ2LDE3ICsxNTIsMTcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTbmFwc2hvdCB0b2tl
biBub3QgZm91bmQiKTsKICAgICAgICAgICAgIHRoaXMuX2pzb24gPSB0aGlzLl9qc29uLnNsaWNl
KHNuYXBzaG90VG9rZW5JbmRleCArIHNuYXBzaG90VG9rZW4ubGVuZ3RoICsgMSk7CiAgICAgICAg
ICAgICB0aGlzLl9zdGF0ZSA9ICJwYXJzZS1zbmFwc2hvdC1pbmZvIjsKLSAgICAgICAgICAgIHRo
aXMucHVzaEpTT05DaHVuaygiIik7CisgICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAicGFyc2Utc25h
cHNob3QtaW5mbyI6IHsKLSAgICAgICAgICAgIHZhciBjbG9zaW5nQnJhY2tldEluZGV4ID0gdGhp
cy5fZmluZEJhbGFuY2VkQ3VybHlCcmFja2V0cygpOworICAgICAgICAgICAgdmFyIGNsb3NpbmdC
cmFja2V0SW5kZXggPSB0aGlzLl9maW5kQmFsYW5jZWRDdXJseUJyYWNrZXRzKHRoaXMuX2pzb24p
OwogICAgICAgICAgICAgaWYgKGNsb3NpbmdCcmFja2V0SW5kZXggPT09IC0xKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHRoaXMuX3NuYXBzaG90LnNuYXBzaG90ID0gLyoq
IEB0eXBlIHtIZWFwU25hcHNob3RIZWFkZXJ9ICovSlNPTi5wYXJzZSh0aGlzLl9qc29uLnNsaWNl
KDAsIGNsb3NpbmdCcmFja2V0SW5kZXgpKTsKICAgICAgICAgICAgIHRoaXMuX2pzb24gPSB0aGlz
Ll9qc29uLnNsaWNlKGNsb3NpbmdCcmFja2V0SW5kZXgpOwogICAgICAgICAgICAgdGhpcy5fc3Rh
dGUgPSAiZmluZC1ub2RlcyI7Ci0gICAgICAgICAgICB0aGlzLnB1c2hKU09OQ2h1bmsoIiIpOwor
ICAgICAgICAgICAgdGhpcy50cmFuc2ZlckNodW5rKCIiKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgImZpbmQtbm9kZXMiOiB7CkBAIC0xNzMsNyArMTc5LDcg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICB0aGlzLl9hcnJheSA9IG5ldyBVaW50MzJBcnJheShub2Rlc19sZW5ndGgpOwogICAgICAg
ICAgICAgdGhpcy5fYXJyYXlJbmRleCA9IDA7CiAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICJw
YXJzZS1ub2RlcyI7Ci0gICAgICAgICAgICB0aGlzLnB1c2hKU09OQ2h1bmsoIiIpOworICAgICAg
ICAgICAgdGhpcy50cmFuc2ZlckNodW5rKCIiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgInBhcnNlLW5vZGVzIjogewpAQCAtMTgyLDcgKzE4OCw3IEBAIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAg
dGhpcy5fc25hcHNob3Qubm9kZXMgPSB0aGlzLl9hcnJheTsKICAgICAgICAgICAgIHRoaXMuX3N0
YXRlID0gImZpbmQtZWRnZXMiOwogICAgICAgICAgICAgdGhpcy5fYXJyYXkgPSBudWxsOwotICAg
ICAgICAgICAgdGhpcy5wdXNoSlNPTkNodW5rKCIiKTsKKyAgICAgICAgICAgIHRoaXMudHJhbnNm
ZXJDaHVuaygiIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
ICJmaW5kLWVkZ2VzIjogewpAQCAtMTk5LDcgKzIwNSw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fYXJyYXkgPSBuZXcg
VWludDMyQXJyYXkoZWRnZXNfbGVuZ3RoKTsKICAgICAgICAgICAgIHRoaXMuX2FycmF5SW5kZXgg
PSAwOwogICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAicGFyc2UtZWRnZXMiOwotICAgICAgICAg
ICAgdGhpcy5wdXNoSlNPTkNodW5rKCIiKTsKKyAgICAgICAgICAgIHRoaXMudHJhbnNmZXJDaHVu
aygiIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlICJwYXJz
ZS1lZGdlcyI6IHsKQEAgLTIwOCw3ICsyMTQsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX3NuYXBzaG90LmVkZ2VzID0g
dGhpcy5fYXJyYXk7CiAgICAgICAgICAgICB0aGlzLl9hcnJheSA9IG51bGw7CiAgICAgICAgICAg
ICB0aGlzLl9zdGF0ZSA9ICJmaW5kLXN0cmluZ3MiOwotICAgICAgICAgICAgdGhpcy5wdXNoSlNP
TkNodW5rKCIiKTsKKyAgICAgICAgICAgIHRoaXMudHJhbnNmZXJDaHVuaygiIik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlICJmaW5kLXN0cmluZ3MiOiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hv
dFByb3h5LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNo
b3RQcm94eS5qcwppbmRleCAxMjc3ZGE1NmJlYjIyNmRkYjIyODk1YzIwY2E4NGQwZDZlZGUzZWIw
Li5lOTM1OTlkODdhMzI5ZTk0MmE2ZjM5MzhhNTVkYWNiY2UwNjhiZGViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHku
anMKQEAgLTM1NSw1MyArMzU1LDYzIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eU9i
amVjdC5wcm90b3R5cGUgPSB7CiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1dl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eU9iamVjdH0KLSAqIEBpbXBsZW1lbnRzIHtXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UmVjZWl2ZXJ9CisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVj
dG9yLkNodW5rZWRUcmFuc2ZlcmVyfQogICovCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9h
ZGVyUHJveHkgPSBmdW5jdGlvbih3b3JrZXIsIG9iamVjdElkKQogewogICAgIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm94eU9iamVjdC5jYWxsKHRoaXMsIHdvcmtlciwgb2JqZWN0SWQpOwot
ICAgIHRoaXMuX29uTG9hZENhbGxiYWNrcyA9IFtdOworICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxz
ZTsKKyAgICB0aGlzLl9wZW5kaW5nU25hcHNob3RDb25zdW1lcnMgPSBbXTsKIH0KIAogV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5LnByb3RvdHlwZSA9IHsKKyAgICBzdGFydFRy
YW5zZmVyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTsK
KyAgICAgICAgdGhpcy5jYWxsTWV0aG9kKG51bGwsICJzdGFydFRyYW5zZmVyIik7CisgICAgfSwK
KworICAgIGlzU3RhcnRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3N0YXJ0ZWQ7CisgICAgfSwKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5KX0gY2FsbGJhY2sKLSAgICAgKiBAcmV0dXJuIHti
b29sZWFufQogICAgICAqLwotICAgIHN0YXJ0TG9hZGluZzogZnVuY3Rpb24oY2FsbGJhY2spCisg
ICAgYWRkQ29uc3VtZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgdmFyIGxv
YWRpbmdIYXNKdXN0U3RhcnRlZCA9ICF0aGlzLl9vbkxvYWRDYWxsYmFja3MubGVuZ3RoOwotICAg
ICAgICB0aGlzLl9vbkxvYWRDYWxsYmFja3MucHVzaChjYWxsYmFjayk7Ci0gICAgICAgIHJldHVy
biBsb2FkaW5nSGFzSnVzdFN0YXJ0ZWQ7CisgICAgICAgIHRoaXMuX3BlbmRpbmdTbmFwc2hvdENv
bnN1bWVycy5wdXNoKGNhbGxiYWNrKTsKICAgICB9LAogCiAgICAgLyoqCiAgICAgICogQHBhcmFt
IHtzdHJpbmd9IGNodW5rCiAgICAgICovCi0gICAgcHVzaEpTT05DaHVuazogZnVuY3Rpb24oY2h1
bmspCisgICAgdHJhbnNmZXJDaHVuazogZnVuY3Rpb24oY2h1bmspCiAgICAgewotICAgICAgICB0
aGlzLmNhbGxNZXRob2QobnVsbCwgInB1c2hKU09OQ2h1bmsiLCBjaHVuayk7CisgICAgICAgIHRo
aXMuY2FsbE1ldGhvZChudWxsLCAidHJhbnNmZXJDaHVuayIsIGNodW5rKTsKICAgICB9LAogCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJveHkpfSBjYWxsYmFjawotICAgICAqLwotICAgIGZpbmlzaExvYWRpbmc6IGZ1bmN0aW9uKGNh
bGxiYWNrKQorICAgIGZpbmlzaFRyYW5zZmVyOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0
aGlzLl9vbkxvYWRDYWxsYmFja3MudW5zaGlmdChjYWxsYmFjayk7Ci0KKyAgICAgICAgZnVuY3Rp
b24gYnVpbGRTbmFwc2hvdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuY2FsbEZhY3Rv
cnlNZXRob2QodXBkYXRlU3RhdGljRGF0YS5iaW5kKHRoaXMpLCAiYnVpbGRTbmFwc2hvdCIsICJX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkiKTsKKyAgICAgICAgfQogICAgICAgICBmdW5j
dGlvbiB1cGRhdGVTdGF0aWNEYXRhKHNuYXBzaG90UHJveHkpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHRoaXMuZGlzcG9zZSgpOwotICAgICAgICAgICAgc25hcHNob3RQcm94eS51cGRhdGVTdGF0
aWNEYXRhKGNhbGxMb2FkQ2FsbGJhY2tzLmJpbmQodGhpcykpOworICAgICAgICAgICAgc25hcHNo
b3RQcm94eS51cGRhdGVTdGF0aWNEYXRhKG5vdGlmeVBlbmRpbmdDb25zdW1lcnMuYmluZCh0aGlz
KSk7CiAgICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gY2FsbExvYWRDYWxsYmFja3Moc25hcHNo
b3RQcm94eSkKKyAgICAgICAgZnVuY3Rpb24gbm90aWZ5UGVuZGluZ0NvbnN1bWVycyhzbmFwc2hv
dFByb3h5KQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
X29uTG9hZENhbGxiYWNrcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9vbkxv
YWRDYWxsYmFja3NbaV0oc25hcHNob3RQcm94eSk7Ci0gICAgICAgICAgICB0aGlzLl9vbkxvYWRD
YWxsYmFja3MgPSBudWxsOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9w
ZW5kaW5nU25hcHNob3RDb25zdW1lcnMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgdGhp
cy5fcGVuZGluZ1NuYXBzaG90Q29uc3VtZXJzW2ldKHNuYXBzaG90UHJveHkpOworCisgICAgICAg
ICAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLl9wZW5kaW5nU25h
cHNob3RDb25zdW1lcnMgPSBbXTsKICAgICAgICAgfQotICAgICAgICB0aGlzLmNhbGxGYWN0b3J5
TWV0aG9kKHVwZGF0ZVN0YXRpY0RhdGEuYmluZCh0aGlzKSwgImZpbmlzaExvYWRpbmciLCAiV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5Iik7CisgICAgICAgIHRoaXMuY2FsbE1ldGhvZChi
dWlsZFNuYXBzaG90LmJpbmQodGhpcyksICJmaW5pc2hUcmFuc2ZlciIpOwogICAgIH0KIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90Vmlldy5qcwppbmRleCBhMTE4M2I3ZTcwZTAyYjM5MTdiNDM4NTRjMTZjNTFkM2MwMGQ5MTcw
Li4wYjAwZWE2N2QwN2ZmMzIxZmQyMDkzMWE3YmQ2ODczYWYxYjcwMDgxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3Lmpz
CkBAIC03ODcsMzAgKzc4NywyMyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5
cGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Qcm9maWxlVAogLyoqCiAgKiBA
aW50ZXJmYWNlCiAgKi8KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZWNlaXZlciA9IGZ1bmN0
aW9uKCkKK1dlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJlciA9IGZ1bmN0aW9uKCkKIHsKIH0K
IAotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJlY2VpdmVyLnByb3RvdHlwZSA9IHsKLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94
eSl9IGNhbGxiYWNrCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBzdGFy
dExvYWRpbmc6IGZ1bmN0aW9uKGNhbGxiYWNrKQorV2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2Zl
cmVyLnByb3RvdHlwZSA9IHsKKyAgICBzdGFydFRyYW5zZmVyOiBmdW5jdGlvbigpCiAgICAgewog
ICAgIH0sCiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKICAgICAgKi8K
LSAgICBwdXNoSlNPTkNodW5rOiBmdW5jdGlvbihjaHVuaykKKyAgICB0cmFuc2ZlckNodW5rOiBm
dW5jdGlvbihjaHVuaykKICAgICB7CiAgICAgfSwKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5KX0gY2FsbGJhY2sKLSAgICAg
Ki8KLSAgICBmaW5pc2hMb2FkaW5nOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICBmaW5pc2hUcmFu
c2ZlcjogZnVuY3Rpb24oKQogICAgIHsKICAgICB9LAogCkBAIC04MzIsNyArODI1LDcgQEAgV2Vi
SW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyID0gZnVuY3Rpb24odHlwZSwgdGl0bGUsIHVpZCwg
bWF4SlNPYmplY3RJZCkKICAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlci5jYWxsKHRoaXMs
IHR5cGUsIHRpdGxlLCB1aWQpOwogICAgIHRoaXMubWF4SlNPYmplY3RJZCA9IG1heEpTT2JqZWN0
SWQ7CiAgICAgLyoqCi0gICAgICogQHR5cGUge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZWNl
aXZlcn0KKyAgICAgKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlcmVyfQogICAg
ICAqLwogICAgIHRoaXMuX3JlY2VpdmVyID0gbnVsbDsKICAgICAvKioKQEAgLTg3NywxMyArODcw
LDE2IEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUgPSB7CiAKICAg
ICAgICAgaWYgKCF0aGlzLl9yZWNlaXZlcikKICAgICAgICAgICAgIHRoaXMuX3NldHVwV29ya2Vy
KCk7CisgICAgICAgIHZhciBsb2FkZXJQcm94eSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdExvYWRlclByb3h5fSAqLyB0aGlzLl9yZWNlaXZlcjsKIAogICAgICAgICB0aGlz
Ll9udW1iZXJPZkNodW5rcyA9IDA7Ci0gICAgICAgIGlmICh0aGlzLl9yZWNlaXZlci5zdGFydExv
YWRpbmcoY2FsbGJhY2spKSB7CisgICAgICAgIGlmICghbG9hZGVyUHJveHkuaXNTdGFydGVkKCkp
IHsKKyAgICAgICAgICAgIGxvYWRlclByb3h5LnN0YXJ0VHJhbnNmZXIoKTsKICAgICAgICAgICAg
IHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxv
YWRpbmdcdTIwMjYiKTsKICAgICAgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQud2FpdCA9IHRy
dWU7CiAgICAgICAgICAgICBQcm9maWxlckFnZW50LmdldFByb2ZpbGUodGhpcy5wcm9maWxlVHlw
ZSgpLmlkLCB0aGlzLnVpZCk7CiAgICAgICAgIH0KKyAgICAgICAgbG9hZGVyUHJveHkuYWRkQ29u
c3VtZXIoY2FsbGJhY2spOwogICAgIH0sCiAKICAgICBfc2V0dXBXb3JrZXI6IGZ1bmN0aW9uKCkK
QEAgLTg5Myw3ICs4ODksOSBAQCBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90
eXBlID0gewogICAgICAgICB9CiAgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFdvcmtlcigpOwogICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigi
d2FpdCIsIHNldFByb2ZpbGVXYWl0LCB0aGlzKTsKLSAgICAgICAgdGhpcy5fcmVjZWl2ZXIgPSB3
b3JrZXIuY3JlYXRlT2JqZWN0KCJXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyIik7Cisg
ICAgICAgIHZhciBsb2FkZXJQcm94eSA9IHdvcmtlci5jcmVhdGVPYmplY3QoIldlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RMb2FkZXIiKTsKKyAgICAgICAgbG9hZGVyUHJveHkuYWRkQ29uc3VtZXIo
dGhpcy5fc25hcHNob3RSZWNlaXZlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fcmVjZWl2
ZXIgPSBsb2FkZXJQcm94eTsKICAgICB9LAogCiAgICAgZGlzcG9zZTogZnVuY3Rpb24oKQpAQCAt
OTEyLDcgKzkxMCw2IEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIGlmIChzYXZlZENodW5rc0NvdW50ID09PSB0aGlzLl90b3RhbE51bWJlck9m
Q2h1bmtzKSB7CiAgICAgICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gTnVt
YmVyLmJ5dGVzVG9TdHJpbmcodGhpcy5fc25hcHNob3RQcm94eS50b3RhbFNpemUpOwogICAgICAg
ICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC53YWl0ID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlz
Ll9zYXZlZENodW5rc0NvdW50ID0gMDsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICB0aGlz
LnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTYXZpbmdc
dTIwMjYgJWRcJSIsIChzYXZlZENodW5rc0NvdW50ICogMTAwIC8gdGhpcy5fdG90YWxOdW1iZXJP
ZkNodW5rcykudG9GaXhlZCgyKSk7CiAgICAgfSwKQEAgLTkyMCwxMyArOTE3LDEzIEBAIFdlYklu
c3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICog
QHBhcmFtIHtzdHJpbmd9IGNodW5rCiAgICAgICovCi0gICAgcHVzaEpTT05DaHVuazogZnVuY3Rp
b24oY2h1bmspCisgICAgdHJhbnNmZXJDaHVuazogZnVuY3Rpb24oY2h1bmspCiAgICAgewogICAg
ICAgICArK3RoaXMuX251bWJlck9mQ2h1bmtzOwotICAgICAgICB0aGlzLl9yZWNlaXZlci5wdXNo
SlNPTkNodW5rKGNodW5rKTsKKyAgICAgICAgdGhpcy5fcmVjZWl2ZXIudHJhbnNmZXJDaHVuayhj
aHVuayk7CiAgICAgfSwKIAotICAgIF9wYXJzZWQ6IGZ1bmN0aW9uKHNuYXBzaG90UHJveHkpCisg
ICAgX3NuYXBzaG90UmVjZWl2ZWQ6IGZ1bmN0aW9uKHNuYXBzaG90UHJveHkpCiAgICAgewogICAg
ICAgICB0aGlzLl9yZWNlaXZlciA9IG51bGw7CiAgICAgICAgIGlmIChzbmFwc2hvdFByb3h5KQpA
QCAtOTM4LDExICs5MzUsMTIgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgd29ya2VyLnN0YXJ0Q2hlY2tpbmdGb3JMb25nUnVubmluZ0NhbGxz
KCk7CiAgICAgfSwKIAotICAgIGZpbmlzaEhlYXBTbmFwc2hvdDogZnVuY3Rpb24oKQorICAgIGZp
bmlzaEhlYXBTbmFwc2hvdDogZnVuY3Rpb24odHJhbnNmZXJGaW5pc2hlZCkKICAgICB7CiAgICAg
ICAgIHRoaXMuX3RvdGFsTnVtYmVyT2ZDaHVua3MgPSB0aGlzLl9udW1iZXJPZkNodW5rczsKLSAg
ICAgICAgaWYgKHRoaXMuX3JlY2VpdmVyLmZpbmlzaExvYWRpbmcodGhpcy5fcGFyc2VkLmJpbmQo
dGhpcykpKQotICAgICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiUGFyc2luZ1x1MjAyNiIpOworICAgICAgICB0aGlzLnNpZGViYXJF
bGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQYXJzaW5nXHUyMDI2Iik7
CisgICAgICAgIGlmICghdHJhbnNmZXJGaW5pc2hlZCkKKyAgICAgICAgICAgIHRoaXMuX3JlY2Vp
dmVyLmZpbmlzaFRyYW5zZmVyKCk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtOTUxLDcgKzk0OSw3
IEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUgPSB7CiAgICAgICov
CiAgICAgY2FuU2F2ZVRvRmlsZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuICF0
aGlzLmZyb21GaWxlKCkgJiYgdGhpcy5fc25hcHNob3RQcm94eSAmJiAhdGhpcy5fc2F2ZWRDaHVu
a3NDb3VudCAmJiBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuY2FuQXBwZW5kKCk7CisgICAgICAg
IHJldHVybiAhdGhpcy5mcm9tRmlsZSgpICYmIHRoaXMuX3NuYXBzaG90UHJveHkgJiYgIXRoaXMu
X3JlY2VpdmVyICYmIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5jYW5BcHBlbmQoKTsKICAgICB9
LAogCiAgICAgLyoqCkBAIC05NjAsOSArOTU4LDIwIEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmls
ZUhlYWRlci5wcm90b3R5cGUgPSB7CiAgICAgc2F2ZVRvRmlsZTogZnVuY3Rpb24oKQogICAgIHsK
ICAgICAgICAgdGhpcy5fZmlsZU5hbWUgPSB0aGlzLl9maWxlTmFtZSB8fCAiSGVhcC0iICsgbmV3
IERhdGUoKS50b0lTTzg2MDFDb21wYWN0KCkgKyAiLmhlYXBzbmFwc2hvdCI7Ci0gICAgICAgIHRo
aXMuX3JlY2VpdmVyID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTYXZlVG9GaWxlUmVj
ZWl2ZXIodGhpcy5fZmlsZU5hbWUsIHRoaXMpOwotICAgICAgICB0aGlzLl9udW1iZXJPZkNodW5r
cyA9IDA7Ci0gICAgICAgIHRoaXMuX3JlY2VpdmVyLnN0YXJ0TG9hZGluZyhmdW5jdGlvbihzbmFw
c2hvdCkgeyB9KTsKKyAgICAgICAgdmFyIGRlbGVnYXRlID0gbmV3IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RTYXZlVG9GaWxlRGVsZWdhdGUodGhpcyk7CisgICAgICAgIHRoaXMuX3JlY2VpdmVy
ID0gdGhpcy5fY3JlYXRlRmlsZVdyaXRlcih0aGlzLl9maWxlTmFtZSwgZGVsZWdhdGUpOworICAg
ICAgICB0aGlzLl9udW1iZXJPZlJlY2VpdmVkQ2h1bmtzID0gMDsKKyAgICAgICAgdGhpcy5fcmVj
ZWl2ZXIuc3RhcnRUcmFuc2ZlcigpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0g
eyFzdHJpbmd9IGZpbGVOYW1lCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ2h1bmtlZFRy
YW5zZmVyZXJEZWxlZ2F0ZX0gZGVsZWdhdGUKKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
Q2h1bmtlZFRyYW5zZmVyZXJ9CisgICAgICovCisgICAgX2NyZWF0ZUZpbGVXcml0ZXI6IGZ1bmN0
aW9uKGZpbGVOYW1lLCBkZWxlZ2F0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5z
cGVjdG9yLkNodW5rZWRGaWxlV3JpdGVyKGZpbGVOYW1lLCBkZWxlZ2F0ZSk7CiAgICAgfSwKIAog
ICAgIC8qKgpAQCAtMTAwMCwxMDIgKzEwMDksODUgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxl
SGVhZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC53YWl0ID0g
dHJ1ZTsKICAgICAgICAgdGhpcy5fc2V0dXBXb3JrZXIoKTsKICAgICAgICAgdGhpcy5fbnVtYmVy
T2ZDaHVua3MgPSAwOwotICAgICAgICB0aGlzLl9yZWNlaXZlci5zdGFydExvYWRpbmcoZnVuY3Rp
b24oaWdub3JlZFNuYXBzaG90UHJveHkpIHsgfSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAq
IEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBvbkxv
YWQoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQucmVhZHlT
dGF0ZSAhPT0gRmlsZVJlYWRlci5ET05FKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIHRoaXMuX25leHRDaHVua0xvYWRlZChldmVudC50YXJnZXQucmVzdWx0KTsKLSAgICAg
ICAgfQogCi0gICAgICAgIHRoaXMuX2ZpbGUgPSBmaWxlOwotICAgICAgICB0aGlzLl9leHBlY3Rl
ZFNpemUgPSBmaWxlLnNpemU7Ci0gICAgICAgIHRoaXMuX2xvYWRlZFNpemUgPSAwOwotICAgICAg
ICB0aGlzLl9yZWFkZXIgPSB0aGlzLl9jcmVhdGVGaWxlUmVhZGVyKCk7Ci0gICAgICAgIHRoaXMu
X3JlYWRlci5vbmxvYWQgPSBvbkxvYWQuYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5fcmVhZGVy
Lm9uZXJyb3IgPSBvbkVycm9yOwotICAgICAgICB0aGlzLl9sb2FkTmV4dENodW5rKCk7CisgICAg
ICAgIHZhciBkZWxlZ2F0ZSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZEZyb21G
aWxlRGVsZWdhdGUodGhpcyk7CisgICAgICAgIHZhciBmaWxlUmVhZGVyID0gdGhpcy5fY3JlYXRl
RmlsZVJlYWRlcihmaWxlLCBkZWxlZ2F0ZSk7CisgICAgICAgIGZpbGVSZWFkZXIub25lcnJvciA9
IG9uRXJyb3IuYmluZCh0aGlzKTsKKyAgICAgICAgZmlsZVJlYWRlci5zdGFydCh0aGlzLl9yZWNl
aXZlcik7CiAgICAgfSwKIAotICAgIF9sb2FkTmV4dENodW5rOiBmdW5jdGlvbigpCisgICAgX2Ny
ZWF0ZUZpbGVSZWFkZXI6IGZ1bmN0aW9uKGZpbGUsIGRlbGVnYXRlKQogICAgIHsKLSAgICAgICAg
dmFyIGxvYWRlZFNpemUgPSB0aGlzLl9sb2FkZWRTaXplOwotICAgICAgICB2YXIgY2h1bmtTaXpl
ID0gMTAwMDAwMDA7Ci0gICAgICAgIHZhciBzaXplID0gdGhpcy5fZXhwZWN0ZWRTaXplIDwgbG9h
ZGVkU2l6ZSArIGNodW5rU2l6ZSA/IHRoaXMuX2V4cGVjdGVkU2l6ZSAtIGxvYWRlZFNpemUgOiBj
aHVua1NpemU7Ci0gICAgICAgIHZhciBuZXh0UGFydCA9IHRoaXMuX2ZpbGUud2Via2l0U2xpY2Uo
bG9hZGVkU2l6ZSwgbG9hZGVkU2l6ZSArIHNpemUpOwotICAgICAgICB0aGlzLl9yZWFkZXIucmVh
ZEFzVGV4dChuZXh0UGFydCk7Ci0gICAgfSwKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuQ2h1bmtlZEZpbGVSZWFkZXIoZmlsZSwgMTAwMDAwMDAsIGRlbGVnYXRlKTsKKyAgICB9Cit9
CisKK1dlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIucHJvdG90eXBlOworCisvKioKKyAqIEBjb25zdHJ1
Y3RvcgorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJlckRlbGVn
YXRlfQorICovCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZEZyb21GaWxlRGVsZWdhdGUg
PSBmdW5jdGlvbihzbmFwc2hvdEhlYWRlcikKK3sKKyAgICB0aGlzLl9zbmFwc2hvdEhlYWRlciA9
IHNuYXBzaG90SGVhZGVyOworfQogCi0gICAgX25leHRDaHVua0xvYWRlZDogZnVuY3Rpb24oZGF0
YSkKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkRnJvbUZpbGVEZWxlZ2F0ZS5wcm90b3R5
cGUgPSB7CisgICAgb25UcmFuc2ZlclN0YXJ0ZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKICAgICB7Ci0g
ICAgICAgIHRoaXMuX2xvYWRlZFNpemUgKz0gZGF0YS5sZW5ndGg7Ci0gICAgICAgIHRoaXMuX3Jl
Y2VpdmVyLnB1c2hKU09OQ2h1bmsoZGF0YSk7Ci0gICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQu
c3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxvYWRpbmdcdTIwMjYgJWQlIiwgKHRo
aXMuX2xvYWRlZFNpemUgKiAxMDAgLyB0aGlzLl9leHBlY3RlZFNpemUpLnRvRml4ZWQoMikpOwor
ICAgIH0sCiAKLSAgICAgICAgaWYgKHRoaXMuX2xvYWRlZFNpemUgPT09IHRoaXMuX2V4cGVjdGVk
U2l6ZSkgewotICAgICAgICAgICAgdGhpcy5fZmlsZSA9IG51bGw7Ci0gICAgICAgICAgICB0aGlz
Ll9yZWFkZXIgPSBudWxsOwotICAgICAgICAgICAgdGhpcy5maW5pc2hIZWFwU25hcHNob3QoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9sb2FkTmV4dENo
dW5rKCk7CisgICAgb25DaHVua1RyYW5zZmVyZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKAorICAgICAgICAgICAgIkxvYWRpbmdcdTIwMjYgJWQlIiwgKHNv
dXJjZS5nZXRMb2FkZWRTaXplKCkgKiAxMDAgLyBzb3VyY2UuZ2V0RmlsZVNpemUoKSkudG9GaXhl
ZCgyKSk7CiAgICAgfSwKIAotICAgIF9jcmVhdGVGaWxlUmVhZGVyOiBmdW5jdGlvbigpCisgICAg
b25UcmFuc2ZlckZpbmlzaGVkOiBmdW5jdGlvbihzb3VyY2UpCiAgICAgewotICAgICAgICByZXR1
cm4gbmV3IEZpbGVSZWFkZXIoKTsKKyAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuZmluaXNo
SGVhcFNuYXBzaG90KHRydWUpOwogICAgIH0KIH0KIAotV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxl
SGVhZGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlci5w
cm90b3R5cGU7Ci0KLQogLyoqCiAgKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UmVjZWl2ZXJ9CisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVj
dG9yLkNodW5rZWRUcmFuc2ZlcmVyfQorICogQHBhcmFtIHshc3RyaW5nfSBmaWxlTmFtZQorICog
QHBhcmFtIHs/V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlcmVyRGVsZWdhdGU9fSBkZWxlZ2F0
ZQogICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2F2ZVRvRmlsZVJlY2VpdmVyID0gZnVu
Y3Rpb24oZmlsZU5hbWUsIHNuYXBzaG90SGVhZGVyKQorV2ViSW5zcGVjdG9yLkNodW5rZWRGaWxl
V3JpdGVyID0gZnVuY3Rpb24oZmlsZU5hbWUsIGRlbGVnYXRlKQogewogICAgIHRoaXMuX2ZpbGVO
YW1lID0gZmlsZU5hbWU7Ci0gICAgdGhpcy5fc25hcHNob3RIZWFkZXIgPSBzbmFwc2hvdEhlYWRl
cjsKLSAgICB0aGlzLl9zYXZlZENodW5rcyA9IDA7Ci0gICAgdGhpcy5fZmluaXNoTG9hZGluZ0Nh
bGxiYWNrcyA9IFtdOworICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7CiB9CiAKLVdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RTYXZlVG9GaWxlUmVjZWl2ZXIucHJvdG90eXBlID0geworV2Vi
SW5zcGVjdG9yLkNodW5rZWRGaWxlV3JpdGVyLnByb3RvdHlwZSA9IHsKICAgICAvKioKLSAgICAg
KiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eSl9IGNhbGxi
YWNrCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKiBAb3ZlcnJpZGUKICAgICAgKi8K
LSAgICBzdGFydExvYWRpbmc6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHN0YXJ0VHJhbnNmZXI6
IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLlNhdmVkVVJM
LCB0aGlzLl9zdGFydFNhdmluZ1NuYXBzaG90LCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LmZpbGVNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2
ZW50VHlwZXMuU2F2ZWRVUkwsIHRoaXMuX29uVHJhbnNmZXJTdGFydGVkLCB0aGlzKTsKICAgICAg
ICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnNhdmUodGhpcy5fZmlsZU5hbWUsICIiLCB0cnVl
KTsKLSAgICAgICAgaWYgKGNhbGxiYWNrKQotICAgICAgICAgICAgdGhpcy5fZmluaXNoTG9hZGlu
Z0NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwK
IAogICAgIC8qKgorICAgICAqIEBvdmVycmlkZQogICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjaHVu
awogICAgICAqLwotICAgIHB1c2hKU09OQ2h1bms6IGZ1bmN0aW9uKGNodW5rKQorICAgIHRyYW5z
ZmVyQ2h1bms6IGZ1bmN0aW9uKGNodW5rKQogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLmZp
bGVNYW5hZ2VyLmFwcGVuZCh0aGlzLl9maWxlTmFtZSwgY2h1bmspOwogICAgIH0sCiAKICAgICAv
KioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94
eSl9IGNhbGxiYWNrCisgICAgICogQG92ZXJyaWRlCiAgICAgICovCi0gICAgZmluaXNoTG9hZGlu
ZzogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgZmluaXNoVHJhbnNmZXI6IGZ1bmN0aW9uKCkKICAg
ICB7Ci0gICAgICAgIHRoaXMuX2ZpbmlzaExvYWRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmluaXNoTG9hZGluZ0NhbGxiYWNr
cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2ZpbmlzaExvYWRpbmdDYWxsYmFja3Nb
aV0obnVsbCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5yZW1vdmVFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLkFwcGVuZGVkVG9VUkws
IHRoaXMuX29uQ2h1bmtUcmFuc2ZlcmVkLCB0aGlzKTsKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUg
JiYgdGhpcy5fZGVsZWdhdGUub25UcmFuc2ZlckZpbmlzaGVkKHRoaXMpOwogICAgIH0sCiAKICAg
ICBkaXNwb3NlOiBmdW5jdGlvbigpCkBAIC0xMTA1LDI2ICsxMDk3LDUwIEBAIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RTYXZlVG9GaWxlUmVjZWl2ZXIucHJvdG90eXBlID0gewogICAgIC8qKgog
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAogICAgICAqLwotICAgIF9z
dGFydFNhdmluZ1NuYXBzaG90OiBmdW5jdGlvbihldmVudCkKKyAgICBfb25UcmFuc2ZlclN0YXJ0
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50LmRhdGEgIT09IHRo
aXMuX2ZpbGVOYW1lKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9zbmFwc2hv
dEhlYWRlci5fc2F2ZVN0YXR1c1VwZGF0ZSgwKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVN
YW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50
VHlwZXMuU2F2ZWRVUkwsIHRoaXMuX3N0YXJ0U2F2aW5nU25hcHNob3QsIHRoaXMpOwotICAgICAg
ICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5BcHBlbmRlZFRvVVJMLCB0aGlzLl9zYXZlU3RhdHVzVXBk
YXRlLCB0aGlzKTsKLSAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlKHRoaXMuX3NuYXBz
aG90SGVhZGVyLnByb2ZpbGVUeXBlKCkuaWQsIHRoaXMuX3NuYXBzaG90SGVhZGVyLnVpZCk7Cisg
ICAgICAgIHRoaXMuX2RlbGVnYXRlICYmIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNmZXJTdGFydGVk
KHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgdGhpcy5f
b25UcmFuc2ZlclN0YXJ0ZWQsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5B
cHBlbmRlZFRvVVJMLCB0aGlzLl9vbkNodW5rVHJhbnNmZXJlZCwgdGhpcyk7CiAgICAgfSwKIAog
ICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAogICAgICAq
LwotICAgIF9zYXZlU3RhdHVzVXBkYXRlOiBmdW5jdGlvbihldmVudCkKKyAgICBfb25DaHVua1Ry
YW5zZmVyZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50LmRhdGEg
IT09IHRoaXMuX2ZpbGVOYW1lKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9z
bmFwc2hvdEhlYWRlci5fc2F2ZVN0YXR1c1VwZGF0ZSgrK3RoaXMuX3NhdmVkQ2h1bmtzKTsKLSAg
ICAgICAgaWYgKHRoaXMuX3NhdmVkQ2h1bmtzID09PSB0aGlzLl9zbmFwc2hvdEhlYWRlci5fdG90
YWxOdW1iZXJPZkNodW5rcykKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5y
ZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLkFw
cGVuZGVkVG9VUkwsIHRoaXMuX3NhdmVTdGF0dXNVcGRhdGUsIHRoaXMpOworICAgICAgICB0aGlz
Ll9kZWxlZ2F0ZSAmJiB0aGlzLl9kZWxlZ2F0ZS5vbkNodW5rVHJhbnNmZXJlZCh0aGlzKTsKICAg
ICB9Ci19OworfQogCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGltcGxlbWVudHMge1dlYklu
c3BlY3Rvci5DaHVua2VkVHJhbnNmZXJlckRlbGVnYXRlfQorICovCitXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90U2F2ZVRvRmlsZURlbGVnYXRlID0gZnVuY3Rpb24oc25hcHNob3RIZWFkZXIpCit7
CisgICAgdGhpcy5fc25hcHNob3RIZWFkZXIgPSBzbmFwc2hvdEhlYWRlcjsKKyAgICB0aGlzLl9z
YXZlZENodW5rcyA9IDA7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTYXZlVG9GaWxl
RGVsZWdhdGUucHJvdG90eXBlID0geworICAgIG9uVHJhbnNmZXJTdGFydGVkOiBmdW5jdGlvbihz
b3VyY2UpCisgICAgeworICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5fc2F2ZVN0YXR1c1Vw
ZGF0ZSgwKTsKKyAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlKHRoaXMuX3NuYXBzaG90
SGVhZGVyLnByb2ZpbGVUeXBlKCkuaWQsIHRoaXMuX3NuYXBzaG90SGVhZGVyLnVpZCk7CisgICAg
fSwKKworICAgIG9uQ2h1bmtUcmFuc2ZlcmVkOiBmdW5jdGlvbihzb3VyY2UpCisgICAgeworICAg
ICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5fc2F2ZVN0YXR1c1VwZGF0ZSgrK3RoaXMuX3NhdmVk
Q2h1bmtzKTsKKyAgICB9LAorCisgICAgb25UcmFuc2ZlckZpbmlzaGVkOiBmdW5jdGlvbihzb3Vy
Y2UpCisgICAgeworICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5fc25hcHNob3RSZWNlaXZl
ZChudWxsKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKaW5kZXggY2UxMjI5NjIwOGIxNzk1N2E5YzkyNmQxYTVl
YTBlZWQyZTJlODhhYS4uNTRiNWJlZGFlNzJmNjc3Zjg1NmYwYzA5NzkxZWNlNjgwODc0MjNkMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1Bh
bmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQ
YW5lbC5qcwpAQCAtMjU5LDE3ICsyNTksOCBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5w
cm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBpZiAodGhpcy5fZmlsZVNlbGVjdG9yRWxlbWVu
dCkKICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9maWxlU2VsZWN0
b3JFbGVtZW50KTsKLQotICAgICAgICB2YXIgZmlsZVNlbGVjdG9yRWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICAgIGZpbGVTZWxlY3RvckVsZW1lbnQudHlw
ZSA9ICJmaWxlIjsKLSAgICAgICAgZmlsZVNlbGVjdG9yRWxlbWVudC5zdHlsZS56SW5kZXggPSAt
MTsKLSAgICAgICAgZmlsZVNlbGVjdG9yRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0
ZSI7Ci0gICAgICAgIGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7Ci0gICAgICAgICAgICB0aGlz
Ll9sb2FkRnJvbUZpbGUodGhpcy5fZmlsZVNlbGVjdG9yRWxlbWVudC5maWxlc1swXSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZmlsZVNlbGVjdG9yRWxlbWVudC5vbmNoYW5nZSA9IG9uQ2hhbmdlLmJp
bmQodGhpcyk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChmaWxlU2VsZWN0b3JF
bGVtZW50KTsKLSAgICAgICAgdGhpcy5fZmlsZVNlbGVjdG9yRWxlbWVudCA9IGZpbGVTZWxlY3Rv
ckVsZW1lbnQ7CisgICAgICAgIHRoaXMuX2ZpbGVTZWxlY3RvckVsZW1lbnQgPSBXZWJJbnNwZWN0
b3IuY3JlYXRlRmlsZVNlbGVjdG9yRWxlbWVudCh0aGlzLl9sb2FkRnJvbUZpbGUuYmluZCh0aGlz
KSk7CisgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9maWxlU2VsZWN0b3JF
bGVtZW50KTsKICAgICB9LAogCiAgICAgX2xvYWRGcm9tRmlsZTogZnVuY3Rpb24oZmlsZSkKQEAg
LTY2Miw5ICs2NTMsOSBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgX2FkZEhlYXBTbmFwc2hvdENodW5rOiBmdW5jdGlvbih1aWQsIGNodW5rKQogICAgIHsK
ICAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXko
dWlkLCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKV07Ci0gICAg
ICAgIGlmICghcHJvZmlsZSApCisgICAgICAgIGlmICghcHJvZmlsZSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgcHJvZmlsZS5wdXNoSlNPTkNodW5rKGNodW5rKTsKKyAgICAgICAgcHJv
ZmlsZS50cmFuc2ZlckNodW5rKGNodW5rKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC02NzUsNyAr
NjY2LDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAgICAg
ICB2YXIgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKICAgICAgICAgaWYg
KCFwcm9maWxlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBwcm9maWxlLmZpbmlzaEhl
YXBTbmFwc2hvdCgpOworICAgICAgICBwcm9maWxlLmZpbmlzaEhlYXBTbmFwc2hvdChmYWxzZSk7
CiAgICAgfSwKIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9XZWJLaXQucXJjIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9XZWJLaXQucXJjCmluZGV4IDQzNDUyNWUxMWEzODA5YTk1NTk5NWRlMDk1MzRkMDExY2MwYTYx
OTQuLjkwZjljZDQxMDg5M2E5ZjVhZjFlZjFkNGFlMDE4OTc5NzI2Y2M5ZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTYyLDYgKzYyLDcg
QEAKICAgICA8ZmlsZT5GaWxlTWFuYWdlci5qczwvZmlsZT4KICAgICA8ZmlsZT5GaWxlU3lzdGVt
TW9kZWwuanM8L2ZpbGU+CiAgICAgPGZpbGU+RmlsZVN5c3RlbVZpZXcuanM8L2ZpbGU+CisgICAg
PGZpbGU+RmlsZVV0aWxzLmpzPC9maWxlPgogICAgIDxmaWxlPkZpbHRlcmVkSXRlbVNlbGVjdGlv
bkRpYWxvZy5qczwvZmlsZT4KICAgICA8ZmlsZT5Gb250Vmlldy5qczwvZmlsZT4KICAgICA8Zmls
ZT5Hb1RvTGluZURpYWxvZy5qczwvZmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDYxOTA2NDBlMzMyYmM4OTYwYWVjMzM4
OGQ2OTQ4ZTZiOTY2YTk1MzUuLjI1NWVhYjczNzJlMzk3MDhmYTc4YmFjNzEyMWQ5ZTMyMzJhMzA2
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmh0bWwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbApAQCAtMTY2LDYgKzE2Niw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iRmlsZUNvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJGaWxlU3lzdGVtTW9kZWwuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkZpbGVTeXN0
ZW1WaWV3LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJGaWxlVXRpbHMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IkZvbnRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJJbWFnZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRhdGFiYXNlVGFibGVWaWV3LmpzIj48L3Njcmlw
dD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCAzNDg5YTA5YzA1OGM4ZjI1MTJhZmQ4OGU1M2ExNmZhMGQ3MzY0M2EwLi45MWJl
NjJmNDM4ZmEyM2FiMzZmNTYzNTM4MDA2YmZjYWQzOGE1MTJkIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTItMDctMjYgIEV1Z2VuZSBLbHl1Y2huaWtvdiAgPGV1c3Rhcy5iaWdAZ21haWwuY29t
PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFByb2ZpbGVzOiBleHRyYWN0IHNhdmUgdG8gZmls
ZSAvIGxvYWQgZnJvbSBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MjM0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1vdGl2YXRpb246IGV4dHJhY3QgcmV1c2FibGUgY29kZSBmb3IgdGltZWxpbmUg
bG9hZC9zYXZlLgorCisgICAgICAgICogaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qt
bG9hZGVyLmh0bWw6CisgICAgICAgIEFkb3B0ZWQgbmV3IEFQSS4KKwogMjAxMi0wNy0yNSAgQW5k
cmV3IFdpbHNvbiAgPGF0d2lsc29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
IGNocm9taXVtIGV4cGVjdGF0aW9ucyBjaGFuZ2UuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1sb2FkZXIuaHRtbCBiL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1sCmluZGV4IDE4ZTIx
OGE4MjM5MmQ3MjFkMWJlNDg0MzZiNzUwN2QyNzdlNTZlZjQuLjIyNDgxNDg5YTE1YzRlMjUyODEw
ZWM4YzAwMDI2ZWQzNjdlZjFiNGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9w
cm9maWxlci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1sCkBAIC0xOSw5ICsxOSwxMSBA
QCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgZnVuY3Rpb24gaGVhcFNuYXBzaG90TG9hZGVyVGVz
dChuZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgbG9hZGVyID0gbmV3IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RMb2FkZXIoKTsKKyAgICAgICAgICAgIGxvYWRlci5zdGFydFRyYW5z
ZmVyKCk7CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNvdXJjZVN0cmluZ2lmaWVk
Lmxlbmd0aDsgaSA8IGw7IGkgKz0gcGFydFNpemUpCi0gICAgICAgICAgICAgICAgbG9hZGVyLnB1
c2hKU09OQ2h1bmsoc291cmNlU3RyaW5naWZpZWQuc2xpY2UoaSwgaSArIHBhcnRTaXplKSk7Ci0g
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gbG9hZGVyLmZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAg
ICAgICAgICBsb2FkZXIudHJhbnNmZXJDaHVuayhzb3VyY2VTdHJpbmdpZmllZC5zbGljZShpLCBp
ICsgcGFydFNpemUpKTsKKyAgICAgICAgICAgIGxvYWRlci5maW5pc2hUcmFuc2ZlcigpOworICAg
ICAgICAgICAgdmFyIHJlc3VsdCA9IGxvYWRlci5idWlsZFNuYXBzaG90KCk7CiAgICAgICAgICAg
ICByZXN1bHQuX25vZGVzID0gbmV3IFVpbnQzMkFycmF5KHJlc3VsdC5fbm9kZXMpOwogICAgICAg
ICAgICAgcmVzdWx0Ll9jb250YWlubWVudEVkZ2VzID0gbmV3IFVpbnQzMkFycmF5KHJlc3VsdC5f
Y29udGFpbm1lbnRFZGdlcyk7CiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFNuYXBz
aG90RXF1YWxzKG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90KEluc3BlY3RvclRlc3QuY3Jl
YXRlSGVhcFNuYXBzaG90TW9jaygpKSwgcmVzdWx0KTsKQEAgLTc3LDcgKzc5LDcgQEAgZnVuY3Rp
b24gdGVzdCgpCiAgICAgICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlID0gb2xk
R2V0UHJvZmlsZTsKICAgICAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZmZXIocHJvZmlsZUhlYWRlciwgIl9wYXJzZWQi
LCBwYXJzZWQpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKHByb2ZpbGVI
ZWFkZXIsICJfc25hcHNob3RSZWNlaXZlZCIsIHBhcnNlZCk7CiAKICAgICAgICAgICAgIHBhbmVs
LnNob3dQcm9maWxlKHByb2ZpbGVIZWFkZXIpOwogICAgICAgICB9LApAQCAtODgsMjAgKzkwLDMy
IEBAIGZ1bmN0aW9uIHRlc3QoKQogCiAgICAgICAgICAgICB2YXIgZmlsZU1vY2sgPSB7CiAgICAg
ICAgICAgICAgICAgbmFtZTogIm1vY2suaGVhcHNuYXBzaG90IiwKLSAgICAgICAgICAgICAgICBz
aXplOiBzb3VyY2VTdHJpbmdpZmllZC5sZW5ndGgsCi0gICAgICAgICAgICAgICAgc2xpY2U6IGZ1
bmN0aW9uKGJlZ2luLCBlbmQpIHsgcmV0dXJuIHRoaXM7IH0sCi0gICAgICAgICAgICAgICAgd2Vi
a2l0U2xpY2U6IGZ1bmN0aW9uKGJlZ2luLCBlbmQpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICAgICAg
ICAgICAgICBzaXplOiBzb3VyY2VTdHJpbmdpZmllZC5sZW5ndGgKICAgICAgICAgICAgIH07CiAK
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUuX2Ny
ZWF0ZUZpbGVSZWFkZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
b3ZlcnJpZGUoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSwgJ19jcmVh
dGVGaWxlUmVhZGVyJywgZnVuY3Rpb24oZmlsZU1vY2ssIGRlbGVnYXRlKSB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgcmVhZEFzVGV4dDogZnVuY3Rpb24o
ZmlsZVBhcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlSGVhZGVyID0g
cGFuZWwuX3Byb2ZpbGVzW3BhbmVsLl9wcm9maWxlcy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkU25pZmZlcihwcm9maWxlSGVhZGVyLCAiX3Bh
cnNlZCIsIGZ1bmN0aW9uIHBhcnNlZCgpIHsgbmV4dCgpOyB9KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2ZpbGVIZWFkZXIuX25leHRDaHVua0xvYWRlZChzb3VyY2VTdHJpbmdpZmllZCk7
CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbihyZWNlaXZlcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIuc3RhcnRUcmFuc2ZlcigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZWdhdGUub25UcmFuc2ZlclN0YXJ0ZWQodGhpcyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZWNlaXZlci50cmFuc2ZlckNodW5rKHNvdXJjZVN0cmluZ2lmaWVkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlLm9uQ2h1bmtUcmFuc2ZlcmVkKHRoaXMp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIuZmluaXNoVHJhbnNmZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlLm9uVHJhbnNmZXJGaW5pc2hlZCh0aGlzKTsK
KyAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICBnZXRMb2FkZWRT
aXplOiBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmaWxlTW9jay5zaXplOworICAgICAgICAgICAgICAgICAgICB9LAorCisg
ICAgICAgICAgICAgICAgICAgIGdldEZpbGVTaXplOiBmdW5jdGlvbigpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlTW9jay5zaXplOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKFdl
Ykluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUsICJfc25hcHNob3RSZWNlaXZl
ZCIsIGZ1bmN0aW9uKCkgeyBuZXh0KCk7IH0pOwogICAgICAgICAgICAgcGFuZWwuX2xvYWRGcm9t
RmlsZShmaWxlTW9jayk7CiAgICAgICAgIH0KICAgICBdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154619</attachid>
            <date>2012-07-26 05:35:23 -0700</date>
            <delta_ts>2012-07-26 08:45:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92348-20120726163511.patch</filename>
            <type>text/plain</type>
            <size>38361</size>
            <attacher>eustas.bug</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTNhNzVlZGZlN2ZlY2Fk
Y2FjOGU2YTYzOGZiYjEzMTQ5NjdkOWQzOC4uNjE5MmJjOTI2YmU1NmFhMmNjYTcyZDQ4MjZmMWRl
MWIwNTlkMTI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTA3LTI2ICBFdWdl
bmUgS2x5dWNobmlrb3YgIDxldXN0YXMuYmlnQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBQcm9maWxlczogZXh0cmFjdCBzYXZlIHRvIGZpbGUgLyBsb2FkIGZyb20gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3RpdmF0aW9u
OiBleHRyYWN0IHJldXNhYmxlIGNvZGUgZm9yIHRpbWVsaW5lIGxvYWQvc2F2ZS4KKyAgICAgICAg
RmlsZVV0aWxzLmpzIHdpbGwgY29udGFpbiBjb21tb24gY29kZS4gTm90IGFsbCBjb2RlIG1vdmVk
IHRvIEZpbGVVdGlscworICAgICAgICB0byBtYWtlIHJldmlldyBlYXNpZXIuIFRoaXMgY29kZSB3
aWxsIGJlIG1vdmVkIGluIG5leHQgcGF0Y2guCisKKyAgICAgICAgQ29yZSBhYnN0cmFjdGlvbnM6
IENodW5rZWRUcmFuc2ZlcnJlciBhbmQgQ2h1bmtlZFRyYW5zZmVycmVyRGVsZWdhdGUuCisKKyAg
ICAgICAgQ2h1bmtlZFRyYW5zZmVycmVyIGlzIGludGVyZmFjZSB0aGF0IGlzIHVzZWQgdG8gdHJh
bnNmZXIgZW50aXR5IGRpdmRlZAorICAgICAgICB0byBjaHVua3MuIFRyYW5zZmVyIHByb2Nlc3Mg
aXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoc3RhcnRUcmFuc2ZlcikKKyAgICAgICAgYW5kIGZp
bmFsaXplZCAoZmluaXNoVHJuc2ZlcikuCisKKyAgICAgICAgQ2h1bmtlZFRyYW5zZmVycmVyRGVs
ZWdhdGUgaXMgaW50ZXJmYWNlIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucyBhYm91dAorICAgICAg
ICB0cmFuc2ZlciBwcm9jZXNzOiBvblRyYW5zZmVyU3RhcnRlZCwgb25DaHVua3RyYW5zZmVyZWQs
IG9uVHJhbnNmZXJGaW5pc2hlZC4KKworICAgICAgICBDaHVua2VkRmlsZVJlYWRlcjogdXRpbGl0
eSBjbGFzcyB0aGF0IGxvYWRzIGZpbGUgYnkgY2h1bmtzIG9mIHNwZWNpZmllZCBzaXplCisgICAg
ICAgIGFuZCBub3RpZmllcyBnaXZlbiBkZWxlZ2F0ZS4gUmVjaWV2ZXIgKENodW5rZWRUcmFuc2Zl
cnJlcikgaXMgc3VwcGxpZWQgYXMgYQorICAgICAgICBwYXJhbWV0ZXIgb2YgbWV0aG9kICJzdGFy
dCIuCisKKyAgICAgICAgQ2h1bmtlZEZpbGVXcml0ZXI6IGltcGxlbWVudGF0aW9uIG9mIENodW5r
ZWRUcmFuc2ZlcnJlciB0aGF0IHNhdmVzIGRhdGEKKyAgICAgICAgdG8gZmlsZSBzcGVjaWZpZWQg
YnkgZmlsZSBuYW1lIGFuZCBub3RpZmllcyBnaXZlbiBkZWxlZ2F0ZS4KKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaTogQWRkZWQgJ0ZpbGVVdGlscy5qcycuCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6IEFkZGVkICdGaWxlVXRpbHMuanMnLgorICAgICAgICAqIGluc3Bl
Y3Rvci9jb21waWxlLWZyb250LWVuZC5weTogQWRkZWQgJ0ZpbGVVdGlscy5qcycuCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlVXRpbHMuanM6IEFkZGVkLgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlcnJlckRlbGVnYXRlKTogQWRkZWQuCisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVSZWFkZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5jcmVhdGVGaWxlU2VsZWN0b3JFbGVtZW50KTogQWRkZWQgdXRpbGl0eSBtZXRob2QgdG8g
Y29uc3RydWN0CisgICAgICAgIGhpZGRlbiBpbnB1dCBlbGVtZW50IHRvIHNlbGVjdCBmaWxlLgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzOiBBZG9w
dGVkIG5ldyBBUEkuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQ
cm94eS5qczogQWRvcHRlZCBuZXcgQVBJLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
SGVhcFNuYXBzaG90Vmlldy5qczogQWRvcHRlZCBuZXcgQVBJLgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdExvYWRGcm9tRmlsZURlbGVnYXRlKToKKyAgICAgICAgRXh0cmFjdGVk
IGZyb20gZXhpc3RpbmcgY29kZS4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaHVua2VkRmlsZVdy
aXRlcik6IFJlbmFtZWQgYW5kIHJlZmFjdG9yZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90U2F2ZVRvRmlsZURlbGVnYXRlKToKKyAgICAgICAgRXh0cmFjdGVkIGZyb20gZXhp
c3RpbmcgY29kZS4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwu
anM6IEFkb3B0ZWQgbmV3IEFQSS4KKwogMjAxMi0wNy0yNCAgU2hhd24gU2luZ2ggIDxzaGF3bnNp
bmdoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjogbW92ZSByb290IGxheWVyIHNwZWNpYWwgY2FzZSBpbml0aWFsaXphdGlv
biBpbnRvIGludGVybmFsIGNvZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYzkxYzQxNTE3MDg5YTVk
ZTA1MmEwZDYzZjE1MGYwYjMzMTE2MWZlMC4uMmU3YmQwMTMwNTY5MWI2ZTBiODQ3Njg4MGE2YzU0
ZDIyYjViMDUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNjI4Miw2ICs2MjgyLDcgQEAKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVDb250ZW50Vmlldy5qcycsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlU3lzdGVtTW9kZWwuanMnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZVN5c3RlbVZpZXcuanMnLAorICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZVV0aWxzLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL0ZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5qcycsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Gb250Vmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL2Zyb250LWVuZC9Hb1RvTGluZURpYWxvZy5qcycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDU1Y2EwYWY1ZTgwODExODQwMTBkNTEwODgx
ZjgxZjE3NzdlYTQ5ZWMuLmVlNzM5Y2Q5ZjBjZTk1NTdhNjkxMTc0MWM1YTNhNzVlZTU0NjA1Y2Ug
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC03
NTM4Miw2ICs3NTM4MiwxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxGaWxlVXRpbHMuanMiCisJCQkJ
CT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXGZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5jc3MiCiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1m
cm9udC1lbmQucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQu
cHkKaW5kZXggZDkyMzM5M2FjZjkyMGUwNDMxOTNhMGRkOTEwODY3ZjAyMTNmZGE1NS4uYTlkZWM4
NmI3YWRkYTNiOTNjMzMyYWFiYTEwNmEwYjUxNWE5ZDYyZSAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQpAQCAtODIsNiArODIsNyBAQCBtb2R1bGVz
ID0gWwogICAgICAgICAgICAgIkRlYnVnZ2VyU2NyaXB0TWFwcGluZy5qcyIsCiAgICAgICAgICAg
ICAiRmlsZU1hbmFnZXIuanMiLAogICAgICAgICAgICAgIkZpbGVTeXN0ZW1Nb2RlbC5qcyIsCisg
ICAgICAgICAgICAiRmlsZVV0aWxzLmpzIiwKICAgICAgICAgICAgICJIQVJFbnRyeS5qcyIsCiAg
ICAgICAgICAgICAiSW5kZXhlZERCTW9kZWwuanMiLAogICAgICAgICAgICAgIkxpbmtpZmllci5q
cyIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVV
dGlscy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZVV0aWxzLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjIzYTgyNTBmMzkyM2FkZTUxZDlhNGJmNjY5ZDM1NjU4MmM3OWM0NGUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVV
dGlscy5qcwpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGludGVyZmFjZQorICovCitXZWJJbnNw
ZWN0b3IuQ2h1bmtlZFRyYW5zZmVycmVyRGVsZWdhdGUgPSBmdW5jdGlvbigpCit7Cit9CisKK1dl
Ykluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJyZXJEZWxlZ2F0ZS5wcm90b3R5cGUgPSB7CisgICAg
b25UcmFuc2ZlclN0YXJ0ZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKKyAgICB7CisgICAgfSwKKworICAg
IG9uQ2h1bmtUcmFuc2ZlcnJlZDogZnVuY3Rpb24oc291cmNlKQorICAgIHsKKyAgICB9LAorCisg
ICAgb25UcmFuc2ZlckZpbmlzaGVkOiBmdW5jdGlvbihzb3VyY2UpCisgICAgeworICAgIH0KK30K
KworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7IUZpbGV9IGZpbGUKKyAqIEBwYXJh
bSB7IW51bWJlcn0gY2h1bmtTaXplCisgKiBAcGFyYW0gez9XZWJJbnNwZWN0b3IuQ2h1bmtlZFRy
YW5zZmVycmVyRGVsZWdhdGU9fSBkZWxlZ2F0ZQorICovCitXZWJJbnNwZWN0b3IuQ2h1bmtlZEZp
bGVSZWFkZXIgPSBmdW5jdGlvbihmaWxlLCBjaHVua1NpemUsIGRlbGVnYXRlKQoreworICAgIHRo
aXMuX2ZpbGUgPSBmaWxlOworICAgIHRoaXMuX2ZpbGVTaXplID0gZmlsZS5zaXplOworICAgIHRo
aXMuX2xvYWRlZFNpemUgPSAwOworICAgIHRoaXMuX2NodW5rU2l6ZSA9IGNodW5rU2l6ZTsKKyAg
ICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworCisgICAgLyoqIEB0eXBlIHs/ZnVuY3Rpb24o
RXZlbnQpfSAqLworICAgIHRoaXMub25lcnJvciA9IG51bGw7Cit9CisKK1dlYkluc3BlY3Rvci5D
aHVua2VkRmlsZVJlYWRlci5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHBhcmFtIHsh
V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlcnJlcn0gb3V0cHV0CisgICAgICovCisgICAgc3Rh
cnQ6IGZ1bmN0aW9uKG91dHB1dCkKKyAgICB7CisgICAgICAgIHRoaXMuX291dHB1dCA9IG91dHB1
dDsKKworICAgICAgICB0aGlzLl9yZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAgICAgICB0
aGlzLl9yZWFkZXIub25sb2FkID0gdGhpcy5fb25DaHVua0xvYWRlZC5iaW5kKHRoaXMpOworICAg
ICAgICB0aGlzLl9yZWFkZXIub25lcnJvciA9IHRoaXMuX29uTG9hZEVycm9yLmJpbmQodGhpcyk7
CisgICAgICAgIHRoaXMuX291dHB1dC5zdGFydFRyYW5zZmVyKCk7CisgICAgICAgIGlmICh0aGlz
Ll9kZWxlZ2F0ZSkKKyAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNmZXJTdGFydGVk
KHRoaXMpOworICAgICAgICB0aGlzLl9sb2FkQ2h1bmsoKTsKKyAgICB9LAorCisgICAgZ2V0TG9h
ZGVkU2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZFNp
emU7CisgICAgfSwKKworICAgIGdldEZpbGVTaXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fZmlsZVNpemU7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7RXZlbnR9IGV2ZW50CisgICAgICovCisgICAgX29uTG9hZEVycm9yOiBmdW5jdGlvbihldmVu
dCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLm9uZXJyb3IpCisgICAgICAgICAgICB0aGlzLm9u
ZXJyb3IoZXZlbnQpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0V2ZW50fSBl
dmVudAorICAgICAqLworICAgIF9vbkNodW5rTG9hZGVkOiBmdW5jdGlvbihldmVudCkKKyAgICB7
CisgICAgICAgIGlmIChldmVudC50YXJnZXQucmVhZHlTdGF0ZSAhPT0gRmlsZVJlYWRlci5ET05F
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBkYXRhID0gZXZlbnQudGFyZ2V0
LnJlc3VsdDsKKyAgICAgICAgdGhpcy5fbG9hZGVkU2l6ZSArPSBkYXRhLmxlbmd0aDsKKworICAg
ICAgICB0aGlzLl9vdXRwdXQudHJhbnNmZXJDaHVuayhkYXRhKTsKKyAgICAgICAgaWYgKHRoaXMu
X2RlbGVnYXRlKQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUub25DaHVua1RyYW5zZmVycmVk
KHRoaXMpOworCisgICAgICAgIGlmICh0aGlzLl9sb2FkZWRTaXplID09PSB0aGlzLl9maWxlU2l6
ZSkgeworICAgICAgICAgICAgdGhpcy5fZmlsZSA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9y
ZWFkZXIgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fb3V0cHV0LmZpbmlzaFRyYW5zZmVyKCk7
CisgICAgICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpCisgICAgICAgICAgICAgICAgdGhpcy5f
ZGVsZWdhdGUub25UcmFuc2ZlckZpbmlzaGVkKHRoaXMpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fbG9hZENodW5rKCk7CisgICAgfSwKKworICAgIF9s
b2FkQ2h1bms6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBjaHVua1N0YXJ0ID0gdGhp
cy5fbG9hZGVkU2l6ZTsKKyAgICAgICAgdmFyIGNodW5rRW5kID0gTWF0aC5taW4odGhpcy5fZmls
ZVNpemUsIGNodW5rU3RhcnQgKyB0aGlzLl9jaHVua1NpemUpCisgICAgICAgIHZhciBuZXh0UGFy
dCA9IHRoaXMuX2ZpbGUud2Via2l0U2xpY2UoY2h1bmtTdGFydCwgY2h1bmtFbmQpOworICAgICAg
ICB0aGlzLl9yZWFkZXIucmVhZEFzVGV4dChuZXh0UGFydCk7CisgICAgfQorfQorCisvKioKKyAq
IEBwYXJhbSB7IWZ1bmN0aW9uKEZpbGUpfSBjYWxsYmFjaworICogQHJldHVybiB7Tm9kZX0KKyAq
LworV2ViSW5zcGVjdG9yLmNyZWF0ZUZpbGVTZWxlY3RvckVsZW1lbnQgPSBmdW5jdGlvbihjYWxs
YmFjaykgeworICAgIHZhciBmaWxlU2VsZWN0b3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiaW5wdXQiKTsKKyAgICBmaWxlU2VsZWN0b3JFbGVtZW50LnR5cGUgPSAiZmlsZSI7Cisg
ICAgZmlsZVNlbGVjdG9yRWxlbWVudC5zdHlsZS56SW5kZXggPSAtMTsKKyAgICBmaWxlU2VsZWN0
b3JFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKKyAgICBmaWxlU2VsZWN0b3JF
bGVtZW50Lm9uY2hhbmdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgY2FsbGJhY2soZmls
ZVNlbGVjdG9yRWxlbWVudC5maWxlc1swXSk7CisgICAgfTsKKyAgICByZXR1cm4gZmlsZVNlbGVj
dG9yRWxlbWVudDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3RMb2FkZXIuanMKaW5kZXggMDg0ZWY5NjM1OTZkOGJjMjFhMDk2
ZGRjODk3ZjA1MTI1OWIxNzgyOS4uZWY5M2I5OTJhMTJjZjAyOGEyZjE0MzIwNWE5MWVjZDExMjUx
YTNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFw
U25hcHNob3RMb2FkZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9IZWFwU25hcHNob3RMb2FkZXIuanMKQEAgLTMwLDcgKzMwLDcgQEAKIAogLyoqCiAgKiBAY29u
c3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVjZWl2
ZXJ9CisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlcnJlcn0KICAq
LwogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlciA9IGZ1bmN0aW9uKCkKIHsKQEAgLTM4
LDEzICszOCw4IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIgPSBmdW5jdGlvbigp
CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBy
b3h5KX0gY2FsbGJhY2sKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIHN0
YXJ0TG9hZGluZzogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgc3RhcnRUcmFuc2ZlcjogZnVuY3Rp
b24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwKIAogICAgIGRpc3Bvc2U6
IGZ1bmN0aW9uKCkKQEAgLTU5LDE1ICs1NCwyMyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fc25hcHNob3QgPSB7fTsKICAgICB9
LAogCi0gICAgX2ZpbmRCYWxhbmNlZEN1cmx5QnJhY2tldHM6IGZ1bmN0aW9uKCkKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0geyFzdHJpbmd9IHNvdXJjZQorICAgICAqIEBwYXJhbSB7bnVtYmVyPX0g
c3RhcnRJbmRleAorICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbGFzdEluZGV4CisgICAgICogQHJl
dHVybiB7IW51bWJlcn0KKyAgICAgKi8KKyAgICBfZmluZEJhbGFuY2VkQ3VybHlCcmFja2V0czog
ZnVuY3Rpb24oc291cmNlLCBzdGFydEluZGV4LCBsYXN0SW5kZXgpCiAgICAgeworICAgICAgICBz
dGFydEluZGV4ID0gc3RhcnRJbmRleCB8fCAwOworICAgICAgICBsYXN0SW5kZXggPSBsYXN0SW5k
ZXggfHwgc291cmNlLmxlbmd0aDsKICAgICAgICAgdmFyIGNvdW50ZXIgPSAwOwogICAgICAgICB2
YXIgb3BlbmluZ0JyYWNrZXQgPSAieyIuY2hhckNvZGVBdCgwKSwgY2xvc2luZ0JyYWNrZXQgPSAi
fSIuY2hhckNvZGVBdCgwKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLl9qc29u
Lmxlbmd0aDsgaSA8IGw7ICsraSkgewotICAgICAgICAgICAgdmFyIGNoYXJhY3RlciA9IHRoaXMu
X2pzb24uY2hhckNvZGVBdChpKTsKLSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IG9wZW5p
bmdCcmFja2V0KQorICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IGxhc3RJbmRl
eDsgKytpKSB7CisgICAgICAgICAgICB2YXIgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChp
KTsKKyAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PT0gb3BlbmluZ0JyYWNrZXQpCiAgICAgICAg
ICAgICAgICAgKytjb3VudGVyOwotICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyID09PSBj
bG9zaW5nQnJhY2tldCkgeworICAgICAgICAgICAgZWxzZSBpZiAoY2hhckNvZGUgPT09IGNsb3Np
bmdCcmFja2V0KSB7CiAgICAgICAgICAgICAgICAgaWYgKC0tY291bnRlciA9PT0gMCkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwogICAgICAgICAgICAgfQpAQCAtNzUsMTEgKzc4
LDE0IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAg
ICAgICByZXR1cm4gLTE7CiAgICAgfSwKIAotICAgIGZpbmlzaExvYWRpbmc6IGZ1bmN0aW9uKCkK
KyAgICBmaW5pc2hUcmFuc2ZlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMu
X2pzb24pCisgICAgICAgICAgICB0aGlzLl9wYXJzZVN0cmluZ3NBcnJheSgpOworICAgIH0sCisK
KyAgICBidWlsZFNuYXBzaG90OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMu
X2pzb24pCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgdGhpcy5fcGFyc2VTdHJp
bmdzQXJyYXkoKTsKICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90KHRoaXMuX3NuYXBzaG90KTsKICAgICAgICAgdGhpcy5fcmVzZXQoKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTEzNSw3ICsxNDEsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAvKioKICAgICAgKiBAcGFyYW0ge3N0cmluZ30g
Y2h1bmsKICAgICAgKi8KLSAgICBwdXNoSlNPTkNodW5rOiBmdW5jdGlvbihjaHVuaykKKyAgICB0
cmFuc2ZlckNodW5rOiBmdW5jdGlvbihjaHVuaykKICAgICB7CiAgICAgICAgIHRoaXMuX2pzb24g
Kz0gY2h1bms7CiAgICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHsKQEAgLTE0NiwxNyArMTUy
LDE3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU25hcHNob3QgdG9rZW4gbm90IGZvdW5kIik7
CiAgICAgICAgICAgICB0aGlzLl9qc29uID0gdGhpcy5fanNvbi5zbGljZShzbmFwc2hvdFRva2Vu
SW5kZXggKyBzbmFwc2hvdFRva2VuLmxlbmd0aCArIDEpOwogICAgICAgICAgICAgdGhpcy5fc3Rh
dGUgPSAicGFyc2Utc25hcHNob3QtaW5mbyI7Ci0gICAgICAgICAgICB0aGlzLnB1c2hKU09OQ2h1
bmsoIiIpOworICAgICAgICAgICAgdGhpcy50cmFuc2ZlckNodW5rKCIiKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgInBhcnNlLXNuYXBzaG90LWluZm8iOiB7
Ci0gICAgICAgICAgICB2YXIgY2xvc2luZ0JyYWNrZXRJbmRleCA9IHRoaXMuX2ZpbmRCYWxhbmNl
ZEN1cmx5QnJhY2tldHMoKTsKKyAgICAgICAgICAgIHZhciBjbG9zaW5nQnJhY2tldEluZGV4ID0g
dGhpcy5fZmluZEJhbGFuY2VkQ3VybHlCcmFja2V0cyh0aGlzLl9qc29uKTsKICAgICAgICAgICAg
IGlmIChjbG9zaW5nQnJhY2tldEluZGV4ID09PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdC5zbmFwc2hvdCA9IC8qKiBAdHlwZSB7SGVhcFNu
YXBzaG90SGVhZGVyfSAqL0pTT04ucGFyc2UodGhpcy5fanNvbi5zbGljZSgwLCBjbG9zaW5nQnJh
Y2tldEluZGV4KSk7CiAgICAgICAgICAgICB0aGlzLl9qc29uID0gdGhpcy5fanNvbi5zbGljZShj
bG9zaW5nQnJhY2tldEluZGV4KTsKICAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gImZpbmQtbm9k
ZXMiOwotICAgICAgICAgICAgdGhpcy5wdXNoSlNPTkNodW5rKCIiKTsKKyAgICAgICAgICAgIHRo
aXMudHJhbnNmZXJDaHVuaygiIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlICJmaW5kLW5vZGVzIjogewpAQCAtMTczLDcgKzE3OSw3IEBAIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fYXJy
YXkgPSBuZXcgVWludDMyQXJyYXkobm9kZXNfbGVuZ3RoKTsKICAgICAgICAgICAgIHRoaXMuX2Fy
cmF5SW5kZXggPSAwOwogICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAicGFyc2Utbm9kZXMiOwot
ICAgICAgICAgICAgdGhpcy5wdXNoSlNPTkNodW5rKCIiKTsKKyAgICAgICAgICAgIHRoaXMudHJh
bnNmZXJDaHVuaygiIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlICJwYXJzZS1ub2RlcyI6IHsKQEAgLTE4Miw3ICsxODgsNyBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX3NuYXBzaG90
Lm5vZGVzID0gdGhpcy5fYXJyYXk7CiAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICJmaW5kLWVk
Z2VzIjsKICAgICAgICAgICAgIHRoaXMuX2FycmF5ID0gbnVsbDsKLSAgICAgICAgICAgIHRoaXMu
cHVzaEpTT05DaHVuaygiIik7CisgICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAiZmluZC1lZGdlcyI6
IHsKQEAgLTE5OSw3ICsyMDUsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2FycmF5ID0gbmV3IFVpbnQzMkFycmF5KGVk
Z2VzX2xlbmd0aCk7CiAgICAgICAgICAgICB0aGlzLl9hcnJheUluZGV4ID0gMDsKICAgICAgICAg
ICAgIHRoaXMuX3N0YXRlID0gInBhcnNlLWVkZ2VzIjsKLSAgICAgICAgICAgIHRoaXMucHVzaEpT
T05DaHVuaygiIik7CisgICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAicGFyc2UtZWRnZXMiOiB7CkBA
IC0yMDgsNyArMjE0LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdC5lZGdlcyA9IHRoaXMuX2FycmF5Owog
ICAgICAgICAgICAgdGhpcy5fYXJyYXkgPSBudWxsOwogICAgICAgICAgICAgdGhpcy5fc3RhdGUg
PSAiZmluZC1zdHJpbmdzIjsKLSAgICAgICAgICAgIHRoaXMucHVzaEpTT05DaHVuaygiIik7Cisg
ICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSAiZmluZC1zdHJpbmdzIjogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMKaW5k
ZXggMTI3N2RhNTZiZWIyMjZkZGIyMjg5NWMyMGNhODRkMGQ2ZWRlM2ViMC4uZDlhODZmZGJhNjMz
ZTQwMjA5YzYzMmM5ZGM5NzFjODhjYzRlNmEzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzCkBAIC0zNTUsNTMg
KzM1NSw2MyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHlPYmplY3QucHJvdG90eXBl
ID0gewogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UHJveHlPYmplY3R9Ci0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFJlY2VpdmVyfQorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5DaHVua2VkVHJh
bnNmZXJyZXJ9CiAgKi8KIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXJQcm94eSA9IGZ1
bmN0aW9uKHdvcmtlciwgb2JqZWN0SWQpCiB7CiAgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFByb3h5T2JqZWN0LmNhbGwodGhpcywgd29ya2VyLCBvYmplY3RJZCk7Ci0gICAgdGhpcy5fb25M
b2FkQ2FsbGJhY2tzID0gW107CisgICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlOworICAgIHRoaXMu
X3BlbmRpbmdTbmFwc2hvdENvbnN1bWVycyA9IFtdOwogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90TG9hZGVyUHJveHkucHJvdG90eXBlID0geworICAgIHN0YXJ0VHJhbnNmZXI6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSB0cnVlOworICAgICAgICB0aGlz
LmNhbGxNZXRob2QobnVsbCwgInN0YXJ0VHJhbnNmZXIiKTsKKyAgICB9LAorCisgICAgaXNTdGFy
dGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRlZDsKKyAg
ICB9LAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UHJveHkpfSBjYWxsYmFjawotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAg
ICovCi0gICAgc3RhcnRMb2FkaW5nOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICBhZGRDb25zdW1l
cjogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewotICAgICAgICB2YXIgbG9hZGluZ0hhc0p1c3RT
dGFydGVkID0gIXRoaXMuX29uTG9hZENhbGxiYWNrcy5sZW5ndGg7Ci0gICAgICAgIHRoaXMuX29u
TG9hZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKLSAgICAgICAgcmV0dXJuIGxvYWRpbmdIYXNK
dXN0U3RhcnRlZDsKKyAgICAgICAgdGhpcy5fcGVuZGluZ1NuYXBzaG90Q29uc3VtZXJzLnB1c2go
Y2FsbGJhY2spOwogICAgIH0sCiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1
bmsKICAgICAgKi8KLSAgICBwdXNoSlNPTkNodW5rOiBmdW5jdGlvbihjaHVuaykKKyAgICB0cmFu
c2ZlckNodW5rOiBmdW5jdGlvbihjaHVuaykKICAgICB7Ci0gICAgICAgIHRoaXMuY2FsbE1ldGhv
ZChudWxsLCAicHVzaEpTT05DaHVuayIsIGNodW5rKTsKKyAgICAgICAgdGhpcy5jYWxsTWV0aG9k
KG51bGwsICJ0cmFuc2ZlckNodW5rIiwgY2h1bmspOwogICAgIH0sCiAKLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eSl9IGNhbGxi
YWNrCi0gICAgICovCi0gICAgZmluaXNoTG9hZGluZzogZnVuY3Rpb24oY2FsbGJhY2spCisgICAg
ZmluaXNoVHJhbnNmZXI6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX29uTG9hZENh
bGxiYWNrcy51bnNoaWZ0KGNhbGxiYWNrKTsKLQorICAgICAgICBmdW5jdGlvbiBidWlsZFNuYXBz
aG90KCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5jYWxsRmFjdG9yeU1ldGhvZCh1cGRh
dGVTdGF0aWNEYXRhLmJpbmQodGhpcyksICJidWlsZFNuYXBzaG90IiwgIldlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RQcm94eSIpOworICAgICAgICB9CiAgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVN0
YXRpY0RhdGEoc25hcHNob3RQcm94eSkKICAgICAgICAgewogICAgICAgICAgICAgdGhpcy5kaXNw
b3NlKCk7Ci0gICAgICAgICAgICBzbmFwc2hvdFByb3h5LnVwZGF0ZVN0YXRpY0RhdGEoY2FsbExv
YWRDYWxsYmFja3MuYmluZCh0aGlzKSk7CisgICAgICAgICAgICBzbmFwc2hvdFByb3h5LnVwZGF0
ZVN0YXRpY0RhdGEobm90aWZ5UGVuZGluZ0NvbnN1bWVycy5iaW5kKHRoaXMpKTsKICAgICAgICAg
fQotICAgICAgICBmdW5jdGlvbiBjYWxsTG9hZENhbGxiYWNrcyhzbmFwc2hvdFByb3h5KQorICAg
ICAgICBmdW5jdGlvbiBub3RpZnlQZW5kaW5nQ29uc3VtZXJzKHNuYXBzaG90UHJveHkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb25Mb2FkQ2FsbGJh
Y2tzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIHRoaXMuX29uTG9hZENhbGxiYWNrc1tp
XShzbmFwc2hvdFByb3h5KTsKLSAgICAgICAgICAgIHRoaXMuX29uTG9hZENhbGxiYWNrcyA9IG51
bGw7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3BlbmRpbmdTbmFwc2hv
dENvbnN1bWVycy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nU25h
cHNob3RDb25zdW1lcnNbaV0oc25hcHNob3RQcm94eSk7CisKKyAgICAgICAgICAgIHRoaXMuX3N0
YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdTbmFwc2hvdENvbnN1bWVy
cyA9IFtdOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuY2FsbEZhY3RvcnlNZXRob2QodXBkYXRl
U3RhdGljRGF0YS5iaW5kKHRoaXMpLCAiZmluaXNoTG9hZGluZyIsICJXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UHJveHkiKTsKKyAgICAgICAgdGhpcy5jYWxsTWV0aG9kKGJ1aWxkU25hcHNob3Qu
YmluZCh0aGlzKSwgImZpbmlzaFRyYW5zZmVyIik7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCmlu
ZGV4IGExMTgzYjdlNzBlMDJiMzkxN2I0Mzg1NGMxNmM1MWQzYzAwZDkxNzAuLmJjYmFjMjc0NGI0
YzE1OWZhYjJmM2VjMmUyMmRkOTBkMjQzMjllZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMKQEAgLTc4NywzMCAr
Nzg3LDIzIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUu
X19wcm90b19fID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVUCiAvKioKICAqIEBpbnRlcmZhY2UKICAq
LwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJlY2VpdmVyID0gZnVuY3Rpb24oKQorV2ViSW5z
cGVjdG9yLkNodW5rZWRUcmFuc2ZlcnJlciA9IGZ1bmN0aW9uKCkKIHsKIH0KIAotV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFJlY2VpdmVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eSl9IGNhbGxiYWNr
Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBzdGFydExvYWRpbmc6IGZ1
bmN0aW9uKGNhbGxiYWNrKQorV2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlcnJlci5wcm90b3R5
cGUgPSB7CisgICAgc3RhcnRUcmFuc2ZlcjogZnVuY3Rpb24oKQogICAgIHsKICAgICB9LAogCiAg
ICAgLyoqCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rCiAgICAgICovCi0gICAgcHVzaEpT
T05DaHVuazogZnVuY3Rpb24oY2h1bmspCisgICAgdHJhbnNmZXJDaHVuazogZnVuY3Rpb24oY2h1
bmspCiAgICAgewogICAgIH0sCiAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eSl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgZmlu
aXNoTG9hZGluZzogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgZmluaXNoVHJhbnNmZXI6IGZ1bmN0
aW9uKCkKICAgICB7CiAgICAgfSwKIApAQCAtODMyLDcgKzgyNSw3IEBAIFdlYkluc3BlY3Rvci5I
ZWFwUHJvZmlsZUhlYWRlciA9IGZ1bmN0aW9uKHR5cGUsIHRpdGxlLCB1aWQsIG1heEpTT2JqZWN0
SWQpCiAgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIuY2FsbCh0aGlzLCB0eXBlLCB0aXRs
ZSwgdWlkKTsKICAgICB0aGlzLm1heEpTT2JqZWN0SWQgPSBtYXhKU09iamVjdElkOwogICAgIC8q
KgotICAgICAqIEB0eXBlIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVjZWl2ZXJ9CisgICAg
ICogQHR5cGUge1dlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJyZXJ9CiAgICAgICovCiAgICAg
dGhpcy5fcmVjZWl2ZXIgPSBudWxsOwogICAgIC8qKgpAQCAtODc3LDEzICs4NzAsMTYgQEAgV2Vi
SW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAo
IXRoaXMuX3JlY2VpdmVyKQogICAgICAgICAgICAgdGhpcy5fc2V0dXBXb3JrZXIoKTsKKyAgICAg
ICAgdmFyIGxvYWRlclByb3h5ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
TG9hZGVyUHJveHl9ICovIHRoaXMuX3JlY2VpdmVyOwogCiAgICAgICAgIHRoaXMuX251bWJlck9m
Q2h1bmtzID0gMDsKLSAgICAgICAgaWYgKHRoaXMuX3JlY2VpdmVyLnN0YXJ0TG9hZGluZyhjYWxs
YmFjaykpIHsKKyAgICAgICAgaWYgKCFsb2FkZXJQcm94eS5pc1N0YXJ0ZWQoKSkgeworICAgICAg
ICAgICAgbG9hZGVyUHJveHkuc3RhcnRUcmFuc2ZlcigpOwogICAgICAgICAgICAgdGhpcy5zaWRl
YmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9hZGluZ1x1MjAy
NiIpOwogICAgICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC53YWl0ID0gdHJ1ZTsKICAgICAg
ICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmlsZSh0aGlzLnByb2ZpbGVUeXBlKCkuaWQsIHRo
aXMudWlkKTsKICAgICAgICAgfQorICAgICAgICBsb2FkZXJQcm94eS5hZGRDb25zdW1lcihjYWxs
YmFjayk7CiAgICAgfSwKIAogICAgIF9zZXR1cFdvcmtlcjogZnVuY3Rpb24oKQpAQCAtODkzLDcg
Kzg4OSw5IEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KICAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90V29ya2VyKCk7CiAgICAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCJ3YWl0Iiwgc2V0
UHJvZmlsZVdhaXQsIHRoaXMpOwotICAgICAgICB0aGlzLl9yZWNlaXZlciA9IHdvcmtlci5jcmVh
dGVPYmplY3QoIldlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIiKTsKKyAgICAgICAgdmFy
IGxvYWRlclByb3h5ID0gd29ya2VyLmNyZWF0ZU9iamVjdCgiV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdExvYWRlciIpOworICAgICAgICBsb2FkZXJQcm94eS5hZGRDb25zdW1lcih0aGlzLl9zbmFw
c2hvdFJlY2VpdmVkLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9yZWNlaXZlciA9IGxvYWRl
clByb3h5OwogICAgIH0sCiAKICAgICBkaXNwb3NlOiBmdW5jdGlvbigpCkBAIC05MTIsNyArOTEw
LDYgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgaWYgKHNhdmVkQ2h1bmtzQ291bnQgPT09IHRoaXMuX3RvdGFsTnVtYmVyT2ZDaHVua3MpIHsK
ICAgICAgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBOdW1iZXIuYnl0ZXNU
b1N0cmluZyh0aGlzLl9zbmFwc2hvdFByb3h5LnRvdGFsU2l6ZSk7CiAgICAgICAgICAgICB0aGlz
LnNpZGViYXJFbGVtZW50LndhaXQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuX3NhdmVkQ2h1
bmtzQ291bnQgPSAwOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHRoaXMuc2lkZWJhckVs
ZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNhdmluZ1x1MjAyNiAlZFwl
IiwgKHNhdmVkQ2h1bmtzQ291bnQgKiAxMDAgLyB0aGlzLl90b3RhbE51bWJlck9mQ2h1bmtzKS50
b0ZpeGVkKDIpKTsKICAgICB9LApAQCAtOTIwLDEzICs5MTcsMTMgQEAgV2ViSW5zcGVjdG9yLkhl
YXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKICAgICAvKioKICAgICAgKiBAcGFyYW0ge3N0
cmluZ30gY2h1bmsKICAgICAgKi8KLSAgICBwdXNoSlNPTkNodW5rOiBmdW5jdGlvbihjaHVuaykK
KyAgICB0cmFuc2ZlckNodW5rOiBmdW5jdGlvbihjaHVuaykKICAgICB7CiAgICAgICAgICsrdGhp
cy5fbnVtYmVyT2ZDaHVua3M7Ci0gICAgICAgIHRoaXMuX3JlY2VpdmVyLnB1c2hKU09OQ2h1bmso
Y2h1bmspOworICAgICAgICB0aGlzLl9yZWNlaXZlci50cmFuc2ZlckNodW5rKGNodW5rKTsKICAg
ICB9LAogCi0gICAgX3BhcnNlZDogZnVuY3Rpb24oc25hcHNob3RQcm94eSkKKyAgICBfc25hcHNo
b3RSZWNlaXZlZDogZnVuY3Rpb24oc25hcHNob3RQcm94eSkKICAgICB7CiAgICAgICAgIHRoaXMu
X3JlY2VpdmVyID0gbnVsbDsKICAgICAgICAgaWYgKHNuYXBzaG90UHJveHkpCkBAIC05MzgsMTEg
KzkzNSwxMiBAQCBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewog
ICAgICAgICB3b3JrZXIuc3RhcnRDaGVja2luZ0ZvckxvbmdSdW5uaW5nQ2FsbHMoKTsKICAgICB9
LAogCi0gICAgZmluaXNoSGVhcFNuYXBzaG90OiBmdW5jdGlvbigpCisgICAgZmluaXNoSGVhcFNu
YXBzaG90OiBmdW5jdGlvbih0cmFuc2ZlckZpbmlzaGVkKQogICAgIHsKICAgICAgICAgdGhpcy5f
dG90YWxOdW1iZXJPZkNodW5rcyA9IHRoaXMuX251bWJlck9mQ2h1bmtzOwotICAgICAgICBpZiAo
dGhpcy5fcmVjZWl2ZXIuZmluaXNoTG9hZGluZyh0aGlzLl9wYXJzZWQuYmluZCh0aGlzKSkpCi0g
ICAgICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJQYXJzaW5nXHUyMDI2Iik7CisgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3Vi
dGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlBhcnNpbmdcdTIwMjYiKTsKKyAgICAgICAg
aWYgKCF0cmFuc2ZlckZpbmlzaGVkKQorICAgICAgICAgICAgdGhpcy5fcmVjZWl2ZXIuZmluaXNo
VHJhbnNmZXIoKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC05NTEsNyArOTQ5LDcgQEAgV2ViSW5z
cGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBjYW5T
YXZlVG9GaWxlOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gIXRoaXMuZnJvbUZp
bGUoKSAmJiB0aGlzLl9zbmFwc2hvdFByb3h5ICYmICF0aGlzLl9zYXZlZENodW5rc0NvdW50ICYm
IFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5jYW5BcHBlbmQoKTsKKyAgICAgICAgcmV0dXJuICF0
aGlzLmZyb21GaWxlKCkgJiYgdGhpcy5fc25hcHNob3RQcm94eSAmJiAhdGhpcy5fcmVjZWl2ZXIg
JiYgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmNhbkFwcGVuZCgpOwogICAgIH0sCiAKICAgICAv
KioKQEAgLTk2MCw5ICs5NTgsMjAgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnBy
b3RvdHlwZSA9IHsKICAgICBzYXZlVG9GaWxlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0
aGlzLl9maWxlTmFtZSA9IHRoaXMuX2ZpbGVOYW1lIHx8ICJIZWFwLSIgKyBuZXcgRGF0ZSgpLnRv
SVNPODYwMUNvbXBhY3QoKSArICIuaGVhcHNuYXBzaG90IjsKLSAgICAgICAgdGhpcy5fcmVjZWl2
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNhdmVUb0ZpbGVSZWNlaXZlcih0aGlz
Ll9maWxlTmFtZSwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX251bWJlck9mQ2h1bmtzID0gMDsKLSAg
ICAgICAgdGhpcy5fcmVjZWl2ZXIuc3RhcnRMb2FkaW5nKGZ1bmN0aW9uKHNuYXBzaG90KSB7IH0p
OworICAgICAgICB2YXIgZGVsZWdhdGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNh
dmVUb0ZpbGVEZWxlZ2F0ZSh0aGlzKTsKKyAgICAgICAgdGhpcy5fcmVjZWl2ZXIgPSB0aGlzLl9j
cmVhdGVGaWxlV3JpdGVyKHRoaXMuX2ZpbGVOYW1lLCBkZWxlZ2F0ZSk7CisgICAgICAgIHRoaXMu
X251bWJlck9mUmVjZWl2ZWRDaHVua3MgPSAwOworICAgICAgICB0aGlzLl9yZWNlaXZlci5zdGFy
dFRyYW5zZmVyKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7IXN0cmluZ30g
ZmlsZU5hbWUKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJyZXJE
ZWxlZ2F0ZX0gZGVsZWdhdGUKKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuQ2h1bmtlZFRy
YW5zZmVycmVyfQorICAgICAqLworICAgIF9jcmVhdGVGaWxlV3JpdGVyOiBmdW5jdGlvbihmaWxl
TmFtZSwgZGVsZWdhdGUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5D
aHVua2VkRmlsZVdyaXRlcihmaWxlTmFtZSwgZGVsZWdhdGUpOwogICAgIH0sCiAKICAgICAvKioK
QEAgLTEwMDAsMTAyICsxMDA5LDg2IEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQud2FpdCA9IHRydWU7CiAg
ICAgICAgIHRoaXMuX3NldHVwV29ya2VyKCk7CiAgICAgICAgIHRoaXMuX251bWJlck9mQ2h1bmtz
ID0gMDsKLSAgICAgICAgdGhpcy5fcmVjZWl2ZXIuc3RhcnRMb2FkaW5nKGZ1bmN0aW9uKGlnbm9y
ZWRTbmFwc2hvdFByb3h5KSB7IH0pOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0g
e0V2ZW50fSBldmVudAotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gb25Mb2FkKGV2ZW50
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgIT09
IEZpbGVSZWFkZXIuRE9ORSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB0
aGlzLl9uZXh0Q2h1bmtMb2FkZWQoZXZlbnQudGFyZ2V0LnJlc3VsdCk7Ci0gICAgICAgIH0KIAot
ICAgICAgICB0aGlzLl9maWxlID0gZmlsZTsKLSAgICAgICAgdGhpcy5fZXhwZWN0ZWRTaXplID0g
ZmlsZS5zaXplOwotICAgICAgICB0aGlzLl9sb2FkZWRTaXplID0gMDsKLSAgICAgICAgdGhpcy5f
cmVhZGVyID0gdGhpcy5fY3JlYXRlRmlsZVJlYWRlcigpOwotICAgICAgICB0aGlzLl9yZWFkZXIu
b25sb2FkID0gb25Mb2FkLmJpbmQodGhpcyk7Ci0gICAgICAgIHRoaXMuX3JlYWRlci5vbmVycm9y
ID0gb25FcnJvcjsKLSAgICAgICAgdGhpcy5fbG9hZE5leHRDaHVuaygpOworICAgICAgICB2YXIg
ZGVsZWdhdGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRGcm9tRmlsZURlbGVn
YXRlKHRoaXMpOworICAgICAgICB2YXIgZmlsZVJlYWRlciA9IHRoaXMuX2NyZWF0ZUZpbGVSZWFk
ZXIoZmlsZSwgZGVsZWdhdGUpOworICAgICAgICBmaWxlUmVhZGVyLm9uZXJyb3IgPSBvbkVycm9y
LmJpbmQodGhpcyk7CisgICAgICAgIGZpbGVSZWFkZXIuc3RhcnQodGhpcy5fcmVjZWl2ZXIpOwog
ICAgIH0sCiAKLSAgICBfbG9hZE5leHRDaHVuazogZnVuY3Rpb24oKQorICAgIF9jcmVhdGVGaWxl
UmVhZGVyOiBmdW5jdGlvbihmaWxlLCBkZWxlZ2F0ZSkKICAgICB7Ci0gICAgICAgIHZhciBsb2Fk
ZWRTaXplID0gdGhpcy5fbG9hZGVkU2l6ZTsKLSAgICAgICAgdmFyIGNodW5rU2l6ZSA9IDEwMDAw
MDAwOwotICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX2V4cGVjdGVkU2l6ZSA8IGxvYWRlZFNpemUg
KyBjaHVua1NpemUgPyB0aGlzLl9leHBlY3RlZFNpemUgLSBsb2FkZWRTaXplIDogY2h1bmtTaXpl
OwotICAgICAgICB2YXIgbmV4dFBhcnQgPSB0aGlzLl9maWxlLndlYmtpdFNsaWNlKGxvYWRlZFNp
emUsIGxvYWRlZFNpemUgKyBzaXplKTsKLSAgICAgICAgdGhpcy5fcmVhZGVyLnJlYWRBc1RleHQo
bmV4dFBhcnQpOwotICAgIH0sCisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNodW5r
ZWRGaWxlUmVhZGVyKGZpbGUsIDEwMDAwMDAwLCBkZWxlZ2F0ZSk7CisgICAgfQorfQorCitXZWJJ
bnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3Bl
Y3Rvci5Qcm9maWxlSGVhZGVyLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAq
IEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVycmVyRGVsZWdhdGV9Cisg
Ki8KK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkRnJvbUZpbGVEZWxlZ2F0ZSA9IGZ1bmN0
aW9uKHNuYXBzaG90SGVhZGVyKQoreworICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyID0gc25hcHNo
b3RIZWFkZXI7Cit9CiAKLSAgICBfbmV4dENodW5rTG9hZGVkOiBmdW5jdGlvbihkYXRhKQorV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRGcm9tRmlsZURlbGVnYXRlLnByb3RvdHlwZSA9IHsK
KyAgICBvblRyYW5zZmVyU3RhcnRlZDogZnVuY3Rpb24oc291cmNlKQogICAgIHsKLSAgICAgICAg
dGhpcy5fbG9hZGVkU2l6ZSArPSBkYXRhLmxlbmd0aDsKLSAgICAgICAgdGhpcy5fcmVjZWl2ZXIu
cHVzaEpTT05DaHVuayhkYXRhKTsKLSAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdWJ0aXRs
ZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9hZGluZ1x1MjAyNiAlZCUiLCAodGhpcy5fbG9h
ZGVkU2l6ZSAqIDEwMCAvIHRoaXMuX2V4cGVjdGVkU2l6ZSkudG9GaXhlZCgyKSk7CisgICAgfSwK
IAotICAgICAgICBpZiAodGhpcy5fbG9hZGVkU2l6ZSA9PT0gdGhpcy5fZXhwZWN0ZWRTaXplKSB7
Ci0gICAgICAgICAgICB0aGlzLl9maWxlID0gbnVsbDsKLSAgICAgICAgICAgIHRoaXMuX3JlYWRl
ciA9IG51bGw7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaEhlYXBTbmFwc2hvdCgpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2xvYWROZXh0Q2h1bmsoKTsK
KyAgICBvbkNodW5rVHJhbnNmZXJyZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKKyAgICB7CisgICAgICAg
IHRoaXMuX3NuYXBzaG90SGVhZGVyLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKAorICAgICAgICAgICAgIkxvYWRpbmdcdTIwMjYgJWQlIiwgKHNvdXJjZS5n
ZXRMb2FkZWRTaXplKCkgKiAxMDAgLyBzb3VyY2UuZ2V0RmlsZVNpemUoKSkudG9GaXhlZCgyKSk7
CiAgICAgfSwKIAotICAgIF9jcmVhdGVGaWxlUmVhZGVyOiBmdW5jdGlvbigpCisgICAgb25UcmFu
c2ZlckZpbmlzaGVkOiBmdW5jdGlvbihzb3VyY2UpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3
IEZpbGVSZWFkZXIoKTsKKyAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuZmluaXNoSGVhcFNu
YXBzaG90KHRydWUpOwogICAgIH0KIH0KIAotV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVy
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlci5wcm90b3R5
cGU7Ci0KLQogLyoqCiAgKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90UmVjZWl2ZXJ9CisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkNo
dW5rZWRUcmFuc2ZlcnJlcn0KKyAqIEBwYXJhbSB7IXN0cmluZ30gZmlsZU5hbWUKKyAqIEBwYXJh
bSB7P1dlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJyZXJEZWxlZ2F0ZT19IGRlbGVnYXRlCiAg
Ki8KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTYXZlVG9GaWxlUmVjZWl2ZXIgPSBmdW5jdGlv
bihmaWxlTmFtZSwgc25hcHNob3RIZWFkZXIpCitXZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVXcml0
ZXIgPSBmdW5jdGlvbihmaWxlTmFtZSwgZGVsZWdhdGUpCiB7CiAgICAgdGhpcy5fZmlsZU5hbWUg
PSBmaWxlTmFtZTsKLSAgICB0aGlzLl9zbmFwc2hvdEhlYWRlciA9IHNuYXBzaG90SGVhZGVyOwot
ICAgIHRoaXMuX3NhdmVkQ2h1bmtzID0gMDsKLSAgICB0aGlzLl9maW5pc2hMb2FkaW5nQ2FsbGJh
Y2tzID0gW107CisgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKIH0KIAotV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFNhdmVUb0ZpbGVSZWNlaXZlci5wcm90b3R5cGUgPSB7CitXZWJJbnNw
ZWN0b3IuQ2h1bmtlZEZpbGVXcml0ZXIucHJvdG90eXBlID0gewogICAgIC8qKgotICAgICAqIEBw
YXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5KX0gY2FsbGJhY2sK
LSAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqIEBvdmVycmlkZQogICAgICAqLwotICAg
IHN0YXJ0TG9hZGluZzogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgc3RhcnRUcmFuc2ZlcjogZnVu
Y3Rpb24oKQogICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuU2F2ZWRVUkwsIHRo
aXMuX3N0YXJ0U2F2aW5nU25hcHNob3QsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuZmls
ZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRU
eXBlcy5TYXZlZFVSTCwgdGhpcy5fb25UcmFuc2ZlclN0YXJ0ZWQsIHRoaXMpOwogICAgICAgICBX
ZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuc2F2ZSh0aGlzLl9maWxlTmFtZSwgIiIsIHRydWUpOwot
ICAgICAgICBpZiAoY2FsbGJhY2spCi0gICAgICAgICAgICB0aGlzLl9maW5pc2hMb2FkaW5nQ2Fs
bGJhY2tzLnB1c2goY2FsbGJhY2spOwotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LAogCiAg
ICAgLyoqCisgICAgICogQG92ZXJyaWRlCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rCiAg
ICAgICovCi0gICAgcHVzaEpTT05DaHVuazogZnVuY3Rpb24oY2h1bmspCisgICAgdHJhbnNmZXJD
aHVuazogZnVuY3Rpb24oY2h1bmspCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1h
bmFnZXIuYXBwZW5kKHRoaXMuX2ZpbGVOYW1lLCBjaHVuayk7CiAgICAgfSwKIAogICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5KX0g
Y2FsbGJhY2sKKyAgICAgKiBAb3ZlcnJpZGUKICAgICAgKi8KLSAgICBmaW5pc2hMb2FkaW5nOiBm
dW5jdGlvbihjYWxsYmFjaykKKyAgICBmaW5pc2hUcmFuc2ZlcjogZnVuY3Rpb24oKQogICAgIHsK
LSAgICAgICAgdGhpcy5fZmluaXNoTG9hZGluZ0NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maW5pc2hMb2FkaW5nQ2FsbGJhY2tzLmxl
bmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fZmluaXNoTG9hZGluZ0NhbGxiYWNrc1tpXShu
dWxsKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuQXBwZW5kZWRUb1VSTCwgdGhp
cy5fb25DaHVua1RyYW5zZmVycmVkLCB0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRl
KQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUub25UcmFuc2ZlckZpbmlzaGVkKHRoaXMpOwog
ICAgIH0sCiAKICAgICBkaXNwb3NlOiBmdW5jdGlvbigpCkBAIC0xMTA1LDI2ICsxMDk4LDUyIEBA
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTYXZlVG9GaWxlUmVjZWl2ZXIucHJvdG90eXBlID0g
ewogICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAogICAg
ICAqLwotICAgIF9zdGFydFNhdmluZ1NuYXBzaG90OiBmdW5jdGlvbihldmVudCkKKyAgICBfb25U
cmFuc2ZlclN0YXJ0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50
LmRhdGEgIT09IHRoaXMuX2ZpbGVOYW1lKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
aGlzLl9zbmFwc2hvdEhlYWRlci5fc2F2ZVN0YXR1c1VwZGF0ZSgwKTsKLSAgICAgICAgV2ViSW5z
cGVjdG9yLmZpbGVNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVN
YW5hZ2VyLkV2ZW50VHlwZXMuU2F2ZWRVUkwsIHRoaXMuX3N0YXJ0U2F2aW5nU25hcHNob3QsIHRo
aXMpOwotICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5BcHBlbmRlZFRvVVJMLCB0aGlzLl9z
YXZlU3RhdHVzVXBkYXRlLCB0aGlzKTsKLSAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxl
KHRoaXMuX3NuYXBzaG90SGVhZGVyLnByb2ZpbGVUeXBlKCkuaWQsIHRoaXMuX3NuYXBzaG90SGVh
ZGVyLnVpZCk7CisgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkKKyAgICAgICAgICAgIHRoaXMu
X2RlbGVnYXRlLm9uVHJhbnNmZXJTdGFydGVkKHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3Iu
ZmlsZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIu
RXZlbnRUeXBlcy5TYXZlZFVSTCwgdGhpcy5fb25UcmFuc2ZlclN0YXJ0ZWQsIHRoaXMpOworICAg
ICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5BcHBlbmRlZFRvVVJMLCB0aGlzLl9vbkNodW5rVHJh
bnNmZXJyZWQsIHRoaXMpOwogICAgIH0sCiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5FdmVudH0gZXZlbnQKICAgICAgKi8KLSAgICBfc2F2ZVN0YXR1c1VwZGF0ZTogZnVu
Y3Rpb24oZXZlbnQpCisgICAgX29uQ2h1bmtUcmFuc2ZlcnJlZDogZnVuY3Rpb24oZXZlbnQpCiAg
ICAgewogICAgICAgICBpZiAoZXZlbnQuZGF0YSAhPT0gdGhpcy5fZmlsZU5hbWUpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyLl9zYXZlU3RhdHVzVXBk
YXRlKCsrdGhpcy5fc2F2ZWRDaHVua3MpOwotICAgICAgICBpZiAodGhpcy5fc2F2ZWRDaHVua3Mg
PT09IHRoaXMuX3NuYXBzaG90SGVhZGVyLl90b3RhbE51bWJlck9mQ2h1bmtzKQotICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuQXBwZW5kZWRUb1VSTCwgdGhpcy5fc2F2ZVN0YXR1
c1VwZGF0ZSwgdGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkKKyAgICAgICAgICAg
IHRoaXMuX2RlbGVnYXRlLm9uQ2h1bmtUcmFuc2ZlcnJlZCh0aGlzKTsKICAgICB9Ci19OworfQog
CisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5DaHVu
a2VkVHJhbnNmZXJyZXJEZWxlZ2F0ZX0KKyAqLworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNh
dmVUb0ZpbGVEZWxlZ2F0ZSA9IGZ1bmN0aW9uKHNuYXBzaG90SGVhZGVyKQoreworICAgIHRoaXMu
X3NuYXBzaG90SGVhZGVyID0gc25hcHNob3RIZWFkZXI7CisgICAgdGhpcy5fc2F2ZWRDaHVua3Mg
PSAwOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2F2ZVRvRmlsZURlbGVnYXRlLnBy
b3RvdHlwZSA9IHsKKyAgICBvblRyYW5zZmVyU3RhcnRlZDogZnVuY3Rpb24oc291cmNlKQorICAg
IHsKKyAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuX3NhdmVTdGF0dXNVcGRhdGUoMCk7Cisg
ICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmlsZSh0aGlzLl9zbmFwc2hvdEhlYWRlci5wcm9m
aWxlVHlwZSgpLmlkLCB0aGlzLl9zbmFwc2hvdEhlYWRlci51aWQpOworICAgIH0sCisKKyAgICBv
bkNodW5rVHJhbnNmZXJyZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKKyAgICB7CisgICAgICAgIHRoaXMu
X3NuYXBzaG90SGVhZGVyLl9zYXZlU3RhdHVzVXBkYXRlKCsrdGhpcy5fc2F2ZWRDaHVua3MpOwor
ICAgIH0sCisKKyAgICBvblRyYW5zZmVyRmluaXNoZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKKyAgICB7
CisgICAgICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyLl9zbmFwc2hvdFJlY2VpdmVkKG51bGwpOwor
ICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UHJvZmlsZXNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJv
ZmlsZXNQYW5lbC5qcwppbmRleCBjZTEyMjk2MjA4YjE3OTU3YTljOTI2ZDFhNWVhMGVlZDJlMmU4
OGFhLi41NGI1YmVkYWU3MmY2NzdmODU2ZjBjMDk3OTFlY2U2ODA4NzQyM2QxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCkBA
IC0yNTksMTcgKzI1OSw4IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9
IHsKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9maWxlU2VsZWN0b3JFbGVtZW50KQogICAgICAg
ICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2ZpbGVTZWxlY3RvckVsZW1lbnQp
OwotCi0gICAgICAgIHZhciBmaWxlU2VsZWN0b3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiaW5wdXQiKTsKLSAgICAgICAgZmlsZVNlbGVjdG9yRWxlbWVudC50eXBlID0gImZpbGUi
OwotICAgICAgICBmaWxlU2VsZWN0b3JFbGVtZW50LnN0eWxlLnpJbmRleCA9IC0xOwotICAgICAg
ICBmaWxlU2VsZWN0b3JFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKLSAgICAg
ICAgZnVuY3Rpb24gb25DaGFuZ2UoZXZlbnQpIHsKLSAgICAgICAgICAgIHRoaXMuX2xvYWRGcm9t
RmlsZSh0aGlzLl9maWxlU2VsZWN0b3JFbGVtZW50LmZpbGVzWzBdKTsKLSAgICAgICAgfQotICAg
ICAgICBmaWxlU2VsZWN0b3JFbGVtZW50Lm9uY2hhbmdlID0gb25DaGFuZ2UuYmluZCh0aGlzKTsK
LSAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGZpbGVTZWxlY3RvckVsZW1lbnQpOwot
ICAgICAgICB0aGlzLl9maWxlU2VsZWN0b3JFbGVtZW50ID0gZmlsZVNlbGVjdG9yRWxlbWVudDsK
KyAgICAgICAgdGhpcy5fZmlsZVNlbGVjdG9yRWxlbWVudCA9IFdlYkluc3BlY3Rvci5jcmVhdGVG
aWxlU2VsZWN0b3JFbGVtZW50KHRoaXMuX2xvYWRGcm9tRmlsZS5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2ZpbGVTZWxlY3RvckVsZW1lbnQpOwog
ICAgIH0sCiAKICAgICBfbG9hZEZyb21GaWxlOiBmdW5jdGlvbihmaWxlKQpAQCAtNjYyLDkgKzY1
Myw5IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICBfYWRk
SGVhcFNuYXBzaG90Q2h1bms6IGZ1bmN0aW9uKHVpZCwgY2h1bmspCiAgICAgewogICAgICAgICB2
YXIgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKLSAgICAgICAgaWYgKCFw
cm9maWxlICkKKyAgICAgICAgaWYgKCFwcm9maWxlKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBwcm9maWxlLnB1c2hKU09OQ2h1bmsoY2h1bmspOworICAgICAgICBwcm9maWxlLnRyYW5z
ZmVyQ2h1bmsoY2h1bmspOwogICAgIH0sCiAKICAgICAvKioKQEAgLTY3NSw3ICs2NjYsNyBAQCBX
ZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBwcm9m
aWxlID0gdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHVpZCwgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCldOwogICAgICAgICBpZiAoIXByb2ZpbGUp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHByb2ZpbGUuZmluaXNoSGVhcFNuYXBzaG90
KCk7CisgICAgICAgIHByb2ZpbGUuZmluaXNoSGVhcFNuYXBzaG90KGZhbHNlKTsKICAgICB9LAog
CiAgICAgLyoqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1dlYktpdC5xcmMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5x
cmMKaW5kZXggNDM0NTI1ZTExYTM4MDlhOTU1OTk1ZGUwOTUzNGQwMTFjYzBhNjE5NC4uOTBmOWNk
NDEwODkzYTlmNWFmMWVmMWQ0YWUwMTg5Nzk3MjZjYzllNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAtNjIsNiArNjIsNyBAQAogICAgIDxm
aWxlPkZpbGVNYW5hZ2VyLmpzPC9maWxlPgogICAgIDxmaWxlPkZpbGVTeXN0ZW1Nb2RlbC5qczwv
ZmlsZT4KICAgICA8ZmlsZT5GaWxlU3lzdGVtVmlldy5qczwvZmlsZT4KKyAgICA8ZmlsZT5GaWxl
VXRpbHMuanM8L2ZpbGU+CiAgICAgPGZpbGU+RmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nLmpz
PC9maWxlPgogICAgIDxmaWxlPkZvbnRWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkdvVG9MaW5l
RGlhbG9nLmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggNjE5MDY0MGUzMzJiYzg5NjBhZWMzMzg4ZDY5NDhlNmI5
NjZhOTUzNS4uMjU1ZWFiNzM3MmUzOTcwOGZhNzhiYWM3MTIxZDllMzIzMmEzMDY3MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCkBA
IC0xNjYsNiArMTY2LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJGaWxlQ29udGVudFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkZpbGVTeXN0ZW1Nb2RlbC5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRmlsZVN5c3RlbVZpZXcuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkZpbGVV
dGlscy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iRm9udFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9IkltYWdlVmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iRGF0YWJhc2VUYWJsZVZpZXcuanMiPjwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDM0ODlhMDljMDU4YzhmMjUxMmFmZDg4ZTUzYTE2ZmEwZDczNjQzYTAuLjUwYTlhMjQxNzUyNTM2
ZWI4M2Y3MTFmOGM0MDM5MTRmOTc5ZjMzZTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0w
Ny0yNiAgRXVnZW5lIEtseXVjaG5pa292ICA8ZXVzdGFzLmJpZ0BnbWFpbC5jb20+CisKKyAgICAg
ICAgV2ViIEluc3BlY3RvcjogUHJvZmlsZXM6IGV4dHJhY3Qgc2F2ZSB0byBmaWxlIC8gbG9hZCBm
cm9tIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTkyMzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2hhbmdlZCB0ZXN0IHRvIGFkb3B0IG5ldyBBUEkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJv
ZmlsZXIvaGVhcC1zbmFwc2hvdC1sb2FkZXIuaHRtbDoKKyAgICAgICAgQWRvcHRlZCBuZXcgQVBJ
LgorCiAyMDEyLTA3LTI1ICBBbmRyZXcgV2lsc29uICA8YXR3aWxzb25AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQgY2hyb21pdW0gZXhwZWN0YXRpb25zIGNoYW5nZS4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxvYWRl
ci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9h
ZGVyLmh0bWwKaW5kZXggMThlMjE4YTgyMzkyZDcyMWQxYmU0ODQzNmI3NTA3ZDI3N2U1NmVmNC4u
YmI2NDU3MTMyMjJkODQxNmNmNDM3ZjZjYmQzZTFmMzk1OTY0Zjc1ZSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0
bWwKQEAgLTE5LDkgKzE5LDExIEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICBmdW5jdGlvbiBo
ZWFwU25hcHNob3RMb2FkZXJUZXN0KG5leHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBs
b2FkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlcigpOworICAgICAgICAg
ICAgbG9hZGVyLnN0YXJ0VHJhbnNmZXIoKTsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBs
ID0gc291cmNlU3RyaW5naWZpZWQubGVuZ3RoOyBpIDwgbDsgaSArPSBwYXJ0U2l6ZSkKLSAgICAg
ICAgICAgICAgICBsb2FkZXIucHVzaEpTT05DaHVuayhzb3VyY2VTdHJpbmdpZmllZC5zbGljZShp
LCBpICsgcGFydFNpemUpKTsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBsb2FkZXIuZmluaXNo
TG9hZGluZygpOworICAgICAgICAgICAgICAgIGxvYWRlci50cmFuc2ZlckNodW5rKHNvdXJjZVN0
cmluZ2lmaWVkLnNsaWNlKGksIGkgKyBwYXJ0U2l6ZSkpOworICAgICAgICAgICAgbG9hZGVyLmZp
bmlzaFRyYW5zZmVyKCk7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbG9hZGVyLmJ1aWxkU25h
cHNob3QoKTsKICAgICAgICAgICAgIHJlc3VsdC5fbm9kZXMgPSBuZXcgVWludDMyQXJyYXkocmVz
dWx0Ll9ub2Rlcyk7CiAgICAgICAgICAgICByZXN1bHQuX2NvbnRhaW5tZW50RWRnZXMgPSBuZXcg
VWludDMyQXJyYXkocmVzdWx0Ll9jb250YWlubWVudEVkZ2VzKTsKICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYXNzZXJ0U25hcHNob3RFcXVhbHMobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3QoSW5zcGVjdG9yVGVzdC5jcmVhdGVIZWFwU25hcHNob3RNb2NrKCkpLCByZXN1bHQpOwpAQCAt
NzcsNyArNzksNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICBQcm9maWxlckFn
ZW50LmdldFByb2ZpbGUgPSBvbGRHZXRQcm9maWxlOwogICAgICAgICAgICAgICAgIG5leHQoKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkU25pZmZlcihwcm9m
aWxlSGVhZGVyLCAiX3BhcnNlZCIsIHBhcnNlZCk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmFkZFNuaWZmZXIocHJvZmlsZUhlYWRlciwgIl9zbmFwc2hvdFJlY2VpdmVkIiwgcGFyc2VkKTsK
IAogICAgICAgICAgICAgcGFuZWwuc2hvd1Byb2ZpbGUocHJvZmlsZUhlYWRlcik7CiAgICAgICAg
IH0sCkBAIC04OCwyMCArOTAsMzIgQEAgZnVuY3Rpb24gdGVzdCgpCiAKICAgICAgICAgICAgIHZh
ciBmaWxlTW9jayA9IHsKICAgICAgICAgICAgICAgICBuYW1lOiAibW9jay5oZWFwc25hcHNob3Qi
LAotICAgICAgICAgICAgICAgIHNpemU6IHNvdXJjZVN0cmluZ2lmaWVkLmxlbmd0aCwKLSAgICAg
ICAgICAgICAgICBzbGljZTogZnVuY3Rpb24oYmVnaW4sIGVuZCkgeyByZXR1cm4gdGhpczsgfSwK
LSAgICAgICAgICAgICAgICB3ZWJraXRTbGljZTogZnVuY3Rpb24oYmVnaW4sIGVuZCkgeyByZXR1
cm4gdGhpczsgfQorICAgICAgICAgICAgICAgIHNpemU6IHNvdXJjZVN0cmluZ2lmaWVkLmxlbmd0
aAogICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxl
SGVhZGVyLnByb3RvdHlwZS5fY3JlYXRlRmlsZVJlYWRlciA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5vdmVycmlkZShXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFk
ZXIucHJvdG90eXBlLCAnX2NyZWF0ZUZpbGVSZWFkZXInLCBmdW5jdGlvbihmaWxlTW9jaywgZGVs
ZWdhdGUpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICBy
ZWFkQXNUZXh0OiBmdW5jdGlvbihmaWxlUGFydCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHByb2ZpbGVIZWFkZXIgPSBwYW5lbC5fcHJvZmlsZXNbcGFuZWwuX3Byb2ZpbGVzLmxlbmd0
aCAtIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVy
KHByb2ZpbGVIZWFkZXIsICJfcGFyc2VkIiwgZnVuY3Rpb24gcGFyc2VkKCkgeyBuZXh0KCk7IH0p
OwotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZUhlYWRlci5fbmV4dENodW5rTG9hZGVk
KHNvdXJjZVN0cmluZ2lmaWVkKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9u
KHJlY2VpdmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlci5zdGFydFRyYW5z
ZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5vblRyYW5zZmVyU3RhcnRl
ZCh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLnRyYW5zZmVyQ2h1bmso
c291cmNlU3RyaW5naWZpZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGUub25D
aHVua1RyYW5zZmVycmVkKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIu
ZmluaXNoVHJhbnNmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlLm9uVHJh
bnNmZXJGaW5pc2hlZCh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAg
ICAgICAgICAgICBnZXRMb2FkZWRTaXplOiBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlTW9jay5zaXplOworICAgICAg
ICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIGdldEZpbGVTaXplOiBmdW5j
dGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmaWxlTW9jay5zaXplOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5hZGRTbmlmZmVyKFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5
cGUsICJfc25hcHNob3RSZWNlaXZlZCIsIGZ1bmN0aW9uKCkgeyBuZXh0KCk7IH0pOwogICAgICAg
ICAgICAgcGFuZWwuX2xvYWRGcm9tRmlsZShmaWxlTW9jayk7CiAgICAgICAgIH0KICAgICBdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154659</attachid>
            <date>2012-07-26 08:45:22 -0700</date>
            <delta_ts>2012-08-01 02:56:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92348-20120726194510.patch</filename>
            <type>text/plain</type>
            <size>40053</size>
            <attacher>eustas.bug</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTNhNzVlZGZlN2ZlY2Fk
Y2FjOGU2YTYzOGZiYjEzMTQ5NjdkOWQzOC4uNjE5ODdjYzI5MDJlZTUwMzRmZGNlM2I4M2M5NDYy
OTFlNmYwZTkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTA3LTI2ICBFdWdl
bmUgS2x5dWNobmlrb3YgIDxldXN0YXMuYmlnQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBQcm9maWxlczogZXh0cmFjdCBzYXZlIHRvIGZpbGUgLyBsb2FkIGZyb20gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3RpdmF0aW9u
OiBleHRyYWN0IHJldXNhYmxlIGNvZGUgZm9yIHRpbWVsaW5lIGxvYWQvc2F2ZS4KKyAgICAgICAg
RmlsZVV0aWxzLmpzIHdpbGwgY29udGFpbiBjb21tb24gY29kZS4gTm90IGFsbCBjb2RlIG1vdmVk
IHRvIEZpbGVVdGlscworICAgICAgICB0byBtYWtlIHJldmlldyBlYXNpZXIuIFRoaXMgY29kZSB3
aWxsIGJlIG1vdmVkIGluIG5leHQgcGF0Y2guCisKKyAgICAgICAgQ29yZSBhYnN0cmFjdGlvbnM6
IENodW5rZWRUcmFuc2ZlcnJlciBhbmQgQ2h1bmtlZFRyYW5zZmVycmVyRGVsZWdhdGUuCisKKyAg
ICAgICAgQ2h1bmtlZFRyYW5zZmVycmVyIGlzIGludGVyZmFjZSB0aGF0IGlzIHVzZWQgdG8gdHJh
bnNmZXIgZW50aXR5IGRpdmRlZAorICAgICAgICB0byBjaHVua3MuIFRyYW5zZmVyIHByb2Nlc3Mg
aXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoc3RhcnRUcmFuc2ZlcikKKyAgICAgICAgYW5kIGZp
bmFsaXplZCAoZmluaXNoVHJuc2ZlcikuCisKKyAgICAgICAgQ2h1bmtlZFRyYW5zZmVycmVyRGVs
ZWdhdGUgaXMgaW50ZXJmYWNlIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucyBhYm91dAorICAgICAg
ICB0cmFuc2ZlciBwcm9jZXNzOiBvblRyYW5zZmVyU3RhcnRlZCwgb25DaHVua1RyYW5zZmVycmVk
LCBvblRyYW5zZmVyRmluaXNoZWQuCisKKyAgICAgICAgQ2h1bmtlZEZpbGVSZWFkZXI6IHV0aWxp
dHkgY2xhc3MgdGhhdCBsb2FkcyBmaWxlIGJ5IGNodW5rcyBvZiBzcGVjaWZpZWQgc2l6ZQorICAg
ICAgICBhbmQgbm90aWZpZXMgZ2l2ZW4gZGVsZWdhdGUuIFJlY2lldmVyIChDaHVua2VkVHJhbnNm
ZXJyZXIpIGlzIHN1cHBsaWVkIGFzIGEKKyAgICAgICAgcGFyYW1ldGVyIG9mIG1ldGhvZCAic3Rh
cnQiLgorCisgICAgICAgIENodW5rZWRGaWxlV3JpdGVyOiBpbXBsZW1lbnRhdGlvbiBvZiBDaHVu
a2VkVHJhbnNmZXJyZXIgdGhhdCBzYXZlcyBkYXRhCisgICAgICAgIHRvIGZpbGUgc3BlY2lmaWVk
IGJ5IGZpbGUgbmFtZSBhbmQgbm90aWZpZXMgZ2l2ZW4gZGVsZWdhdGUuCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IEFkZGVkICdGaWxlVXRpbHMuanMnLgorICAgICAgICAqIFdlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qOiBBZGRlZCAnRmlsZVV0aWxzLmpzJy4KKyAgICAgICAgKiBpbnNw
ZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHk6IEFkZGVkICdGaWxlVXRpbHMuanMnLgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRmlsZVV0aWxzLmpzOiBBZGRlZC4KKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJyZXJEZWxlZ2F0ZSk6IEFkZGVkLgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkNodW5rZWRGaWxlUmVhZGVyKTogQWRkZWQuCisgICAgICAgIChXZWJJbnNw
ZWN0b3IuY3JlYXRlRmlsZVNlbGVjdG9yRWxlbWVudCk6IEFkZGVkIHV0aWxpdHkgbWV0aG9kIHRv
IGNvbnN0cnVjdAorICAgICAgICBoaWRkZW4gaW5wdXQgZWxlbWVudCB0byBzZWxlY3QgZmlsZS4K
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qczogQWRv
cHRlZCBuZXcgQVBJLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90
UHJveHkuanM6IEFkb3B0ZWQgbmV3IEFQSS4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFZpZXcuanM6IEFkb3B0ZWQgbmV3IEFQSS4KKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RMb2FkRnJvbUZpbGVEZWxlZ2F0ZSk6CisgICAgICAgIEV4dHJhY3Rl
ZCBmcm9tIGV4aXN0aW5nIGNvZGUuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVX
cml0ZXIpOiBSZW5hbWVkIGFuZCByZWZhY3RvcmVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFNhdmVUb0ZpbGVEZWxlZ2F0ZSk6CisgICAgICAgIEV4dHJhY3RlZCBmcm9tIGV4
aXN0aW5nIGNvZGUuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVs
LmpzOiBBZG9wdGVkIG5ldyBBUEkuCisKIDIwMTItMDctMjQgIFNoYXduIFNpbmdoICA8c2hhd25z
aW5naEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDQ0xheWVy
VHJlZUhvc3RDb21tb246IG1vdmUgcm9vdCBsYXllciBzcGVjaWFsIGNhc2UgaW5pdGlhbGl6YXRp
b24gaW50byBpbnRlcm5hbCBjb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGM5MWM0MTUxNzA4OWE1
ZGUwNTJhMGQ2M2YxNTBmMGIzMzExNjFmZTAuLjJlN2JkMDEzMDU2OTFiNmUwYjg0NzY4ODBhNmM1
NGQyMmI1YjA1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTYyODIsNiArNjI4Miw3IEBACiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlQ29udGVudFZpZXcuanMnLAogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZVN5c3RlbU1vZGVsLmpzJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVTeXN0ZW1WaWV3LmpzJywKKyAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVVdGlscy5qcycsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL2Zyb250LWVuZC9GaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cuanMnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRm9udFZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvR29Ub0xpbmVEaWFsb2cuanMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA1NWNhMGFmNWU4MDgxMTg0MDEwZDUxMDg4
MWY4MWYxNzc3ZWE0OWVjLi5lZTczOWNkOWYwY2U5NTU3YTY5MTE3NDFjNWEzYTc1ZWU1NDYwNWNl
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAt
NzUzODIsNiArNzUzODIsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRmlsZVV0aWxzLmpzIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxmaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cuY3NzIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUt
ZnJvbnQtZW5kLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5k
LnB5CmluZGV4IGQ5MjMzOTNhY2Y5MjBlMDQzMTkzYTBkZDkxMDg2N2YwMjEzZmRhNTUuLmE5ZGVj
ODZiN2FkZGEzYjkzYzMzMmFhYmExMDZhMGI1MTVhOWQ2MmUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKQEAgLTgyLDYgKzgyLDcgQEAgbW9kdWxl
cyA9IFsKICAgICAgICAgICAgICJEZWJ1Z2dlclNjcmlwdE1hcHBpbmcuanMiLAogICAgICAgICAg
ICAgIkZpbGVNYW5hZ2VyLmpzIiwKICAgICAgICAgICAgICJGaWxlU3lzdGVtTW9kZWwuanMiLAor
ICAgICAgICAgICAgIkZpbGVVdGlscy5qcyIsCiAgICAgICAgICAgICAiSEFSRW50cnkuanMiLAog
ICAgICAgICAgICAgIkluZGV4ZWREQk1vZGVsLmpzIiwKICAgICAgICAgICAgICJMaW5raWZpZXIu
anMiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxl
VXRpbHMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVVdGlscy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yMmYwNTk5ZjlmMjQ3MzQxZWJlMDZkMmE5MjVhYTcyZTcxYTcwY2JkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxl
VXRpbHMuanMKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBpbnRlcmZhY2UKKyAqLworV2ViSW5z
cGVjdG9yLkNodW5rZWRUcmFuc2ZlckRlbGVnYXRlID0gZnVuY3Rpb24oKQoreworfQorCitXZWJJ
bnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVyRGVsZWdhdGUucHJvdG90eXBlID0geworICAgIG9uVHJh
bnNmZXJTdGFydGVkOiBmdW5jdGlvbihzb3VyY2UpCisgICAgeworICAgIH0sCisKKyAgICBvbkNo
dW5rVHJhbnNmZXJyZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKKyAgICB7CisgICAgfSwKKworICAgIG9u
VHJhbnNmZXJGaW5pc2hlZDogZnVuY3Rpb24oc291cmNlKQorICAgIHsKKyAgICB9LAorCisgICAg
b25FcnJvcjogZnVuY3Rpb24oc291cmNlLCBldmVudCkKKyAgICB7CisgICAgfQorfQorCisvKioK
KyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHshRmlsZX0gZmlsZQorICogQHBhcmFtIHshbnVt
YmVyfSBjaHVua1NpemUKKyAqIEBwYXJhbSB7P1dlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJE
ZWxlZ2F0ZT19IGRlbGVnYXRlCisgKi8KK1dlYkluc3BlY3Rvci5DaHVua2VkRmlsZVJlYWRlciA9
IGZ1bmN0aW9uKGZpbGUsIGNodW5rU2l6ZSwgZGVsZWdhdGUpCit7CisgICAgdGhpcy5fZmlsZSA9
IGZpbGU7CisgICAgdGhpcy5fZmlsZVNpemUgPSBmaWxlLnNpemU7CisgICAgdGhpcy5fbG9hZGVk
U2l6ZSA9IDA7CisgICAgdGhpcy5fY2h1bmtTaXplID0gY2h1bmtTaXplOworICAgIHRoaXMuX2Rl
bGVnYXRlID0gZGVsZWdhdGU7Cit9CisKK1dlYkluc3BlY3Rvci5DaHVua2VkRmlsZVJlYWRlci5w
cm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkNodW5r
ZWRUcmFuc2ZlcnJlcn0gb3V0cHV0CisgICAgICovCisgICAgc3RhcnQ6IGZ1bmN0aW9uKG91dHB1
dCkKKyAgICB7CisgICAgICAgIHRoaXMuX291dHB1dCA9IG91dHB1dDsKKworICAgICAgICB0aGlz
Ll9yZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAgICAgICB0aGlzLl9yZWFkZXIub25sb2Fk
ID0gdGhpcy5fb25DaHVua0xvYWRlZC5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLl9yZWFkZXIu
b25lcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fb3V0cHV0
LnN0YXJ0VHJhbnNmZXIoKTsKKyAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKQorICAgICAgICAg
ICAgdGhpcy5fZGVsZWdhdGUub25UcmFuc2ZlclN0YXJ0ZWQodGhpcyk7CisgICAgICAgIHRoaXMu
X2xvYWRDaHVuaygpOworICAgIH0sCisKKyAgICBsb2FkZWRTaXplOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkU2l6ZTsKKyAgICB9LAorCisgICAgZmlsZVNp
emU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9maWxlU2l6ZTsKKyAg
ICB9LAorCisgICAgZmlsZU5hbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9maWxlLm5hbWU7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RXZlbnR9
IGV2ZW50CisgICAgICovCisgICAgX29uRXJyb3I6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUub25F
cnJvcih0aGlzLCBldmVudCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RXZl
bnR9IGV2ZW50CisgICAgICovCisgICAgX29uQ2h1bmtMb2FkZWQ6IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlICE9PSBGaWxlUmVhZGVy
LkRPTkUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGRhdGEgPSBldmVudC50
YXJnZXQucmVzdWx0OworICAgICAgICB0aGlzLl9sb2FkZWRTaXplICs9IGRhdGEubGVuZ3RoOwor
CisgICAgICAgIHRoaXMuX291dHB1dC50cmFuc2ZlckNodW5rKGRhdGEpOworICAgICAgICBpZiAo
dGhpcy5fZGVsZWdhdGUpCisgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vbkNodW5rVHJhbnNm
ZXJyZWQodGhpcyk7CisKKyAgICAgICAgaWYgKHRoaXMuX2xvYWRlZFNpemUgPT09IHRoaXMuX2Zp
bGVTaXplKSB7CisgICAgICAgICAgICB0aGlzLl9maWxlID0gbnVsbDsKKyAgICAgICAgICAgIHRo
aXMuX3JlYWRlciA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9vdXRwdXQuZmluaXNoVHJhbnNm
ZXIoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkKKyAgICAgICAgICAgICAgICB0
aGlzLl9kZWxlZ2F0ZS5vblRyYW5zZmVyRmluaXNoZWQodGhpcyk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9sb2FkQ2h1bmsoKTsKKyAgICB9LAorCisg
ICAgX2xvYWRDaHVuazogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGNodW5rU3RhcnQg
PSB0aGlzLl9sb2FkZWRTaXplOworICAgICAgICB2YXIgY2h1bmtFbmQgPSBNYXRoLm1pbih0aGlz
Ll9maWxlU2l6ZSwgY2h1bmtTdGFydCArIHRoaXMuX2NodW5rU2l6ZSkKKyAgICAgICAgdmFyIG5l
eHRQYXJ0ID0gdGhpcy5fZmlsZS53ZWJraXRTbGljZShjaHVua1N0YXJ0LCBjaHVua0VuZCk7Cisg
ICAgICAgIHRoaXMuX3JlYWRlci5yZWFkQXNUZXh0KG5leHRQYXJ0KTsKKyAgICB9Cit9CisKKy8q
KgorICogQHBhcmFtIHshZnVuY3Rpb24oRmlsZSl9IGNhbGxiYWNrCisgKiBAcmV0dXJuIHtOb2Rl
fQorICovCitXZWJJbnNwZWN0b3IuY3JlYXRlRmlsZVNlbGVjdG9yRWxlbWVudCA9IGZ1bmN0aW9u
KGNhbGxiYWNrKSB7CisgICAgdmFyIGZpbGVTZWxlY3RvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpbnB1dCIpOworICAgIGZpbGVTZWxlY3RvckVsZW1lbnQudHlwZSA9ICJmaWxl
IjsKKyAgICBmaWxlU2VsZWN0b3JFbGVtZW50LnN0eWxlLnpJbmRleCA9IC0xOworICAgIGZpbGVT
ZWxlY3RvckVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAgIGZpbGVTZWxl
Y3RvckVsZW1lbnQub25jaGFuZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBjYWxsYmFj
ayhmaWxlU2VsZWN0b3JFbGVtZW50LmZpbGVzWzBdKTsKKyAgICB9OworICAgIHJldHVybiBmaWxl
U2VsZWN0b3JFbGVtZW50OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9IZWFwU25hcHNob3RMb2FkZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qcwppbmRleCAwODRlZjk2MzU5NmQ4YmMy
MWEwOTZkZGM4OTdmMDUxMjU5YjE3ODI5Li5lZjkzYjk5MmExMmNmMDI4YTJmMTQzMjA1YTkxZWNk
MTEyNTFhM2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdExvYWRlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qcwpAQCAtMzAsNyArMzAsNyBAQAogCiAvKioKICAq
IEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RS
ZWNlaXZlcn0KKyAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVycmVy
fQogICovCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyID0gZnVuY3Rpb24oKQogewpA
QCAtMzgsMTMgKzM4LDggQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlciA9IGZ1bmN0
aW9uKCkKIH0KIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90UHJveHkpfSBjYWxsYmFjawotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0g
ICAgc3RhcnRMb2FkaW5nOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICBzdGFydFRyYW5zZmVyOiBm
dW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LAogCiAgICAgZGlz
cG9zZTogZnVuY3Rpb24oKQpAQCAtNTksMTUgKzU0LDIzIEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9zbmFwc2hvdCA9IHt9Owog
ICAgIH0sCiAKLSAgICBfZmluZEJhbGFuY2VkQ3VybHlCcmFja2V0czogZnVuY3Rpb24oKQorICAg
IC8qKgorICAgICAqIEBwYXJhbSB7IXN0cmluZ30gc291cmNlCisgICAgICogQHBhcmFtIHtudW1i
ZXI9fSBzdGFydEluZGV4CisgICAgICogQHBhcmFtIHtudW1iZXI9fSBsYXN0SW5kZXgKKyAgICAg
KiBAcmV0dXJuIHshbnVtYmVyfQorICAgICAqLworICAgIF9maW5kQmFsYW5jZWRDdXJseUJyYWNr
ZXRzOiBmdW5jdGlvbihzb3VyY2UsIHN0YXJ0SW5kZXgsIGxhc3RJbmRleCkKICAgICB7CisgICAg
ICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4IHx8IDA7CisgICAgICAgIGxhc3RJbmRleCA9IGxh
c3RJbmRleCB8fCBzb3VyY2UubGVuZ3RoOwogICAgICAgICB2YXIgY291bnRlciA9IDA7CiAgICAg
ICAgIHZhciBvcGVuaW5nQnJhY2tldCA9ICJ7Ii5jaGFyQ29kZUF0KDApLCBjbG9zaW5nQnJhY2tl
dCA9ICJ9Ii5jaGFyQ29kZUF0KDApOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMu
X2pzb24ubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgY2hhcmFjdGVyID0g
dGhpcy5fanNvbi5jaGFyQ29kZUF0KGkpOwotICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0g
b3BlbmluZ0JyYWNrZXQpCisgICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgbGFz
dEluZGV4OyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29k
ZUF0KGkpOworICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09PSBvcGVuaW5nQnJhY2tldCkKICAg
ICAgICAgICAgICAgICArK2NvdW50ZXI7Ci0gICAgICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIg
PT09IGNsb3NpbmdCcmFja2V0KSB7CisgICAgICAgICAgICBlbHNlIGlmIChjaGFyQ29kZSA9PT0g
Y2xvc2luZ0JyYWNrZXQpIHsKICAgICAgICAgICAgICAgICBpZiAoLS1jb3VudGVyID09PSAwKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7CiAgICAgICAgICAgICB9CkBAIC03NSwx
MSArNzgsMTQgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9LAogCi0gICAgZmluaXNoTG9hZGluZzogZnVuY3Rp
b24oKQorICAgIGZpbmlzaFRyYW5zZmVyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5fanNvbikKKyAgICAgICAgICAgIHRoaXMuX3BhcnNlU3RyaW5nc0FycmF5KCk7CisgICAg
fSwKKworICAgIGJ1aWxkU25hcHNob3Q6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy5fanNvbikKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB0aGlzLl9wYXJz
ZVN0cmluZ3NBcnJheSgpOwogICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3QodGhpcy5fc25hcHNob3QpOwogICAgICAgICB0aGlzLl9yZXNldCgpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTM1LDcgKzE0MSw3IEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBjaHVuawogICAgICAqLwotICAgIHB1c2hKU09OQ2h1bms6IGZ1bmN0aW9uKGNodW5rKQor
ICAgIHRyYW5zZmVyQ2h1bms6IGZ1bmN0aW9uKGNodW5rKQogICAgIHsKICAgICAgICAgdGhpcy5f
anNvbiArPSBjaHVuazsKICAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkgewpAQCAtMTQ2LDE3
ICsxNTIsMTcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTbmFwc2hvdCB0b2tlbiBub3QgZm91
bmQiKTsKICAgICAgICAgICAgIHRoaXMuX2pzb24gPSB0aGlzLl9qc29uLnNsaWNlKHNuYXBzaG90
VG9rZW5JbmRleCArIHNuYXBzaG90VG9rZW4ubGVuZ3RoICsgMSk7CiAgICAgICAgICAgICB0aGlz
Ll9zdGF0ZSA9ICJwYXJzZS1zbmFwc2hvdC1pbmZvIjsKLSAgICAgICAgICAgIHRoaXMucHVzaEpT
T05DaHVuaygiIik7CisgICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAicGFyc2Utc25hcHNob3QtaW5m
byI6IHsKLSAgICAgICAgICAgIHZhciBjbG9zaW5nQnJhY2tldEluZGV4ID0gdGhpcy5fZmluZEJh
bGFuY2VkQ3VybHlCcmFja2V0cygpOworICAgICAgICAgICAgdmFyIGNsb3NpbmdCcmFja2V0SW5k
ZXggPSB0aGlzLl9maW5kQmFsYW5jZWRDdXJseUJyYWNrZXRzKHRoaXMuX2pzb24pOwogICAgICAg
ICAgICAgaWYgKGNsb3NpbmdCcmFja2V0SW5kZXggPT09IC0xKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIHRoaXMuX3NuYXBzaG90LnNuYXBzaG90ID0gLyoqIEB0eXBlIHtI
ZWFwU25hcHNob3RIZWFkZXJ9ICovSlNPTi5wYXJzZSh0aGlzLl9qc29uLnNsaWNlKDAsIGNsb3Np
bmdCcmFja2V0SW5kZXgpKTsKICAgICAgICAgICAgIHRoaXMuX2pzb24gPSB0aGlzLl9qc29uLnNs
aWNlKGNsb3NpbmdCcmFja2V0SW5kZXgpOwogICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAiZmlu
ZC1ub2RlcyI7Ci0gICAgICAgICAgICB0aGlzLnB1c2hKU09OQ2h1bmsoIiIpOworICAgICAgICAg
ICAgdGhpcy50cmFuc2ZlckNodW5rKCIiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgImZpbmQtbm9kZXMiOiB7CkBAIC0xNzMsNyArMTc5LDcgQEAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlz
Ll9hcnJheSA9IG5ldyBVaW50MzJBcnJheShub2Rlc19sZW5ndGgpOwogICAgICAgICAgICAgdGhp
cy5fYXJyYXlJbmRleCA9IDA7CiAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICJwYXJzZS1ub2Rl
cyI7Ci0gICAgICAgICAgICB0aGlzLnB1c2hKU09OQ2h1bmsoIiIpOworICAgICAgICAgICAgdGhp
cy50cmFuc2ZlckNodW5rKCIiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgInBhcnNlLW5vZGVzIjogewpAQCAtMTgyLDcgKzE4OCw3IEBAIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fc25h
cHNob3Qubm9kZXMgPSB0aGlzLl9hcnJheTsKICAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gImZp
bmQtZWRnZXMiOwogICAgICAgICAgICAgdGhpcy5fYXJyYXkgPSBudWxsOwotICAgICAgICAgICAg
dGhpcy5wdXNoSlNPTkNodW5rKCIiKTsKKyAgICAgICAgICAgIHRoaXMudHJhbnNmZXJDaHVuaygi
Iik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlICJmaW5kLWVk
Z2VzIjogewpAQCAtMTk5LDcgKzIwNSw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2Fk
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fYXJyYXkgPSBuZXcgVWludDMyQXJy
YXkoZWRnZXNfbGVuZ3RoKTsKICAgICAgICAgICAgIHRoaXMuX2FycmF5SW5kZXggPSAwOwogICAg
ICAgICAgICAgdGhpcy5fc3RhdGUgPSAicGFyc2UtZWRnZXMiOwotICAgICAgICAgICAgdGhpcy5w
dXNoSlNPTkNodW5rKCIiKTsKKyAgICAgICAgICAgIHRoaXMudHJhbnNmZXJDaHVuaygiIik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlICJwYXJzZS1lZGdlcyI6
IHsKQEAgLTIwOCw3ICsyMTQsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX3NuYXBzaG90LmVkZ2VzID0gdGhpcy5fYXJy
YXk7CiAgICAgICAgICAgICB0aGlzLl9hcnJheSA9IG51bGw7CiAgICAgICAgICAgICB0aGlzLl9z
dGF0ZSA9ICJmaW5kLXN0cmluZ3MiOwotICAgICAgICAgICAgdGhpcy5wdXNoSlNPTkNodW5rKCIi
KTsKKyAgICAgICAgICAgIHRoaXMudHJhbnNmZXJDaHVuaygiIik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlICJmaW5kLXN0cmluZ3MiOiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5Lmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5q
cwppbmRleCAxMjc3ZGE1NmJlYjIyNmRkYjIyODk1YzIwY2E4NGQwZDZlZGUzZWIwLi5kOWE4NmZk
YmE2MzNlNDAyMDljNjMyYzlkYzk3MWM4OGNjNGU2YTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMKQEAgLTM1
NSw1MyArMzU1LDYzIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eU9iamVjdC5wcm90
b3R5cGUgPSB7CiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1dlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm94eU9iamVjdH0KLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90UmVjZWl2ZXJ9CisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkNodW5r
ZWRUcmFuc2ZlcnJlcn0KICAqLwogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5
ID0gZnVuY3Rpb24od29ya2VyLCBvYmplY3RJZCkKIHsKICAgICBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90UHJveHlPYmplY3QuY2FsbCh0aGlzLCB3b3JrZXIsIG9iamVjdElkKTsKLSAgICB0aGlz
Ll9vbkxvYWRDYWxsYmFja3MgPSBbXTsKKyAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7CisgICAg
dGhpcy5fcGVuZGluZ1NuYXBzaG90Q29uc3VtZXJzID0gW107CiB9CiAKIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RMb2FkZXJQcm94eS5wcm90b3R5cGUgPSB7CisgICAgc3RhcnRUcmFuc2Zlcjog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fc3RhcnRlZCA9IHRydWU7CisgICAgICAg
IHRoaXMuY2FsbE1ldGhvZChudWxsLCAic3RhcnRUcmFuc2ZlciIpOworICAgIH0sCisKKyAgICBp
c1N0YXJ0ZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zdGFydGVk
OworICAgIH0sCisKICAgICAvKioKICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm94eSl9IGNhbGxiYWNrCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0K
ICAgICAgKi8KLSAgICBzdGFydExvYWRpbmc6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIGFkZENv
bnN1bWVyOiBmdW5jdGlvbihjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHZhciBsb2FkaW5nSGFz
SnVzdFN0YXJ0ZWQgPSAhdGhpcy5fb25Mb2FkQ2FsbGJhY2tzLmxlbmd0aDsKLSAgICAgICAgdGhp
cy5fb25Mb2FkQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwotICAgICAgICByZXR1cm4gbG9hZGlu
Z0hhc0p1c3RTdGFydGVkOworICAgICAgICB0aGlzLl9wZW5kaW5nU25hcHNob3RDb25zdW1lcnMu
cHVzaChjYWxsYmFjayk7CiAgICAgfSwKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBjaHVuawogICAgICAqLwotICAgIHB1c2hKU09OQ2h1bms6IGZ1bmN0aW9uKGNodW5rKQorICAg
IHRyYW5zZmVyQ2h1bms6IGZ1bmN0aW9uKGNodW5rKQogICAgIHsKLSAgICAgICAgdGhpcy5jYWxs
TWV0aG9kKG51bGwsICJwdXNoSlNPTkNodW5rIiwgY2h1bmspOworICAgICAgICB0aGlzLmNhbGxN
ZXRob2QobnVsbCwgInRyYW5zZmVyQ2h1bmsiLCBjaHVuayk7CiAgICAgfSwKIAotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5KX0g
Y2FsbGJhY2sKLSAgICAgKi8KLSAgICBmaW5pc2hMb2FkaW5nOiBmdW5jdGlvbihjYWxsYmFjaykK
KyAgICBmaW5pc2hUcmFuc2ZlcjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fb25M
b2FkQ2FsbGJhY2tzLnVuc2hpZnQoY2FsbGJhY2spOwotCisgICAgICAgIGZ1bmN0aW9uIGJ1aWxk
U25hcHNob3QoKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmNhbGxGYWN0b3J5TWV0aG9k
KHVwZGF0ZVN0YXRpY0RhdGEuYmluZCh0aGlzKSwgImJ1aWxkU25hcHNob3QiLCAiV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFByb3h5Iik7CisgICAgICAgIH0KICAgICAgICAgZnVuY3Rpb24gdXBk
YXRlU3RhdGljRGF0YShzbmFwc2hvdFByb3h5KQogICAgICAgICB7CiAgICAgICAgICAgICB0aGlz
LmRpc3Bvc2UoKTsKLSAgICAgICAgICAgIHNuYXBzaG90UHJveHkudXBkYXRlU3RhdGljRGF0YShj
YWxsTG9hZENhbGxiYWNrcy5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIHNuYXBzaG90UHJveHku
dXBkYXRlU3RhdGljRGF0YShub3RpZnlQZW5kaW5nQ29uc3VtZXJzLmJpbmQodGhpcykpOwogICAg
ICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxMb2FkQ2FsbGJhY2tzKHNuYXBzaG90UHJveHkp
CisgICAgICAgIGZ1bmN0aW9uIG5vdGlmeVBlbmRpbmdDb25zdW1lcnMoc25hcHNob3RQcm94eSkK
ICAgICAgICAgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vbkxvYWRD
YWxsYmFja3MubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgdGhpcy5fb25Mb2FkQ2FsbGJh
Y2tzW2ldKHNuYXBzaG90UHJveHkpOwotICAgICAgICAgICAgdGhpcy5fb25Mb2FkQ2FsbGJhY2tz
ID0gbnVsbDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGVuZGluZ1Nu
YXBzaG90Q29uc3VtZXJzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRp
bmdTbmFwc2hvdENvbnN1bWVyc1tpXShzbmFwc2hvdFByb3h5KTsKKworICAgICAgICAgICAgdGhp
cy5fc3RhcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1NuYXBzaG90Q29u
c3VtZXJzID0gW107CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5jYWxsRmFjdG9yeU1ldGhvZCh1
cGRhdGVTdGF0aWNEYXRhLmJpbmQodGhpcyksICJmaW5pc2hMb2FkaW5nIiwgIldlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm94eSIpOworICAgICAgICB0aGlzLmNhbGxNZXRob2QoYnVpbGRTbmFw
c2hvdC5iaW5kKHRoaXMpLCAiZmluaXNoVHJhbnNmZXIiKTsKICAgICB9CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcu
anMKaW5kZXggYTExODNiN2U3MGUwMmIzOTE3YjQzODU0YzE2YzUxZDNjMDBkOTE3MC4uMjAyZGEz
Mzg3Mjc0YTUwZmU5MDAyM2M5NmFlMWRkOWYxZjZhZjA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcwpAQCAtNzg3
LDMwICs3ODcsMjMgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3Rv
dHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUHJvZmlsZVQKIC8qKgogICogQGludGVyZmFj
ZQogICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVjZWl2ZXIgPSBmdW5jdGlvbigpCitX
ZWJJbnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVycmVyID0gZnVuY3Rpb24oKQogewogfQogCi1XZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UmVjZWl2ZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5KX0gY2Fs
bGJhY2sKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIHN0YXJ0TG9hZGlu
ZzogZnVuY3Rpb24oY2FsbGJhY2spCitXZWJJbnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVycmVyLnBy
b3RvdHlwZSA9IHsKKyAgICBzdGFydFRyYW5zZmVyOiBmdW5jdGlvbigpCiAgICAgewogICAgIH0s
CiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKICAgICAgKi8KLSAgICBw
dXNoSlNPTkNodW5rOiBmdW5jdGlvbihjaHVuaykKKyAgICB0cmFuc2ZlckNodW5rOiBmdW5jdGlv
bihjaHVuaykKICAgICB7CiAgICAgfSwKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rp
b24oV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAg
ICBmaW5pc2hMb2FkaW5nOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICBmaW5pc2hUcmFuc2Zlcjog
ZnVuY3Rpb24oKQogICAgIHsKICAgICB9LAogCkBAIC04MzIsNyArODI1LDcgQEAgV2ViSW5zcGVj
dG9yLkhlYXBQcm9maWxlSGVhZGVyID0gZnVuY3Rpb24odHlwZSwgdGl0bGUsIHVpZCwgbWF4SlNP
YmplY3RJZCkKICAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlci5jYWxsKHRoaXMsIHR5cGUs
IHRpdGxlLCB1aWQpOwogICAgIHRoaXMubWF4SlNPYmplY3RJZCA9IG1heEpTT2JqZWN0SWQ7CiAg
ICAgLyoqCi0gICAgICogQHR5cGUge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZWNlaXZlcn0K
KyAgICAgKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlcnJlcn0KICAgICAgKi8K
ICAgICB0aGlzLl9yZWNlaXZlciA9IG51bGw7CiAgICAgLyoqCkBAIC04NzcsMTMgKzg3MCwxNiBA
QCBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewogCiAgICAgICAg
IGlmICghdGhpcy5fcmVjZWl2ZXIpCiAgICAgICAgICAgICB0aGlzLl9zZXR1cFdvcmtlcigpOwor
ICAgICAgICB2YXIgbG9hZGVyUHJveHkgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RMb2FkZXJQcm94eX0gKi8gdGhpcy5fcmVjZWl2ZXI7CiAKICAgICAgICAgdGhpcy5fbnVt
YmVyT2ZDaHVua3MgPSAwOwotICAgICAgICBpZiAodGhpcy5fcmVjZWl2ZXIuc3RhcnRMb2FkaW5n
KGNhbGxiYWNrKSkgeworICAgICAgICBpZiAoIWxvYWRlclByb3h5LmlzU3RhcnRlZCgpKSB7Cisg
ICAgICAgICAgICBsb2FkZXJQcm94eS5zdGFydFRyYW5zZmVyKCk7CiAgICAgICAgICAgICB0aGlz
LnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2FkaW5n
XHUyMDI2Iik7CiAgICAgICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LndhaXQgPSB0cnVlOwog
ICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlKHRoaXMucHJvZmlsZVR5cGUoKS5p
ZCwgdGhpcy51aWQpOwogICAgICAgICB9CisgICAgICAgIGxvYWRlclByb3h5LmFkZENvbnN1bWVy
KGNhbGxiYWNrKTsKICAgICB9LAogCiAgICAgX3NldHVwV29ya2VyOiBmdW5jdGlvbigpCkBAIC04
OTMsNyArODg5LDkgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9
IHsKICAgICAgICAgfQogICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RXb3JrZXIoKTsKICAgICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoIndhaXQi
LCBzZXRQcm9maWxlV2FpdCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX3JlY2VpdmVyID0gd29ya2Vy
LmNyZWF0ZU9iamVjdCgiV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlciIpOworICAgICAg
ICB2YXIgbG9hZGVyUHJveHkgPSB3b3JrZXIuY3JlYXRlT2JqZWN0KCJXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90TG9hZGVyIik7CisgICAgICAgIGxvYWRlclByb3h5LmFkZENvbnN1bWVyKHRoaXMu
X3NuYXBzaG90UmVjZWl2ZWQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX3JlY2VpdmVyID0g
bG9hZGVyUHJveHk7CiAgICAgfSwKIAogICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKQEAgLTkxMiw3
ICs5MTAsNiBAQCBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewog
ICAgICAgICBpZiAoc2F2ZWRDaHVua3NDb3VudCA9PT0gdGhpcy5fdG90YWxOdW1iZXJPZkNodW5r
cykgewogICAgICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IE51bWJlci5i
eXRlc1RvU3RyaW5nKHRoaXMuX3NuYXBzaG90UHJveHkudG90YWxTaXplKTsKICAgICAgICAgICAg
IHRoaXMuc2lkZWJhckVsZW1lbnQud2FpdCA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5fc2F2
ZWRDaHVua3NDb3VudCA9IDA7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdGhpcy5zaWRl
YmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2F2aW5nXHUyMDI2
ICVkXCUiLCAoc2F2ZWRDaHVua3NDb3VudCAqIDEwMCAvIHRoaXMuX3RvdGFsTnVtYmVyT2ZDaHVu
a3MpLnRvRml4ZWQoMikpOwogICAgIH0sCkBAIC05MjAsMTMgKzkxNywxMyBAQCBXZWJJbnNwZWN0
b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBjaHVuawogICAgICAqLwotICAgIHB1c2hKU09OQ2h1bms6IGZ1bmN0aW9uKGNo
dW5rKQorICAgIHRyYW5zZmVyQ2h1bms6IGZ1bmN0aW9uKGNodW5rKQogICAgIHsKICAgICAgICAg
Kyt0aGlzLl9udW1iZXJPZkNodW5rczsKLSAgICAgICAgdGhpcy5fcmVjZWl2ZXIucHVzaEpTT05D
aHVuayhjaHVuayk7CisgICAgICAgIHRoaXMuX3JlY2VpdmVyLnRyYW5zZmVyQ2h1bmsoY2h1bmsp
OwogICAgIH0sCiAKLSAgICBfcGFyc2VkOiBmdW5jdGlvbihzbmFwc2hvdFByb3h5KQorICAgIF9z
bmFwc2hvdFJlY2VpdmVkOiBmdW5jdGlvbihzbmFwc2hvdFByb3h5KQogICAgIHsKICAgICAgICAg
dGhpcy5fcmVjZWl2ZXIgPSBudWxsOwogICAgICAgICBpZiAoc25hcHNob3RQcm94eSkKQEAgLTkz
OCwxMSArOTM1LDEyIEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHdvcmtlci5zdGFydENoZWNraW5nRm9yTG9uZ1J1bm5pbmdDYWxscygpOwog
ICAgIH0sCiAKLSAgICBmaW5pc2hIZWFwU25hcHNob3Q6IGZ1bmN0aW9uKCkKKyAgICBmaW5pc2hI
ZWFwU25hcHNob3Q6IGZ1bmN0aW9uKHRyYW5zZmVyRmluaXNoZWQpCiAgICAgewogICAgICAgICB0
aGlzLl90b3RhbE51bWJlck9mQ2h1bmtzID0gdGhpcy5fbnVtYmVyT2ZDaHVua3M7Ci0gICAgICAg
IGlmICh0aGlzLl9yZWNlaXZlci5maW5pc2hMb2FkaW5nKHRoaXMuX3BhcnNlZC5iaW5kKHRoaXMp
KSkKLSAgICAgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlBhcnNpbmdcdTIwMjYiKTsKKyAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVu
dC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUGFyc2luZ1x1MjAyNiIpOworICAg
ICAgICBpZiAoIXRyYW5zZmVyRmluaXNoZWQpCisgICAgICAgICAgICB0aGlzLl9yZWNlaXZlci5m
aW5pc2hUcmFuc2ZlcigpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTk1MSw3ICs5NDksNyBAQCBX
ZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewogICAgICAqLwogICAg
IGNhblNhdmVUb0ZpbGU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAhdGhpcy5m
cm9tRmlsZSgpICYmIHRoaXMuX3NuYXBzaG90UHJveHkgJiYgIXRoaXMuX3NhdmVkQ2h1bmtzQ291
bnQgJiYgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmNhbkFwcGVuZCgpOworICAgICAgICByZXR1
cm4gIXRoaXMuZnJvbUZpbGUoKSAmJiB0aGlzLl9zbmFwc2hvdFByb3h5ICYmICF0aGlzLl9yZWNl
aXZlciAmJiBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuY2FuQXBwZW5kKCk7CiAgICAgfSwKIAog
ICAgIC8qKgpAQCAtOTYwLDkgKzk1OCwyMCBAQCBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFk
ZXIucHJvdG90eXBlID0gewogICAgIHNhdmVUb0ZpbGU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAg
ICAgIHRoaXMuX2ZpbGVOYW1lID0gdGhpcy5fZmlsZU5hbWUgfHwgIkhlYXAtIiArIG5ldyBEYXRl
KCkudG9JU084NjAxQ29tcGFjdCgpICsgIi5oZWFwc25hcHNob3QiOwotICAgICAgICB0aGlzLl9y
ZWNlaXZlciA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2F2ZVRvRmlsZVJlY2VpdmVy
KHRoaXMuX2ZpbGVOYW1lLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fbnVtYmVyT2ZDaHVua3MgPSAw
OwotICAgICAgICB0aGlzLl9yZWNlaXZlci5zdGFydExvYWRpbmcoZnVuY3Rpb24oc25hcHNob3Qp
IHsgfSk7CisgICAgICAgIHZhciBkZWxlZ2F0ZSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90U2F2ZVRvRmlsZURlbGVnYXRlKHRoaXMpOworICAgICAgICB0aGlzLl9yZWNlaXZlciA9IHRo
aXMuX2NyZWF0ZUZpbGVXcml0ZXIodGhpcy5fZmlsZU5hbWUsIGRlbGVnYXRlKTsKKyAgICAgICAg
dGhpcy5fbnVtYmVyT2ZSZWNlaXZlZENodW5rcyA9IDA7CisgICAgICAgIHRoaXMuX3JlY2VpdmVy
LnN0YXJ0VHJhbnNmZXIoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHshc3Ry
aW5nfSBmaWxlTmFtZQorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2Zl
ckRlbGVnYXRlfSBkZWxlZ2F0ZQorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5DaHVua2Vk
VHJhbnNmZXJyZXJ9CisgICAgICovCisgICAgX2NyZWF0ZUZpbGVXcml0ZXI6IGZ1bmN0aW9uKGZp
bGVOYW1lLCBkZWxlZ2F0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9y
LkNodW5rZWRGaWxlV3JpdGVyKGZpbGVOYW1lLCBkZWxlZ2F0ZSk7CiAgICAgfSwKIAogICAgIC8q
KgpAQCAtOTc5LDEyMyArOTg4LDEwNiBAQCBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIu
cHJvdG90eXBlID0gewogICAgICAqLwogICAgIGxvYWRGcm9tRmlsZTogZnVuY3Rpb24oZmlsZSkK
ICAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgc3dpdGNoKGUudGFyZ2V0LmVycm9yLmNvZGUpIHsKLSAgICAgICAgICAgIGNhc2UgZS50YXJn
ZXQuZXJyb3IuTk9UX0ZPVU5EX0VSUjoKLSAgICAgICAgICAgICAgICB0aGlzLnNpZGViYXJFbGVt
ZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCInJXMnIG5vdCBmb3VuZC4iLCBm
aWxlLm5hbWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGUudGFyZ2V0
LmVycm9yLk5PVF9SRUFEQUJMRV9FUlI6Ci0gICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyRWxl
bWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJyVzJyBpcyBub3QgcmVhZGFi
bGUiLCBmaWxlLm5hbWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGUu
dGFyZ2V0LmVycm9yLkFCT1JUX0VSUjoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdWJ0aXRs
ZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJyVzJyBlcnJvciAlZCIsIGZpbGUubmFtZSwgZS50
YXJnZXQuZXJyb3IuY29kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICB0
aGlzLnRpdGxlID0gZmlsZS5uYW1lOwogICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LnN1YnRp
dGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2FkaW5nXHUyMDI2Iik7CiAgICAgICAgIHRo
aXMuc2lkZWJhckVsZW1lbnQud2FpdCA9IHRydWU7CiAgICAgICAgIHRoaXMuX3NldHVwV29ya2Vy
KCk7CiAgICAgICAgIHRoaXMuX251bWJlck9mQ2h1bmtzID0gMDsKLSAgICAgICAgdGhpcy5fcmVj
ZWl2ZXIuc3RhcnRMb2FkaW5nKGZ1bmN0aW9uKGlnbm9yZWRTbmFwc2hvdFByb3h5KSB7IH0pOwot
Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAgICAg
Ki8KLSAgICAgICAgZnVuY3Rpb24gb25Mb2FkKGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgIT09IEZpbGVSZWFkZXIuRE9ORSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB0aGlzLl9uZXh0Q2h1bmtMb2FkZWQoZXZl
bnQudGFyZ2V0LnJlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICB0aGlzLl9maWxlID0gZmls
ZTsKLSAgICAgICAgdGhpcy5fZXhwZWN0ZWRTaXplID0gZmlsZS5zaXplOwotICAgICAgICB0aGlz
Ll9sb2FkZWRTaXplID0gMDsKLSAgICAgICAgdGhpcy5fcmVhZGVyID0gdGhpcy5fY3JlYXRlRmls
ZVJlYWRlcigpOwotICAgICAgICB0aGlzLl9yZWFkZXIub25sb2FkID0gb25Mb2FkLmJpbmQodGhp
cyk7Ci0gICAgICAgIHRoaXMuX3JlYWRlci5vbmVycm9yID0gb25FcnJvcjsKLSAgICAgICAgdGhp
cy5fbG9hZE5leHRDaHVuaygpOworICAgICAgICB2YXIgZGVsZWdhdGUgPSBuZXcgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdExvYWRGcm9tRmlsZURlbGVnYXRlKHRoaXMpOworICAgICAgICB2YXIg
ZmlsZVJlYWRlciA9IHRoaXMuX2NyZWF0ZUZpbGVSZWFkZXIoZmlsZSwgZGVsZWdhdGUpOworICAg
ICAgICBmaWxlUmVhZGVyLnN0YXJ0KHRoaXMuX3JlY2VpdmVyKTsKICAgICB9LAogCi0gICAgX2xv
YWROZXh0Q2h1bms6IGZ1bmN0aW9uKCkKKyAgICBfY3JlYXRlRmlsZVJlYWRlcjogZnVuY3Rpb24o
ZmlsZSwgZGVsZWdhdGUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5D
aHVua2VkRmlsZVJlYWRlcihmaWxlLCAxMDAwMDAwMCwgZGVsZWdhdGUpOworICAgIH0KK30KKwor
V2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJ
bnNwZWN0b3IuUHJvZmlsZUhlYWRlci5wcm90b3R5cGU7CisKKy8qKgorICogQGNvbnN0cnVjdG9y
CisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlckRlbGVnYXRlfQor
ICovCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZEZyb21GaWxlRGVsZWdhdGUgPSBmdW5j
dGlvbihzbmFwc2hvdEhlYWRlcikKK3sKKyAgICB0aGlzLl9zbmFwc2hvdEhlYWRlciA9IHNuYXBz
aG90SGVhZGVyOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZEZyb21GaWxlRGVs
ZWdhdGUucHJvdG90eXBlID0geworICAgIG9uVHJhbnNmZXJTdGFydGVkOiBmdW5jdGlvbihzb3Vy
Y2UpCiAgICAgewotICAgICAgICB2YXIgbG9hZGVkU2l6ZSA9IHRoaXMuX2xvYWRlZFNpemU7Ci0g
ICAgICAgIHZhciBjaHVua1NpemUgPSAxMDAwMDAwMDsKLSAgICAgICAgdmFyIHNpemUgPSB0aGlz
Ll9leHBlY3RlZFNpemUgPCBsb2FkZWRTaXplICsgY2h1bmtTaXplID8gdGhpcy5fZXhwZWN0ZWRT
aXplIC0gbG9hZGVkU2l6ZSA6IGNodW5rU2l6ZTsKLSAgICAgICAgdmFyIG5leHRQYXJ0ID0gdGhp
cy5fZmlsZS53ZWJraXRTbGljZShsb2FkZWRTaXplLCBsb2FkZWRTaXplICsgc2l6ZSk7Ci0gICAg
ICAgIHRoaXMuX3JlYWRlci5yZWFkQXNUZXh0KG5leHRQYXJ0KTsKICAgICB9LAogCi0gICAgX25l
eHRDaHVua0xvYWRlZDogZnVuY3Rpb24oZGF0YSkKKyAgICBvbkNodW5rVHJhbnNmZXJyZWQ6IGZ1
bmN0aW9uKHNvdXJjZSkKICAgICB7Ci0gICAgICAgIHRoaXMuX2xvYWRlZFNpemUgKz0gZGF0YS5s
ZW5ndGg7Ci0gICAgICAgIHRoaXMuX3JlY2VpdmVyLnB1c2hKU09OQ2h1bmsoZGF0YSk7Ci0gICAg
ICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkxvYWRpbmdcdTIwMjYgJWQlIiwgKHRoaXMuX2xvYWRlZFNpemUgKiAxMDAgLyB0aGlzLl9leHBl
Y3RlZFNpemUpLnRvRml4ZWQoMikpOworICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5zaWRl
YmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygKKyAgICAgICAgICAg
ICJMb2FkaW5nXHUyMDI2ICVkJSIsIChzb3VyY2UubG9hZGVkU2l6ZSgpICogMTAwIC8gc291cmNl
LmZpbGVTaXplKCkpLnRvRml4ZWQoMikpOworICAgIH0sCiAKLSAgICAgICAgaWYgKHRoaXMuX2xv
YWRlZFNpemUgPT09IHRoaXMuX2V4cGVjdGVkU2l6ZSkgewotICAgICAgICAgICAgdGhpcy5fZmls
ZSA9IG51bGw7Ci0gICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSBudWxsOwotICAgICAgICAgICAg
dGhpcy5maW5pc2hIZWFwU25hcHNob3QoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICB0aGlzLl9sb2FkTmV4dENodW5rKCk7CisgICAgb25UcmFuc2ZlckZpbmlzaGVk
OiBmdW5jdGlvbihzb3VyY2UpCisgICAgeworICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5m
aW5pc2hIZWFwU25hcHNob3QodHJ1ZSk7CiAgICAgfSwKIAotICAgIF9jcmVhdGVGaWxlUmVhZGVy
OiBmdW5jdGlvbigpCisgICAgb25FcnJvcjogZnVuY3Rpb24gKHNvdXJjZSwgZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBuZXcgRmlsZVJlYWRlcigpOworICAgICAgICBzd2l0Y2goZS50YXJnZXQu
ZXJyb3IuY29kZSkgeworICAgICAgICBjYXNlIGUudGFyZ2V0LmVycm9yLk5PVF9GT1VORF9FUlI6
CisgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5zaWRlYmFyRWxlbWVudC5zdWJ0aXRs
ZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJyVzJyBub3QgZm91bmQuIiwgc291cmNlLmZpbGVO
YW1lKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBlLnRhcmdldC5lcnJvci5OT1Rf
UkVBREFCTEVfRVJSOgorICAgICAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuc2lkZWJhckVs
ZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiclcycgaXMgbm90IHJlYWRh
YmxlIiwgc291cmNlLmZpbGVOYW1lKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBl
LnRhcmdldC5lcnJvci5BQk9SVF9FUlI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyLnNpZGViYXJFbGVtZW50LnN1
YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCInJXMnIGVycm9yICVkIiwgc291cmNlLmZp
bGVOYW1lKCksIGUudGFyZ2V0LmVycm9yLmNvZGUpOworICAgICAgICB9CiAgICAgfQogfQogCi1X
ZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYklu
c3BlY3Rvci5Qcm9maWxlSGVhZGVyLnByb3RvdHlwZTsKLQotCiAvKioKICAqIEBjb25zdHJ1Y3Rv
cgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZWNlaXZlcn0KKyAq
IEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVycmVyfQorICogQHBhcmFt
IHshc3RyaW5nfSBmaWxlTmFtZQorICogQHBhcmFtIHs/V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFu
c2ZlckRlbGVnYXRlPX0gZGVsZWdhdGUKICAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNh
dmVUb0ZpbGVSZWNlaXZlciA9IGZ1bmN0aW9uKGZpbGVOYW1lLCBzbmFwc2hvdEhlYWRlcikKK1dl
Ykluc3BlY3Rvci5DaHVua2VkRmlsZVdyaXRlciA9IGZ1bmN0aW9uKGZpbGVOYW1lLCBkZWxlZ2F0
ZSkKIHsKICAgICB0aGlzLl9maWxlTmFtZSA9IGZpbGVOYW1lOwotICAgIHRoaXMuX3NuYXBzaG90
SGVhZGVyID0gc25hcHNob3RIZWFkZXI7Ci0gICAgdGhpcy5fc2F2ZWRDaHVua3MgPSAwOwotICAg
IHRoaXMuX2ZpbmlzaExvYWRpbmdDYWxsYmFja3MgPSBbXTsKKyAgICB0aGlzLl9kZWxlZ2F0ZSA9
IGRlbGVnYXRlOwogfQogCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2F2ZVRvRmlsZVJlY2Vp
dmVyLnByb3RvdHlwZSA9IHsKK1dlYkluc3BlY3Rvci5DaHVua2VkRmlsZVdyaXRlci5wcm90b3R5
cGUgPSB7CiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UHJveHkpfSBjYWxsYmFjawotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAg
ICogQG92ZXJyaWRlCiAgICAgICovCi0gICAgc3RhcnRMb2FkaW5nOiBmdW5jdGlvbihjYWxsYmFj
aykKKyAgICBzdGFydFRyYW5zZmVyOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBXZWJJbnNw
ZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFn
ZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgdGhpcy5fc3RhcnRTYXZpbmdTbmFwc2hvdCwgdGhpcyk7
CisgICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLlNhdmVkVVJMLCB0aGlzLl9vblRyYW5zZmVy
U3RhcnRlZCwgdGhpcyk7CiAgICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5zYXZlKHRo
aXMuX2ZpbGVOYW1lLCAiIiwgdHJ1ZSk7Ci0gICAgICAgIGlmIChjYWxsYmFjaykKLSAgICAgICAg
ICAgIHRoaXMuX2ZpbmlzaExvYWRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKICAgICAg
KiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKICAgICAgKi8KLSAgICBwdXNoSlNPTkNodW5rOiBmdW5j
dGlvbihjaHVuaykKKyAgICB0cmFuc2ZlckNodW5rOiBmdW5jdGlvbihjaHVuaykKICAgICB7CiAg
ICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5hcHBlbmQodGhpcy5fZmlsZU5hbWUsIGNo
dW5rKTsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UHJveHkpfSBjYWxsYmFjaworICAgICAqIEBvdmVycmlkZQogICAg
ICAqLwotICAgIGZpbmlzaExvYWRpbmc6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIGZpbmlzaFRy
YW5zZmVyOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9maW5pc2hMb2FkaW5nQ2Fs
bGJhY2tzLnB1c2goY2FsbGJhY2spOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
X2ZpbmlzaExvYWRpbmdDYWxsYmFja3MubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9m
aW5pc2hMb2FkaW5nQ2FsbGJhY2tzW2ldKG51bGwpOworICAgICAgICBXZWJJbnNwZWN0b3IuZmls
ZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZl
bnRUeXBlcy5BcHBlbmRlZFRvVVJMLCB0aGlzLl9vbkNodW5rVHJhbnNmZXJyZWQsIHRoaXMpOwor
ICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpCisgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5v
blRyYW5zZmVyRmluaXNoZWQodGhpcyk7CiAgICAgfSwKIAogICAgIGRpc3Bvc2U6IGZ1bmN0aW9u
KCkKQEAgLTExMDUsMjYgKzEwOTcsNTYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNhdmVU
b0ZpbGVSZWNlaXZlci5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuRXZlbnR9IGV2ZW50CiAgICAgICovCi0gICAgX3N0YXJ0U2F2aW5nU25hcHNob3Q6
IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9vblRyYW5zZmVyU3RhcnRlZDogZnVuY3Rpb24oZXZlbnQp
CiAgICAgewogICAgICAgICBpZiAoZXZlbnQuZGF0YSAhPT0gdGhpcy5fZmlsZU5hbWUpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyLl9zYXZlU3RhdHVz
VXBkYXRlKDApOwotICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIucmVtb3ZlRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgdGhp
cy5fc3RhcnRTYXZpbmdTbmFwc2hvdCwgdGhpcyk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5maWxl
TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5
cGVzLkFwcGVuZGVkVG9VUkwsIHRoaXMuX3NhdmVTdGF0dXNVcGRhdGUsIHRoaXMpOwotICAgICAg
ICBQcm9maWxlckFnZW50LmdldFByb2ZpbGUodGhpcy5fc25hcHNob3RIZWFkZXIucHJvZmlsZVR5
cGUoKS5pZCwgdGhpcy5fc25hcHNob3RIZWFkZXIudWlkKTsKKyAgICAgICAgaWYgKHRoaXMuX2Rl
bGVnYXRlKQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUub25UcmFuc2ZlclN0YXJ0ZWQodGhp
cyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLlNhdmVkVVJMLCB0aGlzLl9vblRy
YW5zZmVyU3RhcnRlZCwgdGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLkFwcGVu
ZGVkVG9VUkwsIHRoaXMuX29uQ2h1bmtUcmFuc2ZlcnJlZCwgdGhpcyk7CiAgICAgfSwKIAogICAg
IC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAogICAgICAqLwot
ICAgIF9zYXZlU3RhdHVzVXBkYXRlOiBmdW5jdGlvbihldmVudCkKKyAgICBfb25DaHVua1RyYW5z
ZmVycmVkOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIGlmIChldmVudC5kYXRhICE9
PSB0aGlzLl9maWxlTmFtZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fc25h
cHNob3RIZWFkZXIuX3NhdmVTdGF0dXNVcGRhdGUoKyt0aGlzLl9zYXZlZENodW5rcyk7Ci0gICAg
ICAgIGlmICh0aGlzLl9zYXZlZENodW5rcyA9PT0gdGhpcy5fc25hcHNob3RIZWFkZXIuX3RvdGFs
TnVtYmVyT2ZDaHVua3MpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIucmVt
b3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5BcHBl
bmRlZFRvVVJMLCB0aGlzLl9zYXZlU3RhdHVzVXBkYXRlLCB0aGlzKTsKKyAgICAgICAgaWYgKHRo
aXMuX2RlbGVnYXRlKQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUub25DaHVua1RyYW5zZmVy
cmVkKHRoaXMpOwogICAgIH0KLX07Cit9CiAKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAaW1w
bGVtZW50cyB7V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlckRlbGVnYXRlfQorICovCitXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90U2F2ZVRvRmlsZURlbGVnYXRlID0gZnVuY3Rpb24oc25hcHNo
b3RIZWFkZXIpCit7CisgICAgdGhpcy5fc25hcHNob3RIZWFkZXIgPSBzbmFwc2hvdEhlYWRlcjsK
KyAgICB0aGlzLl9zYXZlZENodW5rcyA9IDA7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RTYXZlVG9GaWxlRGVsZWdhdGUucHJvdG90eXBlID0geworICAgIG9uVHJhbnNmZXJTdGFydGVk
OiBmdW5jdGlvbihzb3VyY2UpCisgICAgeworICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5f
c2F2ZVN0YXR1c1VwZGF0ZSgwKTsKKyAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlKHRo
aXMuX3NuYXBzaG90SGVhZGVyLnByb2ZpbGVUeXBlKCkuaWQsIHRoaXMuX3NuYXBzaG90SGVhZGVy
LnVpZCk7CisgICAgfSwKKworICAgIG9uQ2h1bmtUcmFuc2ZlcnJlZDogZnVuY3Rpb24oc291cmNl
KQorICAgIHsKKyAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuX3NhdmVTdGF0dXNVcGRhdGUo
Kyt0aGlzLl9zYXZlZENodW5rcyk7CisgICAgfSwKKworICAgIG9uVHJhbnNmZXJGaW5pc2hlZDog
ZnVuY3Rpb24oc291cmNlKQorICAgIHsKKyAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuX3Nu
YXBzaG90UmVjZWl2ZWQobnVsbCk7CisgICAgfSwKKworICAgIG9uRXJyb3I6IGZ1bmN0aW9uKHNv
dXJjZSwgZXZlbnQpCisgICAgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwppbmRleCBjZTEyMjk2MjA4YjE3OTU3
YTljOTI2ZDFhNWVhMGVlZDJlMmU4OGFhLi41NGI1YmVkYWU3MmY2NzdmODU2ZjBjMDk3OTFlY2U2
ODA4NzQyM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1Byb2ZpbGVzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Qcm9maWxlc1BhbmVsLmpzCkBAIC0yNTksMTcgKzI1OSw4IEBAIFdlYkluc3BlY3Rvci5Qcm9m
aWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9maWxlU2Vs
ZWN0b3JFbGVtZW50KQogICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMu
X2ZpbGVTZWxlY3RvckVsZW1lbnQpOwotCi0gICAgICAgIHZhciBmaWxlU2VsZWN0b3JFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAgZmlsZVNlbGVjdG9y
RWxlbWVudC50eXBlID0gImZpbGUiOwotICAgICAgICBmaWxlU2VsZWN0b3JFbGVtZW50LnN0eWxl
LnpJbmRleCA9IC0xOwotICAgICAgICBmaWxlU2VsZWN0b3JFbGVtZW50LnN0eWxlLnBvc2l0aW9u
ID0gImFic29sdXRlIjsKLSAgICAgICAgZnVuY3Rpb24gb25DaGFuZ2UoZXZlbnQpIHsKLSAgICAg
ICAgICAgIHRoaXMuX2xvYWRGcm9tRmlsZSh0aGlzLl9maWxlU2VsZWN0b3JFbGVtZW50LmZpbGVz
WzBdKTsKLSAgICAgICAgfQotICAgICAgICBmaWxlU2VsZWN0b3JFbGVtZW50Lm9uY2hhbmdlID0g
b25DaGFuZ2UuYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGZp
bGVTZWxlY3RvckVsZW1lbnQpOwotICAgICAgICB0aGlzLl9maWxlU2VsZWN0b3JFbGVtZW50ID0g
ZmlsZVNlbGVjdG9yRWxlbWVudDsKKyAgICAgICAgdGhpcy5fZmlsZVNlbGVjdG9yRWxlbWVudCA9
IFdlYkluc3BlY3Rvci5jcmVhdGVGaWxlU2VsZWN0b3JFbGVtZW50KHRoaXMuX2xvYWRGcm9tRmls
ZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2Zp
bGVTZWxlY3RvckVsZW1lbnQpOwogICAgIH0sCiAKICAgICBfbG9hZEZyb21GaWxlOiBmdW5jdGlv
bihmaWxlKQpAQCAtNjYyLDkgKzY1Myw5IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnBy
b3RvdHlwZSA9IHsKICAgICBfYWRkSGVhcFNuYXBzaG90Q2h1bms6IGZ1bmN0aW9uKHVpZCwgY2h1
bmspCiAgICAgewogICAgICAgICB2YXIgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhp
cy5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBl
SWQpXTsKLSAgICAgICAgaWYgKCFwcm9maWxlICkKKyAgICAgICAgaWYgKCFwcm9maWxlKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBwcm9maWxlLnB1c2hKU09OQ2h1bmsoY2h1bmspOwor
ICAgICAgICBwcm9maWxlLnRyYW5zZmVyQ2h1bmsoY2h1bmspOwogICAgIH0sCiAKICAgICAvKioK
QEAgLTY3NSw3ICs2NjYsNyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHZhciBwcm9maWxlID0gdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtl
S2V5KHVpZCwgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCldOwog
ICAgICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHByb2Zp
bGUuZmluaXNoSGVhcFNuYXBzaG90KCk7CisgICAgICAgIHByb2ZpbGUuZmluaXNoSGVhcFNuYXBz
aG90KGZhbHNlKTsKICAgICB9LAogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXggNDM0NTI1ZTExYTM4MDlhOTU1OTk1ZGUwOTUz
NGQwMTFjYzBhNjE5NC4uOTBmOWNkNDEwODkzYTlmNWFmMWVmMWQ0YWUwMTg5Nzk3MjZjYzllNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJj
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAt
NjIsNiArNjIsNyBAQAogICAgIDxmaWxlPkZpbGVNYW5hZ2VyLmpzPC9maWxlPgogICAgIDxmaWxl
PkZpbGVTeXN0ZW1Nb2RlbC5qczwvZmlsZT4KICAgICA8ZmlsZT5GaWxlU3lzdGVtVmlldy5qczwv
ZmlsZT4KKyAgICA8ZmlsZT5GaWxlVXRpbHMuanM8L2ZpbGU+CiAgICAgPGZpbGU+RmlsdGVyZWRJ
dGVtU2VsZWN0aW9uRGlhbG9nLmpzPC9maWxlPgogICAgIDxmaWxlPkZvbnRWaWV3LmpzPC9maWxl
PgogICAgIDxmaWxlPkdvVG9MaW5lRGlhbG9nLmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggNjE5MDY0MGUzMzJi
Yzg5NjBhZWMzMzg4ZDY5NDhlNmI5NjZhOTUzNS4uMjU1ZWFiNzM3MmUzOTcwOGZhNzhiYWM3MTIx
ZDllMzIzMmEzMDY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5odG1sCkBAIC0xNjYsNiArMTY2LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJGaWxlQ29udGVudFZpZXcuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkZpbGVTeXN0ZW1N
b2RlbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iRmlsZVN5c3RlbVZpZXcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9IkZpbGVVdGlscy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRm9udFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkltYWdlVmlldy5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRGF0YWJhc2VUYWJsZVZpZXcu
anMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDM0ODlhMDljMDU4YzhmMjUxMmFmZDg4ZTUzYTE2ZmEwZDcz
NjQzYTAuLjUwYTlhMjQxNzUyNTM2ZWI4M2Y3MTFmOGM0MDM5MTRmOTc5ZjMzZTIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAxMi0wNy0yNiAgRXVnZW5lIEtseXVjaG5pa292ICA8ZXVzdGFzLmJp
Z0BnbWFpbC5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUHJvZmlsZXM6IGV4dHJhY3Qg
c2F2ZSB0byBmaWxlIC8gbG9hZCBmcm9tIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkyMzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCB0ZXN0IHRvIGFkb3B0IG5ldyBBUEkuCisKKyAg
ICAgICAgKiBpbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1sb2FkZXIuaHRtbDoKKyAg
ICAgICAgQWRvcHRlZCBuZXcgQVBJLgorCiAyMDEyLTA3LTI1ICBBbmRyZXcgV2lsc29uICA8YXR3
aWxzb25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgY2hyb21pdW0gZXhwZWN0
YXRpb25zIGNoYW5nZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxl
ci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2Zp
bGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0bWwKaW5kZXggMThlMjE4YTgyMzkyZDcyMWQxYmU0
ODQzNmI3NTA3ZDI3N2U1NmVmNC4uYmRkMTRmODExNmZmZjI1YmM5YWY0YWNhZGY2OTBiMWVhMDU0
MjA3NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25h
cHNob3QtbG9hZGVyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hl
YXAtc25hcHNob3QtbG9hZGVyLmh0bWwKQEAgLTE5LDkgKzE5LDExIEBAIGZ1bmN0aW9uIHRlc3Qo
KQogICAgICAgICBmdW5jdGlvbiBoZWFwU25hcHNob3RMb2FkZXJUZXN0KG5leHQpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dExvYWRlcigpOworICAgICAgICAgICAgbG9hZGVyLnN0YXJ0VHJhbnNmZXIoKTsKICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBsID0gc291cmNlU3RyaW5naWZpZWQubGVuZ3RoOyBpIDwgbDsg
aSArPSBwYXJ0U2l6ZSkKLSAgICAgICAgICAgICAgICBsb2FkZXIucHVzaEpTT05DaHVuayhzb3Vy
Y2VTdHJpbmdpZmllZC5zbGljZShpLCBpICsgcGFydFNpemUpKTsKLSAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSBsb2FkZXIuZmluaXNoTG9hZGluZygpOworICAgICAgICAgICAgICAgIGxvYWRlci50
cmFuc2ZlckNodW5rKHNvdXJjZVN0cmluZ2lmaWVkLnNsaWNlKGksIGkgKyBwYXJ0U2l6ZSkpOwor
ICAgICAgICAgICAgbG9hZGVyLmZpbmlzaFRyYW5zZmVyKCk7CisgICAgICAgICAgICB2YXIgcmVz
dWx0ID0gbG9hZGVyLmJ1aWxkU25hcHNob3QoKTsKICAgICAgICAgICAgIHJlc3VsdC5fbm9kZXMg
PSBuZXcgVWludDMyQXJyYXkocmVzdWx0Ll9ub2Rlcyk7CiAgICAgICAgICAgICByZXN1bHQuX2Nv
bnRhaW5tZW50RWRnZXMgPSBuZXcgVWludDMyQXJyYXkocmVzdWx0Ll9jb250YWlubWVudEVkZ2Vz
KTsKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0U25hcHNob3RFcXVhbHMobmV3IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QoSW5zcGVjdG9yVGVzdC5jcmVhdGVIZWFwU25hcHNob3RN
b2NrKCkpLCByZXN1bHQpOwpAQCAtNzcsNyArNzksNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAg
ICAgICAgICAgICBQcm9maWxlckFnZW50LmdldFByb2ZpbGUgPSBvbGRHZXRQcm9maWxlOwogICAg
ICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuYWRkU25pZmZlcihwcm9maWxlSGVhZGVyLCAiX3BhcnNlZCIsIHBhcnNlZCk7CisgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZmZXIocHJvZmlsZUhlYWRlciwgIl9zbmFwc2hv
dFJlY2VpdmVkIiwgcGFyc2VkKTsKIAogICAgICAgICAgICAgcGFuZWwuc2hvd1Byb2ZpbGUocHJv
ZmlsZUhlYWRlcik7CiAgICAgICAgIH0sCkBAIC04OCwyMCArOTAsMzcgQEAgZnVuY3Rpb24gdGVz
dCgpCiAKICAgICAgICAgICAgIHZhciBmaWxlTW9jayA9IHsKICAgICAgICAgICAgICAgICBuYW1l
OiAibW9jay5oZWFwc25hcHNob3QiLAotICAgICAgICAgICAgICAgIHNpemU6IHNvdXJjZVN0cmlu
Z2lmaWVkLmxlbmd0aCwKLSAgICAgICAgICAgICAgICBzbGljZTogZnVuY3Rpb24oYmVnaW4sIGVu
ZCkgeyByZXR1cm4gdGhpczsgfSwKLSAgICAgICAgICAgICAgICB3ZWJraXRTbGljZTogZnVuY3Rp
b24oYmVnaW4sIGVuZCkgeyByZXR1cm4gdGhpczsgfQorICAgICAgICAgICAgICAgIHNpemU6IHNv
dXJjZVN0cmluZ2lmaWVkLmxlbmd0aAogICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5fY3JlYXRlRmlsZVJlYWRlciA9
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5vdmVycmlkZShXZWJJbnNw
ZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLCAnX2NyZWF0ZUZpbGVSZWFkZXInLCBm
dW5jdGlvbihmaWxlTW9jaywgZGVsZWdhdGUpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgICAgICByZWFkQXNUZXh0OiBmdW5jdGlvbihmaWxlUGFydCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2ZpbGVIZWFkZXIgPSBwYW5lbC5fcHJvZmlsZXNb
cGFuZWwuX3Byb2ZpbGVzLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5hZGRTbmlmZmVyKHByb2ZpbGVIZWFkZXIsICJfcGFyc2VkIiwgZnVuY3Rpb24g
cGFyc2VkKCkgeyBuZXh0KCk7IH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZUhl
YWRlci5fbmV4dENodW5rTG9hZGVkKHNvdXJjZVN0cmluZ2lmaWVkKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhcnQ6IGZ1bmN0aW9uKHJlY2VpdmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZWNlaXZlci5zdGFydFRyYW5zZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxl
Z2F0ZS5vblRyYW5zZmVyU3RhcnRlZCh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y2VpdmVyLnRyYW5zZmVyQ2h1bmsoc291cmNlU3RyaW5naWZpZWQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZWdhdGUub25DaHVua1RyYW5zZmVycmVkKHRoaXMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjZWl2ZXIuZmluaXNoVHJhbnNmZXIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGVnYXRlLm9uVHJhbnNmZXJGaW5pc2hlZCh0aGlzKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICBsb2FkZWRTaXplOiBmdW5jdGlvbigpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxl
TW9jay5zaXplOworICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAg
IGZpbGVTaXplOiBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmaWxlTW9jay5zaXplOworICAgICAgICAgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmdW5jdGlvbigpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlTW9jay5uYW1l
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVy
KFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUsICJfc25hcHNob3RSZWNl
aXZlZCIsIGZ1bmN0aW9uKCkgeyBuZXh0KCk7IH0pOwogICAgICAgICAgICAgcGFuZWwuX2xvYWRG
cm9tRmlsZShmaWxlTW9jayk7CiAgICAgICAgIH0KICAgICBdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155767</attachid>
            <date>2012-08-01 02:56:49 -0700</date>
            <delta_ts>2012-08-02 10:36:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92348-20120801135630.patch</filename>
            <type>text/plain</type>
            <size>35029</size>
            <attacher>eustas.bug</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2YyZTg1N2Q4ZTQ0MDYz
YTY5MWRmNzE5OTNmNjc3ZDIzODFjNzg3NC4uMDA4Mzc2NjZhMDc3MTdkYWYwMTgxMWFkYjZmZTA4
MTRiZDI0YTQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTA4LTAxICBFdWdl
bmUgS2x5dWNobmlrb3YgIDxldXN0YXMuYmlnQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBQcm9maWxlczogZXh0cmFjdCBzYXZlIHRvIGZpbGUgLyBsb2FkIGZyb20gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3RpdmF0aW9u
OiBleHRyYWN0IHJldXNhYmxlIGNvZGUgZm9yIHRpbWVsaW5lIGxvYWQvc2F2ZS4KKyAgICAgICAg
RmlsZVV0aWxzLmpzIHdpbGwgY29udGFpbiBjb21tb24gY29kZS4gTm90IGFsbCBjb2RlIG1vdmVk
IHRvIEZpbGVVdGlscworICAgICAgICB0byBtYWtlIHJldmlldyBlYXNpZXIuIFRoaXMgY29kZSB3
aWxsIGJlIG1vdmVkIGluIG5leHQgcGF0Y2guCisKKyAgICAgICAgQ29yZSBhYnN0cmFjdGlvbnM6
IENodW5rZWRUcmFuc2ZlcnJlciBhbmQgQ2h1bmtlZFRyYW5zZmVycmVyRGVsZWdhdGUuCisKKyAg
ICAgICAgQ2h1bmtlZFRyYW5zZmVycmVyIGlzIGludGVyZmFjZSB0aGF0IGlzIHVzZWQgdG8gdHJh
bnNmZXIgZW50aXR5IGRpdmRlZAorICAgICAgICB0byBjaHVua3MuIFRyYW5zZmVyIHByb2Nlc3Mg
aXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoc3RhcnRUcmFuc2ZlcikKKyAgICAgICAgYW5kIGZp
bmFsaXplZCAoZmluaXNoVHJuc2ZlcikuCisKKyAgICAgICAgQ2h1bmtlZFRyYW5zZmVycmVyRGVs
ZWdhdGUgaXMgaW50ZXJmYWNlIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucyBhYm91dAorICAgICAg
ICB0cmFuc2ZlciBwcm9jZXNzOiBvblRyYW5zZmVyU3RhcnRlZCwgb25DaHVua1RyYW5zZmVycmVk
LCBvblRyYW5zZmVyRmluaXNoZWQuCisKKyAgICAgICAgQ2h1bmtlZEZpbGVSZWFkZXI6IHV0aWxp
dHkgY2xhc3MgdGhhdCBsb2FkcyBmaWxlIGJ5IGNodW5rcyBvZiBzcGVjaWZpZWQgc2l6ZQorICAg
ICAgICBhbmQgbm90aWZpZXMgZ2l2ZW4gZGVsZWdhdGUuIFJlY2lldmVyIChDaHVua2VkVHJhbnNm
ZXJyZXIpIGlzIHN1cHBsaWVkIGFzIGEKKyAgICAgICAgcGFyYW1ldGVyIG9mIG1ldGhvZCAic3Rh
cnQiLgorCisgICAgICAgIENodW5rZWRGaWxlV3JpdGVyOiBpbXBsZW1lbnRhdGlvbiBvZiBDaHVu
a2VkVHJhbnNmZXJyZXIgdGhhdCBzYXZlcyBkYXRhCisgICAgICAgIHRvIGZpbGUgc3BlY2lmaWVk
IGJ5IGZpbGUgbmFtZSBhbmQgbm90aWZpZXMgZ2l2ZW4gZGVsZWdhdGUuCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IEFkZGVkICdGaWxlVXRpbHMuanMnLgorICAgICAgICAqIFdlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qOiBBZGRlZCAnRmlsZVV0aWxzLmpzJy4KKyAgICAgICAgKiBpbnNw
ZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHk6IEFkZGVkICdGaWxlVXRpbHMuanMnLgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRmlsZVV0aWxzLmpzOiBBZGRlZC4KKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJyZXJEZWxlZ2F0ZSk6IEFkZGVkLgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkNodW5rZWRGaWxlUmVhZGVyKTogQWRkZWQuCisgICAgICAgIChXZWJJbnNw
ZWN0b3IuY3JlYXRlRmlsZVNlbGVjdG9yRWxlbWVudCk6IEFkZGVkIHV0aWxpdHkgbWV0aG9kIHRv
IGNvbnN0cnVjdAorICAgICAgICBoaWRkZW4gaW5wdXQgZWxlbWVudCB0byBzZWxlY3QgZmlsZS4K
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qczogQWRv
cHRlZCBuZXcgQVBJLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90
UHJveHkuanM6IEFkb3B0ZWQgbmV3IEFQSS4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFZpZXcuanM6IEFkb3B0ZWQgbmV3IEFQSS4KKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RMb2FkRnJvbUZpbGVEZWxlZ2F0ZSk6CisgICAgICAgIEV4dHJhY3Rl
ZCBmcm9tIGV4aXN0aW5nIGNvZGUuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVX
cml0ZXIpOiBSZW5hbWVkIGFuZCByZWZhY3RvcmVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFNhdmVUb0ZpbGVEZWxlZ2F0ZSk6CisgICAgICAgIEV4dHJhY3RlZCBmcm9tIGV4
aXN0aW5nIGNvZGUuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVs
LmpzOiBBZG9wdGVkIG5ldyBBUEkuCisKIDIwMTItMDgtMDEgIEt3YW5nIFl1bCBTZW8gIDxza3l1
bEBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBNYWtlIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpj
cmVhdGVIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4qKSBwcml2YXRlLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IDU2YjJiYjI2ZTI3YWQyMzg0ZWE3NjM5MTc2ZmFhMzU0NjAwZDkyMjMuLmQ2YjZkMDEx
NWY2YzYyNzFkNTJmNWRkOWFiOWM2YzBjYzQ3ZDcxNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTYy
OTksNiArNjI5OSw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlQ29u
dGVudFZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZVN5c3Rl
bU1vZGVsLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVTeXN0ZW1W
aWV3LmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVVdGlscy5qcycs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9GaWx0ZXJlZEl0ZW1TZWxlY3Rpb25E
aWFsb2cuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRm9udFZpZXcuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvR29Ub0xpbmVEaWFsb2cuanMnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA5MTMw
ZTA5OTQyOWRjMDRlNzM4MzNjN2YyNzE2OTUzOGRlMjMzMGQ0Li5lZTNhNTIwODFjYjgyMzNhNjI3
NjUwNDcyMjc4MjBjM2IwZmI3ODk1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagpAQCAtNzU1MzgsNiArNzU1MzgsMTAgQEAKIAkJCQkJPgogCQkJCTwv
RmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcRmlsZVV0aWxzLmpzIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxmaWx0ZXJlZEl0ZW1TZWxlY3Rpb25E
aWFsb2cuY3NzIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CmluZGV4IDRkMjlmNzcwNjdmM2E5OTc3YWZhNzY5MGUz
ZWRkZTViZDA1MjczNWUuLmU1MGU1MjRiYTZjZGIyYjRmNWVkOTRmYzYzNzBhODQ0MmRmNTE2N2Ug
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5w
eQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKQEAg
LTgyLDYgKzgyLDcgQEAgbW9kdWxlcyA9IFsKICAgICAgICAgICAgICJEZWJ1Z2dlclNjcmlwdE1h
cHBpbmcuanMiLAogICAgICAgICAgICAgIkZpbGVNYW5hZ2VyLmpzIiwKICAgICAgICAgICAgICJG
aWxlU3lzdGVtTW9kZWwuanMiLAorICAgICAgICAgICAgIkZpbGVVdGlscy5qcyIsCiAgICAgICAg
ICAgICAiSEFSRW50cnkuanMiLAogICAgICAgICAgICAgIkluZGV4ZWREQk1vZGVsLmpzIiwKICAg
ICAgICAgICAgICJMaW5raWZpZXIuanMiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9GaWxlVXRpbHMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0ZpbGVVdGlscy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMmYwNTk5ZjlmMjQ3MzQxZWJlMDZk
MmE5MjVhYTcyZTcxYTcwY2JkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9GaWxlVXRpbHMuanMKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBp
bnRlcmZhY2UKKyAqLworV2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlckRlbGVnYXRlID0gZnVu
Y3Rpb24oKQoreworfQorCitXZWJJbnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVyRGVsZWdhdGUucHJv
dG90eXBlID0geworICAgIG9uVHJhbnNmZXJTdGFydGVkOiBmdW5jdGlvbihzb3VyY2UpCisgICAg
eworICAgIH0sCisKKyAgICBvbkNodW5rVHJhbnNmZXJyZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKKyAg
ICB7CisgICAgfSwKKworICAgIG9uVHJhbnNmZXJGaW5pc2hlZDogZnVuY3Rpb24oc291cmNlKQor
ICAgIHsKKyAgICB9LAorCisgICAgb25FcnJvcjogZnVuY3Rpb24oc291cmNlLCBldmVudCkKKyAg
ICB7CisgICAgfQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHshRmlsZX0g
ZmlsZQorICogQHBhcmFtIHshbnVtYmVyfSBjaHVua1NpemUKKyAqIEBwYXJhbSB7P1dlYkluc3Bl
Y3Rvci5DaHVua2VkVHJhbnNmZXJEZWxlZ2F0ZT19IGRlbGVnYXRlCisgKi8KK1dlYkluc3BlY3Rv
ci5DaHVua2VkRmlsZVJlYWRlciA9IGZ1bmN0aW9uKGZpbGUsIGNodW5rU2l6ZSwgZGVsZWdhdGUp
Cit7CisgICAgdGhpcy5fZmlsZSA9IGZpbGU7CisgICAgdGhpcy5fZmlsZVNpemUgPSBmaWxlLnNp
emU7CisgICAgdGhpcy5fbG9hZGVkU2l6ZSA9IDA7CisgICAgdGhpcy5fY2h1bmtTaXplID0gY2h1
bmtTaXplOworICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKK1dlYkluc3BlY3Rv
ci5DaHVua2VkRmlsZVJlYWRlci5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHBhcmFt
IHshV2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlcnJlcn0gb3V0cHV0CisgICAgICovCisgICAg
c3RhcnQ6IGZ1bmN0aW9uKG91dHB1dCkKKyAgICB7CisgICAgICAgIHRoaXMuX291dHB1dCA9IG91
dHB1dDsKKworICAgICAgICB0aGlzLl9yZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAgICAg
ICB0aGlzLl9yZWFkZXIub25sb2FkID0gdGhpcy5fb25DaHVua0xvYWRlZC5iaW5kKHRoaXMpOwor
ICAgICAgICB0aGlzLl9yZWFkZXIub25lcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTsK
KyAgICAgICAgdGhpcy5fb3V0cHV0LnN0YXJ0VHJhbnNmZXIoKTsKKyAgICAgICAgaWYgKHRoaXMu
X2RlbGVnYXRlKQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUub25UcmFuc2ZlclN0YXJ0ZWQo
dGhpcyk7CisgICAgICAgIHRoaXMuX2xvYWRDaHVuaygpOworICAgIH0sCisKKyAgICBsb2FkZWRT
aXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkU2l6ZTsK
KyAgICB9LAorCisgICAgZmlsZVNpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9maWxlU2l6ZTsKKyAgICB9LAorCisgICAgZmlsZU5hbWU6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9maWxlLm5hbWU7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgICAgICovCisgICAgX29uRXJyb3I6IGZ1bmN0
aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKQorICAgICAgICAg
ICAgdGhpcy5fZGVsZWdhdGUub25FcnJvcih0aGlzLCBldmVudCk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgICAgICovCisgICAgX29uQ2h1bmtMb2Fk
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZWFk
eVN0YXRlICE9PSBGaWxlUmVhZGVyLkRPTkUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdmFyIGRhdGEgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB0aGlzLl9sb2FkZWRT
aXplICs9IGRhdGEubGVuZ3RoOworCisgICAgICAgIHRoaXMuX291dHB1dC50cmFuc2ZlckNodW5r
KGRhdGEpOworICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpCisgICAgICAgICAgICB0aGlzLl9k
ZWxlZ2F0ZS5vbkNodW5rVHJhbnNmZXJyZWQodGhpcyk7CisKKyAgICAgICAgaWYgKHRoaXMuX2xv
YWRlZFNpemUgPT09IHRoaXMuX2ZpbGVTaXplKSB7CisgICAgICAgICAgICB0aGlzLl9maWxlID0g
bnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3JlYWRlciA9IG51bGw7CisgICAgICAgICAgICB0aGlz
Ll9vdXRwdXQuZmluaXNoVHJhbnNmZXIoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0
ZSkKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vblRyYW5zZmVyRmluaXNoZWQodGhp
cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9sb2Fk
Q2h1bmsoKTsKKyAgICB9LAorCisgICAgX2xvYWRDaHVuazogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIGNodW5rU3RhcnQgPSB0aGlzLl9sb2FkZWRTaXplOworICAgICAgICB2YXIgY2h1
bmtFbmQgPSBNYXRoLm1pbih0aGlzLl9maWxlU2l6ZSwgY2h1bmtTdGFydCArIHRoaXMuX2NodW5r
U2l6ZSkKKyAgICAgICAgdmFyIG5leHRQYXJ0ID0gdGhpcy5fZmlsZS53ZWJraXRTbGljZShjaHVu
a1N0YXJ0LCBjaHVua0VuZCk7CisgICAgICAgIHRoaXMuX3JlYWRlci5yZWFkQXNUZXh0KG5leHRQ
YXJ0KTsKKyAgICB9Cit9CisKKy8qKgorICogQHBhcmFtIHshZnVuY3Rpb24oRmlsZSl9IGNhbGxi
YWNrCisgKiBAcmV0dXJuIHtOb2RlfQorICovCitXZWJJbnNwZWN0b3IuY3JlYXRlRmlsZVNlbGVj
dG9yRWxlbWVudCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgdmFyIGZpbGVTZWxlY3RvckVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgIGZpbGVTZWxlY3Rv
ckVsZW1lbnQudHlwZSA9ICJmaWxlIjsKKyAgICBmaWxlU2VsZWN0b3JFbGVtZW50LnN0eWxlLnpJ
bmRleCA9IC0xOworICAgIGZpbGVTZWxlY3RvckVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAiYWJz
b2x1dGUiOworICAgIGZpbGVTZWxlY3RvckVsZW1lbnQub25jaGFuZ2UgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICBjYWxsYmFjayhmaWxlU2VsZWN0b3JFbGVtZW50LmZpbGVzWzBdKTsKKyAg
ICB9OworICAgIHJldHVybiBmaWxlU2VsZWN0b3JFbGVtZW50OworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RMb2FkZXIuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qcwpp
bmRleCA5Y2MwYzEyNWNlYTNmMDdjNjJmNDgyZWU1MzM2N2Q4OGYyODJiZTFhLi5lZjkzYjk5MmEx
MmNmMDI4YTJmMTQzMjA1YTkxZWNkMTEyNTFhM2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qcwpAQCAtMzAs
NyArMzAsNyBAQAogCiAvKioKICAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RSZWNlaXZlcn0KKyAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0
b3IuQ2h1bmtlZFRyYW5zZmVycmVyfQogICovCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9h
ZGVyID0gZnVuY3Rpb24oKQogewpAQCAtMzgsNyArMzgsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90TG9hZGVyID0gZnVuY3Rpb24oKQogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
TG9hZGVyLnByb3RvdHlwZSA9IHsKLSAgICBzdGFydExvYWRpbmc6IGZ1bmN0aW9uKCkKKyAgICBz
dGFydFRyYW5zZmVyOiBmdW5jdGlvbigpCiAgICAgewogICAgIH0sCiAKQEAgLTU0LDE1ICs1NCwy
MyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdGhpcy5fc25hcHNob3QgPSB7fTsKICAgICB9LAogCi0gICAgX2ZpbmRCYWxhbmNlZEN1cmx5
QnJhY2tldHM6IGZ1bmN0aW9uKCkKKyAgICAvKioKKyAgICAgKiBAcGFyYW0geyFzdHJpbmd9IHNv
dXJjZQorICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gc3RhcnRJbmRleAorICAgICAqIEBwYXJhbSB7
bnVtYmVyPX0gbGFzdEluZGV4CisgICAgICogQHJldHVybiB7IW51bWJlcn0KKyAgICAgKi8KKyAg
ICBfZmluZEJhbGFuY2VkQ3VybHlCcmFja2V0czogZnVuY3Rpb24oc291cmNlLCBzdGFydEluZGV4
LCBsYXN0SW5kZXgpCiAgICAgeworICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCB8fCAw
OworICAgICAgICBsYXN0SW5kZXggPSBsYXN0SW5kZXggfHwgc291cmNlLmxlbmd0aDsKICAgICAg
ICAgdmFyIGNvdW50ZXIgPSAwOwogICAgICAgICB2YXIgb3BlbmluZ0JyYWNrZXQgPSAieyIuY2hh
ckNvZGVBdCgwKSwgY2xvc2luZ0JyYWNrZXQgPSAifSIuY2hhckNvZGVBdCgwKTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLl9qc29uLmxlbmd0aDsgaSA8IGw7ICsraSkgewotICAg
ICAgICAgICAgdmFyIGNoYXJhY3RlciA9IHRoaXMuX2pzb24uY2hhckNvZGVBdChpKTsKLSAgICAg
ICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IG9wZW5pbmdCcmFja2V0KQorICAgICAgICBmb3IgKHZh
ciBpID0gc3RhcnRJbmRleDsgaSA8IGxhc3RJbmRleDsgKytpKSB7CisgICAgICAgICAgICB2YXIg
Y2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChpKTsKKyAgICAgICAgICAgIGlmIChjaGFyQ29k
ZSA9PT0gb3BlbmluZ0JyYWNrZXQpCiAgICAgICAgICAgICAgICAgKytjb3VudGVyOwotICAgICAg
ICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyID09PSBjbG9zaW5nQnJhY2tldCkgeworICAgICAgICAg
ICAgZWxzZSBpZiAoY2hhckNvZGUgPT09IGNsb3NpbmdCcmFja2V0KSB7CiAgICAgICAgICAgICAg
ICAgaWYgKC0tY291bnRlciA9PT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAx
OwogICAgICAgICAgICAgfQpAQCAtNzAsNyArNzgsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0sCiAKLSAg
ICBmaW5pc2hMb2FkaW5nOiBmdW5jdGlvbigpCisgICAgZmluaXNoVHJhbnNmZXI6IGZ1bmN0aW9u
KCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9qc29uKQogICAgICAgICAgICAgdGhpcy5fcGFy
c2VTdHJpbmdzQXJyYXkoKTsKQEAgLTEzMyw3ICsxNDEsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAvKioKICAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gY2h1bmsKICAgICAgKi8KLSAgICBwdXNoSlNPTkNodW5rOiBmdW5jdGlvbihjaHVuaykKKyAg
ICB0cmFuc2ZlckNodW5rOiBmdW5jdGlvbihjaHVuaykKICAgICB7CiAgICAgICAgIHRoaXMuX2pz
b24gKz0gY2h1bms7CiAgICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHsKQEAgLTE0NCwxNyAr
MTUyLDE3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU25hcHNob3QgdG9rZW4gbm90IGZvdW5k
Iik7CiAgICAgICAgICAgICB0aGlzLl9qc29uID0gdGhpcy5fanNvbi5zbGljZShzbmFwc2hvdFRv
a2VuSW5kZXggKyBzbmFwc2hvdFRva2VuLmxlbmd0aCArIDEpOwogICAgICAgICAgICAgdGhpcy5f
c3RhdGUgPSAicGFyc2Utc25hcHNob3QtaW5mbyI7Ci0gICAgICAgICAgICB0aGlzLnB1c2hKU09O
Q2h1bmsoIiIpOworICAgICAgICAgICAgdGhpcy50cmFuc2ZlckNodW5rKCIiKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgInBhcnNlLXNuYXBzaG90LWluZm8i
OiB7Ci0gICAgICAgICAgICB2YXIgY2xvc2luZ0JyYWNrZXRJbmRleCA9IHRoaXMuX2ZpbmRCYWxh
bmNlZEN1cmx5QnJhY2tldHMoKTsKKyAgICAgICAgICAgIHZhciBjbG9zaW5nQnJhY2tldEluZGV4
ID0gdGhpcy5fZmluZEJhbGFuY2VkQ3VybHlCcmFja2V0cyh0aGlzLl9qc29uKTsKICAgICAgICAg
ICAgIGlmIChjbG9zaW5nQnJhY2tldEluZGV4ID09PSAtMSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdC5zbmFwc2hvdCA9IC8qKiBAdHlwZSB7SGVh
cFNuYXBzaG90SGVhZGVyfSAqL0pTT04ucGFyc2UodGhpcy5fanNvbi5zbGljZSgwLCBjbG9zaW5n
QnJhY2tldEluZGV4KSk7CiAgICAgICAgICAgICB0aGlzLl9qc29uID0gdGhpcy5fanNvbi5zbGlj
ZShjbG9zaW5nQnJhY2tldEluZGV4KTsKICAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gImZpbmQt
bm9kZXMiOwotICAgICAgICAgICAgdGhpcy5wdXNoSlNPTkNodW5rKCIiKTsKKyAgICAgICAgICAg
IHRoaXMudHJhbnNmZXJDaHVuaygiIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlICJmaW5kLW5vZGVzIjogewpAQCAtMTcxLDcgKzE3OSw3IEBAIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5f
YXJyYXkgPSBuZXcgVWludDMyQXJyYXkobm9kZXNfbGVuZ3RoKTsKICAgICAgICAgICAgIHRoaXMu
X2FycmF5SW5kZXggPSAwOwogICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAicGFyc2Utbm9kZXMi
OwotICAgICAgICAgICAgdGhpcy5wdXNoSlNPTkNodW5rKCIiKTsKKyAgICAgICAgICAgIHRoaXMu
dHJhbnNmZXJDaHVuaygiIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlICJwYXJzZS1ub2RlcyI6IHsKQEAgLTE4MCw3ICsxODgsNyBAQCBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX3NuYXBz
aG90Lm5vZGVzID0gdGhpcy5fYXJyYXk7CiAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICJmaW5k
LWVkZ2VzIjsKICAgICAgICAgICAgIHRoaXMuX2FycmF5ID0gbnVsbDsKLSAgICAgICAgICAgIHRo
aXMucHVzaEpTT05DaHVuaygiIik7CisgICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAiZmluZC1lZGdl
cyI6IHsKQEAgLTE5Nyw3ICsyMDUsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2FycmF5ID0gbmV3IFVpbnQzMkFycmF5
KGVkZ2VzX2xlbmd0aCk7CiAgICAgICAgICAgICB0aGlzLl9hcnJheUluZGV4ID0gMDsKICAgICAg
ICAgICAgIHRoaXMuX3N0YXRlID0gInBhcnNlLWVkZ2VzIjsKLSAgICAgICAgICAgIHRoaXMucHVz
aEpTT05DaHVuaygiIik7CisgICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAicGFyc2UtZWRnZXMiOiB7
CkBAIC0yMDYsNyArMjE0LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdC5lZGdlcyA9IHRoaXMuX2FycmF5
OwogICAgICAgICAgICAgdGhpcy5fYXJyYXkgPSBudWxsOwogICAgICAgICAgICAgdGhpcy5fc3Rh
dGUgPSAiZmluZC1zdHJpbmdzIjsKLSAgICAgICAgICAgIHRoaXMucHVzaEpTT05DaHVuaygiIik7
CisgICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAiZmluZC1zdHJpbmdzIjogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMK
aW5kZXggNGFjNzFhMzM5YjZhNzI4MjM1NjcyYWJkODI0MmQwMDAzYzgwYjk4Yi4uZDlhODZmZGJh
NjMzZTQwMjA5YzYzMmM5ZGM5NzFjODhjYzRlNmEzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzCkBAIC0zNTUs
NyArMzU1LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5T2JqZWN0LnByb3RvdHlw
ZSA9IHsKIC8qKgogICogQGNvbnN0cnVjdG9yCiAgKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFByb3h5T2JqZWN0fQotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RSZWNlaXZlcn0KKyAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuQ2h1bmtlZFRy
YW5zZmVycmVyfQogICovCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyUHJveHkgPSBm
dW5jdGlvbih3b3JrZXIsIG9iamVjdElkKQogewpAQCAtMzY1LDcgKzM2NSw3IEBAIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RMb2FkZXJQcm94eSA9IGZ1bmN0aW9uKHdvcmtlciwgb2JqZWN0SWQp
CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXJQcm94eS5wcm90b3R5cGUgPSB7
Ci0gICAgc3RhcnRMb2FkaW5nOiBmdW5jdGlvbigpCisgICAgc3RhcnRUcmFuc2ZlcjogZnVuY3Rp
b24oKQogICAgIHsKICAgICAgICAgdGhpcy5fc3RhcnRlZCA9IHRydWU7CiAgICAgICAgIHRoaXMu
Y2FsbE1ldGhvZChudWxsLCAic3RhcnRUcmFuc2ZlciIpOwpAQCAtMzg3LDEyICszODcsMTIgQEAg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5LnByb3RvdHlwZSA9IHsKICAgICAv
KioKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKICAgICAgKi8KLSAgICBwdXNoSlNPTkNo
dW5rOiBmdW5jdGlvbihjaHVuaykKKyAgICB0cmFuc2ZlckNodW5rOiBmdW5jdGlvbihjaHVuaykK
ICAgICB7Ci0gICAgICAgIHRoaXMuY2FsbE1ldGhvZChudWxsLCAicHVzaEpTT05DaHVuayIsIGNo
dW5rKTsKKyAgICAgICAgdGhpcy5jYWxsTWV0aG9kKG51bGwsICJ0cmFuc2ZlckNodW5rIiwgY2h1
bmspOwogICAgIH0sCiAKLSAgICBmaW5pc2hMb2FkaW5nOiBmdW5jdGlvbigpCisgICAgZmluaXNo
VHJhbnNmZXI6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkU25hcHNo
b3QoKQogICAgICAgICB7CkBAIC00MTEsNyArNDExLDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdExvYWRlclByb3h5LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX3N0YXJ0ZWQg
PSBmYWxzZTsKICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdTbmFwc2hvdENvbnN1bWVycyA9IFtd
OwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuY2FsbE1ldGhvZChidWlsZFNuYXBzaG90LmJpbmQo
dGhpcyksICJmaW5pc2hMb2FkaW5nIik7CisgICAgICAgIHRoaXMuY2FsbE1ldGhvZChidWlsZFNu
YXBzaG90LmJpbmQodGhpcyksICJmaW5pc2hUcmFuc2ZlciIpOwogICAgIH0KIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmll
dy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmll
dy5qcwppbmRleCAyODlkOGQ4MzVmNGQwZmUyOTgyOTk0OTRkMmQwNDFjY2FkMjI3NWVkLi5jZWZm
YTcyM2RlNDc2NmI2MDA1OTJjNmE3ZmY5M2YxNjM1NDI4ZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCkBAIC03
ODcsMjMgKzc4NywyMyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Qcm9maWxlVAogLyoqCiAgKiBAaW50ZXJm
YWNlCiAgKi8KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZWNlaXZlciA9IGZ1bmN0aW9uKCkK
K1dlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJyZXIgPSBmdW5jdGlvbigpCiB7CiB9CiAKLVdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RSZWNlaXZlci5wcm90b3R5cGUgPSB7Ci0gICAgc3RhcnRM
b2FkaW5nOiBmdW5jdGlvbigpCitXZWJJbnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVycmVyLnByb3Rv
dHlwZSA9IHsKKyAgICBzdGFydFRyYW5zZmVyOiBmdW5jdGlvbigpCiAgICAgewogICAgIH0sCiAK
ICAgICAvKioKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKICAgICAgKi8KLSAgICBwdXNo
SlNPTkNodW5rOiBmdW5jdGlvbihjaHVuaykKKyAgICB0cmFuc2ZlckNodW5rOiBmdW5jdGlvbihj
aHVuaykKICAgICB7CiAgICAgfSwKIAotICAgIGZpbmlzaExvYWRpbmc6IGZ1bmN0aW9uKCkKKyAg
ICBmaW5pc2hUcmFuc2ZlcjogZnVuY3Rpb24oKQogICAgIHsKICAgICB9LAogCkBAIC04MjUsNyAr
ODI1LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyID0gZnVuY3Rpb24odHlwZSwg
dGl0bGUsIHVpZCwgbWF4SlNPYmplY3RJZCkKICAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRl
ci5jYWxsKHRoaXMsIHR5cGUsIHRpdGxlLCB1aWQpOwogICAgIHRoaXMubWF4SlNPYmplY3RJZCA9
IG1heEpTT2JqZWN0SWQ7CiAgICAgLyoqCi0gICAgICogQHR5cGUge1dlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RSZWNlaXZlcn0KKyAgICAgKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFu
c2ZlcnJlcn0KICAgICAgKi8KICAgICB0aGlzLl9yZWNlaXZlciA9IG51bGw7CiAgICAgLyoqCkBA
IC04NzQsNyArODc0LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlw
ZSA9IHsKIAogICAgICAgICB0aGlzLl9udW1iZXJPZkNodW5rcyA9IDA7CiAgICAgICAgIGlmICgh
bG9hZGVyUHJveHkuaXNTdGFydGVkKCkpIHsKLSAgICAgICAgICAgIGxvYWRlclByb3h5LnN0YXJ0
TG9hZGluZygpOworICAgICAgICAgICAgbG9hZGVyUHJveHkuc3RhcnRUcmFuc2ZlcigpOwogICAg
ICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiTG9hZGluZ1x1MjAyNiIpOwogICAgICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC53
YWl0ID0gdHJ1ZTsKICAgICAgICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmlsZSh0aGlzLnBy
b2ZpbGVUeXBlKCkuaWQsIHRoaXMudWlkKTsKQEAgLTkxNywxMCArOTE3LDEwIEBAIFdlYkluc3Bl
Y3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHBh
cmFtIHtzdHJpbmd9IGNodW5rCiAgICAgICovCi0gICAgcHVzaEpTT05DaHVuazogZnVuY3Rpb24o
Y2h1bmspCisgICAgdHJhbnNmZXJDaHVuazogZnVuY3Rpb24oY2h1bmspCiAgICAgewogICAgICAg
ICArK3RoaXMuX251bWJlck9mQ2h1bmtzOwotICAgICAgICB0aGlzLl9yZWNlaXZlci5wdXNoSlNP
TkNodW5rKGNodW5rKTsKKyAgICAgICAgdGhpcy5fcmVjZWl2ZXIudHJhbnNmZXJDaHVuayhjaHVu
ayk7CiAgICAgfSwKIAogICAgIF9zbmFwc2hvdFJlY2VpdmVkOiBmdW5jdGlvbihzbmFwc2hvdFBy
b3h5KQpAQCAtOTM1LDExICs5MzUsMTIgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgd29ya2VyLnN0YXJ0Q2hlY2tpbmdGb3JMb25nUnVubmlu
Z0NhbGxzKCk7CiAgICAgfSwKIAotICAgIGZpbmlzaEhlYXBTbmFwc2hvdDogZnVuY3Rpb24oKQor
ICAgIGZpbmlzaEhlYXBTbmFwc2hvdDogZnVuY3Rpb24odHJhbnNmZXJGaW5pc2hlZCkKICAgICB7
CiAgICAgICAgIHRoaXMuX3RvdGFsTnVtYmVyT2ZDaHVua3MgPSB0aGlzLl9udW1iZXJPZkNodW5r
czsKICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiUGFyc2luZ1x1MjAyNiIpOwotICAgICAgICB0aGlzLl9yZWNlaXZlci5maW5pc2hM
b2FkaW5nKCk7CisgICAgICAgIGlmICghdHJhbnNmZXJGaW5pc2hlZCkKKyAgICAgICAgICAgIHRo
aXMuX3JlY2VpdmVyLmZpbmlzaFRyYW5zZmVyKCk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtOTU3
LDkgKzk1OCwyMCBAQCBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0g
ewogICAgIHNhdmVUb0ZpbGU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2ZpbGVO
YW1lID0gdGhpcy5fZmlsZU5hbWUgfHwgIkhlYXAtIiArIG5ldyBEYXRlKCkudG9JU084NjAxQ29t
cGFjdCgpICsgIi5oZWFwc25hcHNob3QiOwotICAgICAgICB0aGlzLl9yZWNlaXZlciA9IG5ldyBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2F2ZVRvRmlsZVJlY2VpdmVyKHRoaXMuX2ZpbGVOYW1l
LCB0aGlzKTsKKyAgICAgICAgdmFyIGRlbGVnYXRlID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RTYXZlVG9GaWxlRGVsZWdhdGUodGhpcyk7CisgICAgICAgIHRoaXMuX3JlY2VpdmVyID0g
dGhpcy5fY3JlYXRlRmlsZVdyaXRlcih0aGlzLl9maWxlTmFtZSwgZGVsZWdhdGUpOwogICAgICAg
ICB0aGlzLl9udW1iZXJPZkNodW5rcyA9IDA7Ci0gICAgICAgIHRoaXMuX3JlY2VpdmVyLnN0YXJ0
TG9hZGluZygpOworICAgICAgICB0aGlzLl9yZWNlaXZlci5zdGFydFRyYW5zZmVyKCk7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7IXN0cmluZ30gZmlsZU5hbWUKKyAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJEZWxlZ2F0ZX0gZGVsZWdhdGUKKyAg
ICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuQ2h1bmtlZFRyYW5zZmVycmVyfQorICAgICAqLwor
ICAgIF9jcmVhdGVGaWxlV3JpdGVyOiBmdW5jdGlvbihmaWxlTmFtZSwgZGVsZWdhdGUpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DaHVua2VkRmlsZVdyaXRlcihmaWxl
TmFtZSwgZGVsZWdhdGUpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTk3Niw5OSArOTg4LDg2IEBA
IFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUgPSB7CiAgICAgICovCiAg
ICAgbG9hZEZyb21GaWxlOiBmdW5jdGlvbihmaWxlKQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24g
b25FcnJvcihlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2goZS50YXJnZXQuZXJyb3Iu
Y29kZSkgewotICAgICAgICAgICAgY2FzZSBlLnRhcmdldC5lcnJvci5OT1RfRk9VTkRfRVJSOgot
ICAgICAgICAgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIiclcycgbm90IGZvdW5kLiIsIGZpbGUubmFtZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgZS50YXJnZXQuZXJyb3IuTk9UX1JFQURBQkxFX0VSUjoK
LSAgICAgICAgICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCInJXMnIGlzIG5vdCByZWFkYWJsZSIsIGZpbGUubmFtZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZS50YXJnZXQuZXJyb3IuQUJPUlRfRVJSOgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICB0aGlzLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCInJXMnIGVycm9yICVkIiwgZmlsZS5uYW1lLCBlLnRhcmdldC5lcnJvci5jb2RlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAgIHRoaXMudGl0bGUgPSBmaWxlLm5hbWU7CiAg
ICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkxvYWRpbmdcdTIwMjYiKTsKICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC53YWl0ID0g
dHJ1ZTsKICAgICAgICAgdGhpcy5fc2V0dXBXb3JrZXIoKTsKICAgICAgICAgdGhpcy5fbnVtYmVy
T2ZDaHVua3MgPSAwOwotICAgICAgICB0aGlzLl9yZWNlaXZlci5zdGFydExvYWRpbmcoKTsKIAot
ICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgICAgICov
Ci0gICAgICAgIGZ1bmN0aW9uIG9uTG9hZChldmVudCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlICE9PSBGaWxlUmVhZGVyLkRPTkUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdGhpcy5fbmV4dENodW5rTG9hZGVkKGV2ZW50
LnRhcmdldC5yZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fZmlsZSA9IGZpbGU7
Ci0gICAgICAgIHRoaXMuX2V4cGVjdGVkU2l6ZSA9IGZpbGUuc2l6ZTsKLSAgICAgICAgdGhpcy5f
bG9hZGVkU2l6ZSA9IDA7Ci0gICAgICAgIHRoaXMuX3JlYWRlciA9IHRoaXMuX2NyZWF0ZUZpbGVS
ZWFkZXIoKTsKLSAgICAgICAgdGhpcy5fcmVhZGVyLm9ubG9hZCA9IG9uTG9hZC5iaW5kKHRoaXMp
OwotICAgICAgICB0aGlzLl9yZWFkZXIub25lcnJvciA9IG9uRXJyb3I7Ci0gICAgICAgIHRoaXMu
X2xvYWROZXh0Q2h1bmsoKTsKKyAgICAgICAgdmFyIGRlbGVnYXRlID0gbmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RMb2FkRnJvbUZpbGVEZWxlZ2F0ZSh0aGlzKTsKKyAgICAgICAgdmFyIGZp
bGVSZWFkZXIgPSB0aGlzLl9jcmVhdGVGaWxlUmVhZGVyKGZpbGUsIGRlbGVnYXRlKTsKKyAgICAg
ICAgZmlsZVJlYWRlci5zdGFydCh0aGlzLl9yZWNlaXZlcik7CiAgICAgfSwKIAotICAgIF9sb2Fk
TmV4dENodW5rOiBmdW5jdGlvbigpCisgICAgX2NyZWF0ZUZpbGVSZWFkZXI6IGZ1bmN0aW9uKGZp
bGUsIGRlbGVnYXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ2h1
bmtlZEZpbGVSZWFkZXIoZmlsZSwgMTAwMDAwMDAsIGRlbGVnYXRlKTsKKyAgICB9Cit9CisKK1dl
Ykluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5z
cGVjdG9yLlByb2ZpbGVIZWFkZXIucHJvdG90eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3Rvcgor
ICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNmZXJEZWxlZ2F0ZX0KKyAq
LworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRGcm9tRmlsZURlbGVnYXRlID0gZnVuY3Rp
b24oc25hcHNob3RIZWFkZXIpCit7CisgICAgdGhpcy5fc25hcHNob3RIZWFkZXIgPSBzbmFwc2hv
dEhlYWRlcjsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRGcm9tRmlsZURlbGVn
YXRlLnByb3RvdHlwZSA9IHsKKyAgICBvblRyYW5zZmVyU3RhcnRlZDogZnVuY3Rpb24oc291cmNl
KQogICAgIHsKLSAgICAgICAgdmFyIGxvYWRlZFNpemUgPSB0aGlzLl9sb2FkZWRTaXplOwotICAg
ICAgICB2YXIgY2h1bmtTaXplID0gMTAwMDAwMDA7Ci0gICAgICAgIHZhciBzaXplID0gdGhpcy5f
ZXhwZWN0ZWRTaXplIDwgbG9hZGVkU2l6ZSArIGNodW5rU2l6ZSA/IHRoaXMuX2V4cGVjdGVkU2l6
ZSAtIGxvYWRlZFNpemUgOiBjaHVua1NpemU7Ci0gICAgICAgIHZhciBuZXh0UGFydCA9IHRoaXMu
X2ZpbGUud2Via2l0U2xpY2UobG9hZGVkU2l6ZSwgbG9hZGVkU2l6ZSArIHNpemUpOwotICAgICAg
ICB0aGlzLl9yZWFkZXIucmVhZEFzVGV4dChuZXh0UGFydCk7CiAgICAgfSwKIAotICAgIF9uZXh0
Q2h1bmtMb2FkZWQ6IGZ1bmN0aW9uKGRhdGEpCisgICAgb25DaHVua1RyYW5zZmVycmVkOiBmdW5j
dGlvbihzb3VyY2UpCiAgICAgewotICAgICAgICB0aGlzLl9sb2FkZWRTaXplICs9IGRhdGEubGVu
Z3RoOwotICAgICAgICB0aGlzLl9yZWNlaXZlci5wdXNoSlNPTkNodW5rKGRhdGEpOwotICAgICAg
ICB0aGlzLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJM
b2FkaW5nXHUyMDI2ICVkJSIsICh0aGlzLl9sb2FkZWRTaXplICogMTAwIC8gdGhpcy5fZXhwZWN0
ZWRTaXplKS50b0ZpeGVkKDIpKTsKKyAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuc2lkZWJh
ckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoCisgICAgICAgICAgICAi
TG9hZGluZ1x1MjAyNiAlZCUiLCAoc291cmNlLmxvYWRlZFNpemUoKSAqIDEwMCAvIHNvdXJjZS5m
aWxlU2l6ZSgpKS50b0ZpeGVkKDIpKTsKKyAgICB9LAogCi0gICAgICAgIGlmICh0aGlzLl9sb2Fk
ZWRTaXplID09PSB0aGlzLl9leHBlY3RlZFNpemUpIHsKLSAgICAgICAgICAgIHRoaXMuX2ZpbGUg
PSBudWxsOwotICAgICAgICAgICAgdGhpcy5fcmVhZGVyID0gbnVsbDsKLSAgICAgICAgICAgIHRo
aXMuZmluaXNoSGVhcFNuYXBzaG90KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgdGhpcy5fbG9hZE5leHRDaHVuaygpOworICAgIG9uVHJhbnNmZXJGaW5pc2hlZDog
ZnVuY3Rpb24oc291cmNlKQorICAgIHsKKyAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuZmlu
aXNoSGVhcFNuYXBzaG90KHRydWUpOwogICAgIH0sCiAKLSAgICBfY3JlYXRlRmlsZVJlYWRlcjog
ZnVuY3Rpb24oKQorICAgIG9uRXJyb3I6IGZ1bmN0aW9uIChzb3VyY2UsIGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gbmV3IEZpbGVSZWFkZXIoKTsKKyAgICAgICAgc3dpdGNoKGUudGFyZ2V0LmVy
cm9yLmNvZGUpIHsKKyAgICAgICAgY2FzZSBlLnRhcmdldC5lcnJvci5OT1RfRk9VTkRfRVJSOgor
ICAgICAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUg
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiclcycgbm90IGZvdW5kLiIsIHNvdXJjZS5maWxlTmFt
ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZS50YXJnZXQuZXJyb3IuTk9UX1JF
QURBQkxFX0VSUjoKKyAgICAgICAgICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyLnNpZGViYXJFbGVt
ZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCInJXMnIGlzIG5vdCByZWFkYWJs
ZSIsIHNvdXJjZS5maWxlTmFtZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZS50
YXJnZXQuZXJyb3IuQUJPUlRfRVJSOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5zaWRlYmFyRWxlbWVudC5zdWJ0
aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJyVzJyBlcnJvciAlZCIsIHNvdXJjZS5maWxl
TmFtZSgpLCBlLnRhcmdldC5lcnJvci5jb2RlKTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotV2Vi
SW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuUHJvZmlsZUhlYWRlci5wcm90b3R5cGU7Ci0KLQogLyoqCiAgKiBAY29uc3RydWN0b3IK
LSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVjZWl2ZXJ9CisgKiBA
aW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlcnJlcn0KKyAqIEBwYXJhbSB7
IXN0cmluZ30gZmlsZU5hbWUKKyAqIEBwYXJhbSB7P1dlYkluc3BlY3Rvci5DaHVua2VkVHJhbnNm
ZXJEZWxlZ2F0ZT19IGRlbGVnYXRlCiAgKi8KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTYXZl
VG9GaWxlUmVjZWl2ZXIgPSBmdW5jdGlvbihmaWxlTmFtZSwgc25hcHNob3RIZWFkZXIpCitXZWJJ
bnNwZWN0b3IuQ2h1bmtlZEZpbGVXcml0ZXIgPSBmdW5jdGlvbihmaWxlTmFtZSwgZGVsZWdhdGUp
CiB7CiAgICAgdGhpcy5fZmlsZU5hbWUgPSBmaWxlTmFtZTsKLSAgICB0aGlzLl9zbmFwc2hvdEhl
YWRlciA9IHNuYXBzaG90SGVhZGVyOwotICAgIHRoaXMuX3NhdmVkQ2h1bmtzID0gMDsKKyAgICB0
aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwogfQogCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
U2F2ZVRvRmlsZVJlY2VpdmVyLnByb3RvdHlwZSA9IHsKK1dlYkluc3BlY3Rvci5DaHVua2VkRmls
ZVdyaXRlci5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQG92ZXJyaWRlCiAgICAgICov
Ci0gICAgc3RhcnRMb2FkaW5nOiBmdW5jdGlvbigpCisgICAgc3RhcnRUcmFuc2ZlcjogZnVuY3Rp
b24oKQogICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuU2F2ZWRVUkwsIHRoaXMu
X3N0YXJ0U2F2aW5nU25hcHNob3QsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1h
bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBl
cy5TYXZlZFVSTCwgdGhpcy5fb25UcmFuc2ZlclN0YXJ0ZWQsIHRoaXMpOwogICAgICAgICBXZWJJ
bnNwZWN0b3IuZmlsZU1hbmFnZXIuc2F2ZSh0aGlzLl9maWxlTmFtZSwgIiIsIHRydWUpOwogICAg
IH0sCiAKQEAgLTEwNzYsNyArMTA3NSw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTYXZl
VG9GaWxlUmVjZWl2ZXIucHJvdG90eXBlID0gewogICAgICAqIEBvdmVycmlkZQogICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBjaHVuawogICAgICAqLwotICAgIHB1c2hKU09OQ2h1bms6IGZ1bmN0aW9u
KGNodW5rKQorICAgIHRyYW5zZmVyQ2h1bms6IGZ1bmN0aW9uKGNodW5rKQogICAgIHsKICAgICAg
ICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmFwcGVuZCh0aGlzLl9maWxlTmFtZSwgY2h1bmsp
OwogICAgIH0sCkBAIC0xMDg0LDEwICsxMDgzLDExIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RTYXZlVG9GaWxlUmVjZWl2ZXIucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBvdmVy
cmlkZQogICAgICAqLwotICAgIGZpbmlzaExvYWRpbmc6IGZ1bmN0aW9uKCkKKyAgICBmaW5pc2hU
cmFuc2ZlcjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5h
Z2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlw
ZXMuQXBwZW5kZWRUb1VSTCwgdGhpcy5fc2F2ZVN0YXR1c1VwZGF0ZSwgdGhpcyk7Ci0gICAgICAg
IHRoaXMuX3NuYXBzaG90SGVhZGVyLl9zbmFwc2hvdFJlY2VpdmVkKG51bGwpOworICAgICAgICBX
ZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5BcHBlbmRlZFRvVVJMLCB0aGlzLl9vbkNodW5rVHJhbnNm
ZXJyZWQsIHRoaXMpOworICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpCisgICAgICAgICAgICB0
aGlzLl9kZWxlZ2F0ZS5vblRyYW5zZmVyRmluaXNoZWQodGhpcyk7CiAgICAgfSwKIAogICAgIGRp
c3Bvc2U6IGZ1bmN0aW9uKCkKQEAgLTEwOTcsMjYgKzEwOTcsNTYgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFNhdmVUb0ZpbGVSZWNlaXZlci5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50CiAgICAgICovCi0gICAgX3N0YXJ0
U2F2aW5nU25hcHNob3Q6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9vblRyYW5zZmVyU3RhcnRlZDog
ZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICBpZiAoZXZlbnQuZGF0YSAhPT0gdGhpcy5f
ZmlsZU5hbWUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3NuYXBzaG90SGVh
ZGVyLl9zYXZlU3RhdHVzVXBkYXRlKDApOwotICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFn
ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBl
cy5TYXZlZFVSTCwgdGhpcy5fc3RhcnRTYXZpbmdTbmFwc2hvdCwgdGhpcyk7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5maWxlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxl
TWFuYWdlci5FdmVudFR5cGVzLkFwcGVuZGVkVG9VUkwsIHRoaXMuX3NhdmVTdGF0dXNVcGRhdGUs
IHRoaXMpOwotICAgICAgICBQcm9maWxlckFnZW50LmdldFByb2ZpbGUodGhpcy5fc25hcHNob3RI
ZWFkZXIucHJvZmlsZVR5cGUoKS5pZCwgdGhpcy5fc25hcHNob3RIZWFkZXIudWlkKTsKKyAgICAg
ICAgaWYgKHRoaXMuX2RlbGVnYXRlKQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUub25UcmFu
c2ZlclN0YXJ0ZWQodGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5yZW1v
dmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLlNhdmVk
VVJMLCB0aGlzLl9vblRyYW5zZmVyU3RhcnRlZCwgdGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rv
ci5maWxlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFuYWdlci5F
dmVudFR5cGVzLkFwcGVuZGVkVG9VUkwsIHRoaXMuX29uQ2h1bmtUcmFuc2ZlcnJlZCwgdGhpcyk7
CiAgICAgfSwKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBl
dmVudAogICAgICAqLwotICAgIF9zYXZlU3RhdHVzVXBkYXRlOiBmdW5jdGlvbihldmVudCkKKyAg
ICBfb25DaHVua1RyYW5zZmVycmVkOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIGlm
IChldmVudC5kYXRhICE9PSB0aGlzLl9maWxlTmFtZSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuX3NhdmVTdGF0dXNVcGRhdGUoKyt0aGlzLl9zYXZl
ZENodW5rcyk7Ci0gICAgICAgIGlmICh0aGlzLl9zYXZlZENodW5rcyA9PT0gdGhpcy5fc25hcHNo
b3RIZWFkZXIuX3RvdGFsTnVtYmVyT2ZDaHVua3MpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
ZmlsZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIu
RXZlbnRUeXBlcy5BcHBlbmRlZFRvVVJMLCB0aGlzLl9zYXZlU3RhdHVzVXBkYXRlLCB0aGlzKTsK
KyAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUu
b25DaHVua1RyYW5zZmVycmVkKHRoaXMpOwogICAgIH0KLX07Cit9CiAKKy8qKgorICogQGNvbnN0
cnVjdG9yCisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkNodW5rZWRUcmFuc2ZlckRlbGVn
YXRlfQorICovCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2F2ZVRvRmlsZURlbGVnYXRlID0g
ZnVuY3Rpb24oc25hcHNob3RIZWFkZXIpCit7CisgICAgdGhpcy5fc25hcHNob3RIZWFkZXIgPSBz
bmFwc2hvdEhlYWRlcjsKKyAgICB0aGlzLl9zYXZlZENodW5rcyA9IDA7Cit9CisKK1dlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RTYXZlVG9GaWxlRGVsZWdhdGUucHJvdG90eXBlID0geworICAgIG9u
VHJhbnNmZXJTdGFydGVkOiBmdW5jdGlvbihzb3VyY2UpCisgICAgeworICAgICAgICB0aGlzLl9z
bmFwc2hvdEhlYWRlci5fc2F2ZVN0YXR1c1VwZGF0ZSgwKTsKKyAgICAgICAgUHJvZmlsZXJBZ2Vu
dC5nZXRQcm9maWxlKHRoaXMuX3NuYXBzaG90SGVhZGVyLnByb2ZpbGVUeXBlKCkuaWQsIHRoaXMu
X3NuYXBzaG90SGVhZGVyLnVpZCk7CisgICAgfSwKKworICAgIG9uQ2h1bmtUcmFuc2ZlcnJlZDog
ZnVuY3Rpb24oc291cmNlKQorICAgIHsKKyAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuX3Nh
dmVTdGF0dXNVcGRhdGUoKyt0aGlzLl9zYXZlZENodW5rcyk7CisgICAgfSwKKworICAgIG9uVHJh
bnNmZXJGaW5pc2hlZDogZnVuY3Rpb24oc291cmNlKQorICAgIHsKKyAgICAgICAgdGhpcy5fc25h
cHNob3RIZWFkZXIuX3NuYXBzaG90UmVjZWl2ZWQobnVsbCk7CisgICAgfSwKKworICAgIG9uRXJy
b3I6IGZ1bmN0aW9uKHNvdXJjZSwgZXZlbnQpCisgICAgeworICAgIH0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwppbmRleCBl
ZDMzNzBkMzc2NDA0ZWJlNDFiZDdkZTdmOTQ4OTBiYzFiMTI4OTU2Li44ZjFiNmNmZDBkZTFhYzdl
MjQyNTI4YTQyOWZiMGI2NWI3NDI4M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCkBAIC0yNjQsMTcgKzI2NCw4IEBAIFdl
Ykluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGlm
ICh0aGlzLl9maWxlU2VsZWN0b3JFbGVtZW50KQogICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJl
bW92ZUNoaWxkKHRoaXMuX2ZpbGVTZWxlY3RvckVsZW1lbnQpOwotCi0gICAgICAgIHZhciBmaWxl
U2VsZWN0b3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAg
ICAgZmlsZVNlbGVjdG9yRWxlbWVudC50eXBlID0gImZpbGUiOwotICAgICAgICBmaWxlU2VsZWN0
b3JFbGVtZW50LnN0eWxlLnpJbmRleCA9IC0xOwotICAgICAgICBmaWxlU2VsZWN0b3JFbGVtZW50
LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKLSAgICAgICAgZnVuY3Rpb24gb25DaGFuZ2Uo
ZXZlbnQpIHsKLSAgICAgICAgICAgIHRoaXMuX2xvYWRGcm9tRmlsZSh0aGlzLl9maWxlU2VsZWN0
b3JFbGVtZW50LmZpbGVzWzBdKTsKLSAgICAgICAgfQotICAgICAgICBmaWxlU2VsZWN0b3JFbGVt
ZW50Lm9uY2hhbmdlID0gb25DaGFuZ2UuYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5lbGVtZW50
LmFwcGVuZENoaWxkKGZpbGVTZWxlY3RvckVsZW1lbnQpOwotICAgICAgICB0aGlzLl9maWxlU2Vs
ZWN0b3JFbGVtZW50ID0gZmlsZVNlbGVjdG9yRWxlbWVudDsKKyAgICAgICAgdGhpcy5fZmlsZVNl
bGVjdG9yRWxlbWVudCA9IFdlYkluc3BlY3Rvci5jcmVhdGVGaWxlU2VsZWN0b3JFbGVtZW50KHRo
aXMuX2xvYWRGcm9tRmlsZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKHRoaXMuX2ZpbGVTZWxlY3RvckVsZW1lbnQpOwogICAgIH0sCiAKICAgICBfbG9hZEZy
b21GaWxlOiBmdW5jdGlvbihmaWxlKQpAQCAtNjc1LDkgKzY2Niw5IEBAIFdlYkluc3BlY3Rvci5Q
cm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICBfYWRkSGVhcFNuYXBzaG90Q2h1bms6IGZ1
bmN0aW9uKHVpZCwgY2h1bmspCiAgICAgewogICAgICAgICB2YXIgcHJvZmlsZSA9IHRoaXMuX3By
b2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQ
cm9maWxlVHlwZS5UeXBlSWQpXTsKLSAgICAgICAgaWYgKCFwcm9maWxlICkKKyAgICAgICAgaWYg
KCFwcm9maWxlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBwcm9maWxlLnB1c2hKU09O
Q2h1bmsoY2h1bmspOworICAgICAgICBwcm9maWxlLnRyYW5zZmVyQ2h1bmsoY2h1bmspOwogICAg
IH0sCiAKICAgICAvKioKQEAgLTY4OCw3ICs2NzksNyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQ
YW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBwcm9maWxlID0gdGhpcy5fcHJvZmlsZXNJ
ZE1hcFt0aGlzLl9tYWtlS2V5KHVpZCwgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVU
eXBlLlR5cGVJZCldOwogICAgICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIHByb2ZpbGUuZmluaXNoSGVhcFNuYXBzaG90KCk7CisgICAgICAgIHByb2ZpbGUu
ZmluaXNoSGVhcFNuYXBzaG90KGZhbHNlKTsKICAgICB9LAogCiAgICAgLyoqCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXggYjAyOGZkOWUxMmVm
ZWM2ZTVjMzIwMzRjMGFlNDFiYzEwZTkxMDcwNC4uZjFlOWQyMjQyMzY4YTQxM2ZkYTg3ODJmMzEx
MGZjMTY4NTVmMGQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9XZWJLaXQucXJjCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
V2ViS2l0LnFyYwpAQCAtNjIsNiArNjIsNyBAQAogICAgIDxmaWxlPkZpbGVNYW5hZ2VyLmpzPC9m
aWxlPgogICAgIDxmaWxlPkZpbGVTeXN0ZW1Nb2RlbC5qczwvZmlsZT4KICAgICA8ZmlsZT5GaWxl
U3lzdGVtVmlldy5qczwvZmlsZT4KKyAgICA8ZmlsZT5GaWxlVXRpbHMuanM8L2ZpbGU+CiAgICAg
PGZpbGU+RmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nLmpzPC9maWxlPgogICAgIDxmaWxlPkZv
bnRWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkdvVG9MaW5lRGlhbG9nLmpzPC9maWxlPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRt
bCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5k
ZXggYjRjMzZlMTA0YjM4NGQ2ZWYxZmQxZDBmNzlkODk0ZmViZWM2ZmU1MS4uMDAxYjllNjkyNzdl
NWE4ZDg5YWQ2N2E0NzZjZmUyOGNmZTAzOTVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCkBAIC0xNjUsNiArMTY1LDcgQEAgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJGaWxlQ29udGVu
dFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkZpbGVTeXN0ZW1Nb2RlbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iRmlsZVN5c3RlbVZpZXcuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkZpbGVVdGlscy5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRm9udFZpZXcuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkltYWdlVmlldy5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRGF0
YWJhc2VUYWJsZVZpZXcuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVlMmE3MGU1ZmI3MDkzNTBmNDVj
YTAwNmNmZjk5NzY5Y2ZkZDc3OWQuLjk3NTliMGVkODhiM2ExM2M4ODE0NTY5ODFlMTRkZWY4OGZl
MzE0YjIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wOC0wMSAgRXVnZW5lIEtseXVjaG5p
a292ICA8ZXVzdGFzLmJpZ0BnbWFpbC5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUHJv
ZmlsZXM6IGV4dHJhY3Qgc2F2ZSB0byBmaWxlIC8gbG9hZCBmcm9tIGNvZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyMzQ4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCB0ZXN0IHRvIGFkb3B0
IG5ldyBBUEkuIFJlcGxhY2VkIEZTIG1vY2sgd2l0aAorICAgICAgICByZWFkZXIgbW9jay4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1sOgor
ICAgICAgICBBZG9wdGVkIG5ldyBBUEkuCisKIDIwMTItMDgtMDEgIFphbiBEb2JlcnNlayAgPHph
bmRvYmVyc2VrQGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdUSyBnYXJkZW5pbmcs
IGFkZGluZyBhbiBpbWFnZSBmYWlsdXJlIGV4cGVjdGF0aW9uIGZvciBhCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1sb2FkZXIuaHRtbCBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1s
CmluZGV4IDI5NzkwZmM1ZTk2MThiOTM5MWJkYTA0Mzg5N2Q1MTg0MTI2NTlmNzIuLmJkZDE0Zjgx
MTZmZmYyNWJjOWFmNGFjYWRmNjkwYjFlYTA1NDIwNzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1sCisrKyBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1sCkBAIC0x
OSw5ICsxOSwxMCBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgZnVuY3Rpb24gaGVhcFNuYXBz
aG90TG9hZGVyVGVzdChuZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgbG9hZGVyID0g
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIoKTsKKyAgICAgICAgICAgIGxvYWRl
ci5zdGFydFRyYW5zZmVyKCk7CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNvdXJj
ZVN0cmluZ2lmaWVkLmxlbmd0aDsgaSA8IGw7IGkgKz0gcGFydFNpemUpCi0gICAgICAgICAgICAg
ICAgbG9hZGVyLnB1c2hKU09OQ2h1bmsoc291cmNlU3RyaW5naWZpZWQuc2xpY2UoaSwgaSArIHBh
cnRTaXplKSk7Ci0gICAgICAgICAgICBsb2FkZXIuZmluaXNoTG9hZGluZygpOworICAgICAgICAg
ICAgICAgIGxvYWRlci50cmFuc2ZlckNodW5rKHNvdXJjZVN0cmluZ2lmaWVkLnNsaWNlKGksIGkg
KyBwYXJ0U2l6ZSkpOworICAgICAgICAgICAgbG9hZGVyLmZpbmlzaFRyYW5zZmVyKCk7CiAgICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gbG9hZGVyLmJ1aWxkU25hcHNob3QoKTsKICAgICAgICAgICAg
IHJlc3VsdC5fbm9kZXMgPSBuZXcgVWludDMyQXJyYXkocmVzdWx0Ll9ub2Rlcyk7CiAgICAgICAg
ICAgICByZXN1bHQuX2NvbnRhaW5tZW50RWRnZXMgPSBuZXcgVWludDMyQXJyYXkocmVzdWx0Ll9j
b250YWlubWVudEVkZ2VzKTsKQEAgLTg5LDE2ICs5MCwzMyBAQCBmdW5jdGlvbiB0ZXN0KCkKIAog
ICAgICAgICAgICAgdmFyIGZpbGVNb2NrID0gewogICAgICAgICAgICAgICAgIG5hbWU6ICJtb2Nr
LmhlYXBzbmFwc2hvdCIsCi0gICAgICAgICAgICAgICAgc2l6ZTogc291cmNlU3RyaW5naWZpZWQu
bGVuZ3RoLAotICAgICAgICAgICAgICAgIHNsaWNlOiBmdW5jdGlvbihiZWdpbiwgZW5kKSB7IHJl
dHVybiB0aGlzOyB9LAotICAgICAgICAgICAgICAgIHdlYmtpdFNsaWNlOiBmdW5jdGlvbihiZWdp
biwgZW5kKSB7IHJldHVybiB0aGlzOyB9CisgICAgICAgICAgICAgICAgc2l6ZTogc291cmNlU3Ry
aW5naWZpZWQubGVuZ3RoCiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0Lm92ZXJyaWRlKFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUsICdf
Y3JlYXRlRmlsZVJlYWRlcicsIGZ1bmN0aW9uKGZpbGVNb2NrLCBkZWxlZ2F0ZSkgewogICAgICAg
ICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRBc1RleHQ6IGZ1bmN0
aW9uKGZpbGVQYXJ0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZmlsZUhlYWRl
ciA9IHBhbmVsLl9wcm9maWxlc1twYW5lbC5fcHJvZmlsZXMubGVuZ3RoIC0gMV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwcm9maWxlSGVhZGVyLl9uZXh0Q2h1bmtMb2FkZWQoc291cmNlU3Ry
aW5naWZpZWQpOworICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24ocmVjZWl2ZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLnN0YXJ0VHJhbnNmZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlLm9uVHJhbnNmZXJTdGFydGVkKHRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIudHJhbnNmZXJDaHVuayhzb3VyY2VTdHJp
bmdpZmllZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5vbkNodW5rVHJhbnNm
ZXJyZWQodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlci5maW5pc2hUcmFu
c2ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGUub25UcmFuc2ZlckZpbmlz
aGVkKHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAg
IGxvYWRlZFNpemU6IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVNb2NrLnNpemU7CisgICAgICAgICAgICAgICAgICAg
IH0sCisKKyAgICAgICAgICAgICAgICAgICAgZmlsZVNpemU6IGZ1bmN0aW9uKCkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVNb2NrLnNp
emU7CisgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgZmlsZU5h
bWU6IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZpbGVNb2NrLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9OwogICAgICAgICAgICAgfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156118</attachid>
            <date>2012-08-02 10:36:21 -0700</date>
            <delta_ts>2012-08-03 03:28:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92348-20120802213601.patch</filename>
            <type>text/plain</type>
            <size>33306</size>
            <attacher>eustas.bug</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NmYjFlMmY5OWQzYWJi
MDAyYWUyZDk0ZGRmZmJlYWQ0NjYyY2JlNy4uMWYzZDA0ZjBlNGRmOTU3MDI2ZGVmZTMwZDNlNTA3
ZGYyNThmZjEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTA4LTAyICBFdWdl
bmUgS2x5dWNobmlrb3YgIDxldXN0YXMuYmlnQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBQcm9maWxlczogZXh0cmFjdCBzYXZlIHRvIGZpbGUgLyBsb2FkIGZyb20gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3RpdmF0aW9u
OiBleHRyYWN0IHJldXNhYmxlIGNvZGUgZm9yIHRpbWVsaW5lIGxvYWQvc2F2ZS4KKyAgICAgICAg
RmlsZVV0aWxzLmpzIHdpbGwgY29udGFpbiBjb21tb24gY29kZS4gTm90IGFsbCBjb2RlIG1vdmVk
IHRvIEZpbGVVdGlscworICAgICAgICB0byBtYWtlIHJldmlldyBlYXNpZXIuIFRoaXMgY29kZSB3
aWxsIGJlIG1vdmVkIGluIG5leHQgcGF0Y2guCisKKyAgICAgICAgQ29yZSBhYnN0cmFjdGlvbnM6
IE91dHB1dFN0cmVhbSBhbmQgT3V0cHV0U3RyZWFtRGVsZWdhdGUuCisKKyAgICAgICAgT3V0cHV0
U3RyZWFtIGlzIGludGVyZmFjZSB0aGF0IGlzIHVzZWQgdG8gdHJhbnNmZXIgZW50aXR5IGRpdmRl
ZAorICAgICAgICB0byBjaHVua3MuIFRyYW5zZmVyIHByb2Nlc3MgaXMgZXhwbGljaXRseSBpbml0
aWFsaXplZCAoc3RhcnRUcmFuc2ZlcikKKyAgICAgICAgYW5kIGZpbmFsaXplZCAoZmluaXNoVHJu
c2ZlcikuCisKKyAgICAgICAgT3V0cHV0U3RyZWFtRGVsZWdhdGUgaXMgaW50ZXJmYWNlIHRvIHJl
Y2VpdmUgbm90aWZpY2F0aW9ucyBhYm91dAorICAgICAgICB0cmFuc2ZlciBwcm9jZXNzOiBvblRy
YW5zZmVyU3RhcnRlZCwgb25DaHVua1RyYW5zZmVycmVkLCBvblRyYW5zZmVyRmluaXNoZWQuCisK
KyAgICAgICAgQ2h1bmtlZEZpbGVSZWFkZXI6IHV0aWxpdHkgY2xhc3MgdGhhdCBsb2FkcyBmaWxl
IGJ5IGNodW5rcyBvZiBzcGVjaWZpZWQKKyAgICAgICAgc2l6ZSBhbmQgbm90aWZpZXMgZ2l2ZW4g
ZGVsZWdhdGUuIE91dHB1dFN0cmVhbSBpcyBzdXBwbGllZCBhcyBhCisgICAgICAgIHBhcmFtZXRl
ciBvZiBtZXRob2QgInN0YXJ0Ii4KKworICAgICAgICBDaHVua2VkRmlsZVdyaXRlcjogaW1wbGVt
ZW50YXRpb24gb2YgT3V0cHV0U3RyZWFtIHRoYXQgc2F2ZXMgZGF0YQorICAgICAgICB0byBmaWxl
IHNwZWNpZmllZCBieSBmaWxlIG5hbWUgYW5kIG5vdGlmaWVzIGdpdmVuIGRlbGVnYXRlLgorCisg
ICAgICAgICogV2ViQ29yZS5neXBpOiBBZGRlZCAnRmlsZVV0aWxzLmpzJy4KKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogQWRkZWQgJ0ZpbGVVdGlscy5qcycuCisgICAg
ICAgICogaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5OiBBZGRlZCAnRmlsZVV0aWxzLmpz
Jy4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVVdGlscy5qczogQWRkZWQuCisg
ICAgICAgIChXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtRGVsZWdhdGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5DaHVua2VkRmlsZVJlYWRlcik6IEFkZGVkLgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLmNyZWF0ZUZpbGVTZWxlY3RvckVsZW1lbnQpOiBBZGRlZCB1dGlsaXR5IG1ldGhv
ZCB0byBjb25zdHJ1Y3QKKyAgICAgICAgaGlkZGVuIGlucHV0IGVsZW1lbnQgdG8gc2VsZWN0IGZp
bGUuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RMb2FkZXIuanM6
IEFkb3B0ZWQgbmV3IEFQSS4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFw
c2hvdFByb3h5LmpzOiBBZG9wdGVkIG5ldyBBUEkuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzOiBBZG9wdGVkIG5ldyBBUEkuCisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZEZyb21GaWxlRGVsZWdhdGUpOgorICAgICAgICBFeHRy
YWN0ZWQgZnJvbSBleGlzdGluZyBjb2RlLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNodW5rZWRG
aWxlV3JpdGVyKTogUmVuYW1lZCBhbmQgcmVmYWN0b3JlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RTYXZlVG9GaWxlRGVsZWdhdGUpOgorICAgICAgICBFeHRyYWN0ZWQgZnJv
bSBleGlzdGluZyBjb2RlLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQ
YW5lbC5qczogQWRvcHRlZCBuZXcgQVBJLgorCiAyMDEyLTA4LTAyICBZdXJ5IFNlbWlraGF0c2t5
ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlbmFtZSBy
ZXBvcnRNZW1vcnlVc2FnZSB0byByZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UgaW4gU3R5bGVS
dWxlQmFzZSBkZXNjZW5kYW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDkwMDUxNmVjNWJjMzA4MWZh
NmY2OTZhMjY3ZjI4N2VlNzkxYzJhNTguLmRmYTJjZjI2ZmQ2YTMzMGVmMGNjOTc2MzYwNWU4MGVm
YTk2MjVlY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTYzMDAsNiArNjMwMCw3IEBACiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlQ29udGVudFZpZXcuanMnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZVN5c3RlbU1vZGVsLmpzJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVTeXN0ZW1WaWV3LmpzJywKKyAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVVdGlscy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9GaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cuanMnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvRm9udFZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvR29Ub0xpbmVEaWFsb2cuanMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA5MTMwZTA5OTQyOWRjMDRlNzM4MzNjN2YyNzE2
OTUzOGRlMjMzMGQ0Li5lZTNhNTIwODFjYjgyMzNhNjI3NjUwNDcyMjc4MjBjM2IwZmI3ODk1IDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNzU1
MzgsNiArNzU1MzgsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRmlsZVV0aWxzLmpzIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxmaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cuY3NzIgogCQkJCQk+CiAJCQkJ
PC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJv
bnQtZW5kLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5
CmluZGV4IDRkMjlmNzcwNjdmM2E5OTc3YWZhNzY5MGUzZWRkZTViZDA1MjczNWUuLmU1MGU1MjRi
YTZjZGIyYjRmNWVkOTRmYzYzNzBhODQ0MmRmNTE2N2UgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKQEAgLTgyLDYgKzgyLDcgQEAgbW9kdWxlcyA9
IFsKICAgICAgICAgICAgICJEZWJ1Z2dlclNjcmlwdE1hcHBpbmcuanMiLAogICAgICAgICAgICAg
IkZpbGVNYW5hZ2VyLmpzIiwKICAgICAgICAgICAgICJGaWxlU3lzdGVtTW9kZWwuanMiLAorICAg
ICAgICAgICAgIkZpbGVVdGlscy5qcyIsCiAgICAgICAgICAgICAiSEFSRW50cnkuanMiLAogICAg
ICAgICAgICAgIkluZGV4ZWREQk1vZGVsLmpzIiwKICAgICAgICAgICAgICJMaW5raWZpZXIuanMi
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlVXRp
bHMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVVdGlscy5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wN2ZlMjVmNWNjZTNmMDQ4NmI4OGY1YTJkYmEyZWMzYzNhMWRjYzYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlVXRp
bHMuanMKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
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
RiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBpbnRlcmZhY2UKKyAqLworV2ViSW5zcGVj
dG9yLk91dHB1dFN0cmVhbURlbGVnYXRlID0gZnVuY3Rpb24oKQoreworfQorCitXZWJJbnNwZWN0
b3IuT3V0cHV0U3RyZWFtRGVsZWdhdGUucHJvdG90eXBlID0geworICAgIG9uVHJhbnNmZXJTdGFy
dGVkOiBmdW5jdGlvbihzb3VyY2UpCisgICAgeworICAgIH0sCisKKyAgICBvbkNodW5rVHJhbnNm
ZXJyZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKKyAgICB7CisgICAgfSwKKworICAgIG9uVHJhbnNmZXJG
aW5pc2hlZDogZnVuY3Rpb24oc291cmNlKQorICAgIHsKKyAgICB9LAorCisgICAgb25FcnJvcjog
ZnVuY3Rpb24oc291cmNlLCBldmVudCkKKyAgICB7CisgICAgfQorfQorCisvKioKKyAqIEBjb25z
dHJ1Y3RvcgorICogQHBhcmFtIHshRmlsZX0gZmlsZQorICogQHBhcmFtIHshbnVtYmVyfSBjaHVu
a1NpemUKKyAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW1EZWxlZ2F0ZX0gZGVs
ZWdhdGUKKyAqLworV2ViSW5zcGVjdG9yLkNodW5rZWRGaWxlUmVhZGVyID0gZnVuY3Rpb24oZmls
ZSwgY2h1bmtTaXplLCBkZWxlZ2F0ZSkKK3sKKyAgICB0aGlzLl9maWxlID0gZmlsZTsKKyAgICB0
aGlzLl9maWxlU2l6ZSA9IGZpbGUuc2l6ZTsKKyAgICB0aGlzLl9sb2FkZWRTaXplID0gMDsKKyAg
ICB0aGlzLl9jaHVua1NpemUgPSBjaHVua1NpemU7CisgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxl
Z2F0ZTsKK30KKworV2ViSW5zcGVjdG9yLkNodW5rZWRGaWxlUmVhZGVyLnByb3RvdHlwZSA9IHsK
KyAgICAvKioKKyAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtfSBvdXRw
dXQKKyAgICAgKi8KKyAgICBzdGFydDogZnVuY3Rpb24ob3V0cHV0KQorICAgIHsKKyAgICAgICAg
dGhpcy5fb3V0cHV0ID0gb3V0cHV0OworCisgICAgICAgIHRoaXMuX3JlYWRlciA9IG5ldyBGaWxl
UmVhZGVyKCk7CisgICAgICAgIHRoaXMuX3JlYWRlci5vbmxvYWQgPSB0aGlzLl9vbkNodW5rTG9h
ZGVkLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuX3JlYWRlci5vbmVycm9yID0gdGhpcy5fZGVs
ZWdhdGUub25FcnJvci5iaW5kKHRoaXMuX2RlbGVnYXRlLCB0aGlzKTsKKyAgICAgICAgdGhpcy5f
b3V0cHV0LnN0YXJ0VHJhbnNmZXIoKTsKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUub25UcmFuc2Zl
clN0YXJ0ZWQodGhpcyk7CisgICAgICAgIHRoaXMuX2xvYWRDaHVuaygpOworICAgIH0sCisKKyAg
ICBsb2FkZWRTaXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbG9h
ZGVkU2l6ZTsKKyAgICB9LAorCisgICAgZmlsZVNpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9maWxlU2l6ZTsKKyAgICB9LAorCisgICAgZmlsZU5hbWU6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9maWxlLm5hbWU7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgICAgICovCisgICAgX29uQ2h1
bmtMb2FkZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LnRhcmdl
dC5yZWFkeVN0YXRlICE9PSBGaWxlUmVhZGVyLkRPTkUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdmFyIGRhdGEgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICB0aGlzLl9s
b2FkZWRTaXplICs9IGRhdGEubGVuZ3RoOworCisgICAgICAgIHRoaXMuX291dHB1dC50cmFuc2Zl
ckNodW5rKGRhdGEpOworICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vbkNodW5rVHJhbnNmZXJyZWQo
dGhpcyk7CisKKyAgICAgICAgaWYgKHRoaXMuX2xvYWRlZFNpemUgPT09IHRoaXMuX2ZpbGVTaXpl
KSB7CisgICAgICAgICAgICB0aGlzLl9maWxlID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3Jl
YWRlciA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9vdXRwdXQuZmluaXNoVHJhbnNmZXIoKTsK
KyAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNmZXJGaW5pc2hlZCh0aGlzKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2xvYWRDaHVuaygp
OworICAgIH0sCisKKyAgICBfbG9hZENodW5rOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2
YXIgY2h1bmtTdGFydCA9IHRoaXMuX2xvYWRlZFNpemU7CisgICAgICAgIHZhciBjaHVua0VuZCA9
IE1hdGgubWluKHRoaXMuX2ZpbGVTaXplLCBjaHVua1N0YXJ0ICsgdGhpcy5fY2h1bmtTaXplKQor
ICAgICAgICB2YXIgbmV4dFBhcnQgPSB0aGlzLl9maWxlLndlYmtpdFNsaWNlKGNodW5rU3RhcnQs
IGNodW5rRW5kKTsKKyAgICAgICAgdGhpcy5fcmVhZGVyLnJlYWRBc1RleHQobmV4dFBhcnQpOwor
ICAgIH0KK30KKworLyoqCisgKiBAcGFyYW0geyFmdW5jdGlvbihGaWxlKX0gY2FsbGJhY2sKKyAq
IEByZXR1cm4ge05vZGV9CisgKi8KK1dlYkluc3BlY3Rvci5jcmVhdGVGaWxlU2VsZWN0b3JFbGVt
ZW50ID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICB2YXIgZmlsZVNlbGVjdG9yRWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAgZmlsZVNlbGVjdG9yRWxlbWVu
dC50eXBlID0gImZpbGUiOworICAgIGZpbGVTZWxlY3RvckVsZW1lbnQuc3R5bGUuekluZGV4ID0g
LTE7CisgICAgZmlsZVNlbGVjdG9yRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7
CisgICAgZmlsZVNlbGVjdG9yRWxlbWVudC5vbmNoYW5nZSA9IGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgIGNhbGxiYWNrKGZpbGVTZWxlY3RvckVsZW1lbnQuZmlsZXNbMF0pOworICAgIH07Cisg
ICAgcmV0dXJuIGZpbGVTZWxlY3RvckVsZW1lbnQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzCmluZGV4IDlj
YzBjMTI1Y2VhM2YwN2M2MmY0ODJlZTUzMzY3ZDg4ZjI4MmJlMWEuLmZjOGU0NWE4ZGI1OTExZDZk
NjhhMGUzMDdhMWFkZTVlMmY1OTJiMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzCkBAIC0zMCw3ICszMCw3
IEBACiAKIC8qKgogICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFJlY2VpdmVyfQorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5PdXRw
dXRTdHJlYW19CiAgKi8KIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIgPSBmdW5jdGlv
bigpCiB7CkBAIC0zOCw3ICszOCw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIg
PSBmdW5jdGlvbigpCiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90
eXBlID0gewotICAgIHN0YXJ0TG9hZGluZzogZnVuY3Rpb24oKQorICAgIHN0YXJ0VHJhbnNmZXI6
IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgfSwKIApAQCAtNzAsNyArNzAsNyBAQCBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIC0xOwog
ICAgIH0sCiAKLSAgICBmaW5pc2hMb2FkaW5nOiBmdW5jdGlvbigpCisgICAgZmluaXNoVHJhbnNm
ZXI6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9qc29uKQogICAgICAgICAg
ICAgdGhpcy5fcGFyc2VTdHJpbmdzQXJyYXkoKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAvKioKICAgICAgKiBA
cGFyYW0ge3N0cmluZ30gY2h1bmsKICAgICAgKi8KLSAgICBwdXNoSlNPTkNodW5rOiBmdW5jdGlv
bihjaHVuaykKKyAgICB0cmFuc2ZlckNodW5rOiBmdW5jdGlvbihjaHVuaykKICAgICB7CiAgICAg
ICAgIHRoaXMuX2pzb24gKz0gY2h1bms7CiAgICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHsK
QEAgLTE0NCw3ICsxNDQsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNuYXBzaG90IHRva2Vu
IG5vdCBmb3VuZCIpOwogICAgICAgICAgICAgdGhpcy5fanNvbiA9IHRoaXMuX2pzb24uc2xpY2Uo
c25hcHNob3RUb2tlbkluZGV4ICsgc25hcHNob3RUb2tlbi5sZW5ndGggKyAxKTsKICAgICAgICAg
ICAgIHRoaXMuX3N0YXRlID0gInBhcnNlLXNuYXBzaG90LWluZm8iOwotICAgICAgICAgICAgdGhp
cy5wdXNoSlNPTkNodW5rKCIiKTsKKyAgICAgICAgICAgIHRoaXMudHJhbnNmZXJDaHVuaygiIik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlICJwYXJzZS1zbmFw
c2hvdC1pbmZvIjogewpAQCAtMTU0LDcgKzE1NCw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fc25hcHNob3Quc25hcHNo
b3QgPSAvKiogQHR5cGUge0hlYXBTbmFwc2hvdEhlYWRlcn0gKi9KU09OLnBhcnNlKHRoaXMuX2pz
b24uc2xpY2UoMCwgY2xvc2luZ0JyYWNrZXRJbmRleCkpOwogICAgICAgICAgICAgdGhpcy5fanNv
biA9IHRoaXMuX2pzb24uc2xpY2UoY2xvc2luZ0JyYWNrZXRJbmRleCk7CiAgICAgICAgICAgICB0
aGlzLl9zdGF0ZSA9ICJmaW5kLW5vZGVzIjsKLSAgICAgICAgICAgIHRoaXMucHVzaEpTT05DaHVu
aygiIik7CisgICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAiZmluZC1ub2RlcyI6IHsKQEAgLTE3MSw3
ICsxNzEsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHRoaXMuX2FycmF5ID0gbmV3IFVpbnQzMkFycmF5KG5vZGVzX2xlbmd0aCk7
CiAgICAgICAgICAgICB0aGlzLl9hcnJheUluZGV4ID0gMDsKICAgICAgICAgICAgIHRoaXMuX3N0
YXRlID0gInBhcnNlLW5vZGVzIjsKLSAgICAgICAgICAgIHRoaXMucHVzaEpTT05DaHVuaygiIik7
CisgICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAicGFyc2Utbm9kZXMiOiB7CkBAIC0xODAsNyArMTgw
LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICB0aGlzLl9zbmFwc2hvdC5ub2RlcyA9IHRoaXMuX2FycmF5OwogICAgICAgICAgICAg
dGhpcy5fc3RhdGUgPSAiZmluZC1lZGdlcyI7CiAgICAgICAgICAgICB0aGlzLl9hcnJheSA9IG51
bGw7Ci0gICAgICAgICAgICB0aGlzLnB1c2hKU09OQ2h1bmsoIiIpOworICAgICAgICAgICAgdGhp
cy50cmFuc2ZlckNodW5rKCIiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgImZpbmQtZWRnZXMiOiB7CkBAIC0xOTcsNyArMTk3LDcgQEAgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9hcnJh
eSA9IG5ldyBVaW50MzJBcnJheShlZGdlc19sZW5ndGgpOwogICAgICAgICAgICAgdGhpcy5fYXJy
YXlJbmRleCA9IDA7CiAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICJwYXJzZS1lZGdlcyI7Ci0g
ICAgICAgICAgICB0aGlzLnB1c2hKU09OQ2h1bmsoIiIpOworICAgICAgICAgICAgdGhpcy50cmFu
c2ZlckNodW5rKCIiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgInBhcnNlLWVkZ2VzIjogewpAQCAtMjA2LDcgKzIwNiw3IEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fc25hcHNob3Qu
ZWRnZXMgPSB0aGlzLl9hcnJheTsKICAgICAgICAgICAgIHRoaXMuX2FycmF5ID0gbnVsbDsKICAg
ICAgICAgICAgIHRoaXMuX3N0YXRlID0gImZpbmQtc3RyaW5ncyI7Ci0gICAgICAgICAgICB0aGlz
LnB1c2hKU09OQ2h1bmsoIiIpOworICAgICAgICAgICAgdGhpcy50cmFuc2ZlckNodW5rKCIiKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgImZpbmQtc3RyaW5n
cyI6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVh
cFNuYXBzaG90UHJveHkuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hl
YXBTbmFwc2hvdFByb3h5LmpzCmluZGV4IDRhYzcxYTMzOWI2YTcyODIzNTY3MmFiZDgyNDJkMDAw
M2M4MGI5OGIuLmE2M2NhYTczNThkYzU3NmJmNTVmNzA5ZDdlYzBiNDQ1MDVkNGUyNzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJv
eHkuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNo
b3RQcm94eS5qcwpAQCAtMzU1LDcgKzM1NSw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQ
cm94eU9iamVjdC5wcm90b3R5cGUgPSB7CiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVu
ZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eU9iamVjdH0KLSAqIEBpbXBsZW1lbnRz
IHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVjZWl2ZXJ9CisgKiBAaW1wbGVtZW50cyB7V2Vi
SW5zcGVjdG9yLk91dHB1dFN0cmVhbX0KICAqLwogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExv
YWRlclByb3h5ID0gZnVuY3Rpb24od29ya2VyLCBvYmplY3RJZCkKIHsKQEAgLTM2NSw3ICszNjUs
NyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyUHJveHkgPSBmdW5jdGlvbih3b3Jr
ZXIsIG9iamVjdElkKQogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyUHJveHku
cHJvdG90eXBlID0gewotICAgIHN0YXJ0TG9hZGluZzogZnVuY3Rpb24oKQorICAgIHN0YXJ0VHJh
bnNmZXI6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSB0cnVlOwog
ICAgICAgICB0aGlzLmNhbGxNZXRob2QobnVsbCwgInN0YXJ0VHJhbnNmZXIiKTsKQEAgLTM4Nywx
MiArMzg3LDEyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXJQcm94eS5wcm90b3R5
cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rCiAgICAgICovCi0g
ICAgcHVzaEpTT05DaHVuazogZnVuY3Rpb24oY2h1bmspCisgICAgdHJhbnNmZXJDaHVuazogZnVu
Y3Rpb24oY2h1bmspCiAgICAgewotICAgICAgICB0aGlzLmNhbGxNZXRob2QobnVsbCwgInB1c2hK
U09OQ2h1bmsiLCBjaHVuayk7CisgICAgICAgIHRoaXMuY2FsbE1ldGhvZChudWxsLCAidHJhbnNm
ZXJDaHVuayIsIGNodW5rKTsKICAgICB9LAogCi0gICAgZmluaXNoTG9hZGluZzogZnVuY3Rpb24o
KQorICAgIGZpbmlzaFRyYW5zZmVyOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBmdW5jdGlv
biBidWlsZFNuYXBzaG90KCkKICAgICAgICAgewpAQCAtNDExLDcgKzQxMSw3IEBAIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RMb2FkZXJQcm94eS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0
aGlzLl9zdGFydGVkID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nU25hcHNob3RD
b25zdW1lcnMgPSBbXTsKICAgICAgICAgfQotICAgICAgICB0aGlzLmNhbGxNZXRob2QoYnVpbGRT
bmFwc2hvdC5iaW5kKHRoaXMpLCAiZmluaXNoTG9hZGluZyIpOworICAgICAgICB0aGlzLmNhbGxN
ZXRob2QoYnVpbGRTbmFwc2hvdC5iaW5kKHRoaXMpLCAiZmluaXNoVHJhbnNmZXIiKTsKICAgICB9
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hl
YXBTbmFwc2hvdFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hl
YXBTbmFwc2hvdFZpZXcuanMKaW5kZXggMjg5ZDhkODM1ZjRkMGZlMjk4Mjk5NDk0ZDJkMDQxY2Nh
ZDIyNzVlZC4uNWM0ZGYyM2YyZmYxMTNhYTQ0OTUwMjIyYjIxNjQ2NGYwOWIzNjYxYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90
Vmlldy5qcwpAQCAtNzg3LDIzICs3ODcsMjMgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBy
b2ZpbGVUeXBlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUHJvZmlsZVQKIC8q
KgogICogQGludGVyZmFjZQogICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVjZWl2ZXIg
PSBmdW5jdGlvbigpCitXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtID0gZnVuY3Rpb24oKQogewog
fQogCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVjZWl2ZXIucHJvdG90eXBlID0gewotICAg
IHN0YXJ0TG9hZGluZzogZnVuY3Rpb24oKQorV2ViSW5zcGVjdG9yLk91dHB1dFN0cmVhbS5wcm90
b3R5cGUgPSB7CisgICAgc3RhcnRUcmFuc2ZlcjogZnVuY3Rpb24oKQogICAgIHsKICAgICB9LAog
CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rCiAgICAgICovCi0gICAgcHVz
aEpTT05DaHVuazogZnVuY3Rpb24oY2h1bmspCisgICAgdHJhbnNmZXJDaHVuazogZnVuY3Rpb24o
Y2h1bmspCiAgICAgewogICAgIH0sCiAKLSAgICBmaW5pc2hMb2FkaW5nOiBmdW5jdGlvbigpCisg
ICAgZmluaXNoVHJhbnNmZXI6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgfSwKIApAQCAtODI1LDcg
KzgyNSw3IEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlciA9IGZ1bmN0aW9uKHR5cGUs
IHRpdGxlLCB1aWQsIG1heEpTT2JqZWN0SWQpCiAgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFk
ZXIuY2FsbCh0aGlzLCB0eXBlLCB0aXRsZSwgdWlkKTsKICAgICB0aGlzLm1heEpTT2JqZWN0SWQg
PSBtYXhKU09iamVjdElkOwogICAgIC8qKgotICAgICAqIEB0eXBlIHtXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UmVjZWl2ZXJ9CisgICAgICogQHR5cGUge1dlYkluc3BlY3Rvci5PdXRwdXRTdHJl
YW19CiAgICAgICovCiAgICAgdGhpcy5fcmVjZWl2ZXIgPSBudWxsOwogICAgIC8qKgpAQCAtODc0
LDcgKzg3NCw3IEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgdGhpcy5fbnVtYmVyT2ZDaHVua3MgPSAwOwogICAgICAgICBpZiAoIWxvYWRl
clByb3h5LmlzU3RhcnRlZCgpKSB7Ci0gICAgICAgICAgICBsb2FkZXJQcm94eS5zdGFydExvYWRp
bmcoKTsKKyAgICAgICAgICAgIGxvYWRlclByb3h5LnN0YXJ0VHJhbnNmZXIoKTsKICAgICAgICAg
ICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkxvYWRpbmdcdTIwMjYiKTsKICAgICAgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQud2FpdCA9
IHRydWU7CiAgICAgICAgICAgICBQcm9maWxlckFnZW50LmdldFByb2ZpbGUodGhpcy5wcm9maWxl
VHlwZSgpLmlkLCB0aGlzLnVpZCk7CkBAIC05MTcsMTAgKzkxNywxMCBAQCBXZWJJbnNwZWN0b3Iu
SGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBjaHVuawogICAgICAqLwotICAgIHB1c2hKU09OQ2h1bms6IGZ1bmN0aW9uKGNodW5r
KQorICAgIHRyYW5zZmVyQ2h1bms6IGZ1bmN0aW9uKGNodW5rKQogICAgIHsKICAgICAgICAgKyt0
aGlzLl9udW1iZXJPZkNodW5rczsKLSAgICAgICAgdGhpcy5fcmVjZWl2ZXIucHVzaEpTT05DaHVu
ayhjaHVuayk7CisgICAgICAgIHRoaXMuX3JlY2VpdmVyLnRyYW5zZmVyQ2h1bmsoY2h1bmspOwog
ICAgIH0sCiAKICAgICBfc25hcHNob3RSZWNlaXZlZDogZnVuY3Rpb24oc25hcHNob3RQcm94eSkK
QEAgLTkzNSwxMSArOTM1LDEyIEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHdvcmtlci5zdGFydENoZWNraW5nRm9yTG9uZ1J1bm5pbmdDYWxs
cygpOwogICAgIH0sCiAKLSAgICBmaW5pc2hIZWFwU25hcHNob3Q6IGZ1bmN0aW9uKCkKKyAgICBm
aW5pc2hIZWFwU25hcHNob3Q6IGZ1bmN0aW9uKHRyYW5zZmVyRmluaXNoZWQpCiAgICAgewogICAg
ICAgICB0aGlzLl90b3RhbE51bWJlck9mQ2h1bmtzID0gdGhpcy5fbnVtYmVyT2ZDaHVua3M7CiAg
ICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlBhcnNpbmdcdTIwMjYiKTsKLSAgICAgICAgdGhpcy5fcmVjZWl2ZXIuZmluaXNoTG9hZGlu
ZygpOworICAgICAgICBpZiAoIXRyYW5zZmVyRmluaXNoZWQpCisgICAgICAgICAgICB0aGlzLl9y
ZWNlaXZlci5maW5pc2hUcmFuc2ZlcigpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTk1Nyw5ICs5
NTgsMjAgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKICAg
ICBzYXZlVG9GaWxlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9maWxlTmFtZSA9
IHRoaXMuX2ZpbGVOYW1lIHx8ICJIZWFwLSIgKyBuZXcgRGF0ZSgpLnRvSVNPODYwMUNvbXBhY3Qo
KSArICIuaGVhcHNuYXBzaG90IjsKLSAgICAgICAgdGhpcy5fcmVjZWl2ZXIgPSBuZXcgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFNhdmVUb0ZpbGVSZWNlaXZlcih0aGlzLl9maWxlTmFtZSwgdGhp
cyk7CisgICAgICAgIHZhciBkZWxlZ2F0ZSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
U2F2ZVRvRmlsZURlbGVnYXRlKHRoaXMpOworICAgICAgICB0aGlzLl9yZWNlaXZlciA9IHRoaXMu
X2NyZWF0ZUZpbGVXcml0ZXIodGhpcy5fZmlsZU5hbWUsIGRlbGVnYXRlKTsKICAgICAgICAgdGhp
cy5fbnVtYmVyT2ZDaHVua3MgPSAwOwotICAgICAgICB0aGlzLl9yZWNlaXZlci5zdGFydExvYWRp
bmcoKTsKKyAgICAgICAgdGhpcy5fcmVjZWl2ZXIuc3RhcnRUcmFuc2ZlcigpOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBAcGFyYW0geyFzdHJpbmd9IGZpbGVOYW1lCisgICAgICogQHBhcmFt
IHshV2ViSW5zcGVjdG9yLk91dHB1dFN0cmVhbURlbGVnYXRlfSBkZWxlZ2F0ZQorICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW19CisgICAgICovCisgICAgX2NyZWF0ZUZp
bGVXcml0ZXI6IGZ1bmN0aW9uKGZpbGVOYW1lLCBkZWxlZ2F0ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkNodW5rZWRGaWxlV3JpdGVyKGZpbGVOYW1lLCBkZWxlZ2F0
ZSk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtOTc2LDk5ICs5ODgsODYgQEAgV2ViSW5zcGVjdG9y
LkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBsb2FkRnJvbUZp
bGU6IGZ1bmN0aW9uKGZpbGUpCiAgICAgewotICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaChlLnRhcmdldC5lcnJvci5jb2RlKSB7Ci0gICAg
ICAgICAgICBjYXNlIGUudGFyZ2V0LmVycm9yLk5PVF9GT1VORF9FUlI6Ci0gICAgICAgICAgICAg
ICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
JyVzJyBub3QgZm91bmQuIiwgZmlsZS5uYW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBlLnRhcmdldC5lcnJvci5OT1RfUkVBREFCTEVfRVJSOgotICAgICAgICAgICAg
ICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IiclcycgaXMgbm90IHJlYWRhYmxlIiwgZmlsZS5uYW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBlLnRhcmdldC5lcnJvci5BQk9SVF9FUlI6Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHRoaXMuc2lk
ZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiclcycgZXJyb3Ig
JWQiLCBmaWxlLm5hbWUsIGUudGFyZ2V0LmVycm9yLmNvZGUpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KICAgICAgICAgdGhpcy50aXRsZSA9IGZpbGUubmFtZTsKICAgICAgICAgdGhpcy5z
aWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9hZGluZ1x1
MjAyNiIpOwogICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LndhaXQgPSB0cnVlOwogICAgICAg
ICB0aGlzLl9zZXR1cFdvcmtlcigpOwogICAgICAgICB0aGlzLl9udW1iZXJPZkNodW5rcyA9IDA7
Ci0gICAgICAgIHRoaXMuX3JlY2VpdmVyLnN0YXJ0TG9hZGluZygpOwogCi0gICAgICAgIC8qKgot
ICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAgICAgKi8KLSAgICAgICAgZnVu
Y3Rpb24gb25Mb2FkKGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQudGFy
Z2V0LnJlYWR5U3RhdGUgIT09IEZpbGVSZWFkZXIuRE9ORSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB0aGlzLl9uZXh0Q2h1bmtMb2FkZWQoZXZlbnQudGFyZ2V0LnJlc3Vs
dCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9maWxlID0gZmlsZTsKLSAgICAgICAgdGhp
cy5fZXhwZWN0ZWRTaXplID0gZmlsZS5zaXplOwotICAgICAgICB0aGlzLl9sb2FkZWRTaXplID0g
MDsKLSAgICAgICAgdGhpcy5fcmVhZGVyID0gdGhpcy5fY3JlYXRlRmlsZVJlYWRlcigpOwotICAg
ICAgICB0aGlzLl9yZWFkZXIub25sb2FkID0gb25Mb2FkLmJpbmQodGhpcyk7Ci0gICAgICAgIHRo
aXMuX3JlYWRlci5vbmVycm9yID0gb25FcnJvcjsKLSAgICAgICAgdGhpcy5fbG9hZE5leHRDaHVu
aygpOworICAgICAgICB2YXIgZGVsZWdhdGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dExvYWRGcm9tRmlsZURlbGVnYXRlKHRoaXMpOworICAgICAgICB2YXIgZmlsZVJlYWRlciA9IHRo
aXMuX2NyZWF0ZUZpbGVSZWFkZXIoZmlsZSwgZGVsZWdhdGUpOworICAgICAgICBmaWxlUmVhZGVy
LnN0YXJ0KHRoaXMuX3JlY2VpdmVyKTsKICAgICB9LAogCi0gICAgX2xvYWROZXh0Q2h1bms6IGZ1
bmN0aW9uKCkKKyAgICBfY3JlYXRlRmlsZVJlYWRlcjogZnVuY3Rpb24oZmlsZSwgZGVsZWdhdGUp
CisgICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DaHVua2VkRmlsZVJlYWRl
cihmaWxlLCAxMDAwMDAwMCwgZGVsZWdhdGUpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkhl
YXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUHJvZmls
ZUhlYWRlci5wcm90b3R5cGU7CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAaW1wbGVtZW50
cyB7V2ViSW5zcGVjdG9yLk91dHB1dFN0cmVhbURlbGVnYXRlfQorICovCitXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90TG9hZEZyb21GaWxlRGVsZWdhdGUgPSBmdW5jdGlvbihzbmFwc2hvdEhlYWRl
cikKK3sKKyAgICB0aGlzLl9zbmFwc2hvdEhlYWRlciA9IHNuYXBzaG90SGVhZGVyOworfQorCitX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZEZyb21GaWxlRGVsZWdhdGUucHJvdG90eXBlID0g
eworICAgIG9uVHJhbnNmZXJTdGFydGVkOiBmdW5jdGlvbihzb3VyY2UpCiAgICAgewotICAgICAg
ICB2YXIgbG9hZGVkU2l6ZSA9IHRoaXMuX2xvYWRlZFNpemU7Ci0gICAgICAgIHZhciBjaHVua1Np
emUgPSAxMDAwMDAwMDsKLSAgICAgICAgdmFyIHNpemUgPSB0aGlzLl9leHBlY3RlZFNpemUgPCBs
b2FkZWRTaXplICsgY2h1bmtTaXplID8gdGhpcy5fZXhwZWN0ZWRTaXplIC0gbG9hZGVkU2l6ZSA6
IGNodW5rU2l6ZTsKLSAgICAgICAgdmFyIG5leHRQYXJ0ID0gdGhpcy5fZmlsZS53ZWJraXRTbGlj
ZShsb2FkZWRTaXplLCBsb2FkZWRTaXplICsgc2l6ZSk7Ci0gICAgICAgIHRoaXMuX3JlYWRlci5y
ZWFkQXNUZXh0KG5leHRQYXJ0KTsKICAgICB9LAogCi0gICAgX25leHRDaHVua0xvYWRlZDogZnVu
Y3Rpb24oZGF0YSkKKyAgICBvbkNodW5rVHJhbnNmZXJyZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKICAg
ICB7Ci0gICAgICAgIHRoaXMuX2xvYWRlZFNpemUgKz0gZGF0YS5sZW5ndGg7Ci0gICAgICAgIHRo
aXMuX3JlY2VpdmVyLnB1c2hKU09OQ2h1bmsoZGF0YSk7Ci0gICAgICAgIHRoaXMuc2lkZWJhckVs
ZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxvYWRpbmdcdTIwMjYgJWQl
IiwgKHRoaXMuX2xvYWRlZFNpemUgKiAxMDAgLyB0aGlzLl9leHBlY3RlZFNpemUpLnRvRml4ZWQo
MikpOworICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5zaWRlYmFyRWxlbWVudC5zdWJ0aXRs
ZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygKKyAgICAgICAgICAgICJMb2FkaW5nXHUyMDI2ICVk
JSIsIChzb3VyY2UubG9hZGVkU2l6ZSgpICogMTAwIC8gc291cmNlLmZpbGVTaXplKCkpLnRvRml4
ZWQoMikpOworICAgIH0sCiAKLSAgICAgICAgaWYgKHRoaXMuX2xvYWRlZFNpemUgPT09IHRoaXMu
X2V4cGVjdGVkU2l6ZSkgewotICAgICAgICAgICAgdGhpcy5fZmlsZSA9IG51bGw7Ci0gICAgICAg
ICAgICB0aGlzLl9yZWFkZXIgPSBudWxsOwotICAgICAgICAgICAgdGhpcy5maW5pc2hIZWFwU25h
cHNob3QoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9s
b2FkTmV4dENodW5rKCk7CisgICAgb25UcmFuc2ZlckZpbmlzaGVkOiBmdW5jdGlvbihzb3VyY2Up
CisgICAgeworICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5maW5pc2hIZWFwU25hcHNob3Qo
dHJ1ZSk7CiAgICAgfSwKIAotICAgIF9jcmVhdGVGaWxlUmVhZGVyOiBmdW5jdGlvbigpCisgICAg
b25FcnJvcjogZnVuY3Rpb24gKHNvdXJjZSwgZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
RmlsZVJlYWRlcigpOworICAgICAgICBzd2l0Y2goZS50YXJnZXQuZXJyb3IuY29kZSkgeworICAg
ICAgICBjYXNlIGUudGFyZ2V0LmVycm9yLk5PVF9GT1VORF9FUlI6CisgICAgICAgICAgICB0aGlz
Ll9zbmFwc2hvdEhlYWRlci5zaWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiJyVzJyBub3QgZm91bmQuIiwgc291cmNlLmZpbGVOYW1lKCkpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBlLnRhcmdldC5lcnJvci5OT1RfUkVBREFCTEVfRVJSOgorICAg
ICAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiclcycgaXMgbm90IHJlYWRhYmxlIiwgc291cmNlLmZpbGVO
YW1lKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBlLnRhcmdldC5lcnJvci5BQk9S
VF9FUlI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHRoaXMuX3NuYXBzaG90SGVhZGVyLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCInJXMnIGVycm9yICVkIiwgc291cmNlLmZpbGVOYW1lKCksIGUudGFyZ2V0
LmVycm9yLmNvZGUpOworICAgICAgICB9CiAgICAgfQogfQogCi1XZWJJbnNwZWN0b3IuSGVhcFBy
b2ZpbGVIZWFkZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Qcm9maWxlSGVh
ZGVyLnByb3RvdHlwZTsKLQotCiAvKioKICAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMg
e1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZWNlaXZlcn0KKyAqIEBpbXBsZW1lbnRzIHtXZWJJ
bnNwZWN0b3IuT3V0cHV0U3RyZWFtfQorICogQHBhcmFtIHshc3RyaW5nfSBmaWxlTmFtZQorICog
QHBhcmFtIHshV2ViSW5zcGVjdG9yLk91dHB1dFN0cmVhbURlbGVnYXRlfSBkZWxlZ2F0ZQogICov
Ci1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2F2ZVRvRmlsZVJlY2VpdmVyID0gZnVuY3Rpb24o
ZmlsZU5hbWUsIHNuYXBzaG90SGVhZGVyKQorV2ViSW5zcGVjdG9yLkNodW5rZWRGaWxlV3JpdGVy
ID0gZnVuY3Rpb24oZmlsZU5hbWUsIGRlbGVnYXRlKQogewogICAgIHRoaXMuX2ZpbGVOYW1lID0g
ZmlsZU5hbWU7Ci0gICAgdGhpcy5fc25hcHNob3RIZWFkZXIgPSBzbmFwc2hvdEhlYWRlcjsKLSAg
ICB0aGlzLl9zYXZlZENodW5rcyA9IDA7CisgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsK
IH0KIAotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNhdmVUb0ZpbGVSZWNlaXZlci5wcm90b3R5
cGUgPSB7CitXZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVXcml0ZXIucHJvdG90eXBlID0gewogICAg
IC8qKgogICAgICAqIEBvdmVycmlkZQogICAgICAqLwotICAgIHN0YXJ0TG9hZGluZzogZnVuY3Rp
b24oKQorICAgIHN0YXJ0VHJhbnNmZXI6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5maWxlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFu
YWdlci5FdmVudFR5cGVzLlNhdmVkVVJMLCB0aGlzLl9zdGFydFNhdmluZ1NuYXBzaG90LCB0aGlz
KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuU2F2ZWRVUkwsIHRoaXMuX29uVHJhbnNm
ZXJTdGFydGVkLCB0aGlzKTsKICAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnNhdmUo
dGhpcy5fZmlsZU5hbWUsICIiLCB0cnVlKTsKICAgICB9LAogCkBAIC0xMDc2LDcgKzEwNzUsNyBA
QCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2F2ZVRvRmlsZVJlY2VpdmVyLnByb3RvdHlwZSA9
IHsKICAgICAgKiBAb3ZlcnJpZGUKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKICAgICAg
Ki8KLSAgICBwdXNoSlNPTkNodW5rOiBmdW5jdGlvbihjaHVuaykKKyAgICB0cmFuc2ZlckNodW5r
OiBmdW5jdGlvbihjaHVuaykKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdl
ci5hcHBlbmQodGhpcy5fZmlsZU5hbWUsIGNodW5rKTsKICAgICB9LApAQCAtMTA4NCwxMCArMTA4
MywxMCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2F2ZVRvRmlsZVJlY2VpdmVyLnByb3Rv
dHlwZSA9IHsKICAgICAvKioKICAgICAgKiBAb3ZlcnJpZGUKICAgICAgKi8KLSAgICBmaW5pc2hM
b2FkaW5nOiBmdW5jdGlvbigpCisgICAgZmluaXNoVHJhbnNmZXI6IGZ1bmN0aW9uKCkKICAgICB7
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLkFwcGVuZGVkVG9VUkwsIHRoaXMuX3Nh
dmVTdGF0dXNVcGRhdGUsIHRoaXMpOwotICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5fc25h
cHNob3RSZWNlaXZlZChudWxsKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnJl
bW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuQXBw
ZW5kZWRUb1VSTCwgdGhpcy5fb25DaHVua1RyYW5zZmVycmVkLCB0aGlzKTsKKyAgICAgICAgdGhp
cy5fZGVsZWdhdGUub25UcmFuc2ZlckZpbmlzaGVkKHRoaXMpOwogICAgIH0sCiAKICAgICBkaXNw
b3NlOiBmdW5jdGlvbigpCkBAIC0xMDk3LDI2ICsxMDk2LDU0IEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RTYXZlVG9GaWxlUmVjZWl2ZXIucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAogICAgICAqLwotICAgIF9zdGFydFNh
dmluZ1NuYXBzaG90OiBmdW5jdGlvbihldmVudCkKKyAgICBfb25UcmFuc2ZlclN0YXJ0ZWQ6IGZ1
bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50LmRhdGEgIT09IHRoaXMuX2Zp
bGVOYW1lKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRl
ci5fc2F2ZVN0YXR1c1VwZGF0ZSgwKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2Vy
LnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMu
U2F2ZWRVUkwsIHRoaXMuX3N0YXJ0U2F2aW5nU25hcHNob3QsIHRoaXMpOwotICAgICAgICBXZWJJ
bnNwZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1h
bmFnZXIuRXZlbnRUeXBlcy5BcHBlbmRlZFRvVVJMLCB0aGlzLl9zYXZlU3RhdHVzVXBkYXRlLCB0
aGlzKTsKLSAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlKHRoaXMuX3NuYXBzaG90SGVh
ZGVyLnByb2ZpbGVUeXBlKCkuaWQsIHRoaXMuX3NuYXBzaG90SGVhZGVyLnVpZCk7CisgICAgICAg
IHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNmZXJTdGFydGVkKHRoaXMpOworICAgICAgICBXZWJJbnNw
ZWN0b3IuZmlsZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1h
bmFnZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgdGhpcy5fb25UcmFuc2ZlclN0YXJ0ZWQsIHRoaXMp
OworICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5BcHBlbmRlZFRvVVJMLCB0aGlzLl9vbkNo
dW5rVHJhbnNmZXJyZWQsIHRoaXMpOwogICAgIH0sCiAKICAgICAvKioKICAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKICAgICAgKi8KLSAgICBfc2F2ZVN0YXR1c1VwZGF0
ZTogZnVuY3Rpb24oZXZlbnQpCisgICAgX29uQ2h1bmtUcmFuc2ZlcnJlZDogZnVuY3Rpb24oZXZl
bnQpCiAgICAgewogICAgICAgICBpZiAoZXZlbnQuZGF0YSAhPT0gdGhpcy5fZmlsZU5hbWUpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyLl9zYXZlU3Rh
dHVzVXBkYXRlKCsrdGhpcy5fc2F2ZWRDaHVua3MpOwotICAgICAgICBpZiAodGhpcy5fc2F2ZWRD
aHVua3MgPT09IHRoaXMuX3NuYXBzaG90SGVhZGVyLl90b3RhbE51bWJlck9mQ2h1bmtzKQotICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuQXBwZW5kZWRUb1VSTCwgdGhpcy5fc2F2
ZVN0YXR1c1VwZGF0ZSwgdGhpcyk7CisgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uQ2h1bmtUcmFu
c2ZlcnJlZCh0aGlzKTsKICAgICB9Ci19OworfQogCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICog
QGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW1EZWxlZ2F0ZX0KKyAqLworV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNhdmVUb0ZpbGVEZWxlZ2F0ZSA9IGZ1bmN0aW9uKHNuYXBz
aG90SGVhZGVyKQoreworICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyID0gc25hcHNob3RIZWFkZXI7
CisgICAgdGhpcy5fc2F2ZWRDaHVua3MgPSAwOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90U2F2ZVRvRmlsZURlbGVnYXRlLnByb3RvdHlwZSA9IHsKKyAgICBvblRyYW5zZmVyU3RhcnRl
ZDogZnVuY3Rpb24oc291cmNlKQorICAgIHsKKyAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIu
X3NhdmVTdGF0dXNVcGRhdGUoMCk7CisgICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmlsZSh0
aGlzLl9zbmFwc2hvdEhlYWRlci5wcm9maWxlVHlwZSgpLmlkLCB0aGlzLl9zbmFwc2hvdEhlYWRl
ci51aWQpOworICAgIH0sCisKKyAgICBvbkNodW5rVHJhbnNmZXJyZWQ6IGZ1bmN0aW9uKHNvdXJj
ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyLl9zYXZlU3RhdHVzVXBkYXRl
KCsrdGhpcy5fc2F2ZWRDaHVua3MpOworICAgIH0sCisKKyAgICBvblRyYW5zZmVyRmluaXNoZWQ6
IGZ1bmN0aW9uKHNvdXJjZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyLl9z
bmFwc2hvdFJlY2VpdmVkKG51bGwpOworICAgIH0sCisKKyAgICBvbkVycm9yOiBmdW5jdGlvbihz
b3VyY2UsIGV2ZW50KQorICAgIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKaW5kZXggZWQzMzcwZDM3NjQwNGVi
ZTQxYmQ3ZGU3Zjk0ODkwYmMxYjEyODk1Ni4uOGYxYjZjZmQwZGUxYWM3ZTI0MjUyOGE0MjlmYjBi
NjViNzQyODNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Qcm9maWxlc1BhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvUHJvZmlsZXNQYW5lbC5qcwpAQCAtMjY0LDE3ICsyNjQsOCBAQCBXZWJJbnNwZWN0b3IuUHJv
ZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBpZiAodGhpcy5fZmlsZVNl
bGVjdG9yRWxlbWVudCkKICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlz
Ll9maWxlU2VsZWN0b3JFbGVtZW50KTsKLQotICAgICAgICB2YXIgZmlsZVNlbGVjdG9yRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICAgIGZpbGVTZWxlY3Rv
ckVsZW1lbnQudHlwZSA9ICJmaWxlIjsKLSAgICAgICAgZmlsZVNlbGVjdG9yRWxlbWVudC5zdHls
ZS56SW5kZXggPSAtMTsKLSAgICAgICAgZmlsZVNlbGVjdG9yRWxlbWVudC5zdHlsZS5wb3NpdGlv
biA9ICJhYnNvbHV0ZSI7Ci0gICAgICAgIGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7Ci0gICAg
ICAgICAgICB0aGlzLl9sb2FkRnJvbUZpbGUodGhpcy5fZmlsZVNlbGVjdG9yRWxlbWVudC5maWxl
c1swXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZmlsZVNlbGVjdG9yRWxlbWVudC5vbmNoYW5nZSA9
IG9uQ2hhbmdlLmJpbmQodGhpcyk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChm
aWxlU2VsZWN0b3JFbGVtZW50KTsKLSAgICAgICAgdGhpcy5fZmlsZVNlbGVjdG9yRWxlbWVudCA9
IGZpbGVTZWxlY3RvckVsZW1lbnQ7CisgICAgICAgIHRoaXMuX2ZpbGVTZWxlY3RvckVsZW1lbnQg
PSBXZWJJbnNwZWN0b3IuY3JlYXRlRmlsZVNlbGVjdG9yRWxlbWVudCh0aGlzLl9sb2FkRnJvbUZp
bGUuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9m
aWxlU2VsZWN0b3JFbGVtZW50KTsKICAgICB9LAogCiAgICAgX2xvYWRGcm9tRmlsZTogZnVuY3Rp
b24oZmlsZSkKQEAgLTY3NSw5ICs2NjYsOSBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5w
cm90b3R5cGUgPSB7CiAgICAgX2FkZEhlYXBTbmFwc2hvdENodW5rOiBmdW5jdGlvbih1aWQsIGNo
dW5rKQogICAgIHsKICAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxlc0lkTWFwW3Ro
aXMuX21ha2VLZXkodWlkLCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlw
ZUlkKV07Ci0gICAgICAgIGlmICghcHJvZmlsZSApCisgICAgICAgIGlmICghcHJvZmlsZSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcHJvZmlsZS5wdXNoSlNPTkNodW5rKGNodW5rKTsK
KyAgICAgICAgcHJvZmlsZS50cmFuc2ZlckNodW5rKGNodW5rKTsKICAgICB9LAogCiAgICAgLyoq
CkBAIC02ODgsNyArNjc5LDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBl
ID0gewogICAgICAgICB2YXIgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFr
ZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsK
ICAgICAgICAgaWYgKCFwcm9maWxlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBwcm9m
aWxlLmZpbmlzaEhlYXBTbmFwc2hvdCgpOworICAgICAgICBwcm9maWxlLmZpbmlzaEhlYXBTbmFw
c2hvdChmYWxzZSk7CiAgICAgfSwKIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4IGIwMjhmZDllMTJlZmVjNmU1YzMyMDM0YzBh
ZTQxYmMxMGU5MTA3MDQuLmYxZTlkMjI0MjM2OGE0MTNmZGE4NzgyZjMxMTBmYzE2ODU1ZjBkMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFy
YworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAg
LTYyLDYgKzYyLDcgQEAKICAgICA8ZmlsZT5GaWxlTWFuYWdlci5qczwvZmlsZT4KICAgICA8Zmls
ZT5GaWxlU3lzdGVtTW9kZWwuanM8L2ZpbGU+CiAgICAgPGZpbGU+RmlsZVN5c3RlbVZpZXcuanM8
L2ZpbGU+CisgICAgPGZpbGU+RmlsZVV0aWxzLmpzPC9maWxlPgogICAgIDxmaWxlPkZpbHRlcmVk
SXRlbVNlbGVjdGlvbkRpYWxvZy5qczwvZmlsZT4KICAgICA8ZmlsZT5Gb250Vmlldy5qczwvZmls
ZT4KICAgICA8ZmlsZT5Hb1RvTGluZURpYWxvZy5qczwvZmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IGI0YzM2ZTEwNGIz
ODRkNmVmMWZkMWQwZjc5ZDg5NGZlYmVjNmZlNTEuLjAwMWI5ZTY5Mjc3ZTVhOGQ4OWFkNjdhNDc2
Y2ZlMjhjZmUwMzk1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtMTY1LDYgKzE2NSw3IEBAIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRmlsZUNvbnRlbnRWaWV3LmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJGaWxlU3lzdGVt
TW9kZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkZpbGVTeXN0ZW1WaWV3LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJGaWxlVXRpbHMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkZvbnRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJJbWFnZVZpZXcuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRhdGFiYXNlVGFibGVWaWV3
LmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3ODBhZWViNzRmMGMyNTNjYzQ2ZWFhNzNkMjAxMmRmODVi
ZGI4ODE2Li40YWQ5MDUzOWJhMmEyYWIwMzM5ZDI4ODc5ZDA1MDk0NTliZDEwMWY2IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTItMDgtMDIgIEV1Z2VuZSBLbHl1Y2huaWtvdiAgPGV1c3Rhcy5i
aWdAZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFByb2ZpbGVzOiBleHRyYWN0
IHNhdmUgdG8gZmlsZSAvIGxvYWQgZnJvbSBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjM0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgdGVzdCB0byBhZG9wdCBuZXcgQVBJLiBSZXBs
YWNlZCBGUyBtb2NrIHdpdGgKKyAgICAgICAgcmVhZGVyIG1vY2suCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1sb2FkZXIuaHRtbDoKKyAgICAgICAgQWRvcHRl
ZCBuZXcgQVBJLgorCiAyMDEyLTA4LTAyICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBVbnJldmlld2VkLCBtYXJrIDMgNDA0LXJl
bGF0ZWQgYXBwY2FjaGUgdGVzdHMgYXMgVEVYVC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1sIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0bWwKaW5kZXggMjk3OTBm
YzVlOTYxOGI5MzkxYmRhMDQzODk3ZDUxODQxMjY1OWY3Mi4uYmRkMTRmODExNmZmZjI1YmM5YWY0
YWNhZGY2OTBiMWVhMDU0MjA3NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3By
b2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0bWwKQEAgLTE5LDkgKzE5LDEwIEBA
IGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICBmdW5jdGlvbiBoZWFwU25hcHNob3RMb2FkZXJUZXN0
KG5leHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdExvYWRlcigpOworICAgICAgICAgICAgbG9hZGVyLnN0YXJ0VHJhbnNm
ZXIoKTsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc291cmNlU3RyaW5naWZpZWQu
bGVuZ3RoOyBpIDwgbDsgaSArPSBwYXJ0U2l6ZSkKLSAgICAgICAgICAgICAgICBsb2FkZXIucHVz
aEpTT05DaHVuayhzb3VyY2VTdHJpbmdpZmllZC5zbGljZShpLCBpICsgcGFydFNpemUpKTsKLSAg
ICAgICAgICAgIGxvYWRlci5maW5pc2hMb2FkaW5nKCk7CisgICAgICAgICAgICAgICAgbG9hZGVy
LnRyYW5zZmVyQ2h1bmsoc291cmNlU3RyaW5naWZpZWQuc2xpY2UoaSwgaSArIHBhcnRTaXplKSk7
CisgICAgICAgICAgICBsb2FkZXIuZmluaXNoVHJhbnNmZXIoKTsKICAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSBsb2FkZXIuYnVpbGRTbmFwc2hvdCgpOwogICAgICAgICAgICAgcmVzdWx0Ll9ub2Rl
cyA9IG5ldyBVaW50MzJBcnJheShyZXN1bHQuX25vZGVzKTsKICAgICAgICAgICAgIHJlc3VsdC5f
Y29udGFpbm1lbnRFZGdlcyA9IG5ldyBVaW50MzJBcnJheShyZXN1bHQuX2NvbnRhaW5tZW50RWRn
ZXMpOwpAQCAtODksMTYgKzkwLDMzIEBAIGZ1bmN0aW9uIHRlc3QoKQogCiAgICAgICAgICAgICB2
YXIgZmlsZU1vY2sgPSB7CiAgICAgICAgICAgICAgICAgbmFtZTogIm1vY2suaGVhcHNuYXBzaG90
IiwKLSAgICAgICAgICAgICAgICBzaXplOiBzb3VyY2VTdHJpbmdpZmllZC5sZW5ndGgsCi0gICAg
ICAgICAgICAgICAgc2xpY2U6IGZ1bmN0aW9uKGJlZ2luLCBlbmQpIHsgcmV0dXJuIHRoaXM7IH0s
Ci0gICAgICAgICAgICAgICAgd2Via2l0U2xpY2U6IGZ1bmN0aW9uKGJlZ2luLCBlbmQpIHsgcmV0
dXJuIHRoaXM7IH0KKyAgICAgICAgICAgICAgICBzaXplOiBzb3VyY2VTdHJpbmdpZmllZC5sZW5n
dGgKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qub3ZlcnJpZGUo
V2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSwgJ19jcmVhdGVGaWxlUmVh
ZGVyJywgZnVuY3Rpb24oZmlsZU1vY2ssIGRlbGVnYXRlKSB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgcmVhZEFzVGV4dDogZnVuY3Rpb24oZmlsZVBhcnQp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlSGVhZGVyID0gcGFuZWwuX3By
b2ZpbGVzW3BhbmVsLl9wcm9maWxlcy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHByb2ZpbGVIZWFkZXIuX25leHRDaHVua0xvYWRlZChzb3VyY2VTdHJpbmdpZmllZCk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbihyZWNlaXZlcikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmVjZWl2ZXIuc3RhcnRUcmFuc2ZlcigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZWdhdGUub25UcmFuc2ZlclN0YXJ0ZWQodGhpcyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZWNlaXZlci50cmFuc2ZlckNodW5rKHNvdXJjZVN0cmluZ2lmaWVkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlLm9uQ2h1bmtUcmFuc2ZlcnJlZCh0aGlzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLmZpbmlzaFRyYW5zZmVyKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5vblRyYW5zZmVyRmluaXNoZWQodGhpcyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVkU2l6ZTog
ZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmlsZU1vY2suc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAg
ICAgICAgICAgICAgICBmaWxlU2l6ZTogZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZU1vY2suc2l6ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZnVuY3Rpb24o
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmlsZU1vY2submFtZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH07
CiAgICAgICAgICAgICB9KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>