<?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>105764</bug_id>
          
          <creation_ts>2012-12-26 05:25:33 -0800</creation_ts>
          <short_desc>Web Inspector: Refactor SourceMapParser to enable range-based sourcemap</short_desc>
          <delta_ts>2012-12-27 06:15:11 -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>dglazkov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</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>797285</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-12-26 05:25:33 -0800</bug_when>
    <thetext>Sass sourcemaps are semantically range-based rather than position-based (i.e. two sequential position mappings define a single range mapping, and positions between ranges are unmapped, that is, are mapped to themselves).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797288</commentid>
    <comment_count>1</comment_count>
      <attachid>180742</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-12-26 05:34:37 -0800</bug_when>
    <thetext>Created attachment 180742
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797300</commentid>
    <comment_count>2</comment_count>
      <attachid>180742</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-26 07:02:16 -0800</bug_when>
    <thetext>Comment on attachment 180742
Patch

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

New failing tests:
http/tests/inspector/compiler-script-mapping.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797325</commentid>
    <comment_count>3</comment_count>
      <attachid>180742</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-26 09:20:43 -0800</bug_when>
    <thetext>Comment on attachment 180742
Patch

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

New failing tests:
http/tests/inspector/compiler-script-mapping.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797496</commentid>
    <comment_count>4</comment_count>
      <attachid>180786</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-12-27 03:22:51 -0800</bug_when>
    <thetext>Created attachment 180786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797522</commentid>
    <comment_count>5</comment_count>
      <attachid>180786</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-12-27 05:20:42 -0800</bug_when>
    <thetext>Comment on attachment 180786
Patch

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

&gt; Source/WebCore/inspector/front-end/SourceMap.js:60
&gt; +        var result = [];

return Object.keys(this._sources);

&gt; Source/WebCore/inspector/front-end/SourceMap.js:311
&gt; +            if (map.sourceRoot)

We should do this only once in _parseMap

&gt; Source/WebCore/inspector/front-end/SourceMap.js:340
&gt; +            strippedMappings.push(this._mappings[i]);

this._mappings.filter(filterOut...)

&gt; Source/WebCore/inspector/front-end/SourceMap.js:367
&gt; +                if (nextEntry &amp;&amp; nextEntry[0] === lineNumber &amp;&amp; nextEntry[1] === columnNumber)

I would replace nextEntry check with index + 1 &lt; this._mappings.length check before reading from the array.
also you can reuse comparator here.

&gt; Source/WebCore/inspector/front-end/SourceMap.js:409
&gt; +WebInspector.SourceRange = function(url, startLine, startColumn, endLine, endColumn)

I would call it WebInspector.RangeBasedSourceMap.SourceRange instead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797533</commentid>
    <comment_count>6</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-12-27 06:15:11 -0800</bug_when>
    <thetext>Committed r138500: &lt;http://trac.webkit.org/changeset/138500&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180742</attachid>
            <date>2012-12-26 05:34:37 -0800</date>
            <delta_ts>2012-12-26 11:43:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105764-20121226173148.patch</filename>
            <type>text/plain</type>
            <size>30499</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTY5ODBjYmYzYmFlZmM3
