<?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>109168</bug_id>
          
          <creation_ts>2013-02-07 03:44:59 -0800</creation_ts>
          <short_desc>Web Inspector: Implement position-based sourcemapping for stylesheets</short_desc>
          <delta_ts>2013-02-11 03:07:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>105285</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rniwa</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>827265</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-02-07 03:44:59 -0800</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827284</commentid>
    <comment_count>1</comment_count>
      <attachid>187051</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-02-07 04:03:06 -0800</bug_when>
    <thetext>Created attachment 187051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827439</commentid>
    <comment_count>2</comment_count>
      <attachid>187051</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-07 06:42:56 -0800</bug_when>
    <thetext>Comment on attachment 187051
Patch

Attachment 187051 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16426170

New failing tests:
http/tests/inspector/stylesheet-source-mapping.html
http/tests/inspector/compiler-script-mapping.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827478</commentid>
    <comment_count>3</comment_count>
      <attachid>187051</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-07 07:12:34 -0800</bug_when>
    <thetext>Comment on attachment 187051
Patch

Attachment 187051 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16432194

New failing tests:
http/tests/inspector/stylesheet-source-mapping.html
http/tests/inspector/compiler-script-mapping.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827639</commentid>
    <comment_count>4</comment_count>
      <attachid>187051</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-07 09:57:18 -0800</bug_when>
    <thetext>Comment on attachment 187051
Patch

Attachment 187051 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16427217</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827661</commentid>
    <comment_count>5</comment_count>
      <attachid>187051</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-07 10:17:12 -0800</bug_when>
    <thetext>Comment on attachment 187051
Patch

Attachment 187051 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16415378

New failing tests:
http/tests/inspector/stylesheet-source-mapping.html
http/tests/inspector/compiler-script-mapping.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827906</commentid>
    <comment_count>6</comment_count>
      <attachid>187051</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-07 14:48:22 -0800</bug_when>
    <thetext>Comment on attachment 187051
Patch

Attachment 187051 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16431326

New failing tests:
http/tests/inspector/stylesheet-source-mapping.html
http/tests/inspector/compiler-script-mapping.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828397</commentid>
    <comment_count>7</comment_count>
      <attachid>187281</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-02-08 03:39:38 -0800</bug_when>
    <thetext>Created attachment 187281
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828427</commentid>
    <comment_count>8</comment_count>
      <attachid>187281</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-08 04:30:24 -0800</bug_when>
    <thetext>Comment on attachment 187281
For EWS

Attachment 187281 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16427593

New failing tests:
http/tests/inspector/stylesheet-source-mapping.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828437</commentid>
    <comment_count>9</comment_count>
      <attachid>187291</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-02-08 04:46:55 -0800</bug_when>
    <thetext>Created attachment 187291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828533</commentid>
    <comment_count>10</comment_count>
      <attachid>187291</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2013-02-08 06:50:55 -0800</bug_when>
    <thetext>Comment on attachment 187291
Patch

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

&gt; Source/WebCore/inspector/front-end/CSSStyleModel.js:543
&gt;          var sourceMapping = this._sourceMappings[rawLocation.url];

We should always fallback to default mapping.
if (sourceMapping) {
    var uiLocation = sourceMapping.rawLocationToUILocation(rawLocation);
    if (uiLocation)
        return uiLocation;
}

