<?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>144011</bug_id>
          
          <creation_ts>2015-04-21 14:15:42 -0700</creation_ts>
          <short_desc>Give the heap object iterators the ability to return early.</short_desc>
          <delta_ts>2015-04-22 13:07:05 -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>528+ (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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1087168</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-21 14:15:42 -0700</bug_when>
    <thetext>JSDollarVMPrototype::isValidCell() uses a heap object iterator to validate candidate cell pointers, and, when in use, is called a lot more often than the normal way those iterators are used.  As a result, I see my instrumented VM killed with a SIGXCPU (CPU time limit exceeded).  This patch gives the callback functor the ability to tell the iterators to return early when the functor no longer needs to continue iterating.  With this, my instrumented VM is useful again for debugging.

Since heap iteration is not something that we do in a typical fast path, I don’t expect this to have any noticeable impact on performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087169</commentid>
    <comment_count>1</comment_count>
      <attachid>251261</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-21 14:21:00 -0700</bug_when>
    <thetext>Created attachment 251261
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087205</commentid>
    <comment_count>2</comment_count>
      <attachid>251261</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-21 16:05:23 -0700</bug_when>
    <thetext>Comment on attachment 251261
the patch.

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

&gt; Source/JavaScriptCore/heap/Heap.cpp:1453
&gt; +        return false; // Not done iterating.

If an API requires a comment at every usage site, that&apos;s a good sign that the API is not readable by design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087206</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-21 16:06:24 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 251261 [details]
&gt; the patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251261&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:1453
&gt; &gt; +        return false; // Not done iterating.
&gt; 
&gt; If an API requires a comment at every usage site, that&apos;s a good sign that
&gt; the API is not readable by design.

I&apos;m open to suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087207</commentid>
    <comment_count>4</comment_count>
      <attachid>251261</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-04-21 16:07:22 -0700</bug_when>
    <thetext>Comment on attachment 251261
the patch.

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

&gt;&gt;&gt; Source/JavaScriptCore/heap/Heap.cpp:1453
&gt;&gt;&gt; +        return false; // Not done iterating.
&gt;&gt; 
&gt;&gt; If an API requires a comment at every usage site, that&apos;s a good sign that the API is not readable by design.
&gt; 
&gt; I&apos;m open to suggestions.

Make it an enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087210</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-21 16:11:37 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 251261 [details]
&gt; the patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251261&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/JavaScriptCore/heap/Heap.cpp:1453
&gt; &gt;&gt;&gt; +        return false; // Not done iterating.
&gt; &gt;&gt; 
&gt; &gt;&gt; If an API requires a comment at every usage site, that&apos;s a good sign that the API is not readable by design.
&gt; &gt; 
&gt; &gt; I&apos;m open to suggestions.
&gt; 
&gt; Make it an enum.

Sounds like a good plan.  I will execute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087231</commentid>
    <comment_count>6</comment_count>
      <attachid>251276</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-21 17:21:29 -0700</bug_when>
    <thetext>Created attachment 251276
patch 2: no more comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087232</commentid>
    <comment_count>7</comment_count>
      <attachid>251276</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-21 17:23:50 -0700</bug_when>
    <thetext>Comment on attachment 251276
patch 2: no more comments.

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

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +        I donât expect this to have any noticeable impact on performance.

Will fix the apostrophe in “don’t” before I land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087535</commentid>
    <comment_count>8</comment_count>
      <attachid>251276</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-04-22 12:43:28 -0700</bug_when>
    <thetext>Comment on attachment 251276
patch 2: no more comments.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087550</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-22 13:07:05 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r183124: &lt;http://trac.webkit.org/r183124&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251261</attachid>
            <date>2015-04-21 14:21:00 -0700</date>
            <delta_ts>2015-04-21 17:21:29 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-144011.patch</filename>
            <type>text/plain</type>
            <size>17872</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMDc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDE1LTA0LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBH
aXZlIHRoZSBoZWFwIG9iamVjdCBpdGVyYXRvcnMgdGhlIGFiaWxpdHkgdG8gcmV0dXJuIGVhcmx5
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MDEx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSlNEb2xs
YXJWTVByb3RvdHlwZTo6aXNWYWxpZENlbGwoKSB1c2VzIGEgaGVhcCBvYmplY3QgaXRlcmF0b3Ig
dG8gdmFsaWRhdGUKKyAgICAgICAgY2FuZGlkYXRlIGNlbGwgcG9pbnRlcnMsIGFuZCwgd2hlbiBp
biB1c2UsIGlzIGNhbGxlZCBhIGxvdCBtb3JlIG9mdGVuIHRoYW4KKyAgICAgICAgdGhlIG5vcm1h
bCB3YXkgdGhvc2UgaXRlcmF0b3JzIGFyZSB1c2VkLiAgQXMgYSByZXN1bHQsIEkgc2VlIG15IGlu
c3RydW1lbnRlZAorICAgICAgICBWTSBraWxsZWQgd2l0aCBhIFNJR1hDUFUgKENQVSB0aW1lIGxp
bWl0IGV4Y2VlZGVkKS4gIFRoaXMgcGF0Y2ggZ2l2ZXMgdGhlCisgICAgICAgIGNhbGxiYWNrIGZ1
bmN0b3IgdGhlIGFiaWxpdHkgdG8gdGVsbCB0aGUgaXRlcmF0b3JzIHRvIHJldHVybiBlYXJseSB3
aGVuIHRoZQorICAgICAgICBmdW5jdG9yIG5vIGxvbmdlciBuZWVkcyB0byBjb250aW51ZSBpdGVy
YXRpbmcuICBXaXRoIHRoaXMsIG15IGluc3RydW1lbnRlZAorICAgICAgICBWTSBpcyB1c2VmdWwg
YWdhaW4gZm9yIGRlYnVnZ2luZy4KKworICAgICAgICBTaW5jZSBoZWFwIGl0ZXJhdGlvbiBpcyBu
b3Qgc29tZXRoaW5nIHRoYXQgd2UgZG8gaW4gYSB0eXBpY2FsIGZhc3QgcGF0aCwKKyAgICAgICAg
SSBkb27igJl0IGV4cGVjdCB0aGlzIHRvIGhhdmUgYW55IG5vdGljZWFibGUgaW1wYWN0IG9uIHBl
cmZvcm1hbmNlLgorCisgICAgICAgIEkgYWxzbyByZW5hbWVkIE9iamVjdEFkZHJlc3NDaGVja0Z1
bmN0b3IgdG8gQ2VsbEFkZHJlc3NDaGVja0Z1bmN0b3Igc2luY2UKKyAgICAgICAgaXQgY2hlY2tz
IEpTQ2VsbCBhZGRyZXNzZXMsIG5vdCBqdXN0IEpTT2JqZWN0cy4KKworICAgICAgICAqIGRlYnVn
Z2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKiBoZWFwL0dDTG9nZ2luZy5jcHA6CisgICAgICAg
IChKU0M6OkxvZ2dpbmdGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBoZWFwL0hlYXAu
Y3BwOgorICAgICAgICAoSlNDOjpab21iaWZ5Ojp2aXNpdCk6CisgICAgICAgIChKU0M6OlpvbWJp
Znk6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwOgorICAg
ICAgICAoSlNDOjpTdG9yYWdlU3RhdGlzdGljczo6dmlzaXQpOgorICAgICAgICAoSlNDOjpTdG9y
YWdlU3RhdGlzdGljczo6b3BlcmF0b3IoKSk6CisgICAgICAgICogaGVhcC9IZWFwVmVyaWZpZXIu
Y3BwOgorICAgICAgICAoSlNDOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcjo6dmlzaXQpOgorICAgICAg
ICAoSlNDOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogaGVh
cC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rv
cjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6Zm9yRWFjaENlbGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9j
azo6Zm9yRWFjaExpdmVDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmZvckVhY2hE
ZWFkQ2VsbCk6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5oOgorICAgICAgICAoSlNDOjpN
YXJrZWRTcGFjZTo6Zm9yRWFjaExpdmVDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6
OmZvckVhY2hEZWFkQ2VsbCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JS
dW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlUmVjb21waWxlcjo6dmlz
aXQpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlUmVjb21waWxlcjo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9W
TS5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXI6OnZpc2l0KToK
KyAgICAgICAgKEpTQzo6U3RhY2tQcmVzZXJ2aW5nUmVjb21waWxlcjo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgICogdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkNl
bGxBZGRyZXNzQ2hlY2tGdW5jdG9yOjpDZWxsQWRkcmVzc0NoZWNrRnVuY3Rvcik6CisgICAgICAg
IChKU0M6OkNlbGxBZGRyZXNzQ2hlY2tGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpT
Qzo6SlNEb2xsYXJWTVByb3RvdHlwZTo6aXNWYWxpZENlbGwpOgorICAgICAgICAoSlNDOjpPYmpl
Y3RBZGRyZXNzQ2hlY2tGdW5jdG9yOjpPYmplY3RBZGRyZXNzQ2hlY2tGdW5jdG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0QWRkcmVzc0NoZWNrRnVuY3Rvcjo6b3BlcmF0b3IoKSk6
IERlbGV0ZWQuCisKIDIwMTUtMDQtMjEgIEJhc2lsZSBDbGVtZW50ICA8YmFzaWxlX2NsZW1lbnRA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQg
bm9kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
CShyZXZpc2lvbiAxODMwNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMiArNDQsMTQgQEAgY2xhc3MgUmVjb21w
aWxlciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6VgogcHVibGljOgogICAgIFJlY29tcGlsZXIoSlND
OjpEZWJ1Z2dlciopOwogICAgIH5SZWNvbXBpbGVyKCk7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpT
Q2VsbCopOworICAgIGJvb2wgb3BlcmF0b3IoKShKU0NlbGwqKTsKIAogcHJpdmF0ZToKICAgICB0
eXBlZGVmIEhhc2hTZXQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4gRnVuY3Rpb25FeGVjdXRhYmxlU2V0
OwogICAgIHR5cGVkZWYgSGFzaE1hcDxTb3VyY2VQcm92aWRlciosIEV4ZWNTdGF0ZSo+IFNvdXJj
ZVByb3ZpZGVyTWFwOwogICAgIAorICAgIHZvaWQgdmlzaXQoSlNDZWxsKik7CisgICAgCiAgICAg
SlNDOjpEZWJ1Z2dlciogbV9kZWJ1Z2dlcjsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGVTZXQgbV9m
dW5jdGlvbkV4ZWN1dGFibGVzOwogICAgIFNvdXJjZVByb3ZpZGVyTWFwIG1fc291cmNlUHJvdmlk
ZXJzOwpAQCAtNjksNyArNzEsNyBAQCBpbmxpbmUgUmVjb21waWxlcjo6flJlY29tcGlsZXIoKQog
ICAgICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoaXRlci0+dmFsdWUsIGl0ZXItPmtleSwg
LTEsIFN0cmluZygpKTsKIH0KIAotaW5saW5lIHZvaWQgUmVjb21waWxlcjo6b3BlcmF0b3IoKShK
U0NlbGwqIGNlbGwpCitpbmxpbmUgdm9pZCBSZWNvbXBpbGVyOjp2aXNpdChKU0NlbGwqIGNlbGwp
CiB7CiAgICAgaWYgKCFjZWxsLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAg
ICByZXR1cm47CkBAIC05Miw2ICs5NCwxMiBAQCBpbmxpbmUgdm9pZCBSZWNvbXBpbGVyOjpvcGVy
YXRvcigpKEpTQ2VsCiAgICAgICAgIG1fc291cmNlUHJvdmlkZXJzLmFkZChleGVjdXRhYmxlLT5z
b3VyY2UoKS5wcm92aWRlcigpLCBleGVjKTsKIH0KIAoraW5saW5lIGJvb2wgUmVjb21waWxlcjo6
b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCit7CisgICAgdmlzaXQoY2VsbCk7CisgICAgcmV0dXJu
IGZhbHNlOyAvLyBOb3QgZG9uZSBpdGVyYXRpbmcuCit9CisKIH0gLy8gbmFtZXNwYWNlCiAKIG5h
bWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NMb2dnaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0xvZ2dpbmcu
Y3BwCShyZXZpc2lvbiAxODMwNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0xv
Z2dpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMCArNjMsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXZpdmVDZWxscygpOwogICAgIH0KIAotICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwq
IGNlbGwpCisgICAgYm9vbCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAg
IG1fbGl2ZUNlbGxzLmFwcGVuZChjZWxsKTsKICAgICAgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9y
KGNlbGwpLT5jbGVhck1hcmtlZChjZWxsKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3Qg
ZG9uZSBpdGVyYXRpbmcuCiAgICAgfQogCiAgICAgdm9pZCBsb2coKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE4MzA3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsMTIgKzI0MCwxNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFRocmVhZFN0YXRlKFZNCiB9CiAKIHN0cnVjdCBN
YXJrT2JqZWN0IDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci0gICAgdm9pZCBv
cGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKKyAgICBpbmxpbmUgdm9pZCB2aXNpdChKU0NlbGwqIGNl
bGwpCiAgICAgewogICAgICAgICBpZiAoY2VsbC0+aXNaYXBwZWQoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgSGVhcDo6aGVhcChjZWxsKS0+c2V0TWFya2VkKGNlbGwpOwogICAgIH0K
KyAgICBib29sIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgdmlzaXQo
Y2VsbCk7CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGRvbmUgaXRlcmF0aW5nLgorICAg
IH0KIH07CiAKIHN0cnVjdCBDb3VudCA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Q291bnRGdW5jdG9y
IHsKQEAgLTI1MywxMyArMjU4LDE5IEBAIHN0cnVjdCBDb3VudCA6IHB1YmxpYyBNYXJrZWRCbG9j
azo6Q291bnQKIH07CiAKIHN0cnVjdCBDb3VudElmR2xvYmFsT2JqZWN0IDogTWFya2VkQmxvY2s6
OkNvdW50RnVuY3RvciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkgeworICAg
IGlubGluZSB2b2lkIHZpc2l0KEpTQ2VsbCogY2VsbCkKKyAgICB7CiAgICAgICAgIGlmICghY2Vs
bC0+aXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFhc09iamVj
dChjZWxsKS0+aXNHbG9iYWxPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y291bnQoMSk7CiAgICAgfQorICAgIGJvb2wgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAg
eworICAgICAgICB2aXNpdChjZWxsKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgZG9u
ZSBpdGVyYXRpbmcuCisgICAgfQogfTsKIAogY2xhc3MgUmVjb3JkVHlwZSB7CkBAIC0yNjcsNyAr
Mjc4LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNl
dD4gUmV0dXJuVHlwZTsKIAogICAgIFJlY29yZFR5cGUoKTsKLSAgICB2b2lkIG9wZXJhdG9yKCko
SlNDZWxsKik7CisgICAgYm9vbCBvcGVyYXRvcigpKEpTQ2VsbCopOwogICAgIFJldHVyblR5cGUg
cmV0dXJuVmFsdWUoKTsKIAogcHJpdmF0ZToKQEAgLTI4OCw5ICsyOTksMTAgQEAgaW5saW5lIGNv
bnN0IGNoYXIqIFJlY29yZFR5cGU6OnR5cGVOYW1lKAogICAgIHJldHVybiBpbmZvLT5jbGFzc05h
bWU7CiB9CiAKLWlubGluZSB2b2lkIFJlY29yZFR5cGU6Om9wZXJhdG9yKCkoSlNDZWxsKiBjZWxs
KQoraW5saW5lIGJvb2wgUmVjb3JkVHlwZTo6b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgbV90eXBlQ291bnRTZXQtPmFkZCh0eXBlTmFtZShjZWxsKSk7CisgICAgcmV0dXJuIGZhbHNl
OyAvLyBOb3QgZG9uZSBpdGVyYXRpbmcuCiB9CiAKIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZUNvdW50U2V0PiBSZWNvcmRUeXBlOjpyZXR1cm5WYWx1ZSgpCkBAIC0xNDIyLDcgKzE0MzQsNyBA
QCB2b2lkIEhlYXA6OmFkZENvbXBpbGVkQ29kZShFeGVjdXRhYmxlQmFzCiAKIGNsYXNzIFpvbWJp
ZnkgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKIHB1YmxpYzoKLSAgICB2b2lk
IG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIGlubGluZSB2b2lkIHZpc2l0KEpTQ2VsbCog
Y2VsbCkKICAgICB7CiAgICAgICAgIHZvaWQqKiBjdXJyZW50ID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KGNlbGwpOwogCkBAIC0xNDM1LDYgKzE0NDcsMTEgQEAgcHVibGljOgogICAgICAgICBm
b3IgKDsgY3VycmVudCA8IGxpbWl0OyBjdXJyZW50KyspCiAgICAgICAgICAgICAqY3VycmVudCA9
IHpvbWJpZmllZEJpdHM7CiAgICAgfQorICAgIGJvb2wgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwp
CisgICAgeworICAgICAgICB2aXNpdChjZWxsKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBO
b3QgZG9uZSBpdGVyYXRpbmcuCisgICAgfQogfTsKIAogdm9pZCBIZWFwOjp6b21iaWZ5RGVhZE9i
amVjdHMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTdGF0aXN0
aWNzLmNwcAkocmV2aXNpb24gMTgzMDcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgY2xh
c3MgU3RvcmFnZVN0YXRpc3RpY3MgOiBwdWJsaWMgTWFya2VkQgogcHVibGljOgogICAgIFN0b3Jh
Z2VTdGF0aXN0aWNzKCk7CiAKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKik7CisgICAgYm9v
bCBvcGVyYXRvcigpKEpTQ2VsbCopOwogCiAgICAgc2l6ZV90IG9iamVjdFdpdGhPdXRPZkxpbmVT
dG9yYWdlQ291bnQoKTsKICAgICBzaXplX3Qgb2JqZWN0Q291bnQoKTsKQEAgLTE3Niw2ICsxNzYs
OCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHN0b3JhZ2VDYXBhY2l0eSgpOwogCiBwcml2YXRlOgor
ICAgIHZvaWQgdmlzaXQoSlNDZWxsKik7CisKICAgICBzaXplX3QgbV9vYmplY3RXaXRoT3V0T2ZM
aW5lU3RvcmFnZUNvdW50OwogICAgIHNpemVfdCBtX29iamVjdENvdW50OwogICAgIHNpemVfdCBt
X3N0b3JhZ2VTaXplOwpAQCAtMTkwLDcgKzE5Miw3IEBAIGlubGluZSBTdG9yYWdlU3RhdGlzdGlj
czo6U3RvcmFnZVN0YXRpc3QKIHsKIH0KIAotaW5saW5lIHZvaWQgU3RvcmFnZVN0YXRpc3RpY3M6
Om9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQoraW5saW5lIHZvaWQgU3RvcmFnZVN0YXRpc3RpY3M6
OnZpc2l0KEpTQ2VsbCogY2VsbCkKIHsKICAgICBpZiAoIWNlbGwtPmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTIwOSw2ICsyMTEsMTIgQEAgaW5saW5lIHZvaWQgU3RvcmFnZVN0YXRp
c3RpY3M6Om9wZXJhdG9yKAogICAgIG1fc3RvcmFnZUNhcGFjaXR5ICs9IG9iamVjdC0+c3RydWN0
dXJlKCktPnRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPik7IAogfQogCitpbmxpbmUgYm9vbCBTdG9yYWdlU3RhdGlzdGljczo6b3BlcmF0b3Io
KShKU0NlbGwqIGNlbGwpCit7CisgICAgdmlzaXQoY2VsbCk7CisgICAgcmV0dXJuIGZhbHNlOyAv
LyBOb3QgZG9uZSBpdGVyYXRpbmcuCit9CisKIGlubGluZSBzaXplX3QgU3RvcmFnZVN0YXRpc3Rp
Y3M6Om9iamVjdFdpdGhPdXRPZkxpbmVTdG9yYWdlQ291bnQoKQogewogICAgIHJldHVybiBtX29i
amVjdFdpdGhPdXRPZkxpbmVTdG9yYWdlQ291bnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwVmVyaWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBWZXJpZmllci5jcHAJKHJldmlzaW9uIDE4MzA3MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw3ICsxMjIsNyBAQCBzdHJ1Y3QgR2F0aGVyTGl2ZU9iakZ1bmN0b3IgOiBNYXJrZWRCbG9jCiAg
ICAgICAgIEFTU0VSVCghbGlzdC5saXZlT2JqZWN0cy5zaXplKCkpOwogICAgIH0KIAotICAgIHZv
aWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgaW5saW5lIHZvaWQgdmlzaXQoSlNDZWxs
KiBjZWxsKQogICAgIHsKICAgICAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQogICAgICAgICAg
ICAgcmV0dXJuOyAgICAgICAgCkBAIC0xMzAsNiArMTMwLDEyIEBAIHN0cnVjdCBHYXRoZXJMaXZl
T2JqRnVuY3RvciA6IE1hcmtlZEJsb2MKICAgICAgICAgbV9saXN0LmxpdmVPYmplY3RzLmFwcGVu
ZChkYXRhKTsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAg
IHsKKyAgICAgICAgdmlzaXQoY2VsbCk7CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGRv
bmUgaXRlcmF0aW5nLgorICAgIH0KKwogICAgIExpdmVPYmplY3RMaXN0JiBtX2xpc3Q7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZp
c2lvbiAxODMwNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NywxMCArMTU3LDExIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogCi0gICAgdm9pZCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKKyAgICBib29sIG9wZXJh
dG9yKCkoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjpi
bG9ja0ZvcihjZWxsKSA9PSBtX2Jsb2NrKTsKICAgICAgICAgbV9ibG9jay0+c2V0TmV3bHlBbGxv
Y2F0ZWQoY2VsbCk7CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGRvbmUgaXRlcmF0aW5n
LgogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAkocmV2aXNpb24gMTgzMDcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDkgKzE3OSw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGRpZFJldGlyZUJsb2NrKGNvbnN0IEZyZWVMaXN0Jik7
CiAgICAgICAgIHZvaWQgd2lsbFJlbW92ZUJsb2NrKCk7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENlbGwoRnVuY3RvciYpOwotICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNlbGwoRnVuY3RvciYpOwot
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoRGVhZENlbGwo
RnVuY3RvciYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gYm9vbCBmb3JF
YWNoQ2VsbChGdW5jdG9yJik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBi
b29sIGZvckVhY2hMaXZlQ2VsbChGdW5jdG9yJik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdG9yPiBib29sIGZvckVhY2hEZWFkQ2VsbChGdW5jdG9yJik7CiAKICAgICAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk1hcmtzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1h
cmtlZEJsb2NrLCBtX21hcmtzKTsgfQogCkBAIC00NDQsMzQgKzQ0NCw0MCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgcmV0dXJuIGlzTGl2ZShzdGF0aWNfY2FzdDxjb25zdCBKU0NlbGwqPihw
KSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lk
IE1hcmtlZEJsb2NrOjpmb3JFYWNoQ2VsbChGdW5jdG9yJiBmdW5jdG9yKQorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6Zm9yRWFjaENlbGwo
RnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0
b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewogICAgICAgICAgICAg
SlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SlNDZWxsKj4oJmF0b21zKClbaV0p
OwotICAgICAgICAgICAgZnVuY3RvcihjZWxsKTsKKyAgICAgICAgICAgIGlmIChmdW5jdG9yKGNl
bGwpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBEb25lIGl0ZXJhdGluZy4KICAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpmb3JFYWNoTGl2ZUNlbGwo
RnVuY3RvciYgZnVuY3RvcikKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OmZvckVhY2hMaXZlQ2VsbChGdW5jdG9yJiBmdW5jdG9yKQogICAg
IHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBp
ICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSByZWludGVy
cHJldF9jYXN0X3B0cjxKU0NlbGwqPigmYXRvbXMoKVtpXSk7CiAgICAgICAgICAgICBpZiAoIWlz
TGl2ZShjZWxsKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgZnVu
Y3RvcihjZWxsKTsKKyAgICAgICAgICAgIGlmIChmdW5jdG9yKGNlbGwpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOyAvLyBEb25lIGl0ZXJhdGluZy4KICAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlu
bGluZSB2b2lkIE1hcmtlZEJsb2NrOjpmb3JFYWNoRGVhZENlbGwoRnVuY3RvciYgZnVuY3RvcikK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6
OmZvckVhY2hEZWFkQ2VsbChGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxs
KSB7CiAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxKU0Nl
bGwqPigmYXRvbXMoKVtpXSk7CiAgICAgICAgICAgICBpZiAoaXNMaXZlKGNlbGwpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBmdW5jdG9yKGNlbGwpOworICAgICAg
ICAgICAgaWYgKGZ1bmN0b3IoY2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8v
IERvbmUgaXRlcmF0aW5nLgogICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKICAgICBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6bmVlZHNTd2VlcGluZygpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDE4MzA3MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OSw4ICsxNzksMTAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5l
IHR5cGVuYQogewogICAgIEFTU0VSVChpc0l0ZXJhdGluZygpKTsKICAgICBCbG9ja0l0ZXJhdG9y
IGVuZCA9IG1fYmxvY2tzLnNldCgpLmVuZCgpOwotICAgIGZvciAoQmxvY2tJdGVyYXRvciBpdCA9
IG1fYmxvY2tzLnNldCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCkt
PmZvckVhY2hMaXZlQ2VsbChmdW5jdG9yKTsKKyAgICBmb3IgKEJsb2NrSXRlcmF0b3IgaXQgPSBt
X2Jsb2Nrcy5zZXQoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgq
aXQpLT5mb3JFYWNoTGl2ZUNlbGwoZnVuY3RvcikpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CiAgICAgcmV0dXJuIGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKIH0KIApAQCAtMTk0LDggKzE5Niwx
MCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hCiB7CiAgICAgQVNT
RVJUKGlzSXRlcmF0aW5nKCkpOwogICAgIEJsb2NrSXRlcmF0b3IgZW5kID0gbV9ibG9ja3Muc2V0
KCkuZW5kKCk7Ci0gICAgZm9yIChCbG9ja0l0ZXJhdG9yIGl0ID0gbV9ibG9ja3Muc2V0KCkuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+Zm9yRWFjaERlYWRDZWxsKGZ1
bmN0b3IpOworICAgIGZvciAoQmxvY2tJdGVyYXRvciBpdCA9IG1fYmxvY2tzLnNldCgpLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPmZvckVhY2hEZWFkQ2Vs
bChmdW5jdG9yKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICByZXR1cm4gZnVuY3Rv
ci5yZXR1cm5WYWx1ZSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5j
cHAJKHJldmlzaW9uIDE4MzA3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3
ICszMDksNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5CiAKIGNs
YXNzIFR5cGVSZWNvbXBpbGVyIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CiBw
dWJsaWM6Ci0gICAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgaW5s
aW5lIHZvaWQgdmlzaXQoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgaWYgKCFjZWxsLT5p
bmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSkpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0zMTgsNiArMzE4LDExIEBAIHB1YmxpYzoKICAgICAgICAgZXhlY3V0YWJsZS0+Y2xlYXJD
b2RlSWZOb3RDb21waWxpbmcoKTsKICAgICAgICAgZXhlY3V0YWJsZS0+Y2xlYXJVbmxpbmtlZENv
ZGVGb3JSZWNvbXBpbGF0aW9uSWZOb3RDb21waWxpbmcoKTsKICAgICB9CisgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICB2aXNpdChjZWxsKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgZG9uZSBpdGVyYXRpbmcuCisgICAgfQogfTsK
IAogc3RhdGljIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmlsaW5nKFZN
JiB2bSwgYm9vbCBzaG91bGRFbmFibGVUeXBlUHJvZmlsaW5nKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTgz
MDcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MzksOSArNTM5LDExIEBAIG5hbWVzcGFjZSB7CiBjbGFzcyBP
YmplY3RzV2l0aEJyb2tlbkluZGV4aW5nRmluZGVyIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lk
RnVuY3RvciB7CiBwdWJsaWM6CiAgICAgT2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0ZpbmRlcihN
YXJrZWRBcmd1bWVudEJ1ZmZlciYsIEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBvcGVyYXRv
cigpKEpTQ2VsbCopOworICAgIGJvb2wgb3BlcmF0b3IoKShKU0NlbGwqKTsKIAogcHJpdmF0ZToK
KyAgICB2b2lkIHZpc2l0KEpTQ2VsbCopOworCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXImIG1f
Zm91bmRPYmplY3RzOwogICAgIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKIH07CkBA
IC01NjIsNyArNTY0LDcgQEAgaW5saW5lIGJvb2wgaGFzQnJva2VuSW5kZXhpbmcoSlNPYmplY3Qq
IAogICAgIHJldHVybiBoYXNVbmRlY2lkZWQodHlwZSkgfHwgaGFzSW50MzIodHlwZSkgfHwgaGFz
RG91YmxlKHR5cGUpIHx8IGhhc0NvbnRpZ3VvdXModHlwZSkgfHwgaGFzQXJyYXlTdG9yYWdlKHR5
cGUpOwogfQogCi12b2lkIE9iamVjdHNXaXRoQnJva2VuSW5kZXhpbmdGaW5kZXI6Om9wZXJhdG9y
KCkoSlNDZWxsKiBjZWxsKQoraW5saW5lIHZvaWQgT2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0Zp
bmRlcjo6dmlzaXQoSlNDZWxsKiBjZWxsKQogewogICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNTk0LDYgKzU5NiwxMiBAQCB2b2lkIE9iamVjdHNXaXRoQnJv
a2VuSW5kZXhpbmdGaW5kZXI6Om9wCiAgICAgbV9mb3VuZE9iamVjdHMuYXBwZW5kKG9iamVjdCk7
CiB9CiAKK2Jvb2wgT2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0ZpbmRlcjo6b3BlcmF0b3IoKShK
U0NlbGwqIGNlbGwpCit7CisgICAgdmlzaXQoY2VsbCk7CisgICAgcmV0dXJuIGZhbHNlOyAvLyBO
b3QgZG9uZSBpdGVyYXRpbmcuCit9CisKIH0gLy8gZW5kIHByaXZhdGUgbmFtZXNwYWNlIGZvciBo
ZWxwZXJzIGZvciBKU0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKCkKIAogdm9pZCBKU0dsb2Jh
bE9iamVjdDo6aGF2ZUFCYWRUaW1lKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHJldmlzaW9uIDE4MzA3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkxLDcgKzQ5MSw3IEBAIHZvaWQgVk06
OmNsZWFyU291cmNlUHJvdmlkZXJDYWNoZXMoKQogCiBzdHJ1Y3QgU3RhY2tQcmVzZXJ2aW5nUmVj
b21waWxlciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewogICAgIEhhc2hTZXQ8
RnVuY3Rpb25FeGVjdXRhYmxlKj4gY3VycmVudGx5RXhlY3V0aW5nRnVuY3Rpb25zOwotICAgIHZv
aWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgaW5saW5lIHZvaWQgdmlzaXQoSlNDZWxs
KiBjZWxsKQogICAgIHsKICAgICAgICAgaWYgKCFjZWxsLT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1
dGFibGU6OmluZm8oKSkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC01MDAsNiArNTAwLDExIEBA
IHN0cnVjdCBTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyIDogcHVibGkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgZXhlY3V0YWJsZS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKICAg
ICB9CisgICAgYm9vbCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIHZp
c2l0KGNlbGwpOworICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBkb25lIGl0ZXJhdGluZy4K
KyAgICB9CiB9OwogCiB2b2lkIFZNOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAxODMwNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwxNiArMTUyLDE3IEBA
IGJvb2wgSlNEb2xsYXJWTVByb3RvdHlwZTo6aXNJblN0b3JhZ2VTcGEKICAgICByZXR1cm4gaGVh
cC0+c3RvcmFnZVNwYWNlKCkuY29udGFpbnMoY2FuZGlkYXRlKTsKIH0KIAotc3RydWN0IE9iamVj
dEFkZHJlc3NDaGVja0Z1bmN0b3IgOiBNYXJrZWRCbG9jazo6Q291bnRGdW5jdG9yIHsKLSAgICBP
YmplY3RBZGRyZXNzQ2hlY2tGdW5jdG9yKEpTQ2VsbCogY2FuZGlkYXRlKQorc3RydWN0IENlbGxB
ZGRyZXNzQ2hlY2tGdW5jdG9yIDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CisgICAgQ2Vs
bEFkZHJlc3NDaGVja0Z1bmN0b3IoSlNDZWxsKiBjYW5kaWRhdGUpCiAgICAgICAgIDogY2FuZGlk
YXRlKGNhbmRpZGF0ZSkKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBvcGVyYXRvcigpKEpTQ2Vs
bCogY2VsbCkKKyAgICBib29sIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAg
ICAgaWYgKGNlbGwgPT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAg
ICAgICByZXR1cm4gZm91bmQ7CiAgICAgfQogCiAgICAgSlNDZWxsKiBjYW5kaWRhdGU7CkBAIC0x
NzEsNyArMTcyLDcgQEAgc3RydWN0IE9iamVjdEFkZHJlc3NDaGVja0Z1bmN0b3IgOiBNYXJrZQog
Ym9vbCBKU0RvbGxhclZNUHJvdG90eXBlOjppc1ZhbGlkQ2VsbChIZWFwKiBoZWFwLCBKU0NlbGwq
IGNhbmRpZGF0ZSkKIHsKICAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaXRlcmF0aW9uU2NvcGUoKmhl
YXApOwotICAgIE9iamVjdEFkZHJlc3NDaGVja0Z1bmN0b3IgZnVuY3RvcihjYW5kaWRhdGUpOwor
ICAgIENlbGxBZGRyZXNzQ2hlY2tGdW5jdG9yIGZ1bmN0b3IoY2FuZGlkYXRlKTsKICAgICBoZWFw
LT5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgZnVuY3Rvcik7
CiAgICAgcmV0dXJuIGZ1bmN0b3IuZm91bmQ7CiB9Cg==
</data>
<flag name="review"
          id="276054"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251276</attachid>
            <date>2015-04-21 17:21:29 -0700</date>
            <delta_ts>2015-04-22 12:43:28 -0700</delta_ts>
            <desc>patch 2: no more comments.</desc>
            <filename>bug-144011.patch</filename>
            <type>text/plain</type>
            <size>28702</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMDg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE1LTA0LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBH
aXZlIHRoZSBoZWFwIG9iamVjdCBpdGVyYXRvcnMgdGhlIGFiaWxpdHkgdG8gcmV0dXJuIGVhcmx5
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MDEx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSlNEb2xs
YXJWTVByb3RvdHlwZTo6aXNWYWxpZENlbGwoKSB1c2VzIGEgaGVhcCBvYmplY3QgaXRlcmF0b3Ig
dG8gdmFsaWRhdGUKKyAgICAgICAgY2FuZGlkYXRlIGNlbGwgcG9pbnRlcnMsIGFuZCwgd2hlbiBp
biB1c2UsIGlzIGNhbGxlZCBhIGxvdCBtb3JlIG9mdGVuIHRoYW4KKyAgICAgICAgdGhlIG5vcm1h
bCB3YXkgdGhvc2UgaXRlcmF0b3JzIGFyZSB1c2VkLiAgQXMgYSByZXN1bHQsIEkgc2VlIG15IGlu
c3RydW1lbnRlZAorICAgICAgICBWTSBraWxsZWQgd2l0aCBhIFNJR1hDUFUgKENQVSB0aW1lIGxp
bWl0IGV4Y2VlZGVkKS4gIFRoaXMgcGF0Y2ggZ2l2ZXMgdGhlCisgICAgICAgIGNhbGxiYWNrIGZ1
bmN0b3IgdGhlIGFiaWxpdHkgdG8gdGVsbCB0aGUgaXRlcmF0b3JzIHRvIHJldHVybiBlYXJseSB3
aGVuIHRoZQorICAgICAgICBmdW5jdG9yIG5vIGxvbmdlciBuZWVkcyB0byBjb250aW51ZSBpdGVy
YXRpbmcuICBXaXRoIHRoaXMsIG15IGluc3RydW1lbnRlZAorICAgICAgICBWTSBpcyB1c2VmdWwg
YWdhaW4gZm9yIGRlYnVnZ2luZy4KKworICAgICAgICBTaW5jZSBoZWFwIGl0ZXJhdGlvbiBpcyBu
b3Qgc29tZXRoaW5nIHRoYXQgd2UgZG8gaW4gYSB0eXBpY2FsIGZhc3QgcGF0aCwKKyAgICAgICAg
SSBkb27igJl0IGV4cGVjdCB0aGlzIHRvIGhhdmUgYW55IG5vdGljZWFibGUgaW1wYWN0IG9uIHBl
cmZvcm1hbmNlLgorCisgICAgICAgIEkgYWxzbyByZW5hbWVkIE9iamVjdEFkZHJlc3NDaGVja0Z1
bmN0b3IgdG8gQ2VsbEFkZHJlc3NDaGVja0Z1bmN0b3Igc2luY2UKKyAgICAgICAgaXQgY2hlY2tz
IEpTQ2VsbCBhZGRyZXNzZXMsIG5vdCBqdXN0IEpTT2JqZWN0cy4KKworICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKiBoZWFwL0dDTG9nZ2luZy5jcHA6Cisg
ICAgICAgIChKU0M6OkxvZ2dpbmdGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBoZWFw
L0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpab21iaWZ5Ojp2aXNpdCk6CisgICAgICAgIChKU0M6
OlpvbWJpZnk6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3Bw
OgorICAgICAgICAoSlNDOjpTdG9yYWdlU3RhdGlzdGljczo6dmlzaXQpOgorICAgICAgICAoSlND
OjpTdG9yYWdlU3RhdGlzdGljczo6b3BlcmF0b3IoKSk6CisgICAgICAgICogaGVhcC9IZWFwVmVy
aWZpZXIuY3BwOgorICAgICAgICAoSlNDOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcjo6dmlzaXQpOgor
ICAgICAgICAoSlNDOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAg
ICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVk
RnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Zm9yRWFjaENlbGwpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6Zm9yRWFjaExpdmVDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmZv
ckVhY2hEZWFkQ2VsbCk6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRTcGFjZTo6Zm9yRWFjaExpdmVDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
U3BhY2U6OmZvckVhY2hEZWFkQ2VsbCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlUmVjb21waWxl
cjo6dmlzaXQpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlUmVjb21waWxlcjo6b3BlcmF0b3Io
KSk6CisgICAgICAgICogcnVudGltZS9JdGVyYXRpb25TdGF0dXMuaDogQWRkZWQuCisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXI6OnZpc2l0KToKKyAgICAg
ICAgKEpTQzo6U3RhY2tQcmVzZXJ2aW5nUmVjb21waWxlcjo6b3BlcmF0b3IoKSk6CisgICAgICAg
ICogdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkNlbGxBZGRy
ZXNzQ2hlY2tGdW5jdG9yOjpDZWxsQWRkcmVzc0NoZWNrRnVuY3Rvcik6CisgICAgICAgIChKU0M6
OkNlbGxBZGRyZXNzQ2hlY2tGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6SlNE
b2xsYXJWTVByb3RvdHlwZTo6aXNWYWxpZENlbGwpOgorICAgICAgICAoSlNDOjpPYmplY3RBZGRy
ZXNzQ2hlY2tGdW5jdG9yOjpPYmplY3RBZGRyZXNzQ2hlY2tGdW5jdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6T2JqZWN0QWRkcmVzc0NoZWNrRnVuY3Rvcjo6b3BlcmF0b3IoKSk6IERlbGV0
ZWQuCisKIDIwMTUtMDQtMjEgIEJhc2lsZSBDbGVtZW50ICA8YmFzaWxlX2NsZW1lbnRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFBoYW50b21OZXdPYmplY3Qgc2hvdWxkIGJlIG1hcmtlZCBOb2RlTXVz
dEdlbmVyYXRlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJl
dmlzaW9uIDE4MzA3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1MjEsNiAr
MTUyMSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50
ZXJuYWxGdW5jdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bnRyaW5zaWMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSXRlcmF0
aW9uU3RhdHVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEl0ZXJh
dG9yT3BlcmF0aW9ucy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U0FQSVZhbHVlV3JhcHBlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0xleGljYWxFbnZpcm9ubWVudC5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTgzMDcwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0yNjc4LDYgKzI2NzgsOSBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRyaW5zaWMuaCI+CiAgICAgICA8Rmls
dGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSXRlcmF0aW9uU3RhdHVzLmgiPgorICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEl0ZXJhdG9yT3BlcmF0aW9ucy5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE4MzA3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUwLDEy
ICsxNjUwLDEzIEBACiAJCUZFMEQ0QTA5MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250ZXh0
V2l0aEZpbmFsaXplclRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUwRDRBMDcxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRo
RmluYWxpemVyVGVzdC5jcHAgKi87IH07CiAJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBM
TEludENMb29wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLzsgfTsKIAkJ
RkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAv
KiBMTEludENMb29wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJRkU0QkZGMkIxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEJGRjI5
MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi87IH07Ci0JCUZFNEJG
RjJDMUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QkZGMkExQUQ0NzZFNzAwMDg4Rjg3
IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggKi87IH07CiAJCUZFMzg0RUU1MUFEREI3QUQwMDU1REUy
QyAvKiBKU0RvbGxhclZNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMzg0RUUxMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmNwcCAqLzsg
fTsKIAkJRkUzODRFRTYxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzg0RUUyMUFEREI3QUQwMDU1
REUyQyAvKiBKU0RvbGxhclZNLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRkUzODRFRTcxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUzODRFRTMxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuY3BwICovOyB9
OwogCQlGRTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzODRFRTQxQURE
QjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTRCRkYyQjFBRDQ3NkU3MDAwODhGODcg
LyogRnVuY3Rpb25PdmVycmlkZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU0QkZGMjkxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJp
ZGVzLmNwcCAqLzsgfTsKKwkJRkU0QkZGMkMxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3Zl
cnJpZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTRCRkYyQTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCAqLzsgfTsKKwkJ
RkU0RDU1QjgxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0RDU1QjcxQUU3MTZDQTAwNTJF
NDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFNTkzMkE3MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2Nv
cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1
OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi87IH07CiAJCUZFNTkz
MkE4MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBW
TUVudHJ5U2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGRTdCQTYwRjFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFN0JBNjBEMUExQTdD
RUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwICovOyB9OwpAQCAtMzQzOCwxMiArMzQzOSwx
MyBAQAogCQlGRTBENEEwODFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXJUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEdsb2JhbENvbnRl
eHRXaXRoRmluYWxpemVyVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0dsb2JhbENvbnRleHRXaXRo
RmluYWxpemVyVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1
RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAg
LyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludENM
b29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUZFNEJGRjI5MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbk92ZXJyaWRlcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFNEJGRjJBMUFENDc2RTcwMDA4OEY4
NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGdW5jdGlvbk92ZXJyaWRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTM4
NEVFMTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0RvbGxhclZNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEb2xsYXJWTS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTM4NEVFMzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3Rv
dHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RvbGxhclZN
UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzODRFRTQxQURE
QjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNEb2xsYXJWTVByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRTRCRkYyOTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25PdmVycmlk
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTRCRkYyQTFBRDQ3NkU3MDAw
ODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRnVuY3Rpb25PdmVycmlkZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRpb25TdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUVudHJ5U2NvcGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0Mg
LyogVk1FbnRyeVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNRW50
cnlTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTdCQTYwRDFBMUE3Q0VD
MDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhlYXBWZXJpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00NDQzLDYgKzQ0NDUsNyBAQAogCQkJCTg2QkY2NDJBMTQ4REIyQjUwMDRERTM2QSAvKiBJbnRy
aW5zaWMuaCAqLywKIAkJCQk3MDExM0Q0OTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVy
YXRpb25zLmNwcCAqLywKIAkJCQk3MDExM0Q0QTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JP
cGVyYXRpb25zLmggKi8sCisJCQkJRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlv
blN0YXR1cy5oICovLAogCQkJCTkzQURGQ0U2MENDQkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNw
cCAqLywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4NjM1Q0UgLyogSlNBcnJheS5oICovLAogCQkJ
CTBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLywKQEAgLTU1
NzYsNiArNTU3OSw3IEBACiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2Vt
Ymxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMjgxQUE5MDk1NjAwRDMzQjMzIC8qIFNj
b3BlZEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDMDYxMUYxQUE1MUUxQzAwQjRB
REJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTRENTVCODFBRTcxNkNB
MDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNDQyQ0Iy
NTFBNkNEQjhDMDA1RDNEN0MgLyogSlNJbnB1dHMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCTUy
Njc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMTgzMDcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDE0IEBA
IGNsYXNzIFJlY29tcGlsZXIgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlYKIHB1YmxpYzoKICAgICBS
ZWNvbXBpbGVyKEpTQzo6RGVidWdnZXIqKTsKICAgICB+UmVjb21waWxlcigpOwotICAgIHZvaWQg
b3BlcmF0b3IoKShKU0NlbGwqKTsKKyAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0b3IoKShKU0Nl
bGwqKTsKIAogcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hTZXQ8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4gRnVuY3Rpb25FeGVjdXRhYmxlU2V0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxTb3VyY2VQcm92
aWRlciosIEV4ZWNTdGF0ZSo+IFNvdXJjZVByb3ZpZGVyTWFwOwogICAgIAorICAgIHZvaWQgdmlz
aXQoSlNDZWxsKik7CisgICAgCiAgICAgSlNDOjpEZWJ1Z2dlciogbV9kZWJ1Z2dlcjsKICAgICBG
dW5jdGlvbkV4ZWN1dGFibGVTZXQgbV9mdW5jdGlvbkV4ZWN1dGFibGVzOwogICAgIFNvdXJjZVBy
b3ZpZGVyTWFwIG1fc291cmNlUHJvdmlkZXJzOwpAQCAtNjksNyArNzEsNyBAQCBpbmxpbmUgUmVj
b21waWxlcjo6flJlY29tcGlsZXIoKQogICAgICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJzZWQo
aXRlci0+dmFsdWUsIGl0ZXItPmtleSwgLTEsIFN0cmluZygpKTsKIH0KIAotaW5saW5lIHZvaWQg
UmVjb21waWxlcjo6b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCitpbmxpbmUgdm9pZCBSZWNvbXBp
bGVyOjp2aXNpdChKU0NlbGwqIGNlbGwpCiB7CiAgICAgaWYgKCFjZWxsLT5pbmhlcml0cyhKU0Z1
bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm47CkBAIC05Miw2ICs5NCwxMiBAQCBpbmxp
bmUgdm9pZCBSZWNvbXBpbGVyOjpvcGVyYXRvcigpKEpTQ2VsCiAgICAgICAgIG1fc291cmNlUHJv
dmlkZXJzLmFkZChleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBleGVjKTsKIH0KIAor
aW5saW5lIEl0ZXJhdGlvblN0YXR1cyBSZWNvbXBpbGVyOjpvcGVyYXRvcigpKEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICB2aXNpdChjZWxsKTsKKyAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0xvZ2dpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDTG9nZ2luZy5jcHAJKHJldmlzaW9uIDE4MzA3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDTG9nZ2luZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDEwICs2MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldml2ZUNlbGxzKCk7CiAgICAg
fQogCi0gICAgdm9pZCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKKyAgICBJdGVyYXRpb25TdGF0
dXMgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICBtX2xpdmVDZWxscy5h
cHBlbmQoY2VsbCk7CiAgICAgICAgIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+Y2xlYXJN
YXJrZWQoY2VsbCk7CisgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwog
ICAgIH0KIAogICAgIHZvaWQgbG9nKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAxODMwNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDEyICsyNDAsMTcgQEAgc3RhdGljIGlubGluZSBi
b29sIGlzVmFsaWRUaHJlYWRTdGF0ZShWTQogfQogCiBzdHJ1Y3QgTWFya09iamVjdCA6IHB1Ymxp
YyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwq
IGNlbGwpCisgICAgaW5saW5lIHZvaWQgdmlzaXQoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAg
ICAgaWYgKGNlbGwtPmlzWmFwcGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEhl
YXA6OmhlYXAoY2VsbCktPnNldE1hcmtlZChjZWxsKTsKICAgICB9CisgICAgSXRlcmF0aW9uU3Rh
dHVzIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgdmlzaXQoY2VsbCk7
CisgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgIH0KIH07CiAK
IHN0cnVjdCBDb3VudCA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Q291bnRGdW5jdG9yIHsKQEAgLTI1
MywxMyArMjU4LDE5IEBAIHN0cnVjdCBDb3VudCA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Q291bnQK
IH07CiAKIHN0cnVjdCBDb3VudElmR2xvYmFsT2JqZWN0IDogTWFya2VkQmxvY2s6OkNvdW50RnVu
Y3RvciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkgeworICAgIGlubGluZSB2
b2lkIHZpc2l0KEpTQ2VsbCogY2VsbCkKKyAgICB7CiAgICAgICAgIGlmICghY2VsbC0+aXNPYmpl
Y3QoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFhc09iamVjdChjZWxsKS0+
aXNHbG9iYWxPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY291bnQoMSk7
CiAgICAgfQorICAgIEl0ZXJhdGlvblN0YXR1cyBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKKyAg
ICB7CisgICAgICAgIHZpc2l0KGNlbGwpOworICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKKyAgICB9CiB9OwogCiBjbGFzcyBSZWNvcmRUeXBlIHsKQEAgLTI2Nyw3ICsy
NzgsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0
PiBSZXR1cm5UeXBlOwogCiAgICAgUmVjb3JkVHlwZSgpOwotICAgIHZvaWQgb3BlcmF0b3IoKShK
U0NlbGwqKTsKKyAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0b3IoKShKU0NlbGwqKTsKICAgICBS
ZXR1cm5UeXBlIHJldHVyblZhbHVlKCk7CiAKIHByaXZhdGU6CkBAIC0yODgsOSArMjk5LDEwIEBA
IGlubGluZSBjb25zdCBjaGFyKiBSZWNvcmRUeXBlOjp0eXBlTmFtZSgKICAgICByZXR1cm4gaW5m
by0+Y2xhc3NOYW1lOwogfQogCi1pbmxpbmUgdm9pZCBSZWNvcmRUeXBlOjpvcGVyYXRvcigpKEpT
Q2VsbCogY2VsbCkKK2lubGluZSBJdGVyYXRpb25TdGF0dXMgUmVjb3JkVHlwZTo6b3BlcmF0b3Io
KShKU0NlbGwqIGNlbGwpCiB7CiAgICAgbV90eXBlQ291bnRTZXQtPmFkZCh0eXBlTmFtZShjZWxs
KSk7CisgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiB9CiAKIGlubGluZSBz
dGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBSZWNvcmRUeXBlOjpyZXR1cm5WYWx1ZSgpCkBA
IC0xNDIyLDcgKzE0MzQsNyBAQCB2b2lkIEhlYXA6OmFkZENvbXBpbGVkQ29kZShFeGVjdXRhYmxl
QmFzCiAKIGNsYXNzIFpvbWJpZnkgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsK
IHB1YmxpYzoKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIGlubGluZSB2
b2lkIHZpc2l0KEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIHZvaWQqKiBjdXJyZW50ID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGNlbGwpOwogCkBAIC0xNDM1LDYgKzE0NDcsMTEgQEAg
cHVibGljOgogICAgICAgICBmb3IgKDsgY3VycmVudCA8IGxpbWl0OyBjdXJyZW50KyspCiAgICAg
ICAgICAgICAqY3VycmVudCA9IHpvbWJpZmllZEJpdHM7CiAgICAgfQorICAgIEl0ZXJhdGlvblN0
YXR1cyBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIHZpc2l0KGNlbGwp
OworICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICB9CiB9Owog
CiB2b2lkIEhlYXA6OnpvbWJpZnlEZWFkT2JqZWN0cygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuY3BwCShyZXZpc2lvbiAxODMwNzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFzcyBTdG9yYWdlU3RhdGlzdGljcyA6IHB1YmxpYyBN
YXJrZWRCCiBwdWJsaWM6CiAgICAgU3RvcmFnZVN0YXRpc3RpY3MoKTsKIAotICAgIHZvaWQgb3Bl
cmF0b3IoKShKU0NlbGwqKTsKKyAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0b3IoKShKU0NlbGwq
KTsKIAogICAgIHNpemVfdCBvYmplY3RXaXRoT3V0T2ZMaW5lU3RvcmFnZUNvdW50KCk7CiAgICAg
c2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzYsNiArMTc2LDggQEAgcHVibGljOgogICAgIHNp
emVfdCBzdG9yYWdlQ2FwYWNpdHkoKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEpTQ2Vs
bCopOworCiAgICAgc2l6ZV90IG1fb2JqZWN0V2l0aE91dE9mTGluZVN0b3JhZ2VDb3VudDsKICAg
ICBzaXplX3QgbV9vYmplY3RDb3VudDsKICAgICBzaXplX3QgbV9zdG9yYWdlU2l6ZTsKQEAgLTE5
MCw3ICsxOTIsNyBAQCBpbmxpbmUgU3RvcmFnZVN0YXRpc3RpY3M6OlN0b3JhZ2VTdGF0aXN0CiB7
CiB9CiAKLWlubGluZSB2b2lkIFN0b3JhZ2VTdGF0aXN0aWNzOjpvcGVyYXRvcigpKEpTQ2VsbCog
Y2VsbCkKK2lubGluZSB2b2lkIFN0b3JhZ2VTdGF0aXN0aWNzOjp2aXNpdChKU0NlbGwqIGNlbGwp
CiB7CiAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDks
NiArMjExLDEyIEBAIGlubGluZSB2b2lkIFN0b3JhZ2VTdGF0aXN0aWNzOjpvcGVyYXRvcigKICAg
ICBtX3N0b3JhZ2VDYXBhY2l0eSArPSBvYmplY3QtPnN0cnVjdHVyZSgpLT50b3RhbFN0b3JhZ2VD
YXBhY2l0eSgpICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pOyAKIH0KIAoraW5s
aW5lIEl0ZXJhdGlvblN0YXR1cyBTdG9yYWdlU3RhdGlzdGljczo6b3BlcmF0b3IoKShKU0NlbGwq
IGNlbGwpCit7CisgICAgdmlzaXQoY2VsbCk7CisgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6
Q29udGludWU7Cit9CisKIGlubGluZSBzaXplX3QgU3RvcmFnZVN0YXRpc3RpY3M6Om9iamVjdFdp
dGhPdXRPZkxpbmVTdG9yYWdlQ291bnQoKQogewogICAgIHJldHVybiBtX29iamVjdFdpdGhPdXRP
ZkxpbmVTdG9yYWdlQ291bnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
VmVyaWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBWZXJpZmllci5jcHAJKHJldmlzaW9uIDE4MzA3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBWZXJpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBA
QCBzdHJ1Y3QgR2F0aGVyTGl2ZU9iakZ1bmN0b3IgOiBNYXJrZWRCbG9jCiAgICAgICAgIEFTU0VS
VCghbGlzdC5saXZlT2JqZWN0cy5zaXplKCkpOwogICAgIH0KIAotICAgIHZvaWQgb3BlcmF0b3Io
KShKU0NlbGwqIGNlbGwpCisgICAgaW5saW5lIHZvaWQgdmlzaXQoSlNDZWxsKiBjZWxsKQogICAg
IHsKICAgICAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuOyAg
ICAgICAgCkBAIC0xMzAsNiArMTMwLDEyIEBAIHN0cnVjdCBHYXRoZXJMaXZlT2JqRnVuY3RvciA6
IE1hcmtlZEJsb2MKICAgICAgICAgbV9saXN0LmxpdmVPYmplY3RzLmFwcGVuZChkYXRhKTsKICAg
ICB9CiAKKyAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAg
eworICAgICAgICB2aXNpdChjZWxsKTsKKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6
Q29udGludWU7CisgICAgfQorCiAgICAgTGl2ZU9iamVjdExpc3QmIG1fbGlzdDsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9u
IDE4MzA3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU3LDEwICsxNTcsMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIEl0ZXJhdGlvblN0YXR1
cyBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIEFTU0VSVChNYXJrZWRC
bG9jazo6YmxvY2tGb3IoY2VsbCkgPT0gbV9ibG9jayk7CiAgICAgICAgIG1fYmxvY2stPnNldE5l
d2x5QWxsb2NhdGVkKGNlbGwpOworICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDE4MzA3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNp
bmNsdWRlICJIZWFwQmxvY2suaCIKIAogI2luY2x1ZGUgIkhlYXBPcGVyYXRpb24uaCIKKyNpbmNs
dWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJXZWFrU2V0LmgiCiAjaW5jbHVkZSA8
d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkBAIC0xNzksOSArMTgwLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZGlkUmV0aXJlQmxvY2soY29uc3QgRnJl
ZUxpc3QmKTsKICAgICAgICAgdm9pZCB3aWxsUmVtb3ZlQmxvY2soKTsKIAotICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2VsbChGdW5jdG9yJik7Ci0gICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlQ2VsbChGdW5j
dG9yJik7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hE
ZWFkQ2VsbChGdW5jdG9yJik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBJ
dGVyYXRpb25TdGF0dXMgZm9yRWFjaENlbGwoRnVuY3RvciYpOworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRnVuY3Rvcj4gSXRlcmF0aW9uU3RhdHVzIGZvckVhY2hMaXZlQ2VsbChGdW5jdG9y
Jik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBJdGVyYXRpb25TdGF0dXMg
Zm9yRWFjaERlYWRDZWxsKEZ1bmN0b3ImKTsKIAogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTWFya3MoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWFya2VkQmxvY2ssIG1fbWFy
a3MpOyB9CiAKQEAgLTQ0NCwzNCArNDQ1LDQwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBy
ZXR1cm4gaXNMaXZlKHN0YXRpY19jYXN0PGNvbnN0IEpTQ2VsbCo+KHApKTsKICAgICB9CiAKLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OmZv
ckVhY2hDZWxsKEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+IGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2VkQmxvY2s6OmZvckVhY2hDZWxsKEZ1bmN0
b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7
IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEpTQ2VsbCo+KCZhdG9tcygpW2ldKTsKLSAg
ICAgICAgICAgIGZ1bmN0b3IoY2VsbCk7CisgICAgICAgICAgICBpZiAoZnVuY3RvcihjZWxsKSA9
PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlv
blN0YXR1czo6RG9uZTsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5s
aW5lIHZvaWQgTWFya2VkQmxvY2s6OmZvckVhY2hMaXZlQ2VsbChGdW5jdG9yJiBmdW5jdG9yKQor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1h
cmtlZEJsb2NrOjpmb3JFYWNoTGl2ZUNlbGwoRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0
b21zUGVyQ2VsbCkgewogICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8SlNDZWxsKj4oJmF0b21zKClbaV0pOwogICAgICAgICAgICAgaWYgKCFpc0xpdmUoY2Vs
bCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGZ1bmN0b3IoY2Vs
bCk7CisgICAgICAgICAgICBpZiAoZnVuY3RvcihjZWxsKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRv
bmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKICAgICAg
ICAgfQorICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6
OmZvckVhY2hEZWFkQ2VsbChGdW5jdG9yJiBmdW5jdG9yKQorICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdG9yPiBpbmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpmb3JFYWNoRGVh
ZENlbGwoRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBm
aXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewogICAgICAg
ICAgICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SlNDZWxsKj4oJmF0b21z
KClbaV0pOwogICAgICAgICAgICAgaWYgKGlzTGl2ZShjZWxsKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICAgICAgZnVuY3RvcihjZWxsKTsKKyAgICAgICAgICAgIGlmIChm
dW5jdG9yKGNlbGwpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOwogICAgICAgICB9CisgICAgICAgIHJldHVybiBJ
dGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgIH0KIAogICAgIGlubGluZSBib29sIE1hcmtl
ZEJsb2NrOjpuZWVkc1N3ZWVwaW5nKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTgzMDcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDggKzE3OSwxMCBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hCiB7CiAgICAgQVNTRVJUKGlz
SXRlcmF0aW5nKCkpOwogICAgIEJsb2NrSXRlcmF0b3IgZW5kID0gbV9ibG9ja3Muc2V0KCkuZW5k
KCk7Ci0gICAgZm9yIChCbG9ja0l0ZXJhdG9yIGl0ID0gbV9ibG9ja3Muc2V0KCkuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+Zm9yRWFjaExpdmVDZWxsKGZ1bmN0b3Ip
OworICAgIGZvciAoQmxvY2tJdGVyYXRvciBpdCA9IG1fYmxvY2tzLnNldCgpLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPmZvckVhY2hMaXZlQ2VsbChmdW5j
dG9yKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CiAgICAgcmV0dXJuIGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKIH0KIApAQCAtMTk0LDggKzE5Niwx
MCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hCiB7CiAgICAgQVNT
RVJUKGlzSXRlcmF0aW5nKCkpOwogICAgIEJsb2NrSXRlcmF0b3IgZW5kID0gbV9ibG9ja3Muc2V0
KCkuZW5kKCk7Ci0gICAgZm9yIChCbG9ja0l0ZXJhdG9yIGl0ID0gbV9ibG9ja3Muc2V0KCkuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+Zm9yRWFjaERlYWRDZWxsKGZ1
bmN0b3IpOworICAgIGZvciAoQmxvY2tJdGVyYXRvciBpdCA9IG1fYmxvY2tzLnNldCgpLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPmZvckVhY2hEZWFkQ2Vs
bChmdW5jdG9yKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CiAgICAgcmV0dXJuIGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCShyZXZpc2lvbiAxODMwNzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmdldFJ1bnRpbWVUeQogCiBjbGFzcyBUeXBlUmVjb21waWxlciA6IHB1YmxpYyBNYXJr
ZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewogcHVibGljOgotICAgIGlubGluZSB2b2lkIG9wZXJhdG9y
KCkoSlNDZWxsKiBjZWxsKQorICAgIGlubGluZSB2b2lkIHZpc2l0KEpTQ2VsbCogY2VsbCkKICAg
ICB7CiAgICAgICAgIGlmICghY2VsbC0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZv
KCkpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzE4LDYgKzMxOCwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIGV4ZWN1dGFibGUtPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgICAgIGV4
ZWN1dGFibGUtPmNsZWFyVW5saW5rZWRDb2RlRm9yUmVjb21waWxhdGlvbklmTm90Q29tcGlsaW5n
KCk7CiAgICAgfQorICAgIGlubGluZSBJdGVyYXRpb25TdGF0dXMgb3BlcmF0b3IoKShKU0NlbGwq
IGNlbGwpCisgICAgeworICAgICAgICB2aXNpdChjZWxsKTsKKyAgICAgICAgcmV0dXJuIEl0ZXJh
dGlvblN0YXR1czo6Q29udGludWU7CisgICAgfQogfTsKIAogc3RhdGljIHZvaWQgcmVjb21waWxl
QWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmlsaW5nKFZNJiB2bSwgYm9vbCBzaG91bGRFbmFibGVU
eXBlUHJvZmlsaW5nKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0
aW9uU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SXRlcmF0aW9uU3RhdHVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRpb25TdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
dGVyYXRpb25TdGF0dXNfaAorI2RlZmluZSBJdGVyYXRpb25TdGF0dXNfaAorCituYW1lc3BhY2Ug
SlNDIHsKKworZW51bSBjbGFzcyBJdGVyYXRpb25TdGF0dXMgeworICAgIENvbnRpbnVlLAorICAg
IERvbmUKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSXRlcmF0aW9uU3Rh
dHVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHJldmlzaW9uIDE4MzA3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM5LDkgKzUzOSwx
MSBAQCBuYW1lc3BhY2UgewogY2xhc3MgT2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0ZpbmRlciA6
IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewogcHVibGljOgogICAgIE9iamVjdHNX
aXRoQnJva2VuSW5kZXhpbmdGaW5kZXIoTWFya2VkQXJndW1lbnRCdWZmZXImLCBKU0dsb2JhbE9i
amVjdCopOwotICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqKTsKKyAgICBJdGVyYXRpb25TdGF0
dXMgb3BlcmF0b3IoKShKU0NlbGwqKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEpTQ2Vs
bCopOworCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXImIG1fZm91bmRPYmplY3RzOwogICAgIEpT
R2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKIH07CkBAIC01NjIsNyArNTY0LDcgQEAgaW5s
aW5lIGJvb2wgaGFzQnJva2VuSW5kZXhpbmcoSlNPYmplY3QqIAogICAgIHJldHVybiBoYXNVbmRl
Y2lkZWQodHlwZSkgfHwgaGFzSW50MzIodHlwZSkgfHwgaGFzRG91YmxlKHR5cGUpIHx8IGhhc0Nv
bnRpZ3VvdXModHlwZSkgfHwgaGFzQXJyYXlTdG9yYWdlKHR5cGUpOwogfQogCi12b2lkIE9iamVj
dHNXaXRoQnJva2VuSW5kZXhpbmdGaW5kZXI6Om9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQoraW5s
aW5lIHZvaWQgT2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0ZpbmRlcjo6dmlzaXQoSlNDZWxsKiBj
ZWxsKQogewogICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NTk0LDYgKzU5NiwxMiBAQCB2b2lkIE9iamVjdHNXaXRoQnJva2VuSW5kZXhpbmdGaW5kZXI6Om9w
CiAgICAgbV9mb3VuZE9iamVjdHMuYXBwZW5kKG9iamVjdCk7CiB9CiAKK0l0ZXJhdGlvblN0YXR1
cyBPYmplY3RzV2l0aEJyb2tlbkluZGV4aW5nRmluZGVyOjpvcGVyYXRvcigpKEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICB2aXNpdChjZWxsKTsKKyAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKK30KKwogfSAvLyBlbmQgcHJpdmF0ZSBuYW1lc3BhY2UgZm9yIGhlbHBlcnMgZm9yIEpT
R2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoKQogCiB2b2lkIEpTR2xvYmFsT2JqZWN0OjpoYXZl
QUJhZFRpbWUoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
cmV2aXNpb24gMTgzMDcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNyArNDkxLDcgQEAgdm9pZCBWTTo6Y2xlYXJTb3VyY2VQ
cm92aWRlckNhY2hlcygpCiAKIHN0cnVjdCBTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyIDogcHVi
bGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CiAgICAgSGFzaFNldDxGdW5jdGlvbkV4ZWN1
dGFibGUqPiBjdXJyZW50bHlFeGVjdXRpbmdGdW5jdGlvbnM7Ci0gICAgdm9pZCBvcGVyYXRvcigp
KEpTQ2VsbCogY2VsbCkKKyAgICBpbmxpbmUgdm9pZCB2aXNpdChKU0NlbGwqIGNlbGwpCiAgICAg
ewogICAgICAgICBpZiAoIWNlbGwtPmluaGVyaXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygp
KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTUwMCw2ICs1MDAsMTEgQEAgc3RydWN0IFN0YWNr
UHJlc2VydmluZ1JlY29tcGlsZXIgOiBwdWJsaQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBleGVjdXRhYmxlLT5jbGVhckNvZGVJZk5vdENvbXBpbGluZygpOwogICAgIH0KKyAgICBJdGVy
YXRpb25TdGF0dXMgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICB2aXNp
dChjZWxsKTsKKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAg
fQogfTsKIAogdm9pZCBWTTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMTgzMDcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFy
Vk1Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsMTYgKzE1MiwxOSBAQCBib29s
IEpTRG9sbGFyVk1Qcm90b3R5cGU6OmlzSW5TdG9yYWdlU3BhCiAgICAgcmV0dXJuIGhlYXAtPnN0
b3JhZ2VTcGFjZSgpLmNvbnRhaW5zKGNhbmRpZGF0ZSk7CiB9CiAKLXN0cnVjdCBPYmplY3RBZGRy
ZXNzQ2hlY2tGdW5jdG9yIDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7Ci0gICAgT2JqZWN0
QWRkcmVzc0NoZWNrRnVuY3RvcihKU0NlbGwqIGNhbmRpZGF0ZSkKK3N0cnVjdCBDZWxsQWRkcmVz
c0NoZWNrRnVuY3RvciA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgeworICAgIENlbGxBZGRy
ZXNzQ2hlY2tGdW5jdG9yKEpTQ2VsbCogY2FuZGlkYXRlKQogICAgICAgICA6IGNhbmRpZGF0ZShj
YW5kaWRhdGUpCiAgICAgewogICAgIH0KIAotICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqIGNl
bGwpCisgICAgSXRlcmF0aW9uU3RhdHVzIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQogICAgIHsK
LSAgICAgICAgaWYgKGNlbGwgPT0gY2FuZGlkYXRlKQorICAgICAgICBpZiAoY2VsbCA9PSBjYW5k
aWRhdGUpIHsKICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBJ
dGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlv
blN0YXR1czo6Q29udGludWU7CiAgICAgfQogCiAgICAgSlNDZWxsKiBjYW5kaWRhdGU7CkBAIC0x
NzEsNyArMTc0LDcgQEAgc3RydWN0IE9iamVjdEFkZHJlc3NDaGVja0Z1bmN0b3IgOiBNYXJrZQog
Ym9vbCBKU0RvbGxhclZNUHJvdG90eXBlOjppc1ZhbGlkQ2VsbChIZWFwKiBoZWFwLCBKU0NlbGwq
IGNhbmRpZGF0ZSkKIHsKICAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaXRlcmF0aW9uU2NvcGUoKmhl
YXApOwotICAgIE9iamVjdEFkZHJlc3NDaGVja0Z1bmN0b3IgZnVuY3RvcihjYW5kaWRhdGUpOwor
ICAgIENlbGxBZGRyZXNzQ2hlY2tGdW5jdG9yIGZ1bmN0b3IoY2FuZGlkYXRlKTsKICAgICBoZWFw
LT5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgZnVuY3Rvcik7
CiAgICAgcmV0dXJuIGZ1bmN0b3IuZm91bmQ7CiB9Cg==
</data>
<flag name="review"
          id="276067"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>