<?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>155454</bug_id>
          
          <creation_ts>2016-03-14 13:21:42 -0700</creation_ts>
          <short_desc>Destructuring parameters are evaluated in the wrong scope</short_desc>
          <delta_ts>2016-03-15 01:58:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>caitp</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1174648</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-14 13:21:42 -0700</bug_when>
    <thetext>i.e:

return (function({a=function(){
  return typeof b === &apos;undefined&apos;;
}}){
  var b = 1;
  return a();
}({}));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174695</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-14 14:07:33 -0700</bug_when>
    <thetext>our computation of &quot;isSimpleParameterList&quot; is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174755</commentid>
    <comment_count>2</comment_count>
      <attachid>274041</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-14 15:39:15 -0700</bug_when>
    <thetext>Created attachment 274041
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174758</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 15:41:25 -0700</bug_when>
    <thetext>Attachment 274041 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:838:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174772</commentid>
    <comment_count>4</comment_count>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2016-03-14 16:04:51 -0700</bug_when>
    <thetext>I would suggest adding tests involving arrow functions and default parameters --- there were some similar bugs in V8&apos;s implementation in these contexts due to incorrect scoping issues.

I&apos;m not sure it affects JSC as well because of the different frontend approach, but it probably doesn&apos;t hurt to pass similar tests. 
https://github.com/v8/v8/blob/02e4d21f4ce799c7d4e3500fa2cf96fc447456ff/test/mjsunit/harmony/regress/regress-4395.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174774</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-14 16:07:39 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I would suggest adding tests involving arrow functions and default
&gt; parameters --- there were some similar bugs in V8&apos;s implementation in these
&gt; contexts due to incorrect scoping issues.
&gt; 
&gt; I&apos;m not sure it affects JSC as well because of the different frontend
&gt; approach, but it probably doesn&apos;t hurt to pass similar tests. 
&gt; https://github.com/v8/v8/blob/02e4d21f4ce799c7d4e3500fa2cf96fc447456ff/test/
&gt; mjsunit/harmony/regress/regress-4395.js

Will do. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174797</commentid>
    <comment_count>6</comment_count>
      <attachid>274049</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-14 16:42:47 -0700</bug_when>
    <thetext>Created attachment 274049
patch

added the v8 tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174798</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 16:44:05 -0700</bug_when>
    <thetext>Attachment 274049 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:838:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174799</commentid>
    <comment_count>8</comment_count>
      <attachid>274050</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-14 16:44:16 -0700</bug_when>
    <thetext>Created attachment 274050
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174800</commentid>
    <comment_count>9</comment_count>
      <attachid>274050</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-14 16:44:42 -0700</bug_when>
    <thetext>Comment on attachment 274050
patch

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

&gt; Source/JavaScriptCore/tests/stress/v8-parameter-scoping.js:26
&gt; +//  Copyright 2014, the V8 project authors. All rights reserved.
&gt; +//  Redistribution and use in source and binary forms, with or without
&gt; +//  modification, are permitted provided that the following conditions are
&gt; +//  met:
&gt; +//  
&gt; +//      * Redistributions of source code must retain the above copyright
&gt; +//        notice, this list of conditions and the following disclaimer.
&gt; +//      * Redistributions in binary form must reproduce the above
&gt; +//        copyright notice, this list of conditions and the following
&gt; +//        disclaimer in the documentation and/or other materials provided
&gt; +//        with the distribution.
&gt; +//      * Neither the name of Google Inc. nor the names of its
&gt; +//        contributors may be used to endorse or promote products derived
&gt; +//        from this software without specific prior written permission.
&gt; +//  
&gt; +//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; +//  &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; +//  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; +//  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; +//  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; +//  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; +//  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; +//  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; +//  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Is this ok?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174802</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 16:46:40 -0700</bug_when>
    <thetext>Attachment 274050 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:838:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174834</commentid>
    <comment_count>11</comment_count>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2016-03-14 17:31:49 -0700</bug_when>
    <thetext>I&apos;m not a lawyer, but it matches the license text, so lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174838</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-14 17:35:59 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 274050 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=274050&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/tests/stress/v8-parameter-scoping.js:26
&gt; &gt; +//  Copyright 2014, the V8 project authors. All rights reserved.
&gt; &gt; +//  Redistribution and use in source and binary forms, with or without
&gt; &gt; +//  modification, are permitted provided that the following conditions are
&gt; &gt; +//  met:
&gt; &gt; +//  
&gt; &gt; +//      * Redistributions of source code must retain the above copyright
&gt; &gt; +//        notice, this list of conditions and the following disclaimer.
&gt; &gt; +//      * Redistributions in binary form must reproduce the above
&gt; &gt; +//        copyright notice, this list of conditions and the following
&gt; &gt; +//        disclaimer in the documentation and/or other materials provided
&gt; &gt; +//        with the distribution.
&gt; &gt; +//      * Neither the name of Google Inc. nor the names of its
&gt; &gt; +//        contributors may be used to endorse or promote products derived
&gt; &gt; +//        from this software without specific prior written permission.
&gt; &gt; +//  
&gt; &gt; +//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; &gt; +//  &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; &gt; +//  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; &gt; +//  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; &gt; +//  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; &gt; +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; &gt; +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; &gt; +//  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; &gt; +//  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; &gt; +//  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; &gt; +//  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; 
&gt; Is this ok?

Looks like BSD 3-clause to me, so I think that it&apos;s fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174880</commentid>
    <comment_count>13</comment_count>
      <attachid>274050</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-14 20:26:26 -0700</bug_when>
    <thetext>Comment on attachment 274050
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174936</commentid>
    <comment_count>14</comment_count>
      <attachid>274050</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-15 01:58:47 -0700</bug_when>
    <thetext>Comment on attachment 274050
patch

Clearing flags on attachment: 274050