&gt; Source/WebCore/inspector/front-end/SASSSourceMapping.js:170
&gt; +        if (sourceMap &amp;&amp; (forceRebind || !this._sourceMapByStyleSheetURL[cssURL])) {

Why would we go to loadSourceMapForStyleSheet() when (!forceRebind &amp;&amp; this._sourceMapByStyleSheetURL[cssURL]) holds in the first place?

if (!forceRebind &amp;&amp; this._sourceMapByStyleSheetURL[cssURL])
    return;
var sourceMap = this.loadSourceMapForStyleSheet(match[1], cssURL, forceRebind);
if (!sourceMap)
    return;
this._sourceMapByStyleSheetURL[cssURL] = sourceMap;
this._bindUISourceCode(cssURL, sourceMap);

&gt; Source/WebCore/inspector/front-end/SASSSourceMapping.js:210
&gt; +        var payload = WebInspector.SourceMap.loadPayload(completeSourceMapURL);

We can now rename loadPayload to SourceMap.load() and move this 4 lines there, like

function loadSourceMap(sourceMapURL, compiledURL) {
    var payload = ... // load payload for sourceMapURL
    if (!payload)
        return null;
    var baseURL = sourceMapURL.startsWith(&quot;data:&quot;) ? compiledURL : completeSourceMapURL;
    return new WebInspector.PositionBasedSourceMap(baseURL, payload);
}

We should also remove RangeBasedSourceMap since we don&apos;t need it anymore and merge PositionBasedSourceMap and SourceMap.

&gt; Source/WebCore/inspector/front-end/SASSSourceMapping.js:254
&gt; +        if (!entry)

if (!entry || entry.length === 2)
    return null;

&gt; LayoutTests/http/tests/inspector/stylesheet-source-mapping.html:21
&gt; +    function checkMapping(compiledLineNumber, compiledColumnNumber, sourceURL, sourceLineNumber, sourceColumnNumber, mapping)

Unused?

&gt; LayoutTests/http/tests/inspector/stylesheet-source-mapping.html:81
&gt; +                InspectorTest.checkUILocation(scssUISourceCode, 0, 0, rawLocationToUILocation(0, 0));

Should be InspectorTest.checkUILocation(cssUISourceCode, 0, 0, rawLocationToUILocation(0, 0)), this is why it does not fail although the code is incorrect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829510</commentid>
    <comment_count>11</comment_count>
      <attachid>187528</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-02-11 01:57:22 -0800</bug_when>
    <thetext>Created attachment 187528
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829534</commentid>
    <comment_count>12</comment_count>
      <attachid>187528</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2013-02-11 02:55:41 -0800</bug_when>
    <thetext>Comment on attachment 187528
Patch

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

&gt; Source/WebCore/inspector/front-end/SASSSourceMapping.js:218
&gt; +        this._sourceMapByURL[completeSourceMapURL] = sourceMap;

This line should probably be before previous return (in case we already had a sourceMap but forceReload flag was set)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829542</commentid>
    <comment_count>13</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-02-11 03:07:26 -0800</bug_when>
    <thetext>Committed r142445: &lt;http://trac.webkit.org/changeset/142445&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187051</attachid>
            <date>2013-02-07 04:03:06 -0800</date>
            <delta_ts>2013-02-08 03:39:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109168-20130207155941.patch</filename>
            <type>text/plain</type>
            <size>26287</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQ2ODg2MmZjZDljZjBh
MmM1OGJkYjNiMTEwMTZkOTAxZmRmODQ1NS4uOWVhYmZjY2RjZTdmNDEyMzY3OWVjNGU4OGQyNzU4
OGE2YTdlODNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTAyLTA3ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IHBvc2l0aW9uLWJhc2VkIHNvdXJjZW1hcHBpbmcgZm9yIHN0eWxlc2hl
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkx
NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGNoYW5nZSBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHBvc2l0aW9uLWJhc2VkIHNvdXJjZSBtYXBz
IGZvciBDU1Mgc3R5bGVzaGVldHMuCisgICAgICAgIFNvdXJjZW1hcHMgYW5kIG9yaWdpbmF0aW5n
IHJlc291cmNlcyAoc2Fzcywgc2NzcywgZXRjLikgYXJlIGxvYWRlZCBzeW5jaHJvbm91c2x5Cisg
ICAgICAgIHVwb24gdGhlIENTUyBVSVNvdXJjZUNvZGUgYWRkaXRpb24uCisKKyAgICAgICAgVGVz
dDogaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVldC1zb3VyY2UtbWFwcGluZy5odG1sCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuc2V0U291cmNlTWFwcGluZyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUucmF3TG9jYXRp
b25Ub1VJTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuTGl2
ZUxvY2F0aW9uLnByb3RvdHlwZS51aUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
U1NMb2NhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnBhcnNlUGF5bG9hZCk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ29tcGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9y
U2NyaXB0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5n
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUuX3N0eWxlU2hlZXRDaGFu
Z2VkLmNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5w
cm90b3R5cGUuX3N0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNT
U291cmNlTWFwcGluZy5wcm90b3R5cGUuX3JlbG9hZENTUyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9yZXNvdXJjZUFkZGVkLmRpZFJlcXVlc3RD
b250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5
cGUuX3Jlc291cmNlQWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBw
aW5nLnByb3RvdHlwZS5fbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXApOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9yU3R5bGVT
aGVldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBl
Ll9iaW5kVUlTb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFw
cGluZy5wcm90b3R5cGUucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9y
ZXNldCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLmxvYWRQYXlsb2FkKToKKwogMjAxMy0wMi0wNyAg
QW5kcmV5IEx1c2huaWtvdiAgPGx1c2huaWtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogaGlnaGxpZ2h0IG1hdGNoaW5nIGJyYWNlcyBpbiBEVEUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKaW5kZXgg
NjdiODdjOTQ4Y2RhMjUxZjdiMTI4ZWM0M2FiOTNmNjFiNGM3Y2JmMS4uYjdjZjA2MmIzMzRjMTlj
NTgzNTk0YjA0NWEwMzRhMTNhNDE0NzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwpAQCAtNDk0LDcgKzQ5NCwxMCBAQCBX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgc2V0
U291cmNlTWFwcGluZzogZnVuY3Rpb24odXJsLCBzb3VyY2VNYXBwaW5nKQogICAgIHsKLSAgICAg
ICAgdGhpcy5fc291cmNlTWFwcGluZ3NbdXJsXSA9IHNvdXJjZU1hcHBpbmc7CisgICAgICAgIGlm
IChzb3VyY2VNYXBwaW5nKQorICAgICAgICAgICAgdGhpcy5fc291cmNlTWFwcGluZ3NbdXJsXSA9
IHNvdXJjZU1hcHBpbmc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9z
b3VyY2VNYXBwaW5nc1t1cmxdOwogICAgICAgICB0aGlzLl91cGRhdGVMb2NhdGlvbnMoKTsKICAg
ICB9LAogCkBAIC01MTUsNiArNTE4LDcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJv
dG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5DU1NSdWxlfSBjc3NSdWxlCiAgICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3Iu
VUlMb2NhdGlvbik6KGJvb2xlYW58dW5kZWZpbmVkKX0gdXBkYXRlRGVsZWdhdGUKICAgICAgKiBA
cmV0dXJuIHs/V2ViSW5zcGVjdG9yLkxpdmVMb2NhdGlvbn0KICAgICAgKi8KQEAgLTUzNCwxMCAr
NTM4LDE3IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5DU1NMb2NhdGlvbn0gcmF3TG9jYXRpb24KICAgICAgKiBA
cmV0dXJuIHs/V2ViSW5zcGVjdG9yLlVJTG9jYXRpb259CiAgICAgICovCi0gICAgX3Jhd0xvY2F0
aW9uVG9VSUxvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKKyAgICByYXdMb2NhdGlvblRv
VUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCiAgICAgewogICAgICAgICB2YXIgc291
cmNlTWFwcGluZyA9IHRoaXMuX3NvdXJjZU1hcHBpbmdzW3Jhd0xvY2F0aW9uLnVybF07Ci0gICAg
ICAgIHJldHVybiBzb3VyY2VNYXBwaW5nID8gc291cmNlTWFwcGluZy5yYXdMb2NhdGlvblRvVUlM
b2NhdGlvbihyYXdMb2NhdGlvbikgOiBudWxsOworICAgICAgICBpZiAoIXNvdXJjZU1hcHBpbmcp
IHsKKyAgICAgICAgICAgIHZhciB1cmkgPSBXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcudXJpRm9y
VVJMKHJhd0xvY2F0aW9uLnVybCk7CisgICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gV2Vi
SW5zcGVjdG9yLndvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkkodXJpKTsKKyAgICAgICAgICAg
IGlmICghdWlTb3VyY2VDb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIHJh
d0xvY2F0aW9uLmxpbmVOdW1iZXIsIHJhd0xvY2F0aW9uLmNvbHVtbk51bWJlcik7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHNvdXJjZU1hcHBpbmcucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24o
cmF3TG9jYXRpb24pOwogICAgIH0sCiAKICAgICAvKioKQEAgLTU4NCw3ICs1OTUsNyBAQCBXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5MaXZlTG9jYXRpb24ucHJvdG90eXBlID0gewogICAgIHVp
TG9jYXRpb246IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBjc3NMb2NhdGlvbiA9IC8q
KiBAdHlwZSBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24gKi8gKHRoaXMucmF3TG9jYXRpb24oKSk7
Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuX3Jhd0xvY2F0aW9uVG9VSUxv
Y2F0aW9uKGNzc0xvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5jc3NNb2Rl
bC5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihjc3NMb2NhdGlvbik7CiAgICAgfSwKIAogICAgIGRp
c3Bvc2U6IGZ1bmN0aW9uKCkKQEAgLTYwMywxMSArNjE0LDEzIEBAIFdlYkluc3BlY3Rvci5DU1NT
dHlsZU1vZGVsLkxpdmVMb2NhdGlvbi5wcm90b3R5cGUgPSB7CiAgKiBAaW1wbGVtZW50cyB7V2Vi
SW5zcGVjdG9yLlJhd0xvY2F0aW9ufQogICogQHBhcmFtIHtzdHJpbmd9IHVybAogICogQHBhcmFt
IHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAqIEBwYXJhbSB7bnVtYmVyPX0gY29sdW1uTnVtYmVyCiAg
Ki8KLVdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiA9IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlcikK
K1dlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiA9IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyKQogewogICAgIHRoaXMudXJsID0gdXJsOwogICAgIHRoaXMubGluZU51bWJlciA9
IGxpbmVOdW1iZXI7CisgICAgdGhpcy5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXIgfHwgMDsK
IH0KIAogLyoqCkBAIC04OTAsOCArOTAzLDkgQEAgV2ViSW5zcGVjdG9yLkNTU1J1bGUucHJvdG90
eXBlID0gewogICogQHBhcmFtIHtib29sZWFufSBwYXJzZWRPawogICogQHBhcmFtIHtib29sZWFu
fSBpbXBsaWNpdAogICogQHBhcmFtIHs/c3RyaW5nPX0gdGV4dAorICogQHBhcmFtIHtDU1NBZ2Vu
dC5Tb3VyY2VSYW5nZT19IHJhbmdlCiAgKi8KLVdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eSA9IGZ1
bmN0aW9uKG93bmVyU3R5bGUsIGluZGV4LCBuYW1lLCB2YWx1ZSwgcHJpb3JpdHksIHN0YXR1cywg
cGFyc2VkT2ssIGltcGxpY2l0LCB0ZXh0KQorV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVu
Y3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIG5hbWUsIHZhbHVlLCBwcmlvcml0eSwgc3RhdHVzLCBw
YXJzZWRPaywgaW1wbGljaXQsIHRleHQsIHJhbmdlKQogewogICAgIHRoaXMub3duZXJTdHlsZSA9
IG93bmVyU3R5bGU7CiAgICAgdGhpcy5pbmRleCA9IGluZGV4OwpAQCAtOTAyLDYgKzkxNiw3IEBA
IFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eSA9IGZ1bmN0aW9uKG93bmVyU3R5bGUsIGluZGV4LCBu
YW1lLCB2YWx1ZSwgcHJpb3JpdHksIHN0CiAgICAgdGhpcy5wYXJzZWRPayA9IHBhcnNlZE9rOwog
ICAgIHRoaXMuaW1wbGljaXQgPSBpbXBsaWNpdDsKICAgICB0aGlzLnRleHQgPSB0ZXh0OworICAg
IHRoaXMucmFuZ2UgPSByYW5nZTsKIH0KIAogLyoqCkBAIC05MTgsNyArOTMzLDcgQEAgV2ViSW5z
cGVjdG9yLkNTU1Byb3BlcnR5LnBhcnNlUGF5bG9hZCA9IGZ1bmN0aW9uKG93bmVyU3R5bGUsIGlu
ZGV4LCBwYXlsb2FkKQogICAgIC8vIGltcGxpY2l0OiBmYWxzZQogICAgIC8vIHN0YXR1czogInN0
eWxlIgogICAgIHZhciByZXN1bHQgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5KAotICAg
ICAgICBvd25lclN0eWxlLCBpbmRleCwgcGF5bG9hZC5uYW1lLCBwYXlsb2FkLnZhbHVlLCBwYXls
b2FkLnByaW9yaXR5IHx8ICIiLCBwYXlsb2FkLnN0YXR1cyB8fCAic3R5bGUiLCAoInBhcnNlZE9r
IiBpbiBwYXlsb2FkKSA/ICEhcGF5bG9hZC5wYXJzZWRPayA6IHRydWUsICEhcGF5bG9hZC5pbXBs
aWNpdCwgcGF5bG9hZC50ZXh0KTsKKyAgICAgICAgb3duZXJTdHlsZSwgaW5kZXgsIHBheWxvYWQu
bmFtZSwgcGF5bG9hZC52YWx1ZSwgcGF5bG9hZC5wcmlvcml0eSB8fCAiIiwgcGF5bG9hZC5zdGF0
dXMgfHwgInN0eWxlIiwgKCJwYXJzZWRPayIgaW4gcGF5bG9hZCkgPyAhIXBheWxvYWQucGFyc2Vk
T2sgOiB0cnVlLCAhIXBheWxvYWQuaW1wbGljaXQsIHBheWxvYWQudGV4dCwgcGF5bG9hZC5yYW5n
ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFwcGluZy5qcwppbmRleCAw
NDFkNDNhNmRmOTI3YjU2Mjk3NmQyYjdhYzNhYmRlN2U0YTU3NzIyLi45ZDAzMDUxZjRkYzZjMTYx
MTg2YjczYTNjN2ViOWIxNjVjNzQ5Yzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFwcGluZy5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFwcGluZy5qcwpAQCAtMTY2
LDIzICsxNjYsMTQgQEAgV2ViSW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZy5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHZhciBzb3VyY2VNYXBVUkwgPSBXZWJJbnNwZWN0b3IuUGFyc2VkVVJM
LmNvbXBsZXRlVVJMKHNjcmlwdFVSTCwgc2NyaXB0LnNvdXJjZU1hcFVSTCk7CiAgICAgICAgIGlm
ICghc291cmNlTWFwVVJMKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KICAgICAgICAgdmFy
IHNvdXJjZU1hcCA9IHRoaXMuX3NvdXJjZU1hcEZvclNvdXJjZU1hcFVSTFtzb3VyY2VNYXBVUkxd
OwogICAgICAgICBpZiAoc291cmNlTWFwKQogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZU1hcDsK
IAotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gRklYTUU6IG1ha2Ugc2VuZFJlcXVlc3Qg
YXN5bmMuCi0gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzb3VyY2VNYXBVUkwpOwotICAgICAgICAgICAgaWYg
KHJlc3BvbnNlLnNsaWNlKDAsIDMpID09PSAiKV19IikKLSAgICAgICAgICAgICAgICByZXNwb25z
ZSA9IHJlc3BvbnNlLnN1YnN0cmluZyhyZXNwb25zZS5pbmRleE9mKCdcbicpKTsKLSAgICAgICAg
ICAgIHZhciBwYXlsb2FkID0gLyoqIEB0eXBlIHtTb3VyY2VNYXBWM30gKi8gKEpTT04ucGFyc2Uo
cmVzcG9uc2UpKTsKLSAgICAgICAgICAgIHZhciBiYXNlVVJMID0gc291cmNlTWFwVVJMLnN0YXJ0
c1dpdGgoImRhdGE6IikgPyBzY3JpcHRVUkwgOiBzb3VyY2VNYXBVUkw7Ci0gICAgICAgICAgICBz
b3VyY2VNYXAgPSBuZXcgV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAoYmFzZVVS
TCwgcGF5bG9hZCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgY29uc29sZS5l
cnJvcihlLm1lc3NhZ2UpOworICAgICAgICB2YXIgcGF5bG9hZCA9IFdlYkluc3BlY3Rvci5Tb3Vy
Y2VNYXAubG9hZFBheWxvYWQoc291cmNlTWFwVVJMKTsKKyAgICAgICAgaWYgKCFwYXlsb2FkKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KKyAgICAgICAgc291cmNlTWFwID0g
bmV3IFdlYkluc3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNlTWFwKHNvdXJjZU1hcFVSTCwgcGF5
bG9hZCk7CiAgICAgICAgIHRoaXMuX3NvdXJjZU1hcEZvclNvdXJjZU1hcFVSTFtzb3VyY2VNYXBV
UkxdID0gc291cmNlTWFwOwogICAgICAgICByZXR1cm4gc291cmNlTWFwOwogICAgIH0sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBw
aW5nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TQVNTU291cmNlTWFw
cGluZy5qcwppbmRleCA4YThmNzZkZTY2MGZkNzc3OTc0NTcxM2JkOTExMjgxOGJlOGFlYzQzLi41
ZTljMzVjM2VhYWM1ZTliOTAzZmJlYmJmOWJjMjI3OGFjZGU5OTY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpzCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU0FTU1NvdXJjZU1hcHBpbmcuanMK
QEAgLTM4LDExICszOCwxMyBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcgPSBmdW5j
dGlvbih3b3Jrc3BhY2UsIG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRlcikKIHsKICAgICB0aGlzLl93
b3Jrc3BhY2UgPSB3b3Jrc3BhY2U7CiAgICAgdGhpcy5fbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVy
ID0gbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyOwotICAgIHRoaXMuX21hcHBpbmdFbnRyaWVzID0g
e307CisgICAgdGhpcy5fc291cmNlTWFwQnlVUkwgPSB7fTsKKyAgICB0aGlzLl9zb3VyY2VNYXBC
eVN0eWxlU2hlZXRVUkwgPSB7fTsKICAgICB0aGlzLl9jc3NVUkxzRm9yU0FTU1VSTCA9IHt9Owog
ICAgIHRoaXMuX3RpbWVvdXRGb3JVUkwgPSB7fTsKICAgICBXZWJJbnNwZWN0b3IucmVzb3VyY2VU
cmVlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwu
RXZlbnRUeXBlcy5SZXNvdXJjZUFkZGVkLCB0aGlzLl9yZXNvdXJjZUFkZGVkLCB0aGlzKTsKICAg
ICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgdGhpcy5fZmlsZVNhdmVGaW5pc2hlZCwg
dGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkNTU1N0eWxlTW9kZWwuRXZlbnRzLlN0eWxlU2hlZXRDaGFuZ2VkLCB0aGlzLl9zdHls
ZVNoZWV0Q2hhbmdlZCwgdGhpcyk7CiAgICAgdGhpcy5fd29ya3NwYWNlLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLldvcmtzcGFjZS5FdmVudHMuUHJvamVjdFdpbGxSZXNldCwgdGhpcy5f
cmVzZXQsIHRoaXMpOwogfQogCkBAIC02NSw2ICs2NywyNiBAQCBXZWJJbnNwZWN0b3IuU0FTU1Nv
dXJjZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLkV2ZW50fSBldmVudAogICAgICAqLworICAgIF9zdHlsZVNoZWV0Q2hhbmdlZDogZnVu
Y3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgaXNBZGRpbmdSZXZpc2lvbiA9IHRoaXMu
X2lzQWRkaW5nUmV2aXNpb247CisgICAgICAgIGRlbGV0ZSB0aGlzLl9pc0FkZGluZ1JldmlzaW9u
OworCisgICAgICAgIGlmIChpc0FkZGluZ1JldmlzaW9uKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwucmVzb3VyY2VCaW5kaW5nKCkucmVxdWVzdFJl
c291cmNlVVJMRm9yU3R5bGVTaGVldElkKGV2ZW50LmRhdGEuc3R5bGVTaGVldElkLCBjYWxsYmFj
ay5iaW5kKHRoaXMpKTsKKworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayh1cmwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICghdXJsKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5zZXRTb3VyY2VNYXBwaW5nKHVybCwgbnVsbCk7
CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuRXZlbnR9IGV2ZW50CisgICAgICovCiAgICAgX2ZpbGVTYXZlRmluaXNoZWQ6IGZ1bmN0aW9u
KGV2ZW50KQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciBGaWxlTWFw
cGluZy4KQEAgLTk4LDcgKzEyMCwxMCBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcu
cHJvdG90eXBlID0gewogICAgICAgICBpZiAoIXVpU291cmNlQ29kZSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgdmFyIG5ld0NvbnRlbnQgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9h
ZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwpOworICAgICAgICB0aGlzLl9pc0FkZGluZ1Jldmlz
aW9uID0gdHJ1ZTsKICAgICAgICAgdWlTb3VyY2VDb2RlLmFkZFJldmlzaW9uKG5ld0NvbnRlbnQp
OworICAgICAgICAvLyB0aGlzLl9pc0FkZGluZ1JldmlzaW9uIHdpbGwgYmUgZGVsZXRlZCBpbiB0
aGlzLl9zdHlsZVNoZWV0Q2hhbmdlZCgpLgorICAgICAgICB0aGlzLl9sb2FkQW5kUHJvY2Vzc1Nv
dXJjZU1hcChuZXdDb250ZW50LCB1cmwsIHRydWUpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTEx
Nyw1NCArMTQyLDM1IEBAIFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAqLwogICAgICAgICBmdW5jdGlvbiBkaWRSZXF1ZXN0Q29udGVudChjb250
ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghY29udGVudCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB2YXIgbGlu
ZXMgPSBjb250ZW50LnNwbGl0KC9ccj9cbi8pOwotICAgICAgICAgICAgdmFyIGRlYnVnSW5mb1Jl
Z2V4ID0gL0BtZWRpYVxzXC1zYXNzXC1kZWJ1Z1wtaW5mb3tmaWxlbmFtZXtmb250LWZhbWlseToo
W159XSspfWxpbmV7Zm9udC1mYW1pbHk6XFwwMDAwKFxkXGQpKFtefV0qKX19L2k7Ci0gICAgICAg
ICAgICB2YXIgbGluZU51bWJlcnNSZWdleCA9IC9cL1wqXHMrbGluZVxzKyhbMC05XSspLFxzKyhb
XipcL10rKS87Ci0gICAgICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJl
ciA8IGxpbmVzLmxlbmd0aDsgKytsaW5lTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1h
dGNoID0gZGVidWdJbmZvUmVnZXguZXhlYyhsaW5lc1tsaW5lTnVtYmVyXSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBtYXRjaFsx
XS5yZXBsYWNlKC9cXCguKS9nLCAiJDEiKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUg
PSBwYXJzZUludChkZWNvZGVVUkkoIiUiICsgbWF0Y2hbMl0pICsgbWF0Y2hbM10sIDEwKTsKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkVVJMTWFwcGluZyh1cmwsIGxpbmUsIHJlc291cmNl
LnVybCwgbGluZU51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtYXRjaCA9IGxpbmVOdW1iZXJzUmVnZXguZXhl
YyhsaW5lc1tsaW5lTnVtYmVyXSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IG1hdGNoWzJdLnRyaW0oKTsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGxpbmUgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOwotICAgICAgICAg
ICAgICAgICAgICB2YXIgdXJsID0gcmVzb3VyY2UudXJsOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodXJsLmVuZHNXaXRoKCIvIiArIHJlc291cmNlLnBhcnNlZFVSTC5sYXN0UGF0aENvbXBvbmVu
dCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHVybC5s
ZW5ndGggLSByZXNvdXJjZS5wYXJzZWRVUkwubGFzdFBhdGhDb21wb25lbnQubGVuZ3RoKSArIGZp
bGVOYW1lOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICB1cmwgPSBmaWxlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkVVJMTWFwcGlu
Zyh1cmwsIGxpbmUsIHJlc291cmNlLnVybCwgbGluZU51bWJlcik7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX2xvYWRBbmRQcm9jZXNzU291cmNlTWFwKGNvbnRlbnQsIHJlc291cmNlLnVybCk7
CiAgICAgICAgIH0KICAgICAgICAgcmVzb3VyY2UucmVxdWVzdENvbnRlbnQoZGlkUmVxdWVzdENv
bnRlbnQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSB1cmwKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZQotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSByYXdVUkwKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gcmF3TGluZQorICAgICAqIEBwYXJh
bSB7P3N0cmluZ30gY29udGVudAorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NVUkwKKyAgICAg
KiBAcGFyYW0ge2Jvb2xlYW49fSBmb3JjZVJlYmluZAogICAgICAqLwotICAgIF9hZGRVUkxNYXBw
aW5nOiBmdW5jdGlvbih1cmwsIGxpbmUsIHJhd1VSTCwgcmF3TGluZSkKKyAgICBfbG9hZEFuZFBy
b2Nlc3NTb3VyY2VNYXA6IGZ1bmN0aW9uKGNvbnRlbnQsIGNzc1VSTCwgZm9yY2VSZWJpbmQpCiAg
ICAgewotICAgICAgICB2YXIgdXJpID0gV2ViSW5zcGVjdG9yLmZpbGVNYXBwaW5nLnVyaUZvclVS
TCh1cmwpOwotICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5maWxlTWFwcGluZy5oYXNNYXBwaW5n
Rm9yVVJMKHVybCkgJiYgIXRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkkodXJpKSkg
ewotICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9hZFJl
c291cmNlU3luY2hyb25vdXNseSh1cmwpOwotICAgICAgICAgICAgdmFyIGNvbnRlbnRQcm92aWRl
ciA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdGljQ29udGVudFByb3ZpZGVyKFdlYkluc3BlY3Rvci5y
ZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQsIGNvbnRlbnQsICJ0ZXh0L3gtc2NzcyIpOwotICAgICAg
ICAgICAgdGhpcy5fbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyLmFkZEZpbGVGb3JVUkwodXJsLCBj
b250ZW50UHJvdmlkZXIsIHRydWUpOworICAgICAgICBpZiAoIWNvbnRlbnQpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHZhciBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xyP1xuLyk7Cisg
ICAgICAgIGlmICghbGluZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGNvbnN0IHNvdXJjZU1hcFJlZ2V4ID0gL15cL1wqQCBzb3VyY2VNYXBwaW5nVVJMPShbXlxzXSsp
XHMqXCpcLyQvOworICAgICAgICB2YXIgbGFzdExpbmUgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAx
XTsKKyAgICAgICAgdmFyIG1hdGNoID0gbGFzdExpbmUubWF0Y2goc291cmNlTWFwUmVnZXgpOwor
ICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBz
b3VyY2VNYXAgPSB0aGlzLmxvYWRTb3VyY2VNYXBGb3JTdHlsZVNoZWV0KG1hdGNoWzFdLCBjc3NV
UkwsIGZvcmNlUmViaW5kKTsKKyAgICAgICAgaWYgKHNvdXJjZU1hcCAmJiAoZm9yY2VSZWJpbmQg
fHwgIXRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVSTFtjc3NVUkxdKSkgeworICAgICAgICAg
ICAgdGhpcy5fc291cmNlTWFwQnlTdHlsZVNoZWV0VVJMW2Nzc1VSTF0gPSBzb3VyY2VNYXA7Cisg
ICAgICAgICAgICB0aGlzLl9iaW5kVUlTb3VyY2VDb2RlKGNzc1VSTCwgc291cmNlTWFwKTsKICAg
ICAgICAgfQotICAgICAgICB2YXIgcmF3TG9jYXRpb25TdHJpbmcgPSByYXdVUkwgKyAiOiIgKyAo
cmF3TGluZSArIDEpOyAgLy8gTmV4dCBsaW5lIGFmdGVyIG1hcHBpbmcgbWV0YWluZm8KLSAgICAg
ICAgdGhpcy5fbWFwcGluZ0VudHJpZXNbcmF3TG9jYXRpb25TdHJpbmddID0gbmV3IFdlYkluc3Bl
Y3Rvci5TQVNTU291cmNlTWFwcGluZy5NYXBwaW5nRW50cnkodXJpLCBsaW5lIC0gMSwgMCk7Ci0g
ICAgICAgIHRoaXMuX2FkZENTU1VSTGZvclNBU1NVUkwocmF3VVJMLCB1cmwpOwotICAgICAgICBX
ZWJJbnNwZWN0b3IuY3NzTW9kZWwuc2V0U291cmNlTWFwcGluZyhyYXdVUkwsIHRoaXMpOwogICAg
IH0sCiAKICAgICAvKioKQEAgLTE4NSwyNiArMTkxLDczIEBAIFdlYkluc3BlY3Rvci5TQVNTU291
cmNlTWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgorICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBzb3VyY2VNYXBVUkwKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVTaGVl
dFVSTAorICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGZvcmNlUmVsb2FkCisgICAgICogQHJldHVy
biB7V2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXB9CisgICAgICovCisgICAgbG9h
ZFNvdXJjZU1hcEZvclN0eWxlU2hlZXQ6IGZ1bmN0aW9uKHNvdXJjZU1hcFVSTCwgc3R5bGVTaGVl
dFVSTCwgZm9yY2VSZWxvYWQpCisgICAgeworICAgICAgICB2YXIgY29tcGxldGVTdHlsZVNoZWV0
VVJMID0gV2ViSW5zcGVjdG9yLlBhcnNlZFVSTC5jb21wbGV0ZVVSTChXZWJJbnNwZWN0b3IuaW5z
cGVjdGVkUGFnZVVSTCwgc3R5bGVTaGVldFVSTCk7CisgICAgICAgIGlmICghY29tcGxldGVTdHls
ZVNoZWV0VVJMKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciBjb21wbGV0
ZVNvdXJjZU1hcFVSTCA9IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwuY29tcGxldGVVUkwoY29tcGxl
dGVTdHlsZVNoZWV0VVJMLCBzb3VyY2VNYXBVUkwpOworICAgICAgICBpZiAoIWNvbXBsZXRlU291
cmNlTWFwVVJMKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciBzb3VyY2VN
YXAgPSB0aGlzLl9zb3VyY2VNYXBCeVVSTFtjb21wbGV0ZVNvdXJjZU1hcFVSTF07CisgICAgICAg
IGlmIChzb3VyY2VNYXAgJiYgIWZvcmNlUmVsb2FkKQorICAgICAgICAgICAgcmV0dXJuIHNvdXJj
ZU1hcDsKKyAgICAgICAgdmFyIHBheWxvYWQgPSBXZWJJbnNwZWN0b3IuU291cmNlTWFwLmxvYWRQ
YXlsb2FkKGNvbXBsZXRlU291cmNlTWFwVVJMKTsKKyAgICAgICAgaWYgKCFwYXlsb2FkKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHNvdXJjZU1hcCA9IG5ldyBXZWJJbnNwZWN0
b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcChjb21wbGV0ZVNvdXJjZU1hcFVSTCwgcGF5bG9hZCk7
CisgICAgICAgIHRoaXMuX3NvdXJjZU1hcEJ5VVJMW2NvbXBsZXRlU291cmNlTWFwVVJMXSA9IHNv
dXJjZU1hcDsKKyAgICAgICAgcmV0dXJuIHNvdXJjZU1hcDsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtzdHJpbmd9IHJhd1VSTAorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlBvc2l0aW9uQmFzZWRTb3VyY2VNYXB9IHNvdXJjZU1hcAorICAgICAqLworICAgIF9iaW5kVUlT
b3VyY2VDb2RlOiBmdW5jdGlvbihyYXdVUkwsIHNvdXJjZU1hcCkKKyAgICB7CisgICAgICAgIHZh
ciBzb3VyY2VzID0gc291cmNlTWFwLnNvdXJjZXMoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzb3VyY2VzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gc291cmNl
c1tpXTsKKyAgICAgICAgICAgIHZhciB1cmkgPSBXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcudXJp
Rm9yVVJMKHVybCk7CisgICAgICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5maWxlTWFwcGluZy5o
YXNNYXBwaW5nRm9yVVJMKHVybCkgJiYgIXRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JV
UkkodXJpKSkgeworICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsKTsKKyAgICAgICAgICAgICAgICB2
YXIgY29udGVudFByb3ZpZGVyID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlk
ZXIoV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU3R5bGVzaGVldCwgY29udGVudCwgInRleHQv
eC1zY3NzIik7CisgICAgICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX25ldHdv
cmtXb3Jrc3BhY2VQcm92aWRlci5hZGRGaWxlRm9yVVJMKHVybCwgY29udGVudFByb3ZpZGVyLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICB1aVNvdXJjZUNvZGUuc2V0U291cmNlTWFwcGluZyh0aGlz
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hZGRDU1NVUkxmb3JTQVNTVVJMKHJhd1VSTCwgdXJs
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3BlY3Rvci5jc3NN
b2RlbC5zZXRTb3VyY2VNYXBwaW5nKHJhd1VSTCwgdGhpcyk7CisgICAgfSwKKworICAgIC8qKgog
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJhd0xvY2F0aW9ufSByYXdMb2NhdGlvbgogICAg
ICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSUxvY2F0aW9ufQogICAgICAqLwogICAgIHJhd0xv
Y2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKICAgICB7CiAgICAgICAg
IHZhciBsb2NhdGlvbiA9IC8qKiBAdHlwZSBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24gKi8gKHJh
d0xvY2F0aW9uKTsKLSAgICAgICAgdmFyIG1hcHBpbmdFbnRyeSA9IHRoaXMuX21hcHBpbmdFbnRy
aWVzW2xvY2F0aW9uLnVybCArICI6IiArIGxvY2F0aW9uLmxpbmVOdW1iZXJdOwotICAgICAgICB2
YXIgdWlMb2NhdGlvbiA9IG51bGw7Ci0gICAgICAgIGlmIChtYXBwaW5nRW50cnkpIHsKLSAgICAg
ICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9y
VVJJKG1hcHBpbmdFbnRyeS51cmkpOwotICAgICAgICAgICAgaWYgKHVpU291cmNlQ29kZSkKLSAg
ICAgICAgICAgICAgICB1aUxvY2F0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVp
U291cmNlQ29kZSwgbWFwcGluZ0VudHJ5LmxpbmVOdW1iZXIsIG1hcHBpbmdFbnRyeS5jb2x1bW5O
dW1iZXIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdWlMb2NhdGlvbikgewotICAgICAgICAg
ICAgdmFyIHVyaSA9IFdlYkluc3BlY3Rvci5maWxlTWFwcGluZy51cmlGb3JVUkwobG9jYXRpb24u
dXJsKTsKLSAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlT
b3VyY2VDb2RlRm9yVVJJKHVyaSk7Ci0gICAgICAgICAgICBpZiAodWlTb3VyY2VDb2RlKQotICAg
ICAgICAgICAgICAgIHVpTG9jYXRpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24odWlT
b3VyY2VDb2RlLCBsb2NhdGlvbi5saW5lTnVtYmVyLCAwKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdWlMb2NhdGlvbjsKKyAgICAgICAgdmFyIGVudHJ5OworICAgICAgICB2YXIgdWlTb3Vy
Y2VDb2RlOworICAgICAgICB2YXIgc291cmNlTWFwID0gdGhpcy5fc291cmNlTWFwQnlTdHlsZVNo
ZWV0VVJMW2xvY2F0aW9uLnVybF07CisgICAgICAgIGlmICghc291cmNlTWFwKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgIGVudHJ5ID0gc291cmNlTWFwLmZpbmRFbnRyeShsb2Nh
dGlvbi5saW5lTnVtYmVyLCBsb2NhdGlvbi5jb2x1bW5OdW1iZXIpOworICAgICAgICBpZiAoIWVu
dHJ5KQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciB1cmkgPSBXZWJJbnNw
ZWN0b3IuZmlsZU1hcHBpbmcudXJpRm9yVVJMKGVudHJ5WzJdKTsKKyAgICAgICAgdWlTb3VyY2VD
b2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSSSh1cmkpOworICAgICAgICBp
ZiAoIXVpU291cmNlQ29kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2RlLCBlbnRyeVszXSwg
ZW50cnlbNF0pOwogICAgIH0sCiAKICAgICAvKioKQEAgLTIxNiwyNSArMjY5LDEzIEBAIFdlYklu
c3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAgdWlMb2NhdGlvblRv
UmF3TG9jYXRpb246IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgbGluZU51bWJlciwgY29sdW1uTnVt
YmVyKQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHdoZW4gdWkgLT4g
cmF3IG1hcHBpbmcgaGFzIGNsaWVudHMuCi0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9y
LkNTU0xvY2F0aW9uKHVpU291cmNlQ29kZS51cmwgfHwgIiIsIGxpbmVOdW1iZXIpOworICAgICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbih1aVNvdXJjZUNvZGUudXJsIHx8
ICIiLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwogICAgIH0sCiAKICAgICBfcmVzZXQ6IGZ1
bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX21hcHBpbmdFbnRyaWVzID0ge307CisgICAg
ICAgIHRoaXMuX3NvdXJjZU1hcEJ5VVJMID0ge307CisgICAgICAgIHRoaXMuX3NvdXJjZU1hcEJ5
U3R5bGVTaGVldFVSTCA9IHt9OwogICAgICAgICB0aGlzLl9wb3B1bGF0ZSgpOwogICAgIH0KIH0K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7c3RyaW5nfSB1cmkKLSAqIEBwYXJh
bSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gKi8KLVdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGlu
Zy5NYXBwaW5nRW50cnkgPSBmdW5jdGlvbih1cmksIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikK
LXsKLSAgICB0aGlzLnVyaSA9IHVyaTsKLSAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVy
OwotICAgIHRoaXMuY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotfQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZU1hcC5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlTWFwLmpzCmluZGV4IDJkNGUxM2I1
MjM2NTY5YmJiMWU2NDA3MjcwNmI0NmQ1NDFiMzQwMTguLjE4NzRiNTg0NTY0MDg2MjliM2M3N2Ey
YzBkYTE1MzAxMDY0MjE0ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlTWFwLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlTWFwLmpzCkBAIC01MSw2ICs1MSwyNiBAQCBXZWJJbnNwZWN0b3IuU291cmNl
TWFwID0gZnVuY3Rpb24oc291cmNlTWFwcGluZ1VSTCwgcGF5bG9hZCkKICAgICB0aGlzLl9wYXJz
ZU1hcHBpbmdQYXlsb2FkKHBheWxvYWQpOwogfQogCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSB1
cmwKKyAqIEByZXR1cm4ge1NvdXJjZU1hcFYzfQorICovCitXZWJJbnNwZWN0b3IuU291cmNlTWFw
LmxvYWRQYXlsb2FkID0gZnVuY3Rpb24odXJsKQoreworICAgIHRyeSB7CisgICAgICAgIC8vIEZJ
WE1FOiBtYWtlIHNlbmRSZXF1ZXN0IGFzeW5jLgorICAgICAgICB2YXIgcmVzcG9uc2UgPSBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QubG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwpOworICAgICAg
ICBpZiAoIXJlc3BvbnNlKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIGlmIChy
ZXNwb25zZS5zbGljZSgwLCAzKSA9PT0gIildfSIpCisgICAgICAgICAgICByZXNwb25zZSA9IHJl
c3BvbnNlLnN1YnN0cmluZyhyZXNwb25zZS5pbmRleE9mKCdcbicpKTsKKyAgICAgICAgcmV0dXJu
IC8qKiBAdHlwZSB7U291cmNlTWFwVjN9ICovIChKU09OLnBhcnNlKHJlc3BvbnNlKSk7CisgICAg
fSBjYXRjaChlKSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoZS5tZXNzYWdlKTsKKyAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgfQorfQorCiBXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlw
ZSA9IHsKICAgICAvKioKICAgICAgKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAz
NTBkMDY5MjlmMjgyNDNhMjg5MzQyZmJjOGM5MjIzYzcxYjI1ZTVlLi4xOWI3MmI2ZGRjZTk4YzE5
MmY4NTM4ZGZjZmQ5NDU3M2JhNzNhNGNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMDIt
MDcgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBJbXBsZW1lbnQgcG9zaXRpb24tYmFzZWQgc291cmNlbWFwcGluZyBmb3Ig
c3R5bGVzaGVldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwOTE2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVldC1zb3VyY2UtbWFwcGluZy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL3N0eWxlc2hl
ZXQtc291cmNlLW1hcHBpbmcuaHRtbDogQWRkZWQuCisKIDIwMTMtMDItMDcgIEFuZHJleSBMdXNo
bmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IGhpZ2hsaWdodCBtYXRjaGluZyBicmFjZXMgaW4gRFRFLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVldC1zb3VyY2UtbWFwcGluZy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9zdHlsZXNoZWV0LXNvdXJj
ZS1tYXBwaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZmQyZDgzYjYwYjcwN2MyOTIxZGI3
N2NkMzYzZmJkNTk0MTU4NmEzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVldC1zb3VyY2UtbWFwcGluZy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw1IEBACitUZXN0cyBQb3NpdGlvbkJhc2VkU291cmNlTWFwIGFuZCBTdHlsZVNoZWV0
TWFwcGluZy4KKworCitSdW5uaW5nOiB0ZXN0U3R5bGVTaGVldE1hcHBpbmcKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVldC1zb3VyY2UtbWFw
cGluZy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVldC1z
b3VyY2UtbWFwcGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NGNjY2U0OTljZjZkODk0YzgzMDEyZjUy
YmRjNjM4ZjJkZDVmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9zdHlsZXNoZWV0LXNvdXJjZS1tYXBwaW5nLmh0bWwKQEAgLTAsMCArMSwxMTAg
QEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iaW5zcGVjdG9yLXRlc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9ImRlYnVnZ2VyLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IndvcmtzcGFjZS10ZXN0LmpzIj48L3NjcmlwdD4KKworPHNjcmlwdD4KKworZnVuY3Rpb24g
dGVzdCgpCit7CisgICAgdmFyIHN0eWxlc1NvdXJjZU1hcHBpbmc7CisKKyAgICBmdW5jdGlvbiBj
cmVhdGVTdHlsZVNoZWV0TWFwcGluZygpCisgICAgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmNy
ZWF0ZVdvcmtzcGFjZSgpOworICAgICAgICB2YXIgc2Fzc1NvdXJjZU1hcHBpbmcgPSBuZXcgV2Vi
SW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nKEluc3BlY3RvclRlc3QudGVzdFdvcmtzcGFjZSwg
SW5zcGVjdG9yVGVzdC50ZXN0TmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyKTsKKyAgICAgICAgc3R5
bGVzU291cmNlTWFwcGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVzU291cmNlTWFwcGluZyhJ
bnNwZWN0b3JUZXN0LnRlc3RXb3Jrc3BhY2UpOworICAgICAgICByZXR1cm4gc2Fzc1NvdXJjZU1h
cHBpbmc7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tNYXBwaW5nKGNvbXBpbGVkTGluZU51
bWJlciwgY29tcGlsZWRDb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCwgc291cmNlTGluZU51bWJlciwg
c291cmNlQ29sdW1uTnVtYmVyLCBtYXBwaW5nKQorICAgIHsKKyAgICAgICAgdmFyIGVudHJ5ID0g
bWFwcGluZy5maW5kRW50cnkoY29tcGlsZWRMaW5lTnVtYmVyLCBjb21waWxlZENvbHVtbk51bWJl
cik7CisgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKHNvdXJjZVVSTCwgZW50cnlb
Ml0pOworICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscyhzb3VyY2VMaW5lTnVtYmVy
LCBlbnRyeVszXSk7CisgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKHNvdXJjZUNv
bHVtbk51bWJlciwgZW50cnlbNF0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZU1vY2tT
dHlsZVNoZWV0UmVzb3VyY2UodXJsLCBtaW1lVHlwZSwgY29udGVudCkKKyAgICB7CisgICAgICAg
IGNvbnN0IGRvY3VtZW50VVJMID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9pbnNwZWN0b3Ivc3R5
bGVzaGVldC1zb3VyY2UtbWFwcGluZy5odG1sIjsKKyAgICAgICAgY29uc3QgZnJhbWUgPSBXZWJJ
bnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwubWFpbkZyYW1lOworICAgICAgICB2YXIgcmVzb3Vy
Y2UgPSBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlKG51bGwsIHVybCwgZG9jdW1lbnRVUkwsIGZy
YW1lLmlkLCBmcmFtZS5sb2FkZXJJZCwgV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU3R5bGVz
aGVldCwgbWltZVR5cGUpOworICAgICAgICByZXNvdXJjZS5yZXF1ZXN0Q29udGVudCA9IGZ1bmN0
aW9uKGNhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBjYWxsYmFjayhjb250ZW50LCBm
YWxzZSwgbWltZVR5cGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXNvdXJjZTsKKyAg
ICB9CisKKyAgICBJbnNwZWN0b3JUZXN0LnJ1blRlc3RTdWl0ZShbCisgICAgICAgIGZ1bmN0aW9u
IHRlc3RTdHlsZVNoZWV0TWFwcGluZyhuZXh0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIg
bWFwcGluZyA9IGNyZWF0ZVN0eWxlU2hlZXRNYXBwaW5nKCk7CisgICAgICAgICAgICBzdGVwMSgp
OworCisgICAgICAgICAgICBmdW5jdGlvbiBzdGVwMSgpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC53YWl0Rm9yV29ya3NwYWNlVUlTb3VyY2VDb2RlQWRkZWRF
dmVudChjc3NVSVNvdXJjZUNvZGVBZGRlZCk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5hZGRNb2NrVUlTb3VyY2VDb2RlVG9Xb3Jrc3BhY2UoImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9p
bnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUuY3NzIiwgV2ViSW5zcGVjdG9yLnJlc291cmNlVHlw
ZXMuU3R5bGVzaGVldCwgIiIpOworICAgICAgICAgICAgICAgIHZhciBldmVudCA9IHsgZGF0YTog
Y3JlYXRlTW9ja1N0eWxlU2hlZXRSZXNvdXJjZSgiaHR0cDovL2xvY2FsaG9zdDo4MDAwL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvZXhhbXBsZS5jc3MiLCAidGV4dC9jc3MiLAorICAgICAgICAgICAgICAg
ICAgICAiYSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgZm9vOiBiYXI7XG4iICsKKyAg
ICAgICAgICAgICAgICAgICAgIiAgLyogU09NRSBDT01NRU5UICovXG4iICsKKyAgICAgICAgICAg
ICAgICAgICAgIiAgZm9udC1zaXplOiAxMnB4OyB9XG5cbiIgKworICAgICAgICAgICAgICAgICAg
ICAiLypAIHNvdXJjZU1hcHBpbmdVUkw9ZXhhbXBsZS5jc3MubWFwICovIikgfTsKKyAgICAgICAg
ICAgICAgICBzdHlsZXNTb3VyY2VNYXBwaW5nLl9yZXNvdXJjZUFkZGVkKGV2ZW50KTsKKyAgICAg
ICAgICAgICAgICBtYXBwaW5nLl9yZXNvdXJjZUFkZGVkKGV2ZW50KTsKKyAgICAgICAgICAgICAg
ICBhZnRlclN0eWxlU2hlZXRBZGRlZCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
dW5jdGlvbiBjc3NVSVNvdXJjZUNvZGVBZGRlZCh1aVNvdXJjZUNvZGUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC53YWl0Rm9yV29ya3NwYWNlVUlTb3VyY2VD
b2RlQWRkZWRFdmVudChzY3NzVUlTb3VyY2VDb2RlQWRkZWQpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBmdW5jdGlvbiBzY3NzVUlTb3VyY2VDb2RlQWRkZWQodWlTb3VyY2VDb2RlKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiByYXdM
b2NhdGlvblRvVUlMb2NhdGlvbihsaW5lLCBjb2x1bW4sIHVybCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmNzc01vZGVsLnJhd0xvY2F0aW9uVG9V
SUxvY2F0aW9uKG5ldyBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24oImh0dHA6Ly9sb2NhbGhvc3Q6
ODAwMC9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUuY3NzIiwgbGluZSwgY29sdW1uKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGFmdGVyU3R5bGVTaGVldEFkZGVk
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgY3NzVUlTb3VyY2VDb2RlID0g
SW5zcGVjdG9yVGVzdC50ZXN0V29ya3NwYWNlLnVpU291cmNlQ29kZUZvck9yaWdpblVSTCgiaHR0
cDovL2xvY2FsaG9zdDo4MDAwL2luc3BlY3Rvci9yZXNvdXJjZXMvZXhhbXBsZS5jc3MiKTsKKyAg
ICAgICAgICAgICAgICB2YXIgc2Nzc1VJU291cmNlQ29kZSA9IEluc3BlY3RvclRlc3QudGVzdFdv
cmtzcGFjZS51aVNvdXJjZUNvZGVGb3JPcmlnaW5VUkwoImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9p
bnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUuc2NzcyIpOworCisgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24oc2Nzc1VJU291cmNlQ29kZSwgMCwgMCwgcmF3TG9j
YXRpb25Ub1VJTG9jYXRpb24oMCwgMCkpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
Y2hlY2tVSUxvY2F0aW9uKHNjc3NVSVNvdXJjZUNvZGUsIDEsIDIsIHJhd0xvY2F0aW9uVG9VSUxv
Y2F0aW9uKDEsIDQpKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrVUlMb2Nh
dGlvbihzY3NzVUlTb3VyY2VDb2RlLCAxLCA1LCByYXdMb2NhdGlvblRvVUlMb2NhdGlvbigxLCA2
KSk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24oc2Nzc1VJ
U291cmNlQ29kZSwgMSwgNywgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oMSwgOSkpOworICAgICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tVSUxvY2F0aW9uKHNjc3NVSVNvdXJjZUNvZGUs
IDEsIDEwLCByYXdMb2NhdGlvblRvVUlMb2NhdGlvbigyLCA3KSk7CisgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24oc2Nzc1VJU291cmNlQ29kZSwgMywgMiwgcmF3
TG9jYXRpb25Ub1VJTG9jYXRpb24oMywgOCkpOworCisgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5jaGVja1VJTG9jYXRpb24oc2Nzc1VJU291cmNlQ29kZSwgMywgMTEsIHJhd0xvY2F0aW9u
VG9VSUxvY2F0aW9uKDMsIDExKSk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVj
a1VJTG9jYXRpb24oc2Nzc1VJU291cmNlQ29kZSwgMywgMTMsIHJhd0xvY2F0aW9uVG9VSUxvY2F0
aW9uKDMsIDE1KSk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRp
b24oc2Nzc1VJU291cmNlQ29kZSwgMywgMTcsIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKDMsIDIw
KSk7CisgICAgICAgICAgICAgICAgc2Nzc1VJU291cmNlQ29kZS5yZXF1ZXN0Q29udGVudChkaWRS
ZXF1ZXN0Q29udGVudCk7CisKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBkaWRSZXF1ZXN0Q29u
dGVudChjb250ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscygwLCBjb250
ZW50LmluZGV4T2YoImEgeyIpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIF0pOworfQorCis8L3Nj
cmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD5UZXN0cyBQ
b3NpdGlvbkJhc2VkU291cmNlTWFwIGFuZCBTdHlsZVNoZWV0TWFwcGluZy48L3A+Cis8L2JvZHk+
Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187281</attachid>
            <date>2013-02-08 03:39:38 -0800</date>
            <delta_ts>2013-02-08 04:46:51 -0800</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-109168-20130208153612.patch</filename>
            <type>text/plain</type>
            <size>26478</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUxNWUzOTRkZDExMjM0
OTIxOTY4ZjlhNGJkNTRhMzQzNWM4NDdmNC4uNDQ3ODg3NTIzOWQxYjhhZDRhNDRhYWE3MzM5MTM5
ZjcyMWFmOTAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTAyLTA4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IHBvc2l0aW9uLWJhc2VkIHNvdXJjZW1hcHBpbmcgZm9yIHN0eWxlc2hl
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkx
NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGNoYW5nZSBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHBvc2l0aW9uLWJhc2VkIHNvdXJjZSBtYXBz
IGZvciBDU1Mgc3R5bGVzaGVldHMuCisgICAgICAgIFNvdXJjZW1hcHMgYW5kIG9yaWdpbmF0aW5n
IHJlc291cmNlcyAoc2Fzcywgc2NzcywgZXRjLikgYXJlIGxvYWRlZCBzeW5jaHJvbm91c2x5Cisg
ICAgICAgIHVwb24gdGhlIENTUyBVSVNvdXJjZUNvZGUgYWRkaXRpb24uCisKKyAgICAgICAgVGVz
dDogaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVldC1zb3VyY2UtbWFwcGluZy5odG1sCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuc2V0U291cmNlTWFwcGluZyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUucmF3TG9jYXRp
b25Ub1VJTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuTGl2
ZUxvY2F0aW9uLnByb3RvdHlwZS51aUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
U1NMb2NhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnBhcnNlUGF5bG9hZCk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ29tcGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9y
U2NyaXB0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5n
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUuX3N0eWxlU2hlZXRDaGFu
Z2VkLmNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5w
cm90b3R5cGUuX3N0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNT
U291cmNlTWFwcGluZy5wcm90b3R5cGUuX3JlbG9hZENTUyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9yZXNvdXJjZUFkZGVkLmRpZFJlcXVlc3RD
b250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5
cGUuX3Jlc291cmNlQWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBw
aW5nLnByb3RvdHlwZS5fbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXApOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9yU3R5bGVT
aGVldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBl
Ll9iaW5kVUlTb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFw
cGluZy5wcm90b3R5cGUucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9y
ZXNldCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLmxvYWRQYXlsb2FkKToKKwogMjAxMy0wMi0wOCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0MTY5NSBhbmQgcjE0MTY5Ny4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwppbmRleCA2N2I4
N2M5NDhjZGEyNTFmN2IxMjhlYzQzYWI5M2Y2MWI0YzdjYmYxLi5iN2NmMDYyYjMzNGMxOWM1ODM1
OTRiMDQ1YTAzNGExM2E0MTQ3MTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCkBAIC00OTQsNyArNDk0LDEwIEBAIFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBzZXRTb3Vy
Y2VNYXBwaW5nOiBmdW5jdGlvbih1cmwsIHNvdXJjZU1hcHBpbmcpCiAgICAgewotICAgICAgICB0
aGlzLl9zb3VyY2VNYXBwaW5nc1t1cmxdID0gc291cmNlTWFwcGluZzsKKyAgICAgICAgaWYgKHNv
dXJjZU1hcHBpbmcpCisgICAgICAgICAgICB0aGlzLl9zb3VyY2VNYXBwaW5nc1t1cmxdID0gc291
cmNlTWFwcGluZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NvdXJj
ZU1hcHBpbmdzW3VybF07CiAgICAgICAgIHRoaXMuX3VwZGF0ZUxvY2F0aW9ucygpOwogICAgIH0s
CiAKQEAgLTUxNSw2ICs1MTgsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5
cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNT
U1J1bGV9IGNzc1J1bGUKICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5VSUxv
Y2F0aW9uKTooYm9vbGVhbnx1bmRlZmluZWQpfSB1cGRhdGVEZWxlZ2F0ZQogICAgICAqIEByZXR1
cm4gez9XZWJJbnNwZWN0b3IuTGl2ZUxvY2F0aW9ufQogICAgICAqLwpAQCAtNTM0LDEwICs1Mzgs
MTcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlID0gewogICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9ufSByYXdMb2NhdGlvbgogICAgICAqIEByZXR1
cm4gez9XZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KICAgICAgKi8KLSAgICBfcmF3TG9jYXRpb25U
b1VJTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0aW9uKQorICAgIHJhd0xvY2F0aW9uVG9VSUxv
Y2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKICAgICB7CiAgICAgICAgIHZhciBzb3VyY2VN
YXBwaW5nID0gdGhpcy5fc291cmNlTWFwcGluZ3NbcmF3TG9jYXRpb24udXJsXTsKLSAgICAgICAg
cmV0dXJuIHNvdXJjZU1hcHBpbmcgPyBzb3VyY2VNYXBwaW5nLnJhd0xvY2F0aW9uVG9VSUxvY2F0
aW9uKHJhd0xvY2F0aW9uKSA6IG51bGw7CisgICAgICAgIGlmICghc291cmNlTWFwcGluZykgewor
ICAgICAgICAgICAgdmFyIHVyaSA9IFdlYkluc3BlY3Rvci5maWxlTWFwcGluZy51cmlGb3JVUkwo
cmF3TG9jYXRpb24udXJsKTsKKyAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSBXZWJJbnNw
ZWN0b3Iud29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSSSh1cmkpOworICAgICAgICAgICAgaWYg
KCF1aVNvdXJjZUNvZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgcmF3TG9j
YXRpb24ubGluZU51bWJlciwgcmF3TG9jYXRpb24uY29sdW1uTnVtYmVyKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gc291cmNlTWFwcGluZy5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihyYXdM
b2NhdGlvbik7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtNTg0LDcgKzU5NSw3IEBAIFdlYkluc3Bl
Y3Rvci5DU1NTdHlsZU1vZGVsLkxpdmVMb2NhdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgdWlMb2Nh
dGlvbjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIGNzc0xvY2F0aW9uID0gLyoqIEB0
eXBlIFdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiAqLyAodGhpcy5yYXdMb2NhdGlvbigpKTsKLSAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5fcmF3TG9jYXRpb25Ub1VJTG9jYXRp
b24oY3NzTG9jYXRpb24pOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmNzc01vZGVsLnJh
d0xvY2F0aW9uVG9VSUxvY2F0aW9uKGNzc0xvY2F0aW9uKTsKICAgICB9LAogCiAgICAgZGlzcG9z
ZTogZnVuY3Rpb24oKQpAQCAtNjAzLDExICs2MTQsMTMgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TW9kZWwuTGl2ZUxvY2F0aW9uLnByb3RvdHlwZSA9IHsKICAqIEBpbXBsZW1lbnRzIHtXZWJJbnNw
ZWN0b3IuUmF3TG9jYXRpb259CiAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCiAgKiBAcGFyYW0ge251
bWJlcn0gbGluZU51bWJlcgorICogQHBhcmFtIHtudW1iZXI9fSBjb2x1bW5OdW1iZXIKICAqLwot
V2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uID0gZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyKQorV2Vi
SW5zcGVjdG9yLkNTU0xvY2F0aW9uID0gZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5O
dW1iZXIpCiB7CiAgICAgdGhpcy51cmwgPSB1cmw7CiAgICAgdGhpcy5saW5lTnVtYmVyID0gbGlu
ZU51bWJlcjsKKyAgICB0aGlzLmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlciB8fCAwOwogfQog
CiAvKioKQEAgLTg5MCw4ICs5MDMsOSBAQCBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUg
PSB7CiAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcnNlZE9rCiAgKiBAcGFyYW0ge2Jvb2xlYW59IGlt
cGxpY2l0CiAgKiBAcGFyYW0gez9zdHJpbmc9fSB0ZXh0CisgKiBAcGFyYW0ge0NTU0FnZW50LlNv
dXJjZVJhbmdlPX0gcmFuZ2UKICAqLwotV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVuY3Rp
b24ob3duZXJTdHlsZSwgaW5kZXgsIG5hbWUsIHZhbHVlLCBwcmlvcml0eSwgc3RhdHVzLCBwYXJz
ZWRPaywgaW1wbGljaXQsIHRleHQpCitXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkgPSBmdW5jdGlv
bihvd25lclN0eWxlLCBpbmRleCwgbmFtZSwgdmFsdWUsIHByaW9yaXR5LCBzdGF0dXMsIHBhcnNl
ZE9rLCBpbXBsaWNpdCwgdGV4dCwgcmFuZ2UpCiB7CiAgICAgdGhpcy5vd25lclN0eWxlID0gb3du
ZXJTdHlsZTsKICAgICB0aGlzLmluZGV4ID0gaW5kZXg7CkBAIC05MDIsNiArOTE2LDcgQEAgV2Vi
SW5zcGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIG5hbWUs
IHZhbHVlLCBwcmlvcml0eSwgc3QKICAgICB0aGlzLnBhcnNlZE9rID0gcGFyc2VkT2s7CiAgICAg
dGhpcy5pbXBsaWNpdCA9IGltcGxpY2l0OwogICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgdGhp
cy5yYW5nZSA9IHJhbmdlOwogfQogCiAvKioKQEAgLTkxOCw3ICs5MzMsNyBAQCBXZWJJbnNwZWN0
b3IuQ1NTUHJvcGVydHkucGFyc2VQYXlsb2FkID0gZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgs
IHBheWxvYWQpCiAgICAgLy8gaW1wbGljaXQ6IGZhbHNlCiAgICAgLy8gc3RhdHVzOiAic3R5bGUi
CiAgICAgdmFyIHJlc3VsdCA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkoCi0gICAgICAg
IG93bmVyU3R5bGUsIGluZGV4LCBwYXlsb2FkLm5hbWUsIHBheWxvYWQudmFsdWUsIHBheWxvYWQu
cHJpb3JpdHkgfHwgIiIsIHBheWxvYWQuc3RhdHVzIHx8ICJzdHlsZSIsICgicGFyc2VkT2siIGlu
IHBheWxvYWQpID8gISFwYXlsb2FkLnBhcnNlZE9rIDogdHJ1ZSwgISFwYXlsb2FkLmltcGxpY2l0
LCBwYXlsb2FkLnRleHQpOworICAgICAgICBvd25lclN0eWxlLCBpbmRleCwgcGF5bG9hZC5uYW1l
LCBwYXlsb2FkLnZhbHVlLCBwYXlsb2FkLnByaW9yaXR5IHx8ICIiLCBwYXlsb2FkLnN0YXR1cyB8
fCAic3R5bGUiLCAoInBhcnNlZE9rIiBpbiBwYXlsb2FkKSA/ICEhcGF5bG9hZC5wYXJzZWRPayA6
IHRydWUsICEhcGF5bG9hZC5pbXBsaWNpdCwgcGF5bG9hZC50ZXh0LCBwYXlsb2FkLnJhbmdlKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFwcGluZy5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzCmluZGV4IDA0MWQ0
M2E2ZGY5MjdiNTYyOTc2ZDJiN2FjM2FiZGU3ZTRhNTc3MjIuLjRiZWIzNGI4NGIzODE1NTI2ZTFj
MjA0NjBlMzhiYTc5ZjM4NjQwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzCkBAIC0xNjYsMjMg
KzE2NiwxNSBAQCBXZWJJbnNwZWN0b3IuQ29tcGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdmFyIHNvdXJjZU1hcFVSTCA9IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwuY29t
cGxldGVVUkwoc2NyaXB0VVJMLCBzY3JpcHQuc291cmNlTWFwVVJMKTsKICAgICAgICAgaWYgKCFz
b3VyY2VNYXBVUkwpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQogICAgICAgICB2YXIgc291
cmNlTWFwID0gdGhpcy5fc291cmNlTWFwRm9yU291cmNlTWFwVVJMW3NvdXJjZU1hcFVSTF07CiAg
ICAgICAgIGlmIChzb3VyY2VNYXApCiAgICAgICAgICAgICByZXR1cm4gc291cmNlTWFwOwogCi0g
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogbWFrZSBzZW5kUmVxdWVzdCBhc3lu
Yy4KLSAgICAgICAgICAgIHZhciByZXNwb25zZSA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KHNvdXJjZU1hcFVSTCk7Ci0gICAgICAgICAgICBpZiAocmVz
cG9uc2Uuc2xpY2UoMCwgMykgPT09ICIpXX0iKQotICAgICAgICAgICAgICAgIHJlc3BvbnNlID0g
cmVzcG9uc2Uuc3Vic3RyaW5nKHJlc3BvbnNlLmluZGV4T2YoJ1xuJykpOwotICAgICAgICAgICAg
dmFyIHBheWxvYWQgPSAvKiogQHR5cGUge1NvdXJjZU1hcFYzfSAqLyAoSlNPTi5wYXJzZShyZXNw
b25zZSkpOwotICAgICAgICAgICAgdmFyIGJhc2VVUkwgPSBzb3VyY2VNYXBVUkwuc3RhcnRzV2l0
aCgiZGF0YToiKSA/IHNjcmlwdFVSTCA6IHNvdXJjZU1hcFVSTDsKLSAgICAgICAgICAgIHNvdXJj
ZU1hcCA9IG5ldyBXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcChiYXNlVVJMLCBw
YXlsb2FkKTsKLSAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9y
KGUubWVzc2FnZSk7CisgICAgICAgIHZhciBwYXlsb2FkID0gV2ViSW5zcGVjdG9yLlNvdXJjZU1h
cC5sb2FkUGF5bG9hZChzb3VyY2VNYXBVUkwpOworICAgICAgICBpZiAoIXBheWxvYWQpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQorICAgICAgICB2YXIgYmFzZVVSTCA9IHNv
dXJjZU1hcFVSTC5zdGFydHNXaXRoKCJkYXRhOiIpID8gc2NyaXB0VVJMIDogc291cmNlTWFwVVJM
OworICAgICAgICBzb3VyY2VNYXAgPSBuZXcgV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3Vy
Y2VNYXAoYmFzZVVSTCwgcGF5bG9hZCk7CiAgICAgICAgIHRoaXMuX3NvdXJjZU1hcEZvclNvdXJj
ZU1hcFVSTFtzb3VyY2VNYXBVUkxdID0gc291cmNlTWFwOwogICAgICAgICByZXR1cm4gc291cmNl
TWFwOwogICAgIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TQVNTU291cmNlTWFwcGluZy5qcwppbmRleCA4YThmNzZkZTY2MGZkNzc3OTc0NTcxM2Jk
OTExMjgxOGJlOGFlYzQzLi4zN2MxZDRmN2Y0NDg4YjU4ZDY0YjM0MjdhZmVhMTg0NzM1NDcwMDYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3Vy
Y2VNYXBwaW5nLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU0FT
U1NvdXJjZU1hcHBpbmcuanMKQEAgLTM4LDExICszOCwxMyBAQCBXZWJJbnNwZWN0b3IuU0FTU1Nv
dXJjZU1hcHBpbmcgPSBmdW5jdGlvbih3b3Jrc3BhY2UsIG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRl
cikKIHsKICAgICB0aGlzLl93b3Jrc3BhY2UgPSB3b3Jrc3BhY2U7CiAgICAgdGhpcy5fbmV0d29y
a1dvcmtzcGFjZVByb3ZpZGVyID0gbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyOwotICAgIHRoaXMu
X21hcHBpbmdFbnRyaWVzID0ge307CisgICAgdGhpcy5fc291cmNlTWFwQnlVUkwgPSB7fTsKKyAg
ICB0aGlzLl9zb3VyY2VNYXBCeVN0eWxlU2hlZXRVUkwgPSB7fTsKICAgICB0aGlzLl9jc3NVUkxz
Rm9yU0FTU1VSTCA9IHt9OwogICAgIHRoaXMuX3RpbWVvdXRGb3JVUkwgPSB7fTsKICAgICBXZWJJ
bnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5SZXNvdXJjZUFkZGVkLCB0aGlzLl9yZXNvdXJj
ZUFkZGVkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgdGhpcy5f
ZmlsZVNhdmVGaW5pc2hlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRXZlbnRzLlN0eWxlU2hlZXRD
aGFuZ2VkLCB0aGlzLl9zdHlsZVNoZWV0Q2hhbmdlZCwgdGhpcyk7CiAgICAgdGhpcy5fd29ya3Nw
YWNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLldvcmtzcGFjZS5FdmVudHMuUHJvamVj
dFdpbGxSZXNldCwgdGhpcy5fcmVzZXQsIHRoaXMpOwogfQogCkBAIC02NSw2ICs2NywyNiBAQCBX
ZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgIC8qKgogICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAogICAgICAqLworICAgIF9zdHls
ZVNoZWV0Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgaXNBZGRp
bmdSZXZpc2lvbiA9IHRoaXMuX2lzQWRkaW5nUmV2aXNpb247CisgICAgICAgIGRlbGV0ZSB0aGlz
Ll9pc0FkZGluZ1JldmlzaW9uOworCisgICAgICAgIGlmIChpc0FkZGluZ1JldmlzaW9uKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwucmVzb3VyY2VC
aW5kaW5nKCkucmVxdWVzdFJlc291cmNlVVJMRm9yU3R5bGVTaGVldElkKGV2ZW50LmRhdGEuc3R5
bGVTaGVldElkLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKKworICAgICAgICBmdW5jdGlvbiBjYWxs
YmFjayh1cmwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghdXJsKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5zZXRTb3VyY2VN
YXBwaW5nKHVybCwgbnVsbCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50CisgICAgICovCiAgICAgX2ZpbGVTYXZl
RmluaXNoZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IGFkZCBz
dXBwb3J0IGZvciBGaWxlTWFwcGluZy4KQEAgLTk4LDcgKzEyMCwxMCBAQCBXZWJJbnNwZWN0b3Iu
U0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIXVpU291cmNlQ29k
ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdmFyIG5ld0NvbnRlbnQgPSBJbnNwZWN0
b3JGcm9udGVuZEhvc3QubG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwpOworICAgICAgICB0
aGlzLl9pc0FkZGluZ1JldmlzaW9uID0gdHJ1ZTsKICAgICAgICAgdWlTb3VyY2VDb2RlLmFkZFJl
dmlzaW9uKG5ld0NvbnRlbnQpOworICAgICAgICAvLyB0aGlzLl9pc0FkZGluZ1JldmlzaW9uIHdp
bGwgYmUgZGVsZXRlZCBpbiB0aGlzLl9zdHlsZVNoZWV0Q2hhbmdlZCgpLgorICAgICAgICB0aGlz
Ll9sb2FkQW5kUHJvY2Vzc1NvdXJjZU1hcChuZXdDb250ZW50LCB1cmwsIHRydWUpOwogICAgIH0s
CiAKICAgICAvKioKQEAgLTExNyw1NCArMTQyLDM1IEBAIFdlYkluc3BlY3Rvci5TQVNTU291cmNl
TWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAqLwogICAgICAgICBmdW5jdGlvbiBkaWRS
ZXF1ZXN0Q29udGVudChjb250ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghY29udGVudCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB2YXIgbGluZXMgPSBjb250ZW50LnNwbGl0KC9ccj9cbi8pOwotICAgICAgICAg
ICAgdmFyIGRlYnVnSW5mb1JlZ2V4ID0gL0BtZWRpYVxzXC1zYXNzXC1kZWJ1Z1wtaW5mb3tmaWxl
bmFtZXtmb250LWZhbWlseTooW159XSspfWxpbmV7Zm9udC1mYW1pbHk6XFwwMDAwKFxkXGQpKFte
fV0qKX19L2k7Ci0gICAgICAgICAgICB2YXIgbGluZU51bWJlcnNSZWdleCA9IC9cL1wqXHMrbGlu
ZVxzKyhbMC05XSspLFxzKyhbXipcL10rKS87Ci0gICAgICAgICAgICBmb3IgKHZhciBsaW5lTnVt
YmVyID0gMDsgbGluZU51bWJlciA8IGxpbmVzLmxlbmd0aDsgKytsaW5lTnVtYmVyKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIG1hdGNoID0gZGVidWdJbmZvUmVnZXguZXhlYyhsaW5lc1tsaW5lTnVt
YmVyXSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciB1cmwgPSBtYXRjaFsxXS5yZXBsYWNlKC9cXCguKS9nLCAiJDEiKTsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGxpbmUgPSBwYXJzZUludChkZWNvZGVVUkkoIiUiICsgbWF0Y2hbMl0pICsg
bWF0Y2hbM10sIDEwKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkVVJMTWFwcGluZyh1
cmwsIGxpbmUsIHJlc291cmNlLnVybCwgbGluZU51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtYXRjaCA9IGxp
bmVOdW1iZXJzUmVnZXguZXhlYyhsaW5lc1tsaW5lTnVtYmVyXSk7Ci0gICAgICAgICAgICAgICAg
aWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IG1hdGNoWzJd
LnRyaW0oKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBwYXJzZUludChtYXRjaFsx
XSwgMTApOwotICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gcmVzb3VyY2UudXJsOwotICAg
ICAgICAgICAgICAgICAgICBpZiAodXJsLmVuZHNXaXRoKCIvIiArIHJlc291cmNlLnBhcnNlZFVS
TC5sYXN0UGF0aENvbXBvbmVudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwu
c3Vic3RyaW5nKDAsIHVybC5sZW5ndGggLSByZXNvdXJjZS5wYXJzZWRVUkwubGFzdFBhdGhDb21w
b25lbnQubGVuZ3RoKSArIGZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICB1cmwgPSBmaWxlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5fYWRkVVJMTWFwcGluZyh1cmwsIGxpbmUsIHJlc291cmNlLnVybCwgbGluZU51bWJlcik7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2xvYWRBbmRQcm9jZXNzU291cmNlTWFwKGNvbnRl
bnQsIHJlc291cmNlLnVybCk7CiAgICAgICAgIH0KICAgICAgICAgcmVzb3VyY2UucmVxdWVzdENv
bnRlbnQoZGlkUmVxdWVzdENvbnRlbnQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZQot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSByYXdVUkwKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gcmF3
TGluZQorICAgICAqIEBwYXJhbSB7P3N0cmluZ30gY29udGVudAorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBjc3NVUkwKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBmb3JjZVJlYmluZAogICAgICAq
LwotICAgIF9hZGRVUkxNYXBwaW5nOiBmdW5jdGlvbih1cmwsIGxpbmUsIHJhd1VSTCwgcmF3TGlu
ZSkKKyAgICBfbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXA6IGZ1bmN0aW9uKGNvbnRlbnQsIGNzc1VS
TCwgZm9yY2VSZWJpbmQpCiAgICAgewotICAgICAgICB2YXIgdXJpID0gV2ViSW5zcGVjdG9yLmZp
bGVNYXBwaW5nLnVyaUZvclVSTCh1cmwpOwotICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5maWxl
TWFwcGluZy5oYXNNYXBwaW5nRm9yVVJMKHVybCkgJiYgIXRoaXMuX3dvcmtzcGFjZS51aVNvdXJj
ZUNvZGVGb3JVUkkodXJpKSkgewotICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBJbnNwZWN0b3JG
cm9udGVuZEhvc3QubG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwpOwotICAgICAgICAgICAg
dmFyIGNvbnRlbnRQcm92aWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdGljQ29udGVudFByb3Zp
ZGVyKFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQsIGNvbnRlbnQsICJ0ZXh0
L3gtc2NzcyIpOwotICAgICAgICAgICAgdGhpcy5fbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyLmFk
ZEZpbGVGb3JVUkwodXJsLCBjb250ZW50UHJvdmlkZXIsIHRydWUpOworICAgICAgICBpZiAoIWNv
bnRlbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBsaW5lcyA9IGNvbnRlbnQu
c3BsaXQoL1xyP1xuLyk7CisgICAgICAgIGlmICghbGluZXMubGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGNvbnN0IHNvdXJjZU1hcFJlZ2V4ID0gL15cL1wqQCBzb3VyY2VN
YXBwaW5nVVJMPShbXlxzXSspXHMqXCpcLyQvOworICAgICAgICB2YXIgbGFzdExpbmUgPSBsaW5l
c1tsaW5lcy5sZW5ndGggLSAxXTsKKyAgICAgICAgdmFyIG1hdGNoID0gbGFzdExpbmUubWF0Y2go
c291cmNlTWFwUmVnZXgpOworICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLmxvYWRTb3VyY2VNYXBGb3JTdHlsZVNo
ZWV0KG1hdGNoWzFdLCBjc3NVUkwsIGZvcmNlUmViaW5kKTsKKyAgICAgICAgaWYgKHNvdXJjZU1h
cCAmJiAoZm9yY2VSZWJpbmQgfHwgIXRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVSTFtjc3NV
UkxdKSkgeworICAgICAgICAgICAgdGhpcy5fc291cmNlTWFwQnlTdHlsZVNoZWV0VVJMW2Nzc1VS
TF0gPSBzb3VyY2VNYXA7CisgICAgICAgICAgICB0aGlzLl9iaW5kVUlTb3VyY2VDb2RlKGNzc1VS
TCwgc291cmNlTWFwKTsKICAgICAgICAgfQotICAgICAgICB2YXIgcmF3TG9jYXRpb25TdHJpbmcg
PSByYXdVUkwgKyAiOiIgKyAocmF3TGluZSArIDEpOyAgLy8gTmV4dCBsaW5lIGFmdGVyIG1hcHBp
bmcgbWV0YWluZm8KLSAgICAgICAgdGhpcy5fbWFwcGluZ0VudHJpZXNbcmF3TG9jYXRpb25TdHJp
bmddID0gbmV3IFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5NYXBwaW5nRW50cnkodXJp
LCBsaW5lIC0gMSwgMCk7Ci0gICAgICAgIHRoaXMuX2FkZENTU1VSTGZvclNBU1NVUkwocmF3VVJM
LCB1cmwpOwotICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuc2V0U291cmNlTWFwcGluZyhy
YXdVUkwsIHRoaXMpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTE4NSwyNiArMTkxLDc0IEBAIFdl
Ykluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAg
IC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VNYXBVUkwKKyAgICAgKiBAcGFyYW0g
e3N0cmluZ30gc3R5bGVTaGVldFVSTAorICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGZvcmNlUmVs
b2FkCisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXB9
CisgICAgICovCisgICAgbG9hZFNvdXJjZU1hcEZvclN0eWxlU2hlZXQ6IGZ1bmN0aW9uKHNvdXJj
ZU1hcFVSTCwgc3R5bGVTaGVldFVSTCwgZm9yY2VSZWxvYWQpCisgICAgeworICAgICAgICB2YXIg
Y29tcGxldGVTdHlsZVNoZWV0VVJMID0gV2ViSW5zcGVjdG9yLlBhcnNlZFVSTC5jb21wbGV0ZVVS
TChXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZVVSTCwgc3R5bGVTaGVldFVSTCk7CisgICAgICAg
IGlmICghY29tcGxldGVTdHlsZVNoZWV0VVJMKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgIHZhciBjb21wbGV0ZVNvdXJjZU1hcFVSTCA9IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwu
Y29tcGxldGVVUkwoY29tcGxldGVTdHlsZVNoZWV0VVJMLCBzb3VyY2VNYXBVUkwpOworICAgICAg
ICBpZiAoIWNvbXBsZXRlU291cmNlTWFwVVJMKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLl9zb3VyY2VNYXBCeVVSTFtjb21wbGV0ZVNvdXJj
ZU1hcFVSTF07CisgICAgICAgIGlmIChzb3VyY2VNYXAgJiYgIWZvcmNlUmVsb2FkKQorICAgICAg
ICAgICAgcmV0dXJuIHNvdXJjZU1hcDsKKyAgICAgICAgdmFyIHBheWxvYWQgPSBXZWJJbnNwZWN0
b3IuU291cmNlTWFwLmxvYWRQYXlsb2FkKGNvbXBsZXRlU291cmNlTWFwVVJMKTsKKyAgICAgICAg
aWYgKCFwYXlsb2FkKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciBiYXNl
VVJMID0gc291cmNlTWFwVVJMLnN0YXJ0c1dpdGgoImRhdGE6IikgPyBjb21wbGV0ZVN0eWxlU2hl
ZXRVUkwgOiBjb21wbGV0ZVNvdXJjZU1hcFVSTDsKKyAgICAgICAgc291cmNlTWFwID0gbmV3IFdl
Ykluc3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNlTWFwKGJhc2VVUkwsIHBheWxvYWQpOworICAg
ICAgICB0aGlzLl9zb3VyY2VNYXBCeVVSTFtjb21wbGV0ZVNvdXJjZU1hcFVSTF0gPSBzb3VyY2VN
YXA7CisgICAgICAgIHJldHVybiBzb3VyY2VNYXA7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEBwYXJhbSB7c3RyaW5nfSByYXdVUkwKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qb3Np
dGlvbkJhc2VkU291cmNlTWFwfSBzb3VyY2VNYXAKKyAgICAgKi8KKyAgICBfYmluZFVJU291cmNl
Q29kZTogZnVuY3Rpb24ocmF3VVJMLCBzb3VyY2VNYXApCisgICAgeworICAgICAgICB2YXIgc291
cmNlcyA9IHNvdXJjZU1hcC5zb3VyY2VzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c291cmNlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHVybCA9IHNvdXJjZXNbaV07
CisgICAgICAgICAgICB2YXIgdXJpID0gV2ViSW5zcGVjdG9yLmZpbGVNYXBwaW5nLnVyaUZvclVS
TCh1cmwpOworICAgICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcuaGFzTWFw
cGluZ0ZvclVSTCh1cmwpICYmICF0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9yVVJJKHVy
aSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IEluc3BlY3RvckZyb250ZW5kSG9z
dC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCk7CisgICAgICAgICAgICAgICAgdmFyIGNv
bnRlbnRQcm92aWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdGljQ29udGVudFByb3ZpZGVyKFdl
Ykluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQsIGNvbnRlbnQsICJ0ZXh0L3gtc2Nz
cyIpOworICAgICAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl9uZXR3b3JrV29y
a3NwYWNlUHJvdmlkZXIuYWRkRmlsZUZvclVSTCh1cmwsIGNvbnRlbnRQcm92aWRlciwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgdWlTb3VyY2VDb2RlLnNldFNvdXJjZU1hcHBpbmcodGhpcyk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fYWRkQ1NTVVJMZm9yU0FTU1VSTChyYXdVUkwsIHVybCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwu
c2V0U291cmNlTWFwcGluZyhyYXdVUkwsIHRoaXMpOworICAgIH0sCisKKyAgICAvKioKICAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SYXdMb2NhdGlvbn0gcmF3TG9jYXRpb24KICAgICAgKiBA
cmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KICAgICAgKi8KICAgICByYXdMb2NhdGlv
blRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCiAgICAgewogICAgICAgICB2YXIg
bG9jYXRpb24gPSAvKiogQHR5cGUgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uICovIChyYXdMb2Nh
dGlvbik7Ci0gICAgICAgIHZhciBtYXBwaW5nRW50cnkgPSB0aGlzLl9tYXBwaW5nRW50cmllc1ts
b2NhdGlvbi51cmwgKyAiOiIgKyBsb2NhdGlvbi5saW5lTnVtYmVyXTsKLSAgICAgICAgdmFyIHVp
TG9jYXRpb24gPSBudWxsOwotICAgICAgICBpZiAobWFwcGluZ0VudHJ5KSB7Ci0gICAgICAgICAg
ICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSSSht
YXBwaW5nRW50cnkudXJpKTsKLSAgICAgICAgICAgIGlmICh1aVNvdXJjZUNvZGUpCi0gICAgICAg
ICAgICAgICAgdWlMb2NhdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJj
ZUNvZGUsIG1hcHBpbmdFbnRyeS5saW5lTnVtYmVyLCBtYXBwaW5nRW50cnkuY29sdW1uTnVtYmVy
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXVpTG9jYXRpb24pIHsKLSAgICAgICAgICAgIHZh
ciB1cmkgPSBXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcudXJpRm9yVVJMKGxvY2F0aW9uLnVybCk7
Ci0gICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNl
Q29kZUZvclVSSSh1cmkpOwotICAgICAgICAgICAgaWYgKHVpU291cmNlQ29kZSkKLSAgICAgICAg
ICAgICAgICB1aUxvY2F0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNl
Q29kZSwgbG9jYXRpb24ubGluZU51bWJlciwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHVpTG9jYXRpb247CisgICAgICAgIHZhciBlbnRyeTsKKyAgICAgICAgdmFyIHVpU291cmNlQ29k
ZTsKKyAgICAgICAgdmFyIHNvdXJjZU1hcCA9IHRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVS
TFtsb2NhdGlvbi51cmxdOworICAgICAgICBpZiAoIXNvdXJjZU1hcCkKKyAgICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICBlbnRyeSA9IHNvdXJjZU1hcC5maW5kRW50cnkobG9jYXRpb24u
bGluZU51bWJlciwgbG9jYXRpb24uY29sdW1uTnVtYmVyKTsKKyAgICAgICAgaWYgKCFlbnRyeSkK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB2YXIgdXJpID0gV2ViSW5zcGVjdG9y
LmZpbGVNYXBwaW5nLnVyaUZvclVSTChlbnRyeVsyXSk7CisgICAgICAgIHVpU291cmNlQ29kZSA9
IHRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkkodXJpKTsKKyAgICAgICAgaWYgKCF1
aVNvdXJjZUNvZGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgZW50cnlbM10sIGVudHJ5
WzRdKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0yMTYsMjUgKzI3MCwxMyBAQCBXZWJJbnNwZWN0
b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgIHVpTG9jYXRpb25Ub1Jhd0xv
Y2F0aW9uOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikK
ICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyB3aGVuIHVpIC0+IHJhdyBt
YXBwaW5nIGhhcyBjbGllbnRzLgotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DU1NM
b2NhdGlvbih1aVNvdXJjZUNvZGUudXJsIHx8ICIiLCBsaW5lTnVtYmVyKTsKKyAgICAgICAgcmV0
dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24odWlTb3VyY2VDb2RlLnVybCB8fCAiIiwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKICAgICB9LAogCiAgICAgX3Jlc2V0OiBmdW5jdGlv
bigpCiAgICAgewotICAgICAgICB0aGlzLl9tYXBwaW5nRW50cmllcyA9IHt9OworICAgICAgICB0
aGlzLl9zb3VyY2VNYXBCeVVSTCA9IHt9OworICAgICAgICB0aGlzLl9zb3VyY2VNYXBCeVN0eWxl
U2hlZXRVUkwgPSB7fTsKICAgICAgICAgdGhpcy5fcG9wdWxhdGUoKTsKICAgICB9CiB9Ci0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJpCi0gKiBAcGFyYW0ge251
bWJlcn0gbGluZU51bWJlcgotICovCi1XZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcuTWFw
cGluZ0VudHJ5ID0gZnVuY3Rpb24odXJpLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCi17Ci0g
ICAgdGhpcy51cmkgPSB1cmk7Ci0gICAgdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAg
ICB0aGlzLmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKLX0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZU1hcC5qcwppbmRleCAyZDRlMTNiNTIzNjU2
OWJiYjFlNjQwNzI3MDZiNDZkNTQxYjM0MDE4Li4xODc0YjU4NDU2NDA4NjI5YjNjNzdhMmMwZGEx
NTMwMTA2NDIxNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZU1hcC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZU1hcC5qcwpAQCAtNTEsNiArNTEsMjYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcCA9
IGZ1bmN0aW9uKHNvdXJjZU1hcHBpbmdVUkwsIHBheWxvYWQpCiAgICAgdGhpcy5fcGFyc2VNYXBw
aW5nUGF5bG9hZChwYXlsb2FkKTsKIH0KIAorLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsCisg
KiBAcmV0dXJuIHtTb3VyY2VNYXBWM30KKyAqLworV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5sb2Fk
UGF5bG9hZCA9IGZ1bmN0aW9uKHVybCkKK3sKKyAgICB0cnkgeworICAgICAgICAvLyBGSVhNRTog
bWFrZSBzZW5kUmVxdWVzdCBhc3luYy4KKyAgICAgICAgdmFyIHJlc3BvbnNlID0gSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsKTsKKyAgICAgICAgaWYg
KCFyZXNwb25zZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBpZiAocmVzcG9u
c2Uuc2xpY2UoMCwgMykgPT09ICIpXX0iKQorICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25z
ZS5zdWJzdHJpbmcocmVzcG9uc2UuaW5kZXhPZignXG4nKSk7CisgICAgICAgIHJldHVybiAvKiog
QHR5cGUge1NvdXJjZU1hcFYzfSAqLyAoSlNPTi5wYXJzZShyZXNwb25zZSkpOworICAgIH0gY2F0
Y2goZSkgeworICAgICAgICBjb25zb2xlLmVycm9yKGUubWVzc2FnZSk7CisgICAgICAgIHJldHVy
biBudWxsOworICAgIH0KK30KKwogV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUgPSB7
CiAgICAgLyoqCiAgICAgICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjNlYTE1
OWNjMjVmMjU1MWE2ODIwNmI3ZjBhNGIwMGY0NDljODI1ZC4uNGE5NzE5MmU4NDM2YmFmNGQ5ZmM5
OGU4NzdlMzJkM2FiYzg0ZGY0MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEzLTAyLTA4ICBB
bGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogSW1wbGVtZW50IHBvc2l0aW9uLWJhc2VkIHNvdXJjZW1hcHBpbmcgZm9yIHN0eWxl
c2hlZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDkxNjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGh0dHAvdGVzdHMvaW5zcGVjdG9yL3N0eWxlc2hlZXQtc291cmNlLW1hcHBpbmctZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9zdHlsZXNoZWV0LXNv
dXJjZS1tYXBwaW5nLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAyLTA4ICBNYXR0IEZhbGtlbmhhZ2Vu
ICA8ZmFsa2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVucmV2aWV3ZWQg
Z2FyZGVuaW5nLiBBZGp1c3RpbmcgZXhwZWN0YXRpb25zIGZvciB0d28gaGlkcGkgdGVzdHMuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9zdHlsZXNoZWV0LXNv
dXJjZS1tYXBwaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL3N0eWxlc2hlZXQtc291cmNlLW1hcHBpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZm
ZDJkODNiNjBiNzA3YzI5MjFkYjc3Y2QzNjNmYmQ1OTQxNTg2YTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9zdHlsZXNoZWV0LXNvdXJjZS1tYXBw
aW5nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1Rlc3RzIFBvc2l0aW9uQmFzZWRTb3Vy
Y2VNYXAgYW5kIFN0eWxlU2hlZXRNYXBwaW5nLgorCisKK1J1bm5pbmc6IHRlc3RTdHlsZVNoZWV0
TWFwcGluZworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9z
dHlsZXNoZWV0LXNvdXJjZS1tYXBwaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2lu
c3BlY3Rvci9zdHlsZXNoZWV0LXNvdXJjZS1tYXBwaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTU0Y2Nj
ZTQ5OWNmNmQ4OTRjODMwMTJmNTJiZGM2MzhmMmRkNWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3N0eWxlc2hlZXQtc291cmNlLW1hcHBpbmcu
aHRtbApAQCAtMCwwICsxLDExMCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJpbnNw
ZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iZGVidWdnZXItdGVzdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0id29ya3NwYWNlLXRlc3QuanMiPjwvc2NyaXB0PgorCis8
c2NyaXB0PgorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB2YXIgc3R5bGVzU291cmNlTWFwcGlu
ZzsKKworICAgIGZ1bmN0aW9uIGNyZWF0ZVN0eWxlU2hlZXRNYXBwaW5nKCkKKyAgICB7CisgICAg
ICAgIEluc3BlY3RvclRlc3QuY3JlYXRlV29ya3NwYWNlKCk7CisgICAgICAgIHZhciBzYXNzU291
cmNlTWFwcGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcoSW5zcGVjdG9y
VGVzdC50ZXN0V29ya3NwYWNlLCBJbnNwZWN0b3JUZXN0LnRlc3ROZXR3b3JrV29ya3NwYWNlUHJv
dmlkZXIpOworICAgICAgICBzdHlsZXNTb3VyY2VNYXBwaW5nID0gbmV3IFdlYkluc3BlY3Rvci5T
dHlsZXNTb3VyY2VNYXBwaW5nKEluc3BlY3RvclRlc3QudGVzdFdvcmtzcGFjZSk7CisgICAgICAg
IHJldHVybiBzYXNzU291cmNlTWFwcGluZzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja01h
cHBpbmcoY29tcGlsZWRMaW5lTnVtYmVyLCBjb21waWxlZENvbHVtbk51bWJlciwgc291cmNlVVJM
LCBzb3VyY2VMaW5lTnVtYmVyLCBzb3VyY2VDb2x1bW5OdW1iZXIsIG1hcHBpbmcpCisgICAgewor
ICAgICAgICB2YXIgZW50cnkgPSBtYXBwaW5nLmZpbmRFbnRyeShjb21waWxlZExpbmVOdW1iZXIs
IGNvbXBpbGVkQ29sdW1uTnVtYmVyKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVh
bHMoc291cmNlVVJMLCBlbnRyeVsyXSk7CisgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1
YWxzKHNvdXJjZUxpbmVOdW1iZXIsIGVudHJ5WzNdKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5h
c3NlcnRFcXVhbHMoc291cmNlQ29sdW1uTnVtYmVyLCBlbnRyeVs0XSk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gY3JlYXRlTW9ja1N0eWxlU2hlZXRSZXNvdXJjZSh1cmwsIG1pbWVUeXBlLCBjb250
ZW50KQorICAgIHsKKyAgICAgICAgY29uc3QgZG9jdW1lbnRVUkwgPSAiaHR0cDovL2xvY2FsaG9z
dDo4MDAwL2luc3BlY3Rvci9zdHlsZXNoZWV0LXNvdXJjZS1tYXBwaW5nLmh0bWwiOworICAgICAg
ICBjb25zdCBmcmFtZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5tYWluRnJhbWU7
CisgICAgICAgIHZhciByZXNvdXJjZSA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2UobnVsbCwg
dXJsLCBkb2N1bWVudFVSTCwgZnJhbWUuaWQsIGZyYW1lLmxvYWRlcklkLCBXZWJJbnNwZWN0b3Iu
cmVzb3VyY2VUeXBlcy5TdHlsZXNoZWV0LCBtaW1lVHlwZSk7CisgICAgICAgIHJlc291cmNlLnJl
cXVlc3RDb250ZW50ID0gZnVuY3Rpb24oY2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrKGNvbnRlbnQsIGZhbHNlLCBtaW1lVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJlc291cmNlOworICAgIH0KKworICAgIEluc3BlY3RvclRlc3QucnVuVGVzdFN1aXRl
KFsKKyAgICAgICAgZnVuY3Rpb24gdGVzdFN0eWxlU2hlZXRNYXBwaW5nKG5leHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHZhciBtYXBwaW5nID0gY3JlYXRlU3R5bGVTaGVldE1hcHBpbmcoKTsK
KyAgICAgICAgICAgIHN0ZXAxKCk7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHN0ZXAxKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LndhaXRGb3JXb3Jrc3Bh
Y2VVSVNvdXJjZUNvZGVBZGRlZEV2ZW50KGNzc1VJU291cmNlQ29kZUFkZGVkKTsKKyAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZE1vY2tVSVNvdXJjZUNvZGVUb1dvcmtzcGFjZSgiaHR0
cDovL2xvY2FsaG9zdDo4MDAwL2luc3BlY3Rvci9yZXNvdXJjZXMvZXhhbXBsZS5jc3MiLCBXZWJJ
bnNwZWN0b3IucmVzb3VyY2VUeXBlcy5TdHlsZXNoZWV0LCAiIik7CisgICAgICAgICAgICAgICAg
dmFyIGV2ZW50ID0geyBkYXRhOiBjcmVhdGVNb2NrU3R5bGVTaGVldFJlc291cmNlKCJodHRwOi8v
bG9jYWxob3N0OjgwMDAvaW5zcGVjdG9yL3Jlc291cmNlcy9leGFtcGxlLmNzcyIsICJ0ZXh0L2Nz
cyIsCisgICAgICAgICAgICAgICAgICAgICJhIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAi
ICBmb286IGJhcjtcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAvKiBTT01FIENPTU1FTlQg
Ki9cbiIgKworICAgICAgICAgICAgICAgICAgICAiICBmb250LXNpemU6IDEycHg7IH1cblxuIiAr
CisgICAgICAgICAgICAgICAgICAgICIvKkAgc291cmNlTWFwcGluZ1VSTD1leGFtcGxlLmNzcy5t
YXAgKi8iKSB9OworICAgICAgICAgICAgICAgIHN0eWxlc1NvdXJjZU1hcHBpbmcuX3Jlc291cmNl
QWRkZWQoZXZlbnQpOworICAgICAgICAgICAgICAgIG1hcHBpbmcuX3Jlc291cmNlQWRkZWQoZXZl
bnQpOworICAgICAgICAgICAgICAgIGFmdGVyU3R5bGVTaGVldEFkZGVkKCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNzc1VJU291cmNlQ29kZUFkZGVkKHVpU291cmNl
Q29kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LndhaXRG
b3JXb3Jrc3BhY2VVSVNvdXJjZUNvZGVBZGRlZEV2ZW50KHNjc3NVSVNvdXJjZUNvZGVBZGRlZCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNjc3NVSVNvdXJjZUNvZGVB
ZGRlZCh1aVNvdXJjZUNvZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZ1bmN0aW9uIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKGxpbmUsIGNvbHVtbiwgdXJs
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY3Nz
TW9kZWwucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24obmV3IFdlYkluc3BlY3Rvci5DU1NMb2NhdGlv
bigiaHR0cDovL2xvY2FsaG9zdDo4MDAwL2luc3BlY3Rvci9yZXNvdXJjZXMvZXhhbXBsZS5jc3Mi
LCBsaW5lLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24g
YWZ0ZXJTdHlsZVNoZWV0QWRkZWQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZh
ciBjc3NVSVNvdXJjZUNvZGUgPSBJbnNwZWN0b3JUZXN0LnRlc3RXb3Jrc3BhY2UudWlTb3VyY2VD
b2RlRm9yT3JpZ2luVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwMDAvaW5zcGVjdG9yL3Jlc291cmNl
cy9leGFtcGxlLmNzcyIpOworICAgICAgICAgICAgICAgIHZhciBzY3NzVUlTb3VyY2VDb2RlID0g
SW5zcGVjdG9yVGVzdC50ZXN0V29ya3NwYWNlLnVpU291cmNlQ29kZUZvck9yaWdpblVSTCgiaHR0
cDovL2xvY2FsaG9zdDo4MDAwL2luc3BlY3Rvci9yZXNvdXJjZXMvZXhhbXBsZS5zY3NzIik7CisK
KyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrVUlMb2NhdGlvbihzY3NzVUlTb3Vy
Y2VDb2RlLCAwLCAwLCByYXdMb2NhdGlvblRvVUlMb2NhdGlvbigwLCAwKSk7CisgICAgICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24oc2Nzc1VJU291cmNlQ29kZSwgMSwg
MiwgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oMSwgNCkpOworICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuY2hlY2tVSUxvY2F0aW9uKHNjc3NVSVNvdXJjZUNvZGUsIDEsIDUsIHJhd0xvY2F0
aW9uVG9VSUxvY2F0aW9uKDEsIDYpKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNo
ZWNrVUlMb2NhdGlvbihzY3NzVUlTb3VyY2VDb2RlLCAxLCA3LCByYXdMb2NhdGlvblRvVUlMb2Nh
dGlvbigxLCA5KSk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRp
b24oc2Nzc1VJU291cmNlQ29kZSwgMSwgMTAsIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKDIsIDcp
KTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrVUlMb2NhdGlvbihzY3NzVUlT
b3VyY2VDb2RlLCAzLCAyLCByYXdMb2NhdGlvblRvVUlMb2NhdGlvbigzLCA4KSk7CisKKyAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrVUlMb2NhdGlvbihzY3NzVUlTb3VyY2VDb2Rl
LCAzLCAxMSwgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oMywgMTEpKTsKKyAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmNoZWNrVUlMb2NhdGlvbihzY3NzVUlTb3VyY2VDb2RlLCAzLCAxMywg
cmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oMywgMTUpKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmNoZWNrVUlMb2NhdGlvbihzY3NzVUlTb3VyY2VDb2RlLCAzLCAxNywgcmF3TG9jYXRp
b25Ub1VJTG9jYXRpb24oMywgMjApKTsKKyAgICAgICAgICAgICAgICBzY3NzVUlTb3VyY2VDb2Rl
LnJlcXVlc3RDb250ZW50KGRpZFJlcXVlc3RDb250ZW50KTsKKworICAgICAgICAgICAgICAgIGZ1
bmN0aW9uIGRpZFJlcXVlc3RDb250ZW50KGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlw
ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0RXF1YWxzKDAsIGNvbnRlbnQuaW5kZXhPZigiYSB7IikpOworICAgICAgICAgICAgICAg
ICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgXSk7Cit9CisKKzwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVu
VGVzdCgpIj4KKzxwPlRlc3RzIFBvc2l0aW9uQmFzZWRTb3VyY2VNYXAgYW5kIFN0eWxlU2hlZXRN
YXBwaW5nLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187291</attachid>
            <date>2013-02-08 04:46:55 -0800</date>
            <delta_ts>2013-02-11 01:57:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109168-20130208164329.patch</filename>
            <type>text/plain</type>
            <size>27970</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUxNWUzOTRkZDExMjM0
OTIxOTY4ZjlhNGJkNTRhMzQzNWM4NDdmNC4uNDQ3ODg3NTIzOWQxYjhhZDRhNDRhYWE3MzM5MTM5
ZjcyMWFmOTAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTAyLTA4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IHBvc2l0aW9uLWJhc2VkIHNvdXJjZW1hcHBpbmcgZm9yIHN0eWxlc2hl
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkx
NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGNoYW5nZSBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHBvc2l0aW9uLWJhc2VkIHNvdXJjZSBtYXBz
IGZvciBDU1Mgc3R5bGVzaGVldHMuCisgICAgICAgIFNvdXJjZW1hcHMgYW5kIG9yaWdpbmF0aW5n
IHJlc291cmNlcyAoc2Fzcywgc2NzcywgZXRjLikgYXJlIGxvYWRlZCBzeW5jaHJvbm91c2x5Cisg
ICAgICAgIHVwb24gdGhlIENTUyBVSVNvdXJjZUNvZGUgYWRkaXRpb24uCisKKyAgICAgICAgVGVz
dDogaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVldC1zb3VyY2UtbWFwcGluZy5odG1sCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuc2V0U291cmNlTWFwcGluZyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUucmF3TG9jYXRp
b25Ub1VJTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuTGl2
ZUxvY2F0aW9uLnByb3RvdHlwZS51aUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
U1NMb2NhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnBhcnNlUGF5bG9hZCk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ29tcGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9y
U2NyaXB0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5n
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUuX3N0eWxlU2hlZXRDaGFu
Z2VkLmNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5w
cm90b3R5cGUuX3N0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNT
U291cmNlTWFwcGluZy5wcm90b3R5cGUuX3JlbG9hZENTUyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9yZXNvdXJjZUFkZGVkLmRpZFJlcXVlc3RD
b250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5
cGUuX3Jlc291cmNlQWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBw
aW5nLnByb3RvdHlwZS5fbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXApOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9yU3R5bGVT
aGVldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBl
Ll9iaW5kVUlTb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFw
cGluZy5wcm90b3R5cGUucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9y
ZXNldCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLmxvYWRQYXlsb2FkKToKKwogMjAxMy0wMi0wOCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0MTY5NSBhbmQgcjE0MTY5Ny4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwppbmRleCA2N2I4
N2M5NDhjZGEyNTFmN2IxMjhlYzQzYWI5M2Y2MWI0YzdjYmYxLi5iN2NmMDYyYjMzNGMxOWM1ODM1
OTRiMDQ1YTAzNGExM2E0MTQ3MTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCkBAIC00OTQsNyArNDk0LDEwIEBAIFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBzZXRTb3Vy
Y2VNYXBwaW5nOiBmdW5jdGlvbih1cmwsIHNvdXJjZU1hcHBpbmcpCiAgICAgewotICAgICAgICB0
aGlzLl9zb3VyY2VNYXBwaW5nc1t1cmxdID0gc291cmNlTWFwcGluZzsKKyAgICAgICAgaWYgKHNv
dXJjZU1hcHBpbmcpCisgICAgICAgICAgICB0aGlzLl9zb3VyY2VNYXBwaW5nc1t1cmxdID0gc291
cmNlTWFwcGluZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NvdXJj
ZU1hcHBpbmdzW3VybF07CiAgICAgICAgIHRoaXMuX3VwZGF0ZUxvY2F0aW9ucygpOwogICAgIH0s
CiAKQEAgLTUxNSw2ICs1MTgsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5
cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNT
U1J1bGV9IGNzc1J1bGUKICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5VSUxv
Y2F0aW9uKTooYm9vbGVhbnx1bmRlZmluZWQpfSB1cGRhdGVEZWxlZ2F0ZQogICAgICAqIEByZXR1
cm4gez9XZWJJbnNwZWN0b3IuTGl2ZUxvY2F0aW9ufQogICAgICAqLwpAQCAtNTM0LDEwICs1Mzgs
MTcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlID0gewogICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9ufSByYXdMb2NhdGlvbgogICAgICAqIEByZXR1
cm4gez9XZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KICAgICAgKi8KLSAgICBfcmF3TG9jYXRpb25U
b1VJTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0aW9uKQorICAgIHJhd0xvY2F0aW9uVG9VSUxv
Y2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKICAgICB7CiAgICAgICAgIHZhciBzb3VyY2VN
YXBwaW5nID0gdGhpcy5fc291cmNlTWFwcGluZ3NbcmF3TG9jYXRpb24udXJsXTsKLSAgICAgICAg
cmV0dXJuIHNvdXJjZU1hcHBpbmcgPyBzb3VyY2VNYXBwaW5nLnJhd0xvY2F0aW9uVG9VSUxvY2F0
aW9uKHJhd0xvY2F0aW9uKSA6IG51bGw7CisgICAgICAgIGlmICghc291cmNlTWFwcGluZykgewor
ICAgICAgICAgICAgdmFyIHVyaSA9IFdlYkluc3BlY3Rvci5maWxlTWFwcGluZy51cmlGb3JVUkwo
cmF3TG9jYXRpb24udXJsKTsKKyAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSBXZWJJbnNw
ZWN0b3Iud29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSSSh1cmkpOworICAgICAgICAgICAgaWYg
KCF1aVNvdXJjZUNvZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgcmF3TG9j
YXRpb24ubGluZU51bWJlciwgcmF3TG9jYXRpb24uY29sdW1uTnVtYmVyKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gc291cmNlTWFwcGluZy5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihyYXdM
b2NhdGlvbik7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtNTg0LDcgKzU5NSw3IEBAIFdlYkluc3Bl
Y3Rvci5DU1NTdHlsZU1vZGVsLkxpdmVMb2NhdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgdWlMb2Nh
dGlvbjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIGNzc0xvY2F0aW9uID0gLyoqIEB0
eXBlIFdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiAqLyAodGhpcy5yYXdMb2NhdGlvbigpKTsKLSAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5fcmF3TG9jYXRpb25Ub1VJTG9jYXRp
b24oY3NzTG9jYXRpb24pOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmNzc01vZGVsLnJh
d0xvY2F0aW9uVG9VSUxvY2F0aW9uKGNzc0xvY2F0aW9uKTsKICAgICB9LAogCiAgICAgZGlzcG9z
ZTogZnVuY3Rpb24oKQpAQCAtNjAzLDExICs2MTQsMTMgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TW9kZWwuTGl2ZUxvY2F0aW9uLnByb3RvdHlwZSA9IHsKICAqIEBpbXBsZW1lbnRzIHtXZWJJbnNw
ZWN0b3IuUmF3TG9jYXRpb259CiAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCiAgKiBAcGFyYW0ge251
bWJlcn0gbGluZU51bWJlcgorICogQHBhcmFtIHtudW1iZXI9fSBjb2x1bW5OdW1iZXIKICAqLwot
V2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uID0gZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyKQorV2Vi
SW5zcGVjdG9yLkNTU0xvY2F0aW9uID0gZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5O
dW1iZXIpCiB7CiAgICAgdGhpcy51cmwgPSB1cmw7CiAgICAgdGhpcy5saW5lTnVtYmVyID0gbGlu
ZU51bWJlcjsKKyAgICB0aGlzLmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlciB8fCAwOwogfQog
CiAvKioKQEAgLTg5MCw4ICs5MDMsOSBAQCBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUg
PSB7CiAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcnNlZE9rCiAgKiBAcGFyYW0ge2Jvb2xlYW59IGlt
cGxpY2l0CiAgKiBAcGFyYW0gez9zdHJpbmc9fSB0ZXh0CisgKiBAcGFyYW0ge0NTU0FnZW50LlNv
dXJjZVJhbmdlPX0gcmFuZ2UKICAqLwotV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVuY3Rp
b24ob3duZXJTdHlsZSwgaW5kZXgsIG5hbWUsIHZhbHVlLCBwcmlvcml0eSwgc3RhdHVzLCBwYXJz
ZWRPaywgaW1wbGljaXQsIHRleHQpCitXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkgPSBmdW5jdGlv
bihvd25lclN0eWxlLCBpbmRleCwgbmFtZSwgdmFsdWUsIHByaW9yaXR5LCBzdGF0dXMsIHBhcnNl
ZE9rLCBpbXBsaWNpdCwgdGV4dCwgcmFuZ2UpCiB7CiAgICAgdGhpcy5vd25lclN0eWxlID0gb3du
ZXJTdHlsZTsKICAgICB0aGlzLmluZGV4ID0gaW5kZXg7CkBAIC05MDIsNiArOTE2LDcgQEAgV2Vi
SW5zcGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIG5hbWUs
IHZhbHVlLCBwcmlvcml0eSwgc3QKICAgICB0aGlzLnBhcnNlZE9rID0gcGFyc2VkT2s7CiAgICAg
dGhpcy5pbXBsaWNpdCA9IGltcGxpY2l0OwogICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgdGhp
cy5yYW5nZSA9IHJhbmdlOwogfQogCiAvKioKQEAgLTkxOCw3ICs5MzMsNyBAQCBXZWJJbnNwZWN0
b3IuQ1NTUHJvcGVydHkucGFyc2VQYXlsb2FkID0gZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgs
IHBheWxvYWQpCiAgICAgLy8gaW1wbGljaXQ6IGZhbHNlCiAgICAgLy8gc3RhdHVzOiAic3R5bGUi
CiAgICAgdmFyIHJlc3VsdCA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkoCi0gICAgICAg
IG93bmVyU3R5bGUsIGluZGV4LCBwYXlsb2FkLm5hbWUsIHBheWxvYWQudmFsdWUsIHBheWxvYWQu
cHJpb3JpdHkgfHwgIiIsIHBheWxvYWQuc3RhdHVzIHx8ICJzdHlsZSIsICgicGFyc2VkT2siIGlu
IHBheWxvYWQpID8gISFwYXlsb2FkLnBhcnNlZE9rIDogdHJ1ZSwgISFwYXlsb2FkLmltcGxpY2l0
LCBwYXlsb2FkLnRleHQpOworICAgICAgICBvd25lclN0eWxlLCBpbmRleCwgcGF5bG9hZC5uYW1l
LCBwYXlsb2FkLnZhbHVlLCBwYXlsb2FkLnByaW9yaXR5IHx8ICIiLCBwYXlsb2FkLnN0YXR1cyB8
fCAic3R5bGUiLCAoInBhcnNlZE9rIiBpbiBwYXlsb2FkKSA/ICEhcGF5bG9hZC5wYXJzZWRPayA6
IHRydWUsICEhcGF5bG9hZC5pbXBsaWNpdCwgcGF5bG9hZC50ZXh0LCBwYXlsb2FkLnJhbmdlKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFwcGluZy5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzCmluZGV4IDA0MWQ0
M2E2ZGY5MjdiNTYyOTc2ZDJiN2FjM2FiZGU3ZTRhNTc3MjIuLjRiZWIzNGI4NGIzODE1NTI2ZTFj
MjA0NjBlMzhiYTc5ZjM4NjQwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzCkBAIC0xNjYsMjMg
KzE2NiwxNSBAQCBXZWJJbnNwZWN0b3IuQ29tcGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdmFyIHNvdXJjZU1hcFVSTCA9IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwuY29t
cGxldGVVUkwoc2NyaXB0VVJMLCBzY3JpcHQuc291cmNlTWFwVVJMKTsKICAgICAgICAgaWYgKCFz
b3VyY2VNYXBVUkwpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQogICAgICAgICB2YXIgc291
cmNlTWFwID0gdGhpcy5fc291cmNlTWFwRm9yU291cmNlTWFwVVJMW3NvdXJjZU1hcFVSTF07CiAg
ICAgICAgIGlmIChzb3VyY2VNYXApCiAgICAgICAgICAgICByZXR1cm4gc291cmNlTWFwOwogCi0g
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogbWFrZSBzZW5kUmVxdWVzdCBhc3lu
Yy4KLSAgICAgICAgICAgIHZhciByZXNwb25zZSA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KHNvdXJjZU1hcFVSTCk7Ci0gICAgICAgICAgICBpZiAocmVz
cG9uc2Uuc2xpY2UoMCwgMykgPT09ICIpXX0iKQotICAgICAgICAgICAgICAgIHJlc3BvbnNlID0g
cmVzcG9uc2Uuc3Vic3RyaW5nKHJlc3BvbnNlLmluZGV4T2YoJ1xuJykpOwotICAgICAgICAgICAg
dmFyIHBheWxvYWQgPSAvKiogQHR5cGUge1NvdXJjZU1hcFYzfSAqLyAoSlNPTi5wYXJzZShyZXNw
b25zZSkpOwotICAgICAgICAgICAgdmFyIGJhc2VVUkwgPSBzb3VyY2VNYXBVUkwuc3RhcnRzV2l0
aCgiZGF0YToiKSA/IHNjcmlwdFVSTCA6IHNvdXJjZU1hcFVSTDsKLSAgICAgICAgICAgIHNvdXJj
ZU1hcCA9IG5ldyBXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcChiYXNlVVJMLCBw
YXlsb2FkKTsKLSAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9y
KGUubWVzc2FnZSk7CisgICAgICAgIHZhciBwYXlsb2FkID0gV2ViSW5zcGVjdG9yLlNvdXJjZU1h
cC5sb2FkUGF5bG9hZChzb3VyY2VNYXBVUkwpOworICAgICAgICBpZiAoIXBheWxvYWQpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQorICAgICAgICB2YXIgYmFzZVVSTCA9IHNv
dXJjZU1hcFVSTC5zdGFydHNXaXRoKCJkYXRhOiIpID8gc2NyaXB0VVJMIDogc291cmNlTWFwVVJM
OworICAgICAgICBzb3VyY2VNYXAgPSBuZXcgV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3Vy
Y2VNYXAoYmFzZVVSTCwgcGF5bG9hZCk7CiAgICAgICAgIHRoaXMuX3NvdXJjZU1hcEZvclNvdXJj
ZU1hcFVSTFtzb3VyY2VNYXBVUkxdID0gc291cmNlTWFwOwogICAgICAgICByZXR1cm4gc291cmNl
TWFwOwogICAgIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TQVNTU291cmNlTWFwcGluZy5qcwppbmRleCA4YThmNzZkZTY2MGZkNzc3OTc0NTcxM2Jk
OTExMjgxOGJlOGFlYzQzLi4zN2MxZDRmN2Y0NDg4YjU4ZDY0YjM0MjdhZmVhMTg0NzM1NDcwMDYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3Vy
Y2VNYXBwaW5nLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU0FT
U1NvdXJjZU1hcHBpbmcuanMKQEAgLTM4LDExICszOCwxMyBAQCBXZWJJbnNwZWN0b3IuU0FTU1Nv
dXJjZU1hcHBpbmcgPSBmdW5jdGlvbih3b3Jrc3BhY2UsIG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRl
cikKIHsKICAgICB0aGlzLl93b3Jrc3BhY2UgPSB3b3Jrc3BhY2U7CiAgICAgdGhpcy5fbmV0d29y
a1dvcmtzcGFjZVByb3ZpZGVyID0gbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyOwotICAgIHRoaXMu
X21hcHBpbmdFbnRyaWVzID0ge307CisgICAgdGhpcy5fc291cmNlTWFwQnlVUkwgPSB7fTsKKyAg
ICB0aGlzLl9zb3VyY2VNYXBCeVN0eWxlU2hlZXRVUkwgPSB7fTsKICAgICB0aGlzLl9jc3NVUkxz
Rm9yU0FTU1VSTCA9IHt9OwogICAgIHRoaXMuX3RpbWVvdXRGb3JVUkwgPSB7fTsKICAgICBXZWJJ
bnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5SZXNvdXJjZUFkZGVkLCB0aGlzLl9yZXNvdXJj
ZUFkZGVkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgdGhpcy5f
ZmlsZVNhdmVGaW5pc2hlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRXZlbnRzLlN0eWxlU2hlZXRD
aGFuZ2VkLCB0aGlzLl9zdHlsZVNoZWV0Q2hhbmdlZCwgdGhpcyk7CiAgICAgdGhpcy5fd29ya3Nw
YWNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLldvcmtzcGFjZS5FdmVudHMuUHJvamVj
dFdpbGxSZXNldCwgdGhpcy5fcmVzZXQsIHRoaXMpOwogfQogCkBAIC02NSw2ICs2NywyNiBAQCBX
ZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgIC8qKgogICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAogICAgICAqLworICAgIF9zdHls
ZVNoZWV0Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgaXNBZGRp
bmdSZXZpc2lvbiA9IHRoaXMuX2lzQWRkaW5nUmV2aXNpb247CisgICAgICAgIGRlbGV0ZSB0aGlz
Ll9pc0FkZGluZ1JldmlzaW9uOworCisgICAgICAgIGlmIChpc0FkZGluZ1JldmlzaW9uKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwucmVzb3VyY2VC
aW5kaW5nKCkucmVxdWVzdFJlc291cmNlVVJMRm9yU3R5bGVTaGVldElkKGV2ZW50LmRhdGEuc3R5
bGVTaGVldElkLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKKworICAgICAgICBmdW5jdGlvbiBjYWxs
YmFjayh1cmwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghdXJsKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5zZXRTb3VyY2VN
YXBwaW5nKHVybCwgbnVsbCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50CisgICAgICovCiAgICAgX2ZpbGVTYXZl
RmluaXNoZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IGFkZCBz
dXBwb3J0IGZvciBGaWxlTWFwcGluZy4KQEAgLTk4LDcgKzEyMCwxMCBAQCBXZWJJbnNwZWN0b3Iu
U0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIXVpU291cmNlQ29k
ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdmFyIG5ld0NvbnRlbnQgPSBJbnNwZWN0
b3JGcm9udGVuZEhvc3QubG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwpOworICAgICAgICB0
aGlzLl9pc0FkZGluZ1JldmlzaW9uID0gdHJ1ZTsKICAgICAgICAgdWlTb3VyY2VDb2RlLmFkZFJl
dmlzaW9uKG5ld0NvbnRlbnQpOworICAgICAgICAvLyB0aGlzLl9pc0FkZGluZ1JldmlzaW9uIHdp
bGwgYmUgZGVsZXRlZCBpbiB0aGlzLl9zdHlsZVNoZWV0Q2hhbmdlZCgpLgorICAgICAgICB0aGlz
Ll9sb2FkQW5kUHJvY2Vzc1NvdXJjZU1hcChuZXdDb250ZW50LCB1cmwsIHRydWUpOwogICAgIH0s
CiAKICAgICAvKioKQEAgLTExNyw1NCArMTQyLDM1IEBAIFdlYkluc3BlY3Rvci5TQVNTU291cmNl
TWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAqLwogICAgICAgICBmdW5jdGlvbiBkaWRS
ZXF1ZXN0Q29udGVudChjb250ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghY29udGVudCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB2YXIgbGluZXMgPSBjb250ZW50LnNwbGl0KC9ccj9cbi8pOwotICAgICAgICAg
ICAgdmFyIGRlYnVnSW5mb1JlZ2V4ID0gL0BtZWRpYVxzXC1zYXNzXC1kZWJ1Z1wtaW5mb3tmaWxl
bmFtZXtmb250LWZhbWlseTooW159XSspfWxpbmV7Zm9udC1mYW1pbHk6XFwwMDAwKFxkXGQpKFte
fV0qKX19L2k7Ci0gICAgICAgICAgICB2YXIgbGluZU51bWJlcnNSZWdleCA9IC9cL1wqXHMrbGlu
ZVxzKyhbMC05XSspLFxzKyhbXipcL10rKS87Ci0gICAgICAgICAgICBmb3IgKHZhciBsaW5lTnVt
YmVyID0gMDsgbGluZU51bWJlciA8IGxpbmVzLmxlbmd0aDsgKytsaW5lTnVtYmVyKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIG1hdGNoID0gZGVidWdJbmZvUmVnZXguZXhlYyhsaW5lc1tsaW5lTnVt
YmVyXSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciB1cmwgPSBtYXRjaFsxXS5yZXBsYWNlKC9cXCguKS9nLCAiJDEiKTsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGxpbmUgPSBwYXJzZUludChkZWNvZGVVUkkoIiUiICsgbWF0Y2hbMl0pICsg
bWF0Y2hbM10sIDEwKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkVVJMTWFwcGluZyh1
cmwsIGxpbmUsIHJlc291cmNlLnVybCwgbGluZU51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtYXRjaCA9IGxp
bmVOdW1iZXJzUmVnZXguZXhlYyhsaW5lc1tsaW5lTnVtYmVyXSk7Ci0gICAgICAgICAgICAgICAg
aWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IG1hdGNoWzJd
LnRyaW0oKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBwYXJzZUludChtYXRjaFsx
XSwgMTApOwotICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gcmVzb3VyY2UudXJsOwotICAg
ICAgICAgICAgICAgICAgICBpZiAodXJsLmVuZHNXaXRoKCIvIiArIHJlc291cmNlLnBhcnNlZFVS
TC5sYXN0UGF0aENvbXBvbmVudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwu
c3Vic3RyaW5nKDAsIHVybC5sZW5ndGggLSByZXNvdXJjZS5wYXJzZWRVUkwubGFzdFBhdGhDb21w
b25lbnQubGVuZ3RoKSArIGZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICB1cmwgPSBmaWxlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5fYWRkVVJMTWFwcGluZyh1cmwsIGxpbmUsIHJlc291cmNlLnVybCwgbGluZU51bWJlcik7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2xvYWRBbmRQcm9jZXNzU291cmNlTWFwKGNvbnRl
bnQsIHJlc291cmNlLnVybCk7CiAgICAgICAgIH0KICAgICAgICAgcmVzb3VyY2UucmVxdWVzdENv
bnRlbnQoZGlkUmVxdWVzdENvbnRlbnQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZQot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSByYXdVUkwKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gcmF3
TGluZQorICAgICAqIEBwYXJhbSB7P3N0cmluZ30gY29udGVudAorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBjc3NVUkwKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBmb3JjZVJlYmluZAogICAgICAq
LwotICAgIF9hZGRVUkxNYXBwaW5nOiBmdW5jdGlvbih1cmwsIGxpbmUsIHJhd1VSTCwgcmF3TGlu
ZSkKKyAgICBfbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXA6IGZ1bmN0aW9uKGNvbnRlbnQsIGNzc1VS
TCwgZm9yY2VSZWJpbmQpCiAgICAgewotICAgICAgICB2YXIgdXJpID0gV2ViSW5zcGVjdG9yLmZp
bGVNYXBwaW5nLnVyaUZvclVSTCh1cmwpOwotICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5maWxl
TWFwcGluZy5oYXNNYXBwaW5nRm9yVVJMKHVybCkgJiYgIXRoaXMuX3dvcmtzcGFjZS51aVNvdXJj
ZUNvZGVGb3JVUkkodXJpKSkgewotICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBJbnNwZWN0b3JG
cm9udGVuZEhvc3QubG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwpOwotICAgICAgICAgICAg
dmFyIGNvbnRlbnRQcm92aWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdGljQ29udGVudFByb3Zp
ZGVyKFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQsIGNvbnRlbnQsICJ0ZXh0
L3gtc2NzcyIpOwotICAgICAgICAgICAgdGhpcy5fbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyLmFk
ZEZpbGVGb3JVUkwodXJsLCBjb250ZW50UHJvdmlkZXIsIHRydWUpOworICAgICAgICBpZiAoIWNv
bnRlbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBsaW5lcyA9IGNvbnRlbnQu
c3BsaXQoL1xyP1xuLyk7CisgICAgICAgIGlmICghbGluZXMubGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGNvbnN0IHNvdXJjZU1hcFJlZ2V4ID0gL15cL1wqQCBzb3VyY2VN
YXBwaW5nVVJMPShbXlxzXSspXHMqXCpcLyQvOworICAgICAgICB2YXIgbGFzdExpbmUgPSBsaW5l
c1tsaW5lcy5sZW5ndGggLSAxXTsKKyAgICAgICAgdmFyIG1hdGNoID0gbGFzdExpbmUubWF0Y2go
c291cmNlTWFwUmVnZXgpOworICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLmxvYWRTb3VyY2VNYXBGb3JTdHlsZVNo
ZWV0KG1hdGNoWzFdLCBjc3NVUkwsIGZvcmNlUmViaW5kKTsKKyAgICAgICAgaWYgKHNvdXJjZU1h
cCAmJiAoZm9yY2VSZWJpbmQgfHwgIXRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVSTFtjc3NV
UkxdKSkgeworICAgICAgICAgICAgdGhpcy5fc291cmNlTWFwQnlTdHlsZVNoZWV0VVJMW2Nzc1VS
TF0gPSBzb3VyY2VNYXA7CisgICAgICAgICAgICB0aGlzLl9iaW5kVUlTb3VyY2VDb2RlKGNzc1VS
TCwgc291cmNlTWFwKTsKICAgICAgICAgfQotICAgICAgICB2YXIgcmF3TG9jYXRpb25TdHJpbmcg
PSByYXdVUkwgKyAiOiIgKyAocmF3TGluZSArIDEpOyAgLy8gTmV4dCBsaW5lIGFmdGVyIG1hcHBp
bmcgbWV0YWluZm8KLSAgICAgICAgdGhpcy5fbWFwcGluZ0VudHJpZXNbcmF3TG9jYXRpb25TdHJp
bmddID0gbmV3IFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5NYXBwaW5nRW50cnkodXJp
LCBsaW5lIC0gMSwgMCk7Ci0gICAgICAgIHRoaXMuX2FkZENTU1VSTGZvclNBU1NVUkwocmF3VVJM
LCB1cmwpOwotICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuc2V0U291cmNlTWFwcGluZyhy
YXdVUkwsIHRoaXMpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTE4NSwyNiArMTkxLDc0IEBAIFdl
Ykluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAg
IC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VNYXBVUkwKKyAgICAgKiBAcGFyYW0g
e3N0cmluZ30gc3R5bGVTaGVldFVSTAorICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGZvcmNlUmVs
b2FkCisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXB9
CisgICAgICovCisgICAgbG9hZFNvdXJjZU1hcEZvclN0eWxlU2hlZXQ6IGZ1bmN0aW9uKHNvdXJj
ZU1hcFVSTCwgc3R5bGVTaGVldFVSTCwgZm9yY2VSZWxvYWQpCisgICAgeworICAgICAgICB2YXIg
Y29tcGxldGVTdHlsZVNoZWV0VVJMID0gV2ViSW5zcGVjdG9yLlBhcnNlZFVSTC5jb21wbGV0ZVVS
TChXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZVVSTCwgc3R5bGVTaGVldFVSTCk7CisgICAgICAg
IGlmICghY29tcGxldGVTdHlsZVNoZWV0VVJMKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgIHZhciBjb21wbGV0ZVNvdXJjZU1hcFVSTCA9IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwu
Y29tcGxldGVVUkwoY29tcGxldGVTdHlsZVNoZWV0VVJMLCBzb3VyY2VNYXBVUkwpOworICAgICAg
ICBpZiAoIWNvbXBsZXRlU291cmNlTWFwVVJMKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLl9zb3VyY2VNYXBCeVVSTFtjb21wbGV0ZVNvdXJj
ZU1hcFVSTF07CisgICAgICAgIGlmIChzb3VyY2VNYXAgJiYgIWZvcmNlUmVsb2FkKQorICAgICAg
ICAgICAgcmV0dXJuIHNvdXJjZU1hcDsKKyAgICAgICAgdmFyIHBheWxvYWQgPSBXZWJJbnNwZWN0
b3IuU291cmNlTWFwLmxvYWRQYXlsb2FkKGNvbXBsZXRlU291cmNlTWFwVVJMKTsKKyAgICAgICAg
aWYgKCFwYXlsb2FkKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciBiYXNl
VVJMID0gc291cmNlTWFwVVJMLnN0YXJ0c1dpdGgoImRhdGE6IikgPyBjb21wbGV0ZVN0eWxlU2hl
ZXRVUkwgOiBjb21wbGV0ZVNvdXJjZU1hcFVSTDsKKyAgICAgICAgc291cmNlTWFwID0gbmV3IFdl
Ykluc3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNlTWFwKGJhc2VVUkwsIHBheWxvYWQpOworICAg
ICAgICB0aGlzLl9zb3VyY2VNYXBCeVVSTFtjb21wbGV0ZVNvdXJjZU1hcFVSTF0gPSBzb3VyY2VN
YXA7CisgICAgICAgIHJldHVybiBzb3VyY2VNYXA7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEBwYXJhbSB7c3RyaW5nfSByYXdVUkwKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qb3Np
dGlvbkJhc2VkU291cmNlTWFwfSBzb3VyY2VNYXAKKyAgICAgKi8KKyAgICBfYmluZFVJU291cmNl
Q29kZTogZnVuY3Rpb24ocmF3VVJMLCBzb3VyY2VNYXApCisgICAgeworICAgICAgICB2YXIgc291
cmNlcyA9IHNvdXJjZU1hcC5zb3VyY2VzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c291cmNlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHVybCA9IHNvdXJjZXNbaV07
CisgICAgICAgICAgICB2YXIgdXJpID0gV2ViSW5zcGVjdG9yLmZpbGVNYXBwaW5nLnVyaUZvclVS
TCh1cmwpOworICAgICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcuaGFzTWFw
cGluZ0ZvclVSTCh1cmwpICYmICF0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9yVVJJKHVy
aSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IEluc3BlY3RvckZyb250ZW5kSG9z
dC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCk7CisgICAgICAgICAgICAgICAgdmFyIGNv
bnRlbnRQcm92aWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdGljQ29udGVudFByb3ZpZGVyKFdl
Ykluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQsIGNvbnRlbnQsICJ0ZXh0L3gtc2Nz
cyIpOworICAgICAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl9uZXR3b3JrV29y
a3NwYWNlUHJvdmlkZXIuYWRkRmlsZUZvclVSTCh1cmwsIGNvbnRlbnRQcm92aWRlciwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgdWlTb3VyY2VDb2RlLnNldFNvdXJjZU1hcHBpbmcodGhpcyk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fYWRkQ1NTVVJMZm9yU0FTU1VSTChyYXdVUkwsIHVybCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwu
c2V0U291cmNlTWFwcGluZyhyYXdVUkwsIHRoaXMpOworICAgIH0sCisKKyAgICAvKioKICAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SYXdMb2NhdGlvbn0gcmF3TG9jYXRpb24KICAgICAgKiBA
cmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KICAgICAgKi8KICAgICByYXdMb2NhdGlv
blRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCiAgICAgewogICAgICAgICB2YXIg
bG9jYXRpb24gPSAvKiogQHR5cGUgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uICovIChyYXdMb2Nh
dGlvbik7Ci0gICAgICAgIHZhciBtYXBwaW5nRW50cnkgPSB0aGlzLl9tYXBwaW5nRW50cmllc1ts
b2NhdGlvbi51cmwgKyAiOiIgKyBsb2NhdGlvbi5saW5lTnVtYmVyXTsKLSAgICAgICAgdmFyIHVp
TG9jYXRpb24gPSBudWxsOwotICAgICAgICBpZiAobWFwcGluZ0VudHJ5KSB7Ci0gICAgICAgICAg
ICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSSSht
YXBwaW5nRW50cnkudXJpKTsKLSAgICAgICAgICAgIGlmICh1aVNvdXJjZUNvZGUpCi0gICAgICAg
ICAgICAgICAgdWlMb2NhdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJj
ZUNvZGUsIG1hcHBpbmdFbnRyeS5saW5lTnVtYmVyLCBtYXBwaW5nRW50cnkuY29sdW1uTnVtYmVy
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXVpTG9jYXRpb24pIHsKLSAgICAgICAgICAgIHZh
ciB1cmkgPSBXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcudXJpRm9yVVJMKGxvY2F0aW9uLnVybCk7
Ci0gICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNl
Q29kZUZvclVSSSh1cmkpOwotICAgICAgICAgICAgaWYgKHVpU291cmNlQ29kZSkKLSAgICAgICAg
ICAgICAgICB1aUxvY2F0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNl
Q29kZSwgbG9jYXRpb24ubGluZU51bWJlciwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHVpTG9jYXRpb247CisgICAgICAgIHZhciBlbnRyeTsKKyAgICAgICAgdmFyIHVpU291cmNlQ29k
ZTsKKyAgICAgICAgdmFyIHNvdXJjZU1hcCA9IHRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVS
TFtsb2NhdGlvbi51cmxdOworICAgICAgICBpZiAoIXNvdXJjZU1hcCkKKyAgICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICBlbnRyeSA9IHNvdXJjZU1hcC5maW5kRW50cnkobG9jYXRpb24u
bGluZU51bWJlciwgbG9jYXRpb24uY29sdW1uTnVtYmVyKTsKKyAgICAgICAgaWYgKCFlbnRyeSkK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB2YXIgdXJpID0gV2ViSW5zcGVjdG9y
LmZpbGVNYXBwaW5nLnVyaUZvclVSTChlbnRyeVsyXSk7CisgICAgICAgIHVpU291cmNlQ29kZSA9
IHRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkkodXJpKTsKKyAgICAgICAgaWYgKCF1
aVNvdXJjZUNvZGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgZW50cnlbM10sIGVudHJ5
WzRdKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0yMTYsMjUgKzI3MCwxMyBAQCBXZWJJbnNwZWN0
b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgIHVpTG9jYXRpb25Ub1Jhd0xv
Y2F0aW9uOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikK
ICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyB3aGVuIHVpIC0+IHJhdyBt
YXBwaW5nIGhhcyBjbGllbnRzLgotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DU1NM
b2NhdGlvbih1aVNvdXJjZUNvZGUudXJsIHx8ICIiLCBsaW5lTnVtYmVyKTsKKyAgICAgICAgcmV0
dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24odWlTb3VyY2VDb2RlLnVybCB8fCAiIiwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKICAgICB9LAogCiAgICAgX3Jlc2V0OiBmdW5jdGlv
bigpCiAgICAgewotICAgICAgICB0aGlzLl9tYXBwaW5nRW50cmllcyA9IHt9OworICAgICAgICB0
aGlzLl9zb3VyY2VNYXBCeVVSTCA9IHt9OworICAgICAgICB0aGlzLl9zb3VyY2VNYXBCeVN0eWxl
U2hlZXRVUkwgPSB7fTsKICAgICAgICAgdGhpcy5fcG9wdWxhdGUoKTsKICAgICB9CiB9Ci0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJpCi0gKiBAcGFyYW0ge251
bWJlcn0gbGluZU51bWJlcgotICovCi1XZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcuTWFw
cGluZ0VudHJ5ID0gZnVuY3Rpb24odXJpLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCi17Ci0g
ICAgdGhpcy51cmkgPSB1cmk7Ci0gICAgdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAg
ICB0aGlzLmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKLX0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZU1hcC5qcwppbmRleCAyZDRlMTNiNTIzNjU2
OWJiYjFlNjQwNzI3MDZiNDZkNTQxYjM0MDE4Li4xODc0YjU4NDU2NDA4NjI5YjNjNzdhMmMwZGEx
NTMwMTA2NDIxNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZU1hcC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZU1hcC5qcwpAQCAtNTEsNiArNTEsMjYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcCA9
IGZ1bmN0aW9uKHNvdXJjZU1hcHBpbmdVUkwsIHBheWxvYWQpCiAgICAgdGhpcy5fcGFyc2VNYXBw
aW5nUGF5bG9hZChwYXlsb2FkKTsKIH0KIAorLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsCisg
KiBAcmV0dXJuIHtTb3VyY2VNYXBWM30KKyAqLworV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5sb2Fk
UGF5bG9hZCA9IGZ1bmN0aW9uKHVybCkKK3sKKyAgICB0cnkgeworICAgICAgICAvLyBGSVhNRTog
bWFrZSBzZW5kUmVxdWVzdCBhc3luYy4KKyAgICAgICAgdmFyIHJlc3BvbnNlID0gSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsKTsKKyAgICAgICAgaWYg
KCFyZXNwb25zZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBpZiAocmVzcG9u
c2Uuc2xpY2UoMCwgMykgPT09ICIpXX0iKQorICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25z
ZS5zdWJzdHJpbmcocmVzcG9uc2UuaW5kZXhPZignXG4nKSk7CisgICAgICAgIHJldHVybiAvKiog
QHR5cGUge1NvdXJjZU1hcFYzfSAqLyAoSlNPTi5wYXJzZShyZXNwb25zZSkpOworICAgIH0gY2F0
Y2goZSkgeworICAgICAgICBjb25zb2xlLmVycm9yKGUubWVzc2FnZSk7CisgICAgICAgIHJldHVy
biBudWxsOworICAgIH0KK30KKwogV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUgPSB7
CiAgICAgLyoqCiAgICAgICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjNlYTE1
OWNjMjVmMjU1MWE2ODIwNmI3ZjBhNGIwMGY0NDljODI1ZC4uMTMxYmFmMmRhZWQ5MjM5OWViZmQ1
YjFiZTExZWZmY2RjYzc4YjE3NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAyLTA4ICBB
bGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogSW1wbGVtZW50IHBvc2l0aW9uLWJhc2VkIHNvdXJjZW1hcHBpbmcgZm9yIHN0eWxl
c2hlZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDkxNjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGh0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leGFtcGxlLmNzczogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUuY3NzLm1hcDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUuc2Nz
czogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVldC1zb3Vy
Y2UtbWFwcGluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5z
cGVjdG9yL3N0eWxlc2hlZXQtc291cmNlLW1hcHBpbmcuaHRtbDogQWRkZWQuCisKIDIwMTMtMDIt
MDggIE1hdHQgRmFsa2VuaGFnZW4gIDxmYWxrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtj
aHJvbWl1bV0gVW5yZXZpZXdlZCBnYXJkZW5pbmcuIEFkanVzdGluZyBleHBlY3RhdGlvbnMgZm9y
IHR3byBoaWRwaSB0ZXN0cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL3Jlc291cmNlcy9leGFtcGxlLmNzcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL3Jlc291cmNlcy9leGFtcGxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTFiNzg1NzNkNzU2NTIw
ZGQyYzc2Y2ZlYTc3MTZlZjI4N2QzZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUuY3NzCkBAIC0wLDAgKzEsNiBA
QAorYSB7CisgIGZvbzogYmFyOworICAvKiBTT01FIENPTU1FTlQgKi8KKyAgZm9udC1zaXplOiAx
MnB4OyB9CisKKy8qQCBzb3VyY2VNYXBwaW5nVVJMPXRlc3QuY3NzLm1hcCAqLwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUuY3Nz
Lm1hcCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leGFtcGxl
LmNzcy5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzY4M2FiOWFiMWUxOGM2YmUxZWQyMjlmZjU1ZjRmYjUwZDA3
YzlhNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L3Jlc291cmNlcy9leGFtcGxlLmNzcy5tYXAKQEAgLTAsMCArMSw2IEBACit7CisidmVyc2lvbiI6
ICIzIiwKKyJtYXBwaW5ncyI6ICJBQUFBLENBQUU7RUFDQSxHQUFHLEVBQUUsR0FBRzs7RUFFUixT
QUFTLEVBQUUsSUFBSSIsCisic291cmNlcyI6IFsiZXhhbXBsZS5zY3NzIl0sCisiZmlsZSI6ICJl
eGFtcGxlLmNzcyIKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL3Jlc291cmNlcy9leGFtcGxlLnNjc3MgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvZXhhbXBsZS5zY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjMTAwZTdmMzRmYTJkODQ3
MjY1ZjA3NThlNmRjMzI0N2NmMTViNWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXhhbXBsZS5zY3NzCkBAIC0wLDAgKzEsNiBA
QAorYSB7CisgIGZvbzogYmFyOworLyogU09NRSBDT01NRU5UICovCisgIGZvbnQtc2l6ZTogMTJw
eDsKK30KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5
bGVzaGVldC1zb3VyY2UtbWFwcGluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci9zdHlsZXNoZWV0LXNvdXJjZS1tYXBwaW5nLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mZmQyZDgzYjYwYjcwN2MyOTIxZGI3N2NkMzYzZmJkNTk0MTU4NmEzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVldC1z
b3VyY2UtbWFwcGluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitUZXN0cyBQb3NpdGlv
bkJhc2VkU291cmNlTWFwIGFuZCBTdHlsZVNoZWV0TWFwcGluZy4KKworCitSdW5uaW5nOiB0ZXN0
U3R5bGVTaGVldE1hcHBpbmcKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9p
bnNwZWN0b3Ivc3R5bGVzaGVldC1zb3VyY2UtbWFwcGluZy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVldC1zb3VyY2UtbWFwcGluZy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU1NGNjY2U0OTljZjZkODk0YzgzMDEyZjUyYmRjNjM4ZjJkZDVmNWYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9zdHlsZXNoZWV0LXNvdXJj
ZS1tYXBwaW5nLmh0bWwKQEAgLTAsMCArMSwxMTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImRlYnVnZ2Vy
LXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IndvcmtzcGFjZS10ZXN0LmpzIj48L3Nj
cmlwdD4KKworPHNjcmlwdD4KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgdmFyIHN0eWxlc1Nv
dXJjZU1hcHBpbmc7CisKKyAgICBmdW5jdGlvbiBjcmVhdGVTdHlsZVNoZWV0TWFwcGluZygpCisg
ICAgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmNyZWF0ZVdvcmtzcGFjZSgpOworICAgICAgICB2
YXIgc2Fzc1NvdXJjZU1hcHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5n
KEluc3BlY3RvclRlc3QudGVzdFdvcmtzcGFjZSwgSW5zcGVjdG9yVGVzdC50ZXN0TmV0d29ya1dv
cmtzcGFjZVByb3ZpZGVyKTsKKyAgICAgICAgc3R5bGVzU291cmNlTWFwcGluZyA9IG5ldyBXZWJJ
bnNwZWN0b3IuU3R5bGVzU291cmNlTWFwcGluZyhJbnNwZWN0b3JUZXN0LnRlc3RXb3Jrc3BhY2Up
OworICAgICAgICByZXR1cm4gc2Fzc1NvdXJjZU1hcHBpbmc7CisgICAgfQorCisgICAgZnVuY3Rp
b24gY2hlY2tNYXBwaW5nKGNvbXBpbGVkTGluZU51bWJlciwgY29tcGlsZWRDb2x1bW5OdW1iZXIs
IHNvdXJjZVVSTCwgc291cmNlTGluZU51bWJlciwgc291cmNlQ29sdW1uTnVtYmVyLCBtYXBwaW5n
KQorICAgIHsKKyAgICAgICAgdmFyIGVudHJ5ID0gbWFwcGluZy5maW5kRW50cnkoY29tcGlsZWRM
aW5lTnVtYmVyLCBjb21waWxlZENvbHVtbk51bWJlcik7CisgICAgICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0RXF1YWxzKHNvdXJjZVVSTCwgZW50cnlbMl0pOworICAgICAgICBJbnNwZWN0b3JUZXN0
LmFzc2VydEVxdWFscyhzb3VyY2VMaW5lTnVtYmVyLCBlbnRyeVszXSk7CisgICAgICAgIEluc3Bl
Y3RvclRlc3QuYXNzZXJ0RXF1YWxzKHNvdXJjZUNvbHVtbk51bWJlciwgZW50cnlbNF0pOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZU1vY2tTdHlsZVNoZWV0UmVzb3VyY2UodXJsLCBtaW1l
VHlwZSwgY29udGVudCkKKyAgICB7CisgICAgICAgIGNvbnN0IGRvY3VtZW50VVJMID0gImh0dHA6
Ly9sb2NhbGhvc3Q6ODAwMC9pbnNwZWN0b3Ivc3R5bGVzaGVldC1zb3VyY2UtbWFwcGluZy5odG1s
IjsKKyAgICAgICAgY29uc3QgZnJhbWUgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwu
bWFpbkZyYW1lOworICAgICAgICB2YXIgcmVzb3VyY2UgPSBuZXcgV2ViSW5zcGVjdG9yLlJlc291
cmNlKG51bGwsIHVybCwgZG9jdW1lbnRVUkwsIGZyYW1lLmlkLCBmcmFtZS5sb2FkZXJJZCwgV2Vi
SW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU3R5bGVzaGVldCwgbWltZVR5cGUpOworICAgICAgICBy
ZXNvdXJjZS5yZXF1ZXN0Q29udGVudCA9IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjYWxsYmFjayhjb250ZW50LCBmYWxzZSwgbWltZVR5cGUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiByZXNvdXJjZTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JUZXN0LnJ1
blRlc3RTdWl0ZShbCisgICAgICAgIGZ1bmN0aW9uIHRlc3RTdHlsZVNoZWV0TWFwcGluZyhuZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbWFwcGluZyA9IGNyZWF0ZVN0eWxlU2hlZXRN
YXBwaW5nKCk7CisgICAgICAgICAgICBzdGVwMSgpOworCisgICAgICAgICAgICBmdW5jdGlvbiBz
dGVwMSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC53YWl0
Rm9yV29ya3NwYWNlVUlTb3VyY2VDb2RlQWRkZWRFdmVudChjc3NVSVNvdXJjZUNvZGVBZGRlZCk7
CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRNb2NrVUlTb3VyY2VDb2RlVG9Xb3Jr
c3BhY2UoImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUu
Y3NzIiwgV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU3R5bGVzaGVldCwgIiIpOworICAgICAg
ICAgICAgICAgIHZhciBldmVudCA9IHsgZGF0YTogY3JlYXRlTW9ja1N0eWxlU2hlZXRSZXNvdXJj
ZSgiaHR0cDovL2xvY2FsaG9zdDo4MDAwL2luc3BlY3Rvci9yZXNvdXJjZXMvZXhhbXBsZS5jc3Mi
LCAidGV4dC9jc3MiLAorICAgICAgICAgICAgICAgICAgICAiYSB7XG4iICsKKyAgICAgICAgICAg
ICAgICAgICAgIiAgZm9vOiBiYXI7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgLyogU09N
RSBDT01NRU5UICovXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgZm9udC1zaXplOiAxMnB4
OyB9XG5cbiIgKworICAgICAgICAgICAgICAgICAgICAiLypAIHNvdXJjZU1hcHBpbmdVUkw9ZXhh
bXBsZS5jc3MubWFwICovIikgfTsKKyAgICAgICAgICAgICAgICBzdHlsZXNTb3VyY2VNYXBwaW5n
Ll9yZXNvdXJjZUFkZGVkKGV2ZW50KTsKKyAgICAgICAgICAgICAgICBtYXBwaW5nLl9yZXNvdXJj
ZUFkZGVkKGV2ZW50KTsKKyAgICAgICAgICAgICAgICBhZnRlclN0eWxlU2hlZXRBZGRlZCgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBjc3NVSVNvdXJjZUNvZGVBZGRl
ZCh1aVNvdXJjZUNvZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC53YWl0Rm9yV29ya3NwYWNlVUlTb3VyY2VDb2RlQWRkZWRFdmVudChzY3NzVUlTb3VyY2VD
b2RlQWRkZWQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBzY3NzVUlT
b3VyY2VDb2RlQWRkZWQodWlTb3VyY2VDb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBmdW5jdGlvbiByYXdMb2NhdGlvblRvVUlMb2NhdGlvbihsaW5lLCBj
b2x1bW4sIHVybCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLmNzc01vZGVsLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKG5ldyBXZWJJbnNwZWN0b3Iu
Q1NTTG9jYXRpb24oImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4
YW1wbGUuY3NzIiwgbGluZSwgY29sdW1uKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZ1bmN0aW9uIGFmdGVyU3R5bGVTaGVldEFkZGVkKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB2YXIgY3NzVUlTb3VyY2VDb2RlID0gSW5zcGVjdG9yVGVzdC50ZXN0V29ya3NwYWNl
LnVpU291cmNlQ29kZUZvck9yaWdpblVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDAwL2luc3BlY3Rv
ci9yZXNvdXJjZXMvZXhhbXBsZS5jc3MiKTsKKyAgICAgICAgICAgICAgICB2YXIgc2Nzc1VJU291
cmNlQ29kZSA9IEluc3BlY3RvclRlc3QudGVzdFdvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JPcmln
aW5VUkwoImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUu
c2NzcyIpOworCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24o
c2Nzc1VJU291cmNlQ29kZSwgMCwgMCwgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oMCwgMCkpOwor
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tVSUxvY2F0aW9uKHNjc3NVSVNvdXJj
ZUNvZGUsIDEsIDIsIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKDEsIDQpKTsKKyAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrVUlMb2NhdGlvbihzY3NzVUlTb3VyY2VDb2RlLCAxLCA1
LCByYXdMb2NhdGlvblRvVUlMb2NhdGlvbigxLCA2KSk7CisgICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5jaGVja1VJTG9jYXRpb24oc2Nzc1VJU291cmNlQ29kZSwgMSwgNywgcmF3TG9jYXRp
b25Ub1VJTG9jYXRpb24oMSwgOSkpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY2hl
Y2tVSUxvY2F0aW9uKHNjc3NVSVNvdXJjZUNvZGUsIDEsIDEwLCByYXdMb2NhdGlvblRvVUlMb2Nh
dGlvbigyLCA3KSk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRp
b24oc2Nzc1VJU291cmNlQ29kZSwgMywgMiwgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oMywgOCkp
OworCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24oc2Nzc1VJ
U291cmNlQ29kZSwgMywgMTEsIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKDMsIDExKSk7CisgICAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24oc2Nzc1VJU291cmNlQ29k
ZSwgMywgMTMsIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKDMsIDE1KSk7CisgICAgICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24oc2Nzc1VJU291cmNlQ29kZSwgMywgMTcs
IHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKDMsIDIwKSk7CisgICAgICAgICAgICAgICAgc2Nzc1VJ
U291cmNlQ29kZS5yZXF1ZXN0Q29udGVudChkaWRSZXF1ZXN0Q29udGVudCk7CisKKyAgICAgICAg
ICAgICAgICBmdW5jdGlvbiBkaWRSZXF1ZXN0Q29udGVudChjb250ZW50LCBjb250ZW50RW5jb2Rl
ZCwgbWltZVR5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFzc2VydEVxdWFscygwLCBjb250ZW50LmluZGV4T2YoImEgeyIpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIF0pOworfQorCis8L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBv
bmxvYWQ9InJ1blRlc3QoKSI+Cis8cD5UZXN0cyBQb3NpdGlvbkJhc2VkU291cmNlTWFwIGFuZCBT
dHlsZVNoZWV0TWFwcGluZy48L3A+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187528</attachid>
            <date>2013-02-11 01:57:22 -0800</date>
            <delta_ts>2013-02-11 02:55:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109168-20130211135353.patch</filename>
            <type>text/plain</type>
            <size>49258</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUxNWUzOTRkZDExMjM0
OTIxOTY4ZjlhNGJkNTRhMzQzNWM4NDdmNC4uMTMyNTRiYjNjNjU1Yzg4OGJiNmNlN2VjM2MyYTRl
YWY3YjgzNWQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEzLTAyLTExICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IHBvc2l0aW9uLWJhc2VkIHNvdXJjZW1hcHBpbmcgZm9yIHN0eWxlc2hl
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkx
NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGNoYW5nZSBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHBvc2l0aW9uLWJhc2VkIHNvdXJjZSBtYXBz
IGZvciBDU1Mgc3R5bGVzaGVldHMuCisgICAgICAgIFNvdXJjZW1hcHMgYW5kIG9yaWdpbmF0aW5n
IHJlc291cmNlcyAoc2Fzcywgc2NzcywgZXRjLikgYXJlIGxvYWRlZCBzeW5jaHJvbm91c2x5Cisg
ICAgICAgIHVwb24gdGhlIENTUyBVSVNvdXJjZUNvZGUgYWRkaXRpb24uIFJhbmdlQmFzZWRTb3Vy
Y2VNYXAgaXMgcmVtb3ZlZCBhcyBpdCBpcyBub3QgdXNlZC4KKworICAgICAgICBUZXN0OiBodHRw
L3Rlc3RzL2luc3BlY3Rvci9zdHlsZXNoZWV0LXNvdXJjZS1tYXBwaW5nLmh0bWwKKworICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1v
ZGVsLnByb3RvdHlwZS5zZXRTb3VyY2VNYXBwaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
U1NTdHlsZU1vZGVsLnByb3RvdHlwZS5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5MaXZlTG9jYXRpb24ucHJvdG90eXBlLnVpTG9j
YXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5DU1NQcm9wZXJ0eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVy
dHkucGFyc2VQYXlsb2FkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVy
U2NyaXB0TWFwcGluZy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db21waWxlclNjcmlwdE1h
cHBpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZy5wcm90
b3R5cGUucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNv
bXBpbGVyU2NyaXB0TWFwcGluZy5wcm90b3R5cGUubG9hZFNvdXJjZU1hcEZvclNjcmlwdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TQVNTU291cmNlTWFwcGluZy5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9zdHlsZVNoZWV0Q2hhbmdlZC5jYWxsYmFj
ayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9z
dHlsZVNoZWV0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBp
bmcucHJvdG90eXBlLl9yZWxvYWRDU1MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3Vy
Y2VNYXBwaW5nLnByb3RvdHlwZS5fcmVzb3VyY2VBZGRlZC5kaWRSZXF1ZXN0Q29udGVudCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9yZXNvdXJj
ZUFkZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5
cGUuX2xvYWRBbmRQcm9jZXNzU291cmNlTWFwKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNT
U291cmNlTWFwcGluZy5wcm90b3R5cGUubG9hZFNvdXJjZU1hcEZvclN0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5fYmluZFVJU291
cmNlQ29kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90
eXBlLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNT
U291cmNlTWFwcGluZy5wcm90b3R5cGUudWlMb2NhdGlvblRvUmF3TG9jYXRpb24pOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5fcmVzZXQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlTWFwLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZU1hcCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLmxvYWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuZmluZEVudHJ5KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLmZpbmRFbnRyeVJldmVy
c2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLl9wYXJzZU1h
cCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTb3VyY2VNYXBwaW5nLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlc1NvdXJjZU1hcHBpbmcpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlN0eWxlc1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9iaW5kVUlTb3VyY2VD
b2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKwogMjAx
My0wMi0wOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0MTY5NSBhbmQgcjE0MTY5Ny4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwpp
bmRleCA2N2I4N2M5NDhjZGEyNTFmN2IxMjhlYzQzYWI5M2Y2MWI0YzdjYmYxLi5mNDViMmY4ZDZi
YjA0NzFkNjMyY2IzOGFlN2YyMDI1MGIxMGNkYzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCkBAIC0zMSw5ICszMSwxMSBA
QAogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0
fQorICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuV29ya3NwYWNlfSB3b3Jrc3BhY2UKICAqLwotV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwgPSBmdW5jdGlvbigpCitXZWJJbnNwZWN0b3IuQ1NTU3R5
bGVNb2RlbCA9IGZ1bmN0aW9uKHdvcmtzcGFjZSkKIHsKKyAgICB0aGlzLl93b3Jrc3BhY2UgPSB3
b3Jrc3BhY2U7CiAgICAgdGhpcy5fcGVuZGluZ0NvbW1hbmRzTWFqb3JTdGF0ZSA9IFtdOwogICAg
IC8qKiBAdHlwZSB7QXJyYXkuPFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkxpdmVMb2NhdGlv
bj59ICovCiAgICAgdGhpcy5fbG9jYXRpb25zID0gW107CkBAIC00OTQsNyArNDk2LDEwIEBAIFdl
Ykluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBzZXRT
b3VyY2VNYXBwaW5nOiBmdW5jdGlvbih1cmwsIHNvdXJjZU1hcHBpbmcpCiAgICAgewotICAgICAg
ICB0aGlzLl9zb3VyY2VNYXBwaW5nc1t1cmxdID0gc291cmNlTWFwcGluZzsKKyAgICAgICAgaWYg
KHNvdXJjZU1hcHBpbmcpCisgICAgICAgICAgICB0aGlzLl9zb3VyY2VNYXBwaW5nc1t1cmxdID0g
c291cmNlTWFwcGluZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Nv
dXJjZU1hcHBpbmdzW3VybF07CiAgICAgICAgIHRoaXMuX3VwZGF0ZUxvY2F0aW9ucygpOwogICAg
IH0sCiAKQEAgLTUxNSw2ICs1MjAsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90
b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LkNTU1J1bGV9IGNzc1J1bGUKICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5V
SUxvY2F0aW9uKTooYm9vbGVhbnx1bmRlZmluZWQpfSB1cGRhdGVEZWxlZ2F0ZQogICAgICAqIEBy
ZXR1cm4gez9XZWJJbnNwZWN0b3IuTGl2ZUxvY2F0aW9ufQogICAgICAqLwpAQCAtNTM0LDEwICs1
NDAsMTkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlID0gewogICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9ufSByYXdMb2NhdGlvbgogICAgICAqIEBy
ZXR1cm4gez9XZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KICAgICAgKi8KLSAgICBfcmF3TG9jYXRp
b25Ub1VJTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0aW9uKQorICAgIHJhd0xvY2F0aW9uVG9V
SUxvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKICAgICB7CiAgICAgICAgIHZhciBzb3Vy
Y2VNYXBwaW5nID0gdGhpcy5fc291cmNlTWFwcGluZ3NbcmF3TG9jYXRpb24udXJsXTsKLSAgICAg
ICAgcmV0dXJuIHNvdXJjZU1hcHBpbmcgPyBzb3VyY2VNYXBwaW5nLnJhd0xvY2F0aW9uVG9VSUxv
Y2F0aW9uKHJhd0xvY2F0aW9uKSA6IG51bGw7CisgICAgICAgIGlmIChzb3VyY2VNYXBwaW5nKSB7
CisgICAgICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IHNvdXJjZU1hcHBpbmcucmF3TG9jYXRpb25U
b1VJTG9jYXRpb24ocmF3TG9jYXRpb24pOworICAgICAgICAgICAgaWYgKHVpTG9jYXRpb24pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHVpTG9jYXRpb247CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHVyaSA9IFdlYkluc3BlY3Rvci5maWxlTWFwcGluZy51cmlGb3JVUkwocmF3TG9jYXRpb24udXJs
KTsKKyAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNv
ZGVGb3JVUkkodXJpKTsKKyAgICAgICAgaWYgKCF1aVNvdXJjZUNvZGUpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbih1
aVNvdXJjZUNvZGUsIHJhd0xvY2F0aW9uLmxpbmVOdW1iZXIsIHJhd0xvY2F0aW9uLmNvbHVtbk51
bWJlcik7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtNTg0LDcgKzU5OSw3IEBAIFdlYkluc3BlY3Rv
ci5DU1NTdHlsZU1vZGVsLkxpdmVMb2NhdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgdWlMb2NhdGlv
bjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIGNzc0xvY2F0aW9uID0gLyoqIEB0eXBl
IFdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiAqLyAodGhpcy5yYXdMb2NhdGlvbigpKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5fcmF3TG9jYXRpb25Ub1VJTG9jYXRpb24o
Y3NzTG9jYXRpb24pOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmNzc01vZGVsLnJhd0xv
Y2F0aW9uVG9VSUxvY2F0aW9uKGNzc0xvY2F0aW9uKTsKICAgICB9LAogCiAgICAgZGlzcG9zZTog
ZnVuY3Rpb24oKQpAQCAtNjAzLDExICs2MTgsMTMgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9k
ZWwuTGl2ZUxvY2F0aW9uLnByb3RvdHlwZSA9IHsKICAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0
b3IuUmF3TG9jYXRpb259CiAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCiAgKiBAcGFyYW0ge251bWJl
cn0gbGluZU51bWJlcgorICogQHBhcmFtIHtudW1iZXI9fSBjb2x1bW5OdW1iZXIKICAqLwotV2Vi
SW5zcGVjdG9yLkNTU0xvY2F0aW9uID0gZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyKQorV2ViSW5z
cGVjdG9yLkNTU0xvY2F0aW9uID0gZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXIpCiB7CiAgICAgdGhpcy51cmwgPSB1cmw7CiAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZU51
bWJlcjsKKyAgICB0aGlzLmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlciB8fCAwOwogfQogCiAv
KioKQEAgLTg5MCw4ICs5MDcsOSBAQCBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUgPSB7
CiAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcnNlZE9rCiAgKiBAcGFyYW0ge2Jvb2xlYW59IGltcGxp
Y2l0CiAgKiBAcGFyYW0gez9zdHJpbmc9fSB0ZXh0CisgKiBAcGFyYW0ge0NTU0FnZW50LlNvdXJj
ZVJhbmdlPX0gcmFuZ2UKICAqLwotV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVuY3Rpb24o
b3duZXJTdHlsZSwgaW5kZXgsIG5hbWUsIHZhbHVlLCBwcmlvcml0eSwgc3RhdHVzLCBwYXJzZWRP
aywgaW1wbGljaXQsIHRleHQpCitXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkgPSBmdW5jdGlvbihv
d25lclN0eWxlLCBpbmRleCwgbmFtZSwgdmFsdWUsIHByaW9yaXR5LCBzdGF0dXMsIHBhcnNlZE9r
LCBpbXBsaWNpdCwgdGV4dCwgcmFuZ2UpCiB7CiAgICAgdGhpcy5vd25lclN0eWxlID0gb3duZXJT
dHlsZTsKICAgICB0aGlzLmluZGV4ID0gaW5kZXg7CkBAIC05MDIsNiArOTIwLDcgQEAgV2ViSW5z
cGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIG5hbWUsIHZh
bHVlLCBwcmlvcml0eSwgc3QKICAgICB0aGlzLnBhcnNlZE9rID0gcGFyc2VkT2s7CiAgICAgdGhp
cy5pbXBsaWNpdCA9IGltcGxpY2l0OwogICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgdGhpcy5y
YW5nZSA9IHJhbmdlOwogfQogCiAvKioKQEAgLTkxOCw3ICs5MzcsNyBAQCBXZWJJbnNwZWN0b3Iu
Q1NTUHJvcGVydHkucGFyc2VQYXlsb2FkID0gZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIHBh
eWxvYWQpCiAgICAgLy8gaW1wbGljaXQ6IGZhbHNlCiAgICAgLy8gc3RhdHVzOiAic3R5bGUiCiAg
ICAgdmFyIHJlc3VsdCA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkoCi0gICAgICAgIG93
bmVyU3R5bGUsIGluZGV4LCBwYXlsb2FkLm5hbWUsIHBheWxvYWQudmFsdWUsIHBheWxvYWQucHJp
b3JpdHkgfHwgIiIsIHBheWxvYWQuc3RhdHVzIHx8ICJzdHlsZSIsICgicGFyc2VkT2siIGluIHBh
eWxvYWQpID8gISFwYXlsb2FkLnBhcnNlZE9rIDogdHJ1ZSwgISFwYXlsb2FkLmltcGxpY2l0LCBw
YXlsb2FkLnRleHQpOworICAgICAgICBvd25lclN0eWxlLCBpbmRleCwgcGF5bG9hZC5uYW1lLCBw
YXlsb2FkLnZhbHVlLCBwYXlsb2FkLnByaW9yaXR5IHx8ICIiLCBwYXlsb2FkLnN0YXR1cyB8fCAi
c3R5bGUiLCAoInBhcnNlZE9rIiBpbiBwYXlsb2FkKSA/ICEhcGF5bG9hZC5wYXJzZWRPayA6IHRy
dWUsICEhcGF5bG9hZC5pbXBsaWNpdCwgcGF5bG9hZC50ZXh0LCBwYXlsb2FkLnJhbmdlKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFwcGluZy5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzCmluZGV4IDA0MWQ0M2E2
ZGY5MjdiNTYyOTc2ZDJiN2FjM2FiZGU3ZTRhNTc3MjIuLjcxMjE5YzE3YzgxY2VjYjM2MDE5NDI1
NTU4MGMzMjhmYjlhNDY4YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzCkBAIC0zOSwxMiArMzks
MTIgQEAgV2ViSW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZyA9IGZ1bmN0aW9uKHdvcmtz
cGFjZSwgbmV0d29ya1dvcmtzcGFjZVByb3ZpZGUKICAgICB0aGlzLl93b3Jrc3BhY2UgPSB3b3Jr
c3BhY2U7CiAgICAgdGhpcy5fd29ya3NwYWNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LlVJU291cmNlQ29kZVByb3ZpZGVyLkV2ZW50cy5VSVNvdXJjZUNvZGVBZGRlZCwgdGhpcy5fdWlT
b3VyY2VDb2RlQWRkZWRUb1dvcmtzcGFjZSwgdGhpcyk7CiAgICAgdGhpcy5fbmV0d29ya1dvcmtz
cGFjZVByb3ZpZGVyID0gbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyOwotICAgIC8qKiBAdHlwZSB7
T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNlTWFwPn0gKi8K
KyAgICAvKiogQHR5cGUge09iamVjdC48c3RyaW5nLCBXZWJJbnNwZWN0b3IuU291cmNlTWFwPn0g
Ki8KICAgICB0aGlzLl9zb3VyY2VNYXBGb3JTb3VyY2VNYXBVUkwgPSB7fTsKLSAgICAvKiogQHR5
cGUge09iamVjdC48c3RyaW5nLCBXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcD59
ICovCisgICAgLyoqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgV2ViSW5zcGVjdG9yLlNvdXJjZU1h
cD59ICovCiAgICAgdGhpcy5fc291cmNlTWFwRm9yU2NyaXB0SWQgPSB7fTsKICAgICB0aGlzLl9z
Y3JpcHRGb3JTb3VyY2VNYXAgPSBuZXcgTWFwKCk7Ci0gICAgLyoqIEB0eXBlIHtPYmplY3QuPHN0
cmluZywgV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXA+fSAqLworICAgIC8qKiBA
dHlwZSB7T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXA+fSAqLwogICAgIHRo
aXMuX3NvdXJjZU1hcEZvclVSTCA9IHt9OwogICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVs
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkdsb2Jh
bE9iamVjdENsZWFyZWQsIHRoaXMuX2RlYnVnZ2VyUmVzZXQsIHRoaXMpOwogfQpAQCAtNjEsNyAr
NjEsNyBAQCBXZWJJbnNwZWN0b3IuQ29tcGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBkZWJ1Z2dlck1vZGVsTG9jYXRpb24ubGluZU51bWJl
cjsKICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IGRlYnVnZ2VyTW9kZWxMb2NhdGlvbi5jb2x1
bW5OdW1iZXIgfHwgMDsKICAgICAgICAgdmFyIGVudHJ5ID0gc291cmNlTWFwLmZpbmRFbnRyeShs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotICAgICAgICBpZiAoZW50cnkubGVuZ3RoID09PSAy
KQorICAgICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5Lmxlbmd0aCA9PT0gMikKICAgICAgICAgICAg
IHJldHVybiBudWxsOwogICAgICAgICB2YXIgdXJsID0gZW50cnlbMl07CiAgICAgICAgIHZhciB1
cmkgPSBXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcudXJpRm9yVVJMKHVybCk7CkBAIC0xNTIsNyAr
MTUyLDcgQEAgV2ViSW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZy5wcm90b3R5cGUgPSB7
CiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHR9IHNjcmlwdAot
ICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcH0KKyAg
ICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLlNvdXJjZU1hcH0KICAgICAgKi8KICAgICBsb2Fk
U291cmNlTWFwRm9yU2NyaXB0OiBmdW5jdGlvbihzY3JpcHQpCiAgICAgewpAQCAtMTY2LDIzICsx
NjYsMTMgQEAgV2ViSW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZy5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHZhciBzb3VyY2VNYXBVUkwgPSBXZWJJbnNwZWN0b3IuUGFyc2VkVVJMLmNvbXBs
ZXRlVVJMKHNjcmlwdFVSTCwgc2NyaXB0LnNvdXJjZU1hcFVSTCk7CiAgICAgICAgIGlmICghc291
cmNlTWFwVVJMKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KICAgICAgICAgdmFyIHNvdXJj
ZU1hcCA9IHRoaXMuX3NvdXJjZU1hcEZvclNvdXJjZU1hcFVSTFtzb3VyY2VNYXBVUkxdOwogICAg
ICAgICBpZiAoc291cmNlTWFwKQogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZU1hcDsKIAotICAg
ICAgICB0cnkgewotICAgICAgICAgICAgLy8gRklYTUU6IG1ha2Ugc2VuZFJlcXVlc3QgYXN5bmMu
Ci0gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9hZFJl
c291cmNlU3luY2hyb25vdXNseShzb3VyY2VNYXBVUkwpOwotICAgICAgICAgICAgaWYgKHJlc3Bv
bnNlLnNsaWNlKDAsIDMpID09PSAiKV19IikKLSAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJl
c3BvbnNlLnN1YnN0cmluZyhyZXNwb25zZS5pbmRleE9mKCdcbicpKTsKLSAgICAgICAgICAgIHZh
ciBwYXlsb2FkID0gLyoqIEB0eXBlIHtTb3VyY2VNYXBWM30gKi8gKEpTT04ucGFyc2UocmVzcG9u
c2UpKTsKLSAgICAgICAgICAgIHZhciBiYXNlVVJMID0gc291cmNlTWFwVVJMLnN0YXJ0c1dpdGgo
ImRhdGE6IikgPyBzY3JpcHRVUkwgOiBzb3VyY2VNYXBVUkw7Ci0gICAgICAgICAgICBzb3VyY2VN
YXAgPSBuZXcgV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAoYmFzZVVSTCwgcGF5
bG9hZCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgY29uc29sZS5lcnJvcihl
Lm1lc3NhZ2UpOworICAgICAgICBzb3VyY2VNYXAgPSBXZWJJbnNwZWN0b3IuU291cmNlTWFwLmxv
YWQoc291cmNlTWFwVVJMLCBzY3JpcHRVUkwpOworICAgICAgICBpZiAoIXNvdXJjZU1hcCkKICAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9CiAgICAgICAgIHRoaXMuX3NvdXJjZU1h
cEZvclNvdXJjZU1hcFVSTFtzb3VyY2VNYXBVUkxdID0gc291cmNlTWFwOwogICAgICAgICByZXR1
cm4gc291cmNlTWFwOwogICAgIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TQVNTU291cmNlTWFwcGluZy5qcwppbmRleCA4YThmNzZkZTY2MGZkNzc3
OTc0NTcxM2JkOTExMjgxOGJlOGFlYzQzLi4zOGY0YWRjZjM4YmI3ZTZkYWIyYTExOTlhMDVhODc0
MzBlODFhZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NBU1NTb3VyY2VNYXBwaW5nLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU0FTU1NvdXJjZU1hcHBpbmcuanMKQEAgLTMxLDE4ICszMSwyMiBAQAogLyoqCiAgKiBA
Y29uc3RydWN0b3IKICAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuU291cmNlTWFwcGluZ30K
KyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWx9IGNzc01vZGVsCiAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5Xb3Jrc3BhY2V9IHdvcmtzcGFjZQogICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuU2ltcGxlV29ya3NwYWNlUHJvdmlkZXJ9IG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRlcgog
ICovCi1XZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcgPSBmdW5jdGlvbih3b3Jrc3BhY2Us
IG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRlcikKK1dlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGlu
ZyA9IGZ1bmN0aW9uKGNzc01vZGVsLCB3b3Jrc3BhY2UsIG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRl
cikKIHsKKyAgICB0aGlzLl9jc3NNb2RlbCA9IGNzc01vZGVsOwogICAgIHRoaXMuX3dvcmtzcGFj
ZSA9IHdvcmtzcGFjZTsKICAgICB0aGlzLl9uZXR3b3JrV29ya3NwYWNlUHJvdmlkZXIgPSBuZXR3
b3JrV29ya3NwYWNlUHJvdmlkZXI7Ci0gICAgdGhpcy5fbWFwcGluZ0VudHJpZXMgPSB7fTsKKyAg
ICB0aGlzLl9zb3VyY2VNYXBCeVVSTCA9IHt9OworICAgIHRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVT
aGVldFVSTCA9IHt9OwogICAgIHRoaXMuX2Nzc1VSTHNGb3JTQVNTVVJMID0ge307CiAgICAgdGhp
cy5fdGltZW91dEZvclVSTCA9IHt9OwogICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2Rl
bC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5
cGVzLlJlc291cmNlQWRkZWQsIHRoaXMuX3Jlc291cmNlQWRkZWQsIHRoaXMpOwogICAgIFdlYklu
c3BlY3Rvci5maWxlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFu
YWdlci5FdmVudFR5cGVzLlNhdmVkVVJMLCB0aGlzLl9maWxlU2F2ZUZpbmlzaGVkLCB0aGlzKTsK
KyAgICB0aGlzLl9jc3NNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5DU1NTdHls
ZU1vZGVsLkV2ZW50cy5TdHlsZVNoZWV0Q2hhbmdlZCwgdGhpcy5fc3R5bGVTaGVldENoYW5nZWQs
IHRoaXMpOwogICAgIHRoaXMuX3dvcmtzcGFjZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5Xb3Jrc3BhY2UuRXZlbnRzLlByb2plY3RXaWxsUmVzZXQsIHRoaXMuX3Jlc2V0LCB0aGlzKTsK
IH0KIApAQCAtNjUsNiArNjksMjYgQEAgV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnBy
b3RvdHlwZSA9IHsKICAgICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0g
ZXZlbnQKICAgICAgKi8KKyAgICBfc3R5bGVTaGVldENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIHsKKyAgICAgICAgdmFyIGlzQWRkaW5nUmV2aXNpb24gPSB0aGlzLl9pc0FkZGluZ1Jldmlz
aW9uOworICAgICAgICBkZWxldGUgdGhpcy5faXNBZGRpbmdSZXZpc2lvbjsKKworICAgICAgICBp
ZiAoaXNBZGRpbmdSZXZpc2lvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5f
Y3NzTW9kZWwucmVzb3VyY2VCaW5kaW5nKCkucmVxdWVzdFJlc291cmNlVVJMRm9yU3R5bGVTaGVl
dElkKGV2ZW50LmRhdGEuc3R5bGVTaGVldElkLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKKworICAg
ICAgICBmdW5jdGlvbiBjYWxsYmFjayh1cmwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
dXJsKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHRoaXMuX2Nzc01vZGVs
LnNldFNvdXJjZU1hcHBpbmcodXJsLCBudWxsKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKKyAgICAgKi8KICAg
ICBfZmlsZVNhdmVGaW5pc2hlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICAvLyBG
SVhNRTogYWRkIHN1cHBvcnQgZm9yIEZpbGVNYXBwaW5nLgpAQCAtOTgsNyArMTIyLDEwIEBAIFdl
Ykluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICgh
dWlTb3VyY2VDb2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB2YXIgbmV3Q29udGVu
dCA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCk7
CisgICAgICAgIHRoaXMuX2lzQWRkaW5nUmV2aXNpb24gPSB0cnVlOwogICAgICAgICB1aVNvdXJj
ZUNvZGUuYWRkUmV2aXNpb24obmV3Q29udGVudCk7CisgICAgICAgIC8vIHRoaXMuX2lzQWRkaW5n
UmV2aXNpb24gd2lsbCBiZSBkZWxldGVkIGluIHRoaXMuX3N0eWxlU2hlZXRDaGFuZ2VkKCkuCisg
ICAgICAgIHRoaXMuX2xvYWRBbmRQcm9jZXNzU291cmNlTWFwKG5ld0NvbnRlbnQsIHVybCwgdHJ1
ZSk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMTE3LDU0ICsxNDQsMzggQEAgV2ViSW5zcGVjdG9y
LlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZSA9IHsKICAgICAgICAgICovCiAgICAgICAgIGZ1
bmN0aW9uIGRpZFJlcXVlc3RDb250ZW50KGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlw
ZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFjb250ZW50KQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIHZhciBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xyP1xuLyk7
Ci0gICAgICAgICAgICB2YXIgZGVidWdJbmZvUmVnZXggPSAvQG1lZGlhXHNcLXNhc3NcLWRlYnVn
XC1pbmZve2ZpbGVuYW1le2ZvbnQtZmFtaWx5OihbXn1dKyl9bGluZXtmb250LWZhbWlseTpcXDAw
MDAoXGRcZCkoW159XSopfX0vaTsKLSAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyc1JlZ2V4ID0g
L1wvXCpccytsaW5lXHMrKFswLTldKyksXHMrKFteKlwvXSspLzsKLSAgICAgICAgICAgIGZvciAo
dmFyIGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgbGluZXMubGVuZ3RoOyArK2xpbmVOdW1i
ZXIpIHsKLSAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBkZWJ1Z0luZm9SZWdleC5leGVjKGxp
bmVzW2xpbmVOdW1iZXJdKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIHVybCA9IG1hdGNoWzFdLnJlcGxhY2UoL1xcKC4pL2csICIkMSIpOwot
ICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHBhcnNlSW50KGRlY29kZVVSSSgiJSIgKyBt
YXRjaFsyXSkgKyBtYXRjaFszXSwgMTApOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRV
UkxNYXBwaW5nKHVybCwgbGluZSwgcmVzb3VyY2UudXJsLCBsaW5lTnVtYmVyKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IG1hdGNoID0gbGluZU51bWJlcnNSZWdleC5leGVjKGxpbmVzW2xpbmVOdW1iZXJdKTsKLSAgICAg
ICAgICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1l
ID0gbWF0Y2hbMl0udHJpbSgpOwotICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHBhcnNl
SW50KG1hdGNoWzFdLCAxMCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSByZXNvdXJj
ZS51cmw7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1cmwuZW5kc1dpdGgoIi8iICsgcmVzb3Vy
Y2UucGFyc2VkVVJMLmxhc3RQYXRoQ29tcG9uZW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVybCA9IHVybC5zdWJzdHJpbmcoMCwgdXJsLmxlbmd0aCAtIHJlc291cmNlLnBhcnNlZFVSTC5s
YXN0UGF0aENvbXBvbmVudC5sZW5ndGgpICsgZmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGZpbGVOYW1lOwotICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9hZGRVUkxNYXBwaW5nKHVybCwgbGluZSwgcmVzb3VyY2UudXJsLCBs
aW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbG9hZEFuZFByb2Nlc3NTb3Vy
Y2VNYXAoY29udGVudCwgcmVzb3VyY2UudXJsKTsKICAgICAgICAgfQogICAgICAgICByZXNvdXJj
ZS5yZXF1ZXN0Q29udGVudChkaWRSZXF1ZXN0Q29udGVudC5iaW5kKHRoaXMpKTsKICAgICB9LAog
CiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBsaW5lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHJhd1VSTAotICAgICAqIEBwYXJhbSB7
bnVtYmVyfSByYXdMaW5lCisgICAgICogQHBhcmFtIHs/c3RyaW5nfSBjb250ZW50CisgICAgICog
QHBhcmFtIHtzdHJpbmd9IGNzc1VSTAorICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGZvcmNlUmVi
aW5kCiAgICAgICovCi0gICAgX2FkZFVSTE1hcHBpbmc6IGZ1bmN0aW9uKHVybCwgbGluZSwgcmF3
VVJMLCByYXdMaW5lKQorICAgIF9sb2FkQW5kUHJvY2Vzc1NvdXJjZU1hcDogZnVuY3Rpb24oY29u
dGVudCwgY3NzVVJMLCBmb3JjZVJlYmluZCkKICAgICB7Ci0gICAgICAgIHZhciB1cmkgPSBXZWJJ
bnNwZWN0b3IuZmlsZU1hcHBpbmcudXJpRm9yVVJMKHVybCk7Ci0gICAgICAgIGlmICghV2ViSW5z
cGVjdG9yLmZpbGVNYXBwaW5nLmhhc01hcHBpbmdGb3JVUkwodXJsKSAmJiAhdGhpcy5fd29ya3Nw
YWNlLnVpU291cmNlQ29kZUZvclVSSSh1cmkpKSB7Ci0gICAgICAgICAgICB2YXIgY29udGVudCA9
IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCk7Ci0g
ICAgICAgICAgICB2YXIgY29udGVudFByb3ZpZGVyID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0aWND
b250ZW50UHJvdmlkZXIoV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU3R5bGVzaGVldCwgY29u
dGVudCwgInRleHQveC1zY3NzIik7Ci0gICAgICAgICAgICB0aGlzLl9uZXR3b3JrV29ya3NwYWNl
UHJvdmlkZXIuYWRkRmlsZUZvclVSTCh1cmwsIGNvbnRlbnRQcm92aWRlciwgdHJ1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdmFyIHJhd0xvY2F0aW9uU3RyaW5nID0gcmF3VVJMICsgIjoiICsgKHJh
d0xpbmUgKyAxKTsgIC8vIE5leHQgbGluZSBhZnRlciBtYXBwaW5nIG1ldGFpbmZvCi0gICAgICAg
IHRoaXMuX21hcHBpbmdFbnRyaWVzW3Jhd0xvY2F0aW9uU3RyaW5nXSA9IG5ldyBXZWJJbnNwZWN0
b3IuU0FTU1NvdXJjZU1hcHBpbmcuTWFwcGluZ0VudHJ5KHVyaSwgbGluZSAtIDEsIDApOwotICAg
ICAgICB0aGlzLl9hZGRDU1NVUkxmb3JTQVNTVVJMKHJhd1VSTCwgdXJsKTsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLmNzc01vZGVsLnNldFNvdXJjZU1hcHBpbmcocmF3VVJMLCB0aGlzKTsKKyAgICAg
ICAgaWYgKCFjb250ZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgbGluZXMg
PSBjb250ZW50LnNwbGl0KC9ccj9cbi8pOworICAgICAgICBpZiAoIWxpbmVzLmxlbmd0aCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBzb3VyY2VNYXBSZWdleCA9IC9eXC9c
KkAgc291cmNlTWFwcGluZ1VSTD0oW15cc10rKVxzKlwqXC8kLzsKKyAgICAgICAgdmFyIGxhc3RM
aW5lID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV07CisgICAgICAgIHZhciBtYXRjaCA9IGxhc3RM
aW5lLm1hdGNoKHNvdXJjZU1hcFJlZ2V4KTsKKyAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBpZiAoIWZvcmNlUmViaW5kICYmIHRoaXMuX3NvdXJjZU1h
cEJ5U3R5bGVTaGVldFVSTFtjc3NVUkxdKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2
YXIgc291cmNlTWFwID0gdGhpcy5sb2FkU291cmNlTWFwRm9yU3R5bGVTaGVldChtYXRjaFsxXSwg
Y3NzVVJMLCBmb3JjZVJlYmluZCk7CisKKyAgICAgICAgaWYgKCFzb3VyY2VNYXApCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVSTFtjc3NV
UkxdID0gc291cmNlTWFwOworICAgICAgICB0aGlzLl9iaW5kVUlTb3VyY2VDb2RlKGNzc1VSTCwg
c291cmNlTWFwKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0xODUsMjYgKzE5Niw3MSBAQCBXZWJJ
bnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAv
KioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlTWFwVVJMCisgICAgICogQHBhcmFtIHtz
dHJpbmd9IHN0eWxlU2hlZXRVUkwKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBmb3JjZVJlbG9h
ZAorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Tb3VyY2VNYXB9CisgICAgICovCisgICAg
bG9hZFNvdXJjZU1hcEZvclN0eWxlU2hlZXQ6IGZ1bmN0aW9uKHNvdXJjZU1hcFVSTCwgc3R5bGVT
aGVldFVSTCwgZm9yY2VSZWxvYWQpCisgICAgeworICAgICAgICB2YXIgY29tcGxldGVTdHlsZVNo
ZWV0VVJMID0gV2ViSW5zcGVjdG9yLlBhcnNlZFVSTC5jb21wbGV0ZVVSTChXZWJJbnNwZWN0b3Iu
aW5zcGVjdGVkUGFnZVVSTCwgc3R5bGVTaGVldFVSTCk7CisgICAgICAgIGlmICghY29tcGxldGVT
dHlsZVNoZWV0VVJMKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciBjb21w
bGV0ZVNvdXJjZU1hcFVSTCA9IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwuY29tcGxldGVVUkwoY29t
cGxldGVTdHlsZVNoZWV0VVJMLCBzb3VyY2VNYXBVUkwpOworICAgICAgICBpZiAoIWNvbXBsZXRl
U291cmNlTWFwVVJMKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciBzb3Vy
Y2VNYXAgPSB0aGlzLl9zb3VyY2VNYXBCeVVSTFtjb21wbGV0ZVNvdXJjZU1hcFVSTF07CisgICAg
ICAgIGlmIChzb3VyY2VNYXAgJiYgIWZvcmNlUmVsb2FkKQorICAgICAgICAgICAgcmV0dXJuIHNv
dXJjZU1hcDsKKyAgICAgICAgc291cmNlTWFwID0gV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5sb2Fk
KGNvbXBsZXRlU291cmNlTWFwVVJMLCBjb21wbGV0ZVN0eWxlU2hlZXRVUkwpOworICAgICAgICBp
ZiAoIXNvdXJjZU1hcCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB0aGlzLl9z
b3VyY2VNYXBCeVVSTFtjb21wbGV0ZVNvdXJjZU1hcFVSTF0gPSBzb3VyY2VNYXA7CisgICAgICAg
IHJldHVybiBzb3VyY2VNYXA7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSByYXdVUkwKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Tb3VyY2VNYXB9IHNvdXJj
ZU1hcAorICAgICAqLworICAgIF9iaW5kVUlTb3VyY2VDb2RlOiBmdW5jdGlvbihyYXdVUkwsIHNv
dXJjZU1hcCkKKyAgICB7CisgICAgICAgIHZhciBzb3VyY2VzID0gc291cmNlTWFwLnNvdXJjZXMo
KTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2VzLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICB2YXIgdXJsID0gc291cmNlc1tpXTsKKyAgICAgICAgICAgIHZhciB1cmkgPSBX
ZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcudXJpRm9yVVJMKHVybCk7CisgICAgICAgICAgICBpZiAo
IVdlYkluc3BlY3Rvci5maWxlTWFwcGluZy5oYXNNYXBwaW5nRm9yVVJMKHVybCkgJiYgIXRoaXMu
X3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkkodXJpKSkgeworICAgICAgICAgICAgICAgIHZh
ciBjb250ZW50ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkodXJsKTsKKyAgICAgICAgICAgICAgICB2YXIgY29udGVudFByb3ZpZGVyID0gbmV3IFdlYklu
c3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIoV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMu
U3R5bGVzaGVldCwgY29udGVudCwgInRleHQveC1zY3NzIik7CisgICAgICAgICAgICAgICAgdmFy
IHVpU291cmNlQ29kZSA9IHRoaXMuX25ldHdvcmtXb3Jrc3BhY2VQcm92aWRlci5hZGRGaWxlRm9y
VVJMKHVybCwgY29udGVudFByb3ZpZGVyLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB1aVNvdXJj
ZUNvZGUuc2V0U291cmNlTWFwcGluZyh0aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hZGRD
U1NVUkxmb3JTQVNTVVJMKHJhd1VSTCwgdXJsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHRoaXMuX2Nzc01vZGVsLnNldFNvdXJjZU1hcHBpbmcocmF3VVJMLCB0aGlzKTsK
KyAgICB9LAorCisgICAgLyoqCiAgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmF3TG9jYXRp
b259IHJhd0xvY2F0aW9uCiAgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlVJTG9jYXRpb259
CiAgICAgICovCiAgICAgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0
aW9uKQogICAgIHsKICAgICAgICAgdmFyIGxvY2F0aW9uID0gLyoqIEB0eXBlIFdlYkluc3BlY3Rv
ci5DU1NMb2NhdGlvbiAqLyAocmF3TG9jYXRpb24pOwotICAgICAgICB2YXIgbWFwcGluZ0VudHJ5
ID0gdGhpcy5fbWFwcGluZ0VudHJpZXNbbG9jYXRpb24udXJsICsgIjoiICsgbG9jYXRpb24ubGlu
ZU51bWJlcl07Ci0gICAgICAgIHZhciB1aUxvY2F0aW9uID0gbnVsbDsKLSAgICAgICAgaWYgKG1h
cHBpbmdFbnRyeSkgewotICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX3dvcmtz
cGFjZS51aVNvdXJjZUNvZGVGb3JVUkkobWFwcGluZ0VudHJ5LnVyaSk7Ci0gICAgICAgICAgICBp
ZiAodWlTb3VyY2VDb2RlKQotICAgICAgICAgICAgICAgIHVpTG9jYXRpb24gPSBuZXcgV2ViSW5z
cGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2RlLCBtYXBwaW5nRW50cnkubGluZU51bWJlciwg
bWFwcGluZ0VudHJ5LmNvbHVtbk51bWJlcik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF1aUxv
Y2F0aW9uKSB7Ci0gICAgICAgICAgICB2YXIgdXJpID0gV2ViSW5zcGVjdG9yLmZpbGVNYXBwaW5n
LnVyaUZvclVSTChsb2NhdGlvbi51cmwpOwotICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9
IHRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkkodXJpKTsKLSAgICAgICAgICAgIGlm
ICh1aVNvdXJjZUNvZGUpCi0gICAgICAgICAgICAgICAgdWlMb2NhdGlvbiA9IG5ldyBXZWJJbnNw
ZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIGxvY2F0aW9uLmxpbmVOdW1iZXIsIDApOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB1aUxvY2F0aW9uOworICAgICAgICB2YXIgZW50cnk7
CisgICAgICAgIHZhciB1aVNvdXJjZUNvZGU7CisgICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlz
Ll9zb3VyY2VNYXBCeVN0eWxlU2hlZXRVUkxbbG9jYXRpb24udXJsXTsKKyAgICAgICAgaWYgKCFz
b3VyY2VNYXApCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgZW50cnkgPSBzb3Vy
Y2VNYXAuZmluZEVudHJ5KGxvY2F0aW9uLmxpbmVOdW1iZXIsIGxvY2F0aW9uLmNvbHVtbk51bWJl
cik7CisgICAgICAgIGlmICghZW50cnkgfHwgZW50cnkubGVuZ3RoID09PSAyKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciB1cmkgPSBXZWJJbnNwZWN0b3IuZmlsZU1hcHBp
bmcudXJpRm9yVVJMKGVudHJ5WzJdKTsKKyAgICAgICAgdWlTb3VyY2VDb2RlID0gdGhpcy5fd29y
a3NwYWNlLnVpU291cmNlQ29kZUZvclVSSSh1cmkpOworICAgICAgICBpZiAoIXVpU291cmNlQ29k
ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3Bl
Y3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgZW50cnlbM10sIGVudHJ5WzRdKTsKICAgICB9
LAogCiAgICAgLyoqCkBAIC0yMTYsMjUgKzI3MiwxMyBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJj
ZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgIHVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5j
dGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyB3aGVuIHVpIC0+IHJhdyBtYXBwaW5nIGhhcyBj
bGllbnRzLgotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbih1aVNv
dXJjZUNvZGUudXJsIHx8ICIiLCBsaW5lTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJ
bnNwZWN0b3IuQ1NTTG9jYXRpb24odWlTb3VyY2VDb2RlLnVybCB8fCAiIiwgbGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKTsKICAgICB9LAogCiAgICAgX3Jlc2V0OiBmdW5jdGlvbigpCiAgICAgewot
ICAgICAgICB0aGlzLl9tYXBwaW5nRW50cmllcyA9IHt9OworICAgICAgICB0aGlzLl9zb3VyY2VN
YXBCeVVSTCA9IHt9OworICAgICAgICB0aGlzLl9zb3VyY2VNYXBCeVN0eWxlU2hlZXRVUkwgPSB7
fTsKICAgICAgICAgdGhpcy5fcG9wdWxhdGUoKTsKICAgICB9CiB9Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJpCi0gKiBAcGFyYW0ge251bWJlcn0gbGluZU51
bWJlcgotICovCi1XZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcuTWFwcGluZ0VudHJ5ID0g
ZnVuY3Rpb24odXJpLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCi17Ci0gICAgdGhpcy51cmkg
PSB1cmk7Ci0gICAgdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICB0aGlzLmNvbHVt
bk51bWJlciA9IGNvbHVtbk51bWJlcjsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZU1hcC5qcwppbmRleCAyZDRlMTNiNTIzNjU2OWJiYjFlNjQwNzI3
MDZiNDZkNTQxYjM0MDE4Li5iYTgyMjVkNDAxY2FkN2IxNzQ2OWRmMjQ1NGQ5NmI0YTczOGIwYzcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZU1h
cC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZU1hcC5q
cwpAQCAtNDUsMTIgKzQ1LDM2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAgPSBmdW5jdGlvbihz
b3VyY2VNYXBwaW5nVVJMLCBwYXlsb2FkKQogICAgIH0KIAogICAgIHRoaXMuX3NvdXJjZU1hcHBp
bmdVUkwgPSBzb3VyY2VNYXBwaW5nVVJMOworICAgIHRoaXMuX3JldmVyc2VNYXBwaW5nc0J5U291
cmNlVVJMID0ge307CiAgICAgdGhpcy5fbWFwcGluZ3MgPSBbXTsKICAgICB0aGlzLl9zb3VyY2Vz
ID0ge307CiAgICAgdGhpcy5fc291cmNlQ29udGVudEJ5VVJMID0ge307CiAgICAgdGhpcy5fcGFy
c2VNYXBwaW5nUGF5bG9hZChwYXlsb2FkKTsKIH0KIAorLyoqCisgKiBAcGFyYW0ge3N0cmluZ30g
c291cmNlTWFwVVJMCisgKiBAcGFyYW0ge3N0cmluZ30gY29tcGlsZWRVUkwKKyAqIEByZXR1cm4g
e1dlYkluc3BlY3Rvci5Tb3VyY2VNYXB9CisgKi8KK1dlYkluc3BlY3Rvci5Tb3VyY2VNYXAubG9h
ZCA9IGZ1bmN0aW9uKHNvdXJjZU1hcFVSTCwgY29tcGlsZWRVUkwpCit7CisgICAgdHJ5IHsKKyAg
ICAgICAgLy8gRklYTUU6IG1ha2Ugc2VuZFJlcXVlc3QgYXN5bmMuCisgICAgICAgIHZhciByZXNw
b25zZSA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHNv
dXJjZU1hcFVSTCk7CisgICAgICAgIGlmICghcmVzcG9uc2UpCisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgaWYgKHJlc3BvbnNlLnNsaWNlKDAsIDMpID09PSAiKV19IikKKyAgICAg
ICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2Uuc3Vic3RyaW5nKHJlc3BvbnNlLmluZGV4T2YoJ1xu
JykpOworICAgICAgICB2YXIgcGF5bG9hZCA9IC8qKiBAdHlwZSB7U291cmNlTWFwVjN9ICovIChK
U09OLnBhcnNlKHJlc3BvbnNlKSk7CisgICAgICAgIHZhciBiYXNlVVJMID0gc291cmNlTWFwVVJM
LnN0YXJ0c1dpdGgoImRhdGE6IikgPyBjb21waWxlZFVSTCA6IHNvdXJjZU1hcFVSTDsKKyAgICAg
ICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuU291cmNlTWFwKGJhc2VVUkwsIHBheWxvYWQpOwor
ICAgIH0gY2F0Y2goZSkgeworICAgICAgICBjb25zb2xlLmVycm9yKGUubWVzc2FnZSk7CisgICAg
ICAgIHJldHVybiBudWxsOworICAgIH0KK30KKwogV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90
b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59CkBAIC05
Miw5ICsxMTYsNDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUgPSB7CiAgICAg
fSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7U291cmNlTWFwVjN9IG1hcAotICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51
bWJlcgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyIGluIGNvbXBpbGVkIHJlc291
cmNlCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJlciBpbiBjb21waWxlZCByZXNv
dXJjZQorICAgICAqIEByZXR1cm4gez9BcnJheX0KKyAgICAgKi8KKyAgICBmaW5kRW50cnk6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBmaXJz
dCA9IDA7CisgICAgICAgIHZhciBjb3VudCA9IHRoaXMuX21hcHBpbmdzLmxlbmd0aDsKKyAgICAg
ICAgd2hpbGUgKGNvdW50ID4gMSkgeworICAgICAgICAgIHZhciBzdGVwID0gY291bnQgPj4gMTsK
KyAgICAgICAgICB2YXIgbWlkZGxlID0gZmlyc3QgKyBzdGVwOworICAgICAgICAgIHZhciBtYXBw
aW5nID0gdGhpcy5fbWFwcGluZ3NbbWlkZGxlXTsKKyAgICAgICAgICBpZiAobGluZU51bWJlciA8
IG1hcHBpbmdbMF0gfHwgKGxpbmVOdW1iZXIgPT09IG1hcHBpbmdbMF0gJiYgY29sdW1uTnVtYmVy
IDwgbWFwcGluZ1sxXSkpCisgICAgICAgICAgICAgIGNvdW50ID0gc3RlcDsKKyAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgZmlyc3QgPSBtaWRkbGU7CisgICAgICAgICAgICAgIGNvdW50
IC09IHN0ZXA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBlbnRyeSA9IHRo
aXMuX21hcHBpbmdzW2ZpcnN0XTsKKyAgICAgICAgaWYgKCFmaXJzdCAmJiBlbnRyeSAmJiAobGlu
ZU51bWJlciA8IGVudHJ5WzBdIHx8IChsaW5lTnVtYmVyID09PSBlbnRyeVswXSAmJiBjb2x1bW5O
dW1iZXIgPCBlbnRyeVsxXSkpKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHJl
dHVybiBlbnRyeTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHNv
dXJjZVVSTCBvZiB0aGUgb3JpZ2luYXRpbmcgcmVzb3VyY2UKKyAgICAgKiBAcGFyYW0ge251bWJl
cn0gbGluZU51bWJlciBpbiB0aGUgb3JpZ2luYXRpbmcgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJu
IHtBcnJheX0KKyAgICAgKi8KKyAgICBmaW5kRW50cnlSZXZlcnNlZDogZnVuY3Rpb24oc291cmNl
VVJMLCBsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIG1hcHBpbmdzID0gdGhpcy5fcmV2
ZXJzZU1hcHBpbmdzQnlTb3VyY2VVUkxbc291cmNlVVJMXTsKKyAgICAgICAgZm9yICggOyBsaW5l
TnVtYmVyIDwgbWFwcGluZ3MubGVuZ3RoOyArK2xpbmVOdW1iZXIpIHsKKyAgICAgICAgICAgIHZh
ciBtYXBwaW5nID0gbWFwcGluZ3NbbGluZU51bWJlcl07CisgICAgICAgICAgICBpZiAobWFwcGlu
ZykKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFwcGluZzsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5fbWFwcGluZ3NbMF07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVy
cmlkZQogICAgICAqLwogICAgIF9wYXJzZU1hcDogZnVuY3Rpb24obWFwLCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIpCiAgICAgewpAQCAtMTUxLDYgKzIxNSwxOSBAQCBXZWJJbnNwZWN0b3IuU291
cmNlTWFwLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgdGhpcy5fbWFwcGluZ3MucHVzaChb
bGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUxpbmVOdW1iZXIsIHNv
dXJjZUNvbHVtbk51bWJlcl0pOwogICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzLl9tYXBwaW5ncy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIG1hcHBp
bmcgPSB0aGlzLl9tYXBwaW5nc1tpXTsKKyAgICAgICAgICAgIHZhciB1cmwgPSBtYXBwaW5nWzJd
OworICAgICAgICAgICAgaWYgKCF1cmwpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoIXRoaXMuX3JldmVyc2VNYXBwaW5nc0J5U291cmNlVVJMW3VybF0pCisgICAg
ICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZU1hcHBpbmdzQnlTb3VyY2VVUkxbdXJsXSA9IFtdOwor
ICAgICAgICAgICAgdmFyIHJldmVyc2VNYXBwaW5ncyA9IHRoaXMuX3JldmVyc2VNYXBwaW5nc0J5
U291cmNlVVJMW3VybF07CisgICAgICAgICAgICB2YXIgc291cmNlTGluZSA9IG1hcHBpbmdbM107
CisgICAgICAgICAgICBpZiAoIXJldmVyc2VNYXBwaW5nc1tzb3VyY2VMaW5lXSkKKyAgICAgICAg
ICAgICAgICByZXZlcnNlTWFwcGluZ3Nbc291cmNlTGluZV0gPSBbbWFwcGluZ1swXSwgbWFwcGlu
Z1sxXV07CisgICAgICAgIH0KICAgICB9LAogCiAgICAgLyoqCkBAIC0yMjMsMTY4ICszMDAsMyBA
QCBXZWJJbnNwZWN0b3IuU291cmNlTWFwLlN0cmluZ0NoYXJJdGVyYXRvci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbiA8IHRoaXMuX3N0cmluZy5sZW5ndGg7CiAg
ICAgfQogfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMgV2ViSW5zcGVjdG9y
LlNvdXJjZU1hcAotICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZU1hcHBpbmdVUkwKLSAqIEBwYXJh
bSB7U291cmNlTWFwVjN9IHBheWxvYWQKLSAqLwotV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRT
b3VyY2VNYXAgPSBmdW5jdGlvbihzb3VyY2VNYXBwaW5nVVJMLCBwYXlsb2FkKQotewotICAgIHRo
aXMuX3JldmVyc2VNYXBwaW5nc0J5U291cmNlVVJMID0ge307Ci0gICAgV2ViSW5zcGVjdG9yLlNv
dXJjZU1hcC5jYWxsKHRoaXMsIHNvdXJjZU1hcHBpbmdVUkwsIHBheWxvYWQpOwotfQotCi1XZWJJ
bnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIgaW4gY29tcGlsZWQgcmVzb3VyY2UKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uTnVtYmVyIGluIGNvbXBpbGVkIHJlc291cmNlCi0g
ICAgICovCi0gICAgZmluZEVudHJ5OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
Ci0gICAgewotICAgICAgICB2YXIgZmlyc3QgPSAwOwotICAgICAgICB2YXIgY291bnQgPSB0aGlz
Ll9tYXBwaW5ncy5sZW5ndGg7Ci0gICAgICAgIHdoaWxlIChjb3VudCA+IDEpIHsKLSAgICAgICAg
ICB2YXIgc3RlcCA9IGNvdW50ID4+IDE7Ci0gICAgICAgICAgdmFyIG1pZGRsZSA9IGZpcnN0ICsg
c3RlcDsKLSAgICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX21hcHBpbmdzW21pZGRsZV07Ci0g
ICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCBtYXBwaW5nWzBdIHx8IChsaW5lTnVtYmVyID09IG1h
cHBpbmdbMF0gJiYgY29sdW1uTnVtYmVyIDwgbWFwcGluZ1sxXSkpCi0gICAgICAgICAgICAgIGNv
dW50ID0gc3RlcDsKLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgZmlyc3QgPSBtaWRk
bGU7Ci0gICAgICAgICAgICAgIGNvdW50IC09IHN0ZXA7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYXBwaW5nc1tmaXJzdF07Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VVUkwgb2YgdGhlIG9yaWdpbmF0aW5nIHJl
c291cmNlCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIgaW4gdGhlIG9yaWdpbmF0
aW5nIHJlc291cmNlCi0gICAgICogQHJldHVybiB7QXJyYXl9Ci0gICAgICovCi0gICAgZmluZEVu
dHJ5UmV2ZXJzZWQ6IGZ1bmN0aW9uKHNvdXJjZVVSTCwgbGluZU51bWJlcikKLSAgICB7Ci0gICAg
ICAgIHZhciBtYXBwaW5ncyA9IHRoaXMuX3JldmVyc2VNYXBwaW5nc0J5U291cmNlVVJMW3NvdXJj
ZVVSTF07Ci0gICAgICAgIGZvciAoIDsgbGluZU51bWJlciA8IG1hcHBpbmdzLmxlbmd0aDsgKyts
aW5lTnVtYmVyKSB7Ci0gICAgICAgICAgICB2YXIgbWFwcGluZyA9IG1hcHBpbmdzW2xpbmVOdW1i
ZXJdOwotICAgICAgICAgICAgaWYgKG1hcHBpbmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1h
cHBpbmc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMuX21hcHBpbmdzWzBdOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICBfcGFyc2VNYXA6
IGZ1bmN0aW9uKG1hcCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuX3BhcnNlTWFwLmNhbGwodGhpcywgbWFw
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5fbWFwcGluZ3MubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBtYXBwaW5n
ID0gdGhpcy5fbWFwcGluZ3NbaV07Ci0gICAgICAgICAgICB2YXIgdXJsID0gbWFwcGluZ1syXTsK
LSAgICAgICAgICAgIGlmICghdXJsKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKCF0aGlzLl9yZXZlcnNlTWFwcGluZ3NCeVNvdXJjZVVSTFt1cmxdKQotICAgICAg
ICAgICAgICAgIHRoaXMuX3JldmVyc2VNYXBwaW5nc0J5U291cmNlVVJMW3VybF0gPSBbXTsKLSAg
ICAgICAgICAgIHZhciByZXZlcnNlTWFwcGluZ3MgPSB0aGlzLl9yZXZlcnNlTWFwcGluZ3NCeVNv
dXJjZVVSTFt1cmxdOwotICAgICAgICAgICAgdmFyIHNvdXJjZUxpbmUgPSBtYXBwaW5nWzNdOwot
ICAgICAgICAgICAgaWYgKCFyZXZlcnNlTWFwcGluZ3Nbc291cmNlTGluZV0pCi0gICAgICAgICAg
ICAgICAgcmV2ZXJzZU1hcHBpbmdzW3NvdXJjZUxpbmVdID0gW21hcHBpbmdbMF0sIG1hcHBpbmdb
MV1dOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlNv
dXJjZU1hcC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRz
IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAKLSAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VNYXBwaW5n
VVJMCi0gKiBAcGFyYW0ge1NvdXJjZU1hcFYzfSBwYXlsb2FkCi0gKi8KLVdlYkluc3BlY3Rvci5S
YW5nZUJhc2VkU291cmNlTWFwID0gZnVuY3Rpb24oc291cmNlTWFwcGluZ1VSTCwgcGF5bG9hZCkK
LXsKLSAgICBXZWJJbnNwZWN0b3IuU291cmNlTWFwLmNhbGwodGhpcywgc291cmNlTWFwcGluZ1VS
TCwgcGF5bG9hZCk7Ci0KLSAgICAvLyBFbXB0eSBtYXBwaW5ncyBzaG91bGQgbm90IG5vcm1hbGx5
IGJlIGZvdW5kIGluIGEgcmFuZ2UtYmFzZWQgbWFwLgotICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhdmFsdWVbMl07Ci0gICAgfQotICAgIHRoaXMu
X21hcHBpbmdzID0gdGhpcy5fbWFwcGluZ3MuZmlsdGVyKGNhbGxiYWNrKTsKLX0KLQotV2ViSW5z
cGVjdG9yLlJhbmdlQmFzZWRTb3VyY2VNYXAuTWFwcGluZ0NvbXBhcmF0b3IgPSBmdW5jdGlvbihh
LCBiKQotewotICAgIGlmIChhWzBdICE9PSBiWzBdKQotICAgICAgICByZXR1cm4gYVswXSAtIGJb
MF07Ci0gICAgcmV0dXJuIGFbMV0gLSBiWzFdOwotfQotCi1XZWJJbnNwZWN0b3IuUmFuZ2VCYXNl
ZFNvdXJjZU1hcC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9
IGxpbmVOdW1iZXIgaW4gdGhlIGNvbXBpbGVkIHJlc291cmNlCi0gICAgICogQHBhcmFtIHtudW1i
ZXJ9IGNvbHVtbk51bWJlciBpbiB0aGUgY29tcGlsZWQgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJu
IHs/V2ViSW5zcGVjdG9yLlJhbmdlQmFzZWRTb3VyY2VNYXAuU291cmNlUmFuZ2V9Ci0gICAgICov
Ci0gICAgZmluZFNvdXJjZVJhbmdlOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
Ci0gICAgewotICAgICAgICB2YXIgY29tcGFyYXRvciA9IFdlYkluc3BlY3Rvci5SYW5nZUJhc2Vk
U291cmNlTWFwLk1hcHBpbmdDb21wYXJhdG9yOwotICAgICAgICB2YXIgbG9va3VwRW50cnkgPSBb
bGluZU51bWJlciwgY29sdW1uTnVtYmVyXTsKLSAgICAgICAgdmFyIGluZGV4ID0gYmluYXJ5U2Vh
cmNoKGxvb2t1cEVudHJ5LCB0aGlzLl9tYXBwaW5ncywgY29tcGFyYXRvcik7Ci0gICAgICAgIGlm
IChpbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggJSAyKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gUmFuZ2UgZW5kIGhpdC4gQ2hlY2sgaWYgdGhlcmUncyBhIGZvbGxvd2luZyByYW5n
ZSB0aGF0IHN0YXJ0cyBmcm9tIHRoZSBzYW1lIHBvc2l0aW9uLgotICAgICAgICAgICAgICAgIGlm
IChpbmRleCArIDEgPj0gdGhpcy5fbWFwcGluZ3MubGVuZ3RoIHx8IGNvbXBhcmF0b3IobG9va3Vw
RW50cnksIHRoaXMuX21hcHBpbmdzW2luZGV4ICsgMV0pKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmFuZ2VGb3JTdGFydElu
ZGV4KGluZGV4ICsgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9yYW5nZUZvclN0YXJ0SW5kZXgoaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5kZXgg
PSAtKGluZGV4ICsgMSk7Ci0gICAgICAgIGlmICgoaW5kZXggJSAyKSAmJiBjb21wYXJhdG9yKGxv
b2t1cEVudHJ5LCB0aGlzLl9tYXBwaW5nc1tpbmRleCAtIDFdKSA+PSAwICYmIGNvbXBhcmF0b3Io
bG9va3VwRW50cnksIHRoaXMuX21hcHBpbmdzW2luZGV4XSkgPD0gMCkKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9yYW5nZUZvclN0YXJ0SW5kZXgoaW5kZXggLSAxKTsKLQotICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4
Ci0gICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5SYW5nZUJhc2VkU291cmNlTWFwLlNvdXJj
ZVJhbmdlfQotICAgICAqLwotICAgIF9yYW5nZUZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uKGluZGV4
KQotICAgIHsKLSAgICAgICAgdmFyIHN0YXJ0RW50cnkgPSB0aGlzLl9tYXBwaW5nc1tpbmRleF07
Ci0gICAgICAgIHZhciBlbmRFbnRyeSA9IHRoaXMuX21hcHBpbmdzW2luZGV4ICsgMV07Ci0gICAg
ICAgIGlmIChzdGFydEVudHJ5WzJdICE9PSBlbmRFbnRyeVsyXSkgewotICAgICAgICAgICAgY29u
c29sZS5lcnJvcigiTWlzbWF0Y2hlZCBzb3VyY2UgVVJMcyBpbiBhZGphY2VudCByYW5nZS1iYXNl
ZCBzb3VyY2VtYXAgZW50cmllczogJXMgdnMgJXMiLCBKU09OLnN0cmluZ2lmeShzdGFydEVudHJ5
KSwgSlNPTi5zdHJpbmdpZnkoZW5kRW50cnkpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuUmFuZ2VCYXNlZFNv
dXJjZU1hcC5Tb3VyY2VSYW5nZShzdGFydEVudHJ5WzJdLCBzdGFydEVudHJ5WzNdLCBzdGFydEVu
dHJ5WzRdLCBlbmRFbnRyeVszXSwgZW5kRW50cnlbNF0pOwotICAgIH0sCi0KLSAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRM
aW5lCi0gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRDb2x1bW4KLSAqIEBwYXJhbSB7bnVtYmVyfSBl
bmRMaW5lCi0gKiBAcGFyYW0ge251bWJlcn0gZW5kQ29sdW1uCi0gKi8KLVdlYkluc3BlY3Rvci5S
YW5nZUJhc2VkU291cmNlTWFwLlNvdXJjZVJhbmdlID0gZnVuY3Rpb24odXJsLCBzdGFydExpbmUs
IHN0YXJ0Q29sdW1uLCBlbmRMaW5lLCBlbmRDb2x1bW4pCi17Ci0gICAgdGhpcy51cmwgPSB1cmw7
Ci0gICAgdGhpcy5zdGFydExpbmUgPSBzdGFydExpbmU7Ci0gICAgdGhpcy5lbmRMaW5lID0gZW5k
TGluZTsKLSAgICB0aGlzLnN0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47Ci0gICAgdGhpcy5lbmRD
b2x1bW4gPSBlbmRDb2x1bW47Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1N0eWxlc1NvdXJjZU1hcHBpbmcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NvdXJjZU1hcHBpbmcuanMKaW5kZXggM2M5MTM1OTY1YzRi
Y2U5YzM2NTIzMmYwZDgxMzgxM2VjYjNkN2NjYS4uYzY4YWU1YzY3ZjQxMjJjZDJmZWUyMmQ3ZjNm
MWZhNzk5NzE0ZmJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TdHlsZXNTb3VyY2VNYXBwaW5nLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU3R5bGVzU291cmNlTWFwcGluZy5qcwpAQCAtMzEsMTAgKzMxLDEyIEBACiAv
KioKICAqIEBjb25zdHJ1Y3RvcgogICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Tb3VyY2VN
YXBwaW5nfQorICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbH0gY3NzTW9kZWwK
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLldvcmtzcGFjZX0gd29ya3NwYWNlCiAgKi8KLVdlYklu
c3BlY3Rvci5TdHlsZXNTb3VyY2VNYXBwaW5nID0gZnVuY3Rpb24od29ya3NwYWNlKQorV2ViSW5z
cGVjdG9yLlN0eWxlc1NvdXJjZU1hcHBpbmcgPSBmdW5jdGlvbihjc3NNb2RlbCwgd29ya3NwYWNl
KQogeworICAgIHRoaXMuX2Nzc01vZGVsID0gY3NzTW9kZWw7CiAgICAgdGhpcy5fd29ya3NwYWNl
ID0gd29ya3NwYWNlOwogICAgIHRoaXMuX3dvcmtzcGFjZS5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5Xb3Jrc3BhY2UuRXZlbnRzLlByb2plY3RXaWxsUmVzZXQsIHRoaXMuX3Byb2plY3RX
aWxsUmVzZXQsIHRoaXMpOwogICAgIHRoaXMuX3dvcmtzcGFjZS5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGVQcm92aWRlci5FdmVudHMuVUlTb3VyY2VDb2RlQWRkZWQs
IHRoaXMuX3VpU291cmNlQ29kZUFkZGVkVG9Xb3Jrc3BhY2UsIHRoaXMpOwpAQCAtMTAwLDcgKzEw
Miw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTb3VyY2VNYXBwaW5nLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgdWlTb3VyY2VDb2RlLnNldFNvdXJjZU1hcHBpbmcodGhpcyk7CiAgICAgICAgIHZhciBz
dHlsZUZpbGUgPSBuZXcgV2ViSW5zcGVjdG9yLlN0eWxlRmlsZSh1aVNvdXJjZUNvZGUpOwogICAg
ICAgICB1aVNvdXJjZUNvZGUuc2V0U3R5bGVGaWxlKHN0eWxlRmlsZSk7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5jc3NNb2RlbC5zZXRTb3VyY2VNYXBwaW5nKHVpU291cmNlQ29kZS51cmwsIHRoaXMp
OworICAgICAgICB0aGlzLl9jc3NNb2RlbC5zZXRTb3VyY2VNYXBwaW5nKHVpU291cmNlQ29kZS51
cmwsIHRoaXMpOwogICAgIH0sCiAKICAgICBfcHJvamVjdFdpbGxSZXNldDogZnVuY3Rpb24oZXZl
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
CmluZGV4IGQ3Njk3ZDcxNWRhMmQ3NmFjYzRhOWZiNmZlYTI0OTQzMzRiNmFmYjAuLjhhODUyMzQ2
ZGFmYmVjMjJlYWFkOGEyNjMzOGQ5M2NjMjEwMDUyNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC00MTMsNyArNDEzLDkgQEAgV2Vi
SW5zcGVjdG9yLl9kb0xvYWRlZERvbmVXaXRoQ2FwYWJpbGl0aWVzID0gZnVuY3Rpb24oKQogCiAg
ICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlckluc3BlY3RvckRpc3BhdGNoZXIodGhpcyk7CiAK
LSAgICB0aGlzLmNzc01vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsKCk7Cisg
ICAgdGhpcy53b3Jrc3BhY2UgPSBuZXcgV2ViSW5zcGVjdG9yLldvcmtzcGFjZSgpOworCisgICAg
dGhpcy5jc3NNb2RlbCA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbCh0aGlzLndvcmtz
cGFjZSk7CiAgICAgdGhpcy50aW1lbGluZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRpbWVs
aW5lTWFuYWdlcigpOwogICAgIHRoaXMudXNlckFnZW50U3VwcG9ydCA9IG5ldyBXZWJJbnNwZWN0
b3IuVXNlckFnZW50U3VwcG9ydCgpOwogCkBAIC00MzIsNyArNDM0LDYgQEAgV2ViSW5zcGVjdG9y
Ll9kb0xvYWRlZERvbmVXaXRoQ2FwYWJpbGl0aWVzID0gZnVuY3Rpb24oKQogICAgIHRoaXMub3Bl
bkFuY2hvckxvY2F0aW9uUmVnaXN0cnkgPSBuZXcgV2ViSW5zcGVjdG9yLkhhbmRsZXJSZWdpc3Ry
eShvcGVuQW5jaG9yTG9jYXRpb25TZXR0aW5nKTsKICAgICB0aGlzLm9wZW5BbmNob3JMb2NhdGlv
blJlZ2lzdHJ5LnJlZ2lzdGVySGFuZGxlcihhdXRvc2VsZWN0UGFuZWwsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gZmFsc2U7IH0pOwogCi0gICAgdGhpcy53b3Jrc3BhY2UgPSBuZXcgV2ViSW5zcGVjdG9y
LldvcmtzcGFjZSgpOwogICAgIHRoaXMud29ya3NwYWNlQ29udHJvbGxlciA9IG5ldyBXZWJJbnNw
ZWN0b3IuV29ya3NwYWNlQ29udHJvbGxlcih0aGlzLndvcmtzcGFjZSk7CiAKICAgICB0aGlzLmlz
b2xhdGVkRmlsZVN5c3RlbU1vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5Jc29sYXRlZEZpbGVTeXN0
ZW1Nb2RlbCh0aGlzLndvcmtzcGFjZSk7CkBAIC00NTAsOSArNDUxLDkgQEAgV2ViSW5zcGVjdG9y
Ll9kb0xvYWRlZERvbmVXaXRoQ2FwYWJpbGl0aWVzID0gZnVuY3Rpb24oKQogICAgIG5ldyBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJTY3JpcHRNYXBwaW5nKHRoaXMud29ya3NwYWNlLCB0aGlzLm5ldHdv
cmtXb3Jrc3BhY2VQcm92aWRlcik7CiAgICAgdGhpcy5saXZlRWRpdFN1cHBvcnQgPSBuZXcgV2Vi
SW5zcGVjdG9yLkxpdmVFZGl0U3VwcG9ydCh0aGlzLndvcmtzcGFjZSk7CiAgICAgdGhpcy5zdHls
ZUNvbnRlbnRCaW5kaW5nID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZUNvbnRlbnRCaW5kaW5nKHRo
aXMuY3NzTW9kZWwpOwotICAgIG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVzU291cmNlTWFwcGluZyh0
aGlzLndvcmtzcGFjZSk7CisgICAgbmV3IFdlYkluc3BlY3Rvci5TdHlsZXNTb3VyY2VNYXBwaW5n
KHRoaXMuY3NzTW9kZWwsIHRoaXMud29ya3NwYWNlKTsKICAgICBpZiAoV2ViSW5zcGVjdG9yLmV4
cGVyaW1lbnRzU2V0dGluZ3Muc2Fzcy5pc0VuYWJsZWQoKSkKLSAgICAgICAgbmV3IFdlYkluc3Bl
Y3Rvci5TQVNTU291cmNlTWFwcGluZyh0aGlzLndvcmtzcGFjZSwgdGhpcy5uZXR3b3JrV29ya3Nw
YWNlUHJvdmlkZXIpOworICAgICAgICBuZXcgV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5n
KHRoaXMuY3NzTW9kZWwsIHRoaXMud29ya3NwYWNlLCB0aGlzLm5ldHdvcmtXb3Jrc3BhY2VQcm92
aWRlcik7CiAKICAgICBuZXcgV2ViSW5zcGVjdG9yLlByZXNlbnRhdGlvbkNvbnNvbGVNZXNzYWdl
SGVscGVyKHRoaXMud29ya3NwYWNlKTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGYzZWExNTljYzI1ZjI1NTFhNjgyMDZi
N2YwYTRiMDBmNDQ5YzgyNWQuLjA3YzIyNDhlNDlhMTFhMDQ2OWMwYzIxYWIxNTY1ZTBkYjYyNWFl
N2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMy0wMi0xMSAgQWxleGFuZGVyIFBhdmxvdiAg
PGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEltcGxlbWVu
dCBwb3NpdGlvbi1iYXNlZCBzb3VyY2VtYXBwaW5nIGZvciBzdHlsZXNoZWV0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5MTY4CisKKyAgICAgICAg
QWRkZWQgdGVzdCBmb3IgdGhlIHN0eWxlc2hlZXQgc291cmNlIG1hcHBpbmdzLCBmb2xsb3dlZCB0
aGUgQVBJIGNoYW5nZXMsCisgICAgICAgIHJlbW92ZWQgUmFuZ2VCYXNlZFNvdXJjZU1hcCB0ZXN0
cyBhcyB0aGlzIHR5cGUgb2Ygc291cmNlbWFwIGlzIGdvbmUuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9jb21w
aWxlci1zY3JpcHQtbWFwcGluZy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9p
bnNwZWN0b3IvY29tcGlsZXItc2NyaXB0LW1hcHBpbmcuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rl
c3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXhhbXBsZS5jc3MubWFwOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXhhbXBsZS5zY3NzOiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9zdHlsZXNoZWV0LXNvdXJjZS1tYXBwaW5nLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
aGVldC1zb3VyY2UtbWFwcGluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5
bGVzL3JhbmdlLWJhc2VkLW1hcHBpbmctZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAq
IGluc3BlY3Rvci9zdHlsZXMvcmFuZ2UtYmFzZWQtbWFwcGluZy5odG1sOiBSZW1vdmVkLgorCiAy
MDEzLTAyLTA4ICBNYXR0IEZhbGtlbmhhZ2VuICA8ZmFsa2VuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbY2hyb21pdW1dIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLiBBZGp1c3RpbmcgZXhwZWN0YXRp
b25zIGZvciB0d28gaGlkcGkgdGVzdHMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci9jb21waWxlci1zY3JpcHQtbWFwcGluZy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9jb21waWxlci1zY3JpcHQtbWFwcGluZy1leHBl
Y3RlZC50eHQKaW5kZXggMzcwMzc0NWYwNmVjYWQ5MWY5ZjA3NzM3ZjdmNzA1ZTAyMDQ1MDk3NS4u
NmMyYmM5ODBmY2M5ZTkyOTc3M2ZkOTliYjVkMTNkMTdjODVmZGI0MiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29tcGlsZXItc2NyaXB0LW1hcHBpbmctZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbXBpbGVy
LXNjcmlwdC1tYXBwaW5nLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKLVRlc3RzIFBvc2l0
aW9uQmFzZWRTb3VyY2VNYXAgYW5kIENvbXBpbGVyU2NyaXB0TWFwcGluZy4KK1Rlc3RzIFNvdXJj
ZU1hcCBhbmQgQ29tcGlsZXJTY3JpcHRNYXBwaW5nLgogCiAKIFJ1bm5pbmc6IHRlc3RTaW1wbGVN
YXAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbXBpbGVy
LXNjcmlwdC1tYXBwaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9j
b21waWxlci1zY3JpcHQtbWFwcGluZy5odG1sCmluZGV4IDBkNzgzOWQ1ZDRmZDk0ZThmMjFjN2U3
ZThjZjQ3YTBhMGIyZjhhNTEuLmM1Y2Q1NGZiM2RlMTRiMGVkN2NiNmJmNjU5ZDZjYWRiOGY3NmQ3
NGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbXBpbGVy
LXNjcmlwdC1tYXBwaW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3IvY29tcGlsZXItc2NyaXB0LW1hcHBpbmcuaHRtbApAQCAtNTgsNyArNTgsNyBAQCBmdW5jdGlv
biB0ZXN0KCkKICAgICAgICAgICAgICAgICAibWFwcGluZ3MiOiJBQUFTQSxRQUFBQSxJQUFHLENB
QUNDLENBQUQsQ0FBYUMsQ0FBYixDQUNaLENBQ0ksTUFBT0QsRUFBUCxDQUFvQkMsQ0FEeEIsQ0FJ
QSxJQUFJQyxPQUFTOyIsCiAgICAgICAgICAgICAgICAgInNvdXJjZXMiOlsiZXhhbXBsZS5qcyJd
CiAgICAgICAgICAgICB9OwotICAgICAgICAgICAgdmFyIG1hcHBpbmcgPSBuZXcgV2ViSW5zcGVj
dG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAoInNvdXJjZS1tYXAuanNvbiIsIG1hcHBpbmdQYXls
b2FkKTsKKyAgICAgICAgICAgIHZhciBtYXBwaW5nID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VN
YXAoInNvdXJjZS1tYXAuanNvbiIsIG1hcHBpbmdQYXlsb2FkKTsKIAogICAgICAgICAgICAgY2hl
Y2tNYXBwaW5nKDAsIDksICJleGFtcGxlLmpzIiwgMCwgOSwgbWFwcGluZyk7CiAgICAgICAgICAg
ICBjaGVja01hcHBpbmcoMCwgMTMsICJleGFtcGxlLmpzIiwgMCwgMTMsIG1hcHBpbmcpOwpAQCAt
ODIsNyArODIsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICAibWFwcGluZ3Mi
OiJBQUFBLEMsQ0FBRTsiLAogICAgICAgICAgICAgICAgICJzb3VyY2VzIjpbImV4YW1wbGUuanMi
XQogICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHZhciBtYXBwaW5nID0gbmV3IFdlYkluc3Bl
Y3Rvci5Qb3NpdGlvbkJhc2VkU291cmNlTWFwKCJzb3VyY2UtbWFwLmpzb24iLCBtYXBwaW5nUGF5
bG9hZCk7CisgICAgICAgICAgICB2YXIgbWFwcGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNl
TWFwKCJzb3VyY2UtbWFwLmpzb24iLCBtYXBwaW5nUGF5bG9hZCk7CiAgICAgICAgICAgICBjaGVj
a01hcHBpbmcoMCwgMCwgImV4YW1wbGUuanMiLCAwLCAwLCBtYXBwaW5nKTsKICAgICAgICAgICAg
IHZhciBlbnRyeSA9IG1hcHBpbmcuZmluZEVudHJ5KDAsIDEpOwogICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5hc3NlcnRFcXVhbHMoMiwgZW50cnkubGVuZ3RoKTsKQEAgLTk2LDcgKzk2LDcgQEAg
ZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICAgICAgIm1hcHBpbmdzIjoiQUFBQTs7O0NBQ0Ei
LAogICAgICAgICAgICAgICAgICJzb3VyY2VzIjpbImV4YW1wbGUuanMiXQogICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgIHZhciBtYXBwaW5nID0gbmV3IFdlYkluc3BlY3Rvci5Qb3NpdGlvbkJh
c2VkU291cmNlTWFwKCJzb3VyY2UtbWFwLmpzb24iLCBtYXBwaW5nUGF5bG9hZCk7CisgICAgICAg
ICAgICB2YXIgbWFwcGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlTWFwKCJzb3VyY2UtbWFw
Lmpzb24iLCBtYXBwaW5nUGF5bG9hZCk7CiAgICAgICAgICAgICBjaGVja01hcHBpbmcoMCwgMCwg
ImV4YW1wbGUuanMiLCAwLCAwLCBtYXBwaW5nKTsKICAgICAgICAgICAgIGNoZWNrUmV2ZXJzZU1h
cHBpbmcoMywgMSwgImV4YW1wbGUuanMiLCAxLCBtYXBwaW5nKTsKICAgICAgICAgICAgIG5leHQo
KTsKQEAgLTExOSw3ICsxMTksNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIF19OwotICAgICAgICAgICAgdmFy
IG1hcHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAoInNvdXJj
ZS1tYXAuanNvbiIsIG1hcHBpbmdQYXlsb2FkKTsKKyAgICAgICAgICAgIHZhciBtYXBwaW5nID0g
bmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAoInNvdXJjZS1tYXAuanNvbiIsIG1hcHBpbmdQYXls
b2FkKTsKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKDIsIG1hcHBpbmcu
c291cmNlcygpLmxlbmd0aCk7CiAgICAgICAgICAgICBjaGVja01hcHBpbmcoMCwgMCwgInNvdXJj
ZTEuanMiLCAwLCAwLCBtYXBwaW5nKTsKICAgICAgICAgICAgIGNoZWNrTWFwcGluZygwLCAxLCAi
c291cmNlMS5qcyIsIDIsIDEsIG1hcHBpbmcpOwpAQCAtMzMwLDYgKzMzMCw2IEBAIGZ1bmN0aW9u
IHRlc3QoKQogPC9oZWFkPgogCiA8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Ci08cD5UZXN0cyBQ
b3NpdGlvbkJhc2VkU291cmNlTWFwIGFuZCBDb21waWxlclNjcmlwdE1hcHBpbmcuPC9wPgorPHA+
VGVzdHMgU291cmNlTWFwIGFuZCBDb21waWxlclNjcmlwdE1hcHBpbmcuPC9wPgogPC9ib2R5Pgog
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVz
b3VyY2VzL2V4YW1wbGUuY3NzLm1hcCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L3Jlc291cmNlcy9leGFtcGxlLmNzcy5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGMzM2Q5NGNiMmEwMjM5ZjE1
YTUyOTMwYTUyYmU1ODE0MjExZWRhMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leGFtcGxlLmNzcy5tYXAKQEAgLTAsMCArMSw2
IEBACit7CisidmVyc2lvbiI6ICIzIiwKKyJtYXBwaW5ncyI6ICI7QUFDQSxDQUFFO0VBQ0EsR0FB
RyxFQUFFLEdBQUc7O0VBRVIsU0FBUyxFQUFFLElBQUkiLAorInNvdXJjZXMiOiBbImV4YW1wbGUu
c2NzcyJdLAorImZpbGUiOiAiZXhhbXBsZS5jc3MiCit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXhhbXBsZS5zY3NzIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUuc2NzcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45MDY3YzViMzJlOTc2ZTIzNWI5MTc4NWEzMGZlNmRkOWY2YTYxOGNiCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUu
c2NzcwpAQCAtMCwwICsxLDcgQEAKKy8qIENvbW1lbnQgKi8KK2EgeworICBmb286IGJhcjsKKy8q
IFNPTUUgQ09NTUVOVCAqLworICBmb250LXNpemU6IDEycHg7Cit9CisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3N0eWxlc2hlZXQtc291cmNlLW1hcHBpbmct
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzaGVl
dC1zb3VyY2UtbWFwcGluZy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk4ZGY5Y2I3MjM0OWNj
ODk0ZmViNTRlNGYxZDQ4MmM5NjFmYzE4MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL3N0eWxlc2hlZXQtc291cmNlLW1hcHBpbmctZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNCBAQAorVGVzdHMgU291cmNlTWFwIGFuZCBTdHlsZVNoZWV0TWFwcGlu
Zy4KKworUEFTUworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rv
ci9zdHlsZXNoZWV0LXNvdXJjZS1tYXBwaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9zdHlsZXNoZWV0LXNvdXJjZS1tYXBwaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGRh
YTQwM2U4NjJlMmJlMzA1Y2JiMzExNGQ3M2FmYjg5NDgyZDQ1ZAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3N0eWxlc2hlZXQtc291cmNlLW1hcHBp
bmcuaHRtbApAQCAtMCwwICsxLDkwIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Imlu
c3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJkZWJ1Z2dlci10ZXN0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ3b3Jrc3BhY2UtdGVzdC5qcyI+PC9zY3JpcHQ+CisK
KzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIEluc3BlY3RvclRlc3QuY3JlYXRl
V29ya3NwYWNlKCk7CisgICAgdmFyIGNzc01vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHls
ZU1vZGVsKEluc3BlY3RvclRlc3QudGVzdFdvcmtzcGFjZSk7CisgICAgdmFyIG1hcHBpbmcgPSBu
ZXcgV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nKGNzc01vZGVsLCBJbnNwZWN0b3JUZXN0
LnRlc3RXb3Jrc3BhY2UsIEluc3BlY3RvclRlc3QudGVzdE5ldHdvcmtXb3Jrc3BhY2VQcm92aWRl
cik7CisgICAgdmFyIHN0eWxlc1NvdXJjZU1hcHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlN0eWxl
c1NvdXJjZU1hcHBpbmcoY3NzTW9kZWwsIEluc3BlY3RvclRlc3QudGVzdFdvcmtzcGFjZSk7CisK
KyAgICBJbnNwZWN0b3JUZXN0LndhaXRGb3JXb3Jrc3BhY2VVSVNvdXJjZUNvZGVBZGRlZEV2ZW50
KGNzc1VJU291cmNlQ29kZUFkZGVkKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFkZE1vY2tVSVNvdXJj
ZUNvZGVUb1dvcmtzcGFjZSgiaHR0cDovL2xvY2FsaG9zdDo4MDAwL2luc3BlY3Rvci9yZXNvdXJj
ZXMvZXhhbXBsZS5jc3MiLCBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5TdHlsZXNoZWV0LCAi
Iik7CisgICAgdmFyIGV2ZW50ID0geyBkYXRhOiBjcmVhdGVNb2NrU3R5bGVTaGVldFJlc291cmNl
KCJodHRwOi8vbG9jYWxob3N0OjgwMDAvaW5zcGVjdG9yL3Jlc291cmNlcy9leGFtcGxlLmNzcyIs
ICJ0ZXh0L2NzcyIsCisgICAgICAgICIvKiBDb21tZW50ICovXG4iICsKKyAgICAgICAgImEge1xu
IiArCisgICAgICAgICIgIGZvbzogYmFyO1xuIiArCisgICAgICAgICIgIC8qIFNPTUUgQ09NTUVO
VCAqL1xuIiArCisgICAgICAgICIgIGZvbnQtc2l6ZTogMTJweDsgfVxuXG4iICsKKyAgICAgICAg
Ii8qQCBzb3VyY2VNYXBwaW5nVVJMPWV4YW1wbGUuY3NzLm1hcCAqLyIpIH07CisgICAgc3R5bGVz
U291cmNlTWFwcGluZy5fcmVzb3VyY2VBZGRlZChldmVudCk7CisgICAgbWFwcGluZy5fcmVzb3Vy
Y2VBZGRlZChldmVudCk7CisgICAgYWZ0ZXJTdHlsZVNoZWV0QWRkZWQoKTsKKworICAgIGZ1bmN0
aW9uIGNyZWF0ZU1vY2tTdHlsZVNoZWV0UmVzb3VyY2UodXJsLCBtaW1lVHlwZSwgY29udGVudCkK
KyAgICB7CisgICAgICAgIGNvbnN0IGRvY3VtZW50VVJMID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAw
MC9pbnNwZWN0b3Ivc3R5bGVzaGVldC1zb3VyY2UtbWFwcGluZy5odG1sIjsKKyAgICAgICAgY29u
c3QgZnJhbWUgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwubWFpbkZyYW1lOworICAg
ICAgICB2YXIgcmVzb3VyY2UgPSBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlKG51bGwsIHVybCwg
ZG9jdW1lbnRVUkwsIGZyYW1lLmlkLCBmcmFtZS5sb2FkZXJJZCwgV2ViSW5zcGVjdG9yLnJlc291
cmNlVHlwZXMuU3R5bGVzaGVldCwgbWltZVR5cGUpOworICAgICAgICByZXNvdXJjZS5yZXF1ZXN0
Q29udGVudCA9IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBjYWxs
YmFjayhjb250ZW50LCBmYWxzZSwgbWltZVR5cGUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biByZXNvdXJjZTsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIGNzc1VJU291cmNlQ29kZUFkZGVk
KHVpU291cmNlQ29kZSkKKyAgICB7CisgICAgICAgIEluc3BlY3RvclRlc3Qud2FpdEZvcldvcmtz
cGFjZVVJU291cmNlQ29kZUFkZGVkRXZlbnQoc2Nzc1VJU291cmNlQ29kZUFkZGVkKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBzY3NzVUlTb3VyY2VDb2RlQWRkZWQodWlTb3VyY2VDb2RlKQorICAg
IHsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByYXdMb2NhdGlvblRvVUlMb2NhdGlvbihsaW5lLCBj
b2x1bW4sIHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiBjc3NNb2RlbC5yYXdMb2NhdGlvblRv
VUlMb2NhdGlvbihuZXcgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uKCJodHRwOi8vbG9jYWxob3N0
OjgwMDAvaW5zcGVjdG9yL3Jlc291cmNlcy9leGFtcGxlLmNzcyIsIGxpbmUsIGNvbHVtbikpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGFmdGVyU3R5bGVTaGVldEFkZGVkKCkKKyAgICB7CisgICAg
ICAgIHZhciBjc3NVSVNvdXJjZUNvZGUgPSBJbnNwZWN0b3JUZXN0LnRlc3RXb3Jrc3BhY2UudWlT
b3VyY2VDb2RlRm9yT3JpZ2luVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwMDAvaW5zcGVjdG9yL3Jl
c291cmNlcy9leGFtcGxlLmNzcyIpOworICAgICAgICB2YXIgc2Nzc1VJU291cmNlQ29kZSA9IElu
c3BlY3RvclRlc3QudGVzdFdvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JPcmlnaW5VUkwoImh0dHA6
Ly9sb2NhbGhvc3Q6ODAwMC9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4YW1wbGUuc2NzcyIpOworCisg
ICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tVSUxvY2F0aW9uKGNzc1VJU291cmNlQ29kZSwgMCwg
MywgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oMCwgMykpOworICAgICAgICBJbnNwZWN0b3JUZXN0
LmNoZWNrVUlMb2NhdGlvbihzY3NzVUlTb3VyY2VDb2RlLCAxLCAwLCByYXdMb2NhdGlvblRvVUlM
b2NhdGlvbigxLCAwKSk7CisgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tVSUxvY2F0aW9uKHNj
c3NVSVNvdXJjZUNvZGUsIDIsIDIsIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKDIsIDQpKTsKKyAg
ICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24oc2Nzc1VJU291cmNlQ29kZSwgMiwg
NSwgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oMiwgNikpOworICAgICAgICBJbnNwZWN0b3JUZXN0
LmNoZWNrVUlMb2NhdGlvbihzY3NzVUlTb3VyY2VDb2RlLCAyLCA3LCByYXdMb2NhdGlvblRvVUlM
b2NhdGlvbigyLCA5KSk7CisgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tVSUxvY2F0aW9uKHNj
c3NVSVNvdXJjZUNvZGUsIDIsIDEwLCByYXdMb2NhdGlvblRvVUlMb2NhdGlvbigzLCA3KSk7Cisg
ICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tVSUxvY2F0aW9uKHNjc3NVSVNvdXJjZUNvZGUsIDQs
IDIsIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKDQsIDgpKTsKKyAgICAgICAgSW5zcGVjdG9yVGVz
dC5jaGVja1VJTG9jYXRpb24oc2Nzc1VJU291cmNlQ29kZSwgNCwgMiwgcmF3TG9jYXRpb25Ub1VJ
TG9jYXRpb24oNCwgMTApKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24o
c2Nzc1VJU291cmNlQ29kZSwgNCwgMTEsIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKDQsIDExKSk7
CisgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tVSUxvY2F0aW9uKHNjc3NVSVNvdXJjZUNvZGUs
IDQsIDEzLCByYXdMb2NhdGlvblRvVUlMb2NhdGlvbig0LCAxNSkpOworICAgICAgICBJbnNwZWN0
b3JUZXN0LmNoZWNrVUlMb2NhdGlvbihzY3NzVUlTb3VyY2VDb2RlLCA0LCAxNywgcmF3TG9jYXRp
b25Ub1VJTG9jYXRpb24oNCwgMjApKTsKKyAgICAgICAgc2Nzc1VJU291cmNlQ29kZS5yZXF1ZXN0
Q29udGVudChkaWRSZXF1ZXN0Q29udGVudCk7CisKKyAgICAgICAgZnVuY3Rpb24gZGlkUmVxdWVz
dENvbnRlbnQoY29udGVudCwgY29udGVudEVuY29kZWQsIG1pbWVUeXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscygwLCBjb250ZW50LmluZGV4T2Yo
Ii8qIENvbW1lbnQgKi8iKSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgi
UEFTUyIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworPC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCkiPgorPHA+VGVzdHMgU291cmNlTWFwIGFuZCBTdHlsZVNoZWV0TWFwcGluZy48L3A+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5
bGVzL3JhbmdlLWJhc2VkLW1hcHBpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3N0eWxlcy9yYW5nZS1iYXNlZC1tYXBwaW5nLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYWNhZGYzZjA0NDgxZTJiZmVjNzhlMGNmODMzMzUzZDliODg5YWRj
Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3JhbmdlLWJhc2VkLW1hcHBpbmctZXhwZWN0ZWQudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1UZXN0cyBSYW5nZUJhc2VkU291cmNlTWFwLgot
Ci1QQVNTCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvcmFuZ2Ut
YmFzZWQtbWFwcGluZy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9yYW5nZS1i
YXNlZC1tYXBwaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MjhiMGYw
ZjJkYjU5Y2IwMmI0MWQzYTYxNTRhZmZlZWQ1MDBmYmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9yYW5n
ZS1iYXNlZC1tYXBwaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi08aHRt
bD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3Bl
Y3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2lu
c3BlY3Rvci9kZWJ1Z2dlci10ZXN0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9o
dHRwL3Rlc3RzL2luc3BlY3Rvci93b3Jrc3BhY2UtdGVzdC5qcyI+PC9zY3JpcHQ+Ci0KLTxzY3Jp
cHQ+Ci0KLWZ1bmN0aW9uIHRlc3QoKQotewotICAgIGZ1bmN0aW9uIGNoZWNrTWFwcGluZyhtYXBw
aW5nLCBjb21waWxlZExpbmUsIGNvbXBpbGVkQ29sdW1uLCBzb3VyY2VVUkwsIHNvdXJjZVN0YXJ0
TGluZSwgc291cmNlU3RhcnRDb2x1bW4sIHNvdXJjZUVuZExpbmUsIHNvdXJjZUVuZENvbHVtbikK
LSAgICB7Ci0gICAgICAgIHZhciByYW5nZSA9IG1hcHBpbmcuZmluZFNvdXJjZVJhbmdlKGNvbXBp
bGVkTGluZSwgY29tcGlsZWRDb2x1bW4pOwotICAgICAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscyhudWxsLCBzb3VyY2VVUkwpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1
YWxzKHNvdXJjZVVSTCwgcmFuZ2UudXJsKTsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRF
cXVhbHMoc291cmNlU3RhcnRMaW5lLCByYW5nZS5zdGFydExpbmUpOwotICAgICAgICBJbnNwZWN0
b3JUZXN0LmFzc2VydEVxdWFscyhzb3VyY2VTdGFydENvbHVtbiwgcmFuZ2Uuc3RhcnRDb2x1bW4p
OwotICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscyhzb3VyY2VFbmRMaW5lLCByYW5n
ZS5lbmRMaW5lKTsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMoc291cmNlRW5k
Q29sdW1uLCByYW5nZS5lbmRDb2x1bW4pOwotICAgIH0KLQotICAgIC8qCi0gICAgICAgIGV4YW1w
bGUuc2NzczoKLSAgICAgICAgMCAgICAgICAgIDEgICAgICAgICAyICAgICAgICAgMwotICAgICAg
ICAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUKLSAgICAgICAgYSB7Ci0gICAg
ICAgICAgZm9vOiBiYXI7Ci0gICAgICAgICAgLyAqIFNPTUUgQ09NTUVOVCAqIC8KLSAgICAgICAg
ICBmb250LXNpemU6IDEycHg7Ci0gICAgICAgIH0KLSAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBleGFtcGxlLmNzczoKLSAgICAgICAgMCAg
ICAgICAgIDEgICAgICAgICAyICAgICAgICAgMwotICAgICAgICAwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDUKLSAgICAgICAgYSB7Ci0gICAgICAgICAgZm9vOiBiYXI7Ci0gICAg
ICAgICAgLyAqIFNPTUUgQ09NTUVOVCAqIC8KLSAgICAgICAgICBmb250LXNpemU6IDEycHg7Ci0g
ICAgICAgIH0KLSAgICAqLwotICAgIHZhciBtYXBwaW5nUGF5bG9hZCA9IHsKLSAgICAgICAgIm1h
cHBpbmdzIjoiO0VBQ0UsR0FBRyxFQUFFLEdBQUc7O0VBRVIsU0FBUyxFQUFFLElBQUkiLAotICAg
ICAgICAic291cmNlcyI6WyJleGFtcGxlLnNjc3MiXQotICAgIH07Ci0gICAgdmFyIG1hcHBpbmcg
PSBuZXcgV2ViSW5zcGVjdG9yLlJhbmdlQmFzZWRTb3VyY2VNYXAoInNvdXJjZS1tYXAuanNvbiIs
IG1hcHBpbmdQYXlsb2FkKTsKLQotICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAwLCAwLCBudWxs
KTsKLSAgICBjaGVja01hcHBpbmcobWFwcGluZywgMCwgMSwgbnVsbCk7Ci0gICAgY2hlY2tNYXBw
aW5nKG1hcHBpbmcsIDEsIDEsIG51bGwpOwotICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAxLCAy
LCAiZXhhbXBsZS5zY3NzIiwgMSwgMiwgMSwgNSk7Ci0gICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcs
IDEsIDMsICJleGFtcGxlLnNjc3MiLCAxLCAyLCAxLCA1KTsKLSAgICBjaGVja01hcHBpbmcobWFw
cGluZywgMSwgNCwgImV4YW1wbGUuc2NzcyIsIDEsIDIsIDEsIDUpOwotICAgIGNoZWNrTWFwcGlu
ZyhtYXBwaW5nLCAxLCA1LCBudWxsKTsKLSAgICBjaGVja01hcHBpbmcobWFwcGluZywgMSwgNiwg
bnVsbCk7Ci0gICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcsIDEsIDcsICJleGFtcGxlLnNjc3MiLCAx
LCA3LCAxLCAxMCk7Ci0gICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcsIDEsIDgsICJleGFtcGxlLnNj
c3MiLCAxLCA3LCAxLCAxMCk7Ci0gICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcsIDEsIDksICJleGFt
cGxlLnNjc3MiLCAxLCA3LCAxLCAxMCk7Ci0gICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcsIDEsIDEw
LCBudWxsKTsKLSAgICBjaGVja01hcHBpbmcobWFwcGluZywgMiwgMTAsIG51bGwpOwotICAgIGNo
ZWNrTWFwcGluZyhtYXBwaW5nLCAzLCAyLCAiZXhhbXBsZS5zY3NzIiwgMywgMiwgMywgMTEpOwot
ICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAzLCAzLCAiZXhhbXBsZS5zY3NzIiwgMywgMiwgMywg
MTEpOwotICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAzLCA0LCAiZXhhbXBsZS5zY3NzIiwgMywg
MiwgMywgMTEpOwotICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAzLCA1LCAiZXhhbXBsZS5zY3Nz
IiwgMywgMiwgMywgMTEpOwotICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAzLCA2LCAiZXhhbXBs
ZS5zY3NzIiwgMywgMiwgMywgMTEpOwotICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAzLCA3LCAi
ZXhhbXBsZS5zY3NzIiwgMywgMiwgMywgMTEpOwotICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAz
LCA4LCAiZXhhbXBsZS5zY3NzIiwgMywgMiwgMywgMTEpOwotICAgIGNoZWNrTWFwcGluZyhtYXBw
aW5nLCAzLCA5LCAiZXhhbXBsZS5zY3NzIiwgMywgMiwgMywgMTEpOwotICAgIGNoZWNrTWFwcGlu
ZyhtYXBwaW5nLCAzLCAxMCwgImV4YW1wbGUuc2NzcyIsIDMsIDIsIDMsIDExKTsKLSAgICBjaGVj
a01hcHBpbmcobWFwcGluZywgMywgMTEsIG51bGwpOwotICAgIGNoZWNrTWFwcGluZyhtYXBwaW5n
LCAzLCAxMiwgbnVsbCk7Ci0gICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcsIDMsIDEzLCAiZXhhbXBs
ZS5zY3NzIiwgMywgMTMsIDMsIDE3KTsKLSAgICBjaGVja01hcHBpbmcobWFwcGluZywgMywgMTQs
ICJleGFtcGxlLnNjc3MiLCAzLCAxMywgMywgMTcpOwotICAgIGNoZWNrTWFwcGluZyhtYXBwaW5n
LCAzLCAxNSwgImV4YW1wbGUuc2NzcyIsIDMsIDEzLCAzLCAxNyk7Ci0gICAgY2hlY2tNYXBwaW5n
KG1hcHBpbmcsIDMsIDE2LCAiZXhhbXBsZS5zY3NzIiwgMywgMTMsIDMsIDE3KTsKLSAgICBjaGVj
a01hcHBpbmcobWFwcGluZywgMywgMTcsIG51bGwpOwotICAgIGNoZWNrTWFwcGluZyhtYXBwaW5n
LCA0LCAxLCBudWxsKTsKLSAgICBjaGVja01hcHBpbmcobWFwcGluZywgNSwgMiwgbnVsbCk7Ci0K
LSAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiUEFTUyIpOwotICAgIEluc3BlY3RvclRlc3Qu
Y29tcGxldGVUZXN0KCk7Ci19OwotPC9zY3JpcHQ+Ci0KLTwvaGVhZD4KLQotPGJvZHkgb25sb2Fk
PSJydW5UZXN0KCkiPgotPHA+VGVzdHMgUmFuZ2VCYXNlZFNvdXJjZU1hcC48L3A+Ci08L2JvZHk+
Ci08L2h0bWw+Cg==
</data>
<flag name="review"
          id="207369"
          type_id="1"
          status="+"
          setter="vsevik"
    />
          </attachment>
      

    </bug>

</bugzilla>