ZWUxYzEzY2E1YmUzYjMyZjU2NGViMTY5My4uNzdkNjQzYjY2ZTk2YWYyYTVhZmM1MWY4NTAwYWFj
YWI4MjExYTAzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEyLTI2ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUmVmYWN0b3IgU291cmNlTWFwUGFyc2VyIHRvIGVuYWJsZSByYW5nZS1iYXNlZCBzb3Vy
Y2VtYXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NTc2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBhcyB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5OgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29t
cGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9yU2NyaXB0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZU1hcC5qczogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanMu
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwKToKKyAgICAgICAgQWJzdHJhY3QuIFJl
bmFtZWQgZnJvbSBTb3VyY2VNYXBQYXJzZXIgYW5kIHN1cHBvcnRzIG9ubHkgZGlyZWN0IChnZW5l
cmF0ZWQgLT4gb3JpZ2luYXRpbmcgc291cmNlKSBtYXBwaW5nIHZpYSBmaW5kRW50cnkoKQorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuc291cmNlcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5zb3VyY2VDb250ZW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLmZpbmRFbnRyeSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5nUGF5bG9hZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5fcGFyc2VTZWN0aW9u
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5fcGFyc2VNYXAp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuX2lzU2VwYXJhdG9y
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLl9kZWNvZGVWTFEp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuX2Nhbm9uaWNhbGl6
ZVVSTCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLlN0cmluZ0NoYXJJdGVyYXRv
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLlN0cmluZ0NoYXJJdGVyYXRvci5w
cm90b3R5cGUubmV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLlN0cmluZ0No
YXJJdGVyYXRvci5wcm90b3R5cGUucGVlayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
TWFwLlN0cmluZ0NoYXJJdGVyYXRvci5wcm90b3R5cGUuaGFzTmV4dCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcCk6CisgICAgICAgIEV4dGVuZHMgU291cmNl
TWFwIGFuZCBwcm92aWRlcyByZXZlcnNlIChvcmlnaW5hdGluZyAtPiBnZW5lcmF0ZWQgc291cmNl
KSBwb3NpdGlvbiBtYXBwaW5nIHZpYSBmaW5kRW50cnlSZXZlcnNlZCgpLgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAucHJvdG90eXBlLnNvdXJjZXMpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAucHJvdG90eXBlLmZpbmRF
bnRyeVJldmVyc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNl
TWFwLnByb3RvdHlwZS5fcGFyc2VNYXApOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJhbmdlQmFz
ZWRTb3VyY2VNYXApOgorICAgICAgICBFeHRlbmRzIFNvdXJjZU1hcCBhbmQgcHJvdmlkZXMgZGly
ZWN0IHJhbmdlIG1hcHBpbmcgKGdlbmVyYXRlZCBzb3VyY2UgcG9zaXRpb24gLT4gb3JpZ2luYXRp
bmcgc291cmNlIHJhbmdlKSB2aWEgZmluZFNvdXJjZVJhbmdlKCkuCisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUmFuZ2VCYXNlZFNvdXJjZU1hcC5SZXZlcnNlTWFwcGluZ0NvbXBhcmF0b3IpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJhbmdlQmFzZWRTb3VyY2VNYXAucHJvdG90eXBlLnNvdXJjZXMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJhbmdlQmFzZWRTb3VyY2VNYXAucHJvdG90eXBlLmZp
bmRTb3VyY2VSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmFuZ2VCYXNlZFNvdXJjZU1h
cC5wcm90b3R5cGUuX3BhcnNlTWFwKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VSYW5n
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisKIDIwMTItMTItMjYgIFBhbiBE
ZW5nICA8cGFuLmRlbmdAaW50ZWwuY29tPgogCiAgICAgICAgIFtXZWIgSW5zcGVjdG9yXVJlbW92
ZSBQcmV2aWV3IGFuZCBSZXNwb25zZSB0YWIgZnJvbSBuZXR3b3JrIHBhbmVsIGluIGNhc2Ugd2Vi
c29ja2V0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGNmOWJiYTFiOWYwNjgxOTcyZmZjYzUxZjk5NjVj
NmYxODdkM2FjN2QuLjMwNjNjOGQwYjNjN2M0MjgyYjgzYTQxNDVjYjJlZjk2Mjg2YThlYTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTUxODksNiArNTE4OSw3IEBACiAgICAgICAgICAgICAnaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9Tb3VyY2VIVE1MVG9rZW5pemVyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuanMnLAorICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlTWFwLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZU1hcHBpbmcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlVG9rZW5pemVyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL1NwZWN0cnVtLmpzJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKaW5kZXggMjgyMGQ1ZTFhOGJjMTlkMjA3ZmNlMGZhODQ5ODY1MDBhMjJjMGUzYy4u
NWIzMGUwNTY3ZDFiNTUwOGZlNmY2ZWM3OTVhMzM2YzhjYzJjYTM5ZCAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTc3MTAxLDYgKzc3MTAxLDEw
IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvdXJjZU1hcC5qcyIKKwkJCQkJPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU291
cmNlTWFwcGluZy5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weSBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQppbmRleCAwMGY1NTU2NDRhMDI2ODRkYjU1ZGNl
NTAzZTBkZDQ2OTI2NDg3N2Y1Li5mZjY1NTkzMGI4ZjFlNGVmNGRhNjNhZTg1YWNiNTA1NzJlMWIz
NmJjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1l
bmQucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5
CkBAIC0xMDEsNiArMTAxLDcgQEAgbW9kdWxlcyA9IFsKICAgICAgICAgICAgICJSZXNvdXJjZVRy
ZWVNb2RlbC5qcyIsCiAgICAgICAgICAgICAiUmVzb3VyY2VUeXBlLmpzIiwKICAgICAgICAgICAg
ICJSZXNvdXJjZVV0aWxzLmpzIiwKKyAgICAgICAgICAgICJTb3VyY2VNYXAuanMiLAogICAgICAg
ICAgICAgIk5ldHdvcmtNYW5hZ2VyLmpzIiwKICAgICAgICAgICAgICJOZXR3b3JrUmVxdWVzdC5q
cyIsCiAgICAgICAgICAgICAiVUlTb3VyY2VDb2RlLmpzIiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanMK
aW5kZXggZTcwMzA2Njk1M2FhNmYyNGQzMTNhZDY0NGU4OTVlZmE0YjQ1MzY5ZC4uNmVmY2VlNzY0
MTU0ZjgxNTAzYTI1ZmU3NjE3MDI4M2FiOTAwOTkzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanMK
QEAgLTM4LDEyICszOCwxMiBAQCBXZWJJbnNwZWN0b3IuQ29tcGlsZXJTY3JpcHRNYXBwaW5nID0g
ZnVuY3Rpb24od29ya3NwYWNlLCBuZXR3b3JrV29ya3NwYWNlUHJvdmlkZQogewogICAgIHRoaXMu
X3dvcmtzcGFjZSA9IHdvcmtzcGFjZTsKICAgICB0aGlzLl9uZXR3b3JrV29ya3NwYWNlUHJvdmlk
ZXIgPSBuZXR3b3JrV29ya3NwYWNlUHJvdmlkZXI7Ci0gICAgLyoqIEB0eXBlIHtPYmplY3QuPHN0
cmluZywgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBhcnNlcj59ICovCisgICAgLyoqIEB0eXBlIHtP
YmplY3QuPHN0cmluZywgV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXA+fSAqLwog
ICAgIHRoaXMuX3NvdXJjZU1hcEZvclNvdXJjZU1hcFVSTCA9IHt9OwotICAgIC8qKiBAdHlwZSB7
T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBQYXJzZXI+fSAqLworICAgIC8q
KiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNl
TWFwPn0gKi8KICAgICB0aGlzLl9zb3VyY2VNYXBGb3JTY3JpcHRJZCA9IHt9OwogICAgIHRoaXMu
X3NjcmlwdEZvclNvdXJjZU1hcCA9IG5ldyBNYXAoKTsKLSAgICAvKiogQHR5cGUge09iamVjdC48
c3RyaW5nLCBXZWJJbnNwZWN0b3IuU291cmNlTWFwUGFyc2VyPn0gKi8KKyAgICAvKiogQHR5cGUg
e09iamVjdC48c3RyaW5nLCBXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcD59ICov
CiAgICAgdGhpcy5fc291cmNlTWFwRm9yVVJMID0ge307CiAgICAgLyoqIEB0eXBlIHtPYmplY3Qu
PHN0cmluZywgV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZT59ICovCiAgICAgdGhpcy5fb3JpZ2lu
YWxVSVNvdXJjZUNvZGVGb3JTY3JpcHRJZCA9IHt9OwpAQCAtMTMyLDExICsxMzIsMTEgQEAgV2Vi
SW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZy5wcm90b3R5cGUgPSB7CiAKICAgICAvKioK
ICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHR9IHNjcmlwdAotICAgICAqIEByZXR1
cm4ge1dlYkluc3BlY3Rvci5Tb3VyY2VNYXBQYXJzZXJ9CisgICAgICogQHJldHVybiB7V2ViSW5z
cGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXB9CiAgICAgICovCiAgICAgbG9hZFNvdXJjZU1h
cEZvclNjcmlwdDogZnVuY3Rpb24oc2NyaXB0KQogICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZU1h
cFVSTCA9IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBQYXJzZXIucHJvdG90eXBlLl9jYW5vbmljYWxp
emVVUkwoc2NyaXB0LnNvdXJjZU1hcFVSTCwgc2NyaXB0LnNvdXJjZVVSTCk7CisgICAgICAgIHZh
ciBzb3VyY2VNYXBVUkwgPSBXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcC5wcm90
b3R5cGUuX2Nhbm9uaWNhbGl6ZVVSTChzY3JpcHQuc291cmNlTWFwVVJMLCBzY3JpcHQuc291cmNl
VVJMKTsKICAgICAgICAgdmFyIHNvdXJjZU1hcCA9IHRoaXMuX3NvdXJjZU1hcEZvclNvdXJjZU1h
cFVSTFtzb3VyY2VNYXBVUkxdOwogICAgICAgICBpZiAoc291cmNlTWFwKQogICAgICAgICAgICAg
cmV0dXJuIHNvdXJjZU1hcDsKQEAgLTE0Niw4ICsxNDYsOCBAQCBXZWJJbnNwZWN0b3IuQ29tcGls
ZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHZhciByZXNwb25zZSA9
IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHNvdXJjZU1h
cFVSTCk7CiAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc2xpY2UoMCwgMykgPT09ICIpXX0iKQog
ICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2Uuc3Vic3RyaW5nKHJlc3BvbnNlLmlu
ZGV4T2YoJ1xuJykpOwotICAgICAgICAgICAgdmFyIHBheWxvYWQgPSAvKiogQHR5cGUge1dlYklu
c3BlY3Rvci5Tb3VyY2VNYXBQYXlsb2FkfSAqLyAoSlNPTi5wYXJzZShyZXNwb25zZSkpOwotICAg
ICAgICAgICAgc291cmNlTWFwID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBQYXJzZXIoc291
cmNlTWFwVVJMLCBwYXlsb2FkKTsKKyAgICAgICAgICAgIHZhciBwYXlsb2FkID0gLyoqIEB0eXBl
IHtTb3VyY2VNYXBWM30gKi8gKEpTT04ucGFyc2UocmVzcG9uc2UpKTsKKyAgICAgICAgICAgIHNv
dXJjZU1hcCA9IG5ldyBXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcChzb3VyY2VN
YXBVUkwsIHBheWxvYWQpOwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoZS5tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMTY2LDIz
NSArMTY2LDMgQEAgV2ViSW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZy5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHRoaXMuX3NjcmlwdEZvck9yaWdpbmFsVUlTb3VyY2VDb2RlID0gbmV3IE1h
cCgpOwogICAgIH0KIH0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9y
LlNvdXJjZU1hcFBheWxvYWQgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5zZWN0aW9ucyA9IFtd
OwotICAgIHRoaXMubWFwcGluZ3MgPSAiIjsKLSAgICB0aGlzLnNvdXJjZVJvb3QgPSAiIjsKLSAg
ICB0aGlzLnNvdXJjZXMgPSBbXTsKLX0KLQotLyoqCi0gKiBJbXBsZW1lbnRzIFNvdXJjZSBNYXAg
VjMgY29uc3VtZXIuIFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxl
ci93aWtpL1NvdXJjZU1hcHMKLSAqIGZvciBmb3JtYXQgZGVzY3JpcHRpb24uCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VNYXBwaW5nVVJMCi0gKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5Tb3VyY2VNYXBQYXlsb2FkfSBwYXlsb2FkCi0gKi8KLVdlYkluc3BlY3Rvci5T
b3VyY2VNYXBQYXJzZXIgPSBmdW5jdGlvbihzb3VyY2VNYXBwaW5nVVJMLCBwYXlsb2FkKQotewot
ICAgIGlmICghV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBhcnNlci5wcm90b3R5cGUuX2Jhc2U2NE1h
cCkgewotICAgICAgICBjb25zdCBiYXNlNjREaWdpdHMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RV
VldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5Tb3VyY2VNYXBQYXJzZXIucHJvdG90eXBlLl9iYXNlNjRNYXAgPSB7fTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYXNlNjREaWdpdHMubGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuU291cmNlTWFwUGFyc2VyLnByb3RvdHlwZS5fYmFzZTY0TWFw
W2Jhc2U2NERpZ2l0cy5jaGFyQXQoaSldID0gaTsKLSAgICB9Ci0KLSAgICB0aGlzLl9zb3VyY2VN
YXBwaW5nVVJMID0gc291cmNlTWFwcGluZ1VSTDsKLSAgICB0aGlzLl9tYXBwaW5ncyA9IFtdOwot
ICAgIHRoaXMuX3JldmVyc2VNYXBwaW5nc0J5U291cmNlVVJMID0ge307Ci0gICAgdGhpcy5fc291
cmNlQ29udGVudEJ5VVJMID0ge307Ci0gICAgdGhpcy5fcGFyc2VNYXBwaW5nUGF5bG9hZChwYXls
b2FkKTsKLX0KLQotV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBhcnNlci5wcm90b3R5cGUgPSB7Ci0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59Ci0gICAgICovCi0gICAgc291
cmNlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZXMgPSBbXTsKLSAgICAg
ICAgZm9yICh2YXIgc291cmNlVVJMIGluIHRoaXMuX3JldmVyc2VNYXBwaW5nc0J5U291cmNlVVJM
KQotICAgICAgICAgICAgc291cmNlcy5wdXNoKHNvdXJjZVVSTCk7Ci0gICAgICAgIHJldHVybiBz
b3VyY2VzOwotICAgIH0sCi0KLSAgICBzb3VyY2VDb250ZW50OiBmdW5jdGlvbihzb3VyY2VVUkwp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29udGVudEJ5VVJMW3NvdXJjZVVS
TF07Ci0gICAgfSwKLQotICAgIGZpbmRFbnRyeTogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1u
TnVtYmVyKQotICAgIHsKLSAgICAgICAgdmFyIGZpcnN0ID0gMDsKLSAgICAgICAgdmFyIGNvdW50
ID0gdGhpcy5fbWFwcGluZ3MubGVuZ3RoOwotICAgICAgICB3aGlsZSAoY291bnQgPiAxKSB7Ci0g
ICAgICAgICAgdmFyIHN0ZXAgPSBjb3VudCA+PiAxOwotICAgICAgICAgIHZhciBtaWRkbGUgPSBm
aXJzdCArIHN0ZXA7Ci0gICAgICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9tYXBwaW5nc1ttaWRk
bGVdOwotICAgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgbWFwcGluZ1swXSB8fCAobGluZU51bWJl
ciA9PSBtYXBwaW5nWzBdICYmIGNvbHVtbk51bWJlciA8IG1hcHBpbmdbMV0pKQotICAgICAgICAg
ICAgICBjb3VudCA9IHN0ZXA7Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgIGZpcnN0
ID0gbWlkZGxlOwotICAgICAgICAgICAgICBjb3VudCAtPSBzdGVwOwotICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGluZ3NbZmlyc3RdOwotICAgIH0sCi0K
LSAgICBmaW5kRW50cnlSZXZlcnNlZDogZnVuY3Rpb24oc291cmNlVVJMLCBsaW5lTnVtYmVyKQot
ICAgIHsKLSAgICAgICAgdmFyIG1hcHBpbmdzID0gdGhpcy5fcmV2ZXJzZU1hcHBpbmdzQnlTb3Vy
Y2VVUkxbc291cmNlVVJMXTsKLSAgICAgICAgZm9yICggOyBsaW5lTnVtYmVyIDwgbWFwcGluZ3Mu
bGVuZ3RoOyArK2xpbmVOdW1iZXIpIHsKLSAgICAgICAgICAgIHZhciBtYXBwaW5nID0gbWFwcGlu
Z3NbbGluZU51bWJlcl07Ci0gICAgICAgICAgICBpZiAobWFwcGluZykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbWFwcGluZzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGlu
Z3NbMF07Ci0gICAgfSwKLQotICAgIF9wYXJzZU1hcHBpbmdQYXlsb2FkOiBmdW5jdGlvbihtYXBw
aW5nUGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIGlmIChtYXBwaW5nUGF5bG9hZC5zZWN0aW9ucykK
LSAgICAgICAgICAgIHRoaXMuX3BhcnNlU2VjdGlvbnMobWFwcGluZ1BheWxvYWQuc2VjdGlvbnMp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9wYXJzZU1hcChtYXBwaW5nUGF5bG9h
ZCwgMCwgMCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFNvdXJj
ZU1hcFYzLlNlY3Rpb24+fSBzZWN0aW9ucwotICAgICAqLwotICAgIF9wYXJzZVNlY3Rpb25zOiBm
dW5jdGlvbihzZWN0aW9ucykKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vj
dGlvbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBzZWN0aW9uID0gc2VjdGlvbnNb
aV07Ci0gICAgICAgICAgICB0aGlzLl9wYXJzZU1hcChzZWN0aW9uLm1hcCwgc2VjdGlvbi5vZmZz
ZXQubGluZSwgc2VjdGlvbi5vZmZzZXQuY29sdW1uKQotICAgICAgICB9Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7U291cmNlTWFwVjN9IG1hcAotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJlcgotICAg
ICAqLwotICAgIF9wYXJzZU1hcDogZnVuY3Rpb24obWFwLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXIpCi0gICAgewotICAgICAgICB2YXIgc291cmNlSW5kZXggPSAwOwotICAgICAgICB2YXIgc291
cmNlTGluZU51bWJlciA9IDA7Ci0gICAgICAgIHZhciBzb3VyY2VDb2x1bW5OdW1iZXIgPSAwOwot
ICAgICAgICB2YXIgbmFtZUluZGV4ID0gMDsKLQotICAgICAgICB2YXIgc291cmNlcyA9IFtdOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcC5zb3VyY2VzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICB2YXIgc291cmNlVVJMID0gbWFwLnNvdXJjZXNbaV07Ci0gICAgICAgICAgICBp
ZiAobWFwLnNvdXJjZVJvb3QpCi0gICAgICAgICAgICAgICAgc291cmNlVVJMID0gbWFwLnNvdXJj
ZVJvb3QgKyAiLyIgKyBzb3VyY2VVUkw7Ci0gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5fY2Fu
b25pY2FsaXplVVJMKHNvdXJjZVVSTCwgdGhpcy5fc291cmNlTWFwcGluZ1VSTCk7Ci0gICAgICAg
ICAgICBzb3VyY2VzLnB1c2godXJsKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5fcmV2ZXJzZU1h
cHBpbmdzQnlTb3VyY2VVUkxbdXJsXSkKLSAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlTWFw
cGluZ3NCeVNvdXJjZVVSTFt1cmxdID0gW107Ci0gICAgICAgICAgICBpZiAobWFwLnNvdXJjZXND
b250ZW50ICYmIG1hcC5zb3VyY2VzQ29udGVudFtpXSkKLSAgICAgICAgICAgICAgICB0aGlzLl9z
b3VyY2VDb250ZW50QnlVUkxbdXJsXSA9IG1hcC5zb3VyY2VzQ29udGVudFtpXTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZhciBzdHJpbmdDaGFySXRlcmF0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLlNv
dXJjZU1hcFBhcnNlci5TdHJpbmdDaGFySXRlcmF0b3IobWFwLm1hcHBpbmdzKTsKLSAgICAgICAg
dmFyIHNvdXJjZVVSTCA9IHNvdXJjZXNbc291cmNlSW5kZXhdOwotICAgICAgICB2YXIgcmV2ZXJz
ZU1hcHBpbmdzID0gdGhpcy5fcmV2ZXJzZU1hcHBpbmdzQnlTb3VyY2VVUkxbc291cmNlVVJMXTsK
LQotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgaWYgKHN0cmluZ0NoYXJJdGVy
YXRvci5wZWVrKCkgPT09ICIsIikKLSAgICAgICAgICAgICAgICBzdHJpbmdDaGFySXRlcmF0b3Iu
bmV4dCgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHN0cmlu
Z0NoYXJJdGVyYXRvci5wZWVrKCkgPT09ICI7IikgewotICAgICAgICAgICAgICAgICAgICBsaW5l
TnVtYmVyICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlciA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0cmluZ0NoYXJJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmICghc3RyaW5nQ2hhckl0ZXJhdG9yLmhhc05leHQoKSkK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGNvbHVtbk51bWJlciArPSB0aGlzLl9kZWNvZGVWTFEoc3RyaW5nQ2hhckl0ZXJhdG9yKTsKLSAg
ICAgICAgICAgIGlmICh0aGlzLl9pc1NlcGFyYXRvcihzdHJpbmdDaGFySXRlcmF0b3IucGVlaygp
KSkgewotICAgICAgICAgICAgICAgIHRoaXMuX21hcHBpbmdzLnB1c2goW2xpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcl0pOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YXIgc291cmNlSW5kZXhEZWx0YSA9IHRoaXMuX2RlY29kZVZMUShzdHJp
bmdDaGFySXRlcmF0b3IpOwotICAgICAgICAgICAgaWYgKHNvdXJjZUluZGV4RGVsdGEpIHsKLSAg
ICAgICAgICAgICAgICBzb3VyY2VJbmRleCArPSBzb3VyY2VJbmRleERlbHRhOwotICAgICAgICAg
ICAgICAgIHNvdXJjZVVSTCA9IHNvdXJjZXNbc291cmNlSW5kZXhdOwotICAgICAgICAgICAgICAg
IHJldmVyc2VNYXBwaW5ncyA9IHRoaXMuX3JldmVyc2VNYXBwaW5nc0J5U291cmNlVVJMW3NvdXJj
ZVVSTF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzb3VyY2VMaW5lTnVtYmVyICs9IHRo
aXMuX2RlY29kZVZMUShzdHJpbmdDaGFySXRlcmF0b3IpOwotICAgICAgICAgICAgc291cmNlQ29s
dW1uTnVtYmVyICs9IHRoaXMuX2RlY29kZVZMUShzdHJpbmdDaGFySXRlcmF0b3IpOwotICAgICAg
ICAgICAgaWYgKCF0aGlzLl9pc1NlcGFyYXRvcihzdHJpbmdDaGFySXRlcmF0b3IucGVlaygpKSkK
LSAgICAgICAgICAgICAgICBuYW1lSW5kZXggKz0gdGhpcy5fZGVjb2RlVkxRKHN0cmluZ0NoYXJJ
dGVyYXRvcik7Ci0KLSAgICAgICAgICAgIHRoaXMuX21hcHBpbmdzLnB1c2goW2xpbmVOdW1iZXIs
IGNvbHVtbk51bWJlciwgc291cmNlVVJMLCBzb3VyY2VMaW5lTnVtYmVyLCBzb3VyY2VDb2x1bW5O
dW1iZXJdKTsKLSAgICAgICAgICAgIGlmICghcmV2ZXJzZU1hcHBpbmdzW3NvdXJjZUxpbmVOdW1i
ZXJdKQotICAgICAgICAgICAgICAgIHJldmVyc2VNYXBwaW5nc1tzb3VyY2VMaW5lTnVtYmVyXSA9
IFtsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXJdOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9p
c1NlcGFyYXRvcjogZnVuY3Rpb24oY2hhcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBjaGFyID09
PSAiLCIgfHwgY2hhciA9PT0gIjsiOwotICAgIH0sCi0KLSAgICBfZGVjb2RlVkxROiBmdW5jdGlv
bihzdHJpbmdDaGFySXRlcmF0b3IpCi0gICAgewotICAgICAgICAvLyBSZWFkIHVuc2lnbmVkIHZh
bHVlLgotICAgICAgICB2YXIgcmVzdWx0ID0gMDsKLSAgICAgICAgdmFyIHNoaWZ0ID0gMDsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgdmFyIGRpZ2l0ID0gdGhpcy5fYmFzZTY0TWFwW3N0cmlu
Z0NoYXJJdGVyYXRvci5uZXh0KCldOwotICAgICAgICAgICAgcmVzdWx0ICs9IChkaWdpdCAmIHRo
aXMuX1ZMUV9CQVNFX01BU0spIDw8IHNoaWZ0OwotICAgICAgICAgICAgc2hpZnQgKz0gdGhpcy5f
VkxRX0JBU0VfU0hJRlQ7Ci0gICAgICAgIH0gd2hpbGUgKGRpZ2l0ICYgdGhpcy5fVkxRX0NPTlRJ
TlVBVElPTl9NQVNLKTsKLQotICAgICAgICAvLyBGaXggdGhlIHNpZ24uCi0gICAgICAgIHZhciBu
ZWdhdGl2ZSA9IHJlc3VsdCAmIDE7Ci0gICAgICAgIHJlc3VsdCA+Pj0gMTsKLSAgICAgICAgcmV0
dXJuIG5lZ2F0aXZlID8gLXJlc3VsdCA6IHJlc3VsdDsKLSAgICB9LAotCi0gICAgX2Nhbm9uaWNh
bGl6ZVVSTDogZnVuY3Rpb24odXJsLCBiYXNlVVJMKQotICAgIHsKLSAgICAgICAgaWYgKCF1cmwg
fHwgIWJhc2VVUkwgfHwgdXJsLmFzUGFyc2VkVVJMKCkgfHwgdXJsLnN1YnN0cmluZygwLCA1KSA9
PT0gImRhdGE6IikKLSAgICAgICAgICAgIHJldHVybiB1cmw7Ci0KLSAgICAgICAgdmFyIGJhc2Ug
PSBiYXNlVVJMLmFzUGFyc2VkVVJMKCk7Ci0gICAgICAgIGlmICghYmFzZSkKLSAgICAgICAgICAg
IHJldHVybiB1cmw7Ci0KLSAgICAgICAgdmFyIGJhc2VIb3N0ID0gYmFzZS5zY2hlbWUgKyAiOi8v
IiArIGJhc2UuaG9zdCArIChiYXNlLnBvcnQgPyAiOiIgKyBiYXNlLnBvcnQgOiAiIik7Ci0gICAg
ICAgIGlmICh1cmxbMF0gPT09ICIvIikKLSAgICAgICAgICAgIHJldHVybiBiYXNlSG9zdCArIHVy
bDsKLSAgICAgICAgcmV0dXJuIGJhc2VIb3N0ICsgYmFzZS5mb2xkZXJQYXRoQ29tcG9uZW50cyAr
ICIvIiArIHVybDsKLSAgICB9LAotCi0gICAgX1ZMUV9CQVNFX1NISUZUOiA1LAotICAgIF9WTFFf
QkFTRV9NQVNLOiAoMSA8PCA1KSAtIDEsCi0gICAgX1ZMUV9DT05USU5VQVRJT05fTUFTSzogMSA8
PCA1Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5Tb3VyY2VN
YXBQYXJzZXIuU3RyaW5nQ2hhckl0ZXJhdG9yID0gZnVuY3Rpb24oc3RyaW5nKQotewotICAgIHRo
aXMuX3N0cmluZyA9IHN0cmluZzsKLSAgICB0aGlzLl9wb3NpdGlvbiA9IDA7Ci19Ci0KLVdlYklu
c3BlY3Rvci5Tb3VyY2VNYXBQYXJzZXIuU3RyaW5nQ2hhckl0ZXJhdG9yLnByb3RvdHlwZSA9IHsK
LSAgICBuZXh0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5n
LmNoYXJBdCh0aGlzLl9wb3NpdGlvbisrKTsKLSAgICB9LAotCi0gICAgcGVlazogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fcG9zaXRp
b24pOwotICAgIH0sCi0KLSAgICBoYXNOZXh0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fcG9zaXRpb24gPCB0aGlzLl9zdHJpbmcubGVuZ3RoOwotICAgIH0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlTWFwLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzc0NjI1MWM3MTVkM2E5MGMyZGJjMjRkYTNmYjY1NDVjYjVjZTUxMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlTWFwLmpz
CkBAIC0wLDAgKzEsNDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBJbXBsZW1lbnRzIFNvdXJjZSBNYXAgVjMgbW9kZWwu
IFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxlci93aWtpL1NvdXJj
ZU1hcHMKKyAqIGZvciBmb3JtYXQgZGVzY3JpcHRpb24uCisgKiBAY29uc3RydWN0b3IKKyAqIEBw
YXJhbSB7c3RyaW5nfSBzb3VyY2VNYXBwaW5nVVJMCisgKiBAcGFyYW0ge1NvdXJjZU1hcFYzfSBw
YXlsb2FkCisgKi8KK1dlYkluc3BlY3Rvci5Tb3VyY2VNYXAgPSBmdW5jdGlvbihzb3VyY2VNYXBw
aW5nVVJMLCBwYXlsb2FkKQoreworICAgIGlmICghV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90
b3R5cGUuX2Jhc2U2NE1hcCkgeworICAgICAgICBjb25zdCBiYXNlNjREaWdpdHMgPSAiQUJDREVG
R0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkr
LyI7CisgICAgICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLl9iYXNlNjRNYXAg
PSB7fTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYXNlNjREaWdpdHMubGVuZ3RoOyAr
K2kpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5fYmFzZTY0
TWFwW2Jhc2U2NERpZ2l0cy5jaGFyQXQoaSldID0gaTsKKyAgICB9CisKKyAgICB0aGlzLl9zb3Vy
Y2VNYXBwaW5nVVJMID0gc291cmNlTWFwcGluZ1VSTDsKKyAgICB0aGlzLl9tYXBwaW5ncyA9IFtd
OworICAgIHRoaXMuX3NvdXJjZUNvbnRlbnRCeVVSTCA9IHt9OworICAgIHRoaXMuX3BhcnNlTWFw
cGluZ1BheWxvYWQocGF5bG9hZCk7Cit9CisKK1dlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90
eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fQorICAgICAq
LworICAgIHNvdXJjZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBFcnJv
cigiTm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBzb3VyY2VVUkwKKyAgICAgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfQorICAg
ICAqLworICAgIHNvdXJjZUNvbnRlbnQ6IGZ1bmN0aW9uKHNvdXJjZVVSTCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb250ZW50QnlVUkxbc291cmNlVVJMXTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIgaW4gZ2VuZXJhdGVk
IHJlc291cmNlCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJlciBpbiBnZW5lcmF0
ZWQgcmVzb3VyY2UKKyAgICAgKi8KKyAgICBmaW5kRW50cnk6IGZ1bmN0aW9uKGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBmaXJzdCA9IDA7CisgICAgICAgIHZh
ciBjb3VudCA9IHRoaXMuX21hcHBpbmdzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGNvdW50ID4g
MSkgeworICAgICAgICAgIHZhciBzdGVwID0gY291bnQgPj4gMTsKKyAgICAgICAgICB2YXIgbWlk
ZGxlID0gZmlyc3QgKyBzdGVwOworICAgICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fbWFwcGlu
Z3NbbWlkZGxlXTsKKyAgICAgICAgICBpZiAobGluZU51bWJlciA8IG1hcHBpbmdbMF0gfHwgKGxp
bmVOdW1iZXIgPT0gbWFwcGluZ1swXSAmJiBjb2x1bW5OdW1iZXIgPCBtYXBwaW5nWzFdKSkKKyAg
ICAgICAgICAgICAgY291bnQgPSBzdGVwOworICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICBmaXJzdCA9IG1pZGRsZTsKKyAgICAgICAgICAgICAgY291bnQgLT0gc3RlcDsKKyAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX21hcHBpbmdzW2ZpcnN0XTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtTb3VyY2VNYXBWM30gbWFwcGluZ1BheWxv
YWQKKyAgICAgKi8KKyAgICBfcGFyc2VNYXBwaW5nUGF5bG9hZDogZnVuY3Rpb24obWFwcGluZ1Bh
eWxvYWQpCisgICAgeworICAgICAgICBpZiAobWFwcGluZ1BheWxvYWQuc2VjdGlvbnMpCisgICAg
ICAgICAgICB0aGlzLl9wYXJzZVNlY3Rpb25zKG1hcHBpbmdQYXlsb2FkLnNlY3Rpb25zKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fcGFyc2VNYXAobWFwcGluZ1BheWxvYWQsIDAs
IDApOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FycmF5LjxTb3VyY2VNYXBW
My5TZWN0aW9uPn0gc2VjdGlvbnMKKyAgICAgKi8KKyAgICBfcGFyc2VTZWN0aW9uczogZnVuY3Rp
b24oc2VjdGlvbnMpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlY3Rpb25z
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IHNlY3Rpb25zW2ldOwor
ICAgICAgICAgICAgdGhpcy5fcGFyc2VNYXAoc2VjdGlvbi5tYXAsIHNlY3Rpb24ub2Zmc2V0Lmxp
bmUsIHNlY3Rpb24ub2Zmc2V0LmNvbHVtbik7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtTb3VyY2VNYXBWM30gbWFwCisgICAgICogQHBhcmFtIHtudW1iZXJ9
IGxpbmVOdW1iZXIKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uTnVtYmVyCisgICAgICov
CisgICAgX3BhcnNlTWFwOiBmdW5jdGlvbihtYXAsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikK
KyAgICB7CisgICAgICAgIHZhciBzb3VyY2VJbmRleCA9IDA7CisgICAgICAgIHZhciBzb3VyY2VM
aW5lTnVtYmVyID0gMDsKKyAgICAgICAgdmFyIHNvdXJjZUNvbHVtbk51bWJlciA9IDA7CisgICAg
ICAgIHZhciBuYW1lSW5kZXggPSAwOworCisgICAgICAgIHZhciBzb3VyY2VzID0gW107CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwLnNvdXJjZXMubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgIHZhciBzb3VyY2VVUkwgPSBtYXAuc291cmNlc1tpXTsKKyAgICAgICAgICAgIGlmICht
YXAuc291cmNlUm9vdCkKKyAgICAgICAgICAgICAgICBzb3VyY2VVUkwgPSBtYXAuc291cmNlUm9v
dCArICIvIiArIHNvdXJjZVVSTDsKKyAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLl9jYW5vbmlj
YWxpemVVUkwoc291cmNlVVJMLCB0aGlzLl9zb3VyY2VNYXBwaW5nVVJMKTsKKyAgICAgICAgICAg
IHNvdXJjZXMucHVzaCh1cmwpOworICAgICAgICAgICAgaWYgKG1hcC5zb3VyY2VzQ29udGVudCAm
JiBtYXAuc291cmNlc0NvbnRlbnRbaV0pCisgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlQ29u
dGVudEJ5VVJMW3VybF0gPSBtYXAuc291cmNlc0NvbnRlbnRbaV07CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgc3RyaW5nQ2hhckl0ZXJhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAu
U3RyaW5nQ2hhckl0ZXJhdG9yKG1hcC5tYXBwaW5ncyk7CisgICAgICAgIHZhciBzb3VyY2VVUkwg
PSBzb3VyY2VzW3NvdXJjZUluZGV4XTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICAgICAgaWYgKHN0cmluZ0NoYXJJdGVyYXRvci5wZWVrKCkgPT09ICIsIikKKyAgICAgICAgICAg
ICAgICBzdHJpbmdDaGFySXRlcmF0b3IubmV4dCgpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgd2hpbGUgKHN0cmluZ0NoYXJJdGVyYXRvci5wZWVrKCkgPT09ICI7Iikgewor
ICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7CisgICAgICAgICAgICAgICAgICAg
IGNvbHVtbk51bWJlciA9IDA7CisgICAgICAgICAgICAgICAgICAgIHN0cmluZ0NoYXJJdGVyYXRv
ci5uZXh0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghc3RyaW5n
Q2hhckl0ZXJhdG9yLmhhc05leHQoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbHVtbk51bWJlciArPSB0aGlzLl9kZWNvZGVWTFEo
c3RyaW5nQ2hhckl0ZXJhdG9yKTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc1NlcGFyYXRvcihz
dHJpbmdDaGFySXRlcmF0b3IucGVlaygpKSkgeworICAgICAgICAgICAgICAgIHRoaXMuX21hcHBp
bmdzLnB1c2goW2xpbmVOdW1iZXIsIGNvbHVtbk51bWJlcl0pOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgc291cmNlSW5kZXhEZWx0
YSA9IHRoaXMuX2RlY29kZVZMUShzdHJpbmdDaGFySXRlcmF0b3IpOworICAgICAgICAgICAgaWYg
KHNvdXJjZUluZGV4RGVsdGEpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2VJbmRleCArPSBzb3Vy
Y2VJbmRleERlbHRhOworICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9IHNvdXJjZXNbc291cmNl
SW5kZXhdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlTGluZU51bWJlciArPSB0
aGlzLl9kZWNvZGVWTFEoc3RyaW5nQ2hhckl0ZXJhdG9yKTsKKyAgICAgICAgICAgIHNvdXJjZUNv
bHVtbk51bWJlciArPSB0aGlzLl9kZWNvZGVWTFEoc3RyaW5nQ2hhckl0ZXJhdG9yKTsKKyAgICAg
ICAgICAgIGlmICghdGhpcy5faXNTZXBhcmF0b3Ioc3RyaW5nQ2hhckl0ZXJhdG9yLnBlZWsoKSkp
CisgICAgICAgICAgICAgICAgbmFtZUluZGV4ICs9IHRoaXMuX2RlY29kZVZMUShzdHJpbmdDaGFy
SXRlcmF0b3IpOworCisgICAgICAgICAgICB0aGlzLl9tYXBwaW5ncy5wdXNoKFtsaW5lTnVtYmVy
LCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCwgc291cmNlTGluZU51bWJlciwgc291cmNlQ29sdW1u
TnVtYmVyXSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtz
dHJpbmd9IGNoYXIKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIF9pc1Nl
cGFyYXRvcjogZnVuY3Rpb24oY2hhcikKKyAgICB7CisgICAgICAgIHJldHVybiBjaGFyID09PSAi
LCIgfHwgY2hhciA9PT0gIjsiOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5Tb3VyY2VNYXAuU3RyaW5nQ2hhckl0ZXJhdG9yfSBzdHJpbmdDaGFySXRlcmF0
b3IKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICovCisgICAgX2RlY29kZVZMUTogZnVu
Y3Rpb24oc3RyaW5nQ2hhckl0ZXJhdG9yKQorICAgIHsKKyAgICAgICAgLy8gUmVhZCB1bnNpZ25l
ZCB2YWx1ZS4KKyAgICAgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgICAgIHZhciBzaGlmdCA9IDA7
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHZhciBkaWdpdCA9IHRoaXMuX2Jhc2U2NE1hcFtz
dHJpbmdDaGFySXRlcmF0b3IubmV4dCgpXTsKKyAgICAgICAgICAgIHJlc3VsdCArPSAoZGlnaXQg
JiB0aGlzLl9WTFFfQkFTRV9NQVNLKSA8PCBzaGlmdDsKKyAgICAgICAgICAgIHNoaWZ0ICs9IHRo
aXMuX1ZMUV9CQVNFX1NISUZUOworICAgICAgICB9IHdoaWxlIChkaWdpdCAmIHRoaXMuX1ZMUV9D
T05USU5VQVRJT05fTUFTSyk7CisKKyAgICAgICAgLy8gRml4IHRoZSBzaWduLgorICAgICAgICB2
YXIgbmVnYXRpdmUgPSByZXN1bHQgJiAxOworICAgICAgICByZXN1bHQgPj49IDE7CisgICAgICAg
IHJldHVybiBuZWdhdGl2ZSA/IC1yZXN1bHQgOiByZXN1bHQ7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVS
TAorICAgICAqLworICAgIF9jYW5vbmljYWxpemVVUkw6IGZ1bmN0aW9uKHVybCwgYmFzZVVSTCkK
KyAgICB7CisgICAgICAgIGlmICghdXJsIHx8ICFiYXNlVVJMIHx8IHVybC5hc1BhcnNlZFVSTCgp
IHx8IHVybC5zdWJzdHJpbmcoMCwgNSkgPT09ICJkYXRhOiIpCisgICAgICAgICAgICByZXR1cm4g
dXJsOworCisgICAgICAgIHZhciBiYXNlID0gYmFzZVVSTC5hc1BhcnNlZFVSTCgpOworICAgICAg
ICBpZiAoIWJhc2UpCisgICAgICAgICAgICByZXR1cm4gdXJsOworCisgICAgICAgIHZhciBiYXNl
SG9zdCA9IGJhc2Uuc2NoZW1lICsgIjovLyIgKyBiYXNlLmhvc3QgKyAoYmFzZS5wb3J0ID8gIjoi
ICsgYmFzZS5wb3J0IDogIiIpOworICAgICAgICBpZiAodXJsWzBdID09PSAiLyIpCisgICAgICAg
ICAgICByZXR1cm4gYmFzZUhvc3QgKyB1cmw7CisgICAgICAgIHJldHVybiBiYXNlSG9zdCArIGJh
c2UuZm9sZGVyUGF0aENvbXBvbmVudHMgKyAiLyIgKyB1cmw7CisgICAgfSwKKworICAgIF9WTFFf
QkFTRV9TSElGVDogNSwKKyAgICBfVkxRX0JBU0VfTUFTSzogKDEgPDwgNSkgLSAxLAorICAgIF9W
TFFfQ09OVElOVUFUSU9OX01BU0s6IDEgPDwgNQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3Rvcgor
ICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZworICovCitXZWJJbnNwZWN0b3IuU291cmNlTWFwLlN0
cmluZ0NoYXJJdGVyYXRvciA9IGZ1bmN0aW9uKHN0cmluZykKK3sKKyAgICB0aGlzLl9zdHJpbmcg
PSBzdHJpbmc7CisgICAgdGhpcy5fcG9zaXRpb24gPSAwOworfQorCitXZWJJbnNwZWN0b3IuU291
cmNlTWFwLlN0cmluZ0NoYXJJdGVyYXRvci5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICog
QHJldHVybiB7c3RyaW5nfQorICAgICAqLworICAgIG5leHQ6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX3Bvc2l0aW9uKyspOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CisgICAgICovCisgICAgcGVl
azogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZy5jaGFyQXQo
dGhpcy5fcG9zaXRpb24pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29s
ZWFufQorICAgICAqLworICAgIGhhc05leHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9wb3NpdGlvbiA8IHRoaXMuX3N0cmluZy5sZW5ndGg7CisgICAgfQorfQorCisv
KioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcAor
ICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZU1hcHBpbmdVUkwKKyAqIEBwYXJhbSB7U291cmNlTWFw
VjN9IHBheWxvYWQKKyAqLworV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAgPSBm
dW5jdGlvbihzb3VyY2VNYXBwaW5nVVJMLCBwYXlsb2FkKQoreworICAgIFdlYkluc3BlY3Rvci5T
b3VyY2VNYXAuY2FsbCh0aGlzLCBzb3VyY2VNYXBwaW5nVVJMLCBwYXlsb2FkKTsKK30KKworV2Vi
SW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAucHJvdG90eXBlID0geworICAgIC8qKgor
ICAgICAqIEBvdmVycmlkZQorICAgICAqLworICAgIHNvdXJjZXM6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHZhciBzb3VyY2VzID0gW107CisgICAgICAgIGZvciAodmFyIHNvdXJjZVVSTCBp
biB0aGlzLl9yZXZlcnNlTWFwcGluZ3NCeVNvdXJjZVVSTCkKKyAgICAgICAgICAgIHNvdXJjZXMu
cHVzaChzb3VyY2VVUkwpOworICAgICAgICByZXR1cm4gc291cmNlczsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVVSTCBvZiB0aGUgb3JpZ2luYXRpbmcg
cmVzb3VyY2UKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlciBpbiB0aGUgb3JpZ2lu
YXRpbmcgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuIHtBcnJheX0KKyAgICAgKi8KKyAgICBmaW5k
RW50cnlSZXZlcnNlZDogZnVuY3Rpb24oc291cmNlVVJMLCBsaW5lTnVtYmVyKQorICAgIHsKKyAg
ICAgICAgdmFyIG1hcHBpbmdzID0gdGhpcy5fcmV2ZXJzZU1hcHBpbmdzQnlTb3VyY2VVUkxbc291
cmNlVVJMXTsKKyAgICAgICAgZm9yICggOyBsaW5lTnVtYmVyIDwgbWFwcGluZ3MubGVuZ3RoOyAr
K2xpbmVOdW1iZXIpIHsKKyAgICAgICAgICAgIHZhciBtYXBwaW5nID0gbWFwcGluZ3NbbGluZU51
bWJlcl07CisgICAgICAgICAgICBpZiAobWFwcGluZykKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFwcGluZzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGluZ3NbMF07Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqLworICAgIF9wYXJzZU1h
cDogZnVuY3Rpb24obWFwLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgeworICAgICAg
ICBXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5fcGFyc2VNYXAuY2FsbCh0aGlzLCBt
YXAsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CisKKyAgICAgICAgdGhpcy5fcmV2ZXJzZU1h
cHBpbmdzQnlTb3VyY2VVUkwgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
Ll9tYXBwaW5ncy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIG1hcHBpbmcgPSB0aGlz
Ll9tYXBwaW5nc1tpXTsKKyAgICAgICAgICAgIHZhciBzb3VyY2VVUkwgPSBtYXBwaW5nWzJdOwor
ICAgICAgICAgICAgaWYgKG1hcC5zb3VyY2VSb290KQorICAgICAgICAgICAgICAgIHNvdXJjZVVS
TCA9IG1hcC5zb3VyY2VSb290ICsgIi8iICsgc291cmNlVVJMOworICAgICAgICAgICAgdmFyIHVy
bCA9IHRoaXMuX2Nhbm9uaWNhbGl6ZVVSTChzb3VyY2VVUkwsIHRoaXMuX3NvdXJjZU1hcHBpbmdV
UkwpOworICAgICAgICAgICAgaWYgKCF0aGlzLl9yZXZlcnNlTWFwcGluZ3NCeVNvdXJjZVVSTFt1
cmxdKQorICAgICAgICAgICAgICAgIHRoaXMuX3JldmVyc2VNYXBwaW5nc0J5U291cmNlVVJMW3Vy
bF0gPSBbXTsKKyAgICAgICAgICAgIHZhciByZXZlcnNlTWFwcGluZ3MgPSB0aGlzLl9yZXZlcnNl
TWFwcGluZ3NCeVNvdXJjZVVSTFt1cmxdOworICAgICAgICAgICAgdmFyIHNvdXJjZUxpbmUgPSBt
YXBwaW5nWzNdOworICAgICAgICAgICAgaWYgKCFyZXZlcnNlTWFwcGluZ3Nbc291cmNlTGluZV0p
CisgICAgICAgICAgICAgICAgcmV2ZXJzZU1hcHBpbmdzW3NvdXJjZUxpbmVdID0gW21hcHBpbmdb
MF0sIG1hcHBpbmdbMV1dOworICAgICAgICB9CisgICAgfSwKKworICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUKK30KKworLyoqCisgKiBAY29uc3RydWN0b3IK
KyAqIEBleHRlbmRzIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAKKyAqIEBwYXJhbSB7c3RyaW5nfSBz
b3VyY2VNYXBwaW5nVVJMCisgKiBAcGFyYW0ge1NvdXJjZU1hcFYzfSBwYXlsb2FkCisgKi8KK1dl
Ykluc3BlY3Rvci5SYW5nZUJhc2VkU291cmNlTWFwID0gZnVuY3Rpb24oc291cmNlTWFwcGluZ1VS
TCwgcGF5bG9hZCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuU291cmNlTWFwLmNhbGwodGhpcywgc291
cmNlTWFwcGluZ1VSTCwgcGF5bG9hZCk7Cit9CisKK1dlYkluc3BlY3Rvci5SYW5nZUJhc2VkU291
cmNlTWFwLlJldmVyc2VNYXBwaW5nQ29tcGFyYXRvciA9IGZ1bmN0aW9uKGEsIGIpCit7CisgICAg
aWYgKGFbMF0gIT09IGJbMF0pCisgICAgICAgIHJldHVybiBhWzBdIC0gYlswXTsKKyAgICByZXR1
cm4gYVsxXSAtIGJbMV07Cit9CisKK1dlYkluc3BlY3Rvci5SYW5nZUJhc2VkU291cmNlTWFwLnBy
b3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKi8KKyAgICBzb3Vy
Y2VzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgc291cmNlcyA9IFtdOworICAgICAg
ICBmb3IgKHZhciBzb3VyY2VVUkwgaW4gdGhpcy5fcmV2ZXJzZUVudHJpZXNCeVNvdXJjZVVSTCkK
KyAgICAgICAgICAgIHNvdXJjZXMucHVzaChzb3VyY2VVUkwpOworICAgICAgICByZXR1cm4gc291
cmNlczsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1i
ZXIgaW4gdGhlIGdlbmVyYXRlZCByZXNvdXJjZQorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1
bW5OdW1iZXIgaW4gdGhlIGdlbmVyYXRlZCByZXNvdXJjZQorICAgICAqIEByZXR1cm4gez9XZWJJ
bnNwZWN0b3IuU291cmNlUmFuZ2V9CisgICAgICovCisgICAgZmluZFNvdXJjZVJhbmdlOiBmdW5j
dGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgeworICAgICAgICB2YXIgY29tcGFy
YXRvciA9IFdlYkluc3BlY3Rvci5SYW5nZUJhc2VkU291cmNlTWFwLlJldmVyc2VNYXBwaW5nQ29t
cGFyYXRvcjsKKyAgICAgICAgdmFyIGVudHJ5ID0gW251bGwsIG51bGwsIG51bGwsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlcl07CisgICAgICAgIHZhciByZXZlcnNlRW50cmllczsKKyAgICAgICAg
dmFyIHVybDsKKyAgICAgICAgZm9yICh2YXIgc291cmNlVVJMIGluIHRoaXMuX3JldmVyc2VFbnRy
aWVzQnlTb3VyY2VVUkwpIHsKKyAgICAgICAgICAgICByZXZlcnNlRW50cmllcyA9IHRoaXMuX3Jl
dmVyc2VFbnRyaWVzQnlTb3VyY2VVUkxbc291cmNlVVJMXTsKKyAgICAgICAgICAgICB2YXIgaW5k
ZXggPSBiaW5hcnlTZWFyY2goZW50cnksIHJldmVyc2VFbnRyaWVzLCBjb21wYXJhdG9yKTsKKyAg
ICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgICB1cmwgPSBzb3Vy
Y2VVUkw7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgIGluZGV4ID0gLShpbmRleCArIDEpOworICAgICAgICAgICAgIGlmICgoaW5kZXggJSAy
KSAmJiBjb21wYXJhdG9yKGVudHJ5LCByZXZlcnNlRW50cmllc1tpbmRleCAtIDFdKSA+PSAwICYm
IGNvbXBhcmF0b3IoZW50cnksIHJldmVyc2VFbnRyaWVzW2luZGV4XSkgPD0gMCkgeworICAgICAg
ICAgICAgICAgICB1cmwgPSBzb3VyY2VVUkw7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXJsKQorICAgICAgICAgICAg
cmV0dXJuIG51bGw7CisKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuU291cmNlUmFu
Z2UodXJsLCByZXZlcnNlRW50cmllc1tpbmRleCAtIDFdWzNdLCByZXZlcnNlRW50cmllc1tpbmRl
eCAtIDFdWzRdLCByZXZlcnNlRW50cmllc1tpbmRleF1bM10sIHJldmVyc2VFbnRyaWVzW2luZGV4
XVs0XSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqLworICAg
IF9wYXJzZU1hcDogZnVuY3Rpb24obWFwLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAg
eworICAgICAgICBXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5fcGFyc2VNYXAuY2Fs
bCh0aGlzLCBtYXAsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CisKKyAgICAgICAgdGhpcy5f
cmV2ZXJzZUVudHJpZXNCeVNvdXJjZVVSTCA9IHt9OworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuX21hcHBpbmdzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgc291cmNl
VVJMID0gdGhpcy5fbWFwcGluZ3NbMl07CisgICAgICAgICAgICB2YXIgcmV2ZXJzZUVudHJpZXMg
PSB0aGlzLl9yZXZlcnNlRW50cmllc0J5U291cmNlVVJMW3NvdXJjZVVSTF07CisgICAgICAgICAg
ICBpZiAoIXJldmVyc2VFbnRyaWVzKSB7CisgICAgICAgICAgICAgICAgcmV2ZXJzZUVudHJpZXMg
PSBbXTsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlRW50cmllc0J5U291cmNlVVJMW3Nv
dXJjZVVSTF0gPSByZXZlcnNlRW50cmllczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dmVyc2VFbnRyaWVzLnB1c2godGhpcy5fbWFwcGluZ3NbaV0pOworICAgICAgICB9CisgICAgICAg
IGZvciAodmFyIHNvdXJjZVVSTCBpbiB0aGlzLl9yZXZlcnNlRW50cmllc0J5U291cmNlVVJMKQor
ICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZUVudHJpZXNCeVNvdXJjZVVSTFtzb3VyY2VVUkxdLnNv
cnQoV2ViSW5zcGVjdG9yLlJhbmdlQmFzZWRTb3VyY2VNYXAuUmV2ZXJzZU1hcHBpbmdDb21wYXJh
dG9yKTsKKyAgICB9LAorCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuU291cmNlTWFwLnBy
b3RvdHlwZQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtzdHJpbmd9IHVy
bAorICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0TGluZQorICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0
Q29sdW1uCisgKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQorICogQHBhcmFtIHtudW1iZXJ9IGVu
ZENvbHVtbgorICovCitXZWJJbnNwZWN0b3IuU291cmNlUmFuZ2UgPSBmdW5jdGlvbih1cmwsIHN0
YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGVuZExpbmUsIGVuZENvbHVtbikKK3sKKyAgICB0aGlzLnVy
bCA9IHVybDsKKyAgICB0aGlzLnN0YXJ0TGluZSA9IHN0YXJ0TGluZTsKKyAgICB0aGlzLmVuZExp
bmUgPSBlbmRMaW5lOworICAgIHRoaXMuc3RhcnRDb2x1bW4gPSBzdGFydENvbHVtbjsKKyAgICB0
aGlzLmVuZENvbHVtbiA9IGVuZENvbHVtbjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCBlNDQyMmRmYTQwYmYwOGU2ZTMzMWZkZGU5ZTNl
YzNiZDljMmU4NzI2Li5mOWM3OTkxM2IxYTE3YWE1OTdjOWQ3YWNmZjBhM2UzNzZjOWJkNTMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBAIC0x
ODEsNiArMTgxLDcgQEAKICAgICA8ZmlsZT5Tb3VyY2VGcmFtZS5qczwvZmlsZT4KICAgICA8Zmls
ZT5Tb3VyY2VIVE1MVG9rZW5pemVyLmpzPC9maWxlPgogICAgIDxmaWxlPlNvdXJjZUphdmFTY3Jp
cHRUb2tlbml6ZXIuanM8L2ZpbGU+CisgICAgPGZpbGU+U291cmNlTWFwLmpzPC9maWxlPgogICAg
IDxmaWxlPlNvdXJjZU1hcHBpbmcuanM8L2ZpbGU+CiAgICAgPGZpbGU+U291cmNlVG9rZW5pemVy
LmpzPC9maWxlPgogICAgIDxmaWxlPlNwZWN0cnVtLmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggZWM1ZjRiNmFm
NmJiNjQ4ZjI5ZWM3ODgyMmQ4OTM2OTIxNGU5ZTlkZi4uZWU0ZTQxNzU4MzRhMTA1NzU4MTZiODI1
NDg1ZjRlYTIxMGU5NzZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sCkBAIC0xMzEsNiArMTMxLDcgQEAgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJGaWxlU3lzdGVtTW9kZWwuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkZpbGVVdGls
cy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
RGVidWdnZXJNb2RlbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iU291cmNlTWFwLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJTb3VyY2VNYXBwaW5nLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTY3JpcHQuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkxpbmtpZmllci5qcyI+PC9zY3Jp
cHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180786</attachid>
            <date>2012-12-27 03:22:51 -0800</date>
            <delta_ts>2012-12-27 05:20:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105764-20121227152002.patch</filename>
            <type>text/plain</type>
            <size>39164</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTY5ODBjYmYzYmFlZmM3