Committed r198206: &lt;http://trac.webkit.org/changeset/198206&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174937</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-15 01:58:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274041</attachid>
            <date>2016-03-14 15:39:15 -0700</date>
            <delta_ts>2016-03-14 16:42:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>18640</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4MTY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE2LTAzLTE0ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IERlc3RydWN0dXJpbmcgcGFyYW1ldGVycyBhcmUgZXZhbHVhdGVkIGluIHRoZSB3cm9uZyBzY29w
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDU0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtYWtlcyBvdXIgZW5naW5lIGNvbXBhdGlibGUgd2l0aCBob3cgcGFyYW1ldGVyCisgICAg
ICAgIGxpc3RzIGFyZSBldmFsdWF0ZWQgaW4gSlNDLiBBIHBhcmFtZXRlciBsaXN0IHRoYXQgY29u
dGFpbnMKKyAgICAgICAgYSByZXN0IHBhcmFtZXRlciwgYW55IGRlc3RydWN0dXJpbmcgcGF0dGVy
bnMsIG9yIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywgCisgICAgICAgIGlzIGNsYXNzaWZpZWQg
YXMgYmVpbmcgbm9uLXNpbXBsZS4gTm9uLXNpbXBsZSBwYXJhbWV0ZXIgbGlzdHMKKyAgICAgICAg
bXVzdCBnZXQgdGhlaXIgb3duIHNjb3BlIHRvIGxpdmUgaW4sIGFuZCB0aGUgdmFyaWFibGVzIGlu
IHRoZQorICAgICAgICBzY29wZSBhcmUgdW5kZXIgVERaLiBUaGlzIG1lYW5zIHRoYXQgZnVuY3Rp
b25zIGV2YWx1YXRlZCBpbiB0aGUKKyAgICAgICAgcGFyYW1ldGVyIGxpc3QgZG9uJ3QgaGF2ZSBh
Y2Nlc3MgdG8gdmFyaWFibGVzIGluc2lkZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYm9keS4gQWxz
bywgbm9uLXNpbXBsZSBwYXJhbWV0ZXIgbGlzdHMgZ2V0IHRoZSBzdHJpY3QtbW9kZSBhcmd1bWVu
dHMgb2JqZWN0LgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVsdFBhcmFtZXRl
clZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmluaXRpYWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQp
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAq
IHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFtZXRlcnM6OnNpemUp
OgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFtZXRlcnM6OmF0KToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25QYXJhbWV0ZXJzOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFt
ZXRlcnM6Omhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMpOiBEZWxldGVkLgorICAgICAgICAqIHRl
c3RzL2VzNi55YW1sOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wYXJhbWV0ZXItc2NvcGluZy5q
czogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdCk6CisgICAgICAgICh0
ZXN0LmZvbyk6CisgICAgICAgICh0ZXN0Lik6CisKIDIwMTYtMDMtMTQgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWR1Y2UgZ2VuZXJhdGVkIEpTT04g
SGVhcFNuYXBzaG90IHNpemUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxOTgxNDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDE2ICsyMjUsMjAgQEAgQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldFVz
ZXNOb25TdHJpY3RFdmFsKG1fdXNlc05vblN0cmljdEV2YWwpOwogICAgIGludCBzeW1ib2xUYWJs
ZUNvbnN0YW50SW5kZXggPSBhZGRDb25zdGFudFZhbHVlKGZ1bmN0aW9uU3ltYm9sVGFibGUpLT5p
bmRleCgpOwogCi0gICAgVmVjdG9yPElkZW50aWZpZXI+IGJvdW5kUGFyYW1ldGVyUHJvcGVydGll
czsKICAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rpb25Ob2RlLT5w
YXJhbWV0ZXJzKCk7IAotICAgIGlmICghcGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzKCkpIHsgCi0gICAgICAgIC8vIElmIHdlIGRvIGhhdmUgZGVmYXVsdCBwYXJhbWV0ZXJzLCB0
aGV5IHdpbGwgYmUgYWxsb2NhdGVkIGluIGEgc2VwYXJhdGUgc2NvcGUuCi0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAg
YXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKS5maXJzdDsKLSAgICAgICAgICAgIGlmIChw
YXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBwYXR0ZXJuLT5jb2xsZWN0Qm91bmRJZGVudGlmaWVycyhib3VuZFBhcmFtZXRlclBy
b3BlcnRpZXMpOwotICAgICAgICB9CisgICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9u
YWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1mdW5jdGlvbmRlY2xhcmF0aW9uaW5z
dGFudGlhdGlvbgorICAgIC8vIFRoaXMgaW1wbGVtZW50cyBJc1NpbXBsZVBhcmFtZXRlckxpc3Qg
aW4gdGhlIEVjbWEgMjAxNSBzcGVjLgorICAgIC8vIElmIElzU2ltcGxlUGFyYW1ldGVyTGlzdCBp
cyBmYWxzZSwgd2Ugd2lsbCBjcmVhdGUgYSBzdHJpY3QtbW9kZSBsaWtlIGFyZ3VtZW50cyBvYmpl
Y3QuCisgICAgLy8gSXNTaW1wbGVQYXJhbWV0ZXJMaXN0IGlzIGZhbHNlIGlmIHRoZSBhcmd1bWVu
dCBsaXN0IGNvbnRhaW5zIGFueSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMsCisgICAgLy8gYSBy
ZXN0IHBhcmFtZXRlciwgb3IgYW55IGRlc3RydWN0dXJpbmcgcGF0dGVybnMuCisgICAgYm9vbCBp
c1NpbXBsZVBhcmFtZXRlckxpc3QgPSB0cnVlOworICAgIC8vIElmIHdlIGRvIGhhdmUgZGVmYXVs
dCBwYXJhbWV0ZXJzLCBkZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMsIG9yIGEgcmVzdCBwYXJhbWV0
ZXIsIG91ciBwYXJhbWV0ZXJzIHdpbGwgYmUgYWxsb2NhdGVkIGluIGEgZGlmZmVyZW50IHNjb3Bl
LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewor
ICAgICAgICBzdGQ6OnBhaXI8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5v
ZGUqPiBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzLmF0KGkpOworICAgICAgICBib29sIGhhc0RlZmF1
bHRQYXJhbWV0ZXJWYWx1ZSA9ICEhcGFyYW1ldGVyLnNlY29uZDsKKyAgICAgICAgYXV0byBwYXR0
ZXJuID0gcGFyYW1ldGVyLmZpcnN0OworICAgICAgICBib29sIGlzU2ltcGxlUGFyYW1ldGVyID0g
IWhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZSAmJiBwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCk7Cisg
ICAgICAgIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCAmPSBpc1NpbXBsZVBhcmFtZXRlcjsKICAgICB9
CiAKICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gY29kZUJsb2NrLT5wYXJzZU1vZGUo
KTsKQEAgLTI5Myw2ICsyOTcsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgbV9jYWxsZWVSZWdpc3Rlci5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOwog
CiAgICAgaW5pdGlhbGl6ZVBhcmFtZXRlcnMocGFyYW1ldGVycyk7CisgICAgQVNTRVJUKCEoaXNT
aW1wbGVQYXJhbWV0ZXJMaXN0ICYmIG1fcmVzdFBhcmFtZXRlcikpOwogCiAgICAgLy8gQmVmb3Jl
IGVtaXR0aW5nIGEgc2NvcGUgY3JlYXRpb24sIGVtaXQgYSBnZW5lcmF0b3IgcHJvbG9ndWUgdGhh
dCBjb250YWlucyBqdW1wIGJhc2VkIG9uIGEgZ2VuZXJhdG9yJ3Mgc3RhdGUuCiAgICAgaWYgKHBh
cnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkdlbmVyYXRvckJvZHlNb2RlKSB7CkBAIC0zMjEs
NyArMzI2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAg
ICAgICAvLyBXZSBjYW4gYWxsb2NhdGUgdGhlICJ2YXIiIGVudmlyb25tZW50IGlmIHdlIGRvbid0
IGhhdmUgZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMuIElmIHdlIGhhdmUKICAgICAgICAg
Ly8gZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMsIHdlIGhhdmUgdG8gaG9sZCBvZmYgb24g
YWxsb2NhdGluZyB0aGUgInZhciIgZW52aXJvbm1lbnQgYmVjYXVzZQogICAgICAgICAvLyB0aGUg
cGFyZW50IHNjb3BlIG9mIHRoZSAidmFyIiBlbnZpcm9ubWVudCBpcyB0aGUgcGFyYW1ldGVyIGVu
dmlyb25tZW50LgotICAgICAgICBpZiAoIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZh
bHVlcygpKQorICAgICAgICBpZiAoaXNTaW1wbGVQYXJhbWV0ZXJMaXN0KQogICAgICAgICAgICAg
aW5pdGlhbGl6ZVZhckxleGljYWxFbnZpcm9ubWVudChzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgp
OwogICAgIH0KIApAQCAtMzU3LDEzICszNjIsNiBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXItPnJlZigpOwogICAg
IH0KICAgICAKLSAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0y
NjIvNi4wL2luZGV4Lmh0bWwjc2VjLWZ1bmN0aW9uZGVjbGFyYXRpb25pbnN0YW50aWF0aW9uCi0g
ICAgLy8gVGhpcyBpbXBsZW1lbnRzIElzU2ltcGxlUGFyYW1ldGVyTGlzdCBpbiB0aGUgRWNtYSAy
MDE1IHNwZWMuCi0gICAgLy8gSWYgSXNTaW1wbGVQYXJhbWV0ZXJMaXN0IGlzIGZhbHNlLCB3ZSB3
aWxsIGNyZWF0ZSBhIHN0cmljdC1tb2RlIGxpa2UgYXJndW1lbnRzIG9iamVjdC4KLSAgICAvLyBJ
c1NpbXBsZVBhcmFtZXRlckxpc3QgaXMgZmFsc2UgaWYgdGhlIGFyZ3VtZW50IGxpc3QgY29udGFp
bnMgYW55IGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywKLSAgICAvLyBhIHJlc3QgcGFyYW1ldGVy
LCBvciBhbnkgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJucy4KLSAgICAvLyBGSVhNRTogVGFrZSBpbnRv
IGFjY291bnQgZGVzdHJ1Y3R1cmluZyB0byBtYWtlIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCBmYWxz
ZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTQ1MAotICAgIGJv
b2wgaXNTaW1wbGVQYXJhbWV0ZXJMaXN0ID0gIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRl
clZhbHVlcygpICYmICFtX3Jlc3RQYXJhbWV0ZXI7CiAgICAgaWYgKG5lZWRzQXJndW1lbnRzICYm
ICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpICYmIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCkgewog
ICAgICAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbnkgZm9ybWFsIHBhcmFtZXRlciBieSBuYW1lLCB0
aGVuIHdlIHVzZSBTY29wZWRBcmd1bWVudHMuIE90aGVyd2lzZSB3ZQogICAgICAgICAvLyB1c2Ug
RGlyZWN0QXJndW1lbnRzLiBXaXRoIFNjb3BlZEFyZ3VtZW50cywgd2UgbGlmdCBhbGwgb2Ygb3Vy
IGFyZ3VtZW50cyBpbnRvIHRoZQpAQCAtNDE0LDcgKzQxMiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRl
X2RpcmVjdF9hcmd1bWVudHMpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1f
YXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgh
cGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkpIHsKKyAgICB9IGVsc2UgaWYg
KGlzU2ltcGxlUGFyYW1ldGVyTGlzdCkgewogICAgICAgICAvLyBDcmVhdGUgdGhlIGZvcm1hbCBw
YXJhbWV0ZXJzIHRoZSBub3JtYWwgd2F5LiBBbnkgb2YgdGhlbSBjb3VsZCBiZSBjYXB0dXJlZCwg
b3Igbm90LiBJZgogICAgICAgICAvLyBjYXB0dXJlZCwgbGlmdCB0aGVtIGludG8gdGhlIHNjb3Bl
LiBXZSBjYW4gbm90IGRvIHRoaXMgaWYgd2UgaGF2ZSBkZWZhdWx0IHBhcmFtZXRlciBleHByZXNz
aW9ucwogICAgICAgICAvLyBiZWNhdXNlIHdoZW4gZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lv
bnMgZXhpc3QsIHRoZXkgYmVsb25nIGluIHRoZWlyIG93biBsZXhpY2FsIGVudmlyb25tZW50CkBA
IC00NTIsMTEgKzQ1MCw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihW
TSYKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXItPmlu
ZGV4KCkpOwogICAgIH0KICAgICAKLSAgICAvLyBOb3cgZGVjbGFyZSBhbGwgdmFyaWFibGVzLgot
ICAgIGZvciAoY29uc3QgSWRlbnRpZmllciYgaWRlbnQgOiBib3VuZFBhcmFtZXRlclByb3BlcnRp
ZXMpIHsKLSAgICAgICAgQVNTRVJUKCFwYXJhbWV0ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1
ZXMoKSk7Ci0gICAgICAgIGNyZWF0ZVZhcmlhYmxlKGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwo
KSksIGZ1bmN0aW9uU3ltYm9sVGFibGUpOwotICAgIH0KICAgICBmb3IgKEZ1bmN0aW9uTWV0YWRh
dGFOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25TdGFjaygpKSB7CiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlkZW50KCk7CiAgICAgICAg
IGNyZWF0ZVZhcmlhYmxlKGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSksIGZ1bmN0aW9uU3lt
Ym9sVGFibGUpOwpAQCAtNTY3LDcgKzU2MCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKICAgICAvLyBBbGwgImFkZFZhcigpInMgbmVlZHMgdG8gaGFwcGVuIGJl
Zm9yZSAiaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2Nv
cGVTdGFjaygpIiBpcyBjYWxsZWQKICAgICAvLyBiZWNhdXNlIGEgZnVuY3Rpb24ncyBkZWZhdWx0
IHBhcmFtZXRlciBFeHByZXNzaW9uTm9kZXMgd2lsbCB1c2UgdGVtcG9yYXJ5IHJlZ2lzdGVycy4K
ICAgICBwdXNoVERaVmFyaWFibGVzKCpwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgVERaQ2hlY2tP
cHRpbWl6YXRpb246OkRvTm90T3B0aW1pemUpOwotICAgIGluaXRpYWxpemVEZWZhdWx0UGFyYW1l
dGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2socGFyYW1ldGVycywgZnVuY3Rpb25O
b2RlLCBmdW5jdGlvblN5bWJvbFRhYmxlLCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNhcHR1
cmVzKTsKKyAgICBpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rp
b25TY29wZVN0YWNrKHBhcmFtZXRlcnMsIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCwgZnVuY3Rpb25O
b2RlLCBmdW5jdGlvblN5bWJvbFRhYmxlLCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNhcHR1
cmVzKTsKICAgICAKICAgICAvLyBMb2FkaW5nIHx0aGlzfCBpbnNpZGUgYW4gYXJyb3cgZnVuY3Rp
b24gbXVzdCBiZSBkb25lIGFmdGVyIGluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5k
U2V0dXBGdW5jdGlvblNjb3BlU3RhY2soKQogICAgIC8vIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBz
ZXRzIHVwIHRoZSBTeW1ib2xUYWJsZSBzdGFjayBhbmQgZW1pdExvYWRUaGlzRnJvbUFycm93RnVu
Y3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKQpAQCAtNzkzLDExICs3ODYsMTEgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcigpCiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3Bl
U3RhY2soCi0gICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbk5vZGUq
IGZ1bmN0aW9uTm9kZSwgU3ltYm9sVGFibGUqIGZ1bmN0aW9uU3ltYm9sVGFibGUsIAorICAgIEZ1
bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBpc1NpbXBsZVBhcmFtZXRlckxpc3Qs
IEZ1bmN0aW9uTm9kZSogZnVuY3Rpb25Ob2RlLCBTeW1ib2xUYWJsZSogZnVuY3Rpb25TeW1ib2xU
YWJsZSwgCiAgICAgaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgY29uc3Qgc3RkOjpmdW5j
dGlvbjxib29sIChVbmlxdWVkU3RyaW5nSW1wbCopPiYgY2FwdHVyZXMpCiB7CiAgICAgVmVjdG9y
PHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBSZWZQdHI8UmVnaXN0ZXJJRD4+PiB2YWx1ZXNUb01vdmVJ
bnRvVmFyczsKLSAgICBpZiAocGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkp
IHsKKyAgICBpZiAoIWlzU2ltcGxlUGFyYW1ldGVyTGlzdCkgewogICAgICAgICAvLyBSZWZlciB0
byB0aGUgRVM2IHNwZWMgc2VjdGlvbiA5LjIuMTI6IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZnVuY3Rpb25kZWNsYXJhdGlvbmlu
c3RhbnRpYXRpb24KICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRzIHN0ZXAgMjEuCiAgICAgICAg
IFZhcmlhYmxlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQ7CkBAIC04NjYsMjQgKzg1OSwxMSBAQCB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVsCiAKICAgICAvLyBUaGlzIGNv
bXBsZXRlcyBzdGVwIDI4IG9mIHNlY3Rpb24gOS4yLjEyLgogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2YWx1ZXNUb01vdmVJbnRvVmFycy5zaXplKCk7IGkrKykgewotICAgICAgICBBU1NF
UlQocGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkpOworICAgICAgICBBU1NF
UlQoIWlzU2ltcGxlUGFyYW1ldGVyTGlzdCk7CiAgICAgICAgIFZhcmlhYmxlIHZhciA9IHZhcmlh
YmxlKHZhbHVlc1RvTW92ZUludG9WYXJzW2ldLmZpcnN0KTsKICAgICAgICAgUmVnaXN0ZXJJRCog
c2NvcGUgPSBlbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CiAgICAgICAgIGVtaXRQdXRU
b1Njb3BlKHNjb3BlLCB2YXIsIHZhbHVlc1RvTW92ZUludG9WYXJzW2ldLnNlY29uZC5nZXQoKSwg
RG9Ob3RUaHJvd0lmTm90Rm91bmQsIE5vdEluaXRpYWxpemF0aW9uKTsKICAgICB9Ci0KLSAgICBp
ZiAoIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpKSB7Ci0gICAgICAgIEFT
U0VSVCghdmFsdWVzVG9Nb3ZlSW50b1ZhcnMuc2l6ZSgpKTsKLSAgICAgICAgLy8gSW5pdGlhbGl6
ZSBkZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMgdGhlIG9sZCB3YXkgYXMgaWYgd2UgZG9uJ3QgaGF2
ZSBhbnkgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLgotICAgICAgICAvLyBJZiB3ZSBoYXZlIGRl
ZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywgd2UgaGFuZGxlIHRoaXMgY2FzZSBhYm92ZS4KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgICAgIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSogcGF0dGVybiA9IHBhcmFtZXRlcnMu
YXQoaSkuZmlyc3Q7Ci0gICAgICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSAm
JiAhcGF0dGVybi0+aXNSZXN0UGFyYW1ldGVyKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcGFyYW1ldGVyVmFsdWUgPSAmcmVnaXN0ZXJGb3IodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSArIGkpKTsKLSAgICAgICAgICAgICAgICBwYXR0ZXJuLT5iaW5kVmFsdWUo
KnRoaXMsIHBhcmFtZXRlclZhbHVlLmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZUFycm93RnVuY3Rp
b25Db250ZXh0U2NvcGVJZk5lZWRlZChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiAxOTgxNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzNSw3ICs4
MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGluaXRpYWxpemVQYXJhbWV0
ZXJzKEZ1bmN0aW9uUGFyYW1ldGVycyYpOwogICAgICAgICB2b2lkIGluaXRpYWxpemVWYXJMZXhp
Y2FsRW52aXJvbm1lbnQoaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCk7Ci0gICAgICAgIHZv
aWQgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVT
dGFjayhGdW5jdGlvblBhcmFtZXRlcnMmLCBGdW5jdGlvbk5vZGUqLCBTeW1ib2xUYWJsZSosIGlu
dCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoVW5p
cXVlZFN0cmluZ0ltcGwqKT4mIGNhcHR1cmVzKTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplRGVm
YXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKEZ1bmN0aW9uUGFy
YW1ldGVycyYsIGJvb2wgaXNTaW1wbGVQYXJhbWV0ZXJMaXN0LCBGdW5jdGlvbk5vZGUqLCBTeW1i
b2xUYWJsZSosIGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNvbnN0IHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoVW5pcXVlZFN0cmluZ0ltcGwqKT4mIGNhcHR1cmVzKTsKICAgICAgICAgdm9pZCBp
bml0aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZUlmTmVlZGVkKFN5bWJvbFRhYmxlKiA9
IG51bGxwdHIpOwogCiAgICAgcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuaAkocmV2aXNpb24gMTk4MTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODE4LDE5ICsxODE4LDE1IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMoKTsKICAgICAgICAgQUxXQVlTX0lO
TElORSB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJucy5zaXplKCk7IH0K
ICAgICAgICAgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2Rl
KiwgRXhwcmVzc2lvbk5vZGUqPiBhdCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9wYXR0ZXJu
c1tpbmRleF07IH0KLSAgICAgICAgYm9vbCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzOyB9CiAgICAgICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBhcHBlbmQoRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuLCBF
eHByZXNzaW9uTm9kZSogZGVmYXVsdFZhbHVlKSAKICAgICAgICAgeyAKICAgICAgICAgICAgIEFT
U0VSVChwYXR0ZXJuKTsgCiAgICAgICAgICAgICBtX3BhdHRlcm5zLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihwYXR0ZXJuLCBkZWZhdWx0VmFsdWUpKTsKLSAgICAgICAgICAgIGlmIChkZWZhdWx0VmFs
dWUpCi0gICAgICAgICAgICAgICAgbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzID0gdHJ1ZTsK
ICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKIAogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPERl
c3RydWN0dXJpbmdQYXR0ZXJuTm9kZSosIEV4cHJlc3Npb25Ob2RlKj4sIDM+IG1fcGF0dGVybnM7
Ci0gICAgICAgIGJvb2wgbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzIHsgZmFsc2UgfTsKICAg
ICB9OwogCiAgICAgY2xhc3MgRnVuY3Rpb25NZXRhZGF0YU5vZGUgZmluYWwgOiBwdWJsaWMgTm9k
ZSwgcHVibGljIFBhcnNlckFyZW5hRGVsZXRhYmxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9lczYueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvZXM2LnlhbWwJKHJldmlzaW9uIDE5ODE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9lczYueWFtbAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDcgKzc1Nyw3IEBACiAtIHBh
dGg6IGVzNi9kZXN0cnVjdHVyaW5nX2NvbXB1dGVkX3Byb3BlcnRpZXMuanMKICAgY21kOiBydW5F
UzYgOm5vcm1hbAogLSBwYXRoOiBlczYvZGVzdHJ1Y3R1cmluZ19kZWZhdWx0c19pbl9wYXJhbWV0
ZXJzX3NlcGFyYXRlX3Njb3BlLmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2
IDpub3JtYWwKIC0gcGF0aDogZXM2L2Rlc3RydWN0dXJpbmdfaXRlcmF0b3JfY2xvc2luZy5qcwog
ICBjbWQ6IHJ1bkVTNiA6ZmFpbAogLSBwYXRoOiBlczYvZGVzdHJ1Y3R1cmluZ19uZXN0ZWRfcmVz
dC5qcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wYXJhbWV0ZXIt
c2NvcGluZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3BhcmFtZXRlci1zY29waW5nLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9wYXJhbWV0ZXItc2NvcGluZy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIyNSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiYmFkIik7Cit9CisKK2Z1bmN0aW9uIHRlc3QoZikgeworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAgICAgICBmKCk7Cit9CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICAgICAgYXNzZXJ0KGFy
Z3VtZW50c1swXSA9PT0gYSk7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNbMV0gPT09IGIpOwor
ICAgICAgICBhc3NlcnQoYXJndW1lbnRzLmxlbmd0aCA9PT0gMik7CisgICAgICAgIGFyZ3VtZW50
c1swXSA9ICJoZWxsbyI7CisgICAgICAgIGFyZ3VtZW50c1sxXSA9ICJ3b3JsZCI7CisgICAgICAg
IGFzc2VydChhID09PSAiaGVsbG8iKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09ICJ3b3JsZCIpOwor
ICAgIH0KKyAgICBmb28obnVsbCwgbnVsbCk7Cit9KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAg
ICBmdW5jdGlvbiBmb28oYSwgYikgeworICAgICAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSBh
KTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sxXSA9PT0gYik7CisgICAgICAgIGFzc2VydChh
cmd1bWVudHMubGVuZ3RoID09PSAyKTsKKyAgICAgICAgYSA9ICJoZWxsbyI7CisgICAgICAgIGIg
PSAid29ybGQiOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSAiaGVsbG8iKTsKKyAg
ICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sxXSA9PT0gIndvcmxkIik7CisgICAgfQorICAgIGZvbyhu
dWxsLCBudWxsKTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIGZvbyhh
LCBiLCAuLi5yZXN0KSB7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNbMF0gPT09IGEpOworICAg
ICAgICBhc3NlcnQoYXJndW1lbnRzWzFdID09PSBiKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50
cy5sZW5ndGggPT09IDIpOworICAgICAgICBhcmd1bWVudHNbMF0gPSAiaGVsbG8iOworICAgICAg
ICBhcmd1bWVudHNbMV0gPSAid29ybGQiOworICAgICAgICBhc3NlcnQoYSA9PT0gbnVsbCk7Cisg
ICAgICAgIGFzc2VydChiID09PSBudWxsKTsKKyAgICB9CisgICAgZm9vKG51bGwsIG51bGwpOwor
fSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIC4uLnJlc3Qp
IHsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gYSk7CisgICAgICAgIGFzc2VydChh
cmd1bWVudHNbMV0gPT09IGIpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzLmxlbmd0aCA9PT0g
Mik7CisgICAgICAgIGEgPSAiaGVsbG8iOworICAgICAgICBiID0gIndvcmxkIjsKKyAgICAgICAg
YXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gbnVsbCk7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNb
MV0gPT09IG51bGwpOworICAgIH0KKyAgICBmb28obnVsbCwgbnVsbCk7Cit9KTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oYSwgYiwge2Rlc3RydWN0dXJlfSkgeworICAg
ICAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSBhKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50
c1sxXSA9PT0gYik7CisgICAgICAgIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09PSAzKTsKKyAg
ICAgICAgYXJndW1lbnRzWzBdID0gImhlbGxvIjsKKyAgICAgICAgYXJndW1lbnRzWzFdID0gIndv
cmxkIjsKKyAgICAgICAgYXNzZXJ0KGEgPT09IG51bGwpOworICAgICAgICBhc3NlcnQoYiA9PT0g
bnVsbCk7CisgICAgfQorICAgIGZvbyhudWxsLCBudWxsLCB7fSk7Cit9KTsKKwordGVzdChmdW5j
dGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oYSwgYiwge2Rlc3RydWN0dXJlfSkgeworICAgICAg
ICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSBhKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sx
XSA9PT0gYik7CisgICAgICAgIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09PSAzKTsKKyAgICAg
ICAgYSA9ICJoZWxsbyI7CisgICAgICAgIGIgPSAid29ybGQiOworICAgICAgICBhc3NlcnQoYXJn
dW1lbnRzWzBdID09PSBudWxsKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sxXSA9PT0gbnVs
bCk7CisgICAgfQorICAgIGZvbyhudWxsLCBudWxsLCB7fSk7Cit9KTsKKwordGVzdChmdW5jdGlv
bigpIHsKKyAgICBmdW5jdGlvbiBmb28oYSwgYiwgZGVmYXVsdFBhcmFtID0gMjApIHsKKyAgICAg
ICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gYSk7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNb
MV0gPT09IGIpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyk7CisgICAg
ICAgIGFyZ3VtZW50c1swXSA9ICJoZWxsbyI7CisgICAgICAgIGFyZ3VtZW50c1sxXSA9ICJ3b3Js
ZCI7CisgICAgICAgIGFzc2VydChhID09PSBudWxsKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IG51
bGwpOworICAgIH0KKyAgICBmb28obnVsbCwgbnVsbCwge30pOworfSk7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGRlZmF1bHRQYXJhbSA9IDIwKSB7CisgICAg
ICAgIGFzc2VydChhcmd1bWVudHNbMF0gPT09IGEpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRz
WzFdID09PSBiKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50cy5sZW5ndGggPT09IDMpOworICAg
ICAgICBhID0gImhlbGxvIjsKKyAgICAgICAgYiA9ICJ3b3JsZCI7CisgICAgICAgIGFzc2VydChh
cmd1bWVudHNbMF0gPT09IG51bGwpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzWzFdID09PSBu
dWxsKTsKKyAgICB9CisgICAgZm9vKG51bGwsIG51bGwsIHt9KTsKK30pOworCit0ZXN0KGZ1bmN0
aW9uKCkgeworICAgIGxldCBvYmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCB7Zm9vID0g
Yn0pIHsKKyAgICAgICAgYXNzZXJ0KGZvbyA9PT0gYik7CisgICAgICAgIGFzc2VydChmb28gPT09
IG9iaik7CisgICAgfQorICAgIGZvbyhudWxsLCBvYmosIHt9KTsKK30pOworCit0ZXN0KGZ1bmN0
aW9uKCkgeworICAgIGxldCBvYmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCB7Zm9vID0g
Yn0pIHsKKyAgICAgICAgYXNzZXJ0KGZvbyA9PT0gYik7CisgICAgICAgIGFzc2VydChmb28gPT09
IG9iaik7CisgICAgICAgIGZ1bmN0aW9uIGNhcEIoKSB7IHJldHVybiBiOyB9CisgICAgfQorICAg
IGZvbyhudWxsLCBvYmosIHt9KTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGxldCBv
YmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCB7Zm9vID0gYn0pIHsKKyAgICAgICAgYXNz
ZXJ0KGZvbyA9PT0gMjUpOworICAgIH0KKyAgICBmb28obnVsbCwgb2JqLCB7Zm9vOiAyNX0pOwor
fSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHt9CisgICAgZnVuY3Rpb24g
Zm9vKGEsIGIsIHtmb28gPSBmdW5jdGlvbigpIHsgcmV0dXJuIGI7IH19KSB7CisgICAgICAgIGFz
c2VydChmb28oKSA9PT0gYik7CisgICAgICAgIGFzc2VydChmb28oKSA9PT0gb2JqKTsKKyAgICAg
ICAgcmV0dXJuIGZvbzsKKyAgICB9CisgICAgbGV0IHJlc3VsdCA9IGZvbyhudWxsLCBvYmosIHt9
KTsKKyAgICBhc3NlcnQocmVzdWx0KCkgPT09IG9iaik7Cit9KTsKKwordGVzdChmdW5jdGlvbigp
IHsKKyAgICBsZXQgb2JqID0ge30KKyAgICBmdW5jdGlvbiBmb28oYSwgYiwgW2ZvbyA9IGZ1bmN0
aW9uKCkgeyByZXR1cm4gYjsgfV0pIHsKKyAgICAgICAgYXNzZXJ0KGZvbygpID09PSBiKTsKKyAg
ICAgICAgYXNzZXJ0KGZvbygpID09PSBvYmopOworICAgICAgICByZXR1cm4gZm9vOworICAgIH0K
KyAgICBsZXQgcmVzdWx0ID0gZm9vKG51bGwsIG9iaiwgW3VuZGVmaW5lZF0pOworICAgIGFzc2Vy
dChyZXN1bHQoKSA9PT0gb2JqKTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGxldCBv
YmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCBbZm9vID0gZnVuY3Rpb24oKSB7IHJldHVy
biBlOyB9XSwge2QgPSBmb28oKX0sIGUpIHsgfQorICAgIGZvbyhudWxsLCBvYmosIFtdLCB7ZDpu
dWxsfSwgMjApOworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHt9Cisg
ICAgZnVuY3Rpb24gZm9vKGEsIGIsIFtmb28gPSBmdW5jdGlvbigpIHsgcmV0dXJuIGU7IH1dLCB7
ZCA9IGZvbygpfSwgZSkgeyB9CisgICAgdHJ5IHsKKyAgICAgICAgZm9vKG51bGwsIG9iaiwgW10s
IHt9LCAyMCk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGFzc2VydChlLnRvU3RyaW5nKCkg
PT09ICJSZWZlcmVuY2VFcnJvcjogQ2Fubm90IGFjY2VzcyB1bmluaXRpYWxpemVkIHZhcmlhYmxl
LiIpOworICAgIH0KK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGxldCBvYmogPSB7fQor
ICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCBbZm9vID0gZnVuY3Rpb24oKSB7IHJldHVybiBlOyB9XSwg
ZSwge2QgPSBmb28oKX0pIHsgCisgICAgICAgIHJldHVybiBkOworICAgIH0KKyAgICBhc3NlcnQo
Zm9vKG51bGwsIG9iaiwgW10sIDIwLCB7fSkgPT09IDIwKTsKK30pOworCit0ZXN0KGZ1bmN0aW9u
KCkgeworICAgIGxldCBvYmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCBbZm9vID0gZnVu
Y3Rpb24oKSB7IHJldHVybiBlOyB9XSwgZSwge2QgPSBmb28oKX0pIHsgCisgICAgICAgIHZhciBk
OworICAgICAgICBhc3NlcnQoZCA9PT0gMjApOworICAgICAgICByZXR1cm4gZDsKKyAgICB9Cisg
ICAgYXNzZXJ0KGZvbyhudWxsLCBvYmosIFtdLCAyMCwge30pID09PSAyMCk7Cit9KTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oYiwge2EgPSBmdW5jdGlvbigpIHsgcmV0
dXJuIGI7IH19KSB7IAorICAgICAgICB2YXIgYiA9IDI1OworICAgICAgICBhc3NlcnQoYiA9PT0g
MjUpOworICAgICAgICBhc3NlcnQoYSgpID09PSAyMCk7CisgICAgfQorICAgIGZvbygyMCwge30p
OworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGIsIHthID0gZnVu
Y3Rpb24oKSB7IHJldHVybiB0eXBlb2YgaW5uZXI7IH19KSB7IAorICAgICAgICBsZXQgaW5uZXIg
PSAyNTsKKyAgICAgICAgYXNzZXJ0KGlubmVyID09PSAyNSk7CisgICAgICAgIGFzc2VydChhKCkg
PT09ICJ1bmRlZmluZWQiKTsKKyAgICB9CisgICAgZm9vKDIwLCB7fSk7Cit9KTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICBsZXQgb2JqID0ge307CisgICAgbGV0IGlubmVyID0gb2JqOworICAg
IGZ1bmN0aW9uIGZvbyhiLCB7YSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5uZXI7IH19KSB7IAor
ICAgICAgICBsZXQgaW5uZXIgPSAyNTsKKyAgICAgICAgYXNzZXJ0KGlubmVyID09PSAyNSk7Cisg
ICAgICAgIGFzc2VydChhKCkgPT09IG9iaik7CisgICAgfQorICAgIGZvbygyMCwge30pOworfSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274049</attachid>
            <date>2016-03-14 16:42:47 -0700</date>
            <delta_ts>2016-03-14 16:44:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>22848</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4MTY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE2LTAzLTE0ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IERlc3RydWN0dXJpbmcgcGFyYW1ldGVycyBhcmUgZXZhbHVhdGVkIGluIHRoZSB3cm9uZyBzY29w
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDU0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtYWtlcyBvdXIgZW5naW5lIGNvbXBhdGlibGUgd2l0aCBob3cgcGFyYW1ldGVyCisgICAg
ICAgIGxpc3RzIGFyZSBldmFsdWF0ZWQgaW4gRVM2LiBBIHBhcmFtZXRlciBsaXN0IHRoYXQgY29u
dGFpbnMKKyAgICAgICAgYSByZXN0IHBhcmFtZXRlciwgYW55IGRlc3RydWN0dXJpbmcgcGF0dGVy
bnMsIG9yIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywgCisgICAgICAgIGlzIGNsYXNzaWZpZWQg
YXMgYmVpbmcgbm9uLXNpbXBsZS4gTm9uLXNpbXBsZSBwYXJhbWV0ZXIgbGlzdHMKKyAgICAgICAg
bXVzdCBnZXQgdGhlaXIgb3duIHNjb3BlIHRvIGxpdmUgaW4sIGFuZCB0aGUgdmFyaWFibGVzIGlu
IHRoZQorICAgICAgICBzY29wZSBhcmUgdW5kZXIgVERaLiBUaGlzIG1lYW5zIHRoYXQgZnVuY3Rp
b25zIGV2YWx1YXRlZCBpbiB0aGUKKyAgICAgICAgcGFyYW1ldGVyIGxpc3QgZG9uJ3QgaGF2ZSBh
Y2Nlc3MgdG8gdmFyaWFibGVzIGluc2lkZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYm9keS4gQWxz
bywgbm9uLXNpbXBsZSBwYXJhbWV0ZXIgbGlzdHMgZ2V0IHRoZSBzdHJpY3QtbW9kZSBhcmd1bWVu
dHMgb2JqZWN0LgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVsdFBhcmFtZXRl
clZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmluaXRpYWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQp
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAq
IHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFtZXRlcnM6OnNpemUp
OgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFtZXRlcnM6OmF0KToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25QYXJhbWV0ZXJzOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFt
ZXRlcnM6Omhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMpOiBEZWxldGVkLgorICAgICAgICAqIHRl
c3RzL2VzNi55YW1sOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wYXJhbWV0ZXItc2NvcGluZy5q
czogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdCk6CisgICAgICAgICh0
ZXN0LmZvbyk6CisgICAgICAgICh0ZXN0Lik6CisKIDIwMTYtMDMtMTQgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWR1Y2UgZ2VuZXJhdGVkIEpTT04g
SGVhcFNuYXBzaG90IHNpemUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxOTgxNDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDE2ICsyMjUsMjAgQEAgQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldFVz
ZXNOb25TdHJpY3RFdmFsKG1fdXNlc05vblN0cmljdEV2YWwpOwogICAgIGludCBzeW1ib2xUYWJs
ZUNvbnN0YW50SW5kZXggPSBhZGRDb25zdGFudFZhbHVlKGZ1bmN0aW9uU3ltYm9sVGFibGUpLT5p
bmRleCgpOwogCi0gICAgVmVjdG9yPElkZW50aWZpZXI+IGJvdW5kUGFyYW1ldGVyUHJvcGVydGll
czsKICAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rpb25Ob2RlLT5w
YXJhbWV0ZXJzKCk7IAotICAgIGlmICghcGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzKCkpIHsgCi0gICAgICAgIC8vIElmIHdlIGRvIGhhdmUgZGVmYXVsdCBwYXJhbWV0ZXJzLCB0
aGV5IHdpbGwgYmUgYWxsb2NhdGVkIGluIGEgc2VwYXJhdGUgc2NvcGUuCi0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAg
YXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKS5maXJzdDsKLSAgICAgICAgICAgIGlmIChw
YXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBwYXR0ZXJuLT5jb2xsZWN0Qm91bmRJZGVudGlmaWVycyhib3VuZFBhcmFtZXRlclBy
b3BlcnRpZXMpOwotICAgICAgICB9CisgICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9u
YWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1mdW5jdGlvbmRlY2xhcmF0aW9uaW5z
dGFudGlhdGlvbgorICAgIC8vIFRoaXMgaW1wbGVtZW50cyBJc1NpbXBsZVBhcmFtZXRlckxpc3Qg
aW4gdGhlIEVjbWEgMjAxNSBzcGVjLgorICAgIC8vIElmIElzU2ltcGxlUGFyYW1ldGVyTGlzdCBp
cyBmYWxzZSwgd2Ugd2lsbCBjcmVhdGUgYSBzdHJpY3QtbW9kZSBsaWtlIGFyZ3VtZW50cyBvYmpl
Y3QuCisgICAgLy8gSXNTaW1wbGVQYXJhbWV0ZXJMaXN0IGlzIGZhbHNlIGlmIHRoZSBhcmd1bWVu
dCBsaXN0IGNvbnRhaW5zIGFueSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMsCisgICAgLy8gYSBy
ZXN0IHBhcmFtZXRlciwgb3IgYW55IGRlc3RydWN0dXJpbmcgcGF0dGVybnMuCisgICAgYm9vbCBp
c1NpbXBsZVBhcmFtZXRlckxpc3QgPSB0cnVlOworICAgIC8vIElmIHdlIGRvIGhhdmUgZGVmYXVs
dCBwYXJhbWV0ZXJzLCBkZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMsIG9yIGEgcmVzdCBwYXJhbWV0
ZXIsIG91ciBwYXJhbWV0ZXJzIHdpbGwgYmUgYWxsb2NhdGVkIGluIGEgZGlmZmVyZW50IHNjb3Bl
LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewor
ICAgICAgICBzdGQ6OnBhaXI8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5v
ZGUqPiBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzLmF0KGkpOworICAgICAgICBib29sIGhhc0RlZmF1
bHRQYXJhbWV0ZXJWYWx1ZSA9ICEhcGFyYW1ldGVyLnNlY29uZDsKKyAgICAgICAgYXV0byBwYXR0
ZXJuID0gcGFyYW1ldGVyLmZpcnN0OworICAgICAgICBib29sIGlzU2ltcGxlUGFyYW1ldGVyID0g
IWhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZSAmJiBwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCk7Cisg
ICAgICAgIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCAmPSBpc1NpbXBsZVBhcmFtZXRlcjsKICAgICB9
CiAKICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gY29kZUJsb2NrLT5wYXJzZU1vZGUo
KTsKQEAgLTI5Myw2ICsyOTcsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgbV9jYWxsZWVSZWdpc3Rlci5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOwog
CiAgICAgaW5pdGlhbGl6ZVBhcmFtZXRlcnMocGFyYW1ldGVycyk7CisgICAgQVNTRVJUKCEoaXNT
aW1wbGVQYXJhbWV0ZXJMaXN0ICYmIG1fcmVzdFBhcmFtZXRlcikpOwogCiAgICAgLy8gQmVmb3Jl
IGVtaXR0aW5nIGEgc2NvcGUgY3JlYXRpb24sIGVtaXQgYSBnZW5lcmF0b3IgcHJvbG9ndWUgdGhh
dCBjb250YWlucyBqdW1wIGJhc2VkIG9uIGEgZ2VuZXJhdG9yJ3Mgc3RhdGUuCiAgICAgaWYgKHBh
cnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkdlbmVyYXRvckJvZHlNb2RlKSB7CkBAIC0zMjEs
NyArMzI2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAg
ICAgICAvLyBXZSBjYW4gYWxsb2NhdGUgdGhlICJ2YXIiIGVudmlyb25tZW50IGlmIHdlIGRvbid0
IGhhdmUgZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMuIElmIHdlIGhhdmUKICAgICAgICAg
Ly8gZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMsIHdlIGhhdmUgdG8gaG9sZCBvZmYgb24g
YWxsb2NhdGluZyB0aGUgInZhciIgZW52aXJvbm1lbnQgYmVjYXVzZQogICAgICAgICAvLyB0aGUg
cGFyZW50IHNjb3BlIG9mIHRoZSAidmFyIiBlbnZpcm9ubWVudCBpcyB0aGUgcGFyYW1ldGVyIGVu
dmlyb25tZW50LgotICAgICAgICBpZiAoIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZh
bHVlcygpKQorICAgICAgICBpZiAoaXNTaW1wbGVQYXJhbWV0ZXJMaXN0KQogICAgICAgICAgICAg
aW5pdGlhbGl6ZVZhckxleGljYWxFbnZpcm9ubWVudChzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgp
OwogICAgIH0KIApAQCAtMzU3LDEzICszNjIsNiBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXItPnJlZigpOwogICAg
IH0KICAgICAKLSAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0y
NjIvNi4wL2luZGV4Lmh0bWwjc2VjLWZ1bmN0aW9uZGVjbGFyYXRpb25pbnN0YW50aWF0aW9uCi0g
ICAgLy8gVGhpcyBpbXBsZW1lbnRzIElzU2ltcGxlUGFyYW1ldGVyTGlzdCBpbiB0aGUgRWNtYSAy
MDE1IHNwZWMuCi0gICAgLy8gSWYgSXNTaW1wbGVQYXJhbWV0ZXJMaXN0IGlzIGZhbHNlLCB3ZSB3
aWxsIGNyZWF0ZSBhIHN0cmljdC1tb2RlIGxpa2UgYXJndW1lbnRzIG9iamVjdC4KLSAgICAvLyBJ
c1NpbXBsZVBhcmFtZXRlckxpc3QgaXMgZmFsc2UgaWYgdGhlIGFyZ3VtZW50IGxpc3QgY29udGFp
bnMgYW55IGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywKLSAgICAvLyBhIHJlc3QgcGFyYW1ldGVy
LCBvciBhbnkgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJucy4KLSAgICAvLyBGSVhNRTogVGFrZSBpbnRv
IGFjY291bnQgZGVzdHJ1Y3R1cmluZyB0byBtYWtlIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCBmYWxz
ZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTQ1MAotICAgIGJv
b2wgaXNTaW1wbGVQYXJhbWV0ZXJMaXN0ID0gIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRl
clZhbHVlcygpICYmICFtX3Jlc3RQYXJhbWV0ZXI7CiAgICAgaWYgKG5lZWRzQXJndW1lbnRzICYm
ICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpICYmIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCkgewog
ICAgICAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbnkgZm9ybWFsIHBhcmFtZXRlciBieSBuYW1lLCB0
aGVuIHdlIHVzZSBTY29wZWRBcmd1bWVudHMuIE90aGVyd2lzZSB3ZQogICAgICAgICAvLyB1c2Ug
RGlyZWN0QXJndW1lbnRzLiBXaXRoIFNjb3BlZEFyZ3VtZW50cywgd2UgbGlmdCBhbGwgb2Ygb3Vy
IGFyZ3VtZW50cyBpbnRvIHRoZQpAQCAtNDE0LDcgKzQxMiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRl
X2RpcmVjdF9hcmd1bWVudHMpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1f
YXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgh
cGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkpIHsKKyAgICB9IGVsc2UgaWYg
KGlzU2ltcGxlUGFyYW1ldGVyTGlzdCkgewogICAgICAgICAvLyBDcmVhdGUgdGhlIGZvcm1hbCBw
YXJhbWV0ZXJzIHRoZSBub3JtYWwgd2F5LiBBbnkgb2YgdGhlbSBjb3VsZCBiZSBjYXB0dXJlZCwg
b3Igbm90LiBJZgogICAgICAgICAvLyBjYXB0dXJlZCwgbGlmdCB0aGVtIGludG8gdGhlIHNjb3Bl
LiBXZSBjYW4gbm90IGRvIHRoaXMgaWYgd2UgaGF2ZSBkZWZhdWx0IHBhcmFtZXRlciBleHByZXNz
aW9ucwogICAgICAgICAvLyBiZWNhdXNlIHdoZW4gZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lv
bnMgZXhpc3QsIHRoZXkgYmVsb25nIGluIHRoZWlyIG93biBsZXhpY2FsIGVudmlyb25tZW50CkBA
IC00NTIsMTEgKzQ1MCw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihW
TSYKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXItPmlu
ZGV4KCkpOwogICAgIH0KICAgICAKLSAgICAvLyBOb3cgZGVjbGFyZSBhbGwgdmFyaWFibGVzLgot
ICAgIGZvciAoY29uc3QgSWRlbnRpZmllciYgaWRlbnQgOiBib3VuZFBhcmFtZXRlclByb3BlcnRp
ZXMpIHsKLSAgICAgICAgQVNTRVJUKCFwYXJhbWV0ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1
ZXMoKSk7Ci0gICAgICAgIGNyZWF0ZVZhcmlhYmxlKGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwo
KSksIGZ1bmN0aW9uU3ltYm9sVGFibGUpOwotICAgIH0KICAgICBmb3IgKEZ1bmN0aW9uTWV0YWRh
dGFOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25TdGFjaygpKSB7CiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlkZW50KCk7CiAgICAgICAg
IGNyZWF0ZVZhcmlhYmxlKGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSksIGZ1bmN0aW9uU3lt
Ym9sVGFibGUpOwpAQCAtNTY3LDcgKzU2MCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKICAgICAvLyBBbGwgImFkZFZhcigpInMgbmVlZHMgdG8gaGFwcGVuIGJl
Zm9yZSAiaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2Nv
cGVTdGFjaygpIiBpcyBjYWxsZWQKICAgICAvLyBiZWNhdXNlIGEgZnVuY3Rpb24ncyBkZWZhdWx0
IHBhcmFtZXRlciBFeHByZXNzaW9uTm9kZXMgd2lsbCB1c2UgdGVtcG9yYXJ5IHJlZ2lzdGVycy4K
ICAgICBwdXNoVERaVmFyaWFibGVzKCpwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgVERaQ2hlY2tP
cHRpbWl6YXRpb246OkRvTm90T3B0aW1pemUpOwotICAgIGluaXRpYWxpemVEZWZhdWx0UGFyYW1l
dGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2socGFyYW1ldGVycywgZnVuY3Rpb25O
b2RlLCBmdW5jdGlvblN5bWJvbFRhYmxlLCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNhcHR1
cmVzKTsKKyAgICBpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rp
b25TY29wZVN0YWNrKHBhcmFtZXRlcnMsIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCwgZnVuY3Rpb25O
b2RlLCBmdW5jdGlvblN5bWJvbFRhYmxlLCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNhcHR1
cmVzKTsKICAgICAKICAgICAvLyBMb2FkaW5nIHx0aGlzfCBpbnNpZGUgYW4gYXJyb3cgZnVuY3Rp
b24gbXVzdCBiZSBkb25lIGFmdGVyIGluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5k
U2V0dXBGdW5jdGlvblNjb3BlU3RhY2soKQogICAgIC8vIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBz
ZXRzIHVwIHRoZSBTeW1ib2xUYWJsZSBzdGFjayBhbmQgZW1pdExvYWRUaGlzRnJvbUFycm93RnVu
Y3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKQpAQCAtNzkzLDExICs3ODYsMTEgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcigpCiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3Bl
U3RhY2soCi0gICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbk5vZGUq
IGZ1bmN0aW9uTm9kZSwgU3ltYm9sVGFibGUqIGZ1bmN0aW9uU3ltYm9sVGFibGUsIAorICAgIEZ1
bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBpc1NpbXBsZVBhcmFtZXRlckxpc3Qs
IEZ1bmN0aW9uTm9kZSogZnVuY3Rpb25Ob2RlLCBTeW1ib2xUYWJsZSogZnVuY3Rpb25TeW1ib2xU
YWJsZSwgCiAgICAgaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgY29uc3Qgc3RkOjpmdW5j
dGlvbjxib29sIChVbmlxdWVkU3RyaW5nSW1wbCopPiYgY2FwdHVyZXMpCiB7CiAgICAgVmVjdG9y
PHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBSZWZQdHI8UmVnaXN0ZXJJRD4+PiB2YWx1ZXNUb01vdmVJ
bnRvVmFyczsKLSAgICBpZiAocGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkp
IHsKKyAgICBpZiAoIWlzU2ltcGxlUGFyYW1ldGVyTGlzdCkgewogICAgICAgICAvLyBSZWZlciB0
byB0aGUgRVM2IHNwZWMgc2VjdGlvbiA5LjIuMTI6IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZnVuY3Rpb25kZWNsYXJhdGlvbmlu
c3RhbnRpYXRpb24KICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRzIHN0ZXAgMjEuCiAgICAgICAg
IFZhcmlhYmxlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQ7CkBAIC04NjYsMjQgKzg1OSwxMSBAQCB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVsCiAKICAgICAvLyBUaGlzIGNv
bXBsZXRlcyBzdGVwIDI4IG9mIHNlY3Rpb24gOS4yLjEyLgogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2YWx1ZXNUb01vdmVJbnRvVmFycy5zaXplKCk7IGkrKykgewotICAgICAgICBBU1NF
UlQocGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkpOworICAgICAgICBBU1NF
UlQoIWlzU2ltcGxlUGFyYW1ldGVyTGlzdCk7CiAgICAgICAgIFZhcmlhYmxlIHZhciA9IHZhcmlh
YmxlKHZhbHVlc1RvTW92ZUludG9WYXJzW2ldLmZpcnN0KTsKICAgICAgICAgUmVnaXN0ZXJJRCog
c2NvcGUgPSBlbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CiAgICAgICAgIGVtaXRQdXRU
b1Njb3BlKHNjb3BlLCB2YXIsIHZhbHVlc1RvTW92ZUludG9WYXJzW2ldLnNlY29uZC5nZXQoKSwg
RG9Ob3RUaHJvd0lmTm90Rm91bmQsIE5vdEluaXRpYWxpemF0aW9uKTsKICAgICB9Ci0KLSAgICBp
ZiAoIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpKSB7Ci0gICAgICAgIEFT
U0VSVCghdmFsdWVzVG9Nb3ZlSW50b1ZhcnMuc2l6ZSgpKTsKLSAgICAgICAgLy8gSW5pdGlhbGl6
ZSBkZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMgdGhlIG9sZCB3YXkgYXMgaWYgd2UgZG9uJ3QgaGF2
ZSBhbnkgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLgotICAgICAgICAvLyBJZiB3ZSBoYXZlIGRl
ZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywgd2UgaGFuZGxlIHRoaXMgY2FzZSBhYm92ZS4KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgICAgIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSogcGF0dGVybiA9IHBhcmFtZXRlcnMu
YXQoaSkuZmlyc3Q7Ci0gICAgICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSAm
JiAhcGF0dGVybi0+aXNSZXN0UGFyYW1ldGVyKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcGFyYW1ldGVyVmFsdWUgPSAmcmVnaXN0ZXJGb3IodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSArIGkpKTsKLSAgICAgICAgICAgICAgICBwYXR0ZXJuLT5iaW5kVmFsdWUo
KnRoaXMsIHBhcmFtZXRlclZhbHVlLmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZUFycm93RnVuY3Rp
b25Db250ZXh0U2NvcGVJZk5lZWRlZChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiAxOTgxNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzNSw3ICs4
MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGluaXRpYWxpemVQYXJhbWV0
ZXJzKEZ1bmN0aW9uUGFyYW1ldGVycyYpOwogICAgICAgICB2b2lkIGluaXRpYWxpemVWYXJMZXhp
Y2FsRW52aXJvbm1lbnQoaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCk7Ci0gICAgICAgIHZv
aWQgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVT
dGFjayhGdW5jdGlvblBhcmFtZXRlcnMmLCBGdW5jdGlvbk5vZGUqLCBTeW1ib2xUYWJsZSosIGlu
dCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoVW5p
cXVlZFN0cmluZ0ltcGwqKT4mIGNhcHR1cmVzKTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplRGVm
YXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKEZ1bmN0aW9uUGFy
YW1ldGVycyYsIGJvb2wgaXNTaW1wbGVQYXJhbWV0ZXJMaXN0LCBGdW5jdGlvbk5vZGUqLCBTeW1i
b2xUYWJsZSosIGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNvbnN0IHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoVW5pcXVlZFN0cmluZ0ltcGwqKT4mIGNhcHR1cmVzKTsKICAgICAgICAgdm9pZCBp
bml0aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZUlmTmVlZGVkKFN5bWJvbFRhYmxlKiA9
IG51bGxwdHIpOwogCiAgICAgcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuaAkocmV2aXNpb24gMTk4MTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODE4LDE5ICsxODE4LDE1IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMoKTsKICAgICAgICAgQUxXQVlTX0lO
TElORSB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJucy5zaXplKCk7IH0K
ICAgICAgICAgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2Rl
KiwgRXhwcmVzc2lvbk5vZGUqPiBhdCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9wYXR0ZXJu
c1tpbmRleF07IH0KLSAgICAgICAgYm9vbCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzOyB9CiAgICAgICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBhcHBlbmQoRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuLCBF
eHByZXNzaW9uTm9kZSogZGVmYXVsdFZhbHVlKSAKICAgICAgICAgeyAKICAgICAgICAgICAgIEFT
U0VSVChwYXR0ZXJuKTsgCiAgICAgICAgICAgICBtX3BhdHRlcm5zLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihwYXR0ZXJuLCBkZWZhdWx0VmFsdWUpKTsKLSAgICAgICAgICAgIGlmIChkZWZhdWx0VmFs
dWUpCi0gICAgICAgICAgICAgICAgbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzID0gdHJ1ZTsK
ICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKIAogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPERl
c3RydWN0dXJpbmdQYXR0ZXJuTm9kZSosIEV4cHJlc3Npb25Ob2RlKj4sIDM+IG1fcGF0dGVybnM7
Ci0gICAgICAgIGJvb2wgbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzIHsgZmFsc2UgfTsKICAg
ICB9OwogCiAgICAgY2xhc3MgRnVuY3Rpb25NZXRhZGF0YU5vZGUgZmluYWwgOiBwdWJsaWMgTm9k
ZSwgcHVibGljIFBhcnNlckFyZW5hRGVsZXRhYmxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9lczYueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvZXM2LnlhbWwJKHJldmlzaW9uIDE5ODE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9lczYueWFtbAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDcgKzc1Nyw3IEBACiAtIHBh
dGg6IGVzNi9kZXN0cnVjdHVyaW5nX2NvbXB1dGVkX3Byb3BlcnRpZXMuanMKICAgY21kOiBydW5F
UzYgOm5vcm1hbAogLSBwYXRoOiBlczYvZGVzdHJ1Y3R1cmluZ19kZWZhdWx0c19pbl9wYXJhbWV0
ZXJzX3NlcGFyYXRlX3Njb3BlLmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2
IDpub3JtYWwKIC0gcGF0aDogZXM2L2Rlc3RydWN0dXJpbmdfaXRlcmF0b3JfY2xvc2luZy5qcwog
ICBjbWQ6IHJ1bkVTNiA6ZmFpbAogLSBwYXRoOiBlczYvZGVzdHJ1Y3R1cmluZ19uZXN0ZWRfcmVz
dC5qcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wYXJhbWV0ZXIt
c2NvcGluZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3BhcmFtZXRlci1zY29waW5nLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9wYXJhbWV0ZXItc2NvcGluZy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM0MCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiYmFkIik7Cit9CisKK2Z1bmN0aW9uIHRlc3QoZikgeworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAgICAgICBmKCk7Cit9CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICAgICAgYXNzZXJ0KGFy
Z3VtZW50c1swXSA9PT0gYSk7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNbMV0gPT09IGIpOwor
ICAgICAgICBhc3NlcnQoYXJndW1lbnRzLmxlbmd0aCA9PT0gMik7CisgICAgICAgIGFyZ3VtZW50
c1swXSA9ICJoZWxsbyI7CisgICAgICAgIGFyZ3VtZW50c1sxXSA9ICJ3b3JsZCI7CisgICAgICAg
IGFzc2VydChhID09PSAiaGVsbG8iKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09ICJ3b3JsZCIpOwor
ICAgIH0KKyAgICBmb28obnVsbCwgbnVsbCk7Cit9KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAg
ICBmdW5jdGlvbiBmb28oYSwgYikgeworICAgICAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSBh
KTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sxXSA9PT0gYik7CisgICAgICAgIGFzc2VydChh
cmd1bWVudHMubGVuZ3RoID09PSAyKTsKKyAgICAgICAgYSA9ICJoZWxsbyI7CisgICAgICAgIGIg
PSAid29ybGQiOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSAiaGVsbG8iKTsKKyAg
ICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sxXSA9PT0gIndvcmxkIik7CisgICAgfQorICAgIGZvbyhu
dWxsLCBudWxsKTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIGZvbyhh
LCBiLCAuLi5yZXN0KSB7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNbMF0gPT09IGEpOworICAg
ICAgICBhc3NlcnQoYXJndW1lbnRzWzFdID09PSBiKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50
cy5sZW5ndGggPT09IDIpOworICAgICAgICBhcmd1bWVudHNbMF0gPSAiaGVsbG8iOworICAgICAg
ICBhcmd1bWVudHNbMV0gPSAid29ybGQiOworICAgICAgICBhc3NlcnQoYSA9PT0gbnVsbCk7Cisg
ICAgICAgIGFzc2VydChiID09PSBudWxsKTsKKyAgICB9CisgICAgZm9vKG51bGwsIG51bGwpOwor
fSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIC4uLnJlc3Qp
IHsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gYSk7CisgICAgICAgIGFzc2VydChh
cmd1bWVudHNbMV0gPT09IGIpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzLmxlbmd0aCA9PT0g
Mik7CisgICAgICAgIGEgPSAiaGVsbG8iOworICAgICAgICBiID0gIndvcmxkIjsKKyAgICAgICAg
YXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gbnVsbCk7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNb
MV0gPT09IG51bGwpOworICAgIH0KKyAgICBmb28obnVsbCwgbnVsbCk7Cit9KTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oYSwgYiwge2Rlc3RydWN0dXJlfSkgeworICAg
ICAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSBhKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50
c1sxXSA9PT0gYik7CisgICAgICAgIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09PSAzKTsKKyAg
ICAgICAgYXJndW1lbnRzWzBdID0gImhlbGxvIjsKKyAgICAgICAgYXJndW1lbnRzWzFdID0gIndv
cmxkIjsKKyAgICAgICAgYXNzZXJ0KGEgPT09IG51bGwpOworICAgICAgICBhc3NlcnQoYiA9PT0g
bnVsbCk7CisgICAgfQorICAgIGZvbyhudWxsLCBudWxsLCB7fSk7Cit9KTsKKwordGVzdChmdW5j
dGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oYSwgYiwge2Rlc3RydWN0dXJlfSkgeworICAgICAg
ICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSBhKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sx
XSA9PT0gYik7CisgICAgICAgIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09PSAzKTsKKyAgICAg
ICAgYSA9ICJoZWxsbyI7CisgICAgICAgIGIgPSAid29ybGQiOworICAgICAgICBhc3NlcnQoYXJn
dW1lbnRzWzBdID09PSBudWxsKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sxXSA9PT0gbnVs
bCk7CisgICAgfQorICAgIGZvbyhudWxsLCBudWxsLCB7fSk7Cit9KTsKKwordGVzdChmdW5jdGlv
bigpIHsKKyAgICBmdW5jdGlvbiBmb28oYSwgYiwgZGVmYXVsdFBhcmFtID0gMjApIHsKKyAgICAg
ICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gYSk7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNb
MV0gPT09IGIpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyk7CisgICAg
ICAgIGFyZ3VtZW50c1swXSA9ICJoZWxsbyI7CisgICAgICAgIGFyZ3VtZW50c1sxXSA9ICJ3b3Js
ZCI7CisgICAgICAgIGFzc2VydChhID09PSBudWxsKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IG51
bGwpOworICAgIH0KKyAgICBmb28obnVsbCwgbnVsbCwge30pOworfSk7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGRlZmF1bHRQYXJhbSA9IDIwKSB7CisgICAg
ICAgIGFzc2VydChhcmd1bWVudHNbMF0gPT09IGEpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRz
WzFdID09PSBiKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50cy5sZW5ndGggPT09IDMpOworICAg
ICAgICBhID0gImhlbGxvIjsKKyAgICAgICAgYiA9ICJ3b3JsZCI7CisgICAgICAgIGFzc2VydChh
cmd1bWVudHNbMF0gPT09IG51bGwpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzWzFdID09PSBu
dWxsKTsKKyAgICB9CisgICAgZm9vKG51bGwsIG51bGwsIHt9KTsKK30pOworCit0ZXN0KGZ1bmN0
aW9uKCkgeworICAgIGxldCBvYmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCB7Zm9vID0g
Yn0pIHsKKyAgICAgICAgYXNzZXJ0KGZvbyA9PT0gYik7CisgICAgICAgIGFzc2VydChmb28gPT09
IG9iaik7CisgICAgfQorICAgIGZvbyhudWxsLCBvYmosIHt9KTsKK30pOworCit0ZXN0KGZ1bmN0
aW9uKCkgeworICAgIGxldCBvYmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCB7Zm9vID0g
Yn0pIHsKKyAgICAgICAgYXNzZXJ0KGZvbyA9PT0gYik7CisgICAgICAgIGFzc2VydChmb28gPT09
IG9iaik7CisgICAgICAgIGZ1bmN0aW9uIGNhcEIoKSB7IHJldHVybiBiOyB9CisgICAgfQorICAg
IGZvbyhudWxsLCBvYmosIHt9KTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGxldCBv
YmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCB7Zm9vID0gYn0pIHsKKyAgICAgICAgYXNz
ZXJ0KGZvbyA9PT0gMjUpOworICAgIH0KKyAgICBmb28obnVsbCwgb2JqLCB7Zm9vOiAyNX0pOwor
fSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHt9CisgICAgZnVuY3Rpb24g
Zm9vKGEsIGIsIHtmb28gPSBmdW5jdGlvbigpIHsgcmV0dXJuIGI7IH19KSB7CisgICAgICAgIGFz
c2VydChmb28oKSA9PT0gYik7CisgICAgICAgIGFzc2VydChmb28oKSA9PT0gb2JqKTsKKyAgICAg
ICAgcmV0dXJuIGZvbzsKKyAgICB9CisgICAgbGV0IHJlc3VsdCA9IGZvbyhudWxsLCBvYmosIHt9
KTsKKyAgICBhc3NlcnQocmVzdWx0KCkgPT09IG9iaik7Cit9KTsKKwordGVzdChmdW5jdGlvbigp
IHsKKyAgICBsZXQgb2JqID0ge30KKyAgICBmdW5jdGlvbiBmb28oYSwgYiwgW2ZvbyA9IGZ1bmN0
aW9uKCkgeyByZXR1cm4gYjsgfV0pIHsKKyAgICAgICAgYXNzZXJ0KGZvbygpID09PSBiKTsKKyAg
ICAgICAgYXNzZXJ0KGZvbygpID09PSBvYmopOworICAgICAgICByZXR1cm4gZm9vOworICAgIH0K
KyAgICBsZXQgcmVzdWx0ID0gZm9vKG51bGwsIG9iaiwgW3VuZGVmaW5lZF0pOworICAgIGFzc2Vy
dChyZXN1bHQoKSA9PT0gb2JqKTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGxldCBv
YmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCBbZm9vID0gZnVuY3Rpb24oKSB7IHJldHVy
biBlOyB9XSwge2QgPSBmb28oKX0sIGUpIHsgfQorICAgIGZvbyhudWxsLCBvYmosIFtdLCB7ZDpu
dWxsfSwgMjApOworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHt9Cisg
ICAgZnVuY3Rpb24gZm9vKGEsIGIsIFtmb28gPSBmdW5jdGlvbigpIHsgcmV0dXJuIGU7IH1dLCB7
ZCA9IGZvbygpfSwgZSkgeyB9CisgICAgdHJ5IHsKKyAgICAgICAgZm9vKG51bGwsIG9iaiwgW10s
IHt9LCAyMCk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGFzc2VydChlLnRvU3RyaW5nKCkg
PT09ICJSZWZlcmVuY2VFcnJvcjogQ2Fubm90IGFjY2VzcyB1bmluaXRpYWxpemVkIHZhcmlhYmxl
LiIpOworICAgIH0KK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGxldCBvYmogPSB7fQor
ICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCBbZm9vID0gZnVuY3Rpb24oKSB7IHJldHVybiBlOyB9XSwg
ZSwge2QgPSBmb28oKX0pIHsgCisgICAgICAgIHJldHVybiBkOworICAgIH0KKyAgICBhc3NlcnQo
Zm9vKG51bGwsIG9iaiwgW10sIDIwLCB7fSkgPT09IDIwKTsKK30pOworCit0ZXN0KGZ1bmN0aW9u
KCkgeworICAgIGxldCBvYmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCBbZm9vID0gZnVu
Y3Rpb24oKSB7IHJldHVybiBlOyB9XSwgZSwge2QgPSBmb28oKX0pIHsgCisgICAgICAgIHZhciBk
OworICAgICAgICBhc3NlcnQoZCA9PT0gMjApOworICAgICAgICByZXR1cm4gZDsKKyAgICB9Cisg
ICAgYXNzZXJ0KGZvbyhudWxsLCBvYmosIFtdLCAyMCwge30pID09PSAyMCk7Cit9KTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oYiwge2EgPSBmdW5jdGlvbigpIHsgcmV0
dXJuIGI7IH19KSB7IAorICAgICAgICB2YXIgYiA9IDI1OworICAgICAgICBhc3NlcnQoYiA9PT0g
MjUpOworICAgICAgICBhc3NlcnQoYSgpID09PSAyMCk7CisgICAgfQorICAgIGZvbygyMCwge30p
OworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGIsIHthID0gZnVu
Y3Rpb24oKSB7IHJldHVybiB0eXBlb2YgaW5uZXI7IH19KSB7IAorICAgICAgICBsZXQgaW5uZXIg
PSAyNTsKKyAgICAgICAgYXNzZXJ0KGlubmVyID09PSAyNSk7CisgICAgICAgIGFzc2VydChhKCkg
PT09ICJ1bmRlZmluZWQiKTsKKyAgICB9CisgICAgZm9vKDIwLCB7fSk7Cit9KTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICBsZXQgb2JqID0ge307CisgICAgbGV0IGlubmVyID0gb2JqOworICAg
IGZ1bmN0aW9uIGZvbyhiLCB7YSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5uZXI7IH19KSB7IAor
ICAgICAgICBsZXQgaW5uZXIgPSAyNTsKKyAgICAgICAgYXNzZXJ0KGlubmVyID09PSAyNSk7Cisg
ICAgICAgIGFzc2VydChhKCkgPT09IG9iaik7CisgICAgfQorICAgIGZvbygyMCwge30pOworfSk7
CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHt9OworICAgIGxldCBpbm5lciA9
IG9iajsKKyAgICBsZXQgZm9vID0gKGIsIHthID0gZnVuY3Rpb24oKSB7IHJldHVybiBpbm5lcjsg
fX0pID0+IHsKKyAgICAgICAgbGV0IGlubmVyID0gMjU7CisgICAgICAgIGFzc2VydChpbm5lciA9
PT0gMjUpOworICAgICAgICBhc3NlcnQoYSgpID09PSBvYmopOworICAgIH0KKyAgICBmb28oMjAs
IHt9KTsKK30pOworCisKK2Z1bmN0aW9uIGFzc2VydEVxdWFscyhhLCBiKSB7CisgICAgYXNzZXJ0
KGEgPT09IGIpOworfQorCitmdW5jdGlvbiBhc3NlcnRUcnVlKGEpIHsKKyAgICBhc3NlcnQoYSA9
PT0gdHJ1ZSk7Cit9CisKKy8vIFRoZSBjb2RlIGFib3ZlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBX
ZWJLaXQgQlNEIGxpY2Vuc2UuCisvLworLy8gVGhlIGNvZGUgYmVsb3cgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIHY4IHByb2plY3QncyBsaWNlbnNlLgorCisvLyAgQ29weXJpZ2h0IDIwMTQsIHRoZSBW
OCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisv
LyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorLy8gIG1ldDoKKy8vICAKKy8vICAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8g
ICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKy8vICAKKy8vICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vICBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKy8vICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKy8vICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vICBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworOyhmdW5jdGlvbiB0ZXN0RXhwcmVzc2lv
blR5cGVzKCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAoKHgsIHkgPSB4KSA9PiBhc3NlcnRF
cXVhbHMoNDIsIHkpKSg0Mik7CisKKyAgICAoKHgsIHkgPSAoeCkpID0+IGFzc2VydEVxdWFscyg0
MiwgeSkpKDQyKTsKKyAgICAoKHgsIHkgPSBgJHt4fWApID0+IGFzc2VydEVxdWFscygiNDIiLCB5
KSkoNDIpOworICAgICgoeCwgeSA9IHggPSB4ICsgMSkgPT4gYXNzZXJ0RXF1YWxzKDQzLCB5KSko
NDIpOworICAgICgoeCwgeSA9IHgoKSkgPT4gYXNzZXJ0RXF1YWxzKDQyLCB5KSkoKCkgPT4gNDIp
OworICAgICgoeCwgeSA9IG5ldyB4KCkpID0+IGFzc2VydEVxdWFscyg0MiwgeS56KSkoZnVuY3Rp
b24oKSB7IHRoaXMueiA9IDQyIH0pOworICAgICgoeCwgeSA9IC14KSA9PiBhc3NlcnRFcXVhbHMo
LTQyLCB5KSkoNDIpOworICAgICgoeCwgeSA9ICsreCkgPT4gYXNzZXJ0RXF1YWxzKDQzLCB5KSko
NDIpOworICAgICgoeCwgeSA9IHggPT09IDQyKSA9PiBhc3NlcnRUcnVlKHkpKSg0Mik7CisgICAg
KCh4LCB5ID0gKHggPT0gNDIgPyB4IDogMCkpID0+IGFzc2VydEVxdWFscyg0MiwgeSkpKDQyKTsK
KworICAgICgoeCwgeSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4geCB9KSA9PiBhc3NlcnRFcXVhbHMo
NDIsIHkoKSkpKDQyKTsKKyAgICAoKHgsIHkgPSAoKSA9PiB4KSA9PiBhc3NlcnRFcXVhbHMoNDIs
IHkoKSkpKDQyKTsKKworICAgIC8vIExpdGVyYWxzCisgICAgKCh4LCB5ID0ge3o6IHh9KSA9PiBh
c3NlcnRFcXVhbHMoNDIsIHkueikpKDQyKTsKKyAgICAoKHgsIHkgPSB7W3hdOiB4fSkgPT4gYXNz
ZXJ0RXF1YWxzKDQyLCB5WzQyXSkpKDQyKTsKKyAgICAoKHgsIHkgPSBbeF0pID0+IGFzc2VydEVx
dWFscyg0MiwgeVswXSkpKDQyKTsKKyAgICAoKHgsIHkgPSBbLi4ueF0pID0+IGFzc2VydEVxdWFs
cyg0MiwgeVswXSkpKFs0Ml0pOworCisgICAgKCh4LCB5ID0gY2xhc3MgeworICAgICAgICBzdGF0
aWMgW3hdKCkgeyByZXR1cm4geCB9CisgICAgfSkgPT4gYXNzZXJ0RXF1YWxzKDQyLCB5WzQyXSgp
KSkoNDIpOworICAgICgoeCwgeSA9IChuZXcgY2xhc3MgeworICAgICAgICB6KCkgeyByZXR1cm4g
eCB9CisgICAgfSkpID0+IGFzc2VydEVxdWFscyg0MiwgeS56KCkpKSg0Mik7CisKKyAgICAoKHgs
IHkgPSAobmV3IGNsYXNzIFkgeworICAgICAgICBzdGF0aWMgW3hdKCkgeyByZXR1cm4geCB9Cisg
ICAgICAgIHooKSB7IHJldHVybiBZWzQyXSgpIH0KKyAgICB9KSkgPT4gYXNzZXJ0RXF1YWxzKDQy
LCB5LnooKSkpKDQyKTsKKworICAgICgoeCwgeSA9IChuZXcgY2xhc3MgeworICAgICAgICBjb25z
dHJ1Y3RvcigpIHsgdGhpcy56ID0geCB9CisgICAgfSkpID0+IGFzc2VydEVxdWFscyg0MiwgeS56
KSkoNDIpOworICAgICgoeCwgeSA9IChuZXcgY2xhc3MgWSB7CisgICAgICAgIGNvbnN0cnVjdG9y
KCkgeyB0aGlzLnogPSB4IH0KKyAgICB9KSkgPT4gYXNzZXJ0RXF1YWxzKDQyLCB5LnopKSg0Mik7
CisKKyAgICAoKHgsIHkgPSAobmV3IGNsYXNzIGV4dGVuZHMgeCB7CisgICAgfSkpID0+IGFzc2Vy
dEVxdWFscyg0MiwgeS56KCkpKShjbGFzcyB7IHooKSB7IHJldHVybiA0MiB9IH0pOworCisgICAg
Ly8gRGVmYXVsdHMgaW5zaWRlIGRlc3RydWN0dXJpbmcKKyAgICAoKHgsIHt5ID0geH0pID0+IGFz
c2VydEVxdWFscyg0MiwgeSkpKDQyLCB7fSk7CisgICAgKCh4LCBbeSA9IHhdKSA9PiBhc3NlcnRF
cXVhbHMoNDIsIHkpKSg0MiwgW10pOworfSkoKTsKKworOyhmdW5jdGlvbiB0ZXN0TXVsdGlTY29w
ZUNhcHR1cmUoKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIHZhciB4ID0gMTsKKyAgICB7Cisg
ICAgICAgIGxldCB5ID0gMjsKKyAgICAgICAgKCh4LCB5LCBhID0geCwgYiA9IHkpID0+IHsKKyAg
ICAgICAgICAgIGFzc2VydEVxdWFscygzLCB4KTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygz
LCBhKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCB5KTsKKyAgICAgICAgICAgIGFzc2Vy
dEVxdWFscyg0LCBiKTsKKyAgICAgICAgfSkoMywgNCk7CisgICAgfQorfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274050</attachid>
            <date>2016-03-14 16:44:16 -0700</date>
            <delta_ts>2016-03-15 01:58:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>23093</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4MTY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE2LTAzLTE0ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IERlc3RydWN0dXJpbmcgcGFyYW1ldGVycyBhcmUgZXZhbHVhdGVkIGluIHRoZSB3cm9uZyBzY29w
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDU0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtYWtlcyBvdXIgZW5naW5lIGNvbXBhdGlibGUgd2l0aCBob3cgcGFyYW1ldGVyCisgICAg
ICAgIGxpc3RzIGFyZSBldmFsdWF0ZWQgaW4gRVM2LiBBIHBhcmFtZXRlciBsaXN0IHRoYXQgY29u
dGFpbnMKKyAgICAgICAgYSByZXN0IHBhcmFtZXRlciwgYW55IGRlc3RydWN0dXJpbmcgcGF0dGVy
bnMsIG9yIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywgCisgICAgICAgIGlzIGNsYXNzaWZpZWQg
YXMgYmVpbmcgbm9uLXNpbXBsZS4gTm9uLXNpbXBsZSBwYXJhbWV0ZXIgbGlzdHMKKyAgICAgICAg
bXVzdCBnZXQgdGhlaXIgb3duIHNjb3BlIHRvIGxpdmUgaW4sIGFuZCB0aGUgdmFyaWFibGVzIGlu
IHRoZQorICAgICAgICBzY29wZSBhcmUgdW5kZXIgVERaLiBUaGlzIG1lYW5zIHRoYXQgZnVuY3Rp
b25zIGV2YWx1YXRlZCBpbiB0aGUKKyAgICAgICAgcGFyYW1ldGVyIGxpc3QgZG9uJ3QgaGF2ZSBh
Y2Nlc3MgdG8gdmFyaWFibGVzIGluc2lkZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYm9keS4gQWxz
bywgbm9uLXNpbXBsZSBwYXJhbWV0ZXIgbGlzdHMgZ2V0IHRoZSBzdHJpY3QtbW9kZSBhcmd1bWVu
dHMgb2JqZWN0LgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVsdFBhcmFtZXRl
clZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmluaXRpYWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQp
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAq
IHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFtZXRlcnM6OnNpemUp
OgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFtZXRlcnM6OmF0KToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25QYXJhbWV0ZXJzOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFt
ZXRlcnM6Omhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMpOiBEZWxldGVkLgorICAgICAgICAqIHRl
c3RzL2VzNi55YW1sOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wYXJhbWV0ZXItc2NvcGluZy5q
czogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdCk6CisgICAgICAgICh0
ZXN0LmZvbyk6CisgICAgICAgICh0ZXN0Lik6CisKIDIwMTYtMDMtMTQgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWR1Y2UgZ2VuZXJhdGVkIEpTT04g
SGVhcFNuYXBzaG90IHNpemUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxOTgxNDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDE2ICsyMjUsMjAgQEAgQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldFVz
ZXNOb25TdHJpY3RFdmFsKG1fdXNlc05vblN0cmljdEV2YWwpOwogICAgIGludCBzeW1ib2xUYWJs
ZUNvbnN0YW50SW5kZXggPSBhZGRDb25zdGFudFZhbHVlKGZ1bmN0aW9uU3ltYm9sVGFibGUpLT5p
bmRleCgpOwogCi0gICAgVmVjdG9yPElkZW50aWZpZXI+IGJvdW5kUGFyYW1ldGVyUHJvcGVydGll
czsKICAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rpb25Ob2RlLT5w
YXJhbWV0ZXJzKCk7IAotICAgIGlmICghcGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzKCkpIHsgCi0gICAgICAgIC8vIElmIHdlIGRvIGhhdmUgZGVmYXVsdCBwYXJhbWV0ZXJzLCB0
aGV5IHdpbGwgYmUgYWxsb2NhdGVkIGluIGEgc2VwYXJhdGUgc2NvcGUuCi0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAg
YXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKS5maXJzdDsKLSAgICAgICAgICAgIGlmIChw
YXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBwYXR0ZXJuLT5jb2xsZWN0Qm91bmRJZGVudGlmaWVycyhib3VuZFBhcmFtZXRlclBy
b3BlcnRpZXMpOwotICAgICAgICB9CisgICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9u
YWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1mdW5jdGlvbmRlY2xhcmF0aW9uaW5z
dGFudGlhdGlvbgorICAgIC8vIFRoaXMgaW1wbGVtZW50cyBJc1NpbXBsZVBhcmFtZXRlckxpc3Qg
aW4gdGhlIEVjbWEgMjAxNSBzcGVjLgorICAgIC8vIElmIElzU2ltcGxlUGFyYW1ldGVyTGlzdCBp
cyBmYWxzZSwgd2Ugd2lsbCBjcmVhdGUgYSBzdHJpY3QtbW9kZSBsaWtlIGFyZ3VtZW50cyBvYmpl
Y3QuCisgICAgLy8gSXNTaW1wbGVQYXJhbWV0ZXJMaXN0IGlzIGZhbHNlIGlmIHRoZSBhcmd1bWVu
dCBsaXN0IGNvbnRhaW5zIGFueSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMsCisgICAgLy8gYSBy
ZXN0IHBhcmFtZXRlciwgb3IgYW55IGRlc3RydWN0dXJpbmcgcGF0dGVybnMuCisgICAgYm9vbCBp
c1NpbXBsZVBhcmFtZXRlckxpc3QgPSB0cnVlOworICAgIC8vIElmIHdlIGRvIGhhdmUgZGVmYXVs
dCBwYXJhbWV0ZXJzLCBkZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMsIG9yIGEgcmVzdCBwYXJhbWV0
ZXIsIG91ciBwYXJhbWV0ZXJzIHdpbGwgYmUgYWxsb2NhdGVkIGluIGEgZGlmZmVyZW50IHNjb3Bl
LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewor
ICAgICAgICBzdGQ6OnBhaXI8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5v
ZGUqPiBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzLmF0KGkpOworICAgICAgICBib29sIGhhc0RlZmF1
bHRQYXJhbWV0ZXJWYWx1ZSA9ICEhcGFyYW1ldGVyLnNlY29uZDsKKyAgICAgICAgYXV0byBwYXR0
ZXJuID0gcGFyYW1ldGVyLmZpcnN0OworICAgICAgICBib29sIGlzU2ltcGxlUGFyYW1ldGVyID0g
IWhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZSAmJiBwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCk7Cisg
ICAgICAgIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCAmPSBpc1NpbXBsZVBhcmFtZXRlcjsKICAgICB9
CiAKICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gY29kZUJsb2NrLT5wYXJzZU1vZGUo
KTsKQEAgLTI5Myw2ICsyOTcsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgbV9jYWxsZWVSZWdpc3Rlci5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOwog
CiAgICAgaW5pdGlhbGl6ZVBhcmFtZXRlcnMocGFyYW1ldGVycyk7CisgICAgQVNTRVJUKCEoaXNT
aW1wbGVQYXJhbWV0ZXJMaXN0ICYmIG1fcmVzdFBhcmFtZXRlcikpOwogCiAgICAgLy8gQmVmb3Jl
IGVtaXR0aW5nIGEgc2NvcGUgY3JlYXRpb24sIGVtaXQgYSBnZW5lcmF0b3IgcHJvbG9ndWUgdGhh
dCBjb250YWlucyBqdW1wIGJhc2VkIG9uIGEgZ2VuZXJhdG9yJ3Mgc3RhdGUuCiAgICAgaWYgKHBh
cnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkdlbmVyYXRvckJvZHlNb2RlKSB7CkBAIC0zMjEs
NyArMzI2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAg
ICAgICAvLyBXZSBjYW4gYWxsb2NhdGUgdGhlICJ2YXIiIGVudmlyb25tZW50IGlmIHdlIGRvbid0
IGhhdmUgZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMuIElmIHdlIGhhdmUKICAgICAgICAg
Ly8gZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMsIHdlIGhhdmUgdG8gaG9sZCBvZmYgb24g
YWxsb2NhdGluZyB0aGUgInZhciIgZW52aXJvbm1lbnQgYmVjYXVzZQogICAgICAgICAvLyB0aGUg
cGFyZW50IHNjb3BlIG9mIHRoZSAidmFyIiBlbnZpcm9ubWVudCBpcyB0aGUgcGFyYW1ldGVyIGVu
dmlyb25tZW50LgotICAgICAgICBpZiAoIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZh
bHVlcygpKQorICAgICAgICBpZiAoaXNTaW1wbGVQYXJhbWV0ZXJMaXN0KQogICAgICAgICAgICAg
aW5pdGlhbGl6ZVZhckxleGljYWxFbnZpcm9ubWVudChzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgp
OwogICAgIH0KIApAQCAtMzU3LDEzICszNjIsNiBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXItPnJlZigpOwogICAg
IH0KICAgICAKLSAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0y
NjIvNi4wL2luZGV4Lmh0bWwjc2VjLWZ1bmN0aW9uZGVjbGFyYXRpb25pbnN0YW50aWF0aW9uCi0g
ICAgLy8gVGhpcyBpbXBsZW1lbnRzIElzU2ltcGxlUGFyYW1ldGVyTGlzdCBpbiB0aGUgRWNtYSAy
MDE1IHNwZWMuCi0gICAgLy8gSWYgSXNTaW1wbGVQYXJhbWV0ZXJMaXN0IGlzIGZhbHNlLCB3ZSB3
aWxsIGNyZWF0ZSBhIHN0cmljdC1tb2RlIGxpa2UgYXJndW1lbnRzIG9iamVjdC4KLSAgICAvLyBJ
c1NpbXBsZVBhcmFtZXRlckxpc3QgaXMgZmFsc2UgaWYgdGhlIGFyZ3VtZW50IGxpc3QgY29udGFp
bnMgYW55IGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywKLSAgICAvLyBhIHJlc3QgcGFyYW1ldGVy
LCBvciBhbnkgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJucy4KLSAgICAvLyBGSVhNRTogVGFrZSBpbnRv
IGFjY291bnQgZGVzdHJ1Y3R1cmluZyB0byBtYWtlIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCBmYWxz
ZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTQ1MAotICAgIGJv
b2wgaXNTaW1wbGVQYXJhbWV0ZXJMaXN0ID0gIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRl
clZhbHVlcygpICYmICFtX3Jlc3RQYXJhbWV0ZXI7CiAgICAgaWYgKG5lZWRzQXJndW1lbnRzICYm
ICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpICYmIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCkgewog
ICAgICAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbnkgZm9ybWFsIHBhcmFtZXRlciBieSBuYW1lLCB0
aGVuIHdlIHVzZSBTY29wZWRBcmd1bWVudHMuIE90aGVyd2lzZSB3ZQogICAgICAgICAvLyB1c2Ug
RGlyZWN0QXJndW1lbnRzLiBXaXRoIFNjb3BlZEFyZ3VtZW50cywgd2UgbGlmdCBhbGwgb2Ygb3Vy
IGFyZ3VtZW50cyBpbnRvIHRoZQpAQCAtNDE0LDcgKzQxMiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRl
X2RpcmVjdF9hcmd1bWVudHMpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1f
YXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgh
cGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkpIHsKKyAgICB9IGVsc2UgaWYg
KGlzU2ltcGxlUGFyYW1ldGVyTGlzdCkgewogICAgICAgICAvLyBDcmVhdGUgdGhlIGZvcm1hbCBw
YXJhbWV0ZXJzIHRoZSBub3JtYWwgd2F5LiBBbnkgb2YgdGhlbSBjb3VsZCBiZSBjYXB0dXJlZCwg
b3Igbm90LiBJZgogICAgICAgICAvLyBjYXB0dXJlZCwgbGlmdCB0aGVtIGludG8gdGhlIHNjb3Bl
LiBXZSBjYW4gbm90IGRvIHRoaXMgaWYgd2UgaGF2ZSBkZWZhdWx0IHBhcmFtZXRlciBleHByZXNz
aW9ucwogICAgICAgICAvLyBiZWNhdXNlIHdoZW4gZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lv
bnMgZXhpc3QsIHRoZXkgYmVsb25nIGluIHRoZWlyIG93biBsZXhpY2FsIGVudmlyb25tZW50CkBA
IC00NTIsMTEgKzQ1MCw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihW
TSYKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXItPmlu
ZGV4KCkpOwogICAgIH0KICAgICAKLSAgICAvLyBOb3cgZGVjbGFyZSBhbGwgdmFyaWFibGVzLgot
ICAgIGZvciAoY29uc3QgSWRlbnRpZmllciYgaWRlbnQgOiBib3VuZFBhcmFtZXRlclByb3BlcnRp
ZXMpIHsKLSAgICAgICAgQVNTRVJUKCFwYXJhbWV0ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1
ZXMoKSk7Ci0gICAgICAgIGNyZWF0ZVZhcmlhYmxlKGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwo
KSksIGZ1bmN0aW9uU3ltYm9sVGFibGUpOwotICAgIH0KICAgICBmb3IgKEZ1bmN0aW9uTWV0YWRh
dGFOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25TdGFjaygpKSB7CiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlkZW50KCk7CiAgICAgICAg
IGNyZWF0ZVZhcmlhYmxlKGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSksIGZ1bmN0aW9uU3lt
Ym9sVGFibGUpOwpAQCAtNTY3LDcgKzU2MCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKICAgICAvLyBBbGwgImFkZFZhcigpInMgbmVlZHMgdG8gaGFwcGVuIGJl
Zm9yZSAiaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2Nv
cGVTdGFjaygpIiBpcyBjYWxsZWQKICAgICAvLyBiZWNhdXNlIGEgZnVuY3Rpb24ncyBkZWZhdWx0
IHBhcmFtZXRlciBFeHByZXNzaW9uTm9kZXMgd2lsbCB1c2UgdGVtcG9yYXJ5IHJlZ2lzdGVycy4K
ICAgICBwdXNoVERaVmFyaWFibGVzKCpwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgVERaQ2hlY2tP
cHRpbWl6YXRpb246OkRvTm90T3B0aW1pemUpOwotICAgIGluaXRpYWxpemVEZWZhdWx0UGFyYW1l
dGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2socGFyYW1ldGVycywgZnVuY3Rpb25O
b2RlLCBmdW5jdGlvblN5bWJvbFRhYmxlLCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNhcHR1
cmVzKTsKKyAgICBpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rp
b25TY29wZVN0YWNrKHBhcmFtZXRlcnMsIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCwgZnVuY3Rpb25O
b2RlLCBmdW5jdGlvblN5bWJvbFRhYmxlLCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNhcHR1
cmVzKTsKICAgICAKICAgICAvLyBMb2FkaW5nIHx0aGlzfCBpbnNpZGUgYW4gYXJyb3cgZnVuY3Rp
b24gbXVzdCBiZSBkb25lIGFmdGVyIGluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5k
U2V0dXBGdW5jdGlvblNjb3BlU3RhY2soKQogICAgIC8vIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBz
ZXRzIHVwIHRoZSBTeW1ib2xUYWJsZSBzdGFjayBhbmQgZW1pdExvYWRUaGlzRnJvbUFycm93RnVu
Y3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKQpAQCAtNzkzLDExICs3ODYsMTEgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcigpCiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3Bl
U3RhY2soCi0gICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbk5vZGUq
IGZ1bmN0aW9uTm9kZSwgU3ltYm9sVGFibGUqIGZ1bmN0aW9uU3ltYm9sVGFibGUsIAorICAgIEZ1
bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBpc1NpbXBsZVBhcmFtZXRlckxpc3Qs
IEZ1bmN0aW9uTm9kZSogZnVuY3Rpb25Ob2RlLCBTeW1ib2xUYWJsZSogZnVuY3Rpb25TeW1ib2xU
YWJsZSwgCiAgICAgaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgY29uc3Qgc3RkOjpmdW5j
dGlvbjxib29sIChVbmlxdWVkU3RyaW5nSW1wbCopPiYgY2FwdHVyZXMpCiB7CiAgICAgVmVjdG9y
PHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBSZWZQdHI8UmVnaXN0ZXJJRD4+PiB2YWx1ZXNUb01vdmVJ
bnRvVmFyczsKLSAgICBpZiAocGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkp
IHsKKyAgICBpZiAoIWlzU2ltcGxlUGFyYW1ldGVyTGlzdCkgewogICAgICAgICAvLyBSZWZlciB0
byB0aGUgRVM2IHNwZWMgc2VjdGlvbiA5LjIuMTI6IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZnVuY3Rpb25kZWNsYXJhdGlvbmlu
c3RhbnRpYXRpb24KICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRzIHN0ZXAgMjEuCiAgICAgICAg
IFZhcmlhYmxlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQ7CkBAIC04NjYsMjQgKzg1OSwxMSBAQCB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVsCiAKICAgICAvLyBUaGlzIGNv
bXBsZXRlcyBzdGVwIDI4IG9mIHNlY3Rpb24gOS4yLjEyLgogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2YWx1ZXNUb01vdmVJbnRvVmFycy5zaXplKCk7IGkrKykgewotICAgICAgICBBU1NF
UlQocGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkpOworICAgICAgICBBU1NF
UlQoIWlzU2ltcGxlUGFyYW1ldGVyTGlzdCk7CiAgICAgICAgIFZhcmlhYmxlIHZhciA9IHZhcmlh
YmxlKHZhbHVlc1RvTW92ZUludG9WYXJzW2ldLmZpcnN0KTsKICAgICAgICAgUmVnaXN0ZXJJRCog
c2NvcGUgPSBlbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CiAgICAgICAgIGVtaXRQdXRU
b1Njb3BlKHNjb3BlLCB2YXIsIHZhbHVlc1RvTW92ZUludG9WYXJzW2ldLnNlY29uZC5nZXQoKSwg
RG9Ob3RUaHJvd0lmTm90Rm91bmQsIE5vdEluaXRpYWxpemF0aW9uKTsKICAgICB9Ci0KLSAgICBp
ZiAoIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpKSB7Ci0gICAgICAgIEFT
U0VSVCghdmFsdWVzVG9Nb3ZlSW50b1ZhcnMuc2l6ZSgpKTsKLSAgICAgICAgLy8gSW5pdGlhbGl6
ZSBkZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMgdGhlIG9sZCB3YXkgYXMgaWYgd2UgZG9uJ3QgaGF2
ZSBhbnkgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLgotICAgICAgICAvLyBJZiB3ZSBoYXZlIGRl
ZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywgd2UgaGFuZGxlIHRoaXMgY2FzZSBhYm92ZS4KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgICAgIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSogcGF0dGVybiA9IHBhcmFtZXRlcnMu
YXQoaSkuZmlyc3Q7Ci0gICAgICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSAm
JiAhcGF0dGVybi0+aXNSZXN0UGFyYW1ldGVyKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcGFyYW1ldGVyVmFsdWUgPSAmcmVnaXN0ZXJGb3IodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSArIGkpKTsKLSAgICAgICAgICAgICAgICBwYXR0ZXJuLT5iaW5kVmFsdWUo
KnRoaXMsIHBhcmFtZXRlclZhbHVlLmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZUFycm93RnVuY3Rp
b25Db250ZXh0U2NvcGVJZk5lZWRlZChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiAxOTgxNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzNSw3ICs4
MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGluaXRpYWxpemVQYXJhbWV0
ZXJzKEZ1bmN0aW9uUGFyYW1ldGVycyYpOwogICAgICAgICB2b2lkIGluaXRpYWxpemVWYXJMZXhp
Y2FsRW52aXJvbm1lbnQoaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCk7Ci0gICAgICAgIHZv
aWQgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVT
dGFjayhGdW5jdGlvblBhcmFtZXRlcnMmLCBGdW5jdGlvbk5vZGUqLCBTeW1ib2xUYWJsZSosIGlu
dCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoVW5p
cXVlZFN0cmluZ0ltcGwqKT4mIGNhcHR1cmVzKTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplRGVm
YXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKEZ1bmN0aW9uUGFy
YW1ldGVycyYsIGJvb2wgaXNTaW1wbGVQYXJhbWV0ZXJMaXN0LCBGdW5jdGlvbk5vZGUqLCBTeW1i
b2xUYWJsZSosIGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNvbnN0IHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoVW5pcXVlZFN0cmluZ0ltcGwqKT4mIGNhcHR1cmVzKTsKICAgICAgICAgdm9pZCBp
bml0aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZUlmTmVlZGVkKFN5bWJvbFRhYmxlKiA9
IG51bGxwdHIpOwogCiAgICAgcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuaAkocmV2aXNpb24gMTk4MTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODE4LDE5ICsxODE4LDE1IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMoKTsKICAgICAgICAgQUxXQVlTX0lO
TElORSB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJucy5zaXplKCk7IH0K
ICAgICAgICAgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2Rl
KiwgRXhwcmVzc2lvbk5vZGUqPiBhdCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9wYXR0ZXJu
c1tpbmRleF07IH0KLSAgICAgICAgYm9vbCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzOyB9CiAgICAgICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBhcHBlbmQoRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuLCBF
eHByZXNzaW9uTm9kZSogZGVmYXVsdFZhbHVlKSAKICAgICAgICAgeyAKICAgICAgICAgICAgIEFT
U0VSVChwYXR0ZXJuKTsgCiAgICAgICAgICAgICBtX3BhdHRlcm5zLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihwYXR0ZXJuLCBkZWZhdWx0VmFsdWUpKTsKLSAgICAgICAgICAgIGlmIChkZWZhdWx0VmFs
dWUpCi0gICAgICAgICAgICAgICAgbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzID0gdHJ1ZTsK
ICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKIAogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPERl
c3RydWN0dXJpbmdQYXR0ZXJuTm9kZSosIEV4cHJlc3Npb25Ob2RlKj4sIDM+IG1fcGF0dGVybnM7
Ci0gICAgICAgIGJvb2wgbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzIHsgZmFsc2UgfTsKICAg
ICB9OwogCiAgICAgY2xhc3MgRnVuY3Rpb25NZXRhZGF0YU5vZGUgZmluYWwgOiBwdWJsaWMgTm9k
ZSwgcHVibGljIFBhcnNlckFyZW5hRGVsZXRhYmxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9lczYueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvZXM2LnlhbWwJKHJldmlzaW9uIDE5ODE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9lczYueWFtbAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDcgKzc1Nyw3IEBACiAtIHBh
dGg6IGVzNi9kZXN0cnVjdHVyaW5nX2NvbXB1dGVkX3Byb3BlcnRpZXMuanMKICAgY21kOiBydW5F
UzYgOm5vcm1hbAogLSBwYXRoOiBlczYvZGVzdHJ1Y3R1cmluZ19kZWZhdWx0c19pbl9wYXJhbWV0
ZXJzX3NlcGFyYXRlX3Njb3BlLmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2
IDpub3JtYWwKIC0gcGF0aDogZXM2L2Rlc3RydWN0dXJpbmdfaXRlcmF0b3JfY2xvc2luZy5qcwog
ICBjbWQ6IHJ1bkVTNiA6ZmFpbAogLSBwYXRoOiBlczYvZGVzdHJ1Y3R1cmluZ19uZXN0ZWRfcmVz
dC5qcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wYXJhbWV0ZXIt
c2NvcGluZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3BhcmFtZXRlci1zY29waW5nLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9wYXJhbWV0ZXItc2NvcGluZy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIzNiBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiYmFkIik7Cit9CisKK2Z1bmN0aW9uIHRlc3QoZikgeworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAgICAgICBmKCk7Cit9CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICAgICAgYXNzZXJ0KGFy
Z3VtZW50c1swXSA9PT0gYSk7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNbMV0gPT09IGIpOwor
ICAgICAgICBhc3NlcnQoYXJndW1lbnRzLmxlbmd0aCA9PT0gMik7CisgICAgICAgIGFyZ3VtZW50
c1swXSA9ICJoZWxsbyI7CisgICAgICAgIGFyZ3VtZW50c1sxXSA9ICJ3b3JsZCI7CisgICAgICAg
IGFzc2VydChhID09PSAiaGVsbG8iKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09ICJ3b3JsZCIpOwor
ICAgIH0KKyAgICBmb28obnVsbCwgbnVsbCk7Cit9KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAg
ICBmdW5jdGlvbiBmb28oYSwgYikgeworICAgICAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSBh
KTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sxXSA9PT0gYik7CisgICAgICAgIGFzc2VydChh
cmd1bWVudHMubGVuZ3RoID09PSAyKTsKKyAgICAgICAgYSA9ICJoZWxsbyI7CisgICAgICAgIGIg
PSAid29ybGQiOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSAiaGVsbG8iKTsKKyAg
ICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sxXSA9PT0gIndvcmxkIik7CisgICAgfQorICAgIGZvbyhu
dWxsLCBudWxsKTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIGZvbyhh
LCBiLCAuLi5yZXN0KSB7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNbMF0gPT09IGEpOworICAg
ICAgICBhc3NlcnQoYXJndW1lbnRzWzFdID09PSBiKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50
cy5sZW5ndGggPT09IDIpOworICAgICAgICBhcmd1bWVudHNbMF0gPSAiaGVsbG8iOworICAgICAg
ICBhcmd1bWVudHNbMV0gPSAid29ybGQiOworICAgICAgICBhc3NlcnQoYSA9PT0gbnVsbCk7Cisg
ICAgICAgIGFzc2VydChiID09PSBudWxsKTsKKyAgICB9CisgICAgZm9vKG51bGwsIG51bGwpOwor
fSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIC4uLnJlc3Qp
IHsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gYSk7CisgICAgICAgIGFzc2VydChh
cmd1bWVudHNbMV0gPT09IGIpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzLmxlbmd0aCA9PT0g
Mik7CisgICAgICAgIGEgPSAiaGVsbG8iOworICAgICAgICBiID0gIndvcmxkIjsKKyAgICAgICAg
YXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gbnVsbCk7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNb
MV0gPT09IG51bGwpOworICAgIH0KKyAgICBmb28obnVsbCwgbnVsbCk7Cit9KTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oYSwgYiwge2Rlc3RydWN0dXJlfSkgeworICAg
ICAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSBhKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50
c1sxXSA9PT0gYik7CisgICAgICAgIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09PSAzKTsKKyAg
ICAgICAgYXJndW1lbnRzWzBdID0gImhlbGxvIjsKKyAgICAgICAgYXJndW1lbnRzWzFdID0gIndv
cmxkIjsKKyAgICAgICAgYXNzZXJ0KGEgPT09IG51bGwpOworICAgICAgICBhc3NlcnQoYiA9PT0g
bnVsbCk7CisgICAgfQorICAgIGZvbyhudWxsLCBudWxsLCB7fSk7Cit9KTsKKwordGVzdChmdW5j
dGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oYSwgYiwge2Rlc3RydWN0dXJlfSkgeworICAgICAg
ICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSBhKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sx
XSA9PT0gYik7CisgICAgICAgIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09PSAzKTsKKyAgICAg
ICAgYSA9ICJoZWxsbyI7CisgICAgICAgIGIgPSAid29ybGQiOworICAgICAgICBhc3NlcnQoYXJn
dW1lbnRzWzBdID09PSBudWxsKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50c1sxXSA9PT0gbnVs
bCk7CisgICAgfQorICAgIGZvbyhudWxsLCBudWxsLCB7fSk7Cit9KTsKKwordGVzdChmdW5jdGlv
bigpIHsKKyAgICBmdW5jdGlvbiBmb28oYSwgYiwgZGVmYXVsdFBhcmFtID0gMjApIHsKKyAgICAg
ICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gYSk7CisgICAgICAgIGFzc2VydChhcmd1bWVudHNb
MV0gPT09IGIpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyk7CisgICAg
ICAgIGFyZ3VtZW50c1swXSA9ICJoZWxsbyI7CisgICAgICAgIGFyZ3VtZW50c1sxXSA9ICJ3b3Js
ZCI7CisgICAgICAgIGFzc2VydChhID09PSBudWxsKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IG51
bGwpOworICAgIH0KKyAgICBmb28obnVsbCwgbnVsbCwge30pOworfSk7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGRlZmF1bHRQYXJhbSA9IDIwKSB7CisgICAg
ICAgIGFzc2VydChhcmd1bWVudHNbMF0gPT09IGEpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRz
WzFdID09PSBiKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3VtZW50cy5sZW5ndGggPT09IDMpOworICAg
ICAgICBhID0gImhlbGxvIjsKKyAgICAgICAgYiA9ICJ3b3JsZCI7CisgICAgICAgIGFzc2VydChh
cmd1bWVudHNbMF0gPT09IG51bGwpOworICAgICAgICBhc3NlcnQoYXJndW1lbnRzWzFdID09PSBu
dWxsKTsKKyAgICB9CisgICAgZm9vKG51bGwsIG51bGwsIHt9KTsKK30pOworCit0ZXN0KGZ1bmN0
aW9uKCkgeworICAgIGxldCBvYmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCB7Zm9vID0g
Yn0pIHsKKyAgICAgICAgYXNzZXJ0KGZvbyA9PT0gYik7CisgICAgICAgIGFzc2VydChmb28gPT09
IG9iaik7CisgICAgfQorICAgIGZvbyhudWxsLCBvYmosIHt9KTsKK30pOworCit0ZXN0KGZ1bmN0
aW9uKCkgeworICAgIGxldCBvYmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCB7Zm9vID0g
Yn0pIHsKKyAgICAgICAgYXNzZXJ0KGZvbyA9PT0gYik7CisgICAgICAgIGFzc2VydChmb28gPT09
IG9iaik7CisgICAgICAgIGZ1bmN0aW9uIGNhcEIoKSB7IHJldHVybiBiOyB9CisgICAgfQorICAg
IGZvbyhudWxsLCBvYmosIHt9KTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGxldCBv
YmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCB7Zm9vID0gYn0pIHsKKyAgICAgICAgYXNz
ZXJ0KGZvbyA9PT0gMjUpOworICAgIH0KKyAgICBmb28obnVsbCwgb2JqLCB7Zm9vOiAyNX0pOwor
fSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHt9CisgICAgZnVuY3Rpb24g
Zm9vKGEsIGIsIHtmb28gPSBmdW5jdGlvbigpIHsgcmV0dXJuIGI7IH19KSB7CisgICAgICAgIGFz
c2VydChmb28oKSA9PT0gYik7CisgICAgICAgIGFzc2VydChmb28oKSA9PT0gb2JqKTsKKyAgICAg
ICAgcmV0dXJuIGZvbzsKKyAgICB9CisgICAgbGV0IHJlc3VsdCA9IGZvbyhudWxsLCBvYmosIHt9
KTsKKyAgICBhc3NlcnQocmVzdWx0KCkgPT09IG9iaik7Cit9KTsKKwordGVzdChmdW5jdGlvbigp
IHsKKyAgICBsZXQgb2JqID0ge30KKyAgICBmdW5jdGlvbiBmb28oYSwgYiwgW2ZvbyA9IGZ1bmN0
aW9uKCkgeyByZXR1cm4gYjsgfV0pIHsKKyAgICAgICAgYXNzZXJ0KGZvbygpID09PSBiKTsKKyAg
ICAgICAgYXNzZXJ0KGZvbygpID09PSBvYmopOworICAgICAgICByZXR1cm4gZm9vOworICAgIH0K
KyAgICBsZXQgcmVzdWx0ID0gZm9vKG51bGwsIG9iaiwgW3VuZGVmaW5lZF0pOworICAgIGFzc2Vy
dChyZXN1bHQoKSA9PT0gb2JqKTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGxldCBv
YmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCBbZm9vID0gZnVuY3Rpb24oKSB7IHJldHVy
biBlOyB9XSwge2QgPSBmb28oKX0sIGUpIHsgfQorICAgIGZvbyhudWxsLCBvYmosIFtdLCB7ZDpu
dWxsfSwgMjApOworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHt9Cisg
ICAgZnVuY3Rpb24gZm9vKGEsIGIsIFtmb28gPSBmdW5jdGlvbigpIHsgcmV0dXJuIGU7IH1dLCB7
ZCA9IGZvbygpfSwgZSkgeyB9CisgICAgdHJ5IHsKKyAgICAgICAgZm9vKG51bGwsIG9iaiwgW10s
IHt9LCAyMCk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGFzc2VydChlLnRvU3RyaW5nKCkg
PT09ICJSZWZlcmVuY2VFcnJvcjogQ2Fubm90IGFjY2VzcyB1bmluaXRpYWxpemVkIHZhcmlhYmxl
LiIpOworICAgIH0KK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGxldCBvYmogPSB7fQor
ICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCBbZm9vID0gZnVuY3Rpb24oKSB7IHJldHVybiBlOyB9XSwg
ZSwge2QgPSBmb28oKX0pIHsgCisgICAgICAgIHJldHVybiBkOworICAgIH0KKyAgICBhc3NlcnQo
Zm9vKG51bGwsIG9iaiwgW10sIDIwLCB7fSkgPT09IDIwKTsKK30pOworCit0ZXN0KGZ1bmN0aW9u
KCkgeworICAgIGxldCBvYmogPSB7fQorICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCBbZm9vID0gZnVu
Y3Rpb24oKSB7IHJldHVybiBlOyB9XSwgZSwge2QgPSBmb28oKX0pIHsgCisgICAgICAgIHZhciBk
OworICAgICAgICBhc3NlcnQoZCA9PT0gMjApOworICAgICAgICByZXR1cm4gZDsKKyAgICB9Cisg
ICAgYXNzZXJ0KGZvbyhudWxsLCBvYmosIFtdLCAyMCwge30pID09PSAyMCk7Cit9KTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oYiwge2EgPSBmdW5jdGlvbigpIHsgcmV0
dXJuIGI7IH19KSB7IAorICAgICAgICB2YXIgYiA9IDI1OworICAgICAgICBhc3NlcnQoYiA9PT0g
MjUpOworICAgICAgICBhc3NlcnQoYSgpID09PSAyMCk7CisgICAgfQorICAgIGZvbygyMCwge30p
OworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKGIsIHthID0gZnVu
Y3Rpb24oKSB7IHJldHVybiB0eXBlb2YgaW5uZXI7IH19KSB7IAorICAgICAgICBsZXQgaW5uZXIg
PSAyNTsKKyAgICAgICAgYXNzZXJ0KGlubmVyID09PSAyNSk7CisgICAgICAgIGFzc2VydChhKCkg
PT09ICJ1bmRlZmluZWQiKTsKKyAgICB9CisgICAgZm9vKDIwLCB7fSk7Cit9KTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICBsZXQgb2JqID0ge307CisgICAgbGV0IGlubmVyID0gb2JqOworICAg
IGZ1bmN0aW9uIGZvbyhiLCB7YSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5uZXI7IH19KSB7IAor
ICAgICAgICBsZXQgaW5uZXIgPSAyNTsKKyAgICAgICAgYXNzZXJ0KGlubmVyID09PSAyNSk7Cisg
ICAgICAgIGFzc2VydChhKCkgPT09IG9iaik7CisgICAgfQorICAgIGZvbygyMCwge30pOworfSk7
CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHt9OworICAgIGxldCBpbm5lciA9
IG9iajsKKyAgICBsZXQgZm9vID0gKGIsIHthID0gZnVuY3Rpb24oKSB7IHJldHVybiBpbm5lcjsg
fX0pID0+IHsKKyAgICAgICAgbGV0IGlubmVyID0gMjU7CisgICAgICAgIGFzc2VydChpbm5lciA9
PT0gMjUpOworICAgICAgICBhc3NlcnQoYSgpID09PSBvYmopOworICAgIH0KKyAgICBmb28oMjAs
IHt9KTsKK30pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy92OC1w
YXJhbWV0ZXItc2NvcGluZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3Y4LXBhcmFtZXRlci1zY29waW5nLmpzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy92OC1wYXJhbWV0ZXItc2NvcGluZy5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMyBAQAorLy8gIENvcHlyaWdodCAyMDE0LCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
Ly8gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKy8vICBtZXQ6CisvLyAgCisvLyAgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAg
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisvLyAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAg
ICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgICBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8v
ICAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisvLyAgCisvLyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyAgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vICBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisvLyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisvLyAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyAgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorLy8gIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Z1bmN0aW9uIGFzc2VydChiKSB7Cisg
ICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCIpOworfQorCitmdW5jdGlv
biBhc3NlcnRFcXVhbHMoYSwgYikgeworICAgIGFzc2VydChhID09PSBiKTsKK30KKworZnVuY3Rp
b24gYXNzZXJ0VHJ1ZShhKSB7CisgICAgYXNzZXJ0KGEgPT09IHRydWUpOworfQorCis7KGZ1bmN0
aW9uIHRlc3RFeHByZXNzaW9uVHlwZXMoKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgICgoeCwg
eSA9IHgpID0+IGFzc2VydEVxdWFscyg0MiwgeSkpKDQyKTsKKworICAgICgoeCwgeSA9ICh4KSkg
PT4gYXNzZXJ0RXF1YWxzKDQyLCB5KSkoNDIpOworICAgICgoeCwgeSA9IGAke3h9YCkgPT4gYXNz
ZXJ0RXF1YWxzKCI0MiIsIHkpKSg0Mik7CisgICAgKCh4LCB5ID0geCA9IHggKyAxKSA9PiBhc3Nl
cnRFcXVhbHMoNDMsIHkpKSg0Mik7CisgICAgKCh4LCB5ID0geCgpKSA9PiBhc3NlcnRFcXVhbHMo
NDIsIHkpKSgoKSA9PiA0Mik7CisgICAgKCh4LCB5ID0gbmV3IHgoKSkgPT4gYXNzZXJ0RXF1YWxz
KDQyLCB5LnopKShmdW5jdGlvbigpIHsgdGhpcy56ID0gNDIgfSk7CisgICAgKCh4LCB5ID0gLXgp
ID0+IGFzc2VydEVxdWFscygtNDIsIHkpKSg0Mik7CisgICAgKCh4LCB5ID0gKyt4KSA9PiBhc3Nl
cnRFcXVhbHMoNDMsIHkpKSg0Mik7CisgICAgKCh4LCB5ID0geCA9PT0gNDIpID0+IGFzc2VydFRy
dWUoeSkpKDQyKTsKKyAgICAoKHgsIHkgPSAoeCA9PSA0MiA/IHggOiAwKSkgPT4gYXNzZXJ0RXF1
YWxzKDQyLCB5KSkoNDIpOworCisgICAgKCh4LCB5ID0gZnVuY3Rpb24oKSB7IHJldHVybiB4IH0p
ID0+IGFzc2VydEVxdWFscyg0MiwgeSgpKSkoNDIpOworICAgICgoeCwgeSA9ICgpID0+IHgpID0+
IGFzc2VydEVxdWFscyg0MiwgeSgpKSkoNDIpOworCisgICAgLy8gTGl0ZXJhbHMKKyAgICAoKHgs
IHkgPSB7ejogeH0pID0+IGFzc2VydEVxdWFscyg0MiwgeS56KSkoNDIpOworICAgICgoeCwgeSA9
IHtbeF06IHh9KSA9PiBhc3NlcnRFcXVhbHMoNDIsIHlbNDJdKSkoNDIpOworICAgICgoeCwgeSA9
IFt4XSkgPT4gYXNzZXJ0RXF1YWxzKDQyLCB5WzBdKSkoNDIpOworICAgICgoeCwgeSA9IFsuLi54
XSkgPT4gYXNzZXJ0RXF1YWxzKDQyLCB5WzBdKSkoWzQyXSk7CisKKyAgICAoKHgsIHkgPSBjbGFz
cyB7CisgICAgICAgIHN0YXRpYyBbeF0oKSB7IHJldHVybiB4IH0KKyAgICB9KSA9PiBhc3NlcnRF
cXVhbHMoNDIsIHlbNDJdKCkpKSg0Mik7CisgICAgKCh4LCB5ID0gKG5ldyBjbGFzcyB7CisgICAg
ICAgIHooKSB7IHJldHVybiB4IH0KKyAgICB9KSkgPT4gYXNzZXJ0RXF1YWxzKDQyLCB5LnooKSkp
KDQyKTsKKworICAgICgoeCwgeSA9IChuZXcgY2xhc3MgWSB7CisgICAgICAgIHN0YXRpYyBbeF0o
KSB7IHJldHVybiB4IH0KKyAgICAgICAgeigpIHsgcmV0dXJuIFlbNDJdKCkgfQorICAgIH0pKSA9
PiBhc3NlcnRFcXVhbHMoNDIsIHkueigpKSkoNDIpOworCisgICAgKCh4LCB5ID0gKG5ldyBjbGFz
cyB7CisgICAgICAgIGNvbnN0cnVjdG9yKCkgeyB0aGlzLnogPSB4IH0KKyAgICB9KSkgPT4gYXNz
ZXJ0RXF1YWxzKDQyLCB5LnopKSg0Mik7CisgICAgKCh4LCB5ID0gKG5ldyBjbGFzcyBZIHsKKyAg
ICAgICAgY29uc3RydWN0b3IoKSB7IHRoaXMueiA9IHggfQorICAgIH0pKSA9PiBhc3NlcnRFcXVh
bHMoNDIsIHkueikpKDQyKTsKKworICAgICgoeCwgeSA9IChuZXcgY2xhc3MgZXh0ZW5kcyB4IHsK
KyAgICB9KSkgPT4gYXNzZXJ0RXF1YWxzKDQyLCB5LnooKSkpKGNsYXNzIHsgeigpIHsgcmV0dXJu
IDQyIH0gfSk7CisKKyAgICAvLyBEZWZhdWx0cyBpbnNpZGUgZGVzdHJ1Y3R1cmluZworICAgICgo
eCwge3kgPSB4fSkgPT4gYXNzZXJ0RXF1YWxzKDQyLCB5KSkoNDIsIHt9KTsKKyAgICAoKHgsIFt5
ID0geF0pID0+IGFzc2VydEVxdWFscyg0MiwgeSkpKDQyLCBbXSk7Cit9KSgpOworCis7KGZ1bmN0
aW9uIHRlc3RNdWx0aVNjb3BlQ2FwdHVyZSgpIHsKKyAgICAidXNlIHN0cmljdCI7CisgICAgdmFy
IHggPSAxOworICAgIHsKKyAgICAgICAgbGV0IHkgPSAyOworICAgICAgICAoKHgsIHksIGEgPSB4
LCBiID0geSkgPT4geworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHgpOworICAgICAgICAg
ICAgYXNzZXJ0RXF1YWxzKDMsIGEpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHkpOwor
ICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGIpOworICAgICAgICB9KSgzLCA0KTsKKyAgICB9
Cit9KSgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>