ZWUxYzEzY2E1YmUzYjMyZjU2NGViMTY5My4uN2Y1ZDIxNTI3YzIyYWRlMjZmN2M0ZmIxYzY0ZjUx
ZTcxNTE1MzJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEyLTI3ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUmVmYWN0b3IgU291cmNlTWFwUGFyc2VyIHRvIGVuYWJsZSByYW5nZS1iYXNlZCBzb3Vy
Y2VtYXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NTc2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
c3Q6IGluc3BlY3Rvci9zdHlsZXMvcmFuZ2UtYmFzZWQtbWFwcGluZy5odG1sCisKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5OgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q29tcGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9yU2NyaXB0KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZU1hcC5qczogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcu
anMuCisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwKToKKyAgICAgICAgICBBYnN0cmFj
dC4gUmVuYW1lZCBmcm9tIFNvdXJjZU1hcFBhcnNlciBhbmQgc3VwcG9ydHMgb25seSBkaXJlY3Qg
KGdlbmVyYXRlZCAtPiBvcmlnaW5hdGluZyBzb3VyY2UpIG1hcHBpbmcgdmlhIGZpbmRFbnRyeSgp
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5zb3VyY2VzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLnNvdXJjZUNvbnRlbnQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ1Bh
eWxvYWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuX3BhcnNl
U2VjdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuX3Bh
cnNlTWFwKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLl9pc1Nl
cGFyYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5fZGVj
b2RlVkxRKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLl9jYW5v
bmljYWxpemVVUkwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5TdHJpbmdDaGFy
SXRlcmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5TdHJpbmdDaGFySXRl
cmF0b3IucHJvdG90eXBlLm5leHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5T
dHJpbmdDaGFySXRlcmF0b3IucHJvdG90eXBlLnBlZWspOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZU1hcC5TdHJpbmdDaGFySXRlcmF0b3IucHJvdG90eXBlLmhhc05leHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXApOgorICAgICAgICAgIEV4dGVu
ZHMgU291cmNlTWFwIGFuZCBwcm92aWRlcyBkaXJlY3QgKGNvbXBpbGVkIC0+IG9yaWdpbmFsIHNv
dXJjZSkKKyAgICAgICAgICBhbmQgcmV2ZXJzZSAob3JpZ2luYWwgLT4gY29tcGlsZWQgc291cmNl
KSBwb3NpdGlvbiBtYXBwaW5nIHZpYSBmaW5kRW50cnlSZXZlcnNlZCgpLgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAucHJvdG90eXBlLmZpbmRFbnRyeSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcC5wcm90b3R5cGUuZmlu
ZEVudHJ5UmV2ZXJzZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3Vy
Y2VNYXAucHJvdG90eXBlLl9wYXJzZU1hcCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmFuZ2VC
YXNlZFNvdXJjZU1hcCk6CisgICAgICAgICAgRXh0ZW5kcyBTb3VyY2VNYXAgYW5kIHByb3ZpZGVz
IGRpcmVjdCByYW5nZSBtYXBwaW5nCisgICAgICAgICAgKGNvbXBpbGVkIHNvdXJjZSBwb3NpdGlv
biAtPiBvcmlnaW5hbCBzb3VyY2UgcmFuZ2UpIHZpYSBmaW5kU291cmNlUmFuZ2UoKS4KKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5SYW5nZUJhc2VkU291cmNlTWFwLk1hcHBpbmdDb21wYXJhdG9yKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5SYW5nZUJhc2VkU291cmNlTWFwLnByb3RvdHlwZS5maW5k
U291cmNlUmFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJhbmdlQmFzZWRTb3VyY2VNYXAu
cHJvdG90eXBlLl9yYW5nZUZvclN0YXJ0SW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZVJhbmdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmM6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKwogMjAxMi0xMi0y
NiAgUGFuIERlbmcgIDxwYW4uZGVuZ0BpbnRlbC5jb20+CiAKICAgICAgICAgW1dlYiBJbnNwZWN0
b3JdUmVtb3ZlIFByZXZpZXcgYW5kIFJlc3BvbnNlIHRhYiBmcm9tIG5ldHdvcmsgcGFuZWwgaW4g
Y2FzZSB3ZWJzb2NrZXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggY2Y5YmJhMWI5ZjA2ODE5NzJmZmNj
NTFmOTk2NWM2ZjE4N2QzYWM3ZC4uMzA2M2M4ZDBiM2M3YzQyODJiODNhNDE0NWNiMmVmOTYyODZh
OGVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTE4OSw2ICs1MTg5LDcgQEAKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUhUTUxUb2tlbml6ZXIuanMnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlSmF2YVNjcmlwdFRva2VuaXplci5qcycsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanMnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlTWFwcGluZy5qcycsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VUb2tlbml6ZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvU3BlY3RydW0uanMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagppbmRleCAyODIwZDVlMWE4YmMxOWQyMDdmY2UwZmE4NDk4NjUwMGEy
MmMwZTNjLi41YjMwZTA1NjdkMWI1NTA4ZmU2ZjZlYzc5NWEzMzZjOGNjMmNhMzlkIDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNzcxMDEsNiAr
NzcxMDEsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU291cmNlTWFwLmpzIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxTb3VyY2VNYXBwaW5nLmpzIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5IGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CmluZGV4IDAwZjU1NTY0NGEwMjY4
NGRiNTVkY2U1MDNlMGRkNDY5MjY0ODc3ZjUuLmZmNjU1OTMwYjhmMWU0ZWY0ZGE2M2FlODVhY2I1
MDU3MmUxYjM2YmMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxl
LWZyb250LWVuZC5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9u
dC1lbmQucHkKQEAgLTEwMSw2ICsxMDEsNyBAQCBtb2R1bGVzID0gWwogICAgICAgICAgICAgIlJl
c291cmNlVHJlZU1vZGVsLmpzIiwKICAgICAgICAgICAgICJSZXNvdXJjZVR5cGUuanMiLAogICAg
ICAgICAgICAgIlJlc291cmNlVXRpbHMuanMiLAorICAgICAgICAgICAgIlNvdXJjZU1hcC5qcyIs
CiAgICAgICAgICAgICAiTmV0d29ya01hbmFnZXIuanMiLAogICAgICAgICAgICAgIk5ldHdvcmtS
ZXF1ZXN0LmpzIiwKICAgICAgICAgICAgICJVSVNvdXJjZUNvZGUuanMiLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFw
cGluZy5qcwppbmRleCBlNzAzMDY2OTUzYWE2ZjI0ZDMxM2FkNjQ0ZTg5NWVmYTRiNDUzNjlkLi42
ZWZjZWU3NjQxNTRmODE1MDNhMjVmZTc2MTcwMjgzYWI5MDA5OTMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFwcGluZy5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFw
cGluZy5qcwpAQCAtMzgsMTIgKzM4LDEyIEBAIFdlYkluc3BlY3Rvci5Db21waWxlclNjcmlwdE1h
cHBpbmcgPSBmdW5jdGlvbih3b3Jrc3BhY2UsIG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRlCiB7CiAg
ICAgdGhpcy5fd29ya3NwYWNlID0gd29ya3NwYWNlOwogICAgIHRoaXMuX25ldHdvcmtXb3Jrc3Bh
Y2VQcm92aWRlciA9IG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRlcjsKLSAgICAvKiogQHR5cGUge09i
amVjdC48c3RyaW5nLCBXZWJJbnNwZWN0b3IuU291cmNlTWFwUGFyc2VyPn0gKi8KKyAgICAvKiog
QHR5cGUge09iamVjdC48c3RyaW5nLCBXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1h
cD59ICovCiAgICAgdGhpcy5fc291cmNlTWFwRm9yU291cmNlTWFwVVJMID0ge307Ci0gICAgLyoq
IEB0eXBlIHtPYmplY3QuPHN0cmluZywgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBhcnNlcj59ICov
CisgICAgLyoqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFz
ZWRTb3VyY2VNYXA+fSAqLwogICAgIHRoaXMuX3NvdXJjZU1hcEZvclNjcmlwdElkID0ge307CiAg
ICAgdGhpcy5fc2NyaXB0Rm9yU291cmNlTWFwID0gbmV3IE1hcCgpOwotICAgIC8qKiBAdHlwZSB7
T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBQYXJzZXI+fSAqLworICAgIC8q
KiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNl
TWFwPn0gKi8KICAgICB0aGlzLl9zb3VyY2VNYXBGb3JVUkwgPSB7fTsKICAgICAvKiogQHR5cGUg
e09iamVjdC48c3RyaW5nLCBXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlPn0gKi8KICAgICB0aGlz
Ll9vcmlnaW5hbFVJU291cmNlQ29kZUZvclNjcmlwdElkID0ge307CkBAIC0xMzIsMTEgKzEzMiwx
MSBAQCBXZWJJbnNwZWN0b3IuQ29tcGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZSA9IHsKIAog
ICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNjcmlwdH0gc2NyaXB0Ci0gICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBhcnNlcn0KKyAgICAgKiBAcmV0dXJu
IHtXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcH0KICAgICAgKi8KICAgICBsb2Fk
U291cmNlTWFwRm9yU2NyaXB0OiBmdW5jdGlvbihzY3JpcHQpCiAgICAgewotICAgICAgICB2YXIg
c291cmNlTWFwVVJMID0gV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBhcnNlci5wcm90b3R5cGUuX2Nh
bm9uaWNhbGl6ZVVSTChzY3JpcHQuc291cmNlTWFwVVJMLCBzY3JpcHQuc291cmNlVVJMKTsKKyAg
ICAgICAgdmFyIHNvdXJjZU1hcFVSTCA9IFdlYkluc3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNl
TWFwLnByb3RvdHlwZS5fY2Fub25pY2FsaXplVVJMKHNjcmlwdC5zb3VyY2VNYXBVUkwsIHNjcmlw
dC5zb3VyY2VVUkwpOwogICAgICAgICB2YXIgc291cmNlTWFwID0gdGhpcy5fc291cmNlTWFwRm9y
U291cmNlTWFwVVJMW3NvdXJjZU1hcFVSTF07CiAgICAgICAgIGlmIChzb3VyY2VNYXApCiAgICAg
ICAgICAgICByZXR1cm4gc291cmNlTWFwOwpAQCAtMTQ2LDggKzE0Niw4IEBAIFdlYkluc3BlY3Rv
ci5Db21waWxlclNjcmlwdE1hcHBpbmcucHJvdG90eXBlID0gewogICAgICAgICAgICAgdmFyIHJl
c3BvbnNlID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
c291cmNlTWFwVVJMKTsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zbGljZSgwLCAzKSA9PT0g
IildfSIpCiAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZS5zdWJzdHJpbmcocmVz
cG9uc2UuaW5kZXhPZignXG4nKSk7Ci0gICAgICAgICAgICB2YXIgcGF5bG9hZCA9IC8qKiBAdHlw
ZSB7V2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBheWxvYWR9ICovIChKU09OLnBhcnNlKHJlc3BvbnNl
KSk7Ci0gICAgICAgICAgICBzb3VyY2VNYXAgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBh
cnNlcihzb3VyY2VNYXBVUkwsIHBheWxvYWQpOworICAgICAgICAgICAgdmFyIHBheWxvYWQgPSAv
KiogQHR5cGUge1NvdXJjZU1hcFYzfSAqLyAoSlNPTi5wYXJzZShyZXNwb25zZSkpOworICAgICAg
ICAgICAgc291cmNlTWFwID0gbmV3IFdlYkluc3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNlTWFw
KHNvdXJjZU1hcFVSTCwgcGF5bG9hZCk7CiAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAg
ICAgY29uc29sZS5lcnJvcihlLm1lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIG51bGw7CkBA
IC0xNjYsMjM1ICsxNjYsMyBAQCBXZWJJbnNwZWN0b3IuQ29tcGlsZXJTY3JpcHRNYXBwaW5nLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fc2NyaXB0Rm9yT3JpZ2luYWxVSVNvdXJjZUNvZGUg
PSBuZXcgTWFwKCk7CiAgICAgfQogfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJ
bnNwZWN0b3IuU291cmNlTWFwUGF5bG9hZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLnNlY3Rp
b25zID0gW107Ci0gICAgdGhpcy5tYXBwaW5ncyA9ICIiOwotICAgIHRoaXMuc291cmNlUm9vdCA9
ICIiOwotICAgIHRoaXMuc291cmNlcyA9IFtdOwotfQotCi0vKioKLSAqIEltcGxlbWVudHMgU291
cmNlIE1hcCBWMyBjb25zdW1lci4gU2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJl
LWNvbXBpbGVyL3dpa2kvU291cmNlTWFwcwotICogZm9yIGZvcm1hdCBkZXNjcmlwdGlvbi4KLSAq
IEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZU1hcHBpbmdVUkwKLSAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBheWxvYWR9IHBheWxvYWQKLSAqLwotV2ViSW5z
cGVjdG9yLlNvdXJjZU1hcFBhcnNlciA9IGZ1bmN0aW9uKHNvdXJjZU1hcHBpbmdVUkwsIHBheWxv
YWQpCi17Ci0gICAgaWYgKCFXZWJJbnNwZWN0b3IuU291cmNlTWFwUGFyc2VyLnByb3RvdHlwZS5f
YmFzZTY0TWFwKSB7Ci0gICAgICAgIGNvbnN0IGJhc2U2NERpZ2l0cyA9ICJBQkNERUZHSElKS0xN
Tk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBhcnNlci5wcm90b3R5cGUuX2Jhc2U2NE1hcCA9
IHt9OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2U2NERpZ2l0cy5sZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBQYXJzZXIucHJvdG90eXBlLl9i
YXNlNjRNYXBbYmFzZTY0RGlnaXRzLmNoYXJBdChpKV0gPSBpOwotICAgIH0KLQotICAgIHRoaXMu
X3NvdXJjZU1hcHBpbmdVUkwgPSBzb3VyY2VNYXBwaW5nVVJMOwotICAgIHRoaXMuX21hcHBpbmdz
ID0gW107Ci0gICAgdGhpcy5fcmV2ZXJzZU1hcHBpbmdzQnlTb3VyY2VVUkwgPSB7fTsKLSAgICB0
aGlzLl9zb3VyY2VDb250ZW50QnlVUkwgPSB7fTsKLSAgICB0aGlzLl9wYXJzZU1hcHBpbmdQYXls
b2FkKHBheWxvYWQpOwotfQotCi1XZWJJbnNwZWN0b3IuU291cmNlTWFwUGFyc2VyLnByb3RvdHlw
ZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0KLSAgICAgKi8K
LSAgICBzb3VyY2VzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc291cmNlcyA9IFtd
OwotICAgICAgICBmb3IgKHZhciBzb3VyY2VVUkwgaW4gdGhpcy5fcmV2ZXJzZU1hcHBpbmdzQnlT
b3VyY2VVUkwpCi0gICAgICAgICAgICBzb3VyY2VzLnB1c2goc291cmNlVVJMKTsKLSAgICAgICAg
cmV0dXJuIHNvdXJjZXM7Ci0gICAgfSwKLQotICAgIHNvdXJjZUNvbnRlbnQ6IGZ1bmN0aW9uKHNv
dXJjZVVSTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb250ZW50QnlVUkxb
c291cmNlVVJMXTsKLSAgICB9LAotCi0gICAgZmluZEVudHJ5OiBmdW5jdGlvbihsaW5lTnVtYmVy
LCBjb2x1bW5OdW1iZXIpCi0gICAgewotICAgICAgICB2YXIgZmlyc3QgPSAwOwotICAgICAgICB2
YXIgY291bnQgPSB0aGlzLl9tYXBwaW5ncy5sZW5ndGg7Ci0gICAgICAgIHdoaWxlIChjb3VudCA+
IDEpIHsKLSAgICAgICAgICB2YXIgc3RlcCA9IGNvdW50ID4+IDE7Ci0gICAgICAgICAgdmFyIG1p
ZGRsZSA9IGZpcnN0ICsgc3RlcDsKLSAgICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX21hcHBp
bmdzW21pZGRsZV07Ci0gICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCBtYXBwaW5nWzBdIHx8IChs
aW5lTnVtYmVyID09IG1hcHBpbmdbMF0gJiYgY29sdW1uTnVtYmVyIDwgbWFwcGluZ1sxXSkpCi0g
ICAgICAgICAgICAgIGNvdW50ID0gc3RlcDsKLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgZmlyc3QgPSBtaWRkbGU7Ci0gICAgICAgICAgICAgIGNvdW50IC09IHN0ZXA7Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYXBwaW5nc1tmaXJzdF07Ci0g
ICAgfSwKLQotICAgIGZpbmRFbnRyeVJldmVyc2VkOiBmdW5jdGlvbihzb3VyY2VVUkwsIGxpbmVO
dW1iZXIpCi0gICAgewotICAgICAgICB2YXIgbWFwcGluZ3MgPSB0aGlzLl9yZXZlcnNlTWFwcGlu
Z3NCeVNvdXJjZVVSTFtzb3VyY2VVUkxdOwotICAgICAgICBmb3IgKCA7IGxpbmVOdW1iZXIgPCBt
YXBwaW5ncy5sZW5ndGg7ICsrbGluZU51bWJlcikgewotICAgICAgICAgICAgdmFyIG1hcHBpbmcg
PSBtYXBwaW5nc1tsaW5lTnVtYmVyXTsKLSAgICAgICAgICAgIGlmIChtYXBwaW5nKQotICAgICAg
ICAgICAgICAgIHJldHVybiBtYXBwaW5nOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9tYXBwaW5nc1swXTsKLSAgICB9LAotCi0gICAgX3BhcnNlTWFwcGluZ1BheWxvYWQ6IGZ1bmN0
aW9uKG1hcHBpbmdQYXlsb2FkKQotICAgIHsKLSAgICAgICAgaWYgKG1hcHBpbmdQYXlsb2FkLnNl
Y3Rpb25zKQotICAgICAgICAgICAgdGhpcy5fcGFyc2VTZWN0aW9ucyhtYXBwaW5nUGF5bG9hZC5z
ZWN0aW9ucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3BhcnNlTWFwKG1hcHBp
bmdQYXlsb2FkLCAwLCAwKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJh
eS48U291cmNlTWFwVjMuU2VjdGlvbj59IHNlY3Rpb25zCi0gICAgICovCi0gICAgX3BhcnNlU2Vj
dGlvbnM6IGZ1bmN0aW9uKHNlY3Rpb25zKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzZWN0aW9ucy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBz
ZWN0aW9uc1tpXTsKLSAgICAgICAgICAgIHRoaXMuX3BhcnNlTWFwKHNlY3Rpb24ubWFwLCBzZWN0
aW9uLm9mZnNldC5saW5lLCBzZWN0aW9uLm9mZnNldC5jb2x1bW4pCi0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtTb3VyY2VNYXBWM30gbWFwCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uTnVt
YmVyCi0gICAgICovCi0gICAgX3BhcnNlTWFwOiBmdW5jdGlvbihtYXAsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciBzb3VyY2VJbmRleCA9IDA7Ci0gICAgICAg
IHZhciBzb3VyY2VMaW5lTnVtYmVyID0gMDsKLSAgICAgICAgdmFyIHNvdXJjZUNvbHVtbk51bWJl
ciA9IDA7Ci0gICAgICAgIHZhciBuYW1lSW5kZXggPSAwOwotCi0gICAgICAgIHZhciBzb3VyY2Vz
ID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwLnNvdXJjZXMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIHZhciBzb3VyY2VVUkwgPSBtYXAuc291cmNlc1tpXTsKLSAgICAg
ICAgICAgIGlmIChtYXAuc291cmNlUm9vdCkKLSAgICAgICAgICAgICAgICBzb3VyY2VVUkwgPSBt
YXAuc291cmNlUm9vdCArICIvIiArIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIHZhciB1cmwgPSB0
aGlzLl9jYW5vbmljYWxpemVVUkwoc291cmNlVVJMLCB0aGlzLl9zb3VyY2VNYXBwaW5nVVJMKTsK
LSAgICAgICAgICAgIHNvdXJjZXMucHVzaCh1cmwpOwotICAgICAgICAgICAgaWYgKCF0aGlzLl9y
ZXZlcnNlTWFwcGluZ3NCeVNvdXJjZVVSTFt1cmxdKQotICAgICAgICAgICAgICAgIHRoaXMuX3Jl
dmVyc2VNYXBwaW5nc0J5U291cmNlVVJMW3VybF0gPSBbXTsKLSAgICAgICAgICAgIGlmIChtYXAu
c291cmNlc0NvbnRlbnQgJiYgbWFwLnNvdXJjZXNDb250ZW50W2ldKQotICAgICAgICAgICAgICAg
IHRoaXMuX3NvdXJjZUNvbnRlbnRCeVVSTFt1cmxdID0gbWFwLnNvdXJjZXNDb250ZW50W2ldOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHN0cmluZ0NoYXJJdGVyYXRvciA9IG5ldyBXZWJJbnNw
ZWN0b3IuU291cmNlTWFwUGFyc2VyLlN0cmluZ0NoYXJJdGVyYXRvcihtYXAubWFwcGluZ3MpOwot
ICAgICAgICB2YXIgc291cmNlVVJMID0gc291cmNlc1tzb3VyY2VJbmRleF07Ci0gICAgICAgIHZh
ciByZXZlcnNlTWFwcGluZ3MgPSB0aGlzLl9yZXZlcnNlTWFwcGluZ3NCeVNvdXJjZVVSTFtzb3Vy
Y2VVUkxdOwotCi0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBpZiAoc3RyaW5n
Q2hhckl0ZXJhdG9yLnBlZWsoKSA9PT0gIiwiKQotICAgICAgICAgICAgICAgIHN0cmluZ0NoYXJJ
dGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aGls
ZSAoc3RyaW5nQ2hhckl0ZXJhdG9yLnBlZWsoKSA9PT0gIjsiKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXIgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0g
MDsKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nQ2hhckl0ZXJhdG9yLm5leHQoKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFzdHJpbmdDaGFySXRlcmF0b3IuaGFz
TmV4dCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgY29sdW1uTnVtYmVyICs9IHRoaXMuX2RlY29kZVZMUShzdHJpbmdDaGFySXRlcmF0
b3IpOwotICAgICAgICAgICAgaWYgKHRoaXMuX2lzU2VwYXJhdG9yKHN0cmluZ0NoYXJJdGVyYXRv
ci5wZWVrKCkpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fbWFwcGluZ3MucHVzaChbbGluZU51
bWJlciwgY29sdW1uTnVtYmVyXSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBzb3VyY2VJbmRleERlbHRhID0gdGhpcy5fZGVjb2Rl
VkxRKHN0cmluZ0NoYXJJdGVyYXRvcik7Ci0gICAgICAgICAgICBpZiAoc291cmNlSW5kZXhEZWx0
YSkgewotICAgICAgICAgICAgICAgIHNvdXJjZUluZGV4ICs9IHNvdXJjZUluZGV4RGVsdGE7Ci0g
ICAgICAgICAgICAgICAgc291cmNlVVJMID0gc291cmNlc1tzb3VyY2VJbmRleF07Ci0gICAgICAg
ICAgICAgICAgcmV2ZXJzZU1hcHBpbmdzID0gdGhpcy5fcmV2ZXJzZU1hcHBpbmdzQnlTb3VyY2VV
Ukxbc291cmNlVVJMXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZUxpbmVOdW1i
ZXIgKz0gdGhpcy5fZGVjb2RlVkxRKHN0cmluZ0NoYXJJdGVyYXRvcik7Ci0gICAgICAgICAgICBz
b3VyY2VDb2x1bW5OdW1iZXIgKz0gdGhpcy5fZGVjb2RlVkxRKHN0cmluZ0NoYXJJdGVyYXRvcik7
Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX2lzU2VwYXJhdG9yKHN0cmluZ0NoYXJJdGVyYXRvci5w
ZWVrKCkpKQotICAgICAgICAgICAgICAgIG5hbWVJbmRleCArPSB0aGlzLl9kZWNvZGVWTFEoc3Ry
aW5nQ2hhckl0ZXJhdG9yKTsKLQotICAgICAgICAgICAgdGhpcy5fbWFwcGluZ3MucHVzaChbbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUxpbmVOdW1iZXIsIHNvdXJj
ZUNvbHVtbk51bWJlcl0pOwotICAgICAgICAgICAgaWYgKCFyZXZlcnNlTWFwcGluZ3Nbc291cmNl
TGluZU51bWJlcl0pCi0gICAgICAgICAgICAgICAgcmV2ZXJzZU1hcHBpbmdzW3NvdXJjZUxpbmVO
dW1iZXJdID0gW2xpbmVOdW1iZXIsIGNvbHVtbk51bWJlcl07Ci0gICAgICAgIH0KLSAgICB9LAot
Ci0gICAgX2lzU2VwYXJhdG9yOiBmdW5jdGlvbihjaGFyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGNoYXIgPT09ICIsIiB8fCBjaGFyID09PSAiOyI7Ci0gICAgfSwKLQotICAgIF9kZWNvZGVWTFE6
IGZ1bmN0aW9uKHN0cmluZ0NoYXJJdGVyYXRvcikKLSAgICB7Ci0gICAgICAgIC8vIFJlYWQgdW5z
aWduZWQgdmFsdWUuCi0gICAgICAgIHZhciByZXN1bHQgPSAwOwotICAgICAgICB2YXIgc2hpZnQg
PSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICB2YXIgZGlnaXQgPSB0aGlzLl9iYXNlNjRN
YXBbc3RyaW5nQ2hhckl0ZXJhdG9yLm5leHQoKV07Ci0gICAgICAgICAgICByZXN1bHQgKz0gKGRp
Z2l0ICYgdGhpcy5fVkxRX0JBU0VfTUFTSykgPDwgc2hpZnQ7Ci0gICAgICAgICAgICBzaGlmdCAr
PSB0aGlzLl9WTFFfQkFTRV9TSElGVDsKLSAgICAgICAgfSB3aGlsZSAoZGlnaXQgJiB0aGlzLl9W
TFFfQ09OVElOVUFUSU9OX01BU0spOwotCi0gICAgICAgIC8vIEZpeCB0aGUgc2lnbi4KLSAgICAg
ICAgdmFyIG5lZ2F0aXZlID0gcmVzdWx0ICYgMTsKLSAgICAgICAgcmVzdWx0ID4+PSAxOwotICAg
ICAgICByZXR1cm4gbmVnYXRpdmUgPyAtcmVzdWx0IDogcmVzdWx0OwotICAgIH0sCi0KLSAgICBf
Y2Fub25pY2FsaXplVVJMOiBmdW5jdGlvbih1cmwsIGJhc2VVUkwpCi0gICAgewotICAgICAgICBp
ZiAoIXVybCB8fCAhYmFzZVVSTCB8fCB1cmwuYXNQYXJzZWRVUkwoKSB8fCB1cmwuc3Vic3RyaW5n
KDAsIDUpID09PSAiZGF0YToiKQotICAgICAgICAgICAgcmV0dXJuIHVybDsKLQotICAgICAgICB2
YXIgYmFzZSA9IGJhc2VVUkwuYXNQYXJzZWRVUkwoKTsKLSAgICAgICAgaWYgKCFiYXNlKQotICAg
ICAgICAgICAgcmV0dXJuIHVybDsKLQotICAgICAgICB2YXIgYmFzZUhvc3QgPSBiYXNlLnNjaGVt
ZSArICI6Ly8iICsgYmFzZS5ob3N0ICsgKGJhc2UucG9ydCA/ICI6IiArIGJhc2UucG9ydCA6ICIi
KTsKLSAgICAgICAgaWYgKHVybFswXSA9PT0gIi8iKQotICAgICAgICAgICAgcmV0dXJuIGJhc2VI
b3N0ICsgdXJsOwotICAgICAgICByZXR1cm4gYmFzZUhvc3QgKyBiYXNlLmZvbGRlclBhdGhDb21w
b25lbnRzICsgIi8iICsgdXJsOwotICAgIH0sCi0KLSAgICBfVkxRX0JBU0VfU0hJRlQ6IDUsCi0g
ICAgX1ZMUV9CQVNFX01BU0s6ICgxIDw8IDUpIC0gMSwKLSAgICBfVkxRX0NPTlRJTlVBVElPTl9N
QVNLOiAxIDw8IDUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9y
LlNvdXJjZU1hcFBhcnNlci5TdHJpbmdDaGFySXRlcmF0b3IgPSBmdW5jdGlvbihzdHJpbmcpCi17
Ci0gICAgdGhpcy5fc3RyaW5nID0gc3RyaW5nOwotICAgIHRoaXMuX3Bvc2l0aW9uID0gMDsKLX0K
LQotV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBhcnNlci5TdHJpbmdDaGFySXRlcmF0b3IucHJvdG90
eXBlID0gewotICAgIG5leHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9zdHJpbmcuY2hhckF0KHRoaXMuX3Bvc2l0aW9uKyspOwotICAgIH0sCi0KLSAgICBwZWVrOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlz
Ll9wb3NpdGlvbik7Ci0gICAgfSwKLQotICAgIGhhc05leHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbiA8IHRoaXMuX3N0cmluZy5sZW5ndGg7Ci0gICAg
fQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VNYXAuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZU1hcC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hMTJmODI3MzgyMzUyNTY2Y2U5NWRjNzA5MjAwNjNlMGJjNDY2ZTIzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VNYXAuanMKQEAgLTAsMCArMSw0MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEltcGxlbWVudHMgU291cmNlIE1hcCBW
MyBtb2RlbC4gU2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJlLWNvbXBpbGVyL3dp
a2kvU291cmNlTWFwcworICogZm9yIGZvcm1hdCBkZXNjcmlwdGlvbi4KKyAqIEBjb25zdHJ1Y3Rv
cgorICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZU1hcHBpbmdVUkwKKyAqIEBwYXJhbSB7U291cmNl
TWFwVjN9IHBheWxvYWQKKyAqLworV2ViSW5zcGVjdG9yLlNvdXJjZU1hcCA9IGZ1bmN0aW9uKHNv
dXJjZU1hcHBpbmdVUkwsIHBheWxvYWQpCit7CisgICAgaWYgKCFXZWJJbnNwZWN0b3IuU291cmNl
TWFwLnByb3RvdHlwZS5fYmFzZTY0TWFwKSB7CisgICAgICAgIGNvbnN0IGJhc2U2NERpZ2l0cyA9
ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEy
MzQ1Njc4OSsvIjsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuX2Jh
c2U2NE1hcCA9IHt9OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2U2NERpZ2l0cy5s
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBl
Ll9iYXNlNjRNYXBbYmFzZTY0RGlnaXRzLmNoYXJBdChpKV0gPSBpOworICAgIH0KKworICAgIHRo
aXMuX3NvdXJjZU1hcHBpbmdVUkwgPSBzb3VyY2VNYXBwaW5nVVJMOworICAgIHRoaXMuX21hcHBp
bmdzID0gW107CisgICAgdGhpcy5fc291cmNlcyA9IHt9OworICAgIHRoaXMuX3NvdXJjZUNvbnRl
bnRCeVVSTCA9IHt9OworICAgIHRoaXMuX3BhcnNlTWFwcGluZ1BheWxvYWQocGF5bG9hZCk7Cit9
CisKK1dlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAq
IEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fQorICAgICAqLworICAgIHNvdXJjZXM6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgdXJs
IGluIHRoaXMuX3NvdXJjZXMpCisgICAgICAgICAgICByZXN1bHQucHVzaCh1cmwpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gc291cmNlVVJMCisgICAgICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH0KKyAgICAgKi8K
KyAgICBzb3VyY2VDb250ZW50OiBmdW5jdGlvbihzb3VyY2VVUkwpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fc291cmNlQ29udGVudEJ5VVJMW3NvdXJjZVVSTF07CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEBwYXJhbSB7U291cmNlTWFwVjN9IG1hcHBpbmdQYXlsb2FkCisgICAgICov
CisgICAgX3BhcnNlTWFwcGluZ1BheWxvYWQ6IGZ1bmN0aW9uKG1hcHBpbmdQYXlsb2FkKQorICAg
IHsKKyAgICAgICAgaWYgKG1hcHBpbmdQYXlsb2FkLnNlY3Rpb25zKQorICAgICAgICAgICAgdGhp
cy5fcGFyc2VTZWN0aW9ucyhtYXBwaW5nUGF5bG9hZC5zZWN0aW9ucyk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHRoaXMuX3BhcnNlTWFwKG1hcHBpbmdQYXlsb2FkLCAwLCAwKTsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBcnJheS48U291cmNlTWFwVjMuU2VjdGlvbj59
IHNlY3Rpb25zCisgICAgICovCisgICAgX3BhcnNlU2VjdGlvbnM6IGZ1bmN0aW9uKHNlY3Rpb25z
KQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBzZWN0aW9uc1tpXTsKKyAgICAgICAgICAg
IHRoaXMuX3BhcnNlTWFwKHNlY3Rpb24ubWFwLCBzZWN0aW9uLm9mZnNldC5saW5lLCBzZWN0aW9u
Lm9mZnNldC5jb2x1bW4pOworICAgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBw
YXJhbSB7U291cmNlTWFwVjN9IG1hcAorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVy
CisgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJlcgorICAgICAqLworICAgIF9wYXJz
ZU1hcDogZnVuY3Rpb24obWFwLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgeworICAg
ICAgICB2YXIgc291cmNlSW5kZXggPSAwOworICAgICAgICB2YXIgc291cmNlTGluZU51bWJlciA9
IDA7CisgICAgICAgIHZhciBzb3VyY2VDb2x1bW5OdW1iZXIgPSAwOworICAgICAgICB2YXIgbmFt
ZUluZGV4ID0gMDsKKworICAgICAgICB2YXIgc291cmNlcyA9IFtdOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1hcC5zb3VyY2VzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIg
c291cmNlVVJMID0gbWFwLnNvdXJjZXNbaV07CisgICAgICAgICAgICBpZiAobWFwLnNvdXJjZVJv
b3QpCisgICAgICAgICAgICAgICAgc291cmNlVVJMID0gbWFwLnNvdXJjZVJvb3QgKyAiLyIgKyBz
b3VyY2VVUkw7CisgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5fY2Fub25pY2FsaXplVVJMKHNv
dXJjZVVSTCwgdGhpcy5fc291cmNlTWFwcGluZ1VSTCk7CisgICAgICAgICAgICBzb3VyY2VzLnB1
c2godXJsKTsKKyAgICAgICAgICAgIHRoaXMuX3NvdXJjZXNbdXJsXSA9IHRydWU7CisKKyAgICAg
ICAgICAgIGlmIChtYXAuc291cmNlc0NvbnRlbnQgJiYgbWFwLnNvdXJjZXNDb250ZW50W2ldKQor
ICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUNvbnRlbnRCeVVSTFt1cmxdID0gbWFwLnNvdXJj
ZXNDb250ZW50W2ldOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHN0cmluZ0NoYXJJdGVyYXRv
ciA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlTWFwLlN0cmluZ0NoYXJJdGVyYXRvcihtYXAubWFw
cGluZ3MpOworICAgICAgICB2YXIgc291cmNlVVJMID0gc291cmNlc1tzb3VyY2VJbmRleF07CisK
KyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChzdHJpbmdDaGFySXRlcmF0
b3IucGVlaygpID09PSAiLCIpCisgICAgICAgICAgICAgICAgc3RyaW5nQ2hhckl0ZXJhdG9yLm5l
eHQoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHdoaWxlIChzdHJpbmdD
aGFySXRlcmF0b3IucGVlaygpID09PSAiOyIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZU51
bWJlciArPSAxOworICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIgPSAwOworICAgICAg
ICAgICAgICAgICAgICBzdHJpbmdDaGFySXRlcmF0b3IubmV4dCgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoIXN0cmluZ0NoYXJJdGVyYXRvci5oYXNOZXh0KCkpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
b2x1bW5OdW1iZXIgKz0gdGhpcy5fZGVjb2RlVkxRKHN0cmluZ0NoYXJJdGVyYXRvcik7CisgICAg
ICAgICAgICBpZiAodGhpcy5faXNTZXBhcmF0b3Ioc3RyaW5nQ2hhckl0ZXJhdG9yLnBlZWsoKSkp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXBwaW5ncy5wdXNoKFtsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXJdKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdmFyIHNvdXJjZUluZGV4RGVsdGEgPSB0aGlzLl9kZWNvZGVWTFEoc3RyaW5n
Q2hhckl0ZXJhdG9yKTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VJbmRleERlbHRhKSB7CisgICAg
ICAgICAgICAgICAgc291cmNlSW5kZXggKz0gc291cmNlSW5kZXhEZWx0YTsKKyAgICAgICAgICAg
ICAgICBzb3VyY2VVUkwgPSBzb3VyY2VzW3NvdXJjZUluZGV4XTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNvdXJjZUxpbmVOdW1iZXIgKz0gdGhpcy5fZGVjb2RlVkxRKHN0cmluZ0NoYXJJ
dGVyYXRvcik7CisgICAgICAgICAgICBzb3VyY2VDb2x1bW5OdW1iZXIgKz0gdGhpcy5fZGVjb2Rl
VkxRKHN0cmluZ0NoYXJJdGVyYXRvcik7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2lzU2VwYXJh
dG9yKHN0cmluZ0NoYXJJdGVyYXRvci5wZWVrKCkpKQorICAgICAgICAgICAgICAgIG5hbWVJbmRl
eCArPSB0aGlzLl9kZWNvZGVWTFEoc3RyaW5nQ2hhckl0ZXJhdG9yKTsKKworICAgICAgICAgICAg
dGhpcy5fbWFwcGluZ3MucHVzaChbbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkws
IHNvdXJjZUxpbmVOdW1iZXIsIHNvdXJjZUNvbHVtbk51bWJlcl0pOworICAgICAgICB9CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyCisgICAgICogQHJldHVy
biB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBfaXNTZXBhcmF0b3I6IGZ1bmN0aW9uKGNoYXIpCisg
ICAgeworICAgICAgICByZXR1cm4gY2hhciA9PT0gIiwiIHx8IGNoYXIgPT09ICI7IjsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU291cmNlTWFwLlN0cmlu
Z0NoYXJJdGVyYXRvcn0gc3RyaW5nQ2hhckl0ZXJhdG9yCisgICAgICogQHJldHVybiB7bnVtYmVy
fQorICAgICAqLworICAgIF9kZWNvZGVWTFE6IGZ1bmN0aW9uKHN0cmluZ0NoYXJJdGVyYXRvcikK
KyAgICB7CisgICAgICAgIC8vIFJlYWQgdW5zaWduZWQgdmFsdWUuCisgICAgICAgIHZhciByZXN1
bHQgPSAwOworICAgICAgICB2YXIgc2hpZnQgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICB2YXIgZGlnaXQgPSB0aGlzLl9iYXNlNjRNYXBbc3RyaW5nQ2hhckl0ZXJhdG9yLm5leHQoKV07
CisgICAgICAgICAgICByZXN1bHQgKz0gKGRpZ2l0ICYgdGhpcy5fVkxRX0JBU0VfTUFTSykgPDwg
c2hpZnQ7CisgICAgICAgICAgICBzaGlmdCArPSB0aGlzLl9WTFFfQkFTRV9TSElGVDsKKyAgICAg
ICAgfSB3aGlsZSAoZGlnaXQgJiB0aGlzLl9WTFFfQ09OVElOVUFUSU9OX01BU0spOworCisgICAg
ICAgIC8vIEZpeCB0aGUgc2lnbi4KKyAgICAgICAgdmFyIG5lZ2F0aXZlID0gcmVzdWx0ICYgMTsK
KyAgICAgICAgcmVzdWx0ID4+PSAxOworICAgICAgICByZXR1cm4gbmVnYXRpdmUgPyAtcmVzdWx0
IDogcmVzdWx0OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJs
CisgICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwKKyAgICAgKi8KKyAgICBfY2Fub25pY2Fs
aXplVVJMOiBmdW5jdGlvbih1cmwsIGJhc2VVUkwpCisgICAgeworICAgICAgICBpZiAoIXVybCB8
fCAhYmFzZVVSTCB8fCB1cmwuYXNQYXJzZWRVUkwoKSB8fCB1cmwuc3Vic3RyaW5nKDAsIDUpID09
PSAiZGF0YToiKQorICAgICAgICAgICAgcmV0dXJuIHVybDsKKworICAgICAgICB2YXIgYmFzZSA9
IGJhc2VVUkwuYXNQYXJzZWRVUkwoKTsKKyAgICAgICAgaWYgKCFiYXNlKQorICAgICAgICAgICAg
cmV0dXJuIHVybDsKKworICAgICAgICB2YXIgYmFzZUhvc3QgPSBiYXNlLnNjaGVtZSArICI6Ly8i
ICsgYmFzZS5ob3N0ICsgKGJhc2UucG9ydCA/ICI6IiArIGJhc2UucG9ydCA6ICIiKTsKKyAgICAg
ICAgaWYgKHVybFswXSA9PT0gIi8iKQorICAgICAgICAgICAgcmV0dXJuIGJhc2VIb3N0ICsgdXJs
OworICAgICAgICByZXR1cm4gYmFzZUhvc3QgKyBiYXNlLmZvbGRlclBhdGhDb21wb25lbnRzICsg
Ii8iICsgdXJsOworICAgIH0sCisKKyAgICBfVkxRX0JBU0VfU0hJRlQ6IDUsCisgICAgX1ZMUV9C
QVNFX01BU0s6ICgxIDw8IDUpIC0gMSwKKyAgICBfVkxRX0NPTlRJTlVBVElPTl9NQVNLOiAxIDw8
IDUKK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcK
KyAqLworV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5TdHJpbmdDaGFySXRlcmF0b3IgPSBmdW5jdGlv
bihzdHJpbmcpCit7CisgICAgdGhpcy5fc3RyaW5nID0gc3RyaW5nOworICAgIHRoaXMuX3Bvc2l0
aW9uID0gMDsKK30KKworV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5TdHJpbmdDaGFySXRlcmF0b3Iu
cHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8K
KyAgICBuZXh0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5n
LmNoYXJBdCh0aGlzLl9wb3NpdGlvbisrKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJl
dHVybiB7c3RyaW5nfQorICAgICAqLworICAgIHBlZWs6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX3Bvc2l0aW9uKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBoYXNOZXh0
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb24gPCB0aGlz
Ll9zdHJpbmcubGVuZ3RoOworICAgIH0KK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBl
eHRlbmRzIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAKKyAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VN
YXBwaW5nVVJMCisgKiBAcGFyYW0ge1NvdXJjZU1hcFYzfSBwYXlsb2FkCisgKi8KK1dlYkluc3Bl
Y3Rvci5Qb3NpdGlvbkJhc2VkU291cmNlTWFwID0gZnVuY3Rpb24oc291cmNlTWFwcGluZ1VSTCwg
cGF5bG9hZCkKK3sKKyAgICB0aGlzLl9yZXZlcnNlTWFwcGluZ3NCeVNvdXJjZVVSTCA9IHt9Owor
ICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAuY2FsbCh0aGlzLCBzb3VyY2VNYXBwaW5nVVJMLCBw
YXlsb2FkKTsKK30KKworV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAucHJvdG90
eXBlID0geworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyIGluIGNv
bXBpbGVkIHJlc291cmNlCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJlciBpbiBj
b21waWxlZCByZXNvdXJjZQorICAgICAqLworICAgIGZpbmRFbnRyeTogZnVuY3Rpb24obGluZU51
bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIGZpcnN0ID0gMDsKKyAgICAg
ICAgdmFyIGNvdW50ID0gdGhpcy5fbWFwcGluZ3MubGVuZ3RoOworICAgICAgICB3aGlsZSAoY291
bnQgPiAxKSB7CisgICAgICAgICAgdmFyIHN0ZXAgPSBjb3VudCA+PiAxOworICAgICAgICAgIHZh
ciBtaWRkbGUgPSBmaXJzdCArIHN0ZXA7CisgICAgICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9t
YXBwaW5nc1ttaWRkbGVdOworICAgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgbWFwcGluZ1swXSB8
fCAobGluZU51bWJlciA9PSBtYXBwaW5nWzBdICYmIGNvbHVtbk51bWJlciA8IG1hcHBpbmdbMV0p
KQorICAgICAgICAgICAgICBjb3VudCA9IHN0ZXA7CisgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgIGZpcnN0ID0gbWlkZGxlOworICAgICAgICAgICAgICBjb3VudCAtPSBzdGVwOworICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGluZ3NbZmlyc3Rd
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlVVJMIG9m
IHRoZSBvcmlnaW5hdGluZyByZXNvdXJjZQorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVt
YmVyIGluIHRoZSBvcmlnaW5hdGluZyByZXNvdXJjZQorICAgICAqIEByZXR1cm4ge0FycmF5fQor
ICAgICAqLworICAgIGZpbmRFbnRyeVJldmVyc2VkOiBmdW5jdGlvbihzb3VyY2VVUkwsIGxpbmVO
dW1iZXIpCisgICAgeworICAgICAgICB2YXIgbWFwcGluZ3MgPSB0aGlzLl9yZXZlcnNlTWFwcGlu
Z3NCeVNvdXJjZVVSTFtzb3VyY2VVUkxdOworICAgICAgICBmb3IgKCA7IGxpbmVOdW1iZXIgPCBt
YXBwaW5ncy5sZW5ndGg7ICsrbGluZU51bWJlcikgeworICAgICAgICAgICAgdmFyIG1hcHBpbmcg
PSBtYXBwaW5nc1tsaW5lTnVtYmVyXTsKKyAgICAgICAgICAgIGlmIChtYXBwaW5nKQorICAgICAg
ICAgICAgICAgIHJldHVybiBtYXBwaW5nOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz
Ll9tYXBwaW5nc1swXTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAg
ICovCisgICAgX3BhcnNlTWFwOiBmdW5jdGlvbihtYXAsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
cikKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlLl9wYXJz
ZU1hcC5jYWxsKHRoaXMsIG1hcCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hcHBpbmdzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX21hcHBpbmdzW2ldOworICAgICAgICAgICAgdmFy
IHNvdXJjZVVSTCA9IG1hcHBpbmdbMl07CisgICAgICAgICAgICBpZiAoIXNvdXJjZVVSTCkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChtYXAuc291cmNlUm9vdCkK
KyAgICAgICAgICAgICAgICBzb3VyY2VVUkwgPSBtYXAuc291cmNlUm9vdCArICIvIiArIHNvdXJj
ZVVSTDsKKyAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLl9jYW5vbmljYWxpemVVUkwoc291cmNl
VVJMLCB0aGlzLl9zb3VyY2VNYXBwaW5nVVJMKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5fcmV2
ZXJzZU1hcHBpbmdzQnlTb3VyY2VVUkxbdXJsXSkKKyAgICAgICAgICAgICAgICB0aGlzLl9yZXZl
cnNlTWFwcGluZ3NCeVNvdXJjZVVSTFt1cmxdID0gW107CisgICAgICAgICAgICB2YXIgcmV2ZXJz
ZU1hcHBpbmdzID0gdGhpcy5fcmV2ZXJzZU1hcHBpbmdzQnlTb3VyY2VVUkxbdXJsXTsKKyAgICAg
ICAgICAgIHZhciBzb3VyY2VMaW5lID0gbWFwcGluZ1szXTsKKyAgICAgICAgICAgIGlmICghcmV2
ZXJzZU1hcHBpbmdzW3NvdXJjZUxpbmVdKQorICAgICAgICAgICAgICAgIHJldmVyc2VNYXBwaW5n
c1tzb3VyY2VMaW5lXSA9IFttYXBwaW5nWzBdLCBtYXBwaW5nWzFdXTsKKyAgICAgICAgfQorICAg
IH0sCisKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlCit9
CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyBXZWJJbnNwZWN0b3IuU291cmNl
TWFwCisgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlTWFwcGluZ1VSTAorICogQHBhcmFtIHtTb3Vy
Y2VNYXBWM30gcGF5bG9hZAorICovCitXZWJJbnNwZWN0b3IuUmFuZ2VCYXNlZFNvdXJjZU1hcCA9
IGZ1bmN0aW9uKHNvdXJjZU1hcHBpbmdVUkwsIHBheWxvYWQpCit7CisgICAgV2ViSW5zcGVjdG9y
LlNvdXJjZU1hcC5jYWxsKHRoaXMsIHNvdXJjZU1hcHBpbmdVUkwsIHBheWxvYWQpOworCisgICAg
Ly8gRW1wdHkgbWFwcGluZ3Mgc2hvdWxkIGFjdHVhbGx5IG5ldmVyIGJlIGZvdW5kIGluIGEgcmFu
Z2UtYmFzZWQgbWFwLgorICAgIHZhciBzdHJpcHBlZE1hcHBpbmdzID0gW107CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0aGlzLl9tYXBwaW5ncy5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAo
dGhpcy5fbWFwcGluZ3NbaV1bMl0pCisgICAgICAgICAgICBzdHJpcHBlZE1hcHBpbmdzLnB1c2go
dGhpcy5fbWFwcGluZ3NbaV0pOworICAgIH0KKyAgICB0aGlzLl9tYXBwaW5ncyA9IHN0cmlwcGVk
TWFwcGluZ3M7Cit9CisKK1dlYkluc3BlY3Rvci5SYW5nZUJhc2VkU291cmNlTWFwLk1hcHBpbmdD
b21wYXJhdG9yID0gZnVuY3Rpb24oYSwgYikKK3sKKyAgICBpZiAoYVswXSAhPT0gYlswXSkKKyAg
ICAgICAgcmV0dXJuIGFbMF0gLSBiWzBdOworICAgIHJldHVybiBhWzFdIC0gYlsxXTsKK30KKwor
V2ViSW5zcGVjdG9yLlJhbmdlQmFzZWRTb3VyY2VNYXAucHJvdG90eXBlID0geworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyIGluIHRoZSBjb21waWxlZCByZXNvdXJj
ZQorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5OdW1iZXIgaW4gdGhlIGNvbXBpbGVkIHJl
c291cmNlCisgICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5Tb3VyY2VSYW5nZX0KKyAgICAg
Ki8KKyAgICBmaW5kU291cmNlUmFuZ2U6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
cikKKyAgICB7CisgICAgICAgIHZhciBjb21wYXJhdG9yID0gV2ViSW5zcGVjdG9yLlJhbmdlQmFz
ZWRTb3VyY2VNYXAuTWFwcGluZ0NvbXBhcmF0b3I7CisgICAgICAgIHZhciBsb29rdXBFbnRyeSA9
IFtsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXJdOworICAgICAgICB2YXIgaW5kZXggPSBiaW5hcnlT
ZWFyY2gobG9va3VwRW50cnksIHRoaXMuX21hcHBpbmdzLCBjb21wYXJhdG9yKTsKKyAgICAgICAg
aWYgKGluZGV4ID49IDApIHsKKyAgICAgICAgICAgIGlmIChpbmRleCAlIDIpIHsKKyAgICAgICAg
ICAgICAgICAvLyBSYW5nZSBlbmQgaGl0LiBDaGVjayBpZiB0aGVyZSdzIGEgZm9sbG93aW5nIHJh
bmdlIHRoYXQgc3RhcnRzIGZyb20gdGhlIHNhbWUgcG9zaXRpb24uCisgICAgICAgICAgICAgICAg
dmFyIG5leHRFbnRyeSA9IHRoaXMuX21hcHBpbmdzW2luZGV4ICsgMV07CisgICAgICAgICAgICAg
ICAgaWYgKG5leHRFbnRyeSAmJiBuZXh0RW50cnlbMF0gPT09IGxpbmVOdW1iZXIgJiYgbmV4dEVu
dHJ5WzFdID09PSBjb2x1bW5OdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9yYW5nZUZvclN0YXJ0SW5kZXgoaW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JhbmdlRm9y
U3RhcnRJbmRleChpbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCA9IC0oaW5kZXgg
KyAxKTsKKyAgICAgICAgaWYgKChpbmRleCAlIDIpICYmIGNvbXBhcmF0b3IobG9va3VwRW50cnks
IHRoaXMuX21hcHBpbmdzW2luZGV4IC0gMV0pID49IDAgJiYgY29tcGFyYXRvcihsb29rdXBFbnRy
eSwgdGhpcy5fbWFwcGluZ3NbaW5kZXhdKSA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3JhbmdlRm9yU3RhcnRJbmRleChpbmRleCAtIDEpOworCisgICAgICAgIHJldHVybiBudWxsOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKKyAgICAgKiBA
cmV0dXJuIHs/V2ViSW5zcGVjdG9yLlNvdXJjZVJhbmdlfQorICAgICAqLworICAgIF9yYW5nZUZv
clN0YXJ0SW5kZXg6IGZ1bmN0aW9uKGluZGV4KQorICAgIHsKKyAgICAgICAgdmFyIHN0YXJ0RW50
cnkgPSB0aGlzLl9tYXBwaW5nc1tpbmRleF07CisgICAgICAgIHZhciBlbmRFbnRyeSA9IHRoaXMu
X21hcHBpbmdzW2luZGV4ICsgMV07CisgICAgICAgIGlmIChzdGFydEVudHJ5WzJdICE9PSBlbmRF
bnRyeVsyXSkgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcigiTWlzbWF0Y2hlZCBzb3VyY2Ug
VVJMcyBpbiBhZGphY2VudCByYW5nZS1iYXNlZCBzb3VyY2VtYXAgZW50cmllczogJXMgdnMgJXMi
LCBKU09OLnN0cmluZ2lmeShzdGFydEVudHJ5KSwgSlNPTi5zdHJpbmdpZnkoZW5kRW50cnkpKTsK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5l
dyBXZWJJbnNwZWN0b3IuU291cmNlUmFuZ2Uoc3RhcnRFbnRyeVsyXSwgc3RhcnRFbnRyeVszXSwg
c3RhcnRFbnRyeVs0XSwgZW5kRW50cnlbM10sIGVuZEVudHJ5WzRdKTsKKyAgICB9LAorCisgICAg
X19wcm90b19fOiBXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZQorfQorCisvKioKKyAq
IEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtzdHJpbmd9IHVybAorICogQHBhcmFtIHtudW1iZXJ9
IHN0YXJ0TGluZQorICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0Q29sdW1uCisgKiBAcGFyYW0ge251
bWJlcn0gZW5kTGluZQorICogQHBhcmFtIHtudW1iZXJ9IGVuZENvbHVtbgorICovCitXZWJJbnNw
ZWN0b3IuU291cmNlUmFuZ2UgPSBmdW5jdGlvbih1cmwsIHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4s
IGVuZExpbmUsIGVuZENvbHVtbikKK3sKKyAgICB0aGlzLnVybCA9IHVybDsKKyAgICB0aGlzLnN0
YXJ0TGluZSA9IHN0YXJ0TGluZTsKKyAgICB0aGlzLmVuZExpbmUgPSBlbmRMaW5lOworICAgIHRo
aXMuc3RhcnRDb2x1bW4gPSBzdGFydENvbHVtbjsKKyAgICB0aGlzLmVuZENvbHVtbiA9IGVuZENv
bHVtbjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
V2ViS2l0LnFyYyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFy
YwppbmRleCBlNDQyMmRmYTQwYmYwOGU2ZTMzMWZkZGU5ZTNlYzNiZDljMmU4NzI2Li5mOWM3OTkx
M2IxYTE3YWE1OTdjOWQ3YWNmZjBhM2UzNzZjOWJkNTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBAIC0xODEsNiArMTgxLDcgQEAKICAgICA8
ZmlsZT5Tb3VyY2VGcmFtZS5qczwvZmlsZT4KICAgICA8ZmlsZT5Tb3VyY2VIVE1MVG9rZW5pemVy
LmpzPC9maWxlPgogICAgIDxmaWxlPlNvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuanM8L2ZpbGU+
CisgICAgPGZpbGU+U291cmNlTWFwLmpzPC9maWxlPgogICAgIDxmaWxlPlNvdXJjZU1hcHBpbmcu
anM8L2ZpbGU+CiAgICAgPGZpbGU+U291cmNlVG9rZW5pemVyLmpzPC9maWxlPgogICAgIDxmaWxl
PlNwZWN0cnVtLmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggZWM1ZjRiNmFmNmJiNjQ4ZjI5ZWM3ODgyMmQ4OTM2
OTIxNGU5ZTlkZi4uZWU0ZTQxNzU4MzRhMTA1NzU4MTZiODI1NDg1ZjRlYTIxMGU5NzZkMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRt
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1s
CkBAIC0xMzEsNiArMTMxLDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJGaWxlU3lzdGVtTW9kZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkZpbGVVdGlscy5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRGVidWdnZXJNb2RlbC5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNlTWFw
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJT
b3VyY2VNYXBwaW5nLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJTY3JpcHQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9IkxpbmtpZmllci5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDQ5OTU2MTg1
MjJhNTk5MjZhYmMzNzhmYTUwNmZmNDg4ZTRjNTc3Yi4uYjZiNjRjMTZhNzk2N2ZhM2M1ZmQwZTQ3
OGM2NDIzYzE5ZjIxM2RlZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEyLTI3ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUmVmYWN0b3IgU291cmNlTWFwUGFyc2VyIHRvIGVuYWJsZSByYW5nZS1iYXNlZCBzb3Vy
Y2VtYXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NTc2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
aHR0cC90ZXN0cy9pbnNwZWN0b3IvY29tcGlsZXItc2NyaXB0LW1hcHBpbmctZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbXBpbGVyLXNjcmlwdC1tYXBwaW5n
Lmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy9yYW5nZS1iYXNlZC1tYXBwaW5nLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy9yYW5nZS1iYXNl
ZC1tYXBwaW5nLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEyLTI1ICBBbGV4YW5kZXIgUGF2bG92ICA8
YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQ3Jhc2ggd2hl
biBtb2RpZnlpbmcgYSBydWxlIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCB0aHJvdWdoIEphdmFTY3Jp
cHQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbXBpbGVy
LXNjcmlwdC1tYXBwaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL2NvbXBpbGVyLXNjcmlwdC1tYXBwaW5nLWV4cGVjdGVkLnR4dAppbmRleCAxN2I2OTc3
YWExYzQxOTg5ZjhkYzJkY2M0N2Q1YjUwZTEzOTI3OWIxLi5jZDAzYjc5NWJiYzQyY2VlMjg1ZWNl
N2IyMmU2NzkxMWFiYTIwZmU3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2lu
c3BlY3Rvci9jb21waWxlci1zY3JpcHQtbWFwcGluZy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29tcGlsZXItc2NyaXB0LW1hcHBpbmctZXhwZWN0
ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAotVGVzdHMgU291cmNlTWFwUGFyc2VyIGFuZCBDb21waWxl
clNjcmlwdE1hcHBpbmcuCitUZXN0cyBQb3NpdGlvbkJhc2VkU291cmNlTWFwIGFuZCBDb21waWxl
clNjcmlwdE1hcHBpbmcuCiAKIAogUnVubmluZzogdGVzdFNpbXBsZU1hcApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29tcGlsZXItc2NyaXB0LW1hcHBpbmcu
aHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbXBpbGVyLXNjcmlwdC1t
YXBwaW5nLmh0bWwKaW5kZXggZWJkZTA0ZjE2NGQ0YmZlNDExNjExODkzZWM3YmJmOTJmMDY1NmU5
MC4uYzM4YTdjNDVmYmJjZDJjZWIzZmVhYmUzMWQxYWUyNzA5YTZhYmEwNCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29tcGlsZXItc2NyaXB0LW1hcHBpbmcu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9jb21waWxlci1zY3Jp
cHQtbWFwcGluZy5odG1sCkBAIC01NCw3ICs1NCw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAg
ICAgICAgICAgICJtYXBwaW5ncyI6IkFBQVNBLFFBQUFBLElBQUcsQ0FBQ0MsQ0FBRCxDQUFhQyxD
QUFiLENBQ1osQ0FDSSxNQUFPRCxFQUFQLENBQW9CQyxDQUR4QixDQUlBLElBQUlDLE9BQVM7IiwK
ICAgICAgICAgICAgICAgICAic291cmNlcyI6WyJleGFtcGxlLmpzIl0KICAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICB2YXIgbWFwcGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlTWFwUGFy
c2VyKCJzb3VyY2UtbWFwLmpzb24iLCBtYXBwaW5nUGF5bG9hZCk7CisgICAgICAgICAgICB2YXIg
bWFwcGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcCgic291cmNl
LW1hcC5qc29uIiwgbWFwcGluZ1BheWxvYWQpOwogCiAgICAgICAgICAgICBjaGVja01hcHBpbmco
MCwgOSwgImV4YW1wbGUuanMiLCAwLCA5LCBtYXBwaW5nKTsKICAgICAgICAgICAgIGNoZWNrTWFw
cGluZygwLCAxMywgImV4YW1wbGUuanMiLCAwLCAxMywgbWFwcGluZyk7CkBAIC03OCw3ICs3OCw3
IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgICAgICJtYXBwaW5ncyI6IkFBQUEsQyxD
QUFFOyIsCiAgICAgICAgICAgICAgICAgInNvdXJjZXMiOlsiZXhhbXBsZS5qcyJdCiAgICAgICAg
ICAgICB9OwotICAgICAgICAgICAgdmFyIG1hcHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJj
ZU1hcFBhcnNlcigic291cmNlLW1hcC5qc29uIiwgbWFwcGluZ1BheWxvYWQpOworICAgICAgICAg
ICAgdmFyIG1hcHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAo
InNvdXJjZS1tYXAuanNvbiIsIG1hcHBpbmdQYXlsb2FkKTsKICAgICAgICAgICAgIGNoZWNrTWFw
cGluZygwLCAwLCAiZXhhbXBsZS5qcyIsIDAsIDAsIG1hcHBpbmcpOwogICAgICAgICAgICAgdmFy
IGVudHJ5ID0gbWFwcGluZy5maW5kRW50cnkoMCwgMSk7CiAgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmFzc2VydEVxdWFscygyLCBlbnRyeS5sZW5ndGgpOwpAQCAtOTIsNyArOTIsNyBAQCBmdW5j
dGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICAibWFwcGluZ3MiOiJBQUFBOzs7Q0FDQSIsCiAg
ICAgICAgICAgICAgICAgInNvdXJjZXMiOlsiZXhhbXBsZS5qcyJdCiAgICAgICAgICAgICB9Owot
ICAgICAgICAgICAgdmFyIG1hcHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFBhcnNl
cigic291cmNlLW1hcC5qc29uIiwgbWFwcGluZ1BheWxvYWQpOworICAgICAgICAgICAgdmFyIG1h
cHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAoInNvdXJjZS1t
YXAuanNvbiIsIG1hcHBpbmdQYXlsb2FkKTsKICAgICAgICAgICAgIGNoZWNrTWFwcGluZygwLCAw
LCAiZXhhbXBsZS5qcyIsIDAsIDAsIG1hcHBpbmcpOwogICAgICAgICAgICAgY2hlY2tSZXZlcnNl
TWFwcGluZygzLCAxLCAiZXhhbXBsZS5qcyIsIDEsIG1hcHBpbmcpOwogICAgICAgICAgICAgbmV4
dCgpOwpAQCAtMTE1LDcgKzExNSw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgXX07Ci0gICAgICAgICAgICB2
YXIgbWFwcGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlTWFwUGFyc2VyKCJzb3VyY2UtbWFw
Lmpzb24iLCBtYXBwaW5nUGF5bG9hZCk7CisgICAgICAgICAgICB2YXIgbWFwcGluZyA9IG5ldyBX
ZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcCgic291cmNlLW1hcC5qc29uIiwgbWFw
cGluZ1BheWxvYWQpOwogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMoMiwg
bWFwcGluZy5zb3VyY2VzKCkubGVuZ3RoKTsKICAgICAgICAgICAgIGNoZWNrTWFwcGluZygwLCAw
LCAic291cmNlMS5qcyIsIDAsIDAsIG1hcHBpbmcpOwogICAgICAgICAgICAgY2hlY2tNYXBwaW5n
KDAsIDEsICJzb3VyY2UxLmpzIiwgMiwgMSwgbWFwcGluZyk7CkBAIC0xMjYsNyArMTI2LDcgQEAg
ZnVuY3Rpb24gdGVzdCgpCiAKICAgICAgICAgZnVuY3Rpb24gdGVzdFJlc29sdmVTb3VyY2VNYXBV
UkwobmV4dCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIGZ1bmMgPSBXZWJJbnNwZWN0b3Iu
U291cmNlTWFwUGFyc2VyLnByb3RvdHlwZS5fY2Fub25pY2FsaXplVVJMOworICAgICAgICAgICAg
dmFyIGZ1bmMgPSBXZWJJbnNwZWN0b3IuUG9zaXRpb25CYXNlZFNvdXJjZU1hcC5wcm90b3R5cGUu
X2Nhbm9uaWNhbGl6ZVVSTDsKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxz
KCJodHRwOi8vZXhhbXBsZS5jb20vbWFwLmpzb24iLCBmdW5jKCJodHRwOi8vZXhhbXBsZS5jb20v
bWFwLmpzb24iLCAiaHR0cDovL2V4YW1wbGUuY29tL3NjcmlwdC5qcyIpKTsKICAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKCJodHRwOi8vZXhhbXBsZS5jb20vbWFwLmpzb24i
LCBmdW5jKCIvbWFwLmpzb24iLCAiaHR0cDovL2V4YW1wbGUuY29tL3NjcmlwdC5qcyIpKTsKICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKCJodHRwOi8vZXhhbXBsZS5jb20v
c2NyaXB0cy8uLi9tYXBzL21hcC5qc29uIiwgZnVuYygiLi4vbWFwcy9tYXAuanNvbiIsICJodHRw
Oi8vZXhhbXBsZS5jb20vc2NyaXB0cy9zY3JpcHQuanMiKSk7CkBAIC0yNjIsNiArMjYyLDYgQEAg
ZnVuY3Rpb24gdGVzdCgpCiA8L2hlYWQ+CiAKIDxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KLTxw
PlRlc3RzIFNvdXJjZU1hcFBhcnNlciBhbmQgQ29tcGlsZXJTY3JpcHRNYXBwaW5nLjwvcD4KKzxw
PlRlc3RzIFBvc2l0aW9uQmFzZWRTb3VyY2VNYXAgYW5kIENvbXBpbGVyU2NyaXB0TWFwcGluZy48
L3A+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzL3JhbmdlLWJhc2VkLW1hcHBpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3N0eWxlcy9yYW5nZS1iYXNlZC1tYXBwaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hY2FkZjNmMDQ0ODFlMmJmZWM3OGUwY2Y4MzMzNTNkOWI4ODlhZGMyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9yYW5nZS1iYXNlZC1tYXBwaW5nLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKK1Rlc3RzIFJhbmdlQmFzZWRTb3VyY2VNYXAuCisK
K1BBU1MKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9yYW5nZS1i
YXNlZC1tYXBwaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3JhbmdlLWJh
c2VkLW1hcHBpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNDI4YjBmMGYyZGI1OWNiMDJiNDFkM2E2MTU0
YWZmZWVkNTAwZmJhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0
eWxlcy9yYW5nZS1iYXNlZC1tYXBwaW5nLmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3It
dGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0
b3IvZGVidWdnZXItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90
ZXN0cy9pbnNwZWN0b3Ivd29ya3NwYWNlLXRlc3QuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0Pgor
CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBmdW5jdGlvbiBjaGVja01hcHBpbmcobWFwcGluZywg
Y29tcGlsZWRMaW5lLCBjb21waWxlZENvbHVtbiwgc291cmNlVVJMLCBzb3VyY2VTdGFydExpbmUs
IHNvdXJjZVN0YXJ0Q29sdW1uLCBzb3VyY2VFbmRMaW5lLCBzb3VyY2VFbmRDb2x1bW4pCisgICAg
eworICAgICAgICB2YXIgcmFuZ2UgPSBtYXBwaW5nLmZpbmRTb3VyY2VSYW5nZShjb21waWxlZExp
bmUsIGNvbXBpbGVkQ29sdW1uKTsKKyAgICAgICAgaWYgKCFyYW5nZSkgeworICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMobnVsbCwgc291cmNlVVJMKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscyhz
b3VyY2VVUkwsIHJhbmdlLnVybCk7CisgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxz
KHNvdXJjZVN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRMaW5lKTsKKyAgICAgICAgSW5zcGVjdG9yVGVz
dC5hc3NlcnRFcXVhbHMoc291cmNlU3RhcnRDb2x1bW4sIHJhbmdlLnN0YXJ0Q29sdW1uKTsKKyAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMoc291cmNlRW5kTGluZSwgcmFuZ2UuZW5k
TGluZSk7CisgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKHNvdXJjZUVuZENvbHVt
biwgcmFuZ2UuZW5kQ29sdW1uKTsKKyAgICB9CisKKyAgICAvKgorICAgICAgICBleGFtcGxlLnNj
c3M6CisgICAgICAgIDAgICAgICAgICAxICAgICAgICAgMiAgICAgICAgIDMKKyAgICAgICAgMDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1CisgICAgICAgIGEgeworICAgICAgICAg
IGZvbzogYmFyOworICAgICAgICAgIC8gKiBTT01FIENPTU1FTlQgKiAvCisgICAgICAgICAgZm9u
dC1zaXplOiAxMnB4OworICAgICAgICB9CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgZXhhbXBsZS5jc3M6CisgICAgICAgIDAgICAgICAg
ICAxICAgICAgICAgMiAgICAgICAgIDMKKyAgICAgICAgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1CisgICAgICAgIGEgeworICAgICAgICAgIGZvbzogYmFyOworICAgICAgICAg
IC8gKiBTT01FIENPTU1FTlQgKiAvCisgICAgICAgICAgZm9udC1zaXplOiAxMnB4OworICAgICAg
ICB9CisgICAgKi8KKyAgICB2YXIgbWFwcGluZ1BheWxvYWQgPSB7CisgICAgICAgICJtYXBwaW5n
cyI6IjtFQUNFLEdBQUcsRUFBRSxHQUFHOztFQUVSLFNBQVMsRUFBRSxJQUFJIiwKKyAgICAgICAg
InNvdXJjZXMiOlsiZXhhbXBsZS5zY3NzIl0KKyAgICB9OworICAgIHZhciBtYXBwaW5nID0gbmV3
IFdlYkluc3BlY3Rvci5SYW5nZUJhc2VkU291cmNlTWFwKCJzb3VyY2UtbWFwLmpzb24iLCBtYXBw
aW5nUGF5bG9hZCk7CisKKyAgICBjaGVja01hcHBpbmcobWFwcGluZywgMCwgMCwgbnVsbCk7Cisg
ICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcsIDAsIDEsIG51bGwpOworICAgIGNoZWNrTWFwcGluZyht
YXBwaW5nLCAxLCAxLCBudWxsKTsKKyAgICBjaGVja01hcHBpbmcobWFwcGluZywgMSwgMiwgImV4
YW1wbGUuc2NzcyIsIDEsIDIsIDEsIDUpOworICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAxLCAz
LCAiZXhhbXBsZS5zY3NzIiwgMSwgMiwgMSwgNSk7CisgICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcs
IDEsIDQsICJleGFtcGxlLnNjc3MiLCAxLCAyLCAxLCA1KTsKKyAgICBjaGVja01hcHBpbmcobWFw
cGluZywgMSwgNSwgbnVsbCk7CisgICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcsIDEsIDYsIG51bGwp
OworICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAxLCA3LCAiZXhhbXBsZS5zY3NzIiwgMSwgNywg
MSwgMTApOworICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAxLCA4LCAiZXhhbXBsZS5zY3NzIiwg
MSwgNywgMSwgMTApOworICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAxLCA5LCAiZXhhbXBsZS5z
Y3NzIiwgMSwgNywgMSwgMTApOworICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAxLCAxMCwgbnVs
bCk7CisgICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcsIDIsIDEwLCBudWxsKTsKKyAgICBjaGVja01h
cHBpbmcobWFwcGluZywgMywgMiwgImV4YW1wbGUuc2NzcyIsIDMsIDIsIDMsIDExKTsKKyAgICBj
aGVja01hcHBpbmcobWFwcGluZywgMywgMywgImV4YW1wbGUuc2NzcyIsIDMsIDIsIDMsIDExKTsK
KyAgICBjaGVja01hcHBpbmcobWFwcGluZywgMywgNCwgImV4YW1wbGUuc2NzcyIsIDMsIDIsIDMs
IDExKTsKKyAgICBjaGVja01hcHBpbmcobWFwcGluZywgMywgNSwgImV4YW1wbGUuc2NzcyIsIDMs
IDIsIDMsIDExKTsKKyAgICBjaGVja01hcHBpbmcobWFwcGluZywgMywgNiwgImV4YW1wbGUuc2Nz
cyIsIDMsIDIsIDMsIDExKTsKKyAgICBjaGVja01hcHBpbmcobWFwcGluZywgMywgNywgImV4YW1w
bGUuc2NzcyIsIDMsIDIsIDMsIDExKTsKKyAgICBjaGVja01hcHBpbmcobWFwcGluZywgMywgOCwg
ImV4YW1wbGUuc2NzcyIsIDMsIDIsIDMsIDExKTsKKyAgICBjaGVja01hcHBpbmcobWFwcGluZywg
MywgOSwgImV4YW1wbGUuc2NzcyIsIDMsIDIsIDMsIDExKTsKKyAgICBjaGVja01hcHBpbmcobWFw
cGluZywgMywgMTAsICJleGFtcGxlLnNjc3MiLCAzLCAyLCAzLCAxMSk7CisgICAgY2hlY2tNYXBw
aW5nKG1hcHBpbmcsIDMsIDExLCBudWxsKTsKKyAgICBjaGVja01hcHBpbmcobWFwcGluZywgMywg
MTIsIG51bGwpOworICAgIGNoZWNrTWFwcGluZyhtYXBwaW5nLCAzLCAxMywgImV4YW1wbGUuc2Nz
cyIsIDMsIDEzLCAzLCAxNyk7CisgICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcsIDMsIDE0LCAiZXhh
bXBsZS5zY3NzIiwgMywgMTMsIDMsIDE3KTsKKyAgICBjaGVja01hcHBpbmcobWFwcGluZywgMywg
MTUsICJleGFtcGxlLnNjc3MiLCAzLCAxMywgMywgMTcpOworICAgIGNoZWNrTWFwcGluZyhtYXBw
aW5nLCAzLCAxNiwgImV4YW1wbGUuc2NzcyIsIDMsIDEzLCAzLCAxNyk7CisgICAgY2hlY2tNYXBw
aW5nKG1hcHBpbmcsIDMsIDE3LCBudWxsKTsKKyAgICBjaGVja01hcHBpbmcobWFwcGluZywgNCwg
MSwgbnVsbCk7CisgICAgY2hlY2tNYXBwaW5nKG1hcHBpbmcsIDUsIDIsIG51bGwpOworCisgICAg
SW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlBBU1MiKTsKKyAgICBJbnNwZWN0b3JUZXN0LmNvbXBs
ZXRlVGVzdCgpOworfTsKKzwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVu
VGVzdCgpIj4KKzxwPlRlc3RzIFJhbmdlQmFzZWRTb3VyY2VNYXAuPC9wPgorPC9ib2R5PgorPC9o
dG1sPgo=
</data>
<flag name="review"
          id="198187"
          type_id="1"
          status="+"
          setter="vsevik"
    />
          </attachment>
      

    </bug>

</bugzilla>